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.
- package/dist/accessi-module/AccessiModule.js +2 -1
- package/dist/accessi-module/Controllers/AccessiController.d.ts +3 -4
- package/dist/accessi-module/Controllers/AccessiController.js +4 -23
- package/dist/accessi-module/Controllers/AuthController.d.ts +1 -1
- package/dist/accessi-module/Controllers/AuthController.js +17 -0
- package/dist/accessi-module/Controllers/EmailController.d.ts +1 -1
- package/dist/accessi-module/Controllers/EmailController.js +8 -2
- package/dist/accessi-module/Controllers/PermissionController.d.ts +14 -2
- package/dist/accessi-module/Controllers/PermissionController.js +223 -14
- package/dist/accessi-module/Controllers/UserController.d.ts +17 -0
- package/dist/accessi-module/Controllers/UserController.js +211 -0
- package/dist/accessi-module/Dtos/Abilitazione.d.ts +6 -0
- package/dist/accessi-module/Dtos/Abilitazione.js +47 -0
- package/dist/accessi-module/Dtos/AbilitazioneMenu.d.ts +11 -0
- package/dist/accessi-module/Dtos/AbilitazioneMenu.js +91 -0
- package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.d.ts +4 -0
- package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js +28 -0
- package/dist/accessi-module/Dtos/AssignRolesToUserRequest.d.ts +3 -0
- package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js +24 -0
- package/dist/accessi-module/Dtos/FiltriUtente.d.ts +10 -0
- package/dist/accessi-module/Dtos/FiltriUtente.js +87 -0
- package/dist/accessi-module/Dtos/GetMenusResponse.d.ts +12 -0
- package/dist/accessi-module/Dtos/GetMenusResponse.js +80 -0
- package/dist/accessi-module/{models/QueryResults/UserQueryResult.d.ts → Dtos/GetUsersResponse.d.ts} +2 -2
- package/dist/accessi-module/Dtos/GetUsersResponse.js +252 -0
- package/dist/accessi-module/Dtos/LoginRequest.d.ts +4 -0
- package/dist/accessi-module/Dtos/LoginRequest.js +35 -0
- package/dist/accessi-module/Dtos/LoginResult.d.ts +10 -0
- package/dist/accessi-module/Dtos/LoginResult.js +34 -0
- package/dist/accessi-module/Dtos/MenuItem.d.ts +0 -0
- package/dist/accessi-module/Dtos/MenuItem.js +0 -0
- package/dist/accessi-module/Dtos/Permission.d.ts +4 -0
- package/dist/accessi-module/Dtos/Permission.js +32 -0
- package/dist/accessi-module/Dtos/Role.d.ts +12 -0
- package/dist/accessi-module/Dtos/Role.js +50 -0
- package/dist/accessi-module/Dtos/TipoAbilitazione.d.ts +6 -0
- package/dist/accessi-module/{Services/PermissionService/IPermissionService.js → Dtos/TipoAbilitazione.js} +1 -1
- package/dist/accessi-module/Dtos/TokenResult.d.ts +5 -0
- package/dist/accessi-module/Dtos/TokenResult.js +38 -0
- package/dist/accessi-module/Dtos/User.d.ts +19 -0
- package/dist/accessi-module/Dtos/User.js +118 -0
- package/dist/accessi-module/Dtos/index.d.ts +13 -0
- package/dist/accessi-module/Dtos/index.js +29 -0
- package/dist/accessi-module/Services/AuthService/AuthService.d.ts +6 -5
- package/dist/accessi-module/Services/AuthService/AuthService.js +39 -23
- package/dist/accessi-module/Services/EmailService/EmailService.d.ts +1 -2
- package/dist/accessi-module/Services/EmailService/EmailService.js +1 -1
- package/dist/accessi-module/Services/PermissionService/PermissionService.d.ts +12 -5
- package/dist/accessi-module/Services/PermissionService/PermissionService.js +143 -5
- package/dist/accessi-module/Services/UserService/UserService.d.ts +11 -10
- package/dist/accessi-module/Services/UserService/UserService.js +20 -15
- package/dist/accessi-module/index.d.ts +1 -3
- package/dist/accessi-module/index.js +32 -15
- package/dist/accessi-module/swagger/SwaggerConfig.js +3 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -4
- package/package.json +1 -1
- package/dist/accessi-module/Services/AuthService/IAuthService.d.ts +0 -64
- package/dist/accessi-module/Services/AuthService/IAuthService.js +0 -2
- package/dist/accessi-module/Services/EmailService/IEmailService.d.ts +0 -21
- package/dist/accessi-module/Services/EmailService/IEmailService.js +0 -2
- package/dist/accessi-module/Services/PermissionService/IPermissionService.d.ts +0 -59
- package/dist/accessi-module/Services/UserService/IUserService.d.ts +0 -110
- package/dist/accessi-module/Services/UserService/IUserService.js +0 -2
- package/dist/accessi-module/models/QueryResults/MenuAbilitazioniResult.d.ts +0 -11
- package/dist/accessi-module/models/QueryResults/MenuAbilitazioniResult.js +0 -2
- package/dist/accessi-module/models/QueryResults/UserQueryResult.js +0 -2
- /package/dist/accessi-module/{models → Dtos}/StatoRegistrazione.d.ts +0 -0
- /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
|
-
|
|
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<
|
|
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():
|
|
14
|
-
getDemoUser():
|
|
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("../../
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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("../../
|
|
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 {
|
|
3
|
-
import {
|
|
4
|
-
|
|
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
|
-
|
|
10
|
-
|
|
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
|
-
|
|
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
|
-
: `
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
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<
|
|
11
|
-
|
|
11
|
+
getUsers(): Promise<GetUsersResponse[]>;
|
|
12
|
+
getCodiceUtenteByEmail(email: string): Promise<{
|
|
12
13
|
codiceUtente: string;
|
|
13
14
|
}>;
|
|
14
|
-
|
|
15
|
-
getUserFilters(codiceUtente: string): Promise<
|
|
16
|
-
register(registrationData:
|
|
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:
|
|
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("../../
|
|
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
|
|
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
|
-
|
|
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, [
|
|
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
|
-
|
|
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
|
|
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, [
|
|
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.
|
|
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("
|
|
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.
|
|
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 (!
|
|
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 = ?,
|
|
171
|
+
SET usrname = ?, flggdpr = ?, stareg=?
|
|
167
172
|
WHERE CODUTE = ?`;
|
|
168
|
-
const paramsUtenti = [user.
|
|
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.
|
|
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
|
|
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.
|
|
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
|
-
|
|
47
|
+
/*
|
|
48
|
+
console.log('Verifica API NestJS registrate:');
|
|
34
49
|
const server = nestApp.getHttpAdapter().getInstance();
|
|
35
50
|
const router = server.router;
|
|
36
|
-
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
const availableRoutes: [] = router.stack
|
|
37
54
|
.map(layer => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
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(
|
|
14
|
-
console.log("✅ Swagger disponibile su: http://localhost:3000/
|
|
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
|
|
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 };
|