@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
@@ -1,3 +1,9 @@
1
+ /**
2
+ * @category server
3
+ * @module routes/infoarch
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
  const {
@@ -10,9 +16,23 @@ const { getState } = require("@saltcorn/data/db/state");
10
16
  const { div, a, i, text } = require("@saltcorn/markup/tags");
11
17
  const { mkTable, renderForm } = require("@saltcorn/markup");
12
18
  const Form = require("@saltcorn/data/models/form");
19
+
20
+ /**
21
+ * @type {object}
22
+ * @const
23
+ * @namespace infoarchRouter
24
+ * @category server
25
+ * @subcategory routes
26
+ */
13
27
  const router = new Router();
14
28
  module.exports = router;
15
29
 
30
+ /**
31
+ * @name get
32
+ * @function
33
+ * @memberof module:routes/infoarch~infoarchRouter
34
+ * @function
35
+ */
16
36
  router.get(
17
37
  "/",
18
38
  setTenant,
@@ -21,6 +41,11 @@ router.get(
21
41
  res.redirect(`/menu`);
22
42
  })
23
43
  );
44
+
45
+ /**
46
+ * @param {object} req
47
+ * @returns {Form}
48
+ */
24
49
  const languageForm = (req) =>
25
50
  new Form({
26
51
  action: "/site-structure/localizer/save-lang",
@@ -49,6 +74,13 @@ const languageForm = (req) =>
49
74
  },
50
75
  ],
51
76
  });
77
+
78
+ /**
79
+ * @name get/localizer
80
+ * @function
81
+ * @memberof module:routes/infoarch~infoarchRouter
82
+ * @function
83
+ */
52
84
  router.get(
53
85
  "/localizer",
54
86
  setTenant,
@@ -103,6 +135,12 @@ router.get(
103
135
  })
104
136
  );
105
137
 
138
+ /**
139
+ * @name get/localizer/add-lang
140
+ * @function
141
+ * @memberof module:routes/infoarch~infoarchRouter
142
+ * @function
143
+ */
106
144
  router.get(
107
145
  "/localizer/add-lang",
108
146
  setTenant,
@@ -121,6 +159,12 @@ router.get(
121
159
  })
122
160
  );
123
161
 
162
+ /**
163
+ * @name get/localizer/edit/:lang
164
+ * @function
165
+ * @memberof module:routes/infoarch~infoarchRouter
166
+ * @function
167
+ */
124
168
  router.get(
125
169
  "/localizer/edit/:lang",
126
170
  setTenant,
@@ -180,6 +224,12 @@ router.get(
180
224
  })
181
225
  );
182
226
 
227
+ /**
228
+ * @name post/localizer/save-string/:lang/:defstring
229
+ * @function
230
+ * @memberof module:routes/infoarch~infoarchRouter
231
+ * @function
232
+ */
183
233
  router.post(
184
234
  "/localizer/save-string/:lang/:defstring",
185
235
  setTenant,
@@ -196,6 +246,12 @@ router.post(
196
246
  })
197
247
  );
198
248
 
249
+ /**
250
+ * @name post/localizer/save-lang
251
+ * @function
252
+ * @memberof module:routes/infoarch~infoarchRouter
253
+ * @function
254
+ */
199
255
  router.post(
200
256
  "/localizer/save-lang",
201
257
  setTenant,
package/routes/library.js CHANGED
@@ -1,12 +1,32 @@
1
+ /**
2
+ * @category server
3
+ * @module routes/library
4
+ * @subcategory routes
5
+ */
6
+
1
7
  const Library = require("@saltcorn/data/models/library");
2
8
  const Router = require("express-promise-router");
3
9
  const { setTenant, isAdmin, error_catcher } = require("./utils.js");
4
10
  const { send_infoarch_page } = require("../markup/admin.js");
5
11
  const { mkTable, post_delete_btn } = require("@saltcorn/markup");
6
12
  const { i } = require("@saltcorn/markup/tags");
13
+
14
+ /**
15
+ * @type {object}
16
+ * @const
17
+ * @namespace libraryRouter
18
+ * @category server
19
+ * @subcategory routes
20
+ */
7
21
  const router = new Router();
8
22
  module.exports = router;
9
23
 
24
+ /**
25
+ * @name post/savefrombuilder
26
+ * @function
27
+ * @memberof module:routes/library~libraryRouter
28
+ * @function
29
+ */
10
30
  router.post(
11
31
  "/savefrombuilder",
12
32
  setTenant,
@@ -17,6 +37,12 @@ router.post(
17
37
  })
18
38
  );
19
39
 
40
+ /**
41
+ * @name get/list
42
+ * @function
43
+ * @memberof module:routes/library~libraryRouter
44
+ * @function
45
+ */
20
46
  router.get(
21
47
  "/list",
22
48
  setTenant,
@@ -55,6 +81,12 @@ router.get(
55
81
  })
56
82
  );
57
83
 
84
+ /**
85
+ * @name post/delete/:id
86
+ * @function
87
+ * @memberof module:routes/library~libraryRouter
88
+ * @function
89
+ */
58
90
  router.post(
59
91
  "/delete/:id",
60
92
  setTenant,
package/routes/list.js CHANGED
@@ -3,6 +3,9 @@
3
3
  * Used in Admin
4
4
  * ${base_url}/list
5
5
  * Look to server/public/gridedit.js for main logic of grid editor
6
+ * @category server
7
+ * @module routes/list
8
+ * @subcategory routes
6
9
  */
7
10
 
8
11
  const Router = require("express-promise-router");
@@ -15,12 +18,24 @@ const { setTenant, isAdmin, error_catcher } = require("./utils");
15
18
  const moment = require("moment");
16
19
  const { readState } = require("@saltcorn/data/plugin-helper");
17
20
 
21
+ /**
22
+ * @type {object}
23
+ * @const
24
+ * @namespace listRouter
25
+ * @category server
26
+ * @subcategory routes
27
+ */
18
28
  const router = new Router();
19
29
 
20
30
  // export our router to be mounted by the parent application
21
31
  module.exports = router;
32
+
22
33
  /**
23
34
  * Show list of table data history (GET handler)
35
+ * @name get/_versions/:name/:id
36
+ * @function
37
+ * @memberof module:routes/list~listRouter
38
+ * @function
24
39
  */
25
40
  router.get(
26
41
  "/_versions/:name/:id",
@@ -63,8 +78,13 @@ router.get(
63
78
  );
64
79
  })
65
80
  );
81
+
66
82
  /**
67
83
  * Restore version of data in table (POST handler)
84
+ * @name post/_restore/:name/:id/:_version
85
+ * @function
86
+ * @memberof module:routes/list~listRouter
87
+ * @function
68
88
  */
69
89
  router.post(
70
90
  "/_restore/:name/:id/:_version",
@@ -129,8 +149,11 @@ const typeToJsGridType = (t, field) => {
129
149
  }
130
150
  return jsgField;
131
151
  };
152
+
132
153
  /**
133
154
  * Version Field
155
+ * @param {string} tname
156
+ * @returns {string}
134
157
  */
135
158
  const versionsField = (tname) => `
136
159
  var VersionsField = function(config) {
@@ -150,9 +173,13 @@ VersionsField.prototype = new jsGrid.Field({
150
173
  jsGrid.fields.versions = VersionsField;
151
174
  `;
152
175
  // end of versionsField
176
+
153
177
  /**
154
178
  * Table Data List Viewer (GET handler))
155
- * /list/:table
179
+ * @name get/:tname
180
+ * @function
181
+ * @memberof module:routes/list~listRouter
182
+ * @function
156
183
  */
157
184
  router.get(
158
185
  "/:tname",
package/routes/menu.js CHANGED
@@ -1,3 +1,9 @@
1
+ /**
2
+ * @category server
3
+ * @module routes/menu
4
+ * @subcategory routes
5
+ */
6
+
1
7
  const Router = require("express-promise-router");
2
8
 
3
9
  const Field = require("@saltcorn/data/models/field");
@@ -15,9 +21,21 @@ const { mkTable, renderForm, link, post_btn } = require("@saltcorn/markup");
15
21
  const { script, domReady, div, ul } = require("@saltcorn/markup/tags");
16
22
  const { send_infoarch_page } = require("../markup/admin.js");
17
23
 
24
+ /**
25
+ * @type {object}
26
+ * @const
27
+ * @namespace menuRouter
28
+ * @category server
29
+ * @subcategory routes
30
+ */
18
31
  const router = new Router();
19
32
  module.exports = router;
20
33
 
34
+ /**
35
+ *
36
+ * @param {object} req
37
+ * @returns {Promise<Form>}
38
+ */
21
39
  const menuForm = async (req) => {
22
40
  const views = await View.find({}, { orderBy: "name", nocase: true });
23
41
  const pages = await Page.find({}, { orderBy: "name", nocase: true });
@@ -138,6 +156,10 @@ const menuForm = async (req) => {
138
156
 
139
157
  //create -- new
140
158
 
159
+ /**
160
+ * @param {object[]} menu_items
161
+ * @returns {string}
162
+ */
141
163
  const menuEditorScript = (menu_items) => `
142
164
  var iconPickerOptions = {searchText: "Search icon...", labelHeader: "{0}/{1}"};
143
165
  let lastState;
@@ -178,6 +200,11 @@ const menuEditorScript = (menu_items) => `
178
200
  lastState=editor.getString()
179
201
  setInterval(ajax_save_menu, 500)
180
202
  `;
203
+
204
+ /**
205
+ * @param {object[]} menu_items
206
+ * @returns {object[]}
207
+ */
181
208
  const menuTojQME = (menu_items) =>
182
209
  (menu_items || []).map((mi) => ({
183
210
  ...mi,
@@ -185,6 +212,11 @@ const menuTojQME = (menu_items) =>
185
212
  subitems: undefined,
186
213
  ...(mi.subitems ? { children: menuTojQME(mi.subitems) } : {}),
187
214
  }));
215
+
216
+ /**
217
+ * @param {object[]} menu_items
218
+ * @returns {object[]}
219
+ */
188
220
  const jQMEtoMenu = (menu_items) =>
189
221
  menu_items.map((mi) => ({
190
222
  ...mi,
@@ -192,6 +224,13 @@ const jQMEtoMenu = (menu_items) =>
192
224
  children: undefined,
193
225
  ...(mi.children ? { subitems: jQMEtoMenu(mi.children) } : {}),
194
226
  }));
227
+
228
+ /**
229
+ * @name get
230
+ * @function
231
+ * @memberof module:routes/menu~menuRouter
232
+ * @function
233
+ */
195
234
  router.get(
196
235
  "/",
197
236
  setTenant,
@@ -240,6 +279,12 @@ router.get(
240
279
  })
241
280
  );
242
281
 
282
+ /**
283
+ * @name post
284
+ * @function
285
+ * @memberof module:routes/menu~menuRouter
286
+ * @function
287
+ */
243
288
  router.post(
244
289
  "/",
245
290
  setTenant,
package/routes/packs.js CHANGED
@@ -1,3 +1,9 @@
1
+ /**
2
+ * @category server
3
+ * @module routes/packs
4
+ * @subcategory routes
5
+ */
6
+
1
7
  const Router = require("express-promise-router");
2
8
  const { setTenant, isAdmin, error_catcher } = require("./utils.js");
3
9
  const { mkTable, renderForm, link, post_btn } = require("@saltcorn/markup");
@@ -30,9 +36,22 @@ const Library = require("@saltcorn/data/models/library");
30
36
  const Trigger = require("@saltcorn/data/models/trigger");
31
37
  const Role = require("@saltcorn/data/models/role");
32
38
 
39
+ /**
40
+ * @type {object}
41
+ * @const
42
+ * @namespace packsRouter
43
+ * @category server
44
+ * @subcategory routes
45
+ */
33
46
  const router = new Router();
34
47
  module.exports = router;
35
48
 
49
+ /**
50
+ * @name get
51
+ * @function
52
+ * @memberof module:routes/packs~packsRouter
53
+ * @function
54
+ */
36
55
  router.get(
37
56
  "/create/",
38
57
  setTenant,
@@ -112,6 +131,12 @@ router.get(
112
131
  })
113
132
  );
114
133
 
134
+ /**
135
+ * @name post/create
136
+ * @function
137
+ * @memberof module:routes/packs~packsRouter
138
+ * @function
139
+ */
115
140
  router.post(
116
141
  "/create",
117
142
  setTenant,
@@ -185,6 +210,10 @@ router.post(
185
210
  })
186
211
  );
187
212
 
213
+ /**
214
+ * @param {object} req
215
+ * @returns {Form}
216
+ */
188
217
  const install_pack_form = (req) =>
189
218
  new Form({
190
219
  action: "/packs/install",
@@ -199,6 +228,12 @@ const install_pack_form = (req) =>
199
228
  ],
200
229
  });
201
230
 
231
+ /**
232
+ * @name get/install
233
+ * @function
234
+ * @memberof module:routes/packs~packsRouter
235
+ * @function
236
+ */
202
237
  router.get(
203
238
  "/install",
204
239
  setTenant,
@@ -224,6 +259,12 @@ router.get(
224
259
  })
225
260
  );
226
261
 
262
+ /**
263
+ * @name post/install
264
+ * @function
265
+ * @memberof module:routes/packs~packsRouter
266
+ * @function
267
+ */
227
268
  router.post(
228
269
  "/install",
229
270
  setTenant,
@@ -277,6 +318,12 @@ router.post(
277
318
  })
278
319
  );
279
320
 
321
+ /**
322
+ * @name post/install-named/:name
323
+ * @function
324
+ * @memberof module:routes/packs~packsRouter
325
+ * @function
326
+ */
280
327
  router.post(
281
328
  "/install-named/:name",
282
329
  setTenant,
@@ -308,6 +355,12 @@ router.post(
308
355
  })
309
356
  );
310
357
 
358
+ /**
359
+ * @name post/uninstall/:name
360
+ * @function
361
+ * @memberof module:routes/packs~packsRouter
362
+ * @function
363
+ */
311
364
  router.post(
312
365
  "/uninstall/:name",
313
366
  setTenant,
package/routes/page.js CHANGED
@@ -1,3 +1,9 @@
1
+ /**
2
+ * @category server
3
+ * @module routes/page
4
+ * @subcategory routes
5
+ */
6
+
1
7
  const Router = require("express-promise-router");
2
8
 
3
9
  const Page = require("@saltcorn/data/models/page");
@@ -13,9 +19,22 @@ const { add_edit_bar } = require("../markup/admin.js");
13
19
  const { traverseSync } = require("@saltcorn/data/models/layout");
14
20
  const { run_action_column } = require("@saltcorn/data/plugin-helper");
15
21
 
22
+ /**
23
+ * @type {object}
24
+ * @const
25
+ * @namespace pageRouter
26
+ * @category server
27
+ * @subcategory routes
28
+ */
16
29
  const router = new Router();
17
30
  module.exports = router;
18
31
 
32
+ /**
33
+ * @name get/:pagename
34
+ * @function
35
+ * @memberof module:routes/page~pageRouter
36
+ * @function
37
+ */
19
38
  router.get(
20
39
  "/:pagename",
21
40
  setTenant,
@@ -43,6 +62,13 @@ router.get(
43
62
  .sendWrap(`${pagename} page`, req.__("Page %s not found", pagename));
44
63
  })
45
64
  );
65
+
66
+ /**
67
+ * @name post/:pagename/action/:rndid
68
+ * @function
69
+ * @memberof module:routes/page~pageRouter
70
+ * @function
71
+ */
46
72
  router.post(
47
73
  "/:pagename/action/:rndid",
48
74
  setTenant,