feat: add dns.rs

This commit is contained in:
2022-02-05 15:38:13 +08:00
parent 5ebe0a2dae
commit 31e480a7b2
4 changed files with 99 additions and 23 deletions

View File

@@ -1,10 +1,53 @@
use rust_util::XResult;
use serde::{Deserialize, Serialize};
use aliyun_openapi_core_rust_sdk::RPClient;
use crate::dns::DnsClient;
static ALI_DNS_ENDPOINT: &str = "https://alidns.aliyuncs.com";
static ALI_DNS_API_VERSION: &str = "2015-01-09";
pub struct AlibabaCloudDnsClient {
client: RPClient,
}
impl AlibabaCloudDnsClient {
pub fn build(supplier: &str) -> XResult<AlibabaCloudDnsClient> {
let access_credential = simple_parse_aliyun_supplier(supplier)?;
Ok(AlibabaCloudDnsClient {
client: build_dns_client(&access_credential)
})
}
}
impl DnsClient for AlibabaCloudDnsClient {
fn list_dns(&mut self, domain: &str) -> XResult<Vec<crate::dns::DnsRecord>> {
let list_dns_response = opt_result!(list_dns(&self.client, domain)?, "List dns records failed: {:?}");
let mut dns_records = vec![];
list_dns_response.domain_records.record.into_iter().for_each(|record| {
dns_records.push(crate::dns::DnsRecord {
id: record.record_id,
domain: record.domain_name,
rr: record.rr,
r#type: record.r#type,
ttl: record.ttl,
value: record.value,
});
});
Ok(dns_records)
}
fn delete_dns_record(&mut self, record_id: &str) -> XResult<()> {
opt_result!(delete_dns_record(&self.client, record_id)?, "Delete dns record failed: {:?}");
Ok(())
}
fn add_dns_record(&mut self, dns_record: &crate::dns::DnsRecord) -> XResult<()> {
let _ = opt_result!(add_dns_record(&self.client, &dns_record.domain, &dns_record.rr, &dns_record.r#type, &dns_record.value),
"Add dns record failed: {}");
Ok(())
}
}
#[derive(Debug)]
pub struct AccessCredential {
access_key_id: String,
@@ -111,9 +154,9 @@ pub fn delete_dns_record(client: &RPClient, record_id: &str) -> XResult<Result<C
parse_result("DeleteDomainRecord", &delete_domain_record_response)
}
pub fn add_txt_dns_record(client: &RPClient, domain: &str, rr: &str, value: &str) -> XResult<Result<CommonSuccessResponse, CommonErrorResponse>> {
add_dns_record(client, domain, rr, "TXT", value)
}
// pub fn add_txt_dns_record(client: &RPClient, domain: &str, rr: &str, value: &str) -> XResult<Result<CommonSuccessResponse, CommonErrorResponse>> {
// add_dns_record(client, domain, rr, "TXT", value)
// }
// domain -> "example.com"
// rr -> "@", "_acme-challenge"