From 2e338eacd489b4b8a56f439855a03ba60d1a3298 Mon Sep 17 00:00:00 2001 From: Lyubov Voloshko Date: Wed, 1 Apr 2026 13:34:28 +0000 Subject: [PATCH 1/2] add guard for login and registration page to prevent logged in users to open them --- frontend/src/app/app-routing.module.ts | 8 +++----- frontend/src/app/guards/no-auth.guard.ts | 26 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 frontend/src/app/guards/no-auth.guard.ts diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index 4dc929513..659de92c6 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -3,17 +3,15 @@ import { RouterModule, Routes } from '@angular/router'; import { provideZxvbnServiceForPSM } from 'angular-password-strength-meter/zxcvbn'; import { AuthGuard } from './auth.guard'; import { configurationGuard } from './guards/configuration.guard'; +import { noAuthGuard } from './guards/no-auth.guard'; import { setupGuard } from './guards/setup.guard'; const routes: Routes = [ { path: '', redirectTo: '/connections-list', pathMatch: 'full' }, - { - path: 'loader', - loadComponent: () => import('./components/page-loader/page-loader.component').then((m) => m.PageLoaderComponent), - }, { path: 'registration', loadChildren: () => import('./routes/registration.routes').then((m) => m.REGISTRATION_ROUTES), + canActivate: [noAuthGuard], }, { path: 'setup', @@ -25,7 +23,7 @@ const routes: Routes = [ { path: 'login', loadComponent: () => import('./components/login/login.component').then((m) => m.LoginComponent), - canActivate: [configurationGuard], + canActivate: [noAuthGuard, configurationGuard], title: 'Login | Rocketadmin', }, { diff --git a/frontend/src/app/guards/no-auth.guard.ts b/frontend/src/app/guards/no-auth.guard.ts new file mode 100644 index 000000000..043082a66 --- /dev/null +++ b/frontend/src/app/guards/no-auth.guard.ts @@ -0,0 +1,26 @@ +import { CanActivateFn, Router } from '@angular/router'; +import { inject } from '@angular/core'; +import { differenceInMilliseconds } from 'date-fns'; + +/** + * Guard that prevents logged-in users from accessing auth pages (login, registration). + * Redirects authenticated users to /connections-list. + */ +export const noAuthGuard: CanActivateFn = () => { + const router = inject(Router); + + try { + const expirationToken = localStorage.getItem('token_expiration'); + if (expirationToken) { + const expirationTime = new Date(expirationToken); + const expirationInterval = differenceInMilliseconds(expirationTime, new Date()); + if (expirationInterval > 0) { + return router.createUrlTree(['/connections-list']); + } + } + } catch { + // If anything fails, allow access to auth pages + } + + return true; +}; From f09f0fc2f5adc215f5d729e9e4bff79e6acb04d3 Mon Sep 17 00:00:00 2001 From: Lyubov Voloshko Date: Wed, 1 Apr 2026 13:45:43 +0000 Subject: [PATCH 2/2] move auth guard to guards folder --- frontend/src/app/app-routing.module.ts | 2 +- frontend/src/app/{ => guards}/auth.guard.spec.ts | 0 frontend/src/app/{ => guards}/auth.guard.ts | 0 frontend/src/app/routes/password-change.routes.ts | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) rename frontend/src/app/{ => guards}/auth.guard.spec.ts (100%) rename frontend/src/app/{ => guards}/auth.guard.ts (100%) diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index 659de92c6..4430a0b03 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { provideZxvbnServiceForPSM } from 'angular-password-strength-meter/zxcvbn'; -import { AuthGuard } from './auth.guard'; +import { AuthGuard } from './guards/auth.guard'; import { configurationGuard } from './guards/configuration.guard'; import { noAuthGuard } from './guards/no-auth.guard'; import { setupGuard } from './guards/setup.guard'; diff --git a/frontend/src/app/auth.guard.spec.ts b/frontend/src/app/guards/auth.guard.spec.ts similarity index 100% rename from frontend/src/app/auth.guard.spec.ts rename to frontend/src/app/guards/auth.guard.spec.ts diff --git a/frontend/src/app/auth.guard.ts b/frontend/src/app/guards/auth.guard.ts similarity index 100% rename from frontend/src/app/auth.guard.ts rename to frontend/src/app/guards/auth.guard.ts diff --git a/frontend/src/app/routes/password-change.routes.ts b/frontend/src/app/routes/password-change.routes.ts index edc45950e..3e5379209 100644 --- a/frontend/src/app/routes/password-change.routes.ts +++ b/frontend/src/app/routes/password-change.routes.ts @@ -1,6 +1,6 @@ import { Routes } from '@angular/router'; import { provideZxvbnServiceForPSM } from 'angular-password-strength-meter/zxcvbn'; -import { AuthGuard } from '../auth.guard'; +import { AuthGuard } from '../guards/auth.guard'; export const PASSWORD_CHANGE_ROUTES: Routes = [ {