From af85ef0b4716b39408ab960f1a5460953188f62c Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Wed, 9 Apr 2025 08:34:42 +0200 Subject: [PATCH 1/4] types(services/sql): explicitly cast return value as type variable T instead of any previously the type variable was useless, because `const ret = (dbConnection.transaction(func) as any).deferred();` was inferred as "any". --- src/services/sql.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/sql.ts b/src/services/sql.ts index 72dd6a8e3..d135b54da 100644 --- a/src/services/sql.ts +++ b/src/services/sql.ts @@ -278,7 +278,7 @@ function transactional(func: (statement: Statement) => T) { ws.sendTransactionEntityChangesToAllClients(); } - return ret; + return ret as T; } catch (e) { console.warn("Got error ", e); const entityChangeIds = cls.getAndClearEntityChangeIds(); From eae68064e5e7aaef138264dc9f3ff0c3f4bbcab3 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Wed, 9 Apr 2025 08:41:55 +0200 Subject: [PATCH 2/4] types(recovery_codes): use sql.transactional Generics to simplify typings --- src/services/encryption/recovery_codes.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/services/encryption/recovery_codes.ts b/src/services/encryption/recovery_codes.ts index 7cca40744..9fb7d4d3c 100644 --- a/src/services/encryption/recovery_codes.ts +++ b/src/services/encryption/recovery_codes.ts @@ -27,7 +27,7 @@ function getRecoveryCodes() { return [] } - return sql.transactional(() => { + return sql.transactional(() => { const iv = Buffer.from(optionService.getOption('recoveryCodeInitialVector'), 'hex'); const securityKey = Buffer.from(optionService.getOption('recoveryCodeSecurityKey'), 'hex'); const encryptedRecoveryCodes = optionService.getOption('recoveryCodesEncrypted'); @@ -41,7 +41,7 @@ function getRecoveryCodes() { } function removeRecoveryCode(usedCode: string) { - const oldCodes: string[] = getRecoveryCodes(); + const oldCodes = getRecoveryCodes(); const today = new Date(); oldCodes[oldCodes.indexOf(usedCode)] = today.toJSON().replace(/-/g, '/'); setRecoveryCodes(oldCodes.toString()); @@ -55,7 +55,7 @@ function verifyRecoveryCode(recoveryCodeGuess: string) { const recoveryCodes = getRecoveryCodes(); let loginSuccess = false; - recoveryCodes.forEach((recoveryCode: string) => { + recoveryCodes.forEach((recoveryCode) => { if (recoveryCodeGuess === recoveryCode) { removeRecoveryCode(recoveryCode); loginSuccess = true; From 05917fd815fdc6c252ebb9abd648a63084387344 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Wed, 9 Apr 2025 09:21:20 +0200 Subject: [PATCH 3/4] fix(routes/api/recovery_codes): convert number into string fixes type error, as usedStatus is expecting string[] and "indexOf" returns a number --- src/routes/api/recovery_codes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/api/recovery_codes.ts b/src/routes/api/recovery_codes.ts index 848820981..a98e1e38c 100644 --- a/src/routes/api/recovery_codes.ts +++ b/src/routes/api/recovery_codes.ts @@ -47,7 +47,7 @@ function getUsedRecoveryCodes() { recoveryCodes.forEach((recoveryKey: string) => { if (dateRegex.test(recoveryKey)) usedStatus.push(recoveryKey); - else usedStatus.push(recoveryCodes.indexOf(recoveryKey)); + else usedStatus.push(String(recoveryCodes.indexOf(recoveryKey))); }); return { From 68ea84a2cb90cc2bcf80f936636b0daa1729d355 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Wed, 9 Apr 2025 09:24:28 +0200 Subject: [PATCH 4/4] refactor(routes/api/recovery_codes): use .map instead of .forEach it doesn't make sense to use a forEach here, when all we do is push values into an array => just use .map directly as it returns an array --- src/routes/api/recovery_codes.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/routes/api/recovery_codes.ts b/src/routes/api/recovery_codes.ts index a98e1e38c..78be09966 100644 --- a/src/routes/api/recovery_codes.ts +++ b/src/routes/api/recovery_codes.ts @@ -43,12 +43,10 @@ function getUsedRecoveryCodes() { const dateRegex = RegExp(/^\d{4}\/\d{2}\/\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z$/gm); const recoveryCodes = recovery_codes.getRecoveryCodes(); - const usedStatus: string[] = []; - recoveryCodes.forEach((recoveryKey: string) => { - if (dateRegex.test(recoveryKey)) usedStatus.push(recoveryKey); - else usedStatus.push(String(recoveryCodes.indexOf(recoveryKey))); - }); + const usedStatus = recoveryCodes.map(recoveryKey => { + return (dateRegex.test(recoveryKey)) ? recoveryKey : String(recoveryCodes.indexOf(recoveryKey)) + }) return { success: true,