adminizer 4.1.0-build.10 → 4.1.0-build.12

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 (61) hide show
  1. package/Readme.md +11 -1
  2. package/controllers/add.js +2 -2
  3. package/controllers/addGroup.js +2 -2
  4. package/controllers/addUser.js +2 -2
  5. package/controllers/catalog/Catalog.js +2 -2
  6. package/controllers/catalog/FrontentCatalogAdapter.js +1 -1
  7. package/controllers/ckeditorUpload.js +2 -2
  8. package/controllers/dashboard.js +1 -1
  9. package/controllers/edit.js +2 -2
  10. package/controllers/editGroup.js +2 -2
  11. package/controllers/editUser.js +2 -2
  12. package/controllers/form.js +2 -2
  13. package/controllers/getAllWidgets.js +3 -3
  14. package/controllers/list.js +2 -2
  15. package/controllers/login.js +14 -9
  16. package/controllers/media-manager/mediaManagerApi.js +2 -2
  17. package/controllers/navigation/edit.js +1 -1
  18. package/controllers/processInstallFinalize.js +2 -2
  19. package/controllers/processInstallStep.d.ts +0 -1
  20. package/controllers/processInstallStep.js +122 -132
  21. package/controllers/remove.js +2 -2
  22. package/controllers/timezones.js +1 -1
  23. package/controllers/view.js +2 -2
  24. package/controllers/welcome.js +1 -1
  25. package/controllers/widgets/Action.js +2 -2
  26. package/controllers/widgets/Custom.js +2 -2
  27. package/controllers/widgets/Info.js +2 -2
  28. package/controllers/widgets/switch.js +2 -2
  29. package/controllers/widgetsDB.js +3 -3
  30. package/helpers/accessRightsHelper.d.ts +3 -2
  31. package/helpers/accessRightsHelper.js +1 -1
  32. package/helpers/inertiaActionsHelper.js +1 -1
  33. package/helpers/inertiaAddHelper.d.ts +1 -1
  34. package/helpers/inertiaGroupHelper.d.ts +4 -2
  35. package/helpers/inertiaGroupHelper.js +1 -1
  36. package/helpers/inertiaListHelper.js +5 -5
  37. package/helpers/inertiaMenuHelper.js +1 -1
  38. package/helpers/inertiaUserHelper.d.ts +3 -1
  39. package/helpers/inertiaUserHelper.js +1 -1
  40. package/interfaces/adminpanelConfig.d.ts +4 -2
  41. package/interfaces/global.d.ts +5 -26
  42. package/lib/Adminizer.d.ts +1 -0
  43. package/lib/Adminizer.js +3 -1
  44. package/lib/catalog/Navigation.js +6 -6
  45. package/lib/installStepper/installStepper.js +5 -5
  46. package/lib/v4/DataAccessor.d.ts +2 -1
  47. package/lib/v4/DataAccessor.js +1 -1
  48. package/lib/v4/helper/jwt.d.ts +10 -0
  49. package/lib/v4/helper/jwt.js +18 -0
  50. package/lib/widgets/widgetHandler.d.ts +2 -1
  51. package/models/GroupAP.d.ts +1 -1
  52. package/models/UserAP.d.ts +6 -4
  53. package/models/UserAP.js +2 -2
  54. package/package.json +8 -5
  55. package/policies/checkAuth.js +4 -3
  56. package/policies/setLocale.js +2 -2
  57. package/system/Router.js +8 -8
  58. package/system/bindAuthorization.js +1 -2
  59. package/system/bindInertia.js +8 -8
  60. package/system/bindInstallStepper.js +1 -1
  61. package/system/bindReqFunctions.js +16 -0
package/Readme.md CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  <span class="badge-npmversion"><a href="https://npmjs.org/package/adminizer" title="View this project on NPM"><img src="https://img.shields.io/npm/v/adminizer.svg" alt="NPM version" /></a></span>
4
4
 
5
-
6
5
  Adminizer is a modern admin panel built as an independent module for Node.js.
7
6
  The backend is written in TypeScript, and the frontend uses React, providing high modularity and flexibility.
8
7
  The system is specifically designed to be **framework- and ORM-agnostic**, running directly inside the Node.js Runtime.
@@ -11,6 +10,17 @@ Thanks to this approach, Adminizer can be integrated into any server-side applic
11
10
  The project is **open-source**, **free to use**, and focused on building an **open community**.
12
11
  We would like to express special thanks to **Konstantin Zolotarev**, who laid the foundation with the **sails-adminpanel** project, which we later reworked and generalized.
13
12
 
13
+ ---
14
+
15
+ Follow us for updates, tutorials, and community discussions:
16
+
17
+ [![Telegram](https://img.shields.io/badge/Telegram-Join%20Chat-blue?logo=telegram)](https://t.me/talks_adminizer)
18
+ [![X / Twitter](https://img.shields.io/badge/X-%40admnzr-000000?logo=twitter)](https://x.com/admnzr)
19
+ [![Facebook](https://img.shields.io/badge/Facebook-Adminizer-blue?logo=facebook)](https://www.facebook.com/profile.php?id=61575683442665)
20
+
21
+ ---
22
+
23
+
14
24
  The core principle of Adminizer is **maximum extensibility**.
15
25
  The admin panel can be configured and expanded **at runtime** without requiring rebuilds or server restarts.
16
26
  We aimed to make the system as easy to integrate as possible: just install the package and immediately gain access to a powerful admin interface.
@@ -14,10 +14,10 @@ export default async function add(req, res) {
14
14
  return req.Inertia.redirect(`${req.adminizer.config.routePrefix}/${entity.uri}`);
15
15
  }
16
16
  if (req.adminizer.config.auth.enable) {
17
- if (!req.session.UserAP) {
17
+ if (!req.user) {
18
18
  return req.Inertia.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
19
19
  }
20
- else if (!req.adminizer.accessRightsHelper.hasPermission(`create-${entity.name}-model`, req.session.UserAP)) {
20
+ else if (!req.adminizer.accessRightsHelper.hasPermission(`create-${entity.name}-model`, req.user)) {
21
21
  return res.sendStatus(403);
22
22
  }
23
23
  }
@@ -4,10 +4,10 @@ import { inertiaGroupHelper } from "../helpers/inertiaGroupHelper";
4
4
  export default async function addGroup(req, res) {
5
5
  let entity = ControllerHelper.findEntityObject(req);
6
6
  if (req.adminizer.config.auth.enable) {
7
- if (!req.session.UserAP) {
7
+ if (!req.user) {
8
8
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
9
9
  }
10
- else if (!req.adminizer.accessRightsHelper.hasPermission(`create-${entity.name}-model`, req.session.UserAP)) {
10
+ else if (!req.adminizer.accessRightsHelper.hasPermission(`create-${entity.name}-model`, req.user)) {
11
11
  return res.sendStatus(403);
12
12
  }
13
13
  }
@@ -5,10 +5,10 @@ import { inertiaUserHelper } from "../helpers/inertiaUserHelper";
5
5
  export default async function (req, res) {
6
6
  let entity = ControllerHelper.findEntityObject(req);
7
7
  if (req.adminizer.config.auth.enable) {
8
- if (!req.session.UserAP) {
8
+ if (!req.user) {
9
9
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
10
10
  }
11
- else if (!req.adminizer.accessRightsHelper.hasPermission(`create-${entity.name}-model`, req.session.UserAP)) {
11
+ else if (!req.adminizer.accessRightsHelper.hasPermission(`create-${entity.name}-model`, req.user)) {
12
12
  return res.sendStatus(403);
13
13
  }
14
14
  }
@@ -6,10 +6,10 @@ export async function catalogController(req, res) {
6
6
  let id = req.params.id ? req.params.id : '';
7
7
  const postfix = id ? `${slug}-${id}` : `${slug}`;
8
8
  if (req.adminizer.config.auth.enable) {
9
- if (!req.session.UserAP) {
9
+ if (!req.user) {
10
10
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
11
11
  }
12
- else if (!req.adminizer.accessRightsHelper.hasPermission(`catalog-${postfix}`, req.session.UserAP)) {
12
+ else if (!req.adminizer.accessRightsHelper.hasPermission(`catalog-${postfix}`, req.user)) {
13
13
  return res.sendStatus(403);
14
14
  }
15
15
  }
@@ -38,7 +38,7 @@ export class VueCatalog {
38
38
  obj[actionHandler.name] = "";
39
39
  }
40
40
  let messages = obj;
41
- req.i18n.setLocale(req.session.UserAP.locale);
41
+ req.i18n.setLocale(req.user.locale);
42
42
  let outMessages = {};
43
43
  for (const mess of Object.keys(messages)) {
44
44
  outMessages[mess] = req.i18n.__(mess);
@@ -4,7 +4,7 @@ import { Adminizer } from "../lib/Adminizer";
4
4
  export default function upload(req, res) {
5
5
  let entity = ControllerHelper.findEntityObject(req);
6
6
  if (req.adminizer.config.auth.enable) {
7
- if (!req.session.UserAP) {
7
+ if (!req.user) {
8
8
  res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
9
9
  return;
10
10
  }
@@ -13,7 +13,7 @@ export default function upload(req, res) {
13
13
  `create-${entity.name}-model`,
14
14
  `update-${entity.name}-form`,
15
15
  `create-${entity.name}-form`
16
- ], req.session.UserAP)) {
16
+ ], req.user)) {
17
17
  res.sendStatus(403);
18
18
  return;
19
19
  }
@@ -1,5 +1,5 @@
1
1
  export default function (req, res) {
2
- if (req.adminizer.config.auth.enable && !req.session.UserAP) {
2
+ if (req.adminizer.config.auth.enable && !req.user) {
3
3
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
4
4
  }
5
5
  return req.Inertia.render({
@@ -19,10 +19,10 @@ export default async function edit(req, res) {
19
19
  return res.redirect(`${req.adminizer.config.routePrefix}/${entity.uri}`);
20
20
  }
21
21
  if (req.adminizer.config.auth.enable) {
22
- if (!req.session.UserAP) {
22
+ if (!req.user) {
23
23
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
24
24
  }
25
- else if (!req.adminizer.accessRightsHelper.hasPermission(`update-${entity.name}-model`, req.session.UserAP)) {
25
+ else if (!req.adminizer.accessRightsHelper.hasPermission(`update-${entity.name}-model`, req.user)) {
26
26
  return res.sendStatus(403);
27
27
  }
28
28
  }
@@ -4,10 +4,10 @@ import { inertiaGroupHelper } from "../helpers/inertiaGroupHelper";
4
4
  export default async function editGroup(req, res) {
5
5
  let entity = ControllerHelper.findEntityObject(req);
6
6
  if (req.adminizer.config.auth.enable) {
7
- if (!req.session.UserAP) {
7
+ if (!req.user) {
8
8
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
9
9
  }
10
- else if (!req.adminizer.accessRightsHelper.hasPermission(`update-${entity.name}-model`, req.session.UserAP)) {
10
+ else if (!req.adminizer.accessRightsHelper.hasPermission(`update-${entity.name}-model`, req.user)) {
11
11
  return res.sendStatus(403);
12
12
  }
13
13
  }
@@ -5,10 +5,10 @@ import { inertiaUserHelper } from "../helpers/inertiaUserHelper";
5
5
  export default async function (req, res) {
6
6
  let entity = ControllerHelper.findEntityObject(req);
7
7
  if (req.adminizer.config.auth.enable) {
8
- if (!req.session.UserAP) {
8
+ if (!req.user) {
9
9
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
10
10
  }
11
- else if (!req.adminizer.accessRightsHelper.hasPermission(`update-${entity.name}-model`, req.session.UserAP)) {
11
+ else if (!req.adminizer.accessRightsHelper.hasPermission(`update-${entity.name}-model`, req.user)) {
12
12
  return res.sendStatus(403);
13
13
  }
14
14
  }
@@ -8,10 +8,10 @@ export default async function form(req, res) {
8
8
  return res.status(404).send({ error: 'Not Found' });
9
9
  }
10
10
  if (req.adminizer.config.auth.enable) {
11
- if (!req.session.UserAP) {
11
+ if (!req.user) {
12
12
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
13
13
  }
14
- else if (!req.adminizer.accessRightsHelper.hasPermission(`update-${slug}-form`, req.session.UserAP)) {
14
+ else if (!req.adminizer.accessRightsHelper.hasPermission(`update-${slug}-form`, req.user)) {
15
15
  return res.sendStatus(403);
16
16
  }
17
17
  }
@@ -1,15 +1,15 @@
1
1
  export default async function getAllWidgets(req, res) {
2
2
  if (req.adminizer.config.auth.enable) {
3
- if (!req.session.UserAP) {
3
+ if (!req.user) {
4
4
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
5
5
  }
6
- else if (!req.adminizer.accessRightsHelper.hasPermission(`widgets`, req.session.UserAP)) {
6
+ else if (!req.adminizer.accessRightsHelper.hasPermission(`widgets`, req.user)) {
7
7
  return res.sendStatus(403);
8
8
  }
9
9
  }
10
10
  if (req.method.toUpperCase() === 'GET') {
11
11
  try {
12
- return res.json({ widgets: await req.adminizer.widgetHandler.getAll(req.session.UserAP) });
12
+ return res.json({ widgets: await req.adminizer.widgetHandler.getAll(req.user) });
13
13
  }
14
14
  catch (e) {
15
15
  return res.status(500).send({ error: e.message || 'Internal Server Error' });
@@ -9,10 +9,10 @@ export default async function list(req, res) {
9
9
  return res.status(404).send({ error: 'Not Found' });
10
10
  }
11
11
  if (req.adminizer.config.auth.enable) {
12
- if (!req.session.UserAP) {
12
+ if (!req.user) {
13
13
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
14
14
  }
15
- else if (!req.adminizer.accessRightsHelper.hasPermission(`read-${entity.name}-model`, req.session.UserAP)) {
15
+ else if (!req.adminizer.accessRightsHelper.hasPermission(`read-${entity.name}-model`, req.user)) {
16
16
  return res.sendStatus(403);
17
17
  }
18
18
  }
@@ -2,6 +2,8 @@ import { POWCaptcha } from "../lib/v4/POWCaptcha";
2
2
  import passwordHash from "password-hash";
3
3
  import { inertiaLoginHelper } from "../helpers/inertiaAutHelper";
4
4
  import { Adminizer } from "../lib/Adminizer";
5
+ import { signUser } from "../lib/v4/helper/jwt";
6
+ import { serialize } from "cookie";
5
7
  export default async function login(req, res) {
6
8
  const powCaptcha = new POWCaptcha();
7
9
  if (req.originalUrl.indexOf("login") >= 0) {
@@ -24,9 +26,8 @@ export default async function login(req, res) {
24
26
  if (!user) {
25
27
  return res.sendStatus(404);
26
28
  }
27
- if (req.session.UserAP.isAdministrator) {
28
- req.session.adminPretender = req.session.UserAP;
29
- req.session.UserAP = user;
29
+ if (req.user.isAdministrator) {
30
+ req.session.userPretended = user;
30
31
  // return res.sendStatus(200);
31
32
  return req.Inertia.redirect(`${req.adminizer.config.routePrefix}`);
32
33
  }
@@ -45,13 +46,18 @@ export default async function login(req, res) {
45
46
  //Here we use the captchaSolution key to output messages unrelated to the form fields.
46
47
  return inertiaAdminMessage(req, "Profile is not confirmed, please contact to administrator", 'captchaSolution');
47
48
  }
48
- // TODO: Add salt
49
49
  if (passwordHash.verify(login + password + process.env.AP_PASSWORD_SALT, user.passwordHashed)) {
50
50
  if (user.expires && Date.now() > Date.parse(user.expires)) {
51
51
  //Here we use the captchaSolution key to output messages unrelated to the form fields.
52
52
  return inertiaAdminMessage(req, "Profile expired, contact the administrator", 'captchaSolution');
53
53
  }
54
- req.session.UserAP = user;
54
+ const token = signUser(user, req.adminizer.jwtSecret);
55
+ res.setHeader('Set-Cookie', serialize('adminizer_jwt', token, {
56
+ httpOnly: true,
57
+ sameSite: 'lax',
58
+ path: '/',
59
+ maxAge: 60 * 60 * 24 * 7 * 2,
60
+ }));
55
61
  return req.Inertia.redirect(`${req.adminizer.config.routePrefix}`);
56
62
  }
57
63
  else {
@@ -73,12 +79,11 @@ export default async function login(req, res) {
73
79
  }
74
80
  }
75
81
  else if (req.originalUrl.indexOf("logout") >= 0) {
76
- if (req.session.adminPretender && req.session.adminPretender.id && req.session.UserAP && req.session.UserAP.id) {
77
- req.session.UserAP = req.session.adminPretender;
78
- req.session.adminPretender = {};
82
+ if (req.session.userPretended && req.session.userPretended.id && req.user && req.user.id) {
83
+ delete (req.session.userPretended);
79
84
  return req.Inertia.redirect(`${req.adminizer.config.routePrefix}/`);
80
85
  }
81
- req.session.UserAP = undefined;
86
+ req.user = undefined;
82
87
  req.Inertia.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
83
88
  }
84
89
  return res.status(404);
@@ -4,10 +4,10 @@ export async function mediaManagerController(req, res) {
4
4
  const method = req.method.toUpperCase();
5
5
  let id = req.params.id ? req.params.id : '';
6
6
  if (req.adminizer.config.auth.enable) {
7
- if (!req.session.UserAP) {
7
+ if (!req.user) {
8
8
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
9
9
  }
10
- else if (!req.adminizer.accessRightsHelper.hasPermission(`catalog-${id}`, req.session.UserAP)) {
10
+ else if (!req.adminizer.accessRightsHelper.hasPermission(`catalog-${id}`, req.user)) {
11
11
  return res.sendStatus(403);
12
12
  }
13
13
  }
@@ -2,7 +2,7 @@ import { ControllerHelper } from "../../helpers/controllerHelper";
2
2
  import { DataAccessor } from "../../lib/v4/DataAccessor";
3
3
  export default async function edit(req, res) {
4
4
  if (req.adminizer.config.auth.enable) {
5
- if (!req.session.UserAP) {
5
+ if (!req.user) {
6
6
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
7
7
  }
8
8
  }
@@ -3,10 +3,10 @@ import { Adminizer } from "../lib/Adminizer";
3
3
  let installStepper = InstallStepper.getInstance();
4
4
  export default async function processInstallFinalize(req, res) {
5
5
  if (req.adminizer.config.auth.enable) {
6
- if (!req.session.UserAP) {
6
+ if (!req.user) {
7
7
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
8
8
  }
9
- else if (!req.adminizer.accessRightsHelper.hasPermission(`process-install-step`, req.session.UserAP)) {
9
+ else if (!req.adminizer.accessRightsHelper.hasPermission(`process-install-step`, req.user)) {
10
10
  return res.sendStatus(403);
11
11
  }
12
12
  }
@@ -1 +0,0 @@
1
- export default function processInstallStep(req: ReqType, res: ResType): Promise<void>;
@@ -1,132 +1,122 @@
1
- import { InstallStepper } from "../lib/installStepper/installStepper";
2
- import * as path from "path";
3
- import { Adminizer } from "../lib/Adminizer";
4
- export default async function processInstallStep(req, res) {
5
- if (req.adminizer.config.auth.enable) {
6
- if (!req.session.UserAP) {
7
- res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
8
- return;
9
- }
10
- else if (!req.adminizer.accessRightsHelper.hasPermission(`process-install-step`, req.session.UserAP)) {
11
- res.sendStatus(403);
12
- return;
13
- }
14
- }
15
- if (req.method.toUpperCase() === 'GET') {
16
- Adminizer.log.debug("GET REQUEST TO PROCESS INSTALL STEP");
17
- let installStepper = InstallStepper.getStepper(req.params.id);
18
- if (!installStepper) {
19
- res.redirect(`${req.adminizer.config.routePrefix}/`);
20
- return;
21
- }
22
- if (installStepper.hasUnprocessedSteps() || installStepper.hasUnfinalizedSteps()) {
23
- let renderData = installStepper.render(req);
24
- let renderer = renderData.currentStep.renderer;
25
- // run onInit method before showing step to user
26
- try {
27
- await renderData.currentStep.onInit();
28
- }
29
- catch (e) {
30
- console.log("ERROR IN PROCESS INSTALL STEP", e);
31
- res.viewAdmin(`installer/error`, { error: e, stepperId: installStepper.id });
32
- return;
33
- }
34
- res.viewAdmin(`installer/${renderer}`, { ...renderData, stepperId: installStepper.id });
35
- return;
36
- }
37
- else {
38
- res.redirect(`${req.adminizer.config.routePrefix}/`);
39
- return;
40
- }
41
- }
42
- if (req.method.toUpperCase() === 'POST') {
43
- try {
44
- Adminizer.log.debug("POST REQUEST TO PROCESS INSTALL STEP", JSON.stringify(req.body, null, 2));
45
- let installStepper = InstallStepper.getStepper(req.params.id);
46
- const currentStepId = req.body.currentStepId;
47
- const filesCounter = req.body.filesCounter;
48
- // upload files before processing other fields (filesCounter > 0 means that req contains files)
49
- const uploadedFiles = await handleFileUploads(req, currentStepId, filesCounter);
50
- if (req.body.action === 'next') {
51
- const inputData = JSON.parse(req.body.inputData);
52
- if (uploadedFiles.length) {
53
- inputData.uploadedFiles = uploadedFiles;
54
- }
55
- // trying to process step
56
- await installStepper.processStep(currentStepId, inputData);
57
- }
58
- else if (req.body.action === 'skip') {
59
- // trying to skip step
60
- await installStepper.skipStep(currentStepId);
61
- }
62
- else {
63
- res.status(400).send("Invalid action parameter");
64
- return;
65
- }
66
- // go back to stepper if there are more unprocessed steps, otherwise go back to /admin
67
- if (installStepper.hasUnprocessedSteps()) {
68
- res.redirect(`${req.adminizer.config.routePrefix}/install/${installStepper.id}`);
69
- return;
70
- }
71
- else {
72
- res.redirect(`${req.adminizer.config.routePrefix}/`);
73
- return;
74
- }
75
- }
76
- catch (error) {
77
- Adminizer.log.error("Error processing step:", error);
78
- res.status(500).send("Error processing step");
79
- return;
80
- }
81
- }
82
- if (req.method.toUpperCase() === 'DELETE') {
83
- Adminizer.log.debug("DELETE REQUEST TO PROCESS INSTALL STEP", req.body);
84
- try {
85
- InstallStepper.deleteStepper(req.params.id);
86
- res.status(200).send("OK");
87
- return;
88
- }
89
- catch (e) {
90
- res.status(403).send(e);
91
- return;
92
- }
93
- }
94
- res.status(500).send("Invalid request method");
95
- return;
96
- }
97
- ;
98
- async function handleFileUploads(req, currentStepId, filesCounter) {
99
- const uploadedFiles = [];
100
- for (let i = 0; i < filesCounter; i++) {
101
- const fieldName = `files_${i}`;
102
- const uploadMiddleware = req.upload({
103
- destination: "installStepper/uploadedImages",
104
- filename: (file) => {
105
- const extension = path.extname(file.originalname);
106
- const baseName = path.basename(file.originalname, extension);
107
- return `${currentStepId}_${baseName}_${Date.now()}${extension}`;
108
- },
109
- }).single(fieldName);
110
- try {
111
- await new Promise((resolve, reject) => {
112
- uploadMiddleware(req, null, (err) => {
113
- if (err) {
114
- Adminizer.logger.error(`Error uploading file: ${fieldName}`, err);
115
- reject(err);
116
- }
117
- else {
118
- const uploadedFile = req.file?.path;
119
- if (uploadedFile) {
120
- uploadedFiles.push(uploadedFile);
121
- }
122
- resolve();
123
- }
124
- });
125
- });
126
- }
127
- catch (err) {
128
- Adminizer.logger.error(`Failed to upload file: ${fieldName}`, err);
129
- }
130
- }
131
- return uploadedFiles;
132
- }
1
+ "use strict";
2
+ // import {InstallStepper} from "../lib/installStepper/installStepper";
3
+ // import * as path from "path";
4
+ // import {Adminizer} from "../lib/Adminizer";
5
+ // export default async function processInstallStep(req: ReqType, res: ResType): Promise<void> {
6
+ // if (req.adminizer.config.auth.enable) {
7
+ // if (!req.user) {
8
+ // res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
9
+ // return
10
+ // } else if (!req.adminizer.accessRightsHelper.hasPermission(`process-install-step`, req.user)) {
11
+ // res.sendStatus(403);
12
+ // return
13
+ // }
14
+ // }
15
+ // if (req.method.toUpperCase() === 'GET') {
16
+ // Adminizer.log.debug("GET REQUEST TO PROCESS INSTALL STEP")
17
+ // let installStepper = InstallStepper.getStepper(req.params.id);
18
+ // if (!installStepper) {
19
+ // res.redirect(`${req.adminizer.config.routePrefix}/`);
20
+ // return
21
+ // }
22
+ // if (installStepper.hasUnprocessedSteps() || installStepper.hasUnfinalizedSteps()) {
23
+ // let renderData = installStepper.render(req);
24
+ // let renderer = renderData.currentStep.renderer;
25
+ // // run onInit method before showing step to user
26
+ // try {
27
+ // await renderData.currentStep.onInit();
28
+ // } catch (e) {
29
+ // console.log("ERROR IN PROCESS INSTALL STEP", e)
30
+ // res.viewAdmin(`installer/error`, {error: e, stepperId: installStepper.id});
31
+ // return
32
+ // }
33
+ // res.viewAdmin(`installer/${renderer}`, {...renderData, stepperId: installStepper.id});
34
+ // return
35
+ // } else {
36
+ // res.redirect(`${req.adminizer.config.routePrefix}/`);
37
+ // return
38
+ // }
39
+ // }
40
+ // if (req.method.toUpperCase() === 'POST') {
41
+ // try {
42
+ // Adminizer.log.debug("POST REQUEST TO PROCESS INSTALL STEP", JSON.stringify(req.body, null, 2))
43
+ // let installStepper = InstallStepper.getStepper(req.params.id);
44
+ // const currentStepId = req.body.currentStepId;
45
+ // const filesCounter = req.body.filesCounter;
46
+ // // upload files before processing other fields (filesCounter > 0 means that req contains files)
47
+ // const uploadedFiles = await handleFileUploads(req, currentStepId, filesCounter);
48
+ // if (req.body.action === 'next') {
49
+ // const inputData = JSON.parse(req.body.inputData);
50
+ // if (uploadedFiles.length) {
51
+ // inputData.uploadedFiles = uploadedFiles;
52
+ // }
53
+ // // trying to process step
54
+ // await installStepper.processStep(currentStepId, inputData);
55
+ // } else if (req.body.action === 'skip') {
56
+ // // trying to skip step
57
+ // await installStepper.skipStep(currentStepId);
58
+ // } else {
59
+ // res.status(400).send("Invalid action parameter");
60
+ // return
61
+ // }
62
+ // // go back to stepper if there are more unprocessed steps, otherwise go back to /admin
63
+ // if (installStepper.hasUnprocessedSteps()) {
64
+ // res.redirect(`${req.adminizer.config.routePrefix}/install/${installStepper.id}`);
65
+ // return
66
+ // } else {
67
+ // res.redirect(`${req.adminizer.config.routePrefix}/`);
68
+ // return
69
+ // }
70
+ // } catch (error) {
71
+ // Adminizer.log.error("Error processing step:", error);
72
+ // res.status(500).send("Error processing step");
73
+ // return
74
+ // }
75
+ // }
76
+ // if (req.method.toUpperCase() === 'DELETE') {
77
+ // Adminizer.log.debug("DELETE REQUEST TO PROCESS INSTALL STEP", req.body)
78
+ // try {
79
+ // InstallStepper.deleteStepper(req.params.id);
80
+ // res.status(200).send("OK")
81
+ // return
82
+ // } catch (e) {
83
+ // res.status(403).send(e);
84
+ // return
85
+ // }
86
+ // }
87
+ // res.status(500).send("Invalid request method")
88
+ // return
89
+ // };
90
+ // async function handleFileUploads(req: ReqType, currentStepId: string | number, filesCounter: number): Promise<string[]> {
91
+ // const uploadedFiles: string[] = [];
92
+ // for (let i = 0; i < filesCounter; i++) {
93
+ // const fieldName = `files_${i}`;
94
+ // const uploadMiddleware = req.upload({
95
+ // destination: "installStepper/uploadedImages",
96
+ // filename: (file) => {
97
+ // const extension = path.extname(file.originalname);
98
+ // const baseName = path.basename(file.originalname, extension);
99
+ // return `${currentStepId}_${baseName}_${Date.now()}${extension}`;
100
+ // },
101
+ // }).single(fieldName);
102
+ // try {
103
+ // await new Promise<void>((resolve, reject) => {
104
+ // uploadMiddleware(req, null, (err) => {
105
+ // if (err) {
106
+ // Adminizer.logger.error(`Error uploading file: ${fieldName}`, err);
107
+ // reject(err);
108
+ // } else {
109
+ // const uploadedFile = (req.file as Express.Multer.File)?.path;
110
+ // if (uploadedFile) {
111
+ // uploadedFiles.push(uploadedFile);
112
+ // }
113
+ // resolve();
114
+ // }
115
+ // });
116
+ // });
117
+ // } catch (err) {
118
+ // Adminizer.logger.error(`Failed to upload file: ${fieldName}`, err);
119
+ // }
120
+ // }
121
+ // return uploadedFiles;
122
+ // }
@@ -18,10 +18,10 @@ export default async function remove(req, res) {
18
18
  return res.redirect(`${req.adminizer.config.routePrefix}/${entity.uri}`);
19
19
  }
20
20
  if (req.adminizer.config.auth.enable) {
21
- if (!req.session.UserAP) {
21
+ if (!req.user) {
22
22
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
23
23
  }
24
- else if (!req.adminizer.accessRightsHelper.hasPermission(`delete-${entity.name}-model`, req.session.UserAP)) {
24
+ else if (!req.adminizer.accessRightsHelper.hasPermission(`delete-${entity.name}-model`, req.user)) {
25
25
  return res.sendStatus(403);
26
26
  }
27
27
  }
@@ -1,6 +1,6 @@
1
1
  export default async function timezones(req, res) {
2
2
  if (req.adminizer.config.auth.enable) {
3
- if (!req.session.UserAP) {
3
+ if (!req.user) {
4
4
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
5
5
  }
6
6
  }
@@ -18,10 +18,10 @@ export default async function view(req, res) {
18
18
  return res.status(404).send({ error: 'Not Found' });
19
19
  }
20
20
  if (req.adminizer.config.auth.enable) {
21
- if (!req.session.UserAP) {
21
+ if (!req.user) {
22
22
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
23
23
  }
24
- else if (!req.adminizer.accessRightsHelper.hasPermission(`read-${entity.name}-model`, req.session.UserAP)) {
24
+ else if (!req.adminizer.accessRightsHelper.hasPermission(`read-${entity.name}-model`, req.user)) {
25
25
  return res.sendStatus(403);
26
26
  }
27
27
  }
@@ -2,7 +2,7 @@
2
2
  * Welcome text
3
3
  */
4
4
  export default function welcome(req, res) {
5
- if (req.adminizer.config.auth.enable && !req.session.UserAP) {
5
+ if (!req.user) {
6
6
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
7
7
  }
8
8
  let text = '';
@@ -4,10 +4,10 @@ export async function widgetActionController(req, res) {
4
4
  return res.status(404).send({ error: 'Not Found' });
5
5
  }
6
6
  if (req.adminizer.config.auth.enable) {
7
- if (!req.session.UserAP) {
7
+ if (!req.user) {
8
8
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
9
9
  }
10
- else if (!req.adminizer.accessRightsHelper.hasPermission(`widget-${widgetId}`, req.session.UserAP)) {
10
+ else if (!req.adminizer.accessRightsHelper.hasPermission(`widget-${widgetId}`, req.user)) {
11
11
  return res.sendStatus(403);
12
12
  }
13
13
  }