/** * Utilitaires d'authentification centralisés * Utilise le SDK Keycloak JS pour toutes les opérations d'authentification * * IMPORTANT: Utilise un import conditionnel pour éviter les erreurs SSR */ /** * Récupère l'instance Keycloak de manière sécurisée (client-side uniquement) */ const getKeycloak = async () => { if (typeof window === 'undefined') return null; const { default: keycloak } = await import('./keycloak'); return keycloak; }; /** * Redirige vers la page de connexion Keycloak */ export const redirectToLogin = async (returnUrl?: string) => { if (typeof window === 'undefined') return; const keycloak = await getKeycloak(); if (keycloak) { const redirectUri = returnUrl ? `${window.location.origin}${returnUrl}` : `${window.location.origin}/dashboard`; keycloak.login({ redirectUri }); } else { console.error('❌ Keycloak non initialisé'); } }; /** * Redirige vers la page de déconnexion Keycloak */ export const redirectToLogout = async () => { if (typeof window === 'undefined') return; const keycloak = await getKeycloak(); if (keycloak) { keycloak.logout({ redirectUri: window.location.origin }); } else { console.error('❌ Keycloak non initialisé'); } }; /** * Vérifie si l'utilisateur est authentifié */ export const isAuthenticated = async (): Promise => { const keycloak = await getKeycloak(); return keycloak?.authenticated ?? false; }; /** * Récupère le token d'accès actuel */ export const getAccessToken = async (): Promise => { const keycloak = await getKeycloak(); return keycloak?.token; }; /** * Rafraîchit le token si nécessaire */ export const refreshToken = async (minValidity: number = 30): Promise => { const keycloak = await getKeycloak(); if (!keycloak) return false; try { return await keycloak.updateToken(minValidity); } catch (error) { console.error('❌ Erreur lors du rafraîchissement du token:', error); return false; } };