@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
72 lines • 10.6 kB
JavaScript
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==