emilsoftware-utilities 2.0.0-dev.30 → 2.0.0-dev.32

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 (55) hide show
  1. package/dist/accessi-module/Console/console.js +26 -17
  2. package/dist/accessi-module/Console/console.js.map +1 -1
  3. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.d.ts +1 -1
  4. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.js.map +1 -1
  5. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.d.ts +3 -1
  6. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.js.map +1 -1
  7. package/dist/accessi-module/Console/generated/model/menuEntity.d.ts +2 -0
  8. package/dist/accessi-module/Console/generated/model/menuEntity.js.map +1 -1
  9. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.d.ts +0 -4
  10. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.js.map +1 -1
  11. package/dist/accessi-module/Console/generated/model/registerRequest.d.ts +2 -6
  12. package/dist/accessi-module/Console/generated/model/registerRequest.js.map +1 -1
  13. package/dist/accessi-module/Console/generated/model/userDto.d.ts +5 -7
  14. package/dist/accessi-module/Console/generated/model/userDto.js.map +1 -1
  15. package/dist/accessi-module/Console/wiki.js +2 -0
  16. package/dist/accessi-module/Console/wiki.js.map +1 -1
  17. package/dist/accessi-module/Controllers/ConfiguratorController.js +2 -2
  18. package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
  19. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.d.ts +1 -1
  20. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js +1 -1
  21. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js.map +1 -1
  22. package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.d.ts +1 -0
  23. package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js +9 -1
  24. package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
  25. package/dist/accessi-module/Dtos/GetMenusResponse.d.ts +1 -0
  26. package/dist/accessi-module/Dtos/GetMenusResponse.js +8 -0
  27. package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
  28. package/dist/accessi-module/Dtos/PublicRegisterRequest.d.ts +1 -1
  29. package/dist/accessi-module/Dtos/PublicRegisterRequest.js +1 -1
  30. package/dist/accessi-module/Dtos/PublicRegisterRequest.js.map +1 -1
  31. package/dist/accessi-module/Dtos/RegisterRequest.d.ts +1 -3
  32. package/dist/accessi-module/Dtos/RegisterRequest.js +2 -22
  33. package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
  34. package/dist/accessi-module/Dtos/UserDto.d.ts +3 -4
  35. package/dist/accessi-module/Dtos/UserDto.js +9 -19
  36. package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
  37. package/dist/accessi-module/Services/PermissionService/PermissionService.js +12 -9
  38. package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
  39. package/dist/accessi-module/Services/UserService/UserService.d.ts +1 -2
  40. package/dist/accessi-module/Services/UserService/UserService.js +26 -61
  41. package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
  42. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +16 -0
  43. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
  44. package/dist/accessi-module/database-updates/accessiSchema.d.ts +12 -1
  45. package/dist/accessi-module/database-updates/accessiSchema.js +24 -4
  46. package/dist/accessi-module/database-updates/accessiSchema.js.map +1 -1
  47. package/dist/accessi-module/security/accessControl.d.ts +2 -2
  48. package/dist/accessi-module/security/accessControl.js +2 -2
  49. package/dist/accessi-module/security/accessControl.js.map +1 -1
  50. package/dist/accessi-module/security/authenticatedToken.d.ts +1 -1
  51. package/dist/accessi-module/security/authenticatedToken.js +2 -2
  52. package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
  53. package/dist/emilsoftware-utilities-2.0.0-dev.32.tgz +0 -0
  54. package/package.json +1 -1
  55. package/dist/emilsoftware-utilities-2.0.0-dev.30.tgz +0 -0
@@ -1,18 +1,34 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.accessiGenerators = exports.accessiTriggers = exports.accessiChecks = exports.accessiIndexes = exports.accessiForeignKeys = exports.accessiTables = exports.ACCESSI_VERSION_KEY = exports.ACCESSI_SCHEMA_VERSION = void 0;
4
- exports.ACCESSI_SCHEMA_VERSION = '1.7.0';
3
+ exports.accessiGenerators = exports.accessiTriggers = exports.accessiChecks = exports.accessiIndexes = exports.accessiForeignKeys = exports.accessiTables = exports.accessiObsoleteColumns = exports.accessiRenamedColumns = exports.ACCESSI_VERSION_KEY = exports.ACCESSI_SCHEMA_VERSION = void 0;
4
+ exports.ACCESSI_SCHEMA_VERSION = '1.9.0';
5
5
  exports.ACCESSI_VERSION_KEY = 'AccessiVersion';
6
+ /**
7
+ * Colonne storiche/applicative non piu di dominio Accessi. La riconciliazione le copia (se
8
+ * previsto un rename) e poi le elimina, per evitare campi ibridi in UTENTI_CONFIG.
9
+ */
10
+ exports.accessiRenamedColumns = [
11
+ { table: 'UTENTI_CONFIG', from: 'FLGADMINCONFIG', to: 'FLGADMIN' },
12
+ ];
13
+ /** Colonne application-specific eliminate dallo schema Accessi: i backend devono gestirle altrove. */
14
+ exports.accessiObsoleteColumns = {
15
+ UTENTI_CONFIG: [
16
+ 'FLGMOP', 'FLGPIANA', 'FLGADDETTI', 'FLGOSPITI', 'FLGPIANARFID',
17
+ 'FLGCONTA', 'FLGCUBI', 'FLGCICLPASS', 'FLGDIPENDENTI', 'FLGINVENTARI',
18
+ 'CAUMOV', 'NUMMAC', 'RAGSOCCLI',
19
+ ],
20
+ };
6
21
  exports.accessiTables = {
7
22
  PARAMETRI: { columns: { CODPAR: 'VARCHAR(15) NOT NULL', DESPAR: 'VARCHAR(255)', NOTE: 'BLOB SUB_TYPE 1', GRUPPO: 'VARCHAR(20)' }, primaryKey: ['CODPAR'] },
8
23
  UTENTI: { columns: {
9
24
  CODUTE: 'INTEGER NOT NULL', USRNAME: 'VARCHAR(100)', FLGGDPR: 'SMALLINT DEFAULT 0', DATGDPR: 'DATE',
10
25
  DATINS: 'DATE', DATSCAPWD: 'DATE', DATLASTLOGIN: 'DATE', STAREG: 'SMALLINT DEFAULT 0', KEYREG: 'VARCHAR(100)',
26
+ ENABLEIA: 'SMALLINT DEFAULT 0',
11
27
  }, primaryKey: ['CODUTE'] },
12
28
  UTENTI_CONFIG: { columns: {
13
29
  CODUTE: 'INTEGER NOT NULL', COGNOME: 'VARCHAR(50)', NOME: 'VARCHAR(50)', AVATAR: 'VARCHAR(30)',
14
30
  FLG2FATT: 'SMALLINT DEFAULT 0', FLGPWDLESS: 'SMALLINT DEFAULT 0 NOT NULL', FLGPASSWORD: 'SMALLINT DEFAULT 1 NOT NULL',
15
- CODLINGUA: "VARCHAR(2) DEFAULT 'IT'", FLGSUPER: 'SMALLINT DEFAULT 0', FLGADMINCONFIG: 'SMALLINT DEFAULT 0',
31
+ CODLINGUA: "VARCHAR(2) DEFAULT 'IT'", FLGSUPER: 'SMALLINT DEFAULT 0', FLGADMIN: 'SMALLINT DEFAULT 0',
16
32
  CELLULARE: 'VARCHAR(15)', PAGDEF: 'VARCHAR(50)', JSON_METADATA: 'BLOB SUB_TYPE 1',
17
33
  }, primaryKey: ['CODUTE'] },
18
34
  UTENTI_PWD: { columns: { CODUTE: 'INTEGER NOT NULL', PWD: 'VARCHAR(255)' }, primaryKey: ['CODUTE'] },
@@ -29,7 +45,11 @@ exports.accessiTables = {
29
45
  RUOLI_MNU: { columns: { CODRUO: 'INTEGER NOT NULL', CODMNU: 'VARCHAR(20) NOT NULL', TIPABI: 'SMALLINT' }, primaryKey: ['CODRUO', 'CODMNU'] },
30
46
  UTENTI_RUOLI: { columns: { CODUTE: 'INTEGER NOT NULL', CODRUO: 'INTEGER NOT NULL' }, primaryKey: ['CODUTE', 'CODRUO'] },
31
47
  FILTRI_TIPO: { columns: { TIPFIL: 'SMALLINT NOT NULL', DESFIL: 'VARCHAR(20)', FLDFIL: 'VARCHAR(20)', FLGENABLED: 'SMALLINT DEFAULT 1 NOT NULL' }, primaryKey: ['TIPFIL'] },
32
- FILTRI: { columns: { CODUTE: 'INTEGER NOT NULL', PROG: 'INTEGER NOT NULL', TIPFIL: 'SMALLINT' }, primaryKey: ['CODUTE', 'PROG'] },
48
+ FILTRI: { columns: {
49
+ CODUTE: 'INTEGER NOT NULL', PROG: 'INTEGER NOT NULL', TIPFIL: 'SMALLINT',
50
+ NUMREP: 'INTEGER', IDXPERS: 'INTEGER', CODCLISUPER: 'INTEGER', CODAGE: 'INTEGER',
51
+ CODCLICOL: 'INTEGER', CODCLIENTI: 'VARCHAR(2000)', CODDIP: 'INTEGER', IDXPOS: 'INTEGER', CODVET: 'INTEGER',
52
+ }, primaryKey: ['CODUTE', 'PROG'] },
33
53
  SSO_PROVIDER: { columns: {
34
54
  PROVIDER: 'VARCHAR(64) CHARACTER SET ASCII NOT NULL', DESCRIZIONE: 'VARCHAR(160) CHARACTER SET UTF8 NOT NULL',
35
55
  FLGATTIVO: 'SMALLINT DEFAULT 1 NOT NULL', DATINS: 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL', NOTA: 'VARCHAR(500) CHARACTER SET UTF8',
@@ -1 +1 @@
1
- {"version":3,"file":"accessiSchema.js","sourceRoot":"","sources":["../../../src/accessi-module/database-updates/accessiSchema.ts"],"names":[],"mappings":"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","sourcesContent":["/** Minimum schema owned by Accessi. Application columns and catalog rows are deliberately absent. */\nexport interface SchemaTable {\n columns: Record<string, string>;\n primaryKey: string[];\n}\n\nexport const ACCESSI_SCHEMA_VERSION = '1.7.0';\nexport const ACCESSI_VERSION_KEY = 'AccessiVersion';\n\nexport const accessiTables: Record<string, SchemaTable> = {\n PARAMETRI: { columns: { CODPAR: 'VARCHAR(15) NOT NULL', DESPAR: 'VARCHAR(255)', NOTE: 'BLOB SUB_TYPE 1', GRUPPO: 'VARCHAR(20)' }, primaryKey: ['CODPAR'] },\n UTENTI: { columns: {\n CODUTE: 'INTEGER NOT NULL', USRNAME: 'VARCHAR(100)', FLGGDPR: 'SMALLINT DEFAULT 0', DATGDPR: 'DATE',\n DATINS: 'DATE', DATSCAPWD: 'DATE', DATLASTLOGIN: 'DATE', STAREG: 'SMALLINT DEFAULT 0', KEYREG: 'VARCHAR(100)',\n }, primaryKey: ['CODUTE'] },\n UTENTI_CONFIG: { columns: {\n CODUTE: 'INTEGER NOT NULL', COGNOME: 'VARCHAR(50)', NOME: 'VARCHAR(50)', AVATAR: 'VARCHAR(30)',\n FLG2FATT: 'SMALLINT DEFAULT 0', FLGPWDLESS: 'SMALLINT DEFAULT 0 NOT NULL', FLGPASSWORD: 'SMALLINT DEFAULT 1 NOT NULL',\n CODLINGUA: \"VARCHAR(2) DEFAULT 'IT'\", FLGSUPER: 'SMALLINT DEFAULT 0', FLGADMINCONFIG: 'SMALLINT DEFAULT 0',\n CELLULARE: 'VARCHAR(15)', PAGDEF: 'VARCHAR(50)', JSON_METADATA: 'BLOB SUB_TYPE 1',\n }, primaryKey: ['CODUTE'] },\n UTENTI_PWD: { columns: { CODUTE: 'INTEGER NOT NULL', PWD: 'VARCHAR(255)' }, primaryKey: ['CODUTE'] },\n UTENTI_OLDPWD: { columns: { CODUTE: 'INTEGER NOT NULL', OLDPWD: 'VARCHAR(255)' }, primaryKey: ['CODUTE'] },\n UTENTI_GDPR: { columns: { CODUTE: 'INTEGER NOT NULL', DATACC: 'DATE NOT NULL', GDPR: 'VARCHAR(2000)' }, primaryKey: ['CODUTE', 'DATACC'] },\n RUOLI: { columns: { CODRUO: 'INTEGER NOT NULL', DESRUO: 'VARCHAR(30)' }, primaryKey: ['CODRUO'] },\n MENU_GRP: { columns: { CODGRP: 'VARCHAR(1) NOT NULL', DESGRP: 'VARCHAR(100)', FLGENABLED: 'SMALLINT DEFAULT 0', ORDINE: 'SMALLINT DEFAULT 0', NOMECAMPO: 'VARCHAR(20)' }, primaryKey: ['CODGRP'] },\n MENU_TIPI: { columns: { CODTIP: 'VARCHAR(1) NOT NULL', DESTIP: 'VARCHAR(20)' }, primaryKey: ['CODTIP'] },\n MENU: { columns: {\n CODMNU: 'VARCHAR(20) NOT NULL', DESMNU: 'VARCHAR(100)', CODGRP: 'VARCHAR(1) NOT NULL', FLGENABLED: 'INTEGER DEFAULT 0',\n ICON: 'VARCHAR(50)', ORDINE: 'SMALLINT', CODTIP: 'VARCHAR(1)', PAGINA: 'VARCHAR(50)', RIFMENU: 'VARCHAR(20)', NOTE: 'VARCHAR(1000)',\n }, primaryKey: ['CODMNU'] },\n ABILITAZIONI: { columns: { CODUTE: 'INTEGER NOT NULL', CODMNU: 'VARCHAR(20) NOT NULL', TIPABI: 'SMALLINT DEFAULT 0' }, primaryKey: ['CODUTE', 'CODMNU'] },\n RUOLI_MNU: { columns: { CODRUO: 'INTEGER NOT NULL', CODMNU: 'VARCHAR(20) NOT NULL', TIPABI: 'SMALLINT' }, primaryKey: ['CODRUO', 'CODMNU'] },\n UTENTI_RUOLI: { columns: { CODUTE: 'INTEGER NOT NULL', CODRUO: 'INTEGER NOT NULL' }, primaryKey: ['CODUTE', 'CODRUO'] },\n FILTRI_TIPO: { columns: { TIPFIL: 'SMALLINT NOT NULL', DESFIL: 'VARCHAR(20)', FLDFIL: 'VARCHAR(20)', FLGENABLED: 'SMALLINT DEFAULT 1 NOT NULL' }, primaryKey: ['TIPFIL'] },\n FILTRI: { columns: { CODUTE: 'INTEGER NOT NULL', PROG: 'INTEGER NOT NULL', TIPFIL: 'SMALLINT' }, primaryKey: ['CODUTE', 'PROG'] },\n SSO_PROVIDER: { columns: {\n PROVIDER: 'VARCHAR(64) CHARACTER SET ASCII NOT NULL', DESCRIZIONE: 'VARCHAR(160) CHARACTER SET UTF8 NOT NULL',\n FLGATTIVO: 'SMALLINT DEFAULT 1 NOT NULL', DATINS: 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL', NOTA: 'VARCHAR(500) CHARACTER SET UTF8',\n }, primaryKey: ['PROVIDER'] },\n UTENTI_IDENTITA_EXT: { columns: {\n IDNKEY: 'CHAR(64) CHARACTER SET ASCII NOT NULL', CODUTE: 'INTEGER NOT NULL', PROVIDER: 'VARCHAR(64) CHARACTER SET ASCII NOT NULL',\n SUBJECT: 'VARCHAR(512) CHARACTER SET UTF8 NOT NULL', FLGATTIVO: 'SMALLINT DEFAULT 1 NOT NULL',\n DATINS: 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL', DATLASTLOGIN: 'TIMESTAMP', DATDISATT: 'TIMESTAMP', NOTA: 'VARCHAR(500) CHARACTER SET UTF8',\n }, primaryKey: ['IDNKEY'] },\n ACCESSI_2FA: { columns: {\n CHALLENGE_ID: 'VARCHAR(64) CHARACTER SET ASCII NOT NULL', CODUTE: 'INTEGER NOT NULL', EMAIL: 'VARCHAR(254) CHARACTER SET UTF8 NOT NULL',\n AUTHMODE: 'VARCHAR(12) CHARACTER SET ASCII NOT NULL', IDNKEY: 'VARCHAR(64) CHARACTER SET ASCII', CODEHASH: 'VARCHAR(64) CHARACTER SET ASCII NOT NULL',\n CREATED_AT: 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL', EXPIRES_AT: 'TIMESTAMP NOT NULL', SENT_AT: 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL',\n ATTEMPTS: 'SMALLINT DEFAULT 0 NOT NULL', SENDS: 'SMALLINT DEFAULT 1 NOT NULL',\n }, primaryKey: ['CHALLENGE_ID'] },\n // Token di servizio (macchina-a-macchina). Il segreto non e mai salvato in chiaro: TOKEN_HASH\n // contiene lo SHA-256 del segreto, confrontato a tempo costante in fase di verifica.\n ACCESSI_SERVICE_TOKEN: { columns: {\n TOKEN_ID: 'VARCHAR(40) CHARACTER SET ASCII NOT NULL', TOKEN_HASH: 'VARCHAR(64) CHARACTER SET ASCII NOT NULL',\n LABEL: 'VARCHAR(100) CHARACTER SET UTF8', SCOPES: 'VARCHAR(500) CHARACTER SET ASCII', CREATED_BY: 'INTEGER',\n CREATED_AT: 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL', EXPIRES_AT: 'TIMESTAMP', LAST_USED_AT: 'TIMESTAMP', LAST_USED_IP: 'VARCHAR(45)',\n REVOKED_AT: 'TIMESTAMP', REVOKED_BY: 'INTEGER',\n }, primaryKey: ['TOKEN_ID'] },\n};\n\nexport const accessiForeignKeys = [\n { name: 'FK_ABILITAZIONI_1', table: 'ABILITAZIONI', column: 'CODMNU', target: 'MENU', targetColumn: 'CODMNU' },\n { name: 'FK_MENU_1', table: 'MENU', column: 'CODGRP', target: 'MENU_GRP', targetColumn: 'CODGRP' },\n { name: 'FK_MENU_2', table: 'MENU', column: 'CODTIP', target: 'MENU_TIPI', targetColumn: 'CODTIP' },\n { name: 'FK_RUOLI', table: 'UTENTI_RUOLI', column: 'CODRUO', target: 'RUOLI', targetColumn: 'CODRUO', cascade: true },\n { name: 'FK_UTENTI', table: 'UTENTI_RUOLI', column: 'CODUTE', target: 'UTENTI', targetColumn: 'CODUTE', cascade: true },\n { name: 'FK_UTEIDEXT_UTENTE', table: 'UTENTI_IDENTITA_EXT', column: 'CODUTE', target: 'UTENTI', targetColumn: 'CODUTE', cascade: true },\n { name: 'FK_UTEIDEXT_PROVIDER', table: 'UTENTI_IDENTITA_EXT', column: 'PROVIDER', target: 'SSO_PROVIDER', targetColumn: 'PROVIDER' },\n { name: 'FK_ACCESSI_2FA_USER', table: 'ACCESSI_2FA', column: 'CODUTE', target: 'UTENTI', targetColumn: 'CODUTE', cascade: true },\n];\n\nexport const accessiIndexes = [\n { name: 'IDX_UTEIDEXT_CODUTE', table: 'UTENTI_IDENTITA_EXT', columns: ['CODUTE'] },\n { name: 'IDX_UTEIDEXT_PROVIDER', table: 'UTENTI_IDENTITA_EXT', columns: ['PROVIDER'] },\n { name: 'IDX_ACCESSI_2FA_USER', table: 'ACCESSI_2FA', columns: ['CODUTE', 'CREATED_AT'] },\n { name: 'IDX_ACCESSI_2FA_EXP', table: 'ACCESSI_2FA', columns: ['EXPIRES_AT'] },\n];\n\nexport const accessiChecks = [\n { name: 'CK_SSO_PROVIDER_ATTIVO', table: 'SSO_PROVIDER', expression: 'FLGATTIVO IN (0, 1)' },\n { name: 'CK_UTEIDEXT_ATTIVO', table: 'UTENTI_IDENTITA_EXT', expression: 'FLGATTIVO IN (0, 1)' },\n];\n\nexport const accessiTriggers = [\n { name: 'UTENTI_BI', table: 'UTENTI', type: 1, event: 'BEFORE INSERT', body: 'AS BEGIN IF (NEW.CODUTE IS NULL) THEN NEW.CODUTE = GEN_ID(GEN_UTENTI_ID, 1); NEW.DATINS = CURRENT_TIMESTAMP; END' },\n { name: 'RUOLI_BI', table: 'RUOLI', type: 1, event: 'BEFORE INSERT', body: 'AS BEGIN IF (NEW.CODRUO IS NULL) THEN NEW.CODRUO = GEN_ID(GEN_RUOLI_ID, 1); END' },\n { name: 'FILTRI_BI0', table: 'FILTRI', type: 1, event: 'BEFORE INSERT', body: 'AS DECLARE VARIABLE TOT INTEGER; BEGIN IF (NEW.PROG IS NULL) THEN BEGIN SELECT COALESCE(MAX(PROG), 0) FROM FILTRI WHERE CODUTE = NEW.CODUTE INTO :TOT; NEW.PROG = TOT + 1; END END' },\n { name: 'UTENTI_GDPR_BI0', table: 'UTENTI_GDPR', type: 1, event: 'BEFORE INSERT', body: 'AS BEGIN NEW.DATACC = CURRENT_TIMESTAMP; UPDATE UTENTI SET FLGGDPR = 1, DATGDPR = CURRENT_TIMESTAMP WHERE CODUTE = NEW.CODUTE; END' },\n];\n\nexport const accessiGenerators = [\n { name: 'GEN_UTENTI_ID', table: 'UTENTI', column: 'CODUTE' },\n { name: 'GEN_RUOLI_ID', table: 'RUOLI', column: 'CODRUO' },\n];\n"]}
1
+ {"version":3,"file":"accessiSchema.js","sourceRoot":"","sources":["../../../src/accessi-module/database-updates/accessiSchema.ts"],"names":[],"mappings":"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","sourcesContent":["/** Minimum schema owned by Accessi. Application columns and catalog rows are deliberately absent. */\nexport interface SchemaTable {\n columns: Record<string, string>;\n primaryKey: string[];\n}\n\nexport const ACCESSI_SCHEMA_VERSION = '1.9.0';\nexport const ACCESSI_VERSION_KEY = 'AccessiVersion';\n\n/**\n * Colonne storiche/applicative non piu di dominio Accessi. La riconciliazione le copia (se\n * previsto un rename) e poi le elimina, per evitare campi ibridi in UTENTI_CONFIG.\n */\nexport const accessiRenamedColumns: ReadonlyArray<{ table: string; from: string; to: string }> = [\n { table: 'UTENTI_CONFIG', from: 'FLGADMINCONFIG', to: 'FLGADMIN' },\n];\n\n/** Colonne application-specific eliminate dallo schema Accessi: i backend devono gestirle altrove. */\nexport const accessiObsoleteColumns: Record<string, readonly string[]> = {\n UTENTI_CONFIG: [\n 'FLGMOP', 'FLGPIANA', 'FLGADDETTI', 'FLGOSPITI', 'FLGPIANARFID',\n 'FLGCONTA', 'FLGCUBI', 'FLGCICLPASS', 'FLGDIPENDENTI', 'FLGINVENTARI',\n 'CAUMOV', 'NUMMAC', 'RAGSOCCLI',\n ],\n};\n\nexport const accessiTables: Record<string, SchemaTable> = {\n PARAMETRI: { columns: { CODPAR: 'VARCHAR(15) NOT NULL', DESPAR: 'VARCHAR(255)', NOTE: 'BLOB SUB_TYPE 1', GRUPPO: 'VARCHAR(20)' }, primaryKey: ['CODPAR'] },\n UTENTI: { columns: {\n CODUTE: 'INTEGER NOT NULL', USRNAME: 'VARCHAR(100)', FLGGDPR: 'SMALLINT DEFAULT 0', DATGDPR: 'DATE',\n DATINS: 'DATE', DATSCAPWD: 'DATE', DATLASTLOGIN: 'DATE', STAREG: 'SMALLINT DEFAULT 0', KEYREG: 'VARCHAR(100)',\n ENABLEIA: 'SMALLINT DEFAULT 0',\n }, primaryKey: ['CODUTE'] },\n UTENTI_CONFIG: { columns: {\n CODUTE: 'INTEGER NOT NULL', COGNOME: 'VARCHAR(50)', NOME: 'VARCHAR(50)', AVATAR: 'VARCHAR(30)',\n FLG2FATT: 'SMALLINT DEFAULT 0', FLGPWDLESS: 'SMALLINT DEFAULT 0 NOT NULL', FLGPASSWORD: 'SMALLINT DEFAULT 1 NOT NULL',\n CODLINGUA: \"VARCHAR(2) DEFAULT 'IT'\", FLGSUPER: 'SMALLINT DEFAULT 0', FLGADMIN: 'SMALLINT DEFAULT 0',\n CELLULARE: 'VARCHAR(15)', PAGDEF: 'VARCHAR(50)', JSON_METADATA: 'BLOB SUB_TYPE 1',\n }, primaryKey: ['CODUTE'] },\n UTENTI_PWD: { columns: { CODUTE: 'INTEGER NOT NULL', PWD: 'VARCHAR(255)' }, primaryKey: ['CODUTE'] },\n UTENTI_OLDPWD: { columns: { CODUTE: 'INTEGER NOT NULL', OLDPWD: 'VARCHAR(255)' }, primaryKey: ['CODUTE'] },\n UTENTI_GDPR: { columns: { CODUTE: 'INTEGER NOT NULL', DATACC: 'DATE NOT NULL', GDPR: 'VARCHAR(2000)' }, primaryKey: ['CODUTE', 'DATACC'] },\n RUOLI: { columns: { CODRUO: 'INTEGER NOT NULL', DESRUO: 'VARCHAR(30)' }, primaryKey: ['CODRUO'] },\n MENU_GRP: { columns: { CODGRP: 'VARCHAR(1) NOT NULL', DESGRP: 'VARCHAR(100)', FLGENABLED: 'SMALLINT DEFAULT 0', ORDINE: 'SMALLINT DEFAULT 0', NOMECAMPO: 'VARCHAR(20)' }, primaryKey: ['CODGRP'] },\n MENU_TIPI: { columns: { CODTIP: 'VARCHAR(1) NOT NULL', DESTIP: 'VARCHAR(20)' }, primaryKey: ['CODTIP'] },\n MENU: { columns: {\n CODMNU: 'VARCHAR(20) NOT NULL', DESMNU: 'VARCHAR(100)', CODGRP: 'VARCHAR(1) NOT NULL', FLGENABLED: 'INTEGER DEFAULT 0',\n ICON: 'VARCHAR(50)', ORDINE: 'SMALLINT', CODTIP: 'VARCHAR(1)', PAGINA: 'VARCHAR(50)', RIFMENU: 'VARCHAR(20)', NOTE: 'VARCHAR(1000)',\n }, primaryKey: ['CODMNU'] },\n ABILITAZIONI: { columns: { CODUTE: 'INTEGER NOT NULL', CODMNU: 'VARCHAR(20) NOT NULL', TIPABI: 'SMALLINT DEFAULT 0' }, primaryKey: ['CODUTE', 'CODMNU'] },\n RUOLI_MNU: { columns: { CODRUO: 'INTEGER NOT NULL', CODMNU: 'VARCHAR(20) NOT NULL', TIPABI: 'SMALLINT' }, primaryKey: ['CODRUO', 'CODMNU'] },\n UTENTI_RUOLI: { columns: { CODUTE: 'INTEGER NOT NULL', CODRUO: 'INTEGER NOT NULL' }, primaryKey: ['CODUTE', 'CODRUO'] },\n FILTRI_TIPO: { columns: { TIPFIL: 'SMALLINT NOT NULL', DESFIL: 'VARCHAR(20)', FLDFIL: 'VARCHAR(20)', FLGENABLED: 'SMALLINT DEFAULT 1 NOT NULL' }, primaryKey: ['TIPFIL'] },\n FILTRI: { columns: {\n CODUTE: 'INTEGER NOT NULL', PROG: 'INTEGER NOT NULL', TIPFIL: 'SMALLINT',\n NUMREP: 'INTEGER', IDXPERS: 'INTEGER', CODCLISUPER: 'INTEGER', CODAGE: 'INTEGER',\n CODCLICOL: 'INTEGER', CODCLIENTI: 'VARCHAR(2000)', CODDIP: 'INTEGER', IDXPOS: 'INTEGER', CODVET: 'INTEGER',\n }, primaryKey: ['CODUTE', 'PROG'] },\n SSO_PROVIDER: { columns: {\n PROVIDER: 'VARCHAR(64) CHARACTER SET ASCII NOT NULL', DESCRIZIONE: 'VARCHAR(160) CHARACTER SET UTF8 NOT NULL',\n FLGATTIVO: 'SMALLINT DEFAULT 1 NOT NULL', DATINS: 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL', NOTA: 'VARCHAR(500) CHARACTER SET UTF8',\n }, primaryKey: ['PROVIDER'] },\n UTENTI_IDENTITA_EXT: { columns: {\n IDNKEY: 'CHAR(64) CHARACTER SET ASCII NOT NULL', CODUTE: 'INTEGER NOT NULL', PROVIDER: 'VARCHAR(64) CHARACTER SET ASCII NOT NULL',\n SUBJECT: 'VARCHAR(512) CHARACTER SET UTF8 NOT NULL', FLGATTIVO: 'SMALLINT DEFAULT 1 NOT NULL',\n DATINS: 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL', DATLASTLOGIN: 'TIMESTAMP', DATDISATT: 'TIMESTAMP', NOTA: 'VARCHAR(500) CHARACTER SET UTF8',\n }, primaryKey: ['IDNKEY'] },\n ACCESSI_2FA: { columns: {\n CHALLENGE_ID: 'VARCHAR(64) CHARACTER SET ASCII NOT NULL', CODUTE: 'INTEGER NOT NULL', EMAIL: 'VARCHAR(254) CHARACTER SET UTF8 NOT NULL',\n AUTHMODE: 'VARCHAR(12) CHARACTER SET ASCII NOT NULL', IDNKEY: 'VARCHAR(64) CHARACTER SET ASCII', CODEHASH: 'VARCHAR(64) CHARACTER SET ASCII NOT NULL',\n CREATED_AT: 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL', EXPIRES_AT: 'TIMESTAMP NOT NULL', SENT_AT: 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL',\n ATTEMPTS: 'SMALLINT DEFAULT 0 NOT NULL', SENDS: 'SMALLINT DEFAULT 1 NOT NULL',\n }, primaryKey: ['CHALLENGE_ID'] },\n // Token di servizio (macchina-a-macchina). Il segreto non e mai salvato in chiaro: TOKEN_HASH\n // contiene lo SHA-256 del segreto, confrontato a tempo costante in fase di verifica.\n ACCESSI_SERVICE_TOKEN: { columns: {\n TOKEN_ID: 'VARCHAR(40) CHARACTER SET ASCII NOT NULL', TOKEN_HASH: 'VARCHAR(64) CHARACTER SET ASCII NOT NULL',\n LABEL: 'VARCHAR(100) CHARACTER SET UTF8', SCOPES: 'VARCHAR(500) CHARACTER SET ASCII', CREATED_BY: 'INTEGER',\n CREATED_AT: 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL', EXPIRES_AT: 'TIMESTAMP', LAST_USED_AT: 'TIMESTAMP', LAST_USED_IP: 'VARCHAR(45)',\n REVOKED_AT: 'TIMESTAMP', REVOKED_BY: 'INTEGER',\n }, primaryKey: ['TOKEN_ID'] },\n};\n\nexport const accessiForeignKeys = [\n { name: 'FK_ABILITAZIONI_1', table: 'ABILITAZIONI', column: 'CODMNU', target: 'MENU', targetColumn: 'CODMNU' },\n { name: 'FK_MENU_1', table: 'MENU', column: 'CODGRP', target: 'MENU_GRP', targetColumn: 'CODGRP' },\n { name: 'FK_MENU_2', table: 'MENU', column: 'CODTIP', target: 'MENU_TIPI', targetColumn: 'CODTIP' },\n { name: 'FK_RUOLI', table: 'UTENTI_RUOLI', column: 'CODRUO', target: 'RUOLI', targetColumn: 'CODRUO', cascade: true },\n { name: 'FK_UTENTI', table: 'UTENTI_RUOLI', column: 'CODUTE', target: 'UTENTI', targetColumn: 'CODUTE', cascade: true },\n { name: 'FK_UTEIDEXT_UTENTE', table: 'UTENTI_IDENTITA_EXT', column: 'CODUTE', target: 'UTENTI', targetColumn: 'CODUTE', cascade: true },\n { name: 'FK_UTEIDEXT_PROVIDER', table: 'UTENTI_IDENTITA_EXT', column: 'PROVIDER', target: 'SSO_PROVIDER', targetColumn: 'PROVIDER' },\n { name: 'FK_ACCESSI_2FA_USER', table: 'ACCESSI_2FA', column: 'CODUTE', target: 'UTENTI', targetColumn: 'CODUTE', cascade: true },\n];\n\nexport const accessiIndexes = [\n { name: 'IDX_UTEIDEXT_CODUTE', table: 'UTENTI_IDENTITA_EXT', columns: ['CODUTE'] },\n { name: 'IDX_UTEIDEXT_PROVIDER', table: 'UTENTI_IDENTITA_EXT', columns: ['PROVIDER'] },\n { name: 'IDX_ACCESSI_2FA_USER', table: 'ACCESSI_2FA', columns: ['CODUTE', 'CREATED_AT'] },\n { name: 'IDX_ACCESSI_2FA_EXP', table: 'ACCESSI_2FA', columns: ['EXPIRES_AT'] },\n];\n\nexport const accessiChecks = [\n { name: 'CK_SSO_PROVIDER_ATTIVO', table: 'SSO_PROVIDER', expression: 'FLGATTIVO IN (0, 1)' },\n { name: 'CK_UTEIDEXT_ATTIVO', table: 'UTENTI_IDENTITA_EXT', expression: 'FLGATTIVO IN (0, 1)' },\n];\n\nexport const accessiTriggers = [\n { name: 'UTENTI_BI', table: 'UTENTI', type: 1, event: 'BEFORE INSERT', body: 'AS BEGIN IF (NEW.CODUTE IS NULL) THEN NEW.CODUTE = GEN_ID(GEN_UTENTI_ID, 1); NEW.DATINS = CURRENT_TIMESTAMP; END' },\n { name: 'RUOLI_BI', table: 'RUOLI', type: 1, event: 'BEFORE INSERT', body: 'AS BEGIN IF (NEW.CODRUO IS NULL) THEN NEW.CODRUO = GEN_ID(GEN_RUOLI_ID, 1); END' },\n { name: 'FILTRI_BI0', table: 'FILTRI', type: 1, event: 'BEFORE INSERT', body: 'AS DECLARE VARIABLE TOT INTEGER; BEGIN IF (NEW.PROG IS NULL) THEN BEGIN SELECT COALESCE(MAX(PROG), 0) FROM FILTRI WHERE CODUTE = NEW.CODUTE INTO :TOT; NEW.PROG = TOT + 1; END END' },\n { name: 'UTENTI_GDPR_BI0', table: 'UTENTI_GDPR', type: 1, event: 'BEFORE INSERT', body: 'AS BEGIN NEW.DATACC = CURRENT_TIMESTAMP; UPDATE UTENTI SET FLGGDPR = 1, DATGDPR = CURRENT_TIMESTAMP WHERE CODUTE = NEW.CODUTE; END' },\n];\n\nexport const accessiGenerators = [\n { name: 'GEN_UTENTI_ID', table: 'UTENTI', column: 'CODUTE' },\n { name: 'GEN_RUOLI_ID', table: 'RUOLI', column: 'CODRUO' },\n];\n"]}
@@ -4,7 +4,7 @@ export interface AuthenticatedAccessiUser {
4
4
  codiceUtente: number;
5
5
  email?: string;
6
6
  flagSuper: boolean;
7
- flagAdminConfigurator: boolean;
7
+ flagAdmin: boolean;
8
8
  }
9
9
  /**
10
10
  * Estrae l'utente gia verificato da `authorizeAccessi` o `JwtSimpleGuard`.
@@ -19,7 +19,7 @@ export declare function ensureSelfOrSuperUser(user: AuthenticatedAccessiUser, ta
19
19
  export declare function hasPrivilegedUserChanges(user: {
20
20
  statoRegistrazione?: unknown;
21
21
  flagSuper?: unknown;
22
- flagAdminConfigurator?: unknown;
22
+ flagAdmin?: unknown;
23
23
  passwordLoginEnabled?: unknown;
24
24
  passwordlessLoginEnabled?: unknown;
25
25
  flagDueFattori?: unknown;
@@ -29,7 +29,7 @@ function getAuthenticatedAccessiUser(req) {
29
29
  codiceUtente,
30
30
  email: typeof (utente === null || utente === void 0 ? void 0 : utente.email) === 'string' ? utente.email : undefined,
31
31
  flagSuper: normalizeBooleanFlag(utente === null || utente === void 0 ? void 0 : utente.flagSuper),
32
- flagAdminConfigurator: normalizeBooleanFlag(utente === null || utente === void 0 ? void 0 : utente.flagAdminConfigurator),
32
+ flagAdmin: normalizeBooleanFlag(utente === null || utente === void 0 ? void 0 : utente.flagAdmin),
33
33
  };
34
34
  }
35
35
  /** Impone il flag superutente, necessario per configurazione globale, utenti e catalogo SSO. */
@@ -49,7 +49,7 @@ function ensureSelfOrSuperUser(user, targetUserCode, message = 'Operazione non a
49
49
  function hasPrivilegedUserChanges(user) {
50
50
  return (user.statoRegistrazione !== undefined ||
51
51
  user.flagSuper !== undefined ||
52
- user.flagAdminConfigurator !== undefined ||
52
+ user.flagAdmin !== undefined ||
53
53
  user.passwordLoginEnabled !== undefined ||
54
54
  user.passwordlessLoginEnabled !== undefined ||
55
55
  user.flagDueFattori !== undefined ||
@@ -1 +1 @@
1
- {"version":3,"file":"accessControl.js","sourceRoot":"","sources":["../../../src/accessi-module/security/accessControl.ts"],"names":[],"mappings":";;AAmBA,kEAoBC;AAGD,0CAOC;AAGD,sDAUC;AAGD,4DAoBC;AArFD,2CAA2E;AAW3E,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,SAAgB,2BAA2B,CAAC,GAAY;;IACtD,MAAM,OAAO,GAAI,GAAoC,CAAC,IAAI,CAAC;IAC3D,MAAM,aAAa,GAAG,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAkC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9G,MAAM,QAAQ,GAAG,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,QAAQ,KAAI,OAAO,aAAa,CAAC,QAAQ,KAAK,QAAQ;QACpF,CAAC,CAAC,aAAa,CAAC,QAAmC;QACnD,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,OAAO,GAAG,MAAA,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,mCAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,mCAAI,aAAa,CAAC;IAC3E,MAAM,MAAM,GAAG,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAkC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvG,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,CAAC,CAAC;IAElD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,8BAAqB,CAAC,yBAAyB,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,YAAY;QACZ,KAAK,EAAE,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAA,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QACnE,SAAS,EAAE,oBAAoB,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAC;QAClD,qBAAqB,EAAE,oBAAoB,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,qBAAqB,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,SAAgB,eAAe,CAC7B,IAA8B,EAC9B,OAAO,GAAG,2CAA2C;IAErD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,2BAAkB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,SAAgB,qBAAqB,CACnC,IAA8B,EAC9B,cAAsB,EACtB,OAAO,GAAG,8CAA8C;IAExD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,cAAc,EAAE,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,MAAM,IAAI,2BAAkB,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,4FAA4F;AAC5F,SAAgB,wBAAwB,CAAC,IASxC;IACC,OAAO,CACL,IAAI,CAAC,kBAAkB,KAAK,SAAS;QACrC,IAAI,CAAC,SAAS,KAAK,SAAS;QAC5B,IAAI,CAAC,qBAAqB,KAAK,SAAS;QACxC,IAAI,CAAC,oBAAoB,KAAK,SAAS;QACvC,IAAI,CAAC,wBAAwB,KAAK,SAAS;QAC3C,IAAI,CAAC,cAAc,KAAK,SAAS;QACjC,IAAI,CAAC,KAAK,KAAK,SAAS;QACxB,IAAI,CAAC,WAAW,KAAK,SAAS,CAC/B,CAAC;AACJ,CAAC","sourcesContent":["import { ForbiddenException, UnauthorizedException } from '@nestjs/common';\nimport { Request } from 'express';\n\n/** Profilo autorizzativo normalizzato estratto dal middleware Accessi. */\nexport interface AuthenticatedAccessiUser {\n codiceUtente: number;\n email?: string;\n flagSuper: boolean;\n flagAdminConfigurator: boolean;\n}\n\nfunction normalizeBooleanFlag(value: unknown): boolean {\n return value === true || value === 1 || value === '1';\n}\n\n/**\n * Estrae l'utente gia verificato da `authorizeAccessi` o `JwtSimpleGuard`.\n * Non usare questa funzione come autenticazione: se il middleware non e stato applicato genera 401.\n */\nexport function getAuthenticatedAccessiUser(req: Request): AuthenticatedAccessiUser {\n const payload = (req as Request & { user?: unknown }).user;\n const payloadRecord = payload && typeof payload === 'object' ? payload as Record<string, unknown> : undefined;\n const userData = payloadRecord?.userData && typeof payloadRecord.userData === 'object'\n ? payloadRecord.userData as Record<string, unknown>\n : undefined;\n const rawUser = payloadRecord?.utente ?? userData?.utente ?? payloadRecord;\n const utente = rawUser && typeof rawUser === 'object' ? rawUser as Record<string, unknown> : undefined;\n const codiceUtente = Number(utente?.codiceUtente);\n\n if (!Number.isSafeInteger(codiceUtente) || codiceUtente <= 0) {\n throw new UnauthorizedException('Utente non autenticato.');\n }\n\n return {\n codiceUtente,\n email: typeof utente?.email === 'string' ? utente.email : undefined,\n flagSuper: normalizeBooleanFlag(utente?.flagSuper),\n flagAdminConfigurator: normalizeBooleanFlag(utente?.flagAdminConfigurator),\n };\n}\n\n/** Impone il flag superutente, necessario per configurazione globale, utenti e catalogo SSO. */\nexport function ensureSuperUser(\n user: AuthenticatedAccessiUser,\n message = 'Operazione riservata agli amministratori.',\n): void {\n if (!user.flagSuper) {\n throw new ForbiddenException(message);\n }\n}\n\n/** Permette l'operazione al proprietario della risorsa o a un superutente. */\nexport function ensureSelfOrSuperUser(\n user: AuthenticatedAccessiUser,\n targetUserCode: number,\n message = 'Operazione non autorizzata su questo utente.',\n): void {\n if (user.flagSuper || user.codiceUtente === targetUserCode) {\n return;\n }\n\n throw new ForbiddenException(message);\n}\n\n/** Riconosce i campi che non possono essere aggiornati da un utente sul proprio profilo. */\nexport function hasPrivilegedUserChanges(user: {\n statoRegistrazione?: unknown;\n flagSuper?: unknown;\n flagAdminConfigurator?: unknown;\n passwordLoginEnabled?: unknown;\n passwordlessLoginEnabled?: unknown;\n flagDueFattori?: unknown;\n roles?: unknown;\n permissions?: unknown;\n}): boolean {\n return (\n user.statoRegistrazione !== undefined ||\n user.flagSuper !== undefined ||\n user.flagAdminConfigurator !== undefined ||\n user.passwordLoginEnabled !== undefined ||\n user.passwordlessLoginEnabled !== undefined ||\n user.flagDueFattori !== undefined ||\n user.roles !== undefined ||\n user.permissions !== undefined\n );\n}\n"]}
1
+ {"version":3,"file":"accessControl.js","sourceRoot":"","sources":["../../../src/accessi-module/security/accessControl.ts"],"names":[],"mappings":";;AAmBA,kEAoBC;AAGD,0CAOC;AAGD,sDAUC;AAGD,4DAoBC;AArFD,2CAA2E;AAW3E,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,SAAgB,2BAA2B,CAAC,GAAY;;IACtD,MAAM,OAAO,GAAI,GAAoC,CAAC,IAAI,CAAC;IAC3D,MAAM,aAAa,GAAG,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAkC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9G,MAAM,QAAQ,GAAG,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,QAAQ,KAAI,OAAO,aAAa,CAAC,QAAQ,KAAK,QAAQ;QACpF,CAAC,CAAC,aAAa,CAAC,QAAmC;QACnD,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,OAAO,GAAG,MAAA,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,mCAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,mCAAI,aAAa,CAAC;IAC3E,MAAM,MAAM,GAAG,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAkC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvG,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,CAAC,CAAC;IAElD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,8BAAqB,CAAC,yBAAyB,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,YAAY;QACZ,KAAK,EAAE,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAA,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QACnE,SAAS,EAAE,oBAAoB,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAC;QAClD,SAAS,EAAE,oBAAoB,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,SAAgB,eAAe,CAC7B,IAA8B,EAC9B,OAAO,GAAG,2CAA2C;IAErD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,2BAAkB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,SAAgB,qBAAqB,CACnC,IAA8B,EAC9B,cAAsB,EACtB,OAAO,GAAG,8CAA8C;IAExD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,cAAc,EAAE,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,MAAM,IAAI,2BAAkB,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,4FAA4F;AAC5F,SAAgB,wBAAwB,CAAC,IASxC;IACC,OAAO,CACL,IAAI,CAAC,kBAAkB,KAAK,SAAS;QACrC,IAAI,CAAC,SAAS,KAAK,SAAS;QAC5B,IAAI,CAAC,SAAS,KAAK,SAAS;QAC5B,IAAI,CAAC,oBAAoB,KAAK,SAAS;QACvC,IAAI,CAAC,wBAAwB,KAAK,SAAS;QAC3C,IAAI,CAAC,cAAc,KAAK,SAAS;QACjC,IAAI,CAAC,KAAK,KAAK,SAAS;QACxB,IAAI,CAAC,WAAW,KAAK,SAAS,CAC/B,CAAC;AACJ,CAAC","sourcesContent":["import { ForbiddenException, UnauthorizedException } from '@nestjs/common';\nimport { Request } from 'express';\n\n/** Profilo autorizzativo normalizzato estratto dal middleware Accessi. */\nexport interface AuthenticatedAccessiUser {\n codiceUtente: number;\n email?: string;\n flagSuper: boolean;\n flagAdmin: boolean;\n}\n\nfunction normalizeBooleanFlag(value: unknown): boolean {\n return value === true || value === 1 || value === '1';\n}\n\n/**\n * Estrae l'utente gia verificato da `authorizeAccessi` o `JwtSimpleGuard`.\n * Non usare questa funzione come autenticazione: se il middleware non e stato applicato genera 401.\n */\nexport function getAuthenticatedAccessiUser(req: Request): AuthenticatedAccessiUser {\n const payload = (req as Request & { user?: unknown }).user;\n const payloadRecord = payload && typeof payload === 'object' ? payload as Record<string, unknown> : undefined;\n const userData = payloadRecord?.userData && typeof payloadRecord.userData === 'object'\n ? payloadRecord.userData as Record<string, unknown>\n : undefined;\n const rawUser = payloadRecord?.utente ?? userData?.utente ?? payloadRecord;\n const utente = rawUser && typeof rawUser === 'object' ? rawUser as Record<string, unknown> : undefined;\n const codiceUtente = Number(utente?.codiceUtente);\n\n if (!Number.isSafeInteger(codiceUtente) || codiceUtente <= 0) {\n throw new UnauthorizedException('Utente non autenticato.');\n }\n\n return {\n codiceUtente,\n email: typeof utente?.email === 'string' ? utente.email : undefined,\n flagSuper: normalizeBooleanFlag(utente?.flagSuper),\n flagAdmin: normalizeBooleanFlag(utente?.flagAdmin),\n };\n}\n\n/** Impone il flag superutente, necessario per configurazione globale, utenti e catalogo SSO. */\nexport function ensureSuperUser(\n user: AuthenticatedAccessiUser,\n message = 'Operazione riservata agli amministratori.',\n): void {\n if (!user.flagSuper) {\n throw new ForbiddenException(message);\n }\n}\n\n/** Permette l'operazione al proprietario della risorsa o a un superutente. */\nexport function ensureSelfOrSuperUser(\n user: AuthenticatedAccessiUser,\n targetUserCode: number,\n message = 'Operazione non autorizzata su questo utente.',\n): void {\n if (user.flagSuper || user.codiceUtente === targetUserCode) {\n return;\n }\n\n throw new ForbiddenException(message);\n}\n\n/** Riconosce i campi che non possono essere aggiornati da un utente sul proprio profilo. */\nexport function hasPrivilegedUserChanges(user: {\n statoRegistrazione?: unknown;\n flagSuper?: unknown;\n flagAdmin?: unknown;\n passwordLoginEnabled?: unknown;\n passwordlessLoginEnabled?: unknown;\n flagDueFattori?: unknown;\n roles?: unknown;\n permissions?: unknown;\n}): boolean {\n return (\n user.statoRegistrazione !== undefined ||\n user.flagSuper !== undefined ||\n user.flagAdmin !== undefined ||\n user.passwordLoginEnabled !== undefined ||\n user.passwordlessLoginEnabled !== undefined ||\n user.flagDueFattori !== undefined ||\n user.roles !== undefined ||\n user.permissions !== undefined\n );\n}\n"]}
@@ -5,7 +5,7 @@ export interface AccessiAuthenticatedUserSnapshot {
5
5
  email?: string;
6
6
  statoRegistrazione: StatoRegistrazione;
7
7
  flagSuper: boolean;
8
- flagAdminConfigurator: boolean;
8
+ flagAdmin: boolean;
9
9
  flagDueFattori?: boolean;
10
10
  passwordlessLoginEnabled?: boolean;
11
11
  passwordLoginEnabled?: boolean;
@@ -45,8 +45,8 @@ function resolveCodiceUtenteFromTokenPayload(decoded) {
45
45
  function buildAuthenticatedTokenPayload(decoded, utente) {
46
46
  const basePayload = isRecord(decoded) ? Object.assign({}, decoded) : {};
47
47
  const userData = isRecord(basePayload.userData) ? Object.assign({}, basePayload.userData) : {};
48
- const normalizedUser = Object.assign(Object.assign({}, utente), { flagSuper: normalizeBooleanFlag(utente.flagSuper), flagAdminConfigurator: normalizeBooleanFlag(utente.flagAdminConfigurator), flagDueFattori: normalizeBooleanFlag(utente.flagDueFattori), passwordlessLoginEnabled: normalizeBooleanFlag(utente.passwordlessLoginEnabled) });
49
- return Object.assign(Object.assign({}, basePayload), { codiceUtente: normalizedUser.codiceUtente, email: normalizedUser.email, statoRegistrazione: normalizedUser.statoRegistrazione, flagSuper: normalizedUser.flagSuper, flagAdminConfigurator: normalizedUser.flagAdminConfigurator, flagDueFattori: normalizedUser.flagDueFattori, passwordlessLoginEnabled: normalizedUser.passwordlessLoginEnabled, passwordLoginEnabled: normalizedUser.passwordLoginEnabled, utente: normalizedUser, userData: Object.assign(Object.assign({}, userData), { utente: normalizedUser }), tokenPayload: decoded });
48
+ const normalizedUser = Object.assign(Object.assign({}, utente), { flagSuper: normalizeBooleanFlag(utente.flagSuper), flagAdmin: normalizeBooleanFlag(utente.flagAdmin), flagDueFattori: normalizeBooleanFlag(utente.flagDueFattori), passwordlessLoginEnabled: normalizeBooleanFlag(utente.passwordlessLoginEnabled) });
49
+ return Object.assign(Object.assign({}, basePayload), { codiceUtente: normalizedUser.codiceUtente, email: normalizedUser.email, statoRegistrazione: normalizedUser.statoRegistrazione, flagSuper: normalizedUser.flagSuper, flagAdmin: normalizedUser.flagAdmin, flagDueFattori: normalizedUser.flagDueFattori, passwordlessLoginEnabled: normalizedUser.passwordlessLoginEnabled, passwordLoginEnabled: normalizedUser.passwordLoginEnabled, utente: normalizedUser, userData: Object.assign(Object.assign({}, userData), { utente: normalizedUser }), tokenPayload: decoded });
50
50
  }
51
51
  /** Enabling 2FA invalidates sessions which have not completed the required verification. */
52
52
  function isAccessiTokenAllowedForUser(decoded, user) {
@@ -1 +1 @@
1
- {"version":3,"file":"authenticatedToken.js","sourceRoot":"","sources":["../../../src/accessi-module/security/authenticatedToken.ts"],"names":[],"mappings":"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","sourcesContent":["import { StatoRegistrazione } from '../Dtos/StatoRegistrazione';\n\n/** Stato autorevole minimo riletto dal database per ogni verifica JWT. */\nexport interface AccessiAuthenticatedUserSnapshot {\n codiceUtente: number;\n email?: string;\n statoRegistrazione: StatoRegistrazione;\n flagSuper: boolean;\n flagAdminConfigurator: boolean;\n flagDueFattori?: boolean;\n passwordlessLoginEnabled?: boolean;\n passwordLoginEnabled?: boolean;\n}\n\nfunction normalizeBooleanFlag(value: unknown): boolean {\n return value === true || value === 1 || value === '1';\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\n/** Shared, strict Bearer parsing for the Nest guard and Express middleware. */\nexport function extractAccessiBearerToken(header: unknown): string | undefined {\n if (typeof header !== 'string') return undefined;\n return /^Bearer[ \\t]+([^\\s]+)$/i.exec(header.trim())?.[1];\n}\n\n/** Estrae il codice utente sia dai JWT Accessi moderni sia dai payload legacy compatibili. */\nexport function resolveCodiceUtenteFromTokenPayload(decoded: unknown): number | undefined {\n // `typ` obbligatorio: un token senza tipo non e un access token Accessi.\n if (!isRecord(decoded) || decoded.typ !== 'access') {\n return undefined;\n }\n\n const userData = isRecord(decoded.userData) ? decoded.userData : undefined;\n const utente = isRecord(decoded.utente)\n ? decoded.utente\n : isRecord(userData?.utente)\n ? userData.utente\n : undefined;\n\n const codiceUtente = Number(utente?.codiceUtente ?? decoded.codiceUtente);\n if (!Number.isSafeInteger(codiceUtente) || codiceUtente <= 0) {\n return undefined;\n }\n\n return codiceUtente;\n}\n\n/**\n * Mantiene le claim estranee al modulo ma sovrascrive il profilo con valori correnti e autorevoli dal database.\n * `tokenPayload` conserva il payload verificato originale per audit o integrazioni che ne abbiano necessita.\n */\nexport function buildAuthenticatedTokenPayload(\n decoded: unknown,\n utente: AccessiAuthenticatedUserSnapshot,\n): Record<string, unknown> {\n const basePayload = isRecord(decoded) ? { ...decoded } : {};\n const userData = isRecord(basePayload.userData) ? { ...basePayload.userData } : {};\n\n const normalizedUser = {\n ...utente,\n flagSuper: normalizeBooleanFlag(utente.flagSuper),\n flagAdminConfigurator: normalizeBooleanFlag(utente.flagAdminConfigurator),\n flagDueFattori: normalizeBooleanFlag(utente.flagDueFattori),\n passwordlessLoginEnabled: normalizeBooleanFlag(utente.passwordlessLoginEnabled),\n };\n\n return {\n ...basePayload,\n codiceUtente: normalizedUser.codiceUtente,\n email: normalizedUser.email,\n statoRegistrazione: normalizedUser.statoRegistrazione,\n flagSuper: normalizedUser.flagSuper,\n flagAdminConfigurator: normalizedUser.flagAdminConfigurator,\n flagDueFattori: normalizedUser.flagDueFattori,\n passwordlessLoginEnabled: normalizedUser.passwordlessLoginEnabled,\n passwordLoginEnabled: normalizedUser.passwordLoginEnabled,\n utente: normalizedUser,\n userData: {\n ...userData,\n utente: normalizedUser,\n },\n tokenPayload: decoded,\n };\n}\n\n/** Enabling 2FA invalidates sessions which have not completed the required verification. */\nexport function isAccessiTokenAllowedForUser(decoded: unknown, user: AccessiAuthenticatedUserSnapshot): boolean {\n if (!isRecord(decoded)) return false;\n const methods = Array.isArray(decoded.amr) ? decoded.amr : [];\n if (user.flagDueFattori && !methods.includes('otp')) return false;\n if (methods.includes('passwordless') && (!user.flagDueFattori || !user.passwordlessLoginEnabled)) return false;\n return true;\n}\n\n/** Un JWT puo essere usato soltanto da utenti nello stato confermato, indipendentemente dalla sua scadenza. */\nexport function isAuthenticatedUserEnabledForJwt(\n utente: AccessiAuthenticatedUserSnapshot | null | undefined,\n): utente is AccessiAuthenticatedUserSnapshot {\n return utente?.statoRegistrazione === StatoRegistrazione.CONF;\n}\n"]}
1
+ {"version":3,"file":"authenticatedToken.js","sourceRoot":"","sources":["../../../src/accessi-module/security/authenticatedToken.ts"],"names":[],"mappings":"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","sourcesContent":["import { StatoRegistrazione } from '../Dtos/StatoRegistrazione';\n\n/** Stato autorevole minimo riletto dal database per ogni verifica JWT. */\nexport interface AccessiAuthenticatedUserSnapshot {\n codiceUtente: number;\n email?: string;\n statoRegistrazione: StatoRegistrazione;\n flagSuper: boolean;\n flagAdmin: boolean;\n flagDueFattori?: boolean;\n passwordlessLoginEnabled?: boolean;\n passwordLoginEnabled?: boolean;\n}\n\nfunction normalizeBooleanFlag(value: unknown): boolean {\n return value === true || value === 1 || value === '1';\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\n/** Shared, strict Bearer parsing for the Nest guard and Express middleware. */\nexport function extractAccessiBearerToken(header: unknown): string | undefined {\n if (typeof header !== 'string') return undefined;\n return /^Bearer[ \\t]+([^\\s]+)$/i.exec(header.trim())?.[1];\n}\n\n/** Estrae il codice utente sia dai JWT Accessi moderni sia dai payload legacy compatibili. */\nexport function resolveCodiceUtenteFromTokenPayload(decoded: unknown): number | undefined {\n // `typ` obbligatorio: un token senza tipo non e un access token Accessi.\n if (!isRecord(decoded) || decoded.typ !== 'access') {\n return undefined;\n }\n\n const userData = isRecord(decoded.userData) ? decoded.userData : undefined;\n const utente = isRecord(decoded.utente)\n ? decoded.utente\n : isRecord(userData?.utente)\n ? userData.utente\n : undefined;\n\n const codiceUtente = Number(utente?.codiceUtente ?? decoded.codiceUtente);\n if (!Number.isSafeInteger(codiceUtente) || codiceUtente <= 0) {\n return undefined;\n }\n\n return codiceUtente;\n}\n\n/**\n * Mantiene le claim estranee al modulo ma sovrascrive il profilo con valori correnti e autorevoli dal database.\n * `tokenPayload` conserva il payload verificato originale per audit o integrazioni che ne abbiano necessita.\n */\nexport function buildAuthenticatedTokenPayload(\n decoded: unknown,\n utente: AccessiAuthenticatedUserSnapshot,\n): Record<string, unknown> {\n const basePayload = isRecord(decoded) ? { ...decoded } : {};\n const userData = isRecord(basePayload.userData) ? { ...basePayload.userData } : {};\n\n const normalizedUser = {\n ...utente,\n flagSuper: normalizeBooleanFlag(utente.flagSuper),\n flagAdmin: normalizeBooleanFlag(utente.flagAdmin),\n flagDueFattori: normalizeBooleanFlag(utente.flagDueFattori),\n passwordlessLoginEnabled: normalizeBooleanFlag(utente.passwordlessLoginEnabled),\n };\n\n return {\n ...basePayload,\n codiceUtente: normalizedUser.codiceUtente,\n email: normalizedUser.email,\n statoRegistrazione: normalizedUser.statoRegistrazione,\n flagSuper: normalizedUser.flagSuper,\n flagAdmin: normalizedUser.flagAdmin,\n flagDueFattori: normalizedUser.flagDueFattori,\n passwordlessLoginEnabled: normalizedUser.passwordlessLoginEnabled,\n passwordLoginEnabled: normalizedUser.passwordLoginEnabled,\n utente: normalizedUser,\n userData: {\n ...userData,\n utente: normalizedUser,\n },\n tokenPayload: decoded,\n };\n}\n\n/** Enabling 2FA invalidates sessions which have not completed the required verification. */\nexport function isAccessiTokenAllowedForUser(decoded: unknown, user: AccessiAuthenticatedUserSnapshot): boolean {\n if (!isRecord(decoded)) return false;\n const methods = Array.isArray(decoded.amr) ? decoded.amr : [];\n if (user.flagDueFattori && !methods.includes('otp')) return false;\n if (methods.includes('passwordless') && (!user.flagDueFattori || !user.passwordlessLoginEnabled)) return false;\n return true;\n}\n\n/** Un JWT puo essere usato soltanto da utenti nello stato confermato, indipendentemente dalla sua scadenza. */\nexport function isAuthenticatedUserEnabledForJwt(\n utente: AccessiAuthenticatedUserSnapshot | null | undefined,\n): utente is AccessiAuthenticatedUserSnapshot {\n return utente?.statoRegistrazione === StatoRegistrazione.CONF;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "emilsoftware-utilities",
3
- "version": "2.0.0-dev.30",
3
+ "version": "2.0.0-dev.32",
4
4
  "description": "Utilities for EmilSoftware",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",