aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/dns_utils.cpp13
-rw-r--r--src/common/dns_utils.h12
-rw-r--r--src/wallet/wallet2.cpp3
3 files changed, 27 insertions, 1 deletions
diff --git a/src/common/dns_utils.cpp b/src/common/dns_utils.cpp
index ea7f1078b..98e3d0ea6 100644
--- a/src/common/dns_utils.cpp
+++ b/src/common/dns_utils.cpp
@@ -304,6 +304,19 @@ std::vector<std::string> DNSResolver::get_txt_record(const std::string& url, boo
return records;
}
+std::string DNSResolver::get_dns_format_from_oa_address(const std::string& oa_addr)
+{
+ std::string addr(oa_addr);
+ auto first_at = addr.find("@");
+ if (first_at == std::string::npos)
+ return addr;
+
+ // convert name@domain.tld to name.domain.tld
+ addr.replace(first_at, 1, ".");
+
+ return addr;
+}
+
DNSResolver& DNSResolver::instance()
{
static DNSResolver* staticInstance = NULL;
diff --git a/src/common/dns_utils.h b/src/common/dns_utils.h
index a16c7eff7..d98523a30 100644
--- a/src/common/dns_utils.h
+++ b/src/common/dns_utils.h
@@ -101,6 +101,18 @@ public:
std::vector<std::string> get_txt_record(const std::string& url, bool& dnssec_available, bool& dnssec_valid);
/**
+ * @brief Gets a DNS address from OpenAlias format
+ *
+ * If the address looks good, but contains one @ symbol, replace that with a .
+ * e.g. donate@getmonero.org becomes donate.getmonero.org
+ *
+ * @param oa_addr OpenAlias address
+ *
+ * @return dns_addr DNS address
+ */
+ std::string get_dns_format_from_oa_address(const std::string& oa_addr);
+
+ /**
* @brief Gets the singleton instance of DNSResolver
*
* @return returns a pointer to the singleton
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp
index 6698e7296..7928e1c62 100644
--- a/src/wallet/wallet2.cpp
+++ b/src/wallet/wallet2.cpp
@@ -1016,7 +1016,8 @@ std::vector<std::string> wallet2::addresses_from_url(const std::string& url, boo
std::vector<std::string> addresses;
// get txt records
bool dnssec_available, dnssec_isvalid;
- auto records = tools::DNSResolver::instance().get_txt_record(url, dnssec_available, dnssec_isvalid);
+ std::string oa_addr = tools::DNSResolver::instance().get_dns_format_from_oa_address(url);
+ auto records = tools::DNSResolver::instance().get_txt_record(oa_addr, dnssec_available, dnssec_isvalid);
// TODO: update this to allow for conveying that dnssec was not available
if (dnssec_available && dnssec_isvalid)