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, bunny::BunnyProvider,
31 cloudflare::CloudflareProvider, cloudns::ClouDnsProvider, constellix::ConstellixProvider,
32 ddnss::DdnssProvider, desec::DesecProvider, digitalocean::DigitalOceanProvider,
33 dnsimple::DNSimpleProvider, dnsmadeeasy::DnsMadeEasyProvider, dreamhost::DreamhostProvider,
34 duckdns::DuckDnsProvider, dynu::DynuProvider, easydns::EasyDnsProvider,
35 exoscale::ExoscaleProvider, freemyip::FreeMyIpProvider, gandiv5::GandiV5Provider,
36 gcore::GcoreProvider, glesys::GlesysProvider, godaddy::GodaddyProvider,
37 hetzner::HetznerProvider, hostingde::HostingDeProvider, infomaniak::InfomaniakProvider,
38 ionos::IonosProvider, ipv64::Ipv64Provider, joker::JokerProvider, linode::LinodeProvider,
39 luadns::LuaDnsProvider, mythicbeasts::MythicBeastsProvider, namecheap::NamecheapProvider,
40 namedotcom::NameDotComProvider, namesilo::NameSiloProvider, netcup::NetcupProvider,
41 netlify::NetlifyProvider, nifcloud::NifcloudProvider, ns1::Ns1Provider, pdns::PdnsProvider,
42 porkbun::PorkBunProvider, rfc2136::Rfc2136Provider, route53::Route53Provider,
43 scaleway::ScalewayProvider, spaceship::SpaceshipProvider, tencentcloud::TencentCloudProvider,
44 vercel::VercelProvider, vultr::VultrProvider, websupport::WebSupportProvider,
45};
46
47use providers::{
48 arvancloud::ArvanCloudProvider, autodns::AutodnsProvider, azuredns::AzureDnsProvider,
49 baiducloud::BaiduCloudProvider, cpanel::CpanelProvider, domeneshop::DomeneshopProvider,
50 edgedns::EdgeDnsProvider, hostinger::HostingerProvider, huaweicloud::HuaweiCloudProvider,
51 hurricane::HurricaneProvider, ibmcloud::IbmCloudProvider, infoblox::InfobloxProvider,
52 inwx::InwxProvider, lightsail::LightsailProvider, plesk::PleskProvider,
53 safedns::SafeDnsProvider, simplycom::SimplyComProvider, ultradns::UltraDnsProvider,
54};
55use std::{
56 borrow::Cow,
57 net::{Ipv4Addr, Ipv6Addr},
58};
59
60pub mod bind;
61pub mod crypto;
62pub mod http;
63pub mod jwt;
64pub mod providers;
65pub mod tests;
66pub mod update;
67pub mod utils;
68
69#[derive(Debug)]
70pub enum Error {
71 Protocol(String),
72 Parse(String),
73 Client(String),
74 Response(String),
75 Api(String),
76 Serialize(String),
77 Unauthorized,
78 NotFound,
79 BadRequest,
80 Unsupported(String),
81}
82
83#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
85pub enum DnsRecordType {
86 A,
87 AAAA,
88 CNAME,
89 NS,
90 MX,
91 TXT,
92 SRV,
93 TLSA,
94 CAA,
95}
96
97#[derive(Clone, Debug, PartialEq, Eq, Hash)]
99pub struct NamedDnsRecord {
100 pub name: String,
101 pub record: DnsRecord,
102}
103
104#[derive(Clone, Debug, PartialEq, Eq, Hash)]
106pub enum DnsRecord {
107 A(Ipv4Addr),
108 AAAA(Ipv6Addr),
109 CNAME(String),
110 NS(String),
111 MX(MXRecord),
112 TXT(String),
113 SRV(SRVRecord),
114 TLSA(TLSARecord),
115 CAA(CAARecord),
116}
117
118#[derive(Clone, Debug, PartialEq, Eq, Hash)]
120pub struct MXRecord {
121 pub exchange: String,
122 pub priority: u16,
123}
124
125#[derive(Clone, Debug, PartialEq, Eq, Hash)]
127pub struct SRVRecord {
128 pub target: String,
129 pub priority: u16,
130 pub weight: u16,
131 pub port: u16,
132}
133
134#[derive(Clone, Debug, PartialEq, Eq, Hash)]
136pub struct TLSARecord {
137 pub cert_usage: TlsaCertUsage,
138 pub selector: TlsaSelector,
139 pub matching: TlsaMatching,
140 pub cert_data: Vec<u8>,
141}
142
143#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)]
144pub enum TlsaCertUsage {
145 PkixTa,
146 PkixEe,
147 DaneTa,
148 DaneEe,
149 Private,
150}
151
152#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)]
153pub enum TlsaSelector {
154 Full,
155 Spki,
156 Private,
157}
158
159#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)]
160pub enum TlsaMatching {
161 Raw,
162 Sha256,
163 Sha512,
164 Private,
165}
166
167#[derive(Clone, Debug, PartialEq, Eq, Hash)]
169pub enum CAARecord {
170 Issue {
171 issuer_critical: bool,
172 name: Option<String>,
173 options: Vec<KeyValue>,
174 },
175 IssueWild {
176 issuer_critical: bool,
177 name: Option<String>,
178 options: Vec<KeyValue>,
179 },
180 Iodef {
181 issuer_critical: bool,
182 url: String,
183 },
184}
185
186#[derive(Clone, Debug, PartialEq, Eq, Hash)]
187pub struct KeyValue {
188 pub key: String,
189 pub value: String,
190}
191
192pub enum TsigAlgorithm {
194 HmacMd5,
195 Gss,
196 HmacSha1,
197 HmacSha224,
198 HmacSha256,
199 HmacSha256_128,
200 HmacSha384,
201 HmacSha384_192,
202 HmacSha512,
203 HmacSha512_256,
204}
205
206pub enum Algorithm {
208 RSASHA256,
209 RSASHA512,
210 ECDSAP256SHA256,
211 ECDSAP384SHA384,
212 ED25519,
213}
214
215pub type Result<T> = std::result::Result<T, Error>;
216
217#[derive(Clone)]
218#[non_exhaustive]
219pub enum DnsUpdater {
220 Rfc2136(Rfc2136Provider),
221 Cloudflare(CloudflareProvider),
222 DigitalOcean(DigitalOceanProvider),
223 Desec(DesecProvider),
224 Constellix(ConstellixProvider),
225 DnsMadeEasy(DnsMadeEasyProvider),
226 Exoscale(ExoscaleProvider),
227 Nifcloud(NifcloudProvider),
228 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
229 Ovh(OvhProvider),
230 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
231 OracleCloud(OracleCloudProvider),
232 Bunny(BunnyProvider),
233 Linode(LinodeProvider),
234 Porkbun(PorkBunProvider),
235 Spaceship(SpaceshipProvider),
236 WebSupport(WebSupportProvider),
237 DNSimple(DNSimpleProvider),
238 GandiV5(GandiV5Provider),
239 Godaddy(GodaddyProvider),
240 Hetzner(HetznerProvider),
241 NameDotCom(NameDotComProvider),
242 NameSilo(NameSiloProvider),
243 DuckDns(DuckDnsProvider),
244 FreeMyIp(FreeMyIpProvider),
245 Ipv64(Ipv64Provider),
246 Ddnss(DdnssProvider),
247 Dynu(DynuProvider),
248 Pdns(PdnsProvider),
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 SimplyCom(SimplyComProvider),
296 ArvanCloud(ArvanCloudProvider),
297 Inwx(InwxProvider),
298 UltraDns(UltraDnsProvider),
299 Infoblox(InfobloxProvider),
300}
301
302pub trait IntoFqdn<'x> {
303 fn into_fqdn(self) -> Cow<'x, str>;
304 fn into_name(self) -> Cow<'x, str>;
305}