nomilo/src/dns/mod.rs

56 lines
1.8 KiB
Rust
Raw Normal View History

2022-03-04 12:08:03 +00:00
pub mod client;
2022-03-05 12:19:31 +00:00
pub mod dns_connector;
pub mod connector;
2022-03-04 12:08:03 +00:00
2022-03-04 16:17:15 +00:00
// Reexport trust dns types for convenience
pub use trust_dns_client::rr::rdata::{
DNSSECRData, caa, sshfp, mx, null, soa, srv, txt
};
pub use trust_dns_client::rr::{
RData, DNSClass, Record
};
pub use trust_dns_proto::rr::Name;
2022-04-27 17:42:25 +00:00
pub use trust_dns_proto::rr::dnssec::rdata::tsig::TsigAlgorithm;
// Reexport module types
2022-04-22 18:43:24 +00:00
pub use connector::{RecordConnector, ZoneConnector, ConnectorError};
2022-03-05 12:19:31 +00:00
pub use dns_connector::{DnsConnectorClient, DnsConnectorError};
2022-04-22 22:57:32 +00:00
pub use client::DnsClient;
2022-04-27 17:42:25 +00:00
use rocket::{Request, State, http::Status, request::{FromRequest, Outcome}};
use rocket::outcome::try_outcome;
use crate::config::Config;
2022-04-27 19:17:39 +00:00
2022-04-27 17:42:25 +00:00
#[rocket::async_trait]
impl<'r> FromRequest<'r> for Box<dyn RecordConnector> {
type Error = ();
async fn from_request(request: &'r Request<'_>) -> Outcome<Self, Self::Error> {
let config = try_outcome!(request.guard::<&State<Config>>().await);
match DnsClient::from_config(&config.dns).await {
Err(e) => {
error!("Failed to connect to DNS server: {}", e);
Outcome::Failure((Status::InternalServerError, ()))
},
Ok(c) => Outcome::Success(Box::new(DnsConnectorClient::new(c)))
}
}
}
#[rocket::async_trait]
impl<'r> FromRequest<'r> for Box<dyn ZoneConnector> {
type Error = ();
async fn from_request(request: &'r Request<'_>) -> Outcome<Self, Self::Error> {
let config = try_outcome!(request.guard::<&State<Config>>().await);
match DnsClient::from_config(&config.dns).await {
Err(e) => {
error!("Failed to connect to DNS server: {}", e);
Outcome::Failure((Status::InternalServerError, ()))
},
Ok(c) => Outcome::Success(Box::new(DnsConnectorClient::new(c)))
}
}
}