@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.
- package/app.js +7 -0
- package/auth/admin.js +120 -5
- package/auth/index.js +7 -0
- package/auth/resetpw.js +22 -0
- package/auth/roleadmin.js +52 -0
- package/auth/routes.js +211 -2
- package/auth/testhelp.js +69 -0
- package/errors.js +14 -1
- package/fixture_persons.js +14 -0
- package/index.js +6 -0
- package/load_plugins.js +4 -3
- package/locales/en.json +7 -1
- package/markup/admin.js +97 -1
- package/markup/blockly.js +15 -0
- package/markup/expression_blurb.js +45 -0
- package/markup/forms.js +24 -0
- package/markup/index.js +7 -0
- package/markup/plugin-store.js +36 -0
- package/package.json +6 -6
- package/public/saltcorn-builder.css +1 -0
- package/public/saltcorn.js +5 -1
- package/routes/actions.js +53 -1
- package/routes/admin.js +97 -1
- package/routes/api.js +45 -10
- package/routes/config.js +18 -0
- package/routes/crashlog.js +31 -0
- package/routes/delete.js +19 -0
- package/routes/edit.js +19 -0
- package/routes/eventlog.js +65 -1
- package/routes/events.js +19 -0
- package/routes/fields.js +88 -0
- package/routes/files.js +62 -0
- package/routes/homepage.js +175 -80
- package/routes/index.js +7 -1
- package/routes/infoarch.js +56 -0
- package/routes/library.js +32 -0
- package/routes/list.js +28 -1
- package/routes/menu.js +45 -0
- package/routes/packs.js +53 -0
- package/routes/page.js +26 -0
- package/routes/pageedit.js +129 -3
- package/routes/plugins.js +156 -5
- package/routes/scapi.js +79 -23
- package/routes/search.js +51 -0
- package/routes/settings.js +27 -0
- package/routes/tables.js +148 -19
- package/routes/tenant.js +123 -31
- package/routes/utils.js +60 -1
- package/routes/view.js +37 -0
- package/routes/viewedit.js +114 -1
- package/serve.js +138 -88
- package/systemd.js +18 -1
- package/wrapper.js +4 -0
package/routes/infoarch.js
CHANGED
|
@@ -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
|
-
*
|
|
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,
|