UNPKG

angular-auth-oidc-client

Version:
63 lines 11.9 kB
import { HttpHeaders } from '@angular/common/http'; import { Injectable, inject } from '@angular/core'; import { of, throwError, timer } from 'rxjs'; import { catchError, mergeMap, retryWhen, switchMap } from 'rxjs/operators'; import { DataService } from '../../api/data.service'; import { LoggerService } from '../../logging/logger.service'; import { StoragePersistenceService } from '../../storage/storage-persistence.service'; import { UrlService } from '../../utils/url/url.service'; import { isNetworkError } from './error-helper'; import * as i0 from "@angular/core"; export class RefreshTokenCallbackHandlerService { constructor() { this.urlService = inject(UrlService); this.loggerService = inject(LoggerService); this.dataService = inject(DataService); this.storagePersistenceService = inject(StoragePersistenceService); } // STEP 2 Refresh Token refreshTokensRequestTokens(callbackContext, config, customParamsRefresh) { let headers = new HttpHeaders(); headers = headers.set('Content-Type', 'application/x-www-form-urlencoded'); const authWellknownEndpoints = this.storagePersistenceService.read('authWellKnownEndPoints', config); const tokenEndpoint = authWellknownEndpoints?.tokenEndpoint; if (!tokenEndpoint) { return throwError(() => new Error('Token Endpoint not defined')); } const data = this.urlService.createBodyForCodeFlowRefreshTokensRequest(callbackContext.refreshToken, config, customParamsRefresh); return this.dataService .post(tokenEndpoint, data, config, headers) .pipe(switchMap((response) => { this.loggerService.logDebug(config, `token refresh response: ${response}`); if (response) { response.state = callbackContext.state; } callbackContext.authResult = response; return of(callbackContext); }), retryWhen((error) => this.handleRefreshRetry(error, config)), catchError((error) => { const { authority } = config; const errorMessage = `OidcService code request ${authority}`; this.loggerService.logError(config, errorMessage, error); return throwError(() => new Error(errorMessage)); })); } handleRefreshRetry(errors, config) { return errors.pipe(mergeMap((error) => { // retry token refresh if there is no internet connection if (isNetworkError(error)) { const { authority, refreshTokenRetryInSeconds } = config; const errorMessage = `OidcService code request ${authority} - no internet connection`; this.loggerService.logWarning(config, errorMessage, error); return timer((refreshTokenRetryInSeconds ?? 0) * 1000); } return throwError(() => error); })); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RefreshTokenCallbackHandlerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RefreshTokenCallbackHandlerService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RefreshTokenCallbackHandlerService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaC10b2tlbi1jYWxsYmFjay1oYW5kbGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWF1dGgtb2lkYy1jbGllbnQvc3JjL2xpYi9mbG93cy9jYWxsYmFjay1oYW5kbGluZy9yZWZyZXNoLXRva2VuLWNhbGxiYWNrLWhhbmRsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBR2hELE1BQU0sT0FBTyxrQ0FBa0M7SUFEL0M7UUFFbUIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoQyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV0QyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVsQyw4QkFBeUIsR0FBRyxNQUFNLENBQ2pELHlCQUF5QixDQUMxQixDQUFDO0tBNkVIO0lBM0VD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Q0FBa0M7a0JBRDlDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWVyZ2VNYXAsIHJldHJ5V2hlbiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcGkvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IE9wZW5JZENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi8uLi9jb25maWcvb3BlbmlkLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL2xvZ2dpbmcvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RvcmFnZVBlcnNpc3RlbmNlU2VydmljZSB9IGZyb20gJy4uLy4uL3N0b3JhZ2Uvc3RvcmFnZS1wZXJzaXN0ZW5jZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVybFNlcnZpY2UgfSBmcm9tICcuLi8uLi91dGlscy91cmwvdXJsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0aFJlc3VsdCwgQ2FsbGJhY2tDb250ZXh0IH0gZnJvbSAnLi4vY2FsbGJhY2stY29udGV4dCc7XG5pbXBvcnQgeyBpc05ldHdvcmtFcnJvciB9IGZyb20gJy4vZXJyb3ItaGVscGVyJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBSZWZyZXNoVG9rZW5DYWxsYmFja0hhbmRsZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSB1cmxTZXJ2aWNlID0gaW5qZWN0KFVybFNlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZSA9IGluamVjdChMb2dnZXJTZXJ2aWNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFTZXJ2aWNlID0gaW5qZWN0KERhdGFTZXJ2aWNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2VQZXJzaXN0ZW5jZVNlcnZpY2UgPSBpbmplY3QoXG4gICAgU3RvcmFnZVBlcnNpc3RlbmNlU2VydmljZVxuICApO1xuXG4gIC8vIFNURVAgMiBSZWZyZXNoIFRva2VuXG4gIHJlZnJlc2hUb2tlbnNSZXF1ZXN0VG9rZW5zKFxuICAgIGNhbGxiYWNrQ29udGV4dDogQ2FsbGJhY2tDb250ZXh0LFxuICAgIGNvbmZpZzogT3BlbklkQ29uZmlndXJhdGlvbixcbiAgICBjdXN0b21QYXJhbXNSZWZyZXNoPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIH1cbiAgKTogT2JzZXJ2YWJsZTxDYWxsYmFja0NvbnRleHQ+IHtcbiAgICBsZXQgaGVhZGVyczogSHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcblxuICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xuXG4gICAgY29uc3QgYXV0aFdlbGxrbm93bkVuZHBvaW50cyA9IHRoaXMuc3RvcmFnZVBlcnNpc3RlbmNlU2VydmljZS5yZWFkKFxuICAgICAgJ2F1dGhXZWxsS25vd25FbmRQb2ludHMnLFxuICAgICAgY29uZmlnXG4gICAgKTtcbiAgICBjb25zdCB0b2tlbkVuZHBvaW50ID0gYXV0aFdlbGxrbm93bkVuZHBvaW50cz8udG9rZW5FbmRwb2ludDtcblxuICAgIGlmICghdG9rZW5FbmRwb2ludCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdUb2tlbiBFbmRwb2ludCBub3QgZGVmaW5lZCcpKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gdGhpcy51cmxTZXJ2aWNlLmNyZWF0ZUJvZHlGb3JDb2RlRmxvd1JlZnJlc2hUb2tlbnNSZXF1ZXN0KFxuICAgICAgY2FsbGJhY2tDb250ZXh0LnJlZnJlc2hUb2tlbixcbiAgICAgIGNvbmZpZyxcbiAgICAgIGN1c3RvbVBhcmFtc1JlZnJlc2hcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2VcbiAgICAgIC5wb3N0PEF1dGhSZXN1bHQ+KHRva2VuRW5kcG9pbnQsIGRhdGEsIGNvbmZpZywgaGVhZGVycylcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZ0RlYnVnKFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgYHRva2VuIHJlZnJlc2ggcmVzcG9uc2U6ICR7cmVzcG9uc2V9YFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlLnN0YXRlID0gY2FsbGJhY2tDb250ZXh0LnN0YXRlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhbGxiYWNrQ29udGV4dC5hdXRoUmVzdWx0ID0gcmVzcG9uc2U7XG5cbiAgICAgICAgICByZXR1cm4gb2YoY2FsbGJhY2tDb250ZXh0KTtcbiAgICAgICAgfSksXG4gICAgICAgIHJldHJ5V2hlbigoZXJyb3IpID0+IHRoaXMuaGFuZGxlUmVmcmVzaFJldHJ5KGVycm9yLCBjb25maWcpKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGF1dGhvcml0eSB9ID0gY29uZmlnO1xuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBPaWRjU2VydmljZSBjb2RlIHJlcXVlc3QgJHthdXRob3JpdHl9YDtcblxuICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2dFcnJvcihjb25maWcsIGVycm9yTWVzc2FnZSwgZXJyb3IpO1xuXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVmcmVzaFJldHJ5KFxuICAgIGVycm9yczogT2JzZXJ2YWJsZTx1bmtub3duPixcbiAgICBjb25maWc6IE9wZW5JZENvbmZpZ3VyYXRpb25cbiAgKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIGVycm9ycy5waXBlKFxuICAgICAgbWVyZ2VNYXAoKGVycm9yKSA9PiB7XG4gICAgICAgIC8vIHJldHJ5IHRva2VuIHJlZnJlc2ggaWYgdGhlcmUgaXMgbm8gaW50ZXJuZXQgY29ubmVjdGlvblxuICAgICAgICBpZiAoaXNOZXR3b3JrRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgY29uc3QgeyBhdXRob3JpdHksIHJlZnJlc2hUb2tlblJldHJ5SW5TZWNvbmRzIH0gPSBjb25maWc7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYE9pZGNTZXJ2aWNlIGNvZGUgcmVxdWVzdCAke2F1dGhvcml0eX0gLSBubyBpbnRlcm5ldCBjb25uZWN0aW9uYDtcblxuICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2dXYXJuaW5nKGNvbmZpZywgZXJyb3JNZXNzYWdlLCBlcnJvcik7XG5cbiAgICAgICAgICByZXR1cm4gdGltZXIoKHJlZnJlc2hUb2tlblJldHJ5SW5TZWNvbmRzID8/IDApICogMTAwMCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==