using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.UI.Services; using Microsoft.Extensions.Hosting; using isnd.Data; using isnd.Interfaces; using isnd.Services; using isnd.Entities; using isnd.Authorization; using isnd.Data.Roles; using Microsoft.AspNetCore.Authorization; using Unleash; using System.Collections.Generic; using System; using Unleash.ClientFactory; using isnd.Entities; using Microsoft.Extensions.Options; using isnd.Helpers; using isnd.Services; namespace isnd { public class Startup { public Startup(IConfiguration config) { Configuration = config; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddDbContext(options => options.UseNpgsql( Configuration.GetConnectionString("DefaultConnection"))); services.AddIdentity() .AddRoles() .AddEntityFrameworkStores() .AddSignInManager() .AddDefaultUI() .AddDefaultTokenProviders(); services.AddMvc(); services.AddDataProtection(); services.AddTransient(); services.AddTransient(); services.AddAuthorization(options => { options.AddPolicy(Constants.RequireAdminPolicyName, policy => policy.RequireRole(Constants.AdministratorRoleName)); options.AddPolicy(Constants.RequireValidApiKey, policy => policy.Requirements.Add(new ValidApiKeyRequirement())); }); services.AddSingleton(); services.AddSingleton(s => { var config = s.GetRequiredService>(); return s.GetRequiredService().CreateUnleahClient(config.Value); }); services.AddTransient(); // _unleashĈlient = env.CreateUnleahClient(unleashClientSettings.Value); var smtpSettingsconf = Configuration.GetSection("Smtp"); services.Configure(smtpSettingsconf); var isndSettingsconf = Configuration.GetSection("Isn"); services.Configure(isndSettingsconf); var adminStartupListConf = Configuration.GetSection("AdminList"); services.Configure(adminStartupListConf); var unleashConf = Configuration.GetSection("Unleash"); services.Configure(unleashConf); services.Configure(o => o.Path = "~/migrate"); } public static IUnleash UnleashĈlient { get; private set; } public static string ExternalAddress { get; internal set; } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, Microsoft.AspNetCore.Hosting.IHostingEnvironment env, ApplicationDbContext dbContext) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseMigrationsEndPoint(); } else { // app.UseExceptionHandler("/Home/Error"); app.UseDeveloperExceptionPage(); dbContext.Database.Migrate(); } app.UseStatusCodePages().UseStaticFiles().UseAuthentication().UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Packages}/{action=Index}/{query?}"); }); } } }