angular-simple-oidc
Version:
Angular Library implementing Open Id Connect specification. Code Flow, Refresh Tokens, Session Management, Discovery Document.
45 lines • 6.95 kB
JavaScript
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==