diff --git a/src/Squidex.Domain.Users.MongoDb/MongoXmlDocument.cs b/src/Squidex.Domain.Users.MongoDb/MongoXmlDocument.cs deleted file mode 100644 index 8d278153d..000000000 --- a/src/Squidex.Domain.Users.MongoDb/MongoXmlDocument.cs +++ /dev/null @@ -1,24 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using MongoDB.Bson; -using MongoDB.Bson.Serialization.Attributes; - -namespace Squidex.Domain.Users.MongoDb -{ - public sealed class MongoXmlDocument - { - [BsonId] - [BsonElement] - [BsonRepresentation(BsonType.String)] - public string Id { get; set; } - - [BsonRequired] - [BsonElement] - public string Xml { get; set; } - } -} diff --git a/src/Squidex.Domain.Users.MongoDb/MongoXmlRepository.cs b/src/Squidex.Domain.Users.MongoDb/MongoXmlRepository.cs deleted file mode 100644 index b1d264b58..000000000 --- a/src/Squidex.Domain.Users.MongoDb/MongoXmlRepository.cs +++ /dev/null @@ -1,44 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System.Collections.Generic; -using System.Linq; -using System.Xml.Linq; -using Microsoft.AspNetCore.DataProtection.Repositories; -using MongoDB.Bson; -using MongoDB.Driver; -using Squidex.Infrastructure.MongoDb; - -namespace Squidex.Domain.Users.MongoDb -{ - public sealed class MongoXmlRepository : MongoRepositoryBase, IXmlRepository - { - public MongoXmlRepository(IMongoDatabase database) - : base(database) - { - } - - protected override string CollectionName() - { - return "Identity_XmlRepository"; - } - - public IReadOnlyCollection GetAllElements() - { - var elements = Collection.Find(new BsonDocument()).ToList(); - - return elements.Select(x => XElement.Parse(x.Xml)).ToList(); - } - - public void StoreElement(XElement element, string friendlyName) - { - Collection.UpdateOne(x => x.Id == friendlyName, - Update.Set(x => x.Xml, element.ToString()), - Upsert); - } - } -} diff --git a/src/Squidex.Domain.Users/DefaultXmlRepository.cs b/src/Squidex.Domain.Users/DefaultXmlRepository.cs new file mode 100644 index 000000000..95ee76023 --- /dev/null +++ b/src/Squidex.Domain.Users/DefaultXmlRepository.cs @@ -0,0 +1,53 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System.Collections.Generic; +using System.Xml.Linq; +using Microsoft.AspNetCore.DataProtection.Repositories; +using Squidex.Infrastructure; +using Squidex.Infrastructure.States; +using Squidex.Infrastructure.Tasks; + +namespace Squidex.Domain.Users +{ + public sealed class DefaultXmlRepository : IXmlRepository + { + private readonly ISnapshotStore store; + + [CollectionName("XmlRepository")] + public sealed class State + { + public string Xml { get; set; } + } + + public DefaultXmlRepository(ISnapshotStore store) + { + Guard.NotNull(store, nameof(store)); + + this.store = store; + } + + public IReadOnlyCollection GetAllElements() + { + var result = new List(); + + store.ReadAllAsync((state, version) => + { + result.Add(XElement.Parse(state.Xml)); + + return TaskHelper.Done; + }).Wait(); + + return result; + } + + public void StoreElement(XElement element, string friendlyName) + { + store.WriteAsync(friendlyName, new State { Xml = element.ToString() }, EtagVersion.Any, EtagVersion.Any).Wait(); + } + } +} diff --git a/src/Squidex/Config/Domain/InfrastructureServices.cs b/src/Squidex/Config/Domain/InfrastructureServices.cs index ba5a5be18..3c2b245c5 100644 --- a/src/Squidex/Config/Domain/InfrastructureServices.cs +++ b/src/Squidex/Config/Domain/InfrastructureServices.cs @@ -6,6 +6,7 @@ // ========================================================================== using System; +using Microsoft.AspNetCore.DataProtection.Repositories; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.Extensions.Caching.Memory; @@ -53,6 +54,9 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .As(); + services.AddSingletonAs() + .As(); + services.AddSingletonAs() .As(); diff --git a/src/Squidex/Config/Domain/StoreServices.cs b/src/Squidex/Config/Domain/StoreServices.cs index 8dec518d6..479a78450 100644 --- a/src/Squidex/Config/Domain/StoreServices.cs +++ b/src/Squidex/Config/Domain/StoreServices.cs @@ -7,7 +7,6 @@ using System; using IdentityServer4.Stores; -using Microsoft.AspNetCore.DataProtection.Repositories; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -34,7 +33,6 @@ using Squidex.Infrastructure.Migrations; using Squidex.Infrastructure.MongoDb; using Squidex.Infrastructure.States; using Squidex.Infrastructure.UsageTracking; -using Squidex.Shared.Users; namespace Squidex.Config.Domain { @@ -64,10 +62,6 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .As(); - services.AddSingletonAs() - .As() - .As(); - services.AddSingletonAs() .As() .As(); diff --git a/src/Squidex/Pipeline/Diagnostics/HealthCheckMiddleware.cs b/src/Squidex/Pipeline/Diagnostics/HealthCheckMiddleware.cs index 5f13d366b..11eec2ded 100644 --- a/src/Squidex/Pipeline/Diagnostics/HealthCheckMiddleware.cs +++ b/src/Squidex/Pipeline/Diagnostics/HealthCheckMiddleware.cs @@ -43,7 +43,7 @@ namespace Squidex.Pipeline.Diagnostics var checks = await Task.WhenAll(healthChecks.Select(x => MakeHealthCheckAsync(x.Key, x.Value, cts.Token))); context.Response.StatusCode = 200; - context.Response.Headers.Add("content-type", "application/json"); + context.Response.Headers.Add("Content-Type", "application/json"); if (checks.Any(x => !x.Result.IsHealthy)) { @@ -63,7 +63,7 @@ namespace Squidex.Pipeline.Diagnostics private static bool CanServeRequest(HttpRequest request) { - return request.Method == "GET" && (request.Path == "/" || string.IsNullOrEmpty(request.Path)); + return HttpMethods.IsGet(request.Method) && (request.Path == "/" || string.IsNullOrEmpty(request.Path)); } private static string GetName(IHealthCheck check) diff --git a/src/Squidex/Pipeline/ETagFilter.cs b/src/Squidex/Pipeline/ETagFilter.cs index acccca31c..db58070a2 100644 --- a/src/Squidex/Pipeline/ETagFilter.cs +++ b/src/Squidex/Pipeline/ETagFilter.cs @@ -6,6 +6,7 @@ // ========================================================================== using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; @@ -19,7 +20,7 @@ namespace Squidex.Pipeline var httpContext = context.HttpContext; - if (httpContext.Request.Method == "GET" && + if (HttpMethods.IsGet(httpContext.Request.Method) && httpContext.Request.Headers.TryGetValue("If-None-Match", out var noneMatch) && httpContext.Response.StatusCode == 200 && httpContext.Response.Headers.TryGetValue("ETag", out var etag) && diff --git a/src/Squidex/Pipeline/Robots/RobotsTxtMiddleware.cs b/src/Squidex/Pipeline/Robots/RobotsTxtMiddleware.cs index 2734543e7..92ed64692 100644 --- a/src/Squidex/Pipeline/Robots/RobotsTxtMiddleware.cs +++ b/src/Squidex/Pipeline/Robots/RobotsTxtMiddleware.cs @@ -40,7 +40,7 @@ namespace Squidex.Pipeline.Robots private static bool CanServeRequest(HttpRequest request) { - return request.Method == "GET" && string.IsNullOrEmpty(request.Path); + return HttpMethods.IsGet(request.Method) && string.IsNullOrEmpty(request.Path); } } }