dbgate-api 5.3.3 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -27,6 +27,8 @@ const loadDatabase = require('./loadDatabase');
27
27
  const generateModelSql = require('./generateModelSql');
28
28
  const modifyJsonLinesReader = require('./modifyJsonLinesReader');
29
29
  const dataDuplicator = require('./dataDuplicator');
30
+ const dbModelToJson = require('./dbModelToJson');
31
+ const jsonToDbModel = require('./jsonToDbModel');
30
32
 
31
33
  const dbgateApi = {
32
34
  queryReader,
@@ -57,6 +59,8 @@ const dbgateApi = {
57
59
  generateModelSql,
58
60
  modifyJsonLinesReader,
59
61
  dataDuplicator,
62
+ dbModelToJson,
63
+ jsonToDbModel,
60
64
  };
61
65
 
62
66
  requirePlugin.initializeDbgateApi(dbgateApi);
@@ -0,0 +1,9 @@
1
+ const exportDbModel = require('../utility/exportDbModel');
2
+ const fs = require('fs');
3
+
4
+ async function jsonToDbModel({ modelFile, outputDir }) {
5
+ const dbInfo = JSON.parse(fs.readFileSync(modelFile, 'utf-8'));
6
+ await exportDbModel(dbInfo, outputDir);
7
+ }
8
+
9
+ module.exports = jsonToDbModel;
@@ -61,10 +61,13 @@ class ParseStream extends stream.Transform {
61
61
  if (update.document) {
62
62
  obj = update.document;
63
63
  } else {
64
- obj = {
65
- ...obj,
66
- ...update.fields,
67
- };
64
+ obj = _.omitBy(
65
+ {
66
+ ...obj,
67
+ ...update.fields,
68
+ },
69
+ (v, k) => v.$$undefined$$
70
+ );
68
71
  }
69
72
  }
70
73
 
@@ -3,6 +3,7 @@ const fs = require('fs');
3
3
  const { pluginsdir, packagedPluginsDir, getPluginBackendPath } = require('../utility/directories');
4
4
  const nativeModules = require('../nativeModules');
5
5
  const platformInfo = require('../utility/platformInfo');
6
+ const authProxy = require('../utility/authProxy');
6
7
  const { getLogger } = require('dbgate-tools');
7
8
  const logger = getLogger('requirePlugin');
8
9
 
@@ -11,6 +12,8 @@ const loadedPlugins = {};
11
12
  const dbgateEnv = {
12
13
  dbgateApi: null,
13
14
  nativeModules,
15
+ platformInfo,
16
+ authProxy,
14
17
  };
15
18
  function requirePlugin(packageName, requiredPlugin = null) {
16
19
  if (!packageName) throw new Error('Missing packageName in plugin');
@@ -0,0 +1,20 @@
1
+ function isAuthProxySupported() {
2
+ return false;
3
+ }
4
+
5
+ async function authProxyGetRedirectUrl(options) {
6
+ return null;
7
+ }
8
+
9
+ async function authProxyGetTokenFromCode(options) {
10
+ return null;
11
+ }
12
+
13
+ function startTokenChecking(sid, callback) {}
14
+
15
+ module.exports = {
16
+ isAuthProxySupported,
17
+ authProxyGetRedirectUrl,
18
+ authProxyGetTokenFromCode,
19
+ startTokenChecking,
20
+ };
@@ -0,0 +1,10 @@
1
+ function checkLicense() {
2
+ return {
3
+ status: 'ok',
4
+ type: 'community',
5
+ };
6
+ }
7
+
8
+ module.exports = {
9
+ checkLicense,
10
+ };
@@ -1,72 +1,81 @@
1
1
  const { compilePermissions, testPermission } = require('dbgate-tools');
2
2
  const _ = require('lodash');
3
+ const { getAuthProviderFromReq } = require('../auth/authProvider');
3
4
 
4
- const userPermissions = {};
5
+ const cachedPermissions = {};
5
6
 
6
7
  function hasPermission(tested, req) {
7
8
  if (!req) {
8
9
  // request object not available, allow all
9
10
  return true;
10
11
  }
11
- const { user } = (req && req.auth) || {};
12
- const { login } = (process.env.OAUTH_PERMISSIONS && req && req.user) || {};
13
- const key = user || login || '';
14
- const logins = getLogins();
15
12
 
16
- if (!userPermissions[key]) {
17
- if (logins) {
18
- const login = logins.find(x => x.login == user);
19
- userPermissions[key] = compilePermissions(login ? login.permissions : null);
20
- } else {
21
- userPermissions[key] = compilePermissions(process.env.PERMISSIONS);
22
- }
13
+ const permissions = getAuthProviderFromReq(req).getCurrentPermissions(req);
14
+
15
+ if (!cachedPermissions[permissions]) {
16
+ cachedPermissions[permissions] = compilePermissions(permissions);
23
17
  }
24
- return testPermission(tested, userPermissions[key]);
18
+
19
+ return testPermission(tested, cachedPermissions[permissions]);
20
+
21
+ // const { user } = (req && req.auth) || {};
22
+ // const { login } = (process.env.OAUTH_PERMISSIONS && req && req.user) || {};
23
+ // const key = user || login || '';
24
+ // const logins = getLogins();
25
+
26
+ // if (!userPermissions[key]) {
27
+ // if (logins) {
28
+ // const login = logins.find(x => x.login == user);
29
+ // userPermissions[key] = compilePermissions(login ? login.permissions : null);
30
+ // } else {
31
+ // userPermissions[key] = compilePermissions(process.env.PERMISSIONS);
32
+ // }
33
+ // }
34
+ // return testPermission(tested, userPermissions[key]);
25
35
  }
26
36
 
27
- let loginsCache = null;
28
- let loginsLoaded = false;
37
+ // let loginsCache = null;
38
+ // let loginsLoaded = false;
29
39
 
30
- function getLogins() {
31
- if (loginsLoaded) {
32
- return loginsCache;
33
- }
40
+ // function getLogins() {
41
+ // if (loginsLoaded) {
42
+ // return loginsCache;
43
+ // }
34
44
 
35
- const res = [];
36
- if (process.env.LOGIN && process.env.PASSWORD) {
37
- res.push({
38
- login: process.env.LOGIN,
39
- password: process.env.PASSWORD,
40
- permissions: process.env.PERMISSIONS,
41
- });
42
- }
43
- if (process.env.LOGINS) {
44
- const logins = _.compact(process.env.LOGINS.split(',').map(x => x.trim()));
45
- for (const login of logins) {
46
- const password = process.env[`LOGIN_PASSWORD_${login}`];
47
- const permissions = process.env[`LOGIN_PERMISSIONS_${login}`];
48
- if (password) {
49
- res.push({
50
- login,
51
- password,
52
- permissions,
53
- });
54
- }
55
- }
56
- }
57
- else if (process.env.OAUTH_PERMISSIONS) {
58
- const login_permission_keys = Object.keys(process.env).filter((key) => _.startsWith(key, 'LOGIN_PERMISSIONS_'))
59
- for (const permissions_key of login_permission_keys) {
60
- const login = permissions_key.replace('LOGIN_PERMISSIONS_', '');
61
- const permissions = process.env[permissions_key];
62
- userPermissions[login] = compilePermissions(permissions);
63
- }
64
- }
45
+ // const res = [];
46
+ // if (process.env.LOGIN && process.env.PASSWORD) {
47
+ // res.push({
48
+ // login: process.env.LOGIN,
49
+ // password: process.env.PASSWORD,
50
+ // permissions: process.env.PERMISSIONS,
51
+ // });
52
+ // }
53
+ // if (process.env.LOGINS) {
54
+ // const logins = _.compact(process.env.LOGINS.split(',').map(x => x.trim()));
55
+ // for (const login of logins) {
56
+ // const password = process.env[`LOGIN_PASSWORD_${login}`];
57
+ // const permissions = process.env[`LOGIN_PERMISSIONS_${login}`];
58
+ // if (password) {
59
+ // res.push({
60
+ // login,
61
+ // password,
62
+ // permissions,
63
+ // });
64
+ // }
65
+ // }
66
+ // } else if (process.env.OAUTH_PERMISSIONS) {
67
+ // const login_permission_keys = Object.keys(process.env).filter(key => _.startsWith(key, 'LOGIN_PERMISSIONS_'));
68
+ // for (const permissions_key of login_permission_keys) {
69
+ // const login = permissions_key.replace('LOGIN_PERMISSIONS_', '');
70
+ // const permissions = process.env[permissions_key];
71
+ // userPermissions[login] = compilePermissions(permissions);
72
+ // }
73
+ // }
65
74
 
66
- loginsCache = res.length > 0 ? res : null;
67
- loginsLoaded = true;
68
- return loginsCache;
69
- }
75
+ // loginsCache = res.length > 0 ? res : null;
76
+ // loginsLoaded = true;
77
+ // return loginsCache;
78
+ // }
70
79
 
71
80
  function connectionHasPermission(connection, req) {
72
81
  if (!connection) {
@@ -87,7 +96,6 @@ function testConnectionPermission(connection, req) {
87
96
 
88
97
  module.exports = {
89
98
  hasPermission,
90
- getLogins,
91
99
  connectionHasPermission,
92
100
  testConnectionPermission,
93
101
  };
@@ -31,6 +31,9 @@ module.exports = {
31
31
  electronSender.send(message, data == null ? null : data);
32
32
  }
33
33
  for (const strmid in sseResponses) {
34
+ if (data?.strmid && data?.strmid != strmid) {
35
+ continue;
36
+ }
34
37
  let skipThisStream = false;
35
38
  if (sseResponses[strmid].filter) {
36
39
  for (const key in sseResponses[strmid].filter) {
@@ -47,7 +50,7 @@ module.exports = {
47
50
  }
48
51
 
49
52
  sseResponses[strmid].response?.write(
50
- `event: ${message}\ndata: ${stableStringify(data == null ? null : data)}\n\n`
53
+ `event: ${message}\ndata: ${stableStringify(data == null ? null : _.omit(data, ['strmid']))}\n\n`
51
54
  );
52
55
  }
53
56
  },
@@ -67,7 +67,7 @@ module.exports = function useController(app, electron, route, controller) {
67
67
  }
68
68
 
69
69
  if (raw) {
70
- router[method](routeAction, controller[key]);
70
+ router[method](routeAction, (req, res) => controller[key](req, res));
71
71
  } else {
72
72
  router[method](routeAction, async (req, res) => {
73
73
  // if (controller._init && !controller._init_called) {
package/webpack.config.js CHANGED
@@ -47,6 +47,8 @@ var config = {
47
47
  ],
48
48
  externals: {
49
49
  'better-sqlite3': 'commonjs better-sqlite3',
50
+ 'oracledb': 'commonjs oracledb',
51
+ 'msnodesqlv8': 'commonjs msnodesqlv8',
50
52
  },
51
53
  };
52
54