universo-platform-3d
26 строк · 1014.0 Байт
1import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common'
2
3import { Socket } from 'socket.io'
4import { FirebaseAuthenticationService } from '../firebase/firebase-authentication.service'
5import { WsAuthHelperService } from './ws-auth-helper.service'
6
7/**
8* @description This is used with WsAuthHelperService to ensure that the user is authed before processing a request
9* See: https://github.com/nestjs/nest/issues/882#issuecomment-1493106283
10*/
11@Injectable()
12export class WsAuthGuard implements CanActivate {
13constructor(private readonly wsAuthHelperService: WsAuthHelperService) {}
14
15async canActivate(context: ExecutionContext): Promise<boolean> {
16const client = context.switchToWs().getClient<Socket>()
17
18// wait until client data initialization will be finished
19const check =
20(await this.wsAuthHelperService.finishInitialization(
21client['id'] as any
22)) ||
23this.wsAuthHelperService.initializationSuccess[client['id'] as string]
24return check
25}
26}
27