From 9d8dc0d998b5673133daea0547e272f9b1624ca2 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 7 Mar 2022 23:04:38 +0100 Subject: [PATCH] Fix badges and etags. --- .../Caching/IRequestCache.cs | 2 +- .../Squidex.Web/Pipeline/CachingManager.cs | 33 +++++++++--- .../Rules/Queries/RuleEnricherTests.cs | 2 +- .../Pipeline/CachingKeysMiddlewareTests.cs | 52 +++++++++++++++++++ frontend/src/app/_theme.html | 32 ++++++------ .../assets/pages/asset-tags.component.html | 2 +- .../references/reference-item.component.html | 8 +-- .../pages/events/rule-event.component.html | 4 +- .../rules/pages/rules/rule.component.html | 4 +- .../simulated-rule-event.component.html | 2 +- .../pages/schema/fields/field.component.html | 6 +-- .../client-connect-form.component.html | 18 +++---- .../settings/pages/roles/role.component.html | 4 +- .../components/schema-category.component.html | 2 +- .../search/queries/query-path.component.html | 2 +- .../pages/internal/apps-menu.component.html | 2 +- .../pages/internal/search-menu.component.html | 2 +- 17 files changed, 124 insertions(+), 53 deletions(-) diff --git a/backend/src/Squidex.Infrastructure/Caching/IRequestCache.cs b/backend/src/Squidex.Infrastructure/Caching/IRequestCache.cs index 9f3279986..0e2532d16 100644 --- a/backend/src/Squidex.Infrastructure/Caching/IRequestCache.cs +++ b/backend/src/Squidex.Infrastructure/Caching/IRequestCache.cs @@ -11,7 +11,7 @@ namespace Squidex.Infrastructure.Caching { void AddDependency(DomainId key, long version); - void AddDependency(object? value); + void AddDependency(T value); void AddHeader(string header); } diff --git a/backend/src/Squidex.Web/Pipeline/CachingManager.cs b/backend/src/Squidex.Web/Pipeline/CachingManager.cs index 12b77a4ac..2266fabe3 100644 --- a/backend/src/Squidex.Web/Pipeline/CachingManager.cs +++ b/backend/src/Squidex.Web/Pipeline/CachingManager.cs @@ -69,9 +69,9 @@ namespace Squidex.Web.Pipeline } } - public void AddDependency(object? value) + public void AddDependency(T value) { - if (value != null) + if (value is not null) { try { @@ -135,7 +135,7 @@ namespace Squidex.Web.Pipeline if (stringBuilder.Length > 0) { - response.Headers.Add("Surrogate-Key", stringBuilder.ToString()); + response.Headers["Surrogate-Key"] = stringBuilder.ToString(); } } finally @@ -150,7 +150,7 @@ namespace Squidex.Web.Pipeline } } - public void AddHeader(string header) + public void AddHeader(string header, StringValues values) { if (!string.IsNullOrWhiteSpace(header)) { @@ -164,6 +164,11 @@ namespace Squidex.Web.Pipeline { slimLock.ExitWriteLock(); } + + foreach (var value in values) + { + AddDependency(value); + } } } } @@ -208,7 +213,7 @@ namespace Squidex.Web.Pipeline cacheContext?.AddDependency(key.ToString(), version); } - public void AddDependency(object? value) + public void AddDependency(T value) { var cacheContext = httpContextAccessor.HttpContext?.Features.Get(); @@ -217,9 +222,23 @@ namespace Squidex.Web.Pipeline public void AddHeader(string header) { - var cacheContext = httpContextAccessor.HttpContext?.Features.Get(); + var httpContext = httpContextAccessor.HttpContext; + + if (httpContext == null) + { + return; + } + + var cacheContext = httpContext.Features.Get(); + + if (cacheContext == null) + { + return; + } + + httpContext.Request.Headers.TryGetValue(header, out var value); - cacheContext?.AddHeader(header); + cacheContext?.AddHeader(header, value); } public void Finish(HttpContext httpContext) diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Queries/RuleEnricherTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Queries/RuleEnricherTests.cs index 251a204a3..71c4e8243 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Queries/RuleEnricherTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Queries/RuleEnricherTests.cs @@ -49,7 +49,7 @@ namespace Squidex.Domain.Apps.Entities.Rules.Queries A.CallTo(() => requestCache.AddDependency(source.UniqueId, source.Version)) .MustHaveHappened(); - A.CallTo(() => requestCache.AddDependency(null)) + A.CallTo(() => requestCache.AddDependency(null)) .MustNotHaveHappened(); } diff --git a/backend/tests/Squidex.Web.Tests/Pipeline/CachingKeysMiddlewareTests.cs b/backend/tests/Squidex.Web.Tests/Pipeline/CachingKeysMiddlewareTests.cs index e1d4b9f06..0fecfed6c 100644 --- a/backend/tests/Squidex.Web.Tests/Pipeline/CachingKeysMiddlewareTests.cs +++ b/backend/tests/Squidex.Web.Tests/Pipeline/CachingKeysMiddlewareTests.cs @@ -293,6 +293,58 @@ namespace Squidex.Web.Pipeline Assert.Equal(StringValues.Empty, httpContext.Response.Headers["Surrogate-Key"]); } + [Fact] + public async Task Should_add_header_to_etag() + { + var id1 = DomainId.NewGuid(); + + await MakeRequestAsync(() => + { + cachingManager.AddDependency(id1, 12); + }); + + var etag1 = httpContext.Response.Headers[HeaderNames.ETag].ToString(); + + httpContext.Response.Headers.Remove(HeaderNames.ETag); + httpContext.Request.Headers["X-Custom"] = "123"; + + await MakeRequestAsync(() => + { + cachingManager.AddDependency(id1, 12); + cachingManager.AddHeader("X-Custom"); + }); + + var etag2 = httpContext.Response.Headers[HeaderNames.ETag].ToString(); + + Assert.NotEqual(etag1, etag2); + } + + [Fact] + public async Task Should_not_add_header_to_etag_if_not_found() + { + var id1 = DomainId.NewGuid(); + + await MakeRequestAsync(() => + { + cachingManager.AddDependency(id1, 12); + }); + + var etag1 = httpContext.Response.Headers[HeaderNames.ETag].ToString(); + + httpContext.Response.Headers.Remove(HeaderNames.ETag); + httpContext.Request.Headers["X-Other"] = "123"; + + await MakeRequestAsync(() => + { + cachingManager.AddDependency(id1, 12); + cachingManager.AddHeader("X-Custom"); + }); + + var etag2 = httpContext.Response.Headers[HeaderNames.ETag].ToString(); + + Assert.Equal(etag1, etag2); + } + [Fact] public async Task Should_generate_etag_from_ids_and_versions() { diff --git a/frontend/src/app/_theme.html b/frontend/src/app/_theme.html index 5aed4d7e3..92f50143b 100644 --- a/frontend/src/app/_theme.html +++ b/frontend/src/app/_theme.html @@ -1161,25 +1161,25 @@

Badges

- Primary - Secondary - Success - Danger - Warning - Info - Light - Dark + Primary + Secondary + Success + Danger + Warning + Info + Light + Dark
- Primary - Secondary - Success - Danger - Warning - Info - Light - Dark + Primary + Secondary + Success + Danger + Warning + Info + Light + Dark
diff --git a/frontend/src/app/features/assets/pages/asset-tags.component.html b/frontend/src/app/features/assets/pages/asset-tags.component.html index d5a2f5f76..c0eb26f46 100644 --- a/frontend/src/app/features/assets/pages/asset-tags.component.html +++ b/frontend/src/app/features/assets/pages/asset-tags.component.html @@ -12,7 +12,7 @@ {{tag.name}}
-
{{tag.count}}
+
{{tag.count}}
diff --git a/frontend/src/app/features/content/shared/references/reference-item.component.html b/frontend/src/app/features/content/shared/references/reference-item.component.html index e37bd7dc7..0b0073e6a 100644 --- a/frontend/src/app/features/content/shared/references/reference-item.component.html +++ b/frontend/src/app/features/content/shared/references/reference-item.component.html @@ -12,8 +12,8 @@ - VALID - INVALID + VALID + INVALID @@ -21,8 +21,8 @@ -
- {{content.schemaDisplayName}} +
+ {{content.schemaDisplayName}}
diff --git a/frontend/src/app/features/rules/pages/events/rule-event.component.html b/frontend/src/app/features/rules/pages/events/rule-event.component.html index f174e99b4..587de3423 100644 --- a/frontend/src/app/features/rules/pages/events/rule-event.component.html +++ b/frontend/src/app/features/rules/pages/events/rule-event.component.html @@ -1,6 +1,6 @@ - {{event.jobResult}} + {{event.jobResult}} {{event.eventName}} @@ -25,7 +25,7 @@
- {{event.result}} + {{event.result}}
{{ 'rules.ruleEvents.numAttemptsLabel' | sqxTranslate }}: {{event.numCalls}} diff --git a/frontend/src/app/features/rules/pages/rules/rule.component.html b/frontend/src/app/features/rules/pages/rules/rule.component.html index 7da500096..7f8d31018 100644 --- a/frontend/src/app/features/rules/pages/rules/rule.component.html +++ b/frontend/src/app/features/rules/pages/rules/rule.component.html @@ -99,12 +99,12 @@
{{ 'common.succeeded' | sqxTranslate }} - {{rule.numSucceeded}} + {{rule.numSucceeded}}
{{ 'common.failed' | sqxTranslate }} - {{rule.numFailed}} + {{rule.numFailed}}
{{ 'common.lastExecuted' | sqxTranslate }}: {{rule.lastExecuted | sqxFromNow:'-'}} diff --git a/frontend/src/app/features/rules/pages/simulator/simulated-rule-event.component.html b/frontend/src/app/features/rules/pages/simulator/simulated-rule-event.component.html index 5e8c9bec4..fef7ad512 100644 --- a/frontend/src/app/features/rules/pages/simulator/simulated-rule-event.component.html +++ b/frontend/src/app/features/rules/pages/simulator/simulated-rule-event.component.html @@ -1,6 +1,6 @@ - {{status}} + {{status}} {{event.eventName}} diff --git a/frontend/src/app/features/schemas/pages/schema/fields/field.component.html b/frontend/src/app/features/schemas/pages/schema/fields/field.component.html index 33890131c..eeec1003f 100644 --- a/frontend/src/app/features/schemas/pages/schema/fields/field.component.html +++ b/frontend/src/app/features/schemas/pages/schema/fields/field.component.html @@ -22,15 +22,15 @@
- + {{ 'schemas.field.lockedMarker' | sqxTranslate }} - + {{ 'schemas.field.enabledMarker' | sqxTranslate }} - + {{ 'schemas.field.disabledMarker' | sqxTranslate }}
diff --git a/frontend/src/app/features/settings/pages/clients/client-connect-form.component.html b/frontend/src/app/features/settings/pages/clients/client-connect-form.component.html index 9da128aba..4e6609126 100644 --- a/frontend/src/app/features/settings/pages/clients/client-connect-form.component.html +++ b/frontend/src/app/features/settings/pages/clients/client-connect-form.component.html @@ -66,7 +66,7 @@
-
1 {{ 'clients.connectWizard.manuallyStep1' | sqxTranslate }}
+
1 {{ 'clients.connectWizard.manuallyStep1' | sqxTranslate }}

{{connectHttpText}} @@ -74,7 +74,7 @@

-
2 {{ 'clients.connectWizard.manuallyStep2' | sqxTranslate }}
+
2 {{ 'clients.connectWizard.manuallyStep2' | sqxTranslate }}

{{connectToken?.accessToken}} @@ -82,7 +82,7 @@

-
3 {{ 'clients.connectWizard.manuallyStep3' | sqxTranslate }}
+
3 {{ 'clients.connectWizard.manuallyStep3' | sqxTranslate }}

Authorization: Bearer [YOUR_TOKEN] @@ -95,7 +95,7 @@

-
1 {{ 'clients.connectWizard.cliStep1' | sqxTranslate }}
+
1 {{ 'clients.connectWizard.cliStep1' | sqxTranslate }}
@@ -105,11 +105,11 @@
-
2
+
2
-
3 {{ 'clients.connectWizard.cliStep3' | sqxTranslate }}
+
3 {{ 'clients.connectWizard.cliStep3' | sqxTranslate }}

sq config add {{appName}} {{appName}}:{{client.id}} {{client.secret}} -u {{apiUrl.value}} --use @@ -121,7 +121,7 @@

-
4 {{ 'clients.connectWizard.cliStep4' | sqxTranslate }}
+
4 {{ 'clients.connectWizard.cliStep4' | sqxTranslate }}

sq config use {{appName}} @@ -130,7 +130,7 @@

-
1 {{ 'clients.connectWizard.sdkStep1' | sqxTranslate }}
+
1 {{ 'clients.connectWizard.sdkStep1' | sqxTranslate }}
@@ -140,7 +140,7 @@
-
2 {{ 'clients.connectWizard.sdkStep2' | sqxTranslate }}
+
2 {{ 'clients.connectWizard.sdkStep2' | sqxTranslate }}

{{connectLibraryText}} diff --git a/frontend/src/app/features/settings/pages/roles/role.component.html b/frontend/src/app/features/settings/pages/roles/role.component.html index b0f631bc9..dfe628263 100644 --- a/frontend/src/app/features/settings/pages/roles/role.component.html +++ b/frontend/src/app/features/settings/pages/roles/role.component.html @@ -6,12 +6,12 @@

{{ 'common.clients' | sqxTranslate }} - {{role.numClients}} + {{role.numClients}}
{{ 'common.users' | sqxTranslate }} - {{role.numContributors}} + {{role.numContributors}}
diff --git a/frontend/src/app/shared/components/schema-category.component.html b/frontend/src/app/shared/components/schema-category.component.html index ef8d74c14..d39d5c7cf 100644 --- a/frontend/src/app/shared/components/schema-category.component.html +++ b/frontend/src/app/shared/components/schema-category.component.html @@ -19,7 +19,7 @@
- {{schemaCategory.countSchemasInSubtreeFiltered}} + {{schemaCategory.countSchemasInSubtreeFiltered}}
-
{{result.label}}
+
{{result.label}}