emilsoftware-utilities 2.0.0-dev.6 → 2.0.0-dev.8
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/DatabaseUpdater.d.ts +1 -1
- package/dist/DatabaseUpdater.js.map +1 -1
- package/dist/Orm.d.ts +1 -7
- package/dist/Orm.js +43 -131
- package/dist/Orm.js.map +1 -1
- package/dist/Utilities.js +1 -1
- package/dist/Utilities.js.map +1 -1
- package/dist/accessi-module/AccessiModule.d.ts +1 -1
- package/dist/accessi-module/AccessiModule.js.map +1 -1
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.d.ts +1 -0
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +35 -0
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
- package/dist/accessi-module/index.d.ts +1 -0
- package/dist/accessi-module/index.js.map +1 -1
- package/dist/allegati-module/AllegatiModule.d.ts +1 -1
- package/dist/allegati-module/AllegatiModule.js.map +1 -1
- package/dist/firebird-compat.d.ts +13 -6
- package/dist/firebird-compat.js +149 -140
- package/dist/firebird-compat.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/Utilities.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Utilities.js","sourceRoot":"","sources":["../src/Utilities.ts"],"names":[],"mappings":"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","sourcesContent":["import { Response } from 'express';\r\nimport { Options } from \"es-node-firebird\";\nimport { FirebirdOptions } from \"./firebird-compat\";\nimport crypto from \"crypto\";\r\n\r\n\r\nexport enum StatusCode {\r\n Ok = 0,\r\n Warning = 1,\r\n Error = 2,\r\n}\r\n\r\nexport class DateUtilities {\r\n /**\r\n * Pads a number with leading zeros to reach a specified length.\r\n * @param num - The number to pad.\r\n * @param totalLength - The total length of the resulting string.\r\n * @returns The padded string.\r\n */\r\n static addStartingZeros(num: number, totalLength: number): string {\r\n return String(num).padStart(totalLength, '0');\r\n }\r\n\r\n /**\r\n * Formats a Date object as a Moncler-style string.\r\n * @param dData - The date to format.\r\n * @param bAddMs - Whether to include milliseconds.\r\n * @returns The formatted date string.\r\n */\r\n static dateToMoncler(dData: Date, bAddMs: boolean = false): string {\r\n const yy = dData.getFullYear();\r\n const mm = this.addStartingZeros(dData.getMonth() + 1, 2);\r\n const dd = this.addStartingZeros(dData.getDate(), 2);\r\n const hh = this.addStartingZeros(dData.getHours(), 2);\r\n const nn = this.addStartingZeros(dData.getMinutes(), 2);\r\n const ss = this.addStartingZeros(dData.getSeconds(), 2);\r\n const ms = this.addStartingZeros(dData.getMilliseconds(), 3);\r\n return bAddMs ? `${yy}${mm}${dd}${hh}${nn}${ss}${ms}` : `${yy}${mm}${dd}${hh}${nn}${ss}`;\r\n }\r\n\r\n /**\r\n * Formats a Date object as a SQL-style string.\r\n * @param dData - The date to format.\r\n * @param bAddMs - Whether to include milliseconds.\r\n * @returns The formatted date string.\r\n */\r\n static dateToSql(dData: Date, bAddMs: boolean = false): string {\r\n const yy = dData.getFullYear();\r\n const mm = this.addStartingZeros(dData.getMonth() + 1, 2);\r\n const dd = this.addStartingZeros(dData.getDate(), 2);\r\n const hh = this.addStartingZeros(dData.getHours(), 2);\r\n const nn = this.addStartingZeros(dData.getMinutes(), 2);\r\n const ss = this.addStartingZeros(dData.getSeconds(), 2);\r\n const ms = this.addStartingZeros(dData.getMilliseconds(), 3);\r\n return bAddMs\r\n ? `${yy}-${mm}-${dd} ${hh}:${nn}:${ss}.${ms}`\r\n : `${yy}-${mm}-${dd} ${hh}:${nn}:${ss}`;\r\n }\r\n\r\n /**\r\n * Formats a Date object as a simple string (dd-MM-yyyy).\r\n * @param dData - The date to format.\r\n * @returns The formatted date string.\r\n */\r\n static dateToSimple(dData: Date): string {\r\n const yy = dData.getFullYear();\r\n const mm = this.addStartingZeros(dData.getMonth() + 1, 2);\r\n const dd = this.addStartingZeros(dData.getDate(), 2);\r\n return `${dd}-${mm}-${yy}`;\r\n }\r\n\r\n /**\r\n * Gets the current date and time as a formatted string.\r\n * @returns The current date and time in the format dd.MM.yyyy HH:mm:ss.\r\n */\r\n static getNowDateString(): string {\r\n const now: Date = new Date();\r\n const day = now.getDate().toString().padStart(2, \"0\");\r\n const month = (now.getMonth() + 1).toString().padStart(2, \"0\");\r\n const year = now.getFullYear();\r\n const hours = now.getHours().toString().padStart(2, \"0\");\r\n const minutes = now.getMinutes().toString().padStart(2, \"0\");\r\n const seconds = now.getSeconds().toString().padStart(2, \"0\");\r\n return `${day}.${month}.${year} ${hours}:${minutes}:${seconds}`;\r\n }\r\n\r\n /**\r\n * Parses a date string in the format dd/MM/yyyy into a Date object.\r\n * @param date - The date string to parse.\r\n * @returns A Date object.\r\n */\r\n static parseDate(date: string): Date {\r\n const parts: string[] = date.split(\"/\");\r\n return new Date(Number(parts[2]), Number(parts[1]) - 1, Number(parts[0]));\r\n }\r\n}\r\n\r\n\r\nexport class RestUtilities {\r\n /**\r\n * Sends an OK message as a response.\r\n * @param res - Express Response object.\r\n * @param message - The success message.\r\n * @returns The Response object.\r\n */\r\n static sendOKMessage(res: Response, message: string): Response {\r\n return res.send({\r\n severity: \"success\",\r\n status: 200,\r\n statusCode: StatusCode.Ok,\r\n message,\r\n });\r\n }\r\n\r\n /**\r\n * Sends an error message as a response.\r\n * @param res - Express Response object.\r\n * @param error - The error to send.\r\n * @param tag - Optional tag for additional context.\r\n * @param status - HTTP status code (default: 500).\r\n * @returns The Response object.\r\n */\r\n static sendErrorMessage(res: Response, error: any, tag: string = \"[BASE ERROR]\", status: number = 500): Response {\r\n return res.status(status).send({\r\n severity: \"error\",\r\n status,\r\n statusCode: StatusCode.Error,\r\n message: \"An error occurred\",\r\n error: `${tag}: ${error}`,\r\n });\r\n }\r\n\r\n\r\n static sendUnauthorized(res: Response): Response {\r\n return res.status(401).send({\r\n severity: \"error\",\r\n statusCode: StatusCode.Error,\r\n message: \"Non sei autorizzato\",\r\n });\r\n }\r\n\r\n static sendInvalidCredentials(res: Response): Response {\r\n return res.status(401).send({\r\n severity: \"error\",\r\n statusCode: StatusCode.Error,\r\n message: \"Credenziali non valide\"\r\n });\r\n }\r\n\r\n static sendPasswordExpired(res: Response): Response {\r\n return res.status(403).send({\r\n severity: \"warning\",\r\n statusCode: StatusCode.Warning,\r\n code: \"PASSWORD_EXPIRED\",\r\n message: \"Password scaduta. E' necessario aggiornarla\"\r\n })\r\n }\r\n\r\n /**\r\n * Sends a base response with a payload.\r\n * @param res - Express Response object.\r\n * @param payload - The payload to include in the response.\r\n * @returns The Response object.\r\n */\r\n static sendBaseResponse(res: Response, payload: any): Response {\r\n try {\r\n payload = JSON.parse(JSON.stringify(payload));\r\n const response = {\r\n Status: {\r\n errorCode: \"0\",\r\n errorDescription: \"\",\r\n },\r\n Result: payload,\r\n Message: \"Dati recuperati con successo.\",\r\n };\r\n return res.send(response);\r\n } catch (error) {\r\n return this.sendErrorMessage(res, `Error sending response: ${error}`, \"[UTILITIES]\", 500);\r\n }\r\n }\r\n\r\n /**\r\n * Sends an execution message as a response.\r\n * @param res - Express Response object.\r\n * @param executionObject - The execution data.\r\n * @param title - The title of the response.\r\n * @returns The Response object.\r\n */\r\n static sendExecMessage(res: Response, executionObject: any, title: string): Response {\r\n try {\r\n const response = {\r\n Status: {\r\n errorCode: \"0\",\r\n errorDescription: \"\",\r\n },\r\n Sql: \"\",\r\n ID: executionObject?.id,\r\n data: executionObject,\r\n Title: title,\r\n };\r\n return res.send(response);\r\n } catch (error) {\r\n return this.sendErrorMessage(res, `Error sending execution message: ${error}`, title, 500);\r\n }\r\n }\r\n\r\n /**\r\n * Prints a SQL query with parameters replaced.\r\n * @param query - The SQL query.\r\n * @param params - The parameters to replace.\r\n * @returns The formatted query.\r\n */\r\n static printQueryWithParams(query: string = \"\", params: any[]): string {\r\n try {\r\n params.forEach(param => {\r\n query = query.replace(\"?\", param);\r\n });\r\n return query;\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n\r\n public static convertKeysToCamelCase(obj: any): any {\r\n if (obj !== null && obj.constructor === Object) {\r\n return Object.keys(obj).reduce((acc: any, key: string) => {\r\n const camelCaseKey = key.toLowerCase().replace(/_([a-z])/g, g => g[1].toUpperCase());\r\n acc[camelCaseKey] = obj[key];\r\n return acc;\r\n }, {});\r\n }\r\n return obj;\r\n }\r\n}\r\n\r\n\r\nexport class CryptUtilities {\r\n\r\n /**\r\n * Cifra un testo in chiaro usando l'algoritmo AES-128 in modalità ECB.\r\n * \r\n * @param plainText - Il testo in chiaro da cifrare.\r\n * @param key - La chiave di cifratura (16 byte per AES-128).\r\n * @param outputEncoding - Codifica del risultato cifrato (predefinito: \"base64\").\r\n * @returns Il testo cifrato codificato.\r\n * @throws Errore in caso di problemi durante la cifratura.\r\n */\r\n public static encrypt(plainData: string, key: string, outputEncoding: BufferEncoding = \"base64\"): string {\r\n try {\r\n // Crea un oggetto Cipher usando AES-128 in modalità ECB\r\n const cipher = crypto.createCipheriv(\"aes-128-ecb\", Buffer.from(key, \"utf8\"), null);\r\n\r\n // Cifra il testo in chiaro e finalizza il processo\r\n const encryptedBuffer = Buffer.concat([\r\n cipher.update(plainData, \"utf8\"),\r\n cipher.final(),\r\n ]);\r\n\r\n // Restituisce il risultato cifrato codificato\r\n return encryptedBuffer.toString(outputEncoding);\r\n } catch (error) {\r\n // Gestisce eventuali errori di cifratura\r\n throw new Error(`Errore durante la cifratura: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * Decifra un testo cifrato usando l'algoritmo AES-128 in modalità ECB.\r\n * \r\n * @param encryptedData - Il testo cifrato da decifrare.\r\n * @param key - La chiave di decifratura (16 byte per AES-128).\r\n * @returns Il testo decifrato o null in caso di errore.\r\n */\r\n public static decrypt(encryptedData: string, key: string): string | null {\r\n try {\r\n // Crea un oggetto Decipher usando AES-128 in modalità ECB\r\n const decipher = crypto.createDecipheriv(\"aes-128-ecb\", Buffer.from(key, \"utf8\"), null);\r\n decipher.setAutoPadding(false);\r\n\r\n // Decifra il testo cifrato\r\n let decoded = decipher.update(encryptedData, \"base64\", \"utf8\");\r\n decoded += decipher.final(\"utf8\");\r\n\r\n // Rimuove il padding manuale\r\n const lastChar = decoded.charCodeAt(decoded.length - 1);\r\n decoded = decoded.slice(0, decoded.length - lastChar);\r\n\r\n return decoded;\r\n } catch (error) {\r\n console.error(\"Errore durante la decifratura:\", error);\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nexport class PasswordUtilities {\r\n private static readonly HASH_PREFIX = \"scrypt\";\r\n private static readonly LEGACY_HASH_PREFIX = \"scrypt-legacy\";\r\n private static readonly SCRYPT_N = 16384;\r\n private static readonly SCRYPT_R = 8;\r\n private static readonly SCRYPT_P = 1;\r\n private static readonly SALT_LENGTH = 16;\r\n\r\n private static hashSecret(secretValue: string, prefix: string): string {\r\n if (typeof secretValue !== \"string\" || secretValue.length === 0) {\r\n throw new Error(\"Il valore da proteggere non puo essere vuoto.\");\r\n }\r\n const salt = crypto.randomBytes(this.SALT_LENGTH).toString(\"hex\");\r\n const derivedKey = crypto.scryptSync(\r\n secretValue,\r\n salt,\r\n 64,\r\n {\r\n N: this.SCRYPT_N,\r\n r: this.SCRYPT_R,\r\n p: this.SCRYPT_P,\r\n maxmem: 64 * 1024 * 1024,\r\n },\r\n );\r\n\r\n return [\r\n prefix,\r\n this.SCRYPT_N,\r\n this.SCRYPT_R,\r\n this.SCRYPT_P,\r\n salt,\r\n derivedKey.toString(\"hex\"),\r\n ].join(\"$\");\r\n }\r\n\r\n private static hasPrefix(value: string, prefix: string): boolean {\r\n return typeof value === \"string\" && value.startsWith(`${prefix}$`);\r\n }\r\n\r\n private static parseHash(\r\n storedPassword: string,\r\n expectedPrefix: string\r\n ): {\r\n salt: string;\r\n expectedHash: Buffer;\r\n N: number;\r\n r: number;\r\n p: number;\r\n } | null {\r\n if (!this.hasPrefix(storedPassword, expectedPrefix)) {\r\n return null;\r\n }\r\n\r\n const [, rawN, rawR, rawP, salt, expectedHashHex] = storedPassword.split(\"$\");\r\n const N = Number(rawN);\r\n const r = Number(rawR);\r\n const p = Number(rawP);\r\n\r\n if (!salt || !expectedHashHex || !Number.isFinite(N) || !Number.isFinite(r) || !Number.isFinite(p)) {\r\n return null;\r\n }\r\n\r\n const expectedHash = Buffer.from(expectedHashHex, \"hex\");\r\n if (expectedHash.length === 0) {\r\n return null;\r\n }\r\n\r\n return {\r\n salt,\r\n expectedHash,\r\n N,\r\n r,\r\n p,\r\n };\r\n }\r\n\r\n private static verifySecret(secretValue: string, storedPassword: string, expectedPrefix: string): boolean {\r\n if (typeof secretValue !== \"string\") {\r\n return false;\r\n }\r\n\r\n const parsedHash = this.parseHash(storedPassword, expectedPrefix);\r\n if (!parsedHash) {\r\n return false;\r\n }\r\n\r\n const derivedKey = crypto.scryptSync(\r\n secretValue,\r\n parsedHash.salt,\r\n parsedHash.expectedHash.length,\r\n {\r\n N: parsedHash.N,\r\n r: parsedHash.r,\r\n p: parsedHash.p,\r\n maxmem: 64 * 1024 * 1024,\r\n },\r\n );\r\n\r\n return crypto.timingSafeEqual(derivedKey, parsedHash.expectedHash);\r\n }\r\n\r\n public static hashPassword(plainPassword: string): string {\r\n return this.hashSecret(plainPassword, this.HASH_PREFIX);\r\n }\r\n\r\n public static hashLegacyEncryptedPassword(legacyEncryptedPassword: string): string {\r\n return this.hashSecret(legacyEncryptedPassword, this.LEGACY_HASH_PREFIX);\r\n }\r\n\r\n public static isPasswordHash(value: string): boolean {\r\n return this.hasPrefix(value, this.HASH_PREFIX);\r\n }\r\n\r\n public static isLegacyPasswordHash(value: string): boolean {\r\n return this.hasPrefix(value, this.LEGACY_HASH_PREFIX);\r\n }\r\n\r\n public static verifyPassword(plainPassword: string, storedPassword: string): boolean {\r\n return this.verifySecret(plainPassword, storedPassword, this.HASH_PREFIX);\r\n }\r\n\r\n public static verifyLegacyEncryptedPassword(\r\n legacyEncryptedPassword: string,\r\n storedPassword: string\r\n ): boolean {\r\n return this.verifySecret(legacyEncryptedPassword, storedPassword, this.LEGACY_HASH_PREFIX);\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Utility class for managing database-related configurations and operations.\r\n */\r\nexport class DatabaseUtilities {\r\n /**\r\n * Creates a configuration object for connecting to a Firebird database.\r\n *\r\n * @param {string} host - The hostname or IP address of the database server.\r\n * @param {number} port - The port number on which the database server is running.\r\n * @param {string} database - The path or alias of the database to connect to.\r\n * @param {string} [username='SYSDBA'] - The username for authentication. Defaults to 'SYSDBA'.\r\n * @param {string} [password='masterkey'] - The password for authentication. Defaults to 'masterkey'.\r\n * @returns {Options} - The configuration object to use for establishing a Firebird database connection.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = DatabaseUtilities.createOption(\r\n * 'localhost',\r\n * 3050,\r\n * '/path/to/database.fdb',\r\n * 'myUsername',\r\n * 'myPassword'\r\n * );\r\n * ```\r\n */\r\n public static createOption(\r\n host: string,\r\n port: number,\r\n database: string,\r\n username = 'SYSDBA',\r\n password = 'masterkey'\r\n ): FirebirdOptions {\n return {\n host, // The hostname or IP address of the database server.\n port, // The port number used by the database server.\n user: username, // The username for database authentication.\r\n password, // The password for database authentication.\r\n database, // The path or alias of the target database.\r\n lowercase_keys: false, // Determines if the keys in query results should be in lowercase. Default: false.\r\n role: undefined, // The role for the database connection. Default: undefined.\r\n pageSize: 100000, // The page size for database transactions. Default: 100,000.\n retryConnectionInterval: 1000, // The interval (in ms) to retry a failed connection. Default: 1,000 ms.\n blobAsText: true, // Determines if BLOB fields should be treated as text. Default: true.\n authPlugins: ['Srp256', 'Srp', 'Legacy_Auth'],\n connectTimeoutMs: 15000,\n };\n }\n}\n\r\nexport function Deprecated(message: string) {\r\n return function (target: any, key?: string, descriptor?: PropertyDescriptor) {\r\n console.warn(`[DEPRECATED] ${message}`);\r\n };\r\n }\r\n"]}
|
|
1
|
+
{"version":3,"file":"Utilities.js","sourceRoot":"","sources":["../src/Utilities.ts"],"names":[],"mappings":"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","sourcesContent":["import { Response } from 'express';\nimport { Options } from \"node-firebird\";\nimport { FirebirdOptions } from \"./firebird-compat\";\nimport crypto from \"crypto\";\r\n\r\n\r\nexport enum StatusCode {\r\n Ok = 0,\r\n Warning = 1,\r\n Error = 2,\r\n}\r\n\r\nexport class DateUtilities {\r\n /**\r\n * Pads a number with leading zeros to reach a specified length.\r\n * @param num - The number to pad.\r\n * @param totalLength - The total length of the resulting string.\r\n * @returns The padded string.\r\n */\r\n static addStartingZeros(num: number, totalLength: number): string {\r\n return String(num).padStart(totalLength, '0');\r\n }\r\n\r\n /**\r\n * Formats a Date object as a Moncler-style string.\r\n * @param dData - The date to format.\r\n * @param bAddMs - Whether to include milliseconds.\r\n * @returns The formatted date string.\r\n */\r\n static dateToMoncler(dData: Date, bAddMs: boolean = false): string {\r\n const yy = dData.getFullYear();\r\n const mm = this.addStartingZeros(dData.getMonth() + 1, 2);\r\n const dd = this.addStartingZeros(dData.getDate(), 2);\r\n const hh = this.addStartingZeros(dData.getHours(), 2);\r\n const nn = this.addStartingZeros(dData.getMinutes(), 2);\r\n const ss = this.addStartingZeros(dData.getSeconds(), 2);\r\n const ms = this.addStartingZeros(dData.getMilliseconds(), 3);\r\n return bAddMs ? `${yy}${mm}${dd}${hh}${nn}${ss}${ms}` : `${yy}${mm}${dd}${hh}${nn}${ss}`;\r\n }\r\n\r\n /**\r\n * Formats a Date object as a SQL-style string.\r\n * @param dData - The date to format.\r\n * @param bAddMs - Whether to include milliseconds.\r\n * @returns The formatted date string.\r\n */\r\n static dateToSql(dData: Date, bAddMs: boolean = false): string {\r\n const yy = dData.getFullYear();\r\n const mm = this.addStartingZeros(dData.getMonth() + 1, 2);\r\n const dd = this.addStartingZeros(dData.getDate(), 2);\r\n const hh = this.addStartingZeros(dData.getHours(), 2);\r\n const nn = this.addStartingZeros(dData.getMinutes(), 2);\r\n const ss = this.addStartingZeros(dData.getSeconds(), 2);\r\n const ms = this.addStartingZeros(dData.getMilliseconds(), 3);\r\n return bAddMs\r\n ? `${yy}-${mm}-${dd} ${hh}:${nn}:${ss}.${ms}`\r\n : `${yy}-${mm}-${dd} ${hh}:${nn}:${ss}`;\r\n }\r\n\r\n /**\r\n * Formats a Date object as a simple string (dd-MM-yyyy).\r\n * @param dData - The date to format.\r\n * @returns The formatted date string.\r\n */\r\n static dateToSimple(dData: Date): string {\r\n const yy = dData.getFullYear();\r\n const mm = this.addStartingZeros(dData.getMonth() + 1, 2);\r\n const dd = this.addStartingZeros(dData.getDate(), 2);\r\n return `${dd}-${mm}-${yy}`;\r\n }\r\n\r\n /**\r\n * Gets the current date and time as a formatted string.\r\n * @returns The current date and time in the format dd.MM.yyyy HH:mm:ss.\r\n */\r\n static getNowDateString(): string {\r\n const now: Date = new Date();\r\n const day = now.getDate().toString().padStart(2, \"0\");\r\n const month = (now.getMonth() + 1).toString().padStart(2, \"0\");\r\n const year = now.getFullYear();\r\n const hours = now.getHours().toString().padStart(2, \"0\");\r\n const minutes = now.getMinutes().toString().padStart(2, \"0\");\r\n const seconds = now.getSeconds().toString().padStart(2, \"0\");\r\n return `${day}.${month}.${year} ${hours}:${minutes}:${seconds}`;\r\n }\r\n\r\n /**\r\n * Parses a date string in the format dd/MM/yyyy into a Date object.\r\n * @param date - The date string to parse.\r\n * @returns A Date object.\r\n */\r\n static parseDate(date: string): Date {\r\n const parts: string[] = date.split(\"/\");\r\n return new Date(Number(parts[2]), Number(parts[1]) - 1, Number(parts[0]));\r\n }\r\n}\r\n\r\n\r\nexport class RestUtilities {\r\n /**\r\n * Sends an OK message as a response.\r\n * @param res - Express Response object.\r\n * @param message - The success message.\r\n * @returns The Response object.\r\n */\r\n static sendOKMessage(res: Response, message: string): Response {\r\n return res.send({\r\n severity: \"success\",\r\n status: 200,\r\n statusCode: StatusCode.Ok,\r\n message,\r\n });\r\n }\r\n\r\n /**\r\n * Sends an error message as a response.\r\n * @param res - Express Response object.\r\n * @param error - The error to send.\r\n * @param tag - Optional tag for additional context.\r\n * @param status - HTTP status code (default: 500).\r\n * @returns The Response object.\r\n */\r\n static sendErrorMessage(res: Response, error: any, tag: string = \"[BASE ERROR]\", status: number = 500): Response {\r\n return res.status(status).send({\r\n severity: \"error\",\r\n status,\r\n statusCode: StatusCode.Error,\r\n message: \"An error occurred\",\r\n error: `${tag}: ${error}`,\r\n });\r\n }\r\n\r\n\r\n static sendUnauthorized(res: Response): Response {\r\n return res.status(401).send({\r\n severity: \"error\",\r\n statusCode: StatusCode.Error,\r\n message: \"Non sei autorizzato\",\r\n });\r\n }\r\n\r\n static sendInvalidCredentials(res: Response): Response {\r\n return res.status(401).send({\r\n severity: \"error\",\r\n statusCode: StatusCode.Error,\r\n message: \"Credenziali non valide\"\r\n });\r\n }\r\n\r\n static sendPasswordExpired(res: Response): Response {\r\n return res.status(403).send({\r\n severity: \"warning\",\r\n statusCode: StatusCode.Warning,\r\n code: \"PASSWORD_EXPIRED\",\r\n message: \"Password scaduta. E' necessario aggiornarla\"\r\n })\r\n }\r\n\r\n /**\r\n * Sends a base response with a payload.\r\n * @param res - Express Response object.\r\n * @param payload - The payload to include in the response.\r\n * @returns The Response object.\r\n */\r\n static sendBaseResponse(res: Response, payload: any): Response {\r\n try {\r\n payload = JSON.parse(JSON.stringify(payload));\r\n const response = {\r\n Status: {\r\n errorCode: \"0\",\r\n errorDescription: \"\",\r\n },\r\n Result: payload,\r\n Message: \"Dati recuperati con successo.\",\r\n };\r\n return res.send(response);\r\n } catch (error) {\r\n return this.sendErrorMessage(res, `Error sending response: ${error}`, \"[UTILITIES]\", 500);\r\n }\r\n }\r\n\r\n /**\r\n * Sends an execution message as a response.\r\n * @param res - Express Response object.\r\n * @param executionObject - The execution data.\r\n * @param title - The title of the response.\r\n * @returns The Response object.\r\n */\r\n static sendExecMessage(res: Response, executionObject: any, title: string): Response {\r\n try {\r\n const response = {\r\n Status: {\r\n errorCode: \"0\",\r\n errorDescription: \"\",\r\n },\r\n Sql: \"\",\r\n ID: executionObject?.id,\r\n data: executionObject,\r\n Title: title,\r\n };\r\n return res.send(response);\r\n } catch (error) {\r\n return this.sendErrorMessage(res, `Error sending execution message: ${error}`, title, 500);\r\n }\r\n }\r\n\r\n /**\r\n * Prints a SQL query with parameters replaced.\r\n * @param query - The SQL query.\r\n * @param params - The parameters to replace.\r\n * @returns The formatted query.\r\n */\r\n static printQueryWithParams(query: string = \"\", params: any[]): string {\r\n try {\r\n params.forEach(param => {\r\n query = query.replace(\"?\", param);\r\n });\r\n return query;\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n\r\n public static convertKeysToCamelCase(obj: any): any {\r\n if (obj !== null && obj.constructor === Object) {\r\n return Object.keys(obj).reduce((acc: any, key: string) => {\r\n const camelCaseKey = key.toLowerCase().replace(/_([a-z])/g, g => g[1].toUpperCase());\r\n acc[camelCaseKey] = obj[key];\r\n return acc;\r\n }, {});\r\n }\r\n return obj;\r\n }\r\n}\r\n\r\n\r\nexport class CryptUtilities {\r\n\r\n /**\r\n * Cifra un testo in chiaro usando l'algoritmo AES-128 in modalità ECB.\r\n * \r\n * @param plainText - Il testo in chiaro da cifrare.\r\n * @param key - La chiave di cifratura (16 byte per AES-128).\r\n * @param outputEncoding - Codifica del risultato cifrato (predefinito: \"base64\").\r\n * @returns Il testo cifrato codificato.\r\n * @throws Errore in caso di problemi durante la cifratura.\r\n */\r\n public static encrypt(plainData: string, key: string, outputEncoding: BufferEncoding = \"base64\"): string {\r\n try {\r\n // Crea un oggetto Cipher usando AES-128 in modalità ECB\r\n const cipher = crypto.createCipheriv(\"aes-128-ecb\", Buffer.from(key, \"utf8\"), null);\r\n\r\n // Cifra il testo in chiaro e finalizza il processo\r\n const encryptedBuffer = Buffer.concat([\r\n cipher.update(plainData, \"utf8\"),\r\n cipher.final(),\r\n ]);\r\n\r\n // Restituisce il risultato cifrato codificato\r\n return encryptedBuffer.toString(outputEncoding);\r\n } catch (error) {\r\n // Gestisce eventuali errori di cifratura\r\n throw new Error(`Errore durante la cifratura: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * Decifra un testo cifrato usando l'algoritmo AES-128 in modalità ECB.\r\n * \r\n * @param encryptedData - Il testo cifrato da decifrare.\r\n * @param key - La chiave di decifratura (16 byte per AES-128).\r\n * @returns Il testo decifrato o null in caso di errore.\r\n */\r\n public static decrypt(encryptedData: string, key: string): string | null {\r\n try {\r\n // Crea un oggetto Decipher usando AES-128 in modalità ECB\r\n const decipher = crypto.createDecipheriv(\"aes-128-ecb\", Buffer.from(key, \"utf8\"), null);\r\n decipher.setAutoPadding(false);\r\n\r\n // Decifra il testo cifrato\r\n let decoded = decipher.update(encryptedData, \"base64\", \"utf8\");\r\n decoded += decipher.final(\"utf8\");\r\n\r\n // Rimuove il padding manuale\r\n const lastChar = decoded.charCodeAt(decoded.length - 1);\r\n decoded = decoded.slice(0, decoded.length - lastChar);\r\n\r\n return decoded;\r\n } catch (error) {\r\n console.error(\"Errore durante la decifratura:\", error);\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nexport class PasswordUtilities {\r\n private static readonly HASH_PREFIX = \"scrypt\";\r\n private static readonly LEGACY_HASH_PREFIX = \"scrypt-legacy\";\r\n private static readonly SCRYPT_N = 16384;\r\n private static readonly SCRYPT_R = 8;\r\n private static readonly SCRYPT_P = 1;\r\n private static readonly SALT_LENGTH = 16;\r\n\r\n private static hashSecret(secretValue: string, prefix: string): string {\r\n if (typeof secretValue !== \"string\" || secretValue.length === 0) {\r\n throw new Error(\"Il valore da proteggere non puo essere vuoto.\");\r\n }\r\n const salt = crypto.randomBytes(this.SALT_LENGTH).toString(\"hex\");\r\n const derivedKey = crypto.scryptSync(\r\n secretValue,\r\n salt,\r\n 64,\r\n {\r\n N: this.SCRYPT_N,\r\n r: this.SCRYPT_R,\r\n p: this.SCRYPT_P,\r\n maxmem: 64 * 1024 * 1024,\r\n },\r\n );\r\n\r\n return [\r\n prefix,\r\n this.SCRYPT_N,\r\n this.SCRYPT_R,\r\n this.SCRYPT_P,\r\n salt,\r\n derivedKey.toString(\"hex\"),\r\n ].join(\"$\");\r\n }\r\n\r\n private static hasPrefix(value: string, prefix: string): boolean {\r\n return typeof value === \"string\" && value.startsWith(`${prefix}$`);\r\n }\r\n\r\n private static parseHash(\r\n storedPassword: string,\r\n expectedPrefix: string\r\n ): {\r\n salt: string;\r\n expectedHash: Buffer;\r\n N: number;\r\n r: number;\r\n p: number;\r\n } | null {\r\n if (!this.hasPrefix(storedPassword, expectedPrefix)) {\r\n return null;\r\n }\r\n\r\n const [, rawN, rawR, rawP, salt, expectedHashHex] = storedPassword.split(\"$\");\r\n const N = Number(rawN);\r\n const r = Number(rawR);\r\n const p = Number(rawP);\r\n\r\n if (!salt || !expectedHashHex || !Number.isFinite(N) || !Number.isFinite(r) || !Number.isFinite(p)) {\r\n return null;\r\n }\r\n\r\n const expectedHash = Buffer.from(expectedHashHex, \"hex\");\r\n if (expectedHash.length === 0) {\r\n return null;\r\n }\r\n\r\n return {\r\n salt,\r\n expectedHash,\r\n N,\r\n r,\r\n p,\r\n };\r\n }\r\n\r\n private static verifySecret(secretValue: string, storedPassword: string, expectedPrefix: string): boolean {\r\n if (typeof secretValue !== \"string\") {\r\n return false;\r\n }\r\n\r\n const parsedHash = this.parseHash(storedPassword, expectedPrefix);\r\n if (!parsedHash) {\r\n return false;\r\n }\r\n\r\n const derivedKey = crypto.scryptSync(\r\n secretValue,\r\n parsedHash.salt,\r\n parsedHash.expectedHash.length,\r\n {\r\n N: parsedHash.N,\r\n r: parsedHash.r,\r\n p: parsedHash.p,\r\n maxmem: 64 * 1024 * 1024,\r\n },\r\n );\r\n\r\n return crypto.timingSafeEqual(derivedKey, parsedHash.expectedHash);\r\n }\r\n\r\n public static hashPassword(plainPassword: string): string {\r\n return this.hashSecret(plainPassword, this.HASH_PREFIX);\r\n }\r\n\r\n public static hashLegacyEncryptedPassword(legacyEncryptedPassword: string): string {\r\n return this.hashSecret(legacyEncryptedPassword, this.LEGACY_HASH_PREFIX);\r\n }\r\n\r\n public static isPasswordHash(value: string): boolean {\r\n return this.hasPrefix(value, this.HASH_PREFIX);\r\n }\r\n\r\n public static isLegacyPasswordHash(value: string): boolean {\r\n return this.hasPrefix(value, this.LEGACY_HASH_PREFIX);\r\n }\r\n\r\n public static verifyPassword(plainPassword: string, storedPassword: string): boolean {\r\n return this.verifySecret(plainPassword, storedPassword, this.HASH_PREFIX);\r\n }\r\n\r\n public static verifyLegacyEncryptedPassword(\r\n legacyEncryptedPassword: string,\r\n storedPassword: string\r\n ): boolean {\r\n return this.verifySecret(legacyEncryptedPassword, storedPassword, this.LEGACY_HASH_PREFIX);\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Utility class for managing database-related configurations and operations.\r\n */\r\nexport class DatabaseUtilities {\r\n /**\r\n * Creates a configuration object for connecting to a Firebird database.\r\n *\r\n * @param {string} host - The hostname or IP address of the database server.\r\n * @param {number} port - The port number on which the database server is running.\r\n * @param {string} database - The path or alias of the database to connect to.\r\n * @param {string} [username='SYSDBA'] - The username for authentication. Defaults to 'SYSDBA'.\r\n * @param {string} [password='masterkey'] - The password for authentication. Defaults to 'masterkey'.\r\n * @returns {Options} - The configuration object to use for establishing a Firebird database connection.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = DatabaseUtilities.createOption(\r\n * 'localhost',\r\n * 3050,\r\n * '/path/to/database.fdb',\r\n * 'myUsername',\r\n * 'myPassword'\r\n * );\r\n * ```\r\n */\r\n public static createOption(\r\n host: string,\r\n port: number,\r\n database: string,\r\n username = 'SYSDBA',\r\n password = 'masterkey'\r\n ): FirebirdOptions {\n return {\n host, // The hostname or IP address of the database server.\n port, // The port number used by the database server.\n user: username, // The username for database authentication.\r\n password, // The password for database authentication.\r\n database, // The path or alias of the target database.\r\n lowercase_keys: false, // Determines if the keys in query results should be in lowercase. Default: false.\r\n role: undefined, // The role for the database connection. Default: undefined.\r\n pageSize: 100000, // The page size for database transactions. Default: 100,000.\n retryConnectionInterval: 1000, // The interval (in ms) to retry a failed connection. Default: 1,000 ms.\n blobAsText: true, // Determines if BLOB fields should be treated as text. Default: true.\n connectTimeout: 15000,\n connectTimeoutMs: 15000,\n };\n }\n}\n\r\nexport function Deprecated(message: string) {\r\n return function (target: any, key?: string, descriptor?: PropertyDescriptor) {\r\n console.warn(`[DEPRECATED] ${message}`);\r\n };\r\n }\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessiModule.js","sourceRoot":"","sources":["../../src/accessi-module/AccessiModule.ts"],"names":[],"mappings":";;;;;;;;;;AAOA,2CAA+D;AAC/D,oEAAiE;AACjE,uEAAoE;AACpE,sFAAmF;AACnF,oEAAiE;AACjE,mEAAgE;AAChE,iEAA8D;AAC9D,6EAA0E;AAC1E,iEAA8D;AAC9D,0EAAuE;AACvE,qEAAkE;AAClE,iFAA8E;AAC9E,4FAAyF;AACzF,qDAAoD;AACpD,kEAAsE;AACtE,sFAAmF;AAkF5E,IAAM,aAAa,qBAAnB,MAAM,aAAa;IACxB,MAAM,CAAC,OAAO,CAAC,OAAuB;QACpC,OAAO;YACL,MAAM,EAAE,eAAa;YACrB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,iBAAiB;oBAC1B,QAAQ,EAAE,OAAO;iBAClB;gBACD,yBAAW;gBACX,yBAAW;gBACX,2BAAY;gBACZ,qCAAiB;gBACjB,6BAAa;gBACb,yCAAmB;gBACnB,6BAAc;gBACd,wCAAsB;gBACtB,+CAAsB;aACvB;YACD,OAAO,EAAE;gBACP,iBAAiB;gBACjB,yBAAW;gBACX,yBAAW;gBACX,2BAAY;gBACZ,qCAAiB;gBACjB,6BAAa;gBACb,yCAAmB;gBACnB,6BAAc;gBACd,wCAAsB;aACvB;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAhCY,sCAAa;wBAAb,aAAa;IAbzB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,WAAW,EAAE;YACX,iCAAe;YACf,+BAAc;YACd,2CAAoB;YACpB,+BAAc;YACd,mCAAgB;YAChB,+CAAsB;SACvB;QACD,SAAS,EAAE,CAAC,yBAAW,EAAE,yBAAW,EAAE,2BAAY,EAAE,qCAAiB,EAAE,6BAAa,EAAE,yCAAmB,EAAE,6BAAc,EAAE,wCAAsB,EAAE,+CAAsB,CAAC;QAC1K,OAAO,EAAE,CAAC,yBAAW,EAAE,yBAAW,EAAE,2BAAY,EAAE,qCAAiB,EAAE,6BAAa,EAAE,yCAAmB,EAAE,6BAAc,EAAE,wCAAsB,CAAC;KACjJ,CAAC;GACW,aAAa,CAgCzB","sourcesContent":["/**\r\n * Modulo che gestisce le operazioni di accesso degli utenti, incluse le rotte, il controller e il modello.\r\n *\r\n * @module AccessiModule\r\n * @author mttdev382\r\n */\r\nimport { Options } from '
|
|
1
|
+
{"version":3,"file":"AccessiModule.js","sourceRoot":"","sources":["../../src/accessi-module/AccessiModule.ts"],"names":[],"mappings":";;;;;;;;;;AAOA,2CAA+D;AAC/D,oEAAiE;AACjE,uEAAoE;AACpE,sFAAmF;AACnF,oEAAiE;AACjE,mEAAgE;AAChE,iEAA8D;AAC9D,6EAA0E;AAC1E,iEAA8D;AAC9D,0EAAuE;AACvE,qEAAkE;AAClE,iFAA8E;AAC9E,4FAAyF;AACzF,qDAAoD;AACpD,kEAAsE;AACtE,sFAAmF;AAkF5E,IAAM,aAAa,qBAAnB,MAAM,aAAa;IACxB,MAAM,CAAC,OAAO,CAAC,OAAuB;QACpC,OAAO;YACL,MAAM,EAAE,eAAa;YACrB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,iBAAiB;oBAC1B,QAAQ,EAAE,OAAO;iBAClB;gBACD,yBAAW;gBACX,yBAAW;gBACX,2BAAY;gBACZ,qCAAiB;gBACjB,6BAAa;gBACb,yCAAmB;gBACnB,6BAAc;gBACd,wCAAsB;gBACtB,+CAAsB;aACvB;YACD,OAAO,EAAE;gBACP,iBAAiB;gBACjB,yBAAW;gBACX,yBAAW;gBACX,2BAAY;gBACZ,qCAAiB;gBACjB,6BAAa;gBACb,yCAAmB;gBACnB,6BAAc;gBACd,wCAAsB;aACvB;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAhCY,sCAAa;wBAAb,aAAa;IAbzB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,WAAW,EAAE;YACX,iCAAe;YACf,+BAAc;YACd,2CAAoB;YACpB,+BAAc;YACd,mCAAgB;YAChB,+CAAsB;SACvB;QACD,SAAS,EAAE,CAAC,yBAAW,EAAE,yBAAW,EAAE,2BAAY,EAAE,qCAAiB,EAAE,6BAAa,EAAE,yCAAmB,EAAE,6BAAc,EAAE,wCAAsB,EAAE,+CAAsB,CAAC;QAC1K,OAAO,EAAE,CAAC,yBAAW,EAAE,yBAAW,EAAE,2BAAY,EAAE,qCAAiB,EAAE,6BAAa,EAAE,yCAAmB,EAAE,6BAAc,EAAE,wCAAsB,CAAC;KACjJ,CAAC;GACW,aAAa,CAgCzB","sourcesContent":["/**\r\n * Modulo che gestisce le operazioni di accesso degli utenti, incluse le rotte, il controller e il modello.\r\n *\r\n * @module AccessiModule\r\n * @author mttdev382\r\n */\r\nimport { Options } from 'node-firebird';\nimport { DynamicModule, Global, Module } from '@nestjs/common';\r\nimport { AuthService } from './Services/AuthService/AuthService';\r\nimport { EmailService } from './Services/EmailService/EmailService';\r\nimport { PermissionService } from './Services/PermissionService/PermissionService';\r\nimport { UserService } from './Services/UserService/UserService';\r\nimport { EmailController } from './Controllers/EmailController';\r\nimport { AuthController } from './Controllers/AuthController';\r\nimport { PermissionController } from './Controllers/PermissionController';\r\nimport { UserController } from './Controllers/UserController';\r\nimport { FiltriService } from './Services/FiltriService/FiltriService';\r\nimport { FiltriController } from './Controllers/FiltriController';\r\nimport { ConfiguratorController } from './Controllers/ConfiguratorController';\r\nimport { ConfiguratorService } from './Services/ConfiguratorService/ConfiguratorService';\r\nimport { JwtSimpleGuard } from './jwt/jwt.strategy';\r\nimport { AuthenticateGenService } from './middleware/authenticateGen';\r\nimport { AccessiDatabaseUpdater } from './database-updates/AccessiDatabaseUpdater';\r\n\r\nexport interface JwtOptions {\r\n secret: string;\r\n expiresIn: string;\r\n}\r\n\r\nexport interface EmailOptions {\r\n host: string;\r\n port: number;\r\n secure: boolean;\r\n requireTLS : boolean;\r\n tls: {\r\n rejectUnauthorized: boolean,\r\n }\r\n from: string;\r\n auth: {\r\n user: string;\r\n pass: string;\r\n };\r\n}\r\n\r\nexport interface ExtensionFieldsOptions {\r\n databaseOptions: Options;\r\n objectKey: string;\r\n tableName: string;\r\n tableFields: string[];\r\n tableJoinFieldName: string;\r\n}\r\n\r\nexport interface PublicAuthRateLimitRuleOptions {\r\n windowMs: number;\r\n maxAttempts: number;\r\n}\r\n\r\nexport interface PublicAuthRateLimitOptions {\r\n enabled?: boolean;\r\n login?: PublicAuthRateLimitRuleOptions;\r\n register?: PublicAuthRateLimitRuleOptions;\r\n passwordResetEmail?: PublicAuthRateLimitRuleOptions;\r\n passwordResetConfirm?: PublicAuthRateLimitRuleOptions;\r\n getUserByToken?: PublicAuthRateLimitRuleOptions;\r\n}\r\n\r\nexport interface AccessiOptions {\r\n databaseOptions: Options;\r\n /**\r\n * Basepath del sito es: 'http://www.il-mio-sito.it/nome-progetto(se c'è)'\r\n */\r\n confirmationEmailUrl: string;\r\n /**\r\n * Percorso della pagina di reset personalizzata es. http://localhost:4200/#/admin/reset-password\r\n * N.B si sostituisce al confirmationMailURl\r\n */\r\n customResetPage?: string;\r\n confirmationEmailReturnUrl: string;\r\n confirmationEmailPrefix?: string;\r\n encryptionKey: string;\r\n mockDemoUser: boolean;\r\n passwordExpiration?: boolean;\n passwordExpirationDays?: number;\n legacyPasswordMigrationOnStartup?: boolean;\n autoUpdateDatabase?: boolean;\n jwtOptions: JwtOptions;\r\n emailOptions: EmailOptions;\r\n publicAuthRateLimit?: PublicAuthRateLimitOptions;\r\n extensionFieldsOptions?: ExtensionFieldsOptions[];\r\n}\r\n\r\n@Global()\r\n@Module({\r\n controllers: [\r\n EmailController,\r\n AuthController,\r\n PermissionController,\r\n UserController,\r\n FiltriController,\r\n ConfiguratorController\r\n ],\r\n providers: [AuthService, UserService, EmailService, PermissionService, FiltriService, ConfiguratorService, JwtSimpleGuard, AuthenticateGenService, AccessiDatabaseUpdater],\r\n exports: [AuthService, UserService, EmailService, PermissionService, FiltriService, ConfiguratorService, JwtSimpleGuard, AuthenticateGenService],\r\n})\r\nexport class AccessiModule {\r\n static forRoot(options: AccessiOptions): DynamicModule {\r\n return {\r\n module: AccessiModule,\r\n providers: [\r\n {\r\n provide: 'ACCESSI_OPTIONS',\r\n useValue: options,\r\n },\r\n AuthService,\r\n UserService,\r\n EmailService,\r\n PermissionService,\r\n FiltriService,\r\n ConfiguratorService,\r\n JwtSimpleGuard,\r\n AuthenticateGenService,\r\n AccessiDatabaseUpdater\r\n ],\r\n exports: [\r\n 'ACCESSI_OPTIONS',\r\n AuthService,\r\n UserService,\r\n EmailService,\r\n PermissionService,\r\n FiltriService,\r\n ConfiguratorService,\r\n JwtSimpleGuard,\r\n AuthenticateGenService\r\n ],\r\n };\r\n }\r\n}\r\n"]}
|
|
@@ -156,6 +156,34 @@ let AccessiDatabaseUpdater = AccessiDatabaseUpdater_1 = class AccessiDatabaseUpd
|
|
|
156
156
|
]);
|
|
157
157
|
});
|
|
158
158
|
}
|
|
159
|
+
static upsertMenuGroup(options, menuGroup) {
|
|
160
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
161
|
+
const existing = yield Orm_1.Orm.query(options.databaseOptions, "SELECT CODGRP FROM MENU_GRP WHERE CODGRP = ?", [menuGroup.CODGRP]);
|
|
162
|
+
if (existing.length === 0) {
|
|
163
|
+
yield Orm_1.Orm.execute(options.databaseOptions, `INSERT INTO MENU_GRP (CODGRP, DESGRP, FLGENABLED, ORDINE, NOMECAMPO)
|
|
164
|
+
VALUES (?, ?, ?, ?, ?)`, [
|
|
165
|
+
menuGroup.CODGRP,
|
|
166
|
+
menuGroup.DESGRP,
|
|
167
|
+
menuGroup.FLGENABLED,
|
|
168
|
+
menuGroup.ORDINE,
|
|
169
|
+
menuGroup.NOMECAMPO,
|
|
170
|
+
]);
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
yield Orm_1.Orm.execute(options.databaseOptions, `UPDATE MENU_GRP
|
|
174
|
+
SET DESGRP = ?,
|
|
175
|
+
FLGENABLED = COALESCE(FLGENABLED, ?),
|
|
176
|
+
ORDINE = ?,
|
|
177
|
+
NOMECAMPO = ?
|
|
178
|
+
WHERE CODGRP = ?`, [
|
|
179
|
+
menuGroup.DESGRP,
|
|
180
|
+
menuGroup.FLGENABLED,
|
|
181
|
+
menuGroup.ORDINE,
|
|
182
|
+
menuGroup.NOMECAMPO,
|
|
183
|
+
menuGroup.CODGRP,
|
|
184
|
+
]);
|
|
185
|
+
});
|
|
186
|
+
}
|
|
159
187
|
};
|
|
160
188
|
exports.AccessiDatabaseUpdater = AccessiDatabaseUpdater;
|
|
161
189
|
AccessiDatabaseUpdater.logger = new Logger_1.Logger(AccessiDatabaseUpdater_1.name);
|
|
@@ -167,6 +195,13 @@ AccessiDatabaseUpdater.updates = [
|
|
|
167
195
|
apply: (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
168
196
|
yield AccessiDatabaseUpdater_1.upsertFiltroTipo(options, 20, "POSTAZIONE", "IDXPOS", undefined);
|
|
169
197
|
yield AccessiDatabaseUpdater_1.ensureColumn(options, "FILTRI", "IDXPOS SMALLINT", "IDXPOS", "idx della postazione nella tabella ANTENNE_POS di PROLAV");
|
|
198
|
+
yield AccessiDatabaseUpdater_1.upsertMenuGroup(options, {
|
|
199
|
+
CODGRP: "F",
|
|
200
|
+
DESGRP: "Verifica RFID",
|
|
201
|
+
FLGENABLED: 1,
|
|
202
|
+
ORDINE: 10,
|
|
203
|
+
NOMECAMPO: "FLGPIANARFID",
|
|
204
|
+
});
|
|
170
205
|
yield AccessiDatabaseUpdater_1.upsertMenu(options, {
|
|
171
206
|
CODMNU: "MNUVERRFID",
|
|
172
207
|
DESMNU: "Verifica RFID",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessiDatabaseUpdater.js","sourceRoot":"","sources":["../../../src/accessi-module/database-updates/AccessiDatabaseUpdater.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Inject, OnModuleInit } from \"@nestjs/common\";\r\nimport { DatabaseUpdater } from \"../../DatabaseUpdater\";\r\nimport { AccessiOptions } from \"../AccessiModule\";\r\nimport { Orm } from \"../../Orm\";\r\nimport { Logger } from \"../../Logger\";\r\n\r\ntype AccessiUpdateStep = {\r\n fromVersion: string;\r\n toVersion: string;\r\n description: string;\r\n apply: (options: AccessiOptions) => Promise<void>;\r\n};\r\n\r\n@Injectable()\r\nexport class AccessiDatabaseUpdater extends DatabaseUpdater implements OnModuleInit {\n protected static override logger: Logger = new Logger(AccessiDatabaseUpdater.name);\n\r\n private static readonly updates: AccessiUpdateStep[] = [\r\n {\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"1.1.0\",\r\n description: \"Aggiunge filtro postazione, colonna IDXPOS e menu verifica RFID\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.upsertFiltroTipo(options, 20, \"POSTAZIONE\", \"IDXPOS\", undefined);\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"FILTRI\",\r\n \"IDXPOS SMALLINT\",\r\n \"IDXPOS\",\r\n \"idx della postazione nella tabella ANTENNE_POS di PROLAV\"\r\n );\r\n await AccessiDatabaseUpdater.upsertMenu(options, {\r\n CODMNU: \"MNUVERRFID\",\r\n DESMNU: \"Verifica RFID\",\r\n CODGRP: \"F\",\r\n FLGENABLED: 1,\r\n ICON: \"hardware-chip-outline\",\r\n ORDINE: 10,\r\n CODTIP: \"M\",\r\n PAGINA: \"/verifica-rfid\",\r\n RIFMENU: null,\r\n });\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.0\",\r\n toVersion: \"1.1.1\",\r\n description: \"Aggiunge FLGENABLED su FILTRI_TIPO\",\r\n apply: async (options) => {\r\n const columnCreated = await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"FILTRI_TIPO\",\r\n \"FLGENABLED SMALLINT DEFAULT 1 NOT NULL\",\r\n \"FLGENABLED\"\r\n );\r\n\r\n if (!columnCreated) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"UPDATE FILTRI_TIPO SET FLGENABLED = 1 WHERE FLGENABLED IS NULL\"\r\n );\r\n }\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.1\",\r\n toVersion: \"1.1.2\",\r\n description: \"Aggiunge filtro vettore e colonna CODVET\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.upsertFiltroTipo(options, 30, \"VETTORE\", \"CODVET\", 1);\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"FILTRI\",\r\n \"CODVET INTEGER\",\r\n \"CODVET\",\r\n \"CODICE DEL VETTORE DA INSERIRE SE COME FILTRO HA 30\"\r\n );\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.2\",\r\n toVersion: \"1.1.3\",\r\n description: \"Aggiunge FLGADMINCONFIG e inizializza PARAMETRI\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"UTENTI_CONFIG\",\r\n \"FLGADMINCONFIG SMALLINT DEFAULT 0\",\r\n \"FLGADMINCONFIG\",\r\n \"flag utente configuratore dei menu amministratore\"\r\n );\r\n await AccessiDatabaseUpdater.createParametersTable(options.databaseOptions);\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.3\",\r\n toVersion: \"1.1.4\",\r\n description: \"Aggiunge sequence e trigger per RUOLI\",\r\n apply: async (options) => {\r\n if (!(await AccessiDatabaseUpdater.generatorExists(options.databaseOptions, \"GEN_RUOLI_ID\"))) {\r\n await Orm.execute(options.databaseOptions, \"CREATE SEQUENCE GEN_RUOLI_ID\");\r\n }\r\n\r\n if (!(await AccessiDatabaseUpdater.triggerExists(options.databaseOptions, \"RUOLI_BI\"))) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `CREATE TRIGGER RUOLI_BI FOR RUOLI\r\nACTIVE BEFORE INSERT POSITION 0\r\nAS\r\nBEGIN\r\n IF (NEW.CODRUO IS NULL) THEN\r\n NEW.CODRUO = GEN_ID(GEN_RUOLI_ID,1);\r\nEND`\r\n );\r\n }\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.4\",\r\n toVersion: \"1.1.5\",\r\n description: \"Aggiunge NOTE su MENU\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"MENU\",\r\n \"NOTE VARCHAR(1000)\",\r\n \"NOTE\"\r\n );\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.5\",\r\n toVersion: \"1.1.6\",\r\n description: \"Aggiunge NUMMAC su UTENTI_CONFIG\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"UTENTI_CONFIG\",\r\n \"NUMMAC INTEGER\",\r\n \"NUMMAC\",\r\n 'Numero macchina DESPOST PROLAV'\r\n );\r\n },\r\n },\r\n ];\r\n\r\n constructor(\r\n @Inject(\"ACCESSI_OPTIONS\") private readonly accessiOptions: AccessiOptions\r\n ) {\r\n super();\r\n }\r\n\r\n async onModuleInit(): Promise<void> {\n if (this.accessiOptions.autoUpdateDatabase === false) {\n AccessiDatabaseUpdater.logger.info(\"Aggiornamento automatico database accessi disabilitato da configurazione.\");\n return;\n }\n\n AccessiDatabaseUpdater.logger.info(\"Avvio updater database accessi.\");\n await AccessiDatabaseUpdater.run(this.accessiOptions);\n AccessiDatabaseUpdater.logger.info(\"Updater database accessi completato.\");\n }\n\n static async run(options: AccessiOptions): Promise<void> {\n const startedAt = performance.now();\n this.logger.info(\n `Verifica schema accessi su ${options.databaseOptions.host ?? \"?\"}:${options.databaseOptions.port ?? \"?\"} -> ${options.databaseOptions.database ?? \"?\"}`\n );\n await this.createParametersTable(options.databaseOptions);\n this.logger.info(\"Tabella PARAMETRI verificata.\");\n\n const currentVersion = await this.getDatabaseVersion(options.databaseOptions);\n const currentIndex = this.updates.findIndex(\r\n (update) => update.toVersion === currentVersion\r\n );\r\n const startIndex = currentIndex >= 0 ? currentIndex + 1 : 0;\r\n\r\n if (currentVersion && currentIndex === this.updates.length - 1) {\r\n this.logger.info(`Database accessi gia' all'ultima versione disponibile (${currentVersion}).`);\r\n } else if (currentVersion && currentIndex >= 0) {\r\n this.logger.info(`Database accessi rilevato alla versione ${currentVersion}.`);\r\n } else if (currentVersion) {\r\n this.logger.warning(\r\n `Versione database accessi non riconosciuta (${currentVersion}). Verifico tutti gli update idempotenti.`\r\n );\r\n } else {\r\n this.logger.warning(\r\n \"Versione database accessi assente. Verifico tutti gli update idempotenti.\"\r\n );\r\n }\r\n\r\n for (let index = startIndex; index < this.updates.length; index++) {\n const update = this.updates[index];\n const stepStartedAt = performance.now();\n this.logger.info(\n `Applico aggiornamento accessi ${update.fromVersion} -> ${update.toVersion}: ${update.description}`\n );\n await update.apply(options);\n await this.setDatabaseVersion(options.databaseOptions, update.toVersion);\n this.logger.info(\n `Aggiornamento accessi ${update.toVersion} completato in ${(performance.now() - stepStartedAt).toFixed(2)} ms`\n );\n }\n\n this.logger.info(\n `Verifica/aggiornamento database accessi completato in ${(performance.now() - startedAt).toFixed(2)} ms`\n );\n }\n\r\n static async getCurrentVersion(options: AccessiOptions): Promise<string | null> {\r\n return await this.getDatabaseVersion(options.databaseOptions);\r\n }\r\n\r\n static getLatestVersion(): string {\r\n return this.updates[this.updates.length - 1]?.toVersion ?? \"0.0.0\";\r\n }\r\n\r\n private static async ensureColumn(\r\n options: AccessiOptions,\r\n tableName: string,\r\n columnDefinition: string,\r\n columnName: string,\r\n comment?: string\r\n ): Promise<boolean> {\r\n const exists = await this.columnExists(\r\n options.databaseOptions,\r\n tableName,\r\n columnName\r\n );\r\n\r\n if (!exists) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `ALTER TABLE ${tableName} ADD ${columnDefinition}`\r\n );\r\n }\r\n\r\n if (comment) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `COMMENT ON COLUMN ${tableName}.${columnName} IS '${comment.replace(/'/g, \"''\")}'`\r\n );\r\n }\r\n\r\n return !exists;\r\n }\r\n\r\n private static async upsertFiltroTipo(\r\n options: AccessiOptions,\r\n tipfil: number,\r\n desfil: string,\r\n fldfil: string,\r\n flgEnabled?: number\r\n ): Promise<void> {\r\n const hasEnabledColumn = await this.columnExists(\r\n options.databaseOptions,\r\n \"FILTRI_TIPO\",\r\n \"FLGENABLED\"\r\n );\r\n\r\n const existing = await Orm.query(\r\n options.databaseOptions,\r\n \"SELECT TIPFIL FROM FILTRI_TIPO WHERE TIPFIL = ?\",\r\n [tipfil]\r\n );\r\n\r\n if (existing.length === 0) {\r\n if (hasEnabledColumn && flgEnabled !== undefined) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"INSERT INTO FILTRI_TIPO (TIPFIL, DESFIL, FLDFIL, FLGENABLED) VALUES (?, ?, ?, ?)\",\r\n [tipfil, desfil, fldfil, flgEnabled]\r\n );\r\n return;\r\n }\r\n\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"INSERT INTO FILTRI_TIPO (TIPFIL, DESFIL, FLDFIL) VALUES (?, ?, ?)\",\r\n [tipfil, desfil, fldfil]\r\n );\r\n return;\r\n }\r\n\r\n if (hasEnabledColumn && flgEnabled !== undefined) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"UPDATE FILTRI_TIPO SET DESFIL = ?, FLDFIL = ?, FLGENABLED = COALESCE(FLGENABLED, ?) WHERE TIPFIL = ?\",\r\n [desfil, fldfil, flgEnabled, tipfil]\r\n );\r\n return;\r\n }\r\n\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"UPDATE FILTRI_TIPO SET DESFIL = ?, FLDFIL = ? WHERE TIPFIL = ?\",\r\n [desfil, fldfil, tipfil]\r\n );\r\n }\r\n\r\n private static async upsertMenu(\r\n options: AccessiOptions,\r\n menu: {\r\n CODMNU: string;\r\n DESMNU: string;\r\n CODGRP: string;\r\n FLGENABLED: number;\r\n ICON: string;\r\n ORDINE: number;\r\n CODTIP: string;\r\n PAGINA: string;\r\n RIFMENU: string | null;\r\n }\r\n ): Promise<void> {\r\n const existing = await Orm.query(\r\n options.databaseOptions,\r\n \"SELECT CODMNU FROM MENU WHERE CODMNU = ?\",\r\n [menu.CODMNU]\r\n );\r\n\r\n if (existing.length === 0) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `INSERT INTO MENU (CODMNU, DESMNU, CODGRP, FLGENABLED, ICON, ORDINE, CODTIP, PAGINA, RIFMENU)\r\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,\r\n [\r\n menu.CODMNU,\r\n menu.DESMNU,\r\n menu.CODGRP,\r\n menu.FLGENABLED,\r\n menu.ICON,\r\n menu.ORDINE,\r\n menu.CODTIP,\r\n menu.PAGINA,\r\n menu.RIFMENU,\r\n ]\r\n );\r\n return;\r\n }\r\n\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `UPDATE MENU\r\n SET DESMNU = ?,\r\n CODGRP = ?,\r\n FLGENABLED = COALESCE(FLGENABLED, ?),\r\n ICON = ?,\r\n ORDINE = ?,\r\n CODTIP = ?,\r\n PAGINA = ?,\r\n RIFMENU = ?\r\n WHERE CODMNU = ?`,\r\n [\r\n menu.DESMNU,\r\n menu.CODGRP,\r\n menu.FLGENABLED,\r\n menu.ICON,\r\n menu.ORDINE,\r\n menu.CODTIP,\r\n menu.PAGINA,\r\n menu.RIFMENU,\r\n menu.CODMNU,\r\n ]\r\n );\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"AccessiDatabaseUpdater.js","sourceRoot":"","sources":["../../../src/accessi-module/database-updates/AccessiDatabaseUpdater.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Inject, OnModuleInit } from \"@nestjs/common\";\r\nimport { DatabaseUpdater } from \"../../DatabaseUpdater\";\r\nimport { AccessiOptions } from \"../AccessiModule\";\r\nimport { Orm } from \"../../Orm\";\r\nimport { Logger } from \"../../Logger\";\r\n\r\ntype AccessiUpdateStep = {\r\n fromVersion: string;\r\n toVersion: string;\r\n description: string;\r\n apply: (options: AccessiOptions) => Promise<void>;\r\n};\r\n\r\n@Injectable()\r\nexport class AccessiDatabaseUpdater extends DatabaseUpdater implements OnModuleInit {\n protected static override logger: Logger = new Logger(AccessiDatabaseUpdater.name);\n\r\n private static readonly updates: AccessiUpdateStep[] = [\r\n {\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"1.1.0\",\r\n description: \"Aggiunge filtro postazione, colonna IDXPOS e menu verifica RFID\",\n apply: async (options) => {\n await AccessiDatabaseUpdater.upsertFiltroTipo(options, 20, \"POSTAZIONE\", \"IDXPOS\", undefined);\n await AccessiDatabaseUpdater.ensureColumn(\n options,\n \"FILTRI\",\r\n \"IDXPOS SMALLINT\",\r\n \"IDXPOS\",\n \"idx della postazione nella tabella ANTENNE_POS di PROLAV\"\n );\n await AccessiDatabaseUpdater.upsertMenuGroup(options, {\n CODGRP: \"F\",\n DESGRP: \"Verifica RFID\",\n FLGENABLED: 1,\n ORDINE: 10,\n NOMECAMPO: \"FLGPIANARFID\",\n });\n await AccessiDatabaseUpdater.upsertMenu(options, {\n CODMNU: \"MNUVERRFID\",\n DESMNU: \"Verifica RFID\",\n CODGRP: \"F\",\n FLGENABLED: 1,\r\n ICON: \"hardware-chip-outline\",\r\n ORDINE: 10,\r\n CODTIP: \"M\",\r\n PAGINA: \"/verifica-rfid\",\r\n RIFMENU: null,\r\n });\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.0\",\r\n toVersion: \"1.1.1\",\r\n description: \"Aggiunge FLGENABLED su FILTRI_TIPO\",\r\n apply: async (options) => {\r\n const columnCreated = await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"FILTRI_TIPO\",\r\n \"FLGENABLED SMALLINT DEFAULT 1 NOT NULL\",\r\n \"FLGENABLED\"\r\n );\r\n\r\n if (!columnCreated) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"UPDATE FILTRI_TIPO SET FLGENABLED = 1 WHERE FLGENABLED IS NULL\"\r\n );\r\n }\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.1\",\r\n toVersion: \"1.1.2\",\r\n description: \"Aggiunge filtro vettore e colonna CODVET\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.upsertFiltroTipo(options, 30, \"VETTORE\", \"CODVET\", 1);\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"FILTRI\",\r\n \"CODVET INTEGER\",\r\n \"CODVET\",\r\n \"CODICE DEL VETTORE DA INSERIRE SE COME FILTRO HA 30\"\r\n );\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.2\",\r\n toVersion: \"1.1.3\",\r\n description: \"Aggiunge FLGADMINCONFIG e inizializza PARAMETRI\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"UTENTI_CONFIG\",\r\n \"FLGADMINCONFIG SMALLINT DEFAULT 0\",\r\n \"FLGADMINCONFIG\",\r\n \"flag utente configuratore dei menu amministratore\"\r\n );\r\n await AccessiDatabaseUpdater.createParametersTable(options.databaseOptions);\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.3\",\r\n toVersion: \"1.1.4\",\r\n description: \"Aggiunge sequence e trigger per RUOLI\",\r\n apply: async (options) => {\r\n if (!(await AccessiDatabaseUpdater.generatorExists(options.databaseOptions, \"GEN_RUOLI_ID\"))) {\r\n await Orm.execute(options.databaseOptions, \"CREATE SEQUENCE GEN_RUOLI_ID\");\r\n }\r\n\r\n if (!(await AccessiDatabaseUpdater.triggerExists(options.databaseOptions, \"RUOLI_BI\"))) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `CREATE TRIGGER RUOLI_BI FOR RUOLI\r\nACTIVE BEFORE INSERT POSITION 0\r\nAS\r\nBEGIN\r\n IF (NEW.CODRUO IS NULL) THEN\r\n NEW.CODRUO = GEN_ID(GEN_RUOLI_ID,1);\r\nEND`\r\n );\r\n }\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.4\",\r\n toVersion: \"1.1.5\",\r\n description: \"Aggiunge NOTE su MENU\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"MENU\",\r\n \"NOTE VARCHAR(1000)\",\r\n \"NOTE\"\r\n );\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.5\",\r\n toVersion: \"1.1.6\",\r\n description: \"Aggiunge NUMMAC su UTENTI_CONFIG\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"UTENTI_CONFIG\",\r\n \"NUMMAC INTEGER\",\r\n \"NUMMAC\",\r\n 'Numero macchina DESPOST PROLAV'\r\n );\r\n },\r\n },\r\n ];\r\n\r\n constructor(\r\n @Inject(\"ACCESSI_OPTIONS\") private readonly accessiOptions: AccessiOptions\r\n ) {\r\n super();\r\n }\r\n\r\n async onModuleInit(): Promise<void> {\n if (this.accessiOptions.autoUpdateDatabase === false) {\n AccessiDatabaseUpdater.logger.info(\"Aggiornamento automatico database accessi disabilitato da configurazione.\");\n return;\n }\n\n AccessiDatabaseUpdater.logger.info(\"Avvio updater database accessi.\");\n await AccessiDatabaseUpdater.run(this.accessiOptions);\n AccessiDatabaseUpdater.logger.info(\"Updater database accessi completato.\");\n }\n\n static async run(options: AccessiOptions): Promise<void> {\n const startedAt = performance.now();\n this.logger.info(\n `Verifica schema accessi su ${options.databaseOptions.host ?? \"?\"}:${options.databaseOptions.port ?? \"?\"} -> ${options.databaseOptions.database ?? \"?\"}`\n );\n await this.createParametersTable(options.databaseOptions);\n this.logger.info(\"Tabella PARAMETRI verificata.\");\n\n const currentVersion = await this.getDatabaseVersion(options.databaseOptions);\n const currentIndex = this.updates.findIndex(\r\n (update) => update.toVersion === currentVersion\r\n );\r\n const startIndex = currentIndex >= 0 ? currentIndex + 1 : 0;\r\n\r\n if (currentVersion && currentIndex === this.updates.length - 1) {\r\n this.logger.info(`Database accessi gia' all'ultima versione disponibile (${currentVersion}).`);\r\n } else if (currentVersion && currentIndex >= 0) {\r\n this.logger.info(`Database accessi rilevato alla versione ${currentVersion}.`);\r\n } else if (currentVersion) {\r\n this.logger.warning(\r\n `Versione database accessi non riconosciuta (${currentVersion}). Verifico tutti gli update idempotenti.`\r\n );\r\n } else {\r\n this.logger.warning(\r\n \"Versione database accessi assente. Verifico tutti gli update idempotenti.\"\r\n );\r\n }\r\n\r\n for (let index = startIndex; index < this.updates.length; index++) {\n const update = this.updates[index];\n const stepStartedAt = performance.now();\n this.logger.info(\n `Applico aggiornamento accessi ${update.fromVersion} -> ${update.toVersion}: ${update.description}`\n );\n await update.apply(options);\n await this.setDatabaseVersion(options.databaseOptions, update.toVersion);\n this.logger.info(\n `Aggiornamento accessi ${update.toVersion} completato in ${(performance.now() - stepStartedAt).toFixed(2)} ms`\n );\n }\n\n this.logger.info(\n `Verifica/aggiornamento database accessi completato in ${(performance.now() - startedAt).toFixed(2)} ms`\n );\n }\n\r\n static async getCurrentVersion(options: AccessiOptions): Promise<string | null> {\r\n return await this.getDatabaseVersion(options.databaseOptions);\r\n }\r\n\r\n static getLatestVersion(): string {\r\n return this.updates[this.updates.length - 1]?.toVersion ?? \"0.0.0\";\r\n }\r\n\r\n private static async ensureColumn(\r\n options: AccessiOptions,\r\n tableName: string,\r\n columnDefinition: string,\r\n columnName: string,\r\n comment?: string\r\n ): Promise<boolean> {\r\n const exists = await this.columnExists(\r\n options.databaseOptions,\r\n tableName,\r\n columnName\r\n );\r\n\r\n if (!exists) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `ALTER TABLE ${tableName} ADD ${columnDefinition}`\r\n );\r\n }\r\n\r\n if (comment) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `COMMENT ON COLUMN ${tableName}.${columnName} IS '${comment.replace(/'/g, \"''\")}'`\r\n );\r\n }\r\n\r\n return !exists;\r\n }\r\n\r\n private static async upsertFiltroTipo(\r\n options: AccessiOptions,\r\n tipfil: number,\r\n desfil: string,\r\n fldfil: string,\r\n flgEnabled?: number\r\n ): Promise<void> {\r\n const hasEnabledColumn = await this.columnExists(\r\n options.databaseOptions,\r\n \"FILTRI_TIPO\",\r\n \"FLGENABLED\"\r\n );\r\n\r\n const existing = await Orm.query(\r\n options.databaseOptions,\r\n \"SELECT TIPFIL FROM FILTRI_TIPO WHERE TIPFIL = ?\",\r\n [tipfil]\r\n );\r\n\r\n if (existing.length === 0) {\r\n if (hasEnabledColumn && flgEnabled !== undefined) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"INSERT INTO FILTRI_TIPO (TIPFIL, DESFIL, FLDFIL, FLGENABLED) VALUES (?, ?, ?, ?)\",\r\n [tipfil, desfil, fldfil, flgEnabled]\r\n );\r\n return;\r\n }\r\n\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"INSERT INTO FILTRI_TIPO (TIPFIL, DESFIL, FLDFIL) VALUES (?, ?, ?)\",\r\n [tipfil, desfil, fldfil]\r\n );\r\n return;\r\n }\r\n\r\n if (hasEnabledColumn && flgEnabled !== undefined) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"UPDATE FILTRI_TIPO SET DESFIL = ?, FLDFIL = ?, FLGENABLED = COALESCE(FLGENABLED, ?) WHERE TIPFIL = ?\",\r\n [desfil, fldfil, flgEnabled, tipfil]\r\n );\r\n return;\r\n }\r\n\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"UPDATE FILTRI_TIPO SET DESFIL = ?, FLDFIL = ? WHERE TIPFIL = ?\",\r\n [desfil, fldfil, tipfil]\r\n );\r\n }\r\n\r\n private static async upsertMenu(\n options: AccessiOptions,\n menu: {\n CODMNU: string;\r\n DESMNU: string;\r\n CODGRP: string;\r\n FLGENABLED: number;\r\n ICON: string;\r\n ORDINE: number;\r\n CODTIP: string;\r\n PAGINA: string;\r\n RIFMENU: string | null;\r\n }\n ): Promise<void> {\n const existing = await Orm.query(\r\n options.databaseOptions,\r\n \"SELECT CODMNU FROM MENU WHERE CODMNU = ?\",\r\n [menu.CODMNU]\r\n );\r\n\r\n if (existing.length === 0) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `INSERT INTO MENU (CODMNU, DESMNU, CODGRP, FLGENABLED, ICON, ORDINE, CODTIP, PAGINA, RIFMENU)\r\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,\r\n [\r\n menu.CODMNU,\r\n menu.DESMNU,\r\n menu.CODGRP,\r\n menu.FLGENABLED,\r\n menu.ICON,\r\n menu.ORDINE,\r\n menu.CODTIP,\r\n menu.PAGINA,\r\n menu.RIFMENU,\r\n ]\r\n );\r\n return;\r\n }\r\n\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `UPDATE MENU\r\n SET DESMNU = ?,\r\n CODGRP = ?,\r\n FLGENABLED = COALESCE(FLGENABLED, ?),\r\n ICON = ?,\r\n ORDINE = ?,\r\n CODTIP = ?,\r\n PAGINA = ?,\r\n RIFMENU = ?\r\n WHERE CODMNU = ?`,\r\n [\r\n menu.DESMNU,\r\n menu.CODGRP,\r\n menu.FLGENABLED,\r\n menu.ICON,\r\n menu.ORDINE,\r\n menu.CODTIP,\r\n menu.PAGINA,\r\n menu.RIFMENU,\r\n menu.CODMNU,\r\n ]\n );\n }\n\n private static async upsertMenuGroup(\n options: AccessiOptions,\n menuGroup: {\n CODGRP: string;\n DESGRP: string;\n FLGENABLED: number;\n ORDINE: number;\n NOMECAMPO: string | null;\n }\n ): Promise<void> {\n const existing = await Orm.query(\n options.databaseOptions,\n \"SELECT CODGRP FROM MENU_GRP WHERE CODGRP = ?\",\n [menuGroup.CODGRP]\n );\n\n if (existing.length === 0) {\n await Orm.execute(\n options.databaseOptions,\n `INSERT INTO MENU_GRP (CODGRP, DESGRP, FLGENABLED, ORDINE, NOMECAMPO)\n VALUES (?, ?, ?, ?, ?)`,\n [\n menuGroup.CODGRP,\n menuGroup.DESGRP,\n menuGroup.FLGENABLED,\n menuGroup.ORDINE,\n menuGroup.NOMECAMPO,\n ]\n );\n return;\n }\n\n await Orm.execute(\n options.databaseOptions,\n `UPDATE MENU_GRP\n SET DESGRP = ?,\n FLGENABLED = COALESCE(FLGENABLED, ?),\n ORDINE = ?,\n NOMECAMPO = ?\n WHERE CODGRP = ?`,\n [\n menuGroup.DESGRP,\n menuGroup.FLGENABLED,\n menuGroup.ORDINE,\n menuGroup.NOMECAMPO,\n menuGroup.CODGRP,\n ]\n );\n }\n}\n"]}
|
|
@@ -3,6 +3,7 @@ import { AccessiOptions } from "./AccessiModule";
|
|
|
3
3
|
export declare function initializeAccessiModule(app: Application, options: AccessiOptions): Promise<void>;
|
|
4
4
|
export { AccessiModule } from "./AccessiModule";
|
|
5
5
|
export { AccessiDatabaseUpdater } from "./database-updates/AccessiDatabaseUpdater";
|
|
6
|
+
export type { AccessiOptions, EmailOptions, JwtOptions, ExtensionFieldsOptions, PublicAuthRateLimitOptions, PublicAuthRateLimitRuleOptions } from "./AccessiModule";
|
|
6
7
|
export * from "./Dtos";
|
|
7
8
|
export { authorizeAccessi, authenticateGen } from "./middleware/authenticateGen";
|
|
8
9
|
export { accessiRequirement } from "./middleware/accessiRequirements";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/accessi-module/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/accessi-module/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Application } from \"express\";\r\nimport { ValidationPipe } from \"@nestjs/common\";\r\nimport { NestFactory } from \"@nestjs/core\";\r\nimport { ExpressAdapter } from \"@nestjs/platform-express\";\r\nimport { AccessiModule, AccessiOptions } from \"./AccessiModule\";\r\nimport { Logger } from \"../Logger\";\r\nimport { AuthService } from \"./Services/AuthService/AuthService\";\r\nimport {\n beginAccessiAuthInitialization,\n failAccessiAuthInitialization,\n AuthenticateGenService,\n setAccessiAuthService\n} from \"./middleware/authenticateGen\";\n\nfunction describeDatabaseTarget(options: AccessiOptions): string {\n const dbOptions = options.databaseOptions as {\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n };\n\n return `${dbOptions.host ?? \"?\"}:${dbOptions.port ?? \"?\"} -> ${dbOptions.database ?? \"?\"} as ${dbOptions.user ?? \"?\"}`;\n}\n\nexport async function initializeAccessiModule(app: Application, options: AccessiOptions) {\n const logger: Logger = new Logger(\"initializeAccessiModule\");\n beginAccessiAuthInitialization();\n const startedAt = performance.now();\n\n try {\n logger.info(\"Inizializzazione modulo accessi avviata.\");\n logger.info(`Target database accessi: ${describeDatabaseTarget(options)}`);\n logger.info(\n `Configurazione accessi: autoUpdateDatabase=${options.autoUpdateDatabase !== false}, legacyPasswordMigrationOnStartup=${options.legacyPasswordMigrationOnStartup !== false}`\n );\n // Creiamo un'istanza Express separata per NestJS\n const nestExpressInstance = new ExpressAdapter(app);\n\n // Creiamo l'app NestJS attaccata a Express\n const nestApp = await NestFactory.create(AccessiModule.forRoot(options), nestExpressInstance, {\n bufferLogs: true\n });\n logger.info(\"Applicazione Nest accessi creata.\");\n\n nestApp.enableCors();\n nestApp.useGlobalPipes(\n new ValidationPipe({\n whitelist: true,\r\n forbidNonWhitelisted: true,\r\n transform: true,\r\n transformOptions: {\r\n enableImplicitConversion: true,\r\n },\r\n }),\r\n );\r\n\r\n nestApp.setGlobalPrefix('api', {\n exclude: ['/swagger', '/swagger/(.*)']\n });\n\n // Note: Swagger setup is now handled by the unified module\n logger.info(\"Avvio init del modulo accessi.\");\n await nestApp.init();\n logger.info(\"Init del modulo accessi completata.\");\n if (options.legacyPasswordMigrationOnStartup !== false) {\n logger.info(\"Avvio migrazione password legacy accessi.\");\n const passwordMigrationService = nestApp.get(AuthService);\n await passwordMigrationService.migrateLegacyEncryptedPasswords();\n logger.info(\"Migrazione password legacy accessi completata.\");\n }\n\n const accessiAuthService = nestApp.get(AuthenticateGenService);\n app.locals.accessiAuthService = accessiAuthService;\n setAccessiAuthService(accessiAuthService);\n const elapsedMs = performance.now() - startedAt;\n logger.info(`Accessi initialized. Tempo totale bootstrap: ${elapsedMs.toFixed(2)} ms`);\n\n } catch (error) {\n failAccessiAuthInitialization(error);\n logger.error(\"Errore in initialize AccessiModule:\", error);\n throw error;\r\n }\r\n}\r\n\r\nexport { AccessiModule } from \"./AccessiModule\";\nexport { AccessiDatabaseUpdater } from \"./database-updates/AccessiDatabaseUpdater\";\nexport type { AccessiOptions, EmailOptions, JwtOptions, ExtensionFieldsOptions, PublicAuthRateLimitOptions, PublicAuthRateLimitRuleOptions } from \"./AccessiModule\";\nexport * from \"./Dtos\";\nexport {\r\n authorizeAccessi,\r\n authenticateGen\r\n} from \"./middleware/authenticateGen\";\r\nexport { accessiRequirement } from \"./middleware/accessiRequirements\";\r\nexport type {\r\n AccessiAuthorizationOptions,\r\n AccessiRequirementNode,\r\n AccessiCustomRequirementContext,\r\n AccessiCustomRequirementHandler\r\n} from \"./middleware/accessiRequirements\";\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AllegatiModule.js","sourceRoot":"","sources":["../../src/allegati-module/AllegatiModule.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAA+D;AAC/D,gFAA6E;AAC7E,yEAAsE;AAc/D,IAAM,cAAc,sBAApB,MAAM,cAAc;IAEvB,MAAM,CAAC,OAAO,CAAC,OAAwB;QACnC,OAAO;YACH,MAAM,EAAE,gBAAc;YACtB,SAAS,EAAE;gBACP;oBACI,OAAO,EAAE,kBAAkB;oBAC3B,QAAQ,EAAE,OAAO;iBACpB;gBACD,iCAAe;aAClB;YACD,OAAO,EAAE,CAAC,kBAAkB,EAAE,iCAAe,CAAC;SACjD,CAAC;IACN,CAAC;CACJ,CAAA;AAfY,wCAAc;yBAAd,cAAc;IAN1B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACJ,WAAW,EAAE,CAAC,uCAAkB,CAAC;QACjC,SAAS,EAAE,CAAC,iCAAe,CAAC;QAC5B,OAAO,EAAE,CAAC,iCAAe,CAAC;KAC7B,CAAC;GACW,cAAc,CAe1B","sourcesContent":["import { DynamicModule, Global, Module } from \"@nestjs/common\";\r\nimport { AllegatiService } from \"./Services/AllegatiService/AllegatiService\";\r\nimport { AllegatiController } from \"./Controllers/AllegatiController\";\r\nimport { Options } from \"
|
|
1
|
+
{"version":3,"file":"AllegatiModule.js","sourceRoot":"","sources":["../../src/allegati-module/AllegatiModule.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAA+D;AAC/D,gFAA6E;AAC7E,yEAAsE;AAc/D,IAAM,cAAc,sBAApB,MAAM,cAAc;IAEvB,MAAM,CAAC,OAAO,CAAC,OAAwB;QACnC,OAAO;YACH,MAAM,EAAE,gBAAc;YACtB,SAAS,EAAE;gBACP;oBACI,OAAO,EAAE,kBAAkB;oBAC3B,QAAQ,EAAE,OAAO;iBACpB;gBACD,iCAAe;aAClB;YACD,OAAO,EAAE,CAAC,kBAAkB,EAAE,iCAAe,CAAC;SACjD,CAAC;IACN,CAAC;CACJ,CAAA;AAfY,wCAAc;yBAAd,cAAc;IAN1B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACJ,WAAW,EAAE,CAAC,uCAAkB,CAAC;QACjC,SAAS,EAAE,CAAC,iCAAe,CAAC;QAC5B,OAAO,EAAE,CAAC,iCAAe,CAAC;KAC7B,CAAC;GACW,cAAc,CAe1B","sourcesContent":["import { DynamicModule, Global, Module } from \"@nestjs/common\";\r\nimport { AllegatiService } from \"./Services/AllegatiService/AllegatiService\";\r\nimport { AllegatiController } from \"./Controllers/AllegatiController\";\r\nimport { Options } from \"node-firebird\";\nimport { Logger } from \"../Logger\";\r\n\r\nexport interface AllegatiOptions {\r\n databaseOptions: Options;\r\n}\r\n\r\n@Global()\r\n@Module({\r\n controllers: [AllegatiController],\r\n providers: [AllegatiService],\r\n exports: [AllegatiService],\r\n})\r\nexport class AllegatiModule {\r\n\r\n static forRoot(options: AllegatiOptions): DynamicModule {\r\n return {\r\n module: AllegatiModule,\r\n providers: [\r\n {\r\n provide: 'ALLEGATI_OPTIONS',\r\n useValue: options,\r\n },\r\n AllegatiService,\r\n ],\r\n exports: ['ALLEGATI_OPTIONS', AllegatiService],\r\n };\r\n }\r\n}\n"]}
|
|
@@ -1,17 +1,24 @@
|
|
|
1
|
-
import { Options } from "
|
|
1
|
+
import type { Options } from "node-firebird";
|
|
2
2
|
export type FirebirdWireCryptMode = "disabled" | "enabled" | "required";
|
|
3
|
-
export type FirebirdAuthPlugin = "Legacy_Auth" | "Srp" | "Srp256";
|
|
3
|
+
export type FirebirdAuthPlugin = "Legacy_Auth" | "Srp" | "Srp256" | "Srp384" | "Srp512";
|
|
4
|
+
export type FirebirdDriverStrategy = "modern";
|
|
4
5
|
export type FirebirdOptions = Options & {
|
|
5
|
-
wireCrypt?: FirebirdWireCryptMode;
|
|
6
|
+
wireCrypt?: FirebirdWireCryptMode | number;
|
|
6
7
|
pluginName?: FirebirdAuthPlugin;
|
|
7
8
|
authPlugins?: FirebirdAuthPlugin[];
|
|
8
9
|
connectTimeoutMs?: number;
|
|
9
|
-
connectTimeout?: number;
|
|
10
10
|
compatibilityProbeTimeoutMs?: number;
|
|
11
11
|
compatibilityTotalTimeoutMs?: number;
|
|
12
|
+
firebirdDriver?: FirebirdDriverStrategy;
|
|
13
|
+
};
|
|
14
|
+
type FirebirdErrorContext = {
|
|
15
|
+
stage: "attach" | "query" | "execute" | "transaction";
|
|
16
|
+
sql?: string;
|
|
12
17
|
};
|
|
13
18
|
export declare function normalizeFirebirdOptions(options: Options): FirebirdOptions;
|
|
14
|
-
export declare function buildFirebirdCompatibilityCandidates(options: Options): FirebirdOptions[];
|
|
15
|
-
export declare function shouldRetryFirebirdCompatibility(error: unknown): boolean;
|
|
16
19
|
export declare function describeFirebirdCompatibilityOptions(options: Options): string;
|
|
20
|
+
export declare function enhanceFirebirdError(error: unknown, options: Options, context: FirebirdErrorContext): Error;
|
|
21
|
+
export declare function buildFirebirdCompatibilityCandidates(options: Options): FirebirdOptions[];
|
|
22
|
+
export declare function shouldRetryFirebirdCompatibility(): boolean;
|
|
17
23
|
export declare function ensureEsNodeFirebirdCompatibilityPatch(): void;
|
|
24
|
+
export {};
|