Init
This commit is contained in:
136
password.php
Normal file
136
password.php
Normal file
@@ -0,0 +1,136 @@
|
||||
<?php
|
||||
session_start();
|
||||
?>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>Восстановления пароля администратора</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
|
||||
<meta http-equiv="Content-Language" content="ru" />
|
||||
</head>
|
||||
<style>
|
||||
h1{font-size:26px; font-weight:normal}
|
||||
p{font-size:19px;}
|
||||
input{font-size:18px;}
|
||||
p.error{color:red;}
|
||||
div.maindiv{width: 600px; height: 300px; position: relative; left: 50%; top: 100px; margin-left: -300px; }
|
||||
</style>
|
||||
<body>
|
||||
<div style='width:100%; height:100%;'>
|
||||
<div class="maindiv">
|
||||
|
||||
<?php
|
||||
require_once('api/Simpla.php');
|
||||
$simpla = new Simpla();
|
||||
|
||||
// Если пришли по ссылке из письма
|
||||
if($c = $simpla->request->get('code'))
|
||||
{
|
||||
// Код не совпадает - прекращяем работу
|
||||
if(empty($_SESSION['admin_password_recovery_code']) || empty($c) || $_SESSION['admin_password_recovery_code'] !== $c)
|
||||
{
|
||||
header('Location:password.php');
|
||||
exit();
|
||||
}
|
||||
|
||||
// IP не совпадает - прекращяем работу
|
||||
if(empty($_SESSION['admin_password_recovery_ip'])|| empty($_SERVER['REMOTE_ADDR']) || $_SESSION['admin_password_recovery_ip'] !== $_SERVER['REMOTE_ADDR'])
|
||||
{
|
||||
header('Location:password.php');
|
||||
exit();
|
||||
}
|
||||
|
||||
// Если запостили пароль
|
||||
if($new_password = $simpla->request->post('new_password'))
|
||||
{
|
||||
// Файл с паролями
|
||||
$passwd_file = $simpla->config->root_dir.'simpla/.passwd';
|
||||
|
||||
// Удаляем из сесси код, чтобы больше никто не воспользовался ссылкой
|
||||
unset($_SESSION['admin_password_recovery_code']);
|
||||
unset($_SESSION['admin_password_recovery_ip']);
|
||||
|
||||
// Если в файлы запрещена запись - предупреждаем об этом
|
||||
if(!is_writable($passwd_file))
|
||||
{
|
||||
print "
|
||||
<h1>Восстановление пароля администратора</h1>
|
||||
<p class='error'>
|
||||
Файл /simpla/.passwd недоступен для записи.
|
||||
</p>
|
||||
<p>Вам нужно зайти по FTP и изменить права доступа к этому файлу, после чего повторить процедуру восстановления пароля.</p>
|
||||
";
|
||||
}
|
||||
else
|
||||
{
|
||||
// Новый логин и пароль
|
||||
$new_login = $simpla->request->post('new_login');
|
||||
$new_password = $simpla->request->post('new_password');
|
||||
if(!$simpla->managers->update_manager($new_login, array('password'=>$new_password)))
|
||||
$simpla->managers->add_manager(array('login'=>$new_login, 'password'=>$new_password));
|
||||
|
||||
print "
|
||||
<h1>Восстановление пароля администратора</h1>
|
||||
<p>
|
||||
Новый пароль установлен
|
||||
</p>
|
||||
<p>
|
||||
<a href='".$simpla->root_url."/simpla/index.php?module=ManagersAdmin'>Перейти в панель управления</a>
|
||||
</p>
|
||||
";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Форма указалия нового логина и пароля
|
||||
print "
|
||||
<h1>Восстановление пароля администратора</h1>
|
||||
<p>
|
||||
<form method=post>
|
||||
Новый логин:<br><input type='text' name='new_login'><br><br>
|
||||
Новый пароль:<br><input type='password' name='new_password'><br><br>
|
||||
<input type='submit' value='Сохранить логин и пароль'>
|
||||
</form>
|
||||
</p>
|
||||
";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
print "
|
||||
<h1>Восстановление пароля администратора</h1>
|
||||
<p>
|
||||
Введите email администратора
|
||||
<form method='post' action='".$simpla->root_url."/password.php'>
|
||||
<input type='text' name='email'>
|
||||
<input type='submit' value='Восстановить пароль'>
|
||||
</form>
|
||||
</p>
|
||||
";
|
||||
|
||||
$admin_email = $simpla->settings->admin_email;
|
||||
|
||||
if(isset($_POST['email']))
|
||||
{
|
||||
if($_POST['email'] === $admin_email)
|
||||
{
|
||||
$code = $simpla->config->token(mt_rand(1, mt_getrandmax()).mt_rand(1, mt_getrandmax()).mt_rand(1, mt_getrandmax()));
|
||||
$_SESSION['admin_password_recovery_code'] = $code;
|
||||
$_SESSION['admin_password_recovery_ip'] = $_SERVER['REMOTE_ADDR'];
|
||||
|
||||
$message = 'Вы или кто-то другой запросил ссылку на восстановление пароля администратора.<br>';
|
||||
$message .= 'Для смены пароля перейдите по ссылке '.$simpla->config->root_url.'/password.php?code='.$code.'<br>';
|
||||
$message .= 'Если письмо пришло вам по ошибке, проигнорируйте его.';
|
||||
|
||||
$simpla->notify->email($admin_email, 'Восстановление пароля администратора '.$simpla->settings->site_name, $message, $simpla->settings->notify_from_email);
|
||||
}
|
||||
print "Вам отправлена ссылка для восстановления пароля. Если письмо вам не пришло, значит вы неверно указали email или что-то не так с хостингом";
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user