wip: refactor
This commit is contained in:
parent
2935cbd59b
commit
e5bfc2c4ea
2 changed files with 33 additions and 16 deletions
|
|
@ -6,12 +6,18 @@ mod server_crypto;
|
||||||
|
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
mod log {
|
mod log {
|
||||||
pub(crate) use tracing::{debug, error, info, warn};
|
pub(super) use tracing::{debug, error, info, warn};
|
||||||
}
|
}
|
||||||
/* ------------------------------------------------ */
|
|
||||||
use crate::{error::*, reloader_service::CryptoReloader};
|
|
||||||
use hot_reload::{ReloaderReceiver, ReloaderService};
|
|
||||||
|
|
||||||
|
use crate::{
|
||||||
|
error::*,
|
||||||
|
reloader_service::{CryptoReloader, DynCryptoSource},
|
||||||
|
};
|
||||||
|
use hot_reload::{ReloaderReceiver, ReloaderService};
|
||||||
|
use rustc_hash::FxHashMap as HashMap;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
/* ------------------------------------------------ */
|
||||||
pub use crate::{
|
pub use crate::{
|
||||||
certs::SingleServerCertsKeys,
|
certs::SingleServerCertsKeys,
|
||||||
crypto_source::{CryptoFileSource, CryptoFileSourceBuilder, CryptoFileSourceBuilderError, CryptoSource},
|
crypto_source::{CryptoFileSource, CryptoFileSourceBuilder, CryptoFileSourceBuilderError, CryptoSource},
|
||||||
|
|
@ -19,26 +25,37 @@ pub use crate::{
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ------------------------------------------------ */
|
/* ------------------------------------------------ */
|
||||||
/// Constants TODO: define from outside
|
// Constants
|
||||||
const CERTS_WATCH_DELAY_SECS: u32 = 60;
|
/// Default delay in seconds to watch certificates
|
||||||
|
const DEFAULT_CERTS_WATCH_DELAY_SECS: u32 = 60;
|
||||||
|
/// Load certificates only when updated
|
||||||
const LOAD_CERTS_ONLY_WHEN_UPDATED: bool = true;
|
const LOAD_CERTS_ONLY_WHEN_UPDATED: bool = true;
|
||||||
|
|
||||||
/* ------------------------------------------------ */
|
|
||||||
/// Result type inner of certificate reloader service
|
/// Result type inner of certificate reloader service
|
||||||
type ReloaderServiceResultInner = (
|
type ReloaderServiceResultInner = (
|
||||||
ReloaderService<CryptoReloader, ServerCryptoBase>,
|
ReloaderService<CryptoReloader, ServerCryptoBase>,
|
||||||
ReloaderReceiver<ServerCryptoBase>,
|
ReloaderReceiver<ServerCryptoBase>,
|
||||||
);
|
);
|
||||||
/// Build certificate reloader service
|
/// Build certificate reloader service, which accepts a map of server names to `CryptoSource` instances
|
||||||
pub async fn build_cert_reloader() -> Result<ReloaderServiceResultInner, RpxyCertError>
|
pub async fn build_cert_reloader<T>(
|
||||||
// where
|
crypto_source_map: &HashMap<String, T>,
|
||||||
// T: CryptoSource + Clone + Send + Sync + 'static,
|
certs_watch_period: Option<u32>,
|
||||||
|
) -> Result<ReloaderServiceResultInner, RpxyCertError>
|
||||||
|
where
|
||||||
|
T: CryptoSource<Error = RpxyCertError> + Send + Sync + Clone + 'static,
|
||||||
{
|
{
|
||||||
// TODO: fix later
|
let source = crypto_source_map
|
||||||
let source = rustc_hash::FxHashMap::default();
|
.iter()
|
||||||
|
.map(|(k, v)| {
|
||||||
|
let server_name_bytes = k.as_bytes().to_vec().to_ascii_lowercase();
|
||||||
|
let dyn_crypto_source = Arc::new(Box::new(v.clone()) as Box<DynCryptoSource>);
|
||||||
|
(server_name_bytes, dyn_crypto_source)
|
||||||
|
})
|
||||||
|
.collect::<HashMap<_, _>>();
|
||||||
|
|
||||||
|
let certs_watch_period = certs_watch_period.unwrap_or(DEFAULT_CERTS_WATCH_DELAY_SECS);
|
||||||
|
|
||||||
let (cert_reloader_service, cert_reloader_rx) =
|
let (cert_reloader_service, cert_reloader_rx) =
|
||||||
ReloaderService::<CryptoReloader, ServerCryptoBase>::new(&source, CERTS_WATCH_DELAY_SECS, !LOAD_CERTS_ONLY_WHEN_UPDATED)
|
ReloaderService::<CryptoReloader, ServerCryptoBase>::new(&source, certs_watch_period, !LOAD_CERTS_ONLY_WHEN_UPDATED).await?;
|
||||||
.await?;
|
|
||||||
Ok((cert_reloader_service, cert_reloader_rx))
|
Ok((cert_reloader_service, cert_reloader_rx))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ use std::sync::Arc;
|
||||||
/* ------------------------------------------------ */
|
/* ------------------------------------------------ */
|
||||||
/// Boxed CryptoSource trait object with Send and Sync
|
/// Boxed CryptoSource trait object with Send and Sync
|
||||||
/// TODO: support for not only `CryptoFileSource` but also other type of sources
|
/// TODO: support for not only `CryptoFileSource` but also other type of sources
|
||||||
type DynCryptoSource = dyn CryptoSource<Error = RpxyCertError> + Send + Sync + 'static;
|
pub(super) type DynCryptoSource = dyn CryptoSource<Error = RpxyCertError> + Send + Sync + 'static;
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
/// Reloader service for certificates and keys for TLS
|
/// Reloader service for certificates and keys for TLS
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue