From ff49d041beb1659265bf7ed7b1bc2432830167cc Mon Sep 17 00:00:00 2001 From: Federico Maccaroni Date: Thu, 21 Mar 2024 13:56:37 -0300 Subject: [PATCH] [PM-6655] Add username empty fallback on passkey (#3101) * PM-6655 Added fallback "Unknown account" to passkey username and moved it so it can be shared with Android * PM-6655 Improved code lines formatting --- src/Core/Models/View/LoginView.cs | 18 ++++++++++++++---- .../Localization/AppResources.Designer.cs | 9 +++++++++ .../Resources/Localization/AppResources.resx | 3 +++ src/Core/Utilities/StringExtensions.cs | 5 +++-- src/iOS.Core/Utilities/ASHelpers.cs | 14 ++------------ 5 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/Core/Models/View/LoginView.cs b/src/Core/Models/View/LoginView.cs index 9993c2f11..9c9bafbaf 100644 --- a/src/Core/Models/View/LoginView.cs +++ b/src/Core/Models/View/LoginView.cs @@ -1,8 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Bit.Core.Enums; +using Bit.Core.Enums; using Bit.Core.Models.Domain; +using Bit.Core.Resources.Localization; +using Bit.Core.Utilities; namespace Bit.Core.Models.View { @@ -40,4 +39,15 @@ namespace Bit.Core.Models.View }; } } + + public static class LoginViewExtensions + { + public static string GetMainFido2CredentialUsername(this LoginView loginView) + { + return loginView.MainFido2Credential.UserName + .FallbackOnNullOrWhiteSpace(loginView.MainFido2Credential.UserDisplayName) + .FallbackOnNullOrWhiteSpace(loginView.Username) + .FallbackOnNullOrWhiteSpace(AppResources.UnknownAccount); + } + } } diff --git a/src/Core/Resources/Localization/AppResources.Designer.cs b/src/Core/Resources/Localization/AppResources.Designer.cs index 0eb5f3bd0..557cd8d9f 100644 --- a/src/Core/Resources/Localization/AppResources.Designer.cs +++ b/src/Core/Resources/Localization/AppResources.Designer.cs @@ -7208,6 +7208,15 @@ namespace Bit.Core.Resources.Localization { } } + /// + /// Looks up a localized string similar to Unknown account. + /// + public static string UnknownAccount { + get { + return ResourceManager.GetString("UnknownAccount", resourceCulture); + } + } + /// /// Looks up a localized string similar to Unknown {0} error occurred.. /// diff --git a/src/Core/Resources/Localization/AppResources.resx b/src/Core/Resources/Localization/AppResources.resx index 65f596360..79731f3cb 100644 --- a/src/Core/Resources/Localization/AppResources.resx +++ b/src/Core/Resources/Localization/AppResources.resx @@ -2942,6 +2942,9 @@ Do you want to switch to this account? Passwords + + Unknown account + Set up auto-fill diff --git a/src/Core/Utilities/StringExtensions.cs b/src/Core/Utilities/StringExtensions.cs index a37dc9f49..5dd92be31 100644 --- a/src/Core/Utilities/StringExtensions.cs +++ b/src/Core/Utilities/StringExtensions.cs @@ -1,5 +1,4 @@ -using System; -using System.Globalization; +using System.Globalization; using System.Text; namespace Bit.Core.Utilities @@ -30,5 +29,7 @@ namespace Bit.Core.Utilities .ToString() .Normalize(NormalizationForm.FormC); } + + public static string FallbackOnNullOrWhiteSpace(this string s, string fallback) => string.IsNullOrWhiteSpace(s) ? fallback : s; } } diff --git a/src/iOS.Core/Utilities/ASHelpers.cs b/src/iOS.Core/Utilities/ASHelpers.cs index d04c8bdd1..6810df020 100644 --- a/src/iOS.Core/Utilities/ASHelpers.cs +++ b/src/iOS.Core/Utilities/ASHelpers.cs @@ -2,6 +2,7 @@ using Bit.Core.Abstractions; using Bit.Core.Enums; using Bit.Core.Models.View; +using Bit.Core.Resources.Localization; using Bit.Core.Services; using Bit.Core.Utilities; using Foundation; @@ -148,19 +149,8 @@ namespace Bit.iOS.Core.Utilities return null; } - var userName = cipher.Login.MainFido2Credential.UserName; - if (string.IsNullOrWhiteSpace(userName)) - { - userName = cipher.Login.MainFido2Credential.UserDisplayName; - - if (string.IsNullOrWhiteSpace(userName)) - { - userName = cipher.Login.Username; - } - } - return new ASPasskeyCredentialIdentity(cipher.Login.MainFido2Credential.RpId, - userName, + cipher.Login.GetMainFido2CredentialUsername(), NSData.FromArray(cipher.Login.MainFido2Credential.CredentialId.GuidToRawFormat()), cipher.Login.MainFido2Credential.UserHandle, cipher.Id);