angular-auth-oidc-client
Version:
Angular Lib for OpenID Connect & OAuth2
60 lines • 10.9 kB
JavaScript
import { DOCUMENT } from '@angular/common';
import { Injectable, RendererFactory2, inject } from '@angular/core';
import { Observable } from 'rxjs';
import { switchMap } from 'rxjs/operators';
import { LoggerService } from '../logging/logger.service';
import { UrlService } from '../utils/url/url.service';
import { SilentRenewService } from './silent-renew.service';
import * as i0 from "@angular/core";
export class RefreshSessionIframeService {
constructor() {
this.renderer = inject(RendererFactory2).createRenderer(null, null);
this.loggerService = inject(LoggerService);
this.urlService = inject(UrlService);
this.silentRenewService = inject(SilentRenewService);
this.document = inject(DOCUMENT);
}
refreshSessionWithIframe(config, allConfigs, customParams) {
this.loggerService.logDebug(config, 'BEGIN refresh session Authorize Iframe renew');
return this.urlService
.getRefreshSessionSilentRenewUrl(config, customParams)
.pipe(switchMap((url) => {
return this.sendAuthorizeRequestUsingSilentRenew(url, config, allConfigs);
}));
}
sendAuthorizeRequestUsingSilentRenew(url, config, allConfigs) {
const sessionIframe = this.silentRenewService.getOrCreateIframe(config);
this.initSilentRenewRequest(config, allConfigs);
this.loggerService.logDebug(config, `sendAuthorizeRequestUsingSilentRenew for URL: ${url}`);
return new Observable((observer) => {
const onLoadHandler = () => {
sessionIframe.removeEventListener('load', onLoadHandler);
this.loggerService.logDebug(config, 'removed event listener from IFrame');
observer.next(true);
observer.complete();
};
sessionIframe.addEventListener('load', onLoadHandler);
sessionIframe.contentWindow?.location.replace(url ?? '');
});
}
initSilentRenewRequest(config, allConfigs) {
const instanceId = Math.random();
const initDestroyHandler = this.renderer.listen('window', 'oidc-silent-renew-init', (e) => {
if (e.detail !== instanceId) {
initDestroyHandler();
renewDestroyHandler();
}
});
const renewDestroyHandler = this.renderer.listen('window', 'oidc-silent-renew-message', (e) => this.silentRenewService.silentRenewEventHandler(e, config, allConfigs));
this.document.defaultView?.dispatchEvent(new CustomEvent('oidc-silent-renew-init', {
detail: instanceId,
}));
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RefreshSessionIframeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RefreshSessionIframeService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RefreshSessionIframeService, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaC1zZXNzaW9uLWlmcmFtZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1hdXRoLW9pZGMtY2xpZW50L3NyYy9saWIvaWZyYW1lL3JlZnJlc2gtc2Vzc2lvbi1pZnJhbWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFHNUQsTUFBTSxPQUFPLDJCQUEyQjtJQUR4QztRQUVtQixhQUFRLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsY0FBYyxDQUNqRSxJQUFJLEVBQ0osSUFBSSxDQUNMLENBQUM7UUFFZSxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV0QyxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWhDLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRWhELGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7S0FtRjlDO0lBakZDLHdCQUF3QixDQUN0QixNQUEyQixFQUMzQixVQUFpQyxFQUNqQyxZQUEyRDtRQUUzRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FDekIsTUFBTSxFQUNOLDhDQUE4QyxDQUMvQyxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQiwrQkFBK0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDO2FBQ3JELElBQUksQ0FDSCxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNoQixPQUFPLElBQUksQ0FBQyxvQ0FBb0MsQ0FDOUMsR0FBRyxFQUNILE1BQU0sRUFDTixVQUFVLENBQ1gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRU8sb0NBQW9DLENBQzFDLEdBQWtCLEVBQ2xCLE1BQTJCLEVBQzNCLFVBQWlDO1FBRWpDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4RSxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUN6QixNQUFNLEVBQ04saURBQWlELEdBQUcsRUFBRSxDQUN2RCxDQUFDO1FBRUYsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sYUFBYSxHQUFHLEdBQVMsRUFBRTtnQkFDL0IsYUFBYSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFDekQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQ3pCLE1BQU0sRUFDTixvQ0FBb0MsQ0FDckMsQ0FBQztnQkFDRixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEIsQ0FBQyxDQUFDO1lBRUYsYUFBYSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztZQUN0RCxhQUFhLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHNCQUFzQixDQUM1QixNQUEyQixFQUMzQixVQUFpQztRQUVqQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFakMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDN0MsUUFBUSxFQUNSLHdCQUF3QixFQUN4QixDQUFDLENBQWMsRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDNUIsa0JBQWtCLEVBQUUsQ0FBQztnQkFDckIsbUJBQW1CLEVBQUUsQ0FBQztZQUN4QixDQUFDO1FBQ0gsQ0FBQyxDQUNGLENBQUM7UUFDRixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUM5QyxRQUFRLEVBQ1IsMkJBQTJCLEVBQzNCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixJQUFJLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FDekUsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FDdEMsSUFBSSxXQUFXLENBQUMsd0JBQXdCLEVBQUU7WUFDeEMsTUFBTSxFQUFFLFVBQVU7U0FDbkIsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOzhHQTlGVSwyQkFBMkI7a0hBQTNCLDJCQUEyQixjQURkLE1BQU07OzJGQUNuQiwyQkFBMkI7a0JBRHZDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgUmVuZGVyZXJGYWN0b3J5MiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPcGVuSWRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vY29uZmlnL29wZW5pZC1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi9sb2dnaW5nL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IFVybFNlcnZpY2UgfSBmcm9tICcuLi91dGlscy91cmwvdXJsLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2lsZW50UmVuZXdTZXJ2aWNlIH0gZnJvbSAnLi9zaWxlbnQtcmVuZXcuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmVmcmVzaFNlc3Npb25JZnJhbWVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlckZhY3RvcnkyKS5jcmVhdGVSZW5kZXJlcihcbiAgICBudWxsLFxuICAgIG51bGxcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlclNlcnZpY2UgPSBpbmplY3QoTG9nZ2VyU2VydmljZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB1cmxTZXJ2aWNlID0gaW5qZWN0KFVybFNlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2lsZW50UmVuZXdTZXJ2aWNlID0gaW5qZWN0KFNpbGVudFJlbmV3U2VydmljZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgcmVmcmVzaFNlc3Npb25XaXRoSWZyYW1lKFxuICAgIGNvbmZpZzogT3BlbklkQ29uZmlndXJhdGlvbixcbiAgICBhbGxDb25maWdzOiBPcGVuSWRDb25maWd1cmF0aW9uW10sXG4gICAgY3VzdG9tUGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIH1cbiAgKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZ0RlYnVnKFxuICAgICAgY29uZmlnLFxuICAgICAgJ0JFR0lOIHJlZnJlc2ggc2Vzc2lvbiBBdXRob3JpemUgSWZyYW1lIHJlbmV3J1xuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy51cmxTZXJ2aWNlXG4gICAgICAuZ2V0UmVmcmVzaFNlc3Npb25TaWxlbnRSZW5ld1VybChjb25maWcsIGN1c3RvbVBhcmFtcylcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHVybCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNlbmRBdXRob3JpemVSZXF1ZXN0VXNpbmdTaWxlbnRSZW5ldyhcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGFsbENvbmZpZ3NcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZEF1dGhvcml6ZVJlcXVlc3RVc2luZ1NpbGVudFJlbmV3KFxuICAgIHVybDogc3RyaW5nIHwgbnVsbCxcbiAgICBjb25maWc6IE9wZW5JZENvbmZpZ3VyYXRpb24sXG4gICAgYWxsQ29uZmlnczogT3BlbklkQ29uZmlndXJhdGlvbltdXG4gICk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHNlc3Npb25JZnJhbWUgPSB0aGlzLnNpbGVudFJlbmV3U2VydmljZS5nZXRPckNyZWF0ZUlmcmFtZShjb25maWcpO1xuXG4gICAgdGhpcy5pbml0U2lsZW50UmVuZXdSZXF1ZXN0KGNvbmZpZywgYWxsQ29uZmlncyk7XG4gICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZ0RlYnVnKFxuICAgICAgY29uZmlnLFxuICAgICAgYHNlbmRBdXRob3JpemVSZXF1ZXN0VXNpbmdTaWxlbnRSZW5ldyBmb3IgVVJMOiAke3VybH1gXG4gICAgKTtcblxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgIGNvbnN0IG9uTG9hZEhhbmRsZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHNlc3Npb25JZnJhbWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIG9uTG9hZEhhbmRsZXIpO1xuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nRGVidWcoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICdyZW1vdmVkIGV2ZW50IGxpc3RlbmVyIGZyb20gSUZyYW1lJ1xuICAgICAgICApO1xuICAgICAgICBvYnNlcnZlci5uZXh0KHRydWUpO1xuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfTtcblxuICAgICAgc2Vzc2lvbklmcmFtZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgb25Mb2FkSGFuZGxlcik7XG4gICAgICBzZXNzaW9uSWZyYW1lLmNvbnRlbnRXaW5kb3c/LmxvY2F0aW9uLnJlcGxhY2UodXJsID8/ICcnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFNpbGVudFJlbmV3UmVxdWVzdChcbiAgICBjb25maWc6IE9wZW5JZENvbmZpZ3VyYXRpb24sXG4gICAgYWxsQ29uZmlnczogT3BlbklkQ29uZmlndXJhdGlvbltdXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGluc3RhbmNlSWQgPSBNYXRoLnJhbmRvbSgpO1xuXG4gICAgY29uc3QgaW5pdERlc3Ryb3lIYW5kbGVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAnd2luZG93JyxcbiAgICAgICdvaWRjLXNpbGVudC1yZW5ldy1pbml0JyxcbiAgICAgIChlOiBDdXN0b21FdmVudCkgPT4ge1xuICAgICAgICBpZiAoZS5kZXRhaWwgIT09IGluc3RhbmNlSWQpIHtcbiAgICAgICAgICBpbml0RGVzdHJveUhhbmRsZXIoKTtcbiAgICAgICAgICByZW5ld0Rlc3Ryb3lIYW5kbGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIGNvbnN0IHJlbmV3RGVzdHJveUhhbmRsZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICd3aW5kb3cnLFxuICAgICAgJ29pZGMtc2lsZW50LXJlbmV3LW1lc3NhZ2UnLFxuICAgICAgKGUpID0+XG4gICAgICAgIHRoaXMuc2lsZW50UmVuZXdTZXJ2aWNlLnNpbGVudFJlbmV3RXZlbnRIYW5kbGVyKGUsIGNvbmZpZywgYWxsQ29uZmlncylcbiAgICApO1xuXG4gICAgdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlldz8uZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgnb2lkYy1zaWxlbnQtcmVuZXctaW5pdCcsIHtcbiAgICAgICAgZGV0YWlsOiBpbnN0YW5jZUlkLFxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=