@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.
- package/app.js +18 -11
- package/auth/admin.js +370 -120
- package/auth/roleadmin.js +5 -23
- package/auth/routes.js +40 -15
- package/locales/de.json +1049 -273
- package/locales/en.json +58 -3
- package/locales/es.json +134 -134
- package/locales/it.json +6 -1
- package/locales/ru.json +44 -7
- package/markup/admin.js +46 -42
- package/markup/forms.js +4 -3
- package/package.json +8 -7
- package/public/blockly.js +19 -31
- package/public/diagram_utils.js +530 -0
- package/public/gridedit.js +4 -1
- package/public/jquery-menu-editor.min.js +112 -112
- package/public/saltcorn-common.js +31 -8
- package/public/saltcorn.css +11 -0
- package/public/saltcorn.js +211 -70
- package/restart_watcher.js +1 -0
- package/routes/actions.js +6 -14
- package/routes/admin.js +229 -79
- package/routes/api.js +19 -2
- package/routes/common_lists.js +137 -134
- package/routes/delete.js +6 -5
- package/routes/diagram.js +43 -117
- package/routes/edit.js +5 -10
- package/routes/fields.js +63 -29
- package/routes/files.js +137 -101
- package/routes/homepage.js +2 -2
- package/routes/infoarch.js +2 -2
- package/routes/list.js +12 -13
- package/routes/page.js +16 -3
- package/routes/pageedit.js +13 -8
- package/routes/scapi.js +1 -1
- package/routes/search.js +1 -1
- package/routes/tables.js +9 -14
- package/routes/tag_entries.js +31 -10
- package/routes/tags.js +10 -10
- package/routes/tenant.js +114 -50
- package/routes/utils.js +12 -0
- package/routes/view.js +3 -4
- package/routes/viewedit.js +57 -55
- package/serve.js +5 -0
- package/tests/admin.test.js +6 -2
- package/tests/auth.test.js +20 -0
- package/tests/fields.test.js +1 -0
- package/tests/files.test.js +11 -20
- package/tests/tenant.test.js +12 -2
- 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
|
|
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
|
|
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
|
-
|
|
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
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
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:
|
|
239
|
+
sub: "public",
|
|
211
240
|
user: {
|
|
212
|
-
|
|
213
|
-
|
|
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:
|
|
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: "
|
|
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
|
})
|