// 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>(); }
public static bool Seed() { var fittifyContextSeeder = new FittifyContextSeeder(); return(fittifyContextSeeder.EnsureFreshSeedDataForProductionContext(GetFittifyConnectionStringFromAppsettingsJson())); }