Вход Регистрация
Файл: boot/auth.class.php
Строк: 199
<?php

/**
* @name        JMY CMS
* @link        http://jmy.su/
* @copyright   Copyright (C) 2012-2014 JMY LTD
* @license     LICENSE.txt (see attached file)
* @version     VERSION.txt (see attached file)
* @author      Komarov Ivan
*/

if (!defined('ACCESS')) {
    
header('Location: /');
    exit;
}
 
class 
auth 
{
    var 
$user_id 0;
    var 
$isUser false;
    var 
$isAdmin false;
    var 
$isModer false;
    var 
$group 0;
    var 
$user_info false;
    var 
$group_info false;
    var 
$banUser false;
    var 
$groups_array false;
    var 
$newPms false;
    
    function 
__construct($hash ''
    {
    global 
$db$url$user$cache$config;
        
$ut str_replace('index.php'''$_SERVER["REQUEST_URI"]);
        
$dsUrl = (isset($_REQUEST['url']) && $url[0]!=='ajax' && $url[0] !== ADMIN) ? '/' . (empty($ut) ?  $config['mainModule'] : str_replace('index.php?url='''$_SERVER["REQUEST_URI"])) : '/'.$config['mainModule'];
        
$moduleNow = (isset($url[0]) && $url[0]!=='ajax' && $url[0] !== ADMIN) ? $url[0] : $config['mainModule'];
        
$hash = empty($hash) ? (isset($_COOKIE[COOKIE_AUTH]) ? $_COOKIE[COOKIE_AUTH] : '') : $hash;        

        
$this->groups_array getcache('groups');
        if(empty(
$groups_array))
        {
            
$query $db->query("SELECT * FROM `" USER_DB "`.`" USER_PREFIX "_groups`");
            while(
$rows $db->getRow($query)) 
            {
                
$this->groups_array[$rows['id']] = $rows;
            }
            
            
setcache('groups'$this->groups_array);
        }
        
        if (empty(
$hash)) 
        {
            if (!isset(
$_COOKIE[COOKIE_PAUSE])) 
            {
                if(
SpiderDetect($_SERVER['HTTP_USER_AGENT'])) 
                {
                    
$group $user['botGroup'];
                    
$uid SpiderDetect($_SERVER['HTTP_USER_AGENT'], true);
                } 
                else 
                {
                    
$group $user['guestGroup'];
                    
$uid 0;
                }
                
                
$db->query("UPDATE `" DB_PREFIX "_online` SET `time` = '" time() . "' WHERE `ip` = '" getRealIpAddr() . "' AND `uid` = '" $uid "'"true);
                
                
$error mysql_info();
                
preg_match("/^D+(d+)/"$error$result);

                if (
$result[1] == 0
                {
                    
$db->query("INSERT INTO " DB_PREFIX "_online VALUES ('" $uid "', '" time() . "', '" getRealIpAddr() . "', '" $group "', '" $dsUrl "')"true);
                }
                
                
$db->query("DELETE FROM `" DB_PREFIX "_online` WHERE `time` < '" . (time() - PAUSE_TIME) . "'");
                
setcookie(COOKIE_PAUSEtime(), time() + 120'/');
            }
            
            
$this->isUser false;
            
$this->group $user['guestGroup'];
            
$this->group_info $this->groups_array[$this->group];
        }
        else
        {
            
$cookie = @unserialize(engine_decode($hash));

            if (empty(
$cookie['id']) || empty($cookie['nick']) || empty($cookie['password']) || empty($cookie['hash'])) 
            {
                @
setcookie(COOKIE_AUTHfalse);
                @
header('Location: /');
                exit;
            }

            
$this->user_info getcache('userInfo_'.$cookie['id']);
            if(empty(
$this->user_info))
            {
                
$this->user_info $db->getRow($db->query("SELECT * FROM `" USER_DB "`.`" USER_PREFIX "_users` WHERE id = '" $cookie['id'] . "' AND password = '" $cookie['password'] . "' AND nick = '" $cookie['nick'] . "' AND active='1'"));
                
                foreach(
$this->groups_array as $id => $arr)
                {
                    if(
$arr['special'] == && $this->user_info['points'] >= $arr['points'] && $arr['points'] > 0$this->user_info['exgroup'] = $id;
                }
                
                
setcache('userInfo_'.$cookie['id'], $this->user_info'userInfo');
            }

            
$checkHash md5(@$_SERVER['HTTP_USER_AGENT'].$config['uniqKey']);

            if ((
$cookie['hash'] == $checkHash || $_SERVER['HTTP_USER_AGENT'] == 'Shockwave Flash') && $this->user_info['nick'] != ''
            {
                
$this->user_id $cookie['id'];
                
$this->group $this->user_info['group'];
                if(isset(
$this->groups_array[$this->group]))
                {
                    
$group_info $this->groups_array[$this->group];
                    
$group_info['gname'] = $group_info['name'];
                    
$group_info['gid'] = $group_info['id'];
                    unset(
$group_info['name'], $group_info['id']);
                    if(
$this->user_info['exgroup'] != && isset($this->groups_array[$this->user_info['exgroup']])) 
                    {
                        
$group_info['exname'] = $this->groups_array[$this->user_info['exgroup']]['name'];
                        
$group_info['excolor'] = $this->groups_array[$this->user_info['exgroup']]['color'];
                        
$group_info['exicon'] = $this->groups_array[$this->user_info['exgroup']]['icon'];
                    }
                    
                    
$this->group_info $group_info;
                    
$this->user_info array_merge($this->user_info$this->group_info);
                    unset(
$group_info);
                }

                if(
$this->user_info['group'] != $user['banGroup'])
                {
                    if(
$this->group_info['user'] == 1
                        
$this->isUser true;
                    
                    if(
$this->group_info['admin'] == 1
                        
$this->isAdmin true;
                    
                    if(
$this->group_info['moderator'] == 1
                        
$this->isModer true;
                    
                    if (!isset(
$_COOKIE[COOKIE_PAUSE])) 
                    {
                        
setcookie(COOKIE_PAUSEtime() + PAUSE_TIMEtime() + PAUSE_TIME'/');
                        
$db->query("UPDATE `" DB_PREFIX "_online` SET `time` = '" time() . "', `ip` = '" getRealIpAddr() . "' WHERE `uid` = '" $this->user_id "'"true);
                        
                        
$error mysql_info();
                        
preg_match("/^D+(d+)/"$error$result);
                        if (isset(
$result[1]) && $result[1] == 0
                        {
                            
$db->query("INSERT INTO `" DB_PREFIX "_online` VALUES ('" $this->user_id "', '" time() . "', '" getRealIpAddr() . "', '" $this->user_info['group'] . "', '" $dsUrl "')"true);            
                            
$db->query("UPDATE `" USER_DB "`.`" USER_PREFIX "_users` SET `last_visit` = '" time() . "', `ip` = '" getRealIpAddr() . "' WHERE `id` = '" $this->user_id "'"true);
                        }
                        
                        
$db->query("DELETE FROM `" DB_PREFIX "_online` WHERE `time` < '" . (time() - PAUSE_TIME) . "'");
                        
                        if(
$user['pmShown'] == 1)
                        {
                            
$where '';
                            if(isset(
$_COOKIE['PMLASTCHECK'])) $where " AND time > '".intval($_COOKIE['PMLASTCHECK'])."'";
                            
$result $db->query("SELECT pm.*, u.nick FROM `" DB_PREFIX "_pm` as pm LEFT JOIN `" USER_DB "`.`" USER_PREFIX "_users` as u on (pm.fromid = u.id) WHERE pm.toid = '" $this->user_id "' AND pm.status='0' $where ORDER BY time DESC");
                            if(
$db->numRows($result) > 0
                            {
                                while(
$message $db->getRow($result))
                                    
$this->newPms[] = $message;
                                
setcookie('PMLASTCHECK'time(), time() + 86400'/');
                            }
                        }
                    }
                    else
                    {
                        if((
$_COOKIE[COOKIE_PAUSE]-(PAUSE_TIME*2/3)) < time())
                        {
                            
$db->query("UPDATE `" DB_PREFIX "_online` SET `time` = '" time() . "', `url` = '" $dsUrl "' WHERE `uid` = '" $this->user_id "'");
                            
                            
$error mysql_info();
                            
preg_match("/^D+(d+)/"$error$result);
                            if (
$result[1] == 0
                            {
                                
$db->query("INSERT INTO `" DB_PREFIX "_online` VALUES ('" $this->user_id "', '" time() . "', '" getRealIpAddr() . "', '" $this->user_info['group'] . "', '" $dsUrl "')"true);            
                            }
                            
                            
setcookie(COOKIE_PAUSEfalse);
                            
setcookie(COOKIE_PAUSEtime() + PAUSE_TIMEtime() + PAUSE_TIME'/');
                        }
                    }
                    
                }
                else
                {
                    
$this->banUser true;
                }
                
                unset(
$result$error$cookie);
            }
            else
            {
                
$this->logout();
                
location();
                unset(
$this->user_info);
            }
        } 
    }
    
    function 
login($nick$password)
    {
    global 
$db$config;
        
$db->query("DELETE FROM " DB_PREFIX "_online WHERE ip = '" getRealIpAddr() . "'");
        
setcookie(COOKIE_PAUSEfalsetime(), '/');
        
        
$nick filter($nick'nick');
        
$password md5(md5($password));
        
        
$access $db->getRow($db->query("SELECT id, password, tail FROM `" USER_DB "`.`" USER_PREFIX "_users` WHERE nick = '" $db->safesql($nick) . "' AND active='1'"));
    
        if (
md5(mb_substr($password0, -mb_strlen($access['tail'])) . $access['tail']) == $access['password']) 
        {
            
delcache('userInfo_'.$this->user_id);
            
$newHash md5(@$_SERVER['HTTP_USER_AGENT'].$config['uniqKey']);
            
setcookie(COOKIE_AUTHengine_encode(serialize(array('id' => $access['id'], 'nick' => $nick'password' => md5(mb_substr($password0, -mb_strlen($access['tail'])) . $access['tail']), 'hash' => $newHash))), time() + COOKIE_TIME'/');
            return 
true;
        } 
        else 
        {
            
setcookie(COOKIE_AUTH''time(), '/');
            return 
false;
        }
    }
    
    function 
logout()
    {
    global 
$db;
        
setcookie(COOKIE_AUTHfalsetime(), '/');
        
setcookie(COOKIE_PAUSEfalsetime(), '/');
        
        
delcache('userInfo_'.$this->user_id);
        
$db->query("DELETE FROM " DB_PREFIX "_online WHERE uid = '" $this->user_id "' OR ip = '" filter(getRealIpAddr()) . "'");
    }
    
    function 
updateProfile($mail$icq$skype$surname$name$ochestvo$place$age$gender$birthDate$hobby$signature$fields$uid false)
    {
    global 
$db;
        
delcache('userInfo_'.$this->user_id);
        
$db->query("UPDATE `" USER_DB "`.`" USER_PREFIX "_users` SET `email` = '" filter($mail'mail') . "', `icq` = '" filter($icq'a') . "', `skype` = '" filter($skype'a') . "', `surname` = '" filter($surname'a') . "', `name` = '" filter($name'a') . "', `ochestvo` = '" filter($ochestvo'a') . "', `place` = '" filter($place'a') . "', `age` = '" intval($age) . "', `sex` = '" intval($gender) . "', `birthday` = '" filter($birthDate'a') . "', `hobby` = '" filter($hobby'a') . "', `signature` = '" $db->safesql($signature) . "', `fields` = '" $db->safesql($fields) . "' WHERE `id` = " . ($uid $uid $this->user_id) . " LIMIT 1 ;");
    }    
    
    function 
updatePassword($password$uid false)
    {
    global 
$db;
        
delcache('userInfo_'.($uid $uid $this->user_id));
        
$tail gencode(rand(611));
        
$updPass md5(mb_substr(md5(md5($password)), 0, -mb_strlen($tail)) . $tail);
        
        
$db->query("UPDATE `" USER_DB "`.`" USER_PREFIX "_users` SET `password` = '" $updPass "', `tail` = '" $tail "' WHERE `id` = " . ($uid $uid $this->user_id) . " LIMIT 1 ;");
    }
    
    function 
forgotPass($new_pass$tail$uid)
    {
    global 
$db;
        
delcache('userInfo_'.$uid);
        
$db->query("UPDATE `" USER_DB "`.`" USER_PREFIX "_users` SET `password` = '" md5(mb_substr(md5(md5($new_pass)), 0, -mb_strlen($tail)) . $tail) . "', `tail` = '" filter($tail'a') . "' WHERE `id` = '" $uid "' LIMIT 1 ;");
    }
    
    function 
activate($mail)
    {
    global 
$db;
        
$db->query("UPDATE `" USER_DB "`.`" USER_PREFIX "_users` SET `active` = '1' WHERE `email` = '" $db->safesql(filter($mail'mail')) . "' LIMIT 1 ;");
    }
    
    function 
register($user_login$password$tail$email$icq$skype$family$name$ochestvo$age$sex$about$signature$activate$ip$group '2')
    {
    global 
$db;
        
$db->query("INSERT INTO `" USER_DB "`.`" USER_PREFIX "_users` ( `id` , `nick` , `password` , `tail` , `email` , `icq` , `skype` , `surname` , `name` , `ochestvo` , `place` , `age` , `sex` , `birthday` , `hobby` , `signature` , `points` , `user_comments` , `user_news` , `group` , `last_visit` , `regdate` , `active` , `ip` ) VALUES (NULL, '" filter($user_login'a') . "', '" md5(mb_substr(md5(md5($password)), 0, -mb_strlen($tail)) . $tail) . "', '" filter($tail'a') . "', '" filter($email'mail') . "', '" filter($icq'a') . "', '" filter($skype'a') . "', '" filter($family'a') . "', '" filter($name'a') . "', '" filter($ochestvo'a') . "', '', '" intval($age) . "', '" intval($sex) . "', '', '" filter($about'a') . "', '" filter($signature) . "', '0', '0', '0', '" intval($group) . "', '" time() . "', '" time() . "', '" $activate "', '" filter($ip'ip') . "');");
    }
}
Онлайн: 1
Реклама