2025-04-22 17:16:41 +03:00

67 lines
1.6 KiB
TypeScript

import { Totp, generateSecret } from 'time2fa';
import options from './options.js';
import totpEncryptionService from './encryption/totp_encryption.js';
function isTotpEnabled(): boolean {
return options.getOptionOrNull('mfaEnabled') === "true" &&
options.getOptionOrNull('mfaMethod') === "totp" &&
totpEncryptionService.isTotpSecretSet();
}
function createSecret(): { success: boolean; message?: string } {
try {
const secret = generateSecret();
totpEncryptionService.setTotpSecret(secret);
return {
success: true,
message: secret
};
} catch (e) {
console.error('Failed to create TOTP secret:', e);
return {
success: false,
message: e instanceof Error ? e.message : 'Unknown error occurred'
};
}
}
function getTotpSecret(): string | null {
return totpEncryptionService.getTotpSecret();
}
function checkForTotpSecret(): boolean {
return totpEncryptionService.isTotpSecretSet();
}
function validateTOTP(submittedPasscode: string): boolean {
const secret = getTotpSecret();
if (!secret) return false;
try {
return Totp.validate({
passcode: submittedPasscode,
secret: secret.trim()
});
} catch (e) {
console.error('Failed to validate TOTP:', e);
return false;
}
}
function resetTotp(): void {
totpEncryptionService.resetTotpSecret();
options.setOption('mfaEnabled', 'false');
options.setOption('mfaMethod', '');
}
export default {
isTotpEnabled,
createSecret,
getTotpSecret,
checkForTotpSecret,
validateTOTP,
resetTotp
};