@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/app.js CHANGED
@@ -1,5 +1,7 @@
1
1
  /**
2
2
  * Saltcorn App
3
+ * @category server
4
+ * @module app
3
5
  */
4
6
 
5
7
  const express = require("express");
@@ -43,6 +45,11 @@ const i18n = new I18n({
43
45
  directory: path.join(__dirname, "locales"),
44
46
  });
45
47
  // todo console.log app instance info when app starts - avoid to show secrets (password, etc)
48
+
49
+ /**
50
+ * @param {object} [opts = {}]
51
+ * @returns {Promise<Express>}
52
+ */
46
53
  const getApp = async (opts = {}) => {
47
54
  const app = express();
48
55
  let sql_log = await getConfig("log_sql");
package/auth/admin.js CHANGED
@@ -1,8 +1,13 @@
1
1
  /**
2
2
  * Auth / Admin
3
- * @type {module:express-promise-router}
3
+ * @category server
4
+ * @module auth/admin
5
+ * @subcategory auth
4
6
  */
5
7
  // todo refactor to few modules + rename to be in sync with router url
8
+ /**
9
+ * @type {module:express-promise-router}
10
+ */
6
11
  const Router = require("express-promise-router");
7
12
  const { contract, is } = require("contractis");
8
13
 
@@ -33,9 +38,22 @@ const {
33
38
  is_hsts_tld,
34
39
  } = require("../markup/admin");
35
40
  const { send_verification_email } = require("@saltcorn/data/models/email");
41
+
42
+ /**
43
+ * @type {object}
44
+ * @const
45
+ * @namespace auth/adminRouter
46
+ * @category server
47
+ * @subcategory auth
48
+ */
36
49
  const router = new Router();
37
50
  module.exports = router;
38
51
 
52
+ /**
53
+ *
54
+ * @param {object} req
55
+ * @returns {Promise<object>}
56
+ */
39
57
  const getUserFields = async (req) => {
40
58
  const userTable = await Table.findOne({ name: "users" });
41
59
  const userFields = (await userTable.getFields()).filter(
@@ -69,9 +87,13 @@ const getUserFields = async (req) => {
69
87
  }
70
88
  return userFields;
71
89
  };
90
+
72
91
  /**
73
92
  * User Form
74
- * @type {*|(function(...[*]=): *)}
93
+ * @function
94
+ * @param {object} req
95
+ * @param {User} user
96
+ * @returns {Promise<Form>}
75
97
  */
76
98
  const userForm = contract(
77
99
  is.fun(
@@ -132,11 +154,12 @@ const userForm = contract(
132
154
  return form;
133
155
  }
134
156
  );
157
+
135
158
  /**
136
159
  * Dropdown for User Info in left menu
137
- * @param user
138
- * @param req
139
- * @param can_reset
160
+ * @param {object} user
161
+ * @param {object} req
162
+ * @param {boolean} can_reset
140
163
  * @returns {string}
141
164
  */
142
165
  const user_dropdown = (user, req, can_reset) =>
@@ -191,6 +214,11 @@ const user_dropdown = (user, req, can_reset) =>
191
214
  ),
192
215
  ]);
193
216
 
217
+ /**
218
+ * @name get
219
+ * @function
220
+ * @memberof module:auth/admin~auth/adminRouter
221
+ */
194
222
  router.get(
195
223
  "/",
196
224
  setTenant,
@@ -249,8 +277,12 @@ router.get(
249
277
  });
250
278
  })
251
279
  );
280
+
252
281
  /**
253
282
  * Send User Form for create new User
283
+ * @name get/new
284
+ * @function
285
+ * @memberof module:auth/admin~auth/adminRouter
254
286
  */
255
287
  router.get(
256
288
  "/new",
@@ -272,6 +304,11 @@ router.get(
272
304
  })
273
305
  );
274
306
 
307
+ /**
308
+ *
309
+ * @param {object} req
310
+ * @returns {Form}
311
+ */
275
312
  const user_settings_form = (req) =>
276
313
  config_fields_form({
277
314
  req,
@@ -296,6 +333,12 @@ const user_settings_form = (req) =>
296
333
  action: "/useradmin/settings",
297
334
  submitLabel: req.__("Save"),
298
335
  });
336
+
337
+ /**
338
+ * @name get/settings
339
+ * @function
340
+ * @memberof module:auth/admin~auth/adminRouter
341
+ */
299
342
  router.get(
300
343
  "/settings",
301
344
  setTenant,
@@ -314,6 +357,12 @@ router.get(
314
357
  });
315
358
  })
316
359
  );
360
+
361
+ /**
362
+ * @name post/settings
363
+ * @function
364
+ * @memberof module:auth/admin~auth/adminRouter
365
+ */
317
366
  router.post(
318
367
  "/settings",
319
368
  setTenant,
@@ -340,6 +389,11 @@ router.post(
340
389
  })
341
390
  );
342
391
 
392
+ /**
393
+ * @name get/ssl
394
+ * @function
395
+ * @memberof module:auth/admin~auth/adminRouter
396
+ */
343
397
  router.get(
344
398
  "/ssl",
345
399
  setTenant,
@@ -456,12 +510,22 @@ router.get(
456
510
  })
457
511
  );
458
512
 
513
+ /**
514
+ * @param {object} req
515
+ * @returns {Form}
516
+ */
459
517
  const ssl_form = (req) =>
460
518
  config_fields_form({
461
519
  req,
462
520
  field_names: ["custom_ssl_certificate", "custom_ssl_private_key"],
463
521
  action: "/useradmin/ssl/custom",
464
522
  });
523
+
524
+ /**
525
+ * @name get/ssl/custom
526
+ * @function
527
+ * @memberof module:auth/admin~auth/adminRouter
528
+ */
465
529
  router.get(
466
530
  "/ssl/custom",
467
531
  setTenant,
@@ -481,6 +545,12 @@ router.get(
481
545
  });
482
546
  })
483
547
  );
548
+
549
+ /**
550
+ * @name post/ssl/custom
551
+ * @function
552
+ * @memberof module:auth/admin~auth/adminRouter
553
+ */
484
554
  router.post(
485
555
  "/ssl/custom",
486
556
  setTenant,
@@ -512,6 +582,12 @@ router.post(
512
582
  }
513
583
  })
514
584
  );
585
+
586
+ /**
587
+ * @name get/:id
588
+ * @function
589
+ * @memberof module:auth/admin~auth/adminRouter
590
+ */
515
591
  router.get(
516
592
  "/:id",
517
593
  setTenant,
@@ -574,8 +650,12 @@ router.get(
574
650
  });
575
651
  })
576
652
  );
653
+
577
654
  /**
578
655
  * Save user data
656
+ * @name post/save
657
+ * @function
658
+ * @memberof module:auth/admin~auth/adminRouter
579
659
  */
580
660
  router.post(
581
661
  "/save",
@@ -649,8 +729,12 @@ router.post(
649
729
  res.redirect(`/useradmin`);
650
730
  })
651
731
  );
732
+
652
733
  /**
653
734
  * Reset password for yser
735
+ * @name post/reset-password/:id
736
+ * @function
737
+ * @memberof module:auth/admin~auth/adminRouter
654
738
  */
655
739
  router.post(
656
740
  "/reset-password/:id",
@@ -665,8 +749,12 @@ router.post(
665
749
  res.redirect(`/useradmin`);
666
750
  })
667
751
  );
752
+
668
753
  /**
669
754
  * Send verification email for user
755
+ * @name post/send-verification/:id
756
+ * @function
757
+ * @memberof module:auth/admin~auth/adminRouter
670
758
  */
671
759
  router.post(
672
760
  "/send-verification/:id",
@@ -686,8 +774,12 @@ router.post(
686
774
  res.redirect(`/useradmin`);
687
775
  })
688
776
  );
777
+
689
778
  /**
690
779
  * Get new api token
780
+ * @name post/gen-api-token/:id
781
+ * @function
782
+ * @memberof module:auth/admin~auth/adminRouter
691
783
  */
692
784
  router.post(
693
785
  "/gen-api-token/:id",
@@ -702,8 +794,12 @@ router.post(
702
794
  res.redirect(`/useradmin/${u.id}`);
703
795
  })
704
796
  );
797
+
705
798
  /**
706
799
  * Remove api token
800
+ * @name post/remove-api-token/:id
801
+ * @function
802
+ * @memberof module:auth/admin~auth/adminRouter
707
803
  */
708
804
  router.post(
709
805
  "/remove-api-token/:id",
@@ -718,8 +814,12 @@ router.post(
718
814
  res.redirect(`/useradmin/${u.id}`);
719
815
  })
720
816
  );
817
+
721
818
  /**
722
819
  * Set random password
820
+ * @name post/set-random-password/:id
821
+ * @function
822
+ * @memberof module:auth/admin~auth/adminRouter
723
823
  */
724
824
  router.post(
725
825
  "/set-random-password/:id",
@@ -740,6 +840,11 @@ router.post(
740
840
  })
741
841
  );
742
842
 
843
+ /**
844
+ * @name post/disable/:id
845
+ * @function
846
+ * @memberof module:auth/admin~auth/adminRouter
847
+ */
743
848
  router.post(
744
849
  "/disable/:id",
745
850
  setTenant,
@@ -754,6 +859,11 @@ router.post(
754
859
  })
755
860
  );
756
861
 
862
+ /**
863
+ * @name post/enable/:id
864
+ * @function
865
+ * @memberof module:auth/admin~auth/adminRouter
866
+ */
757
867
  router.post(
758
868
  "/enable/:id",
759
869
  setTenant,
@@ -767,6 +877,11 @@ router.post(
767
877
  })
768
878
  );
769
879
 
880
+ /**
881
+ * @name post/delete/:id
882
+ * @function
883
+ * @memberof module:auth/admin~auth/adminRouter
884
+ */
770
885
  router.post(
771
886
  "/delete/:id",
772
887
  setTenant,
package/auth/index.js ADDED
@@ -0,0 +1,7 @@
1
+ // for the jsdoc documentation
2
+ /**
3
+ *
4
+ * @category server
5
+ * @module auth/inde
6
+ * @subcategory auth
7
+ */
package/auth/resetpw.js CHANGED
@@ -1,7 +1,18 @@
1
+ /**
2
+ * @category server
3
+ * @module auth/resetpw
4
+ * @subcategory auth
5
+ */
1
6
  const { getState } = require("@saltcorn/data/db/state");
2
7
  const { getMailTransport } = require("@saltcorn/data/models/email");
3
8
  const { get_base_url } = require("../routes/utils");
4
9
 
10
+ /**
11
+ * @param {string} link
12
+ * @param {object} user
13
+ * @param {object} req
14
+ * @returns {void}
15
+ */
5
16
  const generate_email = (link, user, req) => ({
6
17
  from: getState().getConfig("email_from"),
7
18
  to: user.email,
@@ -35,12 +46,23 @@ ${req.__(
35
46
  )}<br />
36
47
  `,
37
48
  });
49
+
50
+ /**
51
+ * @param {object} user
52
+ * @param {object} req
53
+ * @returns {Promise<void>}
54
+ */
38
55
  const send_reset_email = async (user, req) => {
39
56
  const link = await get_reset_link(user, req);
40
57
  const transporter = getMailTransport();
41
58
  await transporter.sendMail(generate_email(link, user, req));
42
59
  };
43
60
 
61
+ /**
62
+ * @param {object} user
63
+ * @param {object} req
64
+ * @returns {Promise<string>}
65
+ */
44
66
  const get_reset_link = async (user, req) => {
45
67
  const token = await user.getNewResetToken();
46
68
  const base = get_base_url(req);
package/auth/roleadmin.js CHANGED
@@ -1,3 +1,8 @@
1
+ /**
2
+ * @category server
3
+ * @module auth/roleadmin
4
+ * @subcategory auth
5
+ */
1
6
  const Router = require("express-promise-router");
2
7
  const { contract, is } = require("contractis");
3
8
 
@@ -44,8 +49,24 @@ const {
44
49
  config_fields_form,
45
50
  save_config_from_form,
46
51
  } = require("../markup/admin");
52
+
53
+ /**
54
+ * @type {object}
55
+ * @const
56
+ * @namespace roleadminRouter
57
+ * @category server
58
+ * @subcategory auth
59
+ */
47
60
  const router = new Router();
48
61
  module.exports = router;
62
+
63
+ /**
64
+ * @param {Role} role
65
+ * @param {Layout[]} layouts
66
+ * @param {*} layout_by_role
67
+ * @param {object} req
68
+ * @returns {Form}
69
+ */
49
70
  const editRoleLayoutForm = (role, layouts, layout_by_role, req) =>
50
71
  form(
51
72
  {
@@ -69,6 +90,10 @@ const editRoleLayoutForm = (role, layouts, layout_by_role, req) =>
69
90
  )
70
91
  );
71
92
 
93
+ /**
94
+ * @param {object} req
95
+ * @returns {Form}
96
+ */
72
97
  const roleForm = (req) =>
73
98
  new Form({
74
99
  action: "/roleadmin/edit",
@@ -87,6 +112,11 @@ const roleForm = (req) =>
87
112
  ],
88
113
  });
89
114
 
115
+ /**
116
+ * @name get
117
+ * @function
118
+ * @memberof module:auth/roleadmin~roleadminRouter
119
+ */
90
120
  router.get(
91
121
  "/",
92
122
  setTenant,
@@ -135,6 +165,11 @@ router.get(
135
165
  })
136
166
  );
137
167
 
168
+ /**
169
+ * @name get/new
170
+ * @function
171
+ * @memberof module:auth/roleadmin~roleadminRouter
172
+ */
138
173
  router.get(
139
174
  "/new",
140
175
  setTenant,
@@ -155,6 +190,12 @@ router.get(
155
190
  });
156
191
  })
157
192
  );
193
+
194
+ /**
195
+ * @name post/edit
196
+ * @function
197
+ * @memberof module:auth/roleadmin~roleadminRouter
198
+ */
158
199
  router.post(
159
200
  "/edit",
160
201
  setTenant,
@@ -188,6 +229,11 @@ router.post(
188
229
  })
189
230
  );
190
231
 
232
+ /**
233
+ * @name post/setrolelayout/:id
234
+ * @function
235
+ * @memberof module:auth/roleadmin~roleadminRouter
236
+ */
191
237
  router.post(
192
238
  "/setrolelayout/:id",
193
239
  setTenant,
@@ -202,7 +248,13 @@ router.post(
202
248
  res.redirect(`/roleadmin`);
203
249
  })
204
250
  );
251
+
205
252
  const unDeletableRoles = [1, 8, 10];
253
+ /**
254
+ * @name post/delete/:id
255
+ * @function
256
+ * @memberof module:auth/roleadmin~roleadminRouter
257
+ */
206
258
  router.post(
207
259
  "/delete/:id",
208
260
  setTenant,