forked from baron/baron-sso
43 lines
971 B
TypeScript
43 lines
971 B
TypeScript
export type PersistedOidcUser = {
|
|
access_token?: string;
|
|
expires_at?: number;
|
|
profile?: Record<string, unknown>;
|
|
};
|
|
|
|
const OIDC_USER_KEY_PREFIX = "oidc.user:";
|
|
const OIDC_CLIENT_ID = "devfront";
|
|
|
|
export function findPersistedOidcUser(
|
|
storage: Storage = window.localStorage,
|
|
): PersistedOidcUser | null {
|
|
for (let index = 0; index < storage.length; index += 1) {
|
|
const key = storage.key(index);
|
|
if (
|
|
key === null ||
|
|
!key.startsWith(OIDC_USER_KEY_PREFIX) ||
|
|
!key.endsWith(`:${OIDC_CLIENT_ID}`)
|
|
) {
|
|
continue;
|
|
}
|
|
|
|
const rawValue = storage.getItem(key);
|
|
if (!rawValue) {
|
|
continue;
|
|
}
|
|
|
|
try {
|
|
const parsed = JSON.parse(rawValue) as PersistedOidcUser;
|
|
if (
|
|
typeof parsed.expires_at === "number" &&
|
|
parsed.expires_at * 1000 > Date.now()
|
|
) {
|
|
return parsed;
|
|
}
|
|
} catch {
|
|
// Ignore malformed storage entries and keep scanning.
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|