You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
5.3 KiB
195 lines
5.3 KiB
<?php
|
|
namespace app\core\auth;
|
|
|
|
use app\core\contract\Authentication;
|
|
use app\core\auth\Session;
|
|
use app\core\traits\Rememberme;
|
|
use app\core\utils\Request;
|
|
use app\core\utils\Response;
|
|
use app\core\utils\Cookie;
|
|
|
|
class User implements Authentication {
|
|
|
|
use Rememberme;
|
|
|
|
public static function login(array $userData): bool {
|
|
// Get CodeIgniter instance
|
|
$CI =& get_instance();
|
|
|
|
$CI->load->model('user_login_history_model');
|
|
|
|
$sessID = session_id();
|
|
|
|
$loginH = [
|
|
'session_id' => $sessID,
|
|
'role_id' => $userData['role_id'],
|
|
'user_id' => $userData['user_id']
|
|
];
|
|
|
|
/**
|
|
* This is when BO User login as Subscriber
|
|
* Add access token to history log
|
|
* */
|
|
if (isset($userData['token_id']) && !empty($userData['token_id'])) {
|
|
$loginH['access_token_id'] = $userData['token_id'];
|
|
}
|
|
|
|
// Add signin history
|
|
$login_id = $CI->user_login_history_model->client_checkdb(
|
|
array_merge(Request::metaData($CI), $loginH),
|
|
"LOGIN"
|
|
);
|
|
|
|
if (!$login_id) return false;
|
|
|
|
// Lets create session!
|
|
$sessionData = new Session(array_merge(
|
|
[
|
|
"session_id" => $sessID,
|
|
"login_id" => $login_id
|
|
], $userData
|
|
)
|
|
);
|
|
|
|
// Invalidate previous Remember Me
|
|
Rememberme::forget();
|
|
|
|
// Then create new one on-demand
|
|
if ($userData['remember_me']) {
|
|
Rememberme::create(
|
|
$userData['user_id'],
|
|
$userData['role_id'],
|
|
$userData['isBOUser']
|
|
);
|
|
}
|
|
|
|
// Register session data
|
|
$CI->session->set_userdata([ self::KEY => $sessionData->toArray() ]);
|
|
|
|
return !!$CI->session->userdata(self::KEY);
|
|
}
|
|
|
|
public static function logout() {
|
|
// Get CodeIgniter instance
|
|
$CI =& get_instance();
|
|
|
|
// Immediate redirection
|
|
if (!self::isAuth()) return Response::backToReferrerDefaultPage();
|
|
|
|
$userSession = self::auth();
|
|
|
|
// Invalidate access token
|
|
if (self::isLoggedInAsSubscriber()) {
|
|
$CI->user_model->update_access_token($userSession['token_id']);
|
|
}
|
|
|
|
// Add signout history
|
|
$CI->user_login_history_model->client_checkdb(array_merge(
|
|
Request::metaData($CI),
|
|
[
|
|
'session_id' => $userSession['session_id'],
|
|
'login_id' => $userSession['login_id'],
|
|
'user_id' => $userSession['user_id'],
|
|
'role_id' => $userSession['role_id']
|
|
]
|
|
), "LOGOUT");
|
|
|
|
// Finally reset login session
|
|
$CI->session->unset_userdata(self::KEY);
|
|
|
|
// Invalidate Remember Me
|
|
if (!$userSession['remember_me'])
|
|
Rememberme::forget();
|
|
|
|
// Redirect to respective page
|
|
if ($userSession["isBOUser"])
|
|
redirect(base_url('auth'));
|
|
else
|
|
redirect(base_url('home'));
|
|
}
|
|
|
|
/**
|
|
* Get session data
|
|
* @return void
|
|
*/
|
|
public static function auth(): array {
|
|
// Get CodeIgniter instance
|
|
$CI =& get_instance();
|
|
|
|
if (!self::isAuth()) return [];
|
|
|
|
return $CI->session->userdata(self::KEY);
|
|
}
|
|
|
|
public static function isAuth(): bool {
|
|
// Get CodeIgniter instance
|
|
$CI =& get_instance();
|
|
|
|
$loggedIn = $CI->session->userdata(self::KEY);
|
|
|
|
if (!$loggedIn) return false;
|
|
|
|
$CI->load->model('user_model');
|
|
|
|
return !!$CI->user_model->check_if_session_is_active($loggedIn);
|
|
}
|
|
|
|
public static function isBOUser(): bool {
|
|
// Get CodeIgniter instance
|
|
$CI =& get_instance();
|
|
|
|
return !!@$CI->session->userdata(self::KEY)['isBOUser'];
|
|
}
|
|
|
|
public static function isFOUser(): bool {
|
|
// Get CodeIgniter instance
|
|
$CI =& get_instance();
|
|
|
|
return !!!$CI->session->userdata(self::KEY)['isBOUser'];
|
|
}
|
|
|
|
public static function isFirstLogin(): bool {
|
|
// Get CodeIgniter instance
|
|
$CI =& get_instance();
|
|
|
|
return !!@$CI->session->userdata(self::KEY)['isFirstLogin'];
|
|
}
|
|
|
|
public static function isLoggedInAsSubscriber(): bool {
|
|
// Get CodeIgniter instance
|
|
$CI =& get_instance();
|
|
|
|
return !!$CI->session->userdata(self::KEY)['token_id'];
|
|
}
|
|
|
|
public static function isLoggedBySSO(): bool {
|
|
// Get CodeIgniter instance
|
|
$CI =& get_instance();
|
|
|
|
return !!$CI->session->userdata(self::KEY)['sso'] && count($CI->session->userdata(self::KEY)['sso']);
|
|
}
|
|
|
|
public static function isPremium(): bool {
|
|
// Get CodeIgniter instance
|
|
$CI =& get_instance();
|
|
|
|
return !!$CI->session->userdata(self::KEY)['premium'];
|
|
}
|
|
|
|
public static function updateSession($key, $value) {
|
|
$editableFields = ['first_name', 'last_name'];
|
|
if (in_array($key, $editableFields)) {
|
|
// Get CodeIgniter instance
|
|
$CI =& get_instance();
|
|
|
|
$loggedIn = $CI->session->userdata(self::KEY);
|
|
|
|
$loggedIn[$key] = $value;
|
|
|
|
$loggedIn['fullname'] = $loggedIn['first_name']." ".$loggedIn['last_name'];
|
|
|
|
// Register session data
|
|
$CI->session->set_userdata([ self::KEY => $loggedIn ]);
|
|
}
|
|
}
|
|
}
|