Update rendering custo role slugs in ST V3 table / modal

This commit is contained in:
Tuan Dang
2023-11-21 17:11:53 +07:00
parent 77438f9282
commit 98e299c2ac
7 changed files with 41 additions and 17 deletions
+21 -12
View File
@@ -6,7 +6,13 @@ import { BotService } from "../../services";
import { containsGlobPatterns, repackageSecretToRaw } from "../../helpers/secrets"; import { containsGlobPatterns, repackageSecretToRaw } from "../../helpers/secrets";
import { encryptSymmetric128BitHexKeyUTF8 } from "../../utils/crypto"; import { encryptSymmetric128BitHexKeyUTF8 } from "../../utils/crypto";
import { getAllImportedSecrets } from "../../services/SecretImportService"; import { getAllImportedSecrets } from "../../services/SecretImportService";
import { Folder, IServiceTokenData, Membership, User } from "../../models"; import {
Folder,
IServiceTokenData,
Membership,
ServiceTokenData,
User
} from "../../models";
import { getFolderByPath } from "../../services/FolderService"; import { getFolderByPath } from "../../services/FolderService";
import { BadRequestError } from "../../utils/errors"; import { BadRequestError } from "../../utils/errors";
import { validateRequest } from "../../helpers/validation"; import { validateRequest } from "../../helpers/validation";
@@ -190,17 +196,20 @@ export const getSecretsRaw = async (req: Request, res: Response) => {
query: { include_imports: includeImports } query: { include_imports: includeImports }
} = validatedData; } = validatedData;
// if the service token has single scope, it will get all secrets for that scope by default if (req.authData.authPayload instanceof ServiceTokenData) {
const serviceTokenDetails: IServiceTokenData = req?.serviceTokenData;
if ( // if the service token has single scope, it will get all secrets for that scope by default
serviceTokenDetails && const serviceTokenDetails: IServiceTokenData = req?.serviceTokenData;
serviceTokenDetails.scopes.length == 1 && if (
!containsGlobPatterns(serviceTokenDetails.scopes[0].secretPath) serviceTokenDetails &&
) { serviceTokenDetails.scopes.length == 1 &&
const scope = serviceTokenDetails.scopes[0]; !containsGlobPatterns(serviceTokenDetails.scopes[0].secretPath)
secretPath = scope.secretPath; ) {
environment = scope.environment; const scope = serviceTokenDetails.scopes[0];
workspaceId = serviceTokenDetails.workspace.toString(); secretPath = scope.secretPath;
environment = scope.environment;
workspaceId = serviceTokenDetails.workspace.toString();
}
} }
if (!environment || !workspaceId) if (!environment || !workspaceId)
@@ -148,7 +148,7 @@ export const getWorkspaceServiceTokenData = async (req: Request, res: Response)
const serviceTokenData = await ServiceTokenDataV3.find({ const serviceTokenData = await ServiceTokenDataV3.find({
workspace: new Types.ObjectId(workspaceId) workspace: new Types.ObjectId(workspaceId)
}); }).populate("customRole");
return res.status(200).send({ return res.status(200).send({
serviceTokenData serviceTokenData
@@ -47,6 +47,10 @@ export type ServiceTokenDataV3 = {
_id: string; _id: string;
name: string; name: string;
role: string; role: string;
customRole?: {
name: string;
slug: string;
};
workspace: string; workspace: string;
isActive: boolean; isActive: boolean;
refreshTokenLastUsed?: string; refreshTokenLastUsed?: string;
@@ -2,7 +2,7 @@
import { motion } from "framer-motion"; import { motion } from "framer-motion";
import { Tab, TabList, TabPanel, Tabs } from "@app/components/v2"; import { Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { ProjectPermissionActions, ProjectPermissionSub } from "@app/context";
import { withProjectPermission } from "@app/hoc"; import { withProjectPermission } from "@app/hoc";
import { MemberListTab } from "./components/MemberListTab"; import { MemberListTab } from "./components/MemberListTab";
@@ -74,6 +74,7 @@ export const MemberListTab = () => {
orgId, orgId,
workspaceId workspaceId
}); });
const { data: wsKey } = useGetUserWsKey(workspaceId); const { data: wsKey } = useGetUserWsKey(workspaceId);
const { data: members, isLoading: isMembersLoading } = useGetWorkspaceUsers(workspaceId); const { data: members, isLoading: isMembersLoading } = useGetWorkspaceUsers(workspaceId);
const { data: orgUsers } = useGetOrgUsers(orgId); const { data: orgUsers } = useGetOrgUsers(orgId);
@@ -151,6 +151,10 @@ export const AddServiceTokenV3Modal = ({
serviceTokenDataId: string; serviceTokenDataId: string;
name: string; name: string;
role: string; role: string;
customRole: {
name: string;
slug: string;
};
trustedIps: ServiceTokenV3TrustedIp[]; trustedIps: ServiceTokenV3TrustedIp[];
accessTokenTTL: number; accessTokenTTL: number;
isRefreshTokenRotationEnabled: boolean; isRefreshTokenRotationEnabled: boolean;
@@ -161,7 +165,7 @@ export const AddServiceTokenV3Modal = ({
if (serviceTokenData) { if (serviceTokenData) {
reset({ reset({
name: serviceTokenData.name, name: serviceTokenData.name,
role: serviceTokenData.role, role: serviceTokenData?.customRole?.slug ?? serviceTokenData.role,
trustedIps: serviceTokenData.trustedIps.map(({ trustedIps: serviceTokenData.trustedIps.map(({
ipAddress, ipAddress,
prefix prefix
@@ -32,6 +32,10 @@ type Props = {
serviceTokenDataId?: string; serviceTokenDataId?: string;
name?: string; name?: string;
role?: string; role?: string;
customRole?: {
name: string;
slug: string;
};
trustedIps?: ServiceTokenV3TrustedIp[]; trustedIps?: ServiceTokenV3TrustedIp[];
accessTokenTTL?: number; accessTokenTTL?: number;
isRefreshTokenRotationEnabled?: boolean; isRefreshTokenRotationEnabled?: boolean;
@@ -46,7 +50,7 @@ export const ServiceTokenV3Table = ({
const { currentWorkspace } = useWorkspace(); const { currentWorkspace } = useWorkspace();
const { data, isLoading } = useGetWorkspaceServiceTokenDataV3(currentWorkspace?._id || ""); const { data, isLoading } = useGetWorkspaceServiceTokenDataV3(currentWorkspace?._id || "");
const { mutateAsync: updateMutateAsync } = useUpdateServiceTokenV3(); const { mutateAsync: updateMutateAsync } = useUpdateServiceTokenV3();
const handleToggleServiceTokenDataStatus = async ({ const handleToggleServiceTokenDataStatus = async ({
serviceTokenDataId, serviceTokenDataId,
isActive isActive
@@ -98,6 +102,7 @@ export const ServiceTokenV3Table = ({
name, name,
isActive, isActive,
role, role,
customRole,
trustedIps, trustedIps,
createdAt, createdAt,
expiresAt, expiresAt,
@@ -127,7 +132,7 @@ export const ServiceTokenV3Table = ({
)} )}
</ProjectPermissionCan> </ProjectPermissionCan>
</Td> </Td>
<Td>{role}</Td> <Td>{customRole?.slug ?? role}</Td>
<Td> <Td>
{trustedIps.map(({ {trustedIps.map(({
_id: trustedIpId, _id: trustedIpId,
@@ -156,6 +161,7 @@ export const ServiceTokenV3Table = ({
serviceTokenDataId: _id, serviceTokenDataId: _id,
name, name,
role, role,
customRole,
trustedIps, trustedIps,
accessTokenTTL, accessTokenTTL,
isRefreshTokenRotationEnabled isRefreshTokenRotationEnabled