@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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@saltcorn/mobile-app",
3
3
  "displayName": "Saltcorn mobile app",
4
- "version": "0.8.7-beta.5",
4
+ "version": "0.8.7",
5
5
  "description": "Apache Cordova application with @saltcorn/markup",
6
6
  "main": "index.js",
7
7
  "scripts": {
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/auth/login",
372
- alerts,
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
 
@@ -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 throw new Error(i18next.t("Not authorized"));
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
  }
@@ -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 Error(i18next.t("Not authorized"));
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 });
@@ -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 Error(req.__("Not authorized"));
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 Error(req.__("Not authorized"));
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();
@@ -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 Error(req.__("Not authorized"));
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) throw new Error(req.__("Not authorized"));
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 Error(req.__("Not authorized"));
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,