From 644cdf5a673ab6ebc9f1d91cc0af750f6a0ac8de Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Sat, 3 Feb 2024 15:16:43 -0800 Subject: [PATCH] Add knex SSL configuration support --- backend/src/db/instance.ts | 18 +++++++++++++++--- backend/src/lib/config/env.ts | 3 ++- backend/src/main.ts | 6 +++++- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/backend/src/db/instance.ts b/backend/src/db/instance.ts index 1eb54c136..c379c24a5 100644 --- a/backend/src/db/instance.ts +++ b/backend/src/db/instance.ts @@ -1,11 +1,23 @@ import knex from "knex"; export type TDbClient = ReturnType; -export const initDbConnection = (dbConnectionUri: string) => { +export const initDbConnection = ({ + dbConnectionUri, + dbRootCert +}: { + dbConnectionUri: string; + dbRootCert?: string; +}) => { const db = knex({ client: "pg", - connection: dbConnectionUri + connection: { + connectionString: dbConnectionUri, + ssl: dbRootCert ? { + rejectUnauthorized: true, + ca: Buffer.from(dbRootCert, 'base64').toString('ascii') + } : false + } }); return db; -}; +}; \ No newline at end of file diff --git a/backend/src/lib/config/env.ts b/backend/src/lib/config/env.ts index 25d985f41..1b9f9c631 100644 --- a/backend/src/lib/config/env.ts +++ b/backend/src/lib/config/env.ts @@ -15,7 +15,8 @@ const envSchema = z PORT: z.coerce.number().default(4000), REDIS_URL: zpStr(z.string()), HOST: zpStr(z.string().default("localhost")), - DB_CONNECTION_URI: zpStr(z.string().describe("Postgres database conntection string")), + DB_CONNECTION_URI: zpStr(z.string().describe("Postgres database connection string")), + DB_ROOT_CERT: zpStr(z.string().describe("Postgres database base64-encoded CA cert").optional()), NODE_ENV: z.enum(["development", "test", "production"]).default("production"), SALT_ROUNDS: z.coerce.number().default(10), // TODO(akhilmhdh): will be changed to one diff --git a/backend/src/main.ts b/backend/src/main.ts index 4891157ad..07499f479 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -12,7 +12,11 @@ dotenv.config(); const run = async () => { const logger = await initLogger(); const appCfg = initEnvConfig(logger); - const db = initDbConnection(appCfg.DB_CONNECTION_URI); + const db = initDbConnection({ + dbConnectionUri: appCfg.DB_CONNECTION_URI, + dbRootCert: appCfg.DB_ROOT_CERT + }); + const smtp = smtpServiceFactory(formatSmtpConfig()); const queue = queueServiceFactory(appCfg.REDIS_URL);