1#![doc = include_str!("../README.md")]
2#[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
14use providers::oraclecloud::OracleCloudProvider;
15#[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
16use providers::ovh::OvhProvider;
17#[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
18use providers::volcengine::VolcengineProvider;
19#[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
20use providers::yandexcloud::YandexCloudProvider;
21
22#[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
23use providers::transip::TransipProvider;
24
25#[cfg(feature = "test_provider")]
26use providers::{in_memory::InMemoryProvider, pebble::PebbleProvider};
27
28pub use hickory_proto::dnssec;
29use providers::{
30 alidns::AlidnsProvider, bluecatv2::BluecatV2Provider,
31 bunny::BunnyProvider, cloudflare::CloudflareProvider, cloudns::ClouDnsProvider,
32 constellix::ConstellixProvider, ddnss::DdnssProvider, desec::DesecProvider,
33 digitalocean::DigitalOceanProvider, dnsimple::DNSimpleProvider,
34 dnsmadeeasy::DnsMadeEasyProvider, dreamhost::DreamhostProvider, duckdns::DuckDnsProvider,
35 dynu::DynuProvider, easydns::EasyDnsProvider, exoscale::ExoscaleProvider,
36 freemyip::FreeMyIpProvider, gandiv5::GandiV5Provider, gcore::GcoreProvider,
37 glesys::GlesysProvider, godaddy::GodaddyProvider, hetzner::HetznerProvider,
38 hostingde::HostingDeProvider, infomaniak::InfomaniakProvider, ionos::IonosProvider,
39 ipv64::Ipv64Provider, joker::JokerProvider, linode::LinodeProvider,
40 luadns::LuaDnsProvider, mythicbeasts::MythicBeastsProvider,
41 namecheap::NamecheapProvider, namedotcom::NameDotComProvider, namesilo::NameSiloProvider,
42 netcup::NetcupProvider, netlify::NetlifyProvider, nifcloud::NifcloudProvider,
43 ns1::Ns1Provider, porkbun::PorkBunProvider, rfc2136::Rfc2136Provider,
44 route53::Route53Provider, scaleway::ScalewayProvider, spaceship::SpaceshipProvider,
45 tencentcloud::TencentCloudProvider, vercel::VercelProvider, vultr::VultrProvider,
46 websupport::WebSupportProvider,
47};
48
49use providers::{
50 arvancloud::ArvanCloudProvider, autodns::AutodnsProvider, azuredns::AzureDnsProvider,
51 baiducloud::BaiduCloudProvider, cpanel::CpanelProvider, domeneshop::DomeneshopProvider,
52 edgedns::EdgeDnsProvider, hostinger::HostingerProvider, huaweicloud::HuaweiCloudProvider,
53 hurricane::HurricaneProvider, ibmcloud::IbmCloudProvider, infoblox::InfobloxProvider,
54 inwx::InwxProvider, lightsail::LightsailProvider, plesk::PleskProvider,
55 safedns::SafeDnsProvider, ultradns::UltraDnsProvider,
56};
57use std::{
58 borrow::Cow,
59 net::{Ipv4Addr, Ipv6Addr},
60};
61
62pub mod bind;
63pub mod crypto;
64pub mod http;
65pub mod jwt;
66pub mod providers;
67pub mod tests;
68pub mod update;
69pub mod utils;
70
71#[derive(Debug)]
72pub enum Error {
73 Protocol(String),
74 Parse(String),
75 Client(String),
76 Response(String),
77 Api(String),
78 Serialize(String),
79 Unauthorized,
80 NotFound,
81 BadRequest,
82}
83
84#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
86pub enum DnsRecordType {
87 A,
88 AAAA,
89 CNAME,
90 NS,
91 MX,
92 TXT,
93 SRV,
94 TLSA,
95 CAA,
96}
97
98#[derive(Clone, Debug, PartialEq, Eq, Hash)]
100pub struct NamedDnsRecord {
101 pub name: String,
102 pub record: DnsRecord,
103}
104
105#[derive(Clone, Debug, PartialEq, Eq, Hash)]
107pub enum DnsRecord {
108 A(Ipv4Addr),
109 AAAA(Ipv6Addr),
110 CNAME(String),
111 NS(String),
112 MX(MXRecord),
113 TXT(String),
114 SRV(SRVRecord),
115 TLSA(TLSARecord),
116 CAA(CAARecord),
117}
118
119#[derive(Clone, Debug, PartialEq, Eq, Hash)]
121pub struct MXRecord {
122 pub exchange: String,
123 pub priority: u16,
124}
125
126#[derive(Clone, Debug, PartialEq, Eq, Hash)]
128pub struct SRVRecord {
129 pub target: String,
130 pub priority: u16,
131 pub weight: u16,
132 pub port: u16,
133}
134
135#[derive(Clone, Debug, PartialEq, Eq, Hash)]
137pub struct TLSARecord {
138 pub cert_usage: TlsaCertUsage,
139 pub selector: TlsaSelector,
140 pub matching: TlsaMatching,
141 pub cert_data: Vec<u8>,
142}
143
144#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)]
145pub enum TlsaCertUsage {
146 PkixTa,
147 PkixEe,
148 DaneTa,
149 DaneEe,
150 Private,
151}
152
153#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)]
154pub enum TlsaSelector {
155 Full,
156 Spki,
157 Private,
158}
159
160#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)]
161pub enum TlsaMatching {
162 Raw,
163 Sha256,
164 Sha512,
165 Private,
166}
167
168#[derive(Clone, Debug, PartialEq, Eq, Hash)]
170pub enum CAARecord {
171 Issue {
172 issuer_critical: bool,
173 name: Option<String>,
174 options: Vec<KeyValue>,
175 },
176 IssueWild {
177 issuer_critical: bool,
178 name: Option<String>,
179 options: Vec<KeyValue>,
180 },
181 Iodef {
182 issuer_critical: bool,
183 url: String,
184 },
185}
186
187#[derive(Clone, Debug, PartialEq, Eq, Hash)]
188pub struct KeyValue {
189 pub key: String,
190 pub value: String,
191}
192
193pub enum TsigAlgorithm {
195 HmacMd5,
196 Gss,
197 HmacSha1,
198 HmacSha224,
199 HmacSha256,
200 HmacSha256_128,
201 HmacSha384,
202 HmacSha384_192,
203 HmacSha512,
204 HmacSha512_256,
205}
206
207pub enum Algorithm {
209 RSASHA256,
210 RSASHA512,
211 ECDSAP256SHA256,
212 ECDSAP384SHA384,
213 ED25519,
214}
215
216pub type Result<T> = std::result::Result<T, Error>;
217
218#[derive(Clone)]
219#[non_exhaustive]
220pub enum DnsUpdater {
221 Rfc2136(Rfc2136Provider),
222 Cloudflare(CloudflareProvider),
223 DigitalOcean(DigitalOceanProvider),
224 Desec(DesecProvider),
225 Constellix(ConstellixProvider),
226 DnsMadeEasy(DnsMadeEasyProvider),
227 Exoscale(ExoscaleProvider),
228 Nifcloud(NifcloudProvider),
229 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
230 Ovh(OvhProvider),
231 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
232 OracleCloud(OracleCloudProvider),
233 Bunny(BunnyProvider),
234 Linode(LinodeProvider),
235 Porkbun(PorkBunProvider),
236 Spaceship(SpaceshipProvider),
237 WebSupport(WebSupportProvider),
238 DNSimple(DNSimpleProvider),
239 GandiV5(GandiV5Provider),
240 Godaddy(GodaddyProvider),
241 Hetzner(HetznerProvider),
242 NameDotCom(NameDotComProvider),
243 NameSilo(NameSiloProvider),
244 DuckDns(DuckDnsProvider),
245 FreeMyIp(FreeMyIpProvider),
246 Ipv64(Ipv64Provider),
247 Ddnss(DdnssProvider),
248 Dynu(DynuProvider),
249 Plesk(PleskProvider),
250 Cpanel(CpanelProvider),
251 GoogleCloudDns(providers::google_cloud_dns::GoogleCloudDnsProvider),
252 Ionos(IonosProvider),
253 HostingDe(HostingDeProvider),
254 Infomaniak(InfomaniakProvider),
255 Netcup(NetcupProvider),
256 Netlify(NetlifyProvider),
257 HuaweiCloud(HuaweiCloudProvider),
258 BaiduCloud(BaiduCloudProvider),
259 AzureDns(AzureDnsProvider),
260 IbmCloud(IbmCloudProvider),
261 Hurricane(HurricaneProvider),
262 Hostinger(HostingerProvider),
263 Autodns(AutodnsProvider),
264 Lightsail(LightsailProvider),
265 EdgeDns(EdgeDnsProvider),
266 #[cfg(feature = "test_provider")]
267 Pebble(PebbleProvider),
268 #[cfg(feature = "test_provider")]
269 InMemory(InMemoryProvider),
270 Route53(Route53Provider),
271 Scaleway(ScalewayProvider),
272 Gcore(GcoreProvider),
273 Vercel(VercelProvider),
274 Vultr(VultrProvider),
275 BluecatV2(BluecatV2Provider),
276 EasyDns(EasyDnsProvider),
277 Joker(JokerProvider),
278 MythicBeasts(MythicBeastsProvider),
279 Namecheap(NamecheapProvider),
280 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
281 Transip(TransipProvider),
282 Ns1(Ns1Provider),
283 LuaDns(LuaDnsProvider),
284 ClouDns(ClouDnsProvider),
285 Glesys(GlesysProvider),
286 Dreamhost(DreamhostProvider),
287 Alidns(AlidnsProvider),
288 TencentCloud(TencentCloudProvider),
289 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
290 Volcengine(VolcengineProvider),
291 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
292 YandexCloud(YandexCloudProvider),
293 Domeneshop(DomeneshopProvider),
294 Safedns(SafeDnsProvider),
295 ArvanCloud(ArvanCloudProvider),
296 Inwx(InwxProvider),
297 UltraDns(UltraDnsProvider),
298 Infoblox(InfobloxProvider),
299}
300
301pub trait IntoFqdn<'x> {
302 fn into_fqdn(self) -> Cow<'x, str>;
303 fn into_name(self) -> Cow<'x, str>;
304}