UNPKG

angular-auth-oidc-client

Version:
85 lines 14.2 kB
import { Injectable, inject } from '@angular/core'; import { of, throwError } from 'rxjs'; import { catchError, switchMap } from 'rxjs/operators'; import { AuthStateService } from '../../auth-state/auth-state.service'; import { LoggerService } from '../../logging/logger.service'; import { UserService } from '../../user-data/user.service'; import { FlowsDataService } from '../flows-data.service'; import { ResetAuthDataService } from '../reset-auth-data.service'; import * as i0 from "@angular/core"; export class UserCallbackHandlerService { constructor() { this.loggerService = inject(LoggerService); this.authStateService = inject(AuthStateService); this.flowsDataService = inject(FlowsDataService); this.userService = inject(UserService); this.resetAuthDataService = inject(ResetAuthDataService); } // STEP 5 userData callbackUser(callbackContext, configuration, allConfigs) { const { isRenewProcess, validationResult, authResult, refreshToken } = callbackContext; const { autoUserInfo, renewUserInfoAfterTokenRenew } = configuration; if (!autoUserInfo) { if (!isRenewProcess || renewUserInfoAfterTokenRenew) { // userData is set to the id_token decoded, auto get user data set to false if (validationResult?.decodedIdToken) { this.userService.setUserDataToStore(validationResult.decodedIdToken, configuration, allConfigs); } } if (!isRenewProcess && !refreshToken) { this.flowsDataService.setSessionState(authResult?.session_state, configuration); } this.publishAuthState(validationResult, isRenewProcess); return of(callbackContext); } return this.userService .getAndPersistUserDataInStore(configuration, allConfigs, isRenewProcess, validationResult?.idToken, validationResult?.decodedIdToken) .pipe(switchMap((userData) => { if (!!userData) { if (!refreshToken) { this.flowsDataService.setSessionState(authResult?.session_state, configuration); } this.publishAuthState(validationResult, isRenewProcess); return of(callbackContext); } else { this.resetAuthDataService.resetAuthorizationData(configuration, allConfigs); this.publishUnauthenticatedState(validationResult, isRenewProcess); const errorMessage = `Called for userData but they were ${userData}`; this.loggerService.logWarning(configuration, errorMessage); return throwError(() => new Error(errorMessage)); } }), catchError((err) => { const errorMessage = `Failed to retrieve user info with error: ${err}`; this.loggerService.logWarning(configuration, errorMessage); return throwError(() => new Error(errorMessage)); })); } publishAuthState(stateValidationResult, isRenewProcess) { if (!stateValidationResult) { return; } this.authStateService.updateAndPublishAuthState({ isAuthenticated: true, validationResult: stateValidationResult.state, isRenewProcess, }); } publishUnauthenticatedState(stateValidationResult, isRenewProcess) { if (!stateValidationResult) { return; } this.authStateService.updateAndPublishAuthState({ isAuthenticated: false, validationResult: stateValidationResult.state, isRenewProcess, }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: UserCallbackHandlerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: UserCallbackHandlerService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: UserCallbackHandlerService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jYWxsYmFjay1oYW5kbGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWF1dGgtb2lkYy1jbGllbnQvc3JjL2xpYi9mbG93cy9jYWxsYmFjay1oYW5kbGluZy91c2VyLWNhbGxiYWNrLWhhbmRsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBR2xFLE1BQU0sT0FBTywwQkFBMEI7SUFEdkM7UUFFbUIsa0JBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFdEMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFNUMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFNUMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFbEMseUJBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7S0E2R3RFO0lBM0dDLGtCQUFrQjtJQUNsQixZQUFZLENBQ1YsZUFBZ0MsRUFDaEMsYUFB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WUFDN0MsY0FBYztTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTywyQkFBMkIsQ0FDakMscUJBQW1ELEVBQ25ELGNBQXVCO1FBRXZCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzNCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDO1lBQzlDLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLGdCQUFnQixFQUFFLHFCQUFxQixDQUFDLEtBQUs7WUFDN0MsY0FBYztTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBckhVLDBCQUEwQjtrSEFBMUIsMEJBQTBCLGNBRGIsTUFBTTs7MkZBQ25CLDBCQUEwQjtrQkFEdEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBdXRoU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXV0aC1zdGF0ZS9hdXRoLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3BlbklkQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uLy4uL2NvbmZpZy9vcGVuaWQtY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbG9nZ2luZy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3VzZXItZGF0YS91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RhdGVWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vLi4vdmFsaWRhdGlvbi9zdGF0ZS12YWxpZGF0aW9uLXJlc3VsdCc7XG5pbXBvcnQgeyBDYWxsYmFja0NvbnRleHQgfSBmcm9tICcuLi9jYWxsYmFjay1jb250ZXh0JztcbmltcG9ydCB7IEZsb3dzRGF0YVNlcnZpY2UgfSBmcm9tICcuLi9mbG93cy1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVzZXRBdXRoRGF0YVNlcnZpY2UgfSBmcm9tICcuLi9yZXNldC1hdXRoLWRhdGEuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVXNlckNhbGxiYWNrSGFuZGxlclNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlclNlcnZpY2UgPSBpbmplY3QoTG9nZ2VyU2VydmljZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhdXRoU3RhdGVTZXJ2aWNlID0gaW5qZWN0KEF1dGhTdGF0ZVNlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZmxvd3NEYXRhU2VydmljZSA9IGluamVjdChGbG93c0RhdGFTZXJ2aWNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHVzZXJTZXJ2aWNlID0gaW5qZWN0KFVzZXJTZXJ2aWNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJlc2V0QXV0aERhdGFTZXJ2aWNlID0gaW5qZWN0KFJlc2V0QXV0aERhdGFTZXJ2aWNlKTtcblxuICAvLyBTVEVQIDUgdXNlckRhdGFcbiAgY2FsbGJhY2tVc2VyKFxuICAgIGNhbGxiYWNrQ29udGV4dDogQ2FsbGJhY2tDb250ZXh0LFxuICAgIGNvbmZpZ3VyYXRpb246IE9wZW5JZENvbmZpZ3VyYXRpb24sXG4gICAgYWxsQ29uZmlnczogT3BlbklkQ29uZmlndXJhdGlvbltdXG4gICk6IE9ic2VydmFibGU8Q2FsbGJhY2tDb250ZXh0PiB7XG4gICAgY29uc3QgeyBpc1JlbmV3UHJvY2VzcywgdmFsaWRhdGlvblJlc3VsdCwgYXV0aFJlc3VsdCwgcmVmcmVzaFRva2VuIH0gPVxuICAgICAgY2FsbGJhY2tDb250ZXh0O1xuICAgIGNvbnN0IHsgYXV0b1VzZXJJbmZvLCByZW5ld1VzZXJJbmZvQWZ0ZXJUb2tlblJlbmV3IH0gPSBjb25maWd1cmF0aW9uO1xuXG4gICAgaWYgKCFhdXRvVXNlckluZm8pIHtcbiAgICAgIGlmICghaXNSZW5ld1Byb2Nlc3MgfHwgcmVuZXdVc2VySW5mb0FmdGVyVG9rZW5SZW5ldykge1xuICAgICAgICAvLyB1c2VyRGF0YSBpcyBzZXQgdG8gdGhlIGlkX3Rva2VuIGRlY29kZWQsIGF1dG8gZ2V0IHVzZXIgZGF0YSBzZXQgdG8gZmFsc2VcbiAgICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQ/LmRlY29kZWRJZFRva2VuKSB7XG4gICAgICAgICAgdGhpcy51c2VyU2VydmljZS5zZXRVc2VyRGF0YVRvU3RvcmUoXG4gICAgICAgICAgICB2YWxpZGF0aW9uUmVzdWx0LmRlY29kZWRJZFRva2VuLFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgICAgICAgIGFsbENvbmZpZ3NcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNSZW5ld1Byb2Nlc3MgJiYgIXJlZnJlc2hUb2tlbikge1xuICAgICAgICB0aGlzLmZsb3dzRGF0YVNlcnZpY2Uuc2V0U2Vzc2lvblN0YXRlKFxuICAgICAgICAgIGF1dGhSZXN1bHQ/LnNlc3Npb25fc3RhdGUsXG4gICAgICAgICAgY29uZmlndXJhdGlvblxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnB1Ymxpc2hBdXRoU3RhdGUodmFsaWRhdGlvblJlc3VsdCwgaXNSZW5ld1Byb2Nlc3MpO1xuXG4gICAgICByZXR1cm4gb2YoY2FsbGJhY2tDb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZVxuICAgICAgLmdldEFuZFBlcnNpc3RVc2VyRGF0YUluU3RvcmUoXG4gICAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICAgIGFsbENvbmZpZ3MsXG4gICAgICAgIGlzUmVuZXdQcm9jZXNzLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0Py5pZFRva2VuLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0Py5kZWNvZGVkSWRUb2tlblxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgodXNlckRhdGEpID0+IHtcbiAgICAgICAgICBpZiAoISF1c2VyRGF0YSkge1xuICAgICAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgICAgdGhpcy5mbG93c0RhdGFTZXJ2aWNlLnNldFNlc3Npb25TdGF0ZShcbiAgICAgICAgICAgICAgICBhdXRoUmVzdWx0Py5zZXNzaW9uX3N0YXRlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5wdWJsaXNoQXV0aFN0YXRlKHZhbGlkYXRpb25SZXN1bHQsIGlzUmVuZXdQcm9jZXNzKTtcblxuICAgICAgICAgICAgcmV0dXJuIG9mKGNhbGxiYWNrQ29udGV4dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRBdXRoRGF0YVNlcnZpY2UucmVzZXRBdXRob3JpemF0aW9uRGF0YShcbiAgICAgICAgICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgICAgICAgICAgYWxsQ29uZmlnc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMucHVibGlzaFVuYXV0aGVudGljYXRlZFN0YXRlKHZhbGlkYXRpb25SZXN1bHQsIGlzUmVuZXdQcm9jZXNzKTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBDYWxsZWQgZm9yIHVzZXJEYXRhIGJ1dCB0aGV5IHdlcmUgJHt1c2VyRGF0YX1gO1xuXG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nV2FybmluZyhjb25maWd1cmF0aW9uLCBlcnJvck1lc3NhZ2UpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYEZhaWxlZCB0byByZXRyaWV2ZSB1c2VyIGluZm8gd2l0aCBlcnJvcjogICR7ZXJyfWA7XG5cbiAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nV2FybmluZyhjb25maWd1cmF0aW9uLCBlcnJvck1lc3NhZ2UpO1xuXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVibGlzaEF1dGhTdGF0ZShcbiAgICBzdGF0ZVZhbGlkYXRpb25SZXN1bHQ6IFN0YXRlVmFsaWRhdGlvblJlc3VsdCB8IG51bGwsXG4gICAgaXNSZW5ld1Byb2Nlc3M6IGJvb2xlYW5cbiAgKTogdm9pZCB7XG4gICAgaWYgKCFzdGF0ZVZhbGlkYXRpb25SZXN1bHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmF1dGhTdGF0ZVNlcnZpY2UudXBkYXRlQW5kUHVibGlzaEF1dGhTdGF0ZSh7XG4gICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHRydWUsXG4gICAgICB2YWxpZGF0aW9uUmVzdWx0OiBzdGF0ZVZhbGlkYXRpb25SZXN1bHQuc3RhdGUsXG4gICAgICBpc1JlbmV3UHJvY2VzcyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHVibGlzaFVuYXV0aGVudGljYXRlZFN0YXRlKFxuICAgIHN0YXRlVmFsaWRhdGlvblJlc3VsdDogU3RhdGVWYWxpZGF0aW9uUmVzdWx0IHwgbnVsbCxcbiAgICBpc1JlbmV3UHJvY2VzczogYm9vbGVhblxuICApOiB2b2lkIHtcbiAgICBpZiAoIXN0YXRlVmFsaWRhdGlvblJlc3VsdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYXV0aFN0YXRlU2VydmljZS51cGRhdGVBbmRQdWJsaXNoQXV0aFN0YXRlKHtcbiAgICAgIGlzQXV0aGVudGljYXRlZDogZmFsc2UsXG4gICAgICB2YWxpZGF0aW9uUmVzdWx0OiBzdGF0ZVZhbGlkYXRpb25SZXN1bHQuc3RhdGUsXG4gICAgICBpc1JlbmV3UHJvY2VzcyxcbiAgICB9KTtcbiAgfVxufVxuIl19