From 3f23c6d66eb8d9610f54b15369b3e002721d0b45 Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Wed, 31 Jan 2024 11:51:49 +0100 Subject: [PATCH] move if not logged in guard --- src/lib/tenants/guards/guards-utils.ts | 5 +++ .../tenants/guards/if-not-logged-in.guard.ts | 36 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/lib/tenants/guards/guards-utils.ts create mode 100644 src/lib/tenants/guards/if-not-logged-in.guard.ts diff --git a/src/lib/tenants/guards/guards-utils.ts b/src/lib/tenants/guards/guards-utils.ts new file mode 100644 index 0000000..250ecba --- /dev/null +++ b/src/lib/tenants/guards/guards-utils.ts @@ -0,0 +1,5 @@ +export function getRouteTenant() { + const pathParams = location.pathname.split('/').filter(Boolean); + const uiPathIndex = pathParams.indexOf('ui'); + return pathParams[uiPathIndex + 1]; +} diff --git a/src/lib/tenants/guards/if-not-logged-in.guard.ts b/src/lib/tenants/guards/if-not-logged-in.guard.ts new file mode 100644 index 0000000..280daa0 --- /dev/null +++ b/src/lib/tenants/guards/if-not-logged-in.guard.ts @@ -0,0 +1,36 @@ +import { inject } from '@angular/core'; +import { CanActivateFn, Router } from '@angular/router'; +import { KeycloakService } from 'keycloak-angular'; +import { NGXLogger } from 'ngx-logger'; +import { getRouteTenant } from './guards-utils'; + +export function ifNotLoggedIn(): CanActivateFn { + return async () => { + const logger = inject(NGXLogger); + const router = inject(Router); + const keycloakService = inject(KeycloakService); + if (!keycloakService.getKeycloakInstance()) { + const tenant = getRouteTenant(); + if (tenant) { + logger.warn('[ROUTES] Tenant ' + tenant + ' found in route, redirecting to /main'); + await router.navigate(['main']); + return false; + } + } + + if (!keycloakService.isLoggedIn()) { + logger.info('[ROUTES] Not logged in, continuing to selected route'); + return true; + } + + const tenant = keycloakService.getKeycloakInstance().realm; + if (!tenant) { + logger.error('[ROUTES] Tenant not found in route or keycloak realm'); + return false; + } + + logger.warn('[ROUTES] Is logged in for ' + tenant + ', redirecting to /' + tenant); + await router.navigate(['/main']); + return false; + }; +}