Advertisement
Guest User

Untitled

a guest
Aug 13th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.35 KB | None | 0 0
  1. <?php
  2.  
  3. class User extends Model
  4. {
  5.     private static $info = array('logged' => false);
  6.  
  7.     public static function login()
  8.     {
  9.         $userdata = array();
  10.  
  11.         $fields = 'phpbb_users.user_id phpbb_users.username phpbb_users.user_email phpbb_users.user_password site_ranks.staff site_ranks.code -> rank site_ranks.name -> rank_name site_users.first_login';
  12.         $join1  = 'site_users ON (site_users.phpbb_uid = phpbb_users.user_id)';
  13.         $join2  = 'site_ranks ON (site_ranks.code = site_users.rank)';
  14.  
  15.         if (!empty($_SESSION['cd_user']) || !empty($_SESSION['cd_pass']))
  16.         {
  17.             $user = isset($_SESSION['cd_user']) ? $_SESSION['cd_user'] : '';
  18.             $pass = isset($_SESSION['cd_pass']) ? $_SESSION['cd_pass'] : '';
  19.  
  20.             $userdata = User::find($fields . ' phpbb_banlist.ban_ip phpbb_banlist.ban_end phpbb_banlist.ban_give_reason phpbb_banlist.ban_userid', 'user', USERS_TABLE)->where('(username = ? OR username_clean = ?) AND user_password = ?', $user, strtolower($user), $pass)->join($join1)->join($join2)->join('phpbb_banlist ON (phpbb_banlist.ban_userid = phpbb_users.user_id)')->limit(1)->exec()->fetch();
  21.  
  22.             if ($userdata)
  23.             {
  24.                 if ($userdata->ban_userid == $userdata->user_id && ($userdata->ban_end == 0 || time() < $userdata->ban_end))
  25.                 {
  26.                     View::Set('login_error', 'Você foi banido ' . ($userdata->ban_end != 0 ? ('até ' . date('d/m/Y H:i', $userdata->ban_end)) : 'permanentemente') . ' pelo motivo: <b>' . $userdata->ban_give_reason . '</b>');
  27.  
  28.                     unset($_SESSION['cd_user'], $_SESSION['cd_pass']);
  29.                     self::$info['logged'] = false;
  30.  
  31.                     return;
  32.                 }
  33.  
  34.                 $_SESSION['cd_user'] = $user;
  35.                 $_SESSION['cd_pass'] = $pass;
  36.  
  37.                 self::$info['logged'] = true;
  38.             }
  39.             else
  40.             {
  41.                 unset($_SESSION['cd_user'], $_SESSION['cd_pass']);
  42.             }
  43.         }
  44.         elseif (param('login'))
  45.         {
  46.             $user = param('user_login');
  47.             $pass = param('pass_login');
  48.  
  49.             $val = new Validate;
  50.             $val->loadAntiflood('login', 5, 15);
  51.  
  52.             if ($val->error())
  53.             {
  54.                 $wait = $val->antifloodWait();
  55.  
  56.                 View::Set('login_error', 'Bloqueio de segurança ativado. Aguarde ' . $wait . ' minuto' . ($wait > 1 ? 's' : '') . ' para tentar logar novamente.');
  57.                 return;
  58.             }
  59.  
  60.             $userdata = User::find($fields, 'user', USERS_TABLE)->where('username = ? OR username_clean = ?', $user, strtolower($user))->join($join1)->join($join2)->limit(1)->exec()->fetch();
  61.  
  62.             if ($userdata && phpbb_check_hash($pass, $userdata->user_password))
  63.             {
  64.                 $_SESSION['cd_user'] = $user;
  65.                 $_SESSION['cd_pass'] = $userdata->user_password;
  66.  
  67.                 self::$info['logged'] = true;
  68.  
  69.                 unset($userdata->user_password);
  70.             }
  71.             else
  72.             {
  73.                 View::Set('login_error', 'O usuário e senha informados não existem ou não coincidem.');
  74.  
  75.                 $val->setAntiflood();
  76.  
  77.                 unset($_SESSION['cd_user'], $_SESSION['cd_pass']);
  78.             }
  79.         }
  80.  
  81.         if ($userdata)
  82.         {
  83.             // Primeiro login no site? Cria registro dele na tabela.
  84.             if (!$userdata->first_login)
  85.             {
  86.                 $data = new stdClass;
  87.  
  88.                 $data->phpbb_uid = $userdata->user_id;
  89.                 $data->rank = 'usr';
  90.                 $data->first_login = time();
  91.  
  92.                 User::insert($data, 'user')->exec();
  93.  
  94.                 // Redireciona para a mesma página para carregar as infos.
  95.                 redirect($_SERVER['REQUEST_URI']);
  96.             }
  97.  
  98.             foreach ($userdata as $key => $val)
  99.             {
  100.                 /*if (strpos($key, 'password') !== false)
  101.                 {
  102.                     unset($userdata->$key);
  103.                     continue;
  104.                 }*/
  105.  
  106.                 $key = preg_replace('/user\_?/', '', $key);
  107.  
  108.                 self::$info[$key] = $val;
  109.                 # View::Set('user_' . $key, $val);
  110.             }
  111.         }
  112.     User::onlines();
  113.     }
  114.  
  115.     public static function info($name)
  116.     {
  117.         return isset(self::$info[$name]) ? self::$info[$name] : false;
  118.     }
  119.  
  120.     public static function logged()
  121.     {
  122.         return self::$info['logged'];
  123.     }
  124.  
  125.     public static function onlines()
  126.     {
  127.         $count = User::count('*', 'onlines')->where('ip = ?', $_SERVER['REMOTE_ADDR'])->exec()->fetchColumn();
  128.  
  129.         if($count)
  130.         {
  131.             $data = new stdClass;
  132.  
  133.             $data->timestamp = time();
  134.             $data->page = $_SERVER['REQUEST_URI'];
  135.  
  136.             User::update($data, 'onlines')->where('ip = ?', $_SERVER['REMOTE_ADDR'])->exec();
  137.         }
  138.         else
  139.         {
  140.             $data = new stdClass;
  141.             $data->timestamp = time();
  142.             $data->ip = $_SERVER['REMOTE_ADDR'];
  143.             $data->user_id = User::info('id');
  144.             $data->page = $_SERVER['REQUEST_URI'];
  145.  
  146.             User::insert($data, 'onlines')->exec();
  147.         }
  148.  
  149.         User::delete('onlines')->where('timestamp > ?', strtotime('2 minutes'))->exec();
  150.     }
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement