diff --git a/src/Core/Utilities/CoreHelpers.cs b/src/Core/Utilities/CoreHelpers.cs index a999271da..01c6802cf 100644 --- a/src/Core/Utilities/CoreHelpers.cs +++ b/src/Core/Utilities/CoreHelpers.cs @@ -1,4 +1,5 @@ using Bit.Core.Models.Domain; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; @@ -179,5 +180,25 @@ namespace Bit.Core.Utilities } return dict; } + + public static string SerializeJson(object obj, bool ignoreNulls = false) + { + var jsonSerializationSettings = new JsonSerializerSettings(); + if(ignoreNulls) + { + jsonSerializationSettings.NullValueHandling = NullValueHandling.Ignore; + } + return JsonConvert.SerializeObject(obj, jsonSerializationSettings); + } + + public static T DeserializeJson(string json, bool ignoreNulls = false) + { + var jsonSerializationSettings = new JsonSerializerSettings(); + if(ignoreNulls) + { + jsonSerializationSettings.NullValueHandling = NullValueHandling.Ignore; + } + return JsonConvert.DeserializeObject(json, jsonSerializationSettings); + } } } diff --git a/src/iOS.Extension/Models/FillScript.cs b/src/iOS.Core/Models/FillScript.cs similarity index 99% rename from src/iOS.Extension/Models/FillScript.cs rename to src/iOS.Core/Models/FillScript.cs index 0364d14dd..4353e1a16 100644 --- a/src/iOS.Extension/Models/FillScript.cs +++ b/src/iOS.Core/Models/FillScript.cs @@ -4,7 +4,7 @@ using System.Linq; using Newtonsoft.Json; using System.Text.RegularExpressions; -namespace Bit.iOS.Extension.Models +namespace Bit.iOS.Core.Models { public class FillScript { @@ -141,6 +141,17 @@ namespace Bit.iOS.Extension.Models SetFillScriptForFocus(filledFields); } + [JsonProperty(PropertyName = "script")] + public List> Script { get; set; } = new List>(); + [JsonProperty(PropertyName = "documentUUID")] + public object DocumentUUID { get; set; } + [JsonProperty(PropertyName = "properties")] + public object Properties { get; set; } = new object(); + [JsonProperty(PropertyName = "options")] + public object Options { get; set; } = new { animate = false }; + [JsonProperty(PropertyName = "metadata")] + public object MetaData { get; set; } = new object(); + private PageDetails.Field FindUsernameField(PageDetails pageDetails, PageDetails.Field passwordField, bool canBeHidden, bool checkForm) { @@ -261,16 +272,5 @@ namespace Bit.iOS.Extension.Models { return Regex.Replace(label, @"(?:\r\n|\r|\n)", string.Empty).Trim().ToLower(); } - - [JsonProperty(PropertyName = "script")] - public List> Script { get; set; } = new List>(); - [JsonProperty(PropertyName = "documentUUID")] - public object DocumentUUID { get; set; } - [JsonProperty(PropertyName = "properties")] - public object Properties { get; set; } = new object(); - [JsonProperty(PropertyName = "options")] - public object Options { get; set; } = new { animate = false }; - [JsonProperty(PropertyName = "metadata")] - public object MetaData { get; set; } = new object(); } } diff --git a/src/iOS.Extension/Models/PageDetails.cs b/src/iOS.Core/Models/PageDetails.cs similarity index 97% rename from src/iOS.Extension/Models/PageDetails.cs rename to src/iOS.Core/Models/PageDetails.cs index 004173bfc..02d136325 100644 --- a/src/iOS.Extension/Models/PageDetails.cs +++ b/src/iOS.Core/Models/PageDetails.cs @@ -1,9 +1,8 @@ using Newtonsoft.Json; -using System; using System.Collections.Generic; using System.Linq; -namespace Bit.iOS.Extension.Models +namespace Bit.iOS.Core.Models { public class PageDetails { @@ -48,5 +47,4 @@ namespace Bit.iOS.Extension.Models public string Form { get; set; } } } - } diff --git a/src/iOS.Core/iOS.Core.csproj b/src/iOS.Core/iOS.Core.csproj index 8f6a331b9..b046414ec 100644 --- a/src/iOS.Core/iOS.Core.csproj +++ b/src/iOS.Core/iOS.Core.csproj @@ -63,6 +63,8 @@ + + diff --git a/src/iOS.Extension/LoadingViewController.cs b/src/iOS.Extension/LoadingViewController.cs index 379bbb647..312323032 100644 --- a/src/iOS.Extension/LoadingViewController.cs +++ b/src/iOS.Extension/LoadingViewController.cs @@ -19,8 +19,6 @@ namespace Bit.iOS.Extension public partial class LoadingViewController : ExtendedUIViewController { private Context _context = new Context(); - private readonly JsonSerializerSettings _jsonSettings = - new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; public LoadingViewController(IntPtr handle) : base(handle) @@ -140,7 +138,7 @@ namespace Bit.iOS.Extension if(_context.ProviderType == UTType.PropertyList) { var fillScript = new FillScript(_context.Details, username, password, fields); - var scriptJson = JsonConvert.SerializeObject(fillScript, _jsonSettings); + var scriptJson = CoreHelpers.SerializeJson(fillScript, true); var scriptDict = new NSDictionary(Constants.AppExtensionWebViewPageFillScript, scriptJson); itemData = new NSDictionary(NSJavaScriptExtension.FinalizeArgumentKey, scriptDict); } @@ -154,7 +152,7 @@ namespace Bit.iOS.Extension || _context.ProviderType == Constants.UTTypeAppExtensionFillWebViewAction) { var fillScript = new FillScript(_context.Details, username, password, fields); - var scriptJson = JsonConvert.SerializeObject(fillScript, _jsonSettings); + var scriptJson = CoreHelpers.SerializeJson(fillScript, true); itemData = new NSDictionary(Constants.AppExtensionWebViewPageFillScript, scriptJson); } else if(_context.ProviderType == Constants.UTTypeAppExtensionSaveLoginAction) diff --git a/src/iOS.Extension/iOS.Extension.csproj b/src/iOS.Extension/iOS.Extension.csproj index e575f386b..5b3de6c9d 100644 --- a/src/iOS.Extension/iOS.Extension.csproj +++ b/src/iOS.Extension/iOS.Extension.csproj @@ -89,8 +89,6 @@ - - PasswordGeneratorViewController.cs