Exemple #1
0
        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;
            }
        }