From ceb3bb3cf5b1f8b761d29dfd20c68991874d5b56 Mon Sep 17 00:00:00 2001 From: queil Date: Mon, 13 Jun 2022 14:10:14 +0100 Subject: [PATCH 1/8] Squashed commit of the following: commit 857d7e4fe1d6ca502bdd5c5e2e95f7631e083de5 Author: queil Date: Mon Jun 13 13:57:49 2022 +0100 Fix tests commit 541972a59f654d44606147f34e990a80ec8bf4ba Merge: aca6c5d7cb 7f79c08d8a Author: queil Date: Mon Jun 13 13:50:39 2022 +0100 Merge branch 'opa-auth' of github.com:AccountTechnologies/hotchocolate into opa-auth commit aca6c5d7cb8bdef976438e043a7d5f26b3ad2695 Author: queil Date: Wed Jun 8 16:18:16 2022 +0100 Formatting + missing ConfigureAwait commit bdf12c3cac12f92a17be791d148ca196925fc5b2 Author: queil Date: Tue Apr 5 15:04:16 2022 +0100 Tests tweaks commit 8de35626e0b2b62267f3b87608b9553885948e94 Author: queil Date: Tue Mar 29 23:10:53 2022 +0100 Convert timeout to ms + clean up commit 06d29b3dbd8ea8b3c3b059e459fcdbce64c70691 Author: queil Date: Tue Mar 29 18:21:23 2022 +0100 Further refinement commit 764fbd1c4f38afc79aa375e809d2efe3178db1c8 Author: queil Date: Tue Mar 29 10:01:31 2022 +0100 Introduce policy result handlers commit 08ecbb9d8b95c5eb9c9d6b0ac19224543a0e5412 Author: queil Date: Wed Feb 2 20:10:52 2022 +0000 Configure await false commit 242059a8379c31e09f3f56a28341701e2da84c4e Author: queil Date: Wed Feb 2 19:54:46 2022 +0000 Deleted redundant snapshots commit e97e2b78c2fff54f7ab3ca2a3e6611db521d8670 Author: queil Date: Wed Feb 2 19:43:02 2022 +0000 Added more tests commit 1ca412660cbafe611f8251e9bd7ecf88fdbb5406 Author: queil Date: Wed Feb 2 17:31:25 2022 +0000 fix: OPA result field serialization fix: mapping no default policy and policy not found responses commit 46363c2b34fa70a25439de5def65f11a822b547e Author: queil Date: Mon Jan 31 16:00:17 2022 +0000 fix: property fails deserializing in netcore3.1 chore: upgrade Opa commit 97777dd703ead28d510bea7cac28b21b67bc05af Author: queil Date: Mon Jan 10 18:34:53 2022 +0000 Make the first test pass commit c838c3796af91eff99cd6f3c995f89437af25231 Author: queil Date: Wed Jan 5 01:42:59 2022 +0000 Iteration 3 commit b79d5d45fdbc6a5798ce5492d85d540ab2b53cd0 Author: queil Date: Tue Jan 4 23:21:55 2022 +0000 Iteration 2 commit a40dd0e30d2fc864a137d6effae13d8f2418673f Author: queil Date: Tue Jan 4 15:53:20 2022 +0000 Remove auto-created project commit ee47a03b0c04ced6e6b6bf4e891d3af537a359de Author: queil Date: Tue Jan 4 15:50:00 2022 +0000 Some initial works commit 7f79c08d8a5d046477f9c20161b711525b7e57ea Author: queil Date: Wed Jun 8 16:18:16 2022 +0100 Formatting + missing ConfigureAwait commit 00c810e029b7e2fd901c4177b212172ac4307f17 Author: queil Date: Tue Apr 5 15:04:16 2022 +0100 Tests tweaks commit f3ea08b5801d77290da1eadc85c799d6ac6f0c05 Author: queil Date: Tue Mar 29 23:10:53 2022 +0100 Convert timeout to ms + clean up commit 278f377a78605a3da73594f624d221865248adee Author: queil Date: Tue Mar 29 18:21:23 2022 +0100 Further refinement commit acfbcd95638d51645d9e3f5f27799e30cbf75d11 Author: queil Date: Tue Mar 29 10:01:31 2022 +0100 Introduce policy result handlers commit ec3c807838f3d9279e26b225aae2811094f04f9c Author: queil Date: Wed Feb 2 20:10:52 2022 +0000 Configure await false commit c9cda848d1091d3b806e5df0fb1876bb6cb21b25 Author: queil Date: Wed Feb 2 19:54:46 2022 +0000 Deleted redundant snapshots commit d79f385cc1abe195432a16a0db9384d2dfd47f58 Author: queil Date: Wed Feb 2 19:43:02 2022 +0000 Added more tests commit 279e2ee4ee3720006ca8eb9561191356a4a42ae2 Author: queil Date: Wed Feb 2 17:31:25 2022 +0000 fix: OPA result field serialization fix: mapping no default policy and policy not found responses commit 8117bdb853a4f3d66e57bed21a9e0d530a579234 Author: queil Date: Mon Jan 31 16:00:17 2022 +0000 fix: property fails deserializing in netcore3.1 chore: upgrade Opa commit 59d9294b13fb371afe50b9a3242ee83829636647 Merge: e43a74d925 ce10dd3dcd Author: queil <4584075+queil@users.noreply.github.com> Date: Mon Jan 31 15:32:48 2022 +0000 Merge branch 'ChilliCream:main' into opa-auth commit e43a74d92531554f43d8415dfc6e09c1c35fc734 Author: queil Date: Mon Jan 10 18:34:53 2022 +0000 Make the first test pass commit c05164fe62df5782582c0dcdb5aae35d01079d7f Author: queil Date: Wed Jan 5 01:42:59 2022 +0000 Iteration 3 commit 64074fc56e7c59b8b714a52a42b7033ca06d7b70 Author: queil Date: Tue Jan 4 23:21:55 2022 +0000 Iteration 2 commit 645a32f5a590822743522d56cfdaed156740492e Author: queil Date: Tue Jan 4 15:53:20 2022 +0000 Remove auto-created project commit 32e375e03603f5885d072e89d18fe48e21aaee5c Author: queil Date: Tue Jan 4 15:50:00 2022 +0000 Some initial works --- .../AspNetCore/HotChocolate.AspNetCore.sln | 704 +++++++++--------- .../DefaultQueryRequestFactory.cs | 48 ++ ...colate.AspNetCore.Authorization.Opa.csproj | 18 + ...hocolateAuthorizeRequestExecutorBuilder.cs | 109 +++ .../OpaAuthorizationHandler.cs | 42 ++ .../OpaJsonExtensions.cs | 34 + .../OpaOptions.cs | 35 + .../OpaService.cs | 30 + .../Result/DelegatePolicyResultHandler.cs | 28 + .../Result/IOpaAuthzResult.cs | 11 + .../Result/IPolicyResultHandler.cs | 10 + .../Result/OpaAuthResult.cs | 13 + .../Result/PolicyResultContext.cs | 17 + .../Result/PolicyResultContextExtensions.cs | 19 + .../Result/PolicyResultHandlerBase.cs | 62 ++ .../Result/QueryResponse.cs | 9 + .../Types/IOpaQueryRequestFactory.cs | 8 + .../Types/IOpaService.cs | 10 + .../Types/IPAndPort.cs | 8 + .../Types/Input.cs | 11 + .../Types/OriginalRequest.cs | 14 + .../Types/Policy.cs | 9 + .../Types/QueryRequest.cs | 6 + .../AuthorizationAttributeTestData.cs | 54 ++ .../AuthorizationTestData.cs | 85 +++ .../AuthorizationTests.cs | 179 +++++ ....AspNetCore.Authorization.Opa.Tests.csproj | 37 + .../Policies.cs | 6 + .../Policies/has_age_defined.rego | 20 + ...orizationTests.DefaultPolicy_NotFound.snap | 25 + ...ts.NoAuthServices_Authenticated_False.snap | 25 + ...sts.NoAuthServices_Authenticated_True.snap | 9 + ...s.PipedAuthorizeDirectives_Authorized.snap | 9 + ...eDirectives_SecondFails_NotAuthorized.snap | 25 + .../AuthorizationTests.Policy_Authorized.snap | 9 + ...ecuted_After_Resolver_User_Is_Allowed.snap | 9 + ...xecuted_After_Resolver_User_Is_Denied.snap | 25 + ...thorizationTests.Policy_NotAuthorized.snap | 25 + .../AuthorizationTests.Policy_NotFound.snap | 25 + ....Policy_Resources_Is_IResolverContext.snap | 9 + .../AuthorizationTests.Roles_Authorized.snap | 9 + ...Roles_UserHasAllOfTheRoles_Authorized.snap | 9 + ...s_UserHasDifferentRoles_NotAuthorized.snap | 25 + ...ts.Roles_UserHasNoRoles_NotAuthorized.snap | 25 + ...s_UserHasNoneOfTheRoles_NotAuthorized.snap | 25 + ...Roles_UserHasOneOfTheRoles_Authorized.snap | 9 + 46 files changed, 1596 insertions(+), 337 deletions(-) create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/DefaultQueryRequestFactory.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/HotChocolate.AspNetCore.Authorization.Opa.csproj create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/HotChocolateAuthorizeRequestExecutorBuilder.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaAuthorizationHandler.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaJsonExtensions.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaOptions.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaService.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/DelegatePolicyResultHandler.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/IOpaAuthzResult.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/IPolicyResultHandler.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/OpaAuthResult.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultContext.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultContextExtensions.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultHandlerBase.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/QueryResponse.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/IOpaQueryRequestFactory.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/IOpaService.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/IPAndPort.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/Input.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/OriginalRequest.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/Policy.cs create mode 100644 src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/QueryRequest.cs create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationAttributeTestData.cs create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationTestData.cs create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationTests.cs create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/HotChocolate.AspNetCore.Authorization.Opa.Tests.csproj create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/Policies.cs create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/Policies/has_age_defined.rego create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.DefaultPolicy_NotFound.snap create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.NoAuthServices_Authenticated_False.snap create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.NoAuthServices_Authenticated_True.snap create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.PipedAuthorizeDirectives_Authorized.snap create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.PipedAuthorizeDirectives_SecondFails_NotAuthorized.snap create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_Authorized.snap create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_Is_Executed_After_Resolver_User_Is_Allowed.snap create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_Is_Executed_After_Resolver_User_Is_Denied.snap create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_NotAuthorized.snap create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_NotFound.snap create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_Resources_Is_IResolverContext.snap create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_Authorized.snap create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasAllOfTheRoles_Authorized.snap create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasDifferentRoles_NotAuthorized.snap create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasNoRoles_NotAuthorized.snap create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasNoneOfTheRoles_NotAuthorized.snap create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasOneOfTheRoles_Authorized.snap diff --git a/src/HotChocolate/AspNetCore/HotChocolate.AspNetCore.sln b/src/HotChocolate/AspNetCore/HotChocolate.AspNetCore.sln index 99620d02cff..991e9aa9d02 100644 --- a/src/HotChocolate/AspNetCore/HotChocolate.AspNetCore.sln +++ b/src/HotChocolate/AspNetCore/HotChocolate.AspNetCore.sln @@ -1,337 +1,367 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29521.150 -MinimumVisualStudioVersion = 15.0.26124.0 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".referenced", ".referenced", "{8A75EB03-3E25-4819-AE7D-1159D5AED817}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{2E2070DF-95C2-48F2-A8DF-7FE3734817ED}" - ProjectSection(SolutionItems) = preProject - src\Directory.Build.props = src\Directory.Build.props - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{936FF2E5-6576-4257-A7A3-F2093D44E6CD}" - ProjectSection(SolutionItems) = preProject - test\Directory.Build.props = test\Directory.Build.props - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Utilities", "..\Utilities\src\Utilities\HotChocolate.Utilities.csproj", "{8FF12870-B977-4B59-9160-5A5A2779E080}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Language", "..\Language\src\Language\HotChocolate.Language.csproj", "{71D64387-DB0B-45D9-BCB8-ED3A24495F1B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Language.SyntaxTree", "..\Language\src\Language.SyntaxTree\HotChocolate.Language.SyntaxTree.csproj", "{7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Language.Utf8", "..\Language\src\Language.Utf8\HotChocolate.Language.Utf8.csproj", "{E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Language.Visitors", "..\Language\src\Language.Visitors\HotChocolate.Language.Visitors.csproj", "{FFCB768F-C8CA-41D9-93A4-D2350CC98B32}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Abstractions", "..\Core\src\Abstractions\HotChocolate.Abstractions.csproj", "{9A55530E-6D7D-49EC-8778-C2D78083E9F6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Core", "..\Core\src\Core\HotChocolate.Core.csproj", "{D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Subscriptions", "..\Core\src\Subscriptions\HotChocolate.Subscriptions.csproj", "{06D319CD-0583-414F-A881-F91232F427D6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Types", "..\Core\src\Types\HotChocolate.Types.csproj", "{8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.AspNetCore", "src\AspNetCore\HotChocolate.AspNetCore.csproj", "{2564795C-046C-443D-8841-A24C59D7EE28}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.AspNetCore.Tests", "test\AspNetCore.Tests\HotChocolate.AspNetCore.Tests.csproj", "{F62C1404-5CB2-45BF-B9F8-87760034FEAE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.StarWars.Tests", "..\Core\test\StarWars\HotChocolate.StarWars.Tests.csproj", "{6E957940-24FD-4163-BBD5-4786C9373E56}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Subscriptions.InMemory", "..\Core\src\Subscriptions.InMemory\HotChocolate.Subscriptions.InMemory.csproj", "{86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Execution", "..\Core\src\Execution\HotChocolate.Execution.csproj", "{9957A20C-4DCC-4643-B97D-ACF00D75C702}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Authorization", "src\AspNetCore.Authorization\HotChocolate.AspNetCore.Authorization.csproj", "{3DA60297-97CB-4712-89C6-F71EB75F98EA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Authorization.Tests", "test\AspNetCore.Authorization.Tests\HotChocolate.AspNetCore.Authorization.Tests.csproj", "{CBADBC3F-FACC-424C-8E7D-28A029F5C238}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Transport.Sockets", "src\Transport.Sockets\HotChocolate.Transport.Sockets.csproj", "{8E85603A-E36A-4133-BF04-7734BCD02D1F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Transport.Sockets.Client", "src\Transport.Sockets.Client\HotChocolate.Transport.Sockets.Client.csproj", "{1284182A-3F75-4AF3-A1EE-7D7085C3545A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Transport.Sockets.Client.Tests", "test\Transport.Sockets.Client.Tests\HotChocolate.Transport.Sockets.Client.Tests.csproj", "{D9401ED9-D6BB-49C7-A92E-E0714D04590F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Tests.Utilities", "test\AspNetCore.Tests.Utilities\HotChocolate.AspNetCore.Tests.Utilities.csproj", "{8DC0428A-C7C6-4496-95AB-2612FA95BE9E}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|x64.ActiveCfg = Debug|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|x64.Build.0 = Debug|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|x86.ActiveCfg = Debug|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|x86.Build.0 = Debug|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|Any CPU.Build.0 = Release|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|x64.ActiveCfg = Release|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|x64.Build.0 = Release|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|x86.ActiveCfg = Release|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|x86.Build.0 = Release|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|x64.ActiveCfg = Debug|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|x64.Build.0 = Debug|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|x86.ActiveCfg = Debug|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|x86.Build.0 = Debug|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|Any CPU.Build.0 = Release|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|x64.ActiveCfg = Release|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|x64.Build.0 = Release|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|x86.ActiveCfg = Release|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|x86.Build.0 = Release|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|x64.ActiveCfg = Debug|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|x64.Build.0 = Debug|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|x86.ActiveCfg = Debug|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|x86.Build.0 = Debug|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|Any CPU.Build.0 = Release|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|x64.ActiveCfg = Release|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|x64.Build.0 = Release|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|x86.ActiveCfg = Release|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|x86.Build.0 = Release|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|x64.ActiveCfg = Debug|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|x64.Build.0 = Debug|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|x86.ActiveCfg = Debug|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|x86.Build.0 = Debug|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|Any CPU.Build.0 = Release|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|x64.ActiveCfg = Release|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|x64.Build.0 = Release|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|x86.ActiveCfg = Release|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|x86.Build.0 = Release|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|x64.ActiveCfg = Debug|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|x64.Build.0 = Debug|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|x86.ActiveCfg = Debug|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|x86.Build.0 = Debug|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|Any CPU.Build.0 = Release|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|x64.ActiveCfg = Release|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|x64.Build.0 = Release|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|x86.ActiveCfg = Release|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|x86.Build.0 = Release|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|x64.ActiveCfg = Debug|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|x64.Build.0 = Debug|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|x86.ActiveCfg = Debug|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|x86.Build.0 = Debug|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|Any CPU.Build.0 = Release|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|x64.ActiveCfg = Release|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|x64.Build.0 = Release|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|x86.ActiveCfg = Release|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|x86.Build.0 = Release|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|x64.ActiveCfg = Debug|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|x64.Build.0 = Debug|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|x86.ActiveCfg = Debug|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|x86.Build.0 = Debug|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|Any CPU.Build.0 = Release|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|x64.ActiveCfg = Release|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|x64.Build.0 = Release|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|x86.ActiveCfg = Release|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|x86.Build.0 = Release|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Debug|x64.ActiveCfg = Debug|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Debug|x64.Build.0 = Debug|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Debug|x86.ActiveCfg = Debug|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Debug|x86.Build.0 = Debug|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Release|Any CPU.Build.0 = Release|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Release|x64.ActiveCfg = Release|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Release|x64.Build.0 = Release|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Release|x86.ActiveCfg = Release|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Release|x86.Build.0 = Release|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|x64.ActiveCfg = Debug|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|x64.Build.0 = Debug|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|x86.ActiveCfg = Debug|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|x86.Build.0 = Debug|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|Any CPU.Build.0 = Release|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|x64.ActiveCfg = Release|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|x64.Build.0 = Release|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|x86.ActiveCfg = Release|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|x86.Build.0 = Release|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|x64.ActiveCfg = Debug|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|x64.Build.0 = Debug|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|x86.ActiveCfg = Debug|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|x86.Build.0 = Debug|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Release|Any CPU.Build.0 = Release|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Release|x64.ActiveCfg = Release|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Release|x64.Build.0 = Release|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Release|x86.ActiveCfg = Release|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Release|x86.Build.0 = Release|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|x64.ActiveCfg = Debug|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|x64.Build.0 = Debug|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|x86.ActiveCfg = Debug|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|x86.Build.0 = Debug|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|Any CPU.Build.0 = Release|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|x64.ActiveCfg = Release|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|x64.Build.0 = Release|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|x86.ActiveCfg = Release|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|x86.Build.0 = Release|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|x64.ActiveCfg = Debug|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|x64.Build.0 = Debug|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|x86.ActiveCfg = Debug|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|x86.Build.0 = Debug|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|Any CPU.Build.0 = Release|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|x64.ActiveCfg = Release|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|x64.Build.0 = Release|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|x86.ActiveCfg = Release|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|x86.Build.0 = Release|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|Any CPU.Build.0 = Debug|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|x64.ActiveCfg = Debug|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|x64.Build.0 = Debug|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|x86.ActiveCfg = Debug|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|x86.Build.0 = Debug|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|Any CPU.ActiveCfg = Release|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|Any CPU.Build.0 = Release|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|x64.ActiveCfg = Release|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|x64.Build.0 = Release|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|x86.ActiveCfg = Release|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|x86.Build.0 = Release|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|x64.ActiveCfg = Debug|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|x64.Build.0 = Debug|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|x86.ActiveCfg = Debug|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|x86.Build.0 = Debug|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|Any CPU.Build.0 = Release|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|x64.ActiveCfg = Release|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|x64.Build.0 = Release|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|x86.ActiveCfg = Release|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|x86.Build.0 = Release|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|x64.ActiveCfg = Debug|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|x64.Build.0 = Debug|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|x86.ActiveCfg = Debug|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|x86.Build.0 = Debug|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|Any CPU.Build.0 = Release|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|x64.ActiveCfg = Release|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|x64.Build.0 = Release|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|x86.ActiveCfg = Release|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|x86.Build.0 = Release|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|x64.ActiveCfg = Debug|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|x64.Build.0 = Debug|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|x86.ActiveCfg = Debug|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|x86.Build.0 = Debug|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|Any CPU.Build.0 = Release|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x64.ActiveCfg = Release|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x64.Build.0 = Release|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x86.ActiveCfg = Release|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x86.Build.0 = Release|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|x64.ActiveCfg = Debug|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|x64.Build.0 = Debug|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|x86.ActiveCfg = Debug|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|x86.Build.0 = Debug|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|Any CPU.Build.0 = Release|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|x64.ActiveCfg = Release|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|x64.Build.0 = Release|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|x86.ActiveCfg = Release|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|x86.Build.0 = Release|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|x64.ActiveCfg = Debug|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|x64.Build.0 = Debug|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|x86.ActiveCfg = Debug|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|x86.Build.0 = Debug|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|Any CPU.Build.0 = Release|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|x64.ActiveCfg = Release|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|x64.Build.0 = Release|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|x86.ActiveCfg = Release|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|x86.Build.0 = Release|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|x64.ActiveCfg = Debug|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|x64.Build.0 = Debug|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|x86.ActiveCfg = Debug|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|x86.Build.0 = Debug|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|Any CPU.Build.0 = Release|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|x64.ActiveCfg = Release|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|x64.Build.0 = Release|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|x86.ActiveCfg = Release|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|x86.Build.0 = Release|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|x64.ActiveCfg = Debug|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|x64.Build.0 = Debug|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|x86.ActiveCfg = Debug|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|x86.Build.0 = Debug|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|Any CPU.Build.0 = Release|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x64.ActiveCfg = Release|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x64.Build.0 = Release|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x86.ActiveCfg = Release|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {8FF12870-B977-4B59-9160-5A5A2779E080} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {9A55530E-6D7D-49EC-8778-C2D78083E9F6} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {06D319CD-0583-414F-A881-F91232F427D6} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {2564795C-046C-443D-8841-A24C59D7EE28} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} - {F62C1404-5CB2-45BF-B9F8-87760034FEAE} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} - {6E957940-24FD-4163-BBD5-4786C9373E56} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {9957A20C-4DCC-4643-B97D-ACF00D75C702} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {3DA60297-97CB-4712-89C6-F71EB75F98EA} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} - {CBADBC3F-FACC-424C-8E7D-28A029F5C238} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} - {8E85603A-E36A-4133-BF04-7734BCD02D1F} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} - {1284182A-3F75-4AF3-A1EE-7D7085C3545A} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} - {D9401ED9-D6BB-49C7-A92E-E0714D04590F} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {EAA92712-961A-4595-82AD-C031830477CC} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29521.150 +MinimumVisualStudioVersion = 15.0.26124.0 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".referenced", ".referenced", "{8A75EB03-3E25-4819-AE7D-1159D5AED817}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{2E2070DF-95C2-48F2-A8DF-7FE3734817ED}" + ProjectSection(SolutionItems) = preProject + src\Directory.Build.props = src\Directory.Build.props + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{936FF2E5-6576-4257-A7A3-F2093D44E6CD}" + ProjectSection(SolutionItems) = preProject + test\Directory.Build.props = test\Directory.Build.props + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Utilities", "..\Utilities\src\Utilities\HotChocolate.Utilities.csproj", "{8FF12870-B977-4B59-9160-5A5A2779E080}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Language", "..\Language\src\Language\HotChocolate.Language.csproj", "{71D64387-DB0B-45D9-BCB8-ED3A24495F1B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Language.SyntaxTree", "..\Language\src\Language.SyntaxTree\HotChocolate.Language.SyntaxTree.csproj", "{7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Language.Utf8", "..\Language\src\Language.Utf8\HotChocolate.Language.Utf8.csproj", "{E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Language.Visitors", "..\Language\src\Language.Visitors\HotChocolate.Language.Visitors.csproj", "{FFCB768F-C8CA-41D9-93A4-D2350CC98B32}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Abstractions", "..\Core\src\Abstractions\HotChocolate.Abstractions.csproj", "{9A55530E-6D7D-49EC-8778-C2D78083E9F6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Core", "..\Core\src\Core\HotChocolate.Core.csproj", "{D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Subscriptions", "..\Core\src\Subscriptions\HotChocolate.Subscriptions.csproj", "{06D319CD-0583-414F-A881-F91232F427D6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Types", "..\Core\src\Types\HotChocolate.Types.csproj", "{8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.AspNetCore", "src\AspNetCore\HotChocolate.AspNetCore.csproj", "{2564795C-046C-443D-8841-A24C59D7EE28}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.AspNetCore.Tests", "test\AspNetCore.Tests\HotChocolate.AspNetCore.Tests.csproj", "{F62C1404-5CB2-45BF-B9F8-87760034FEAE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.StarWars.Tests", "..\Core\test\StarWars\HotChocolate.StarWars.Tests.csproj", "{6E957940-24FD-4163-BBD5-4786C9373E56}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Subscriptions.InMemory", "..\Core\src\Subscriptions.InMemory\HotChocolate.Subscriptions.InMemory.csproj", "{86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Execution", "..\Core\src\Execution\HotChocolate.Execution.csproj", "{9957A20C-4DCC-4643-B97D-ACF00D75C702}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.AspNetCore.Authorization", "src\AspNetCore.Authorization\HotChocolate.AspNetCore.Authorization.csproj", "{3DA60297-97CB-4712-89C6-F71EB75F98EA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.AspNetCore.Authorization.Tests", "test\AspNetCore.Authorization.Tests\HotChocolate.AspNetCore.Authorization.Tests.csproj", "{CBADBC3F-FACC-424C-8E7D-28A029F5C238}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.AspNetCore.Authorization.Opa", "src\AspNetCore.Authorization.Opa\HotChocolate.AspNetCore.Authorization.Opa.csproj", "{6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.AspNetCore.Authorization.Opa.Tests", "test\AspNetCore.Authorization.Opa.Tests\HotChocolate.AspNetCore.Authorization.Opa.Tests.csproj", "{30A5797F-205D-4FA4-976D-8F707139CE51}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Transport.Sockets", "src\Transport.Sockets\HotChocolate.Transport.Sockets.csproj", "{8E85603A-E36A-4133-BF04-7734BCD02D1F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Transport.Sockets.Client", "src\Transport.Sockets.Client\HotChocolate.Transport.Sockets.Client.csproj", "{1284182A-3F75-4AF3-A1EE-7D7085C3545A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Transport.Sockets.Client.Tests", "test\Transport.Sockets.Client.Tests\HotChocolate.Transport.Sockets.Client.Tests.csproj", "{D9401ED9-D6BB-49C7-A92E-E0714D04590F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Tests.Utilities", "test\AspNetCore.Tests.Utilities\HotChocolate.AspNetCore.Tests.Utilities.csproj", "{8DC0428A-C7C6-4496-95AB-2612FA95BE9E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|x64.ActiveCfg = Debug|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|x64.Build.0 = Debug|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|x86.ActiveCfg = Debug|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|x86.Build.0 = Debug|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|Any CPU.Build.0 = Release|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|x64.ActiveCfg = Release|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|x64.Build.0 = Release|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|x86.ActiveCfg = Release|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|x86.Build.0 = Release|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|x64.ActiveCfg = Debug|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|x64.Build.0 = Debug|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|x86.ActiveCfg = Debug|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|x86.Build.0 = Debug|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|Any CPU.Build.0 = Release|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|x64.ActiveCfg = Release|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|x64.Build.0 = Release|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|x86.ActiveCfg = Release|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|x86.Build.0 = Release|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|x64.ActiveCfg = Debug|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|x64.Build.0 = Debug|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|x86.ActiveCfg = Debug|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|x86.Build.0 = Debug|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|Any CPU.Build.0 = Release|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|x64.ActiveCfg = Release|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|x64.Build.0 = Release|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|x86.ActiveCfg = Release|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|x86.Build.0 = Release|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|x64.ActiveCfg = Debug|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|x64.Build.0 = Debug|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|x86.ActiveCfg = Debug|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|x86.Build.0 = Debug|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|Any CPU.Build.0 = Release|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|x64.ActiveCfg = Release|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|x64.Build.0 = Release|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|x86.ActiveCfg = Release|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|x86.Build.0 = Release|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|x64.ActiveCfg = Debug|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|x64.Build.0 = Debug|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|x86.ActiveCfg = Debug|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|x86.Build.0 = Debug|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|Any CPU.Build.0 = Release|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|x64.ActiveCfg = Release|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|x64.Build.0 = Release|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|x86.ActiveCfg = Release|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|x86.Build.0 = Release|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|x64.ActiveCfg = Debug|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|x64.Build.0 = Debug|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|x86.ActiveCfg = Debug|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|x86.Build.0 = Debug|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|Any CPU.Build.0 = Release|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|x64.ActiveCfg = Release|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|x64.Build.0 = Release|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|x86.ActiveCfg = Release|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|x86.Build.0 = Release|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|x64.ActiveCfg = Debug|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|x64.Build.0 = Debug|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|x86.ActiveCfg = Debug|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|x86.Build.0 = Debug|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|Any CPU.Build.0 = Release|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|x64.ActiveCfg = Release|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|x64.Build.0 = Release|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|x86.ActiveCfg = Release|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|x86.Build.0 = Release|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Debug|x64.ActiveCfg = Debug|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Debug|x64.Build.0 = Debug|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Debug|x86.ActiveCfg = Debug|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Debug|x86.Build.0 = Debug|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Release|Any CPU.Build.0 = Release|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Release|x64.ActiveCfg = Release|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Release|x64.Build.0 = Release|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Release|x86.ActiveCfg = Release|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Release|x86.Build.0 = Release|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|x64.ActiveCfg = Debug|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|x64.Build.0 = Debug|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|x86.ActiveCfg = Debug|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|x86.Build.0 = Debug|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|Any CPU.Build.0 = Release|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|x64.ActiveCfg = Release|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|x64.Build.0 = Release|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|x86.ActiveCfg = Release|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|x86.Build.0 = Release|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|x64.ActiveCfg = Debug|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|x64.Build.0 = Debug|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|x86.ActiveCfg = Debug|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|x86.Build.0 = Debug|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Release|Any CPU.Build.0 = Release|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Release|x64.ActiveCfg = Release|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Release|x64.Build.0 = Release|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Release|x86.ActiveCfg = Release|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Release|x86.Build.0 = Release|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|x64.ActiveCfg = Debug|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|x64.Build.0 = Debug|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|x86.ActiveCfg = Debug|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|x86.Build.0 = Debug|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|Any CPU.Build.0 = Release|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|x64.ActiveCfg = Release|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|x64.Build.0 = Release|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|x86.ActiveCfg = Release|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|x86.Build.0 = Release|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|x64.ActiveCfg = Debug|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|x64.Build.0 = Debug|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|x86.ActiveCfg = Debug|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|x86.Build.0 = Debug|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|Any CPU.Build.0 = Release|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|x64.ActiveCfg = Release|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|x64.Build.0 = Release|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|x86.ActiveCfg = Release|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|x86.Build.0 = Release|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|Any CPU.Build.0 = Debug|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|x64.ActiveCfg = Debug|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|x64.Build.0 = Debug|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|x86.ActiveCfg = Debug|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|x86.Build.0 = Debug|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|Any CPU.ActiveCfg = Release|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|Any CPU.Build.0 = Release|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|x64.ActiveCfg = Release|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|x64.Build.0 = Release|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|x86.ActiveCfg = Release|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|x86.Build.0 = Release|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|x64.ActiveCfg = Debug|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|x64.Build.0 = Debug|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|x86.ActiveCfg = Debug|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|x86.Build.0 = Debug|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|Any CPU.Build.0 = Release|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|x64.ActiveCfg = Release|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|x64.Build.0 = Release|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|x86.ActiveCfg = Release|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|x86.Build.0 = Release|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|x64.ActiveCfg = Debug|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|x64.Build.0 = Debug|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|x86.ActiveCfg = Debug|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|x86.Build.0 = Debug|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|Any CPU.Build.0 = Release|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|x64.ActiveCfg = Release|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|x64.Build.0 = Release|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|x86.ActiveCfg = Release|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|x86.Build.0 = Release|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|x64.ActiveCfg = Debug|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|x64.Build.0 = Debug|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|x86.ActiveCfg = Debug|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|x86.Build.0 = Debug|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|Any CPU.Build.0 = Release|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x64.ActiveCfg = Release|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x64.Build.0 = Release|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x86.ActiveCfg = Release|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x86.Build.0 = Release|Any CPU + {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Debug|x64.ActiveCfg = Debug|Any CPU + {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Debug|x64.Build.0 = Debug|Any CPU + {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Debug|x86.ActiveCfg = Debug|Any CPU + {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Debug|x86.Build.0 = Debug|Any CPU + {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Release|Any CPU.Build.0 = Release|Any CPU + {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Release|x64.ActiveCfg = Release|Any CPU + {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Release|x64.Build.0 = Release|Any CPU + {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Release|x86.ActiveCfg = Release|Any CPU + {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Release|x86.Build.0 = Release|Any CPU + {30A5797F-205D-4FA4-976D-8F707139CE51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {30A5797F-205D-4FA4-976D-8F707139CE51}.Debug|Any CPU.Build.0 = Debug|Any CPU + {30A5797F-205D-4FA4-976D-8F707139CE51}.Debug|x64.ActiveCfg = Debug|Any CPU + {30A5797F-205D-4FA4-976D-8F707139CE51}.Debug|x64.Build.0 = Debug|Any CPU + {30A5797F-205D-4FA4-976D-8F707139CE51}.Debug|x86.ActiveCfg = Debug|Any CPU + {30A5797F-205D-4FA4-976D-8F707139CE51}.Debug|x86.Build.0 = Debug|Any CPU + {30A5797F-205D-4FA4-976D-8F707139CE51}.Release|Any CPU.ActiveCfg = Release|Any CPU + {30A5797F-205D-4FA4-976D-8F707139CE51}.Release|Any CPU.Build.0 = Release|Any CPU + {30A5797F-205D-4FA4-976D-8F707139CE51}.Release|x64.ActiveCfg = Release|Any CPU + {30A5797F-205D-4FA4-976D-8F707139CE51}.Release|x64.Build.0 = Release|Any CPU + {30A5797F-205D-4FA4-976D-8F707139CE51}.Release|x86.ActiveCfg = Release|Any CPU + {30A5797F-205D-4FA4-976D-8F707139CE51}.Release|x86.Build.0 = Release|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|x64.ActiveCfg = Debug|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|x64.Build.0 = Debug|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|x86.ActiveCfg = Debug|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|x86.Build.0 = Debug|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|Any CPU.Build.0 = Release|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|x64.ActiveCfg = Release|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|x64.Build.0 = Release|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|x86.ActiveCfg = Release|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|x86.Build.0 = Release|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|x64.ActiveCfg = Debug|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|x64.Build.0 = Debug|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|x86.ActiveCfg = Debug|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|x86.Build.0 = Debug|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|Any CPU.Build.0 = Release|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|x64.ActiveCfg = Release|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|x64.Build.0 = Release|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|x86.ActiveCfg = Release|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|x86.Build.0 = Release|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|x64.ActiveCfg = Debug|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|x64.Build.0 = Debug|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|x86.ActiveCfg = Debug|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|x86.Build.0 = Debug|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|Any CPU.Build.0 = Release|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|x64.ActiveCfg = Release|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|x64.Build.0 = Release|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|x86.ActiveCfg = Release|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|x86.Build.0 = Release|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|x64.ActiveCfg = Debug|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|x64.Build.0 = Debug|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|x86.ActiveCfg = Debug|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|x86.Build.0 = Debug|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|Any CPU.Build.0 = Release|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x64.ActiveCfg = Release|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x64.Build.0 = Release|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x86.ActiveCfg = Release|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {8FF12870-B977-4B59-9160-5A5A2779E080} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {9A55530E-6D7D-49EC-8778-C2D78083E9F6} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {06D319CD-0583-414F-A881-F91232F427D6} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {2564795C-046C-443D-8841-A24C59D7EE28} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} + {F62C1404-5CB2-45BF-B9F8-87760034FEAE} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} + {6E957940-24FD-4163-BBD5-4786C9373E56} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {9957A20C-4DCC-4643-B97D-ACF00D75C702} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {3DA60297-97CB-4712-89C6-F71EB75F98EA} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} + {CBADBC3F-FACC-424C-8E7D-28A029F5C238} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} + {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} + {30A5797F-205D-4FA4-976D-8F707139CE51} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} + {8E85603A-E36A-4133-BF04-7734BCD02D1F} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} + {1284182A-3F75-4AF3-A1EE-7D7085C3545A} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} + {D9401ED9-D6BB-49C7-A92E-E0714D04590F} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {EAA92712-961A-4595-82AD-C031830477CC} + EndGlobalSection +EndGlobal diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/DefaultQueryRequestFactory.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/DefaultQueryRequestFactory.cs new file mode 100644 index 00000000000..d5aae80e558 --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/DefaultQueryRequestFactory.cs @@ -0,0 +1,48 @@ +using System; +using System.Linq; +using HotChocolate.Resolvers; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection; + +namespace HotChocolate.AspNetCore.Authorization; + +public class DefaultQueryRequestFactory : IOpaQueryRequestFactory +{ + public QueryRequest CreateRequest(IMiddlewareContext context, AuthorizeDirective directive) + { + IHttpContextAccessor? accessor = context.Services.GetService(); + HttpContext? http = accessor.HttpContext; + ConnectionInfo? connection = http.Connection; + + var request = new QueryRequest + { + Input = new Input + { + Policy = + new Policy + { + Path = directive.Policy ?? string.Empty, + Roles = directive.Roles is null ? Array.Empty() : directive.Roles.ToArray() + }, + Request = new OriginalRequest + { + Headers = http.Request.Headers.ToDictionary(h => h.Key, h => h.Value.ToString()), + Host = http.Request.Host.Value, + Method = http.Request.Method, + Path = http.Request.Path.Value, + Query = http.Request.Query, + Scheme = http.Request.Scheme + }, + Source = new IPAndPort + { + IpAddress = connection.RemoteIpAddress.ToString(), Port = connection.RemotePort + }, + Destination = new IPAndPort + { + IpAddress = connection.LocalIpAddress.ToString(), Port = connection.LocalPort + } + } + }; + return request; + } +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/HotChocolate.AspNetCore.Authorization.Opa.csproj b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/HotChocolate.AspNetCore.Authorization.Opa.csproj new file mode 100644 index 00000000000..dc8e1c80736 --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/HotChocolate.AspNetCore.Authorization.Opa.csproj @@ -0,0 +1,18 @@ + + + + $(LibraryTargetFrameworks) + enable + + + + + + + + + + + + + diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/HotChocolateAuthorizeRequestExecutorBuilder.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/HotChocolateAuthorizeRequestExecutorBuilder.cs new file mode 100644 index 00000000000..82c3ec727bd --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/HotChocolateAuthorizeRequestExecutorBuilder.cs @@ -0,0 +1,109 @@ +using System; +using HotChocolate.AspNetCore.Authorization; +using HotChocolate.Execution.Configuration; +using Microsoft.Extensions.Configuration; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Threading.Tasks; +using HotChocolate.Resolvers; +using Microsoft.Extensions.Options; + +namespace Microsoft.Extensions.DependencyInjection; + +/// +/// Provides extension methods for the GraphQL builder. +/// +public static class HotChocolateAuthorizeRequestExecutorBuilder +{ + /// + /// Adds OPA authorization handler. + /// + /// + /// The . + /// + /// + /// Configure . + /// + /// + /// Returns the for chaining in more configurations. + /// + public static IRequestExecutorBuilder AddOpaAuthorizationHandler( + this IRequestExecutorBuilder builder, Action? configure = null) + { + builder.AddAuthorizationHandler(); + builder.Services.AddSingleton(); + builder.Services.AddHttpClient((f, c) => + { + IOptions? options = f.GetRequiredService>(); + c.BaseAddress = options.Value.BaseAddress; + c.Timeout = TimeSpan.FromMilliseconds(options.Value.TimeoutMs); + }); + + builder.Services.AddOptions().Configure((o, f) => + { + var jsonOptions = new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, +#if NET5_0_OR_GREATER + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull +#else + IgnoreNullValues = true +#endif + }; + jsonOptions.Converters.Add(new JsonStringEnumConverter(JsonNamingPolicy.CamelCase, false)); + o.JsonSerializerOptions = jsonOptions; + configure?.Invoke(f.GetRequiredService(), o); + }); + + return builder; + } + + public static IRequestExecutorBuilder AddOpaResultHandler(this IRequestExecutorBuilder builder, + string policyPath, Func? factory = null) + where T : class, IPolicyResultHandler + { + if (factory is not null) + { + builder.Services.AddSingleton(factory); + } + else + { + builder.Services.AddSingleton(); + } + + builder.Services.AddOptions() + .Configure((o, f) => + { + o.PolicyResultHandlers.Add(policyPath, f.GetRequiredService()); + }); + return builder; + } + + public static IRequestExecutorBuilder AddOpaResultHandlerAsync(this IRequestExecutorBuilder builder, + string policyPath, Func, Task>> func) + { + return builder.AddOpaResultHandler(policyPath, + f => new DelegatePolicyResultHandler(func, f.GetRequiredService>())); + } + + public static IRequestExecutorBuilder AddOpaResultHandler(this IRequestExecutorBuilder builder, + string policyPath, Func, IOpaAuthzResult> makeDecisionFunc, + Action>? onAllowed = null + ) + { + return builder.AddOpaResultHandler(policyPath, + f => + new DelegatePolicyResultHandler( + ctx => Task.FromResult(makeDecisionFunc(ctx)), + f.GetRequiredService>()) + { + OnAllowedFunc = onAllowed is not null + ? (context, result) => + { + onAllowed(context, result); + return Task.CompletedTask; + } + : null + }); + } +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaAuthorizationHandler.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaAuthorizationHandler.cs new file mode 100644 index 00000000000..b828285855b --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaAuthorizationHandler.cs @@ -0,0 +1,42 @@ +using System; +using System.Net.Http; +using System.Threading.Tasks; +using HotChocolate.Resolvers; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; + +namespace HotChocolate.AspNetCore.Authorization; + +/// +/// An implementation that delegates authz to OPA (Open Policy Agent) REST API endpoint +/// +public class OpaAuthorizationHandler : IAuthorizationHandler +{ + /// + /// Authorize current directive using OPA (Open Policy Agent). + /// + /// The current middleware context. + /// The authorization directive. + /// + /// Returns a value indicating if the current session is authorized to + /// access the resolver data. + /// + public async ValueTask AuthorizeAsync( + IMiddlewareContext context, + AuthorizeDirective directive) + { + IOpaService? opaService = context.Services.GetRequiredService(); + IOpaQueryRequestFactory? factory = context.Services.GetRequiredService(); + IOptions options = context.Services.GetRequiredService>(); + + var policyPath = directive.Policy ?? string.Empty; + + HttpResponseMessage? httpResponse = await opaService.QueryAsync(policyPath, + factory.CreateRequest(context, directive), context.RequestAborted).ConfigureAwait(false); + + if (httpResponse is null) throw new InvalidOperationException("Opa response must not be null"); + + return await options.Value.GetResultHandlerFor(policyPath).HandleAsync(policyPath, httpResponse, context) + .ConfigureAwait(false); + } +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaJsonExtensions.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaJsonExtensions.cs new file mode 100644 index 00000000000..5cf111983a7 --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaJsonExtensions.cs @@ -0,0 +1,34 @@ +#if NET6_0 +using System.Net.Http.Json; +#endif +using System.Net.Http; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +namespace HotChocolate.AspNetCore.Authorization; + +internal static class OpaJsonExtensions +{ + internal static HttpContent ToJsonContent(this QueryRequest request, JsonSerializerOptions options) + { +#if NET6_0 + return JsonContent.Create(request, options: options); +#else + var body = JsonSerializer.Serialize(request, options); + return new StringContent(body, System.Text.Encoding.UTF8, "application/json"); +#endif + } + + internal static async Task FromJsonAsync(this HttpContent content, JsonSerializerOptions options, + CancellationToken token) + { +#if NET6_0 + return await content.ReadFromJsonAsync(options, token).ConfigureAwait(false); +#else + return await JsonSerializer + .DeserializeAsync(await content.ReadAsStreamAsync().ConfigureAwait(false), options, token) + .ConfigureAwait(false); +#endif + } +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaOptions.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaOptions.cs new file mode 100644 index 00000000000..e05bda4720e --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaOptions.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Text.RegularExpressions; + +namespace HotChocolate.AspNetCore.Authorization; + +public sealed class OpaOptions +{ + public Uri BaseAddress { get; set; } = new("http://127.0.0.1:8181/v1/data/"); + public int TimeoutMs { get; set; } = 250; + public JsonSerializerOptions JsonSerializerOptions { get; set; } = new(); + public Dictionary PolicyResultHandlers { get; } = new(); + private readonly ConcurrentDictionary _handlerKeysRegexes = new(); + + public IPolicyResultHandler GetResultHandlerFor(string policyPath) + { + if (PolicyResultHandlers.TryGetValue(policyPath, out IPolicyResultHandler? handler)) + { + return handler; + } + + KeyValuePair maybeHandler = PolicyResultHandlers.SingleOrDefault(k => + { + Regex regex = _handlerKeysRegexes.GetOrAdd(k.Key, + new Regex(k.Key, RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.CultureInvariant)); + return regex.IsMatch(policyPath); + }); + return maybeHandler.Value is { } h + ? h + : throw new InvalidOperationException($"No result handler found for policy: {policyPath}"); + } +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaService.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaService.cs new file mode 100644 index 00000000000..1ddd90455aa --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaService.cs @@ -0,0 +1,30 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Options; + +namespace HotChocolate.AspNetCore.Authorization; + +public sealed class OpaService : IOpaService +{ + private readonly HttpClient _httpClient; + private readonly OpaOptions _options; + + public OpaService(HttpClient httpClient, IOptions options) + { + _httpClient = httpClient ?? throw new ArgumentNullException(nameof(httpClient)); + _options = options.Value ?? throw new ArgumentNullException(nameof(options)); + } + + public async Task QueryAsync(string policyPath, QueryRequest request, CancellationToken token) + { + if (policyPath is null) throw new ArgumentNullException(nameof(policyPath)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + HttpResponseMessage response = await _httpClient + .PostAsync(policyPath, request.ToJsonContent(_options.JsonSerializerOptions), token).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + return response; + } +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/DelegatePolicyResultHandler.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/DelegatePolicyResultHandler.cs new file mode 100644 index 00000000000..88d92ed4c70 --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/DelegatePolicyResultHandler.cs @@ -0,0 +1,28 @@ +using System; +using System.Threading.Tasks; +using HotChocolate.Resolvers; +using Microsoft.Extensions.Options; + +namespace HotChocolate.AspNetCore.Authorization; + +public class DelegatePolicyResultHandler : PolicyResultHandlerBase +{ + public Func, Task>? OnAllowedFunc { get; set; } + + private readonly Func, Task>> _makeDecision; + + public DelegatePolicyResultHandler( + Func, Task>> makeDecision, + IOptions options) : base(options) + { + _makeDecision = makeDecision; + } + + protected override Task> MakeDecision(PolicyResultContext context) => _makeDecision(context); + + protected override Task OnAllowed(IMiddlewareContext context, IOpaAuthzResult result) + { + if (OnAllowedFunc is { } func) return func(context, result); + return Task.CompletedTask; + } +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/IOpaAuthzResult.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/IOpaAuthzResult.cs new file mode 100644 index 00000000000..dc25cdb0ee0 --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/IOpaAuthzResult.cs @@ -0,0 +1,11 @@ +namespace HotChocolate.AspNetCore.Authorization; + +public interface IOpaAuthzResult : IOpaAuthzResult +{ + T? Payload { get; } +} + +public interface IOpaAuthzResult +{ + AuthorizeResult Result { get; } +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/IPolicyResultHandler.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/IPolicyResultHandler.cs new file mode 100644 index 00000000000..aa8e5a9f5d6 --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/IPolicyResultHandler.cs @@ -0,0 +1,10 @@ +using System.Net.Http; +using System.Threading.Tasks; +using HotChocolate.Resolvers; + +namespace HotChocolate.AspNetCore.Authorization; + +public interface IPolicyResultHandler +{ + Task HandleAsync(string policyPath, HttpResponseMessage response, IMiddlewareContext context); +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/OpaAuthResult.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/OpaAuthResult.cs new file mode 100644 index 00000000000..efbfd4d9af4 --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/OpaAuthResult.cs @@ -0,0 +1,13 @@ +namespace HotChocolate.AspNetCore.Authorization; + +public class OpaAuthzResult : IOpaAuthzResult +{ + public OpaAuthzResult(AuthorizeResult result, T? payload) + { + Result = result; + Payload = payload; + } + + public AuthorizeResult Result { get; } + public T? Payload { get; } +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultContext.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultContext.cs new file mode 100644 index 00000000000..24ed8f40f02 --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultContext.cs @@ -0,0 +1,17 @@ +using HotChocolate.Resolvers; + +namespace HotChocolate.AspNetCore.Authorization; + +public class PolicyResultContext +{ + public PolicyResultContext(string policyPath, T result, IMiddlewareContext context) + { + PolicyPath = policyPath; + Result = result; + MiddlewareContext = context; + } + + public string PolicyPath { get; } + public T? Result { get; } + public IMiddlewareContext MiddlewareContext { get; } +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultContextExtensions.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultContextExtensions.cs new file mode 100644 index 00000000000..eed06140a11 --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultContextExtensions.cs @@ -0,0 +1,19 @@ +namespace HotChocolate.AspNetCore.Authorization; + +public static class PolicyResultContextExtensions +{ + public static OpaAuthzResult Allowed(this PolicyResultContext context) => + new(AuthorizeResult.Allowed, context.Result); + + public static OpaAuthzResult NotAllowed(this PolicyResultContext context) => + new(AuthorizeResult.NotAllowed, context.Result); + + public static OpaAuthzResult NotAuthenticated(this PolicyResultContext context) => + new(AuthorizeResult.NotAuthenticated, context.Result); + + public static OpaAuthzResult PolicyNotFound(this PolicyResultContext context) => + new(AuthorizeResult.PolicyNotFound, context.Result); + + public static OpaAuthzResult NoDefaultPolicy(this PolicyResultContext context) => + new(AuthorizeResult.NoDefaultPolicy, context.Result); +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultHandlerBase.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultHandlerBase.cs new file mode 100644 index 00000000000..8f87f6ed7b0 --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultHandlerBase.cs @@ -0,0 +1,62 @@ +using System; +using System.Net.Http; +using System.Threading.Tasks; +using HotChocolate.Resolvers; +using Microsoft.Extensions.Options; + +namespace HotChocolate.AspNetCore.Authorization; + +public abstract class PolicyResultHandlerBase : IPolicyResultHandler +{ + private readonly IOptions _options; + protected PolicyResultHandlerBase(IOptions options) => _options = options; + protected abstract Task> MakeDecision(PolicyResultContext context); + protected virtual Task OnAllowed(IMiddlewareContext context, IOpaAuthzResult result) => Task.CompletedTask; + protected virtual Task OnNotAllowed(IMiddlewareContext context, IOpaAuthzResult result) => Task.CompletedTask; + + protected virtual Task OnPolicyNotFound(IMiddlewareContext context, IOpaAuthzResult result) => + Task.CompletedTask; + + protected virtual Task OnNotAuthenticated(IMiddlewareContext context, IOpaAuthzResult result) => + Task.CompletedTask; + + protected virtual Task OnNoDefaultPolicy(IMiddlewareContext context, IOpaAuthzResult result) => + Task.CompletedTask; + + public async Task HandleAsync(string policyPath, HttpResponseMessage response, + IMiddlewareContext context) + { + QueryResponse responseObj = await response.Content + .FromJsonAsync>(_options.Value.JsonSerializerOptions, context.RequestAborted) + .ConfigureAwait(false); + + if (responseObj is not { Result: var result }) + throw new InvalidOperationException("Opa deserialized response must not be null"); + + IOpaAuthzResult opaAuthzResult = await MakeDecision(new PolicyResultContext(policyPath, result, context)) + .ConfigureAwait(false); + + switch (opaAuthzResult.Result) + { + case AuthorizeResult.Allowed: + await OnAllowed(context, opaAuthzResult); + break; + case AuthorizeResult.NotAllowed: + await OnNotAllowed(context, opaAuthzResult); + break; + case AuthorizeResult.NotAuthenticated: + await OnNotAuthenticated(context, opaAuthzResult); + break; + case AuthorizeResult.NoDefaultPolicy: + await OnNoDefaultPolicy(context, opaAuthzResult); + break; + case AuthorizeResult.PolicyNotFound: + await OnPolicyNotFound(context, opaAuthzResult); + break; + default: + throw new ArgumentOutOfRangeException($"{opaAuthzResult.Result}"); + } + + return opaAuthzResult.Result; + } +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/QueryResponse.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/QueryResponse.cs new file mode 100644 index 00000000000..fc37794aec2 --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/QueryResponse.cs @@ -0,0 +1,9 @@ +using System; + +namespace HotChocolate.AspNetCore.Authorization; + +public sealed class QueryResponse +{ + public Guid? DecisionId { get; set; } + public T? Result { get; set; } +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/IOpaQueryRequestFactory.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/IOpaQueryRequestFactory.cs new file mode 100644 index 00000000000..4bb44dd3186 --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/IOpaQueryRequestFactory.cs @@ -0,0 +1,8 @@ +using HotChocolate.Resolvers; + +namespace HotChocolate.AspNetCore.Authorization; + +public interface IOpaQueryRequestFactory +{ + QueryRequest CreateRequest(IMiddlewareContext context, AuthorizeDirective directive); +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/IOpaService.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/IOpaService.cs new file mode 100644 index 00000000000..4dc4dc73297 --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/IOpaService.cs @@ -0,0 +1,10 @@ +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; + +namespace HotChocolate.AspNetCore.Authorization; + +public interface IOpaService +{ + Task QueryAsync(string policyPath, QueryRequest request, CancellationToken token); +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/IPAndPort.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/IPAndPort.cs new file mode 100644 index 00000000000..4e062cf281d --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/IPAndPort.cs @@ -0,0 +1,8 @@ +namespace HotChocolate.AspNetCore.Authorization; + +public sealed class IPAndPort +{ + public string IpAddress { get; set; } = string.Empty; + public int Port { get; set; } + public static readonly IPAndPort Empty = new(); +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/Input.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/Input.cs new file mode 100644 index 00000000000..79d0957245d --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/Input.cs @@ -0,0 +1,11 @@ +namespace HotChocolate.AspNetCore.Authorization; + +public sealed class Input +{ + public Policy Policy { get; set; } = new(); + public OriginalRequest Request { get; set; } = new(); + public IPAndPort Source { get; set; } = IPAndPort.Empty; + public IPAndPort Destination { get; set; } = IPAndPort.Empty; + public object? Extensions { get; set; } + public static readonly Input Empty = new(); +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/OriginalRequest.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/OriginalRequest.cs new file mode 100644 index 00000000000..6f2887ff7f2 --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/OriginalRequest.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using Microsoft.Extensions.Primitives; + +namespace HotChocolate.AspNetCore.Authorization; + +public sealed class OriginalRequest +{ + public IDictionary? Headers { get; set; } + public string Host { get; set; } = string.Empty; + public string Method { get; set; } = string.Empty; + public string Path { get; set; } = string.Empty; + public IEnumerable>? Query { get; set; } + public string Scheme { get; set; } = string.Empty; +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/Policy.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/Policy.cs new file mode 100644 index 00000000000..dd91c50608a --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/Policy.cs @@ -0,0 +1,9 @@ +using System; + +namespace HotChocolate.AspNetCore.Authorization; + +public sealed class Policy +{ + public string Path { get; set; } = string.Empty; + public string[] Roles { get; set; } = Array.Empty(); +} diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/QueryRequest.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/QueryRequest.cs new file mode 100644 index 00000000000..53213aff200 --- /dev/null +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Types/QueryRequest.cs @@ -0,0 +1,6 @@ +namespace HotChocolate.AspNetCore.Authorization; + +public sealed class QueryRequest +{ + public Input Input { get; set; } = Input.Empty; +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationAttributeTestData.cs b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationAttributeTestData.cs new file mode 100644 index 00000000000..27fe77c8818 --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationAttributeTestData.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using HotChocolate.Execution.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace HotChocolate.AspNetCore.Authorization; + +public class AuthorizationAttributeTestData : IEnumerable +{ + public class Query + { + [Authorize] + public string GetDefault() => "foo"; + + [Authorize(Policy = Policies.HasDefinedAge)] + public string GetAge() => "foo"; + + [Authorize(Roles = new[] { "a" })] + public string GetRoles() => "foo"; + + [Authorize(Roles = new[] { "a", "b" })] + [GraphQLName("roles_ab")] + public string GetRolesAb() => "foo"; + + [Authorize(Policy = "a")] + [Authorize(Policy = "b")] + public string GetPiped() => "foo"; + + [Authorize(Policy = "a", Apply = ApplyPolicy.AfterResolver)] + public string GetAfterResolver() => "foo"; + } + + private Action CreateSchema() => + builder => builder + .AddQueryType() + .AddAuthorization() + .AddOpaAuthorizationHandler((c, o) => + { + o.TimeoutMs = 60000; + }).AddOpaResultHandler(Policies.HasDefinedAge, + x => x switch + { + { Result.Allow: true } => x.Allowed(), + _ => x.NotAllowed(), + }); + + public IEnumerator GetEnumerator() + { + yield return new object[] { CreateSchema() }; + } + + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationTestData.cs b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationTestData.cs new file mode 100644 index 00000000000..d45411d7a2d --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationTestData.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using HotChocolate.Execution.Configuration; +using HotChocolate.Resolvers; +using Microsoft.Extensions.DependencyInjection; + +namespace HotChocolate.AspNetCore.Authorization; + +public class HasAgeDefinedResponse +{ + public bool Allow { get; set; } + public Claims Claims { get; set; } +} + +public class Claims +{ + public string Birthdate { get; set; } + public long Iat { get; set; } + public string Name { get; set; } + public string Sub { get; set; } +} + +public class AuthorizationTestData : IEnumerable +{ + private readonly string SchemaCode = $@" + type Query {{ + default: String @authorize + age: String @authorize(policy: ""{Policies.HasDefinedAge}"") + roles: String @authorize(roles: [""a""]) + roles_ab: String @authorize(roles: [""a"" ""b""]) + piped: String + @authorize(policy: ""a"") + @authorize(policy: ""b"") + afterResolver: String + @authorize(policy: ""a"" apply: AFTER_RESOLVER) + }} + "; + + private readonly FieldMiddleware _schemaMiddleware = next => context => + { + context.Result = "foo"; + return next.Invoke(context); + }; + + private Action CreateSchema() => + sb => sb + .AddDocumentFromString(SchemaCode) + .AddAuthorization() + .AddOpaAuthorizationHandler((c, o) => + { + o.TimeoutMs = 60000; + }) + .AddOpaResultHandler(Policies.HasDefinedAge, + x => x switch + { + { Result.Allow: true } => x.Allowed(), + _ => x.NotAllowed(), + }) + .UseField(_schemaMiddleware); + + private Action CreateSchemaWithBuilder() => + sb => sb + .AddDocumentFromString(SchemaCode) + .AddAuthorization() + .AddOpaAuthorizationHandler((c, o) => + { + o.TimeoutMs = 60000; + }) + .AddOpaResultHandler(Policies.HasDefinedAge, + x => x switch + { + { Result.Allow: true } => x.Allowed(), + _ => x.NotAllowed(), + }) + .UseField(_schemaMiddleware); + + public IEnumerator GetEnumerator() + { + yield return new object[] { CreateSchema() }; + yield return new object[] { CreateSchemaWithBuilder() }; + } + + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationTests.cs b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationTests.cs new file mode 100644 index 00000000000..78f30d35f40 --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationTests.cs @@ -0,0 +1,179 @@ +using System; +using System.IO; +using System.Net; +using System.Net.Http; +using System.Threading.Tasks; +using HotChocolate.AspNetCore.Tests.Utilities; +using HotChocolate.Execution.Configuration; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.DependencyInjection; +using Opa.Native; +using Snapshooter.Xunit; +using Xunit; + +namespace HotChocolate.AspNetCore.Authorization; + +public class AuthorizationTests : ServerTestBase, IAsyncLifetime +{ + private OpaHandle _opaHandle; + public AuthorizationTests(TestServerFactory serverFactory) + : base(serverFactory) + { + } + private static void SetUpHttpContext(HttpContext context) + { + ConnectionInfo connection = context.Connection; + connection.LocalIpAddress = IPAddress.Loopback; + connection.LocalPort = 5555; + connection.RemoteIpAddress = IPAddress.Loopback; + connection.RemotePort = 7777; + } + + public async Task InitializeAsync() => _opaHandle = await OpaProcess.StartServerAsync(); + + [Theory] + [ClassData(typeof(AuthorizationTestData))] + [ClassData(typeof(AuthorizationAttributeTestData))] + public async Task DefaultPolicy_NotFound(Action configure) + { + // arrange + TestServer server = CreateTestServer( + builder => + { + configure(builder); + builder.Services.AddAuthorization(); + }, + SetUpHttpContext); + + // act + ClientQueryResult result = + await server.PostAsync(new ClientQueryRequest { Query = "{ default }" }); + + // assert + Assert.Equal(HttpStatusCode.OK, result.StatusCode); + result.MatchSnapshot(); + } + + [Theory] + [ClassData(typeof(AuthorizationTestData))] + [ClassData(typeof(AuthorizationAttributeTestData))] + public async Task Policy_NotFound(Action configure) + { + // arrange + TestServer server = CreateTestServer( + builder => + { + configure(builder); + builder.Services.AddAuthorization(); + + }, + SetUpHttpContext); + + // act + ClientQueryResult result = + await server.PostAsync(new ClientQueryRequest { Query = "{ age }" }); + + // assert + Assert.Equal(HttpStatusCode.OK, result.StatusCode); + result.MatchSnapshot(); + } + + [Theory] + [ClassData(typeof(AuthorizationTestData))] + [ClassData(typeof(AuthorizationAttributeTestData))] + public async Task Policy_NotAuthorized(Action configure) + { + // arrange + TestServer server = CreateTestServer( + builder => + { + configure(builder); + builder.Services.AddAuthorization(); + + }, + SetUpHttpContext + (Action)(c => + { + c.Request.Headers["Authorization"] = + "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lI" + + "iwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"; + })); + + var hasAgeDefinedPolicy = await File.ReadAllTextAsync("policies/has_age_defined.rego"); + using var client = new HttpClient { BaseAddress = new Uri("http://127.0.0.1:8181") }; + + HttpResponseMessage putPolicyResponse = await client.PutAsync("/v1/policies/has_age_defined", new StringContent(hasAgeDefinedPolicy)); + putPolicyResponse.EnsureSuccessStatusCode(); + + // act + ClientQueryResult result = + await server.PostAsync(new ClientQueryRequest { Query = "{ age }" }); + + // assert + Assert.Equal(HttpStatusCode.OK, result.StatusCode); + result.MatchSnapshot(); + } + + [Theory] + [ClassData(typeof(AuthorizationTestData))] + [ClassData(typeof(AuthorizationAttributeTestData))] + public async Task Policy_Authorized(Action configure) + { + // arrange + TestServer server = CreateTestServer( + builder => + { + configure(builder); + builder.Services.AddAuthorization(); + + }, + SetUpHttpContext + (Action)(c => + { + c.Request.Headers["Authorization"] = + "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lI" + + "iwiaWF0IjoxNTE2MjM5MDIyLCJiaXJ0aGRhdGUiOiIxNy0xMS0yMDAwIn0.p88IUnrabPMh6LVi4DIYsDeZozjfj4Ofwg" + + "jXBglnxac"; + })); + + var hasAgeDefinedPolicy = await File.ReadAllTextAsync("policies/has_age_defined.rego"); + using var client = new HttpClient { BaseAddress = new Uri("http://127.0.0.1:8181") }; + + HttpResponseMessage putPolicyResponse = await client.PutAsync("/v1/policies/has_age_defined", new StringContent(hasAgeDefinedPolicy)); + putPolicyResponse.EnsureSuccessStatusCode(); + + // act + ClientQueryResult result = + await server.PostAsync(new ClientQueryRequest { Query = "{ age }" }); + + // assert + Assert.Equal(HttpStatusCode.OK, result.StatusCode); + result.MatchSnapshot(); + } + + private TestServer CreateTestServer( + Action build, + Action configureUser) + { + return ServerFactory.Create( + services => + { + build(services + .AddRouting() + .AddGraphQLServer() + .AddHttpRequestInterceptor( + (context, requestExecutor, requestBuilder, cancellationToken) => + { + configureUser(context); + return default; + })); + }, + app => + { + app.UseRouting(); + app.UseEndpoints(b => b.MapGraphQL()); + }); + } + + public async Task DisposeAsync() => await _opaHandle.DisposeAsync(); +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/HotChocolate.AspNetCore.Authorization.Opa.Tests.csproj b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/HotChocolate.AspNetCore.Authorization.Opa.Tests.csproj new file mode 100644 index 00000000000..36708a40fd0 --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/HotChocolate.AspNetCore.Authorization.Opa.Tests.csproj @@ -0,0 +1,37 @@ + + + + HotChocolate.AspNetCore.Authorization.Tests + HotChocolate.AspNetCore.Authorization + + + + + + + + + + + + Always + + + Always + + + + + + + + + + + + + + + + + diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/Policies.cs b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/Policies.cs new file mode 100644 index 00000000000..4c4298feb0d --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/Policies.cs @@ -0,0 +1,6 @@ +namespace HotChocolate.AspNetCore.Authorization; + +public static class Policies +{ + public const string HasDefinedAge = "graphql/authz/has_age_defined/allow"; +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/Policies/has_age_defined.rego b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/Policies/has_age_defined.rego new file mode 100644 index 00000000000..70e0f0e5319 --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/Policies/has_age_defined.rego @@ -0,0 +1,20 @@ +# Warning: this policy exists only for testing purposes. +# How to correctly validate JWT tokens in OPA: https://www.openpolicyagent.org/docs/latest/oauth-oidc/ + +package graphql.authz.has_age_defined + +import input.request + +default allow = { "allow" : false } + +valid_jwt = [is_valid, claims] { + token := replace(request.headers["Authorization"], "Bearer ", "") + claims := io.jwt.decode(token)[1] + is_valid := startswith(token, "eyJhbG") # a toy validation + is_valid +} + +allow = {"allow": is_valid, "claims": claims } { + [is_valid, claims] := valid_jwt + claims.birthdate +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.DefaultPolicy_NotFound.snap b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.DefaultPolicy_NotFound.snap new file mode 100644 index 00000000000..2bdf740744b --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.DefaultPolicy_NotFound.snap @@ -0,0 +1,25 @@ +{ + "ContentType": "application/json; charset=utf-8", + "StatusCode": "OK", + "Data": { + "default": null + }, + "Errors": [ + { + "message": "The default authorization policy does not exist.", + "locations": [ + { + "line": 1, + "column": 3 + } + ], + "path": [ + "default" + ], + "extensions": { + "code": "AUTH_NO_DEFAULT_POLICY" + } + } + ], + "Extensions": null +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.NoAuthServices_Authenticated_False.snap b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.NoAuthServices_Authenticated_False.snap new file mode 100644 index 00000000000..0403cb3a798 --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.NoAuthServices_Authenticated_False.snap @@ -0,0 +1,25 @@ +{ + "ContentType": "application/json; charset=utf-8", + "StatusCode": "OK", + "Data": { + "default": null + }, + "Errors": [ + { + "message": "The current user is not authorized to access this resource.", + "locations": [ + { + "line": 1, + "column": 3 + } + ], + "path": [ + "default" + ], + "extensions": { + "code": "AUTH_NOT_AUTHENTICATED" + } + } + ], + "Extensions": null +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.NoAuthServices_Authenticated_True.snap b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.NoAuthServices_Authenticated_True.snap new file mode 100644 index 00000000000..2205fd9f7c9 --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.NoAuthServices_Authenticated_True.snap @@ -0,0 +1,9 @@ +{ + "ContentType": "application/json; charset=utf-8", + "StatusCode": "OK", + "Data": { + "default": "foo" + }, + "Errors": null, + "Extensions": null +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.PipedAuthorizeDirectives_Authorized.snap b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.PipedAuthorizeDirectives_Authorized.snap new file mode 100644 index 00000000000..3df2f44e0d4 --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.PipedAuthorizeDirectives_Authorized.snap @@ -0,0 +1,9 @@ +{ + "ContentType": "application/json; charset=utf-8", + "StatusCode": "OK", + "Data": { + "piped": "foo" + }, + "Errors": null, + "Extensions": null +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.PipedAuthorizeDirectives_SecondFails_NotAuthorized.snap b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.PipedAuthorizeDirectives_SecondFails_NotAuthorized.snap new file mode 100644 index 00000000000..666f112f24a --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.PipedAuthorizeDirectives_SecondFails_NotAuthorized.snap @@ -0,0 +1,25 @@ +{ + "ContentType": "application/json; charset=utf-8", + "StatusCode": "OK", + "Data": { + "piped": null + }, + "Errors": [ + { + "message": "The current user is not authorized to access this resource.", + "locations": [ + { + "line": 1, + "column": 3 + } + ], + "path": [ + "piped" + ], + "extensions": { + "code": "AUTH_NOT_AUTHORIZED" + } + } + ], + "Extensions": null +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_Authorized.snap b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_Authorized.snap new file mode 100644 index 00000000000..3d4b82771e9 --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_Authorized.snap @@ -0,0 +1,9 @@ +{ + "ContentType": "application/json; charset=utf-8", + "StatusCode": "OK", + "Data": { + "age": "foo" + }, + "Errors": null, + "Extensions": null +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_Is_Executed_After_Resolver_User_Is_Allowed.snap b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_Is_Executed_After_Resolver_User_Is_Allowed.snap new file mode 100644 index 00000000000..edfa0e72326 --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_Is_Executed_After_Resolver_User_Is_Allowed.snap @@ -0,0 +1,9 @@ +{ + "ContentType": "application/json; charset=utf-8", + "StatusCode": "OK", + "Data": { + "afterResolver": "foo" + }, + "Errors": null, + "Extensions": null +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_Is_Executed_After_Resolver_User_Is_Denied.snap b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_Is_Executed_After_Resolver_User_Is_Denied.snap new file mode 100644 index 00000000000..8b6c9f03ed8 --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_Is_Executed_After_Resolver_User_Is_Denied.snap @@ -0,0 +1,25 @@ +{ + "ContentType": "application/json; charset=utf-8", + "StatusCode": "OK", + "Data": { + "afterResolver": null + }, + "Errors": [ + { + "message": "The current user is not authorized to access this resource.", + "locations": [ + { + "line": 1, + "column": 3 + } + ], + "path": [ + "afterResolver" + ], + "extensions": { + "code": "AUTH_NOT_AUTHORIZED" + } + } + ], + "Extensions": null +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_NotAuthorized.snap b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_NotAuthorized.snap new file mode 100644 index 00000000000..39a2261460f --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_NotAuthorized.snap @@ -0,0 +1,25 @@ +{ + "ContentType": "application/json; charset=utf-8", + "StatusCode": "OK", + "Data": { + "age": null + }, + "Errors": [ + { + "message": "The current user is not authorized to access this resource.", + "locations": [ + { + "line": 1, + "column": 3 + } + ], + "path": [ + "age" + ], + "extensions": { + "code": "AUTH_NOT_AUTHORIZED" + } + } + ], + "Extensions": null +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_NotFound.snap b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_NotFound.snap new file mode 100644 index 00000000000..7fb288f4848 --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_NotFound.snap @@ -0,0 +1,25 @@ +{ + "ContentType": "application/json; charset=utf-8", + "StatusCode": "OK", + "Data": { + "age": null + }, + "Errors": [ + { + "message": "The `graphql/authz/has_age_defined/allow` authorization policy does not exist.", + "locations": [ + { + "line": 1, + "column": 3 + } + ], + "path": [ + "age" + ], + "extensions": { + "code": "AUTH_POLICY_NOT_FOUND" + } + } + ], + "Extensions": null +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_Resources_Is_IResolverContext.snap b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_Resources_Is_IResolverContext.snap new file mode 100644 index 00000000000..3d4b82771e9 --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Policy_Resources_Is_IResolverContext.snap @@ -0,0 +1,9 @@ +{ + "ContentType": "application/json; charset=utf-8", + "StatusCode": "OK", + "Data": { + "age": "foo" + }, + "Errors": null, + "Extensions": null +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_Authorized.snap b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_Authorized.snap new file mode 100644 index 00000000000..76b0541c80b --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_Authorized.snap @@ -0,0 +1,9 @@ +{ + "ContentType": "application/json; charset=utf-8", + "StatusCode": "OK", + "Data": { + "roles": "foo" + }, + "Errors": null, + "Extensions": null +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasAllOfTheRoles_Authorized.snap b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasAllOfTheRoles_Authorized.snap new file mode 100644 index 00000000000..b305234eddf --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasAllOfTheRoles_Authorized.snap @@ -0,0 +1,9 @@ +{ + "ContentType": "application/json; charset=utf-8", + "StatusCode": "OK", + "Data": { + "roles_ab": "foo" + }, + "Errors": null, + "Extensions": null +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasDifferentRoles_NotAuthorized.snap b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasDifferentRoles_NotAuthorized.snap new file mode 100644 index 00000000000..ee1ab3ccb78 --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasDifferentRoles_NotAuthorized.snap @@ -0,0 +1,25 @@ +{ + "ContentType": "application/json; charset=utf-8", + "StatusCode": "OK", + "Data": { + "roles": null + }, + "Errors": [ + { + "message": "The current user is not authorized to access this resource.", + "locations": [ + { + "line": 1, + "column": 3 + } + ], + "path": [ + "roles" + ], + "extensions": { + "code": "AUTH_NOT_AUTHORIZED" + } + } + ], + "Extensions": null +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasNoRoles_NotAuthorized.snap b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasNoRoles_NotAuthorized.snap new file mode 100644 index 00000000000..ee1ab3ccb78 --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasNoRoles_NotAuthorized.snap @@ -0,0 +1,25 @@ +{ + "ContentType": "application/json; charset=utf-8", + "StatusCode": "OK", + "Data": { + "roles": null + }, + "Errors": [ + { + "message": "The current user is not authorized to access this resource.", + "locations": [ + { + "line": 1, + "column": 3 + } + ], + "path": [ + "roles" + ], + "extensions": { + "code": "AUTH_NOT_AUTHORIZED" + } + } + ], + "Extensions": null +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasNoneOfTheRoles_NotAuthorized.snap b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasNoneOfTheRoles_NotAuthorized.snap new file mode 100644 index 00000000000..a4de572a65c --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasNoneOfTheRoles_NotAuthorized.snap @@ -0,0 +1,25 @@ +{ + "ContentType": "application/json; charset=utf-8", + "StatusCode": "OK", + "Data": { + "roles_ab": null + }, + "Errors": [ + { + "message": "The current user is not authorized to access this resource.", + "locations": [ + { + "line": 1, + "column": 3 + } + ], + "path": [ + "roles_ab" + ], + "extensions": { + "code": "AUTH_NOT_AUTHORIZED" + } + } + ], + "Extensions": null +} diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasOneOfTheRoles_Authorized.snap b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasOneOfTheRoles_Authorized.snap new file mode 100644 index 00000000000..b305234eddf --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/__snapshots__/AuthorizationTests.Roles_UserHasOneOfTheRoles_Authorized.snap @@ -0,0 +1,9 @@ +{ + "ContentType": "application/json; charset=utf-8", + "StatusCode": "OK", + "Data": { + "roles_ab": "foo" + }, + "Errors": null, + "Extensions": null +} From aa1ec3cdbd2064d6d6ee0977b414fdfc0e03b992 Mon Sep 17 00:00:00 2001 From: queil Date: Mon, 13 Jun 2022 14:18:50 +0100 Subject: [PATCH 2/8] Fix sln + encoding --- .../AspNetCore/HotChocolate.AspNetCore.sln | 66 +++++++++---------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/HotChocolate/AspNetCore/HotChocolate.AspNetCore.sln b/src/HotChocolate/AspNetCore/HotChocolate.AspNetCore.sln index 991e9aa9d02..e7499046987 100644 --- a/src/HotChocolate/AspNetCore/HotChocolate.AspNetCore.sln +++ b/src/HotChocolate/AspNetCore/HotChocolate.AspNetCore.sln @@ -41,15 +41,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.StarWars.Tests EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Subscriptions.InMemory", "..\Core\src\Subscriptions.InMemory\HotChocolate.Subscriptions.InMemory.csproj", "{86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Execution", "..\Core\src\Execution\HotChocolate.Execution.csproj", "{9957A20C-4DCC-4643-B97D-ACF00D75C702}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Execution", "..\Core\src\Execution\HotChocolate.Execution.csproj", "{9957A20C-4DCC-4643-B97D-ACF00D75C702}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.AspNetCore.Authorization", "src\AspNetCore.Authorization\HotChocolate.AspNetCore.Authorization.csproj", "{3DA60297-97CB-4712-89C6-F71EB75F98EA}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Authorization", "src\AspNetCore.Authorization\HotChocolate.AspNetCore.Authorization.csproj", "{3DA60297-97CB-4712-89C6-F71EB75F98EA}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.AspNetCore.Authorization.Tests", "test\AspNetCore.Authorization.Tests\HotChocolate.AspNetCore.Authorization.Tests.csproj", "{CBADBC3F-FACC-424C-8E7D-28A029F5C238}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.AspNetCore.Authorization.Opa", "src\AspNetCore.Authorization.Opa\HotChocolate.AspNetCore.Authorization.Opa.csproj", "{6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.AspNetCore.Authorization.Opa.Tests", "test\AspNetCore.Authorization.Opa.Tests\HotChocolate.AspNetCore.Authorization.Opa.Tests.csproj", "{30A5797F-205D-4FA4-976D-8F707139CE51}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Authorization.Tests", "test\AspNetCore.Authorization.Tests\HotChocolate.AspNetCore.Authorization.Tests.csproj", "{CBADBC3F-FACC-424C-8E7D-28A029F5C238}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Transport.Sockets", "src\Transport.Sockets\HotChocolate.Transport.Sockets.csproj", "{8E85603A-E36A-4133-BF04-7734BCD02D1F}" EndProject @@ -59,6 +55,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Transport.Sock EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Tests.Utilities", "test\AspNetCore.Tests.Utilities\HotChocolate.AspNetCore.Tests.Utilities.csproj", "{8DC0428A-C7C6-4496-95AB-2612FA95BE9E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Authorization.Opa", "src\AspNetCore.Authorization.Opa\HotChocolate.AspNetCore.Authorization.Opa.csproj", "{128C8C65-F15E-49A3-86F3-1FE5A48BD546}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Authorization.Opa.Tests", "test\AspNetCore.Authorization.Opa.Tests\HotChocolate.AspNetCore.Authorization.Opa.Tests.csproj", "{7D382D41-CD80-4E27-B973-3756806D0F78}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -261,30 +261,6 @@ Global {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x64.Build.0 = Release|Any CPU {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x86.ActiveCfg = Release|Any CPU {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x86.Build.0 = Release|Any CPU - {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Debug|x64.ActiveCfg = Debug|Any CPU - {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Debug|x64.Build.0 = Debug|Any CPU - {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Debug|x86.ActiveCfg = Debug|Any CPU - {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Debug|x86.Build.0 = Debug|Any CPU - {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Release|Any CPU.Build.0 = Release|Any CPU - {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Release|x64.ActiveCfg = Release|Any CPU - {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Release|x64.Build.0 = Release|Any CPU - {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Release|x86.ActiveCfg = Release|Any CPU - {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87}.Release|x86.Build.0 = Release|Any CPU - {30A5797F-205D-4FA4-976D-8F707139CE51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {30A5797F-205D-4FA4-976D-8F707139CE51}.Debug|Any CPU.Build.0 = Debug|Any CPU - {30A5797F-205D-4FA4-976D-8F707139CE51}.Debug|x64.ActiveCfg = Debug|Any CPU - {30A5797F-205D-4FA4-976D-8F707139CE51}.Debug|x64.Build.0 = Debug|Any CPU - {30A5797F-205D-4FA4-976D-8F707139CE51}.Debug|x86.ActiveCfg = Debug|Any CPU - {30A5797F-205D-4FA4-976D-8F707139CE51}.Debug|x86.Build.0 = Debug|Any CPU - {30A5797F-205D-4FA4-976D-8F707139CE51}.Release|Any CPU.ActiveCfg = Release|Any CPU - {30A5797F-205D-4FA4-976D-8F707139CE51}.Release|Any CPU.Build.0 = Release|Any CPU - {30A5797F-205D-4FA4-976D-8F707139CE51}.Release|x64.ActiveCfg = Release|Any CPU - {30A5797F-205D-4FA4-976D-8F707139CE51}.Release|x64.Build.0 = Release|Any CPU - {30A5797F-205D-4FA4-976D-8F707139CE51}.Release|x86.ActiveCfg = Release|Any CPU - {30A5797F-205D-4FA4-976D-8F707139CE51}.Release|x86.Build.0 = Release|Any CPU {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|Any CPU.Build.0 = Debug|Any CPU {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -333,6 +309,30 @@ Global {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x64.Build.0 = Release|Any CPU {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x86.ActiveCfg = Release|Any CPU {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x86.Build.0 = Release|Any CPU + {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Debug|Any CPU.Build.0 = Debug|Any CPU + {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Debug|x64.ActiveCfg = Debug|Any CPU + {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Debug|x64.Build.0 = Debug|Any CPU + {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Debug|x86.ActiveCfg = Debug|Any CPU + {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Debug|x86.Build.0 = Debug|Any CPU + {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Release|Any CPU.ActiveCfg = Release|Any CPU + {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Release|Any CPU.Build.0 = Release|Any CPU + {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Release|x64.ActiveCfg = Release|Any CPU + {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Release|x64.Build.0 = Release|Any CPU + {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Release|x86.ActiveCfg = Release|Any CPU + {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Release|x86.Build.0 = Release|Any CPU + {7D382D41-CD80-4E27-B973-3756806D0F78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D382D41-CD80-4E27-B973-3756806D0F78}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D382D41-CD80-4E27-B973-3756806D0F78}.Debug|x64.ActiveCfg = Debug|Any CPU + {7D382D41-CD80-4E27-B973-3756806D0F78}.Debug|x64.Build.0 = Debug|Any CPU + {7D382D41-CD80-4E27-B973-3756806D0F78}.Debug|x86.ActiveCfg = Debug|Any CPU + {7D382D41-CD80-4E27-B973-3756806D0F78}.Debug|x86.Build.0 = Debug|Any CPU + {7D382D41-CD80-4E27-B973-3756806D0F78}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D382D41-CD80-4E27-B973-3756806D0F78}.Release|Any CPU.Build.0 = Release|Any CPU + {7D382D41-CD80-4E27-B973-3756806D0F78}.Release|x64.ActiveCfg = Release|Any CPU + {7D382D41-CD80-4E27-B973-3756806D0F78}.Release|x64.Build.0 = Release|Any CPU + {7D382D41-CD80-4E27-B973-3756806D0F78}.Release|x86.ActiveCfg = Release|Any CPU + {7D382D41-CD80-4E27-B973-3756806D0F78}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -354,12 +354,12 @@ Global {9957A20C-4DCC-4643-B97D-ACF00D75C702} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} {3DA60297-97CB-4712-89C6-F71EB75F98EA} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} {CBADBC3F-FACC-424C-8E7D-28A029F5C238} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} - {6CFCB82F-4A89-496A-A261-3FEBDD8EEA87} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} - {30A5797F-205D-4FA4-976D-8F707139CE51} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} {8E85603A-E36A-4133-BF04-7734BCD02D1F} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} {1284182A-3F75-4AF3-A1EE-7D7085C3545A} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} {D9401ED9-D6BB-49C7-A92E-E0714D04590F} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} {8DC0428A-C7C6-4496-95AB-2612FA95BE9E} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} + {128C8C65-F15E-49A3-86F3-1FE5A48BD546} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} + {7D382D41-CD80-4E27-B973-3756806D0F78} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {EAA92712-961A-4595-82AD-C031830477CC} From c9229d8802527af9b819136dfb314cab689a6baa Mon Sep 17 00:00:00 2001 From: queil Date: Mon, 13 Jun 2022 14:20:33 +0100 Subject: [PATCH 3/8] Fix --- .../AspNetCore/HotChocolate.AspNetCore.sln | 704 +++++++++--------- 1 file changed, 337 insertions(+), 367 deletions(-) diff --git a/src/HotChocolate/AspNetCore/HotChocolate.AspNetCore.sln b/src/HotChocolate/AspNetCore/HotChocolate.AspNetCore.sln index e7499046987..99620d02cff 100644 --- a/src/HotChocolate/AspNetCore/HotChocolate.AspNetCore.sln +++ b/src/HotChocolate/AspNetCore/HotChocolate.AspNetCore.sln @@ -1,367 +1,337 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29521.150 -MinimumVisualStudioVersion = 15.0.26124.0 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".referenced", ".referenced", "{8A75EB03-3E25-4819-AE7D-1159D5AED817}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{2E2070DF-95C2-48F2-A8DF-7FE3734817ED}" - ProjectSection(SolutionItems) = preProject - src\Directory.Build.props = src\Directory.Build.props - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{936FF2E5-6576-4257-A7A3-F2093D44E6CD}" - ProjectSection(SolutionItems) = preProject - test\Directory.Build.props = test\Directory.Build.props - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Utilities", "..\Utilities\src\Utilities\HotChocolate.Utilities.csproj", "{8FF12870-B977-4B59-9160-5A5A2779E080}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Language", "..\Language\src\Language\HotChocolate.Language.csproj", "{71D64387-DB0B-45D9-BCB8-ED3A24495F1B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Language.SyntaxTree", "..\Language\src\Language.SyntaxTree\HotChocolate.Language.SyntaxTree.csproj", "{7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Language.Utf8", "..\Language\src\Language.Utf8\HotChocolate.Language.Utf8.csproj", "{E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Language.Visitors", "..\Language\src\Language.Visitors\HotChocolate.Language.Visitors.csproj", "{FFCB768F-C8CA-41D9-93A4-D2350CC98B32}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Abstractions", "..\Core\src\Abstractions\HotChocolate.Abstractions.csproj", "{9A55530E-6D7D-49EC-8778-C2D78083E9F6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Core", "..\Core\src\Core\HotChocolate.Core.csproj", "{D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Subscriptions", "..\Core\src\Subscriptions\HotChocolate.Subscriptions.csproj", "{06D319CD-0583-414F-A881-F91232F427D6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Types", "..\Core\src\Types\HotChocolate.Types.csproj", "{8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.AspNetCore", "src\AspNetCore\HotChocolate.AspNetCore.csproj", "{2564795C-046C-443D-8841-A24C59D7EE28}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.AspNetCore.Tests", "test\AspNetCore.Tests\HotChocolate.AspNetCore.Tests.csproj", "{F62C1404-5CB2-45BF-B9F8-87760034FEAE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.StarWars.Tests", "..\Core\test\StarWars\HotChocolate.StarWars.Tests.csproj", "{6E957940-24FD-4163-BBD5-4786C9373E56}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Subscriptions.InMemory", "..\Core\src\Subscriptions.InMemory\HotChocolate.Subscriptions.InMemory.csproj", "{86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Execution", "..\Core\src\Execution\HotChocolate.Execution.csproj", "{9957A20C-4DCC-4643-B97D-ACF00D75C702}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Authorization", "src\AspNetCore.Authorization\HotChocolate.AspNetCore.Authorization.csproj", "{3DA60297-97CB-4712-89C6-F71EB75F98EA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Authorization.Tests", "test\AspNetCore.Authorization.Tests\HotChocolate.AspNetCore.Authorization.Tests.csproj", "{CBADBC3F-FACC-424C-8E7D-28A029F5C238}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Transport.Sockets", "src\Transport.Sockets\HotChocolate.Transport.Sockets.csproj", "{8E85603A-E36A-4133-BF04-7734BCD02D1F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Transport.Sockets.Client", "src\Transport.Sockets.Client\HotChocolate.Transport.Sockets.Client.csproj", "{1284182A-3F75-4AF3-A1EE-7D7085C3545A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Transport.Sockets.Client.Tests", "test\Transport.Sockets.Client.Tests\HotChocolate.Transport.Sockets.Client.Tests.csproj", "{D9401ED9-D6BB-49C7-A92E-E0714D04590F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Tests.Utilities", "test\AspNetCore.Tests.Utilities\HotChocolate.AspNetCore.Tests.Utilities.csproj", "{8DC0428A-C7C6-4496-95AB-2612FA95BE9E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Authorization.Opa", "src\AspNetCore.Authorization.Opa\HotChocolate.AspNetCore.Authorization.Opa.csproj", "{128C8C65-F15E-49A3-86F3-1FE5A48BD546}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Authorization.Opa.Tests", "test\AspNetCore.Authorization.Opa.Tests\HotChocolate.AspNetCore.Authorization.Opa.Tests.csproj", "{7D382D41-CD80-4E27-B973-3756806D0F78}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|x64.ActiveCfg = Debug|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|x64.Build.0 = Debug|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|x86.ActiveCfg = Debug|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|x86.Build.0 = Debug|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|Any CPU.Build.0 = Release|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|x64.ActiveCfg = Release|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|x64.Build.0 = Release|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|x86.ActiveCfg = Release|Any CPU - {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|x86.Build.0 = Release|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|x64.ActiveCfg = Debug|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|x64.Build.0 = Debug|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|x86.ActiveCfg = Debug|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|x86.Build.0 = Debug|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|Any CPU.Build.0 = Release|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|x64.ActiveCfg = Release|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|x64.Build.0 = Release|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|x86.ActiveCfg = Release|Any CPU - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|x86.Build.0 = Release|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|x64.ActiveCfg = Debug|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|x64.Build.0 = Debug|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|x86.ActiveCfg = Debug|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|x86.Build.0 = Debug|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|Any CPU.Build.0 = Release|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|x64.ActiveCfg = Release|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|x64.Build.0 = Release|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|x86.ActiveCfg = Release|Any CPU - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|x86.Build.0 = Release|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|x64.ActiveCfg = Debug|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|x64.Build.0 = Debug|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|x86.ActiveCfg = Debug|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|x86.Build.0 = Debug|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|Any CPU.Build.0 = Release|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|x64.ActiveCfg = Release|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|x64.Build.0 = Release|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|x86.ActiveCfg = Release|Any CPU - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|x86.Build.0 = Release|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|x64.ActiveCfg = Debug|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|x64.Build.0 = Debug|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|x86.ActiveCfg = Debug|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|x86.Build.0 = Debug|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|Any CPU.Build.0 = Release|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|x64.ActiveCfg = Release|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|x64.Build.0 = Release|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|x86.ActiveCfg = Release|Any CPU - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|x86.Build.0 = Release|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|x64.ActiveCfg = Debug|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|x64.Build.0 = Debug|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|x86.ActiveCfg = Debug|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|x86.Build.0 = Debug|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|Any CPU.Build.0 = Release|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|x64.ActiveCfg = Release|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|x64.Build.0 = Release|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|x86.ActiveCfg = Release|Any CPU - {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|x86.Build.0 = Release|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|x64.ActiveCfg = Debug|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|x64.Build.0 = Debug|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|x86.ActiveCfg = Debug|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|x86.Build.0 = Debug|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|Any CPU.Build.0 = Release|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|x64.ActiveCfg = Release|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|x64.Build.0 = Release|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|x86.ActiveCfg = Release|Any CPU - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|x86.Build.0 = Release|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Debug|x64.ActiveCfg = Debug|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Debug|x64.Build.0 = Debug|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Debug|x86.ActiveCfg = Debug|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Debug|x86.Build.0 = Debug|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Release|Any CPU.Build.0 = Release|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Release|x64.ActiveCfg = Release|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Release|x64.Build.0 = Release|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Release|x86.ActiveCfg = Release|Any CPU - {06D319CD-0583-414F-A881-F91232F427D6}.Release|x86.Build.0 = Release|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|x64.ActiveCfg = Debug|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|x64.Build.0 = Debug|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|x86.ActiveCfg = Debug|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|x86.Build.0 = Debug|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|Any CPU.Build.0 = Release|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|x64.ActiveCfg = Release|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|x64.Build.0 = Release|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|x86.ActiveCfg = Release|Any CPU - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|x86.Build.0 = Release|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|x64.ActiveCfg = Debug|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|x64.Build.0 = Debug|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|x86.ActiveCfg = Debug|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|x86.Build.0 = Debug|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Release|Any CPU.Build.0 = Release|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Release|x64.ActiveCfg = Release|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Release|x64.Build.0 = Release|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Release|x86.ActiveCfg = Release|Any CPU - {2564795C-046C-443D-8841-A24C59D7EE28}.Release|x86.Build.0 = Release|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|x64.ActiveCfg = Debug|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|x64.Build.0 = Debug|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|x86.ActiveCfg = Debug|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|x86.Build.0 = Debug|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|Any CPU.Build.0 = Release|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|x64.ActiveCfg = Release|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|x64.Build.0 = Release|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|x86.ActiveCfg = Release|Any CPU - {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|x86.Build.0 = Release|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|x64.ActiveCfg = Debug|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|x64.Build.0 = Debug|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|x86.ActiveCfg = Debug|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|x86.Build.0 = Debug|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|Any CPU.Build.0 = Release|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|x64.ActiveCfg = Release|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|x64.Build.0 = Release|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|x86.ActiveCfg = Release|Any CPU - {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|x86.Build.0 = Release|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|Any CPU.Build.0 = Debug|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|x64.ActiveCfg = Debug|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|x64.Build.0 = Debug|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|x86.ActiveCfg = Debug|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|x86.Build.0 = Debug|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|Any CPU.ActiveCfg = Release|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|Any CPU.Build.0 = Release|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|x64.ActiveCfg = Release|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|x64.Build.0 = Release|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|x86.ActiveCfg = Release|Any CPU - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|x86.Build.0 = Release|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|x64.ActiveCfg = Debug|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|x64.Build.0 = Debug|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|x86.ActiveCfg = Debug|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|x86.Build.0 = Debug|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|Any CPU.Build.0 = Release|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|x64.ActiveCfg = Release|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|x64.Build.0 = Release|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|x86.ActiveCfg = Release|Any CPU - {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|x86.Build.0 = Release|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|x64.ActiveCfg = Debug|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|x64.Build.0 = Debug|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|x86.ActiveCfg = Debug|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|x86.Build.0 = Debug|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|Any CPU.Build.0 = Release|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|x64.ActiveCfg = Release|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|x64.Build.0 = Release|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|x86.ActiveCfg = Release|Any CPU - {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|x86.Build.0 = Release|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|x64.ActiveCfg = Debug|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|x64.Build.0 = Debug|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|x86.ActiveCfg = Debug|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|x86.Build.0 = Debug|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|Any CPU.Build.0 = Release|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x64.ActiveCfg = Release|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x64.Build.0 = Release|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x86.ActiveCfg = Release|Any CPU - {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x86.Build.0 = Release|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|x64.ActiveCfg = Debug|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|x64.Build.0 = Debug|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|x86.ActiveCfg = Debug|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|x86.Build.0 = Debug|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|Any CPU.Build.0 = Release|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|x64.ActiveCfg = Release|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|x64.Build.0 = Release|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|x86.ActiveCfg = Release|Any CPU - {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|x86.Build.0 = Release|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|x64.ActiveCfg = Debug|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|x64.Build.0 = Debug|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|x86.ActiveCfg = Debug|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|x86.Build.0 = Debug|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|Any CPU.Build.0 = Release|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|x64.ActiveCfg = Release|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|x64.Build.0 = Release|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|x86.ActiveCfg = Release|Any CPU - {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|x86.Build.0 = Release|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|x64.ActiveCfg = Debug|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|x64.Build.0 = Debug|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|x86.ActiveCfg = Debug|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|x86.Build.0 = Debug|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|Any CPU.Build.0 = Release|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|x64.ActiveCfg = Release|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|x64.Build.0 = Release|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|x86.ActiveCfg = Release|Any CPU - {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|x86.Build.0 = Release|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|x64.ActiveCfg = Debug|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|x64.Build.0 = Debug|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|x86.ActiveCfg = Debug|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|x86.Build.0 = Debug|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|Any CPU.Build.0 = Release|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x64.ActiveCfg = Release|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x64.Build.0 = Release|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x86.ActiveCfg = Release|Any CPU - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x86.Build.0 = Release|Any CPU - {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Debug|Any CPU.Build.0 = Debug|Any CPU - {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Debug|x64.ActiveCfg = Debug|Any CPU - {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Debug|x64.Build.0 = Debug|Any CPU - {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Debug|x86.ActiveCfg = Debug|Any CPU - {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Debug|x86.Build.0 = Debug|Any CPU - {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Release|Any CPU.ActiveCfg = Release|Any CPU - {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Release|Any CPU.Build.0 = Release|Any CPU - {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Release|x64.ActiveCfg = Release|Any CPU - {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Release|x64.Build.0 = Release|Any CPU - {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Release|x86.ActiveCfg = Release|Any CPU - {128C8C65-F15E-49A3-86F3-1FE5A48BD546}.Release|x86.Build.0 = Release|Any CPU - {7D382D41-CD80-4E27-B973-3756806D0F78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7D382D41-CD80-4E27-B973-3756806D0F78}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7D382D41-CD80-4E27-B973-3756806D0F78}.Debug|x64.ActiveCfg = Debug|Any CPU - {7D382D41-CD80-4E27-B973-3756806D0F78}.Debug|x64.Build.0 = Debug|Any CPU - {7D382D41-CD80-4E27-B973-3756806D0F78}.Debug|x86.ActiveCfg = Debug|Any CPU - {7D382D41-CD80-4E27-B973-3756806D0F78}.Debug|x86.Build.0 = Debug|Any CPU - {7D382D41-CD80-4E27-B973-3756806D0F78}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7D382D41-CD80-4E27-B973-3756806D0F78}.Release|Any CPU.Build.0 = Release|Any CPU - {7D382D41-CD80-4E27-B973-3756806D0F78}.Release|x64.ActiveCfg = Release|Any CPU - {7D382D41-CD80-4E27-B973-3756806D0F78}.Release|x64.Build.0 = Release|Any CPU - {7D382D41-CD80-4E27-B973-3756806D0F78}.Release|x86.ActiveCfg = Release|Any CPU - {7D382D41-CD80-4E27-B973-3756806D0F78}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {8FF12870-B977-4B59-9160-5A5A2779E080} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {71D64387-DB0B-45D9-BCB8-ED3A24495F1B} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {FFCB768F-C8CA-41D9-93A4-D2350CC98B32} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {9A55530E-6D7D-49EC-8778-C2D78083E9F6} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {06D319CD-0583-414F-A881-F91232F427D6} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {2564795C-046C-443D-8841-A24C59D7EE28} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} - {F62C1404-5CB2-45BF-B9F8-87760034FEAE} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} - {6E957940-24FD-4163-BBD5-4786C9373E56} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {9957A20C-4DCC-4643-B97D-ACF00D75C702} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} - {3DA60297-97CB-4712-89C6-F71EB75F98EA} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} - {CBADBC3F-FACC-424C-8E7D-28A029F5C238} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} - {8E85603A-E36A-4133-BF04-7734BCD02D1F} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} - {1284182A-3F75-4AF3-A1EE-7D7085C3545A} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} - {D9401ED9-D6BB-49C7-A92E-E0714D04590F} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} - {8DC0428A-C7C6-4496-95AB-2612FA95BE9E} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} - {128C8C65-F15E-49A3-86F3-1FE5A48BD546} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} - {7D382D41-CD80-4E27-B973-3756806D0F78} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {EAA92712-961A-4595-82AD-C031830477CC} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29521.150 +MinimumVisualStudioVersion = 15.0.26124.0 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".referenced", ".referenced", "{8A75EB03-3E25-4819-AE7D-1159D5AED817}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{2E2070DF-95C2-48F2-A8DF-7FE3734817ED}" + ProjectSection(SolutionItems) = preProject + src\Directory.Build.props = src\Directory.Build.props + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{936FF2E5-6576-4257-A7A3-F2093D44E6CD}" + ProjectSection(SolutionItems) = preProject + test\Directory.Build.props = test\Directory.Build.props + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Utilities", "..\Utilities\src\Utilities\HotChocolate.Utilities.csproj", "{8FF12870-B977-4B59-9160-5A5A2779E080}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Language", "..\Language\src\Language\HotChocolate.Language.csproj", "{71D64387-DB0B-45D9-BCB8-ED3A24495F1B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Language.SyntaxTree", "..\Language\src\Language.SyntaxTree\HotChocolate.Language.SyntaxTree.csproj", "{7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Language.Utf8", "..\Language\src\Language.Utf8\HotChocolate.Language.Utf8.csproj", "{E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Language.Visitors", "..\Language\src\Language.Visitors\HotChocolate.Language.Visitors.csproj", "{FFCB768F-C8CA-41D9-93A4-D2350CC98B32}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Abstractions", "..\Core\src\Abstractions\HotChocolate.Abstractions.csproj", "{9A55530E-6D7D-49EC-8778-C2D78083E9F6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Core", "..\Core\src\Core\HotChocolate.Core.csproj", "{D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Subscriptions", "..\Core\src\Subscriptions\HotChocolate.Subscriptions.csproj", "{06D319CD-0583-414F-A881-F91232F427D6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Types", "..\Core\src\Types\HotChocolate.Types.csproj", "{8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.AspNetCore", "src\AspNetCore\HotChocolate.AspNetCore.csproj", "{2564795C-046C-443D-8841-A24C59D7EE28}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.AspNetCore.Tests", "test\AspNetCore.Tests\HotChocolate.AspNetCore.Tests.csproj", "{F62C1404-5CB2-45BF-B9F8-87760034FEAE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.StarWars.Tests", "..\Core\test\StarWars\HotChocolate.StarWars.Tests.csproj", "{6E957940-24FD-4163-BBD5-4786C9373E56}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotChocolate.Subscriptions.InMemory", "..\Core\src\Subscriptions.InMemory\HotChocolate.Subscriptions.InMemory.csproj", "{86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Execution", "..\Core\src\Execution\HotChocolate.Execution.csproj", "{9957A20C-4DCC-4643-B97D-ACF00D75C702}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Authorization", "src\AspNetCore.Authorization\HotChocolate.AspNetCore.Authorization.csproj", "{3DA60297-97CB-4712-89C6-F71EB75F98EA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Authorization.Tests", "test\AspNetCore.Authorization.Tests\HotChocolate.AspNetCore.Authorization.Tests.csproj", "{CBADBC3F-FACC-424C-8E7D-28A029F5C238}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Transport.Sockets", "src\Transport.Sockets\HotChocolate.Transport.Sockets.csproj", "{8E85603A-E36A-4133-BF04-7734BCD02D1F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Transport.Sockets.Client", "src\Transport.Sockets.Client\HotChocolate.Transport.Sockets.Client.csproj", "{1284182A-3F75-4AF3-A1EE-7D7085C3545A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Transport.Sockets.Client.Tests", "test\Transport.Sockets.Client.Tests\HotChocolate.Transport.Sockets.Client.Tests.csproj", "{D9401ED9-D6BB-49C7-A92E-E0714D04590F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Tests.Utilities", "test\AspNetCore.Tests.Utilities\HotChocolate.AspNetCore.Tests.Utilities.csproj", "{8DC0428A-C7C6-4496-95AB-2612FA95BE9E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|x64.ActiveCfg = Debug|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|x64.Build.0 = Debug|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|x86.ActiveCfg = Debug|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Debug|x86.Build.0 = Debug|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|Any CPU.Build.0 = Release|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|x64.ActiveCfg = Release|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|x64.Build.0 = Release|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|x86.ActiveCfg = Release|Any CPU + {8FF12870-B977-4B59-9160-5A5A2779E080}.Release|x86.Build.0 = Release|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|x64.ActiveCfg = Debug|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|x64.Build.0 = Debug|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|x86.ActiveCfg = Debug|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Debug|x86.Build.0 = Debug|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|Any CPU.Build.0 = Release|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|x64.ActiveCfg = Release|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|x64.Build.0 = Release|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|x86.ActiveCfg = Release|Any CPU + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B}.Release|x86.Build.0 = Release|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|x64.ActiveCfg = Debug|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|x64.Build.0 = Debug|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|x86.ActiveCfg = Debug|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Debug|x86.Build.0 = Debug|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|Any CPU.Build.0 = Release|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|x64.ActiveCfg = Release|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|x64.Build.0 = Release|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|x86.ActiveCfg = Release|Any CPU + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19}.Release|x86.Build.0 = Release|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|x64.ActiveCfg = Debug|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|x64.Build.0 = Debug|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|x86.ActiveCfg = Debug|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Debug|x86.Build.0 = Debug|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|Any CPU.Build.0 = Release|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|x64.ActiveCfg = Release|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|x64.Build.0 = Release|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|x86.ActiveCfg = Release|Any CPU + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F}.Release|x86.Build.0 = Release|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|x64.ActiveCfg = Debug|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|x64.Build.0 = Debug|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|x86.ActiveCfg = Debug|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Debug|x86.Build.0 = Debug|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|Any CPU.Build.0 = Release|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|x64.ActiveCfg = Release|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|x64.Build.0 = Release|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|x86.ActiveCfg = Release|Any CPU + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32}.Release|x86.Build.0 = Release|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|x64.ActiveCfg = Debug|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|x64.Build.0 = Debug|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|x86.ActiveCfg = Debug|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Debug|x86.Build.0 = Debug|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|Any CPU.Build.0 = Release|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|x64.ActiveCfg = Release|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|x64.Build.0 = Release|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|x86.ActiveCfg = Release|Any CPU + {9A55530E-6D7D-49EC-8778-C2D78083E9F6}.Release|x86.Build.0 = Release|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|x64.ActiveCfg = Debug|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|x64.Build.0 = Debug|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|x86.ActiveCfg = Debug|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Debug|x86.Build.0 = Debug|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|Any CPU.Build.0 = Release|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|x64.ActiveCfg = Release|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|x64.Build.0 = Release|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|x86.ActiveCfg = Release|Any CPU + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC}.Release|x86.Build.0 = Release|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Debug|x64.ActiveCfg = Debug|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Debug|x64.Build.0 = Debug|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Debug|x86.ActiveCfg = Debug|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Debug|x86.Build.0 = Debug|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Release|Any CPU.Build.0 = Release|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Release|x64.ActiveCfg = Release|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Release|x64.Build.0 = Release|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Release|x86.ActiveCfg = Release|Any CPU + {06D319CD-0583-414F-A881-F91232F427D6}.Release|x86.Build.0 = Release|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|x64.ActiveCfg = Debug|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|x64.Build.0 = Debug|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|x86.ActiveCfg = Debug|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Debug|x86.Build.0 = Debug|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|Any CPU.Build.0 = Release|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|x64.ActiveCfg = Release|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|x64.Build.0 = Release|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|x86.ActiveCfg = Release|Any CPU + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE}.Release|x86.Build.0 = Release|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|x64.ActiveCfg = Debug|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|x64.Build.0 = Debug|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|x86.ActiveCfg = Debug|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Debug|x86.Build.0 = Debug|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Release|Any CPU.Build.0 = Release|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Release|x64.ActiveCfg = Release|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Release|x64.Build.0 = Release|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Release|x86.ActiveCfg = Release|Any CPU + {2564795C-046C-443D-8841-A24C59D7EE28}.Release|x86.Build.0 = Release|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|x64.ActiveCfg = Debug|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|x64.Build.0 = Debug|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|x86.ActiveCfg = Debug|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Debug|x86.Build.0 = Debug|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|Any CPU.Build.0 = Release|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|x64.ActiveCfg = Release|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|x64.Build.0 = Release|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|x86.ActiveCfg = Release|Any CPU + {F62C1404-5CB2-45BF-B9F8-87760034FEAE}.Release|x86.Build.0 = Release|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|x64.ActiveCfg = Debug|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|x64.Build.0 = Debug|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|x86.ActiveCfg = Debug|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Debug|x86.Build.0 = Debug|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|Any CPU.Build.0 = Release|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|x64.ActiveCfg = Release|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|x64.Build.0 = Release|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|x86.ActiveCfg = Release|Any CPU + {6E957940-24FD-4163-BBD5-4786C9373E56}.Release|x86.Build.0 = Release|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|Any CPU.Build.0 = Debug|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|x64.ActiveCfg = Debug|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|x64.Build.0 = Debug|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|x86.ActiveCfg = Debug|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Debug|x86.Build.0 = Debug|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|Any CPU.ActiveCfg = Release|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|Any CPU.Build.0 = Release|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|x64.ActiveCfg = Release|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|x64.Build.0 = Release|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|x86.ActiveCfg = Release|Any CPU + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664}.Release|x86.Build.0 = Release|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|x64.ActiveCfg = Debug|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|x64.Build.0 = Debug|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|x86.ActiveCfg = Debug|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Debug|x86.Build.0 = Debug|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|Any CPU.Build.0 = Release|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|x64.ActiveCfg = Release|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|x64.Build.0 = Release|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|x86.ActiveCfg = Release|Any CPU + {9957A20C-4DCC-4643-B97D-ACF00D75C702}.Release|x86.Build.0 = Release|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|x64.ActiveCfg = Debug|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|x64.Build.0 = Debug|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|x86.ActiveCfg = Debug|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Debug|x86.Build.0 = Debug|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|Any CPU.Build.0 = Release|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|x64.ActiveCfg = Release|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|x64.Build.0 = Release|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|x86.ActiveCfg = Release|Any CPU + {3DA60297-97CB-4712-89C6-F71EB75F98EA}.Release|x86.Build.0 = Release|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|x64.ActiveCfg = Debug|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|x64.Build.0 = Debug|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|x86.ActiveCfg = Debug|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Debug|x86.Build.0 = Debug|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|Any CPU.Build.0 = Release|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x64.ActiveCfg = Release|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x64.Build.0 = Release|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x86.ActiveCfg = Release|Any CPU + {CBADBC3F-FACC-424C-8E7D-28A029F5C238}.Release|x86.Build.0 = Release|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|x64.ActiveCfg = Debug|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|x64.Build.0 = Debug|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|x86.ActiveCfg = Debug|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Debug|x86.Build.0 = Debug|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|Any CPU.Build.0 = Release|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|x64.ActiveCfg = Release|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|x64.Build.0 = Release|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|x86.ActiveCfg = Release|Any CPU + {8E85603A-E36A-4133-BF04-7734BCD02D1F}.Release|x86.Build.0 = Release|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|x64.ActiveCfg = Debug|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|x64.Build.0 = Debug|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|x86.ActiveCfg = Debug|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Debug|x86.Build.0 = Debug|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|Any CPU.Build.0 = Release|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|x64.ActiveCfg = Release|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|x64.Build.0 = Release|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|x86.ActiveCfg = Release|Any CPU + {1284182A-3F75-4AF3-A1EE-7D7085C3545A}.Release|x86.Build.0 = Release|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|x64.ActiveCfg = Debug|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|x64.Build.0 = Debug|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|x86.ActiveCfg = Debug|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Debug|x86.Build.0 = Debug|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|Any CPU.Build.0 = Release|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|x64.ActiveCfg = Release|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|x64.Build.0 = Release|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|x86.ActiveCfg = Release|Any CPU + {D9401ED9-D6BB-49C7-A92E-E0714D04590F}.Release|x86.Build.0 = Release|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|x64.ActiveCfg = Debug|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|x64.Build.0 = Debug|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|x86.ActiveCfg = Debug|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Debug|x86.Build.0 = Debug|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|Any CPU.Build.0 = Release|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x64.ActiveCfg = Release|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x64.Build.0 = Release|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x86.ActiveCfg = Release|Any CPU + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {8FF12870-B977-4B59-9160-5A5A2779E080} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {71D64387-DB0B-45D9-BCB8-ED3A24495F1B} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {7A843D19-BE8B-41B3-A77D-59F2BC9F2E19} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {E6EDD69B-FAE7-45FD-9BC8-DBD2327B7D7F} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {FFCB768F-C8CA-41D9-93A4-D2350CC98B32} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {9A55530E-6D7D-49EC-8778-C2D78083E9F6} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {D4565C5C-6EAF-40AF-BBE0-4C7313C858AC} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {06D319CD-0583-414F-A881-F91232F427D6} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {8BFC0DBD-7F90-4FAB-8687-32CC2E284ECE} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {2564795C-046C-443D-8841-A24C59D7EE28} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} + {F62C1404-5CB2-45BF-B9F8-87760034FEAE} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} + {6E957940-24FD-4163-BBD5-4786C9373E56} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {86C6C9FB-3AF3-4DB6-AEC2-0F3941FEA664} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {9957A20C-4DCC-4643-B97D-ACF00D75C702} = {8A75EB03-3E25-4819-AE7D-1159D5AED817} + {3DA60297-97CB-4712-89C6-F71EB75F98EA} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} + {CBADBC3F-FACC-424C-8E7D-28A029F5C238} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} + {8E85603A-E36A-4133-BF04-7734BCD02D1F} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} + {1284182A-3F75-4AF3-A1EE-7D7085C3545A} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} + {D9401ED9-D6BB-49C7-A92E-E0714D04590F} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} + {8DC0428A-C7C6-4496-95AB-2612FA95BE9E} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {EAA92712-961A-4595-82AD-C031830477CC} + EndGlobalSection +EndGlobal From 3a579d04a8cc19ee171b0083563bc9cb9a41bc6c Mon Sep 17 00:00:00 2001 From: queil Date: Mon, 13 Jun 2022 14:22:56 +0100 Subject: [PATCH 4/8] Fix solution - again --- .../AspNetCore/HotChocolate.AspNetCore.sln | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/HotChocolate/AspNetCore/HotChocolate.AspNetCore.sln b/src/HotChocolate/AspNetCore/HotChocolate.AspNetCore.sln index 99620d02cff..424ca279d15 100644 --- a/src/HotChocolate/AspNetCore/HotChocolate.AspNetCore.sln +++ b/src/HotChocolate/AspNetCore/HotChocolate.AspNetCore.sln @@ -55,6 +55,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.Transport.Sock EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Tests.Utilities", "test\AspNetCore.Tests.Utilities\HotChocolate.AspNetCore.Tests.Utilities.csproj", "{8DC0428A-C7C6-4496-95AB-2612FA95BE9E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Authorization.Opa", "src\AspNetCore.Authorization.Opa\HotChocolate.AspNetCore.Authorization.Opa.csproj", "{C9FA286C-81FB-4563-86FC-0880ED34A3FA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotChocolate.AspNetCore.Authorization.Opa.Tests", "test\AspNetCore.Authorization.Opa.Tests\HotChocolate.AspNetCore.Authorization.Opa.Tests.csproj", "{4C914422-2CAF-4B14-B6D2-EC9D5929FB79}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -305,6 +309,30 @@ Global {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x64.Build.0 = Release|Any CPU {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x86.ActiveCfg = Release|Any CPU {8DC0428A-C7C6-4496-95AB-2612FA95BE9E}.Release|x86.Build.0 = Release|Any CPU + {C9FA286C-81FB-4563-86FC-0880ED34A3FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C9FA286C-81FB-4563-86FC-0880ED34A3FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C9FA286C-81FB-4563-86FC-0880ED34A3FA}.Debug|x64.ActiveCfg = Debug|Any CPU + {C9FA286C-81FB-4563-86FC-0880ED34A3FA}.Debug|x64.Build.0 = Debug|Any CPU + {C9FA286C-81FB-4563-86FC-0880ED34A3FA}.Debug|x86.ActiveCfg = Debug|Any CPU + {C9FA286C-81FB-4563-86FC-0880ED34A3FA}.Debug|x86.Build.0 = Debug|Any CPU + {C9FA286C-81FB-4563-86FC-0880ED34A3FA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C9FA286C-81FB-4563-86FC-0880ED34A3FA}.Release|Any CPU.Build.0 = Release|Any CPU + {C9FA286C-81FB-4563-86FC-0880ED34A3FA}.Release|x64.ActiveCfg = Release|Any CPU + {C9FA286C-81FB-4563-86FC-0880ED34A3FA}.Release|x64.Build.0 = Release|Any CPU + {C9FA286C-81FB-4563-86FC-0880ED34A3FA}.Release|x86.ActiveCfg = Release|Any CPU + {C9FA286C-81FB-4563-86FC-0880ED34A3FA}.Release|x86.Build.0 = Release|Any CPU + {4C914422-2CAF-4B14-B6D2-EC9D5929FB79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4C914422-2CAF-4B14-B6D2-EC9D5929FB79}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4C914422-2CAF-4B14-B6D2-EC9D5929FB79}.Debug|x64.ActiveCfg = Debug|Any CPU + {4C914422-2CAF-4B14-B6D2-EC9D5929FB79}.Debug|x64.Build.0 = Debug|Any CPU + {4C914422-2CAF-4B14-B6D2-EC9D5929FB79}.Debug|x86.ActiveCfg = Debug|Any CPU + {4C914422-2CAF-4B14-B6D2-EC9D5929FB79}.Debug|x86.Build.0 = Debug|Any CPU + {4C914422-2CAF-4B14-B6D2-EC9D5929FB79}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4C914422-2CAF-4B14-B6D2-EC9D5929FB79}.Release|Any CPU.Build.0 = Release|Any CPU + {4C914422-2CAF-4B14-B6D2-EC9D5929FB79}.Release|x64.ActiveCfg = Release|Any CPU + {4C914422-2CAF-4B14-B6D2-EC9D5929FB79}.Release|x64.Build.0 = Release|Any CPU + {4C914422-2CAF-4B14-B6D2-EC9D5929FB79}.Release|x86.ActiveCfg = Release|Any CPU + {4C914422-2CAF-4B14-B6D2-EC9D5929FB79}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -330,6 +358,8 @@ Global {1284182A-3F75-4AF3-A1EE-7D7085C3545A} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} {D9401ED9-D6BB-49C7-A92E-E0714D04590F} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} {8DC0428A-C7C6-4496-95AB-2612FA95BE9E} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} + {C9FA286C-81FB-4563-86FC-0880ED34A3FA} = {2E2070DF-95C2-48F2-A8DF-7FE3734817ED} + {4C914422-2CAF-4B14-B6D2-EC9D5929FB79} = {936FF2E5-6576-4257-A7A3-F2093D44E6CD} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {EAA92712-961A-4595-82AD-C031830477CC} From 2d29d1e3420664d2ef9f23070ef3e168a6b3df8a Mon Sep 17 00:00:00 2001 From: queil Date: Mon, 13 Jun 2022 16:19:48 +0100 Subject: [PATCH 5/8] Implement 'policy not found' behaviour Update OPA package in tests Remove 'default policy not found' tests (OPA does not support this in the /v1/data API) --- .../Result/PolicyResultHandlerBase.cs | 32 ++++++++++++------- .../AuthorizationTests.cs | 23 ------------- ....AspNetCore.Authorization.Opa.Tests.csproj | 2 +- 3 files changed, 22 insertions(+), 35 deletions(-) diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultHandlerBase.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultHandlerBase.cs index 8f87f6ed7b0..e36b381278d 100644 --- a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultHandlerBase.cs +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultHandlerBase.cs @@ -9,6 +9,8 @@ namespace HotChocolate.AspNetCore.Authorization; public abstract class PolicyResultHandlerBase : IPolicyResultHandler { private readonly IOptions _options; + protected static readonly IOpaAuthzResult PolicyNotFoundResult = + new OpaAuthzResult(AuthorizeResult.PolicyNotFound, default); protected PolicyResultHandlerBase(IOptions options) => _options = options; protected abstract Task> MakeDecision(PolicyResultContext context); protected virtual Task OnAllowed(IMiddlewareContext context, IOpaAuthzResult result) => Task.CompletedTask; @@ -26,6 +28,12 @@ protected virtual Task OnNoDefaultPolicy(IMiddlewareContext context, IOpaAuthzRe public async Task HandleAsync(string policyPath, HttpResponseMessage response, IMiddlewareContext context) { + // The server returns 200 if the path refers to an undefined document. In this case, the response will not contain a result property. + // https://www.openpolicyagent.org/docs/latest/rest-api/#get-a-document + const string emptyDocument = "{}"; + bool policyNotFound = response.Content.Headers.ContentLength == 2 + && await response.Content.ReadAsStringAsync().ConfigureAwait(false) == emptyDocument; + QueryResponse responseObj = await response.Content .FromJsonAsync>(_options.Value.JsonSerializerOptions, context.RequestAborted) .ConfigureAwait(false); @@ -33,30 +41,32 @@ public async Task HandleAsync(string policyPath, HttpResponseMe if (responseObj is not { Result: var result }) throw new InvalidOperationException("Opa deserialized response must not be null"); - IOpaAuthzResult opaAuthzResult = await MakeDecision(new PolicyResultContext(policyPath, result, context)) - .ConfigureAwait(false); + IOpaAuthzResult opaResult = policyNotFound + ? PolicyNotFoundResult + : await MakeDecision(new PolicyResultContext(policyPath, result, context)) + .ConfigureAwait(false); - switch (opaAuthzResult.Result) + switch (opaResult.Result) { case AuthorizeResult.Allowed: - await OnAllowed(context, opaAuthzResult); + await OnAllowed(context, opaResult); break; case AuthorizeResult.NotAllowed: - await OnNotAllowed(context, opaAuthzResult); + await OnNotAllowed(context, opaResult); break; case AuthorizeResult.NotAuthenticated: - await OnNotAuthenticated(context, opaAuthzResult); + await OnNotAuthenticated(context, opaResult); break; case AuthorizeResult.NoDefaultPolicy: - await OnNoDefaultPolicy(context, opaAuthzResult); + await OnNoDefaultPolicy(context, opaResult); break; case AuthorizeResult.PolicyNotFound: - await OnPolicyNotFound(context, opaAuthzResult); + await OnPolicyNotFound(context, opaResult); break; default: - throw new ArgumentOutOfRangeException($"{opaAuthzResult.Result}"); + throw new ArgumentOutOfRangeException($"{opaResult.Result}"); } - return opaAuthzResult.Result; + return opaResult.Result; } -} +} \ No newline at end of file diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationTests.cs b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationTests.cs index 78f30d35f40..bea3d5961bb 100644 --- a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationTests.cs +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationTests.cs @@ -33,29 +33,6 @@ private static void SetUpHttpContext(HttpContext context) public async Task InitializeAsync() => _opaHandle = await OpaProcess.StartServerAsync(); - [Theory] - [ClassData(typeof(AuthorizationTestData))] - [ClassData(typeof(AuthorizationAttributeTestData))] - public async Task DefaultPolicy_NotFound(Action configure) - { - // arrange - TestServer server = CreateTestServer( - builder => - { - configure(builder); - builder.Services.AddAuthorization(); - }, - SetUpHttpContext); - - // act - ClientQueryResult result = - await server.PostAsync(new ClientQueryRequest { Query = "{ default }" }); - - // assert - Assert.Equal(HttpStatusCode.OK, result.StatusCode); - result.MatchSnapshot(); - } - [Theory] [ClassData(typeof(AuthorizationTestData))] [ClassData(typeof(AuthorizationAttributeTestData))] diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/HotChocolate.AspNetCore.Authorization.Opa.Tests.csproj b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/HotChocolate.AspNetCore.Authorization.Opa.Tests.csproj index 36708a40fd0..5be06a07b17 100644 --- a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/HotChocolate.AspNetCore.Authorization.Opa.Tests.csproj +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/HotChocolate.AspNetCore.Authorization.Opa.Tests.csproj @@ -22,7 +22,7 @@ - + From 42ecf4a5945d6f8b51ad4923250b5fd7fc9fbf89 Mon Sep 17 00:00:00 2001 From: queil Date: Tue, 14 Jun 2022 20:00:15 +0100 Subject: [PATCH 6/8] More fixes + tests --- ...hocolateAuthorizeRequestExecutorBuilder.cs | 40 ++++---- .../OpaJsonExtensions.cs | 2 +- .../OpaOptions.cs | 4 +- .../Result/DelegatePolicyResultHandler.cs | 31 +++++- .../Result/PolicyResultHandlerBase.cs | 33 ++++--- .../PolicyHandlerMatchingTests.cs | 94 +++++++++++++++++++ 6 files changed, 167 insertions(+), 37 deletions(-) create mode 100644 src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/PolicyHandlerMatchingTests.cs diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/HotChocolateAuthorizeRequestExecutorBuilder.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/HotChocolateAuthorizeRequestExecutorBuilder.cs index 82c3ec727bd..2d1662c423e 100644 --- a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/HotChocolateAuthorizeRequestExecutorBuilder.cs +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/HotChocolateAuthorizeRequestExecutorBuilder.cs @@ -79,31 +79,35 @@ public static IRequestExecutorBuilder AddOpaResultHandler(this IRequestExecut return builder; } - public static IRequestExecutorBuilder AddOpaResultHandlerAsync(this IRequestExecutorBuilder builder, - string policyPath, Func, Task>> func) + public static IRequestExecutorBuilder AddOpaResultHandler(this IRequestExecutorBuilder builder, + string policyPath, Func, Task>> makeDecisionFunc, + OnAfterResult? onAllowed = null, + OnAfterResult? onNotAllowed = null, + OnAfterResult? onNotAuthenticated = null, + OnAfterResult? onPolicyNotFound = null, + OnAfterResult? onNoDefaultPolicy = null) { return builder.AddOpaResultHandler(policyPath, - f => new DelegatePolicyResultHandler(func, f.GetRequiredService>())); + f => new DelegatePolicyResultHandler(makeDecisionFunc, f.GetRequiredService>()) + { + OnAllowedFunc = onAllowed, + OnNotAllowedFunc = onNotAllowed, + OnNotAuthenticatedFunc = onNotAuthenticated, + OnPolicyNotFoundFunc = onPolicyNotFound, + OnNoDefaultPolicyFunc = onNoDefaultPolicy + }); } public static IRequestExecutorBuilder AddOpaResultHandler(this IRequestExecutorBuilder builder, string policyPath, Func, IOpaAuthzResult> makeDecisionFunc, - Action>? onAllowed = null + OnAfterResult? onAllowed = null, + OnAfterResult? onNotAllowed = null, + OnAfterResult? onNotAuthenticated = null, + OnAfterResult? onPolicyNotFound = null, + OnAfterResult? onNoDefaultPolicy = null ) { - return builder.AddOpaResultHandler(policyPath, - f => - new DelegatePolicyResultHandler( - ctx => Task.FromResult(makeDecisionFunc(ctx)), - f.GetRequiredService>()) - { - OnAllowedFunc = onAllowed is not null - ? (context, result) => - { - onAllowed(context, result); - return Task.CompletedTask; - } - : null - }); + return builder.AddOpaResultHandler(policyPath, ctx => Task.FromResult(makeDecisionFunc(ctx)), + onAllowed, onNotAllowed, onNotAuthenticated, onPolicyNotFound, onNoDefaultPolicy); } } diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaJsonExtensions.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaJsonExtensions.cs index 5cf111983a7..8e6bf231b0e 100644 --- a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaJsonExtensions.cs +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaJsonExtensions.cs @@ -20,7 +20,7 @@ internal static HttpContent ToJsonContent(this QueryRequest request, JsonSeriali #endif } - internal static async Task FromJsonAsync(this HttpContent content, JsonSerializerOptions options, + internal static async Task FromJsonAsync(this HttpContent content, JsonSerializerOptions options, CancellationToken token) { #if NET6_0 diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaOptions.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaOptions.cs index e05bda4720e..60be9f34ce3 100644 --- a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaOptions.cs +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/OpaOptions.cs @@ -28,8 +28,6 @@ public IPolicyResultHandler GetResultHandlerFor(string policyPath) new Regex(k.Key, RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.CultureInvariant)); return regex.IsMatch(policyPath); }); - return maybeHandler.Value is { } h - ? h - : throw new InvalidOperationException($"No result handler found for policy: {policyPath}"); + return maybeHandler.Value ?? throw new InvalidOperationException($"No result handler found for policy: {policyPath}"); } } diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/DelegatePolicyResultHandler.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/DelegatePolicyResultHandler.cs index 88d92ed4c70..d087a7d4ba4 100644 --- a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/DelegatePolicyResultHandler.cs +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/DelegatePolicyResultHandler.cs @@ -5,9 +5,14 @@ namespace HotChocolate.AspNetCore.Authorization; +public delegate Task OnAfterResult(IMiddlewareContext context, IOpaAuthzResult result); public class DelegatePolicyResultHandler : PolicyResultHandlerBase { - public Func, Task>? OnAllowedFunc { get; set; } + public OnAfterResult? OnAllowedFunc { get; set; } + public OnAfterResult? OnNotAllowedFunc { get; set; } + public OnAfterResult? OnNotAuthenticatedFunc { get; set; } + public OnAfterResult? OnNoDefaultPolicyFunc { get; set; } + public OnAfterResult? OnPolicyNotFoundFunc { get; set; } private readonly Func, Task>> _makeDecision; @@ -25,4 +30,28 @@ protected override Task OnAllowed(IMiddlewareContext context, IOpaAuthzResult if (OnAllowedFunc is { } func) return func(context, result); return Task.CompletedTask; } + + protected override Task OnNotAllowed(IMiddlewareContext context, IOpaAuthzResult result) + { + if (OnNotAllowedFunc is { } func) return func(context, result); + return Task.CompletedTask; + } + + protected override Task OnNotAuthenticated(IMiddlewareContext context, IOpaAuthzResult result) + { + if (OnNotAuthenticatedFunc is { } func) return func(context, result); + return Task.CompletedTask; + } + + protected override Task OnNoDefaultPolicy(IMiddlewareContext context, IOpaAuthzResult result) + { + if (OnNoDefaultPolicyFunc is { } func) return func(context, result); + return Task.CompletedTask; + } + + protected override Task OnPolicyNotFound(IMiddlewareContext context, IOpaAuthzResult result) + { + if (OnPolicyNotFoundFunc is { } func) return func(context, result); + return Task.CompletedTask; + } } diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultHandlerBase.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultHandlerBase.cs index e36b381278d..ec8cf7060ec 100644 --- a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultHandlerBase.cs +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultHandlerBase.cs @@ -9,8 +9,10 @@ namespace HotChocolate.AspNetCore.Authorization; public abstract class PolicyResultHandlerBase : IPolicyResultHandler { private readonly IOptions _options; + protected static readonly IOpaAuthzResult PolicyNotFoundResult = new OpaAuthzResult(AuthorizeResult.PolicyNotFound, default); + protected PolicyResultHandlerBase(IOptions options) => _options = options; protected abstract Task> MakeDecision(PolicyResultContext context); protected virtual Task OnAllowed(IMiddlewareContext context, IOpaAuthzResult result) => Task.CompletedTask; @@ -28,40 +30,43 @@ protected virtual Task OnNoDefaultPolicy(IMiddlewareContext context, IOpaAuthzRe public async Task HandleAsync(string policyPath, HttpResponseMessage response, IMiddlewareContext context) { + async Task Deserialize() + { + var responseObj = await response.Content + .FromJsonAsync>(_options.Value.JsonSerializerOptions, context.RequestAborted) + .ConfigureAwait(false); + return responseObj is { Result: { } result } + ? result + : throw new InvalidOperationException("Opa deserialized response must not be null"); + } + // The server returns 200 if the path refers to an undefined document. In this case, the response will not contain a result property. // https://www.openpolicyagent.org/docs/latest/rest-api/#get-a-document const string emptyDocument = "{}"; bool policyNotFound = response.Content.Headers.ContentLength == 2 && await response.Content.ReadAsStringAsync().ConfigureAwait(false) == emptyDocument; - - QueryResponse responseObj = await response.Content - .FromJsonAsync>(_options.Value.JsonSerializerOptions, context.RequestAborted) - .ConfigureAwait(false); - - if (responseObj is not { Result: var result }) - throw new InvalidOperationException("Opa deserialized response must not be null"); - + IOpaAuthzResult opaResult = policyNotFound ? PolicyNotFoundResult - : await MakeDecision(new PolicyResultContext(policyPath, result, context)) + : await MakeDecision(new PolicyResultContext(policyPath, await Deserialize().ConfigureAwait(false), context)) .ConfigureAwait(false); switch (opaResult.Result) { case AuthorizeResult.Allowed: - await OnAllowed(context, opaResult); + await OnAllowed(context, opaResult).ConfigureAwait(false); break; case AuthorizeResult.NotAllowed: - await OnNotAllowed(context, opaResult); + await OnNotAllowed(context, opaResult).ConfigureAwait(false); break; case AuthorizeResult.NotAuthenticated: - await OnNotAuthenticated(context, opaResult); + await OnNotAuthenticated(context, opaResult).ConfigureAwait(false); break; case AuthorizeResult.NoDefaultPolicy: - await OnNoDefaultPolicy(context, opaResult); + await OnNoDefaultPolicy(context, opaResult).ConfigureAwait(false); break; case AuthorizeResult.PolicyNotFound: - await OnPolicyNotFound(context, opaResult); + await OnPolicyNotFound(context, opaResult).ConfigureAwait(false); break; default: throw new ArgumentOutOfRangeException($"{opaResult.Result}"); diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/PolicyHandlerMatchingTests.cs b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/PolicyHandlerMatchingTests.cs new file mode 100644 index 00000000000..f3b82f62022 --- /dev/null +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/PolicyHandlerMatchingTests.cs @@ -0,0 +1,94 @@ +using System; +using System.Net.Http; +using System.Threading.Tasks; +using HotChocolate.Resolvers; +using Xunit; + +namespace HotChocolate.AspNetCore.Authorization; + +public class PolicyHandlerMatchingTests +{ + private class DummyHandler : IPolicyResultHandler + { + public Task HandleAsync(string policyPath, HttpResponseMessage response, + IMiddlewareContext context) => Task.FromResult(AuthorizeResult.Allowed); + } + + [Fact] + public void ThrowsWhenNoMatchingHandlerFound() + { + // arrange + var options = new OpaOptions(); + + // act + IPolicyResultHandler FindHandler() => options.GetResultHandlerFor("graphql/policy"); + + // assert + Assert.Throws((Func)FindHandler); + } + + [Fact] + public void MatchesExact() + { + // arrange + var options = new OpaOptions(); + var handler = new DummyHandler(); + options.PolicyResultHandlers.Add("my/policy", handler); + + // act + var foundHandler = options.GetResultHandlerFor("my/policy"); + + // assert + Assert.Equal(handler, foundHandler); + } + + [Fact] + public void MatchesRegex() + { + // arrange + var options = new OpaOptions(); + var handler = new DummyHandler(); + options.PolicyResultHandlers.Add("graphql\\/.*", handler); + + // act + var foundHandler = options.GetResultHandlerFor("graphql/policy"); + + // assert + Assert.Equal(handler, foundHandler); + } + + [Fact] + public void ExactMatchTakesPriorityOverRegex() + { + // arrange + var options = new OpaOptions(); + var regexHandler = new DummyHandler(); + options.PolicyResultHandlers.Add("graphql\\/.*", regexHandler); + var exactHandler = new DummyHandler(); + options.PolicyResultHandlers.Add("graphql/policy", exactHandler); + + // act + var foundHandler = options.GetResultHandlerFor("graphql/policy"); + + // assert + Assert.Equal(exactHandler, foundHandler); + } + + + [Fact] + public void OnlySingleRegexMatchIsAllowed() + { + // arrange + var options = new OpaOptions(); + var regexHandler = new DummyHandler(); + options.PolicyResultHandlers.Add("graphql\\/.*", regexHandler); + var exactHandler = new DummyHandler(); + options.PolicyResultHandlers.Add("graphql\\/p.*", exactHandler); + + // act + IPolicyResultHandler FindHandler() => options.GetResultHandlerFor("graphql/policy"); + + // assert + Assert.Throws((Func)FindHandler); + } +} \ No newline at end of file From c3787dc4131391706f4a0cde77bd640ddc0c0aa1 Mon Sep 17 00:00:00 2001 From: queil Date: Tue, 14 Jun 2022 20:07:06 +0100 Subject: [PATCH 7/8] EOL --- .../Result/PolicyResultHandlerBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultHandlerBase.cs b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultHandlerBase.cs index ec8cf7060ec..5a9c9dd160c 100644 --- a/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultHandlerBase.cs +++ b/src/HotChocolate/AspNetCore/src/AspNetCore.Authorization.Opa/Result/PolicyResultHandlerBase.cs @@ -74,4 +74,4 @@ async Task Deserialize() return opaResult.Result; } -} \ No newline at end of file +} From 380d38408d94d31ef84c0efb86f6024b544701a1 Mon Sep 17 00:00:00 2001 From: queil Date: Tue, 14 Jun 2022 20:12:37 +0100 Subject: [PATCH 8/8] EOL --- .../PolicyHandlerMatchingTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/PolicyHandlerMatchingTests.cs b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/PolicyHandlerMatchingTests.cs index f3b82f62022..900bb5616ab 100644 --- a/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/PolicyHandlerMatchingTests.cs +++ b/src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/PolicyHandlerMatchingTests.cs @@ -91,4 +91,4 @@ public void OnlySingleRegexMatchIsAllowed() // assert Assert.Throws((Func)FindHandler); } -} \ No newline at end of file +}