Skip to content

Commit

Permalink
move otpauthurl generation
Browse files Browse the repository at this point in the history
  • Loading branch information
jamie-mh committed Nov 30, 2020
1 parent b6e4f94 commit 5de27a1
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 31 deletions.
30 changes: 30 additions & 0 deletions AuthenticatorPro/Source/Data/Authenticator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,36 @@ public static Authenticator FromOtpAuthUri(string uri)

return auth;
}

public string GetOtpAuthUrl()
{
var type = Type switch
{
AuthenticatorType.Hotp => "hotp",
AuthenticatorType.Totp => "totp",
_ => throw new ArgumentException()
};

var algorithm = Algorithm switch
{
OtpHashMode.Sha1 => "SHA1",
OtpHashMode.Sha256 => "SHA256",
OtpHashMode.Sha512 => "SHA512",
_ => throw new ArgumentException()
};

var issuerUsername = Username == "" ? Issuer : $"{Issuer}:{Username}";

var url =
$"otpauth://{type}/{Uri.EscapeDataString(issuerUsername)}?secret={Secret}&issuer={Uri.EscapeDataString(Issuer)}&algorithm={algorithm}&digits={Digits}";

if(Type == AuthenticatorType.Totp)
url += $"&period={Period}";
else if(Type == AuthenticatorType.Hotp)
url += $"&counter={Counter}";

return url;
}

public static string CleanSecret(string input)
{
Expand Down
32 changes: 1 addition & 31 deletions AuthenticatorPro/Source/Data/HtmlBackup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,36 +45,6 @@ private static async Task<string> GetTemplate(Context context)
}
}

private static string GetOtpAuthUrl(Authenticator auth)
{
var type = auth.Type switch
{
AuthenticatorType.Hotp => "hotp",
AuthenticatorType.Totp => "totp",
_ => throw new ArgumentException()
};

var algorithm = auth.Algorithm switch
{
OtpHashMode.Sha1 => "SHA1",
OtpHashMode.Sha256 => "SHA256",
OtpHashMode.Sha512 => "SHA512",
_ => throw new ArgumentException()
};

var issuerUsername = auth.Username == "" ? auth.Issuer : $"{auth.Issuer}:{auth.Username}";

var url =
$"otpauth://{type}/{Uri.EscapeDataString(issuerUsername)}?secret={auth.Secret}&issuer={Uri.EscapeDataString(auth.Issuer)}&algorithm={algorithm}&digits={auth.Digits}";

if(auth.Type == AuthenticatorType.Totp)
url += $"&period={auth.Period}";
else if(auth.Type == AuthenticatorType.Hotp)
url += $"&counter={auth.Counter}";

return url;
}

public static async Task<HtmlBackup> FromAuthenticatorList(Context context, List<Authenticator> authenticators)
{
var template = await GetTemplate(context);
Expand All @@ -96,7 +66,7 @@ async Task<string> GetQrCodeDataAsync(string url)

foreach(var auth in authenticators)
{
var url = GetOtpAuthUrl(auth);
var url = auth.GetOtpAuthUrl();
var qrCode = await GetQrCodeDataAsync(url);

itemsHtml.Append($@"
Expand Down

0 comments on commit 5de27a1

Please sign in to comment.