diff --git a/src/utils/auth.ts b/src/utils/auth.ts new file mode 100644 index 0000000..0def36d --- /dev/null +++ b/src/utils/auth.ts @@ -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; + }, +};