diff options
author | warptangent <warptangent@inbox.com> | 2015-05-19 02:33:30 -0700 |
---|---|---|
committer | warptangent <warptangent@inbox.com> | 2015-05-19 02:56:04 -0700 |
commit | fee8424938a6403bdd12d568037a3305cfcf5341 (patch) | |
tree | 45d36ba07cc65f21423140885d80507b4c75b818 /src | |
parent | Revert "Allow name@domain.tld for OpenAlias lookups" (diff) | |
download | monero-fee8424938a6403bdd12d568037a3305cfcf5341.tar.xz |
Allow name@domain.tld for OpenAlias lookups
Based on tewinget's update.
Make OpenAlias address format independent of existing DNS functions.
Add tests.
Test:
make debug-test
cd build/debug/tests/unit_tests
# test that regular DNS functions work, including IPv4 lookups.
# also test function that converts OpenAlias address format
make && ./unit_tests --gtest_filter=DNSResolver*
# test that OpenAlias addresses like donate@getmonero.org work from
# wallet tools
make && ./unit_tests --gtest_filter=AddressFromURL.Success
Diffstat (limited to 'src')
-rw-r--r-- | src/common/dns_utils.cpp | 13 | ||||
-rw-r--r-- | src/common/dns_utils.h | 12 | ||||
-rw-r--r-- | src/wallet/wallet2.cpp | 3 |
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) |