Skip to content

Commit 900fe8a

Browse files
fix: empty string validation for ecosystemId when only space is entered
Signed-off-by: pranalidhanavade <pranali.dhanavade@ayanworks.com>
1 parent 6a72b05 commit 900fe8a

File tree

1 file changed

+26
-20
lines changed

1 file changed

+26
-20
lines changed

apps/api-gateway/src/authz/guards/ecosystem-roles.guard.ts

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { Reflector } from '@nestjs/core';
77
import { ResponseMessages } from '@credebl/common/response-messages';
88
import { validate as isValidUUID } from 'uuid';
99

10-
interface EcosystemAccessEntry {
10+
interface EcosystemRoleGroup {
1111
ecosystem_role?: {
1212
lead?: string[];
1313
member?: string[];
@@ -51,14 +51,14 @@ export class EcosystemRolesGuard implements CanActivate {
5151
}
5252

5353
const isPlatformAdmin = user.email === process.env.PLATFORM_ADMIN_EMAIL;
54-
/**
55-
* =====================================
56-
* Ecosystem validation (JWT based only)
57-
* =====================================
58-
*/
5954

6055
let ecosystemId = '';
6156

57+
const ecosystemIdExists =
58+
'undefined' !== typeof reqData.params?.ecosystemId ||
59+
'undefined' !== typeof reqData.query?.ecosystemId ||
60+
'undefined' !== typeof reqData.body?.ecosystemId;
61+
6262
switch (true) {
6363
case 'string' === typeof reqData.params?.ecosystemId:
6464
ecosystemId = reqData.params.ecosystemId.trim();
@@ -73,30 +73,36 @@ export class EcosystemRolesGuard implements CanActivate {
7373
ecosystemId = '';
7474
}
7575

76-
if (ecosystemId) {
76+
if (ecosystemIdExists) {
77+
if (!ecosystemId) {
78+
throw new BadRequestException(ResponseMessages.ecosystem.error.ecosystemIdIsRequired);
79+
}
7780
if (!isValidUUID(ecosystemId)) {
7881
throw new BadRequestException(ResponseMessages.ecosystem?.error?.invalidEcosystemId || 'Invalid ecosystem id');
7982
}
8083

81-
const ecosystemAccessValues = Object.values(user?.ecosystem_access || {});
84+
const ecosystemAccess = user?.ecosystem_access;
8285

83-
if (!ecosystemAccessValues.length) {
84-
throw new ForbiddenException(ResponseMessages.ecosystem?.error?.ecosystemNotFound || 'Ecosystem not found');
86+
if (!ecosystemAccess) {
87+
throw new ForbiddenException(
88+
ResponseMessages.ecosystem?.error?.ecosystemNotFound || 'User does not have ecosystem access'
89+
);
8590
}
8691

87-
const [ecosystemEntry] = ecosystemAccessValues as EcosystemAccessEntry[];
88-
89-
const leadList = ecosystemEntry?.ecosystem_role?.lead ?? [];
90-
const memberList = ecosystemEntry?.ecosystem_role?.member ?? [];
91-
92-
const hasAccess = leadList.includes(ecosystemId) || memberList.includes(ecosystemId);
92+
const hasAccess = Object.values(ecosystemAccess).some((entry: EcosystemRoleGroup) => {
93+
const leadList = entry?.ecosystem_role?.lead ?? [];
94+
const memberList = entry?.ecosystem_role?.member ?? [];
95+
return leadList.includes(ecosystemId) || memberList.includes(ecosystemId);
96+
});
9397

9498
if (!hasAccess) {
95-
throw new ForbiddenException(ResponseMessages.ecosystem?.error?.ecosystemNotFound || 'Ecosystem not found');
99+
throw new ForbiddenException(
100+
ResponseMessages.ecosystem?.error?.ecosystemNotFound || 'User does not have access to this ecosystem'
101+
);
96102
}
97103

98-
// Optional: attach for downstream usage
99104
user.selectedEcosystem = ecosystemId;
105+
return true;
100106
}
101107

102108
if (isPlatformAdmin && requiredRolesNames.includes(OrgRoles.PLATFORM_ADMIN)) {
@@ -122,7 +128,7 @@ export class EcosystemRolesGuard implements CanActivate {
122128
const roleAccess = requiredRoles.some((role) => orgRoles.includes(role));
123129

124130
if (!roleAccess) {
125-
throw new ForbiddenException(ResponseMessages.organisation.error.roleNotMatch, {
131+
throw new ForbiddenException('1111111', {
126132
cause: new Error('error'),
127133
description: ResponseMessages.errorMessages.forbidden
128134
});
@@ -157,7 +163,7 @@ export class EcosystemRolesGuard implements CanActivate {
157163
// Sending user friendly message if a user attempts to access an API that is inaccessible to their role
158164
const roleAccess = requiredRoles.some((role) => user.selectedOrg?.orgRoles.includes(role));
159165
if (!roleAccess) {
160-
throw new ForbiddenException(ResponseMessages.organisation.error.roleNotMatch, {
166+
throw new ForbiddenException('222222', {
161167
cause: new Error('error'),
162168
description: ResponseMessages.errorMessages.forbidden
163169
});

0 commit comments

Comments
 (0)