@saltcorn/mobile-app 0.8.7-beta.5 → 0.8.7
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/package.json +1 -1
- package/www/index.html +44 -16
- package/www/js/routes/delete.js +2 -1
- package/www/js/routes/edit.js +1 -1
- package/www/js/routes/page.js +2 -2
- package/www/js/routes/view.js +4 -3
package/package.json
CHANGED
package/www/index.html
CHANGED
|
@@ -243,6 +243,35 @@
|
|
|
243
243
|
}
|
|
244
244
|
};
|
|
245
245
|
|
|
246
|
+
const isPublicEntryPoint = async (entryPoint) => {
|
|
247
|
+
try {
|
|
248
|
+
const tokens = entryPoint.split("/");
|
|
249
|
+
if (tokens.length < 3) throw new Error("The format is incorrect");
|
|
250
|
+
const name = tokens[tokens.length - 1];
|
|
251
|
+
const entryObj =
|
|
252
|
+
tokens[tokens.length - 2] === "view"
|
|
253
|
+
? saltcorn.data.models.View.findOne({ name: name })
|
|
254
|
+
: saltcorn.data.models.Page.findOne({ name: name });
|
|
255
|
+
if (!entryObj) throw new Error(`The object '${name}' does not exist`);
|
|
256
|
+
else return entryObj.min_role === 100;
|
|
257
|
+
} catch (error) {
|
|
258
|
+
console.log(
|
|
259
|
+
`Unable to inspect '${entryPoint}': ${
|
|
260
|
+
error.message ? error.message : "Unknown error"
|
|
261
|
+
}`
|
|
262
|
+
);
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
const showLogin = async (alerts) => {
|
|
268
|
+
const page = await router.resolve({
|
|
269
|
+
pathname: "get/auth/login",
|
|
270
|
+
alerts,
|
|
271
|
+
});
|
|
272
|
+
await replaceIframe(page.content);
|
|
273
|
+
};
|
|
274
|
+
|
|
246
275
|
// device is ready
|
|
247
276
|
const init = async () => {
|
|
248
277
|
document.addEventListener("resume", onResume, false);
|
|
@@ -366,26 +395,25 @@
|
|
|
366
395
|
alerts,
|
|
367
396
|
});
|
|
368
397
|
await replaceIframe(page.content);
|
|
369
|
-
} else {
|
|
398
|
+
} else if (await isPublicEntryPoint(entryPoint)) {
|
|
399
|
+
await publicLogin(entryPoint);
|
|
400
|
+
} else await showLogin(alerts);
|
|
401
|
+
} catch (error) {
|
|
402
|
+
if (error.httpCode === 401) await showLogin([]);
|
|
403
|
+
else {
|
|
404
|
+
state.mobileConfig.inErrorState = true;
|
|
370
405
|
const page = await router.resolve({
|
|
371
|
-
pathname: "get/
|
|
372
|
-
|
|
406
|
+
pathname: "get/error_page",
|
|
407
|
+
fullWrap: true,
|
|
408
|
+
alerts: [
|
|
409
|
+
{
|
|
410
|
+
type: "error",
|
|
411
|
+
msg: error.message ? error.message : "An error occured.",
|
|
412
|
+
},
|
|
413
|
+
],
|
|
373
414
|
});
|
|
374
415
|
await replaceIframe(page.content);
|
|
375
416
|
}
|
|
376
|
-
} catch (error) {
|
|
377
|
-
state.mobileConfig.inErrorState = true;
|
|
378
|
-
const page = await router.resolve({
|
|
379
|
-
pathname: "get/error_page",
|
|
380
|
-
fullWrap: true,
|
|
381
|
-
alerts: [
|
|
382
|
-
{
|
|
383
|
-
type: "error",
|
|
384
|
-
msg: error.message ? error.message : "An error occured.",
|
|
385
|
-
},
|
|
386
|
-
],
|
|
387
|
-
});
|
|
388
|
-
await replaceIframe(page.content);
|
|
389
417
|
}
|
|
390
418
|
};
|
|
391
419
|
|
package/www/js/routes/delete.js
CHANGED
|
@@ -10,7 +10,8 @@ const deleteRows = async (context) => {
|
|
|
10
10
|
if (role_id <= table.min_role_write) {
|
|
11
11
|
await table.deleteRows({ id });
|
|
12
12
|
// TODO 'table.is_owner' check?
|
|
13
|
-
} else
|
|
13
|
+
} else
|
|
14
|
+
throw new saltcorn.data.utils.NotAuthorized(i18next.t("Not authorized"));
|
|
14
15
|
if (isOfflineMode && !(await offlineHelper.hasOfflineRows())) {
|
|
15
16
|
await offlineHelper.setOfflineSession(null);
|
|
16
17
|
}
|
package/www/js/routes/edit.js
CHANGED
|
@@ -9,7 +9,7 @@ const postToggleField = async (context) => {
|
|
|
9
9
|
state.mobileConfig;
|
|
10
10
|
if (isOfflineMode || localTableIds.indexOf(table.id) >= 0) {
|
|
11
11
|
if (role_id > table.min_role_write)
|
|
12
|
-
throw new
|
|
12
|
+
throw new saltcorn.data.utils.NotAuthorized(i18next.t("Not authorized"));
|
|
13
13
|
await table.toggleBool(+id, field_name);
|
|
14
14
|
if (isOfflineMode && !(await offlineHelper.getLastOfflineSession()))
|
|
15
15
|
await offlineHelper.setOfflineSession({ offlineUser: user_name });
|
package/www/js/routes/page.js
CHANGED
|
@@ -7,7 +7,7 @@ const postPageAction = async (context) => {
|
|
|
7
7
|
const page = await saltcorn.data.models.Page.findOne({ name: page_name });
|
|
8
8
|
const req = new MobileRequest({ xhr: context.xhr });
|
|
9
9
|
if (state.mobileConfig.role_id > page.min_role) {
|
|
10
|
-
throw new
|
|
10
|
+
throw new saltcorn.data.utils.NotAuthorized(req.__("Not authorized"));
|
|
11
11
|
}
|
|
12
12
|
let col;
|
|
13
13
|
saltcorn.data.models.layout.traverseSync(page.layout, {
|
|
@@ -30,7 +30,7 @@ const getPage = async (context) => {
|
|
|
30
30
|
const page = await saltcorn.data.models.Page.findOne({ name: page_name });
|
|
31
31
|
const req = new MobileRequest({ xhr: context.xhr });
|
|
32
32
|
if (state.mobileConfig.role_id > page.min_role) {
|
|
33
|
-
throw new
|
|
33
|
+
throw new saltcorn.data.utils.NotAuthorized(req.__("Not authorized"));
|
|
34
34
|
}
|
|
35
35
|
const query = parseQuery(context.query);
|
|
36
36
|
const res = new MobileResponse();
|
package/www/js/routes/view.js
CHANGED
|
@@ -23,7 +23,7 @@ const postView = async (context) => {
|
|
|
23
23
|
mobileCfg.role_id > view.min_role &&
|
|
24
24
|
!(await view.authorise_post({ body, req, ...view }))
|
|
25
25
|
) {
|
|
26
|
-
throw new
|
|
26
|
+
throw new saltcorn.data.utils.NotAuthorized(req.__("Not authorized"));
|
|
27
27
|
}
|
|
28
28
|
await view.runPost(
|
|
29
29
|
{},
|
|
@@ -52,7 +52,8 @@ const postViewRoute = async (context) => {
|
|
|
52
52
|
const res = new MobileResponse();
|
|
53
53
|
const state = saltcorn.data.state.getState();
|
|
54
54
|
const { role_id, isOfflineMode, user_name } = state.mobileConfig;
|
|
55
|
-
if (role_id > view.min_role)
|
|
55
|
+
if (role_id > view.min_role)
|
|
56
|
+
throw new saltcorn.data.utils.NotAuthorized(req.__("Not authorized"));
|
|
56
57
|
await view.runRoute(
|
|
57
58
|
context.params.route,
|
|
58
59
|
context.data,
|
|
@@ -80,7 +81,7 @@ const getView = async (context) => {
|
|
|
80
81
|
state.mobileConfig.role_id > view.min_role &&
|
|
81
82
|
!(await view.authorise_get({ query, req, ...view }))
|
|
82
83
|
)
|
|
83
|
-
throw new
|
|
84
|
+
throw new saltcorn.data.utils.NotAuthorized(req.__("Not authorized"));
|
|
84
85
|
const contents = await view.run_possibly_on_page(
|
|
85
86
|
query,
|
|
86
87
|
req,
|