Просмотр файла modules/user/lost_password.php

Размер файла: 9.54Kb
<?php

// проверка наличия авторизации
if (isset($user)) {
    # Перенаправляем на главную
    header('Location: /');
}

# Заголовок модуля
$system['page_title'] = 'Восстановление пароля';

# Шапка модуля
require_once(HOME .'/incfiles/header.php');

// смена пароля
if (isset($_POST['change_password']) && isset($_GET['login']) && isset($_GET['email']) && isset($_GET['key'])) {
	$login = txt($_GET['login']);
	$email = txt($_GET['email']);
	$key = txt($_GET['key']);
	$change_password = txt($_GET['change_password']);

	# Проверка наличия в базе данных пользователя с таким логином и почтовым ящиком
    if (mysql_result(mysql_query("SELECT COUNT(*) FROM `users` WHERE `login` = '". input($login) ."' AND `email` = '". input($email) ."'"), 0) == 0) $err .= 'Неверная связка логина и E-Mail или отсутствует привязка E-Mail к аккаунту<br />';

	if (!isset($err)) {
    	# Проверка ключа
    	if (mysql_result(mysql_query("SELECT COUNT(*) FROM `lost_password` WHERE `login` = '". input($login) ."' AND `email` = '". input($email) ."' AND `key` = '". input($key) ."'"), 0) == 0) $err .= 'Неверный ключ<br />';
    }

    if (!isset($err)) {
		# Пароль
    	$change_password= txt($_POST['change_password']);

    	# Проверка ввода пароля
    	if (empty($change_password)) $err .= 'Не введен новый пароль<br />';

    	# Проверка длины пароля
    	if (!empty($change_password) && (strlen($change_password) < 5 || strlen($change_password) > 64)) $err .= 'Неверная длина нового пароля. Допустимо от 5 до 64 символов<br />';

    	if (!isset($err)) {
    	    # Кодируем пароль
        	$change_password = encrypt($change_password);

        	# Сохраняем данные
       		mysql_query("UPDATE `users` SET `password` = '". input($change_password) ."' WHERE `login` = '". input($login) ."' AND `email` = '". input($email) ."' LIMIT 1");

       		# Удаление всех ключей
			mysql_query("DELETE FROM `lost_password` WHERE `login` = '". input($login) ."' AND `email` = '". input($email) ."'");

        	echo '<div class="title">Изменение пароля</div>
        	<div class="menu">
        	Ваш пароль успешно изменен.
        	</div>';

        	echo '<div class="block">
        	&raquo; <a href="/user/entry.php">Авторизация</a><br />
        	&raquo; <a href="/">На главную</a>
        	</div>';

        	# Ноги модуля
        	require_once(HOME .'/incfiles/footer.php');
    	}
    }
}

// проверка запроса на восстановление пароля
if (isset($_GET['login']) && isset($_GET['email']) && isset($_GET['key'])) {
	$login = txt($_GET['login']);
	$email = txt($_GET['email']);
	$key = txt($_GET['key']);

	# Проверка наличия в базе данных пользователя с таким логином и почтовым ящиком
    if (mysql_result(mysql_query("SELECT COUNT(*) FROM `users` WHERE `login` = '". input($login) ."' AND `email` = '". input($email) ."'"), 0) == 0) $err .= 'Неверная связка логина и E-Mail или отсутствует привязка E-Mail к аккаунту<br />';

	if (!isset($err)) {
    	# Проверка ключа
    	if (mysql_result(mysql_query("SELECT COUNT(*) FROM `lost_password` WHERE `login` = '". input($login) ."' AND `email` = '". input($email) ."' AND `key` = '". input($key) ."'"), 0) == 0) $err .= 'Неверный ключ<br />';
    }

    if (!isset($err)) {
    	echo '<div class="title">Смена пароля</div>
    	<form method="post" action="/user/lost_password.php?login='. input($login) .'&amp;email='. input($email) .'&amp;key='. input($key) .'">
    	<div class="menu">
		Новый пароль:<br />
		<input type="password" name="change_password" /><br />
		<input type="submit" value="Изменить" />
    	</div>
    	</form>';

    	echo '<div class="block">
		&raquo; <a href="/">На главную</a>
		</div>';

		# Ноги модуля
		require_once(HOME .'/incfiles/footer.php');
    }
}

// проверка полученных данных
if (isset($_POST['lost_login']) && isset($_POST['lost_email'])) {
	# Фильтрация логина
	$lost_login = txt($_POST['lost_login']);

	# Проверка ввода логина
    if (empty($lost_login)) $err .= 'Не введен логин<br />';

    # Проверка длины логина
    if (!empty($lost_login) && (strlen($lost_login) < 3 || strlen($lost_login) > 32)) $err .= 'Неверная длина логина. Допустимо от 3 до 32 символов<br />';

    # Проверка наличия пользователя с таким логином
    if (mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE `login` = '". input($lost_login) ."'")) == 0) $err .= 'Пользователь с таким логином не существует<br />';

    // если нет ошибок проверяем почтовый ящик
    if (!isset($err)) {
    	# E-mail
    	$lost_email = txt($_POST['lost_email']);

    	# Проверка ввода логина
    	if (empty($lost_email)) $err .= 'Не введен E-Mail<br />';

    	# Проверка длины
    	if (!empty($lost_email) && (strlen($lost_email) < 3 || strlen($lost_email) > 72)) $err .= 'Неверная длина E-Mail. Допустимо от 3 до 72 символов<br />';

    	# Формат
    	if (!empty($lost_email) && !preg_match('|^([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})$|ius', $lost_email)) $err .= 'Неверный формат E-Mail<br />';

		if (!isset($err)) {
    		# Проверка наличия в базе данных пользователя с таким логином и почтовым ящиком
    		if (mysql_result(mysql_query("SELECT COUNT(*) FROM `users` WHERE `login` = '". input($lost_login) ."' AND `email` = '". input($lost_email) ."'"), 0) == 0) $err .= 'Неверная связка логина и E-Mail или отсутствует привязка E-Mail к аккаунту<br />';
    	}
    }

    if (!isset($err)) {
    	# Уникальный ключ
    	$key = md5(base64_encode($lost_login) . time());

		# Проверка наличия ключа восстановления
		if (mysql_result(mysql_query("SELECT COUNT(*) FROM `lost_password` WHERE `login` = '". input($lost_login) ."' AND `email` = '". input($lost_email) ."'"),0) != 0) {
			# Удаление всех ключей
			mysql_query("DELETE FROM `lost_password` WHERE `login` = '". input($lost_login) ."' AND `email` = '". input($lost_email) ."'");
		}

		# Запись ключа
		mysql_query("INSERT INTO `lost_password` SET `login` = '". input($lost_login) ."', `email` = '". input($lost_email) ."', `key` = '". input($key) ."', `time` = '". time() ."'");

		# Отправка ключа на почтовый ящик
		mail($lost_email, '=?utf-8?B?'.base64_encode('Восстановление пароля на Promob').'?=', 'Здравствуйте, '. input($lost_login) .'!<br /><br />Для восстановления пароля на promob.net перейдите по этой ссылке:<br /><a href="http://promob.net/user/lost_password.php?login='. input($lost_login) .'&amp;email='. input($lost_email) .'&amp;key='. input($key) .'">http://promob.net/user/lost_password.php?login='. input($lost_login) .'&amp;email='. input($lost_email) .'&amp;key='. input($key) .'</a><br /><br />С уважением,<br />Команда Promob<br /><br /><small>Сообщение было отправленно автоматически, отвечать на него не нужно.</small>', "From: \"[email protected]\" <[email protected]>\nContent-Type: text/html; charset=utf-8\n");

		echo '<div class="title">Восстановление пароля</div>
		<div class="menu">
		Ключ для восстановления пароля выслан на Ваш E-Mail. Дальнейшие инструкции Вы найдете в письме. В случае возникновения проблем с восстановлением пароля просьба обращаться на <a href="mailto:[email protected]">[email protected]</a>.
		</div>';

		echo '<div class="block">
		&raquo; <a href="/">На главную</a>
		</div>';

		# Ноги модуля
		require_once(HOME .'/incfiles/footer.php');
    }
}

error($err);

echo '<div class="title">Восстановление пароля</div>
<form method="post" action="/user/lost_password.php">
<div class="menu">
Логин:<br />
<input type="text" name="lost_login" /><br />
E-Mail:<br />
<input type="text" name="lost_email" /><br />
<input type="submit" value="Восстановить" />
</div>
</form>
<div class="menu">
Если Ваш аккаунт не был привязан к E-Mail адресу, то восстановление пароля не возможно.
</div>';

echo '<div class="block">
&raquo; <a href="/user/entry.php">Авторизация</a><br />
&raquo; <a href="/">На главную</a>
</div>';

# Ноги модуля
require_once(HOME .'/incfiles/footer.php');

?>