feat: add HTTPS/TLS server support via rustls
Add optional TLS support for the server using axum-server with the tls-rustls feature. When --server-cert and --server-key are provided (and tls feature is enabled), the server binds with TLS instead of plain HTTP. Changes: - Add axum-server dependency with optional tls-rustls feature - New 'tls' feature flag (independent of 'server') - --server-cert/--server-key CLI args gated behind tls feature - ServerConfig extended with cert_file/key_file fields - Conditional TLS/HTTP binding in server mod.rs - Fix PathBuf::to_str().unwrap() panic risk -> to_string_lossy() - Update README.md and DESIGN.md with TLS documentation
This commit is contained in:
@@ -146,6 +146,8 @@ pub struct ServerConfig {
|
||||
pub password_file: Option<PathBuf>,
|
||||
pub password: Option<String>,
|
||||
pub password_hash: Option<String>,
|
||||
pub cert_file: Option<PathBuf>,
|
||||
pub key_file: Option<PathBuf>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Deserialize, Serialize)]
|
||||
@@ -287,6 +289,18 @@ impl Settings {
|
||||
config_builder = config_builder.set_override("server.port", server_port)?;
|
||||
}
|
||||
|
||||
#[cfg(feature = "tls")]
|
||||
if let Some(server_cert) = &args.mode.server_cert {
|
||||
config_builder = config_builder
|
||||
.set_override("server.cert_file", server_cert.to_string_lossy().as_ref())?;
|
||||
}
|
||||
|
||||
#[cfg(feature = "tls")]
|
||||
if let Some(server_key) = &args.mode.server_key {
|
||||
config_builder = config_builder
|
||||
.set_override("server.key_file", server_key.to_string_lossy().as_ref())?;
|
||||
}
|
||||
|
||||
if let Some(compression) = &args.item.compression {
|
||||
config_builder =
|
||||
config_builder.set_override("compression_plugin.name", compression.as_str())?;
|
||||
@@ -480,6 +494,14 @@ impl Settings {
|
||||
self.server.as_ref().and_then(|s| s.port)
|
||||
}
|
||||
|
||||
pub fn server_cert_file(&self) -> Option<PathBuf> {
|
||||
self.server.as_ref().and_then(|s| s.cert_file.clone())
|
||||
}
|
||||
|
||||
pub fn server_key_file(&self) -> Option<PathBuf> {
|
||||
self.server.as_ref().and_then(|s| s.key_file.clone())
|
||||
}
|
||||
|
||||
pub fn compression(&self) -> Option<String> {
|
||||
self.compression_plugin.as_ref().map(|c| c.name.clone())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user