137 lines
4.9 KiB
PHP
137 lines
4.9 KiB
PHP
<?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>
|