mirror of https://github.com/Squidex/squidex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
5.3 KiB
150 lines
5.3 KiB
// ==========================================================================
|
|
// Squidex Headless CMS
|
|
// ==========================================================================
|
|
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
|
// All rights reserved. Licensed under the MIT license.
|
|
// ==========================================================================
|
|
|
|
using GraphQL;
|
|
using GraphQL.DI;
|
|
using GraphQL.Server.Transports.AspNetCore;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Mvc.ModelBinding;
|
|
using Microsoft.AspNetCore.ResponseCompression;
|
|
using Microsoft.Extensions.Localization;
|
|
using Microsoft.Extensions.Options;
|
|
using Squidex.Config.Domain;
|
|
using Squidex.Domain.Apps.Core.Contents;
|
|
using Squidex.Domain.Apps.Entities;
|
|
using Squidex.Domain.Apps.Entities.Contents.GraphQL;
|
|
using Squidex.Infrastructure.Caching;
|
|
using Squidex.Infrastructure.Json.Objects;
|
|
using Squidex.Pipeline.Plugins;
|
|
using Squidex.Web;
|
|
using Squidex.Web.GraphQL;
|
|
using Squidex.Web.Pipeline;
|
|
using Squidex.Web.Services;
|
|
|
|
namespace Squidex.Config.Web;
|
|
|
|
public static class WebServices
|
|
{
|
|
public static void AddSquidexMvcWithPlugins(this IServiceCollection services, IConfiguration config)
|
|
{
|
|
services.Configure<CompressionOptions>(config,
|
|
"compression");
|
|
|
|
services.AddSingletonAs(c => new ExposedValues(c.GetRequiredService<IOptions<ExposedConfiguration>>().Value, config, typeof(WebServices).Assembly))
|
|
.AsSelf();
|
|
|
|
services.AddSingletonAs<FileCallbackResultExecutor>()
|
|
.AsSelf();
|
|
|
|
services.AddSingletonAs<ApiCostsFilter>()
|
|
.AsSelf();
|
|
|
|
services.AddSingletonAs<AppResolver>()
|
|
.AsSelf();
|
|
|
|
services.AddSingletonAs<SchemaResolver>()
|
|
.AsSelf();
|
|
|
|
services.AddSingletonAs<TeamResolver>()
|
|
.AsSelf();
|
|
|
|
services.AddSingletonAs<UsageMiddleware>()
|
|
.AsSelf();
|
|
|
|
services.AddSingletonAs<StringLocalizer>()
|
|
.As<IStringLocalizer>().As<IStringLocalizerFactory>();
|
|
|
|
services.AddSingletonAs<CachingManager>()
|
|
.As<IRequestCache>();
|
|
|
|
services.AddSingletonAs<ContextProvider>()
|
|
.As<IContextProvider>();
|
|
|
|
services.AddSingletonAs<HttpContextAccessor>()
|
|
.As<IHttpContextAccessor>();
|
|
|
|
services.Configure<ApiBehaviorOptions>(options =>
|
|
{
|
|
options.SuppressInferBindingSourcesForParameters = true;
|
|
options.SuppressModelStateInvalidFilter = true;
|
|
});
|
|
|
|
services.AddLocalization();
|
|
|
|
services.AddYDotNet()
|
|
.AutoCleanup()
|
|
.AddWebSockets();
|
|
|
|
services.Configure<ResponseCompressionOptions>((services, options) =>
|
|
{
|
|
var compressionOptions = services.GetRequiredService<IOptions<CompressionOptions>>().Value;
|
|
|
|
options.EnableForHttps = compressionOptions.EnableForHttps;
|
|
});
|
|
|
|
services.Configure<BrotliCompressionProviderOptions>((services, options) =>
|
|
{
|
|
var compressionOptions = services.GetRequiredService<IOptions<CompressionOptions>>().Value;
|
|
|
|
options.Level = compressionOptions.LevelBrotli;
|
|
});
|
|
|
|
services.Configure<GzipCompressionProviderOptions>((services, options) =>
|
|
{
|
|
var compressionOptions = services.GetRequiredService<IOptions<CompressionOptions>>().Value;
|
|
|
|
options.Level = compressionOptions.LevelGzip;
|
|
});
|
|
|
|
services.AddResponseCompression();
|
|
|
|
services.AddMvc(options =>
|
|
{
|
|
// Never change this order here.
|
|
options.Filters.Add<CachingFilter>();
|
|
options.Filters.Add<DeferredActionFilter>();
|
|
options.Filters.Add<ContextFilter>();
|
|
options.Filters.Add<AppResolver>();
|
|
options.Filters.Add<TeamResolver>();
|
|
options.Filters.Add<SchemaResolver>();
|
|
options.Filters.Add<MeasureResultFilter>();
|
|
|
|
// Ingore all values that could have JsonValue somewhere.
|
|
options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(ContentData)));
|
|
options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(ContentFieldData)));
|
|
options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(JsonArray)));
|
|
options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(JsonObject)));
|
|
options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(JsonValue)));
|
|
})
|
|
.AddDataAnnotationsLocalization()
|
|
#if DEBUG
|
|
.AddRazorRuntimeCompilation()
|
|
#endif
|
|
.AddSquidexPlugins(config)
|
|
.AddSquidexSerializers();
|
|
}
|
|
|
|
public static void AddSquidexGraphQL(this IServiceCollection services)
|
|
{
|
|
services.AddGraphQL(builder =>
|
|
{
|
|
builder.UseApolloTracing();
|
|
builder.AddSchema<DummySchema>();
|
|
builder.AddSystemTextJson();
|
|
builder.AddDataLoader();
|
|
});
|
|
|
|
services.AddSingletonAs<DummySchema>()
|
|
.AsSelf();
|
|
|
|
services.AddSingletonAs<DynamicUserContextBuilder>()
|
|
.As<IUserContextBuilder>();
|
|
|
|
services.AddSingletonAs<CachingGraphQLResolver>()
|
|
.As<IConfigureExecution>();
|
|
}
|
|
}
|
|
|