2018-01-28 18:40:49 +02:00
< ? php
2018-12-10 18:39:09 +02:00
require_once ( " config.php " );
2018-01-28 18:40:49 +02:00
2019-02-16 02:00:25 +02:00
$password = password_hash ( filter_input ( INPUT_POST , 'psw' ), PASSWORD_DEFAULT );
2018-01-28 18:40:49 +02:00
function mail_send ( $to , $from_user , $from_email , $subject = '(No subject)' , $message = '' )
{
2018-12-10 18:15:11 +02:00
$from_user = " =?UTF-8?B? " . base64_encode ( $from_user ) . " ?= " ;
$subject = " =?UTF-8?B? " . base64_encode ( $subject ) . " ?= " ;
2018-01-28 18:40:49 +02:00
2018-12-10 18:15:11 +02:00
$headers = " From: $from_user < $from_email > \r \n " .
2018-01-28 18:40:49 +02:00
" MIME-Version: 1.0 " . " \r \n " .
" Content-type: text/html; charset=UTF-8 " . " \r \n " ;
return mail ( $to , $subject , $message , $headers );
}
2019-02-16 02:04:43 +02:00
$login = filter_input ( INPUT_POST , 'loginid' , FILTER_SANITIZE_SPECIAL_CHARS );
2018-01-28 18:40:49 +02:00
//TODO Сделать всё нормальным человеческим способом, как у белых людей. Сброс пароля генерирует ссылку на почту, ссылка на почте разрешает одноразовую смену пароля.
if ( $login ) {
2019-02-16 02:00:25 +02:00
$sql = db :: c () -> query ( 'SELECT `email` FROM `users` WHERE `login` = "?s"' , $login ) -> fetch_assoc ();
$password = bin2hex ( random_bytes ( 8 ));
$passwordHashed = password_hash ( $password , PASSWORD_DEFAULT );
2018-12-10 18:20:34 +02:00
$lasttime = date ( 'Y-m-d' , strtotime ( '+1days' ));
2018-01-28 18:40:49 +02:00
$ip = $_SERVER [ 'REMOTE_ADDR' ];
2019-02-16 02:00:25 +02:00
if ( db :: c () -> query ( 'INSERT INTO `confirmpasswd` (`login`, hash, `date`, `ip`) VALUES ("?s", "?s", "?s", "?s")' , $login , $passwordHashed , $lasttime , $ip )) {
2018-01-28 18:40:49 +02:00
$message = " Здравствуйте!<br><br>
2019-02-16 02:00:25 +02:00
Кто-то запросил восстановление пароля к вашему персонажу " . $login . " .<br>
Ваш новый пароль: " . $password . " .<br><br>
2018-01-28 18:40:49 +02:00
Для подтверждения нового пароля пройдите по
2019-02-16 02:00:25 +02:00
<a href=' " . GAMEDOMAIN . " /rememberpassword.php?change= " . $passwordHashed . " '> данной ссылке</a>.<br><br>
2018-12-10 18:15:11 +02:00
Ссылка будет действовать до <em> " . date ( 'd-M-Y' , $lasttime ) . " </em>.
2018-01-28 18:40:49 +02:00
" ;
2018-12-10 18:15:11 +02:00
if ( mail_send ( $sql [ 'email' ], " Noreply " , " noreply@ " . GAMEDOMAIN , " Восстановление забытого пароля " , $message )) {
$statusMessage = 'Письмо отправлено.' ;
} else $statusMessage = 'Ошибка: письмо не отправлено!' ;
} else $statusMessage = 'Ошибка: имя пользователя не существует!' ;
2018-01-28 18:40:49 +02:00
}
2018-12-10 18:15:11 +02:00
2018-12-10 18:37:50 +02:00
$realtime = ( int ) mktime ( date ( 'H i s m d Y' ));
2019-02-16 02:00:25 +02:00
$passwd = filter_input ( INPUT_GET , 'change' );
if ( $passwd ) {
$sql2 = db :: c () -> query ( 'SELECT `login`,`date` FROM `confirmpasswd` WHERE hash = "?s"' , $passwd );
if ( $sql2 -> getNumRows () == 0 ) die ( " Ссылка устарела! " );
$sql2 = $sql2 -> fetch_assoc ();
db :: c () -> query ( 'UPDATE `users` SET `pass` = "?s" WHERE `login` = "?s"' , $passwd , $sql2 [ 'login' ]);
db :: c () -> query ( 'DELETE FROM `confirmpasswd` WHERE `hash` = "?s"' , $passwd );
$statusMessage = 'Пароль изменён!' ;
2018-12-10 18:37:50 +02:00
}
2018-01-28 18:40:49 +02:00
?>
<!DOCTYPE html>
<html lang="ru_RU">
<head>
<meta charset="utf-8">
2018-12-10 18:15:11 +02:00
<link href="css/main.css" rel="stylesheet"/>
2018-01-28 18:40:49 +02:00
<title>Восстановление пароля</title>
</head>
<body>
2018-12-10 18:15:11 +02:00
<a href="/"> ← на главную</a>
<?php if (!empty($statusMessage)): ?>
<h3><?php echo $statusMessage; ?></h3>
2018-01-28 18:40:49 +02:00
<?php endif; ?>
2018-12-10 18:15:11 +02:00
<h1>Восстановление пароля</h1>
2018-12-10 18:37:50 +02:00
<p>Для восстановления пароля введите свой login и нажмите кнопку «Отправить письмо».<br>
2018-12-10 18:15:11 +02:00
Письмо будет выслано на email адрес, указанный вами при регистрации.<br>
2018-12-10 18:37:50 +02:00
Восстанавливать пароль можно только раз в сутки.</p>
2018-12-10 18:15:11 +02:00
<form method="post">
<input required name="loginid" placeholder="Имя персонажа" value="<?= $login ?>"><br>
<input type=submit>
2018-01-28 18:40:49 +02:00
</form>
</body>
</html>