mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 05:27:48 +00:00
misc: add schema for gateway
This commit is contained in:
@@ -104,6 +104,26 @@ export async function up(knex: Knex): Promise<void> {
|
|||||||
|
|
||||||
await createOnUpdateTrigger(knex, TableName.Proxy);
|
await createOnUpdateTrigger(knex, TableName.Proxy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!(await knex.schema.hasTable(TableName.GatewayV2))) {
|
||||||
|
await knex.schema.createTable(TableName.GatewayV2, (t) => {
|
||||||
|
t.uuid("id", { primaryKey: true }).defaultTo(knex.fn.uuid());
|
||||||
|
t.timestamps(true, true, true);
|
||||||
|
|
||||||
|
t.uuid("orgId");
|
||||||
|
t.foreign("orgId").references("id").inTable(TableName.Organization).onDelete("CASCADE");
|
||||||
|
|
||||||
|
t.uuid("identityId").unique();
|
||||||
|
t.foreign("identityId").references("id").inTable(TableName.Identity).onDelete("CASCADE");
|
||||||
|
|
||||||
|
t.uuid("proxyId");
|
||||||
|
t.foreign("proxyId").references("id").inTable(TableName.Proxy).onDelete("CASCADE");
|
||||||
|
|
||||||
|
t.string("name").notNullable().unique();
|
||||||
|
});
|
||||||
|
|
||||||
|
await createOnUpdateTrigger(knex, TableName.GatewayV2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function down(knex: Knex): Promise<void> {
|
export async function down(knex: Knex): Promise<void> {
|
||||||
@@ -118,4 +138,7 @@ export async function down(knex: Knex): Promise<void> {
|
|||||||
|
|
||||||
await dropOnUpdateTrigger(knex, TableName.Proxy);
|
await dropOnUpdateTrigger(knex, TableName.Proxy);
|
||||||
await knex.schema.dropTableIfExists(TableName.Proxy);
|
await knex.schema.dropTableIfExists(TableName.Proxy);
|
||||||
|
|
||||||
|
await dropOnUpdateTrigger(knex, TableName.GatewayV2);
|
||||||
|
await knex.schema.dropTableIfExists(TableName.GatewayV2);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -184,7 +184,8 @@ export enum TableName {
|
|||||||
InstanceProxyConfig = "instance_proxy_config",
|
InstanceProxyConfig = "instance_proxy_config",
|
||||||
OrgProxyConfig = "org_proxy_config",
|
OrgProxyConfig = "org_proxy_config",
|
||||||
OrgGatewayConfigV2 = "org_gateway_config_v2",
|
OrgGatewayConfigV2 = "org_gateway_config_v2",
|
||||||
Proxy = "proxies"
|
Proxy = "proxies",
|
||||||
|
GatewayV2 = "gateways_v2"
|
||||||
}
|
}
|
||||||
|
|
||||||
export type TImmutableDBKeys = "id" | "createdAt" | "updatedAt" | "commitId";
|
export type TImmutableDBKeys = "id" | "createdAt" | "updatedAt" | "commitId";
|
||||||
|
|||||||
@@ -200,6 +200,9 @@ export const gatewayV2ServiceFactory = ({
|
|||||||
const registerGateway = async ({ orgId, proxyName }: { orgId: string; actorId: string; proxyName: string }) => {
|
const registerGateway = async ({ orgId, proxyName }: { orgId: string; actorId: string; proxyName: string }) => {
|
||||||
const orgCAs = await $getOrgCAs(orgId);
|
const orgCAs = await $getOrgCAs(orgId);
|
||||||
|
|
||||||
|
// TODO: Save gateway to DB and set Gateway ID as principal in SSH certificate
|
||||||
|
// only throw error if proxy is different from existing DB record
|
||||||
|
|
||||||
const alg = keyAlgorithmToAlgCfg(CertKeyAlgorithm.RSA_2048);
|
const alg = keyAlgorithmToAlgCfg(CertKeyAlgorithm.RSA_2048);
|
||||||
const gatewayServerCaCert = new x509.X509Certificate(orgCAs.gatewayServerCaCertificate);
|
const gatewayServerCaCert = new x509.X509Certificate(orgCAs.gatewayServerCaCertificate);
|
||||||
const rootGatewayCaCert = new x509.X509Certificate(orgCAs.rootGatewayCaCertificate);
|
const rootGatewayCaCert = new x509.X509Certificate(orgCAs.rootGatewayCaCertificate);
|
||||||
@@ -248,12 +251,14 @@ export const gatewayV2ServiceFactory = ({
|
|||||||
extensions: gatewayServerCertExtensions
|
extensions: gatewayServerCertExtensions
|
||||||
});
|
});
|
||||||
|
|
||||||
const proxyCredentials = await proxyService.generateSshCredentialsForGateway({
|
const proxyCredentials = await proxyService.getCredentialsForGateway({
|
||||||
proxyName,
|
proxyName,
|
||||||
orgId
|
orgId
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
// TODO: return gateway ID
|
||||||
|
proxyIp: proxyCredentials.proxyIp,
|
||||||
pki: {
|
pki: {
|
||||||
serverCertificate: gatewayServerCertificate.toString("pem"),
|
serverCertificate: gatewayServerCertificate.toString("pem"),
|
||||||
serverCertificateChain: constructPemChainFromCerts([gatewayServerCaCert, rootGatewayCaCert]),
|
serverCertificateChain: constructPemChainFromCerts([gatewayServerCaCert, rootGatewayCaCert]),
|
||||||
|
|||||||
@@ -587,7 +587,7 @@ export const proxyServiceFactory = ({
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const generateSshCredentialsForGateway = async ({ proxyName, orgId }: { proxyName: string; orgId: string }) => {
|
const getCredentialsForGateway = async ({ proxyName, orgId }: { proxyName: string; orgId: string }) => {
|
||||||
let proxy: TProxies | null;
|
let proxy: TProxies | null;
|
||||||
if (isInstanceProxy(proxyName)) {
|
if (isInstanceProxy(proxyName)) {
|
||||||
proxy = await proxyDAL.findOne({
|
proxy = await proxyDAL.findOne({
|
||||||
@@ -616,12 +616,13 @@ export const proxyServiceFactory = ({
|
|||||||
caPrivateKey: instanceCAs.instanceProxySshServerCaPrivateKey.toString("utf8"),
|
caPrivateKey: instanceCAs.instanceProxySshServerCaPrivateKey.toString("utf8"),
|
||||||
clientPublicKey: proxyClientSshPublicKey,
|
clientPublicKey: proxyClientSshPublicKey,
|
||||||
keyId: `proxy-client-${proxy.id}`,
|
keyId: `proxy-client-${proxy.id}`,
|
||||||
principals: [orgId],
|
principals: ["gateway ID"], // TODO: set gateway ID as principal in SSH certificate
|
||||||
certType: SshCertType.USER,
|
certType: SshCertType.USER,
|
||||||
requestedTtl: "30d"
|
requestedTtl: "30d"
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
proxyIp: proxy.ip,
|
||||||
clientSshCert: proxyClientSshCert.signedPublicKey,
|
clientSshCert: proxyClientSshCert.signedPublicKey,
|
||||||
clientSshPrivateKey: proxyClientSshPrivateKey,
|
clientSshPrivateKey: proxyClientSshPrivateKey,
|
||||||
serverCAPublicKey: instanceCAs.instanceProxySshServerCaPublicKey.toString("utf8")
|
serverCAPublicKey: instanceCAs.instanceProxySshServerCaPublicKey.toString("utf8")
|
||||||
@@ -639,6 +640,7 @@ export const proxyServiceFactory = ({
|
|||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
proxyIp: proxy.ip,
|
||||||
clientSshCert: proxyClientSshCert.signedPublicKey,
|
clientSshCert: proxyClientSshCert.signedPublicKey,
|
||||||
clientSshPrivateKey: proxyClientSshPrivateKey,
|
clientSshPrivateKey: proxyClientSshPrivateKey,
|
||||||
serverCAPublicKey: orgCAs.proxySshServerCaPublicKey.toString("utf8")
|
serverCAPublicKey: orgCAs.proxySshServerCaPublicKey.toString("utf8")
|
||||||
@@ -723,7 +725,7 @@ export const proxyServiceFactory = ({
|
|||||||
caPrivateKey: proxySshServerCaPrivateKey.toString("utf8"),
|
caPrivateKey: proxySshServerCaPrivateKey.toString("utf8"),
|
||||||
clientPublicKey: proxyServerSshPublicKey,
|
clientPublicKey: proxyServerSshPublicKey,
|
||||||
keyId: "proxy-server",
|
keyId: "proxy-server",
|
||||||
principals: [ip],
|
principals: [`${ip}:2222`],
|
||||||
certType: SshCertType.HOST,
|
certType: SshCertType.HOST,
|
||||||
requestedTtl: "30d"
|
requestedTtl: "30d"
|
||||||
});
|
});
|
||||||
@@ -873,6 +875,6 @@ export const proxyServiceFactory = ({
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
registerProxy,
|
registerProxy,
|
||||||
generateSshCredentialsForGateway
|
getCredentialsForGateway
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user