aboutsummaryrefslogtreecommitdiffhomepage
path: root/Digitigrade/Model/Session.php
diff options
context:
space:
mode:
authorwinter2024-12-31 22:30:16 +0000
committerwinter2024-12-31 22:31:26 +0000
commit4cd7017da9a37e5b9f38c3f50dd1c904ea41cbcb (patch)
treed77f1fd223dae44f40b22c9810aeba238733310d /Digitigrade/Model/Session.php
parent982e6213622bcb78a40d17f54cda27225a1d84b3 (diff)
implement user accounts and login
Diffstat (limited to 'Digitigrade/Model/Session.php')
-rw-r--r--Digitigrade/Model/Session.php43
1 files changed, 43 insertions, 0 deletions
diff --git a/Digitigrade/Model/Session.php b/Digitigrade/Model/Session.php
new file mode 100644
index 0000000..31fb8bb
--- /dev/null
+++ b/Digitigrade/Model/Session.php
@@ -0,0 +1,43 @@
+<?php
+namespace Digitigrade\Model;
+
+use Digitigrade\GlobalConfig;
+use Digitigrade\Model;
+
+class Session extends Model {
+ public string $token;
+ public UserAccount $userAccount;
+
+ public static function create(UserAccount $user): self {
+ $session = new self();
+ $session->userAccount = $user;
+ $session->token = random_printable_bytes();
+ $session->save();
+ return $session;
+ }
+
+ protected function getUpdateWhereClause(\PDO $db): ?string {
+ if (self::findByToken($this->token) != null) {
+ return 'token = ' . $db->quote($this->token);
+ }
+ return null;
+ }
+
+ public static function findByToken(#[\SensitiveParameter] string $token): ?self {
+ return self::findWhere('token = ?', [$token]);
+ }
+
+ public static function findAllByAccount(UserAccount $userAccount): array {
+ return self::findAllWhere('user_account = ?', [$userAccount->id]);
+ }
+
+ public function setCookie(bool $rememberSession) {
+ setcookie('digitigrade-session', $this->token, [
+ 'expires' => $rememberSession ? (new \DateTimeImmutable('1 year'))->getTimestamp() : null,
+ 'httponly' => true,
+ 'samesite' => 'Lax',
+ 'path' => '/',
+ 'secure' => GlobalConfig::getInstance()->isHttps()
+ ]);
+ }
+} \ No newline at end of file