import axios from "axios"; import Keycloak, { type KeycloakProfile } from "keycloak-js"; import { routes } from "Routes/Routes"; const keycloak = new Keycloak({ url: import.meta.env.VITE_KEYCLOAK_URL ? import.meta.env.VITE_KEYCLOAK_URL : "", realm: "quant_sim-realm", clientId: "react-frontend", }); export default keycloak; export async function getProfile(keycloak: Keycloak) { return keycloak.loadUserProfile(); } export const updateUserData = async ( profile: KeycloakProfile, ): Promise => { try { await keycloak.updateToken(30); const response = await axios.post( `${keycloak.authServerUrl}/realms/${keycloak.realm}/account/`, { firstName: profile.firstName, lastName: profile.lastName, email: profile.email, username: profile.username, attributes: profile.attributes || {}, }, { headers: { "Content-Type": "application/json", Authorization: `Bearer ${keycloak.token}`, }, withCredentials: true, // Important: allows credentials in CORS }, ); if (response.status === 204) { // Refresh the local profile after successful update const updatedProfile = await keycloak.loadUserProfile(); return updatedProfile; } } catch (err) { console.error(err); } }; export const updatePasswordWithRedirect = async ( successRedirectUrl?: string, ) => { try { await keycloak.updateToken(30); // Trigger the UPDATE_PASSWORD required action // This will redirect the user to Keycloak's password change page return keycloak.login({ action: "UPDATE_PASSWORD", redirectUri: successRedirectUrl || window.location.origin + "/" + routes.SettingsPage.path + "?password_updated=true", // Optional: Force re-authentication prompt: "login", }); } catch (error) { console.error("Failed to initiate password update:", error); throw error; } }; export const SendEmailVerification = async () => { try { await keycloak.updateToken(30); // Trigger the UPDATE_PASSWORD required action // This will redirect the user to Keycloak's password change page return keycloak.login({ action: "VERIFY_EMAIL", redirectUri: window.location.origin + "/" + routes.SettingsPage.path + "?email_sent=true", }); } catch (error) { console.error("Failed to initiate password update:", error); throw error; } };