using FluentValidation; using IdentityShroud.Core.Contracts; namespace IdentityShroud.Api; public class ClientCreateRequestValidator : AbstractValidator { // most of standard ascii minus the control characters and space private const string ClientIdPattern = "^[\x21-\x7E]+"; private string[] AllowedAlgorithms = [ "RS256", "ES256" ]; public ClientCreateRequestValidator() { RuleFor(e => e.ClientId).NotEmpty().MaximumLength(40).Matches(ClientIdPattern); RuleFor(e => e.Name).MaximumLength(80); RuleFor(e => e.Description).MaximumLength(2048); RuleFor(e => e.SignatureAlgorithm) .Must(v => v is null || AllowedAlgorithms.Contains(v)) .WithMessage($"SignatureAlgorithm must be one of {string.Join(", ", AllowedAlgorithms)} or null"); } }