diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index 9534ca8b0..d2d44002c 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -1728,7 +1728,8 @@ export const registerRoutes = async ( const convertorService = convertorServiceFactory({ additionalPrivilegeDAL, membershipDAL, - projectDAL + projectDAL, + groupDAL }); const dynamicSecretProviders = buildDynamicSecretProviders({ diff --git a/backend/src/server/routes/v1/group-project-router.ts b/backend/src/server/routes/v1/group-project-router.ts index 15f3a1e1e..5957daddb 100644 --- a/backend/src/server/routes/v1/group-project-router.ts +++ b/backend/src/server/routes/v1/group-project-router.ts @@ -15,6 +15,7 @@ import { ms } from "@app/lib/ms"; import { readLimit, writeLimit } from "@app/server/config/rateLimiter"; import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; import { AuthMode } from "@app/services/auth/auth-type"; +import { isUuidV4 } from "@app/lib/validator"; export const registerGroupProjectRouter = async (server: FastifyZodProvider) => { server.route({ @@ -74,10 +75,16 @@ export const registerGroupProjectRouter = async (server: FastifyZodProvider) => } }, handler: async (req) => { + let groupId = req.params.groupIdOrName; + if (!isUuidV4(req.params.groupIdOrName)) { + const groupDetails = await server.services.convertor.getGroupIdFromName(groupId, req.permission.orgId); + groupId = groupDetails.groupId; + } + const { membership: groupMembership } = await server.services.membershipGroup.createMembership({ permission: req.permission, data: { - groupId: req.params.groupIdOrName, + groupId, roles: req.body.roles || [{ role: req.body.role, isTemporary: false }] }, scopeData: { diff --git a/backend/src/server/routes/v2/deprecated-group-project-router.ts b/backend/src/server/routes/v2/deprecated-group-project-router.ts index fad15e352..ca7753039 100644 --- a/backend/src/server/routes/v2/deprecated-group-project-router.ts +++ b/backend/src/server/routes/v2/deprecated-group-project-router.ts @@ -15,6 +15,7 @@ import { ms } from "@app/lib/ms"; import { readLimit, writeLimit } from "@app/server/config/rateLimiter"; import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; import { AuthMode } from "@app/services/auth/auth-type"; +import { isUuidV4 } from "@app/lib/validator"; export const registerDeprecatedGroupProjectRouter = async (server: FastifyZodProvider) => { server.route({ @@ -74,10 +75,16 @@ export const registerDeprecatedGroupProjectRouter = async (server: FastifyZodPro } }, handler: async (req) => { + let groupId = req.params.groupIdOrName; + if (!isUuidV4(req.params.groupIdOrName)) { + const groupDetails = await server.services.convertor.getGroupIdFromName(groupId, req.permission.orgId); + groupId = groupDetails.groupId; + } + const { membership: groupMembership } = await server.services.membershipGroup.createMembership({ permission: req.permission, data: { - groupId: req.params.groupIdOrName, + groupId, roles: req.body.roles || [{ role: req.body.role, isTemporary: false }] }, scopeData: { diff --git a/backend/src/services/convertor/convertor-service.ts b/backend/src/services/convertor/convertor-service.ts index fe33c3ae8..4165d8836 100644 --- a/backend/src/services/convertor/convertor-service.ts +++ b/backend/src/services/convertor/convertor-service.ts @@ -4,10 +4,12 @@ import { NotFoundError } from "@app/lib/errors"; import { TAdditionalPrivilegeDALFactory } from "../additional-privilege/additional-privilege-dal"; import { TMembershipDALFactory } from "../membership/membership-dal"; import { TProjectDALFactory } from "../project/project-dal"; +import { TGroupDALFactory } from "@app/ee/services/group/group-dal"; type TConvertorServiceFactoryDep = { projectDAL: Pick; membershipDAL: Pick; + groupDAL: Pick; additionalPrivilegeDAL: Pick; }; @@ -16,7 +18,8 @@ export type TConvertorServiceFactory = ReturnType { const projectSlugToId = async (dto: { slug: string; orgId: string }) => { const project = await projectDAL.findOne({ @@ -108,6 +111,12 @@ export const convertorServiceFactory = ({ return { privilegeId: privilege.id, privilege }; }; + const getGroupIdFromName = async (name: string, orgId: string) => { + const group = await groupDAL.findOne({ orgId, name }); + if (!group) throw new NotFoundError({ message: `Failed to find group with name ${name}` }); + return { groupId: group.id, group }; + }; + return { projectSlugToId, userMembershipIdToUserId, @@ -115,6 +124,7 @@ export const convertorServiceFactory = ({ identityMembershipIdToIdentityId, additionalPrivilegeIdToDoc, additionalPrivilegeNameToDoc, - identityIdToMembershipId + identityIdToMembershipId, + getGroupIdFromName }; };