// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { //string pathToCryptoKeys = Path.Combine(environment.ContentRootPath, "dp_keys"); services.AddDataProtection() //.PersistKeysToFileSystem(new System.IO.DirectoryInfo(pathToCryptoKeys)) ; services.Configure <ForwardedHeadersOptions>(options => { options.ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto; }); services.AddMemoryCache(); //services.AddSession(); ConfigureAuthPolicy(services); services.AddOptions(); var connectionString = Configuration.GetConnectionString("EntityFrameworkConnection"); services.AddCloudscribeCoreEFStoragePostgreSql(connectionString); // only needed if using cloudscribe logging with EF storage services.AddCloudscribeLoggingEFStoragePostgreSql(connectionString); services.AddCloudscribeSimpleContentEFStoragePostgreSql(connectionString); services.AddCloudscribeLogging(); services.AddScoped <cloudscribe.Web.Navigation.INavigationNodePermissionResolver, cloudscribe.Web.Navigation.NavigationNodePermissionResolver>(); services.AddScoped <cloudscribe.Web.Navigation.INavigationNodePermissionResolver, cloudscribe.SimpleContent.Web.Services.PagesNavigationNodePermissionResolver>(); services.AddCloudscribeCore(Configuration); services.AddCloudscribeCoreIntegrationForSimpleContent(); services.AddSimpleContent(Configuration); services.AddMetaWeblogForSimpleContent(Configuration.GetSection("MetaWeblogApiOptions")); services.AddSimpleContentRssSyndiction(); services.AddCloudscribeFileManagerIntegration(Configuration); // optional but recommended if you need localization // uncomment to use cloudscribe.Web.localization https://github.com/joeaudette/cloudscribe.Web.Localization //services.Configure<GlobalResourceOptions>(Configuration.GetSection("GlobalResourceOptions")); //services.AddSingleton<IStringLocalizerFactory, GlobalResourceManagerStringLocalizerFactory>(); services.AddLocalization(options => options.ResourcesPath = "GlobalResources"); services.Configure <RequestLocalizationOptions>(options => { var supportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("en-GB"), new CultureInfo("fr-FR"), new CultureInfo("fr"), }; // State what the default culture for your application is. This will be used if no specific culture // can be determined for a given request. options.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US"); // You must explicitly state which cultures your application supports. // These are the cultures the app supports for formatting numbers, dates, etc. options.SupportedCultures = supportedCultures; // These are the cultures the app supports for UI strings, i.e. we have localized resources for. options.SupportedUICultures = supportedCultures; // You can change which providers are configured to determine the culture for requests, or even add a custom // provider with your own logic. The providers will be asked in order to provide a culture for each request, // and the first to provide a non-null result that is in the configured supported cultures list will be used. // By default, the following built-in providers are configured: // - QueryStringRequestCultureProvider, sets culture via "culture" and "ui-culture" query string values, useful for testing // - CookieRequestCultureProvider, sets culture via "ASPNET_CULTURE" cookie // - AcceptLanguageHeaderRequestCultureProvider, sets culture via the "Accept-Language" request header //options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context => //{ // // My custom request culture logic // return new ProviderCultureResult("en"); //})); }); SslIsAvailable = Configuration.GetValue <bool>("AppSettings:UseSsl"); services.Configure <MvcOptions>(options => { if (SslIsAvailable) { options.Filters.Add(new RequireHttpsAttribute()); } options.CacheProfiles.Add("SiteMapCacheProfile", new CacheProfile { Duration = 30 }); options.CacheProfiles.Add("RssCacheProfile", new CacheProfile { Duration = 100 }); }); services.AddRouting(options => { options.LowercaseUrls = true; }); services.AddMvc() .AddRazorOptions(options => { options.AddCloudscribeViewLocationFormats(); options.AddCloudscribeCommonEmbeddedViews(); options.AddCloudscribeNavigationBootstrap3Views(); options.AddCloudscribeCoreBootstrap3Views(); options.AddCloudscribeSimpleContentBootstrap3Views(); options.AddCloudscribeFileManagerBootstrap3Views(); options.AddCloudscribeLoggingBootstrap3Views(); options.ViewLocationExpanders.Add(new cloudscribe.Core.Web.Components.SiteViewLocationExpander()); }) ; }