From 5afc3b8c66d2a099fe57b2553a7a86b246f5f583 Mon Sep 17 00:00:00 2001 From: Shane32 Date: Sun, 12 Dec 2021 17:43:51 -0500 Subject: [PATCH 1/4] Add GraphQLBuilder method called AddAuthorization --- .../GraphQL.Authorization.approved.txt | 5 ++++ .../GraphQL.Authorization.Tests.csproj | 2 +- .../GraphQL.Authorization.csproj | 2 +- .../GraphQLBuilderExtensions.cs | 30 +++++++++++++++++++ 4 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 src/GraphQL.Authorization/GraphQLBuilderExtensions.cs diff --git a/src/GraphQL.Authorization.ApiTests/GraphQL.Authorization.approved.txt b/src/GraphQL.Authorization.ApiTests/GraphQL.Authorization.approved.txt index 8839758..63ab415 100644 --- a/src/GraphQL.Authorization.ApiTests/GraphQL.Authorization.approved.txt +++ b/src/GraphQL.Authorization.ApiTests/GraphQL.Authorization.approved.txt @@ -68,6 +68,11 @@ namespace GraphQL.Authorization public System.Collections.Generic.IEnumerable DisplayValues { get; } public System.Threading.Tasks.Task Authorize(GraphQL.Authorization.AuthorizationContext context) { } } + public static class GraphQLBuilderExtensions + { + public static void AddAuthorization(this GraphQL.DI.IGraphQLBuilder builder, System.Action configure) { } + public static void AddAuthorization(this GraphQL.DI.IGraphQLBuilder builder, System.Action configure) { } + } public interface IAuthorizationEvaluator { System.Threading.Tasks.Task Evaluate(System.Security.Claims.ClaimsPrincipal principal, System.Collections.Generic.IDictionary userContext, System.Collections.Generic.IReadOnlyDictionary inputs, System.Collections.Generic.IEnumerable requiredPolicies); diff --git a/src/GraphQL.Authorization.Tests/GraphQL.Authorization.Tests.csproj b/src/GraphQL.Authorization.Tests/GraphQL.Authorization.Tests.csproj index f7a6c63..6908334 100644 --- a/src/GraphQL.Authorization.Tests/GraphQL.Authorization.Tests.csproj +++ b/src/GraphQL.Authorization.Tests/GraphQL.Authorization.Tests.csproj @@ -3,7 +3,7 @@ net5;netcoreapp3.1 - 4.2.0 + 4.6.0 diff --git a/src/GraphQL.Authorization/GraphQL.Authorization.csproj b/src/GraphQL.Authorization/GraphQL.Authorization.csproj index ccd33b9..e51703b 100644 --- a/src/GraphQL.Authorization/GraphQL.Authorization.csproj +++ b/src/GraphQL.Authorization/GraphQL.Authorization.csproj @@ -7,7 +7,7 @@ - + diff --git a/src/GraphQL.Authorization/GraphQLBuilderExtensions.cs b/src/GraphQL.Authorization/GraphQLBuilderExtensions.cs new file mode 100644 index 0000000..debefc0 --- /dev/null +++ b/src/GraphQL.Authorization/GraphQLBuilderExtensions.cs @@ -0,0 +1,30 @@ +using System; +using GraphQL.DI; + +namespace GraphQL.Authorization +{ + /// + public static class GraphQLBuilderExtensions + { + /// + /// Registers and within the + /// dependency injection framework and configures the validation rule to be added to the list of validation rules + /// within upon document execution. + /// Configures authorization settings with the specified configuration delegate. + /// + public static void AddAuthorization(this IGraphQLBuilder builder, Action configure) + { + builder.TryRegister(ServiceLifetime.Singleton); + builder.AddValidationRule(true); + builder.Configure(configure); + } + + /// + public static void AddAuthorization(this IGraphQLBuilder builder, Action configure) + { + builder.TryRegister(ServiceLifetime.Singleton); + builder.AddValidationRule(true); + builder.Configure(configure); + } + } +} From c7745639dd37fc3efb933b19564bbbeb557a0863 Mon Sep 17 00:00:00 2001 From: Shane32 Date: Sun, 12 Dec 2021 17:46:34 -0500 Subject: [PATCH 2/4] Update --- src/GraphQL.Authorization/GraphQLBuilderExtensions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GraphQL.Authorization/GraphQLBuilderExtensions.cs b/src/GraphQL.Authorization/GraphQLBuilderExtensions.cs index debefc0..fb75850 100644 --- a/src/GraphQL.Authorization/GraphQLBuilderExtensions.cs +++ b/src/GraphQL.Authorization/GraphQLBuilderExtensions.cs @@ -9,8 +9,8 @@ public static class GraphQLBuilderExtensions /// /// Registers and within the /// dependency injection framework and configures the validation rule to be added to the list of validation rules - /// within upon document execution. - /// Configures authorization settings with the specified configuration delegate. + /// within and + /// upon document execution. Configures authorization settings with the specified configuration delegate. /// public static void AddAuthorization(this IGraphQLBuilder builder, Action configure) { From 5a50873260678b0446fa2920ff2990b6fda49305 Mon Sep 17 00:00:00 2001 From: Shane Krueger Date: Sun, 12 Dec 2021 18:33:45 -0500 Subject: [PATCH 3/4] Update test.yml --- .github/workflows/test.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6c10299..efa6758 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -30,8 +30,7 @@ jobs: - ubuntu-latest - windows-latest graphqlversion: - - 4.2.0 - - 4.4.0 + - 4.6.1 steps: - name: Checkout source uses: actions/checkout@v2 From 506443fd4703a73c577be4021e42ab188cc59f6e Mon Sep 17 00:00:00 2001 From: Ivan Maximov Date: Wed, 29 Dec 2021 00:33:04 +0300 Subject: [PATCH 4/4] todo --- src/Harness/GraphQLAuthExtensions.cs | 2 +- src/Harness/Startup.cs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Harness/GraphQLAuthExtensions.cs b/src/Harness/GraphQLAuthExtensions.cs index 1e353b7..e844d88 100644 --- a/src/Harness/GraphQLAuthExtensions.cs +++ b/src/Harness/GraphQLAuthExtensions.cs @@ -9,7 +9,7 @@ namespace Harness /// /// Extension methods to add GraphQL authorization into DI container. /// - public static class GraphQLAuthExtensions + public static class GraphQLAuthExtensions // TODO: remove soon { /// /// Adds all necessary classes into provided diff --git a/src/Harness/Startup.cs b/src/Harness/Startup.cs index e03465e..6520869 100644 --- a/src/Harness/Startup.cs +++ b/src/Harness/Startup.cs @@ -39,6 +39,7 @@ type Query { return schema; }); + // TODO: change to IGraphQLBuilder // extension method defined in this project services.AddGraphQLAuth((settings, provider) => settings.AddPolicy("AdminPolicy", p => p.RequireClaim("role", "Admin")));