feat: refactored front end
This commit is contained in:
100
front/MyINPulse-front/src/services/keycloak.ts
Normal file
100
front/MyINPulse-front/src/services/keycloak.ts
Normal file
@ -0,0 +1,100 @@
|
||||
import Keycloak from 'keycloak-js';
|
||||
|
||||
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: any) {
|
||||
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;
|
Reference in New Issue
Block a user