| | | 1 | | using System.Text.Json; |
| | | 2 | | |
| | | 3 | | namespace Elsa.ExternalAuthentication.Permissions; |
| | | 4 | | |
| | | 5 | | internal static class PermissionGrantMappingSettings |
| | | 6 | | { |
| | | 7 | | public static IReadOnlyCollection<PermissionGrantMapping> Read(JsonElement settings) |
| | | 8 | | { |
| | 14 | 9 | | if (settings.ValueKind != JsonValueKind.Object || !settings.TryGetProperty("claimType", out var claimTypePropert |
| | 0 | 10 | | return []; |
| | | 11 | | |
| | 14 | 12 | | var claimType = claimTypeProperty.GetString(); |
| | 14 | 13 | | if (string.IsNullOrWhiteSpace(claimType) || !settings.TryGetProperty("mappings", out var mappings)) |
| | 2 | 14 | | return []; |
| | | 15 | | |
| | 12 | 16 | | var result = new List<PermissionGrantMapping>(); |
| | 12 | 17 | | if (mappings.ValueKind == JsonValueKind.Object) |
| | | 18 | | { |
| | 45 | 19 | | foreach (var property in mappings.EnumerateObject().OrderBy(x => x.Name, StringComparer.Ordinal)) |
| | 9 | 20 | | result.Add(new PermissionGrantMapping(claimType, property.Name, ReadPermissions(property.Value))); |
| | | 21 | | } |
| | 3 | 22 | | else if (mappings.ValueKind == JsonValueKind.Array) |
| | | 23 | | { |
| | 12 | 24 | | foreach (var mapping in mappings.EnumerateArray()) |
| | | 25 | | { |
| | 3 | 26 | | if (mapping.ValueKind != JsonValueKind.Object || !mapping.TryGetProperty("value", out var valueProperty) |
| | | 27 | | continue; |
| | | 28 | | |
| | 3 | 29 | | var value = valueProperty.GetString(); |
| | 3 | 30 | | if (string.IsNullOrWhiteSpace(value)) |
| | | 31 | | continue; |
| | | 32 | | |
| | 3 | 33 | | result.Add(new PermissionGrantMapping(claimType, value, ReadPermissions(permissionsProperty))); |
| | | 34 | | } |
| | | 35 | | } |
| | | 36 | | |
| | 12 | 37 | | return result; |
| | | 38 | | } |
| | | 39 | | |
| | | 40 | | public static IReadOnlyCollection<string> ReadPassThroughPermissions(JsonElement settings) |
| | | 41 | | { |
| | 4 | 42 | | if (settings.ValueKind != JsonValueKind.Object || !settings.TryGetProperty("allowedPermissions", out var permiss |
| | 0 | 43 | | return []; |
| | | 44 | | |
| | 4 | 45 | | return ReadPermissions(permissions); |
| | | 46 | | } |
| | | 47 | | |
| | 16 | 48 | | private static IReadOnlyCollection<string> ReadPermissions(JsonElement value) => value.ValueKind == JsonValueKind.Ar |
| | 70 | 49 | | ? value.EnumerateArray().Where(x => x.ValueKind == JsonValueKind.String).Select(x => x.GetString()).Where(x => ! |
| | 16 | 50 | | : []; |
| | | 51 | | } |
| | | 52 | | |
| | | 53 | | internal sealed record PermissionGrantMapping(string ClaimType, string Value, IReadOnlyCollection<string> Permissions); |