diff --git a/rememberpassword.php b/rememberpassword.php index 7b18c50..6869e63 100644 --- a/rememberpassword.php +++ b/rememberpassword.php @@ -1,6 +1,12 @@ query('SELECT `email` FROM `users` WHERE `login` = "?s"', $login)->fetch_assoc(); - $hash = bin2hex(random_bytes(8)); - $lasttime = date('Y-m-d', strtotime('+1days')); - $ip = $_SERVER['REMOTE_ADDR']; - - if (db::c()->query('INSERT INTO `confirmpasswd` (`login`, hash, `date`, `ip`) VALUES ("?s", "?s", "?s", "?s")', $login, $hash, $lasttime, $ip)) { - $message = "Здравствуйте!

+ $recovery = db::c()->query('SELECT 1 FROM users_recovery WHERE login = "?s"', $login); + if ($recovery->getNumRows()) { + $sql = db::c()->query('SELECT email FROM users WHERE login = "?s"', $login)->fetch_assoc(); + if ($sql) { + $hash = bin2hex(random_bytes(8)); + $lasttime = date('Y-m-d', strtotime('+1days')); + $ip = $_SERVER['REMOTE_ADDR']; + db::c()->query('INSERT INTO users_recovery (login, hash, ip, date) VALUES ("?s", "?s", "?s", "?s")', $login, $hash, $lasttime, $ip); + $message = "Здравствуйте!

Кто-то запросил восстановление пароля к вашему персонажу " . $login . ".

Для смены пароля пройдите по данной ссылке.

Ссылка будет действовать до " . date('d-M-Y', $lasttime) . ". "; - if (mail_send($sql['email'], "Noreply", "noreply@" . GAMEDOMAIN, "Восстановление забытого пароля", $message)) { - $statusMessage = 'Письмо отправлено.'; - } else $statusMessage = 'Ошибка: письмо не отправлено!'; - } else $statusMessage = 'Ошибка: имя пользователя не существует!'; + if (mail_send($sql['email'], "Noreply", "noreply@" . GAMEDOMAIN, "Восстановление забытого пароля", $message)) { + $statusMessage = OK_MAIL_SENT; + } else { + $statusMessage = ERROR_MAIL_NOT_SENT; + } + } else { + $statusMessage = ERROR_NO_SUCH_USER; + } + } else { + $statusMessage = ERROR_TOO_MANY_TRIES; + } } $allowChange = false; $changePassword = filter_input(INPUT_GET, 'change'); if ($changePassword) { - if (db::c()->query('SELECT 1 FROM `confirmpasswd` WHERE `hash` = "?s" AND `date` < "?s"', $changePassword, date('Y-m-d'))->getNumRows()) + if (db::c()->query('SELECT 1 FROM users_recovery WHERE `hash` = "?s" AND `date` < "?s"', $changePassword, date('Y-m-d'))->getNumRows()) { $allowChange = true; - else $statusMessage = 'Ошибка: ссылка устарела!'; + } + else { + $statusMessage = ERROR_OLD_HASH; + } } -if (!empty($_POST['newpasswd']) AND !empty($_POST['hashcheck'])) { - $query = db::c()->query('SELECT `login` FROM `confirmpasswd` WHERE hash = "?s"', $_POST['hashcheck']); +if (!empty($_POST['newpasswd']) && !empty($_POST['hashcheck'])) { + $query = db::c()->query('SELECT login FROM users_recovery WHERE hash = "?s"', $_POST['hashcheck']); if ($query->getNumRows()) { $query->fetch_assoc(); $passwordHashed = password_hash($_POST['newpasswd'], PASSWORD_DEFAULT); - db::c()->query('UPDATE `users` SET `pass` = "?s" WHERE `login` = "?s"', $passwordHashed, $query['login']); - db::c()->query('DELETE FROM `confirmpasswd` WHERE `hash` = "?s"', $_POST['hashcheck']); - $statusMessage = 'Пароль изменен!'; - } else $statusMessage = 'Ошибка: неверная ссылка!'; - + db::c()->query('UPDATE users SET pass = "?s" WHERE login = "?s"', $passwordHashed, $query['login']); + db::c()->query('DELETE FROM confirmpasswd WHERE hash = "?s"', $_POST['hashcheck']); + $statusMessage = OK_PASSWORD_CHANGED; + } else { + $statusMessage = ERROR_WRONG_HASH; + } } ?>