public void ConfigureServices(IServiceCollection services) { try { services.AddDbContext <ApplicationDbContext>( setup => setup.UseSqlServer(Configuration["db:default"], options => { options.MigrationsAssembly("HashTag.Presentation"); })); services.AddIdentity <ApplicationUser, ApplicationRole>( setup => { setup.Password.RequiredLength = 6; setup.Password.RequireLowercase = false; setup.Password.RequireUppercase = false; setup.Password.RequireDigit = false; setup.Password.RequireNonAlphanumeric = false; }) .AddEntityFrameworkStores <ApplicationDbContext>() .AddDefaultTokenProviders(); services.AddAuthorization( options => { options.AddPolicy("admin", policy => policy.RequireRole("admin")); }); var authenticationBuilder = services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme); authenticationBuilder.AddCookie(setup => { setup.Cookie.Name = "_HashTagAuth"; setup.ExpireTimeSpan = TimeSpan.FromDays(1); setup.SlidingExpiration = true; setup.AccessDeniedPath = "/error/403"; }); if (!string.IsNullOrEmpty(Configuration["authentication:facebook:appId"])) { authenticationBuilder.AddFacebook(setup => { setup.AppId = Configuration["authentication:facebook:appId"]; setup.AppSecret = Configuration["authentication:facebook:appSecret"]; }); } if (!string.IsNullOrEmpty(Configuration["authentication:google:clientId"])) { authenticationBuilder.AddGoogle(setup => { setup.ClientId = Configuration["authentication:google:clientId"]; setup.ClientSecret = Configuration["authentication:google:clientSecret"]; }); } services.AddSession(); services.AddMvc( options => { if (bool.Parse(Configuration["config:requireHttpsFilterEnabled"])) { options.Filters.Add(new RequireHttpsAttribute { Permanent = true }); } options.Filters.Add(typeof(ApplicationExceptionFilter)); if (bool.Parse(Configuration["config:historyLogsEnabled"])) { options.Filters.Add(typeof(RequestHistoryLogFilterAttribute)); } options.Filters.Add(typeof(UnitOfWorkFilter)); }) .AddJsonOptions( option => { option.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); option.SerializerSettings.Formatting = Formatting.Indented; option.SerializerSettings.Converters.Add(new StringEnumConverter()); }); services.AddSingleton <IConfiguration>(Configuration); services.TryAddScoped <IHttpContextAccessor, HttpContextAccessor>(); services.Configure <MessagesOptions>(Configuration.GetSection("messages")); ApplicationBootstrapper.ApplyAllBootstrappers(services); } catch (Exception exception) { new ApplicationLogger().LogFatal(exception); throw; } }