angular-simple-oidc
Version:
Angular Library implementing Open Id Connect specification. Code Flow, Refresh Tokens, Session Management, Discovery Document.
30 lines • 7.37 kB
JavaScript
import { Injectable, Inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { throwError } from 'rxjs';
import { switchMap, catchError, shareReplay, tap, map, take } from 'rxjs/operators';
import { urlJoin } from '../utils/url-join';
import { ObtainDiscoveryDocumentError, ObtainJWTKeysError } from './errors';
import { ConfigService } from 'angular-simple-oidc/config';
import { AUTH_CONFIG_SERVICE } from '../providers';
import { EventsService, SimpleOidcInfoEvent } from 'angular-simple-oidc/events';
import { DiscoveryDocumentObtainedEvent } from './events';
export class OidcDiscoveryDocClient {
constructor(config, http, events) {
this.config = config;
this.http = http;
this.events = events;
this.current$ = this.config.current$
.pipe(map(config => urlJoin(config.openIDProviderUrl, config.discoveryDocumentUrl)), tap(url => this.events.dispatch(new SimpleOidcInfoEvent('Obtaining discovery document', url))), switchMap(url => this.http.get(url)), tap(doc => this.events.dispatch(new DiscoveryDocumentObtainedEvent(doc))), catchError(e => throwError(new ObtainDiscoveryDocumentError(e))), take(1), shareReplay());
this.jwtKeys$ = this.current$
.pipe(tap(doc => this.events.dispatch(new SimpleOidcInfoEvent('Obtaining JWT Keys', doc.jwks_uri))), switchMap(doc => this.http.get(doc.jwks_uri)), tap(j => this.events.dispatch(new SimpleOidcInfoEvent('JWT Keys obtained', j))), catchError(e => throwError(new ObtainJWTKeysError(e))), take(1), shareReplay());
}
}
OidcDiscoveryDocClient.decorators = [
{ type: Injectable }
];
OidcDiscoveryDocClient.ctorParameters = () => [
{ type: ConfigService, decorators: [{ type: Inject, args: [AUTH_CONFIG_SERVICE,] }] },
{ type: HttpClient },
{ type: EventsService }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2lkYy1kaXNjb3ZlcnktZG9jLWNsaWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1zaW1wbGUtb2lkYy9zcmMvbGliL2Rpc2NvdmVyeS1kb2N1bWVudC9vaWRjLWRpc2NvdmVyeS1kb2MtY2xpZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHMUQsTUFBTSxPQUFPLHNCQUFzQjtJQXVCL0IsWUFFdUIsTUFBaUMsRUFDakMsSUFBZ0IsRUFDaEIsTUFBcUI7UUFGckIsV0FBTSxHQUFOLE1BQU0sQ0FBMkI7UUFDakMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBekI1QixhQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO2FBQzFDLElBQUksQ0FDRCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQzdFLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksbUJBQW1CLENBQUMsOEJBQThCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUM5RixTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBb0IsR0FBRyxDQUFDLENBQUMsRUFDdkQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ3pFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFdBQVcsRUFBRSxDQUNoQixDQUFDO1FBRVUsYUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRO2FBQ25DLElBQUksQ0FDRCxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQzdGLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFVLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDL0UsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN0RCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsV0FBVyxFQUFFLENBQ2hCLENBQUM7SUFPRixDQUFDOzs7WUE3QlIsVUFBVTs7O1lBTkYsYUFBYSx1QkErQmIsTUFBTSxTQUFDLG1CQUFtQjtZQXJDMUIsVUFBVTtZQVNWLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIGNhdGNoRXJyb3IsIHNoYXJlUmVwbGF5LCB0YXAsIG1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERpc2NvdmVyeURvY3VtZW50LCBKV1RLZXlzIH0gZnJvbSAnYW5ndWxhci1zaW1wbGUtb2lkYy9jb3JlJztcbmltcG9ydCB7IHVybEpvaW4gfSBmcm9tICcuLi91dGlscy91cmwtam9pbic7XG5pbXBvcnQgeyBPYnRhaW5EaXNjb3ZlcnlEb2N1bWVudEVycm9yLCBPYnRhaW5KV1RLZXlzRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1zaW1wbGUtb2lkYy9jb25maWcnO1xuaW1wb3J0IHsgQXV0aENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy9tb2RlbHMnO1xuaW1wb3J0IHsgQVVUSF9DT05GSUdfU0VSVklDRSB9IGZyb20gJy4uL3Byb3ZpZGVycyc7XG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlLCBTaW1wbGVPaWRjSW5mb0V2ZW50IH0gZnJvbSAnYW5ndWxhci1zaW1wbGUtb2lkYy9ldmVudHMnO1xuaW1wb3J0IHsgRGlzY292ZXJ5RG9jdW1lbnRPYnRhaW5lZEV2ZW50IH0gZnJvbSAnLi9ldmVudHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT2lkY0Rpc2NvdmVyeURvY0NsaWVudCB7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgY3VycmVudCQgPSB0aGlzLmNvbmZpZy5jdXJyZW50JFxuICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcChjb25maWcgPT4gdXJsSm9pbihjb25maWcub3BlbklEUHJvdmlkZXJVcmwsIGNvbmZpZy5kaXNjb3ZlcnlEb2N1bWVudFVybCkpLFxuICAgICAgICAgICAgdGFwKHVybCA9PiB0aGlzLmV2ZW50cy5kaXNwYXRjaChuZXcgU2ltcGxlT2lkY0luZm9FdmVudCgnT2J0YWluaW5nIGRpc2NvdmVyeSBkb2N1bWVudCcsIHVybCkpKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCh1cmwgPT4gdGhpcy5odHRwLmdldDxEaXNjb3ZlcnlEb2N1bWVudD4odXJsKSksXG4gICAgICAgICAgICB0YXAoZG9jID0+IHRoaXMuZXZlbnRzLmRpc3BhdGNoKG5ldyBEaXNjb3ZlcnlEb2N1bWVudE9idGFpbmVkRXZlbnQoZG9jKSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlID0+IHRocm93RXJyb3IobmV3IE9idGFpbkRpc2NvdmVyeURvY3VtZW50RXJyb3IoZSkpKSxcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICAgICk7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgand0S2V5cyQgPSB0aGlzLmN1cnJlbnQkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFwKGRvYyA9PiB0aGlzLmV2ZW50cy5kaXNwYXRjaChuZXcgU2ltcGxlT2lkY0luZm9FdmVudCgnT2J0YWluaW5nIEpXVCBLZXlzJywgZG9jLmp3a3NfdXJpKSkpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKGRvYyA9PiB0aGlzLmh0dHAuZ2V0PEpXVEtleXM+KGRvYy5qd2tzX3VyaSkpLFxuICAgICAgICAgICAgdGFwKGogPT4gdGhpcy5ldmVudHMuZGlzcGF0Y2gobmV3IFNpbXBsZU9pZGNJbmZvRXZlbnQoJ0pXVCBLZXlzIG9idGFpbmVkJywgaikpKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZSA9PiB0aHJvd0Vycm9yKG5ldyBPYnRhaW5KV1RLZXlzRXJyb3IoZSkpKSxcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICAgICk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChBVVRIX0NPTkZJR19TRVJWSUNFKVxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnOiBDb25maWdTZXJ2aWNlPEF1dGhDb25maWc+LFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGV2ZW50czogRXZlbnRzU2VydmljZSxcbiAgICApIHsgfVxufVxuIl19