Files
majestic/classes/User.class.php
pzinovkin 7ee3a6edd1 additional hash for ipb auth, #18
git-svn-id: svn+ssh://code.netmonsters.ru/svn/majestic/trunk@74 4cb57b5f-5bbd-dd11-951b-001d605cbbc5
2009-04-14 18:02:16 +00:00

166 lines
3.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Класс для работы с пользователями
*
* @copyright
* @link
* @package Majestic
* @subpackage Decorator
* @since
* @version SVN: $Id$
* @filesource $URL$
*/
class User
{
static private $user = false;
static function login($login, $password)
{
if (empty($login) || empty($password)) {
return false;
}
if(!preg_match(UserData::REGEXP_LOGIN, $login)) {
return false;
}
self::setInfo(self::getByLogin($login));
if (!self::getInfo() || self::$user->isBanned()) {
return false;
}
if(self::$user->pass != $password){
return false;
}
self::setSession();
$model = new UserDataModel();
$model->loginUpdate($login);
return true;
}
static function logout()
{
Env::setCookie(session_name(), '', 0);
Env::setCookie('login', '', 0);
Env::setCookie('login_hash', '', 0);
Env::setCookie('login_ipbhash', '', 0);
if (session_id()) {
session_destroy();
}
}
static function process()
{
if (Env::getCookie(session_name())) { //есть сессия
@session_start();
self::setInfo(Env::Session('user'));
} elseif (Env::getCookie('login') && Env::getCookie('login_hash')) {
self::remember();
}
}
static function setSession()
{
$hash = self::getHash();
Env::setCookie('login', self::$user->login, TIME_NOW + LOGIN_COOKIE_TTL);
Env::setCookie('login_hash', $hash, TIME_NOW + LOGIN_COOKIE_TTL);
Env::setCookie('login_ipbhash', self::getIPBHash($hash), TIME_NOW + LOGIN_COOKIE_TTL);
@session_start();
$_SESSION['user'] = self::$user;
}
static function remember()
{
self::setInfo(self::getByLogin(Env::getCookie('login')));
if (!self::getInfo()) {
self::logout();
}
if (Env::getCookie('login_hash') == self::getHash()) {
self::setSession();
} else {
self::logout();
}
}
static function getHash()
{
return md5(self::$user->id.'hckrz'.self::$user->login.'mst'.self::$user->pass.'dai');
}
/**
* Создает хеш для проверки хеша в в IPB
*
*/
static public function getIPBHash($hash)
{
return md5($hash . strtolower(self::$user->login) . 'brainfuck');
}
static function getInfo()
{
return Env::Session('user', self::$user);
}
static function setInfo($data)
{
self::$user = $data;
}
static function isGuest()
{
return ! (bool) Env::Session('user');
}
static function getByLogin($login)
{
$model = new UserDataModel();
return $model->getByLogin($login);
}
static function getById($id)
{
$model = new UserDataModel();
return $model->getById($id);
}
/**
* отправляет письмо для активации
*
* @param string $mail
* @param string $login
*
*/
static function sendActivateMail($mail, $login)
{
$settings = Env::getParam('site_settings');
$model = new UserActivateModel();
$link = 'http://' . $settings['host_name'] . '/activate/?key=' . $model->generateKey($login, $mail);
$text = new SettingsTextModel();
$message = $text->getText('mail_activate');
$replaces = array(
'link' => $link,
'host' => $settings['site_url'],
'email' => $mail,
);
if (!$message) {
return false;
}
foreach ($replaces as $key => $val) {
$message->text = str_replace('%' . $key . '%', $val, $message->text);
}
$mailer = new Mailer();
return $mailer->sendMessage($mail, 'Подтверждение E-mail ' . $settings['host_name'], $message->text);
}
}
?>