// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschränkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using System; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Options; using Squidex.Config.Domain; using Squidex.Domain.Apps.Entities; using Squidex.Infrastructure.Caching; using Squidex.Infrastructure.Translations; using Squidex.Pipeline.Plugins; using Squidex.Pipeline.Robots; using Squidex.Shared; using Squidex.Web; 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) { var translator = new ResourcesLocalizer(Texts.ResourceManager); T.Setup(translator); services.AddSingletonAs(c => new ExposedValues(c.GetRequiredService>().Value, config, typeof(WebServices).Assembly)) .AsSelf(); services.AddSingletonAs() .AsSelf(); services.AddSingletonAs() .AsSelf(); services.AddSingletonAs() .AsSelf(); services.AddSingletonAs() .AsSelf(); services.AddSingletonAs() .AsSelf(); services.AddSingletonAs() .AsSelf(); services.AddSingletonAs() .AsSelf(); services.AddSingletonAs() .AsSelf(); services.AddSingletonAs() .AsSelf(); services.AddSingletonAs(c => translator) .As(); services.AddSingletonAs() .As().As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.Configure(options => { options.SuppressModelStateInvalidFilter = true; }); services.AddLocalization(); services.AddMvc(options => { options.Filters.Add(); options.Filters.Add(); options.Filters.Add(); options.Filters.Add(); options.Filters.Add(); }) .AddDataAnnotationsLocalization() .AddRazorRuntimeCompilation() .AddSquidexPlugins(config) .AddSquidexSerializers(); var urlsOptions = config.GetSection("urls").Get(); var host = urlsOptions.BuildHost(); if (urlsOptions.EnforceHost) { services.AddHostFiltering(options => { options.AllowEmptyHosts = true; options.AllowedHosts.Add(host.Host); options.IncludeFailureMessage = false; }); } if (urlsOptions.EnforceHTTPS && !string.Equals(host.Host, "localhost", StringComparison.OrdinalIgnoreCase)) { services.AddHttpsRedirection(options => { options.HttpsPort = urlsOptions.HttpsPort; }); } } } }