import { Injectable } from '@angular/core'; import { Config } from './types/config'; export function kcFactory() { const kc = require('keycloak-js/dist/keycloak.js'); return kc; } declare var require: any; @Injectable() export class IcsIamService { static config: any = {}; static authClient: any = {}; static options: any = { onLoad: 'login-required', checkLoginIframeInterval: 1 }; static user: any = undefined; static init(config: Config): Promise { IcsIamService.config = { realm: config.realm, url: config.url, 'ssl-required': config.sslRequired, clientId: config.clientId, redirectURL: config.redirectUrl, 'public-client': config.publicClient, 'use-resource-role-mappings': config.useResourceRoleMappings }; IcsIamService.authClient = kcFactory()(IcsIamService.config); return new Promise(IcsIamService.verify); } static verify(resolve: Function, reject: Function) { IcsIamService.authClient .init(IcsIamService.options) .success(() => { IcsIamService.authClient .loadUserProfile() .success(res => { IcsIamService.user = res; resolve(); }) .error(res => { reject(); }); }) .error((errorData: any) => { reject(errorData); }); } getUserName(): string { return IcsIamService.user.username || ''; } getFullName(): string { const firstName = IcsIamService.user.firstName || ''; const lastName = IcsIamService.user.lastName || ''; return firstName + ' ' + lastName; } authenticated(): boolean { return IcsIamService.authClient.authenticated; } login() { IcsIamService.authClient.login(); } logout() { IcsIamService.authClient.logout(); } account() { IcsIamService.authClient.accountManagement(); } getAccessResources(): Array { const resources: Array = new Array(); try { const resourceObject = IcsIamService.authClient.resourceAccess; for (const resourceName in resourceObject) { resources.push(resourceName); } } catch (error) { throw new Error('SSO::-> no access resources'); } return resources; } getToken(): Promise { return new Promise((resolve, reject) => { if (IcsIamService.authClient.token) { IcsIamService.authClient .updateToken(5) .success(() => { resolve(IcsIamService.authClient.token); }) .error(() => { reject('Failed to refresh token'); }); } else { reject('Not loggen in'); } }); } }