Add src/utils/auth.ts

This commit is contained in:
2026-03-11 19:51:07 +00:00
parent 96a8f5247a
commit b8135f1fc0

89
src/utils/auth.ts Normal file
View File

@@ -0,0 +1,89 @@
// Authentication utility functions
export interface AuthSession {
token: string;
email: string;
userId?: string;
expiresAt?: number;
}
export const authUtils = {
// Store session in sessionStorage
setSession: (session: AuthSession) => {
sessionStorage.setItem('authToken', session.token);
sessionStorage.setItem('userEmail', session.email);
if (session.userId) {
sessionStorage.setItem('userId', session.userId);
}
if (session.expiresAt) {
sessionStorage.setItem('expiresAt', session.expiresAt.toString());
}
},
// Get current session from sessionStorage
getSession: (): AuthSession | null => {
const token = sessionStorage.getItem('authToken');
const email = sessionStorage.getItem('userEmail');
if (!token || !email) {
return null;
}
return {
token,
email,
userId: sessionStorage.getItem('userId') || undefined,
expiresAt: sessionStorage.getItem('expiresAt')
? parseInt(sessionStorage.getItem('expiresAt')!)
: undefined,
};
},
// Check if user is authenticated
isAuthenticated: (): boolean => {
const session = authUtils.getSession();
if (!session) return false;
// Check if session has expired
if (session.expiresAt && new Date().getTime() > session.expiresAt) {
authUtils.clearSession();
return false;
}
return true;
},
// Clear session on logout
clearSession: () => {
sessionStorage.removeItem('authToken');
sessionStorage.removeItem('userEmail');
sessionStorage.removeItem('userId');
sessionStorage.removeItem('expiresAt');
},
// Persist remember-me preference
setRememberMe: (email: string) => {
localStorage.setItem('rememberEmail', email);
},
// Get remembered email
getRememberedEmail: (): string | null => {
return localStorage.getItem('rememberEmail');
},
// Clear remember-me preference
clearRememberMe: () => {
localStorage.removeItem('rememberEmail');
},
// Validate email format
isValidEmail: (email: string): boolean => {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);
},
// Validate password strength
isValidPassword: (password: string): boolean => {
return password.length >= 6;
},
};