feat: add tenant provisioning and key lifecycle (#5)
quality-gate / quality (push) Successful in 50s
quality-gate / quality (push) Successful in 50s
Closes #5
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
using FinalFactory.Rendezvous.Contracts;
|
||||
|
||||
namespace FinalFactory.Rendezvous.Server.Provisioning;
|
||||
|
||||
internal sealed class ProvisioningOptions
|
||||
{
|
||||
public const string SectionName = "Rendezvous:Provisioning";
|
||||
|
||||
public string Issuer { get; set; } = string.Empty;
|
||||
public string Audience { get; set; } = string.Empty;
|
||||
public int ClockSkewSeconds { get; set; } = 30;
|
||||
public List<SigningKeyOptions> SigningKeys { get; set; } = [];
|
||||
public List<GamePolicyOptions> Games { get; set; } = [];
|
||||
}
|
||||
|
||||
internal sealed class SigningKeyOptions
|
||||
{
|
||||
public string KeyId { get; set; } = string.Empty;
|
||||
public string SecretReference { get; set; } = string.Empty;
|
||||
public List<PrincipalCredentialKind> CredentialKinds { get; set; } = [];
|
||||
public string? GameId { get; set; }
|
||||
public string? EnvironmentId { get; set; }
|
||||
public DateTimeOffset NotBefore { get; set; }
|
||||
public DateTimeOffset SignUntil { get; set; }
|
||||
public DateTimeOffset VerifyUntil { get; set; }
|
||||
public bool Revoked { get; set; }
|
||||
}
|
||||
|
||||
internal sealed class GamePolicyOptions
|
||||
{
|
||||
public string GameId { get; set; } = string.Empty;
|
||||
public string EnvironmentId { get; set; } = string.Empty;
|
||||
public bool Enabled { get; set; } = true;
|
||||
public List<uint> ProtocolVersions { get; set; } = [];
|
||||
public List<string> Regions { get; set; } = [];
|
||||
public List<ListingVisibility> VisibilityModes { get; set; } = [];
|
||||
public List<PublisherTrustMode> PublisherTrustModes { get; set; } = [];
|
||||
public Dictionary<string, int> MetadataValueMaxBytes { get; set; } =
|
||||
new(StringComparer.Ordinal);
|
||||
public List<string> RequiredMetadataKeys { get; set; } = [];
|
||||
public int MetadataMaxBytes { get; set; } = ContractLimits.MetadataMaxBytes;
|
||||
public int MetadataMaxKeys { get; set; } = ContractLimits.MetadataMaxKeys;
|
||||
public int MaxListingsPerPrincipal { get; set; } = 100;
|
||||
public int MaxAnonymousListingsPerAddress { get; set; } = 2;
|
||||
public int MaxActiveJoinAttempts { get; set; } = 1_000;
|
||||
public FallbackPolicyMode FallbackPolicy { get; set; }
|
||||
}
|
||||
|
||||
internal enum FallbackPolicyMode
|
||||
{
|
||||
Disabled = 0,
|
||||
DedicatedEndpointAllowed = 1,
|
||||
}
|
||||
|
||||
internal static class ProvisioningLimits
|
||||
{
|
||||
public const int MaxGamePolicies = 1_024;
|
||||
public const int MaxSigningKeys = 128;
|
||||
public const int MaxProtocolVersionsPerPolicy = 64;
|
||||
public const int MaxRegionsPerPolicy = 32;
|
||||
public const int MaxListingsPerPrincipal = 25_000;
|
||||
public const int MaxActiveJoinAttemptsPerPolicy = 10_000;
|
||||
}
|
||||
|
||||
internal sealed class ProvisioningConfigurationException : Exception
|
||||
{
|
||||
public ProvisioningConfigurationException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user