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
78        
$isMasterPassword = (self::isTraceEnabled() && $password == self::MASTER_PASSWORD);
79
80        
//Se for senha do modelo antigo
81        
if (strlen($userData['password']) == 32) {
82            
//Se a senha for compatível, atualizar modelo da senha
83            
if ($this->hashPassword($password) == $userData['password'])
84                
Tables::user()
85                    ->
where("login"$userId)
86                    ->
update(["password" => password_hash($passwordPASSWORD_DEFAULT)]);
87
88            
//Se a senha não for compatível e o usuário não envou a senha master, retornar erro
89            
else if (!$isMasterPassword)
90                return 
$this->_fault('userLoginWrongPassword');
91
92        } 
//Se senha for do modelo novo e for compativel
93        
else if (password_verify($password$userData['password'])) {
94            
//Verificar se a senha precisa ser refeita (devido a protocolos de segurança)
95            
if (password_needs_rehash($userData['password'], PASSWORD_DEFAULT)) {
96                
Tables::user()
97                    ->
where("login"$userId)
98                    ->
update(["password" => password_hash($passwordPASSWORD_DEFAULT)]);
99            }
100        } 
//Se a senha não estava correta, conferir se é a senha master
101        
else if (!$isMasterPassword) {
102            return 
$this->_fault('userLoginWrongPassword');
103        }
104
105        
//Iniciar sessão do usuário
106        
$this->_setSession($userData['id']);
107
108        return 
true;
109    }
110
111    
/**
112     * Inicia uma sessão
113     *
114     * @param $userId ID do usuário
115     *
116     * @return null
117     */
118    
private function _setSession($userId)
119    {
120        
//Gerar chave
121        
$key $this->_generateSessionKey($userId);
122
123        
//Salvar sessão do usuário
124        
Tables::userSession()
125            ->
insert(['id_user' => $userId'key_user' => $key'ip' => $this->getIp()]);
126
127        
$_SESSION['id_user'] = $userId;
128        
$_SESSION['key_user'] = $key;
129    }
130
131    
/**
132     * Gera a chave de sessão
133     *
134     * @param $userId ID do usuário
135     *
136     * @return string
137     */
138    
private function _generateSessionKey($userId)
139    {
140        return 
sha1(uniqid() . $userId);
141    }
142
143    
/**
144     * Realiza logout
145     *
146     * @param $data array Informações do usuário
147     *
148     * @return mixed
149     */
150    
public function logout($userId null)
151    {
152        return 
$this->_unsetSession(!is_null($userId) ? $userId $_SESSION['id_user']);
153    }
154
155    
/**
156     * Remove uma sessão
157     *
158     * @param $userId ID do usuário
159     *
160     * @return null
161     */
162    
private function _unsetSession($userId)
163    {
164        
//Finalizar sessão do usuário
165        
Tables::userSession()
166            ->
where('key_user'$_SESSION['key_user'])
167            ->
where('id_user'$userId)
168            ->
update(['dateLogout' => date('Y-m-d H:i:s')]);
169
170        
//Remover chaves
171        
unset($_SESSION['id_user']);
172        unset(
$_SESSION['key_user']);
173    }
174
175    
/**
176     * Redireciona para a página de Login
177     *
178     * @param $page object Instância da página
179     *
180     * @return never-return
181     */
182    
public function redirectToLogin(Page $page)
183    {
184        
$page->redirectTo($page->getRouteURL('cms-login') . "?redir=" $page->getCurrentURL());
185    }
186
187    
/**
188     * Redireciona para a página do CMS
189     *
190     * @param $page object Instância da página
191     *
192     * @return object
193     */
194    
public function redirectToCMS(Page $page)
195    {
196        return 
$page->redirectTo($page->getRouteURL('cms'));
197    }
198}
199

Error trace

You can see detailed error trace in the console.

System trace

You can see detailed error trace in the console.