You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

165 lines
3.9 KiB

  1. <?php
  2. /**
  3. * Класс для работы с пользователями
  4. *
  5. * @copyright
  6. * @link
  7. * @package Majestic
  8. * @subpackage Decorator
  9. * @since
  10. * @version SVN: $Id$
  11. * @filesource $URL$
  12. */
  13. class User
  14. {
  15. static private $user = false;
  16. static function login($login, $password)
  17. {
  18. if (empty($login) || empty($password)) {
  19. return false;
  20. }
  21. if(!preg_match(UserData::REGEXP_LOGIN, $login)) {
  22. return false;
  23. }
  24. self::setInfo(self::getByLogin($login));
  25. if (!self::getInfo() || self::$user->isBanned()) {
  26. return false;
  27. }
  28. if(self::$user->pass != $password){
  29. return false;
  30. }
  31. self::setSession();
  32. $model = new UserDataModel();
  33. $model->loginUpdate($login);
  34. return true;
  35. }
  36. static function logout()
  37. {
  38. Env::setCookie(session_name(), '', 0);
  39. Env::setCookie('login', '', 0);
  40. Env::setCookie('login_hash', '', 0);
  41. Env::setCookie('login_ipbhash', '', 0);
  42. if (session_id()) {
  43. session_destroy();
  44. }
  45. }
  46. static function process()
  47. {
  48. if (Env::getCookie(session_name())) { //есть сессия
  49. @session_start();
  50. self::setInfo(Env::Session('user'));
  51. } elseif (Env::getCookie('login') && Env::getCookie('login_hash')) {
  52. self::remember();
  53. }
  54. }
  55. static function setSession()
  56. {
  57. $hash = self::getHash();
  58. Env::setCookie('login', self::$user->login, TIME_NOW + LOGIN_COOKIE_TTL);
  59. Env::setCookie('login_hash', $hash, TIME_NOW + LOGIN_COOKIE_TTL);
  60. Env::setCookie('login_ipbhash', self::getIPBHash($hash), TIME_NOW + LOGIN_COOKIE_TTL);
  61. @session_start();
  62. $_SESSION['user'] = self::$user;
  63. }
  64. static function remember()
  65. {
  66. self::setInfo(self::getByLogin(Env::getCookie('login')));
  67. if (!self::getInfo()) {
  68. self::logout();
  69. }
  70. if (Env::getCookie('login_hash') == self::getHash()) {
  71. self::setSession();
  72. } else {
  73. self::logout();
  74. }
  75. }
  76. static function getHash()
  77. {
  78. return md5(self::$user->id.'hckrz'.self::$user->login.'mst'.self::$user->pass.'dai');
  79. }
  80. /**
  81. * Создает хеш для проверки хеша в в IPB
  82. *
  83. */
  84. static public function getIPBHash($hash)
  85. {
  86. return md5($hash . strtolower(self::$user->login) . 'brainfuck');
  87. }
  88. static function getInfo()
  89. {
  90. return Env::Session('user', self::$user);
  91. }
  92. static function setInfo($data)
  93. {
  94. self::$user = $data;
  95. }
  96. static function isGuest()
  97. {
  98. return ! (bool) Env::Session('user');
  99. }
  100. static function getByLogin($login)
  101. {
  102. $model = new UserDataModel();
  103. return $model->getByLogin($login);
  104. }
  105. static function getById($id)
  106. {
  107. $model = new UserDataModel();
  108. return $model->getById($id);
  109. }
  110. /**
  111. * отправляет письмо для активации
  112. *
  113. * @param string $mail
  114. * @param string $login
  115. *
  116. */
  117. static function sendActivateMail($mail, $login)
  118. {
  119. $settings = Env::getParam('site_settings');
  120. $model = new UserActivateModel();
  121. $link = 'http://' . $settings['host_name'] . '/activate/?key=' . $model->generateKey($login, $mail);
  122. $text = new SettingsTextModel();
  123. $message = $text->getText('mail_activate');
  124. $replaces = array(
  125. 'link' => $link,
  126. 'host' => $settings['site_url'],
  127. 'email' => $mail,
  128. );
  129. if (!$message) {
  130. return false;
  131. }
  132. foreach ($replaces as $key => $val) {
  133. $message->text = str_replace('%' . $key . '%', $val, $message->text);
  134. }
  135. $mailer = new Mailer();
  136. return $mailer->sendMessage($mail, 'Подтверждение E-mail ' . $settings['host_name'], $message->text);
  137. }
  138. }
  139. ?>