1
0
mirror of https://github.com/vbrandl/bind9-api.git synced 2025-08-01 11:11:51 +02:00

4 Commits

Author SHA1 Message Date
6688ffebbc Update dependencies
Applyed `cargo update`
2023-12-27 13:18:29 +01:00
Valentin Brandl
bee19e4c78 Document building the project 2020-11-30 16:40:07 +01:00
Valentin Brandl
be5c8c6e62 Fix deprecation 2020-11-30 16:35:31 +01:00
Valentin Brandl
55aa95a41c Fix breaking change in ToHex crate 2020-11-30 16:35:19 +01:00
8 changed files with 1690 additions and 1147 deletions

2805
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -7,6 +7,19 @@
This is an attempt to implement an API to create, update or delete DNS records This is an attempt to implement an API to create, update or delete DNS records
on a BIND9 DNS server. on a BIND9 DNS server.
## Building
To compile the code, you first need to [install Rust](https://rustup.rs/). Then
you can run
```
cargo build --release
```
in the project root. The server and client binary will be located in
`./target/release/bind9-api` and `./target/release/bind9-api-client`
respectively.
## Server ## Server
The server will wait for incoming requests and uses the `nsupdate` command to The server will wait for incoming requests and uses the `nsupdate` command to

View File

@@ -15,7 +15,7 @@ log = "0.4.8"
openssl-probe = "0.1.2" openssl-probe = "0.1.2"
pretty_env_logger = "0.4.0" pretty_env_logger = "0.4.0"
reqwest = "0.9.24" reqwest = "0.9.24"
serde = "1.0.106" serde = "1.0.104"
serde_derive = "1.0.104" serde_derive = "1.0.104"
serde_json = "1.0.50" serde_json = "1.0.50"
toml = "0.5.6" toml = "0.5.6"

View File

@@ -106,7 +106,7 @@ fn call_api<D: serde::Serialize>(
let data_s = serde_json::to_string(&data)?; let data_s = serde_json::to_string(&data)?;
info!("body: {}", data_s); info!("body: {}", data_s);
let signature = crypto::sign(config.secret.as_bytes(), data_s.as_bytes()); let signature = crypto::sign(config.secret.as_bytes(), data_s.as_bytes());
let signature = crypto::bytes_to_hex_str(&signature)?; let signature = crypto::bytes_to_hex_str(&signature);
let client = reqwest::Client::new(); let client = reqwest::Client::new();
let url = format!("{}/record", config.host); let url = format!("{}/record", config.host);
Ok(if method == Method::POST { Ok(if method == Method::POST {

View File

@@ -55,10 +55,8 @@ use ring::{digest, hmac};
type Result<T> = std::result::Result<T, Error>; type Result<T> = std::result::Result<T, Error>;
/// Converts a byte slice to a lowercase hex string. /// Converts a byte slice to a lowercase hex string.
pub fn bytes_to_hex_str(bytes: &[u8]) -> Result<String> { pub fn bytes_to_hex_str(bytes: &[u8]) -> String {
let mut output = String::new(); bytes.encode_hex::<String>()
bytes.write_hex(&mut output)?;
Ok(output)
} }
/// Converts a hey string to a vec of bytes. /// Converts a hey string to a vec of bytes.

View File

@@ -6,5 +6,5 @@ license = "MIT/Apache-2.0"
[dependencies] [dependencies]
failure = "0.1.7" failure = "0.1.7"
serde = "1.0.106" serde = "1.0.104"
serde_derive = "1.0.104" serde_derive = "1.0.104"

View File

@@ -14,5 +14,5 @@ failure = "0.1.7"
futures = "0.1.29" futures = "0.1.29"
log = "0.4.8" log = "0.4.8"
pretty_env_logger = "0.4.0" pretty_env_logger = "0.4.0"
serde = "1.0.106" serde = "1.0.104"
serde_json = "1.0.50" serde_json = "1.0.50"

View File

@@ -104,7 +104,7 @@ pub struct Validated<T>(T);
impl<T: 'static + ::serde::de::DeserializeOwned> FromRequest<Arc<Config>> for Validated<T> { impl<T: 'static + ::serde::de::DeserializeOwned> FromRequest<Arc<Config>> for Validated<T> {
type Config = (); type Config = ();
type Result = Box<Future<Item = Self, Error = Error>>; type Result = Box<dyn Future<Item = Self, Error = Error>>;
fn from_request(req: &HttpRequest<Arc<Config>>, _: &Self::Config) -> Self::Result { fn from_request(req: &HttpRequest<Arc<Config>>, _: &Self::Config) -> Self::Result {
let state = req.state().clone(); let state = req.state().clone();
@@ -134,7 +134,8 @@ impl<T> Deref for Validated<T> {
} }
fn extract_signature<S>(req: &HttpRequest<S>) -> Result<Vec<u8>> { fn extract_signature<S>(req: &HttpRequest<S>) -> Result<Vec<u8>> {
Ok(req.headers() Ok(req
.headers()
.get(::data::TOKEN_HEADER) .get(::data::TOKEN_HEADER)
.as_ref() .as_ref()
.ok_or_else(|| ErrorUnauthorized(ParseError::Header))? .ok_or_else(|| ErrorUnauthorized(ParseError::Header))?