@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/app.js
CHANGED
|
@@ -23,10 +23,10 @@ const {
|
|
|
23
23
|
available_languages,
|
|
24
24
|
} = require("@saltcorn/data/models/config");
|
|
25
25
|
const {
|
|
26
|
-
setTenant,
|
|
27
26
|
get_base_url,
|
|
28
27
|
error_catcher,
|
|
29
28
|
getSessionStore,
|
|
29
|
+
setTenant,
|
|
30
30
|
} = require("./routes/utils.js");
|
|
31
31
|
const path = require("path");
|
|
32
32
|
const fileUpload = require("express-fileupload");
|
|
@@ -37,6 +37,7 @@ const { I18n } = require("i18n");
|
|
|
37
37
|
const { h1 } = require("@saltcorn/markup/tags");
|
|
38
38
|
const is = require("contractis/is");
|
|
39
39
|
const Trigger = require("@saltcorn/data/models/trigger");
|
|
40
|
+
const s3storage = require("./s3storage");
|
|
40
41
|
|
|
41
42
|
const locales = Object.keys(available_languages);
|
|
42
43
|
// i18n configuration
|
|
@@ -77,15 +78,6 @@ const getApp = async (opts = {}) => {
|
|
|
77
78
|
// extenetede url encoding in use
|
|
78
79
|
app.use(express.urlencoded({ limit: "5mb", extended: true }));
|
|
79
80
|
|
|
80
|
-
// add fileupload feature
|
|
81
|
-
// todo ability to configure filetmp dir - add new config / env parameter
|
|
82
|
-
app.use(
|
|
83
|
-
fileUpload({
|
|
84
|
-
useTempFiles: true,
|
|
85
|
-
createParentPath: true,
|
|
86
|
-
tempFileDir: "/tmp/",
|
|
87
|
-
})
|
|
88
|
-
);
|
|
89
81
|
// cookies
|
|
90
82
|
app.use(require("cookie-parser")());
|
|
91
83
|
// i18n support
|
|
@@ -202,6 +194,12 @@ const getApp = async (opts = {}) => {
|
|
|
202
194
|
passport.deserializeUser(function (user, done) {
|
|
203
195
|
done(null, user);
|
|
204
196
|
});
|
|
197
|
+
app.use(setTenant);
|
|
198
|
+
|
|
199
|
+
// Change into s3storage compatible selector
|
|
200
|
+
// existing fileupload middleware is moved into s3storage.js
|
|
201
|
+
app.use(s3storage.middlewareSelect);
|
|
202
|
+
app.use(s3storage.middlewareTransform);
|
|
205
203
|
|
|
206
204
|
app.use(wrapper(version_tag));
|
|
207
205
|
const csurf = csrf();
|
|
@@ -218,11 +216,10 @@ const getApp = async (opts = {}) => {
|
|
|
218
216
|
|
|
219
217
|
mountRoutes(app);
|
|
220
218
|
// set tenant homepage as / root
|
|
221
|
-
app.get("/",
|
|
219
|
+
app.get("/", error_catcher(homepage));
|
|
222
220
|
// /robots.txt
|
|
223
221
|
app.get(
|
|
224
222
|
"/robots.txt",
|
|
225
|
-
setTenant,
|
|
226
223
|
error_catcher(async (req, res) => {
|
|
227
224
|
const base = get_base_url(req);
|
|
228
225
|
res.set("Content-Type", "text/plain");
|
|
@@ -235,7 +232,6 @@ Sitemap: ${base}sitemap.xml
|
|
|
235
232
|
// /sitemap.xml
|
|
236
233
|
app.get(
|
|
237
234
|
"/sitemap.xml",
|
|
238
|
-
setTenant,
|
|
239
235
|
error_catcher(async (req, res) => {
|
|
240
236
|
const base = get_base_url(req);
|
|
241
237
|
res.set("Content-Type", "text/xml");
|
package/auth/admin.js
CHANGED
|
@@ -50,8 +50,8 @@ const router = new Router();
|
|
|
50
50
|
module.exports = router;
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
|
-
*
|
|
54
|
-
* @param {object} req
|
|
53
|
+
*
|
|
54
|
+
* @param {object} req
|
|
55
55
|
* @returns {Promise<object>}
|
|
56
56
|
*/
|
|
57
57
|
const getUserFields = async (req) => {
|
|
@@ -221,7 +221,6 @@ const user_dropdown = (user, req, can_reset) =>
|
|
|
221
221
|
*/
|
|
222
222
|
router.get(
|
|
223
223
|
"/",
|
|
224
|
-
setTenant,
|
|
225
224
|
isAdmin,
|
|
226
225
|
error_catcher(async (req, res) => {
|
|
227
226
|
const users = await User.find({}, { orderBy: "id" });
|
|
@@ -286,7 +285,6 @@ router.get(
|
|
|
286
285
|
*/
|
|
287
286
|
router.get(
|
|
288
287
|
"/new",
|
|
289
|
-
setTenant,
|
|
290
288
|
isAdmin,
|
|
291
289
|
error_catcher(async (req, res) => {
|
|
292
290
|
const form = await userForm(req);
|
|
@@ -305,8 +303,8 @@ router.get(
|
|
|
305
303
|
);
|
|
306
304
|
|
|
307
305
|
/**
|
|
308
|
-
*
|
|
309
|
-
* @param {object} req
|
|
306
|
+
*
|
|
307
|
+
* @param {object} req
|
|
310
308
|
* @returns {Form}
|
|
311
309
|
*/
|
|
312
310
|
const user_settings_form = (req) =>
|
|
@@ -341,7 +339,6 @@ const user_settings_form = (req) =>
|
|
|
341
339
|
*/
|
|
342
340
|
router.get(
|
|
343
341
|
"/settings",
|
|
344
|
-
setTenant,
|
|
345
342
|
isAdmin,
|
|
346
343
|
error_catcher(async (req, res) => {
|
|
347
344
|
const form = await user_settings_form(req);
|
|
@@ -365,7 +362,6 @@ router.get(
|
|
|
365
362
|
*/
|
|
366
363
|
router.post(
|
|
367
364
|
"/settings",
|
|
368
|
-
setTenant,
|
|
369
365
|
isAdmin,
|
|
370
366
|
error_catcher(async (req, res) => {
|
|
371
367
|
const form = await user_settings_form(req);
|
|
@@ -396,7 +392,6 @@ router.post(
|
|
|
396
392
|
*/
|
|
397
393
|
router.get(
|
|
398
394
|
"/ssl",
|
|
399
|
-
setTenant,
|
|
400
395
|
isAdmin,
|
|
401
396
|
error_catcher(async (req, res) => {
|
|
402
397
|
const isRoot = db.getTenantSchema() === db.connectObj.default_schema;
|
|
@@ -511,7 +506,7 @@ router.get(
|
|
|
511
506
|
);
|
|
512
507
|
|
|
513
508
|
/**
|
|
514
|
-
* @param {object} req
|
|
509
|
+
* @param {object} req
|
|
515
510
|
* @returns {Form}
|
|
516
511
|
*/
|
|
517
512
|
const ssl_form = (req) =>
|
|
@@ -528,7 +523,6 @@ const ssl_form = (req) =>
|
|
|
528
523
|
*/
|
|
529
524
|
router.get(
|
|
530
525
|
"/ssl/custom",
|
|
531
|
-
setTenant,
|
|
532
526
|
isAdmin,
|
|
533
527
|
error_catcher(async (req, res) => {
|
|
534
528
|
const form = await ssl_form(req);
|
|
@@ -553,7 +547,6 @@ router.get(
|
|
|
553
547
|
*/
|
|
554
548
|
router.post(
|
|
555
549
|
"/ssl/custom",
|
|
556
|
-
setTenant,
|
|
557
550
|
isAdmin,
|
|
558
551
|
error_catcher(async (req, res) => {
|
|
559
552
|
const form = await ssl_form(req);
|
|
@@ -590,7 +583,6 @@ router.post(
|
|
|
590
583
|
*/
|
|
591
584
|
router.get(
|
|
592
585
|
"/:id",
|
|
593
|
-
setTenant,
|
|
594
586
|
isAdmin,
|
|
595
587
|
error_catcher(async (req, res) => {
|
|
596
588
|
const { id } = req.params;
|
|
@@ -659,7 +651,6 @@ router.get(
|
|
|
659
651
|
*/
|
|
660
652
|
router.post(
|
|
661
653
|
"/save",
|
|
662
|
-
setTenant,
|
|
663
654
|
isAdmin,
|
|
664
655
|
error_catcher(async (req, res) => {
|
|
665
656
|
let form, sub2;
|
|
@@ -738,7 +729,6 @@ router.post(
|
|
|
738
729
|
*/
|
|
739
730
|
router.post(
|
|
740
731
|
"/reset-password/:id",
|
|
741
|
-
setTenant,
|
|
742
732
|
isAdmin,
|
|
743
733
|
error_catcher(async (req, res) => {
|
|
744
734
|
const { id } = req.params;
|
|
@@ -758,7 +748,6 @@ router.post(
|
|
|
758
748
|
*/
|
|
759
749
|
router.post(
|
|
760
750
|
"/send-verification/:id",
|
|
761
|
-
setTenant,
|
|
762
751
|
isAdmin,
|
|
763
752
|
error_catcher(async (req, res) => {
|
|
764
753
|
const { id } = req.params;
|
|
@@ -783,7 +772,6 @@ router.post(
|
|
|
783
772
|
*/
|
|
784
773
|
router.post(
|
|
785
774
|
"/gen-api-token/:id",
|
|
786
|
-
setTenant,
|
|
787
775
|
isAdmin,
|
|
788
776
|
error_catcher(async (req, res) => {
|
|
789
777
|
const { id } = req.params;
|
|
@@ -803,7 +791,6 @@ router.post(
|
|
|
803
791
|
*/
|
|
804
792
|
router.post(
|
|
805
793
|
"/remove-api-token/:id",
|
|
806
|
-
setTenant,
|
|
807
794
|
isAdmin,
|
|
808
795
|
error_catcher(async (req, res) => {
|
|
809
796
|
const { id } = req.params;
|
|
@@ -823,7 +810,6 @@ router.post(
|
|
|
823
810
|
*/
|
|
824
811
|
router.post(
|
|
825
812
|
"/set-random-password/:id",
|
|
826
|
-
setTenant,
|
|
827
813
|
isAdmin,
|
|
828
814
|
error_catcher(async (req, res) => {
|
|
829
815
|
const { id } = req.params;
|
|
@@ -847,7 +833,6 @@ router.post(
|
|
|
847
833
|
*/
|
|
848
834
|
router.post(
|
|
849
835
|
"/disable/:id",
|
|
850
|
-
setTenant,
|
|
851
836
|
isAdmin,
|
|
852
837
|
error_catcher(async (req, res) => {
|
|
853
838
|
const { id } = req.params;
|
|
@@ -866,7 +851,6 @@ router.post(
|
|
|
866
851
|
*/
|
|
867
852
|
router.post(
|
|
868
853
|
"/enable/:id",
|
|
869
|
-
setTenant,
|
|
870
854
|
isAdmin,
|
|
871
855
|
error_catcher(async (req, res) => {
|
|
872
856
|
const { id } = req.params;
|
|
@@ -884,7 +868,6 @@ router.post(
|
|
|
884
868
|
*/
|
|
885
869
|
router.post(
|
|
886
870
|
"/delete/:id",
|
|
887
|
-
setTenant,
|
|
888
871
|
isAdmin,
|
|
889
872
|
error_catcher(async (req, res) => {
|
|
890
873
|
const { id } = req.params;
|
package/auth/roleadmin.js
CHANGED
|
@@ -20,12 +20,7 @@ const {
|
|
|
20
20
|
post_dropdown_item,
|
|
21
21
|
post_delete_btn,
|
|
22
22
|
} = require("@saltcorn/markup");
|
|
23
|
-
const {
|
|
24
|
-
isAdmin,
|
|
25
|
-
setTenant,
|
|
26
|
-
error_catcher,
|
|
27
|
-
csrfField,
|
|
28
|
-
} = require("../routes/utils");
|
|
23
|
+
const { isAdmin, error_catcher, csrfField } = require("../routes/utils");
|
|
29
24
|
const { send_reset_email } = require("./resetpw");
|
|
30
25
|
const { getState } = require("@saltcorn/data/db/state");
|
|
31
26
|
const {
|
|
@@ -61,10 +56,10 @@ const router = new Router();
|
|
|
61
56
|
module.exports = router;
|
|
62
57
|
|
|
63
58
|
/**
|
|
64
|
-
* @param {Role} role
|
|
65
|
-
* @param {Layout[]} layouts
|
|
66
|
-
* @param {*} layout_by_role
|
|
67
|
-
* @param {object} req
|
|
59
|
+
* @param {Role} role
|
|
60
|
+
* @param {Layout[]} layouts
|
|
61
|
+
* @param {*} layout_by_role
|
|
62
|
+
* @param {object} req
|
|
68
63
|
* @returns {Form}
|
|
69
64
|
*/
|
|
70
65
|
const editRoleLayoutForm = (role, layouts, layout_by_role, req) =>
|
|
@@ -91,7 +86,7 @@ const editRoleLayoutForm = (role, layouts, layout_by_role, req) =>
|
|
|
91
86
|
);
|
|
92
87
|
|
|
93
88
|
/**
|
|
94
|
-
* @param {object} req
|
|
89
|
+
* @param {object} req
|
|
95
90
|
* @returns {Form}
|
|
96
91
|
*/
|
|
97
92
|
const roleForm = (req) =>
|
|
@@ -119,7 +114,6 @@ const roleForm = (req) =>
|
|
|
119
114
|
*/
|
|
120
115
|
router.get(
|
|
121
116
|
"/",
|
|
122
|
-
setTenant,
|
|
123
117
|
isAdmin,
|
|
124
118
|
error_catcher(async (req, res) => {
|
|
125
119
|
const roles = await User.get_roles();
|
|
@@ -172,7 +166,6 @@ router.get(
|
|
|
172
166
|
*/
|
|
173
167
|
router.get(
|
|
174
168
|
"/new",
|
|
175
|
-
setTenant,
|
|
176
169
|
isAdmin,
|
|
177
170
|
error_catcher(async (req, res) => {
|
|
178
171
|
const form = await roleForm(req);
|
|
@@ -198,7 +191,6 @@ router.get(
|
|
|
198
191
|
*/
|
|
199
192
|
router.post(
|
|
200
193
|
"/edit",
|
|
201
|
-
setTenant,
|
|
202
194
|
isAdmin,
|
|
203
195
|
error_catcher(async (req, res) => {
|
|
204
196
|
const form = await roleForm(req);
|
|
@@ -236,7 +228,6 @@ router.post(
|
|
|
236
228
|
*/
|
|
237
229
|
router.post(
|
|
238
230
|
"/setrolelayout/:id",
|
|
239
|
-
setTenant,
|
|
240
231
|
isAdmin,
|
|
241
232
|
error_catcher(async (req, res) => {
|
|
242
233
|
const { id } = req.params;
|
|
@@ -257,7 +248,6 @@ const unDeletableRoles = [1, 8, 10];
|
|
|
257
248
|
*/
|
|
258
249
|
router.post(
|
|
259
250
|
"/delete/:id",
|
|
260
|
-
setTenant,
|
|
261
251
|
isAdmin,
|
|
262
252
|
error_catcher(async (req, res) => {
|
|
263
253
|
const { id } = req.params;
|
package/auth/routes.js
CHANGED
|
@@ -12,12 +12,7 @@ const Form = require("@saltcorn/data/models/form");
|
|
|
12
12
|
const File = require("@saltcorn/data/models/file");
|
|
13
13
|
|
|
14
14
|
const { send_verification_email } = require("@saltcorn/data/models/email");
|
|
15
|
-
const {
|
|
16
|
-
setTenant,
|
|
17
|
-
error_catcher,
|
|
18
|
-
loggedIn,
|
|
19
|
-
csrfField,
|
|
20
|
-
} = require("../routes/utils.js");
|
|
15
|
+
const { error_catcher, loggedIn, csrfField } = require("../routes/utils.js");
|
|
21
16
|
const { getState } = require("@saltcorn/data/db/state");
|
|
22
17
|
const { send_reset_email } = require("./resetpw");
|
|
23
18
|
const { renderForm } = require("@saltcorn/markup");
|
|
@@ -62,8 +57,8 @@ const router = new Router();
|
|
|
62
57
|
module.exports = router;
|
|
63
58
|
|
|
64
59
|
/**
|
|
65
|
-
* @param {object} req
|
|
66
|
-
* @param {boolean} isCreating
|
|
60
|
+
* @param {object} req
|
|
61
|
+
* @param {boolean} isCreating
|
|
67
62
|
* @returns {Form}
|
|
68
63
|
*/
|
|
69
64
|
const loginForm = (req, isCreating) => {
|
|
@@ -104,7 +99,7 @@ const loginForm = (req, isCreating) => {
|
|
|
104
99
|
};
|
|
105
100
|
|
|
106
101
|
/**
|
|
107
|
-
* @param {object} req
|
|
102
|
+
* @param {object} req
|
|
108
103
|
* @returns {Form}
|
|
109
104
|
*/
|
|
110
105
|
const forgotForm = (req) =>
|
|
@@ -128,8 +123,8 @@ const forgotForm = (req) =>
|
|
|
128
123
|
});
|
|
129
124
|
|
|
130
125
|
/**
|
|
131
|
-
* @param {object} body
|
|
132
|
-
* @param {object} req
|
|
126
|
+
* @param {object} body
|
|
127
|
+
* @param {object} req
|
|
133
128
|
* @returns {Form}
|
|
134
129
|
*/
|
|
135
130
|
const resetForm = (body, req) => {
|
|
@@ -159,8 +154,8 @@ const resetForm = (body, req) => {
|
|
|
159
154
|
};
|
|
160
155
|
|
|
161
156
|
/**
|
|
162
|
-
* @param {string} current
|
|
163
|
-
* @param {boolean} noMethods
|
|
157
|
+
* @param {string} current
|
|
158
|
+
* @param {boolean} noMethods
|
|
164
159
|
* @returns {object}
|
|
165
160
|
*/
|
|
166
161
|
const getAuthLinks = (current, noMethods) => {
|
|
@@ -193,7 +188,6 @@ const getAuthLinks = (current, noMethods) => {
|
|
|
193
188
|
*/
|
|
194
189
|
router.get(
|
|
195
190
|
"/login",
|
|
196
|
-
setTenant,
|
|
197
191
|
error_catcher(async (req, res) => {
|
|
198
192
|
const login_form_name = getState().getConfig("login_form", "");
|
|
199
193
|
if (login_form_name) {
|
|
@@ -219,7 +213,7 @@ router.get(
|
|
|
219
213
|
* @function
|
|
220
214
|
* @memberof module:auth/routes~routesRouter
|
|
221
215
|
*/
|
|
222
|
-
router.get("/logout",
|
|
216
|
+
router.get("/logout", (req, res, next) => {
|
|
223
217
|
req.logout();
|
|
224
218
|
if (req.session.destroy)
|
|
225
219
|
req.session.destroy((err) => {
|
|
@@ -241,7 +235,6 @@ router.get("/logout", setTenant, (req, res, next) => {
|
|
|
241
235
|
*/
|
|
242
236
|
router.get(
|
|
243
237
|
"/forgot",
|
|
244
|
-
setTenant,
|
|
245
238
|
error_catcher(async (req, res) => {
|
|
246
239
|
if (getState().getConfig("allow_forgot", false)) {
|
|
247
240
|
res.sendAuthWrap(
|
|
@@ -266,7 +259,6 @@ router.get(
|
|
|
266
259
|
*/
|
|
267
260
|
router.get(
|
|
268
261
|
"/reset",
|
|
269
|
-
setTenant,
|
|
270
262
|
error_catcher(async (req, res) => {
|
|
271
263
|
const form = resetForm(req.query, req);
|
|
272
264
|
res.sendAuthWrap(req.__(`Reset password`), form, {});
|
|
@@ -280,7 +272,6 @@ router.get(
|
|
|
280
272
|
*/
|
|
281
273
|
router.get(
|
|
282
274
|
"/verify",
|
|
283
|
-
setTenant,
|
|
284
275
|
error_catcher(async (req, res) => {
|
|
285
276
|
const { token, email } = req.query;
|
|
286
277
|
const result = await User.verifyWithToken({
|
|
@@ -304,7 +295,6 @@ router.get(
|
|
|
304
295
|
*/
|
|
305
296
|
router.post(
|
|
306
297
|
"/reset",
|
|
307
|
-
setTenant,
|
|
308
298
|
error_catcher(async (req, res) => {
|
|
309
299
|
const result = await User.resetPasswordWithToken({
|
|
310
300
|
email: req.body.email,
|
|
@@ -330,7 +320,6 @@ router.post(
|
|
|
330
320
|
*/
|
|
331
321
|
router.post(
|
|
332
322
|
"/forgot",
|
|
333
|
-
setTenant,
|
|
334
323
|
error_catcher(async (req, res) => {
|
|
335
324
|
if (getState().getConfig("allow_forgot")) {
|
|
336
325
|
const { email } = req.body;
|
|
@@ -364,7 +353,6 @@ router.post(
|
|
|
364
353
|
*/
|
|
365
354
|
router.get(
|
|
366
355
|
"/signup",
|
|
367
|
-
setTenant,
|
|
368
356
|
error_catcher(async (req, res) => {
|
|
369
357
|
if (!getState().getConfig("allow_signup")) {
|
|
370
358
|
req.flash("danger", req.__("Signups not enabled"));
|
|
@@ -408,7 +396,6 @@ router.get(
|
|
|
408
396
|
*/
|
|
409
397
|
router.get(
|
|
410
398
|
"/create_first_user",
|
|
411
|
-
setTenant,
|
|
412
399
|
error_catcher(async (req, res) => {
|
|
413
400
|
const hasUsers = await User.nonEmpty();
|
|
414
401
|
if (!hasUsers) {
|
|
@@ -438,7 +425,6 @@ router.get(
|
|
|
438
425
|
*/
|
|
439
426
|
router.post(
|
|
440
427
|
"/create_from_restore",
|
|
441
|
-
setTenant,
|
|
442
428
|
error_catcher(async (req, res) => {
|
|
443
429
|
const hasUsers = await User.nonEmpty();
|
|
444
430
|
if (!hasUsers) {
|
|
@@ -467,7 +453,6 @@ router.post(
|
|
|
467
453
|
*/
|
|
468
454
|
router.post(
|
|
469
455
|
"/create_first_user",
|
|
470
|
-
setTenant,
|
|
471
456
|
error_catcher(async (req, res) => {
|
|
472
457
|
const hasUsers = await User.nonEmpty();
|
|
473
458
|
if (!hasUsers) {
|
|
@@ -510,9 +495,9 @@ router.post(
|
|
|
510
495
|
);
|
|
511
496
|
|
|
512
497
|
/**
|
|
513
|
-
* @param {string} new_user_view_name
|
|
514
|
-
* @param {object} req
|
|
515
|
-
* @param {boolean} askEmail
|
|
498
|
+
* @param {string} new_user_view_name
|
|
499
|
+
* @param {object} req
|
|
500
|
+
* @param {boolean} askEmail
|
|
516
501
|
* @returns {Promise<Form>}
|
|
517
502
|
* @throws {InvalidConfiguration}
|
|
518
503
|
*/
|
|
@@ -588,9 +573,9 @@ const getNewUserForm = async (new_user_view_name, req, askEmail) => {
|
|
|
588
573
|
};
|
|
589
574
|
|
|
590
575
|
/**
|
|
591
|
-
* @param {object} u
|
|
592
|
-
* @param {object} req
|
|
593
|
-
* @param {object} res
|
|
576
|
+
* @param {object} u
|
|
577
|
+
* @param {object} req
|
|
578
|
+
* @param {object} res
|
|
594
579
|
* @returns {void}
|
|
595
580
|
*/
|
|
596
581
|
const signup_login_with_user = (u, req, res) =>
|
|
@@ -620,7 +605,6 @@ const signup_login_with_user = (u, req, res) =>
|
|
|
620
605
|
*/
|
|
621
606
|
router.get(
|
|
622
607
|
"/signup_final_ext",
|
|
623
|
-
setTenant,
|
|
624
608
|
error_catcher(async (req, res) => {
|
|
625
609
|
const new_user_form = getState().getConfig("new_user_form");
|
|
626
610
|
if (!req.user || req.user.id || !new_user_form) {
|
|
@@ -642,7 +626,6 @@ router.get(
|
|
|
642
626
|
*/
|
|
643
627
|
router.post(
|
|
644
628
|
"/signup_final_ext",
|
|
645
|
-
setTenant,
|
|
646
629
|
error_catcher(async (req, res) => {
|
|
647
630
|
const new_user_form = getState().getConfig("new_user_form");
|
|
648
631
|
if (!req.user || req.user.id || !new_user_form) {
|
|
@@ -695,7 +678,6 @@ router.post(
|
|
|
695
678
|
*/
|
|
696
679
|
router.post(
|
|
697
680
|
"/signup_final",
|
|
698
|
-
setTenant,
|
|
699
681
|
error_catcher(async (req, res) => {
|
|
700
682
|
if (getState().getConfig("allow_signup")) {
|
|
701
683
|
const new_user_form = getState().getConfig("new_user_form");
|
|
@@ -757,7 +739,6 @@ router.post(
|
|
|
757
739
|
*/
|
|
758
740
|
router.post(
|
|
759
741
|
"/signup",
|
|
760
|
-
setTenant,
|
|
761
742
|
error_catcher(async (req, res) => {
|
|
762
743
|
if (!getState().getConfig("allow_signup")) {
|
|
763
744
|
req.flash("danger", req.__("Signups not enabled"));
|
|
@@ -868,8 +849,8 @@ router.post(
|
|
|
868
849
|
);
|
|
869
850
|
|
|
870
851
|
/**
|
|
871
|
-
* @param {object} req
|
|
872
|
-
* @param {object} res
|
|
852
|
+
* @param {object} req
|
|
853
|
+
* @param {object} res
|
|
873
854
|
* @returns {void}
|
|
874
855
|
*/
|
|
875
856
|
function handler(req, res) {
|
|
@@ -888,7 +869,7 @@ function handler(req, res) {
|
|
|
888
869
|
|
|
889
870
|
/**
|
|
890
871
|
* try to find a unique user id in login submit
|
|
891
|
-
* @param {object} body
|
|
872
|
+
* @param {object} body
|
|
892
873
|
* @returns {string}
|
|
893
874
|
*/
|
|
894
875
|
const userIdKey = (body) => {
|
|
@@ -920,7 +901,6 @@ const userLimiter = rateLimit({
|
|
|
920
901
|
*/
|
|
921
902
|
router.post(
|
|
922
903
|
"/login",
|
|
923
|
-
setTenant,
|
|
924
904
|
ipLimiter,
|
|
925
905
|
userLimiter,
|
|
926
906
|
passport.authenticate("local", {
|
|
@@ -954,7 +934,6 @@ router.post(
|
|
|
954
934
|
*/
|
|
955
935
|
router.get(
|
|
956
936
|
"/login-with/:method",
|
|
957
|
-
setTenant,
|
|
958
937
|
error_catcher(async (req, res, next) => {
|
|
959
938
|
const { method } = req.params;
|
|
960
939
|
const auth = getState().auth_methods[method];
|
|
@@ -977,7 +956,6 @@ router.get(
|
|
|
977
956
|
*/
|
|
978
957
|
router.post(
|
|
979
958
|
"/login-with/:method",
|
|
980
|
-
setTenant,
|
|
981
959
|
error_catcher(async (req, res, next) => {
|
|
982
960
|
const { method } = req.params;
|
|
983
961
|
const auth = getState().auth_methods[method];
|
|
@@ -999,8 +977,8 @@ router.post(
|
|
|
999
977
|
);
|
|
1000
978
|
|
|
1001
979
|
/**
|
|
1002
|
-
* @param {object}} req
|
|
1003
|
-
* @param {object} res
|
|
980
|
+
* @param {object}} req
|
|
981
|
+
* @param {object} res
|
|
1004
982
|
* @returns {void}
|
|
1005
983
|
*/
|
|
1006
984
|
const loginCallback = (req, res) => () => {
|
|
@@ -1024,7 +1002,6 @@ const loginCallback = (req, res) => () => {
|
|
|
1024
1002
|
*/
|
|
1025
1003
|
router.get(
|
|
1026
1004
|
"/callback/:method",
|
|
1027
|
-
setTenant,
|
|
1028
1005
|
error_catcher(async (req, res, next) => {
|
|
1029
1006
|
const { method } = req.params;
|
|
1030
1007
|
const auth = getState().auth_methods[method];
|
|
@@ -1039,7 +1016,7 @@ router.get(
|
|
|
1039
1016
|
);
|
|
1040
1017
|
|
|
1041
1018
|
/**
|
|
1042
|
-
* @param {object} req
|
|
1019
|
+
* @param {object} req
|
|
1043
1020
|
* @returns {Form}
|
|
1044
1021
|
*/
|
|
1045
1022
|
const changPwForm = (req) =>
|
|
@@ -1064,8 +1041,8 @@ const changPwForm = (req) =>
|
|
|
1064
1041
|
});
|
|
1065
1042
|
|
|
1066
1043
|
/**
|
|
1067
|
-
* @param {object} req
|
|
1068
|
-
* @param {object} user
|
|
1044
|
+
* @param {object} req
|
|
1045
|
+
* @param {object} user
|
|
1069
1046
|
* @returns {Form}
|
|
1070
1047
|
*/
|
|
1071
1048
|
const setLanguageForm = (req, user) =>
|
|
@@ -1152,7 +1129,6 @@ const userSettings = async ({ req, res, pwform, user }) => {
|
|
|
1152
1129
|
*/
|
|
1153
1130
|
router.post(
|
|
1154
1131
|
"/setlanguage",
|
|
1155
|
-
setTenant,
|
|
1156
1132
|
loggedIn,
|
|
1157
1133
|
error_catcher(async (req, res) => {
|
|
1158
1134
|
const u = await User.findOne({ id: req.user.id });
|
|
@@ -1191,7 +1167,6 @@ router.post(
|
|
|
1191
1167
|
*/
|
|
1192
1168
|
router.get(
|
|
1193
1169
|
"/settings",
|
|
1194
|
-
setTenant,
|
|
1195
1170
|
loggedIn,
|
|
1196
1171
|
error_catcher(async (req, res) => {
|
|
1197
1172
|
const user = await User.findOne({ id: req.user.id });
|
|
@@ -1232,7 +1207,6 @@ const setEmailForm = (req) =>
|
|
|
1232
1207
|
*/
|
|
1233
1208
|
router.get(
|
|
1234
1209
|
"/set-email",
|
|
1235
|
-
setTenant,
|
|
1236
1210
|
error_catcher(async (req, res) => {
|
|
1237
1211
|
res.sendWrap(
|
|
1238
1212
|
req.__("Set Email"),
|
|
@@ -1249,7 +1223,6 @@ router.get(
|
|
|
1249
1223
|
*/
|
|
1250
1224
|
router.post(
|
|
1251
1225
|
"/set-email",
|
|
1252
|
-
setTenant,
|
|
1253
1226
|
error_catcher(async (req, res) => {
|
|
1254
1227
|
const form = setEmailForm(req);
|
|
1255
1228
|
form.validate(req.body);
|
|
@@ -1299,7 +1272,6 @@ router.post(
|
|
|
1299
1272
|
*/
|
|
1300
1273
|
router.post(
|
|
1301
1274
|
"/settings",
|
|
1302
|
-
setTenant,
|
|
1303
1275
|
loggedIn,
|
|
1304
1276
|
error_catcher(async (req, res) => {
|
|
1305
1277
|
const user = await User.findOne({ id: req.user.id });
|
|
@@ -1350,7 +1322,6 @@ router.post(
|
|
|
1350
1322
|
*/
|
|
1351
1323
|
router.all(
|
|
1352
1324
|
"/verification-flow",
|
|
1353
|
-
setTenant,
|
|
1354
1325
|
loggedIn,
|
|
1355
1326
|
error_catcher(async (req, res) => {
|
|
1356
1327
|
const verifier = await (getState().verifier || (() => null))(req.user);
|
package/locales/en.json
CHANGED
|
@@ -814,5 +814,24 @@
|
|
|
814
814
|
"Number of columns (1-12) allocated to the list view": "Number of columns (1-12) allocated to the list view",
|
|
815
815
|
"New tenant template": "New tenant template",
|
|
816
816
|
"Copy site structure for new tenants from this tenant": "Copy site structure for new tenants from this tenant",
|
|
817
|
-
"Use this link: <a href=\"%s\">%s</a> to revisit your application at any time.": "Use this link: <a href=\"%s\">%s</a> to revisit your application at any time."
|
|
817
|
+
"Use this link: <a href=\"%s\">%s</a> to revisit your application at any time.": "Use this link: <a href=\"%s\">%s</a> to revisit your application at any time.",
|
|
818
|
+
"Use Amazon S3": "Use Amazon S3",
|
|
819
|
+
"Use Amazon S3 (or compatible) service to store files. If disabled, Saltcorn uses local disk. WARNING: Changing this may break your uploaded files!": "Use Amazon S3 (or compatible) service to store files. If disabled, Saltcorn uses local disk. WARNING: Changing this may break your uploaded files!",
|
|
820
|
+
"Amazon S3 Bucket": "Amazon S3 Bucket",
|
|
821
|
+
"Name you selected for your S3 bucket in AWS.": "Name you selected for your S3 bucket in AWS.",
|
|
822
|
+
"Amazon S3 Path Prefix": "Amazon S3 Path Prefix",
|
|
823
|
+
"Prefix you selected for your S3 bucket in AWS.": "Prefix you selected for your S3 bucket in AWS.",
|
|
824
|
+
"Amazon S3 Endpoint": "Amazon S3 Endpoint",
|
|
825
|
+
"Hostname of your S3 Compatible Storage provider. Defaults to 's3.amazonaws.com'.": "Hostname of your S3 Compatible Storage provider. Defaults to 's3.amazonaws.com'.",
|
|
826
|
+
"Amazon S3 Region": "Amazon S3 Region",
|
|
827
|
+
"AWS region you selected when creating your S3 bucket. Default ti 'us-east-1'.": "AWS region you selected when creating your S3 bucket. Default ti 'us-east-1'.",
|
|
828
|
+
"Amazon S3 Access Key ID": "Amazon S3 Access Key ID",
|
|
829
|
+
"Only required if you do not want to authenticate to S3 using an IAM role. Enter the Access Key ID provided by your Amazon EC2 administrator.": "Only required if you do not want to authenticate to S3 using an IAM role. Enter the Access Key ID provided by your Amazon EC2 administrator.",
|
|
830
|
+
"Amazon S3 Secret Access Key": "Amazon S3 Secret Access Key",
|
|
831
|
+
"The secret access key associated with your Amazon S3 Access Key ID.": "The secret access key associated with your Amazon S3 Access Key ID.",
|
|
832
|
+
"Use Amazon S3 Secure Connection.": "Use Amazon S3 Secure Connection.",
|
|
833
|
+
"Connect to Amazon S3 (or compatible) securely.": "Connect to Amazon S3 (or compatible) securely.",
|
|
834
|
+
"Storage settings": "Storage settings",
|
|
835
|
+
"Storage": "Storage",
|
|
836
|
+
"Storage settings updated": "Storage settings updated"
|
|
818
837
|
}
|
package/markup/admin.js
CHANGED
|
@@ -213,6 +213,22 @@ const send_users_page = (args) => {
|
|
|
213
213
|
});
|
|
214
214
|
};
|
|
215
215
|
|
|
216
|
+
/**
|
|
217
|
+
* @param {object} args
|
|
218
|
+
* @returns {void}
|
|
219
|
+
*/
|
|
220
|
+
const send_files_page = (args) => {
|
|
221
|
+
return send_settings_page({
|
|
222
|
+
main_section: "Files",
|
|
223
|
+
main_section_href: "/files",
|
|
224
|
+
sub_sections: [
|
|
225
|
+
{ text: "Files", href: "/files" },
|
|
226
|
+
{ text: "Storage", href: "/files/storage" },
|
|
227
|
+
],
|
|
228
|
+
...args,
|
|
229
|
+
});
|
|
230
|
+
};
|
|
231
|
+
|
|
216
232
|
/**
|
|
217
233
|
* @param {object} args
|
|
218
234
|
* @returns {void}
|
|
@@ -464,6 +480,7 @@ module.exports = {
|
|
|
464
480
|
send_users_page,
|
|
465
481
|
send_events_page,
|
|
466
482
|
send_admin_page,
|
|
483
|
+
send_files_page,
|
|
467
484
|
save_config_from_form,
|
|
468
485
|
flash_restart_if_required,
|
|
469
486
|
flash_restart,
|