1
0
mirror of https://github.com/vbrandl/bind9-api.git synced 2025-08-19 20:35:39 +02:00

6 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
Valentin Brandl
a31c30a3b0 Merge pull request #72 from vbrandl/dependabot/cargo/reqwest-0.9.24
Bump reqwest from 0.9.22 to 0.9.24
2020-04-04 13:41:26 +02:00
dependabot-preview[bot]
27cba3d460 Bump reqwest from 0.9.22 to 0.9.24
Bumps [reqwest](https://github.com/seanmonstar/reqwest) from 0.9.22 to 0.9.24.
- [Release notes](https://github.com/seanmonstar/reqwest/releases)
- [Changelog](https://github.com/seanmonstar/reqwest/blob/v0.9.24/CHANGELOG.md)
- [Commits](https://github.com/seanmonstar/reqwest/compare/v0.9.22...v0.9.24)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-04 11:35:01 +00:00
6 changed files with 1689 additions and 1146 deletions

2807
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

@@ -14,7 +14,7 @@ hyper = "0.12.35"
log = "0.4.8" 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.22" reqwest = "0.9.24"
serde = "1.0.104" serde = "1.0.104"
serde_derive = "1.0.104" serde_derive = "1.0.104"
serde_json = "1.0.50" serde_json = "1.0.50"

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

@@ -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))?