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
|