From f81fe2e6b01ad1fbaf0d2b535c82c700e2b51bb9 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 16 Feb 2022 13:31:33 +0100 Subject: [PATCH] Fix Orleans credentials and remove obsolete profilers. --- .../MongoDb/TypeConverterStringSerializer.cs | 7 +--- .../EventSourcing/EnvelopeExtensions.cs | 32 ++++++++-------- .../EventSourcing/EnvelopeHeaders.cs | 4 +- .../Newtonsoft/EnvelopeHeadersConverter.cs | 38 ------------------- .../Newtonsoft/TypeConverterJsonConverter.cs} | 21 +++++----- .../Config/DynamicApplicationStore.cs | 3 +- .../Config/IdentityServerServices.cs | 6 ++- .../Config/Domain/SerializationServices.cs | 3 +- .../TestHelpers/TestUtils.cs | 3 +- .../Backup/BackupReaderWriterTests.cs | 5 ++- .../EventSourcing/EnvelopeHeadersTests.cs | 25 ++++++++---- .../TestHelpers/TestUtils.cs | 3 +- .../content/content-event.component.scss | 2 +- .../assets/asset-history.component.scss | 2 +- .../comments/comment.component.scss | 2 +- .../history/history-list.component.scss | 2 +- 16 files changed, 63 insertions(+), 95 deletions(-) delete mode 100644 backend/src/Squidex.Infrastructure/Json/Newtonsoft/EnvelopeHeadersConverter.cs rename backend/src/Squidex.Infrastructure/{Queries/Json/CompareOperatorJsonConverter.cs => Json/Newtonsoft/TypeConverterJsonConverter.cs} (70%) diff --git a/backend/src/Squidex.Infrastructure.MongoDb/MongoDb/TypeConverterStringSerializer.cs b/backend/src/Squidex.Infrastructure.MongoDb/MongoDb/TypeConverterStringSerializer.cs index 6d2b60cd8..427dfd28d 100644 --- a/backend/src/Squidex.Infrastructure.MongoDb/MongoDb/TypeConverterStringSerializer.cs +++ b/backend/src/Squidex.Infrastructure.MongoDb/MongoDb/TypeConverterStringSerializer.cs @@ -14,7 +14,7 @@ namespace Squidex.Infrastructure.MongoDb { public sealed class TypeConverterStringSerializer : SerializerBase { - private readonly TypeConverter typeConverter; + private readonly TypeConverter typeConverter = TypeDescriptor.GetConverter(typeof(T)); public static void Register() { @@ -28,11 +28,6 @@ namespace Squidex.Infrastructure.MongoDb } } - public TypeConverterStringSerializer() - { - typeConverter = TypeDescriptor.GetConverter(typeof(T)); - } - public override T Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args) { if (context.Reader.CurrentBsonType == BsonType.Null) diff --git a/backend/src/Squidex.Infrastructure/EventSourcing/EnvelopeExtensions.cs b/backend/src/Squidex.Infrastructure/EventSourcing/EnvelopeExtensions.cs index 60090d628..09851dba7 100644 --- a/backend/src/Squidex.Infrastructure/EventSourcing/EnvelopeExtensions.cs +++ b/backend/src/Squidex.Infrastructure/EventSourcing/EnvelopeExtensions.cs @@ -21,7 +21,7 @@ namespace Squidex.Infrastructure.EventSourcing public static Envelope SetEventPosition(this Envelope envelope, string value) where T : class, IEvent { - envelope.Headers.Add(CommonHeaders.EventNumber, value); + envelope.Headers.Add(CommonHeaders.EventNumber, JsonValue.Create(value)); return envelope; } @@ -33,7 +33,7 @@ namespace Squidex.Infrastructure.EventSourcing public static Envelope SetEventStreamNumber(this Envelope envelope, long value) where T : class, IEvent { - envelope.Headers.Add(CommonHeaders.EventStreamNumber, value); + envelope.Headers.Add(CommonHeaders.EventStreamNumber, JsonValue.Create(value)); return envelope; } @@ -45,7 +45,7 @@ namespace Squidex.Infrastructure.EventSourcing public static Envelope SetCommitId(this Envelope envelope, Guid value) where T : class, IEvent { - envelope.Headers.Add(CommonHeaders.CommitId, value.ToString()); + envelope.Headers.Add(CommonHeaders.CommitId, JsonValue.Create(value)); return envelope; } @@ -57,7 +57,7 @@ namespace Squidex.Infrastructure.EventSourcing public static Envelope SetAggregateId(this Envelope envelope, DomainId value) where T : class, IEvent { - envelope.Headers.Add(CommonHeaders.AggregateId, value.ToString()); + envelope.Headers.Add(CommonHeaders.AggregateId, JsonValue.Create(value)); return envelope; } @@ -69,7 +69,7 @@ namespace Squidex.Infrastructure.EventSourcing public static Envelope SetEventId(this Envelope envelope, Guid value) where T : class, IEvent { - envelope.Headers.Add(CommonHeaders.EventId, value.ToString()); + envelope.Headers.Add(CommonHeaders.EventId, JsonValue.Create(value)); return envelope; } @@ -81,7 +81,7 @@ namespace Squidex.Infrastructure.EventSourcing public static Envelope SetTimestamp(this Envelope envelope, Instant value) where T : class, IEvent { - envelope.Headers.Add(CommonHeaders.Timestamp, value.ToString()); + envelope.Headers.Add(CommonHeaders.Timestamp, JsonValue.Create(value)); return envelope; } @@ -93,12 +93,12 @@ namespace Squidex.Infrastructure.EventSourcing public static Envelope SetRestored(this Envelope envelope, bool value = true) where T : class, IEvent { - envelope.Headers.Add(CommonHeaders.Restored, value); + envelope.Headers.Add(CommonHeaders.Restored, JsonValue.Create(value)); return envelope; } - public static long GetLong(this JsonObject obj, string key) + public static long GetLong(this EnvelopeHeaders obj, string key) { if (obj.TryGetValue(key, out var v)) { @@ -115,9 +115,9 @@ namespace Squidex.Infrastructure.EventSourcing return 0; } - public static Guid GetGuid(this JsonObject obj, string key) + public static Guid GetGuid(this EnvelopeHeaders obj, string key) { - if (obj.TryGetValue(key, out var v) && Guid.TryParse(v.ToString(), out var guid)) + if (obj.TryGetValue(key, out var v) && v is JsonString s && Guid.TryParse(s.ToString(), out var guid)) { return guid; } @@ -125,9 +125,9 @@ namespace Squidex.Infrastructure.EventSourcing return default; } - public static Instant GetInstant(this JsonObject obj, string key) + public static Instant GetInstant(this EnvelopeHeaders obj, string key) { - if (obj.TryGetValue(key, out var v) && InstantPattern.ExtendedIso.Parse(v.ToString()).TryGetValue(default, out var instant)) + if (obj.TryGetValue(key, out var v) && v is JsonString s && InstantPattern.ExtendedIso.Parse(s.ToString()).TryGetValue(default, out var instant)) { return instant; } @@ -135,7 +135,7 @@ namespace Squidex.Infrastructure.EventSourcing return default; } - public static string GetString(this JsonObject obj, string key) + public static string GetString(this EnvelopeHeaders obj, string key) { if (obj.TryGetValue(key, out var v)) { @@ -145,11 +145,11 @@ namespace Squidex.Infrastructure.EventSourcing return string.Empty; } - public static bool GetBoolean(this JsonObject obj, string key) + public static bool GetBoolean(this EnvelopeHeaders obj, string key) { - if (obj.TryGetValue(key, out var v)) + if (obj.TryGetValue(key, out var v) && v is JsonBoolean boolean) { - return v.Value; + return boolean.Value; } return false; diff --git a/backend/src/Squidex.Infrastructure/EventSourcing/EnvelopeHeaders.cs b/backend/src/Squidex.Infrastructure/EventSourcing/EnvelopeHeaders.cs index dfaaf82bc..08ad1acae 100644 --- a/backend/src/Squidex.Infrastructure/EventSourcing/EnvelopeHeaders.cs +++ b/backend/src/Squidex.Infrastructure/EventSourcing/EnvelopeHeaders.cs @@ -9,13 +9,13 @@ using Squidex.Infrastructure.Json.Objects; namespace Squidex.Infrastructure.EventSourcing { - public sealed class EnvelopeHeaders : JsonObject + public sealed class EnvelopeHeaders : Dictionary { public EnvelopeHeaders() { } - public EnvelopeHeaders(JsonObject headers) + public EnvelopeHeaders(IDictionary headers) : base(headers) { } diff --git a/backend/src/Squidex.Infrastructure/Json/Newtonsoft/EnvelopeHeadersConverter.cs b/backend/src/Squidex.Infrastructure/Json/Newtonsoft/EnvelopeHeadersConverter.cs deleted file mode 100644 index 8457bfe11..000000000 --- a/backend/src/Squidex.Infrastructure/Json/Newtonsoft/EnvelopeHeadersConverter.cs +++ /dev/null @@ -1,38 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschraenkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using Newtonsoft.Json; -using Squidex.Infrastructure.EventSourcing; -using Squidex.Infrastructure.Json.Objects; - -namespace Squidex.Infrastructure.Json.Newtonsoft -{ - public sealed class EnvelopeHeadersConverter : JsonValueConverter - { - public override IEnumerable SupportedTypes - { - get { yield return typeof(EnvelopeHeaders); } - } - - public override object ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer) - { - var result = base.ReadJson(reader, objectType, existingValue, serializer); - - if (result is JsonObject obj) - { - return new EnvelopeHeaders(obj); - } - - return result; - } - - public override bool CanConvert(Type objectType) - { - return objectType == typeof(EnvelopeHeaders); - } - } -} diff --git a/backend/src/Squidex.Infrastructure/Queries/Json/CompareOperatorJsonConverter.cs b/backend/src/Squidex.Infrastructure/Json/Newtonsoft/TypeConverterJsonConverter.cs similarity index 70% rename from backend/src/Squidex.Infrastructure/Queries/Json/CompareOperatorJsonConverter.cs rename to backend/src/Squidex.Infrastructure/Json/Newtonsoft/TypeConverterJsonConverter.cs index 06be70a60..5789907b0 100644 --- a/backend/src/Squidex.Infrastructure/Queries/Json/CompareOperatorJsonConverter.cs +++ b/backend/src/Squidex.Infrastructure/Json/Newtonsoft/TypeConverterJsonConverter.cs @@ -7,29 +7,32 @@ using System.ComponentModel; using Newtonsoft.Json; -using Squidex.Infrastructure.Json; -using JsonException = Squidex.Infrastructure.Json.JsonException; -namespace Squidex.Infrastructure.Queries.Json +namespace Squidex.Infrastructure.Json.Newtonsoft { - public sealed class CompareOperatorJsonConverter : JsonConverter, ISupportedTypes + public sealed class TypeConverterJsonConverter : JsonConverter, ISupportedTypes { - private readonly TypeConverter typeConverter = TypeDescriptor.GetConverter(typeof(CompareOperator)); + private readonly TypeConverter typeConverter = TypeDescriptor.GetConverter(typeof(T)); public IEnumerable SupportedTypes { - get { yield return typeof(CompareOperator); } + get { yield return typeof(T); } } public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer) { + if (reader.TokenType == JsonToken.Null) + { + return default(T); + } + try { return typeConverter.ConvertFromInvariantString(reader.Value?.ToString()!); } - catch (InvalidCastException ex) + catch (Exception ex) { - throw new JsonException(ex.Message); + throw new JsonException("Error while converting from string.", ex); } } @@ -40,7 +43,7 @@ namespace Squidex.Infrastructure.Queries.Json public override bool CanConvert(Type objectType) { - return SupportedTypes.Contains(objectType); + return objectType == typeof(T); } } } diff --git a/backend/src/Squidex/Areas/IdentityServer/Config/DynamicApplicationStore.cs b/backend/src/Squidex/Areas/IdentityServer/Config/DynamicApplicationStore.cs index 08c677bae..e777c706b 100644 --- a/backend/src/Squidex/Areas/IdentityServer/Config/DynamicApplicationStore.cs +++ b/backend/src/Squidex/Areas/IdentityServer/Config/DynamicApplicationStore.cs @@ -188,8 +188,7 @@ namespace Squidex.Areas.IdentityServer.Config ClientSecret = Constants.ClientInternalSecret, RedirectUris = { - new Uri(urlGenerator.BuildUrl($"{Constants.PrefixPortal}/signin-internal", false)), - new Uri(urlGenerator.BuildUrl($"{Constants.PrefixOrleans}/signin-internal", false)) + new Uri(urlGenerator.BuildUrl("/signin-internal", false)), }, Permissions = { diff --git a/backend/src/Squidex/Areas/IdentityServer/Config/IdentityServerServices.cs b/backend/src/Squidex/Areas/IdentityServer/Config/IdentityServerServices.cs index 8dbed252c..137e29bc5 100644 --- a/backend/src/Squidex/Areas/IdentityServer/Config/IdentityServerServices.cs +++ b/backend/src/Squidex/Areas/IdentityServer/Config/IdentityServerServices.cs @@ -85,6 +85,7 @@ namespace Squidex.Areas.IdentityServer.Config }); builder.SetConfigurationEndpointUris("/identity-server/.well-known/openid-configuration"); + builder.SetAccessTokenLifetime(TimeSpan.FromDays(30)); builder.DisableAccessTokenEncryption(); @@ -95,8 +96,6 @@ namespace Squidex.Areas.IdentityServer.Config Constants.ScopeApi, Constants.ScopePermissions); - builder.SetAccessTokenLifetime(TimeSpan.FromDays(30)); - builder.AllowClientCredentialsFlow(); builder.AllowImplicitFlow(); builder.AllowAuthorizationCodeFlow(); @@ -136,6 +135,9 @@ namespace Squidex.Areas.IdentityServer.Config options.UserinfoEndpointUris.Add( new Uri(urlGenerator.BuildUrl($"{issuerUrl}/connect/userinfo", false))); + options.CryptographyEndpointUris.Add( + new Uri(urlGenerator.BuildUrl($"{issuerUrl}/.well-known/jwks", false))); + options.Issuer = new Uri(urlGenerator.BuildUrl(issuerUrl, false)); }); } diff --git a/backend/src/Squidex/Config/Domain/SerializationServices.cs b/backend/src/Squidex/Config/Domain/SerializationServices.cs index 9141205b5..3a0bd7483 100644 --- a/backend/src/Squidex/Config/Domain/SerializationServices.cs +++ b/backend/src/Squidex/Config/Domain/SerializationServices.cs @@ -42,9 +42,7 @@ namespace Squidex.Config.Domain settings.Converters.Add(new StringEnumConverter()); settings.ContractResolver = new ConverterContractResolver( - new CompareOperatorJsonConverter(), new ContentFieldDataConverter(), - new EnvelopeHeadersConverter(), new JsonValueConverter(), new StringEnumConverter(), new SurrogateConverter(), @@ -56,6 +54,7 @@ namespace Squidex.Config.Domain new SurrogateConverter(), new SurrogateConverter(), new SurrogateConverter(), + new TypeConverterJsonConverter(), new WriteonlyGeoJsonConverter()); settings.NullValueHandling = NullValueHandling.Ignore; diff --git a/backend/tests/Squidex.Domain.Apps.Core.Tests/TestHelpers/TestUtils.cs b/backend/tests/Squidex.Domain.Apps.Core.Tests/TestHelpers/TestUtils.cs index ae527face..841b002d6 100644 --- a/backend/tests/Squidex.Domain.Apps.Core.Tests/TestHelpers/TestUtils.cs +++ b/backend/tests/Squidex.Domain.Apps.Core.Tests/TestHelpers/TestUtils.cs @@ -50,9 +50,7 @@ namespace Squidex.Domain.Apps.Core.TestHelpers SerializationBinder = new TypeNameSerializationBinder(typeNameRegistry), ContractResolver = new ConverterContractResolver( - new CompareOperatorJsonConverter(), new ContentFieldDataConverter(), - new EnvelopeHeadersConverter(), new JsonValueConverter(), new StringEnumConverter(), new SurrogateConverter(), @@ -64,6 +62,7 @@ namespace Squidex.Domain.Apps.Core.TestHelpers new SurrogateConverter(), new SurrogateConverter(), new SurrogateConverter(), + new TypeConverterJsonConverter(), new WriteonlyGeoJsonConverter()), TypeNameHandling = typeNameHandling diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Backup/BackupReaderWriterTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Backup/BackupReaderWriterTests.cs index 1f0281ad8..ab7798e33 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Backup/BackupReaderWriterTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Backup/BackupReaderWriterTests.cs @@ -11,6 +11,7 @@ using Squidex.Domain.Apps.Core.TestHelpers; using Squidex.Infrastructure; using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.Json; +using Squidex.Infrastructure.Json.Objects; using Squidex.Infrastructure.Reflection; using Squidex.Infrastructure.States; using Xunit; @@ -183,8 +184,8 @@ namespace Squidex.Domain.Apps.Entities.Backup var envelope = Envelope.Create(@event); - envelope.Headers.Add("Id", @event.Id.ToString()); - envelope.Headers.Add("Index", i); + envelope.Headers.Add("Id", JsonValue.Create(@event.Id)); + envelope.Headers.Add("Index", JsonValue.Create(i)); sourceEvents.Add(($"My-{RandomDomainId()}", envelope)); } diff --git a/backend/tests/Squidex.Infrastructure.Tests/EventSourcing/EnvelopeHeadersTests.cs b/backend/tests/Squidex.Infrastructure.Tests/EventSourcing/EnvelopeHeadersTests.cs index 7af3f515a..9f4b970ef 100644 --- a/backend/tests/Squidex.Infrastructure.Tests/EventSourcing/EnvelopeHeadersTests.cs +++ b/backend/tests/Squidex.Infrastructure.Tests/EventSourcing/EnvelopeHeadersTests.cs @@ -24,7 +24,10 @@ namespace Squidex.Infrastructure.EventSourcing [Fact] public void Should_create_headers_as_copy() { - var source = JsonValue.Object().Add("Key1", 123); + var source = new EnvelopeHeaders + { + ["key1"] = JsonValue.Create(13) + }; var headers = new EnvelopeHeaders(source); @@ -34,24 +37,30 @@ namespace Squidex.Infrastructure.EventSourcing [Fact] public void Should_clone_headers() { - var headers = new EnvelopeHeaders(JsonValue.Object().Add("Key1", 123)); + var source = new EnvelopeHeaders + { + ["key1"] = JsonValue.Create(13) + }; - var clone = headers.CloneHeaders(); + var headers = source.CloneHeaders(); - CompareHeaders(headers, clone); + CompareHeaders(headers, source); } [Fact] public void Should_serialize_and_deserialize() { - var value = new EnvelopeHeaders(JsonValue.Object().Add("Key1", 123)); + var source = new EnvelopeHeaders + { + ["key1"] = JsonValue.Create(13) + }; - var deserialized = value.SerializeAndDeserialize(); + var deserialized = source.SerializeAndDeserialize(); - CompareHeaders(deserialized, value); + CompareHeaders(deserialized, source); } - private static void CompareHeaders(JsonObject lhs, JsonObject rhs) + private static void CompareHeaders(EnvelopeHeaders lhs, EnvelopeHeaders rhs) { foreach (var key in lhs.Keys.Concat(rhs.Keys).Distinct()) { diff --git a/backend/tests/Squidex.Infrastructure.Tests/TestHelpers/TestUtils.cs b/backend/tests/Squidex.Infrastructure.Tests/TestHelpers/TestUtils.cs index fdb5082fa..b3ca95c31 100644 --- a/backend/tests/Squidex.Infrastructure.Tests/TestHelpers/TestUtils.cs +++ b/backend/tests/Squidex.Infrastructure.Tests/TestHelpers/TestUtils.cs @@ -37,12 +37,11 @@ namespace Squidex.Infrastructure.TestHelpers SerializationBinder = new TypeNameSerializationBinder(typeNameRegistry ?? new TypeNameRegistry()), ContractResolver = new ConverterContractResolver( - new CompareOperatorJsonConverter(), new JsonValueConverter(), new StringEnumConverter(), new SurrogateConverter(), new SurrogateConverter, JsonFilterSurrogate>(), - new EnvelopeHeadersConverter()), + new TypeConverterJsonConverter()), TypeNameHandling = TypeNameHandling.Auto }.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); diff --git a/frontend/src/app/features/content/pages/content/content-event.component.scss b/frontend/src/app/features/content/pages/content/content-event.component.scss index 0ede72f80..490fb5b7c 100644 --- a/frontend/src/app/features/content/pages/content/content-event.component.scss +++ b/frontend/src/app/features/content/pages/content/content-event.component.scss @@ -21,7 +21,7 @@ a { margin-bottom: 1.5rem; &-created { - font-size: $font-smallest; + font-size: $font-small; font-weight: normal; margin: .25rem 0; } diff --git a/frontend/src/app/shared/components/assets/asset-history.component.scss b/frontend/src/app/shared/components/assets/asset-history.component.scss index f1964ba07..230da5547 100644 --- a/frontend/src/app/shared/components/assets/asset-history.component.scss +++ b/frontend/src/app/shared/components/assets/asset-history.component.scss @@ -23,7 +23,7 @@ margin-bottom: 1.5rem; &-created { - font-size: $font-smallest; + font-size: $font-small; font-weight: normal; margin: .25rem 0; } diff --git a/frontend/src/app/shared/components/comments/comment.component.scss b/frontend/src/app/shared/components/comments/comment.component.scss index 34b96b55f..44a7f54ee 100644 --- a/frontend/src/app/shared/components/comments/comment.component.scss +++ b/frontend/src/app/shared/components/comments/comment.component.scss @@ -42,7 +42,7 @@ } &-created { - font-size: $font-smallest; + font-size: $font-small; } &:hover { diff --git a/frontend/src/app/shared/components/history/history-list.component.scss b/frontend/src/app/shared/components/history/history-list.component.scss index 73e22a30b..37954fedd 100644 --- a/frontend/src/app/shared/components/history/history-list.component.scss +++ b/frontend/src/app/shared/components/history/history-list.component.scss @@ -25,7 +25,7 @@ margin-bottom: 1.5rem; &-created { - font-size: $font-smallest; + font-size: $font-small; } &-right {