diff --git a/crates/mod-dns-resolver/src/lib.rs b/crates/mod-dns-resolver/src/lib.rs index 0aa1bd39..91acc35c 100644 --- a/crates/mod-dns-resolver/src/lib.rs +++ b/crates/mod-dns-resolver/src/lib.rs @@ -1,7 +1,7 @@ use anyhow::Context; use config::{any_err, get_or_create_sub_module, serialize_options}; use dns_resolver::resolver::Resolver; -use dns_resolver::{resolve_a_or_aaaa, MailExchanger}; +use dns_resolver::{get_resolver, resolve_a_or_aaaa, MailExchanger}; use hickory_resolver::config::{NameServerConfig, Protocol, ResolverConfig, ResolverOpts}; use hickory_resolver::{Name, TokioAsyncResolver}; use mlua::{Lua, LuaSerdeExt}; @@ -18,6 +18,15 @@ pub fn register(lua: &Lua) -> anyhow::Result<()> { })?, )?; + dns_mod.set( + "lookup_txt", + lua.create_async_function(|_lua, domain: String| async move { + let resolver = get_resolver(); + let answer = resolver.resolve_txt(domain).await.map_err(any_err)?; + Ok(answer.as_txt()) + })?, + )?; + dns_mod.set( "lookup_addr", lua.create_async_function(|_lua, domain: String| async move { diff --git a/docs/reference/kumo.dns/lookup_txt.md b/docs/reference/kumo.dns/lookup_txt.md new file mode 100644 index 00000000..d8b72db2 --- /dev/null +++ b/docs/reference/kumo.dns/lookup_txt.md @@ -0,0 +1,16 @@ +# `kumo.dns.lookup_txt(DOMAIN)` + +{{since('dev')}} + +Resolve a TXT record for the requested `DOMAIN`. + +Raises an error if the domain doesn't exist. + +Returns a lua array-style table with the list of txt records returned from DNS. + +```lua +assert( + kumo.serde.json_encode(kumo.dns.lookup_txt 'gmail.com') + == '["v=spf1 redirect=_spf.google.com","globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8="]' +) +```