@saltcorn/server 0.6.2-beta.1 → 0.6.2-beta.2
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/app.js +9 -13
- package/auth/admin.js +5 -22
- package/auth/roleadmin.js +6 -16
- package/auth/routes.js +23 -52
- package/locales/en.json +20 -1
- package/markup/admin.js +17 -0
- package/package.json +15 -8
- package/public/saltcorn.css +2 -2
- package/restart_watcher.js +11 -2
- package/routes/actions.js +1 -15
- package/routes/admin.js +6 -23
- package/routes/api.js +51 -60
- package/routes/config.js +0 -1
- package/routes/crashlog.js +1 -4
- package/routes/delete.js +1 -2
- package/routes/edit.js +1 -2
- package/routes/eventlog.js +2 -15
- package/routes/events.js +0 -1
- package/routes/fields.js +1 -9
- package/routes/files.js +144 -64
- package/routes/homepage.js +3 -0
- package/routes/infoarch.js +12 -19
- package/routes/library.js +1 -4
- package/routes/list.js +2 -5
- package/routes/menu.js +6 -8
- package/routes/packs.js +2 -8
- package/routes/page.js +1 -7
- package/routes/pageedit.js +18 -30
- package/routes/plugins.js +21 -34
- package/routes/scapi.js +155 -184
- package/routes/search.js +6 -10
- package/routes/settings.js +1 -2
- package/routes/tables.js +1 -22
- package/routes/tenant.js +1 -9
- package/routes/utils.js +19 -19
- package/routes/view.js +7 -5
- package/routes/viewedit.js +18 -29
- package/s3storage.js +167 -0
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saltcorn/server",
|
|
3
|
-
"version": "0.6.2-beta.
|
|
3
|
+
"version": "0.6.2-beta.2",
|
|
4
4
|
"description": "Server app for Saltcorn, open-source no-code platform",
|
|
5
5
|
"homepage": "https://saltcorn.com",
|
|
6
6
|
"main": "index.js",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@saltcorn/base-plugin": "0.6.2-beta.
|
|
10
|
-
"@saltcorn/builder": "0.6.2-beta.
|
|
11
|
-
"@saltcorn/data": "0.6.2-beta.
|
|
9
|
+
"@saltcorn/base-plugin": "0.6.2-beta.2",
|
|
10
|
+
"@saltcorn/builder": "0.6.2-beta.2",
|
|
11
|
+
"@saltcorn/data": "0.6.2-beta.2",
|
|
12
12
|
"greenlock-express": "^4.0.3",
|
|
13
|
-
"@saltcorn/markup": "0.6.2-beta.
|
|
14
|
-
"@saltcorn/sbadmin2": "0.6.2-beta.
|
|
13
|
+
"@saltcorn/markup": "0.6.2-beta.2",
|
|
14
|
+
"@saltcorn/sbadmin2": "0.6.2-beta.2",
|
|
15
15
|
"@socket.io/cluster-adapter": "^0.1.0",
|
|
16
16
|
"@socket.io/sticky": "^1.0.1",
|
|
17
17
|
"connect-flash": "^0.1.1",
|
|
@@ -40,7 +40,12 @@
|
|
|
40
40
|
"pg": "^8.2.1",
|
|
41
41
|
"pluralize": "^8.0.0",
|
|
42
42
|
"socket.io": "4.2.0",
|
|
43
|
-
"tmp-promise": "^3.0.2"
|
|
43
|
+
"tmp-promise": "^3.0.2",
|
|
44
|
+
"multer-s3": "^2.10.0",
|
|
45
|
+
"multer": "^1.4.3",
|
|
46
|
+
"aws-sdk": "^2.1037.0",
|
|
47
|
+
"uuid": "^8.2.0",
|
|
48
|
+
"content-disposition": "^0.5.3"
|
|
44
49
|
},
|
|
45
50
|
"optionalDependencies": {
|
|
46
51
|
"sd-notify": "^2.8.0"
|
|
@@ -67,7 +72,9 @@
|
|
|
67
72
|
"/plugin_packages/"
|
|
68
73
|
],
|
|
69
74
|
"moduleNameMapper": {
|
|
70
|
-
"@saltcorn/sqlite/(.*)": "@saltcorn/sqlite/dist/$1"
|
|
75
|
+
"@saltcorn/sqlite/(.*)": "@saltcorn/sqlite/dist/$1",
|
|
76
|
+
"@saltcorn/db-common/(.*)": "@saltcorn/db-common/dist/$1",
|
|
77
|
+
"@saltcorn/data/(.*)": "@saltcorn/data/dist/$1"
|
|
71
78
|
}
|
|
72
79
|
},
|
|
73
80
|
"publishConfig": {
|
package/public/saltcorn.css
CHANGED
|
@@ -65,11 +65,11 @@ div.testrunoutput code {
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
div[data-inline-edit-dest-url] .editicon {
|
|
68
|
-
|
|
68
|
+
visibility: hidden;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
div[data-inline-edit-dest-url]:hover .editicon {
|
|
72
|
-
|
|
72
|
+
visibility: visible;
|
|
73
73
|
}
|
|
74
74
|
.searchbar-dropdown {
|
|
75
75
|
left: unset;
|
package/restart_watcher.js
CHANGED
|
@@ -7,6 +7,8 @@ const path = require("path");
|
|
|
7
7
|
const { spawnSync } = require("child_process");
|
|
8
8
|
const watch = require("node-watch");
|
|
9
9
|
const Plugin = require("@saltcorn/data/models/plugin");
|
|
10
|
+
const db = require("@saltcorn/data/db");
|
|
11
|
+
const { eachTenant } = require("@saltcorn/data/models/tenant");
|
|
10
12
|
|
|
11
13
|
/**
|
|
12
14
|
* packages that should trigger a server re-start
|
|
@@ -63,8 +65,15 @@ const getRelevantPackages = () => {
|
|
|
63
65
|
* @returns {string[]} list of paths to relevant directories
|
|
64
66
|
*/
|
|
65
67
|
const getPluginDirectories = async () => {
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
+
const getDirs = async () => {
|
|
69
|
+
const local_plugins = await Plugin.find({ source: "local" });
|
|
70
|
+
return local_plugins.map((p) => p.location);
|
|
71
|
+
};
|
|
72
|
+
const listOfDirs = [];
|
|
73
|
+
await eachTenant(async () => {
|
|
74
|
+
listOfDirs.push(await getDirs());
|
|
75
|
+
});
|
|
76
|
+
return [...new Set(listOfDirs.flat(1))];
|
|
68
77
|
};
|
|
69
78
|
|
|
70
79
|
const projectRoot = getProjectRoot();
|
package/routes/actions.js
CHANGED
|
@@ -5,12 +5,7 @@
|
|
|
5
5
|
* @subcategory routes
|
|
6
6
|
*/
|
|
7
7
|
const Router = require("express-promise-router");
|
|
8
|
-
const {
|
|
9
|
-
isAdmin,
|
|
10
|
-
setTenant,
|
|
11
|
-
error_catcher,
|
|
12
|
-
get_base_url,
|
|
13
|
-
} = require("./utils.js");
|
|
8
|
+
const { isAdmin, error_catcher, get_base_url } = require("./utils.js");
|
|
14
9
|
const { getState } = require("@saltcorn/data/db/state");
|
|
15
10
|
const Trigger = require("@saltcorn/data/models/trigger");
|
|
16
11
|
|
|
@@ -87,7 +82,6 @@ const getActions = async () => {
|
|
|
87
82
|
*/
|
|
88
83
|
router.get(
|
|
89
84
|
"/",
|
|
90
|
-
setTenant,
|
|
91
85
|
isAdmin,
|
|
92
86
|
error_catcher(async (req, res) => {
|
|
93
87
|
const triggers = await Trigger.findAllWithTableName();
|
|
@@ -288,7 +282,6 @@ const triggerForm = async (req, trigger) => {
|
|
|
288
282
|
*/
|
|
289
283
|
router.get(
|
|
290
284
|
"/new",
|
|
291
|
-
setTenant,
|
|
292
285
|
isAdmin,
|
|
293
286
|
error_catcher(async (req, res) => {
|
|
294
287
|
const form = await triggerForm(req);
|
|
@@ -314,7 +307,6 @@ router.get(
|
|
|
314
307
|
*/
|
|
315
308
|
router.get(
|
|
316
309
|
"/edit/:id",
|
|
317
|
-
setTenant,
|
|
318
310
|
isAdmin,
|
|
319
311
|
error_catcher(async (req, res) => {
|
|
320
312
|
const { id } = req.params;
|
|
@@ -344,7 +336,6 @@ router.get(
|
|
|
344
336
|
*/
|
|
345
337
|
router.post(
|
|
346
338
|
"/new",
|
|
347
|
-
setTenant,
|
|
348
339
|
isAdmin,
|
|
349
340
|
error_catcher(async (req, res) => {
|
|
350
341
|
const form = await triggerForm(req);
|
|
@@ -384,7 +375,6 @@ router.post(
|
|
|
384
375
|
*/
|
|
385
376
|
router.post(
|
|
386
377
|
"/edit/:id",
|
|
387
|
-
setTenant,
|
|
388
378
|
isAdmin,
|
|
389
379
|
error_catcher(async (req, res) => {
|
|
390
380
|
const { id } = req.params;
|
|
@@ -427,7 +417,6 @@ router.post(
|
|
|
427
417
|
*/
|
|
428
418
|
router.get(
|
|
429
419
|
"/configure/:id",
|
|
430
|
-
setTenant,
|
|
431
420
|
isAdmin,
|
|
432
421
|
error_catcher(async (req, res) => {
|
|
433
422
|
const { id } = req.params;
|
|
@@ -543,7 +532,6 @@ router.get(
|
|
|
543
532
|
*/
|
|
544
533
|
router.post(
|
|
545
534
|
"/configure/:id",
|
|
546
|
-
setTenant,
|
|
547
535
|
isAdmin,
|
|
548
536
|
error_catcher(async (req, res) => {
|
|
549
537
|
const { id } = req.params;
|
|
@@ -585,7 +573,6 @@ router.post(
|
|
|
585
573
|
*/
|
|
586
574
|
router.post(
|
|
587
575
|
"/delete/:id",
|
|
588
|
-
setTenant,
|
|
589
576
|
isAdmin,
|
|
590
577
|
error_catcher(async (req, res) => {
|
|
591
578
|
const { id } = req.params;
|
|
@@ -602,7 +589,6 @@ router.post(
|
|
|
602
589
|
*/
|
|
603
590
|
router.get(
|
|
604
591
|
"/testrun/:id",
|
|
605
|
-
setTenant,
|
|
606
592
|
isAdmin,
|
|
607
593
|
error_catcher(async (req, res) => {
|
|
608
594
|
const { id } = req.params;
|
package/routes/admin.js
CHANGED
|
@@ -5,12 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
const Router = require("express-promise-router");
|
|
7
7
|
|
|
8
|
-
const {
|
|
9
|
-
setTenant,
|
|
10
|
-
isAdmin,
|
|
11
|
-
error_catcher,
|
|
12
|
-
getGitRevision,
|
|
13
|
-
} = require("./utils.js");
|
|
8
|
+
const { isAdmin, error_catcher, getGitRevision } = require("./utils.js");
|
|
14
9
|
const Table = require("@saltcorn/data/models/table");
|
|
15
10
|
const Plugin = require("@saltcorn/data/models/plugin");
|
|
16
11
|
const File = require("@saltcorn/data/models/file");
|
|
@@ -52,6 +47,7 @@ const load_plugins = require("../load_plugins");
|
|
|
52
47
|
const {
|
|
53
48
|
restore_backup,
|
|
54
49
|
send_admin_page,
|
|
50
|
+
send_files_page,
|
|
55
51
|
config_fields_form,
|
|
56
52
|
save_config_from_form,
|
|
57
53
|
flash_restart_if_required,
|
|
@@ -66,6 +62,7 @@ const {
|
|
|
66
62
|
is_hsts_tld,
|
|
67
63
|
} = require("../markup/admin");
|
|
68
64
|
const moment = require("moment");
|
|
65
|
+
const View = require("@saltcorn/data/models/view");
|
|
69
66
|
|
|
70
67
|
/**
|
|
71
68
|
* @type {object}
|
|
@@ -78,7 +75,7 @@ const router = new Router();
|
|
|
78
75
|
module.exports = router;
|
|
79
76
|
|
|
80
77
|
/**
|
|
81
|
-
* @param {object} req
|
|
78
|
+
* @param {object} req
|
|
82
79
|
* @returns {Promise<Form>}
|
|
83
80
|
*/
|
|
84
81
|
const site_id_form = (req) =>
|
|
@@ -131,7 +128,6 @@ const email_form = async (req) => {
|
|
|
131
128
|
*/
|
|
132
129
|
router.get(
|
|
133
130
|
"/",
|
|
134
|
-
setTenant,
|
|
135
131
|
isAdmin,
|
|
136
132
|
error_catcher(async (req, res) => {
|
|
137
133
|
const isRoot = db.getTenantSchema() === db.connectObj.default_schema;
|
|
@@ -156,7 +152,6 @@ router.get(
|
|
|
156
152
|
*/
|
|
157
153
|
router.post(
|
|
158
154
|
"/",
|
|
159
|
-
setTenant,
|
|
160
155
|
isAdmin,
|
|
161
156
|
error_catcher(async (req, res) => {
|
|
162
157
|
const form = await site_id_form(req);
|
|
@@ -189,7 +184,6 @@ router.post(
|
|
|
189
184
|
*/
|
|
190
185
|
router.get(
|
|
191
186
|
"/email",
|
|
192
|
-
setTenant,
|
|
193
187
|
isAdmin,
|
|
194
188
|
error_catcher(async (req, res) => {
|
|
195
189
|
const form = await email_form(req);
|
|
@@ -223,7 +217,6 @@ router.get(
|
|
|
223
217
|
*/
|
|
224
218
|
router.get(
|
|
225
219
|
"/send-test-email",
|
|
226
|
-
setTenant,
|
|
227
220
|
isAdmin,
|
|
228
221
|
error_catcher(async (req, res) => {
|
|
229
222
|
const from = getState().getConfig("email_from");
|
|
@@ -254,7 +247,6 @@ router.get(
|
|
|
254
247
|
*/
|
|
255
248
|
router.post(
|
|
256
249
|
"/email",
|
|
257
|
-
setTenant,
|
|
258
250
|
isAdmin,
|
|
259
251
|
error_catcher(async (req, res) => {
|
|
260
252
|
const form = await email_form(req);
|
|
@@ -285,7 +277,6 @@ router.post(
|
|
|
285
277
|
*/
|
|
286
278
|
router.get(
|
|
287
279
|
"/backup",
|
|
288
|
-
setTenant,
|
|
289
280
|
isAdmin,
|
|
290
281
|
error_catcher(async (req, res) => {
|
|
291
282
|
send_admin_page({
|
|
@@ -330,7 +321,6 @@ router.get(
|
|
|
330
321
|
*/
|
|
331
322
|
router.get(
|
|
332
323
|
"/system",
|
|
333
|
-
setTenant,
|
|
334
324
|
isAdmin,
|
|
335
325
|
error_catcher(async (req, res) => {
|
|
336
326
|
const isRoot = db.getTenantSchema() === db.connectObj.default_schema;
|
|
@@ -450,7 +440,6 @@ router.get(
|
|
|
450
440
|
*/
|
|
451
441
|
router.post(
|
|
452
442
|
"/restart",
|
|
453
|
-
setTenant,
|
|
454
443
|
isAdmin,
|
|
455
444
|
error_catcher(async (req, res) => {
|
|
456
445
|
if (db.getTenantSchema() === db.connectObj.default_schema) {
|
|
@@ -473,7 +462,6 @@ router.post(
|
|
|
473
462
|
*/
|
|
474
463
|
router.post(
|
|
475
464
|
"/upgrade",
|
|
476
|
-
setTenant,
|
|
477
465
|
isAdmin,
|
|
478
466
|
error_catcher(async (req, res) => {
|
|
479
467
|
if (db.getTenantSchema() !== db.connectObj.default_schema) {
|
|
@@ -510,7 +498,6 @@ router.post(
|
|
|
510
498
|
*/
|
|
511
499
|
router.post(
|
|
512
500
|
"/backup",
|
|
513
|
-
setTenant,
|
|
514
501
|
isAdmin,
|
|
515
502
|
error_catcher(async (req, res) => {
|
|
516
503
|
const fileName = await create_backup();
|
|
@@ -531,7 +518,6 @@ router.post(
|
|
|
531
518
|
*/
|
|
532
519
|
router.post(
|
|
533
520
|
"/restore",
|
|
534
|
-
setTenant,
|
|
535
521
|
isAdmin,
|
|
536
522
|
error_catcher(async (req, res) => {
|
|
537
523
|
const newPath = File.get_new_path();
|
|
@@ -547,7 +533,7 @@ router.post(
|
|
|
547
533
|
);
|
|
548
534
|
|
|
549
535
|
/**
|
|
550
|
-
* @param {object} req
|
|
536
|
+
* @param {object} req
|
|
551
537
|
* @returns {Form}
|
|
552
538
|
*/
|
|
553
539
|
const clearAllForm = (req) =>
|
|
@@ -628,7 +614,6 @@ const clearAllForm = (req) =>
|
|
|
628
614
|
*/
|
|
629
615
|
router.post(
|
|
630
616
|
"/enable-letsencrypt",
|
|
631
|
-
setTenant,
|
|
632
617
|
isAdmin,
|
|
633
618
|
error_catcher(async (req, res) => {
|
|
634
619
|
if (db.getTenantSchema() === db.connectObj.default_schema) {
|
|
@@ -706,7 +691,6 @@ router.post(
|
|
|
706
691
|
*/
|
|
707
692
|
router.get(
|
|
708
693
|
"/clear-all",
|
|
709
|
-
setTenant,
|
|
710
694
|
isAdmin,
|
|
711
695
|
error_catcher(async (req, res) => {
|
|
712
696
|
res.sendWrap(req.__(`Admin`), {
|
|
@@ -736,7 +720,6 @@ router.get(
|
|
|
736
720
|
*/
|
|
737
721
|
router.post(
|
|
738
722
|
"/clear-all",
|
|
739
|
-
setTenant,
|
|
740
723
|
isAdmin,
|
|
741
724
|
error_catcher(async (req, res) => {
|
|
742
725
|
const form = clearAllForm(req);
|
|
@@ -746,7 +729,7 @@ router.post(
|
|
|
746
729
|
await db.deleteWhere("_sc_pages");
|
|
747
730
|
}
|
|
748
731
|
if (form.values.views) {
|
|
749
|
-
await
|
|
732
|
+
await View.delete({});
|
|
750
733
|
}
|
|
751
734
|
//user fields
|
|
752
735
|
const users = await Table.findOne({ name: "users" });
|
package/routes/api.js
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
/** @type {module:express-promise-router} */
|
|
17
17
|
const Router = require("express-promise-router");
|
|
18
18
|
//const db = require("@saltcorn/data/db");
|
|
19
|
-
const {
|
|
19
|
+
const { error_catcher } = require("./utils.js");
|
|
20
20
|
//const { mkTable, renderForm, link, post_btn } = require("@saltcorn/markup");
|
|
21
21
|
const { getState } = require("@saltcorn/data/db/state");
|
|
22
22
|
const Table = require("@saltcorn/data/models/table");
|
|
@@ -41,7 +41,7 @@ const router = new Router();
|
|
|
41
41
|
module.exports = router;
|
|
42
42
|
|
|
43
43
|
/**
|
|
44
|
-
* @param {*} fields
|
|
44
|
+
* @param {*} fields
|
|
45
45
|
* @returns {*}
|
|
46
46
|
*/
|
|
47
47
|
const limitFields = (fields) => (r) => {
|
|
@@ -64,14 +64,14 @@ const limitFields = (fields) => (r) => {
|
|
|
64
64
|
* @param {Table} table
|
|
65
65
|
* @returns {boolean}
|
|
66
66
|
*/
|
|
67
|
-
function accessAllowedRead(req, user, table){
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
67
|
+
function accessAllowedRead(req, user, table) {
|
|
68
|
+
const role = req.isAuthenticated()
|
|
69
|
+
? req.user.role_id
|
|
70
|
+
: user && user.role_id
|
|
71
|
+
? user.role_id
|
|
72
|
+
: 10;
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
return role <= table.min_role_read;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
/**
|
|
@@ -81,15 +81,14 @@ function accessAllowedRead(req, user, table){
|
|
|
81
81
|
* @param {Table} table
|
|
82
82
|
* @returns {boolean}
|
|
83
83
|
*/
|
|
84
|
-
function accessAllowedWrite(req, user, table){
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
return role <= table.min_role_write;
|
|
84
|
+
function accessAllowedWrite(req, user, table) {
|
|
85
|
+
const role = req.isAuthenticated()
|
|
86
|
+
? req.user.role_id
|
|
87
|
+
: user && user.role_id
|
|
88
|
+
? user.role_id
|
|
89
|
+
: 10;
|
|
92
90
|
|
|
91
|
+
return role <= table.min_role_write;
|
|
93
92
|
}
|
|
94
93
|
/**
|
|
95
94
|
* Check that user has right to trigger call
|
|
@@ -98,14 +97,14 @@ function accessAllowedWrite(req, user, table){
|
|
|
98
97
|
* @param {Trigger} trigger
|
|
99
98
|
* @returns {boolean}
|
|
100
99
|
*/
|
|
101
|
-
function accessAllowed(req, user, trigger){
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
100
|
+
function accessAllowed(req, user, trigger) {
|
|
101
|
+
const role = req.isAuthenticated()
|
|
102
|
+
? req.user.role_id
|
|
103
|
+
: user && user.role_id
|
|
104
|
+
? user.role_id
|
|
105
|
+
: 10;
|
|
107
106
|
|
|
108
|
-
|
|
107
|
+
return role <= trigger.min_role;
|
|
109
108
|
}
|
|
110
109
|
|
|
111
110
|
/**
|
|
@@ -117,7 +116,6 @@ function accessAllowed(req, user, trigger){
|
|
|
117
116
|
// todo add paging
|
|
118
117
|
router.get(
|
|
119
118
|
"/:tableName/",
|
|
120
|
-
setTenant,
|
|
121
119
|
//passport.authenticate("api-bearer", { session: false }),
|
|
122
120
|
error_catcher(async (req, res, next) => {
|
|
123
121
|
const { tableName } = req.params;
|
|
@@ -176,7 +174,6 @@ router.get(
|
|
|
176
174
|
*/
|
|
177
175
|
router.post(
|
|
178
176
|
"/action/:actionname/",
|
|
179
|
-
setTenant,
|
|
180
177
|
error_catcher(async (req, res, next) => {
|
|
181
178
|
const { actionname } = req.params;
|
|
182
179
|
// todo protect action by authorization check
|
|
@@ -189,30 +186,30 @@ router.post(
|
|
|
189
186
|
when_trigger: "API call",
|
|
190
187
|
});
|
|
191
188
|
|
|
192
|
-
if (!trigger){
|
|
193
|
-
|
|
194
|
-
|
|
189
|
+
if (!trigger) {
|
|
190
|
+
res.status(400).json({ error: req.__("Not found") });
|
|
191
|
+
return;
|
|
195
192
|
}
|
|
196
193
|
await passport.authenticate(
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
}
|
|
194
|
+
"api-bearer",
|
|
195
|
+
{ session: false },
|
|
196
|
+
async function (err, user, info) {
|
|
197
|
+
if (accessAllowed(req, user, trigger)) {
|
|
198
|
+
try {
|
|
199
|
+
const action = getState().actions[trigger.action];
|
|
200
|
+
const resp = await action.run({
|
|
201
|
+
configuration: trigger.configuration,
|
|
202
|
+
body: req.body,
|
|
203
|
+
req,
|
|
204
|
+
});
|
|
205
|
+
res.json({ success: true, data: resp });
|
|
206
|
+
} catch (e) {
|
|
207
|
+
res.status(400).json({ success: false, error: e.message });
|
|
208
|
+
}
|
|
209
|
+
} else {
|
|
210
|
+
res.status(401).json({ error: req.__("Not authorized") });
|
|
215
211
|
}
|
|
212
|
+
}
|
|
216
213
|
)(req, res, next);
|
|
217
214
|
})
|
|
218
215
|
);
|
|
@@ -225,7 +222,6 @@ router.post(
|
|
|
225
222
|
*/
|
|
226
223
|
router.post(
|
|
227
224
|
"/:tableName/",
|
|
228
|
-
setTenant,
|
|
229
225
|
error_catcher(async (req, res, next) => {
|
|
230
226
|
const { tableName } = req.params;
|
|
231
227
|
const table = await Table.findOne({ name: tableName });
|
|
@@ -294,7 +290,6 @@ router.post(
|
|
|
294
290
|
*/
|
|
295
291
|
router.post(
|
|
296
292
|
"/:tableName/:id",
|
|
297
|
-
setTenant,
|
|
298
293
|
error_catcher(async (req, res, next) => {
|
|
299
294
|
const { tableName, id } = req.params;
|
|
300
295
|
const table = await Table.findOne({ name: tableName });
|
|
@@ -355,7 +350,6 @@ router.post(
|
|
|
355
350
|
router.delete(
|
|
356
351
|
"/:tableName/:id",
|
|
357
352
|
// in case of primary key different from id - id will be string "undefined"
|
|
358
|
-
setTenant,
|
|
359
353
|
error_catcher(async (req, res, next) => {
|
|
360
354
|
const { tableName, id } = req.params;
|
|
361
355
|
const table = await Table.findOne({ name: tableName });
|
|
@@ -368,17 +362,14 @@ router.delete(
|
|
|
368
362
|
{ session: false },
|
|
369
363
|
async function (err, user, info) {
|
|
370
364
|
if (accessAllowedWrite(req, user, table)) {
|
|
371
|
-
|
|
372
365
|
try {
|
|
373
|
-
if(id === "undefined"){
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
}
|
|
380
|
-
else
|
|
381
|
-
await table.deleteRows({ id });
|
|
366
|
+
if (id === "undefined") {
|
|
367
|
+
const pk_name = table.pk_name;
|
|
368
|
+
//const fields = await table.getFields();
|
|
369
|
+
const row = req.body;
|
|
370
|
+
//readState(row, fields);
|
|
371
|
+
await table.deleteRows({ [pk_name]: row[pk_name] });
|
|
372
|
+
} else await table.deleteRows({ id });
|
|
382
373
|
res.json({ success: true });
|
|
383
374
|
} catch (e) {
|
|
384
375
|
res.status(400).json({ error: e.message });
|
package/routes/config.js
CHANGED
package/routes/crashlog.js
CHANGED
|
@@ -20,7 +20,7 @@ const {
|
|
|
20
20
|
p,
|
|
21
21
|
} = require("@saltcorn/markup/tags");
|
|
22
22
|
|
|
23
|
-
const {
|
|
23
|
+
const { isAdmin, error_catcher } = require("./utils.js");
|
|
24
24
|
const { send_events_page } = require("../markup/admin.js");
|
|
25
25
|
|
|
26
26
|
/**
|
|
@@ -41,7 +41,6 @@ module.exports = router;
|
|
|
41
41
|
*/
|
|
42
42
|
router.get(
|
|
43
43
|
"/",
|
|
44
|
-
setTenant,
|
|
45
44
|
isAdmin,
|
|
46
45
|
error_catcher(async (req, res) => {
|
|
47
46
|
const state = req.query,
|
|
@@ -103,7 +102,6 @@ router.get(
|
|
|
103
102
|
*/
|
|
104
103
|
router.post(
|
|
105
104
|
"/",
|
|
106
|
-
setTenant,
|
|
107
105
|
isAdmin,
|
|
108
106
|
error_catcher(async (req, res) => {
|
|
109
107
|
const err = {
|
|
@@ -123,7 +121,6 @@ router.post(
|
|
|
123
121
|
*/
|
|
124
122
|
router.get(
|
|
125
123
|
"/:id",
|
|
126
|
-
setTenant,
|
|
127
124
|
isAdmin,
|
|
128
125
|
error_catcher(async (req, res) => {
|
|
129
126
|
const { id } = req.params;
|
package/routes/delete.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
const Router = require("express-promise-router");
|
|
8
8
|
|
|
9
|
-
const {
|
|
9
|
+
const { loggedIn, error_catcher } = require("./utils.js");
|
|
10
10
|
const Table = require("@saltcorn/data/models/table");
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -29,7 +29,6 @@ module.exports = router;
|
|
|
29
29
|
*/
|
|
30
30
|
router.post(
|
|
31
31
|
"/:name/:id",
|
|
32
|
-
setTenant,
|
|
33
32
|
error_catcher(async (req, res) => {
|
|
34
33
|
const { name, id } = req.params;
|
|
35
34
|
const { redirect } = req.query;
|
package/routes/edit.js
CHANGED
|
@@ -9,7 +9,7 @@ const Router = require("express-promise-router");
|
|
|
9
9
|
const Field = require("@saltcorn/data/models/field");
|
|
10
10
|
const File = require("@saltcorn/data/models/file");
|
|
11
11
|
const Form = require("@saltcorn/data/models/form");
|
|
12
|
-
const {
|
|
12
|
+
const { loggedIn, error_catcher } = require("./utils.js");
|
|
13
13
|
const Table = require("@saltcorn/data/models/table");
|
|
14
14
|
const pluralize = require("pluralize");
|
|
15
15
|
|
|
@@ -33,7 +33,6 @@ module.exports = router;
|
|
|
33
33
|
*/
|
|
34
34
|
router.post(
|
|
35
35
|
"/toggle/:name/:id/:field_name",
|
|
36
|
-
setTenant,
|
|
37
36
|
error_catcher(async (req, res) => {
|
|
38
37
|
const { name, id, field_name } = req.params;
|
|
39
38
|
const { redirect } = req.query;
|
package/routes/eventlog.js
CHANGED
|
@@ -5,12 +5,7 @@
|
|
|
5
5
|
* @subcategory routes
|
|
6
6
|
*/
|
|
7
7
|
const Router = require("express-promise-router");
|
|
8
|
-
const {
|
|
9
|
-
isAdmin,
|
|
10
|
-
setTenant,
|
|
11
|
-
error_catcher,
|
|
12
|
-
get_base_url,
|
|
13
|
-
} = require("./utils.js");
|
|
8
|
+
const { isAdmin, error_catcher, get_base_url } = require("./utils.js");
|
|
14
9
|
const { getState } = require("@saltcorn/data/db/state");
|
|
15
10
|
const Trigger = require("@saltcorn/data/models/trigger");
|
|
16
11
|
|
|
@@ -52,7 +47,7 @@ const { send_events_page } = require("../markup/admin.js");
|
|
|
52
47
|
const EventLog = require("@saltcorn/data/models/eventlog");
|
|
53
48
|
|
|
54
49
|
/**
|
|
55
|
-
* @param {object} req
|
|
50
|
+
* @param {object} req
|
|
56
51
|
* @returns {Promise<Form>}
|
|
57
52
|
*/
|
|
58
53
|
const logSettingsForm = async (req) => {
|
|
@@ -101,7 +96,6 @@ const logSettingsForm = async (req) => {
|
|
|
101
96
|
*/
|
|
102
97
|
router.get(
|
|
103
98
|
"/settings",
|
|
104
|
-
setTenant,
|
|
105
99
|
isAdmin,
|
|
106
100
|
error_catcher(async (req, res) => {
|
|
107
101
|
const form = await logSettingsForm(req);
|
|
@@ -128,7 +122,6 @@ router.get(
|
|
|
128
122
|
*/
|
|
129
123
|
router.get(
|
|
130
124
|
"/custom",
|
|
131
|
-
setTenant,
|
|
132
125
|
isAdmin,
|
|
133
126
|
error_catcher(async (req, res) => {
|
|
134
127
|
const cevs = getState().getConfig("custom_events", []);
|
|
@@ -202,7 +195,6 @@ const customEventForm = () =>
|
|
|
202
195
|
*/
|
|
203
196
|
router.get(
|
|
204
197
|
"/custom/new",
|
|
205
|
-
setTenant,
|
|
206
198
|
isAdmin,
|
|
207
199
|
error_catcher(async (req, res) => {
|
|
208
200
|
const form = customEventForm();
|
|
@@ -228,7 +220,6 @@ router.get(
|
|
|
228
220
|
*/
|
|
229
221
|
router.post(
|
|
230
222
|
"/custom/new",
|
|
231
|
-
setTenant,
|
|
232
223
|
isAdmin,
|
|
233
224
|
error_catcher(async (req, res) => {
|
|
234
225
|
const form = customEventForm();
|
|
@@ -264,7 +255,6 @@ router.post(
|
|
|
264
255
|
*/
|
|
265
256
|
router.post(
|
|
266
257
|
"/custom/delete/:name",
|
|
267
|
-
setTenant,
|
|
268
258
|
isAdmin,
|
|
269
259
|
error_catcher(async (req, res) => {
|
|
270
260
|
const { name } = req.params;
|
|
@@ -288,7 +278,6 @@ router.post(
|
|
|
288
278
|
*/
|
|
289
279
|
router.post(
|
|
290
280
|
"/settings",
|
|
291
|
-
setTenant,
|
|
292
281
|
isAdmin,
|
|
293
282
|
error_catcher(async (req, res) => {
|
|
294
283
|
const form = await logSettingsForm(req);
|
|
@@ -321,7 +310,6 @@ router.post(
|
|
|
321
310
|
*/
|
|
322
311
|
router.get(
|
|
323
312
|
"/",
|
|
324
|
-
setTenant,
|
|
325
313
|
isAdmin,
|
|
326
314
|
error_catcher(async (req, res) => {
|
|
327
315
|
const state = req.query,
|
|
@@ -377,7 +365,6 @@ router.get(
|
|
|
377
365
|
*/
|
|
378
366
|
router.get(
|
|
379
367
|
"/:id",
|
|
380
|
-
setTenant,
|
|
381
368
|
isAdmin,
|
|
382
369
|
error_catcher(async (req, res) => {
|
|
383
370
|
const { id } = req.params;
|