diff --git a/server/src/modules/auth/app-auth.guard.ts b/server/src/modules/auth/app-auth.guard.ts index 38200039cc..435ca8411b 100644 --- a/server/src/modules/auth/app-auth.guard.ts +++ b/server/src/modules/auth/app-auth.guard.ts @@ -1,10 +1,11 @@ import { ExecutionContext, Injectable, NotFoundException, UnauthorizedException } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; +import { UsersService } from '@services/users.service'; import { AppsService } from 'src/services/apps.service'; @Injectable() export class AppAuthGuard extends AuthGuard('jwt') { - constructor(private appsService: AppsService) { + constructor(private appsService: AppsService, private usersService: UsersService) { super(); } @@ -30,9 +31,15 @@ export class AppAuthGuard extends AuthGuard('jwt') { const authResult = await super.canActivate(context); return authResult; } catch (error) { + let organizationSlug: string; + if (app?.organizationId) { + const organization = await this.usersService.getAppOrganizationDetails(app); + organizationSlug = organization.slug || organization.id; + } + throw new UnauthorizedException( JSON.stringify({ - organizationId: app?.organizationId, + organizationId: organizationSlug, message: 'Authentication is required to access this app.', }) ); diff --git a/server/src/services/users.service.ts b/server/src/services/users.service.ts index aefb6339d3..99f1ea23cb 100644 --- a/server/src/services/users.service.ts +++ b/server/src/services/users.service.ts @@ -11,6 +11,7 @@ import { BadRequestException } from '@nestjs/common'; import { cleanObject, dbTransactionWrap } from 'src/helpers/utils.helper'; import { CreateFileDto } from '@dto/create-file.dto'; import { WORKSPACE_USER_STATUS } from 'src/helpers/user_lifecycle'; +import { Organization } from 'src/entities/organization.entity'; const uuid = require('uuid'); const bcrypt = require('bcrypt'); @@ -21,13 +22,22 @@ export class UsersService { @InjectRepository(User) private usersRepository: Repository, @InjectRepository(App) - private appsRepository: Repository + private appsRepository: Repository, + @InjectRepository(Organization) + private organizationsRepository: Repository ) {} async getCount(): Promise { return this.usersRepository.count(); } + async getAppOrganizationDetails(app: App): Promise { + return this.organizationsRepository.findOneOrFail({ + select: ['id', 'slug'], + where: { id: app.organizationId }, + }); + } + async findOne(where = {}): Promise { return this.usersRepository.findOne({ where }); }