public virtual void Configure(IApplicationBuilder app, IWebHostEnvironment env) { //get environment based on application build App.Environment = (env.EnvironmentName.ToLower()) switch { "production" => Environment.production, "staging" => Environment.staging, _ => Environment.development, }; //load application-wide cache var configFile = "config" + (App.Environment == Environment.production ? ".prod" : "") + ".json"; config = new ConfigurationBuilder() .AddJsonFile(App.MapPath(configFile)) .AddEnvironmentVariables().Build(); Server.Config = config; //configure Server defaults App.Host = config.GetSection("hostUrl").Value; var servicepaths = config.GetSection("servicePaths").Value; if (servicepaths != null && servicepaths != "") { App.ServicePaths = servicepaths.Replace(" ", "").Split(','); } if (config.GetSection("version").Value != null) { Server.Version = config.GetSection("version").Value; } //configure Server database connection strings Server.SqlActive = config.GetSection("sql:Active").Value; Server.SqlConnectionString = config.GetSection("sql:" + Server.SqlActive).Value; //configure Server security Server.BcryptWorkFactor = int.Parse(config.GetSection("Encryption:bcrypt_work_factor").Value); Server.Salt = config.GetSection("Encryption:salt").Value; //configure cookie-based authentication var expires = !string.IsNullOrEmpty(config.GetSection("Session:Expires").Value) ? int.Parse(config.GetSection("Session:Expires").Value) : 60; //use session var sessionOpts = new SessionOptions(); sessionOpts.Cookie.Name = "Kandu"; sessionOpts.IdleTimeout = TimeSpan.FromMinutes(expires); app.UseSession(sessionOpts); //handle static files var provider = new FileExtensionContentTypeProvider(); // Add static file mappings provider.Mappings[".svg"] = "image/svg"; var options = new StaticFileOptions { ContentTypeProvider = provider }; app.UseStaticFiles(options); //exception handling if (App.Environment == Environment.development) { //app.UseDeveloperExceptionPage(new DeveloperExceptionPageOptions //{ // SourceCodeLineCount = 10 //}); } else { //use HTTPS app.UseHsts(); app.UseHttpsRedirection(); //use health checks app.UseHealthChecks("/health"); } //use HTTPS //app.UseHttpsRedirection(); //set up database connection Query.Sql.ConnectionString = Server.SqlConnectionString; Server.ResetPass = Query.Users.HasPasswords(); Server.HasAdmin = Query.Users.HasAdmin(); //check vendor versions which may run SQL migration scripts Vendors.CheckVersions(); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Run any services required after initializing all vendor plugins but before configuring vendor startup services Core.Delegates.Email.Send = Email.Send; Core.Delegates.PartialViews.Render = PartialViews.Render; Core.Delegates.PartialViews.RenderForm = PartialViews.RenderForm; Core.Delegates.PartialViews.Save = PartialViews.Save; //Core.Delegates.Log.Error = Query.Logs.LogError; //execute Configure method for all vendors that use IVendorStartup interface foreach (var kv in Core.Vendors.Startups) { var vendor = (Vendor.IVendorStartup)Activator.CreateInstance(kv.Value); try { vendor.Configure(app, env, config); Console.WriteLine("Configured Startup for " + kv.Key); } catch (Exception ex) { Console.WriteLine("Vendor startup error: " + ex.Message); Console.WriteLine(ex.StackTrace); } } //run Datasilk application app.UseDatasilkMvc(new MvcOptions() { Routes = new Routes(), IgnoreRequestBodySize = true, WriteDebugInfoToConsole = false, LogRequests = false, InvokeNext = false }); }