public IP address autodiscovery #20
3 changed files with 3 additions and 40 deletions
|
@ -3,10 +3,9 @@ mod options;
|
|||
mod options_test;
|
||||
mod runtime;
|
||||
|
||||
pub use options::{ConfigOpts, ConfigOptsAcme, ConfigOptsBase, ConfigOptsConsul};
|
||||
pub use options::{ConfigOpts, ConfigOptsBase, ConfigOptsConsul};
|
||||
pub use runtime::{
|
||||
RuntimeConfig, RuntimeConfigAcme, RuntimeConfigConsul, RuntimeConfigFirewall, RuntimeConfigIgd,
|
||||
RuntimeConfigStun,
|
||||
RuntimeConfig, RuntimeConfigConsul, RuntimeConfigFirewall, RuntimeConfigIgd, RuntimeConfigStun,
|
||||
};
|
||||
|
||||
pub const EXPIRATION_TIME: u16 = 300;
|
||||
|
|
|
@ -24,17 +24,6 @@ pub struct ConfigOptsBase {
|
|||
pub ipv6_only: bool,
|
||||
}
|
||||
|
||||
/// ACME configuration options
|
||||
#[derive(Clone, Default, Deserialize)]
|
||||
pub struct ConfigOptsAcme {
|
||||
/// Whether ACME is enabled [default: false]
|
||||
#[serde(default)]
|
||||
pub enable: bool,
|
||||
|
||||
/// The default domain holder's e-mail [default: None]
|
||||
pub email: Option<String>,
|
||||
}
|
||||
|
||||
/// Consul configuration options
|
||||
#[derive(Clone, Default, Deserialize)]
|
||||
pub struct ConfigOptsConsul {
|
||||
|
@ -56,7 +45,6 @@ pub struct ConfigOptsConsul {
|
|||
/// Model of all potential configuration options
|
||||
pub struct ConfigOpts {
|
||||
pub base: ConfigOptsBase,
|
||||
pub acme: ConfigOptsAcme,
|
||||
pub consul: ConfigOptsConsul,
|
||||
}
|
||||
|
||||
|
@ -64,12 +52,10 @@ impl ConfigOpts {
|
|||
pub fn from_env() -> Result<RuntimeConfig> {
|
||||
let base: ConfigOptsBase = envy::prefixed("DIPLONAT_").from_env()?;
|
||||
let consul: ConfigOptsConsul = envy::prefixed("DIPLONAT_CONSUL_").from_env()?;
|
||||
let acme: ConfigOptsAcme = envy::prefixed("DIPLONAT_ACME_").from_env()?;
|
||||
|
||||
RuntimeConfig::new(Self {
|
||||
base: base,
|
||||
consul: consul,
|
||||
acme: acme,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -5,18 +5,13 @@ use std::time::Duration;
|
|||
|
||||
use anyhow::{anyhow, bail, Context, Result};
|
||||
|
||||
use crate::config::{ConfigOpts, ConfigOptsAcme, ConfigOptsBase, ConfigOptsConsul};
|
||||
use crate::config::{ConfigOpts, ConfigOptsBase, ConfigOptsConsul};
|
||||
|
||||
// This code is inspired by the Trunk crate (https://github.com/thedodd/trunk)
|
||||
|
||||
// In this file, we take ConfigOpts and transform them into ready-to-use
|
||||
// RuntimeConfig. We apply default values and business logic.
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct RuntimeConfigAcme {
|
||||
pub email: String,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct RuntimeConfigConsul {
|
||||
pub node_name: String,
|
||||
|
@ -46,7 +41,6 @@ pub struct RuntimeConfigStun {
|
|||
|
||||
#[derive(Debug)]
|
||||
pub struct RuntimeConfig {
|
||||
pub acme: Option<RuntimeConfigAcme>,
|
||||
pub consul: RuntimeConfigConsul,
|
||||
pub firewall: RuntimeConfigFirewall,
|
||||
pub igd: Option<RuntimeConfigIgd>,
|
||||
|
@ -55,7 +49,6 @@ pub struct RuntimeConfig {
|
|||
|
||||
impl RuntimeConfig {
|
||||
pub fn new(opts: ConfigOpts) -> Result<Self> {
|
||||
let acme = RuntimeConfigAcme::new(opts.acme)?;
|
||||
let consul = RuntimeConfigConsul::new(opts.consul)?;
|
||||
let firewall = RuntimeConfigFirewall::new(&opts.base)?;
|
||||
let igd = match opts.base.ipv6_only {
|
||||
|
@ -65,7 +58,6 @@ impl RuntimeConfig {
|
|||
let stun = RuntimeConfigStun::new(&opts.base)?;
|
||||
|
||||
Ok(Self {
|
||||
acme,
|
||||
consul,
|
||||
firewall,
|
||||
igd,
|
||||
|
@ -74,20 +66,6 @@ impl RuntimeConfig {
|
|||
}
|
||||
}
|
||||
|
||||
impl RuntimeConfigAcme {
|
||||
pub fn new(opts: ConfigOptsAcme) -> Result<Option<Self>> {
|
||||
if !opts.enable {
|
||||
return Ok(None);
|
||||
}
|
||||
|
||||
let email = opts.email.expect(
|
||||
"'DIPLONAT_ACME_EMAIL' environment variable is required if 'DIPLONAT_ACME_ENABLE' == 'true'",
|
||||
);
|
||||
|
||||
Ok(Some(Self { email }))
|
||||
}
|
||||
}
|
||||
|
||||
impl RuntimeConfigConsul {
|
||||
pub(super) fn new(opts: ConfigOptsConsul) -> Result<Self> {
|
||||
let node_name = opts
|
||||
|
|
Loading…
Reference in a new issue