adminizer 4.1.0-commit.3bf605e → 4.1.0-commit.d8a06d3

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 (173) hide show
  1. package/assets/{VanillaJSONEditor-FUe77pIA.js → VanillaJSONEditor-D-Lx670g.js} +1 -1
  2. package/assets/add-BP_u3Tjl.js +1 -0
  3. package/assets/add-form-nffmiYTh.js +1 -0
  4. package/assets/add-group-D4vcHlm-.js +1 -0
  5. package/assets/{add-group-form-dzadPSfL.js → add-group-form-gNJW11-q.js} +1 -1
  6. package/assets/add-user-DWh3Nas0.js +1 -0
  7. package/assets/add-user-form-BJ0FsZYJ.js +1 -0
  8. package/assets/{app-DMmad2-f.css → app-WTooYWC3.css} +1 -1
  9. package/assets/{app-layout-D1m9Kvxq.js → app-layout-DYsRFUuP.js} +1 -1
  10. package/assets/{app-shell-BWMRMkHM.js → app-shell-Dd9Eknik.js} +1 -1
  11. package/assets/app-sidebar-BOmu6-Sl.js +1 -0
  12. package/assets/{app-sidebar-header-DLAFi13E.js → app-sidebar-header-CoXSzWxk.js} +1 -1
  13. package/assets/app.js +2 -2
  14. package/assets/{breadcrumbs-CQNon4Vl.js → breadcrumbs-BmAq4fHT.js} +1 -1
  15. package/assets/{button-CQ9t1kLz.js → button-C9B_5Jf_.js} +1 -1
  16. package/assets/{checkbox-W0nGAXIj.js → checkbox-Fg27sL_1.js} +1 -1
  17. package/assets/{compiler-runtime-tM4jBQ-T.js → compiler-runtime-hB6dAw2d.js} +1 -1
  18. package/assets/dashboard-BACj996r.js +3 -0
  19. package/assets/dashboard-BOltB2Hq.css +1 -0
  20. package/assets/{date-picker-B__dVVqj.js → date-picker-DI1cCO7K.js} +1 -1
  21. package/assets/{dropdown-menu-SEBnEIiL.js → dropdown-menu-Bhj17ENm.js} +1 -1
  22. package/assets/{field-renderer-CapylJU9.js → field-renderer-DVHZF6HS.js} +3 -3
  23. package/assets/form-BgWdwvz1.js +1 -0
  24. package/assets/form-DgtErfln.js +1 -0
  25. package/assets/{geo-json-CwteYDGB.js → geo-json-BjiyTtMu.js} +1 -1
  26. package/assets/{handsontable-BCnjOpBr.js → handsontable-4mjU_b0n.js} +1 -1
  27. package/assets/home-CHntBHJa.js +2 -0
  28. package/assets/{icon-Bz9BMaD0.js → icon-Dt0vBgDO.js} +1 -1
  29. package/assets/index-B8BS9wMC.js +1 -0
  30. package/assets/{index-DEk3sC8d.js → index-BKCgnGj_.js} +1 -1
  31. package/assets/{index-C0SL3SHw.js → index-BykbU6Ee.js} +1 -1
  32. package/assets/index-CaJgc5EZ.js +1 -0
  33. package/assets/{index-BcE9FUM6.js → index-Cgp8OfuI.js} +1 -1
  34. package/assets/{index-DTRTjOmh.js → index-Cw5o84pO.js} +1 -1
  35. package/assets/{init-user-D9mW-g14.js → init-user-JfCKJ5Ce.js} +1 -1
  36. package/assets/{input-DF7Ue23C.js → input-CvRbIbk4.js} +1 -1
  37. package/assets/{input-error-BBygona6.js → input-error-DMK7cAt7.js} +1 -1
  38. package/assets/{label-Z506NKsW.js → label-CSLFe9Bz.js} +1 -1
  39. package/assets/list-B2Oa5O_Q.js +1 -0
  40. package/assets/{list-table-DB1sEQLF.js → list-table-DA9MhywL.js} +5 -5
  41. package/assets/{login-DrGaTWhY.js → login-DQwGtdis.js} +1 -1
  42. package/assets/manifest.json +491 -470
  43. package/assets/{material-icon-CItZiB53.js → material-icon-BJg8o_fs.js} +1 -1
  44. package/assets/module-DWXp59Vg.js +1 -0
  45. package/assets/{monaco-editor-DqAqwxw4.js → monaco-editor-CJs0_GlD.js} +1 -1
  46. package/assets/{multi-select-oabtVhUP.js → multi-select-BvRpAW8r.js} +1 -1
  47. package/assets/{nav-footer-CM-yHiRs.js → nav-footer-Bs4dmN1d.js} +1 -1
  48. package/assets/{nav-main-Q3xofGRT.js → nav-main-Bq3IMk4C.js} +1 -1
  49. package/assets/{nav-user-Ds8i0Pa2.js → nav-user-CbB22J5O.js} +1 -1
  50. package/assets/{pagination-render-B57pOpFy.js → pagination-render-DuXDDbC_.js} +1 -1
  51. package/assets/{popover-I249Gg2O.js → popover-DtoGI2b1.js} +1 -1
  52. package/assets/{register-C9FQIDtS.js → register-BSogVF0h.js} +1 -1
  53. package/assets/{select-D1N8zRPY.js → select-BWepUw-9.js} +1 -1
  54. package/assets/{sidebar-4D-sX2l4.js → sidebar-CAHsHdjM.js} +2 -2
  55. package/assets/skeleton-COOcAA8f.js +1 -0
  56. package/assets/{sonner-Dzckw3U3.js → sonner-BI0IFOQN.js} +1 -1
  57. package/assets/{toast-editor-FbrFd1ft.js → toast-editor-CMK7QtF1.js} +1 -1
  58. package/assets/{tooltip-D2ehgLlB.js → tooltip-DHwpLKOI.js} +1 -1
  59. package/assets/{use-appearance-Co6mO0dV.js → use-appearance-DRfIqTgw.js} +1 -1
  60. package/assets/{use-window-size-B8l6Bpkf.js → use-window-size-h0Sh_NvX.js} +1 -1
  61. package/assets/{user-info-DBYoAJYJ.js → user-info-DFrmpJ4y.js} +1 -1
  62. package/assets/{user-menu-content-qkvdkUVd.js → user-menu-content-DPXQdERj.js} +1 -1
  63. package/assets/welcome-B4WCIXKf.js +1 -0
  64. package/controllers/add.js +2 -2
  65. package/controllers/addGroup.js +2 -4
  66. package/controllers/addUser.js +4 -6
  67. package/controllers/catalog/Catalog.js +2 -2
  68. package/controllers/catalog/FrontentCatalogAdapter.js +1 -2
  69. package/controllers/ckeditorUpload.js +2 -3
  70. package/controllers/dashboard.js +16 -2
  71. package/controllers/edit.js +2 -3
  72. package/controllers/editGroup.js +2 -4
  73. package/controllers/editUser.js +3 -5
  74. package/controllers/form.js +2 -3
  75. package/controllers/getAllWidgets.js +3 -3
  76. package/controllers/initUser.js +1 -2
  77. package/controllers/list.js +4 -4
  78. package/controllers/login.js +31 -15
  79. package/controllers/media-manager/mediaManagerAdapter.js +1 -2
  80. package/controllers/media-manager/mediaManagerApi.js +2 -2
  81. package/controllers/navigation/edit.js +1 -1
  82. package/controllers/processInstallFinalize.js +2 -2
  83. package/controllers/processInstallStep.d.ts +0 -1
  84. package/controllers/processInstallStep.js +122 -132
  85. package/controllers/register.js +1 -4
  86. package/controllers/remove.js +2 -2
  87. package/controllers/timezones.js +1 -1
  88. package/controllers/view.js +2 -2
  89. package/controllers/welcome.js +1 -1
  90. package/controllers/widgets/Action.js +2 -2
  91. package/controllers/widgets/Custom.js +2 -2
  92. package/controllers/widgets/Info.js +2 -2
  93. package/controllers/widgets/switch.js +2 -2
  94. package/controllers/widgetsDB.js +5 -5
  95. package/helpers/accessRightsHelper.d.ts +3 -2
  96. package/helpers/accessRightsHelper.js +1 -1
  97. package/helpers/configHelper.js +2 -1
  98. package/helpers/fieldsHelper.d.ts +1 -1
  99. package/helpers/inertiaActionsHelper.js +1 -1
  100. package/helpers/inertiaAddHelper.d.ts +1 -1
  101. package/helpers/inertiaAddHelper.js +2 -0
  102. package/helpers/inertiaFromHelper.js +2 -0
  103. package/helpers/inertiaGroupHelper.d.ts +4 -2
  104. package/helpers/inertiaGroupHelper.js +1 -1
  105. package/helpers/inertiaListHelper.js +5 -5
  106. package/helpers/inertiaMenuHelper.js +1 -1
  107. package/helpers/inertiaUserHelper.d.ts +7 -1
  108. package/helpers/inertiaUserHelper.js +5 -1
  109. package/index.d.ts +7 -0
  110. package/index.js +7 -0
  111. package/interfaces/adminpanelConfig.d.ts +6 -2
  112. package/interfaces/global.d.ts +5 -26
  113. package/lib/Adminizer.d.ts +2 -0
  114. package/lib/Adminizer.js +17 -1
  115. package/lib/catalog/AbstractCatalog.js +0 -1
  116. package/lib/catalog/Navigation.js +6 -6
  117. package/lib/datatable/NodeTable.js +0 -3
  118. package/lib/inertia/inertiaAdapter.js +0 -1
  119. package/lib/installStepper/installStepper.js +5 -5
  120. package/lib/media-manager/AbstractMediaManager.d.ts +2 -2
  121. package/lib/media-manager/AbstractMediaManager.js +1 -1
  122. package/lib/v4/DataAccessor.d.ts +2 -1
  123. package/lib/v4/DataAccessor.js +2 -2
  124. package/lib/v4/POWCaptcha.js +0 -1
  125. package/lib/v4/PolicyManager.js +0 -1
  126. package/lib/v4/helper/jwt.d.ts +10 -0
  127. package/lib/v4/helper/jwt.js +18 -0
  128. package/lib/v4/model/AbstractModel.js +0 -2
  129. package/lib/v4/model/ModelHandler.js +0 -1
  130. package/lib/v4/model/adapter/sequelize.d.ts +3 -2
  131. package/lib/v4/model/adapter/sequelize.js +250 -58
  132. package/lib/v4/model/adapter/waterline.js +0 -1
  133. package/lib/widgets/abstractAction.d.ts +1 -1
  134. package/lib/widgets/abstractCustom.d.ts +27 -12
  135. package/lib/widgets/abstractCustom.js +8 -2
  136. package/lib/widgets/abstractInfo.d.ts +1 -1
  137. package/lib/widgets/abstractInfo.js +1 -1
  138. package/lib/widgets/abstractLink.d.ts +1 -0
  139. package/lib/widgets/abstractSwitch.d.ts +1 -1
  140. package/lib/widgets/abstractWidgetBase.d.ts +1 -1
  141. package/lib/widgets/widgetHandler.d.ts +20 -3
  142. package/lib/widgets/widgetHandler.js +25 -25
  143. package/models/GroupAP.d.ts +8 -0
  144. package/models/MediaManagerAP.d.ts +16 -0
  145. package/models/MediaManagerAssociationsAP.d.ts +10 -0
  146. package/models/MediaManagerMetaAP.d.ts +8 -0
  147. package/models/NavigationAP.d.ts +5 -0
  148. package/models/UserAP.d.ts +25 -2
  149. package/models/UserAP.js +2 -2
  150. package/package.json +17 -10
  151. package/policies/checkAuth.js +4 -3
  152. package/policies/setLocale.js +2 -2
  153. package/system/Router.js +14 -14
  154. package/system/bindAuthorization.js +4 -5
  155. package/system/bindInertia.js +9 -9
  156. package/system/bindInstallStepper.js +1 -1
  157. package/system/bindReqFunctions.js +16 -0
  158. package/translations/ru.json +17 -8
  159. package/assets/add-ZITr43GJ.js +0 -1
  160. package/assets/add-form-CYOfr0Ef.js +0 -1
  161. package/assets/add-group-B332wN8K.js +0 -1
  162. package/assets/add-user-TC-mYdsB.js +0 -1
  163. package/assets/add-user-form-y2f_1_lM.js +0 -1
  164. package/assets/app-sidebar-BCtaEFGb.js +0 -1
  165. package/assets/dashboard-BR602KhL.js +0 -1
  166. package/assets/form-DOUNk3o2.js +0 -1
  167. package/assets/form-lOKv4Qbw.js +0 -1
  168. package/assets/home-Ch6QfTIt.js +0 -2
  169. package/assets/index-Cdb9ACvz.js +0 -1
  170. package/assets/index-K81GbF6O.js +0 -1
  171. package/assets/list-Qyd7ecQH.js +0 -1
  172. package/assets/module-DBaykv8l.js +0 -1
  173. package/assets/welcome-D2adQ8EU.js +0 -1
@@ -29,12 +29,11 @@ export default async function initUser(req, res) {
29
29
  }
30
30
  try {
31
31
  Adminizer.log.debug(`Created admin`);
32
- let passwordHashed = generate(login + password);
32
+ let passwordHashed = generate(login + password + process.env.AP_PASSWORD_SALT);
33
33
  password = 'masked';
34
34
  // TODO refactor CRUD functions for DataAccessor usage
35
35
  await req.adminizer.modelHandler.model.get("UserAP")["_create"]({
36
36
  login: login,
37
- password: password,
38
37
  passwordHashed: passwordHashed,
39
38
  fullName: "Administrator",
40
39
  isActive: true,
@@ -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
  }
@@ -46,8 +46,8 @@ export default async function list(req, res) {
46
46
  const searchMap = new Map();
47
47
  for (let i = 0; i < searchColumns.length; i++) {
48
48
  const column = searchColumns[i];
49
- const value = searchColumnValues[i] || ""; // Если нет значения, ставим пустую строку
50
- searchMap.set(column, value); // Если column повторяется, перезаписываем
49
+ const value = searchColumnValues[i] || "";
50
+ searchMap.set(column, value);
51
51
  }
52
52
  const searchPairs = Array.from(searchMap.entries()).map(([column, value]) => ({
53
53
  column,
@@ -1,6 +1,9 @@
1
1
  import { POWCaptcha } from "../lib/v4/POWCaptcha";
2
2
  import passwordHash from "password-hash";
3
3
  import { inertiaLoginHelper } from "../helpers/inertiaAutHelper";
4
+ import { Adminizer } from "../lib/Adminizer";
5
+ import { signUser } from "../lib/v4/helper/jwt";
6
+ import { serialize } from "cookie";
4
7
  export default async function login(req, res) {
5
8
  const powCaptcha = new POWCaptcha();
6
9
  if (req.originalUrl.indexOf("login") >= 0) {
@@ -11,11 +14,6 @@ export default async function login(req, res) {
11
14
  let login = req.body.login;
12
15
  let password = req.body.password;
13
16
  let captchaSolution = req.body.captchaSolution;
14
- // Verify CAPTCHA solution
15
- const isCaptchaValid = powCaptcha.check(captchaSolution, `login:${req.ip}`);
16
- if (!isCaptchaValid) {
17
- return inertiaAdminMessage(req, "Invalid CAPTCHA solution", 'captchaSolution');
18
- }
19
17
  let user;
20
18
  try {
21
19
  // TODO refactor CRUD functions for DataAccessor usage
@@ -28,11 +26,17 @@ export default async function login(req, res) {
28
26
  if (!user) {
29
27
  return res.sendStatus(404);
30
28
  }
31
- if (req.session.UserAP.isAdministrator) {
32
- req.session.adminPretender = req.session.UserAP;
33
- req.session.UserAP = user;
34
- return res.sendStatus(200);
29
+ if (req.user.isAdministrator) {
30
+ req.session.userPretended = user;
31
+ // return res.sendStatus(200);
32
+ return req.Inertia.redirect(`${req.adminizer.config.routePrefix}`);
35
33
  }
34
+ return req.Inertia.redirect(`${req.adminizer.config.routePrefix}/`);
35
+ }
36
+ // Verify CAPTCHA solution
37
+ const isCaptchaValid = powCaptcha.check(captchaSolution, `login:${req.ip}`);
38
+ if (!isCaptchaValid) {
39
+ return inertiaAdminMessage(req, "Invalid CAPTCHA solution", 'captchaSolution');
36
40
  }
37
41
  if (!user) {
38
42
  return inertiaAdminMessage(req, "Wrong username", 'login');
@@ -42,12 +46,18 @@ export default async function login(req, res) {
42
46
  //Here we use the captchaSolution key to output messages unrelated to the form fields.
43
47
  return inertiaAdminMessage(req, "Profile is not confirmed, please contact to administrator", 'captchaSolution');
44
48
  }
45
- if (passwordHash.verify(login + password, user.passwordHashed)) {
49
+ if (passwordHash.verify(login + password + process.env.AP_PASSWORD_SALT, user.passwordHashed)) {
46
50
  if (user.expires && Date.now() > Date.parse(user.expires)) {
47
51
  //Here we use the captchaSolution key to output messages unrelated to the form fields.
48
52
  return inertiaAdminMessage(req, "Profile expired, contact the administrator", 'captchaSolution');
49
53
  }
50
- 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
+ }));
51
61
  return req.Inertia.redirect(`${req.adminizer.config.routePrefix}`);
52
62
  }
53
63
  else {
@@ -69,17 +79,23 @@ export default async function login(req, res) {
69
79
  }
70
80
  }
71
81
  else if (req.originalUrl.indexOf("logout") >= 0) {
72
- if (req.session.adminPretender && req.session.adminPretender.id && req.session.UserAP && req.session.UserAP.id) {
73
- req.session.UserAP = req.session.adminPretender;
74
- req.session.adminPretender = {};
82
+ if (req.session.userPretended && req.session.userPretended.id && req.user && req.user.id) {
83
+ delete (req.session.userPretended);
75
84
  return req.Inertia.redirect(`${req.adminizer.config.routePrefix}/`);
76
85
  }
77
- req.session.UserAP = undefined;
86
+ req.user = undefined;
87
+ res.setHeader('Set-Cookie', serialize('adminizer_jwt', '', {
88
+ httpOnly: true,
89
+ sameSite: 'lax',
90
+ path: '/',
91
+ expires: new Date(0),
92
+ }));
78
93
  req.Inertia.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
79
94
  }
80
95
  return res.status(404);
81
96
  }
82
97
  async function inertiaAdminMessage(req, message, messageType) {
98
+ Adminizer.log.warn(message);
83
99
  const powCaptcha = new POWCaptcha();
84
100
  const captchaTask = await powCaptcha.getJob(`login:${req.ip}`);
85
101
  let errors = {};
@@ -123,7 +123,6 @@ export class MediaManagerAdapter {
123
123
  }
124
124
  try {
125
125
  const item = await this.manager.upload(req.file, filename, origFileName, group);
126
- console.log(item);
127
126
  if (item) {
128
127
  return res.send({
129
128
  msg: "success",
@@ -150,7 +149,7 @@ export class MediaManagerAdapter {
150
149
  return;
151
150
  }
152
151
  catch (e) {
153
- console.log(e);
152
+ console.error(e);
154
153
  }
155
154
  }
156
155
  }
@@ -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
+ // }
@@ -5,7 +5,6 @@ export default async function register(req, res) {
5
5
  return res.redirect(`${req.adminizer.config.routePrefix}/`);
6
6
  }
7
7
  if (req.method.toUpperCase() === "POST") {
8
- // console.log("req.body", req.body);
9
8
  for (const key of ["login", "fullName", "password"]) {
10
9
  if (!req.body[key]) {
11
10
  let errors = {};
@@ -40,12 +39,11 @@ export default async function register(req, res) {
40
39
  }
41
40
  else {
42
41
  try {
43
- let passwordHashed = generate(req.body.login + req.body.password);
42
+ let passwordHashed = generate(req.body.login + req.body.password + process.env.AP_PASSWORD_SALT);
44
43
  let password = 'masked';
45
44
  // TODO refactor CRUD functions for DataAccessor usage
46
45
  let userap = await req.adminizer.modelHandler.model.get("UserAP")["_create"]({
47
46
  login: req.body.login,
48
- password: password,
49
47
  passwordHashed: passwordHashed,
50
48
  fullName: req.body.fullName,
51
49
  email: req.body.email,
@@ -53,7 +51,6 @@ export default async function register(req, res) {
53
51
  });
54
52
  // TODO refactor CRUD functions for DataAccessor usage
55
53
  let defaultUserGroup = await req.adminizer.modelHandler.model.get("GroupAP")["_findOne"]({ name: req.adminizer.config.registration.defaultUserGroup });
56
- console.log(userap);
57
54
  // TODO refactor CRUD functions for DataAccessor usage
58
55
  await req.adminizer.modelHandler.model.get("UserAP")["_updateOne"]({ id: userap.id }, {
59
56
  groups: [defaultUserGroup.id]
@@ -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
  }
@@ -4,10 +4,10 @@ export async function widgetCustomController(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
  }
@@ -4,10 +4,10 @@ export async function widgetInfoController(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
  }
@@ -4,10 +4,10 @@ export async function widgetSwitchController(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
  }
@@ -2,17 +2,17 @@ export default async function widgetsDB(req, res) {
2
2
  let id = 0;
3
3
  let auth = req.adminizer.config.auth.enable;
4
4
  if (auth) {
5
- if (!req.session.UserAP) {
5
+ if (!req.user) {
6
6
  return res.redirect(`${req.adminizer.config.routePrefix}/model/userap/login`);
7
7
  }
8
- else if (!req.adminizer.accessRightsHelper.hasPermission(`widgets`, req.session.UserAP)) {
8
+ else if (!req.adminizer.accessRightsHelper.hasPermission(`widgets`, req.user)) {
9
9
  return res.sendStatus(403);
10
10
  }
11
- id = req.session.UserAP.id;
11
+ id = req.user.id;
12
12
  }
13
13
  if (req.method.toUpperCase() === 'GET') {
14
14
  try {
15
- let widgets = await req.adminizer.widgetHandler.getWidgetsDB(id, auth);
15
+ let widgets = await req.adminizer.widgetHandler.getWidgetsDB(id, auth, req.i18n);
16
16
  return res.json({ widgetsDB: widgets });
17
17
  }
18
18
  catch (e) {
@@ -25,7 +25,7 @@ export default async function widgetsDB(req, res) {
25
25
  }
26
26
  try {
27
27
  return res.json({
28
- userID: await req.adminizer.widgetHandler.setWidgetsDB(id, req.body.widgets, auth),
28
+ userID: await req.adminizer.widgetHandler.setWidgetsDB(id, req.body, auth),
29
29
  status: 'ok'
30
30
  });
31
31
  }
@@ -1,3 +1,4 @@
1
+ import { UserAP } from "models/UserAP";
1
2
  import { AccessRightsToken } from "../interfaces/types";
2
3
  import { Adminizer } from "../lib/Adminizer";
3
4
  export declare class AccessRightsHelper {
@@ -9,6 +10,6 @@ export declare class AccessRightsHelper {
9
10
  getTokens(): AccessRightsToken[];
10
11
  getTokensByDepartment(department: string): AccessRightsToken[];
11
12
  getAllDepartments(): string[];
12
- enoughPermissions(tokens: string[], user: ModelsAP["UserAP"]): boolean;
13
- hasPermission(tokenId: string, user: ModelsAP["UserAP"]): boolean;
13
+ enoughPermissions(tokens: string[], user: UserAP): boolean;
14
+ hasPermission(tokenId: string, user: UserAP): boolean;
14
15
  }