using System; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.Hosting; using Umbraco.Cms.Web.BackOffice.Middleware; using Umbraco.Cms.Web.BackOffice.Routing; using Umbraco.Cms.Web.Common.ApplicationBuilder; namespace Umbraco.Extensions { /// /// extensions for Umbraco /// public static partial class UmbracoApplicationBuilderExtensions { /// /// Adds all required middleware to run the back office /// /// /// public static IUmbracoApplicationBuilderContext UseBackOffice(this IUmbracoApplicationBuilderContext builder) { KeepAliveSettings keepAliveSettings = builder.ApplicationServices.GetRequiredService>().Value; IHostingEnvironment hostingEnvironment = builder.ApplicationServices.GetRequiredService(); builder.AppBuilder.Map( hostingEnvironment.ToAbsolute(keepAliveSettings.KeepAlivePingUrl), a => a.UseMiddleware()); builder.AppBuilder.UseMiddleware(); return builder; } public static IUmbracoEndpointBuilderContext UseBackOfficeEndpoints(this IUmbracoEndpointBuilderContext app) { // NOTE: This method will have been called after UseRouting, UseAuthentication, UseAuthorization if (app == null) { throw new ArgumentNullException(nameof(app)); } if (!app.RuntimeState.UmbracoCanBoot()) { return app; } BackOfficeAreaRoutes backOfficeRoutes = app.ApplicationServices.GetRequiredService(); backOfficeRoutes.CreateRoutes(app.EndpointRouteBuilder); app.UseUmbracoRuntimeMinificationEndpoints(); app.UseUmbracoPreviewEndpoints(); return app; } } }