use crate::model::Zones;
use isahc::{prelude::Request, RequestExt, ResponseExt};
pub mod model;
pub async fn get_domain_id(
domain: &str,
cf_api: &str,
) -> Result<String, Box<dyn std::error::Error>> {
let resp: Zones = Request::get("https://api.cloudflare.com/client/v4/zones")
.header("Authorization", format!("Bearer {}", cf_api))
.body(())?
.send()?
.json()?;
for x in resp.result.iter() {
if x.name == domain {
return Ok(x.id.clone());
}
}
Err("error: domain not found in zones".into())
}
pub async fn purge_file(
zone: &str,
url: &str,
key: &str,
) -> Result<isahc::http::StatusCode, Box<dyn std::error::Error>> {
Ok(Request::post(format!(
"https://api.cloudflare.com/client/v4/zones/{}/purge_cache",
zone
))
.header("Authorization", format!("Bearer {}", key))
.header("content-type", "application/json")
.body(serde_json::to_vec(&model::PurgeFiles { files: vec![url] })?)?
.send_async()
.await?
.status())
}