@saltcorn/server 0.7.4 → 0.8.0-beta.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 (50) hide show
  1. package/app.js +18 -11
  2. package/auth/admin.js +370 -120
  3. package/auth/roleadmin.js +5 -23
  4. package/auth/routes.js +40 -15
  5. package/locales/de.json +1049 -273
  6. package/locales/en.json +58 -3
  7. package/locales/es.json +134 -134
  8. package/locales/it.json +6 -1
  9. package/locales/ru.json +44 -7
  10. package/markup/admin.js +46 -42
  11. package/markup/forms.js +4 -3
  12. package/package.json +8 -7
  13. package/public/blockly.js +19 -31
  14. package/public/diagram_utils.js +530 -0
  15. package/public/gridedit.js +4 -1
  16. package/public/jquery-menu-editor.min.js +112 -112
  17. package/public/saltcorn-common.js +31 -8
  18. package/public/saltcorn.css +11 -0
  19. package/public/saltcorn.js +211 -70
  20. package/restart_watcher.js +1 -0
  21. package/routes/actions.js +6 -14
  22. package/routes/admin.js +229 -79
  23. package/routes/api.js +19 -2
  24. package/routes/common_lists.js +137 -134
  25. package/routes/delete.js +6 -5
  26. package/routes/diagram.js +43 -117
  27. package/routes/edit.js +5 -10
  28. package/routes/fields.js +63 -29
  29. package/routes/files.js +137 -101
  30. package/routes/homepage.js +2 -2
  31. package/routes/infoarch.js +2 -2
  32. package/routes/list.js +12 -13
  33. package/routes/page.js +16 -3
  34. package/routes/pageedit.js +13 -8
  35. package/routes/scapi.js +1 -1
  36. package/routes/search.js +1 -1
  37. package/routes/tables.js +9 -14
  38. package/routes/tag_entries.js +31 -10
  39. package/routes/tags.js +10 -10
  40. package/routes/tenant.js +114 -50
  41. package/routes/utils.js +12 -0
  42. package/routes/view.js +3 -4
  43. package/routes/viewedit.js +57 -55
  44. package/serve.js +5 -0
  45. package/tests/admin.test.js +6 -2
  46. package/tests/auth.test.js +20 -0
  47. package/tests/fields.test.js +1 -0
  48. package/tests/files.test.js +11 -20
  49. package/tests/tenant.test.js +12 -2
  50. package/tests/viewedit.test.js +15 -1
package/auth/roleadmin.js CHANGED
@@ -4,45 +4,27 @@
4
4
  * @subcategory auth
5
5
  */
6
6
  const Router = require("express-promise-router");
7
- const { contract, is } = require("contractis");
8
7
 
9
- const db = require("@saltcorn/data/db");
8
+ //const db = require("@saltcorn/data/db");
10
9
  const User = require("@saltcorn/data/models/user");
11
10
  const Role = require("@saltcorn/data/models/role");
12
- const Field = require("@saltcorn/data/models/field");
13
11
  const Form = require("@saltcorn/data/models/form");
14
12
  const {
15
13
  mkTable,
16
14
  renderForm,
17
15
  link,
18
- post_btn,
19
- settingsDropdown,
20
- post_dropdown_item,
21
16
  post_delete_btn,
22
17
  } = require("@saltcorn/markup");
23
18
  const { isAdmin, error_catcher, csrfField } = require("../routes/utils");
24
- const { send_reset_email } = require("./resetpw");
25
19
  const { getState } = require("@saltcorn/data/db/state");
26
20
  const {
27
- a,
28
- div,
29
- button,
30
21
  text,
31
- span,
32
- code,
33
22
  form,
34
23
  option,
35
24
  select,
36
- br,
37
- h4,
38
- h5,
39
- p,
40
25
  } = require("@saltcorn/markup/tags");
41
- const Table = require("@saltcorn/data/models/table");
42
26
  const {
43
27
  send_users_page,
44
- config_fields_form,
45
- save_config_from_form,
46
28
  } = require("../markup/admin");
47
29
 
48
30
  /**
@@ -77,7 +59,7 @@ const editRoleLayoutForm = (role, layouts, layout_by_role, req) =>
77
59
  value: layout,
78
60
  ...((layout_by_role[role.id]
79
61
  ? layout_by_role[role.id] === layout
80
- : ix == layouts.length - 1) && { selected: true }),
62
+ : ix === layouts.length - 1) && { selected: true }),
81
63
  },
82
64
  text(layout)
83
65
  )
@@ -86,9 +68,9 @@ const editRoleLayoutForm = (role, layouts, layout_by_role, req) =>
86
68
  );
87
69
 
88
70
  /**
71
+ *
89
72
  * @param {Role} role
90
- * @param {Layout[]} layouts
91
- * @param {*} layout_by_role
73
+ * @param twofa_policy_by_role
92
74
  * @param {object} req
93
75
  * @returns {Form}
94
76
  */
@@ -139,7 +121,7 @@ router.get(
139
121
  isAdmin,
140
122
  error_catcher(async (req, res) => {
141
123
  const roles = await User.get_roles();
142
- var roleMap = {};
124
+ let roleMap = {};
143
125
  roles.forEach((r) => {
144
126
  roleMap[r.id] = r.role;
145
127
  });
package/auth/routes.js CHANGED
@@ -201,32 +201,57 @@ const getAuthLinks = (current, noMethods) => {
201
201
 
202
202
  const loginWithJwt = async (email, password, saltcornApp, res) => {
203
203
  const loginFn = async () => {
204
- const user = await User.findOne({ email });
205
- if (user && user.checkPassword(password)) {
206
- const now = new Date();
207
- const jwt_secret = db.connectObj.jwt_secret;
204
+ const publicUserLink = getState().getConfig("public_user_link");
205
+ const jwt_secret = db.connectObj.jwt_secret;
206
+ if (email && password) {
207
+ // with credentials
208
+ const user = await User.findOne({ email });
209
+ if (user && user.checkPassword(password)) {
210
+ const now = new Date();
211
+ const token = jwt.sign(
212
+ {
213
+ sub: email,
214
+ user: {
215
+ id: user.id,
216
+ email: user.email,
217
+ role_id: user.role_id,
218
+ language: user.language ? user.language : "en",
219
+ disabled: user.disabled,
220
+ },
221
+ iss: "saltcorn@saltcorn",
222
+ aud: "saltcorn-mobile-app",
223
+ iat: now.valueOf(),
224
+ tenant: db.getTenantSchema(),
225
+ },
226
+ jwt_secret
227
+ );
228
+ if (!user.last_mobile_login) await user.updateLastMobileLogin(now);
229
+ res.json(token);
230
+ } else {
231
+ res.json({
232
+ alerts: [{ type: "danger", msg: "Incorrect user or password" }],
233
+ });
234
+ }
235
+ } else if (publicUserLink) {
236
+ // public login
208
237
  const token = jwt.sign(
209
238
  {
210
- sub: email,
239
+ sub: "public",
211
240
  user: {
212
- id: user.id,
213
- email: user.email,
214
- role_id: user.role_id,
215
- language: user.language ? user.language : "en",
216
- disabled: user.disabled,
241
+ role_id: 10,
242
+ language: "en",
217
243
  },
218
244
  iss: "saltcorn@saltcorn",
219
245
  aud: "saltcorn-mobile-app",
220
- iat: now.valueOf(),
246
+ iat: new Date().valueOf(),
221
247
  tenant: db.getTenantSchema(),
222
248
  },
223
249
  jwt_secret
224
250
  );
225
- if (!user.last_mobile_login) await user.updateLastMobileLogin(now);
226
251
  res.json(token);
227
252
  } else {
228
253
  res.json({
229
- alerts: [{ type: "danger", msg: "Incorrect user or password" }],
254
+ alerts: [{ type: "danger", msg: "The public login is deactivated" }],
230
255
  });
231
256
  }
232
257
  };
@@ -1158,7 +1183,7 @@ const setLanguageForm = (req, user) =>
1158
1183
  option(
1159
1184
  {
1160
1185
  value: locale,
1161
- ...(user && user.language === locale && { selected: true }),
1186
+ ...(((user && user.language === locale) || (user && !user.language && req.getLocale() === locale)) && { selected: true }),
1162
1187
  },
1163
1188
  language
1164
1189
  )
@@ -1382,7 +1407,7 @@ router.get(
1382
1407
  return;
1383
1408
  }
1384
1409
  res.sendWrap(
1385
- req.__("User settings"),
1410
+ req.__("User settings") || "User settings",
1386
1411
  await userSettings({ req, res, pwform: changPwForm(req), user })
1387
1412
  );
1388
1413
  })