use MinehubsStudios\backend\Database; use MinehubsStudios\backend\Request; use MinehubsStudios\backend\Session; use PDO; use DateMalformedStringException; use DateTime; use Random\RandomException; class RememberMe { /** * @var Database */ private Database $database; /** * @var Request */ private Request $request; /** * @var Session * */ private Session $session; /** * REMEMBER ME CONSTRUCTOR. * * @param Database $database * @param Request $request * @param Session $session */ public function __construct(Database $database, Request $request, Session $session) { $this -> database = $database; $this -> request = $request; $this -> session = $session; } /** * SECURELY HANDLES 'Remember Me' COOKIE AUTHENTICATION. * * @return void * * @throws DateMalformedStringException * @throws RandomException */ public function authenticate(): void { if (!isset($_COOKIE['remember'])) { $this -> request -> redirectToLogin(); } $remember_token = $_COOKIE['remember']; // FETCH STORED TOKEN & EXPIRY FROM DB. $statement = $this -> database -> pdo -> prepare("SELECT users_id, remember_token, remember_expiry, users_name, users_role FROM users WHERE remember_token IS NOT NULL"); $statement -> execute(); $user = $statement -> fetch(PDO::FETCH_ASSOC); // VALIDATE TOKEN & EXPIRE. if (!$user || !isset($user['remember_token'], $user['remember_expiry']) || !is_string($remember_token) || !is_string($user['remember_token']) || !password_verify($remember_token, $user['remember_token'])) { $this -> clear(); $this -> request -> redirectToLogin(); } $expiry_time = is_string($user['remember_expiry']) ? $user['remember_expiry'] : '1970-01-01 00:00:00'; if (new DateTime() > new DateTime($expiry_time)) { $this -> clear(); $this -> request -> redirectToLogin(); } // STORE USER DATA. session_regenerate_id(true); $this -> session -> set("userid", $user['users_id']); $this -> session -> set("name", $user["users_name"]); $this -> session -> set("role", $user["users_role"]); // REFRESH 'Remember Me' EXPIRY. $this -> set($user['users_id']); } /** * SET 'Remember Me' TOKEN FOR USER. * * @param int $user_id - THE USER'S UNIQUE ID. * * @return void * * @throws RandomException */ public function set(int $user_id): void { $new_token = bin2hex(random_bytes(32)); $hashed_token = password_hash($new_token, PASSWORD_ARGON2ID); $expiry_time = new DateTime('+7 days') -> format('Y-m-d H:i:s'); $statement = $this -> database -> pdo -> prepare("UPDATE users SET remember_token = :token, remember_expiry = :expiry WHERE users_id = :id"); $statement -> execute(['token' => $hashed_token, 'expiry' => $expiry_time, 'id' => $user_id]); setcookie('remember', $new_token, [ 'expires' => strtotime('+7 days'), 'httponly' => true, 'secure' => isset($_SERVER['HTTPS']), 'samesite' => 'Strict' ]); } /** * CLEARS 'Remember Me' COOKIE & DB TOKEN. * * @return void */ private function clear(): void { setcookie('remember', '', time() - 3600, '/', '', isset($_SERVER['HTTPS']), true); $statement = $this -> database -> pdo -> prepare("UPDATE users SET remember_token = NULL, remember_expiry = NULL WHERE users_id = ?"); $statement -> execute([$this -> session -> get('userid')]); } } Warning: session_name(): Session name cannot be changed after headers have already been sent in /customers/a/5/e/minehubsstudios.com/httpd.www/backend/Session.php on line 55 Warning: ini_set(): Session ini settings cannot be changed after headers have already been sent in /customers/a/5/e/minehubsstudios.com/httpd.www/backend/Session.php on line 57 Warning: ini_set(): Session ini settings cannot be changed after headers have already been sent in /customers/a/5/e/minehubsstudios.com/httpd.www/backend/Session.php on line 58 Warning: ini_set(): Session ini settings cannot be changed after headers have already been sent in /customers/a/5/e/minehubsstudios.com/httpd.www/backend/Session.php on line 59 Warning: ini_set(): Session ini settings cannot be changed after headers have already been sent in /customers/a/5/e/minehubsstudios.com/httpd.www/backend/Session.php on line 60 Warning: session_set_cookie_params(): Session cookie parameters cannot be changed after headers have already been sent in /customers/a/5/e/minehubsstudios.com/httpd.www/backend/Session.php on line 62 Warning: session_start(): Session cannot be started after headers have already been sent in /customers/a/5/e/minehubsstudios.com/httpd.www/backend/Session.php on line 79 Warning: session_start(): Session cannot be started after headers have already been sent in /customers/a/5/e/minehubsstudios.com/httpd.www/backend/Session.php on line 79 Warning: Cannot modify header information - headers already sent by (output started at /customers/a/5/e/minehubsstudios.com/httpd.www/backend/auth/RememberMe.php:1) in /customers/a/5/e/minehubsstudios.com/httpd.www/Bootstrap.php on line 161 Warning: Cannot modify header information - headers already sent by (output started at /customers/a/5/e/minehubsstudios.com/httpd.www/backend/auth/RememberMe.php:1) in /customers/a/5/e/minehubsstudios.com/httpd.www/Bootstrap.php on line 162 Warning: Cannot modify header information - headers already sent by (output started at /customers/a/5/e/minehubsstudios.com/httpd.www/backend/auth/RememberMe.php:1) in /customers/a/5/e/minehubsstudios.com/httpd.www/Bootstrap.php on line 163 Warning: Cannot modify header information - headers already sent by (output started at /customers/a/5/e/minehubsstudios.com/httpd.www/backend/auth/RememberMe.php:1) in /customers/a/5/e/minehubsstudios.com/httpd.www/Bootstrap.php on line 164 Blog | Minehubs Studios Skip to content
Illume Short Film Festival
  • Media Team

Illume Short Film Festival

Last year, The Other Side reached London at the Lift Off Film Festival. This year, The Other Side is coming over sea to the United States and thus its first American film festival, where it has been selected for the Illume Short Film Festival in the category "Narrative Short Films". The festival is on July 17 - August 15 2021, due to corona it will be held and broadcast online. Results...



Read More




Lift Off Film Festival
  • Media Team

Lift Off Film Festival

The Other Side has been selected to its first international film festival. The festival is being held online from Pinewood Studios in London (UK). The festival can be followed online from December 21 to December 28, 2020 on Lift-Off Global Network Youtube channel. The Other Side has been selected for two categories "Any film, Any genre" and "Short Live Action Narratives". Results...



Read More