< Summary

Information
Class: AsiBackbone.Core.CapabilityTokens.CapabilityGrantValidationOptions
Assembly: AsiBackbone.Core
File(s): /home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Core/CapabilityTokens/CapabilityGrantValidationOptions.cs
Line coverage
100%
Covered lines: 71
Uncovered lines: 0
Coverable lines: 71
Total lines: 112
Line coverage: 100%
Branch coverage
100%
Covered branches: 10
Total branches: 10
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
.ctor(...)100%44100%
get_Issuer()100%11100%
get_Audience()100%11100%
get_Scopes()100%11100%
get_ValidationUtc()100%11100%
get_PolicyVersion()100%11100%
get_PolicyHash()100%11100%
get_AcknowledgmentId()100%11100%
get_HandshakeId()100%11100%
get_GatewayBinding()100%11100%
get_ResourceBinding()100%11100%
get_RequireProof()100%11100%
get_RequireAcknowledgmentReference()100%11100%
get_RequireUseCheck()100%11100%
get_MaxUseCount()100%11100%
Create(...)100%11100%
NormalizeScopes(...)100%44100%
NormalizeOptional(...)100%22100%

File(s)

/home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Core/CapabilityTokens/CapabilityGrantValidationOptions.cs

#LineLine coverage
 1namespace AsiBackbone.Core.CapabilityTokens;
 2
 3public sealed class CapabilityGrantValidationOptions
 4{
 15    private static readonly IReadOnlyList<string> EmptyScopes = Array.AsReadOnly(Array.Empty<string>());
 6
 387    private CapabilityGrantValidationOptions(
 388        string? issuer,
 389        string? audience,
 3810        IReadOnlyList<string> scopes,
 3811        DateTimeOffset? validationUtc,
 3812        string? policyVersion,
 3813        string? policyHash,
 3814        string? acknowledgmentId,
 3815        string? handshakeId,
 3816        string? gatewayBinding,
 3817        string? resourceBinding,
 3818        bool requireProof,
 3819        bool requireAcknowledgmentReference,
 3820        bool requireUseCheck,
 3821        int maxUseCount)
 22    {
 3823        if (maxUseCount < 1)
 24        {
 125            throw new ArgumentOutOfRangeException(nameof(maxUseCount), maxUseCount, "Maximum use count must be greater t
 26        }
 27
 3728        Issuer = NormalizeOptional(issuer);
 3729        Audience = NormalizeOptional(audience);
 3730        Scopes = scopes;
 3731        ValidationUtc = validationUtc?.ToUniversalTime();
 3732        PolicyVersion = NormalizeOptional(policyVersion);
 3733        PolicyHash = NormalizeOptional(policyHash);
 3734        AcknowledgmentId = NormalizeOptional(acknowledgmentId);
 3735        HandshakeId = NormalizeOptional(handshakeId);
 3736        GatewayBinding = NormalizeOptional(gatewayBinding);
 3737        ResourceBinding = NormalizeOptional(resourceBinding);
 3738        RequireProof = requireProof;
 3739        RequireAcknowledgmentReference = requireAcknowledgmentReference;
 3740        RequireUseCheck = requireUseCheck;
 3741        MaxUseCount = maxUseCount;
 3742    }
 43
 4844    public string? Issuer { get; }
 4645    public string? Audience { get; }
 4146    public IReadOnlyList<string> Scopes { get; }
 3547    public DateTimeOffset? ValidationUtc { get; }
 3648    public string? PolicyVersion { get; }
 3449    public string? PolicyHash { get; }
 3050    public string? AcknowledgmentId { get; }
 2851    public string? HandshakeId { get; }
 2652    public string? GatewayBinding { get; }
 2453    public string? ResourceBinding { get; }
 3554    public bool RequireProof { get; }
 1755    public bool RequireAcknowledgmentReference { get; }
 1256    public bool RequireUseCheck { get; }
 1057    public int MaxUseCount { get; }
 58
 59    public static CapabilityGrantValidationOptions Create(
 60        string? issuer = null,
 61        string? audience = null,
 62        IEnumerable<string>? scopes = null,
 63        DateTimeOffset? validationUtc = null,
 64        string? policyVersion = null,
 65        string? policyHash = null,
 66        string? acknowledgmentId = null,
 67        string? handshakeId = null,
 68        string? gatewayBinding = null,
 69        string? resourceBinding = null,
 70        bool requireProof = false,
 71        bool requireAcknowledgmentReference = false,
 72        bool requireUseCheck = false,
 73        int maxUseCount = 1)
 74    {
 3875        return new CapabilityGrantValidationOptions(
 3876            issuer,
 3877            audience,
 3878            NormalizeScopes(scopes),
 3879            validationUtc,
 3880            policyVersion,
 3881            policyHash,
 3882            acknowledgmentId,
 3883            handshakeId,
 3884            gatewayBinding,
 3885            resourceBinding,
 3886            requireProof,
 3887            requireAcknowledgmentReference,
 3888            requireUseCheck,
 3889            maxUseCount);
 90    }
 91
 92    private static IReadOnlyList<string> NormalizeScopes(IEnumerable<string>? scopes)
 93    {
 3894        if (scopes is null)
 95        {
 296            return EmptyScopes;
 97        }
 98
 3699        string[] normalized = [.. scopes
 42100            .Where(scope => !string.IsNullOrWhiteSpace(scope))
 39101            .Select(scope => scope.Trim())
 36102            .Distinct(StringComparer.Ordinal)
 42103            .OrderBy(scope => scope, StringComparer.Ordinal)];
 104
 36105        return normalized.Length == 0 ? EmptyScopes : Array.AsReadOnly(normalized);
 106    }
 107
 108    private static string? NormalizeOptional(string? value)
 109    {
 296110        return string.IsNullOrWhiteSpace(value) ? null : value.Trim();
 111    }
 112}