From 03d63fc78e36cbb36dbaee65bd5638eb3d501eb9 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Wed, 18 Jan 2023 12:52:25 +0800 Subject: [PATCH] RED-5700 - idp hint on login link --- src/lib/error/server-error-interceptor.ts | 5 ++++- src/lib/users/iqser-users.module.ts | 5 +++-- src/lib/users/services/iqser-user.service.ts | 3 +++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/lib/error/server-error-interceptor.ts b/src/lib/error/server-error-interceptor.ts index ecbabb0..5619b4b 100644 --- a/src/lib/error/server-error-interceptor.ts +++ b/src/lib/error/server-error-interceptor.ts @@ -1,10 +1,11 @@ import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpStatusCode } from '@angular/common/http'; -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Inject, Injectable, Optional } from '@angular/core'; import { MonoTypeOperatorFunction, Observable, retry, throwError, timer } from 'rxjs'; import { catchError, tap } from 'rxjs/operators'; import { MAX_RETRIES_ON_SERVER_ERROR, SERVER_ERROR_SKIP_PATHS } from './tokens'; import { ErrorService } from './error.service'; import { KeycloakService } from 'keycloak-angular'; +import { IqserConfigService } from '../services'; function updateSeconds(seconds: number) { if (seconds === 0 || seconds === 1) { @@ -47,6 +48,7 @@ export class ServerErrorInterceptor implements HttpInterceptor { constructor( private readonly _errorService: ErrorService, private readonly _keycloakService: KeycloakService, + private readonly _configService: IqserConfigService, @Optional() @Inject(MAX_RETRIES_ON_SERVER_ERROR) private readonly _maxRetries: number, @Optional() @Inject(SERVER_ERROR_SKIP_PATHS) private readonly _skippedPaths: string[], ) {} @@ -58,6 +60,7 @@ export class ServerErrorInterceptor implements HttpInterceptor { if (error.status === HttpStatusCode.Unauthorized) { window.location.href = this._keycloakService.getKeycloakInstance().createLoginUrl({ redirectUri: window.location.href, + idpHint: this._configService.values.OAUTH_IDP_HINT, }); } diff --git a/src/lib/users/iqser-users.module.ts b/src/lib/users/iqser-users.module.ts index b508819..bae8e8e 100644 --- a/src/lib/users/iqser-users.module.ts +++ b/src/lib/users/iqser-users.module.ts @@ -39,10 +39,11 @@ function getKeycloakOptions(baseUrl: string, configService: IqserConfigService): }; } -function configureAutomaticRedirectToLoginScreen(keyCloakService: KeycloakService) { +function configureAutomaticRedirectToLoginScreen(keyCloakService: KeycloakService,configService: IqserConfigService) { keyCloakService.getKeycloakInstance().onAuthRefreshError = () => { window.location.href = keyCloakService.getKeycloakInstance().createLoginUrl({ redirectUri: window.location.href, + idpHint: configService.values.OAUTH_IDP_HINT, }); }; } @@ -53,7 +54,7 @@ export function keycloakInitializer( baseUrl: string, ): () => Promise { const x = keycloakService.init(getKeycloakOptions(baseUrl, configService)); - return () => x.then(() => configureAutomaticRedirectToLoginScreen(keycloakService)); + return () => x.then(() => configureAutomaticRedirectToLoginScreen(keycloakService, configService)); } const components = [NamePipe, InitialsAvatarComponent, UserButtonComponent]; diff --git a/src/lib/users/services/iqser-user.service.ts b/src/lib/users/services/iqser-user.service.ts index 35624c0..5f3209a 100644 --- a/src/lib/users/services/iqser-user.service.ts +++ b/src/lib/users/services/iqser-user.service.ts @@ -15,6 +15,7 @@ import { KeycloakProfile } from 'keycloak-js'; import { IqserUser } from '../iqser-user.model'; import { IqserPermissionsService, IqserRolesService } from '../../permissions'; import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http'; +import { IqserConfigService } from '../../services'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; @Injectable() @@ -30,6 +31,7 @@ export abstract class IqserUserService< protected readonly _currentUser$ = new BehaviorSubject(undefined); protected readonly _baseHref = inject(BASE_HREF); protected readonly _toaster = inject(Toaster); + protected readonly _configService = inject(IqserConfigService); protected readonly _keycloakService = inject(KeycloakService); protected readonly _cacheApiService = inject(CacheApiService); protected readonly _permissionsService = inject(IqserPermissionsService, { optional: true }); @@ -69,6 +71,7 @@ export abstract class IqserUserService< await this._cacheApiService.wipeCaches(); window.location.href = this._keycloakService.getKeycloakInstance().createLoginUrl({ redirectUri: window.location.origin + this._baseHref, + idpHint: this._configService.values.OAUTH_IDP_HINT }); }