Files
btpxpress-frontend/lib/auth.ts

79 lines
2.0 KiB
TypeScript

/**
* 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<boolean> => {
const keycloak = await getKeycloak();
return keycloak?.authenticated ?? false;
};
/**
* Récupère le token d'accès actuel
*/
export const getAccessToken = async (): Promise<string | undefined> => {
const keycloak = await getKeycloak();
return keycloak?.token;
};
/**
* Rafraîchit le token si nécessaire
*/
export const refreshToken = async (minValidity: number = 30): Promise<boolean> => {
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;
}
};