From 4d534484650add40005674bc09dc127f41706353 Mon Sep 17 00:00:00 2001 From: Donatas Kirda Date: Sun, 11 May 2025 21:55:24 +0300 Subject: [PATCH] Add: Optional DB SSH --- src/lib/db.server.js | 66 +++++++++++++++++++++++++++++--------------- src/types/env.ts | 1 + 2 files changed, 44 insertions(+), 23 deletions(-) diff --git a/src/lib/db.server.js b/src/lib/db.server.js index 860d601..f1db2f3 100644 --- a/src/lib/db.server.js +++ b/src/lib/db.server.js @@ -2,30 +2,50 @@ import { env } from '$lib/env'; import postgres from 'postgres'; import ssh2 from 'ssh2'; -// @ts-ignore -export const sql = postgres( - { - host: env.PG_HOST, - port: parseInt(env.PG_PORT), - database: env.PG_DATABASE, - username: env.PG_USERNAME, - password: env.PG_PASSWORD, - // @ts-ignore - socket: ({ host: [host], port: [port] }) => new Promise((resolve, reject) => { - const ssh = new ssh2.Client(); - ssh - .on('error', reject) - .on('ready', () => - ssh.forwardOut('127.0.0.1', 12345, host, port, - (err, socket) => err ? reject(err) : resolve(socket) +/** + * @returns {postgres.Options<{}>} + */ +function getPostreConfig() { + if (env.SSH_ENABLE == 'true') { + // with ssh + return { + host: env.PG_HOST, + port: parseInt(env.PG_PORT), + database: env.PG_DATABASE, + username: env.PG_USERNAME, + password: env.PG_PASSWORD, + // @ts-ignore + socket: ({ host: [host], port: [port] }) => new Promise((resolve, reject) => { + const ssh = new ssh2.Client(); + ssh + .on('error', reject) + .on('ready', () => + ssh.forwardOut('127.0.0.1', 12345, host, port, + (err, socket) => err ? reject(err) : resolve(socket) + ) ) - ) - .connect({ - host: env.SSH_HOST, - port: parseInt(env.SSH_PORT), - username: env.SSH_USERNAME, - password: env.SSH_PASSWORD + .connect({ + host: env.SSH_HOST, + port: parseInt(env.SSH_PORT), + username: env.SSH_USERNAME, + password: env.SSH_PASSWORD + }) }) - }) + } + + } else { + // no ssh + return { + host: env.PG_HOST, + port: parseInt(env.PG_PORT), + database: env.PG_DATABASE, + username: env.PG_USERNAME, + password: env.PG_PASSWORD, + } } +} + + +export const sql = postgres( + getPostreConfig() ); diff --git a/src/types/env.ts b/src/types/env.ts index 86dcf69..eddd03d 100644 --- a/src/types/env.ts +++ b/src/types/env.ts @@ -5,6 +5,7 @@ export type Env = { PG_PORT: string, PG_DATABASE: string, + SSH_ENABLE: string, SSH_HOST: string, SSH_PORT: string, SSH_USERNAME: string,