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
}