Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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();
        }