fixed app connection endpoints

This commit is contained in:
x032205
2025-05-07 13:53:05 -04:00
parent 326742c2d5
commit 581840a701
3 changed files with 33 additions and 46 deletions
+1 -1
View File
@@ -38,7 +38,7 @@
"build:frontend": "npm run build --prefix ../frontend", "build:frontend": "npm run build --prefix ../frontend",
"start": "node --enable-source-maps dist/main.mjs", "start": "node --enable-source-maps dist/main.mjs",
"type:check": "tsc --noEmit", "type:check": "tsc --noEmit",
"lint:fix": "eslint --fix --ext js,ts ./src", "lint:fix": "node --max-old-space-size=8192 ./node_modules/.bin/eslint --fix --ext js,ts ./src",
"lint": "eslint 'src/**/*.ts'", "lint": "eslint 'src/**/*.ts'",
"test:unit": "vitest run -c vitest.unit.config.ts", "test:unit": "vitest run -c vitest.unit.config.ts",
"test:e2e": "vitest run -c vitest.e2e.config.ts --bail=1", "test:e2e": "vitest run -c vitest.e2e.config.ts --bail=1",
@@ -22,8 +22,6 @@ export const registerOCIConnectionRouter = async (server: FastifyZodProvider) =>
}); });
// The following endpoints are for internal Infisical App use only and not part of the public API // The following endpoints are for internal Infisical App use only and not part of the public API
// TODO(andrey): These may need to be changed
server.route({ server.route({
method: "GET", method: "GET",
url: `/:connectionId/vaults`, url: `/:connectionId/vaults`,
@@ -32,25 +30,29 @@ export const registerOCIConnectionRouter = async (server: FastifyZodProvider) =>
}, },
schema: { schema: {
params: z.object({ params: z.object({
connectionId: z.string().uuid(), connectionId: z.string().uuid()
}),
querystring: z.object({
compartmentOcid: z.string().min(1, "Compartment OCID required") compartmentOcid: z.string().min(1, "Compartment OCID required")
}), }),
response: { response: {
200: z 200: z
.object({ .object({
// TODO(andrey): This may need change
id: z.string(), id: z.string(),
displayName: z.string(), displayName: z.string()
compartmentId: z.string(),
timeCreated: z.string(),
lifecycleState: z.string()
}) })
.array() .array()
} }
}, },
onRequest: verifyAuth([AuthMode.JWT]), onRequest: verifyAuth([AuthMode.JWT]),
handler: async (req) => { handler: async (req) => {
const vaults = await server.services.appConnection.oci.listVaults(req.params, req.permission); const { connectionId } = req.params;
const { compartmentOcid } = req.query;
const vaults = await server.services.appConnection.oci.listVaults(
{ connectionId, compartmentOcid },
req.permission
);
return vaults; return vaults;
} }
}); });
@@ -63,14 +65,15 @@ export const registerOCIConnectionRouter = async (server: FastifyZodProvider) =>
}, },
schema: { schema: {
params: z.object({ params: z.object({
connectionId: z.string().uuid(), connectionId: z.string().uuid()
}),
querystring: z.object({
compartmentOcid: z.string().min(1, "Compartment OCID required"), compartmentOcid: z.string().min(1, "Compartment OCID required"),
vaultOcid: z.string().min(1, "Compartment OCID required") vaultOcid: z.string().min(1, "Compartment OCID required")
}), }),
response: { response: {
200: z 200: z
.object({ .object({
// TODO(andrey): This may need change
id: z.string(), id: z.string(),
displayName: z.string() displayName: z.string()
}) })
@@ -79,7 +82,13 @@ export const registerOCIConnectionRouter = async (server: FastifyZodProvider) =>
}, },
onRequest: verifyAuth([AuthMode.JWT]), onRequest: verifyAuth([AuthMode.JWT]),
handler: async (req) => { handler: async (req) => {
const vaults = await server.services.appConnection.oci.listVaultKeys(req.params, req.permission); const { connectionId } = req.params;
const { compartmentOcid, vaultOcid } = req.query;
const vaults = await server.services.appConnection.oci.listVaultKeys(
{ connectionId, compartmentOcid, vaultOcid },
req.permission
);
return vaults; return vaults;
} }
}); });
@@ -1,4 +1,4 @@
import { common, identity, keymanagement } from "oci-sdk"; import { common, identity, keymanagement, vault } from "oci-sdk";
import { request } from "@app/lib/config/request"; import { request } from "@app/lib/config/request";
import { BadRequestError } from "@app/lib/errors"; import { BadRequestError } from "@app/lib/errors";
@@ -56,43 +56,24 @@ export const validateOCIConnectionCredentials = async (config: TOCIConnectionCon
return config.credentials; return config.credentials;
}; };
// TODO(andrey): This may need to be removed. I don't think the endpoint is right
export const listOCIVaults = async (appConnection: TOCIConnection, compartmentOcid: string) => { export const listOCIVaults = async (appConnection: TOCIConnection, compartmentOcid: string) => {
const provider = await getOCIProvider(appConnection); const provider = await getOCIProvider(appConnection);
const signer = new common.DefaultRequestSigner(provider);
// Create proper type for response const keyManagementClient = new keymanagement.KmsVaultClient({
interface VaultsResponse { authenticationDetailsProvider: provider
items: Array<{
id: string;
displayName: string;
compartmentId: string;
timeCreated: string;
lifecycleState: string;
}>;
}
const requestParams = await common.composeRequest({
method: "GET",
baseEndpoint: `https://vaults.${appConnection.credentials.region}.oci.oraclecloud.com`,
path: "/20180608/vaults",
pathParams: { compartmentId: compartmentOcid },
defaultHeaders: {
Accept: "application/json"
}
});
await signer.signHttpRequest(requestParams);
const resp = await request.get<VaultsResponse>(requestParams.uri, {
headers: requestParams.headers as unknown as Record<string, string>
}); });
return resp.data.items; const vaults = await keyManagementClient.listVaults({
compartmentId: compartmentOcid
});
return vaults.items;
}; };
export const listOCIVaultKeys = async (appConnection: TOCIConnection, compartmentOcid: string, vaultOcid: string) => { export const listOCIVaultKeys = async (appConnection: TOCIConnection, compartmentOcid: string, vaultOcid: string) => {
const provider = await getOCIProvider(appConnection); const provider = await getOCIProvider(appConnection);
const vaultIdMatch = vaultOcid.match(/ocid1\.vault\.[^.]+\.([^.]+)/); const vaultIdMatch = vaultOcid.match(/ocid1\.vault\.[^.]+\.[^.]+\.([^.]+)/);
if (!vaultIdMatch || !vaultIdMatch[1]) { if (!vaultIdMatch || !vaultIdMatch[1]) {
throw new BadRequestError({ throw new BadRequestError({
message: "Invalid vault OCID format" message: "Invalid vault OCID format"
@@ -103,14 +84,11 @@ export const listOCIVaultKeys = async (appConnection: TOCIConnection, compartmen
authenticationDetailsProvider: provider authenticationDetailsProvider: provider
}); });
keyManagementClient.endpoint = `https://${vaultIdMatch[1]}-crypto.kms.${appConnection.credentials.region}.oraclecloud.com`; keyManagementClient.endpoint = `https://${vaultIdMatch[1]}-management.kms.${appConnection.credentials.region}.oraclecloud.com`;
const keys = await keyManagementClient.listKeys({ const keys = await keyManagementClient.listKeys({
compartmentId: compartmentOcid compartmentId: compartmentOcid
}); });
return keys.items.map((key) => ({ return keys.items;
id: key.id,
displayName: key.displayName
}));
}; };