@saltcorn/server 0.6.1-beta.3 → 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 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("/", setTenant, error_catcher(homepage));
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/index.js CHANGED
@@ -2,6 +2,19 @@
2
2
  /**
3
3
  *
4
4
  * @category server
5
- * @module auth/inde
5
+ * @module auth/index
6
6
  * @subcategory auth
7
- */
7
+ */
8
+
9
+ /**
10
+ * All files in the auth module.
11
+ * @namespace auth_overview
12
+ * @property {module:auth/admin} admin
13
+ * @property {module:auth/resetpw} resetpw
14
+ * @property {module:auth/roleadmin} roleadmin
15
+ * @property {module:auth/routes} routes
16
+ * @property {module:auth/testhelp} testhelp
17
+ *
18
+ * @category server
19
+ * @subcategory auth
20
+ */
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", setTenant, (req, res, next) => {
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/index.js CHANGED
@@ -3,4 +3,20 @@
3
3
  *
4
4
  * @category server
5
5
  * @module server/index
6
- */
6
+ */
7
+
8
+ /**
9
+ * All files and sub-modules in the saltcorn-markup package.
10
+ * @namespace server_overview
11
+ * @property {module:auth/index~auth_overview} auth
12
+ * @property {module:markup/index~markup_overview} markup
13
+ * @property {module:routes/index~routes_overview} routes
14
+ *
15
+ * @property {module:app} app
16
+ * @property {module:errors} errors
17
+ * @property {module:load_plugins} load_plugins
18
+ * @property {module:serve} serve
19
+ * @property {module:systemd} systemd
20
+ * @property {module:wrapper} wrapper
21
+ * @category server
22
+ */
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
  }