From fc5e287f1bc9f58d9503d8d88b58b1e251bd422d Mon Sep 17 00:00:00 2001 From: VPKSoft Date: Thu, 28 Dec 2023 16:47:41 +0200 Subject: [PATCH] Fix otpauth-URI generation makeOtpAuthKey function. --- package.json | 2 +- src/auth_exporter.ts | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 838f25b..e41c8ed 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gauth-decode", - "version": "0.1.0", + "version": "0.1.1", "description": "A package to decode Google Authenticator export data", "main": "./dist/index.js", "module": "./dist/index.mjs", diff --git a/src/auth_exporter.ts b/src/auth_exporter.ts index 5d67c0e..bb7866f 100644 --- a/src/auth_exporter.ts +++ b/src/auth_exporter.ts @@ -124,7 +124,15 @@ const decode = async (data: string) => { */ const makeOtpAuthKey = (otpData: OtpDataWithBase32, useBase32Secret: boolean = true) => { // TODO::Proper URI builder for OTP! - return `otpauth://totp/${otpData.name}?secret=${useBase32Secret ? otpData.secretBase32 : otpData.secret}&issuer=${otpData.issuer}`; + + // The name part should contain the issuer also, to fix this lets just change the issuer if they differ. + let issuerFromName = otpData.issuer; + const nameData = otpData.name.split(":"); + if (nameData.length === 2 && nameData[0] !== otpData.issuer) { + issuerFromName = nameData[0]; + } + + return `otpauth://totp/${otpData.name}?secret=${useBase32Secret ? otpData.secretBase32 : otpData.secret}&issuer=${issuerFromName}`; }; export type { OtpDataWithBase32 };