Pierre Tellier 645a10477d
All checks were successful
CI / build (push) Successful in 4s
feat: now respect codestyle
2025-02-09 15:59:30 +01:00

101 lines
2.5 KiB
TypeScript

import Keycloak from "keycloak-js";
import type { AuthStore } from "@/stores/authStore.ts";
const options = {
url: import.meta.env.VITE_KEYCLOAK_URL,
clientId: import.meta.env.VITE_KEYCLOAK_CLIENT_ID,
realm: import.meta.env.VITE_KEYCLOAK_REALM,
};
const keycloak = new Keycloak(options);
let authenticated: boolean | undefined;
let store = null;
async function login() {
try {
await keycloak.login(); // https://www.keycloak.org/securing-apps/javascript-adapter#:~:text=when%20initialization%20completes.-,login(options),-Redirects%20to%20login
return keycloak;
} catch (error) {
console.log(error);
}
}
async function signup() {
try {
await keycloak.login({ action: "register" }); // https://www.keycloak.org/securing-apps/javascript-adapter#:~:text=when%20initialization%20completes.-,login(options),-Redirects%20to%20login
return keycloak;
} catch (error) {
console.log(error);
}
}
/**
* Initializes Keycloak, then run callback. This will prompt you to login.
*
* @param onInitCallback
*/
async function init(onInitCallback: () => void) {
try {
authenticated = await keycloak.init({
onLoad: "check-sso",
silentCheckSsoRedirectUri: `${location.origin}/silent-check-sso.htm`,
responseMode: "query",
});
onInitCallback();
} catch (error) {
console.error("Keycloak init failed");
console.error(error);
}
}
/**
* Initializes store with Keycloak user data
*
*/
async function initStore(storeInstance: AuthStore) {
try {
store = storeInstance;
console.log(keycloak);
await store.initOauth(keycloak);
// Show alert if user is not authenticated
if (!authenticated) {
console.warn("not authenticated");
}
} catch (error) {
console.error("Keycloak init failed");
console.error(error);
}
}
/**
* Logout user
*/
function logout(url: string) {
keycloak.logout({ redirectUri: url });
}
/**
* Refreshes token
*/
async function refreshToken() {
try {
await keycloak.updateToken(480);
return keycloak;
} catch (error) {
console.error("Failed to refresh token");
console.error(error);
}
}
const KeycloakService = {
CallInit: init,
CallInitStore: initStore,
CallLogout: logout,
CallTokenRefresh: refreshToken,
callLogin: login,
callSignup: signup,
};
export default KeycloakService;