79 lines
2.0 KiB
TypeScript
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;
|
|
}
|
|
};
|