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,
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, 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 Plesk(PleskProvider),
249 Cpanel(CpanelProvider),
250 GoogleCloudDns(providers::google_cloud_dns::GoogleCloudDnsProvider),
251 Ionos(IonosProvider),
252 HostingDe(HostingDeProvider),
253 Infomaniak(InfomaniakProvider),
254 Netcup(NetcupProvider),
255 Netlify(NetlifyProvider),
256 HuaweiCloud(HuaweiCloudProvider),
257 BaiduCloud(BaiduCloudProvider),
258 AzureDns(AzureDnsProvider),
259 IbmCloud(IbmCloudProvider),
260 Hurricane(HurricaneProvider),
261 Hostinger(HostingerProvider),
262 Autodns(AutodnsProvider),
263 Lightsail(LightsailProvider),
264 EdgeDns(EdgeDnsProvider),
265 #[cfg(feature = "test_provider")]
266 Pebble(PebbleProvider),
267 #[cfg(feature = "test_provider")]
268 InMemory(InMemoryProvider),
269 Route53(Route53Provider),
270 Scaleway(ScalewayProvider),
271 Gcore(GcoreProvider),
272 Vercel(VercelProvider),
273 Vultr(VultrProvider),
274 BluecatV2(BluecatV2Provider),
275 EasyDns(EasyDnsProvider),
276 Joker(JokerProvider),
277 MythicBeasts(MythicBeastsProvider),
278 Namecheap(NamecheapProvider),
279 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
280 Transip(TransipProvider),
281 Ns1(Ns1Provider),
282 LuaDns(LuaDnsProvider),
283 ClouDns(ClouDnsProvider),
284 Glesys(GlesysProvider),
285 Dreamhost(DreamhostProvider),
286 Alidns(AlidnsProvider),
287 TencentCloud(TencentCloudProvider),
288 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
289 Volcengine(VolcengineProvider),
290 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
291 YandexCloud(YandexCloudProvider),
292 Domeneshop(DomeneshopProvider),
293 Safedns(SafeDnsProvider),
294 ArvanCloud(ArvanCloudProvider),
295 Inwx(InwxProvider),
296 UltraDns(UltraDnsProvider),
297 Infoblox(InfobloxProvider),
298}
299
300pub trait IntoFqdn<'x> {
301 fn into_fqdn(self) -> Cow<'x, str>;
302 fn into_name(self) -> Cow<'x, str>;
303}