diff --git a/setting/utils/queryParser.js b/setting/utils/queryParser.js index 98cff2d..a1a9ad9 100644 --- a/setting/utils/queryParser.js +++ b/setting/utils/queryParser.js @@ -2,39 +2,44 @@ import { TOTP } from "../../lib/totp-quickjs"; const otpScheme = "otpauth:/"; -export function getTOTPByLink(link){ - try{ - let args = link.split("/", otpScheme.length) - let type = args[2] //Returns 'hotp' or 'totp' - let issuer = args[3].split(':')[0]?.split('?')[0] //Returns issuer - let client = args[3].split(':')[1]?.split('?')[0] ?? args[3].split(':')[0]?.split('?')[0] //Returns client - let secret = args[3].split('secret=')[1]?.split('&')[0] //Returns secret - let period = args[3].split('period=')[1]?.split('&')[0] //Returns period - let digits = args[3].split('digits=')[1]?.split('&')[0] //Returns digits - let algorithm = args[3].split('algorithm=')[1]?.split('&')[0] //Returns algorithm - } - catch(err){ - throw new Error("Link is not valid") - } - if(type.toLowerCase() != 'totp') - throw new Error("Type is not valid, requires 'TOTP'") +export function getTOTPByLink(link) { + try { + let args = link.split("/", otpScheme.length); + let type = args[2]; //Returns 'hotp' or 'totp' + let issuer = args[3].split(":")[0]?.split("?")[0]; //Returns issuer + let client = + args[3].split(":")[1]?.split("?")[0] ?? + args[3].split(":")[0]?.split("?")[0]; //Returns client + let secret = args[3].split("secret=")[1]?.split("&")[0]; //Returns secret + let period = args[3].split("period=")[1]?.split("&")[0]; //Returns period + let digits = args[3].split("digits=")[1]?.split("&")[0]; //Returns digits + let algorithm = args[3].split("algorithm=")[1]?.split("&")[0]; //Returns algorithm - if(secret === undefined) - throw new Error("Secret not defined") + if (type.toLowerCase() != "totp") + throw new Error("Type is not valid, requires 'TOTP'"); - issuer = issuer.replace("%20", " ") - client = client.replace("%20", " ") + if (secret === undefined) throw new Error("Secret not defined"); - return new TOTP(secret, issuer, client, digits, period, 0, getHashType(algorithm)) + issuer = issuer.replace("%20", " "); + client = client.replace("%20", " "); + + return new TOTP( + secret, + issuer, + client, + digits, + period, + 0, + getHashType(algorithm) + ); + } catch (err) { + throw new Error("Link is not valid"); + } } -function getHashType(algorithm){ - if(algorithm == "SHA1") - return "SHA-1" - if(algorithm == "SHA256") - return "SHA-256" - if(algorithm == "SHA512") - return "SHA-512" - else - return null +function getHashType(algorithm) { + if (algorithm == "SHA1") return "SHA-1"; + if (algorithm == "SHA256") return "SHA-256"; + if (algorithm == "SHA512") return "SHA-512"; + else return "SHA-1"; }