Browse Source

Use store for xml repository

pull/336/head
Sebastian Stehle 7 years ago
parent
commit
f0efb21a41
  1. 24
      src/Squidex.Domain.Users.MongoDb/MongoXmlDocument.cs
  2. 44
      src/Squidex.Domain.Users.MongoDb/MongoXmlRepository.cs
  3. 53
      src/Squidex.Domain.Users/DefaultXmlRepository.cs
  4. 4
      src/Squidex/Config/Domain/InfrastructureServices.cs
  5. 6
      src/Squidex/Config/Domain/StoreServices.cs
  6. 4
      src/Squidex/Pipeline/Diagnostics/HealthCheckMiddleware.cs
  7. 3
      src/Squidex/Pipeline/ETagFilter.cs
  8. 2
      src/Squidex/Pipeline/Robots/RobotsTxtMiddleware.cs

24
src/Squidex.Domain.Users.MongoDb/MongoXmlDocument.cs

@ -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; }
}
}

44
src/Squidex.Domain.Users.MongoDb/MongoXmlRepository.cs

@ -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<MongoXmlDocument>, IXmlRepository
{
public MongoXmlRepository(IMongoDatabase database)
: base(database)
{
}
protected override string CollectionName()
{
return "Identity_XmlRepository";
}
public IReadOnlyCollection<XElement> 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);
}
}
}

53
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<State, string> store;
[CollectionName("XmlRepository")]
public sealed class State
{
public string Xml { get; set; }
}
public DefaultXmlRepository(ISnapshotStore<State, string> store)
{
Guard.NotNull(store, nameof(store));
this.store = store;
}
public IReadOnlyCollection<XElement> GetAllElements()
{
var result = new List<XElement>();
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();
}
}
}

4
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<DefaultUserResolver>()
.As<IUserResolver>();
services.AddSingletonAs<DefaultXmlRepository>()
.As<IXmlRepository>();
services.AddSingletonAs<AssetUserPictureStore>()
.As<IUserPictureStore>();

6
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<MongoDBHealthCheck>()
.As<IHealthCheck>();
services.AddSingletonAs<MongoXmlRepository>()
.As<IXmlRepository>()
.As<IInitializable>();
services.AddSingletonAs<MongoMigrationStatus>()
.As<IMigrationStatus>()
.As<IInitializable>();

4
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)

3
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) &&

2
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);
}
}
}

Loading…
Cancel
Save