-
Notifications
You must be signed in to change notification settings - Fork 344
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #52 from DuendeSoftware/features/resource_isolation
Resource Indicators
- Loading branch information
Showing
67 changed files
with
3,140 additions
and
872 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
12 changes: 12 additions & 0 deletions
12
clients/src/ConsoleScopesResources/ConsoleScopesResources.csproj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
|
||
<PropertyGroup> | ||
<OutputType>Exe</OutputType> | ||
<TargetFramework>net5.0</TargetFramework> | ||
</PropertyGroup> | ||
|
||
<ItemGroup> | ||
<ProjectReference Include="..\Constants\Constants.csproj" /> | ||
</ItemGroup> | ||
|
||
</Project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,183 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Net.Http; | ||
using System.Threading.Tasks; | ||
using Clients; | ||
using IdentityModel.Client; | ||
|
||
namespace ConsoleScopesResources | ||
{ | ||
class Program | ||
{ | ||
private static DiscoveryCache Cache; | ||
|
||
static async Task Main(string[] args) | ||
{ | ||
Console.Title = "Console Resources and Scopes Client"; | ||
Cache = new DiscoveryCache("https://localhost:5001"); | ||
|
||
var leave = false; | ||
|
||
while (leave == false) | ||
{ | ||
Console.Clear(); | ||
|
||
"Resource setup:\n".ConsoleGreen(); | ||
|
||
"resource1: resource1.scope1 resource1.scope2 shared.scope".ConsoleGreen(); | ||
"resource2: resource2.scope1 resource2.scope2 shared.scope\n".ConsoleGreen(); | ||
"resource3 (isolated): resource3.scope1 resource3.scope2 shared.scope\n".ConsoleGreen(); | ||
"scopes without resource association: scope3 scope4 transaction\n\n".ConsoleGreen(); | ||
|
||
|
||
// scopes without associated resource | ||
"a) scope3 scope4".ConsoleYellow(); | ||
|
||
// one scope, single resource | ||
"b) resource1.scope1".ConsoleYellow(); | ||
|
||
// two scopes, single resources | ||
"c) resource1.scope1 resource1.scope2".ConsoleYellow(); | ||
|
||
// two scopes, one has a resource, one doesn't | ||
"d) resource1.scope1 scope3".ConsoleYellow(); | ||
|
||
// two scopes, two resource | ||
"e) resource1.scope1 resource2.scope1".ConsoleYellow(); | ||
|
||
// shared scope between two resources | ||
"f) shared.scope".ConsoleYellow(); | ||
|
||
// shared scope between two resources and scope that belongs to resource | ||
"g) resource1.scope1 shared.scope".ConsoleYellow(); | ||
|
||
// parameterized scope | ||
"h) transaction:123".ConsoleYellow(); | ||
|
||
// no scope | ||
"i) no scope".ConsoleYellow(); | ||
|
||
// no scope | ||
"j) no scope (resource: resource1)".ConsoleYellow(); | ||
|
||
// no scope | ||
"k) no scope (resource: resource3)".ConsoleYellow(); | ||
|
||
// isolated scope without resource parameter | ||
"l) resource3.scope1".ConsoleYellow(); | ||
|
||
// isolated scope without resource parameter | ||
"m) resource3.scope1 (resource: resource3)".ConsoleYellow(); | ||
|
||
// isolated scope without resource parameter | ||
"n) resource3.scope1 (resource: resource2)".ConsoleYellow(); | ||
|
||
"\nx) quit".ConsoleYellow(); | ||
|
||
var input = Console.ReadKey(); | ||
|
||
switch (input.Key) | ||
{ | ||
case ConsoleKey.A: | ||
await RequestToken("scope3 scope4"); | ||
break; | ||
|
||
case ConsoleKey.B: | ||
await RequestToken("resource1.scope1"); | ||
break; | ||
|
||
case ConsoleKey.C: | ||
await RequestToken("resource1.scope1 resource1.scope2"); | ||
break; | ||
|
||
case ConsoleKey.D: | ||
await RequestToken("resource1.scope1 scope3"); | ||
break; | ||
|
||
case ConsoleKey.E: | ||
await RequestToken("resource1.scope1 resource2.scope1"); | ||
break; | ||
|
||
case ConsoleKey.F: | ||
await RequestToken("shared.scope"); | ||
break; | ||
|
||
case ConsoleKey.G: | ||
await RequestToken("resource1.scope1 shared.scope"); | ||
break; | ||
|
||
case ConsoleKey.H: | ||
await RequestToken("transaction:123"); | ||
break; | ||
|
||
case ConsoleKey.I: | ||
await RequestToken(""); | ||
break; | ||
|
||
case ConsoleKey.J: | ||
await RequestToken("", "urn:resource1"); | ||
break; | ||
|
||
case ConsoleKey.K: | ||
await RequestToken("", "urn:resource3"); | ||
break; | ||
|
||
case ConsoleKey.L: | ||
await RequestToken("resource3.scope1"); | ||
break; | ||
|
||
case ConsoleKey.M: | ||
await RequestToken("resource3.scope1", "urn:resource3"); | ||
break; | ||
|
||
case ConsoleKey.N: | ||
await RequestToken("resource3.scope1", "urn:resource2"); | ||
break; | ||
|
||
case ConsoleKey.X: | ||
leave = true; | ||
break; | ||
} | ||
} | ||
} | ||
|
||
static async Task RequestToken(string scope, string resource = null) | ||
{ | ||
var client = new HttpClient(); | ||
var disco = await Cache.GetAsync(); | ||
|
||
var request = new ClientCredentialsTokenRequest | ||
{ | ||
Address = disco.TokenEndpoint, | ||
ClientId = "console.resource.scope", | ||
ClientSecret = "secret", | ||
|
||
Scope = scope | ||
}; | ||
|
||
if (!string.IsNullOrEmpty(resource)) | ||
{ | ||
request.Parameters = new Dictionary<string, string> | ||
{ | ||
{ "resource", resource } | ||
}; | ||
} | ||
|
||
var response = await client.RequestClientCredentialsTokenAsync(request); | ||
|
||
if (response.IsError) | ||
{ | ||
Console.WriteLine(); | ||
Console.WriteLine(response.Error); | ||
Console.ReadLine(); | ||
return; | ||
} | ||
|
||
Console.WriteLine(); | ||
Console.WriteLine(); | ||
|
||
response.Show(); | ||
Console.ReadLine(); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
5 changes: 4 additions & 1 deletion
5
.../20201125135748_Configuration.Designer.cs → .../20201214213517_Configuration.Designer.cs
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.