feat: added api for admin and org gateway management

This commit is contained in:
=
2025-02-26 20:45:36 +05:30
parent 617aa2f533
commit 84c534ef70
25 changed files with 1053 additions and 11 deletions
+19 -1
View File
@@ -27,6 +27,10 @@ import { dynamicSecretLeaseQueueServiceFactory } from "@app/ee/services/dynamic-
import { dynamicSecretLeaseServiceFactory } from "@app/ee/services/dynamic-secret-lease/dynamic-secret-lease-service";
import { externalKmsDALFactory } from "@app/ee/services/external-kms/external-kms-dal";
import { externalKmsServiceFactory } from "@app/ee/services/external-kms/external-kms-service";
import { gatewayDALFactory } from "@app/ee/services/gateway/gateway-dal";
import { gatewayInstanceConfigDALFactory } from "@app/ee/services/gateway/gateway-instance-config-dal";
import { gatewayServiceFactory } from "@app/ee/services/gateway/gateway-service";
import { orgGatewayRootCaDALFactory } from "@app/ee/services/gateway/org-gateway-root-ca-dal";
import { groupDALFactory } from "@app/ee/services/group/group-dal";
import { groupServiceFactory } from "@app/ee/services/group/group-service";
import { userGroupMembershipDALFactory } from "@app/ee/services/group/user-group-membership-dal";
@@ -393,6 +397,10 @@ export const registerRoutes = async (
const kmipOrgConfigDAL = kmipOrgConfigDALFactory(db);
const kmipOrgServerCertificateDAL = kmipOrgServerCertificateDALFactory(db);
const gatewayInstanceConfigDAL = gatewayInstanceConfigDALFactory(db);
const orgGatewayRootCaDAL = orgGatewayRootCaDALFactory(db);
const gatewayDAL = gatewayDALFactory(db);
const permissionService = permissionServiceFactory({
permissionDAL,
orgRoleDAL,
@@ -631,6 +639,7 @@ export const registerRoutes = async (
authService: loginService,
serverCfgDAL: superAdminDAL,
kmsRootConfigDAL,
gatewayInstanceConfigDAL,
orgService,
keyStore,
licenseService,
@@ -1457,6 +1466,14 @@ export const registerRoutes = async (
permissionService
});
const gatewayService = gatewayServiceFactory({
orgGatewayRootCaDAL,
permissionService,
gatewayDAL,
kmsService,
licenseService
});
await superAdminService.initServerCfg();
// setup the communication with license key server
@@ -1557,7 +1574,8 @@ export const registerRoutes = async (
appConnection: appConnectionService,
secretSync: secretSyncService,
kmip: kmipService,
kmipOperation: kmipOperationService
kmipOperation: kmipOperationService,
gateway: gatewayService
});
const cronJobs: CronJob[] = [];
+84 -1
View File
@@ -1,6 +1,6 @@
import { z } from "zod";
import { OrganizationsSchema, SuperAdminSchema, UsersSchema } from "@app/db/schemas";
import { GatewayInstanceConfigSchema, OrganizationsSchema, SuperAdminSchema, UsersSchema } from "@app/db/schemas";
import { getConfig } from "@app/lib/config/env";
import { BadRequestError } from "@app/lib/errors";
import { readLimit, writeLimit } from "@app/server/config/rateLimiter";
@@ -12,6 +12,13 @@ import { getServerCfg } from "@app/services/super-admin/super-admin-service";
import { LoginMethod } from "@app/services/super-admin/super-admin-types";
import { PostHogEventTypes } from "@app/services/telemetry/telemetry-types";
const SanitizedInstanceGatewaySchema = GatewayInstanceConfigSchema.pick({
isDisabled: true,
infisicalClientCaIssuedAt: true,
infisicalClientCaSerialNumber: true,
caKeyAlgorithm: true
});
export const registerAdminRouter = async (server: FastifyZodProvider) => {
server.route({
method: "GET",
@@ -247,6 +254,82 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
}
});
server.route({
method: "POST",
url: "/gateway",
config: {
rateLimit: writeLimit
},
schema: {
response: {
200: z.object({
message: z.string()
})
}
},
onRequest: (req, res, done) => {
verifyAuth([AuthMode.JWT])(req, res, () => {
verifySuperAdmin(req, res, done);
});
},
handler: async () => {
await server.services.superAdmin.setupInstanceGateway();
return { message: "Gateway setup completed" };
}
});
server.route({
method: "PATCH",
url: "/gateway",
config: {
rateLimit: writeLimit
},
schema: {
body: z.object({
isDisabled: z.boolean().optional()
}),
response: {
200: z.object({
message: z.string(),
gateway: SanitizedInstanceGatewaySchema
})
}
},
onRequest: (req, res, done) => {
verifyAuth([AuthMode.JWT])(req, res, () => {
verifySuperAdmin(req, res, done);
});
},
handler: async (req) => {
const gateway = await server.services.superAdmin.updateInstanceGateway(req.body);
return { message: "Gateway updated Successfully.", gateway };
}
});
server.route({
method: "GET",
url: "/gateway",
config: {
rateLimit: readLimit
},
schema: {
response: {
200: z.object({
gateway: SanitizedInstanceGatewaySchema
})
}
},
onRequest: (req, res, done) => {
verifyAuth([AuthMode.JWT])(req, res, () => {
verifySuperAdmin(req, res, done);
});
},
handler: async () => {
const gateway = await server.services.superAdmin.getInstanceGateway();
return { gateway };
}
});
server.route({
method: "POST",
url: "/signup",