From ecf70639f729afe2c60260e0280b69c157659ca3 Mon Sep 17 00:00:00 2001 From: juancarmore Date: Wed, 26 Mar 2025 13:38:42 +0100 Subject: [PATCH] frontend: Add room creator guard to manage room creation access --- .../src/lib/guards/index.ts | 1 + .../src/lib/guards/room-creator.guard.ts | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 frontend/projects/shared-meet-components/src/lib/guards/room-creator.guard.ts diff --git a/frontend/projects/shared-meet-components/src/lib/guards/index.ts b/frontend/projects/shared-meet-components/src/lib/guards/index.ts index 46ae9c1..2d5f3e5 100644 --- a/frontend/projects/shared-meet-components/src/lib/guards/index.ts +++ b/frontend/projects/shared-meet-components/src/lib/guards/index.ts @@ -4,3 +4,4 @@ export * from './validate-room-access.guard'; export * from './application-mode.guard'; export * from './participant-name.guard'; export * from './replace-moderator-secret.guard'; +export * from './room-creator.guard'; diff --git a/frontend/projects/shared-meet-components/src/lib/guards/room-creator.guard.ts b/frontend/projects/shared-meet-components/src/lib/guards/room-creator.guard.ts new file mode 100644 index 0000000..ff82777 --- /dev/null +++ b/frontend/projects/shared-meet-components/src/lib/guards/room-creator.guard.ts @@ -0,0 +1,19 @@ +import { inject } from '@angular/core'; +import { ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot } from '@angular/router'; +import { ContextService } from 'shared-meet-components'; + +export const checkRoomCreatorEnabledGuard: CanActivateFn = async ( + _route: ActivatedRouteSnapshot, + _state: RouterStateSnapshot +) => { + const contextService = inject(ContextService); + const router = inject(Router); + + const isRoomCreatorEnabled = await contextService.canUsersCreateRooms(); + if (!isRoomCreatorEnabled) { + router.navigate(['room-creator-disabled']); + return false; + } + + return true; +};