diff --git a/src/AliasVault.Api/Controllers/AuthController.cs b/src/AliasVault.Api/Controllers/AuthController.cs index 53d8591f9..c7c2d1767 100644 --- a/src/AliasVault.Api/Controllers/AuthController.cs +++ b/src/AliasVault.Api/Controllers/AuthController.cs @@ -168,7 +168,7 @@ public class AuthController(IDbContextFactory dbContextFac } // Verify 2-factor code. - var verifyResult = await userManager.VerifyTwoFactorTokenAsync(user, userManager.Options.Tokens.AuthenticatorTokenProvider, model.Code2Fa); + var verifyResult = await userManager.VerifyTwoFactorTokenAsync(user, userManager.Options.Tokens.AuthenticatorTokenProvider, model.Code2Fa.ToString()); if (!verifyResult) { // Increment failed login attempts in order to lock out the account when the limit is reached. diff --git a/src/AliasVault.Client/Auth/Pages/Login.razor b/src/AliasVault.Client/Auth/Pages/Login.razor index 8c1031819..8d80bb115 100644 --- a/src/AliasVault.Client/Auth/Pages/Login.razor +++ b/src/AliasVault.Client/Auth/Pages/Login.razor @@ -21,10 +21,9 @@
-
- +
@@ -58,7 +57,6 @@ else if (ShowLoginWithRecoveryCodeStep)
-
@@ -328,7 +326,7 @@ else var username = LoginModel.Username.ToLowerInvariant().Trim(); // Validate 2-factor auth code auth and login - var result = await Http.PostAsJsonAsync("api/v1/Auth/validate-2fa", new ValidateLoginRequest2Fa(username, LoginModel.RememberMe, ClientEphemeral.Public, ClientSession.Proof, LoginModel2Fa.TwoFactorCode)); + var result = await Http.PostAsJsonAsync("api/v1/Auth/validate-2fa", new ValidateLoginRequest2Fa(username, LoginModel.RememberMe, ClientEphemeral.Public, ClientSession.Proof, LoginModel2Fa.TwoFactorCode ?? 0)); var responseContent = await result.Content.ReadAsStringAsync(); if (!result.IsSuccessStatusCode) diff --git a/src/AliasVault.Client/Main/Components/Credentials/FormattedNote.razor b/src/AliasVault.Client/Main/Components/Credentials/FormattedNote.razor index 95ca9da68..3cff88e2b 100644 --- a/src/AliasVault.Client/Main/Components/Credentials/FormattedNote.razor +++ b/src/AliasVault.Client/Main/Components/Credentials/FormattedNote.razor @@ -6,12 +6,15 @@
@code { + /// + /// The notes to display. + /// [Parameter] public string Notes { get; set; } = ""; private static string ConvertUrlsToLinks(string text) { string urlPattern = @"(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})"; - return Regex.Replace(text, urlPattern, match => $"{match.Value}", RegexOptions.NonBacktracking); + return Regex.Replace(text, urlPattern, match => $"{match.Value}", RegexOptions.None, TimeSpan.FromMilliseconds(100)); } -} \ No newline at end of file +} diff --git a/src/Shared/AliasVault.Shared/Models/WebApi/Auth/LoginModel2Fa.cs b/src/Shared/AliasVault.Shared/Models/WebApi/Auth/LoginModel2Fa.cs index 512c0f408..e5fa6ab00 100644 --- a/src/Shared/AliasVault.Shared/Models/WebApi/Auth/LoginModel2Fa.cs +++ b/src/Shared/AliasVault.Shared/Models/WebApi/Auth/LoginModel2Fa.cs @@ -10,15 +10,16 @@ namespace AliasVault.Shared.Models.WebApi.Auth; using System.ComponentModel.DataAnnotations; /// -/// Login model for two factor authentication step using an authenticator code. +/// Login model for 2-factor authentication step using an authenticator code. /// public class LoginModel2Fa { /// - /// Gets or sets the two factor code. + /// Gets or sets the 2-factor code. /// [Required] - public string TwoFactorCode { get; set; } = null!; + [Display(Name = "Authenticator Code")] + public int? TwoFactorCode { get; set; } /// /// Gets or sets a value indicating whether the current machine should not be asked for 2FA the next time. diff --git a/src/Shared/AliasVault.Shared/Models/WebApi/Auth/ValidateLoginRequest2Fa.cs b/src/Shared/AliasVault.Shared/Models/WebApi/Auth/ValidateLoginRequest2Fa.cs index eb59c1409..9c4af5452 100644 --- a/src/Shared/AliasVault.Shared/Models/WebApi/Auth/ValidateLoginRequest2Fa.cs +++ b/src/Shared/AliasVault.Shared/Models/WebApi/Auth/ValidateLoginRequest2Fa.cs @@ -20,7 +20,7 @@ namespace AliasVault.Shared.Models.WebApi.Auth /// Client public ephemeral. /// Client session proof. /// 2-factor authentication code. - public ValidateLoginRequest2Fa(string username, bool rememberMe, string clientPublicEphemeral, string clientSessionProof, string code2Fa) + public ValidateLoginRequest2Fa(string username, bool rememberMe, string clientPublicEphemeral, string clientSessionProof, int code2Fa) : base(username, rememberMe, clientPublicEphemeral, clientSessionProof) { Code2Fa = code2Fa; @@ -29,6 +29,6 @@ namespace AliasVault.Shared.Models.WebApi.Auth /// /// Gets the 2-factor authentication code. /// - public string Code2Fa { get; } + public int Code2Fa { get; } } }