UNPKG

angular-simple-oidc

Version:

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

45 lines 6.95 kB
import { Injectable, Inject } from '@angular/core'; import { take, map, tap } from 'rxjs/operators'; import { OidcDiscoveryDocClient } from './discovery-document/oidc-discovery-doc-client.service'; import { WINDOW_REF } from './providers'; import { TokenUrlService } from 'angular-simple-oidc/core'; import { TokenStorageService } from './token-storage.service'; import { combineLatest } from 'rxjs'; import { switchTap } from 'angular-simple-oidc/operators'; import { EventsService, SimpleOidcInfoEvent } from 'angular-simple-oidc/events'; // @dynamic export class EndSessionClientService { constructor(window, discoveryDocumentClient, tokenUrl, tokenStorage, events) { this.window = window; this.discoveryDocumentClient = discoveryDocumentClient; this.tokenUrl = tokenUrl; this.tokenStorage = tokenStorage; this.events = events; } logoutWithRedirect(postLogoutRedirectUri) { const doc$ = this.discoveryDocumentClient.current$; const localState$ = this.tokenStorage.currentState$; return combineLatest(doc$, localState$) .pipe(take(1), map(([doc, localState]) => this.tokenUrl.createEndSessionUrl(doc.end_session_endpoint, { idTokenHint: localState.identityToken, postLogoutRedirectUri })), switchTap(() => { this.events.dispatch(new SimpleOidcInfoEvent('Deleting Local Session')); return this.tokenStorage.removeAll(); }), tap(({ url }) => { this.events.dispatch(new SimpleOidcInfoEvent('Redirecting to End Session Endpoint', url)); this.window.location.href = url; })); } } EndSessionClientService.decorators = [ { type: Injectable } ]; EndSessionClientService.ctorParameters = () => [ { type: Window, decorators: [{ type: Inject, args: [WINDOW_REF,] }] }, { type: OidcDiscoveryDocClient }, { type: TokenUrlService }, { type: TokenStorageService }, { type: EventsService } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kLXNlc3Npb24tY2xpZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXNpbXBsZS1vaWRjL3NyYy9saWIvZW5kLXNlc3Npb24tY2xpZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDaEcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhGLFdBQVc7QUFFWCxNQUFNLE9BQU8sdUJBQXVCO0lBRWhDLFlBRXVCLE1BQWMsRUFDZCx1QkFBK0MsRUFDL0MsUUFBeUIsRUFDekIsWUFBaUMsRUFDakMsTUFBcUI7UUFKckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBd0I7UUFDL0MsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFdBQU0sR0FBTixNQUFNLENBQWU7SUFDeEMsQ0FBQztJQUVFLGtCQUFrQixDQUFDLHFCQUE4QjtRQUNwRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDO1FBQ25ELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDO1FBRXBELE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUM7YUFDbEMsSUFBSSxDQUNELElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUU7WUFDbkYsV0FBVyxFQUFFLFVBQVUsQ0FBQyxhQUFhO1lBQ3JDLHFCQUFxQjtTQUN4QixDQUFDLENBQUMsRUFDSCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7WUFDeEUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtZQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksbUJBQW1CLENBQUMscUNBQXFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDVixDQUFDOzs7WUFoQ0osVUFBVTs7O1lBS3dCLE1BQU0sdUJBRGhDLE1BQU0sU0FBQyxVQUFVO1lBYmpCLHNCQUFzQjtZQUV0QixlQUFlO1lBQ2YsbUJBQW1CO1lBR25CLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2UsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT2lkY0Rpc2NvdmVyeURvY0NsaWVudCB9IGZyb20gJy4vZGlzY292ZXJ5LWRvY3VtZW50L29pZGMtZGlzY292ZXJ5LWRvYy1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBXSU5ET1dfUkVGIH0gZnJvbSAnLi9wcm92aWRlcnMnO1xuaW1wb3J0IHsgVG9rZW5VcmxTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1zaW1wbGUtb2lkYy9jb3JlJztcbmltcG9ydCB7IFRva2VuU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3Rva2VuLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hUYXAgfSBmcm9tICdhbmd1bGFyLXNpbXBsZS1vaWRjL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlLCBTaW1wbGVPaWRjSW5mb0V2ZW50IH0gZnJvbSAnYW5ndWxhci1zaW1wbGUtb2lkYy9ldmVudHMnO1xuXG4vLyBAZHluYW1pY1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVuZFNlc3Npb25DbGllbnRTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFdJTkRPV19SRUYpXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSB3aW5kb3c6IFdpbmRvdyxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRpc2NvdmVyeURvY3VtZW50Q2xpZW50OiBPaWRjRGlzY292ZXJ5RG9jQ2xpZW50LFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdG9rZW5Vcmw6IFRva2VuVXJsU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRva2VuU3RvcmFnZTogVG9rZW5TdG9yYWdlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGV2ZW50czogRXZlbnRzU2VydmljZSxcbiAgICApIHsgfVxuXG4gICAgcHVibGljIGxvZ291dFdpdGhSZWRpcmVjdChwb3N0TG9nb3V0UmVkaXJlY3RVcmk/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZG9jJCA9IHRoaXMuZGlzY292ZXJ5RG9jdW1lbnRDbGllbnQuY3VycmVudCQ7XG4gICAgICAgIGNvbnN0IGxvY2FsU3RhdGUkID0gdGhpcy50b2tlblN0b3JhZ2UuY3VycmVudFN0YXRlJDtcblxuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChkb2MkLCBsb2NhbFN0YXRlJClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgbWFwKChbZG9jLCBsb2NhbFN0YXRlXSkgPT4gdGhpcy50b2tlblVybC5jcmVhdGVFbmRTZXNzaW9uVXJsKGRvYy5lbmRfc2Vzc2lvbl9lbmRwb2ludCwge1xuICAgICAgICAgICAgICAgICAgICBpZFRva2VuSGludDogbG9jYWxTdGF0ZS5pZGVudGl0eVRva2VuLFxuICAgICAgICAgICAgICAgICAgICBwb3N0TG9nb3V0UmVkaXJlY3RVcmlcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgc3dpdGNoVGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudHMuZGlzcGF0Y2gobmV3IFNpbXBsZU9pZGNJbmZvRXZlbnQoJ0RlbGV0aW5nIExvY2FsIFNlc3Npb24nKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuU3RvcmFnZS5yZW1vdmVBbGwoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YXAoKHsgdXJsIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudHMuZGlzcGF0Y2gobmV3IFNpbXBsZU9pZGNJbmZvRXZlbnQoJ1JlZGlyZWN0aW5nIHRvIEVuZCBTZXNzaW9uIEVuZHBvaW50JywgdXJsKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==