EXCEPTION

User without session: ADMIN:userNotLogged

/var/www/bensocial/dev.bensocial.com.br/Modules/Classes/CMS/_Session.php 30

1 <?php
2
/**
3 * Trait com as funções de usuários
4 *
5 * @package    Admin
6 * @author    Lucas/Postali
7 */
8
9
namespace CMS;
10
11use 
Navigation\Page;
12use 
Fault;
13
14trait 
_Session
15
{
16    
/**
17     * Verifica se o usuário possui uma sessão válida
18     *
19     * @param $data array Informações do usuário (login e password)
20     *
21     * @return mixed
22     * @throws CMSException
23     */
24    
public static function validateSession()
25    {
26        
trace('Validating session''CMS');
27
28        
//Verificar se todos os dados estão disponíveis
29        
if (empty($_SESSION['key_user']) || empty($_SESSION['id_user'])){
30            throw new CMSException("User without session: ADMIN:userNotLogged"401);

31        }
32
33        
//Buscar dados da sessão atual
34        
$session Tables::userSession()
35            ->
columns(["id_user""dateLogout"])
36            ->
where('key_user'$_SESSION['key_user'])
37            ->
selectFirst();
38
39        
//Verificar se essa sessão existe já foi deslogada
40        
if ($session instanceof Fault || empty($session) || !empty($session['dateLogout'])){
41            throw new 
CMSException("User not logged: ADMIN:userNotLogged"401);
42        }
43
44        
//Verificar se o usuário está correto (evitar fraude)
45        
if ($_SESSION['id_user'] != $session['id_user']){
46            throw new 
CMSException("Invalid key: ADMIN:userInvalidKey"401);
47        }
48
49        return 
true;
50    }
51
52    
/**
53     * Realiza login do usuário
54     *
55     * @param $data array Informações do usuário (login e password)
56     *
57     * @return mixed
58     */
59    
public function login($userId$password)
60    {
61        
//Iniciar tabela incluindo o login enviado
62        
$user Tables::user()
63            ->
whereNull('dateDelete')
64            ->
where("login"$userId);
65
66        
//Se não existe o usuário, retornar erro
67        
if (!$user->exist())
68            return 
$this->_fault('userLoginNotFound');
69
70        
$userData $user
71            
->columns(["id""password"])
72            ->
selectFirst();
73
74        if (
$userData instanceof Fault)
75            return 
$userData;
76
77        
$isMasterPassword = (self::isTraceEnabled() && $password == self::MASTER_PASSWORD);
78
79        if (
password_verify($password$userData['password'])) {
80            
$this->passwordRehash($userId$password);
81        }
82        
//Se a senha não estava correta, conferir se é a senha master
83        
elseif (!$isMasterPassword) {
84            return 
$this->_fault('userLoginWrongPassword');
85        }
86
87        
//Iniciar sessão do usuário
88        
$this->_setSession($userData['id']);
89
90        return 
true;
91    }
92
93    private function 
passwordRehash($userId$password$algo PASSWORD_DEFAULT)
94    {
95        
//Verificar se a senha precisa ser refeita (devido a protocolos de segurança)
96        
if (!password_needs_rehash($passwordPASSWORD_DEFAULT)) {
97            return;
98        }
99
100        
Tables::user()
101            ->
where("login"$userId)
102            ->
update(["password" => password_hash($passwordPASSWORD_DEFAULT)]);
103    }
104
105    
/**
106     * Inicia uma sessão
107     *
108     * @param $userId ID do usuário
109     *
110     * @return null
111     */
112    
private function _setSession($userId)
113    {
114        
//Gerar chave
115        
$key $this->_generateSessionKey($userId);
116
117        
//Salvar sessão do usuário
118        
Tables::userSession()
119            ->
insert(['id_user' => $userId'key_user' => $key'ip' => $this->getIp()]);
120
121        
$_SESSION['id_user'] = $userId;
122        
$_SESSION['key_user'] = $key;
123    }
124
125    
/**
126     * Gera a chave de sessão
127     *
128     * @param $userId ID do usuário
129     *
130     * @return string
131     */
132    
private function _generateSessionKey($userId)
133    {
134        return 
sha1(uniqid() . $userId);
135    }
136
137    
/**
138     * Realiza logout
139     *
140     * @param $data array Informações do usuário
141     *
142     * @return mixed
143     */
144    
public function logout($userId null)
145    {
146        return 
$this->_unsetSession(!is_null($userId) ? $userId $_SESSION['id_user']);
147    }
148
149    
/**
150     * Remove uma sessão
151     *
152     * @param $userId ID do usuário
153     *
154     * @return null
155     */
156    
private function _unsetSession($userId)
157    {
158        
//Finalizar sessão do usuário
159        
Tables::userSession()
160            ->
where('key_user'$_SESSION['key_user'])
161            ->
where('id_user'$userId)
162            ->
update(['dateLogout' => date('Y-m-d H:i:s')]);
163
164        
//Remover chaves
165        
unset($_SESSION['id_user']);
166        unset(
$_SESSION['key_user']);
167    }
168
169    
/**
170     * Redireciona para a página de Login
171     *
172     * @param $page object Instância da página
173     *
174     * @return never-return
175     */
176    
public function redirectToLogin(Page $page)
177    {
178        
$page->redirectTo($page->getRouteURL('cms-login') . "?redir=" $page->getCurrentURL());
179    }
180
181    
/**
182     * Redireciona para a página do CMS
183     *
184     * @param $page object Instância da página
185     *
186     * @return object
187     */
188    
public function redirectToCMS(Page $page)
189    {
190        return 
$page->redirectTo($page->getRouteURL('cms'));
191    }
192}
193

Error trace

You can see detailed error trace in the console.

System trace

You can see detailed error trace in the console.