Update secure login flow and login view

This commit is contained in:
Lorenzune
2026-04-23 16:26:32 +02:00
parent 237c523f9a
commit 541d3045f1
24 changed files with 801 additions and 106 deletions
+1 -1
View File
@@ -2,7 +2,7 @@ export const GetLocalStorage = <T>(key: string) =>
{
try
{
JSON.parse(window.localStorage.getItem(key)) as T ?? null;
return JSON.parse(window.localStorage.getItem(key)) as T ?? null;
}
catch (e)
{
+59
View File
@@ -0,0 +1,59 @@
export interface RememberLoginData
{
token?: string;
ssoTicket?: string;
expiresAt: number;
username?: string;
}
const REMEMBER_LOGIN_KEY = 'nitro.auth.remember';
const DEFAULT_REMEMBER_SECONDS = 30 * 24 * 60 * 60;
export const GetRememberLogin = (): RememberLoginData | null =>
{
try
{
const data = JSON.parse(window.localStorage.getItem(REMEMBER_LOGIN_KEY) || 'null') as RememberLoginData | null;
if(!data?.token?.length && !data?.ssoTicket?.length) return null;
if(data.expiresAt && ((data.expiresAt * 1000) <= Date.now()))
{
ClearRememberLogin();
return null;
}
return data;
}
catch
{
return null;
}
};
export const SetRememberLogin = (data: RememberLoginData): void =>
{
if(!data?.token?.length && !data?.ssoTicket?.length) return;
try { window.localStorage.setItem(REMEMBER_LOGIN_KEY, JSON.stringify(data)); }
catch {}
};
export const ClearRememberLogin = (): void =>
{
try { window.localStorage.removeItem(REMEMBER_LOGIN_KEY); }
catch {}
};
export const StoreRememberLoginFromPayload = (payload: Record<string, unknown>, username?: string, ssoTicket?: string): void =>
{
const token = typeof payload.rememberToken === 'string' ? payload.rememberToken : '';
const rawExpiresAt = payload.rememberExpiresAt;
const parsedExpiresAt = typeof rawExpiresAt === 'number' ? rawExpiresAt : Number(rawExpiresAt || 0);
const expiresAt = (Number.isFinite(parsedExpiresAt) && parsedExpiresAt > 0)
? parsedExpiresAt
: Math.floor(Date.now() / 1000) + DEFAULT_REMEMBER_SECONDS;
if(!token.length && !ssoTicket?.length) return;
SetRememberLogin({ token: token || undefined, ssoTicket: ssoTicket || undefined, expiresAt, username });
};
+1
View File
@@ -14,6 +14,7 @@ export * from './PlaySound';
export * from './PrefixUtils';
export * from './ProductImageUtility';
export * from './Randomizer';
export * from './RememberLogin';
export * from './RoomChatFormatter';
export * from './SanitizeHtml';
export * from './SetLocalStorage';