public void Init() { _staticDictionaryUpdaterMock = new Mock <StaticDictionariesUpdater>(); _achievementsDictionaryUpdaterMock = new Mock <AchievementsDictionaryUpdater>(); _vehiclesDictionaryUpdaterMock = new Mock <VehiclesDictionaryUpdater>(); _staticDictionaryUpdaterMock.Setup(d => d.Update()).ReturnsAsync(new UpdateDictionariesResponseItem()); _achievementsDictionaryUpdaterMock.Setup(d => d.Update()) .ReturnsAsync(new UpdateDictionariesResponseItem()); _vehiclesDictionaryUpdaterMock.Setup(d => d.Update()).ReturnsAsync(new UpdateDictionariesResponseItem()); var serviceProvider = new ServiceCollection(); serviceProvider.AddSingleton(_staticDictionaryUpdaterMock.Object); serviceProvider.AddSingleton(_achievementsDictionaryUpdaterMock.Object); serviceProvider.AddSingleton(_vehiclesDictionaryUpdaterMock.Object); WotBlitzStatisticsLogicInstaller.RegisterDictionariesFactoryMethod(serviceProvider); var services = serviceProvider.BuildServiceProvider(); _wargamingDictionaries = new WargamingDictionaries(services.GetService <DictionariesUpdaterResolver>(), (new Mock <ILogger <WargamingDictionaries> >()).Object); }
public void ConfigureServices(IServiceCollection services) { var wgApiConfig = new WargamingApiSettings(); Configuration.GetSection("WargamingApi").Bind(wgApiConfig); var mongoConfig = new MongoSettings(); Configuration.GetSection("Mongo").Bind(mongoConfig); var gitHubOauthConfig = new GitHubOauthAppConfiguration(); Configuration.GetSection("GitHubOAuth").Bind(gitHubOauthConfig); services.AddSingleton <IWargamingApiSettings>(wgApiConfig); services.AddSingleton <IMongoSettings>(mongoConfig); services.AddSingleton(gitHubOauthConfig); WotBlitzStatisticsLogicInstaller.ConfigureServices(services); services.AddHealthChecks() .AddCheck("self", () => HealthCheckResult.Healthy()) .AddMongoDb(mongoConfig.ConnectionString, tags: new[] { "services" }); // GitHub authorization services.AddHttpClient("github"); services.AddTransient <IGitHubOauthService, GitHubOauthService>(); services.AddAuthorization(options => { options.AddPolicy("GithubMbogaOnly", policy => policy.RequireClaim(ClaimTypes.Name, gitHubOauthConfig.AllowedUser)); }); services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "https://WotBlitzStatisticsPro.com", ValidAudience = "https://WotBlitzStatisticsPro.com", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(gitHubOauthConfig.ClientSecret !)) }; }); // Add GraphQL Services services.AddGraphQLServer() .AddQueryType(d => d.Name("Query")) .AddType <WotBlitzStatisticsQuery>() .AddType <AccountInfoResolver>() .AddType <WotBlitzAchievementsQuery>() .AddMutationType(d => d.Name("Mutation")) .AddType <WotBlitzStatisticsMutation>() .AddType <AuthenticationMutation>() .AddType <AccountsSearchItemObjectType>() .AddEnumType <MarkOfMastery>() .AddEnumType <RealmType>() .AddEnumType <RequestLanguage>() .AddAuthorization() .AddHttpRequestInterceptor( (context, executor, builder, ct) => { // Get WgAccessToken from header and push it into context if (context.Request.Headers.ContainsKey("WargamingToken")) { var token = context.Request.Headers["WargamingToken"]; if (token.Count == 1) { builder.SetProperty("WgToken", token[0]); } } return(ValueTask.CompletedTask); }) .ModifyRequestOptions(opt => opt.IncludeExceptionDetails = true) .AddErrorFilter(sp => new GraphQlErrorFilter (sp.GetApplicationService <ILogger <GraphQlErrorFilter> >())) ; // Blazor services.AddControllersWithViews(); services.AddRazorPages(); }