|
|
|
@ -4,8 +4,15 @@
|
|
|
|
|
#[macro_use] extern crate rocket_contrib;
|
|
|
|
|
#[macro_use] extern crate diesel;
|
|
|
|
|
|
|
|
|
|
use trust_dns_client::client::SyncClient;
|
|
|
|
|
use trust_dns_client::tcp::TcpClientConnection;
|
|
|
|
|
use trust_dns_client::client::AsyncClient;
|
|
|
|
|
use trust_dns_client::tcp::TcpClientStream;
|
|
|
|
|
use trust_dns_proto::xfer::dns_multiplexer::DnsMultiplexer;
|
|
|
|
|
use trust_dns_proto::iocompat::AsyncIoTokioAsStd;
|
|
|
|
|
use trust_dns_client::rr::dnssec::Signer;
|
|
|
|
|
use tokio::net::TcpStream as TokioTcpStream;
|
|
|
|
|
use tokio::task;
|
|
|
|
|
|
|
|
|
|
use std::sync::{Arc, Mutex};
|
|
|
|
|
|
|
|
|
|
mod models;
|
|
|
|
|
mod config;
|
|
|
|
@ -19,19 +26,22 @@ use routes::zones::*;
|
|
|
|
|
#[database("db")]
|
|
|
|
|
pub struct DbConn(diesel::SqliteConnection);
|
|
|
|
|
|
|
|
|
|
type DnsClient = SyncClient<TcpClientConnection>;
|
|
|
|
|
type DnsClient = Arc<Mutex<AsyncClient>>;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[launch]
|
|
|
|
|
fn rocket() -> rocket::Rocket {
|
|
|
|
|
async fn rocket() -> rocket::Rocket {
|
|
|
|
|
let app_config = config::load("config.toml".into());
|
|
|
|
|
println!("{:#?}", app_config);
|
|
|
|
|
|
|
|
|
|
let conn = TcpClientConnection::new(app_config.dns.server).unwrap();
|
|
|
|
|
let client = SyncClient::new(conn);
|
|
|
|
|
let (stream, handle) = TcpClientStream::<AsyncIoTokioAsStd<TokioTcpStream>>::new(app_config.dns.server);
|
|
|
|
|
let multiplexer = DnsMultiplexer::<_, Signer>::new(stream, handle, None);
|
|
|
|
|
let client = AsyncClient::connect(multiplexer);
|
|
|
|
|
let (client, bg) = client.await.expect("connection failed");
|
|
|
|
|
task::spawn(bg);
|
|
|
|
|
|
|
|
|
|
rocket::ignite()
|
|
|
|
|
.manage(client)
|
|
|
|
|
.manage(Arc::new(Mutex::new(client)))
|
|
|
|
|
.manage(app_config)
|
|
|
|
|
.attach(DbConn::fairing())
|
|
|
|
|
.mount("/api/v1", routes![get_zone_records, create_auth_token, create_user])
|
|
|
|
|