mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 04:27:29 +00:00
feat(secret-approval): moved approval code to ee
This commit is contained in:
@@ -16,8 +16,6 @@ import * as workspaceController from "./workspaceController";
|
|||||||
import * as secretScanningController from "./secretScanningController";
|
import * as secretScanningController from "./secretScanningController";
|
||||||
import * as webhookController from "./webhookController";
|
import * as webhookController from "./webhookController";
|
||||||
import * as secretImpsController from "./secretImpsController";
|
import * as secretImpsController from "./secretImpsController";
|
||||||
import * as secretApprovalPolicyController from "./secretApprovalPolicyController";
|
|
||||||
import * as secretApprovalRequestController from "./secretApprovalRequestsController";
|
|
||||||
export {
|
export {
|
||||||
authController,
|
authController,
|
||||||
botController,
|
botController,
|
||||||
@@ -36,7 +34,5 @@ export {
|
|||||||
workspaceController,
|
workspaceController,
|
||||||
secretScanningController,
|
secretScanningController,
|
||||||
webhookController,
|
webhookController,
|
||||||
secretImpsController,
|
secretImpsController
|
||||||
secretApprovalPolicyController,
|
|
||||||
secretApprovalRequestController
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,22 +3,11 @@ import { Types } from "mongoose";
|
|||||||
import { EventService, SecretService } from "../../services";
|
import { EventService, SecretService } from "../../services";
|
||||||
import { eventPushSecrets } from "../../events";
|
import { eventPushSecrets } from "../../events";
|
||||||
import { BotService } from "../../services";
|
import { BotService } from "../../services";
|
||||||
import {
|
import { containsGlobPatterns, isValidScopeV3, repackageSecretToRaw } from "../../helpers/secrets";
|
||||||
containsGlobPatterns,
|
|
||||||
isValidScopeV3,
|
|
||||||
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 {
|
import { Folder, IMembership, IServiceTokenData, IServiceTokenDataV3 } from "../../models";
|
||||||
Folder,
|
import { Permission } from "../../models/serviceTokenDataV3";
|
||||||
IMembership,
|
|
||||||
IServiceTokenData,
|
|
||||||
IServiceTokenDataV3
|
|
||||||
} from "../../models";
|
|
||||||
import {
|
|
||||||
Permission
|
|
||||||
} from "../../models/serviceTokenDataV3";
|
|
||||||
import { getFolderByPath, getFolderWithPathFromId } from "../../services/FolderService";
|
import { getFolderByPath, getFolderWithPathFromId } from "../../services/FolderService";
|
||||||
import { BadRequestError } from "../../utils/errors";
|
import { BadRequestError } from "../../utils/errors";
|
||||||
import { validateRequest } from "../../helpers/validation";
|
import { validateRequest } from "../../helpers/validation";
|
||||||
@@ -29,7 +18,7 @@ import {
|
|||||||
getUserProjectPermissions
|
getUserProjectPermissions
|
||||||
} from "../../ee/services/ProjectRoleService";
|
} from "../../ee/services/ProjectRoleService";
|
||||||
import { ForbiddenError, subject } from "@casl/ability";
|
import { ForbiddenError, subject } from "@casl/ability";
|
||||||
import {
|
import {
|
||||||
validateServiceTokenDataClientForWorkspace,
|
validateServiceTokenDataClientForWorkspace,
|
||||||
validateServiceTokenDataV3ClientForWorkspace
|
validateServiceTokenDataV3ClientForWorkspace
|
||||||
} from "../../validation";
|
} from "../../validation";
|
||||||
@@ -37,6 +26,12 @@ import { PERMISSION_READ_SECRETS, PERMISSION_WRITE_SECRETS } from "../../variabl
|
|||||||
import { ActorType } from "../../ee/models";
|
import { ActorType } from "../../ee/models";
|
||||||
import { UnauthorizedRequestError } from "../../utils/errors";
|
import { UnauthorizedRequestError } from "../../utils/errors";
|
||||||
import { AuthData } from "../../interfaces/middleware";
|
import { AuthData } from "../../interfaces/middleware";
|
||||||
|
import {
|
||||||
|
generateSecretApprovalRequest,
|
||||||
|
getSecretPolicyOfBoard
|
||||||
|
} from "../../ee/services/SecretApprovalService";
|
||||||
|
import { CommitType } from "../../ee/models/secretApprovalRequest";
|
||||||
|
import { IRole } from "../../ee/models/role";
|
||||||
|
|
||||||
const checkSecretsPermission = async ({
|
const checkSecretsPermission = async ({
|
||||||
authData,
|
authData,
|
||||||
@@ -50,8 +45,10 @@ const checkSecretsPermission = async ({
|
|||||||
environment: string;
|
environment: string;
|
||||||
secretPath: string;
|
secretPath: string;
|
||||||
secretAction: ProjectPermissionActions; // CRUD
|
secretAction: ProjectPermissionActions; // CRUD
|
||||||
}): Promise<{authVerifier:(env: string, secPath: string) => boolean,membership?:Omit<IMembership,"customRole"> & {customRole: IRole}}> => {
|
}): Promise<{
|
||||||
|
authVerifier: (env: string, secPath: string) => boolean;
|
||||||
|
membership?: Omit<IMembership, "customRole"> & { customRole: IRole };
|
||||||
|
}> => {
|
||||||
let STV2RequiredPermissions = [];
|
let STV2RequiredPermissions = [];
|
||||||
let STV3RequiredPermissions: Permission[] = [];
|
let STV3RequiredPermissions: Permission[] = [];
|
||||||
|
|
||||||
@@ -73,22 +70,28 @@ const checkSecretsPermission = async ({
|
|||||||
STV3RequiredPermissions = [Permission.WRITE];
|
STV3RequiredPermissions = [Permission.WRITE];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (authData.actor.type) {
|
switch (authData.actor.type) {
|
||||||
case ActorType.USER: {
|
case ActorType.USER: {
|
||||||
const { permission,membership } = await getUserProjectPermissions(authData.actor.metadata.userId, workspaceId);
|
const { permission, membership } = await getUserProjectPermissions(
|
||||||
|
authData.actor.metadata.userId,
|
||||||
|
workspaceId
|
||||||
|
);
|
||||||
ForbiddenError.from(permission).throwUnlessCan(
|
ForbiddenError.from(permission).throwUnlessCan(
|
||||||
secretAction,
|
secretAction,
|
||||||
subject(ProjectPermissionSub.Secrets, { environment, secretPath })
|
subject(ProjectPermissionSub.Secrets, { environment, secretPath })
|
||||||
);
|
);
|
||||||
return {authVerifier: (env: string, secPath: string) =>
|
return {
|
||||||
permission.can(
|
authVerifier: (env: string, secPath: string) =>
|
||||||
secretAction,
|
permission.can(
|
||||||
subject(ProjectPermissionSub.Secrets, {
|
secretAction,
|
||||||
environment: env,
|
subject(ProjectPermissionSub.Secrets, {
|
||||||
secretPath: secPath
|
environment: env,
|
||||||
})
|
secretPath: secPath
|
||||||
),membership};
|
})
|
||||||
|
),
|
||||||
|
membership
|
||||||
|
};
|
||||||
}
|
}
|
||||||
case ActorType.SERVICE: {
|
case ActorType.SERVICE: {
|
||||||
await validateServiceTokenDataClientForWorkspace({
|
await validateServiceTokenDataClientForWorkspace({
|
||||||
@@ -98,7 +101,7 @@ const checkSecretsPermission = async ({
|
|||||||
secretPath,
|
secretPath,
|
||||||
requiredPermissions: STV2RequiredPermissions
|
requiredPermissions: STV2RequiredPermissions
|
||||||
});
|
});
|
||||||
return {authVerifier:() => true};
|
return { authVerifier: () => true };
|
||||||
}
|
}
|
||||||
case ActorType.SERVICE_V3: {
|
case ActorType.SERVICE_V3: {
|
||||||
await validateServiceTokenDataV3ClientForWorkspace({
|
await validateServiceTokenDataV3ClientForWorkspace({
|
||||||
@@ -109,25 +112,21 @@ const checkSecretsPermission = async ({
|
|||||||
secretPath,
|
secretPath,
|
||||||
requiredPermissions: STV3RequiredPermissions
|
requiredPermissions: STV3RequiredPermissions
|
||||||
});
|
});
|
||||||
return {authVerifier: (env: string, secPath: string) =>
|
return {
|
||||||
isValidScopeV3({
|
authVerifier: (env: string, secPath: string) =>
|
||||||
authPayload: authData.authPayload as IServiceTokenDataV3,
|
isValidScopeV3({
|
||||||
environment: env,
|
authPayload: authData.authPayload as IServiceTokenDataV3,
|
||||||
secretPath: secPath,
|
environment: env,
|
||||||
requiredPermissions: STV3RequiredPermissions
|
secretPath: secPath,
|
||||||
})};
|
requiredPermissions: STV3RequiredPermissions
|
||||||
|
})
|
||||||
|
};
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
throw UnauthorizedRequestError();
|
throw UnauthorizedRequestError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
import {
|
|
||||||
generateSecretApprovalRequest,
|
|
||||||
getSecretPolicyOfBoard
|
|
||||||
} from "../../services/SecretApprovalService";
|
|
||||||
import { CommitType } from "../../models/secretApprovalRequest";
|
|
||||||
import { IRole } from "../../ee/models/role";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return secrets for workspace with id [workspaceId] and environment
|
* Return secrets for workspace with id [workspaceId] and environment
|
||||||
@@ -167,7 +166,7 @@ export const getSecretsRaw = async (req: Request, res: Response) => {
|
|||||||
if (!environment || !workspaceId)
|
if (!environment || !workspaceId)
|
||||||
throw BadRequestError({ message: "Missing environment or workspace id" });
|
throw BadRequestError({ message: "Missing environment or workspace id" });
|
||||||
|
|
||||||
const {authVerifier:permissionCheckFn} = await checkSecretsPermission({
|
const { authVerifier: permissionCheckFn } = await checkSecretsPermission({
|
||||||
authData: req.authData,
|
authData: req.authData,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
environment,
|
environment,
|
||||||
@@ -239,7 +238,7 @@ export const getSecretByNameRaw = async (req: Request, res: Response) => {
|
|||||||
query: { secretPath, environment, workspaceId, type, include_imports },
|
query: { secretPath, environment, workspaceId, type, include_imports },
|
||||||
params: { secretName }
|
params: { secretName }
|
||||||
} = await validateRequest(reqValidator.GetSecretByNameRawV3, req);
|
} = await validateRequest(reqValidator.GetSecretByNameRawV3, req);
|
||||||
|
|
||||||
await checkSecretsPermission({
|
await checkSecretsPermission({
|
||||||
authData: req.authData,
|
authData: req.authData,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -482,7 +481,7 @@ export const getSecrets = async (req: Request, res: Response) => {
|
|||||||
secretPath = getFolderWithPathFromId(folder.nodes, folderId).folderPath;
|
secretPath = getFolderWithPathFromId(folder.nodes, folderId).folderPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
const {authVerifier:permissionCheckFn} = await checkSecretsPermission({
|
const { authVerifier: permissionCheckFn } = await checkSecretsPermission({
|
||||||
authData: req.authData,
|
authData: req.authData,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
environment,
|
environment,
|
||||||
@@ -536,7 +535,7 @@ export const getSecretByName = async (req: Request, res: Response) => {
|
|||||||
query: { secretPath, environment, workspaceId, type, include_imports },
|
query: { secretPath, environment, workspaceId, type, include_imports },
|
||||||
params: { secretName }
|
params: { secretName }
|
||||||
} = await validateRequest(reqValidator.GetSecretByNameV3, req);
|
} = await validateRequest(reqValidator.GetSecretByNameV3, req);
|
||||||
|
|
||||||
await checkSecretsPermission({
|
await checkSecretsPermission({
|
||||||
authData: req.authData,
|
authData: req.authData,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -586,8 +585,8 @@ export const createSecret = async (req: Request, res: Response) => {
|
|||||||
},
|
},
|
||||||
params: { secretName }
|
params: { secretName }
|
||||||
} = await validateRequest(reqValidator.CreateSecretV3, req);
|
} = await validateRequest(reqValidator.CreateSecretV3, req);
|
||||||
|
|
||||||
const {membership} = await checkSecretsPermission({
|
const { membership } = await checkSecretsPermission({
|
||||||
authData: req.authData,
|
authData: req.authData,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
environment,
|
environment,
|
||||||
@@ -595,8 +594,7 @@ export const createSecret = async (req: Request, res: Response) => {
|
|||||||
secretAction: ProjectPermissionActions.Create
|
secretAction: ProjectPermissionActions.Create
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (membership && type !== "personal") {
|
||||||
if (membership && type !== "personal") {
|
|
||||||
const secretApprovalPolicy = await getSecretPolicyOfBoard(workspaceId, environment, secretPath);
|
const secretApprovalPolicy = await getSecretPolicyOfBoard(workspaceId, environment, secretPath);
|
||||||
if (secretApprovalPolicy) {
|
if (secretApprovalPolicy) {
|
||||||
const secretApprovalRequest = await generateSecretApprovalRequest({
|
const secretApprovalRequest = await generateSecretApprovalRequest({
|
||||||
@@ -605,7 +603,7 @@ export const createSecret = async (req: Request, res: Response) => {
|
|||||||
secretPath,
|
secretPath,
|
||||||
policy: secretApprovalPolicy,
|
policy: secretApprovalPolicy,
|
||||||
commiterMembershipId: membership._id.toString(),
|
commiterMembershipId: membership._id.toString(),
|
||||||
authData:req.authData,
|
authData: req.authData,
|
||||||
data: {
|
data: {
|
||||||
[CommitType.CREATE]: [
|
[CommitType.CREATE]: [
|
||||||
{
|
{
|
||||||
@@ -691,12 +689,12 @@ export const updateSecretByName = async (req: Request, res: Response) => {
|
|||||||
},
|
},
|
||||||
params: { secretName }
|
params: { secretName }
|
||||||
} = await validateRequest(reqValidator.UpdateSecretByNameV3, req);
|
} = await validateRequest(reqValidator.UpdateSecretByNameV3, req);
|
||||||
|
|
||||||
if (newSecretName && (!secretKeyIV || !secretKeyTag || !secretKeyCiphertext)) {
|
if (newSecretName && (!secretKeyIV || !secretKeyTag || !secretKeyCiphertext)) {
|
||||||
throw BadRequestError({ message: "Missing encrypted key" });
|
throw BadRequestError({ message: "Missing encrypted key" });
|
||||||
}
|
}
|
||||||
|
|
||||||
const {membership} = await checkSecretsPermission({
|
const { membership } = await checkSecretsPermission({
|
||||||
authData: req.authData,
|
authData: req.authData,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
environment,
|
environment,
|
||||||
@@ -704,7 +702,7 @@ export const updateSecretByName = async (req: Request, res: Response) => {
|
|||||||
secretAction: ProjectPermissionActions.Edit
|
secretAction: ProjectPermissionActions.Edit
|
||||||
});
|
});
|
||||||
|
|
||||||
if (membership && type !== "personal") {
|
if (membership && type !== "personal") {
|
||||||
const secretApprovalPolicy = await getSecretPolicyOfBoard(workspaceId, environment, secretPath);
|
const secretApprovalPolicy = await getSecretPolicyOfBoard(workspaceId, environment, secretPath);
|
||||||
if (secretApprovalPolicy) {
|
if (secretApprovalPolicy) {
|
||||||
const secretApprovalRequest = await generateSecretApprovalRequest({
|
const secretApprovalRequest = await generateSecretApprovalRequest({
|
||||||
@@ -783,7 +781,7 @@ export const deleteSecretByName = async (req: Request, res: Response) => {
|
|||||||
params: { secretName }
|
params: { secretName }
|
||||||
} = await validateRequest(reqValidator.DeleteSecretByNameV3, req);
|
} = await validateRequest(reqValidator.DeleteSecretByNameV3, req);
|
||||||
|
|
||||||
const {membership} = await checkSecretsPermission({
|
const { membership } = await checkSecretsPermission({
|
||||||
authData: req.authData,
|
authData: req.authData,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
environment,
|
environment,
|
||||||
@@ -791,7 +789,7 @@ export const deleteSecretByName = async (req: Request, res: Response) => {
|
|||||||
secretAction: ProjectPermissionActions.Delete
|
secretAction: ProjectPermissionActions.Delete
|
||||||
});
|
});
|
||||||
|
|
||||||
if (membership && type !== "personal") {
|
if (membership && type !== "personal") {
|
||||||
const secretApprovalPolicy = await getSecretPolicyOfBoard(workspaceId, environment, secretPath);
|
const secretApprovalPolicy = await getSecretPolicyOfBoard(workspaceId, environment, secretPath);
|
||||||
if (secretApprovalPolicy) {
|
if (secretApprovalPolicy) {
|
||||||
const secretApprovalRequest = await generateSecretApprovalRequest({
|
const secretApprovalRequest = await generateSecretApprovalRequest({
|
||||||
@@ -839,8 +837,8 @@ export const createSecretByNameBatch = async (req: Request, res: Response) => {
|
|||||||
const {
|
const {
|
||||||
body: { secrets, secretPath, environment, workspaceId }
|
body: { secrets, secretPath, environment, workspaceId }
|
||||||
} = await validateRequest(reqValidator.CreateSecretByNameBatchV3, req);
|
} = await validateRequest(reqValidator.CreateSecretByNameBatchV3, req);
|
||||||
|
|
||||||
const {membership} = await checkSecretsPermission({
|
const { membership } = await checkSecretsPermission({
|
||||||
authData: req.authData,
|
authData: req.authData,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
environment,
|
environment,
|
||||||
@@ -884,7 +882,7 @@ export const updateSecretByNameBatch = async (req: Request, res: Response) => {
|
|||||||
body: { secrets, secretPath, environment, workspaceId }
|
body: { secrets, secretPath, environment, workspaceId }
|
||||||
} = await validateRequest(reqValidator.UpdateSecretByNameBatchV3, req);
|
} = await validateRequest(reqValidator.UpdateSecretByNameBatchV3, req);
|
||||||
|
|
||||||
const {membership} = await checkSecretsPermission({
|
const { membership } = await checkSecretsPermission({
|
||||||
authData: req.authData,
|
authData: req.authData,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
environment,
|
environment,
|
||||||
@@ -928,14 +926,13 @@ export const deleteSecretByNameBatch = async (req: Request, res: Response) => {
|
|||||||
body: { secrets, secretPath, environment, workspaceId }
|
body: { secrets, secretPath, environment, workspaceId }
|
||||||
} = await validateRequest(reqValidator.DeleteSecretByNameBatchV3, req);
|
} = await validateRequest(reqValidator.DeleteSecretByNameBatchV3, req);
|
||||||
|
|
||||||
const {membership} = await checkSecretsPermission({
|
const { membership } = await checkSecretsPermission({
|
||||||
authData: req.authData,
|
authData: req.authData,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
environment,
|
environment,
|
||||||
secretPath,
|
secretPath,
|
||||||
secretAction: ProjectPermissionActions.Delete
|
secretAction: ProjectPermissionActions.Delete
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
if (membership) {
|
if (membership) {
|
||||||
const secretApprovalPolicy = await getSecretPolicyOfBoard(workspaceId, environment, secretPath);
|
const secretApprovalPolicy = await getSecretPolicyOfBoard(workspaceId, environment, secretPath);
|
||||||
@@ -966,4 +963,4 @@ export const deleteSecretByNameBatch = async (req: Request, res: Response) => {
|
|||||||
return res.status(200).send({
|
return res.status(200).send({
|
||||||
secrets: deletedSecrets
|
secrets: deletedSecrets
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import * as actionController from "./actionController";
|
|||||||
import * as membershipController from "./membershipController";
|
import * as membershipController from "./membershipController";
|
||||||
import * as cloudProductsController from "./cloudProductsController";
|
import * as cloudProductsController from "./cloudProductsController";
|
||||||
import * as roleController from "./roleController";
|
import * as roleController from "./roleController";
|
||||||
|
import * as secretApprovalPolicyController from "./secretApprovalPolicyController";
|
||||||
|
import * as secretApprovalRequestController from "./secretApprovalRequestsController";
|
||||||
|
|
||||||
export {
|
export {
|
||||||
secretController,
|
secretController,
|
||||||
@@ -19,5 +21,7 @@ export {
|
|||||||
actionController,
|
actionController,
|
||||||
membershipController,
|
membershipController,
|
||||||
cloudProductsController,
|
cloudProductsController,
|
||||||
roleController
|
roleController,
|
||||||
|
secretApprovalPolicyController,
|
||||||
|
secretApprovalRequestController
|
||||||
};
|
};
|
||||||
|
|||||||
+3
-3
@@ -5,11 +5,11 @@ import {
|
|||||||
ProjectPermissionActions,
|
ProjectPermissionActions,
|
||||||
ProjectPermissionSub,
|
ProjectPermissionSub,
|
||||||
getUserProjectPermissions
|
getUserProjectPermissions
|
||||||
} from "../../ee/services/ProjectRoleService";
|
} from "../../services/ProjectRoleService";
|
||||||
import { validateRequest } from "../../helpers/validation";
|
import { validateRequest } from "../../../helpers/validation";
|
||||||
import { SecretApprovalPolicy } from "../../models/secretApprovalPolicy";
|
import { SecretApprovalPolicy } from "../../models/secretApprovalPolicy";
|
||||||
import { getSecretPolicyOfBoard } from "../../services/SecretApprovalService";
|
import { getSecretPolicyOfBoard } from "../../services/SecretApprovalService";
|
||||||
import { BadRequestError } from "../../utils/errors";
|
import { BadRequestError } from "../../../utils/errors";
|
||||||
import * as reqValidator from "../../validation/secretApproval";
|
import * as reqValidator from "../../validation/secretApproval";
|
||||||
|
|
||||||
const ERR_SECRET_APPROVAL_NOT_FOUND = BadRequestError({ message: "secret approval not found" });
|
const ERR_SECRET_APPROVAL_NOT_FOUND = BadRequestError({ message: "secret approval not found" });
|
||||||
+7
-7
@@ -1,16 +1,16 @@
|
|||||||
import { Request, Response } from "express";
|
import { Request, Response } from "express";
|
||||||
import { getUserProjectPermissions } from "../../ee/services/ProjectRoleService";
|
import { getUserProjectPermissions } from "../../services/ProjectRoleService";
|
||||||
import { validateRequest } from "../../helpers/validation";
|
import { validateRequest } from "../../../helpers/validation";
|
||||||
import { Folder } from "../../models";
|
import { Folder } from "../../../models";
|
||||||
import { ApprovalStatus, SecretApprovalRequest } from "../../models/secretApprovalRequest";
|
import { ApprovalStatus, SecretApprovalRequest } from "../../models/secretApprovalRequest";
|
||||||
import * as reqValidator from "../../validation/secretApprovalRequest";
|
import * as reqValidator from "../../validation/secretApprovalRequest";
|
||||||
import { getFolderWithPathFromId } from "../../services/FolderService";
|
import { getFolderWithPathFromId } from "../../../services/FolderService";
|
||||||
import { BadRequestError, UnauthorizedRequestError } from "../../utils/errors";
|
import { BadRequestError, UnauthorizedRequestError } from "../../../utils/errors";
|
||||||
import { ISecretApprovalPolicy, SecretApprovalPolicy } from "../../models/secretApprovalPolicy";
|
import { ISecretApprovalPolicy, SecretApprovalPolicy } from "../../models/secretApprovalPolicy";
|
||||||
import { performSecretApprovalRequestMerge } from "../../services/SecretApprovalService";
|
import { performSecretApprovalRequestMerge } from "../../services/SecretApprovalService";
|
||||||
import { Types } from "mongoose";
|
import { Types } from "mongoose";
|
||||||
import { EEAuditLogService } from "../../ee/services";
|
import { EEAuditLogService } from "../../services";
|
||||||
import { EventType } from "../../ee/models";
|
import { EventType } from "../../models";
|
||||||
|
|
||||||
export const getSecretApprovalRequestCount = async (req: Request, res: Response) => {
|
export const getSecretApprovalRequestCount = async (req: Request, res: Response) => {
|
||||||
const {
|
const {
|
||||||
+5
-1
@@ -1,6 +1,10 @@
|
|||||||
import { Schema, Types, model } from "mongoose";
|
import { Schema, Types, model } from "mongoose";
|
||||||
import { customAlphabet } from "nanoid";
|
import { customAlphabet } from "nanoid";
|
||||||
import { ALGORITHM_AES_256_GCM, ENCODING_SCHEME_BASE64, ENCODING_SCHEME_UTF8 } from "../variables";
|
import {
|
||||||
|
ALGORITHM_AES_256_GCM,
|
||||||
|
ENCODING_SCHEME_BASE64,
|
||||||
|
ENCODING_SCHEME_UTF8
|
||||||
|
} from "../../variables";
|
||||||
|
|
||||||
export enum ApprovalStatus {
|
export enum ApprovalStatus {
|
||||||
PENDING = "pending",
|
PENDING = "pending",
|
||||||
@@ -8,6 +8,8 @@ import action from "./action";
|
|||||||
import cloudProducts from "./cloudProducts";
|
import cloudProducts from "./cloudProducts";
|
||||||
import secretScanning from "./secretScanning";
|
import secretScanning from "./secretScanning";
|
||||||
import roles from "./role";
|
import roles from "./role";
|
||||||
|
import secretApprovalPolicy from "./secretApprovalPolicy";
|
||||||
|
import secretApprovalRequest from "./secretApprovalRequest";
|
||||||
|
|
||||||
export {
|
export {
|
||||||
secret,
|
secret,
|
||||||
@@ -19,5 +21,7 @@ export {
|
|||||||
action,
|
action,
|
||||||
cloudProducts,
|
cloudProducts,
|
||||||
secretScanning,
|
secretScanning,
|
||||||
roles
|
roles,
|
||||||
|
secretApprovalPolicy,
|
||||||
|
secretApprovalRequest
|
||||||
};
|
};
|
||||||
|
|||||||
+2
-2
@@ -1,8 +1,8 @@
|
|||||||
import express from "express";
|
import express from "express";
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
import { requireAuth } from "../../middleware";
|
import { requireAuth } from "../../../middleware";
|
||||||
import { secretApprovalPolicyController } from "../../controllers/v1";
|
import { secretApprovalPolicyController } from "../../controllers/v1";
|
||||||
import { AuthMode } from "../../variables";
|
import { AuthMode } from "../../../variables";
|
||||||
|
|
||||||
router.get(
|
router.get(
|
||||||
"/",
|
"/",
|
||||||
+2
-2
@@ -1,8 +1,8 @@
|
|||||||
import express from "express";
|
import express from "express";
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
import { requireAuth } from "../../middleware";
|
import { requireAuth } from "../../../middleware";
|
||||||
import { secretApprovalRequestController } from "../../controllers/v1";
|
import { secretApprovalRequestController } from "../../controllers/v1";
|
||||||
import { AuthMode } from "../../variables";
|
import { AuthMode } from "../../../variables";
|
||||||
|
|
||||||
router.get(
|
router.get(
|
||||||
"/",
|
"/",
|
||||||
+9
-9
@@ -4,8 +4,8 @@ import {
|
|||||||
containsGlobPatterns,
|
containsGlobPatterns,
|
||||||
generateSecretBlindIndexWithSaltHelper,
|
generateSecretBlindIndexWithSaltHelper,
|
||||||
getSecretBlindIndexSaltHelper
|
getSecretBlindIndexSaltHelper
|
||||||
} from "../helpers/secrets";
|
} from "../../helpers/secrets";
|
||||||
import { Folder, ISecret, Secret } from "../models";
|
import { Folder, ISecret, Secret } from "../../models";
|
||||||
import { ISecretApprovalPolicy, SecretApprovalPolicy } from "../models/secretApprovalPolicy";
|
import { ISecretApprovalPolicy, SecretApprovalPolicy } from "../models/secretApprovalPolicy";
|
||||||
import {
|
import {
|
||||||
CommitType,
|
CommitType,
|
||||||
@@ -14,13 +14,13 @@ import {
|
|||||||
ISecretCommits,
|
ISecretCommits,
|
||||||
SecretApprovalRequest
|
SecretApprovalRequest
|
||||||
} from "../models/secretApprovalRequest";
|
} from "../models/secretApprovalRequest";
|
||||||
import { BadRequestError } from "../utils/errors";
|
import { BadRequestError } from "../../utils/errors";
|
||||||
import { getFolderByPath } from "./FolderService";
|
import { getFolderByPath } from "../../services/FolderService";
|
||||||
import { ALGORITHM_AES_256_GCM, ENCODING_SCHEME_UTF8, SECRET_SHARED } from "../variables";
|
import { ALGORITHM_AES_256_GCM, ENCODING_SCHEME_UTF8, SECRET_SHARED } from "../../variables";
|
||||||
import TelemetryService from "./TelemetryService";
|
import TelemetryService from "../../services/TelemetryService";
|
||||||
import { EEAuditLogService, EESecretService } from "../ee/services";
|
import { EEAuditLogService, EESecretService } from "../services";
|
||||||
import { EventType, SecretVersion } from "../ee/models";
|
import { EventType, SecretVersion } from "../models";
|
||||||
import { AuthData } from "../interfaces/middleware";
|
import { AuthData } from "../../interfaces/middleware";
|
||||||
|
|
||||||
// if glob pattern score is 1, if not exist score is 0 and if its not both then its exact path meaning score 2
|
// if glob pattern score is 1, if not exist score is 0 and if its not both then its exact path meaning score 2
|
||||||
const getPolicyScore = (policy: ISecretApprovalPolicy) =>
|
const getPolicyScore = (policy: ISecretApprovalPolicy) =>
|
||||||
@@ -25,11 +25,11 @@ import {
|
|||||||
users as eeUsersRouter,
|
users as eeUsersRouter,
|
||||||
workspace as eeWorkspaceRouter,
|
workspace as eeWorkspaceRouter,
|
||||||
roles as v1RoleRouter,
|
roles as v1RoleRouter,
|
||||||
|
secretApprovalPolicy as v1SecretApprovalPolicy,
|
||||||
|
secretApprovalRequest as v1SecretApprovalRequest,
|
||||||
secretScanning as v1SecretScanningRouter
|
secretScanning as v1SecretScanningRouter
|
||||||
} from "./ee/routes/v1";
|
} from "./ee/routes/v1";
|
||||||
import {
|
import { serviceTokenData as v3ServiceTokenDataRouter } from "./ee/routes/v3";
|
||||||
serviceTokenData as v3ServiceTokenDataRouter
|
|
||||||
} from "./ee/routes/v3";
|
|
||||||
import {
|
import {
|
||||||
auth as v1AuthRouter,
|
auth as v1AuthRouter,
|
||||||
bot as v1BotRouter,
|
bot as v1BotRouter,
|
||||||
@@ -42,8 +42,6 @@ import {
|
|||||||
organization as v1OrganizationRouter,
|
organization as v1OrganizationRouter,
|
||||||
password as v1PasswordRouter,
|
password as v1PasswordRouter,
|
||||||
sso as v1SSORouter,
|
sso as v1SSORouter,
|
||||||
secretApprovalPolicy as v1SecretApprovalPolicy,
|
|
||||||
secretApprovalRequest as v1SecretApprovalRequest,
|
|
||||||
secretImps as v1SecretImpsRouter,
|
secretImps as v1SecretImpsRouter,
|
||||||
secret as v1SecretRouter,
|
secret as v1SecretRouter,
|
||||||
secretsFolder as v1SecretsFolder,
|
secretsFolder as v1SecretsFolder,
|
||||||
@@ -230,24 +228,23 @@ const main = async () => {
|
|||||||
// await createTestUserForDevelopment();
|
// await createTestUserForDevelopment();
|
||||||
setUpHealthEndpoint(server);
|
setUpHealthEndpoint(server);
|
||||||
|
|
||||||
|
|
||||||
const serverCleanup = async () => {
|
const serverCleanup = async () => {
|
||||||
await DatabaseService.closeDatabase();
|
await DatabaseService.closeDatabase();
|
||||||
syncSecretsToThirdPartyServices.close();
|
syncSecretsToThirdPartyServices.close();
|
||||||
githubPushEventSecretScan.close();
|
githubPushEventSecretScan.close();
|
||||||
|
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
}
|
};
|
||||||
|
|
||||||
process.on("SIGINT", function () {
|
process.on("SIGINT", function () {
|
||||||
server.close(async () => {
|
server.close(async () => {
|
||||||
await serverCleanup()
|
await serverCleanup();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
process.on("SIGTERM", function () {
|
process.on("SIGTERM", function () {
|
||||||
server.close(async () => {
|
server.close(async () => {
|
||||||
await serverCleanup()
|
await serverCleanup();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -18,8 +18,6 @@ import integrationAuth from "./integrationAuth";
|
|||||||
import secretsFolder from "./secretsFolder";
|
import secretsFolder from "./secretsFolder";
|
||||||
import webhooks from "./webhook";
|
import webhooks from "./webhook";
|
||||||
import secretImps from "./secretImps";
|
import secretImps from "./secretImps";
|
||||||
import secretApprovalPolicy from "./secretApprovalPolicy";
|
|
||||||
import secretApprovalRequest from "./secretApprovalRequest";
|
|
||||||
|
|
||||||
export {
|
export {
|
||||||
signup,
|
signup,
|
||||||
@@ -41,7 +39,5 @@ export {
|
|||||||
secretsFolder,
|
secretsFolder,
|
||||||
webhooks,
|
webhooks,
|
||||||
secretImps,
|
secretImps,
|
||||||
sso,
|
sso
|
||||||
secretApprovalPolicy,
|
|
||||||
secretApprovalRequest
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
export * from "./secretApproval";
|
|
||||||
export * from "./user";
|
export * from "./user";
|
||||||
export * from "./workspace";
|
export * from "./workspace";
|
||||||
export * from "./bot";
|
export * from "./bot";
|
||||||
|
|||||||
@@ -508,7 +508,7 @@ export const AppLayout = ({ children }: LayoutProps) => {
|
|||||||
IP Allowlist
|
IP Allowlist
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
</a>
|
</a>
|
||||||
</Link> */}
|
</Link>
|
||||||
<Link href={`/project/${currentWorkspace?._id}/audit-logs`} passHref>
|
<Link href={`/project/${currentWorkspace?._id}/audit-logs`} passHref>
|
||||||
<a>
|
<a>
|
||||||
<MenuItem
|
<MenuItem
|
||||||
@@ -704,12 +704,12 @@ export const AppLayout = ({ children }: LayoutProps) => {
|
|||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
)}
|
)}
|
||||||
{infisicalPlatformVersion && (
|
{infisicalPlatformVersion && (
|
||||||
<div className="mb-2 w-full pl-5 duration-200 hover:text-mineshaft-200">
|
<div className="mb-2 w-full pl-5 duration-200 hover:text-mineshaft-200">
|
||||||
<FontAwesomeIcon icon={faInfo} className="mr-4 px-[0.1rem]" />
|
<FontAwesomeIcon icon={faInfo} className="mr-4 px-[0.1rem]" />
|
||||||
Platform Version: {infisicalPlatformVersion}
|
Platform Version: {infisicalPlatformVersion}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
</aside>
|
</aside>
|
||||||
|
|||||||
Reference in New Issue
Block a user