From 66b7d059fb1bfa0c6bf81bb468a42e9bd3c7124c Mon Sep 17 00:00:00 2001 From: Fredrik Dyrvold Date: Mon, 17 Jan 2022 18:57:22 +0100 Subject: [PATCH] Crash OIDC lib neatly when running without OIDC config. --- src/app/nav/nav.component.html | 4 ++-- src/app/nav/nav.component.ts | 6 ++++++ src/app/shared/config/config.service.ts | 19 ++++++++++++++++--- src/app/shared/config/config.ts | 2 +- src/assets/config.json | 15 --------------- 5 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/app/nav/nav.component.html b/src/app/nav/nav.component.html index 12d49a81..bb3e0831 100644 --- a/src/app/nav/nav.component.html +++ b/src/app/nav/nav.component.html @@ -85,9 +85,9 @@

WHARF

- + - + diff --git a/src/app/nav/nav.component.ts b/src/app/nav/nav.component.ts index 00881db1..440210ff 100644 --- a/src/app/nav/nav.component.ts +++ b/src/app/nav/nav.component.ts @@ -12,6 +12,7 @@ import { LicensesService } from '../shared/licenses/licenses.service'; import { Router } from '@angular/router'; import { OidcSecurityService } from 'angular-auth-oidc-client'; import { takeUntil } from 'rxjs/operators'; +import { ConfigService } from '../shared/config/config.service'; enum RemoteVersionStatus { Pending, @@ -70,6 +71,7 @@ export class NavComponent implements OnInit, OnDestroy { private licensesService: LicensesService, private router: Router, private oidcSecurityService: OidcSecurityService, + private configService: ConfigService, ) { } @@ -99,6 +101,10 @@ export class NavComponent implements OnInit, OnDestroy { this.setMenuOptsAuth(); } + public isUsingPlaceholderOidcConfig(): Observable { + return this.configService.isPlaceHolderOidcConfig$; + } + public ngOnDestroy() { this.isDestroyed$.next(true); this.isDestroyed$.complete(); diff --git a/src/app/shared/config/config.service.ts b/src/app/shared/config/config.service.ts index a8c3815f..9c2c4cea 100644 --- a/src/app/shared/config/config.service.ts +++ b/src/app/shared/config/config.service.ts @@ -3,8 +3,8 @@ import { Config } from './config'; import { Configuration } from 'api-client'; import { Configuration as GitlabConfiguration } from 'import-gitlab-client'; import { Configuration as AzureDevOpsConfiguration } from 'import-azuredevops-client'; -import { OpenIdConfiguration } from 'angular-auth-oidc-client'; -import { config, Observable, of, pluck } from 'rxjs'; +import { LogLevel, OpenIdConfiguration } from 'angular-auth-oidc-client'; +import { BehaviorSubject, config, Observable, of, pluck } from 'rxjs'; import { catchError, map, tap } from 'rxjs/operators'; import { resolve } from '@angular/compiler-cli/src/ngtsc/file_system'; import { HttpClient } from '@angular/common/http'; @@ -45,12 +45,19 @@ export const lowClone = (obj: T): T => { return clone; }; +const defaultOidcConfig = { + authority: 'https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration', + redirectUrl: window.location.origin, + clientId: 'placeholder', +}; + const configUrl = 'assets/config.json'; @Injectable({ providedIn: 'root', }) export class ConfigService { + public isPlaceHolderOidcConfig$ = new BehaviorSubject(true); private config: Config; constructor( @@ -99,7 +106,13 @@ export class ConfigService { public getOidcConfig$(): Observable { return this.getConfig$().pipe( - map((configuration: Config) => configuration.oidcConfig), + map((configuration: Config) => { + if (!configuration?.oidcConfig){ + return defaultOidcConfig; + this.isPlaceHolderOidcConfig$.next(true); + } + return configuration.oidcConfig; + }), ); } diff --git a/src/app/shared/config/config.ts b/src/app/shared/config/config.ts index 13348c87..11b19026 100644 --- a/src/app/shared/config/config.ts +++ b/src/app/shared/config/config.ts @@ -3,7 +3,7 @@ import { OpenIdConfiguration } from 'angular-auth-oidc-client'; export interface Config { environment: EnvironmentConfig; backendUrls: BackendUrlsConfig; - oidcConfig: OpenIdConfiguration; + oidcConfig?: OpenIdConfiguration; } interface EnvironmentConfig { diff --git a/src/assets/config.json b/src/assets/config.json index 9c5fe40c..540f421d 100644 --- a/src/assets/config.json +++ b/src/assets/config.json @@ -10,20 +10,5 @@ "GitlabImport": "http://localhost:4200/import", "GithubImport": "http://localhost:4200/import", "AzureDevopsImport": "http://localhost:4200/import" - }, - "oidcConfig": { - "authority": "https://login.microsoftonline.com/841df554-ef9d-48b1-bc6e-44cf8543a8fc/v2.0/.well-known/openid-configuration", - "redirectUrl": "http://localhost:4200", - "postLogoutRedirectUri": "http://localhost:4200", - "clientId": "01fcb3dc-7a2b-4b1c-a7d6-d7033089c779", - "scope": "openid profile email offline_access api://wharf-internal/read api://wharf-internal/admin api://wharf-internal/deploy", - "responseType": "id_token token", - "ignoreNonceAfterRefresh": true, - "silentRenew": true, - "useRefreshToken": true, - "logLevel": "debug", - "maxIdTokenIatOffsetAllowedInSeconds": 600, - "issValidationOff": false, - "autoUserInfo": false } }