emilsoftware-utilities 1.3.97 → 1.3.99

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 (69) hide show
  1. package/dist/accessi-module/AccessiModule.js +2 -1
  2. package/dist/accessi-module/Controllers/AccessiController.d.ts +3 -4
  3. package/dist/accessi-module/Controllers/AccessiController.js +4 -23
  4. package/dist/accessi-module/Controllers/AuthController.d.ts +1 -1
  5. package/dist/accessi-module/Controllers/AuthController.js +17 -0
  6. package/dist/accessi-module/Controllers/EmailController.d.ts +1 -1
  7. package/dist/accessi-module/Controllers/EmailController.js +8 -2
  8. package/dist/accessi-module/Controllers/PermissionController.d.ts +14 -2
  9. package/dist/accessi-module/Controllers/PermissionController.js +223 -14
  10. package/dist/accessi-module/Controllers/UserController.d.ts +17 -0
  11. package/dist/accessi-module/Controllers/UserController.js +211 -0
  12. package/dist/accessi-module/Dtos/Abilitazione.d.ts +6 -0
  13. package/dist/accessi-module/Dtos/Abilitazione.js +47 -0
  14. package/dist/accessi-module/Dtos/AbilitazioneMenu.d.ts +11 -0
  15. package/dist/accessi-module/Dtos/AbilitazioneMenu.js +91 -0
  16. package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.d.ts +4 -0
  17. package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js +28 -0
  18. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.d.ts +3 -0
  19. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js +24 -0
  20. package/dist/accessi-module/Dtos/FiltriUtente.d.ts +10 -0
  21. package/dist/accessi-module/Dtos/FiltriUtente.js +87 -0
  22. package/dist/accessi-module/Dtos/GetMenusResponse.d.ts +12 -0
  23. package/dist/accessi-module/Dtos/GetMenusResponse.js +80 -0
  24. package/dist/accessi-module/{models/QueryResults/UserQueryResult.d.ts → Dtos/GetUsersResponse.d.ts} +2 -2
  25. package/dist/accessi-module/Dtos/GetUsersResponse.js +252 -0
  26. package/dist/accessi-module/Dtos/LoginRequest.d.ts +4 -0
  27. package/dist/accessi-module/Dtos/LoginRequest.js +35 -0
  28. package/dist/accessi-module/Dtos/LoginResult.d.ts +10 -0
  29. package/dist/accessi-module/Dtos/LoginResult.js +34 -0
  30. package/dist/accessi-module/Dtos/MenuItem.d.ts +0 -0
  31. package/dist/accessi-module/Dtos/MenuItem.js +0 -0
  32. package/dist/accessi-module/Dtos/Permission.d.ts +4 -0
  33. package/dist/accessi-module/Dtos/Permission.js +32 -0
  34. package/dist/accessi-module/Dtos/Role.d.ts +12 -0
  35. package/dist/accessi-module/Dtos/Role.js +50 -0
  36. package/dist/accessi-module/Dtos/TipoAbilitazione.d.ts +6 -0
  37. package/dist/accessi-module/{Services/PermissionService/IPermissionService.js → Dtos/TipoAbilitazione.js} +1 -1
  38. package/dist/accessi-module/Dtos/TokenResult.d.ts +5 -0
  39. package/dist/accessi-module/Dtos/TokenResult.js +38 -0
  40. package/dist/accessi-module/Dtos/User.d.ts +19 -0
  41. package/dist/accessi-module/Dtos/User.js +118 -0
  42. package/dist/accessi-module/Dtos/index.d.ts +13 -0
  43. package/dist/accessi-module/Dtos/index.js +29 -0
  44. package/dist/accessi-module/Services/AuthService/AuthService.d.ts +6 -5
  45. package/dist/accessi-module/Services/AuthService/AuthService.js +39 -23
  46. package/dist/accessi-module/Services/EmailService/EmailService.d.ts +1 -2
  47. package/dist/accessi-module/Services/EmailService/EmailService.js +1 -1
  48. package/dist/accessi-module/Services/PermissionService/PermissionService.d.ts +12 -5
  49. package/dist/accessi-module/Services/PermissionService/PermissionService.js +143 -5
  50. package/dist/accessi-module/Services/UserService/UserService.d.ts +11 -10
  51. package/dist/accessi-module/Services/UserService/UserService.js +20 -15
  52. package/dist/accessi-module/index.d.ts +1 -3
  53. package/dist/accessi-module/index.js +32 -15
  54. package/dist/accessi-module/swagger/SwaggerConfig.js +3 -2
  55. package/dist/index.d.ts +1 -1
  56. package/dist/index.js +2 -4
  57. package/package.json +1 -1
  58. package/dist/accessi-module/Services/AuthService/IAuthService.d.ts +0 -64
  59. package/dist/accessi-module/Services/AuthService/IAuthService.js +0 -2
  60. package/dist/accessi-module/Services/EmailService/IEmailService.d.ts +0 -21
  61. package/dist/accessi-module/Services/EmailService/IEmailService.js +0 -2
  62. package/dist/accessi-module/Services/PermissionService/IPermissionService.d.ts +0 -59
  63. package/dist/accessi-module/Services/UserService/IUserService.d.ts +0 -110
  64. package/dist/accessi-module/Services/UserService/IUserService.js +0 -2
  65. package/dist/accessi-module/models/QueryResults/MenuAbilitazioniResult.d.ts +0 -11
  66. package/dist/accessi-module/models/QueryResults/MenuAbilitazioniResult.js +0 -2
  67. package/dist/accessi-module/models/QueryResults/UserQueryResult.js +0 -2
  68. /package/dist/accessi-module/{models → Dtos}/StatoRegistrazione.d.ts +0 -0
  69. /package/dist/accessi-module/{models → Dtos}/StatoRegistrazione.js +0 -0
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./Abilitazione"), exports);
18
+ __exportStar(require("./AbilitazioneMenu"), exports);
19
+ __exportStar(require("./AssignPermissionsToUserRequest"), exports);
20
+ __exportStar(require("./AssignRolesToUserRequest"), exports);
21
+ __exportStar(require("./FiltriUtente"), exports);
22
+ __exportStar(require("./LoginRequest"), exports);
23
+ __exportStar(require("./LoginResult"), exports);
24
+ __exportStar(require("./Permission"), exports);
25
+ __exportStar(require("./Role"), exports);
26
+ __exportStar(require("./StatoRegistrazione"), exports);
27
+ __exportStar(require("./TipoAbilitazione"), exports);
28
+ __exportStar(require("./TokenResult"), exports);
29
+ __exportStar(require("./User"), exports);
@@ -1,16 +1,17 @@
1
1
  import { AccessiOptions } from "../../AccessiModule";
2
- import { IAuthService, ILoginResult, LoginRequest } from "./IAuthService";
3
2
  import { UserService } from "../UserService/UserService";
4
3
  import { PermissionService } from "../PermissionService/PermissionService";
5
- export declare class AuthService implements IAuthService {
4
+ import { LoginRequest } from "../../Dtos/LoginRequest";
5
+ import { LoginResult } from "../../Dtos/LoginResult";
6
+ export declare class AuthService {
6
7
  private userService;
7
8
  private permissionService;
8
9
  private readonly accessiOptions;
9
10
  constructor(userService: UserService, permissionService: PermissionService, accessiOptions: AccessiOptions);
10
- login(request: LoginRequest): Promise<ILoginResult>;
11
+ login(request: LoginRequest): Promise<LoginResult>;
11
12
  setPassword(codiceUtente: string, nuovaPassword: string): Promise<any>;
12
13
  verifyPassword(codiceUtente: string, passwordCifrata: string): Promise<boolean>;
13
- getAdminUser(): ILoginResult;
14
- getDemoUser(): ILoginResult;
14
+ getAdminUser(): Promise<LoginResult>;
15
+ getDemoUser(): LoginResult;
15
16
  confirmResetPassword(token: string, newPassword: string): Promise<void>;
16
17
  }
@@ -24,7 +24,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
24
24
  exports.AuthService = void 0;
25
25
  const Orm_1 = require("../../../Orm");
26
26
  const Utilities_1 = require("../../../Utilities");
27
- const StatoRegistrazione_1 = require("../../models/StatoRegistrazione");
27
+ const StatoRegistrazione_1 = require("../../Dtos/StatoRegistrazione");
28
28
  const common_1 = require("@nestjs/common");
29
29
  const UserService_1 = require("../UserService/UserService");
30
30
  const PermissionService_1 = require("../PermissionService/PermissionService");
@@ -36,13 +36,14 @@ let AuthService = class AuthService {
36
36
  }
37
37
  login(request) {
38
38
  return __awaiter(this, void 0, void 0, function* () {
39
- if (this.accessiOptions.mockDemoUser && request.username.toLowerCase() === "demo")
39
+ //TODO: gestione campi esterni con variabili di ambiente
40
+ if (this.accessiOptions.mockDemoUser && request.email.toLowerCase() === "demo")
40
41
  return this.getDemoUser();
41
- if (this.accessiOptions.mockDemoUser && request.username.toLowerCase() === "admin")
42
+ if (this.accessiOptions.mockDemoUser && request.email.toLowerCase() === "admin")
42
43
  return this.getAdminUser();
43
44
  const passwordCifrata = Utilities_1.CryptUtilities.encrypt(request.password, this.accessiOptions.encryptionKey);
44
45
  // Recupera l'utente dal database
45
- const utente = yield this.userService.getUserByUsername(request.username.toLowerCase());
46
+ const utente = yield this.userService.getUserByEmail(request.email.toLowerCase());
46
47
  if (!utente)
47
48
  throw new Error("Nome utente o password errata!");
48
49
  // Verifica lo stato della registrazione
@@ -62,10 +63,17 @@ let AuthService = class AuthService {
62
63
  const isPasswordValid = yield this.verifyPassword(utente.codiceUtente, passwordCifrata);
63
64
  if (!isPasswordValid)
64
65
  throw new Error("Nome utente o password errata!");
66
+ const today = new Date();
67
+ const targetDate = new Date(utente.dataScadenzaPassword);
68
+ if (today >= targetDate) {
69
+ throw new Error("Password scaduta!");
70
+ }
65
71
  // Recupera le abilitazioni
66
72
  const abilitazioni = yield this.permissionService.getAbilitazioniMenu(utente.codiceUtente, utente.flagSuper);
67
73
  // Recupera i filtri
68
74
  const filtri = yield this.userService.getUserFilters(utente.codiceUtente);
75
+ const updateLastAccessDateQuery = "UPDATE UTENTI SET DATLASTLOGIN = CURRENT_TIMESTAMP WHERE CODUTE = ?";
76
+ yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, updateLastAccessDateQuery, [utente.codiceUtente]);
69
77
  return { utente, filtri, abilitazioni };
70
78
  });
71
79
  }
@@ -90,30 +98,36 @@ let AuthService = class AuthService {
90
98
  });
91
99
  }
92
100
  getAdminUser() {
93
- return {
94
- utente: {
95
- codiceUtente: "6789",
96
- username: "admin",
97
- statoRegistrazione: StatoRegistrazione_1.StatoRegistrazione.CONF,
98
- cognome: "Admin",
99
- nome: "Admin",
100
- flagGdpr: true,
101
- avatar: "/path/to/avatar.jpg",
102
- flagDueFattori: false,
103
- codiceLingua: "IT",
104
- cellulare: "+391234567890",
105
- flagSuper: true,
106
- paginaDefault: "/home",
107
- },
108
- filtri: null,
109
- abilitazioni: []
110
- };
101
+ return __awaiter(this, void 0, void 0, function* () {
102
+ const abilitazioni = yield this.permissionService.getAbilitazioniMenu("6789", true);
103
+ const filtri = yield this.userService.getUserFilters("6789");
104
+ return {
105
+ utente: {
106
+ codiceUtente: "6789",
107
+ email: "admin",
108
+ statoRegistrazione: StatoRegistrazione_1.StatoRegistrazione.CONF,
109
+ cognome: "Admin",
110
+ nome: "Admin",
111
+ flagGdpr: true,
112
+ avatar: "/path/to/avatar.jpg",
113
+ flagDueFattori: false,
114
+ codiceLingua: "IT",
115
+ cellulare: "+391234567890",
116
+ flagSuper: true,
117
+ paginaDefault: "/home",
118
+ roles: [],
119
+ permissions: []
120
+ },
121
+ filtri,
122
+ abilitazioni
123
+ };
124
+ });
111
125
  }
112
126
  getDemoUser() {
113
127
  return {
114
128
  utente: {
115
129
  codiceUtente: "12345",
116
- username: "jdoe",
130
+ email: "jdoe",
117
131
  statoRegistrazione: StatoRegistrazione_1.StatoRegistrazione.CONF,
118
132
  cognome: "Doe",
119
133
  nome: "John",
@@ -124,6 +138,8 @@ let AuthService = class AuthService {
124
138
  cellulare: "+391234567890",
125
139
  flagSuper: false,
126
140
  paginaDefault: "/home",
141
+ roles: [],
142
+ permissions: []
127
143
  },
128
144
  filtri: null,
129
145
  abilitazioni: []
@@ -1,6 +1,5 @@
1
1
  import { AccessiOptions } from '../../AccessiModule';
2
- import { IEmailService } from './IEmailService';
3
- export declare class EmailService implements IEmailService {
2
+ export declare class EmailService {
4
3
  private readonly accessiOptions;
5
4
  constructor(accessiOptions: AccessiOptions);
6
5
  sendAccountUpdateEmail(email: string, message: string): Promise<void>;
@@ -29,7 +29,7 @@ const nodemailer_1 = __importDefault(require("nodemailer"));
29
29
  const uuid_1 = require("uuid");
30
30
  const Orm_1 = require("../../../Orm");
31
31
  const common_1 = require("@nestjs/common");
32
- const StatoRegistrazione_1 = require("../../models/StatoRegistrazione");
32
+ const StatoRegistrazione_1 = require("../../Dtos/StatoRegistrazione");
33
33
  let EmailService = class EmailService {
34
34
  constructor(accessiOptions) {
35
35
  this.accessiOptions = accessiOptions;
@@ -1,11 +1,18 @@
1
1
  import { AccessiOptions } from "../../AccessiModule";
2
- import { IAbilitazioneMenu } from "../UserService/IUserService";
3
- import { IPermissionService, IRoleWithMenus } from "./IPermissionService";
4
- export declare class PermissionService implements IPermissionService {
2
+ import { Permission } from "../../Dtos";
3
+ import { AbilitazioneMenu } from "../../Dtos/AbilitazioneMenu";
4
+ import { MenuEntity } from "../../Dtos/GetMenusResponse";
5
+ import { Role } from "../../Dtos/Role";
6
+ export declare class PermissionService {
5
7
  private readonly accessiOptions;
6
8
  constructor(accessiOptions: AccessiOptions);
7
9
  addAbilitazioni(codiceUtente: string, menuAbilitazioni: any[]): Promise<void>;
8
10
  resetAbilitazioni(codiceUtente: string): Promise<void>;
9
- getRolesWithMenus(): Promise<IRoleWithMenus[]>;
10
- getAbilitazioniMenu(codiceUtente: string, isSuperAdmin: boolean): Promise<IAbilitazioneMenu[]>;
11
+ updateOrInsertRole(role: Role, codiceRuolo?: string): Promise<void>;
12
+ getRolesWithMenus(): Promise<Role[]>;
13
+ getAbilitazioniMenu(codiceUtente: string, isSuperAdmin: boolean): Promise<AbilitazioneMenu[]>;
14
+ assignRolesToUser(codiceUtente: string, roles: string[]): Promise<void>;
15
+ assignPermissionsToUser(codiceUtente: string, permissions: Permission[]): Promise<void>;
16
+ deleteRole(codiceRuolo: number): Promise<void>;
17
+ getMenus(): Promise<MenuEntity[]>;
11
18
  }
@@ -59,6 +59,33 @@ let PermissionService = class PermissionService {
59
59
  }
60
60
  });
61
61
  }
62
+ updateOrInsertRole(role_1) {
63
+ return __awaiter(this, arguments, void 0, function* (role, codiceRuolo = null) {
64
+ try {
65
+ // creazione nuovo ruolo
66
+ if (!codiceRuolo) {
67
+ let createRoleQuery = `INSERT INTO RUOLI (DESRUO) VALUES (?) RETURNING CODRUO`;
68
+ let result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, createRoleQuery, [role.descrizioneRuolo]);
69
+ codiceRuolo = result[0].CODRUO;
70
+ }
71
+ else
72
+ // aggiornamento ruolo esistente
73
+ {
74
+ let updateRoleQuery = `UPDATE RUOLI SET DESRUO = ? WHERE CODRUO = ?`;
75
+ yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, updateRoleQuery, [role.descrizioneRuolo, codiceRuolo]);
76
+ let deleteRoleMenuQuery = `DELETE FROM RUOLI_MNU WHERE CODRUO = ?`;
77
+ yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, deleteRoleMenuQuery, [codiceRuolo]);
78
+ }
79
+ let createRoleMenuQuery = `INSERT INTO RUOLI_MNU (CODRUO, CODMNU, TIPABI) VALUES (?, ?, ?)`;
80
+ for (let menu of role.menu) {
81
+ yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, createRoleMenuQuery, [codiceRuolo, menu.codiceMenu, menu.tipoAbilitazione]);
82
+ }
83
+ }
84
+ catch (error) {
85
+ throw error;
86
+ }
87
+ });
88
+ }
62
89
  getRolesWithMenus() {
63
90
  return __awaiter(this, void 0, void 0, function* () {
64
91
  try {
@@ -76,7 +103,6 @@ let PermissionService = class PermissionService {
76
103
  `;
77
104
  let result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, []);
78
105
  result = result.map(Utilities_1.RestUtilities.convertKeysToCamelCase);
79
- console.log("RESULT: ", result);
80
106
  const ruoliMap = new Map();
81
107
  for (const row of result) {
82
108
  const { codiceRuolo, descrizioneRuolo, codiceMenu, descrizioneMenu, tipoAbilitazione } = row;
@@ -107,7 +133,7 @@ let PermissionService = class PermissionService {
107
133
  const query = isSuperAdmin
108
134
  ? `SELECT
109
135
  M.CODMNU AS codice_menu,
110
- 10 AS tipo_abilitazione,
136
+ 30 AS tipo_abilitazione,
111
137
  M.DESMNU AS descrizione_menu,
112
138
  G.DESGRP AS descrizione_gruppo,
113
139
  G.CODGRP AS codice_gruppo,
@@ -117,7 +143,8 @@ let PermissionService = class PermissionService {
117
143
  FROM MENU M
118
144
  INNER JOIN MENU_GRP G ON G.CODGRP = M.CODGRP
119
145
  WHERE M.FLGENABLED = 1 AND G.FLGENABLED = 1`
120
- : `SELECT
146
+ : `WITH AbilitazioniTotali AS (
147
+ SELECT
121
148
  A.CODMNU AS codice_menu,
122
149
  A.TIPABI AS tipo_abilitazione,
123
150
  M.DESMNU AS descrizione_menu,
@@ -129,11 +156,122 @@ let PermissionService = class PermissionService {
129
156
  FROM ABILITAZIONI A
130
157
  INNER JOIN MENU M ON A.CODMNU = M.CODMNU
131
158
  INNER JOIN MENU_GRP G ON G.CODGRP = M.CODGRP
132
- WHERE A.CODUTE = ? AND M.FLGENABLED = 1 AND G.FLGENABLED = 1`;
133
- return yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, isSuperAdmin ? [] : [codiceUtente])
159
+ WHERE A.CODUTE = ? AND M.FLGENABLED = 1 AND G.FLGENABLED = 1
160
+
161
+ UNION ALL
162
+
163
+ SELECT
164
+ RM.CODMNU AS codice_menu,
165
+ 5 AS tipo_abilitazione,
166
+ M.DESMNU AS descrizione_menu,
167
+ G.DESGRP AS descrizione_gruppo,
168
+ G.CODGRP AS codice_gruppo,
169
+ M.ICON AS icona,
170
+ M.CODTIP AS tipo,
171
+ M.PAGINA AS pagina
172
+ FROM RUOLI_UTENTI RU
173
+ INNER JOIN RUOLI R ON RU.CODRUL = R.CODRUL
174
+ INNER JOIN RUOLI_MENU RM ON R.CODRUL = RM.CODRUL
175
+ INNER JOIN MENU M ON RM.CODMNU = M.CODMNU
176
+ INNER JOIN MENU_GRP G ON G.CODGRP = M.CODGRP
177
+ WHERE RU.CODUTE = ? AND M.FLGENABLED = 1 AND G.FLGENABLED = 1
178
+ )
179
+ SELECT codice_menu, tipo_abilitazione, descrizione_menu, descrizione_gruppo, codice_gruppo, icona, tipo, pagina
180
+ FROM (
181
+ SELECT *, ROW_NUMBER() OVER (PARTITION BY codice_menu ORDER BY tipo_abilitazione DESC) AS row_num
182
+ FROM AbilitazioniTotali
183
+ ) AS Ranked
184
+ WHERE row_num = 1`;
185
+ const queryParams = isSuperAdmin ? [] : [codiceUtente, codiceUtente];
186
+ return yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, queryParams)
134
187
  .then(results => results.map(Utilities_1.RestUtilities.convertKeysToCamelCase));
135
188
  });
136
189
  }
190
+ assignRolesToUser(codiceUtente, roles) {
191
+ return __awaiter(this, void 0, void 0, function* () {
192
+ try {
193
+ const userExistsQuery = `SELECT COUNT(*) FROM UTENTI WHERE CODUTE = ?`;
194
+ let result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, userExistsQuery, [codiceUtente]);
195
+ if (result[0].COUNT === 0) {
196
+ throw new Error(`L'utente con codice ${codiceUtente} non esiste.`);
197
+ }
198
+ const deleteQuery = `DELETE FROM UTENTI_RUOLI WHERE CODUTE = ?`;
199
+ yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, deleteQuery, [codiceUtente]);
200
+ const insertQuery = `INSERT INTO UTENTI_RUOLI (CODUTE, CODRUO) VALUES (?, ?)`;
201
+ for (const codiceRuolo of roles) {
202
+ yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, insertQuery, [codiceUtente, codiceRuolo]);
203
+ }
204
+ }
205
+ catch (error) {
206
+ throw error;
207
+ }
208
+ });
209
+ }
210
+ assignPermissionsToUser(codiceUtente, permissions) {
211
+ return __awaiter(this, void 0, void 0, function* () {
212
+ try {
213
+ const userExistsQuery = `SELECT COUNT(*) FROM UTENTI WHERE CODUTE = ?`;
214
+ let result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, userExistsQuery, [codiceUtente]);
215
+ if (result[0].COUNT === 0) {
216
+ throw new Error(`L'utente con codice ${codiceUtente} non esiste.`);
217
+ }
218
+ const deleteQuery = `DELETE FROM ABILITAZIONI WHERE CODUTE = ?`;
219
+ yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, deleteQuery, [codiceUtente]);
220
+ const insertQuery = `INSERT INTO ABILITAZIONI (CODUTE, CODMNU, TIPABI) VALUES (?, ?, ?)`;
221
+ for (const permission of permissions) {
222
+ yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, insertQuery, [codiceUtente, permission.codiceMenu, permission.tipoAbilitazione]);
223
+ }
224
+ }
225
+ catch (error) {
226
+ throw error;
227
+ }
228
+ });
229
+ }
230
+ deleteRole(codiceRuolo) {
231
+ return __awaiter(this, void 0, void 0, function* () {
232
+ try {
233
+ const existsQuery = `SELECT COUNT(*) FROM RUOLI WHERE CODRUO = ?`;
234
+ let result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, existsQuery, [codiceRuolo]);
235
+ if (result[0].COUNT === 0) {
236
+ throw new Error(`Il ruolo con codice ${codiceRuolo} non esiste.`);
237
+ }
238
+ const deleteRoleMenusQuery = `DELETE FROM RUOLI_MNU WHERE CODRUO = ?`;
239
+ yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, deleteRoleMenusQuery, [codiceRuolo]);
240
+ const deleteRoleUsersQuery = `DELETE FROM UTENTI_RUOLI WHERE CODRUO = ?`;
241
+ yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, deleteRoleUsersQuery, [codiceRuolo]);
242
+ const deleteRoleQuery = `DELETE FROM RUOLI WHERE CODRUO = ?`;
243
+ yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, deleteRoleQuery, [codiceRuolo]);
244
+ }
245
+ catch (error) {
246
+ throw error;
247
+ }
248
+ });
249
+ }
250
+ getMenus() {
251
+ return __awaiter(this, void 0, void 0, function* () {
252
+ try {
253
+ const query = `
254
+ SELECT
255
+ M.CODMNU AS codiceMenu,
256
+ M.DESMNU AS descrizioneMenu,
257
+ M.CODGRP AS codiceGruppo,
258
+ G.DESGRP AS descrizioneGruppo,
259
+ M.ICON AS icona,
260
+ M.CODTIP AS tipo,
261
+ M.PAGINA AS pagina
262
+ FROM MENU M
263
+ LEFT JOIN MENU_GRP G ON M.CODGRP = G.CODGRP
264
+ WHERE M.FLGENABLED = 1
265
+ ORDER BY G.CODGRP, M.CODMNU
266
+ `;
267
+ const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, []);
268
+ return result.map(Utilities_1.RestUtilities.convertKeysToCamelCase);
269
+ }
270
+ catch (error) {
271
+ throw error;
272
+ }
273
+ });
274
+ }
137
275
  };
138
276
  exports.PermissionService = PermissionService;
139
277
  exports.PermissionService = PermissionService = __decorate([
@@ -1,21 +1,22 @@
1
1
  import { AccessiOptions } from "../../AccessiModule";
2
- import { UserQueryResult } from "../../models/QueryResults/UserQueryResult";
3
- import { StatoRegistrazione } from "../../models/StatoRegistrazione";
4
- import { IFiltriUtente, IUser, IUserService } from "./IUserService";
2
+ import { StatoRegistrazione } from "../../Dtos/StatoRegistrazione";
5
3
  import { EmailService } from "../EmailService/EmailService";
6
- export declare class UserService implements IUserService {
4
+ import { User } from "../../Dtos/User";
5
+ import { FiltriUtente } from "../../Dtos/FiltriUtente";
6
+ import { GetUsersResponse } from "../../Dtos/GetUsersResponse";
7
+ export declare class UserService {
7
8
  private readonly accessiOptions;
8
9
  private readonly emailService;
9
10
  constructor(accessiOptions: AccessiOptions, emailService: EmailService);
10
- getUsers(): Promise<UserQueryResult[]>;
11
- getCodiceUtenteByUsername(username: string): Promise<{
11
+ getUsers(): Promise<GetUsersResponse[]>;
12
+ getCodiceUtenteByEmail(email: string): Promise<{
12
13
  codiceUtente: string;
13
14
  }>;
14
- getUserByUsername(username: string): Promise<IUser | null>;
15
- getUserFilters(codiceUtente: string): Promise<IFiltriUtente[]>;
16
- register(registrationData: IUser): Promise<void>;
15
+ getUserByEmail(email: string): Promise<User | null>;
16
+ getUserFilters(codiceUtente: string): Promise<FiltriUtente[]>;
17
+ register(registrationData: User): Promise<void>;
17
18
  setRegistrazioneConfermata(userKey: string): Promise<void>;
18
- updateUser(user: UserQueryResult): Promise<void>;
19
+ updateUser(codiceUtente: string, user: User): Promise<void>;
19
20
  deleteUser(codiceCliente: string): Promise<void>;
20
21
  setGdpr(codiceUtente: string): Promise<any>;
21
22
  setStatoRegistrazione(statoRegistrazione: StatoRegistrazione, codiceUtente: string): Promise<any>;
@@ -26,7 +26,7 @@ const common_1 = require("@nestjs/common");
26
26
  const autobind_1 = require("../../../autobind");
27
27
  const Orm_1 = require("../../../Orm");
28
28
  const Utilities_1 = require("../../../Utilities");
29
- const StatoRegistrazione_1 = require("../../models/StatoRegistrazione");
29
+ const StatoRegistrazione_1 = require("../../Dtos/StatoRegistrazione");
30
30
  const EmailService_1 = require("../EmailService/EmailService");
31
31
  let UserService = class UserService {
32
32
  constructor(accessiOptions, emailService) {
@@ -39,7 +39,7 @@ let UserService = class UserService {
39
39
  const query = `
40
40
  SELECT
41
41
  U.CODUTE as codice_utente,
42
- U.USRNAME as username,
42
+ U.USRNAME as email,
43
43
  U.FLGGDPR as flag_gdpr,
44
44
  U.DATGDPR as data_gdpr,
45
45
  U.DATINS as data_inserimento,
@@ -66,11 +66,11 @@ let UserService = class UserService {
66
66
  }
67
67
  });
68
68
  }
69
- getCodiceUtenteByUsername(username) {
69
+ getCodiceUtenteByEmail(email) {
70
70
  return __awaiter(this, void 0, void 0, function* () {
71
71
  try {
72
72
  const query = `SELECT CODUTE as codice_utente FROM UTENTI WHERE LOWER(USRNAME) = ?`;
73
- const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, [username.trim().toLowerCase()]);
73
+ const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, [email.trim().toLowerCase()]);
74
74
  return result.map(Utilities_1.RestUtilities.convertKeysToCamelCase)[0];
75
75
  }
76
76
  catch (error) {
@@ -78,13 +78,14 @@ let UserService = class UserService {
78
78
  }
79
79
  });
80
80
  }
81
- getUserByUsername(username) {
81
+ getUserByEmail(email) {
82
82
  return __awaiter(this, void 0, void 0, function* () {
83
83
  const query = `
84
84
  SELECT
85
85
  U.CODUTE AS codice_utente,
86
- U.USRNAME AS username,
86
+ U.USRNAME AS email,
87
87
  U.FLGGDPR AS flag_gdpr,
88
+ U.DATSCAPWD as data_scadenza_password,
88
89
  U.STAREG AS stato_registrazione,
89
90
  C.COGNOME AS cognome,
90
91
  C.NOME AS nome,
@@ -98,7 +99,7 @@ let UserService = class UserService {
98
99
  INNER JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE
99
100
  WHERE LOWER(U.USRNAME) = ?
100
101
  `;
101
- const utenti = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, [username])
102
+ const utenti = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, [email])
102
103
  .then(results => results.map(Utilities_1.RestUtilities.convertKeysToCamelCase));
103
104
  return utenti.length > 0 ? utenti[0] : null;
104
105
  });
@@ -125,16 +126,20 @@ let UserService = class UserService {
125
126
  register(registrationData) {
126
127
  return __awaiter(this, void 0, void 0, function* () {
127
128
  try {
128
- const existingUser = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, "SELECT CODUTE FROM UTENTI WHERE USRNAME = ?", [registrationData.username]);
129
+ const existingUser = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, "SELECT CODUTE FROM UTENTI WHERE USRNAME = ?", [registrationData.email]);
129
130
  if (existingUser.length > 0) {
130
- throw new Error("Utente già esistente!");
131
+ throw new Error("Questa e-mail è già stata utilizzata!");
131
132
  }
132
133
  const queryUtenti = `INSERT INTO UTENTI (USRNAME, STAREG) VALUES (?,?) RETURNING CODUTE`;
133
- const paramsUtenti = [registrationData.username, StatoRegistrazione_1.StatoRegistrazione.INVIO];
134
+ const paramsUtenti = [registrationData.email, StatoRegistrazione_1.StatoRegistrazione.INVIO];
134
135
  const codiceUtente = (yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, queryUtenti, paramsUtenti)).CODUTE;
135
136
  const queryUtentiConfig = `INSERT INTO UTENTI_CONFIG (CODUTE,COGNOME,NOME,CODLINGUA) VALUES (?,?,?,?)`;
136
137
  const paramsUtentiConfig = [codiceUtente, registrationData.cognome, registrationData.nome, registrationData.codiceLingua];
137
138
  yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtentiConfig, paramsUtentiConfig);
139
+ // TODO: Aggiungere la gestione dei ruoli
140
+ //registrationData.roles
141
+ // TODO: Aggiungere la gestione delle abilitazioni
142
+ //registrationData.permissions
138
143
  }
139
144
  catch (error) {
140
145
  throw error;
@@ -156,22 +161,22 @@ let UserService = class UserService {
156
161
  }
157
162
  });
158
163
  }
159
- updateUser(user) {
164
+ updateUser(codiceUtente, user) {
160
165
  return __awaiter(this, void 0, void 0, function* () {
161
166
  try {
162
- if (!user.codiceUtente)
167
+ if (!codiceUtente)
163
168
  throw new Error("Impossibile aggiornare senza codice utente.");
164
169
  const queryUtenti = `
165
170
  UPDATE UTENTI
166
- SET usrname = ?, flggdpr = ?, datgdpr=?, datins=?, datscapwd=?, stareg=?
171
+ SET usrname = ?, flggdpr = ?, stareg=?
167
172
  WHERE CODUTE = ?`;
168
- const paramsUtenti = [user.username, user.flagGdpr, user.dataGdpr, user.dataInserimento, user.dataScadenzaPassword, user.statoRegistrazione, user.codiceUtente];
173
+ const paramsUtenti = [user.email, user.flagGdpr, user.statoRegistrazione, codiceUtente];
169
174
  yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, paramsUtenti);
170
175
  const queryUtentiConfig = `
171
176
  UPDATE UTENTI_CONFIG
172
177
  SET cognome = ?, nome = ?, avatar=?, flg2fatt=?, codlingua=?, cellulare=?, flgsuper=?, pagdef=?, json_metadata=?
173
178
  WHERE CODUTE = ?`;
174
- const paramsUtentiConfig = [user.cognome, user.nome, user.avatar, user.flagDueFattori, user.codiceLingua, user.cellulare, user.flagSuper, user.pagDef, user.jsonMetadata, user.codiceUtente];
179
+ const paramsUtentiConfig = [user.cognome, user.nome, user.avatar, user.flagDueFattori, user.codiceLingua, user.cellulare, user.flagSuper, user.paginaDefault, user.jsonMetadata, codiceUtente];
175
180
  yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtentiConfig, paramsUtentiConfig);
176
181
  }
177
182
  catch (error) {
@@ -2,6 +2,4 @@ import { Application } from "express";
2
2
  import { AccessiOptions } from "./AccessiModule";
3
3
  export declare function initializeAccessiModule(app: Application, options: AccessiOptions): Promise<void>;
4
4
  export { AccessiModule } from "./AccessiModule";
5
- export { StatoRegistrazione } from "./models/StatoRegistrazione";
6
- export { ILoginResult } from "./Services/AuthService/IAuthService";
7
- export { IRoleWithMenus } from "./Services/PermissionService/IPermissionService";
5
+ export * from "./Dtos";
@@ -1,4 +1,18 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
17
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
18
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -9,7 +23,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
23
  });
10
24
  };
11
25
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.StatoRegistrazione = exports.AccessiModule = void 0;
26
+ exports.AccessiModule = void 0;
13
27
  exports.initializeAccessiModule = initializeAccessiModule;
14
28
  const core_1 = require("@nestjs/core");
15
29
  const platform_express_1 = require("@nestjs/platform-express");
@@ -30,23 +44,27 @@ function initializeAccessiModule(app, options) {
30
44
  });
31
45
  (0, SwaggerConfig_1.setupSwagger)(nestApp);
32
46
  yield nestApp.init();
33
- console.log('Verifica API NestJS registrate:');
47
+ /*
48
+ console.log('Verifica API NestJS registrate:');
34
49
  const server = nestApp.getHttpAdapter().getInstance();
35
50
  const router = server.router;
36
- const availableRoutes = router.stack
51
+
52
+
53
+ const availableRoutes: [] = router.stack
37
54
  .map(layer => {
38
- var _a, _b;
39
- if (layer.route) {
40
- return {
41
- route: {
42
- path: (_a = layer.route) === null || _a === void 0 ? void 0 : _a.path,
43
- method: (_b = layer.route) === null || _b === void 0 ? void 0 : _b.stack[0].method,
44
- },
45
- };
46
- }
47
- })
55
+ if (layer.route) {
56
+ return {
57
+ route: {
58
+ path: layer.route?.path,
59
+ method: layer.route?.stack[0].method,
60
+ },
61
+ };
62
+ }
63
+ })
48
64
  .filter(item => item !== undefined);
49
65
  console.log(availableRoutes);
66
+
67
+ */
50
68
  }
51
69
  catch (error) {
52
70
  console.error("Errore in initialize AccessiModule:", error);
@@ -56,5 +74,4 @@ function initializeAccessiModule(app, options) {
56
74
  }
57
75
  var AccessiModule_2 = require("./AccessiModule");
58
76
  Object.defineProperty(exports, "AccessiModule", { enumerable: true, get: function () { return AccessiModule_2.AccessiModule; } });
59
- var StatoRegistrazione_1 = require("./models/StatoRegistrazione");
60
- Object.defineProperty(exports, "StatoRegistrazione", { enumerable: true, get: function () { return StatoRegistrazione_1.StatoRegistrazione; } });
77
+ __exportStar(require("./Dtos"), exports);
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setupSwagger = setupSwagger;
4
4
  const swagger_1 = require("@nestjs/swagger");
5
+ const swaggerUrl = "swagger/accessi";
5
6
  function setupSwagger(app) {
6
7
  const config = new swagger_1.DocumentBuilder()
7
8
  .setTitle("Accessi API")
@@ -10,6 +11,6 @@ function setupSwagger(app) {
10
11
  .addBearerAuth() // Per abilitare l'autenticazione JWT
11
12
  .build();
12
13
  const document = swagger_1.SwaggerModule.createDocument(app, config);
13
- swagger_1.SwaggerModule.setup("swagger", app, document);
14
- console.log("✅ Swagger disponibile su: http://localhost:3000/swagger");
14
+ swagger_1.SwaggerModule.setup(swaggerUrl, app, document);
15
+ console.log("✅ Swagger disponibile su: http://localhost:3000/" + swaggerUrl);
15
16
  }
package/dist/index.d.ts CHANGED
@@ -5,6 +5,6 @@ import { Orm } from "./Orm";
5
5
  import { DateUtilities, RestUtilities, DatabaseUtilities, StatusCode } from "./Utilities";
6
6
  import { autobind } from "./autobind";
7
7
  import { DocumentGenerator } from "./ContractGenerator";
8
- export { AccessiModule, StatoRegistrazione, ILoginResult, IRoleWithMenus } from "./accessi-module";
8
+ export * from "./accessi-module";
9
9
  export * from "es-node-firebird";
10
10
  export { autobind, ExecutionTimeLogger, Logger, LogLevels, Orm, DateUtilities, RestUtilities, DatabaseUtilities, DatabaseUpdater, StatusCode, DocumentGenerator };