feat: GitHub OAuth mechanism implemented

This commit is contained in:
Mikhail Shabanov committed 2021-04-02 13:20:59 +02:00
1 parent a247406a42
commit 0b5da2f7c6
9 files changed
+299 -9

No files matched your search

+55 -8
View File
@@ -1,11 +1,18 @@
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.IdentityModel.Tokens;
using WotBlitzStatisticsPro.Common;
using WotBlitzStatisticsPro.Common.Model;
using WotBlitzStatisticsPro.GraphQl.GitHubOauth;
using WotBlitzStatisticsPro.GraphQl.Mutation;
using WotBlitzStatisticsPro.GraphQl.ObjectTypes;
using WotBlitzStatisticsPro.GraphQl.Query;
@@ -32,33 +39,73 @@ namespace WotBlitzStatisticsPro.GraphQl
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" });
// Add GraphQL Services
services.AddGraphQLServer()
// 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<WotBlitzStatisticsMutation>()
.AddMutationType(d => d.Name("Mutation"))
.AddType<WotBlitzStatisticsMutation>()
.AddType<AuthenticationMutation>()
.AddType<AccountsSearchItemObjectType>()
.AddType<AccountsSearchObjectType>()
.AddEnumType<MarkOfMastery>()
.AddEnumType<RealmType>()
.AddEnumType<RequestLanguage>();
.AddEnumType<RequestLanguage>()
.AddAuthorization()
.AddHttpRequestInterceptor(
(context, executor, builder, ct) =>
{
// your code
return ValueTask.CompletedTask;
})
;
}
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app
app
.UseRouting()
.UseAuthorization()
.UseAuthentication()
.UseEndpoints(endpoints =>
{
endpoints.MapGraphQL();