<?php
namespace SHServ;
use \SHServ\Entities\Session;
use \SHServ\Entities\User;
class Sessions {
protected $auth_user_instance;
protected $current_session_instance;
protected $table_name = "sessions";
public function create(Int $uid) {
$token = uniqid($uid . time());
$result = app() -> thin_builder -> insert($this -> table_name, [
"uid" => $uid,
"token" => $token,
"create_at" => date("Y-m-d H:i:s")
]);
return $result ? $token : false;
}
public function close($token) {
$session = $this -> get_session_by_token($token);
if(!$session) {
return false;
}
$session -> set("state", 2);
return $session -> update();
}
public function close_current_session() {
return $this -> close($this -> get_auth_token());
}
public function set_session(String $token) {
setcookie("auth_token", $token, time() + 3600 * 24 * 30, "/");
}
public function init_session(Int $uid) {
$token = $this -> create($uid);
if($token){
$this -> set_session($token);
}
return $token;
}
public function is_auth() {
return $this -> get_current_session() ? true : false;
}
public function get_auth_token() {
return isset($_COOKIE["auth_token"]) ? $_COOKIE["auth_token"] : null;
}
public function auth_user() {
if(!$this -> get_auth_token()) {
return null;
}
if(!$this -> auth_user_instance) {
$session = $this -> get_current_session();
if(!$session){
return null;
}
$this -> auth_user_instance = new User($session -> get("uid"));
}
return $this -> auth_user_instance;
}
public function get_current_session() {
if(!$this -> current_session_instance){
$token = $this -> get_auth_token();
if(!$token) {
return null;
}
$this -> current_session_instance = $this -> get_session_by_token($token);
if($this -> current_session_instance){
$this -> current_session_instance -> set("last_using_at", date("Y-m-d H:i:s")) -> update();
}
}
return $this -> current_session_instance;
}
public function get_session_by_token(String $token) {
$result = app() -> thin_builder -> select(
Session::$table_name,
Session::get_fields(),
[
["token", "=", $token],
"AND",
["state", "=", 1]
]
);
if(!$result) {
return null;
}
return new Session(intval($result[0]["id"]), $result[0]);
}
}