From b35bb7a7a62fe4057036af2c69539f977ca40f6a Mon Sep 17 00:00:00 2001 From: Andre Rosado Date: Wed, 28 Dec 2022 15:40:09 +0000 Subject: [PATCH] PS-1174 - Validating if vault item name and subtitle without diacritics has a match on search --- src/Core/Services/SearchService.cs | 31 ++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/Core/Services/SearchService.cs b/src/Core/Services/SearchService.cs index 8a5b6ac7d..7f9931a7a 100644 --- a/src/Core/Services/SearchService.cs +++ b/src/Core/Services/SearchService.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; +using System.Text; using System.Threading; using System.Threading.Tasks; using Bit.Core.Abstractions; @@ -84,6 +86,9 @@ namespace Bit.Core.Services if (c.Name?.ToLower().Contains(query) ?? false) { matchedCiphers.Add(c); + }else if(RemoveDiacritics(c.Name)?.ToLower().Contains(query) ?? false) + { + lowPriorityMatchedCiphers.Add(c); } else if (query.Length >= 8 && c.Id.StartsWith(query)) { @@ -93,6 +98,10 @@ namespace Bit.Core.Services { lowPriorityMatchedCiphers.Add(c); } + else if (RemoveDiacritics(c.SubTitle)?.ToLower().Contains(query) ?? false) + { + lowPriorityMatchedCiphers.Add(c); + } else if (c.Login?.Uri?.ToLower()?.Contains(query) ?? false) { lowPriorityMatchedCiphers.Add(c); @@ -165,5 +174,27 @@ namespace Bit.Core.Services matchedSends.AddRange(lowPriorityMatchSends); return matchedSends; } + + private string RemoveDiacritics(string text) + { + if (string.IsNullOrWhiteSpace(text)) + { + return null; + } + + string formD = text.Normalize(NormalizationForm.FormD); + StringBuilder sb = new StringBuilder(); + + foreach (char ch in formD) + { + UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(ch); + if (uc != UnicodeCategory.NonSpacingMark) + { + sb.Append(ch); + } + } + + return sb.ToString().Normalize(NormalizationForm.FormC); + } } }