Move secretSuffix to separate metadata field

This commit is contained in:
Tuan Dang
2023-08-30 10:04:44 +01:00
parent f6be86a26b
commit 41cd8b7408
56 changed files with 119 additions and 238 deletions
@@ -1,9 +1,8 @@
import { Request, Response } from "express"; import { Request, Response } from "express";
import { Types } from "mongoose"; import { Types } from "mongoose";
import { Integration } from "../../models"; import { Folder, Integration } from "../../models";
import { EventService } from "../../services"; import { EventService } from "../../services";
import { eventStartIntegration } from "../../events"; import { eventStartIntegration } from "../../events";
import Folder from "../../models/folder";
import { getFolderByPath } from "../../services/FolderService"; import { getFolderByPath } from "../../services/FolderService";
import { BadRequestError } from "../../utils/errors"; import { BadRequestError } from "../../utils/errors";
import { EEAuditLogService } from "../../ee/services"; import { EEAuditLogService } from "../../ee/services";
@@ -31,7 +30,7 @@ export const createIntegration = async (req: Request, res: Response) => {
path, path,
region, region,
secretPath, secretPath,
secretSuffix metadata
} = req.body; } = req.body;
const folders = await Folder.findOne({ const folders = await Folder.findOne({
@@ -65,9 +64,9 @@ export const createIntegration = async (req: Request, res: Response) => {
path, path,
region, region,
secretPath, secretPath,
secretSuffix,
integration: req.integrationAuth.integration, integration: req.integrationAuth.integration,
integrationAuth: new Types.ObjectId(integrationAuthId) integrationAuth: new Types.ObjectId(integrationAuthId),
metadata
}).save(); }).save();
if (integration) { if (integration) {
@@ -1,8 +1,6 @@
import { Request, Response } from "express"; import { Request, Response } from "express";
import { isValidScope, validateMembership } from "../../helpers"; import { isValidScope, validateMembership } from "../../helpers";
import { ServiceTokenData } from "../../models"; import { Folder, SecretImport, ServiceTokenData } from "../../models";
import Folder from "../../models/folder";
import SecretImport from "../../models/secretImports";
import { getAllImportedSecrets } from "../../services/SecretImportService"; import { getAllImportedSecrets } from "../../services/SecretImportService";
import { getFolderWithPathFromId } from "../../services/FolderService"; import { getFolderWithPathFromId } from "../../services/FolderService";
import { BadRequestError, ResourceNotFoundError,UnauthorizedRequestError } from "../../utils/errors"; import { BadRequestError, ResourceNotFoundError,UnauthorizedRequestError } from "../../utils/errors";
@@ -4,8 +4,7 @@ import { EventType, FolderVersion } from "../../ee/models";
import { EEAuditLogService, EESecretService } from "../../ee/services"; import { EEAuditLogService, EESecretService } from "../../ee/services";
import { validateMembership } from "../../helpers/membership"; import { validateMembership } from "../../helpers/membership";
import { isValidScope } from "../../helpers/secrets"; import { isValidScope } from "../../helpers/secrets";
import { Secret, ServiceTokenData } from "../../models"; import { Folder, Secret, ServiceTokenData } from "../../models";
import Folder from "../../models/folder";
import { import {
appendFolder, appendFolder,
deleteFolderById, deleteFolderById,
@@ -2,7 +2,7 @@ import { Request, Response } from "express";
import { Types } from "mongoose"; import { Types } from "mongoose";
import { client, getRootEncryptionKey } from "../../config"; import { client, getRootEncryptionKey } from "../../config";
import { validateMembership } from "../../helpers"; import { validateMembership } from "../../helpers";
import Webhook from "../../models/webhooks"; import { Webhook } from "../../models";
import { getWebhookPayload, triggerWebhookRequest } from "../../services/WebhookService"; import { getWebhookPayload, triggerWebhookRequest } from "../../services/WebhookService";
import { BadRequestError, ResourceNotFoundError } from "../../utils/errors"; import { BadRequestError, ResourceNotFoundError } from "../../utils/errors";
import { EEAuditLogService } from "../../ee/services"; import { EEAuditLogService } from "../../ee/services";
@@ -1,6 +1,5 @@
import { Request, Response } from "express"; import { Request, Response } from "express";
import mongoose, { Types } from "mongoose"; import mongoose, { Types } from "mongoose";
import Secret, { ISecret } from "../../models/secret";
import { import {
CreateSecretRequestBody, CreateSecretRequestBody,
ModifySecretRequestBody, ModifySecretRequestBody,
@@ -20,7 +19,7 @@ import {
SECRET_SHARED SECRET_SHARED
} from "../../variables"; } from "../../variables";
import { TelemetryService } from "../../services"; import { TelemetryService } from "../../services";
import { User } from "../../models"; import { ISecret, Secret, User } from "../../models";
import { AccountNotFoundError } from "../../utils/errors"; import { AccountNotFoundError } from "../../utils/errors";
/** /**
@@ -1,6 +1,6 @@
import { Types } from "mongoose"; import { Types } from "mongoose";
import { Request, Response } from "express"; import { Request, Response } from "express";
import { ISecret, Secret, ServiceTokenData } from "../../models"; import { Folder, ISecret, Secret, ServiceTokenData, Tag } from "../../models";
import { AuditLog, EventType, IAction, SecretVersion } from "../../ee/models"; import { AuditLog, EventType, IAction, SecretVersion } from "../../ee/models";
import { import {
ACTION_ADD_SECRETS, ACTION_ADD_SECRETS,
@@ -24,10 +24,8 @@ import {
userHasWorkspaceAccess, userHasWorkspaceAccess,
userHasWriteOnlyAbility userHasWriteOnlyAbility
} from "../../ee/helpers/checkMembershipPermissions"; } from "../../ee/helpers/checkMembershipPermissions";
import Tag from "../../models/tag";
import _ from "lodash"; import _ from "lodash";
import { BatchSecret, BatchSecretRequest } from "../../types/secret"; import { BatchSecret, BatchSecretRequest } from "../../types/secret";
import Folder from "../../models/folder";
import { import {
getFolderByPath, getFolderByPath,
getFolderIdFromServiceToken, getFolderIdFromServiceToken,
+1 -2
View File
@@ -1,7 +1,6 @@
import { Request, Response } from "express"; import { Request, Response } from "express";
import { Types } from "mongoose"; import { Types } from "mongoose";
import { Membership, Secret } from "../../models"; import { Membership, Secret, Tag } from "../../models";
import Tag from "../../models/tag";
import { BadRequestError, UnauthorizedRequestError } from "../../utils/errors"; import { BadRequestError, UnauthorizedRequestError } from "../../utils/errors";
export const createWorkspaceTag = async (req: Request, res: Response) => { export const createWorkspaceTag = async (req: Request, res: Response) => {
@@ -6,10 +6,9 @@ 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 from "../../models/folder"; import { Folder, IServiceTokenData } from "../../models";
import { getFolderByPath } from "../../services/FolderService"; import { getFolderByPath } from "../../services/FolderService";
import { BadRequestError } from "../../utils/errors"; import { BadRequestError } from "../../utils/errors";
import { IServiceTokenData } from "../../models";
import { requireWorkspaceAuth } from "../../middleware"; import { requireWorkspaceAuth } from "../../middleware";
import { ADMIN, MEMBER, PERMISSION_READ_SECRETS } from "../../variables"; import { ADMIN, MEMBER, PERMISSION_READ_SECRETS } from "../../variables";
@@ -1,6 +1,6 @@
import { Request, Response } from "express"; import { Request, Response } from "express";
import { PipelineStage, Types } from "mongoose"; import { PipelineStage, Types } from "mongoose";
import { Membership, Secret, ServiceTokenData, User } from "../../../models"; import { Folder, Membership, Secret, ServiceTokenData, TFolderSchema, User } from "../../../models";
import { import {
ActorType, ActorType,
AuditLog, AuditLog,
@@ -18,7 +18,7 @@ import {
} from "../../models"; } from "../../models";
import { EESecretService } from "../../services"; import { EESecretService } from "../../services";
import { getLatestSecretVersionIds } from "../../helpers/secretVersion"; import { getLatestSecretVersionIds } from "../../helpers/secretVersion";
import Folder, { TFolderSchema } from "../../../models/folder"; // import Folder, { TFolderSchema } from "../../../models/folder";
import { searchByFolderId } from "../../../services/FolderService"; import { searchByFolderId } from "../../../services/FolderService";
import { EEAuditLogService, EELicenseService } from "../../services"; import { EEAuditLogService, EELicenseService } from "../../services";
import { extractIPDetails, isValidIpOrCidr } from "../../../utils/ip"; import { extractIPDetails, isValidIpOrCidr } from "../../../utils/ip";
+1 -1
View File
@@ -14,7 +14,7 @@ import {
} from "../variables"; } from "../variables";
import { client, getEncryptionKey, getRootEncryptionKey } from "../config"; import { client, getEncryptionKey, getRootEncryptionKey } from "../config";
import { InternalServerError } from "../utils/errors"; import { InternalServerError } from "../utils/errors";
import Folder from "../models/folder"; import { Folder } from "../models";
import { getFolderByPath } from "../services/FolderService"; import { getFolderByPath } from "../services/FolderService";
import { getAllImportedSecrets } from "../services/SecretImportService"; import { getAllImportedSecrets } from "../services/SecretImportService";
import { expandSecrets } from "./secrets"; import { expandSecrets } from "./secrets";
+3 -2
View File
@@ -7,11 +7,13 @@ import {
UpdateSecretParams UpdateSecretParams
} from "../interfaces/services/SecretService"; } from "../interfaces/services/SecretService";
import { import {
Folder,
ISecret, ISecret,
IServiceTokenData, IServiceTokenData,
Secret, Secret,
SecretBlindIndexData, SecretBlindIndexData,
ServiceTokenData ServiceTokenData,
TFolderRootSchema
} from "../models"; } from "../models";
import { EventType, SecretVersion } from "../ee/models"; import { EventType, SecretVersion } from "../ee/models";
import { import {
@@ -46,7 +48,6 @@ import { getAuthDataPayloadIdObj, getAuthDataPayloadUserObj } from "../utils/aut
import { getFolderByPath, getFolderIdFromServiceToken } from "../services/FolderService"; import { getFolderByPath, getFolderIdFromServiceToken } from "../services/FolderService";
import picomatch from "picomatch"; import picomatch from "picomatch";
import path from "path"; import path from "path";
import Folder, { TFolderRootSchema } from "../models/folder";
export const isValidScope = ( export const isValidScope = (
authPayload: IServiceTokenData, authPayload: IServiceTokenData,
+2 -3
View File
@@ -2004,7 +2004,7 @@ const syncSecretsCheckly = async ({
secrets: Record<string, { value: string; comment?: string }>; secrets: Record<string, { value: string; comment?: string }>;
accessToken: string; accessToken: string;
}) => { }) => {
// get secrets from travis-ci
const getSecretsRes = ( const getSecretsRes = (
await standardRequest.get(`${INTEGRATION_CHECKLY_API_URL}/v1/variables`, { await standardRequest.get(`${INTEGRATION_CHECKLY_API_URL}/v1/variables`, {
headers: { headers: {
@@ -2026,7 +2026,6 @@ const syncSecretsCheckly = async ({
if (!(key in getSecretsRes)) { if (!(key in getSecretsRes)) {
// case: secret does not exist in checkly // case: secret does not exist in checkly
// -> add secret // -> add secret
await standardRequest.post( await standardRequest.post(
`${INTEGRATION_CHECKLY_API_URL}/v1/variables`, `${INTEGRATION_CHECKLY_API_URL}/v1/variables`,
{ {
@@ -2066,7 +2065,7 @@ const syncSecretsCheckly = async ({
} }
for await (const key of Object.keys(getSecretsRes)) { for await (const key of Object.keys(getSecretsRes)) {
if (!(key in secrets) && key.endsWith(integration?.secretSuffix)) { if (!(key in secrets)) {
// delete secret // delete secret
await standardRequest.delete(`${INTEGRATION_CHECKLY_API_URL}/v1/variables/${key}`, { await standardRequest.delete(`${INTEGRATION_CHECKLY_API_URL}/v1/variables/${key}`, {
headers: { headers: {
+1 -3
View File
@@ -36,6 +36,4 @@ const apiKeyDataSchema = new Schema<IAPIKeyData>(
} }
); );
const APIKeyData = model<IAPIKeyData>("APIKeyData", apiKeyDataSchema); export const APIKeyData = model<IAPIKeyData>("APIKeyData", apiKeyDataSchema);
export default APIKeyData;
+1 -3
View File
@@ -68,9 +68,7 @@ const backupPrivateKeySchema = new Schema<IBackupPrivateKey>(
} }
); );
const BackupPrivateKey = model<IBackupPrivateKey>( export const BackupPrivateKey = model<IBackupPrivateKey>(
"BackupPrivateKey", "BackupPrivateKey",
backupPrivateKeySchema backupPrivateKeySchema
); );
export default BackupPrivateKey;
+1 -3
View File
@@ -74,6 +74,4 @@ const botSchema = new Schema<IBot>(
} }
); );
const Bot = model<IBot>("Bot", botSchema); export const Bot = model<IBot>("Bot", botSchema);
export default Bot;
+1 -3
View File
@@ -40,6 +40,4 @@ const botKeySchema = new Schema<IBotKey>(
} }
); );
const BotKey = model<IBotKey>("BotKey", botKeySchema); export const BotKey = model<IBotKey>("BotKey", botKeySchema);
export default BotKey;
+1 -3
View File
@@ -93,6 +93,4 @@ const botOrgSchema = new Schema<IBotOrg>(
} }
); );
const BotOrg = model<IBotOrg>("BotOrg", botOrgSchema); export const BotOrg = model<IBotOrg>("BotOrg", botOrgSchema);
export default BotOrg;
+1 -3
View File
@@ -51,6 +51,4 @@ const folderRootSchema = new Schema<TFolderRootSchema>(
} }
); );
const Folder = model<TFolderRootSchema>("Folder", folderRootSchema); export const Folder = model<TFolderRootSchema>("Folder", folderRootSchema);
export default Folder;
+1 -3
View File
@@ -23,9 +23,7 @@ const incidentContactOrgSchema = new Schema<IIncidentContactOrg>(
} }
); );
const IncidentContactOrg = model<IIncidentContactOrg>( export const IncidentContactOrg = model<IIncidentContactOrg>(
"IncidentContactOrg", "IncidentContactOrg",
incidentContactOrgSchema incidentContactOrgSchema
); );
export default IncidentContactOrg;
+30 -89
View File
@@ -1,89 +1,30 @@
import BackupPrivateKey, { IBackupPrivateKey } from "./backupPrivateKey"; export * from "./backupPrivateKey";
import Bot, { IBot } from "./bot"; export * from "./bot";
import BotOrg, { IBotOrg } from "./botOrg"; export * from "./botOrg";
import BotKey, { IBotKey } from "./botKey"; export * from "./botKey";
import IncidentContactOrg, { IIncidentContactOrg } from "./incidentContactOrg"; export * from "./incidentContactOrg";
import Integration, { IIntegration } from "./integration"; export * from "./integration/integration";
import IntegrationAuth, { IIntegrationAuth } from "./integrationAuth"; export * from "./integrationAuth";
import Key, { IKey } from "./key"; export * from "./key";
import Membership, { IMembership } from "./membership"; export * from "./membership";
import MembershipOrg, { IMembershipOrg } from "./membershipOrg"; export * from "./membershipOrg";
import Organization, { IOrganization } from "./organization"; export * from "./organization";
import Secret, { ISecret } from "./secret"; export * from "./secret";
import Folder, { TFolderRootSchema, TFolderSchema } from "./folder"; export * from "./tag";
import SecretImport, { ISecretImports } from "./secretImports"; export * from "./folder";
import SecretBlindIndexData, { ISecretBlindIndexData } from "./secretBlindIndexData"; export * from "./secretImports";
import ServiceToken, { IServiceToken } from "./serviceToken"; export * from "./secretBlindIndexData";
import ServiceAccount, { IServiceAccount } from "./serviceAccount"; // new export * from "./serviceToken";
import ServiceAccountKey, { IServiceAccountKey } from "./serviceAccountKey"; // new export * from "./serviceAccount";
import ServiceAccountOrganizationPermission, { IServiceAccountOrganizationPermission } from "./serviceAccountOrganizationPermission"; // new export * from "./serviceAccountKey";
import ServiceAccountWorkspacePermission, { IServiceAccountWorkspacePermission } from "./serviceAccountWorkspacePermission"; // new export * from "./serviceAccountOrganizationPermission";
import TokenData, { ITokenData } from "./tokenData"; export * from "./serviceAccountWorkspacePermission";
import User, { AuthMethod, IUser } from "./user"; export * from "./tokenData";
import UserAction, { IUserAction } from "./userAction"; export * from "./user";
import Workspace, { IWorkspace } from "./workspace"; export * from "./userAction";
import ServiceTokenData, { IServiceTokenData } from "./serviceTokenData"; export * from "./workspace";
import APIKeyData, { IAPIKeyData } from "./apiKeyData"; export * from "./serviceTokenData";
import LoginSRPDetail, { ILoginSRPDetail } from "./loginSRPDetail"; export * from "./apiKeyData";
import TokenVersion, { ITokenVersion } from "./tokenVersion"; export * from "./loginSRPDetail";
export * from "./tokenVersion";
export { export * from "./webhooks";
AuthMethod,
BackupPrivateKey,
IBackupPrivateKey,
Bot,
IBot,
BotOrg,
IBotOrg,
BotKey,
IBotKey,
IncidentContactOrg,
IIncidentContactOrg,
Integration,
IIntegration,
IntegrationAuth,
IIntegrationAuth,
Key,
IKey,
Membership,
IMembership,
MembershipOrg,
IMembershipOrg,
Organization,
IOrganization,
Secret,
ISecret,
Folder,
TFolderRootSchema,
TFolderSchema,
SecretImport,
ISecretImports,
SecretBlindIndexData,
ISecretBlindIndexData,
ServiceToken,
IServiceToken,
ServiceAccount,
IServiceAccount,
ServiceAccountKey,
IServiceAccountKey,
ServiceAccountOrganizationPermission,
IServiceAccountOrganizationPermission,
ServiceAccountWorkspacePermission,
IServiceAccountWorkspacePermission,
TokenData,
ITokenData,
User,
IUser,
UserAction,
IUserAction,
Workspace,
IWorkspace,
ServiceTokenData,
IServiceTokenData,
APIKeyData,
IAPIKeyData,
LoginSRPDetail,
ILoginSRPDetail,
TokenVersion,
ITokenVersion
};
+1
View File
@@ -0,0 +1 @@
export * from "./integration";
@@ -26,8 +26,9 @@ import {
INTEGRATION_TRAVISCI, INTEGRATION_TRAVISCI,
INTEGRATION_VERCEL, INTEGRATION_VERCEL,
INTEGRATION_WINDMILL INTEGRATION_WINDMILL
} from "../variables"; } from "../../variables";
import { Schema, Types, model } from "mongoose"; import { Schema, Types, model } from "mongoose";
import { Metadata } from "./types";
export interface IIntegration { export interface IIntegration {
_id: Types.ObjectId; _id: Types.ObjectId;
@@ -45,7 +46,6 @@ export interface IIntegration {
path: string; path: string;
region: string; region: string;
secretPath: string; secretPath: string;
secretSuffix: string;
integration: integration:
| "azure-key-vault" | "azure-key-vault"
| "aws-parameter-store" | "aws-parameter-store"
@@ -75,6 +75,7 @@ export interface IIntegration {
| "windmill" | "windmill"
| "gcp-secret-manager"; | "gcp-secret-manager";
integrationAuth: Types.ObjectId; integrationAuth: Types.ObjectId;
metadata: Metadata;
} }
const integrationSchema = new Schema<IIntegration>( const integrationSchema = new Schema<IIntegration>(
@@ -185,10 +186,8 @@ const integrationSchema = new Schema<IIntegration>(
required: true, required: true,
default: "/", default: "/",
}, },
secretSuffix: { metadata: {
type: String, type: Schema.Types.Mixed
required: false,
default: "",
} }
}, },
{ {
@@ -196,6 +195,4 @@ const integrationSchema = new Schema<IIntegration>(
} }
); );
const Integration = model<IIntegration>("Integration", integrationSchema); export const Integration = model<IIntegration>("Integration", integrationSchema);
export default Integration;
+3
View File
@@ -0,0 +1,3 @@
export type Metadata = {
secretSuffix?: string;
}
+1 -3
View File
@@ -193,9 +193,7 @@ const integrationAuthSchema = new Schema<IIntegrationAuth>(
} }
); );
const IntegrationAuth = model<IIntegrationAuth>( export const IntegrationAuth = model<IIntegrationAuth>(
"IntegrationAuth", "IntegrationAuth",
integrationAuthSchema integrationAuthSchema
); );
export default IntegrationAuth;
+1 -3
View File
@@ -40,6 +40,4 @@ const keySchema = new Schema<IKey>(
} }
); );
const Key = model<IKey>("Key", keySchema); export const Key = model<IKey>("Key", keySchema);
export default Key;
+1 -3
View File
@@ -24,6 +24,4 @@ const loginSRPDetailSchema = new Schema<ILoginSRPDetail>(
} }
); );
const LoginSRPDetail = model("LoginSRPDetail", loginSRPDetailSchema); export const LoginSRPDetail = model("LoginSRPDetail", loginSRPDetailSchema);
export default LoginSRPDetail;
+1 -3
View File
@@ -52,6 +52,4 @@ const membershipSchema = new Schema<IMembership>(
} }
); );
const Membership = model<IMembership>("Membership", membershipSchema); export const Membership = model<IMembership>("Membership", membershipSchema);
export default Membership;
+1 -3
View File
@@ -39,9 +39,7 @@ const membershipOrgSchema = new Schema(
} }
); );
const MembershipOrg = model<IMembershipOrg>( export const MembershipOrg = model<IMembershipOrg>(
"MembershipOrg", "MembershipOrg",
membershipOrgSchema membershipOrgSchema
); );
export default MembershipOrg;
+1 -3
View File
@@ -21,6 +21,4 @@ const organizationSchema = new Schema<IOrganization>(
} }
); );
const Organization = model<IOrganization>("Organization", organizationSchema); export const Organization = model<IOrganization>("Organization", organizationSchema);
export default Organization;
+1 -3
View File
@@ -145,6 +145,4 @@ const secretSchema = new Schema<ISecret>(
secretSchema.index({ tags: 1 }, { background: true }); secretSchema.index({ tags: 1 }, { background: true });
const Secret = model<ISecret>("Secret", secretSchema); export const Secret = model<ISecret>("Secret", secretSchema);
export default Secret;
+2 -4
View File
@@ -1,5 +1,5 @@
import mongoose, { Schema, model } from "mongoose"; import mongoose, { Schema, model } from "mongoose";
import Secret, { ISecret } from "./secret"; import { ISecret, Secret } from "./secret";
interface ISecretApprovalRequest { interface ISecretApprovalRequest {
secret: mongoose.Types.ObjectId; secret: mongoose.Types.ObjectId;
@@ -78,6 +78,4 @@ const secretApprovalRequestSchema = new Schema<ISecretApprovalRequest>(
} }
); );
const SecretApprovalRequest = model<ISecretApprovalRequest>("SecretApprovalRequest", secretApprovalRequestSchema); export const SecretApprovalRequest = model<ISecretApprovalRequest>("SecretApprovalRequest", secretApprovalRequestSchema);
export default SecretApprovalRequest;
+1 -3
View File
@@ -53,6 +53,4 @@ const secretBlindIndexDataSchema = new Schema<ISecretBlindIndexData>(
} }
); );
const SecretBlindIndexData = model<ISecretBlindIndexData>("SecretBlindIndexData", secretBlindIndexDataSchema); export const SecretBlindIndexData = model<ISecretBlindIndexData>("SecretBlindIndexData", secretBlindIndexDataSchema);
export default SecretBlindIndexData;
+1 -2
View File
@@ -48,5 +48,4 @@ const secretImportSchema = new Schema<ISecretImports>(
} }
); );
const SecretImport = model<ISecretImports>("SecretImports", secretImportSchema); export const SecretImport = model<ISecretImports>("SecretImports", secretImportSchema);
export default SecretImport;
+1 -3
View File
@@ -48,6 +48,4 @@ const serviceAccountSchema = new Schema<IServiceAccount>(
} }
); );
const ServiceAccount = model<IServiceAccount>("ServiceAccount", serviceAccountSchema); export const ServiceAccount = model<IServiceAccount>("ServiceAccount", serviceAccountSchema);
export default ServiceAccount;
+1 -3
View File
@@ -39,6 +39,4 @@ const serviceAccountKeySchema = new Schema<IServiceAccountKey>(
} }
); );
const ServiceAccountKey = model<IServiceAccountKey>("ServiceAccountKey", serviceAccountKeySchema); export const ServiceAccountKey = model<IServiceAccountKey>("ServiceAccountKey", serviceAccountKeySchema);
export default ServiceAccountKey;
@@ -18,6 +18,4 @@ const serviceAccountOrganizationPermissionSchema = new Schema<IServiceAccountOrg
} }
); );
const ServiceAccountOrganizationPermission = model<IServiceAccountOrganizationPermission>("ServiceAccountOrganizationPermission", serviceAccountOrganizationPermissionSchema); export const ServiceAccountOrganizationPermission = model<IServiceAccountOrganizationPermission>("ServiceAccountOrganizationPermission", serviceAccountOrganizationPermissionSchema);
export default ServiceAccountOrganizationPermission;
@@ -39,6 +39,4 @@ const serviceAccountWorkspacePermissionSchema = new Schema<IServiceAccountWorksp
} }
); );
const ServiceAccountWorkspacePermission = model<IServiceAccountWorkspacePermission>("ServiceAccountWorkspacePermission", serviceAccountWorkspacePermissionSchema); export const ServiceAccountWorkspacePermission = model<IServiceAccountWorkspacePermission>("ServiceAccountWorkspacePermission", serviceAccountWorkspacePermissionSchema);
export default ServiceAccountWorkspacePermission;
+1 -3
View File
@@ -56,6 +56,4 @@ const serviceTokenSchema = new Schema<IServiceToken>(
} }
); );
const ServiceToken = model<IServiceToken>("ServiceToken", serviceTokenSchema); export const ServiceToken = model<IServiceToken>("ServiceToken", serviceTokenSchema);
export default ServiceToken;
+1 -3
View File
@@ -89,6 +89,4 @@ const serviceTokenDataSchema = new Schema<IServiceTokenData>(
} }
); );
const ServiceTokenData = model<IServiceTokenData>("ServiceTokenData", serviceTokenDataSchema); export const ServiceTokenData = model<IServiceTokenData>("ServiceTokenData", serviceTokenDataSchema);
export default ServiceTokenData;
+1 -3
View File
@@ -50,6 +50,4 @@ const tagSchema = new Schema<ITag>(
tagSchema.index({ slug: 1, workspace: 1 }, { unique: true }) tagSchema.index({ slug: 1, workspace: 1 }, { unique: true })
tagSchema.index({ workspace: 1 }) tagSchema.index({ workspace: 1 })
const Tag = model<ITag>("Tag", tagSchema); export const Tag = model<ITag>("Tag", tagSchema);
export default Tag;
+1 -3
View File
@@ -27,6 +27,4 @@ const tokenSchema = new Schema<IToken>({
tokenSchema.index({ email: 1 }); tokenSchema.index({ email: 1 });
const Token = model<IToken>("Token", tokenSchema); export const Token = model<IToken>("Token", tokenSchema);
export default Token;
+1 -3
View File
@@ -50,6 +50,4 @@ const tokenDataSchema = new Schema<ITokenData>({
timestamps: true, timestamps: true,
}); });
const TokenData = model<ITokenData>("TokenData", tokenDataSchema); export const TokenData = model<ITokenData>("TokenData", tokenDataSchema);
export default TokenData;
+1 -3
View File
@@ -42,6 +42,4 @@ const tokenVersionSchema = new Schema<ITokenVersion>(
} }
); );
const TokenVersion = model<ITokenVersion>("TokenVersion", tokenVersionSchema); export const TokenVersion = model<ITokenVersion>("TokenVersion", tokenVersionSchema);
export default TokenVersion;
+1 -3
View File
@@ -121,6 +121,4 @@ const userSchema = new Schema<IUser>(
} }
); );
const User = model<IUser>("User", userSchema); export const User = model<IUser>("User", userSchema);
export default User;
+1 -3
View File
@@ -23,6 +23,4 @@ const userActionSchema = new Schema<IUserAction>(
} }
); );
const UserAction = model<IUserAction>("UserAction", userActionSchema); export const UserAction = model<IUserAction>("UserAction", userActionSchema);
export default UserAction;
+1 -3
View File
@@ -80,6 +80,4 @@ const WebhookSchema = new Schema<IWebhook>(
} }
); );
const Webhook = model<IWebhook>("Webhook", WebhookSchema); export const Webhook = model<IWebhook>("Webhook", WebhookSchema);
export default Webhook;
+1 -3
View File
@@ -49,6 +49,4 @@ const workspaceSchema = new Schema<IWorkspace>({
}, },
}); });
const Workspace = model<IWorkspace>("Workspace", workspaceSchema); export const Workspace = model<IWorkspace>("Workspace", workspaceSchema);
export default Workspace;
@@ -1,6 +1,5 @@
import Queue, { Job } from "bull"; import Queue, { Job } from "bull";
import Integration from "../../models/integration"; import { Integration, IntegrationAuth } from "../../models";
import IntegrationAuth from "../../models/integrationAuth";
import { BotService } from "../../services"; import { BotService } from "../../services";
import { getIntegrationAuthAccessHelper } from "../../helpers"; import { getIntegrationAuthAccessHelper } from "../../helpers";
import { syncSecrets } from "../../integrations/sync" import { syncSecrets } from "../../integrations/sync"
@@ -37,9 +36,9 @@ syncSecretsToThirdPartyServices.process(async (job: Job) => {
}); });
const suffixedSecrets: any = {}; const suffixedSecrets: any = {};
if (integration?.secretSuffix) { if (integration.metadata?.secretSuffix) {
for (const key in secrets) { for (const key in secrets) {
const newKey = key + integration?.secretSuffix; const newKey = key + integration.metadata?.secretSuffix;
suffixedSecrets[newKey] = secrets[key]; suffixedSecrets[newKey] = secrets[key];
} }
} }
+2 -1
View File
@@ -29,7 +29,6 @@ router.post(
body("isActive").exists().isBoolean(), body("isActive").exists().isBoolean(),
body("appId").trim(), body("appId").trim(),
body("secretPath").default("/").isString().trim(), body("secretPath").default("/").isString().trim(),
body("secretSuffix").default("").isString().trim(),
body("sourceEnvironment").trim(), body("sourceEnvironment").trim(),
body("targetEnvironment").trim(), body("targetEnvironment").trim(),
body("targetEnvironmentId").trim(), body("targetEnvironmentId").trim(),
@@ -38,6 +37,8 @@ router.post(
body("owner").trim(), body("owner").trim(),
body("path").trim(), body("path").trim(),
body("region").trim(), body("region").trim(),
body("metadata").optional().isObject().withMessage("Metadata should be an object"),
body("metadata.secretSuffix").optional().isString().withMessage("Suffix should be a string"),
validateRequest, validateRequest,
integrationController.createIntegration integrationController.createIntegration
); );
+1 -1
View File
@@ -1,6 +1,6 @@
import { nanoid } from "nanoid"; import { nanoid } from "nanoid";
import { Types } from "mongoose"; import { Types } from "mongoose";
import Folder, { TFolderSchema } from "../models/folder"; import { Folder, TFolderSchema } from "../models";
import path from "path"; import path from "path";
type TAppendFolderDTO = { type TAppendFolderDTO = {
+6 -3
View File
@@ -1,7 +1,10 @@
import { Types } from "mongoose"; import { Types } from "mongoose";
import Folder from "../models/folder"; import {
import Secret, { ISecret } from "../models/secret"; Folder,
import SecretImport from "../models/secretImports"; ISecret,
Secret,
SecretImport
} from "../models";
import { getFolderByPath } from "./FolderService"; import { getFolderByPath } from "./FolderService";
type TSecretImportFid = { environment: string; folderId: string; secretPath: string }; type TSecretImportFid = { environment: string; folderId: string; secretPath: string };
+1 -1
View File
@@ -3,7 +3,7 @@ import crypto from "crypto";
import { Types } from "mongoose"; import { Types } from "mongoose";
import picomatch from "picomatch"; import picomatch from "picomatch";
import { client, getRootEncryptionKey } from "../config"; import { client, getRootEncryptionKey } from "../config";
import Webhook, { IWebhook } from "../models/webhooks"; import { IWebhook, Webhook } from "../models";
export const triggerWebhookRequest = async ( export const triggerWebhookRequest = async (
{ url, encryptedSecretKey, iv, tag }: IWebhook, { url, encryptedSecretKey, iv, tag }: IWebhook,
@@ -41,7 +41,7 @@ export const useCreateIntegration = () => {
path, path,
region, region,
secretPath, secretPath,
secretSuffix metadata
}: { }: {
integrationAuthId: string; integrationAuthId: string;
isActive: boolean; isActive: boolean;
@@ -56,7 +56,9 @@ export const useCreateIntegration = () => {
owner: string | null; owner: string | null;
path: string | null; path: string | null;
region: string | null; region: string | null;
secretSuffix: string; metadata?: {
secretSuffix?: string;
}
}) => { }) => {
const { data: { integration } } = await apiRequest.post("/api/v1/integration", { const { data: { integration } } = await apiRequest.post("/api/v1/integration", {
integrationAuthId, integrationAuthId,
@@ -72,7 +74,7 @@ export const useCreateIntegration = () => {
path, path,
region, region,
secretPath, secretPath,
secretSuffix metadata
}); });
return integration; return integration;
+3 -1
View File
@@ -27,8 +27,10 @@ export type TIntegration = {
integration: string; integration: string;
integrationAuth: string; integrationAuth: string;
secretPath: string; secretPath: string;
secretSuffix: string;
createdAt: string; createdAt: string;
updatedAt: string; updatedAt: string;
__v: number; __v: number;
metadata?: {
secretSuffix?: string;
}
}; };
@@ -80,7 +80,9 @@ export default function ChecklyCreateIntegrationPage() {
path: null, path: null,
region: null, region: null,
secretPath, secretPath,
metadata: {
secretSuffix secretSuffix
}
}); });
setIsLoading(false); setIsLoading(false);
@@ -119,7 +119,7 @@ export const IntegrationsSection = ({
<div className="ml-2 flex flex-col"> <div className="ml-2 flex flex-col">
<FormLabel label="Secret Suffix" /> <FormLabel label="Secret Suffix" />
<div className="rounded-md border border-mineshaft-700 bg-mineshaft-900 px-3 py-2 font-inter text-sm text-bunker-200"> <div className="rounded-md border border-mineshaft-700 bg-mineshaft-900 px-3 py-2 font-inter text-sm text-bunker-200">
{integration.secretSuffix || "-"} {integration?.metadata?.secretSuffix || "-"}
</div> </div>
</div> </div>
)} )}