mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-06 12:27:31 +00:00
misc: added endpoint for fetching group details by ID
This commit is contained in:
@@ -42,6 +42,31 @@ export const registerGroupRouter = async (server: FastifyZodProvider) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
server.route({
|
||||||
|
url: "/:id",
|
||||||
|
method: "GET",
|
||||||
|
onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]),
|
||||||
|
schema: {
|
||||||
|
params: z.object({
|
||||||
|
id: z.string()
|
||||||
|
}),
|
||||||
|
response: {
|
||||||
|
200: GroupsSchema
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handler: async (req) => {
|
||||||
|
const group = await server.services.group.getGroupById({
|
||||||
|
actor: req.permission.type,
|
||||||
|
actorId: req.permission.id,
|
||||||
|
actorAuthMethod: req.permission.authMethod,
|
||||||
|
actorOrgId: req.permission.orgId,
|
||||||
|
id: req.params.id
|
||||||
|
});
|
||||||
|
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
server.route({
|
server.route({
|
||||||
url: "/:id",
|
url: "/:id",
|
||||||
method: "PATCH",
|
method: "PATCH",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import slugify from "@sindresorhus/slugify";
|
|||||||
|
|
||||||
import { OrgMembershipRole, TOrgRoles } from "@app/db/schemas";
|
import { OrgMembershipRole, TOrgRoles } from "@app/db/schemas";
|
||||||
import { isAtLeastAsPrivileged } from "@app/lib/casl";
|
import { isAtLeastAsPrivileged } from "@app/lib/casl";
|
||||||
import { BadRequestError, ForbiddenRequestError } from "@app/lib/errors";
|
import { BadRequestError, ForbiddenRequestError, NotFoundError } from "@app/lib/errors";
|
||||||
import { alphaNumericNanoId } from "@app/lib/nanoid";
|
import { alphaNumericNanoId } from "@app/lib/nanoid";
|
||||||
import { TGroupProjectDALFactory } from "@app/services/group-project/group-project-dal";
|
import { TGroupProjectDALFactory } from "@app/services/group-project/group-project-dal";
|
||||||
import { TOrgDALFactory } from "@app/services/org/org-dal";
|
import { TOrgDALFactory } from "@app/services/org/org-dal";
|
||||||
@@ -21,6 +21,7 @@ import {
|
|||||||
TAddUserToGroupDTO,
|
TAddUserToGroupDTO,
|
||||||
TCreateGroupDTO,
|
TCreateGroupDTO,
|
||||||
TDeleteGroupDTO,
|
TDeleteGroupDTO,
|
||||||
|
TGetGroupByIdDTO,
|
||||||
TListGroupUsersDTO,
|
TListGroupUsersDTO,
|
||||||
TRemoveUserFromGroupDTO,
|
TRemoveUserFromGroupDTO,
|
||||||
TUpdateGroupDTO
|
TUpdateGroupDTO
|
||||||
@@ -29,7 +30,7 @@ import { TUserGroupMembershipDALFactory } from "./user-group-membership-dal";
|
|||||||
|
|
||||||
type TGroupServiceFactoryDep = {
|
type TGroupServiceFactoryDep = {
|
||||||
userDAL: Pick<TUserDALFactory, "find" | "findUserEncKeyByUserIdsBatch" | "transaction" | "findOne">;
|
userDAL: Pick<TUserDALFactory, "find" | "findUserEncKeyByUserIdsBatch" | "transaction" | "findOne">;
|
||||||
groupDAL: Pick<TGroupDALFactory, "create" | "findOne" | "update" | "delete" | "findAllGroupMembers">;
|
groupDAL: Pick<TGroupDALFactory, "create" | "findOne" | "update" | "delete" | "findAllGroupMembers" | "findById">;
|
||||||
groupProjectDAL: Pick<TGroupProjectDALFactory, "find">;
|
groupProjectDAL: Pick<TGroupProjectDALFactory, "find">;
|
||||||
orgDAL: Pick<TOrgDALFactory, "findMembership" | "countAllOrgMembers">;
|
orgDAL: Pick<TOrgDALFactory, "findMembership" | "countAllOrgMembers">;
|
||||||
userGroupMembershipDAL: Pick<
|
userGroupMembershipDAL: Pick<
|
||||||
@@ -186,6 +187,30 @@ export const groupServiceFactory = ({
|
|||||||
return group;
|
return group;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const getGroupById = async ({ id, actor, actorId, actorAuthMethod, actorOrgId }: TGetGroupByIdDTO) => {
|
||||||
|
if (!actorOrgId) {
|
||||||
|
throw new BadRequestError({ message: "Failed to read group without organization" });
|
||||||
|
}
|
||||||
|
|
||||||
|
const { permission } = await permissionService.getOrgPermission(
|
||||||
|
actor,
|
||||||
|
actorId,
|
||||||
|
actorOrgId,
|
||||||
|
actorAuthMethod,
|
||||||
|
actorOrgId
|
||||||
|
);
|
||||||
|
ForbiddenError.from(permission).throwUnlessCan(OrgPermissionActions.Read, OrgPermissionSubjects.Groups);
|
||||||
|
|
||||||
|
const group = await groupDAL.findById(id);
|
||||||
|
if (!group) {
|
||||||
|
throw new NotFoundError({
|
||||||
|
message: `Cannot find group with ID ${id}`
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return group;
|
||||||
|
};
|
||||||
|
|
||||||
const listGroupUsers = async ({
|
const listGroupUsers = async ({
|
||||||
id,
|
id,
|
||||||
offset,
|
offset,
|
||||||
@@ -336,6 +361,7 @@ export const groupServiceFactory = ({
|
|||||||
deleteGroup,
|
deleteGroup,
|
||||||
listGroupUsers,
|
listGroupUsers,
|
||||||
addUserToGroup,
|
addUserToGroup,
|
||||||
removeUserFromGroup
|
removeUserFromGroup,
|
||||||
|
getGroupById
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -29,6 +29,10 @@ export type TDeleteGroupDTO = {
|
|||||||
id: string;
|
id: string;
|
||||||
} & TGenericPermission;
|
} & TGenericPermission;
|
||||||
|
|
||||||
|
export type TGetGroupByIdDTO = {
|
||||||
|
id: string;
|
||||||
|
} & TGenericPermission;
|
||||||
|
|
||||||
export type TListGroupUsersDTO = {
|
export type TListGroupUsersDTO = {
|
||||||
id: string;
|
id: string;
|
||||||
offset: number;
|
offset: number;
|
||||||
|
|||||||
Reference in New Issue
Block a user