feat: Better report different HTTP status responses
This commit is contained in:
parent
7ceb5c3c50
commit
143bbb7a33
|
@ -31,16 +31,23 @@ struct UpdateIpData {
|
||||||
pub fn get_zone_identifier(zone: &str, email: &str, key: &str) -> anyhow::Result<String> {
|
pub fn get_zone_identifier(zone: &str, email: &str, key: &str) -> anyhow::Result<String> {
|
||||||
let client = reqwest::blocking::Client::new();
|
let client = reqwest::blocking::Client::new();
|
||||||
let url = format!("https://api.cloudflare.com/client/v4/zones?name={}", zone);
|
let url = format!("https://api.cloudflare.com/client/v4/zones?name={}", zone);
|
||||||
let response: CloudflareListResponse = client
|
|
||||||
|
let response = client
|
||||||
.get(&url)
|
.get(&url)
|
||||||
.header("X-Auth-Email", email)
|
.header("X-Auth-Email", email)
|
||||||
.header("X-Auth-Key", key)
|
.header("X-Auth-Key", key)
|
||||||
.header("Content-Type", "application/json")
|
.header("Content-Type", "application/json")
|
||||||
.send()?
|
.send()?;
|
||||||
|
|
||||||
|
if response.status() != 200 {
|
||||||
|
return Err(anyhow!("API Error: HTTP {}", response.status()));
|
||||||
|
}
|
||||||
|
|
||||||
|
let body: CloudflareListResponse = response
|
||||||
.json()?;
|
.json()?;
|
||||||
|
|
||||||
if !response.success {
|
if !body.success {
|
||||||
let err: String = response
|
let err: String = body
|
||||||
.errors
|
.errors
|
||||||
.iter()
|
.iter()
|
||||||
.map(|s| format!("{}\n", s.to_owned()))
|
.map(|s| format!("{}\n", s.to_owned()))
|
||||||
|
@ -48,7 +55,14 @@ pub fn get_zone_identifier(zone: &str, email: &str, key: &str) -> anyhow::Result
|
||||||
return Err(anyhow!("API Error: {}", err));
|
return Err(anyhow!("API Error: {}", err));
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(response.result[0].id.clone())
|
let zones = match body.result {
|
||||||
|
Some(v) => v,
|
||||||
|
None => {
|
||||||
|
return Err(anyhow!("No zones returned"))
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(zones[0].id.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_dns_record_id(
|
pub fn get_dns_record_id(
|
||||||
|
@ -62,16 +76,22 @@ pub fn get_dns_record_id(
|
||||||
"https://api.cloudflare.com/client/v4/zones/{}/dns_records?name={}",
|
"https://api.cloudflare.com/client/v4/zones/{}/dns_records?name={}",
|
||||||
zone_id, domain
|
zone_id, domain
|
||||||
);
|
);
|
||||||
let response: CloudflareListResponse = client
|
|
||||||
|
let response = client
|
||||||
.get(&url)
|
.get(&url)
|
||||||
.header("X-Auth-Email", email)
|
.header("X-Auth-Email", email)
|
||||||
.header("X-Auth-Key", key)
|
.header("X-Auth-Key", key)
|
||||||
.header("Content-Type", "application/json")
|
.header("Content-Type", "application/json")
|
||||||
.send()?
|
.send()?;
|
||||||
.json()?;
|
|
||||||
|
|
||||||
if !response.success {
|
if response.status() != 200 {
|
||||||
let err: String = response
|
return Err(anyhow!("API Error: HTTP {}", response.status()));
|
||||||
|
}
|
||||||
|
|
||||||
|
let body: CloudflareListResponse = response.json()?;
|
||||||
|
|
||||||
|
if !body.success {
|
||||||
|
let err: String = body
|
||||||
.errors
|
.errors
|
||||||
.iter()
|
.iter()
|
||||||
.map(|s| format!("{}\n", s.to_owned()))
|
.map(|s| format!("{}\n", s.to_owned()))
|
||||||
|
@ -79,7 +99,14 @@ pub fn get_dns_record_id(
|
||||||
return Err(anyhow!("API Error: {}", err));
|
return Err(anyhow!("API Error: {}", err));
|
||||||
}
|
}
|
||||||
|
|
||||||
let id = match response.result.first() {
|
let records = match body.result {
|
||||||
|
Some(v) => v,
|
||||||
|
None => {
|
||||||
|
return Err(anyhow!("No DNS records returned"))
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let id = match records.first() {
|
||||||
Some(v) => v.id.clone(),
|
Some(v) => v.id.clone(),
|
||||||
None => {
|
None => {
|
||||||
return Err(anyhow!(
|
return Err(anyhow!(
|
||||||
|
@ -121,17 +148,23 @@ pub fn update_ddns(
|
||||||
content: ip.to_owned(),
|
content: ip.to_owned(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let response: CloudflareUpdateResponse = client
|
let response = client
|
||||||
.put(&url)
|
.put(&url)
|
||||||
.header("X-Auth-Email", email)
|
.header("X-Auth-Email", email)
|
||||||
.header("X-Auth-Key", key)
|
.header("X-Auth-Key", key)
|
||||||
.header("Content-Type", "application/json")
|
.header("Content-Type", "application/json")
|
||||||
.json(&update_data)
|
.json(&update_data)
|
||||||
.send()?
|
.send()?;
|
||||||
|
|
||||||
|
if response.status() != 200 {
|
||||||
|
return Err(anyhow!("API Error: HTTP {}", response.status()));
|
||||||
|
}
|
||||||
|
|
||||||
|
let body: CloudflareUpdateResponse = response
|
||||||
.json()?;
|
.json()?;
|
||||||
|
|
||||||
if !response.success {
|
if !body.success {
|
||||||
let err: String = response
|
let err: String = body
|
||||||
.errors
|
.errors
|
||||||
.iter()
|
.iter()
|
||||||
.map(|s| format!("{}\n", s.to_owned()))
|
.map(|s| format!("{}\n", s.to_owned()))
|
||||||
|
|
Loading…
Reference in a new issue