aboutsummaryrefslogtreecommitdiffstats
path: root/src/cmd/server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/server.rs')
-rw-r--r--src/cmd/server.rs94
1 files changed, 12 insertions, 82 deletions
diff --git a/src/cmd/server.rs b/src/cmd/server.rs
index 858c6b8..ea238ba 100644
--- a/src/cmd/server.rs
+++ b/src/cmd/server.rs
@@ -1,32 +1,9 @@
use crate::prelude::*;
-use std::convert::TryFrom as _;
use std::io::Read as _;
-#[derive(serde::Deserialize, Debug)]
+#[derive(serde::Deserialize, Debug, Default)]
pub struct Config {
- #[serde(
- deserialize_with = "crate::config::listen_address",
- default = "crate::config::default_listen_address"
- )]
- listen_address: std::net::SocketAddr,
-
- #[serde(default = "crate::config::default_connection_buffer_size")]
- buffer_size: usize,
-
- #[serde(
- deserialize_with = "crate::config::read_timeout",
- default = "crate::config::default_read_timeout"
- )]
- read_timeout: std::time::Duration,
-
- tls_identity_file: Option<String>,
-
- #[serde(
- deserialize_with = "crate::config::allowed_login_methods",
- default = "crate::config::default_allowed_login_methods"
- )]
- allowed_login_methods:
- std::collections::HashSet<crate::protocol::AuthType>,
+ server: crate::config::Server,
}
impl crate::config::Config for Config {
@@ -34,59 +11,25 @@ impl crate::config::Config for Config {
&mut self,
matches: &clap::ArgMatches<'a>,
) -> Result<()> {
- if matches.is_present("address") {
- self.listen_address = matches
- .value_of("address")
- .unwrap()
- .parse()
- .context(crate::error::ParseAddr)?;
- }
- if matches.is_present("buffer-size") {
- let s = matches.value_of("buffer-size").unwrap();
- self.buffer_size = s
- .parse()
- .context(crate::error::ParseBufferSize { input: s })?;
- }
- if matches.is_present("read-timeout") {
- let s = matches.value_of("read-timeout").unwrap();
- self.read_timeout = s
- .parse()
- .map(std::time::Duration::from_secs)
- .context(crate::error::ParseReadTimeout { input: s })?;
- }
- if matches.is_present("tls-identity-file") {
- self.tls_identity_file = Some(
- matches.value_of("tls-identity-file").unwrap().to_string(),
- );
- }
- if matches.is_present("allowed-login-methods") {
- self.allowed_login_methods = matches
- .values_of("allowed-login-methods")
- .unwrap()
- .map(crate::protocol::AuthType::try_from)
- .collect::<Result<
- std::collections::HashSet<crate::protocol::AuthType>,
- >>()?;
- }
- Ok(())
+ self.server.merge_args(matches)
}
fn run(&self) -> Result<()> {
let (acceptor, server) =
- if let Some(tls_identity_file) = &self.tls_identity_file {
+ if let Some(tls_identity_file) = &self.server.tls_identity_file {
create_server_tls(
- self.listen_address,
- self.buffer_size,
- self.read_timeout,
+ self.server.listen_address,
+ self.server.buffer_size,
+ self.server.read_timeout,
tls_identity_file,
- self.allowed_login_methods.clone(),
+ self.server.allowed_login_methods.clone(),
)?
} else {
create_server(
- self.listen_address,
- self.buffer_size,
- self.read_timeout,
- self.allowed_login_methods.clone(),
+ self.server.listen_address,
+ self.server.buffer_size,
+ self.server.read_timeout,
+ self.server.allowed_login_methods.clone(),
)?
};
tokio::run(futures::future::lazy(move || {
@@ -102,19 +45,6 @@ impl crate::config::Config for Config {
}
}
-impl Default for Config {
- fn default() -> Self {
- Self {
- listen_address: crate::config::default_listen_address(),
- buffer_size: crate::config::default_connection_buffer_size(),
- read_timeout: crate::config::default_read_timeout(),
- tls_identity_file: None,
- allowed_login_methods:
- crate::config::default_allowed_login_methods(),
- }
- }
-}
-
pub fn cmd<'a, 'b>(app: clap::App<'a, 'b>) -> clap::App<'a, 'b> {
app.about("Run a teleterm server")
.arg(