From b163f4d764d74b81cd91b53e99931a1a757589e7 Mon Sep 17 00:00:00 2001 From: Anonymous Contributor Date: Tue, 29 Aug 2023 13:55:12 +0200 Subject: [PATCH] Add middleware functionality --- app/middleware/AdminMiddleware.php | 16 ++++++++ app/middleware/LoginRequiredMiddleware.php | 45 ++++++++++++++++++++++ app/middleware/Middleware.php | 10 +++++ app/middleware/PreSessionMiddleware.php | 23 +++++++++++ app/middleware/SessionMiddleware.php | 45 ++++++++++++++++++++++ 5 files changed, 139 insertions(+) create mode 100644 app/middleware/AdminMiddleware.php create mode 100644 app/middleware/LoginRequiredMiddleware.php create mode 100644 app/middleware/Middleware.php create mode 100644 app/middleware/PreSessionMiddleware.php create mode 100644 app/middleware/SessionMiddleware.php 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