Файл: core/modules/forgot.php
Строк: 133
<?php
if (!defined('CMS')) { die('Access Denied!'); }
$_SESSION['captcha_key'] = !empty($_SESSION['captcha_key']) ? $_SESSION['captcha_key'] : NULL;
$_SESSION['captcha_failures'] = !empty($_SESSION['captcha_failures']) ? $_SESSION['captcha_failures'] : 0;
if (!$is_logged) {
if (!empty($_GET['login']) && !empty($_GET['lostkey'])) {
$row = $db->selectRow("SELECT * FROM ?_users WHERE `users_login` = ? LIMIT 1;", check($_GET['login']));
if (!empty($row)) {
if (!empty($row['users_keypasswd'])) {
if ($row['users_keypasswd'] == $_GET['lostkey']) {
$newps = random_string(10);
$md5ps = md5(md5($newps));
if ( $db->query( "UPDATE ?_users SET `users_pass` = ?, `users_keypasswd` = ?, `users_timepasswd` = ?
WHERE `users_login` = ?;", $md5ps, '', 0, check($_GET['login'])) ) {
$auto = $config['site_url'] . '/' . gen_uri('login', '', 'login=' . $row['users_login'] . '&pass=' . $newps);
SendMail($row['users_email'], $row['users_login'], 'Восстановление пароля на сайте ' . $config['site_name'], "Здравствуйте, " . nickname($row['users_login']) . " nВаши новые данные для входа на на сайт " . $config['site_name'] . "rnЛогин: " . $row['users_login'] . " nПароль: " . $newps . " nnЗапомните и постарайтесь больше не забывать данные, а лучше сделайте сразу закладку на наш сайт n" . $auto . " nПароль вы сможете поменять в своем профиле nВсего наилучшего!rnС уважением,rnАдминистрация " . $config['site_name'] . "rn");
show_header('Восстановление пароля', '', '', 'Пароль успешно восстановлен!');
echo '<div class="bl">';
echo 'Ваши новые данные для входа на сайт<br /><br />';
echo '- Логин: <b>' . $row['users_login'] . '</b><br />';
echo '- Пароль: <b>' . $newps . '</b><br /><br />';
echo icon('site.png');
echo '<a href="' . $auto . '" title="Вход на сайт"><b>Вход на сайт</b></a><br /><br />';
echo 'Запомните и постарайтесь больше не забывать данные, а лучше сделайте сразу закладку на наш сайт ' . $auto . '<br /></div>';
show_footer();
exit;
}
else {
$inSes->addMessage('Произошла Ошибка! По техническим причинам пароль не может быть восстановлен! Если ошибка повторится, сообщите об этом администрации сайта.');
gen_red('forgot', '', RND);
}
}
else {
$inSes->addMessage('Ошибка! Пользователь с таким именем не запрашивал восстановление пароля, либо данная ссылка уже устарела. Допускается только одна попытка восстановления пароля по отправленной вам на e-mail ссылке. После чего вы должны повторно запрашивать восстановление пароля!');
gen_red('forgot', '', RND);
}
}
else {
$inSes->addMessage('Ошибка! Пользователь с таким именем не запрашивал восстановление пароля, либо данная ссылка уже устарела. Допускается только одна попытка восстановления пароля по отправленной вам на e-mail ссылке. После чего вы должны повторно запрашивать восстановление пароля!');
gen_red('forgot', '', RND);
}
}
else {
$inSes->addMessage('Ошибка! Пользователь с данным логином не зарегестрирован!');
gen_red('forgot', '', RND);
}
}
else if (!empty($_POST['submit'])) {
$error = '';
$code = !empty($_POST['code']) ? check($_POST['code']) : '';
if (empty($_GET['rnd']) || $_GET['rnd'] <> $_SESSION['token']) {
$error = 'Ошибка! Неверный идентификатор сессии, повторите действие!';
}
else if ( empty($_POST['lostname']) ) {
$error = 'Ошибка! Вы не ввели свой логин для восстановления пароля!';
}
else if ( preg_match( "/[||'|<|>|[|]|"|!|?|$|/|\|&~*{+]/", $_POST['lostname'] ) ) {
$error = 'Ошибка! Вы используете недопустимое имя!';
}
else if ( $_SESSION['captcha_key'] === NULL || $_SESSION['captcha_key'] != $code ) {
$error = 'Ошибка! Проверочное число не совпало с данными на картинке!';
if ( ++$_SESSION['captcha_failures'] == 3 ) {
$error .= '<br /> - Вы ввели несколько раз подряд неверный проверочный код! Сгенерирован новый!';
$_SESSION['captcha_key'] = NULL;
$_SESSION['captcha_failures'] = 0;
}
}
else $error = '';
if (!empty($error)) {
$inSes->addMessage( $error, 'error' );
gen_red('forgot', '', RND);
}
else {
$lostname = check( $_POST['lostname'] );
if ( @count(explode('@', $lostname)) == 2 ) {
$row = $db->selectRow( "SELECT * FROM ?_users
WHERE `users_email` = ? LIMIT 0,1", $lostname );
$err = 'адресом почтового ящика';
}
else {
$row = $db->selectRow( "SELECT * FROM ?_users
WHERE `users_login` = ? LIMIT 0,1", $lostname );
$err = 'логином';
}
if (!empty($row)) {
if (!empty($row['users_email'])) {
if ($row['users_timepasswd'] < SITE_TIME) {
$lostid = $row['users_id'];
$lostname = $row['users_login'];
$lostmail = $row['users_email'];
$lostkey = sha1( md5( $lostname . $lostmail ) . time() . mt_rand(1,9) );
if ( strlen($lostkey) != 40 ) die ("US Secure Hash Algorithm 1 (SHA1) disabled by Hosting");
$lostkey = cms_substr($lostkey, 0, 19); // макс. в бд 20
$lostlink = $config['site_url'] . '/' . gen_uri('forgot', '', 'login=' . $lostname . '&lostkey=' . $lostkey);
$losttext = "Уважаемый {$lostname},rnrnВы сделали запрос на получение забытого пароля на сайте {$config['site_url']}.rnОднако в целях безопасности все пароли хранятся в зашифрованном виде, поэтому мы не можем сообщить вам ваш старый пароль, поэтому если вы хотите сгенерировать новый пароль, зайдите по следующей ссылке: rnrn{$lostlink}rnrnЕсли это письмо попало к вам по ошибке или вы не собираетесь восстанавливать пароль, то просто удалите его.rnrnДанные отправителя: nIp: {$ip}nБраузер: {$brow}nОтправлено: " . date('j.m.Y / H:i', SITE_TIME) . "rnrnС уважением,rnАдминистрация {$config['site_name']}";
$answer = SendMail( $lostmail, $lostname, 'Подтверждение восстановления пароля на сайте ' . $config['site_name'], $losttext );
if ( $answer != 'ok' ) {
$inSes->addMessage('Произошла Ошибка! ' . $answer);
gen_red('forgot', '', RND);
}
else {
$db->query("UPDATE ?_users SET `users_keypasswd` = ?, `users_timepasswd` = ?
WHERE `users_login` = ?;", $lostkey, SITE_TIME + 43200, $lostname);
$_SESSION['captcha_key'] = NULL;
$_SESSION['captcha_failures'] = 0;
show_header('Восстановление пароля');
echo '<div class="bl">';
echo 'Письмо с инструкцией по востановлению пароля успешно выслано на E-mail указанный в профиле.<br />';
echo 'Внимательно прочтите письмо и выполните все необходимые действия для восстановления пароля.<br />';
echo 'Восстанавливать пароль можно не чаще чем раз в 12 часов<br /></div>';
show_footer();
exit();
}
}
else {
$inSes->addMessage('Ошибка! С момента последнего восстановления пароля прошло менее 12 часов!');
gen_red('forgot', '', RND);
}
}
else {
$inSes->addMessage('Ошибка! Нет технической возможности восстановить пароль, так как у данного пользователя не указан адрес почтового ящика!');
gen_red('forgot', '', RND);
}
}
else {
$inSes->addMessage('Ошибка! Пользователь с данным ' . $err . ' не зарегестрирован в системе!');
gen_red('forgot', '', RND);
}
}
}
else {
show_header('Восстановление пароля');
$cookname = !empty($_COOKIE['cookname']) ? check($_COOKIE['cookname']) : '';
echo '<div class="bl text">';
echo 'Введите свой логин или e-mail.<br />';
echo 'Инструкция по восстановлению будет выслана на электронный адрес указанный в профиле.<br />';
echo 'Восстанавливать пароль можно не чаще чем раз в 12 часов.</div>';
$form = new cmsForm(gen_uri('forgot', '', 'rnd=' . $_SESSION['token']), 'post');
$form->addText('Логин:', 'lostname', !empty($_POST['lostname']) ? check($_POST['lostname']) : $cookname);
$form->addCaptcha('Проверочный код:', 'code');
echo $form->Submit('Продолжить', 'submit');
unset($form);
}
}
else {
show_header('Восстановление пароля');
show_error('Ошибка! Вы авторизованы, восстановление пароля невозможно!');
}
echo '<div class="link"><a title="Авторизация" href="/' . gen_uri('login', '', RND) . '">Авторизация</a></div>';
echo '<div class="link"><a title="Регистрация" href="/' . gen_uri('reg', '', RND) . '">Регистрация</a></div>';
?>