UNPKG

angular-simple-oidc

Version:

Angular Library implementing Open Id Connect specification. Code Flow, Refresh Tokens, Session Management, Discovery Document.

40 lines 6.55 kB
import { Injectable } from '@angular/core'; import { take, tap, switchMap } from 'rxjs/operators'; import { OidcDiscoveryDocClient } from './discovery-document/oidc-discovery-doc-client.service'; import { TokenStorageService } from './token-storage.service'; import { combineLatest } from 'rxjs'; import { EventsService, SimpleOidcInfoEvent } from 'angular-simple-oidc/events'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { UserInfoNotSupportedError } from './errors'; import { UserInfoObtainedEvent } from './auth.events'; // @dynamic export class UserInfoClientService { constructor(discoveryDocumentClient, tokenStorage, events, http) { this.discoveryDocumentClient = discoveryDocumentClient; this.tokenStorage = tokenStorage; this.events = events; this.http = http; } getUserInfo() { const doc$ = this.discoveryDocumentClient.current$; const localState$ = this.tokenStorage.currentState$; return combineLatest(doc$, localState$) .pipe(take(1), tap(() => this.events.dispatch(new SimpleOidcInfoEvent('Requesting User Info'))), tap(([doc]) => { if (!doc.userinfo_endpoint) { throw new UserInfoNotSupportedError(doc); } }), switchMap(([doc, localState]) => this.http.get(doc.userinfo_endpoint, { headers: new HttpHeaders({ authorization: `Bearer ${localState.accessToken}` }) })), tap(profile => this.events.dispatch(new UserInfoObtainedEvent(profile)))); } } UserInfoClientService.decorators = [ { type: Injectable } ]; UserInfoClientService.ctorParameters = () => [ { type: OidcDiscoveryDocClient }, { type: TokenStorageService }, { type: EventsService }, { type: HttpClient } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1pbmZvLWNsaWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1zaW1wbGUtb2lkYy9zcmMvbGliL3VzZXItaW5mby1jbGllbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXJELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0RCxXQUFXO0FBRVgsTUFBTSxPQUFPLHFCQUFxQjtJQUU5QixZQUN1Qix1QkFBK0MsRUFDL0MsWUFBaUMsRUFDakMsTUFBcUIsRUFDckIsSUFBZ0I7UUFIaEIsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF3QjtRQUMvQyxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixTQUFJLEdBQUosSUFBSSxDQUFZO0lBQ25DLENBQUM7SUFFRSxXQUFXO1FBQ2QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQztRQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztRQUVwRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDO2FBQ2xDLElBQUksQ0FDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksbUJBQW1CLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEVBQ2hGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRTtZQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3hCLE1BQU0sSUFBSSx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM1QztRQUNMLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQWtCLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRTtZQUNsRCxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxhQUFhLEVBQUUsVUFBVSxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztTQUNsRixDQUFDLENBQUMsRUFDUCxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDM0UsQ0FBQztJQUNWLENBQUM7OztZQTdCSixVQUFVOzs7WUFWRixzQkFBc0I7WUFDdEIsbUJBQW1CO1lBRW5CLGFBQWE7WUFDYixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZSwgdGFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPaWRjRGlzY292ZXJ5RG9jQ2xpZW50IH0gZnJvbSAnLi9kaXNjb3ZlcnktZG9jdW1lbnQvb2lkYy1kaXNjb3ZlcnktZG9jLWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFRva2VuU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3Rva2VuLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlLCBTaW1wbGVPaWRjSW5mb0V2ZW50IH0gZnJvbSAnYW5ndWxhci1zaW1wbGUtb2lkYy9ldmVudHMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBVc2VySW5mb05vdFN1cHBvcnRlZEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgQ2xhaW1Db2xsZWN0aW9uIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgVXNlckluZm9PYnRhaW5lZEV2ZW50IH0gZnJvbSAnLi9hdXRoLmV2ZW50cyc7XG5cbi8vIEBkeW5hbWljXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVXNlckluZm9DbGllbnRTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlzY292ZXJ5RG9jdW1lbnRDbGllbnQ6IE9pZGNEaXNjb3ZlcnlEb2NDbGllbnQsXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSB0b2tlblN0b3JhZ2U6IFRva2VuU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBldmVudHM6IEV2ZW50c1NlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICkgeyB9XG5cbiAgICBwdWJsaWMgZ2V0VXNlckluZm8oKSB7XG4gICAgICAgIGNvbnN0IGRvYyQgPSB0aGlzLmRpc2NvdmVyeURvY3VtZW50Q2xpZW50LmN1cnJlbnQkO1xuICAgICAgICBjb25zdCBsb2NhbFN0YXRlJCA9IHRoaXMudG9rZW5TdG9yYWdlLmN1cnJlbnRTdGF0ZSQ7XG5cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoZG9jJCwgbG9jYWxTdGF0ZSQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLmV2ZW50cy5kaXNwYXRjaChuZXcgU2ltcGxlT2lkY0luZm9FdmVudCgnUmVxdWVzdGluZyBVc2VyIEluZm8nKSkpLFxuICAgICAgICAgICAgICAgIHRhcCgoW2RvY10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb2MudXNlcmluZm9fZW5kcG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBVc2VySW5mb05vdFN1cHBvcnRlZEVycm9yKGRvYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKFtkb2MsIGxvY2FsU3RhdGVdKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmh0dHAuZ2V0PENsYWltQ29sbGVjdGlvbj4oZG9jLnVzZXJpbmZvX2VuZHBvaW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7bG9jYWxTdGF0ZS5hY2Nlc3NUb2tlbn1gIH0pXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB0YXAocHJvZmlsZSA9PiB0aGlzLmV2ZW50cy5kaXNwYXRjaChuZXcgVXNlckluZm9PYnRhaW5lZEV2ZW50KHByb2ZpbGUpKSksXG4gICAgICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==