fixed test connection for electron + better logging

This commit is contained in:
Jan Prochazka 2021-12-30 09:57:24 +01:00
parent 15de3600c3
commit 88469e7366
5 changed files with 37 additions and 28 deletions

View File

@ -39,7 +39,7 @@ function getDatabaseFileLabel(databaseFile) {
function getPortalCollections() {
if (process.env.CONNECTIONS) {
return _.compact(process.env.CONNECTIONS.split(',')).map(id => ({
const connections = _.compact(process.env.CONNECTIONS.split(',')).map(id => ({
_id: id,
engine: process.env[`ENGINE_${id}`],
server: process.env[`SERVER_${id}`],
@ -53,6 +53,14 @@ function getPortalCollections() {
singleDatabase: !!process.env[`DATABASE_${id}`],
displayName: process.env[`LABEL_${id}`],
}));
const noengine = connections.filter(x => !x.engine);
if (noengine.length > 0) {
console.log(
'Warning: Invalid CONNECTIONS configutation, missing ENGINE for connection ID:',
noengine.map(x => x._id)
);
}
return connections;
}
const args = getNamedArgs();
@ -134,11 +142,8 @@ module.exports = {
return portalConnections || this.datastore.find();
},
test_meta: {
method: 'post',
raw: true,
},
test(req, res) {
test_meta: true,
test(connection) {
const subprocess = fork(global['API_PACKAGE'] || process.argv[1], [
'--is-forked-api',
'--start-process',
@ -146,15 +151,17 @@ module.exports = {
...processArgs.getPassArgs(),
// ...process.argv.slice(3),
]);
subprocess.on('message', resp => {
if (handleProcessCommunication(resp, subprocess)) return;
// @ts-ignore
const { msgtype } = resp;
if (msgtype == 'connected' || msgtype == 'error') {
res.json(resp);
}
subprocess.send(connection);
return new Promise(resolve => {
subprocess.on('message', resp => {
if (handleProcessCommunication(resp, subprocess)) return;
// @ts-ignore
const { msgtype } = resp;
if (msgtype == 'connected' || msgtype == 'error') {
resolve(resp);
}
});
});
subprocess.send(req.body);
},
save_meta: true,

View File

@ -2,17 +2,9 @@ const childProcessChecker = require('../utility/childProcessChecker');
const requireEngineDriver = require('../utility/requireEngineDriver');
const connectUtility = require('../utility/connectUtility');
const { handleProcessCommunication } = require('../utility/processComm');
const { pickSafeConnectionInfo } = require('../utility/crypting');
const _ = require('lodash');
function pickSafeConnectionInfo(connection) {
return _.mapValues(connection, (v, k) => {
if (k == 'engine' || k == 'port' || k == 'authType' || k == 'sshMode' || k == 'passwordMode') return v;
if (v === null || v === true || v === false) return v;
if (v) return '***';
return undefined;
});
}
const formatErrorDetail = (e, connection) => `${e.stack}
Error JSON: ${JSON.stringify(e, undefined, 2)}

View File

@ -2,6 +2,7 @@ const crypto = require('crypto');
const simpleEncryptor = require('simple-encryptor');
const fs = require('fs');
const path = require('path');
const _ = require('lodash');
const { datadir } = require('./directories');
@ -81,8 +82,18 @@ function decryptConnection(connection) {
return connection;
}
function pickSafeConnectionInfo(connection) {
return _.mapValues(connection, (v, k) => {
if (k == 'engine' || k == 'port' || k == 'authType' || k == 'sshMode' || k == 'passwordMode') return v;
if (v === null || v === true || v === false) return v;
if (v) return '***';
return undefined;
});
}
module.exports = {
loadEncryptionKey,
encryptConnection,
decryptConnection,
pickSafeConnectionInfo,
};

View File

@ -1,5 +1,6 @@
const _ = require('lodash');
const requirePlugin = require('../shell/requirePlugin');
const { pickSafeConnectionInfo } = require('./crypting');
/** @returns {import('dbgate-types').EngineDriver} */
function requireEngineDriver(connection) {
@ -10,14 +11,14 @@ function requireEngineDriver(connection) {
engine = connection.engine;
}
if (!engine) {
throw new Error('Could not get driver from connection');
throw new Error(`Could not get driver from connection ${JSON.stringify(pickSafeConnectionInfo(connection))}`);
}
if (engine.includes('@')) {
const [shortName, packageName] = engine.split('@');
const plugin = requirePlugin(packageName);
return plugin.drivers.find(x => x.engine == engine);
}
throw new Error(`Could not found engine driver ${engine}`);
throw new Error(`Could not find engine driver ${engine}`);
}
module.exports = requireEngineDriver;

View File

@ -20,7 +20,7 @@
import { extensions } from '../stores';
import _ from 'lodash';
import { getDatabaseFileLabel } from '../utility/getConnectionLabel';
import { apiCall } from '../utility/api';
import { apiCall } from '../utility/api';
export let connection;
@ -73,7 +73,6 @@ import { apiCall } from '../utility/api';
apiCall('connections/save', connection);
closeCurrentModal();
}
</script>
<FormProviderCore template={FormFieldTemplateLarge} {values}>
@ -156,5 +155,4 @@ import { apiCall } from '../utility/api';
.error-result {
white-space: normal;
}
</style>