emilsoftware-utilities 1.8.0-dev.2 → 2.0.0-dev.2
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/README.MD +38 -34
- package/dist/ContractGenerator.js.map +1 -1
- package/dist/DatabaseUpdater.js +24 -24
- package/dist/DatabaseUpdater.js.map +1 -1
- package/dist/EmilsoftwareModule.js.map +1 -1
- package/dist/ExecutionTimeLogger.js.map +1 -1
- package/dist/Logger.js.map +1 -1
- package/dist/Orm.js.map +1 -1
- package/dist/RoutesLoggerMiddleware.js.map +1 -1
- package/dist/Utilities.d.ts +18 -0
- package/dist/Utilities.js +90 -1
- package/dist/Utilities.js.map +1 -1
- package/dist/accessi-module/AccessiModule.d.ts +15 -0
- package/dist/accessi-module/AccessiModule.js.map +1 -1
- package/dist/accessi-module/Controllers/AuthController.d.ts +4 -4
- package/dist/accessi-module/Controllers/AuthController.js +36 -21
- package/dist/accessi-module/Controllers/AuthController.js.map +1 -1
- package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
- package/dist/accessi-module/Controllers/EmailController.d.ts +3 -3
- package/dist/accessi-module/Controllers/EmailController.js +15 -15
- package/dist/accessi-module/Controllers/EmailController.js.map +1 -1
- package/dist/accessi-module/Controllers/FiltriController.d.ts +3 -3
- package/dist/accessi-module/Controllers/FiltriController.js +32 -15
- package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
- package/dist/accessi-module/Controllers/PermissionController.d.ts +12 -17
- package/dist/accessi-module/Controllers/PermissionController.js +140 -124
- package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
- package/dist/accessi-module/Controllers/UserController.d.ts +12 -11
- package/dist/accessi-module/Controllers/UserController.js +112 -79
- package/dist/accessi-module/Controllers/UserController.js.map +1 -1
- package/dist/accessi-module/Dtos/Abilitazione.js.map +1 -1
- package/dist/accessi-module/Dtos/AbilitazioneMenu.js.map +1 -1
- package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js +6 -0
- package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js +6 -0
- package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/BaseResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/FiltriUtente.js.map +1 -1
- package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetRolesResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetUsersResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/Permission.js +5 -0
- package/dist/accessi-module/Dtos/Permission.js.map +1 -1
- package/dist/accessi-module/Dtos/RegisterRequest.js +37 -1
- package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/RegisterResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/Role.js +13 -2
- package/dist/accessi-module/Dtos/Role.js.map +1 -1
- package/dist/accessi-module/Dtos/RuoliMenu.js.map +1 -1
- package/dist/accessi-module/Dtos/SetStatoRegistrazione.js +6 -0
- package/dist/accessi-module/Dtos/SetStatoRegistrazione.js.map +1 -1
- package/dist/accessi-module/Dtos/StatoRegistrazione.js.map +1 -1
- package/dist/accessi-module/Dtos/TipoAbilitazione.js.map +1 -1
- package/dist/accessi-module/Dtos/TipoFiltro.js.map +1 -1
- package/dist/accessi-module/Dtos/TokenResult.js.map +1 -1
- package/dist/accessi-module/Dtos/UpdateEnabledStatusRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/UserDto.js +59 -1
- package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
- package/dist/accessi-module/Dtos/UserGrantsDto.js.map +1 -1
- package/dist/accessi-module/Dtos/index.js.map +1 -1
- package/dist/accessi-module/Services/AuthService/AuthService.d.ts +8 -3
- package/dist/accessi-module/Services/AuthService/AuthService.js +159 -27
- package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
- package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js.map +1 -1
- package/dist/accessi-module/Services/EmailService/EmailService.js +44 -21
- package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
- package/dist/accessi-module/Services/FiltriService/FiltriService.js +1 -1
- package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
- package/dist/accessi-module/Services/PermissionService/PermissionService.js +87 -87
- package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
- package/dist/accessi-module/Services/UserService/UserService.d.ts +15 -6
- package/dist/accessi-module/Services/UserService/UserService.js +165 -139
- package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
- package/dist/accessi-module/Views/reset-password.html +213 -195
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +25 -16
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
- package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
- package/dist/accessi-module/index.js +33 -4
- package/dist/accessi-module/index.js.map +1 -1
- package/dist/accessi-module/jwt/jwt.strategy.d.ts +4 -2
- package/dist/accessi-module/jwt/jwt.strategy.js +47 -19
- package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
- package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
- package/dist/accessi-module/middleware/authenticateGen.d.ts +3 -1
- package/dist/accessi-module/middleware/authenticateGen.js +17 -11
- package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
- package/dist/accessi-module/security/accessControl.d.ts +17 -0
- package/dist/accessi-module/security/accessControl.js +44 -0
- package/dist/accessi-module/security/accessControl.js.map +1 -0
- package/dist/accessi-module/security/authenticatedToken.d.ts +11 -0
- package/dist/accessi-module/security/authenticatedToken.js +39 -0
- package/dist/accessi-module/security/authenticatedToken.js.map +1 -0
- package/dist/accessi-module/security/passwordResetToken.d.ts +8 -0
- package/dist/accessi-module/security/passwordResetToken.js +73 -0
- package/dist/accessi-module/security/passwordResetToken.js.map +1 -0
- package/dist/accessi-module/security/publicAuthRateLimit.d.ts +10 -0
- package/dist/accessi-module/security/publicAuthRateLimit.js +105 -0
- package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -0
- package/dist/allegati-module/AllegatiModule.js.map +1 -1
- package/dist/allegati-module/Controllers/AllegatiController.js.map +1 -1
- package/dist/allegati-module/Dtos/AllegatoDto.js.map +1 -1
- package/dist/allegati-module/Dtos/BaseResponse.js.map +1 -1
- package/dist/allegati-module/Dtos/UploadSingleFileRequest.js.map +1 -1
- package/dist/allegati-module/Dtos/index.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/DownloadAllegatoResponseDto.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/GetListResponse.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/UploadAllegatoResponseDto.js.map +1 -1
- package/dist/allegati-module/Services/AllegatiService/AllegatiService.js +49 -49
- package/dist/allegati-module/Services/AllegatiService/AllegatiService.js.map +1 -1
- package/dist/allegati-module/index.js.map +1 -1
- package/dist/autobind.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/initEmilsoftwareModule.js.map +1 -1
- package/dist/swagger/SwaggerConfig.js.map +1 -1
- package/package.json +83 -83
- package/dist/emilsoftware-utilities-1.8.0-dev.2.tgz +0 -0
|
@@ -26,11 +26,11 @@ 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 FiltriUtente_1 = require("../../Dtos/FiltriUtente");
|
|
29
30
|
const StatoRegistrazione_1 = require("../../Dtos/StatoRegistrazione");
|
|
30
31
|
const EmailService_1 = require("../EmailService/EmailService");
|
|
31
|
-
const FiltriUtente_1 = require("../../Dtos/FiltriUtente");
|
|
32
|
-
const PermissionService_1 = require("../PermissionService/PermissionService");
|
|
33
32
|
const FiltriService_1 = require("../FiltriService/FiltriService");
|
|
33
|
+
const PermissionService_1 = require("../PermissionService/PermissionService");
|
|
34
34
|
let UserService = class UserService {
|
|
35
35
|
constructor(accessiOptions, emailService, permissionService, filtriService) {
|
|
36
36
|
this.accessiOptions = accessiOptions;
|
|
@@ -38,6 +38,25 @@ let UserService = class UserService {
|
|
|
38
38
|
this.permissionService = permissionService;
|
|
39
39
|
this.filtriService = filtriService;
|
|
40
40
|
}
|
|
41
|
+
normalizeDatabaseBoolean(value) {
|
|
42
|
+
return value === true || value === 1 || value === '1';
|
|
43
|
+
}
|
|
44
|
+
normalizeEmail(email) {
|
|
45
|
+
if (typeof email !== 'string' || email.trim() === '') {
|
|
46
|
+
throw new Error("L'email e' obbligatoria.");
|
|
47
|
+
}
|
|
48
|
+
return email.trim().toLowerCase();
|
|
49
|
+
}
|
|
50
|
+
ensureEmailIsAvailable(email, currentUserCode) {
|
|
51
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
+
const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, 'SELECT FIRST 1 CODUTE as codice_utente FROM UTENTI WHERE LOWER(USRNAME) = ?', [email]);
|
|
53
|
+
const existingUser = result.map(Utilities_1.RestUtilities.convertKeysToCamelCase)[0];
|
|
54
|
+
if ((existingUser === null || existingUser === void 0 ? void 0 : existingUser.codiceUtente) &&
|
|
55
|
+
(!currentUserCode || existingUser.codiceUtente !== currentUserCode)) {
|
|
56
|
+
throw new Error("Questa e-mail e' gia stata utilizzata!");
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
41
60
|
isAdminConfigurator(codiceUtente) {
|
|
42
61
|
return __awaiter(this, void 0, void 0, function* () {
|
|
43
62
|
var _a;
|
|
@@ -57,78 +76,104 @@ let UserService = class UserService {
|
|
|
57
76
|
return flagValue === 1;
|
|
58
77
|
});
|
|
59
78
|
}
|
|
79
|
+
getAuthenticatedUserSnapshot(codiceUtente) {
|
|
80
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
81
|
+
if (!codiceUtente || codiceUtente <= 0) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, `
|
|
85
|
+
SELECT
|
|
86
|
+
U.CODUTE AS codice_utente,
|
|
87
|
+
U.USRNAME AS email,
|
|
88
|
+
U.STAREG AS stato_registrazione,
|
|
89
|
+
C.FLGSUPER AS flag_super,
|
|
90
|
+
C.FLGADMINCONFIG AS flag_admin_configurator
|
|
91
|
+
FROM UTENTI U
|
|
92
|
+
LEFT JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE
|
|
93
|
+
WHERE U.CODUTE = ?
|
|
94
|
+
`, [codiceUtente]);
|
|
95
|
+
const user = result.map(Utilities_1.RestUtilities.convertKeysToCamelCase)[0];
|
|
96
|
+
if (!(user === null || user === void 0 ? void 0 : user.codiceUtente)) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
codiceUtente: Number(user.codiceUtente),
|
|
101
|
+
email: typeof user.email === 'string' ? user.email : undefined,
|
|
102
|
+
statoRegistrazione: Number(user.statoRegistrazione),
|
|
103
|
+
flagSuper: this.normalizeDatabaseBoolean(user.flagSuper),
|
|
104
|
+
flagAdminConfigurator: this.normalizeDatabaseBoolean(user.flagAdminConfigurator),
|
|
105
|
+
};
|
|
106
|
+
});
|
|
107
|
+
}
|
|
60
108
|
getUsers(filters, options) {
|
|
61
109
|
return __awaiter(this, void 0, void 0, function* () {
|
|
62
110
|
try {
|
|
63
|
-
let query = `
|
|
64
|
-
SELECT
|
|
65
|
-
U.CODUTE as codice_utente,
|
|
66
|
-
U.USRNAME as email,
|
|
67
|
-
U.FLGGDPR as flag_gdpr,
|
|
68
|
-
U.DATGDPR as data_gdpr,
|
|
69
|
-
U.DATINS as data_inserimento,
|
|
70
|
-
U.DATSCAPWD as data_scadenza_password,
|
|
71
|
-
U.DATLASTLOGIN as data_last_login,
|
|
72
|
-
U.STAREG as stato_registrazione,
|
|
73
|
-
G.COGNOME as cognome,
|
|
74
|
-
G.NOME as nome,
|
|
75
|
-
G.AVATAR as avatar,
|
|
76
|
-
G.FLG2FATT as flag_due_fattori,
|
|
77
|
-
G.CODLINGUA as codice_lingua,
|
|
78
|
-
G.CELLULARE as cellulare,
|
|
79
|
-
G.FLGSUPER as flag_super,
|
|
80
|
-
G.FLGADMINCONFIG as flag_admin_configurator,
|
|
81
|
-
G.PAGDEF as pagina_default,
|
|
82
|
-
G.JSON_METADATA as json_metadata,
|
|
83
|
-
G.RAGSOCCLI as rag_soc_cli,
|
|
84
|
-
G.NUMMAC as nummac,
|
|
85
|
-
F.NUMREP AS num_rep,
|
|
86
|
-
F.IDXPERS AS idx_pers,
|
|
87
|
-
F.CODCLISUPER AS cod_cli_super,
|
|
88
|
-
F.CODAGE AS cod_age,
|
|
89
|
-
F.CODCLICOL AS cod_cli_col,
|
|
90
|
-
F.CODCLIENTI AS cod_clienti,
|
|
91
|
-
F.TIPFIL AS tip_fil,
|
|
92
|
-
F.IDXPOS AS idx_postazione
|
|
93
|
-
FROM UTENTI U
|
|
94
|
-
INNER JOIN UTENTI_CONFIG G ON U.CODUTE = G.CODUTE
|
|
95
|
-
LEFT JOIN FILTRI F ON F.CODUTE = U.CODUTE
|
|
96
|
-
WHERE 1=1
|
|
111
|
+
let query = `
|
|
112
|
+
SELECT
|
|
113
|
+
U.CODUTE as codice_utente,
|
|
114
|
+
U.USRNAME as email,
|
|
115
|
+
U.FLGGDPR as flag_gdpr,
|
|
116
|
+
U.DATGDPR as data_gdpr,
|
|
117
|
+
U.DATINS as data_inserimento,
|
|
118
|
+
U.DATSCAPWD as data_scadenza_password,
|
|
119
|
+
U.DATLASTLOGIN as data_last_login,
|
|
120
|
+
U.STAREG as stato_registrazione,
|
|
121
|
+
G.COGNOME as cognome,
|
|
122
|
+
G.NOME as nome,
|
|
123
|
+
G.AVATAR as avatar,
|
|
124
|
+
G.FLG2FATT as flag_due_fattori,
|
|
125
|
+
G.CODLINGUA as codice_lingua,
|
|
126
|
+
G.CELLULARE as cellulare,
|
|
127
|
+
G.FLGSUPER as flag_super,
|
|
128
|
+
G.FLGADMINCONFIG as flag_admin_configurator,
|
|
129
|
+
G.PAGDEF as pagina_default,
|
|
130
|
+
G.JSON_METADATA as json_metadata,
|
|
131
|
+
G.RAGSOCCLI as rag_soc_cli,
|
|
132
|
+
G.NUMMAC as nummac,
|
|
133
|
+
F.NUMREP AS num_rep,
|
|
134
|
+
F.IDXPERS AS idx_pers,
|
|
135
|
+
F.CODCLISUPER AS cod_cli_super,
|
|
136
|
+
F.CODAGE AS cod_age,
|
|
137
|
+
F.CODCLICOL AS cod_cli_col,
|
|
138
|
+
F.CODCLIENTI AS cod_clienti,
|
|
139
|
+
F.TIPFIL AS tip_fil,
|
|
140
|
+
F.IDXPOS AS idx_postazione
|
|
141
|
+
FROM UTENTI U
|
|
142
|
+
INNER JOIN UTENTI_CONFIG G ON U.CODUTE = G.CODUTE
|
|
143
|
+
LEFT JOIN FILTRI F ON F.CODUTE = U.CODUTE
|
|
144
|
+
WHERE 1=1
|
|
97
145
|
`;
|
|
98
|
-
|
|
99
|
-
if (filters.email) {
|
|
146
|
+
const queryParams = [];
|
|
147
|
+
if (filters === null || filters === void 0 ? void 0 : filters.email) {
|
|
100
148
|
query += ` AND LOWER(U.USRNAME) = ? `;
|
|
101
149
|
queryParams.push(filters.email.trim().toLowerCase());
|
|
102
150
|
}
|
|
103
|
-
if (filters.codiceUtente) {
|
|
151
|
+
if (filters === null || filters === void 0 ? void 0 : filters.codiceUtente) {
|
|
104
152
|
query += ` AND U.CODUTE = ? `;
|
|
105
153
|
queryParams.push(filters.codiceUtente);
|
|
106
154
|
}
|
|
107
155
|
query += ` ORDER BY U.CODUTE DESC `;
|
|
108
156
|
let users = (yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, queryParams));
|
|
109
157
|
users = users.map(Utilities_1.RestUtilities.convertKeysToCamelCase);
|
|
110
|
-
|
|
111
|
-
console.log('OPTIONS: ', options);
|
|
158
|
+
const usersResponse = [];
|
|
112
159
|
for (const user of users) {
|
|
113
160
|
let userGrants = null;
|
|
114
|
-
if (options.includeGrants)
|
|
161
|
+
if (options === null || options === void 0 ? void 0 : options.includeGrants) {
|
|
115
162
|
userGrants = yield this.permissionService.getUserRolesAndGrants(user.codiceUtente);
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
if (options.includeExtensionFields) {
|
|
163
|
+
}
|
|
164
|
+
let extensionFields = (options === null || options === void 0 ? void 0 : options.includeExtensionFields) ? {} : null;
|
|
165
|
+
if ((options === null || options === void 0 ? void 0 : options.includeExtensionFields) && this.accessiOptions.extensionFieldsOptions) {
|
|
119
166
|
for (const ext of this.accessiOptions.extensionFieldsOptions) {
|
|
120
167
|
const values = (yield Orm_1.Orm.query(ext.databaseOptions, `SELECT ${ext.tableFields.join(',')} FROM ${ext.tableName} WHERE ${ext.tableJoinFieldName} = ?`, [user.codiceUtente])).map(Utilities_1.RestUtilities.convertKeysToCamelCase);
|
|
121
168
|
extensionFields[ext.objectKey] = values;
|
|
122
169
|
}
|
|
123
170
|
}
|
|
124
|
-
|
|
171
|
+
usersResponse.push({
|
|
125
172
|
utente: user,
|
|
126
|
-
userGrants
|
|
127
|
-
extensionFields
|
|
128
|
-
};
|
|
129
|
-
usersResponse.push(userResult);
|
|
173
|
+
userGrants,
|
|
174
|
+
extensionFields,
|
|
175
|
+
});
|
|
130
176
|
}
|
|
131
|
-
console.log('OPTIONS: ', options);
|
|
132
177
|
return usersResponse;
|
|
133
178
|
}
|
|
134
179
|
catch (error) {
|
|
@@ -153,27 +198,27 @@ let UserService = class UserService {
|
|
|
153
198
|
getUserByEmail(email) {
|
|
154
199
|
return __awaiter(this, void 0, void 0, function* () {
|
|
155
200
|
var _a;
|
|
156
|
-
const query = `
|
|
157
|
-
SELECT
|
|
158
|
-
U.CODUTE AS codice_utente,
|
|
159
|
-
U.USRNAME AS email,
|
|
160
|
-
U.FLGGDPR AS flag_gdpr,
|
|
161
|
-
U.DATSCAPWD as data_scadenza_password,
|
|
162
|
-
U.STAREG AS stato_registrazione,
|
|
163
|
-
C.COGNOME AS cognome,
|
|
164
|
-
C.NOME AS nome,
|
|
165
|
-
C.AVATAR AS avatar,
|
|
166
|
-
C.FLG2FATT AS flag_due_fattori,
|
|
167
|
-
C.CODLINGUA AS codice_lingua,
|
|
168
|
-
C.CELLULARE AS cellulare,
|
|
169
|
-
C.FLGSUPER AS flag_super,
|
|
170
|
-
C.FLGADMINCONFIG AS flag_admin_configurator,
|
|
171
|
-
C.PAGDEF AS pagina_default,
|
|
172
|
-
C.NUMMAC AS nummac,
|
|
173
|
-
C.RAGSOCCLI AS rag_soc_cli
|
|
174
|
-
FROM UTENTI U
|
|
175
|
-
INNER JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE
|
|
176
|
-
WHERE LOWER(U.USRNAME) = ?
|
|
201
|
+
const query = `
|
|
202
|
+
SELECT
|
|
203
|
+
U.CODUTE AS codice_utente,
|
|
204
|
+
U.USRNAME AS email,
|
|
205
|
+
U.FLGGDPR AS flag_gdpr,
|
|
206
|
+
U.DATSCAPWD as data_scadenza_password,
|
|
207
|
+
U.STAREG AS stato_registrazione,
|
|
208
|
+
C.COGNOME AS cognome,
|
|
209
|
+
C.NOME AS nome,
|
|
210
|
+
C.AVATAR AS avatar,
|
|
211
|
+
C.FLG2FATT AS flag_due_fattori,
|
|
212
|
+
C.CODLINGUA AS codice_lingua,
|
|
213
|
+
C.CELLULARE AS cellulare,
|
|
214
|
+
C.FLGSUPER AS flag_super,
|
|
215
|
+
C.FLGADMINCONFIG AS flag_admin_configurator,
|
|
216
|
+
C.PAGDEF AS pagina_default,
|
|
217
|
+
C.NUMMAC AS nummac,
|
|
218
|
+
C.RAGSOCCLI AS rag_soc_cli
|
|
219
|
+
FROM UTENTI U
|
|
220
|
+
INNER JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE
|
|
221
|
+
WHERE LOWER(U.USRNAME) = ?
|
|
177
222
|
`;
|
|
178
223
|
const utenti = (yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, [email]).then((results) => results.map(Utilities_1.RestUtilities.convertKeysToCamelCase)));
|
|
179
224
|
const filtriUtente = yield this.filtriService.getFiltriUser((_a = utenti[0]) === null || _a === void 0 ? void 0 : _a.codiceUtente);
|
|
@@ -183,7 +228,6 @@ let UserService = class UserService {
|
|
|
183
228
|
if (utenti.length > 0 && filtriUtente.length > 0) {
|
|
184
229
|
const user = utenti[0];
|
|
185
230
|
const filtro = filtriUtente[0];
|
|
186
|
-
// Type-safe mapping using type assertion
|
|
187
231
|
Object.entries(FiltriUtente_1.FILTRI_UTENTE_DB_MAPPING).forEach(([key]) => {
|
|
188
232
|
if (key in filtro) {
|
|
189
233
|
user[key] = filtro[key];
|
|
@@ -193,25 +237,6 @@ let UserService = class UserService {
|
|
|
193
237
|
return utenti.length > 0 ? utenti[0] : null;
|
|
194
238
|
});
|
|
195
239
|
}
|
|
196
|
-
// async getUserFilters(codiceUtente: number): Promise<FiltriUtente[]> {
|
|
197
|
-
// const query = `
|
|
198
|
-
// SELECT
|
|
199
|
-
// F.PROG AS progressivo,
|
|
200
|
-
// F.NUMREP AS numero_report,
|
|
201
|
-
// F.IDXPERS AS indice_personale,
|
|
202
|
-
// F.CODCLISUPER AS codice_cliente_super,
|
|
203
|
-
// F.CODAGE AS cod_age,
|
|
204
|
-
// F.CODCLICOL AS codice_cliente_collegato,
|
|
205
|
-
// F.CODCLIENTI AS codice_clienti,
|
|
206
|
-
// F.TIPFIL AS tipo_filtro,
|
|
207
|
-
// F.IDXPOS AS idx_postazione
|
|
208
|
-
// FROM FILTRI F
|
|
209
|
-
// WHERE F.CODUTE = ?
|
|
210
|
-
// `;
|
|
211
|
-
// return (await Orm.query(this.accessiOptions.databaseOptions, query, [codiceUtente]).then(
|
|
212
|
-
// (results) => results.map(RestUtilities.convertKeysToCamelCase),
|
|
213
|
-
// )) as FiltriUtente[];
|
|
214
|
-
// }
|
|
215
240
|
insertUserFilters(codiceUtente, filterData) {
|
|
216
241
|
return __awaiter(this, void 0, void 0, function* () {
|
|
217
242
|
try {
|
|
@@ -265,18 +290,24 @@ let UserService = class UserService {
|
|
|
265
290
|
yield operation();
|
|
266
291
|
});
|
|
267
292
|
}
|
|
268
|
-
register(registrationData) {
|
|
293
|
+
register(registrationData, options) {
|
|
269
294
|
return __awaiter(this, void 0, void 0, function* () {
|
|
270
295
|
var _a, _b, _c;
|
|
271
296
|
try {
|
|
272
|
-
const
|
|
273
|
-
|
|
274
|
-
|
|
297
|
+
const allowPrivilegedFields = (options === null || options === void 0 ? void 0 : options.allowPrivilegedFields) === true;
|
|
298
|
+
const normalizedEmail = this.normalizeEmail(registrationData.email);
|
|
299
|
+
if (!allowPrivilegedFields &&
|
|
300
|
+
(registrationData.flagSuper !== undefined ||
|
|
301
|
+
registrationData.flagAdminConfigurator !== undefined ||
|
|
302
|
+
registrationData.roles !== undefined ||
|
|
303
|
+
registrationData.permissions !== undefined)) {
|
|
304
|
+
throw new Error('I campi privilegiati non sono consentiti nella registrazione pubblica.');
|
|
275
305
|
}
|
|
306
|
+
yield this.ensureEmailIsAvailable(normalizedEmail);
|
|
276
307
|
const queryUtenti = `INSERT INTO UTENTI (USRNAME, STAREG) VALUES (?,?)`;
|
|
277
|
-
const paramsUtenti = [
|
|
308
|
+
const paramsUtenti = [normalizedEmail, StatoRegistrazione_1.StatoRegistrazione.INVIO];
|
|
278
309
|
yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, paramsUtenti);
|
|
279
|
-
const codiceUtenteResult = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, 'SELECT FIRST 1 CODUTE FROM UTENTI WHERE USRNAME = ? ORDER BY CODUTE DESC', [
|
|
310
|
+
const codiceUtenteResult = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, 'SELECT FIRST 1 CODUTE FROM UTENTI WHERE USRNAME = ? ORDER BY CODUTE DESC', [normalizedEmail]);
|
|
280
311
|
const codiceUtente = Number((_b = (_a = codiceUtenteResult === null || codiceUtenteResult === void 0 ? void 0 : codiceUtenteResult[0]) === null || _a === void 0 ? void 0 : _a.CODUTE) !== null && _b !== void 0 ? _b : (_c = codiceUtenteResult === null || codiceUtenteResult === void 0 ? void 0 : codiceUtenteResult[0]) === null || _c === void 0 ? void 0 : _c.codute);
|
|
281
312
|
if (!codiceUtente) {
|
|
282
313
|
throw new Error('Creazione utente non riuscita: impossibile recuperare CODUTE.');
|
|
@@ -284,32 +315,12 @@ let UserService = class UserService {
|
|
|
284
315
|
const utentiConfigFields = ['CODUTE', 'COGNOME', 'NOME'];
|
|
285
316
|
const utentiConfigPlaceholders = ['?', '?', '?'];
|
|
286
317
|
const utentiConfigParams = [codiceUtente, registrationData.cognome, registrationData.nome];
|
|
287
|
-
// Mapping dei campi opzionali
|
|
288
|
-
// const optionalFields: [keyof typeof registrationData, string][] = [
|
|
289
|
-
// ['cellulare', 'CELLULARE'],
|
|
290
|
-
// ['flagSuper', 'FLGSUPER'],
|
|
291
|
-
// ['flagAdminConfigurator', 'FLGADMINCONFIG'],
|
|
292
|
-
// ['avatar', 'AVATAR'],
|
|
293
|
-
// ['flagDueFattori', 'FLG2FATT'],
|
|
294
|
-
// ['paginaDefault', 'PAGDEF'],
|
|
295
|
-
// ['ragSocCli', 'RAGSOCCLI'],
|
|
296
|
-
// ];
|
|
297
318
|
const optionalFields = [
|
|
298
319
|
{
|
|
299
320
|
key: 'cellulare',
|
|
300
321
|
dbField: 'CELLULARE',
|
|
301
322
|
transform: (v) => String(v),
|
|
302
323
|
},
|
|
303
|
-
{
|
|
304
|
-
key: 'flagSuper',
|
|
305
|
-
dbField: 'FLGSUPER',
|
|
306
|
-
transform: (v) => (v ? 1 : 0),
|
|
307
|
-
},
|
|
308
|
-
{
|
|
309
|
-
key: 'flagAdminConfigurator',
|
|
310
|
-
dbField: 'FLGADMINCONFIG',
|
|
311
|
-
transform: (v) => (v ? 1 : 0),
|
|
312
|
-
},
|
|
313
324
|
{
|
|
314
325
|
key: 'avatar',
|
|
315
326
|
dbField: 'AVATAR',
|
|
@@ -336,6 +347,17 @@ let UserService = class UserService {
|
|
|
336
347
|
transform: (v) => String(v),
|
|
337
348
|
},
|
|
338
349
|
];
|
|
350
|
+
if (allowPrivilegedFields) {
|
|
351
|
+
optionalFields.push({
|
|
352
|
+
key: 'flagSuper',
|
|
353
|
+
dbField: 'FLGSUPER',
|
|
354
|
+
transform: (v) => (v ? 1 : 0),
|
|
355
|
+
}, {
|
|
356
|
+
key: 'flagAdminConfigurator',
|
|
357
|
+
dbField: 'FLGADMINCONFIG',
|
|
358
|
+
transform: (v) => (v ? 1 : 0),
|
|
359
|
+
});
|
|
360
|
+
}
|
|
339
361
|
for (const field of optionalFields) {
|
|
340
362
|
const value = registrationData[field.key];
|
|
341
363
|
if (value !== undefined && value !== null) {
|
|
@@ -346,12 +368,13 @@ let UserService = class UserService {
|
|
|
346
368
|
}
|
|
347
369
|
const queryUtentiConfig = `INSERT INTO UTENTI_CONFIG (${utentiConfigFields.join(', ')}) VALUES (${utentiConfigPlaceholders.join(', ')})`;
|
|
348
370
|
yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtentiConfig, utentiConfigParams);
|
|
349
|
-
//await this.insertUserFilters(codiceUtente, registrationData);
|
|
350
371
|
yield this.filtriService.upsertFiltriUtente(codiceUtente, registrationData);
|
|
351
|
-
if (!!registrationData.roles && registrationData.roles.length > 0) {
|
|
372
|
+
if (allowPrivilegedFields && !!registrationData.roles && registrationData.roles.length > 0) {
|
|
352
373
|
yield this.permissionService.assignRolesToUser(codiceUtente, registrationData.roles);
|
|
353
374
|
}
|
|
354
|
-
if (
|
|
375
|
+
if (allowPrivilegedFields &&
|
|
376
|
+
!!registrationData.permissions &&
|
|
377
|
+
registrationData.permissions.length > 0) {
|
|
355
378
|
yield this.permissionService.assignPermissionsToUser(codiceUtente, registrationData.permissions);
|
|
356
379
|
}
|
|
357
380
|
return codiceUtente;
|
|
@@ -361,23 +384,33 @@ let UserService = class UserService {
|
|
|
361
384
|
}
|
|
362
385
|
});
|
|
363
386
|
}
|
|
364
|
-
updateUser(codiceUtente, user) {
|
|
387
|
+
updateUser(codiceUtente, user, options) {
|
|
365
388
|
return __awaiter(this, void 0, void 0, function* () {
|
|
366
389
|
try {
|
|
367
390
|
if (!codiceUtente)
|
|
368
391
|
throw new Error('Impossibile aggiornare senza codice utente.');
|
|
369
|
-
|
|
392
|
+
const allowPrivilegedChanges = (options === null || options === void 0 ? void 0 : options.allowPrivilegedChanges) === true;
|
|
393
|
+
if (!allowPrivilegedChanges &&
|
|
394
|
+
(user.statoRegistrazione !== undefined ||
|
|
395
|
+
user.flagSuper !== undefined ||
|
|
396
|
+
user.flagAdminConfigurator !== undefined ||
|
|
397
|
+
user.roles !== undefined ||
|
|
398
|
+
user.permissions !== undefined)) {
|
|
399
|
+
throw new Error('Non e consentito modificare campi privilegiati.');
|
|
400
|
+
}
|
|
370
401
|
const utentiUpdates = [];
|
|
371
402
|
const utentiParams = [];
|
|
372
403
|
if (user.email !== undefined) {
|
|
404
|
+
const normalizedEmail = this.normalizeEmail(user.email);
|
|
405
|
+
yield this.ensureEmailIsAvailable(normalizedEmail, codiceUtente);
|
|
373
406
|
utentiUpdates.push('usrname = ?');
|
|
374
|
-
utentiParams.push(
|
|
407
|
+
utentiParams.push(normalizedEmail);
|
|
375
408
|
}
|
|
376
409
|
if (user.flagGdpr !== undefined) {
|
|
377
410
|
utentiUpdates.push('flggdpr = ?');
|
|
378
411
|
utentiParams.push(user.flagGdpr);
|
|
379
412
|
}
|
|
380
|
-
if (user.statoRegistrazione !== undefined) {
|
|
413
|
+
if (allowPrivilegedChanges && user.statoRegistrazione !== undefined) {
|
|
381
414
|
utentiUpdates.push('stareg = ?');
|
|
382
415
|
utentiParams.push(user.statoRegistrazione);
|
|
383
416
|
}
|
|
@@ -386,7 +419,6 @@ let UserService = class UserService {
|
|
|
386
419
|
utentiParams.push(codiceUtente);
|
|
387
420
|
yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, utentiParams);
|
|
388
421
|
}
|
|
389
|
-
// Costruzione dinamica della query per UTENTI_CONFIG
|
|
390
422
|
const utentiConfigUpdates = [];
|
|
391
423
|
const utentiConfigParams = [];
|
|
392
424
|
if (user.cognome !== undefined) {
|
|
@@ -413,11 +445,11 @@ let UserService = class UserService {
|
|
|
413
445
|
utentiConfigUpdates.push('cellulare = ?');
|
|
414
446
|
utentiConfigParams.push(user.cellulare);
|
|
415
447
|
}
|
|
416
|
-
if (user.flagSuper !== undefined) {
|
|
448
|
+
if (allowPrivilegedChanges && user.flagSuper !== undefined) {
|
|
417
449
|
utentiConfigUpdates.push('flgsuper = ?');
|
|
418
450
|
utentiConfigParams.push(user.flagSuper);
|
|
419
451
|
}
|
|
420
|
-
if (user.flagAdminConfigurator !== undefined) {
|
|
452
|
+
if (allowPrivilegedChanges && user.flagAdminConfigurator !== undefined) {
|
|
421
453
|
utentiConfigUpdates.push('flgadminconfig = ?');
|
|
422
454
|
utentiConfigParams.push(user.flagAdminConfigurator);
|
|
423
455
|
}
|
|
@@ -438,13 +470,12 @@ let UserService = class UserService {
|
|
|
438
470
|
utentiConfigParams.push(codiceUtente);
|
|
439
471
|
yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtentiConfig, utentiConfigParams);
|
|
440
472
|
}
|
|
441
|
-
if (!!user.roles && user.roles.length > 0) {
|
|
473
|
+
if (allowPrivilegedChanges && !!user.roles && user.roles.length > 0) {
|
|
442
474
|
yield this.permissionService.assignRolesToUser(codiceUtente, user.roles);
|
|
443
475
|
}
|
|
444
|
-
if (!!user.permissions && user.permissions.length > 0) {
|
|
476
|
+
if (allowPrivilegedChanges && !!user.permissions && user.permissions.length > 0) {
|
|
445
477
|
yield this.permissionService.assignPermissionsToUser(codiceUtente, user.permissions);
|
|
446
478
|
}
|
|
447
|
-
//await this.updateUserFilters(codiceUtente, user);
|
|
448
479
|
yield this.filtriService.upsertFiltriUtente(codiceUtente, user);
|
|
449
480
|
}
|
|
450
481
|
catch (error) {
|
|
@@ -471,7 +502,6 @@ let UserService = class UserService {
|
|
|
471
502
|
const fieldsToUpdate = Object.entries(fieldMapping)
|
|
472
503
|
.filter(([tsField]) => {
|
|
473
504
|
const value = user[tsField];
|
|
474
|
-
// Includiamo il campo se è definito (anche se è una stringa vuota)
|
|
475
505
|
return value !== undefined && value !== null;
|
|
476
506
|
})
|
|
477
507
|
.map(([tsField, config]) => {
|
|
@@ -488,21 +518,18 @@ let UserService = class UserService {
|
|
|
488
518
|
return;
|
|
489
519
|
}
|
|
490
520
|
yield this.executeInTransaction(() => __awaiter(this, void 0, void 0, function* () {
|
|
491
|
-
// Prima verifichiamo se esiste il record
|
|
492
521
|
const checkQuery = `SELECT COUNT(*) as CNT FROM FILTRI WHERE CODUTE = ?`;
|
|
493
522
|
const existingRecord = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, checkQuery, [
|
|
494
523
|
codiceUtente,
|
|
495
524
|
]);
|
|
496
525
|
const exists = existingRecord[0].CNT > 0;
|
|
497
526
|
if (exists) {
|
|
498
|
-
// Se esiste, facciamo l'UPDATE
|
|
499
527
|
const updates = fieldsToUpdate.map((f) => `${f.dbField} = ?`).join(', ');
|
|
500
528
|
const values = [...fieldsToUpdate.map((f) => f.value), codiceUtente];
|
|
501
529
|
const updateQuery = `UPDATE FILTRI SET ${updates} WHERE CODUTE = ?`;
|
|
502
530
|
yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, updateQuery, values);
|
|
503
531
|
}
|
|
504
532
|
else {
|
|
505
|
-
// Se non esiste, facciamo l'INSERT
|
|
506
533
|
const dbFields = ['CODUTE', ...fieldsToUpdate.map((f) => f.dbField)];
|
|
507
534
|
const placeholders = dbFields.map(() => '?');
|
|
508
535
|
const insertValues = [codiceUtente, ...fieldsToUpdate.map((f) => f.value)];
|
|
@@ -547,10 +574,9 @@ let UserService = class UserService {
|
|
|
547
574
|
setGdpr(codiceUtente) {
|
|
548
575
|
return __awaiter(this, void 0, void 0, function* () {
|
|
549
576
|
try {
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
return result;
|
|
577
|
+
const query = ` UPDATE OR INSERT UTENTI_GDPR SET CODUTE = ?, GDPR = ? `;
|
|
578
|
+
const params = [codiceUtente, true];
|
|
579
|
+
return yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, query, params);
|
|
554
580
|
}
|
|
555
581
|
catch (error) {
|
|
556
582
|
throw error;
|