コード例 #1
0
ファイル: Startup.cs プロジェクト: philippfx/Fittify
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Info {
                    Title = "Fittify API", Version = "v1"
                });
            });

            services.AddCors();

            //services.AddSingleton<IConfiguration>(Configuration);
            services.AddSingleton(Configuration);

            services.AddAuthentication(
                IdentityServerAuthenticationDefaults.AuthenticationScheme)
            .AddIdentityServerAuthentication(options =>
            {
                options.Authority            = Configuration.GetValue <string>("QuantusIdpBaseUri"); // Auth Server
                options.RequireHttpsMetadata = false;                                                // only for development
                options.ApiName   = "fittifyapi";                                                    // API Resource Id
                options.ApiSecret = "apisecret";
            });

            services.AddMvc
                (setupAction =>
            {
                setupAction.ReturnHttpNotAcceptable = true;     // returns 406 for header "Accept application/xml2" for example (or any other unsupported content type)
                setupAction.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());
                setupAction.InputFormatters.Add(new XmlDataContractSerializerInputFormatter());
            })
            .AddJsonOptions(options =>     // ensures camel cased properties for data shaped properties
            {
                options.SerializerSettings.ContractResolver =
                    new CamelCasePropertyNamesContractResolver();
            });
            ////.ConfigureApplicationPartManager(p => // supports generic controllers
            ////    p.FeatureProviders.Add(new GenericControllerFeatureProvider()));



            string dbConnectionString = Configuration.GetValue <string>("ConnectionStrings:DefaultConnection");

            if (HostingEnvironment.IsTestInMemoryDb())
            {
                services.AddDbContext <FittifyContext>(options => options.UseSqlite("Data Source = FittifyTestDb.db"));
                var intermediateServiceProvider = services.BuildServiceProvider();
                using (var fittifyContext = intermediateServiceProvider.GetService <FittifyContext>())
                {
                    fittifyContext.Database.EnsureDeleted();
                    fittifyContext.Database.EnsureCreated();
                    FittifyContextSeeder.Seed(fittifyContext);
                }
            }
            else if (HostingEnvironment.IsNoDatabase())
            {
                services.AddDbContext <FittifyContext>(options => options.UseSqlServer(""));
            }
            else if (HostingEnvironment.IsProduction())
            {
                dbConnectionString = Configuration.GetValue <string>("ConnectionStrings:DefaultConnection");
                services.AddDbContext <FittifyContext>(options => options.UseSqlServer(dbConnectionString));
            }
            else
            {
                services.AddDbContext <FittifyContext>(options => options.UseSqlServer(dbConnectionString));
            }

            if (HostingEnvironment.IsProduction() == false)
            {
                services.AddScoped <IDbResetter, Services.DbResetter>();
            }

            //try
            //{
            //    services.AddAuthorization(authorizationOptions =>
            //    {
            //        authorizationOptions.AddPolicy(
            //            "MustOwnWorkout",
            //            policyBuilder =>
            //            {
            //                policyBuilder.RequireAuthenticatedUser();
            //                policyBuilder.AddRequirements(new MustOwnWorkoutRequirement());
            //            });
            //    });
            //    services.AddScoped<IAuthorizationHandler, MustOwnWorkoutHandler>();
            //}
            //catch (Exception e)
            //{
            //    var msg = e.Message;
            //}

            //try
            //{
            //    services.AddAuthorization(authorizationOptions =>
            //    {
            //        authorizationOptions.AddPolicy(
            //            "MustOwnEntityIntId",
            //            policyBuilder =>
            //            {
            //                policyBuilder.RequireAuthenticatedUser();
            //                policyBuilder.AddRequirements(new MustOwnEntityIntIdRequirement());
            //            });
            //    });
            //    services.AddScoped<IAuthorizationHandler, MustOwnEntityIntIdHandler>();
            //    //services.AddScoped(typeof(IAuthorizationHandlerT<,,>), typeof(MustOwnEntityHandler<,,>));
            //    //services.AddScoped(typeof(IAuthorizationHandler), typeof(MustOwnEntityHandler<,,>));
            //}
            //catch (Exception e)
            //{
            //    var msg = e.Message;
            //}


            // Is required for the UrlHelper, because it creates url to ACTIONS
            services.AddSingleton <IActionContextAccessor, ActionContextAccessor>();
            services.AddScoped <IUrlHelper, UrlHelper>(implementationFactory =>
            {
                var actionContext =
                    implementationFactory.GetService <IActionContextAccessor>()
                    .ActionContext;
                return(new UrlHelper(actionContext));
            });

            services.AddTransient <IPropertyMappingService, PropertyMappingService>();

            services.AddTransient <ITypeHelperService, TypeHelperService>();

            services.AddHttpCacheHeaders(
                expirationModelOptions =>
            {
                expirationModelOptions.MaxAge = 600;
            },
                validationModelOptions =>
            {
                validationModelOptions.AddMustRevalidate = true;
            });

            //services.AddResponseCaching();

            services.AddMemoryCache(); // Necessary for rate limit

            if (!HostingEnvironment.IsDevelopment() && !HostingEnvironment.IsTestInMemoryDb())
            {
                services.Configure <IpRateLimitOptions>((options) =>
                {
                    options.GeneralRules = new System.Collections.Generic.List <RateLimitRule>()
                    {
                        new RateLimitRule()
                        {
                            Endpoint = "*",
                            Limit    = 500,
                            Period   = "1m"
                        },
                        new RateLimitRule()
                        {
                            Endpoint = "*",
                            Limit    = 300,
                            Period   = "10s"
                        }
                    };
                });
                services.AddSingleton <IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
                services.AddSingleton <IIpPolicyStore, MemoryCacheIpPolicyStore>();
            }


            services.AddFittifyDataRepositoryServices();
            services.AddFittifyOfmRepositoryServices();
            services.AddScoped <IAsyncOfmRepositoryForWorkoutHistory, WorkoutHistoryOfmRepository>();
            services.AddScoped <IAsyncOfmRepositoryForWorkout, WorkoutOfmRepository>();

            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
        }
コード例 #2
0
        public static bool Seed()
        {
            var fittifyContextSeeder = new FittifyContextSeeder();

            return(fittifyContextSeeder.EnsureFreshSeedDataForProductionContext(GetFittifyConnectionStringFromAppsettingsJson()));
        }