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 +5 -5
- package/src/controllers/databaseConnections.js +20 -0
- package/src/controllers/files.js +30 -2
- package/src/controllers/storage.js +100 -1
- package/src/controllers/storageDb.js +338 -28
- package/src/controllers/teamFiles.js +172 -19
- package/src/currentVersion.js +2 -2
- package/src/index.js +1 -0
- package/src/proc/databaseConnectionProcess.js +102 -0
- package/src/storageModel.js +215 -0
- package/src/utility/getDiagramExport.js +13 -5
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dbgate-api-premium",
|
|
3
3
|
"main": "src/index.js",
|
|
4
|
-
"version": "
|
|
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": "^
|
|
33
|
+
"dbgate-datalib": "^7.0.0",
|
|
34
34
|
"dbgate-query-splitter": "^4.11.9",
|
|
35
|
-
"dbgate-sqltree": "^
|
|
36
|
-
"dbgate-tools": "^
|
|
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": "^
|
|
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) {
|
package/src/controllers/files.js
CHANGED
|
@@ -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,
|
|
244
|
-
await fs.writeFile(filePath, getDiagramExport(html, css, themeType,
|
|
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'
|
|
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',
|