dbgate-api-premium 6.8.2 → 7.0.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.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dbgate-api-premium",
3
3
  "main": "src/index.js",
4
- "version": "6.8.2",
4
+ "version": "7.0.0",
5
5
  "homepage": "https://dbgate.org/",
6
6
  "repository": {
7
7
  "type": "git",
@@ -30,10 +30,10 @@
30
30
  "compare-versions": "^3.6.0",
31
31
  "cors": "^2.8.5",
32
32
  "cross-env": "^6.0.3",
33
- "dbgate-datalib": "^6.8.2",
33
+ "dbgate-datalib": "^7.0.0",
34
34
  "dbgate-query-splitter": "^4.11.9",
35
- "dbgate-sqltree": "^6.8.2",
36
- "dbgate-tools": "^6.8.2",
35
+ "dbgate-sqltree": "^7.0.0",
36
+ "dbgate-tools": "^7.0.0",
37
37
  "debug": "^4.3.4",
38
38
  "diff": "^5.0.0",
39
39
  "diff2html": "^3.4.13",
@@ -87,7 +87,7 @@
87
87
  "devDependencies": {
88
88
  "@types/fs-extra": "^9.0.11",
89
89
  "@types/lodash": "^4.14.149",
90
- "dbgate-types": "^6.8.2",
90
+ "dbgate-types": "^7.0.0",
91
91
  "env-cmd": "^10.1.0",
92
92
  "jsdoc-to-markdown": "^9.0.5",
93
93
  "node-loader": "^1.0.2",
@@ -393,6 +393,12 @@ module.exports = {
393
393
  return null;
394
394
  },
395
395
 
396
+ dispatchRedisKeysChanged_meta: true,
397
+ dispatchRedisKeysChanged({ conid, database }) {
398
+ socket.emit(`redis-keys-changed-${conid}-${database}`);
399
+ return null;
400
+ },
401
+
396
402
  loadKeys_meta: true,
397
403
  async loadKeys({ conid, database, root, filter, limit }, req) {
398
404
  await testConnectionPermission(conid, req);
@@ -494,6 +500,20 @@ module.exports = {
494
500
  return res.result || null;
495
501
  },
496
502
 
503
+ multiCallMethod_meta: true,
504
+ async multiCallMethod({ conid, database, callList }, req) {
505
+ await testConnectionPermission(conid, req);
506
+
507
+ const opened = await this.ensureOpened(conid, database);
508
+ const res = await this.sendRequest(opened, { msgtype: 'multiCallMethod', callList });
509
+ if (res.errorMessage) {
510
+ return {
511
+ errorMessage: res.errorMessage,
512
+ };
513
+ }
514
+ return res.result || null;
515
+ },
516
+
497
517
  status_meta: true,
498
518
  async status({ conid, database }, req) {
499
519
  if (!conid) {
@@ -68,6 +68,7 @@ module.exports = {
68
68
  await fs.unlink(path.join(filesdir(), folder, file));
69
69
  socket.emitChanged(`files-changed`, { folder });
70
70
  socket.emitChanged(`all-files-changed`);
71
+ this.emitChangedFolder(folder);
71
72
  return true;
72
73
  },
73
74
 
@@ -140,6 +141,15 @@ module.exports = {
140
141
  return deserialize(format, text);
141
142
  },
142
143
 
144
+ emitChangedFolder(folder) {
145
+ if (folder == 'themes') {
146
+ socket.emitChanged(`file-themes-changed`);
147
+ }
148
+ if (folder == 'favorites') {
149
+ socket.emitChanged('files-changed-favorites');
150
+ }
151
+ },
152
+
143
153
  save_meta: true,
144
154
  async save({ folder, file, data, format }, req) {
145
155
  const loadedPermissions = await loadPermissionsFromRequest(req);
@@ -173,6 +183,8 @@ module.exports = {
173
183
  if (folder == 'shell') {
174
184
  scheduler.reload();
175
185
  }
186
+ this.emitChangedFolder(folder);
187
+
176
188
  return true;
177
189
  }
178
190
  },
@@ -240,8 +252,8 @@ module.exports = {
240
252
  },
241
253
 
242
254
  exportDiagram_meta: true,
243
- async exportDiagram({ filePath, html, css, themeType, themeClassName, watermark }) {
244
- await fs.writeFile(filePath, getDiagramExport(html, css, themeType, themeClassName, watermark));
255
+ async exportDiagram({ filePath, html, css, themeType, themeVariables, watermark }) {
256
+ await fs.writeFile(filePath, getDiagramExport(html, css, themeType, themeVariables, watermark));
245
257
  return true;
246
258
  },
247
259
 
@@ -346,4 +358,20 @@ module.exports = {
346
358
  }
347
359
  return res;
348
360
  },
361
+
362
+ getFileThemes_meta: true,
363
+ async getFileThemes(_params, req) {
364
+ const loadedPermissions = await loadPermissionsFromRequest(req);
365
+ if (!hasPermission(`files/themes/read`, loadedPermissions)) return [];
366
+ const dir = path.join(filesdir(), 'themes');
367
+ if (!(await fs.exists(dir))) return [];
368
+ const files = await fs.readdir(dir);
369
+ const res = [];
370
+ for (const file of files) {
371
+ const filePath = path.join(dir, file);
372
+ const text = await fs.readFile(filePath, { encoding: 'utf-8' });
373
+ res.push(JSON.parse(text));
374
+ }
375
+ return res;
376
+ },
349
377
  };
@@ -15,6 +15,7 @@ const {
15
15
  selectStorageIdentity,
16
16
  storageSaveDetailPermissionsDiff,
17
17
  saveStorageTeamFilesPermissions,
18
+ saveStorageTeamFoldersPermissions,
18
19
  } = require('./storageDb');
19
20
  const { hasPermission, loadPermissionsFromRequest } = require('../utility/hasPermission');
20
21
  const { changeSetToSql, removeSchemaFromChangeSet } = require('dbgate-datalib');
@@ -487,6 +488,7 @@ module.exports = {
487
488
  : (await storageSelectFmt('select ~connection_id from ~user_connections where ~user_id = %v', id)).map(
488
489
  x => x.connection_id
489
490
  );
491
+ // team files
490
492
  const usedTeamFilesRead =
491
493
  id == 'new'
492
494
  ? []
@@ -514,6 +516,36 @@ module.exports = {
514
516
  id
515
517
  )
516
518
  ).map(x => x.team_file_id);
519
+
520
+ // team folders
521
+ const usedTeamFoldersRead =
522
+ id == 'new'
523
+ ? []
524
+ : (
525
+ await storageSelectFmt(
526
+ 'select ~team_folder_id from ~user_team_folders where ~user_id = %v and ~allow_read_files = 1',
527
+ id
528
+ )
529
+ ).map(x => x.team_folder_id);
530
+ const usedTeamFoldersWrite =
531
+ id == 'new'
532
+ ? []
533
+ : (
534
+ await storageSelectFmt(
535
+ 'select ~team_folder_id from ~user_team_folders where ~user_id = %v and ~allow_write_files = 1',
536
+ id
537
+ )
538
+ ).map(x => x.team_folder_id);
539
+ const usedTeamFoldersUse =
540
+ id == 'new'
541
+ ? []
542
+ : (
543
+ await storageSelectFmt(
544
+ 'select ~team_folder_id from ~user_team_folders where ~user_id = %v and ~allow_use_files = 1',
545
+ id
546
+ )
547
+ ).map(x => x.team_folder_id);
548
+
517
549
  const databasePermissions =
518
550
  id == 'new' ? [] : await storageSelectFmt('select * from ~user_databases where ~user_id = %v', id);
519
551
  const tablePermissions =
@@ -536,6 +568,9 @@ module.exports = {
536
568
  usedTeamFilesRead,
537
569
  usedTeamFilesWrite,
538
570
  usedTeamFilesUse,
571
+ usedTeamFoldersRead,
572
+ usedTeamFoldersWrite,
573
+ usedTeamFoldersUse,
539
574
  };
540
575
  },
541
576
 
@@ -552,6 +587,9 @@ module.exports = {
552
587
  usedTeamFilesRead,
553
588
  usedTeamFilesWrite,
554
589
  usedTeamFilesUse,
590
+ usedTeamFoldersRead,
591
+ usedTeamFoldersWrite,
592
+ usedTeamFoldersUse,
555
593
  permissions,
556
594
  databasePermissions,
557
595
  tablePermissions,
@@ -594,6 +632,15 @@ module.exports = {
594
632
  usedTeamFilesUse
595
633
  );
596
634
 
635
+ await saveStorageTeamFoldersPermissions(
636
+ 'user_team_folders',
637
+ 'user_id',
638
+ id,
639
+ usedTeamFoldersRead,
640
+ usedTeamFoldersWrite,
641
+ usedTeamFoldersUse
642
+ );
643
+
597
644
  await storageSaveDetailPermissionsDiff(
598
645
  'user_databases',
599
646
  'user_id',
@@ -751,7 +798,12 @@ module.exports = {
751
798
  getRoleDetail_meta: true,
752
799
  async getRoleDetail({ id }) {
753
800
  const resp =
754
- id == 'new' ? {} : await storageSelectFmt(`select ~roles.~id,~roles.~name,~roles.~import_source_id from ~roles where ~roles.~id = %v`, id);
801
+ id == 'new'
802
+ ? {}
803
+ : await storageSelectFmt(
804
+ `select ~roles.~id,~roles.~name,~roles.~import_source_id from ~roles where ~roles.~id = %v`,
805
+ id
806
+ );
755
807
 
756
808
  const basePermissions = getPredefinedPermissions(id < 0 && resp[0]?.name ? resp[0]?.name : 'logged-user');
757
809
  const permissions =
@@ -772,6 +824,8 @@ module.exports = {
772
824
  : (await storageSelectFmt('select ~connection_id from ~role_connections where ~role_id = %v', id)).map(
773
825
  x => x.connection_id
774
826
  );
827
+
828
+ // team files
775
829
  const usedTeamFilesRead =
776
830
  id == 'new'
777
831
  ? []
@@ -799,6 +853,36 @@ module.exports = {
799
853
  id
800
854
  )
801
855
  ).map(x => x.team_file_id);
856
+
857
+ // team folders
858
+ const usedTeamFoldersRead =
859
+ id == 'new'
860
+ ? []
861
+ : (
862
+ await storageSelectFmt(
863
+ 'select ~team_folder_id from ~role_team_folders where ~role_id = %v and ~allow_read_files = 1',
864
+ id
865
+ )
866
+ ).map(x => x.team_folder_id);
867
+ const usedTeamFoldersWrite =
868
+ id == 'new'
869
+ ? []
870
+ : (
871
+ await storageSelectFmt(
872
+ 'select ~team_folder_id from ~role_team_folders where ~role_id = %v and ~allow_write_files = 1',
873
+ id
874
+ )
875
+ ).map(x => x.team_folder_id);
876
+ const usedTeamFoldersUse =
877
+ id == 'new'
878
+ ? []
879
+ : (
880
+ await storageSelectFmt(
881
+ 'select ~team_folder_id from ~role_team_folders where ~role_id = %v and ~allow_use_files = 1',
882
+ id
883
+ )
884
+ ).map(x => x.team_folder_id);
885
+
802
886
  const databasePermissions =
803
887
  id == 'new' ? [] : await storageSelectFmt('select * from ~role_databases where ~role_id = %v', id);
804
888
  const tablePermissions =
@@ -817,6 +901,9 @@ module.exports = {
817
901
  usedTeamFilesRead,
818
902
  usedTeamFilesWrite,
819
903
  usedTeamFilesUse,
904
+ usedTeamFoldersRead,
905
+ usedTeamFoldersWrite,
906
+ usedTeamFoldersUse,
820
907
  databasePermissions,
821
908
  tablePermissions,
822
909
  filePermissions,
@@ -850,6 +937,9 @@ module.exports = {
850
937
  databasePermissions,
851
938
  tablePermissions,
852
939
  filePermissions,
940
+ usedTeamFoldersRead,
941
+ usedTeamFoldersWrite,
942
+ usedTeamFoldersUse,
853
943
  } = role;
854
944
  let id = role.id;
855
945
 
@@ -876,6 +966,15 @@ module.exports = {
876
966
  usedTeamFilesUse
877
967
  );
878
968
 
969
+ await saveStorageTeamFoldersPermissions(
970
+ 'role_team_folders',
971
+ 'role_id',
972
+ id,
973
+ usedTeamFoldersRead,
974
+ usedTeamFoldersWrite,
975
+ usedTeamFoldersUse
976
+ );
977
+
879
978
  await storageSaveDetailPermissionsDiff(
880
979
  'role_databases',
881
980
  'role_id',