hrms-edm/Services/client/src/services/KeyCloakService.ts

78 lines
2 KiB
TypeScript
Raw Normal View History

2023-11-28 09:22:44 +07:00
import Keycloak from 'keycloak-js'
2023-11-23 08:47:44 +07:00
2023-11-28 09:22:44 +07:00
const keycloakInstance = new Keycloak()
2023-11-23 08:47:44 +07:00
interface CallbackOneParam<T1 = void, T2 = void> {
2023-11-28 09:22:44 +07:00
(param1: T1): T2
2023-11-23 08:47:44 +07:00
}
/**
* Initializes Keycloak instance and calls the provided callback function if successfully authenticated.
*
* @param onAuthenticatedCallback
*/
const Login = (onAuthenticatedCallback: CallbackOneParam): void => {
keycloakInstance
2023-11-28 09:22:44 +07:00
.init({ onLoad: 'login-required' })
2023-11-23 08:47:44 +07:00
.then(function (authenticated) {
2023-11-28 09:22:44 +07:00
authenticated ? onAuthenticatedCallback() : alert('non authenticated')
2023-11-23 08:47:44 +07:00
})
.catch((e) => {
2023-11-28 09:22:44 +07:00
console.dir(e)
console.log(`keycloak init exception: ${e}`)
})
}
2023-11-23 08:47:44 +07:00
const UserName = (): string | undefined =>
2023-11-28 09:22:44 +07:00
keycloakInstance?.tokenParsed?.preferred_username
2023-11-23 08:47:44 +07:00
2023-11-28 09:22:44 +07:00
const Token = (): string | undefined => keycloakInstance?.token
const IdToken = (): string | undefined => keycloakInstance?.idToken
2023-11-23 08:47:44 +07:00
2023-11-28 09:22:44 +07:00
const LogOut = () => keycloakInstance.logout()
2023-11-23 08:47:44 +07:00
/*
const UserRoles = (): string[] | undefined => {
if (keycloakInstance.resourceAccess === undefined) return undefined;
if (keycloakInstance.resourceAccess["express-client"] === undefined) return undefined;
return keycloakInstance.resourceAccess["express-client"].roles;
};
*/
2023-11-28 09:22:44 +07:00
const UserRoles = () => {
const decoded = DecodeToken()
2023-11-23 08:47:44 +07:00
2023-11-28 09:22:44 +07:00
if (decoded && decoded.resource_access) {
return decoded.resource_access[decoded.azp ?? ''].roles
}
return []
}
2023-11-23 08:47:44 +07:00
const updateToken = (successCallback: any) =>
2023-11-28 09:22:44 +07:00
keycloakInstance.updateToken(5).then(successCallback).catch(doLogin)
2023-11-23 08:47:44 +07:00
2023-11-28 09:22:44 +07:00
const doLogin = keycloakInstance.login
2023-11-23 08:47:44 +07:00
2023-11-28 09:22:44 +07:00
const isLoggedIn = () => !!keycloakInstance.token
2023-11-23 08:47:44 +07:00
2023-11-28 09:22:44 +07:00
const DecodeToken = () => {
return keycloakInstance.tokenParsed
}
const DecodeIdToken = () => {
return keycloakInstance.idTokenParsed
}
2023-11-23 08:47:44 +07:00
const KeycloakService = {
CallLogin: Login,
GetUserName: UserName,
GetAccesToken: Token,
GetIdToken: IdToken,
CallLogOut: LogOut,
GetUserRoles: UserRoles,
UpdateToken: updateToken,
IsLoggedIn: isLoggedIn,
2023-11-28 09:22:44 +07:00
GetDecodeToken: DecodeToken,
GetDecodeIdToken: DecodeIdToken,
}
2023-11-23 08:47:44 +07:00
2023-11-28 09:22:44 +07:00
export default KeycloakService