diff --git a/server/main.cpp b/server/main.cpp index fb542e6..b5d0c26 100644 --- a/server/main.cpp +++ b/server/main.cpp @@ -30,6 +30,7 @@ std::vector bindings(uint16_t port) { return result; } +extern std::string le_token; int main(int argc, char** argv) { evthread_use_pthreads(); @@ -66,6 +67,9 @@ int main(int argc, char** argv) { if(line == "end" || line == "stop") { std::cout << "Stopping server\n"; break; + } else if(line.length() > 13 && line.substr(0, 13) == "set-le-token ") { + le_token = line.substr(13); + std::cout << "Setting letsencrypt token to: " << le_token << "\n"; } else { std::cerr << "Unknown command \"" << line << "\"\n"; } diff --git a/server/src/handler.cpp b/server/src/handler.cpp index 1a5c1d1..d66da2c 100644 --- a/server/src/handler.cpp +++ b/server/src/handler.cpp @@ -2,6 +2,7 @@ #include "./server.h" #include "./net.h" +#include #include #include #include @@ -9,6 +10,7 @@ using namespace ts::dns; using namespace ts::dns::builder; +std::string le_token; void WebDNSHandler::handle_message(const std::shared_ptr& binding, const sockaddr_storage &address, void *buffer, size_t size) { std::cout << "Received DNS request from " << net::to_string(address) << ":\n"; DNSParser parser{0, nullptr, buffer, size}; @@ -71,6 +73,8 @@ void WebDNSHandler::handle_message(const std::shared_ptr& bind a.builder().set_address(resp); } else if(query->qclass() == rrclass::IN && query->qtype() == rrtype::TXT) { auto dn = query->qname(); + std::transform(dn.begin(), dn.end(), dn.begin(), tolower); + if(dn == "_acme-challenge.con-gate.work") { std::cout << " Letsencrypt request\n"; std::cout << " Sending predefined key\n"; @@ -79,7 +83,7 @@ void WebDNSHandler::handle_message(const std::shared_ptr& bind a.set_class(query->qclass()); a.set_type(query->qtype()); a.set_ttl(120); - a.builder().set_text("-YEqeIGJqoOz5uLbUiUfK06--n3jtVoI__6WJY-Ehgk"); + a.builder().set_text(le_token); } } }