diff --git a/app/middleware/AdminMiddleware.php b/app/middleware/AdminMiddleware.php new file mode 100644 index 0000000..e12deae --- /dev/null +++ b/app/middleware/AdminMiddleware.php @@ -0,0 +1,16 @@ + 100; + } + + return false; + } +} \ No newline at end of file diff --git a/app/middleware/LoginRequiredMiddleware.php b/app/middleware/LoginRequiredMiddleware.php new file mode 100644 index 0000000..37bed41 --- /dev/null +++ b/app/middleware/LoginRequiredMiddleware.php @@ -0,0 +1,45 @@ +connProvider = $connProvider; + } + + public function canAccess(): bool + { + parent::handleSession(); + if (isset($_SESSION['UUID'])) { + // User level or existence of account may have changed since session was created + $getLevel = $this->connProvider->db()->prepare('SELECT UserLevel FROM UserAccounts WHERE PrincipalID = ?'); + $getLevel->execute([$_SESSION['UUID']]); + if ($row = $getLevel->fetch()) { + $_SESSION['LEVEL'] = $row['UserLevel']; + session_set_cookie_params(86400); + return true; + } + else { + session_unset(); + session_destroy(); + return false; + } + } + + return false; + } + + public function handleUnauthorized(): void + { + header('Location: index.php?page=login'); + } +} \ No newline at end of file diff --git a/app/middleware/Middleware.php b/app/middleware/Middleware.php new file mode 100644 index 0000000..7641702 --- /dev/null +++ b/app/middleware/Middleware.php @@ -0,0 +1,10 @@ +cookieDomain = $cookieDomain; + $this->cookieLifetime = $cookieLifetime; + } + + protected function handleSession(): void + { + switch(session_status()) { + case PHP_SESSION_DISABLED: + throw new UnexpectedValueException("Session functionality is disabled"); + break; + case PHP_SESSION_NONE: + session_set_cookie_params([ + 'lifetime' => $this->cookieLifetime, + 'path' => '/', + 'domain' => $this->cookieDomain, + 'httponly' => true, + 'secure' => true, + 'samesite' => 'Strict' + ]); + session_start(); + break; + default: + break; + } + + if(!isset($_SESSION['csrf']) || strlen($_SESSION['csrf']) != 64) { + $_SESSION['csrf'] = bin2hex(random_bytes(32)); + } + } +} \ No newline at end of file