147 lines
No EOL
5.9 KiB
PHP
147 lines
No EOL
5.9 KiB
PHP
<?php
|
|
|
|
/** Importação de classes */
|
|
use vendor\model\Users;
|
|
use vendor\controller\users\UsersValidate;
|
|
|
|
try{
|
|
|
|
/** Instânciamento de classes */
|
|
$Users = new Users();
|
|
$UsersValidate = new UsersValidate();
|
|
|
|
/** Parametros de entrada */
|
|
$userPassword = isset($_POST['user-password']) ? (string)filter_input(INPUT_POST, 'user-password', FILTER_SANITIZE_SPECIAL_CHARS) : '';
|
|
|
|
/** Validando os campos de entrada */
|
|
$UsersValidate->setEmail($Main->decryptData($_COOKIE['UserEmail']));//Autentica o usuário a partir do cookie com o e-mail e a senha informada
|
|
$UsersValidate->setPassword($userPassword);
|
|
|
|
/** Verifica se não existem erros a serem informados */
|
|
if (!empty($UsersValidate->getErrors())) {
|
|
|
|
/** Informo */
|
|
throw new InvalidArgumentException($UsersValidate->getErrors(), 0);
|
|
|
|
} else {
|
|
|
|
|
|
/** Consulta o usuário junto ao banco de dados para verificar se é o primeiro acesso*/
|
|
$UsersResult = $Users->Access($UsersValidate->getEmail(), $UsersValidate->getPassword(), 'N');
|
|
|
|
/** Verifica se existem resultados */
|
|
if( is_object($UsersResult) ){
|
|
|
|
/** Verifica se o usuário foi localizado */
|
|
if($UsersResult->user_id > 0){
|
|
|
|
/** Verifica se a senha informada confere com seu hash */
|
|
if ( password_verify($UsersValidate->getPassword(), $UsersResult->password) ) {
|
|
|
|
/** Carrega as configurações de criptografia */
|
|
$config = $Main->LoadConfigPublic();
|
|
|
|
/** Parametros para descriptografar dados */
|
|
$method = $config->{'app'}->{'security'}->{'method'};
|
|
$firstKey = $config->{'app'}->{'security'}->{'first_key'};
|
|
|
|
/** Inicia a sessão do usuário */
|
|
$Main->SessionStart();
|
|
|
|
/** Cria as sessões pessoais necessárias para o usuário */
|
|
$_SESSION['USERSID'] = (int)$UsersResult->user_id;
|
|
$_SESSION['USERSACLID'] = (int)$UsersResult->users_acl_id;
|
|
$_SESSION['USERSEMAIL'] = (string)$UsersResult->email;
|
|
$_SESSION['USERSNAMEFIRST'] = $Main->decryptData((string)$UsersResult->name_first);
|
|
$_SESSION['USERSACCESSFIRST'] = (string)$UsersResult->access_first;
|
|
$_SESSION['USERSACCESSLAST'] = (string)$UsersResult->access_last;
|
|
|
|
/** Cria as sessões da empresa a qual o usuário está vinculado */
|
|
$_SESSION['USERSCOMPANYID'] = (int)$UsersResult->company_id;
|
|
$_SESSION['USERSCOMPANYFANTASYNAME'] = (string)$UsersResult->fantasy_name;
|
|
$_SESSION['USERSCOMPANYNAME'] = (string)$UsersResult->company_name;
|
|
$_SESSION['USERSCOMPANYDOCUMENT'] = (string)$UsersResult->document;
|
|
|
|
/** Cria o Token do usuário */
|
|
$_SESSION['USERSTOKEN'] = $Main->encryptData($config->app->security->hash.'-'.(int)$UsersResult->user_id.'-'.session_id());
|
|
|
|
/** Inicialização da sessão do usuário */
|
|
$_SESSION['USERSSTARTTIME'] = date("Y-m-d H:i:s");
|
|
|
|
/** Gera o cookie do usuário com duração de um dia */
|
|
setcookie("UserEmail", $Main->encryptData($UsersResult->email), time() + (86400 * 30), "/"); // 86400 = 1 day
|
|
|
|
if($rememberAccess == 'S'){
|
|
|
|
setcookie("UserPassword", $Main->encryptData($UsersValidate->getPassword()), time() + (86400 * 30), "/"); // 86400 = 1 day
|
|
setcookie("RememberAccess", $rememberAccess, time() + (86400 * 30), "/"); // 86400 = 1 day
|
|
|
|
}
|
|
|
|
/** Atualizo o acesso junto ao cadastro do usuário, caso não seja o primeiro acesso */
|
|
if($Users->AccessInfo('new')){
|
|
|
|
|
|
/** Informa o resultado positivo **/
|
|
$result = [
|
|
|
|
'cod' => 96,
|
|
'title' => '',
|
|
'url' => '', # Define uma url especifica dentro da aplicação para carregar
|
|
'message' => 'Usuário autenticado com sucesso',
|
|
'sessionTime' => $Main->getSessionTime()
|
|
|
|
];
|
|
|
|
|
|
}else{/** Falha na gravação de log do usuário */
|
|
|
|
throw new InvalidArgumentException('Não foi possível efetuar o log de acesso do usuário', 0);
|
|
}
|
|
|
|
/** Envio **/
|
|
echo json_encode($result);
|
|
|
|
/** Paro o procedimento **/
|
|
exit;
|
|
|
|
/** Caso a senha não esteja correta informo */
|
|
}else{
|
|
|
|
throw new InvalidArgumentException('Senha informada não confere, tente novamente.', 0);
|
|
}
|
|
|
|
/** Caso o usuário não tenha sido localizado, informo */
|
|
}else{
|
|
|
|
throw new InvalidArgumentException('Usuário não localizado, verifique sua senha.', 0);
|
|
}
|
|
|
|
/** Caso o usuário não tenha sido localizado informo */
|
|
}else{
|
|
|
|
throw new InvalidArgumentException('Usuário não localizado, verifique sua senha.', 0);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}catch(Exception $exception){
|
|
|
|
/** Preparo o formulario para retorno **/
|
|
$result = [
|
|
|
|
'cod' => 0,
|
|
'message' => '<div class="alert alert-danger" role="alert">'.$exception->getMessage().'</div>',
|
|
'title' => 'Falha na autenticação',
|
|
'type' => 'exception',
|
|
'screensaver' => true,
|
|
|
|
];
|
|
|
|
/** Envio **/
|
|
echo json_encode($result);
|
|
|
|
/** Paro o procedimento **/
|
|
exit;
|
|
} |