UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

72 lines 10.6 kB
import { AppStateService, TenantUiService } from '@c8y/ngx-components'; import { BasicAuth, FetchClient } from '@c8y/client'; export class AuthBridgeService { constructor(injector, basicAuth, fetchClient, appState, tenantUiService) { this.injector = injector; this.basicAuth = basicAuth; this.fetchClient = fetchClient; this.appState = appState; this.tenantUiService = tenantUiService; this.hookAuth(); } updateBasicAuth(credentials) { const { headers } = this.fetchClient.getFetchOptions({}); if (headers.Authorization) { const token = headers.Authorization.match(/basic\s(.*)$/i)[1]; if (token) { this.basicAuth.updateCredentials(credentials); this.fetchClient.setAuth(this.basicAuth); } } } hookAuth() { this.appState.currentUser.subscribe(user => { if (!user) { this.injector.get('$rootScope').$emit('authStateChange', { hasAuth: false }); return; } this.injector.get('c8yAuth').headers = () => this.fetchClient.getFetchOptions({}).headers; const { headers } = this.fetchClient.getFetchOptions({}); const authorizationHeader = headers.Authorization; if (typeof authorizationHeader === 'string' && authorizationHeader.startsWith('Basic')) { const matches = authorizationHeader.match(/basic\s(.*)$/i); const token = matches && matches[1]; if (token) { this.setToken(token, headers.tfatoken); } } else if (typeof authorizationHeader === 'string' && authorizationHeader.startsWith('Bearer')) { this.setToken(undefined, headers.tfatoken, 'Bearer'); } else { this.setToken(undefined, headers.tfatoken, 'Oauth'); } this.injector.get('$rootScope').$emit('authStateChange', { hasAuth: true }); }); } setToken(token, tfa, type = 'Basic') { const c8yAuth = this.injector.get('c8yAuth'); if (type === 'Basic') { c8yAuth.onSetToken({ token, type }); if (tfa) { c8yAuth.setTFAToken(tfa); } } else { c8yAuth.authReady(); } } getPreferredLoginOption() { return this.tenantUiService.getPreferredLoginOption(this.appState.state.loginOptions); } } export function authBridgeServiceFactory(injector, basicAuth, fetchClient, appState, tenantUiService) { return new AuthBridgeService(injector, basicAuth, fetchClient, appState, tenantUiService); } export const authBridgeServiceProvider = { provide: AuthBridgeService, useFactory: authBridgeServiceFactory, deps: ['$injector', BasicAuth, FetchClient, AppStateService, TenantUiService] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1icmlkZ2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VwZ3JhZGUvYXV0aC1icmlkZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFnQixNQUFNLGFBQWEsQ0FBQztBQUVuRSxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQ1MsUUFBYSxFQUNaLFNBQW9CLEVBQ3BCLFdBQXdCLEVBQ3hCLFFBQXlCLEVBQ3pCLGVBQWdDO1FBSmpDLGFBQVEsR0FBUixRQUFRLENBQUs7UUFDWixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUV4QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELGVBQWUsQ0FBQyxXQUF5QjtRQUN2QyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDMUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUQsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0MsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtR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ZSxDQUFDLENBQUM7QUFDNUYsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHO0lBQ3ZDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsVUFBVSxFQUFFLHdCQUF3QjtJQUNwQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDO0NBQzlFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UsIFRlbmFudFVpU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQmFzaWNBdXRoLCBGZXRjaENsaWVudCwgSUNyZWRlbnRpYWxzIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG5leHBvcnQgY2xhc3MgQXV0aEJyaWRnZVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW5qZWN0b3I6IGFueSxcbiAgICBwcml2YXRlIGJhc2ljQXV0aDogQmFzaWNBdXRoLFxuICAgIHByaXZhdGUgZmV0Y2hDbGllbnQ6IEZldGNoQ2xpZW50LFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFVpU2VydmljZTogVGVuYW50VWlTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaG9va0F1dGgoKTtcbiAgfVxuXG4gIHVwZGF0ZUJhc2ljQXV0aChjcmVkZW50aWFsczogSUNyZWRlbnRpYWxzKSB7XG4gICAgY29uc3QgeyBoZWFkZXJzIH0gPSB0aGlzLmZldGNoQ2xpZW50LmdldEZldGNoT3B0aW9ucyh7fSk7XG4gICAgaWYgKGhlYWRlcnMuQXV0aG9yaXphdGlvbikge1xuICAgICAgY29uc3QgdG9rZW4gPSBoZWFkZXJzLkF1dGhvcml6YXRpb24ubWF0Y2goL2Jhc2ljXFxzKC4qKSQvaSlbMV07XG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgdGhpcy5iYXNpY0F1dGgudXBkYXRlQ3JlZGVudGlhbHMoY3JlZGVudGlhbHMpO1xuICAgICAgICB0aGlzLmZldGNoQ2xpZW50LnNldEF1dGgodGhpcy5iYXNpY0F1dGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhvb2tBdXRoKCkge1xuICAgIHRoaXMuYXBwU3RhdGUuY3VycmVudFVzZXIuc3Vic2NyaWJlKHVzZXIgPT4ge1xuICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KCckcm9vdFNjb3BlJykuJGVtaXQoJ2F1dGhTdGF0ZUNoYW5nZScsIHsgaGFzQXV0aDogZmFsc2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlBdXRoJykuaGVhZGVycyA9ICgpID0+IHRoaXMuZmV0Y2hDbGllbnQuZ2V0RmV0Y2hPcHRpb25zKHt9KS5oZWFkZXJzO1xuICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSB0aGlzLmZldGNoQ2xpZW50LmdldEZldGNoT3B0aW9ucyh7fSk7XG4gICAgICBjb25zdCBhdXRob3JpemF0aW9uSGVhZGVyID0gaGVhZGVycy5BdXRob3JpemF0aW9uO1xuICAgICAgaWYgKHR5cGVvZiBhdXRob3JpemF0aW9uSGVhZGVyID09PSAnc3RyaW5nJyAmJiBhdXRob3JpemF0aW9uSGVhZGVyLnN0YXJ0c1dpdGgoJ0Jhc2ljJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGF1dGhvcml6YXRpb25IZWFkZXIubWF0Y2goL2Jhc2ljXFxzKC4qKSQvaSk7XG4gICAgICAgIGNvbnN0IHRva2VuID0gbWF0Y2hlcyAmJiBtYXRjaGVzWzFdO1xuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICB0aGlzLnNldFRva2VuKHRva2VuLCBoZWFkZXJzLnRmYXRva2VuKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIGF1dGhvcml6YXRpb25IZWFkZXIgPT09ICdzdHJpbmcnICYmXG4gICAgICAgIGF1dGhvcml6YXRpb25IZWFkZXIuc3RhcnRzV2l0aCgnQmVhcmVyJylcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNldFRva2VuKHVuZGVmaW5lZCwgaGVhZGVycy50ZmF0b2tlbiwgJ0JlYXJlcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRUb2tlbih1bmRlZmluZWQsIGhlYWRlcnMudGZhdG9rZW4sICdPYXV0aCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKS4kZW1pdCgnYXV0aFN0YXRlQ2hhbmdlJywgeyBoYXNBdXRoOiB0cnVlIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0VG9rZW4odG9rZW4/OiBzdHJpbmcsIHRmYT86IHN0cmluZywgdHlwZSA9ICdCYXNpYycpIHtcbiAgICBjb25zdCBjOHlBdXRoID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUF1dGgnKTtcbiAgICBpZiAodHlwZSA9PT0gJ0Jhc2ljJykge1xuICAgICAgYzh5QXV0aC5vblNldFRva2VuKHsgdG9rZW4sIHR5cGUgfSk7XG4gICAgICBpZiAodGZhKSB7XG4gICAgICAgIGM4eUF1dGguc2V0VEZBVG9rZW4odGZhKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYzh5QXV0aC5hdXRoUmVhZHkoKTtcbiAgICB9XG4gIH1cblxuICBnZXRQcmVmZXJyZWRMb2dpbk9wdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50ZW5hbnRVaVNlcnZpY2UuZ2V0UHJlZmVycmVkTG9naW5PcHRpb24odGhpcy5hcHBTdGF0ZS5zdGF0ZS5sb2dpbk9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdXRoQnJpZGdlU2VydmljZUZhY3RvcnkoXG4gIGluamVjdG9yOiBhbnksXG4gIGJhc2ljQXV0aDogQmFzaWNBdXRoLFxuICBmZXRjaENsaWVudDogRmV0Y2hDbGllbnQsXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gIHRlbmFudFVpU2VydmljZTogVGVuYW50VWlTZXJ2aWNlXG4pIHtcbiAgcmV0dXJuIG5ldyBBdXRoQnJpZGdlU2VydmljZShpbmplY3RvciwgYmFzaWNBdXRoLCBmZXRjaENsaWVudCwgYXBwU3RhdGUsIHRlbmFudFVpU2VydmljZSk7XG59XG5cbmV4cG9ydCBjb25zdCBhdXRoQnJpZGdlU2VydmljZVByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBBdXRoQnJpZGdlU2VydmljZSxcbiAgdXNlRmFjdG9yeTogYXV0aEJyaWRnZVNlcnZpY2VGYWN0b3J5LFxuICBkZXBzOiBbJyRpbmplY3RvcicsIEJhc2ljQXV0aCwgRmV0Y2hDbGllbnQsIEFwcFN0YXRlU2VydmljZSwgVGVuYW50VWlTZXJ2aWNlXVxufTtcbiJdfQ==