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