<?php
namespace App\Libraries;
use App\Models\Remember;
use App\Models\User;
use Config\Services;
class Auth
{
protected $encrypter;
protected $user_model;
protected $remember;
function __construct()
{
\helper('cookie');
$this->encrypter = Services::encrypter();
$this->user_model = new User();
$this->remember = new Remember();
}
public function login($username_email = null, $password = null, $remember_me = false)
{
if (is_null($username_email) || is_null($password))
{
$this->alert->error('Please enter your credentials in the field provided');
return false;
}
$user = $this->user_model->where('email', $username_email)->first();
if (!is_null($user) && $this->verifyPassword($password, $user->password)) {
$save_user_data = $user->id;
if ($encrypt_data = $save_user_data) {
if ($remember_me) {
$data = [
'expires' => strtotime(getConfig('remember_me_expires')),
'persistence' => $encrypt_data,
'selector' => $this->generateToken()
];
return $this->setRememberMe($data);
}
session()->set(['ses_id' => $encrypt_data, 'loggedIn' => true]);
return \true;
}
return \false;
}
return false;
}
public function verifyPassword($pass = null, $hashed_pass = null)
{
return password_verify(
base64_encode(
hash('sha384', $pass, true)
),
$hashed_pass
);
}
public function setRememberMe($data = [])
{
if (\set_cookie(
\getConfig('auth_rememer_name'),
$data['selector'],
$data['expires']
)) {
$this->remember->insert($data);
return true;
}
}
public function checkRememberMe()
{
$cookie = \get_cookie(\getConfig('auth_rememer_name'));
if ($cookie) {
session()->set(['ses_id' => $stored->persistence, 'loggedIn' => true]);
}
}
public function getUser()
{
return $this->user_model->first(session()->ses_id);
}
function generateToken($length = 20)
{
return bin2hex(random_bytes($length));
}
public function is_logged_in()
{
if ($this->checkRememberMe()) {
}
if (session()->loggedIn) {
return true;
}
return false;
}
public function logout()
{
session()->remove(['ses_id', 'loggedIn']);
return true;
}
}