using System; namespace StellaOps.Auth.Security.Dpop; /// /// Represents the result of issuing a DPoP nonce. /// public sealed class DpopNonceIssueResult { private DpopNonceIssueResult(DpopNonceIssueStatus status, string? nonce, DateTimeOffset? expiresAt, string? error) { Status = status; Nonce = nonce; ExpiresAt = expiresAt; Error = error; } /// /// Issue status. /// public DpopNonceIssueStatus Status { get; } /// /// Issued nonce when is . /// public string? Nonce { get; } /// /// Expiry timestamp for the issued nonce (UTC). /// public DateTimeOffset? ExpiresAt { get; } /// /// Additional failure information, where applicable. /// public string? Error { get; } public static DpopNonceIssueResult Success(string nonce, DateTimeOffset expiresAt) => new(DpopNonceIssueStatus.Success, nonce, expiresAt, null); public static DpopNonceIssueResult RateLimited(string? error = null) => new(DpopNonceIssueStatus.RateLimited, null, null, error); public static DpopNonceIssueResult Failure(string? error = null) => new(DpopNonceIssueStatus.Failure, null, null, error); } /// /// Known statuses for nonce issuance. /// public enum DpopNonceIssueStatus { Success, RateLimited, Failure }