mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 01:26:01 +00:00
SSL connection fix
This commit is contained in:
@@ -6,7 +6,7 @@ const engines = require('../engines');
|
|||||||
const deployDb = require('dbgate-api/src/shell/deployDb');
|
const deployDb = require('dbgate-api/src/shell/deployDb');
|
||||||
const { databaseInfoFromYamlModel, runQueryOnDriver, formatQueryWithoutParams } = require('dbgate-tools');
|
const { databaseInfoFromYamlModel, runQueryOnDriver, formatQueryWithoutParams } = require('dbgate-tools');
|
||||||
const generateDeploySql = require('dbgate-api/src/shell/generateDeploySql');
|
const generateDeploySql = require('dbgate-api/src/shell/generateDeploySql');
|
||||||
const connectUtility = require('dbgate-api/src/utility/connectUtility');
|
const { connectUtility } = require('dbgate-api/src/utility/connectUtility');
|
||||||
|
|
||||||
function checkStructure(
|
function checkStructure(
|
||||||
engine,
|
engine,
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
"start:api:dblogin": "yarn workspace dbgate-api start:dblogin | pino-pretty",
|
"start:api:dblogin": "yarn workspace dbgate-api start:dblogin | pino-pretty",
|
||||||
"start:api:storage": "yarn workspace dbgate-api start:storage | pino-pretty",
|
"start:api:storage": "yarn workspace dbgate-api start:storage | pino-pretty",
|
||||||
"start:api:storage:built": "yarn workspace dbgate-api start:storage:built | pino-pretty",
|
"start:api:storage:built": "yarn workspace dbgate-api start:storage:built | pino-pretty",
|
||||||
|
"start:api:azure": "yarn workspace dbgate-api start:azure | pino-pretty",
|
||||||
"sync:pro": "cd sync && yarn start",
|
"sync:pro": "cd sync && yarn start",
|
||||||
"start:web": "yarn workspace dbgate-web dev",
|
"start:web": "yarn workspace dbgate-web dev",
|
||||||
"start:sqltree": "yarn workspace dbgate-sqltree start",
|
"start:sqltree": "yarn workspace dbgate-sqltree start",
|
||||||
|
|||||||
@@ -74,6 +74,7 @@
|
|||||||
"start:storage": "env-cmd -f env/storage/.env node src/index.js --listen-api",
|
"start:storage": "env-cmd -f env/storage/.env node src/index.js --listen-api",
|
||||||
"start:storage:built": "env-cmd -f env/storage/.env cross-env DEVMODE= BUILTWEBMODE=1 node dist/bundle.js --listen-api",
|
"start:storage:built": "env-cmd -f env/storage/.env cross-env DEVMODE= BUILTWEBMODE=1 node dist/bundle.js --listen-api",
|
||||||
"start:singleconn": "env-cmd node src/index.js --server localhost --user root --port 3307 --engine mysql@dbgate-plugin-mysql --password test --listen-api",
|
"start:singleconn": "env-cmd node src/index.js --server localhost --user root --port 3307 --engine mysql@dbgate-plugin-mysql --password test --listen-api",
|
||||||
|
"start:azure": "env-cmd -f env/azure/.env node src/index.js --listen-api",
|
||||||
"ts": "tsc",
|
"ts": "tsc",
|
||||||
"build": "webpack",
|
"build": "webpack",
|
||||||
"build:doc": "jsdoc2md --template doctpl.hbs ./src/shell/* > ../../../dbgate.github.io/_docs/apidoc.md"
|
"build:doc": "jsdoc2md --template doctpl.hbs ./src/shell/* > ../../../dbgate.github.io/_docs/apidoc.md"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
const childProcessChecker = require('../utility/childProcessChecker');
|
const childProcessChecker = require('../utility/childProcessChecker');
|
||||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
const requireEngineDriver = require('../utility/requireEngineDriver');
|
||||||
const connectUtility = require('../utility/connectUtility');
|
const { connectUtility } = require('../utility/connectUtility');
|
||||||
const { handleProcessCommunication } = require('../utility/processComm');
|
const { handleProcessCommunication } = require('../utility/processComm');
|
||||||
const { pickSafeConnectionInfo } = require('../utility/crypting');
|
const { pickSafeConnectionInfo } = require('../utility/crypting');
|
||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const {
|
|||||||
extractErrorLogData,
|
extractErrorLogData,
|
||||||
} = require('dbgate-tools');
|
} = require('dbgate-tools');
|
||||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
const requireEngineDriver = require('../utility/requireEngineDriver');
|
||||||
const connectUtility = require('../utility/connectUtility');
|
const { connectUtility } = require('../utility/connectUtility');
|
||||||
const { handleProcessCommunication } = require('../utility/processComm');
|
const { handleProcessCommunication } = require('../utility/processComm');
|
||||||
const { SqlGenerator } = require('dbgate-tools');
|
const { SqlGenerator } = require('dbgate-tools');
|
||||||
const generateDeploySql = require('../shell/generateDeploySql');
|
const generateDeploySql = require('../shell/generateDeploySql');
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ const stableStringify = require('json-stable-stringify');
|
|||||||
const { extractBoolSettingsValue, extractIntSettingsValue, getLogger, extractErrorLogData } = require('dbgate-tools');
|
const { extractBoolSettingsValue, extractIntSettingsValue, getLogger, extractErrorLogData } = require('dbgate-tools');
|
||||||
const childProcessChecker = require('../utility/childProcessChecker');
|
const childProcessChecker = require('../utility/childProcessChecker');
|
||||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
const requireEngineDriver = require('../utility/requireEngineDriver');
|
||||||
const connectUtility = require('../utility/connectUtility');
|
const { connectUtility } = require('../utility/connectUtility');
|
||||||
const { handleProcessCommunication } = require('../utility/processComm');
|
const { handleProcessCommunication } = require('../utility/processComm');
|
||||||
const logger = getLogger('srvconnProcess');
|
const logger = getLogger('srvconnProcess');
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ const { splitQuery } = require('dbgate-query-splitter');
|
|||||||
const { jsldir } = require('../utility/directories');
|
const { jsldir } = require('../utility/directories');
|
||||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
const requireEngineDriver = require('../utility/requireEngineDriver');
|
||||||
const { decryptConnection } = require('../utility/crypting');
|
const { decryptConnection } = require('../utility/crypting');
|
||||||
const connectUtility = require('../utility/connectUtility');
|
const { connectUtility } = require('../utility/connectUtility');
|
||||||
const { handleProcessCommunication } = require('../utility/processComm');
|
const { handleProcessCommunication } = require('../utility/processComm');
|
||||||
const { getLogger, extractIntSettingsValue, extractBoolSettingsValue } = require('dbgate-tools');
|
const { getLogger, extractIntSettingsValue, extractBoolSettingsValue } = require('dbgate-tools');
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ const stream = require('stream');
|
|||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { quoteFullName, fullNameToString, getLogger } = require('dbgate-tools');
|
const { quoteFullName, fullNameToString, getLogger } = require('dbgate-tools');
|
||||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
const requireEngineDriver = require('../utility/requireEngineDriver');
|
||||||
const connectUtility = require('../utility/connectUtility');
|
const { connectUtility } = require('../utility/connectUtility');
|
||||||
const logger = getLogger('dataDuplicator');
|
const logger = getLogger('dataDuplicator');
|
||||||
const { DataDuplicator } = require('dbgate-datalib');
|
const { DataDuplicator } = require('dbgate-datalib');
|
||||||
const copyStream = require('./copyStream');
|
const copyStream = require('./copyStream');
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
const generateDeploySql = require('./generateDeploySql');
|
const generateDeploySql = require('./generateDeploySql');
|
||||||
const executeQuery = require('./executeQuery');
|
const executeQuery = require('./executeQuery');
|
||||||
const { ScriptDrivedDeployer } = require('dbgate-datalib');
|
const { ScriptDrivedDeployer } = require('dbgate-datalib');
|
||||||
const connectUtility = require('../utility/connectUtility');
|
const { connectUtility } = require('../utility/connectUtility');
|
||||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
const requireEngineDriver = require('../utility/requireEngineDriver');
|
||||||
const loadModelFolder = require('../utility/loadModelFolder');
|
const loadModelFolder = require('../utility/loadModelFolder');
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
const executeQuery = require('./executeQuery');
|
const executeQuery = require('./executeQuery');
|
||||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
const requireEngineDriver = require('../utility/requireEngineDriver');
|
||||||
const connectUtility = require('../utility/connectUtility');
|
const { connectUtility } = require('../utility/connectUtility');
|
||||||
const { getLogger, extendDatabaseInfo } = require('dbgate-tools');
|
const { getLogger, extendDatabaseInfo } = require('dbgate-tools');
|
||||||
|
|
||||||
const logger = getLogger('dropAllDbObjects');
|
const logger = getLogger('dropAllDbObjects');
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
const requireEngineDriver = require('../utility/requireEngineDriver');
|
||||||
const connectUtility = require('../utility/connectUtility');
|
const { connectUtility } = require('../utility/connectUtility');
|
||||||
const { getLogger } = require('dbgate-tools');
|
const { getLogger } = require('dbgate-tools');
|
||||||
|
|
||||||
const logger = getLogger('dumpDb');
|
const logger = getLogger('dumpDb');
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
const requireEngineDriver = require('../utility/requireEngineDriver');
|
||||||
const connectUtility = require('../utility/connectUtility');
|
const { connectUtility } = require('../utility/connectUtility');
|
||||||
const { getLogger, getLimitedQuery } = require('dbgate-tools');
|
const { getLogger, getLimitedQuery } = require('dbgate-tools');
|
||||||
|
|
||||||
const logger = getLogger('execQuery');
|
const logger = getLogger('execQuery');
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ const {
|
|||||||
} = require('dbgate-tools');
|
} = require('dbgate-tools');
|
||||||
const importDbModel = require('../utility/importDbModel');
|
const importDbModel = require('../utility/importDbModel');
|
||||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
const requireEngineDriver = require('../utility/requireEngineDriver');
|
||||||
const connectUtility = require('../utility/connectUtility');
|
const { connectUtility } = require('../utility/connectUtility');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates query for deploying model into database
|
* Generates query for deploying model into database
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
const requireEngineDriver = require('../utility/requireEngineDriver');
|
||||||
const connectUtility = require('../utility/connectUtility');
|
const { connectUtility } = require('../utility/connectUtility');
|
||||||
const { splitQueryStream } = require('dbgate-query-splitter/lib/splitQueryStream');
|
const { splitQueryStream } = require('dbgate-query-splitter/lib/splitQueryStream');
|
||||||
const download = require('./download');
|
const download = require('./download');
|
||||||
const stream = require('stream');
|
const stream = require('stream');
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
const requireEngineDriver = require('../utility/requireEngineDriver');
|
||||||
const connectUtility = require('../utility/connectUtility');
|
const { connectUtility } = require('../utility/connectUtility');
|
||||||
const { getLogger } = require('dbgate-tools');
|
const { getLogger } = require('dbgate-tools');
|
||||||
const exportDbModel = require('../utility/exportDbModel');
|
const exportDbModel = require('../utility/exportDbModel');
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
const requireEngineDriver = require('../utility/requireEngineDriver');
|
||||||
const connectUtility = require('../utility/connectUtility');
|
const { connectUtility } = require('../utility/connectUtility');
|
||||||
const { getLogger } = require('dbgate-tools');
|
const { getLogger } = require('dbgate-tools');
|
||||||
const logger = getLogger('queryReader');
|
const logger = getLogger('queryReader');
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
const { quoteFullName, fullNameToString, getLogger } = require('dbgate-tools');
|
const { quoteFullName, fullNameToString, getLogger } = require('dbgate-tools');
|
||||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
const requireEngineDriver = require('../utility/requireEngineDriver');
|
||||||
const connectUtility = require('../utility/connectUtility');
|
const { connectUtility } = require('../utility/connectUtility');
|
||||||
const logger = getLogger('tableReader');
|
const logger = getLogger('tableReader');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
const { fullNameToString, getLogger } = require('dbgate-tools');
|
const { fullNameToString, getLogger } = require('dbgate-tools');
|
||||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
const requireEngineDriver = require('../utility/requireEngineDriver');
|
||||||
const connectUtility = require('../utility/connectUtility');
|
const { connectUtility } = require('../utility/connectUtility');
|
||||||
const logger = getLogger('tableWriter');
|
const logger = getLogger('tableWriter');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -47,6 +47,47 @@ async function loadConnection(driver, storedConnection, connectionMode) {
|
|||||||
return storedConnection;
|
return storedConnection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function extractConnectionSslParams(connection) {
|
||||||
|
/** @type {any} */
|
||||||
|
let ssl = undefined;
|
||||||
|
if (connection.useSsl) {
|
||||||
|
ssl = {};
|
||||||
|
|
||||||
|
if (connection.sslCaFile) {
|
||||||
|
ssl.ca = await fs.readFile(connection.sslCaFile);
|
||||||
|
ssl.sslCaFile = connection.sslCaFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (connection.sslCertFile) {
|
||||||
|
ssl.cert = await fs.readFile(connection.sslCertFile);
|
||||||
|
ssl.sslCertFile = connection.sslCertFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (connection.sslKeyFile) {
|
||||||
|
ssl.key = await fs.readFile(connection.sslKeyFile);
|
||||||
|
ssl.sslKeyFile = connection.sslKeyFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (connection.sslCertFilePassword) {
|
||||||
|
ssl.password = connection.sslCertFilePassword;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ssl.key && !ssl.ca && !ssl.cert) {
|
||||||
|
// TODO: provide this as an option in settings
|
||||||
|
// or per-connection as 'reject self-signed certs'
|
||||||
|
// How it works:
|
||||||
|
// if false, cert can be self-signed
|
||||||
|
// if true, has to be from a public CA
|
||||||
|
// Heroku certs are self-signed.
|
||||||
|
// if you provide ca/cert/key files, it overrides this
|
||||||
|
ssl.rejectUnauthorized = false;
|
||||||
|
} else {
|
||||||
|
ssl.rejectUnauthorized = connection.sslRejectUnauthorized;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ssl;
|
||||||
|
}
|
||||||
|
|
||||||
async function connectUtility(driver, storedConnection, connectionMode, additionalOptions = null) {
|
async function connectUtility(driver, storedConnection, connectionMode, additionalOptions = null) {
|
||||||
const connectionLoaded = await loadConnection(driver, storedConnection, connectionMode);
|
const connectionLoaded = await loadConnection(driver, storedConnection, connectionMode);
|
||||||
|
|
||||||
@@ -67,45 +108,13 @@ async function connectUtility(driver, storedConnection, connectionMode, addition
|
|||||||
connection.port = tunnel.localPort;
|
connection.port = tunnel.localPort;
|
||||||
}
|
}
|
||||||
|
|
||||||
// SSL functionality - copied from https://github.com/beekeeper-studio/beekeeper-studio
|
connection.ssl = await extractConnectionSslParams(connection);
|
||||||
if (connection.useSsl) {
|
|
||||||
connection.ssl = {};
|
|
||||||
|
|
||||||
if (connection.sslCaFile) {
|
|
||||||
connection.ssl.ca = await fs.readFile(connection.sslCaFile);
|
|
||||||
connection.ssl.sslCaFile = connection.sslCaFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (connection.sslCertFile) {
|
|
||||||
connection.ssl.cert = await fs.readFile(connection.sslCertFile);
|
|
||||||
connection.ssl.sslCertFile = connection.sslCertFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (connection.sslKeyFile) {
|
|
||||||
connection.ssl.key = await fs.readFile(connection.sslKeyFile);
|
|
||||||
connection.ssl.sslKeyFile = connection.sslKeyFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (connection.sslCertFilePassword) {
|
|
||||||
connection.ssl.password = connection.sslCertFilePassword;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!connection.ssl.key && !connection.ssl.ca && !connection.ssl.cert) {
|
|
||||||
// TODO: provide this as an option in settings
|
|
||||||
// or per-connection as 'reject self-signed certs'
|
|
||||||
// How it works:
|
|
||||||
// if false, cert can be self-signed
|
|
||||||
// if true, has to be from a public CA
|
|
||||||
// Heroku certs are self-signed.
|
|
||||||
// if you provide ca/cert/key files, it overrides this
|
|
||||||
connection.ssl.rejectUnauthorized = false;
|
|
||||||
} else {
|
|
||||||
connection.ssl.rejectUnauthorized = connection.sslRejectUnauthorized;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const conn = await driver.connect({ ...connection, ...additionalOptions });
|
const conn = await driver.connect({ ...connection, ...additionalOptions });
|
||||||
return conn;
|
return conn;
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = connectUtility;
|
module.exports = {
|
||||||
|
extractConnectionSslParams,
|
||||||
|
connectUtility,
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user