mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-15 15:41:27 +00:00
171 lines
5.5 KiB
TypeScript
171 lines
5.5 KiB
TypeScript
import { z } from "zod";
|
|
|
|
import { IntegrationsSchema } from "@app/db/schemas";
|
|
import { EventType } from "@app/ee/services/audit-log/audit-log-types";
|
|
import { removeTrailingSlash, shake } from "@app/lib/fn";
|
|
import { verifyAuth } from "@app/server/plugins/auth/verify-auth";
|
|
import { AuthMode } from "@app/services/auth/auth-type";
|
|
|
|
export const registerIntegrationRouter = async (server: FastifyZodProvider) => {
|
|
server.route({
|
|
url: "/",
|
|
method: "POST",
|
|
schema: {
|
|
body: z.object({
|
|
integrationAuthId: z.string().trim(),
|
|
app: z.string().trim().optional(),
|
|
isActive: z.boolean(),
|
|
appId: z.string().trim().optional(),
|
|
secretPath: z.string().trim().default("/").transform(removeTrailingSlash),
|
|
sourceEnvironment: z.string().trim(),
|
|
targetEnvironment: z.string().trim().optional(),
|
|
targetEnvironmentId: z.string().trim().optional(),
|
|
targetService: z.string().trim().optional(),
|
|
targetServiceId: z.string().trim().optional(),
|
|
owner: z.string().trim().optional(),
|
|
path: z.string().trim().optional(),
|
|
region: z.string().trim().optional(),
|
|
scope: z.string().trim().optional(),
|
|
metadata: z
|
|
.object({
|
|
secretPrefix: z.string().optional(),
|
|
secretSuffix: z.string().optional(),
|
|
secretGCPLabel: z
|
|
.object({
|
|
labelName: z.string(),
|
|
labelValue: z.string()
|
|
})
|
|
.optional()
|
|
})
|
|
.optional()
|
|
}),
|
|
response: {
|
|
200: z.object({
|
|
integration: IntegrationsSchema
|
|
})
|
|
}
|
|
},
|
|
onRequest: verifyAuth([AuthMode.JWT]),
|
|
handler: async (req) => {
|
|
const { integration, integrationAuth } = await server.services.integration.createIntegration({
|
|
actorId: req.permission.id,
|
|
actor: req.permission.type,
|
|
actorOrgId: req.permission.orgId,
|
|
...req.body
|
|
});
|
|
await server.services.auditLog.createAuditLog({
|
|
...req.auditLogInfo,
|
|
projectId: integrationAuth.projectId,
|
|
event: {
|
|
type: EventType.CREATE_INTEGRATION,
|
|
// eslint-disable-next-line
|
|
metadata: shake({
|
|
integrationId: integration.id.toString(),
|
|
integration: integration.integration,
|
|
environment: req.body.sourceEnvironment,
|
|
secretPath: req.body.secretPath,
|
|
url: integration.url,
|
|
app: integration.app,
|
|
appId: integration.appId,
|
|
targetEnvironment: integration.targetEnvironment,
|
|
targetEnvironmentId: integration.targetEnvironmentId,
|
|
targetService: integration.targetService,
|
|
targetServiceId: integration.targetServiceId,
|
|
path: integration.path,
|
|
region: integration.region
|
|
// eslint-disable-next-line
|
|
}) as any
|
|
}
|
|
});
|
|
return { integration };
|
|
}
|
|
});
|
|
|
|
server.route({
|
|
url: "/:integrationId",
|
|
method: "PATCH",
|
|
schema: {
|
|
params: z.object({
|
|
integrationId: z.string().trim()
|
|
}),
|
|
body: z.object({
|
|
app: z.string().trim(),
|
|
appId: z.string().trim(),
|
|
isActive: z.boolean(),
|
|
secretPath: z.string().trim().default("/").transform(removeTrailingSlash),
|
|
targetEnvironment: z.string().trim(),
|
|
owner: z.string().trim(),
|
|
environment: z.string().trim()
|
|
}),
|
|
response: {
|
|
200: z.object({
|
|
integration: IntegrationsSchema
|
|
})
|
|
}
|
|
},
|
|
onRequest: verifyAuth([AuthMode.JWT]),
|
|
handler: async (req) => {
|
|
const integration = await server.services.integration.updateIntegration({
|
|
actorId: req.permission.id,
|
|
actor: req.permission.type,
|
|
actorOrgId: req.permission.orgId,
|
|
id: req.params.integrationId,
|
|
...req.body
|
|
});
|
|
return { integration };
|
|
}
|
|
});
|
|
|
|
server.route({
|
|
url: "/:integrationId",
|
|
method: "DELETE",
|
|
schema: {
|
|
params: z.object({
|
|
integrationId: z.string().trim()
|
|
}),
|
|
response: {
|
|
200: z.object({
|
|
integration: IntegrationsSchema
|
|
})
|
|
}
|
|
},
|
|
onRequest: verifyAuth([AuthMode.JWT]),
|
|
handler: async (req) => {
|
|
const integration = await server.services.integration.deleteIntegration({
|
|
actorId: req.permission.id,
|
|
actor: req.permission.type,
|
|
actorOrgId: req.permission.orgId,
|
|
id: req.params.integrationId
|
|
});
|
|
|
|
await server.services.auditLog.createAuditLog({
|
|
...req.auditLogInfo,
|
|
projectId: integration.projectId,
|
|
event: {
|
|
type: EventType.DELETE_INTEGRATION,
|
|
// eslint-disable-next-line
|
|
metadata: shake({
|
|
integrationId: integration.id,
|
|
integration: integration.integration,
|
|
environment: integration.environment.slug,
|
|
secretPath: integration.secretPath,
|
|
url: integration.url,
|
|
app: integration.app,
|
|
appId: integration.appId,
|
|
targetEnvironment: integration.targetEnvironment,
|
|
targetEnvironmentId: integration.targetEnvironmentId,
|
|
targetService: integration.targetService,
|
|
targetServiceId: integration.targetServiceId,
|
|
path: integration.path,
|
|
region: integration.region
|
|
// eslint-disable-next-line
|
|
}) as any
|
|
}
|
|
});
|
|
return { integration };
|
|
}
|
|
});
|
|
|
|
// TODO(akhilmhdh-pg): manual sync
|
|
};
|