From e4cc2a0550ffe4b1eaee43d2b8cb44210b895331 Mon Sep 17 00:00:00 2001 From: Sven Geusens Date: Mon, 4 Sep 2023 14:24:37 +0200 Subject: [PATCH] Fix/in browser postman auth & editor config boolean serialization (#14739) * Add in-browser postman callback url * Added a jsonconverter for property editor configuration boolean values that are persisted as numbers and serialized as strings... --------- Co-authored-by: Sven Geusens --- .../Security/BackOfficeApplicationManager.cs | 2 +- .../Serialization/JsonBoolConverter.cs | 36 +++++++++++++++++++ ...emTextConfigurationEditorJsonSerializer.cs | 1 + 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 src/Umbraco.Infrastructure/Serialization/JsonBoolConverter.cs diff --git a/src/Umbraco.Cms.Api.Management/Security/BackOfficeApplicationManager.cs b/src/Umbraco.Cms.Api.Management/Security/BackOfficeApplicationManager.cs index 091eecadfe..615515a423 100644 --- a/src/Umbraco.Cms.Api.Management/Security/BackOfficeApplicationManager.cs +++ b/src/Umbraco.Cms.Api.Management/Security/BackOfficeApplicationManager.cs @@ -97,7 +97,7 @@ public class BackOfficeApplicationManager : IBackOfficeApplicationManager ClientId = Constants.OauthClientIds.Postman, RedirectUris = { - new Uri("https://oauth.pstmn.io/v1/callback") + new Uri("https://oauth.pstmn.io/v1/callback"), new Uri("https://oauth.pstmn.io/v1/browser-callback") }, Type = OpenIddictConstants.ClientTypes.Public, Permissions = diff --git a/src/Umbraco.Infrastructure/Serialization/JsonBoolConverter.cs b/src/Umbraco.Infrastructure/Serialization/JsonBoolConverter.cs new file mode 100644 index 0000000000..0dbac1cbc5 --- /dev/null +++ b/src/Umbraco.Infrastructure/Serialization/JsonBoolConverter.cs @@ -0,0 +1,36 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Umbraco.Cms.Infrastructure.Serialization; + +public class JsonBoolConverter : JsonConverter +{ + public override void Write(Utf8JsonWriter writer, bool value, JsonSerializerOptions options) => + writer.WriteBooleanValue(value); + + public override bool Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => + reader.TokenType switch + { + JsonTokenType.True => true, + JsonTokenType.False => false, + JsonTokenType.String => ParseString(ref reader), + JsonTokenType.Number => reader.TryGetInt64(out long l) ? Convert.ToBoolean(l) : reader.TryGetDouble(out double d) ? Convert.ToBoolean(d) : false, + _ => throw new JsonException(), + }; + + private bool ParseString(ref Utf8JsonReader reader) + { + var value = reader.GetString(); + if (bool.TryParse(value, out var b)) + { + return b; + } + + if (int.TryParse(value, out var i)) + { + return Convert.ToBoolean(i); + } + + throw new JsonException(); + } +} diff --git a/src/Umbraco.Infrastructure/Serialization/SystemTextConfigurationEditorJsonSerializer.cs b/src/Umbraco.Infrastructure/Serialization/SystemTextConfigurationEditorJsonSerializer.cs index 8192f38acd..1141622cb0 100644 --- a/src/Umbraco.Infrastructure/Serialization/SystemTextConfigurationEditorJsonSerializer.cs +++ b/src/Umbraco.Infrastructure/Serialization/SystemTextConfigurationEditorJsonSerializer.cs @@ -27,6 +27,7 @@ public class SystemTextConfigurationEditorJsonSerializer : IConfigurationEditorJ _jsonSerializerOptions.Converters.Add(new JsonObjectConverter()); _jsonSerializerOptions.Converters.Add(new JsonUdiConverter()); _jsonSerializerOptions.Converters.Add(new JsonGuidUdiConverter()); + _jsonSerializerOptions.Converters.Add(new JsonBoolConverter()); } public string Serialize(object? input) => JsonSerializer.Serialize(input, _jsonSerializerOptions);