successfully made a request!

This commit is contained in:
Kaan Genc 2021-12-14 22:30:36 -05:00
parent cfe229234e
commit cab2ecbdf1
7 changed files with 127 additions and 12 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
/target
secret.toml

91
Cargo.lock generated
View File

@ -202,6 +202,7 @@ dependencies = [
"reqwest",
"serde",
"structopt",
"tokio",
"toml",
]
@ -351,6 +352,15 @@ dependencies = [
"hashbrown",
]
[[package]]
name = "instant"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
dependencies = [
"cfg-if",
]
[[package]]
name = "ipnet"
version = "2.3.1"
@ -384,6 +394,15 @@ version = "0.2.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f98a04dce437184842841303488f70d0188c5f51437d2a834dc097eafa909a01"
[[package]]
name = "lock_api"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109"
dependencies = [
"scopeguard",
]
[[package]]
name = "log"
version = "0.4.14"
@ -460,6 +479,16 @@ dependencies = [
"winapi",
]
[[package]]
name = "num_cpus"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
dependencies = [
"hermit-abi",
"libc",
]
[[package]]
name = "once_cell"
version = "1.8.0"
@ -499,6 +528,31 @@ dependencies = [
"vcpkg",
]
[[package]]
name = "parking_lot"
version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
dependencies = [
"instant",
"lock_api",
"parking_lot_core",
]
[[package]]
name = "parking_lot_core"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
dependencies = [
"cfg-if",
"instant",
"libc",
"redox_syscall",
"smallvec",
"winapi",
]
[[package]]
name = "percent-encoding"
version = "2.1.0"
@ -690,6 +744,12 @@ dependencies = [
"winapi",
]
[[package]]
name = "scopeguard"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
name = "security-framework"
version = "2.4.2"
@ -756,12 +816,27 @@ dependencies = [
"serde",
]
[[package]]
name = "signal-hook-registry"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
dependencies = [
"libc",
]
[[package]]
name = "slab"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5"
[[package]]
name = "smallvec"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309"
[[package]]
name = "socket2"
version = "0.4.2"
@ -862,10 +937,26 @@ dependencies = [
"libc",
"memchr",
"mio",
"num_cpus",
"once_cell",
"parking_lot",
"pin-project-lite",
"signal-hook-registry",
"tokio-macros",
"winapi",
]
[[package]]
name = "tokio-macros"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c9efc1aba077437943f7515666aa2b882dfabfbfdf89c819ea75a8d6e9eaba5e"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "tokio-native-tls"
version = "0.3.0"

View File

@ -7,8 +7,9 @@ edition = "2021"
[dependencies]
reqwest = "0.11.7"
reqwest = { version = "0.11.7", features = ["json"] }
toml = "0.5.8"
serde = { version = "1.0", features = ["derive"] }
directories = "4.0.1"
structopt = "0.3.25"
tokio = { version = "1.14.0", features = ["full"] }

View File

@ -1 +0,0 @@
fqdn = "remote.kaangenc.me"

2
example.toml Normal file
View File

@ -0,0 +1,2 @@
fqdn = "my-website.example.com"
api_key = "xxxxxxxxxxxxxxxxxxxxxxxx"

View File

@ -7,7 +7,8 @@ use crate::opts;
#[derive(Deserialize, Debug)]
pub struct Config {
fqdn: String,
pub fqdn: String,
pub api_key: String,
}
pub fn load_config(file: PathBuf) -> Result<Config, Box<dyn Error>> {

View File

@ -1,21 +1,41 @@
use structopt::StructOpt;
use reqwest::{header, Client, ClientBuilder};
use std::error::Error;
mod opts;
use structopt::StructOpt;
use tokio;
mod config;
mod opts;
fn gandi_api(fqdn: &str) -> String {
return format!("https://api.gandi.net/v5/livedns/domains/{}/records", fqdn);
}
fn main() -> Result<(), Box<dyn Error>> {
fn api_client(api_key: &str) -> Result<Client, Box<dyn Error>> {
let client_builder = ClientBuilder::new();
let key = format!("Apikey {}", api_key);
let mut auth_value = header::HeaderValue::from_str(&key)?;
let mut headers = header::HeaderMap::new();
auth_value.set_sensitive(true);
headers.insert(header::AUTHORIZATION, auth_value);
let accept_value = header::HeaderValue::from_static("application/json");
headers.insert(header::ACCEPT, accept_value);
let client = client_builder.default_headers(headers).build()?;
return Ok(client);
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let opts = opts::Opts::from_args();
println!("{:#?}", opts);
let conf_path = config::config_path(&opts);
println!("{:#?}", conf_path);
let conf = config::load_config(conf_path);
println!("{:#?}", conf);
println!("Hello, world!");
println!("Loading config from {:#?}", conf_path);
let conf = config::load_config(conf_path)?;
println!("Checking domain {:#?}", conf.fqdn);
let url = gandi_api(&conf.fqdn);
let client = api_client(&conf.api_key)?;
let out = client.get(url).send().await?;
println!("Output: {:#?}", out);
println!("Output: {:#?}", out.json().await?);
return Ok(());
}