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

Размер файла: 9.54Kb
  1. <?php
  2.  
  3. // проверка наличия авторизации
  4. if (isset($user)) {
  5. # Перенаправляем на главную
  6. header('Location: /');
  7. }
  8.  
  9. # Заголовок модуля
  10. $system['page_title'] = 'Восстановление пароля';
  11.  
  12. # Шапка модуля
  13. require_once(HOME .'/incfiles/header.php');
  14.  
  15. // смена пароля
  16. if (isset($_POST['change_password']) && isset($_GET['login']) && isset($_GET['email']) && isset($_GET['key'])) {
  17. $login = txt($_GET['login']);
  18. $email = txt($_GET['email']);
  19. $key = txt($_GET['key']);
  20. $change_password = txt($_GET['change_password']);
  21.  
  22. # Проверка наличия в базе данных пользователя с таким логином и почтовым ящиком
  23. 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 />';
  24.  
  25. if (!isset($err)) {
  26. # Проверка ключа
  27. 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 />';
  28. }
  29.  
  30. if (!isset($err)) {
  31. # Пароль
  32. $change_password= txt($_POST['change_password']);
  33.  
  34. # Проверка ввода пароля
  35. if (empty($change_password)) $err .= 'Не введен новый пароль<br />';
  36.  
  37. # Проверка длины пароля
  38. if (!empty($change_password) && (strlen($change_password) < 5 || strlen($change_password) > 64)) $err .= 'Неверная длина нового пароля. Допустимо от 5 до 64 символов<br />';
  39.  
  40. if (!isset($err)) {
  41. # Кодируем пароль
  42. $change_password = encrypt($change_password);
  43.  
  44. # Сохраняем данные
  45. mysql_query("UPDATE `users` SET `password` = '". input($change_password) ."' WHERE `login` = '". input($login) ."' AND `email` = '". input($email) ."' LIMIT 1");
  46.  
  47. # Удаление всех ключей
  48. mysql_query("DELETE FROM `lost_password` WHERE `login` = '". input($login) ."' AND `email` = '". input($email) ."'");
  49.  
  50. echo '<div class="title">Изменение пароля</div>
  51. <div class="menu">
  52. Ваш пароль успешно изменен.
  53. </div>';
  54.  
  55. echo '<div class="block">
  56. &raquo; <a href="/user/entry.php">Авторизация</a><br />
  57. &raquo; <a href="/">На главную</a>
  58. </div>';
  59.  
  60. # Ноги модуля
  61. require_once(HOME .'/incfiles/footer.php');
  62. }
  63. }
  64. }
  65.  
  66. // проверка запроса на восстановление пароля
  67. if (isset($_GET['login']) && isset($_GET['email']) && isset($_GET['key'])) {
  68. $login = txt($_GET['login']);
  69. $email = txt($_GET['email']);
  70. $key = txt($_GET['key']);
  71.  
  72. # Проверка наличия в базе данных пользователя с таким логином и почтовым ящиком
  73. 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 />';
  74.  
  75. if (!isset($err)) {
  76. # Проверка ключа
  77. 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 />';
  78. }
  79.  
  80. if (!isset($err)) {
  81. echo '<div class="title">Смена пароля</div>
  82. <form method="post" action="/user/lost_password.php?login='. input($login) .'&amp;email='. input($email) .'&amp;key='. input($key) .'">
  83. <div class="menu">
  84. Новый пароль:<br />
  85. <input type="password" name="change_password" /><br />
  86. <input type="submit" value="Изменить" />
  87. </div>
  88. </form>';
  89.  
  90. echo '<div class="block">
  91. &raquo; <a href="/">На главную</a>
  92. </div>';
  93.  
  94. # Ноги модуля
  95. require_once(HOME .'/incfiles/footer.php');
  96. }
  97. }
  98.  
  99. // проверка полученных данных
  100. if (isset($_POST['lost_login']) && isset($_POST['lost_email'])) {
  101. # Фильтрация логина
  102. $lost_login = txt($_POST['lost_login']);
  103.  
  104. # Проверка ввода логина
  105. if (empty($lost_login)) $err .= 'Не введен логин<br />';
  106.  
  107. # Проверка длины логина
  108. if (!empty($lost_login) && (strlen($lost_login) < 3 || strlen($lost_login) > 32)) $err .= 'Неверная длина логина. Допустимо от 3 до 32 символов<br />';
  109.  
  110. # Проверка наличия пользователя с таким логином
  111. if (mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE `login` = '". input($lost_login) ."'")) == 0) $err .= 'Пользователь с таким логином не существует<br />';
  112.  
  113. // если нет ошибок проверяем почтовый ящик
  114. if (!isset($err)) {
  115. # E-mail
  116. $lost_email = txt($_POST['lost_email']);
  117.  
  118. # Проверка ввода логина
  119. if (empty($lost_email)) $err .= 'Не введен E-Mail<br />';
  120.  
  121. # Проверка длины
  122. if (!empty($lost_email) && (strlen($lost_email) < 3 || strlen($lost_email) > 72)) $err .= 'Неверная длина E-Mail. Допустимо от 3 до 72 символов<br />';
  123.  
  124. # Формат
  125. 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 />';
  126.  
  127. if (!isset($err)) {
  128. # Проверка наличия в базе данных пользователя с таким логином и почтовым ящиком
  129. 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 />';
  130. }
  131. }
  132.  
  133. if (!isset($err)) {
  134. # Уникальный ключ
  135. $key = md5(base64_encode($lost_login) . time());
  136.  
  137. # Проверка наличия ключа восстановления
  138. if (mysql_result(mysql_query("SELECT COUNT(*) FROM `lost_password` WHERE `login` = '". input($lost_login) ."' AND `email` = '". input($lost_email) ."'"),0) != 0) {
  139. # Удаление всех ключей
  140. mysql_query("DELETE FROM `lost_password` WHERE `login` = '". input($lost_login) ."' AND `email` = '". input($lost_email) ."'");
  141. }
  142.  
  143. # Запись ключа
  144. mysql_query("INSERT INTO `lost_password` SET `login` = '". input($lost_login) ."', `email` = '". input($lost_email) ."', `key` = '". input($key) ."', `time` = '". time() ."'");
  145.  
  146. # Отправка ключа на почтовый ящик
  147. 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: \"robot@promob.net\" <robot@promob.net>\nContent-Type: text/html; charset=utf-8\n");
  148.  
  149. echo '<div class="title">Восстановление пароля</div>
  150. <div class="menu">
  151. Ключ для восстановления пароля выслан на Ваш E-Mail. Дальнейшие инструкции Вы найдете в письме. В случае возникновения проблем с восстановлением пароля просьба обращаться на <a href="mailto:platonov-kd@ya.ru">platonov-kd@ya.ru</a>.
  152. </div>';
  153.  
  154. echo '<div class="block">
  155. &raquo; <a href="/">На главную</a>
  156. </div>';
  157.  
  158. # Ноги модуля
  159. require_once(HOME .'/incfiles/footer.php');
  160. }
  161. }
  162.  
  163. error($err);
  164.  
  165. echo '<div class="title">Восстановление пароля</div>
  166. <form method="post" action="/user/lost_password.php">
  167. <div class="menu">
  168. Логин:<br />
  169. <input type="text" name="lost_login" /><br />
  170. E-Mail:<br />
  171. <input type="text" name="lost_email" /><br />
  172. <input type="submit" value="Восстановить" />
  173. </div>
  174. </form>
  175. <div class="menu">
  176. Если Ваш аккаунт не был привязан к E-Mail адресу, то восстановление пароля не возможно.
  177. </div>';
  178.  
  179. echo '<div class="block">
  180. &raquo; <a href="/user/entry.php">Авторизация</a><br />
  181. &raquo; <a href="/">На главную</a>
  182. </div>';
  183.  
  184. # Ноги модуля
  185. require_once(HOME .'/incfiles/footer.php');
  186.  
  187. ?>