From 6561771c435f9d9bed1589b5ed13d17aee0b7873 Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Sun, 11 Dec 2022 20:46:58 +0100 Subject: feat: Add frontpage --- code/app/src/services/account-service.ts | 35 ++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 15 deletions(-) (limited to 'code/app/src/services') diff --git a/code/app/src/services/account-service.ts b/code/app/src/services/account-service.ts index 9d45950..92c6126 100644 --- a/code/app/src/services/account-service.ts +++ b/code/app/src/services/account-service.ts @@ -1,4 +1,5 @@ import {http_delete_async, http_get_async, http_post_async} from "$api/_fetch"; +import {browser} from "$app/environment"; import {api_base, CookieNames, StorageKeys} from "$configuration"; import {is_known_problem} from "$models/internal/KnownProblem"; import {log_debug} from "$help/logger"; @@ -19,24 +20,29 @@ import type { } from "./abstractions/IAccountService"; export class AccountService implements IAccountService { - session: Writable; + session: Writable | undefined; private sessionCooldown = 3600; constructor() { - this.session = writable_persistent({ - name: StorageKeys.session, - initialState: {} as Session, - options: { - store: StoreType.LOCAL, - }, - }); - this.refresh_session(); + if (browser) { + this.session = writable_persistent({ + name: StorageKeys.session, + initialState: {} as Session, + options: { + store: StoreType.LOCAL, + }, + }); + this.refresh_session(); + } else { + this.session = undefined; + } } async refresh_session(forceRefresh: boolean = false): Promise { + if (!this.session) return; const currentValue = get(this.session); const currentEpoch = Temporal.Now.instant().epochSeconds; - if (currentValue?._lastUpdated + this.sessionCooldown < currentEpoch) { + if (!forceRefresh && ((currentValue?._lastUpdated ?? 0) + this.sessionCooldown) > currentEpoch) { log_debug("Session is not stale yet", { currentEpoch, staleEpoch: currentValue?._lastUpdated + this.sessionCooldown, @@ -45,11 +51,14 @@ export class AccountService implements IAccountService { } const sessionResponse = await http_get_async(api_base("_/account/session")); if (sessionResponse.ok) { - + this.session.set(await sessionResponse.json()); + } else { + this.session.set(null); } } async end_session(callback: Function): Promise { + if (!this.session) return; await this.logout_async(); this.session.set(null); if (typeof callback === "function") callback(); @@ -70,14 +79,12 @@ export class AccountService implements IAccountService { async logout_async(): Promise { const response = await http_get_async(api_base("_/account/logout")); - if (!response.ok) { const deleteCookieResponse = await fetch("/delete-cookie?key=" + CookieNames.session); if (!deleteCookieResponse.ok) { throw new Error("Could neither logout nor delete session cookie."); } } - return; } @@ -88,7 +95,6 @@ export class AccountService implements IAccountService { isCreated: false, knownProblem: await response.json(), }; - return { isCreated: false, }; @@ -108,7 +114,6 @@ export class AccountService implements IAccountService { isUpdated: false, knownProblem: await response.json(), }; - return { isUpdated: false, }; -- cgit v1.3