diff --git a/src/NATS.Server/NATS.Server.csproj b/src/NATS.Server/NATS.Server.csproj index 55d61f5..90fbca3 100644 --- a/src/NATS.Server/NATS.Server.csproj +++ b/src/NATS.Server/NATS.Server.csproj @@ -1,5 +1,5 @@ - + diff --git a/src/NATS.Server/NatsOptions.cs b/src/NATS.Server/NatsOptions.cs index 60238c0..00e3a2d 100644 --- a/src/NATS.Server/NatsOptions.cs +++ b/src/NATS.Server/NatsOptions.cs @@ -1,3 +1,5 @@ +using System.Security.Authentication; + namespace NATS.Server; public sealed class NatsOptions @@ -5,9 +7,32 @@ public sealed class NatsOptions public string Host { get; set; } = "0.0.0.0"; public int Port { get; set; } = 4222; public string? ServerName { get; set; } - public int MaxPayload { get; set; } = 1024 * 1024; // 1MB + public int MaxPayload { get; set; } = 1024 * 1024; public int MaxControlLine { get; set; } = 4096; public int MaxConnections { get; set; } = 65536; public TimeSpan PingInterval { get; set; } = TimeSpan.FromMinutes(2); public int MaxPingsOut { get; set; } = 2; + + // Monitoring (0 = disabled; standard port is 8222) + public int MonitorPort { get; set; } + public string MonitorHost { get; set; } = "0.0.0.0"; + public string? MonitorBasePath { get; set; } + // 0 = disabled + public int MonitorHttpsPort { get; set; } + + // TLS + public string? TlsCert { get; set; } + public string? TlsKey { get; set; } + public string? TlsCaCert { get; set; } + public bool TlsVerify { get; set; } + public bool TlsMap { get; set; } + public TimeSpan TlsTimeout { get; set; } = TimeSpan.FromSeconds(2); + public bool TlsHandshakeFirst { get; set; } + public TimeSpan TlsHandshakeFirstFallback { get; set; } = TimeSpan.FromMilliseconds(50); + public bool AllowNonTls { get; set; } + public long TlsRateLimit { get; set; } + public HashSet? TlsPinnedCerts { get; set; } + public SslProtocols TlsMinVersion { get; set; } = SslProtocols.Tls12; + + public bool HasTls => TlsCert != null && TlsKey != null; } diff --git a/src/NATS.Server/Protocol/NatsProtocol.cs b/src/NATS.Server/Protocol/NatsProtocol.cs index 75ccde0..e4e3768 100644 --- a/src/NATS.Server/Protocol/NatsProtocol.cs +++ b/src/NATS.Server/Protocol/NatsProtocol.cs @@ -61,6 +61,18 @@ public sealed class ServerInfo [JsonPropertyName("client_ip")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string? ClientIp { get; set; } + + [JsonPropertyName("tls_required")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public bool TlsRequired { get; set; } + + [JsonPropertyName("tls_verify")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public bool TlsVerify { get; set; } + + [JsonPropertyName("tls_available")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public bool TlsAvailable { get; set; } } public sealed class ClientOptions