@saltcorn/server 0.6.1-beta.0 → 0.6.1

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.
Files changed (53) hide show
  1. package/app.js +7 -0
  2. package/auth/admin.js +120 -5
  3. package/auth/index.js +7 -0
  4. package/auth/resetpw.js +22 -0
  5. package/auth/roleadmin.js +52 -0
  6. package/auth/routes.js +211 -2
  7. package/auth/testhelp.js +69 -0
  8. package/errors.js +14 -1
  9. package/fixture_persons.js +14 -0
  10. package/index.js +6 -0
  11. package/load_plugins.js +4 -3
  12. package/locales/en.json +7 -1
  13. package/markup/admin.js +97 -1
  14. package/markup/blockly.js +15 -0
  15. package/markup/expression_blurb.js +45 -0
  16. package/markup/forms.js +24 -0
  17. package/markup/index.js +7 -0
  18. package/markup/plugin-store.js +36 -0
  19. package/package.json +6 -6
  20. package/public/saltcorn-builder.css +1 -0
  21. package/public/saltcorn.js +5 -1
  22. package/routes/actions.js +53 -1
  23. package/routes/admin.js +97 -1
  24. package/routes/api.js +45 -10
  25. package/routes/config.js +18 -0
  26. package/routes/crashlog.js +31 -0
  27. package/routes/delete.js +19 -0
  28. package/routes/edit.js +19 -0
  29. package/routes/eventlog.js +65 -1
  30. package/routes/events.js +19 -0
  31. package/routes/fields.js +88 -0
  32. package/routes/files.js +62 -0
  33. package/routes/homepage.js +175 -80
  34. package/routes/index.js +7 -1
  35. package/routes/infoarch.js +56 -0
  36. package/routes/library.js +32 -0
  37. package/routes/list.js +28 -1
  38. package/routes/menu.js +45 -0
  39. package/routes/packs.js +53 -0
  40. package/routes/page.js +26 -0
  41. package/routes/pageedit.js +129 -3
  42. package/routes/plugins.js +156 -5
  43. package/routes/scapi.js +79 -23
  44. package/routes/search.js +51 -0
  45. package/routes/settings.js +27 -0
  46. package/routes/tables.js +148 -19
  47. package/routes/tenant.js +123 -31
  48. package/routes/utils.js +60 -1
  49. package/routes/view.js +37 -0
  50. package/routes/viewedit.js +114 -1
  51. package/serve.js +138 -88
  52. package/systemd.js +18 -1
  53. package/wrapper.js +4 -0
package/routes/admin.js CHANGED
@@ -1,3 +1,8 @@
1
+ /**
2
+ * @category server
3
+ * @module routes/admin
4
+ * @subcategory routes
5
+ */
1
6
  const Router = require("express-promise-router");
2
7
 
3
8
  const {
@@ -62,9 +67,20 @@ const {
62
67
  } = require("../markup/admin");
63
68
  const moment = require("moment");
64
69
 
70
+ /**
71
+ * @type {object}
72
+ * @const
73
+ * @namespace routes/adminRouter
74
+ * @category server
75
+ * @subcategory routes
76
+ */
65
77
  const router = new Router();
66
78
  module.exports = router;
67
79
 
80
+ /**
81
+ * @param {object} req
82
+ * @returns {Promise<Form>}
83
+ */
68
84
  const site_id_form = (req) =>
69
85
  config_fields_form({
70
86
  req,
@@ -85,7 +101,7 @@ const site_id_form = (req) =>
85
101
  });
86
102
  /**
87
103
  * Email settings form definition
88
- * @param req - request
104
+ * @param {object} req request
89
105
  * @returns {Promise<Form>} form
90
106
  */
91
107
  const email_form = async (req) => {
@@ -107,6 +123,12 @@ const email_form = async (req) => {
107
123
  "remove_outline(this);$('#testemail').attr('href','#').removeClass('btn-primary').addClass('btn-outline-primary')";
108
124
  return form;
109
125
  };
126
+
127
+ /**
128
+ * @name get
129
+ * @function
130
+ * @memberof module:routes/admin~routes/adminRouter
131
+ */
110
132
  router.get(
111
133
  "/",
112
134
  setTenant,
@@ -126,6 +148,12 @@ router.get(
126
148
  });
127
149
  })
128
150
  );
151
+
152
+ /**
153
+ * @name post
154
+ * @function
155
+ * @memberof module:routes/admin~routes/adminRouter
156
+ */
129
157
  router.post(
130
158
  "/",
131
159
  setTenant,
@@ -153,6 +181,12 @@ router.post(
153
181
  }
154
182
  })
155
183
  );
184
+
185
+ /**
186
+ * @name get/email
187
+ * @function
188
+ * @memberof module:routes/admin~routes/adminRouter
189
+ */
156
190
  router.get(
157
191
  "/email",
158
192
  setTenant,
@@ -182,6 +216,11 @@ router.get(
182
216
  })
183
217
  );
184
218
 
219
+ /**
220
+ * @name get/send-test-email
221
+ * @function
222
+ * @memberof module:routes/admin~routes/adminRouter
223
+ */
185
224
  router.get(
186
225
  "/send-test-email",
187
226
  setTenant,
@@ -207,6 +246,12 @@ router.get(
207
246
  res.redirect("/admin/email");
208
247
  })
209
248
  );
249
+
250
+ /**
251
+ * @name post/email
252
+ * @function
253
+ * @memberof module:routes/admin~routes/adminRouter
254
+ */
210
255
  router.post(
211
256
  "/email",
212
257
  setTenant,
@@ -232,6 +277,12 @@ router.post(
232
277
  }
233
278
  })
234
279
  );
280
+
281
+ /**
282
+ * @name get/backup
283
+ * @function
284
+ * @memberof module:routes/admin~routes/adminRouter
285
+ */
235
286
  router.get(
236
287
  "/backup",
237
288
  setTenant,
@@ -272,6 +323,11 @@ router.get(
272
323
  })
273
324
  );
274
325
 
326
+ /**
327
+ * @name get/system
328
+ * @function
329
+ * @memberof module:routes/admin~routes/adminRouter
330
+ */
275
331
  router.get(
276
332
  "/system",
277
333
  setTenant,
@@ -387,6 +443,11 @@ router.get(
387
443
  })
388
444
  );
389
445
 
446
+ /**
447
+ * @name post/restart
448
+ * @function
449
+ * @memberof module:routes/admin~routes/adminRouter
450
+ */
390
451
  router.post(
391
452
  "/restart",
392
453
  setTenant,
@@ -405,6 +466,11 @@ router.post(
405
466
  })
406
467
  );
407
468
 
469
+ /**
470
+ * @name post/upgrade
471
+ * @function
472
+ * @memberof module:routes/admin~routes/adminRouter
473
+ */
408
474
  router.post(
409
475
  "/upgrade",
410
476
  setTenant,
@@ -437,6 +503,11 @@ router.post(
437
503
  })
438
504
  );
439
505
 
506
+ /**
507
+ * @name post/backup
508
+ * @function
509
+ * @memberof module:routes/admin~routes/adminRouter
510
+ */
440
511
  router.post(
441
512
  "/backup",
442
513
  setTenant,
@@ -453,6 +524,11 @@ router.post(
453
524
  })
454
525
  );
455
526
 
527
+ /**
528
+ * @name post/restore
529
+ * @function
530
+ * @memberof module:routes/admin~routes/adminRouter
531
+ */
456
532
  router.post(
457
533
  "/restore",
458
534
  setTenant,
@@ -470,6 +546,10 @@ router.post(
470
546
  })
471
547
  );
472
548
 
549
+ /**
550
+ * @param {object} req
551
+ * @returns {Form}
552
+ */
473
553
  const clearAllForm = (req) =>
474
554
  new Form({
475
555
  action: "/admin/clear-all",
@@ -541,6 +621,11 @@ const clearAllForm = (req) =>
541
621
  ],
542
622
  });
543
623
 
624
+ /**
625
+ * @name post/enable-letsencrypt
626
+ * @function
627
+ * @memberof module:routes/admin~routes/adminRouter
628
+ */
544
629
  router.post(
545
630
  "/enable-letsencrypt",
546
631
  setTenant,
@@ -614,6 +699,11 @@ router.post(
614
699
  })
615
700
  );
616
701
 
702
+ /**
703
+ * @name get/clear-all
704
+ * @function
705
+ * @memberof module:routes/admin~routes/adminRouter
706
+ */
617
707
  router.get(
618
708
  "/clear-all",
619
709
  setTenant,
@@ -638,6 +728,12 @@ router.get(
638
728
  });
639
729
  })
640
730
  );
731
+
732
+ /**
733
+ * @name post/clear-all
734
+ * @function
735
+ * @memberof module:routes/admin~routes/adminRouter
736
+ */
641
737
  router.post(
642
738
  "/clear-all",
643
739
  setTenant,
package/routes/api.js CHANGED
@@ -9,8 +9,11 @@
9
9
  * To solve this in future needs to publish sc_role table into user tables of saltcorn.
10
10
  *
11
11
  * Documentation: https://wiki.saltcorn.com/view/ShowPage?title=API
12
- * @type {module:express-promise-router}
12
+ * @category server
13
+ * @module routes/api
14
+ * @subcategory routes
13
15
  */
16
+ /** @type {module:express-promise-router} */
14
17
  const Router = require("express-promise-router");
15
18
  //const db = require("@saltcorn/data/db");
16
19
  const { setTenant, error_catcher } = require("./utils.js");
@@ -26,9 +29,21 @@ const {
26
29
  stateFieldsToWhere,
27
30
  readState,
28
31
  } = require("@saltcorn/data/plugin-helper");
32
+
33
+ /**
34
+ * @type {object}
35
+ * @const
36
+ * @namespace apiRouter
37
+ * @category server
38
+ * @subcategory routes
39
+ */
29
40
  const router = new Router();
30
41
  module.exports = router;
31
42
 
43
+ /**
44
+ * @param {*} fields
45
+ * @returns {*}
46
+ */
32
47
  const limitFields = (fields) => (r) => {
33
48
  if (fields) {
34
49
  let res = {};
@@ -44,9 +59,9 @@ const limitFields = (fields) => (r) => {
44
59
 
45
60
  /**
46
61
  * Check that user has right to read table data (only read in terms of CRUD)
47
- * @param req - httprequest
48
- * @param user - user based on access token
49
- * @param table
62
+ * @param {object} req httprequest
63
+ * @param {object} user - user based on access token
64
+ * @param {Table} table
50
65
  * @returns {boolean}
51
66
  */
52
67
  function accessAllowedRead(req, user, table){
@@ -61,9 +76,9 @@ function accessAllowedRead(req, user, table){
61
76
 
62
77
  /**
63
78
  * Check that user has right to write table data (create, update, delete in terms of CRUD)
64
- * @param req - httprequest
65
- * @param user - user based on access token
66
- * @param table
79
+ * @param {object} req httprequest
80
+ * @param {object} user user based on access token
81
+ * @param {Table} table
67
82
  * @returns {boolean}
68
83
  */
69
84
  function accessAllowedWrite(req, user, table){
@@ -78,9 +93,9 @@ function accessAllowedWrite(req, user, table){
78
93
  }
79
94
  /**
80
95
  * Check that user has right to trigger call
81
- * @param req - httprequest
82
- * @param user - user based on access token
83
- * @param trigger
96
+ * @param {object} req httprequest
97
+ * @param {object} user user based on access token
98
+ * @param {Trigger} trigger
84
99
  * @returns {boolean}
85
100
  */
86
101
  function accessAllowed(req, user, trigger){
@@ -92,8 +107,12 @@ function accessAllowed(req, user, trigger){
92
107
 
93
108
  return role <= trigger.min_role;
94
109
  }
110
+
95
111
  /**
96
112
  * Select Table rows using GET
113
+ * @name get/:tableName/
114
+ * @function
115
+ * @memberof module:routes/api~apiRouter
97
116
  */
98
117
  // todo add paging
99
118
  router.get(
@@ -147,9 +166,13 @@ router.get(
147
166
  )(req, res, next);
148
167
  })
149
168
  );
169
+
150
170
  /**
151
171
  * Call Action (Trigger) using POST
152
172
  * Attention! if you have table with name "action" it can be problem in future
173
+ * @name post/action/:actionname/
174
+ * @function
175
+ * @memberof module:routes/api~apiRouter
153
176
  */
154
177
  router.post(
155
178
  "/action/:actionname/",
@@ -193,8 +216,12 @@ router.post(
193
216
  )(req, res, next);
194
217
  })
195
218
  );
219
+
196
220
  /**
197
221
  * Insert into Table using POST
222
+ * @name post/:tableName/
223
+ * @function
224
+ * @memberof module:routes/api~apiRouter
198
225
  */
199
226
  router.post(
200
227
  "/:tableName/",
@@ -257,9 +284,13 @@ router.post(
257
284
  )(req, res, next);
258
285
  })
259
286
  );
287
+
260
288
  /**
261
289
  * Update Table row directed by ID using POST
262
290
  * POST api/<table>/id
291
+ * @name post/:tableName/:id
292
+ * @function
293
+ * @memberof module:routes/api~apiRouter
263
294
  */
264
295
  router.post(
265
296
  "/:tableName/:id",
@@ -314,8 +345,12 @@ router.post(
314
345
  )(req, res, next);
315
346
  })
316
347
  );
348
+
317
349
  /**
318
350
  * Delete Table row by ID using DELETE
351
+ * @name delete/:tableName/:id
352
+ * @function
353
+ * @memberof module:routes/api~apiRouter
319
354
  */
320
355
  router.delete(
321
356
  "/:tableName/:id",
package/routes/config.js CHANGED
@@ -1,3 +1,8 @@
1
+ /**
2
+ * @category server
3
+ * @module routes/config
4
+ * @subcategory routes
5
+ */
1
6
  const Router = require("express-promise-router");
2
7
 
3
8
  const Field = require("@saltcorn/data/models/field");
@@ -25,9 +30,22 @@ const {
25
30
  } = require("@saltcorn/data/models/config");
26
31
  const { table, tbody, tr, th, td, div } = require("@saltcorn/markup/tags");
27
32
 
33
+ /**
34
+ * @type {object}
35
+ * @const
36
+ * @namespace configRouter
37
+ * @category server
38
+ * @subcategory routes
39
+ */
28
40
  const router = new Router();
29
41
  module.exports = router;
30
42
 
43
+ /**
44
+ * @name post/delete/:key
45
+ * @function
46
+ * @memberof module:routes/config~configRouter
47
+ * @function
48
+ */
31
49
  router.post(
32
50
  "/delete/:key",
33
51
  setTenant,
@@ -1,3 +1,9 @@
1
+ /**
2
+ * @category server
3
+ * @module routes/crashlog
4
+ * @subcategory routes
5
+ */
6
+
1
7
  const Router = require("express-promise-router");
2
8
  const Crash = require("@saltcorn/data/models/crash");
3
9
  const db = require("@saltcorn/data/db");
@@ -17,9 +23,22 @@ const {
17
23
  const { setTenant, isAdmin, error_catcher } = require("./utils.js");
18
24
  const { send_events_page } = require("../markup/admin.js");
19
25
 
26
+ /**
27
+ * @type {object}
28
+ * @const
29
+ * @namespace crashlogRouter
30
+ * @category server
31
+ * @subcategory routes
32
+ */
20
33
  const router = new Router();
21
34
  module.exports = router;
22
35
 
36
+ /**
37
+ * @name get
38
+ * @function
39
+ * @memberof module:routes/crashlog~crashlogRouter
40
+ * @function
41
+ */
23
42
  router.get(
24
43
  "/",
25
44
  setTenant,
@@ -76,6 +95,12 @@ router.get(
76
95
  })
77
96
  );
78
97
 
98
+ /**
99
+ * @name post
100
+ * @function
101
+ * @memberof module:routes/crashlog~crashlogRouter
102
+ * @function
103
+ */
79
104
  router.post(
80
105
  "/",
81
106
  setTenant,
@@ -90,6 +115,12 @@ router.post(
90
115
  })
91
116
  );
92
117
 
118
+ /**
119
+ * @name get/:id
120
+ * @function
121
+ * @memberof module:routes/crashlog~crashlogRouter
122
+ * @function
123
+ */
93
124
  router.get(
94
125
  "/:id",
95
126
  setTenant,
package/routes/delete.js CHANGED
@@ -1,13 +1,32 @@
1
+ /**
2
+ * @category server
3
+ * @module routes/delete
4
+ * @subcategory routes
5
+ */
6
+
1
7
  const Router = require("express-promise-router");
2
8
 
3
9
  const { setTenant, loggedIn, error_catcher } = require("./utils.js");
4
10
  const Table = require("@saltcorn/data/models/table");
5
11
 
12
+ /**
13
+ * @type {object}
14
+ * @const
15
+ * @namespace deleteRouter
16
+ * @category server
17
+ * @subcategory routes
18
+ */
6
19
  const router = new Router();
7
20
 
8
21
  // export our router to be mounted by the parent application
9
22
  module.exports = router;
10
23
 
24
+ /**
25
+ * @name post/:name/:id
26
+ * @function
27
+ * @memberof module:routes/delete~deleteRouter
28
+ * @function
29
+ */
11
30
  router.post(
12
31
  "/:name/:id",
13
32
  setTenant,
package/routes/edit.js CHANGED
@@ -1,3 +1,9 @@
1
+ /**
2
+ * @category server
3
+ * @module routes/edit
4
+ * @subcategory routes
5
+ */
6
+
1
7
  const Router = require("express-promise-router");
2
8
 
3
9
  const Field = require("@saltcorn/data/models/field");
@@ -9,9 +15,22 @@ const pluralize = require("pluralize");
9
15
 
10
16
  const { renderForm } = require("@saltcorn/markup");
11
17
 
18
+ /**
19
+ * @type {object}
20
+ * @const
21
+ * @namespace editRouter
22
+ * @category server
23
+ * @subcategory routes
24
+ */
12
25
  const router = new Router();
13
26
  module.exports = router;
14
27
 
28
+ /**
29
+ * @name post/toggle/:name/:id/:field_name
30
+ * @function
31
+ * @memberof module:routes/edit~editRouter
32
+ * @function
33
+ */
15
34
  router.post(
16
35
  "/toggle/:name/:id/:field_name",
17
36
  setTenant,
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * Actions (Triggers) Handler
3
- *
3
+ * @category server
4
+ * @module routes/eventlog
5
+ * @subcategory routes
4
6
  */
5
7
  const Router = require("express-promise-router");
6
8
  const {
@@ -12,6 +14,13 @@ const {
12
14
  const { getState } = require("@saltcorn/data/db/state");
13
15
  const Trigger = require("@saltcorn/data/models/trigger");
14
16
 
17
+ /**
18
+ * @type {object}
19
+ * @const
20
+ * @namespace eventlogRouter
21
+ * @category server
22
+ * @subcategory routes
23
+ */
15
24
  const router = new Router();
16
25
  module.exports = router;
17
26
  const {
@@ -42,6 +51,10 @@ const Table = require("@saltcorn/data/models/table");
42
51
  const { send_events_page } = require("../markup/admin.js");
43
52
  const EventLog = require("@saltcorn/data/models/eventlog");
44
53
 
54
+ /**
55
+ * @param {object} req
56
+ * @returns {Promise<Form>}
57
+ */
45
58
  const logSettingsForm = async (req) => {
46
59
  const fields = [];
47
60
  for (const w of Trigger.when_options) {
@@ -80,6 +93,12 @@ const logSettingsForm = async (req) => {
80
93
  });
81
94
  };
82
95
 
96
+ /**
97
+ * @name get/settings
98
+ * @function
99
+ * @memberof module:routes/eventlog~eventlogRouter
100
+ * @function
101
+ */
83
102
  router.get(
84
103
  "/settings",
85
104
  setTenant,
@@ -101,6 +120,12 @@ router.get(
101
120
  })
102
121
  );
103
122
 
123
+ /**
124
+ * @name get/custom
125
+ * @function
126
+ * @memberof module:routes/eventlog~eventlogRouter
127
+ * @function
128
+ */
104
129
  router.get(
105
130
  "/custom",
106
131
  setTenant,
@@ -147,6 +172,9 @@ router.get(
147
172
  })
148
173
  );
149
174
 
175
+ /**
176
+ * @returns {Form}
177
+ */
150
178
  const customEventForm = () =>
151
179
  new Form({
152
180
  action: "/eventlog/custom/new",
@@ -166,6 +194,12 @@ const customEventForm = () =>
166
194
  ],
167
195
  });
168
196
 
197
+ /**
198
+ * @name get/custom/new
199
+ * @function
200
+ * @memberof module:routes/eventlog~eventlogRouter
201
+ * @function
202
+ */
169
203
  router.get(
170
204
  "/custom/new",
171
205
  setTenant,
@@ -186,6 +220,12 @@ router.get(
186
220
  })
187
221
  );
188
222
 
223
+ /**
224
+ * @name post/custom/new
225
+ * @function
226
+ * @memberof module:routes/eventlog~eventlogRouter
227
+ * @function
228
+ */
189
229
  router.post(
190
230
  "/custom/new",
191
231
  setTenant,
@@ -216,6 +256,12 @@ router.post(
216
256
  })
217
257
  );
218
258
 
259
+ /**
260
+ * @name post/custom/delete/:name
261
+ * @function
262
+ * @memberof module:routes/eventlog~eventlogRouter
263
+ * @function
264
+ */
219
265
  router.post(
220
266
  "/custom/delete/:name",
221
267
  setTenant,
@@ -234,6 +280,12 @@ router.post(
234
280
  })
235
281
  );
236
282
 
283
+ /**
284
+ * @name post/settings
285
+ * @function
286
+ * @memberof module:routes/eventlog~eventlogRouter
287
+ * @function
288
+ */
237
289
  router.post(
238
290
  "/settings",
239
291
  setTenant,
@@ -261,6 +313,12 @@ router.post(
261
313
  })
262
314
  );
263
315
 
316
+ /**
317
+ * @name get
318
+ * @function
319
+ * @memberof module:routes/eventlog~eventlogRouter
320
+ * @function
321
+ */
264
322
  router.get(
265
323
  "/",
266
324
  setTenant,
@@ -311,6 +369,12 @@ router.get(
311
369
  })
312
370
  );
313
371
 
372
+ /**
373
+ * @name get/:id
374
+ * @function
375
+ * @memberof module:routes/eventlog~eventlogRouter
376
+ * @function
377
+ */
314
378
  router.get(
315
379
  "/:id",
316
380
  setTenant,
package/routes/events.js CHANGED
@@ -1,9 +1,28 @@
1
+ /**
2
+ * @category server
3
+ * @module routes/events
4
+ * @subcategory routes
5
+ */
6
+
1
7
  const Router = require("express-promise-router");
2
8
  const { isAdmin, setTenant, error_catcher } = require("./utils.js");
3
9
 
10
+ /**
11
+ * @type {object}
12
+ * @const
13
+ * @namespace eventsRouter
14
+ * @category server
15
+ * @subcategory routes
16
+ */
4
17
  const router = new Router();
5
18
  module.exports = router;
6
19
 
20
+ /**
21
+ * @name get
22
+ * @function
23
+ * @memberof module:routes/events~eventsRouter
24
+ * @function
25
+ */
7
26
  router.get(
8
27
  "/",
9
28
  setTenant,