Files
AtomicOld/password.php

137 lines
4.9 KiB
PHP
Raw Permalink Normal View History

2026-02-14 19:34:54 +03:00
<?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>