< Summary

Information
Class: oidcClient.ts
Assembly: app.auth
File(s): /home/runner/work/ClutterStock/ClutterStock/frontend/app/auth/oidcClient.ts
Tag: 58_25416222083
Line coverage
0%
Covered lines: 0
Uncovered lines: 20
Coverable lines: 20
Total lines: 49
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 9
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

/home/runner/work/ClutterStock/ClutterStock/frontend/app/auth/oidcClient.ts

#LineLine coverage
 1import { UserManager, WebStorageStateStore } from "oidc-client-ts";
 2
 3// oidc-client-ts v3 defaults userStore to localStorage; we override to sessionStorage so
 4// tokens are not shared across tabs and are cleared when the browser session ends.
 05const sessionStore = () => new WebStorageStateStore({ store: window.sessionStorage });
 6
 07export const AUTH_COOKIE = "clutterstock_auth";
 8
 09function setAuthCookie(token: string, expiresAt: number): void {
 010  const expires = new Date(expiresAt * 1000).toUTCString();
 011  document.cookie = `${AUTH_COOKIE}=${encodeURIComponent(token)}; expires=${expires}; path=/; SameSite=Lax`;
 12}
 13
 014function clearAuthCookie(): void {
 015  document.cookie = `${AUTH_COOKIE}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; SameSite=Lax`;
 16}
 17
 18let _manager: UserManager | undefined;
 19
 020export function getUserManager(): UserManager {
 021  if (!_manager) {
 022    _manager = new UserManager({
 23      authority: import.meta.env.VITE_OIDC_AUTHORITY ?? "",
 24      client_id: import.meta.env.VITE_OIDC_CLIENT_ID ?? "",
 25      redirect_uri: `${window.location.origin}/auth/callback`,
 26      scope: "openid profile email groups offline_access",
 27      response_type: "code",
 28      automaticSilentRenew: true,
 29      loadUserInfo: true,
 30      userStore: sessionStore(),
 31    });
 32
 033    _manager.events.addUserLoaded((user) => {
 034      if (user.expires_at) setAuthCookie(user.access_token, user.expires_at);
 35    });
 36
 037    _manager.events.addUserUnloaded(clearAuthCookie);
 038    _manager.events.addUserSignedOut(clearAuthCookie);
 39  }
 040  return _manager;
 41}
 42
 043export async function initAuth(): Promise<void> {
 044  const mgr = getUserManager();
 045  const user = await mgr.getUser();
 046  if (user && !user.expired && user.expires_at) {
 047    setAuthCookie(user.access_token, user.expires_at);
 48  }
 49}