From ee608ad0c87b7fb34a2d43d711fd78b5f44d2689 Mon Sep 17 00:00:00 2001 From: WolverinDEV Date: Fri, 22 Nov 2019 00:09:27 +0100 Subject: [PATCH] Implemented the letsencrypt challange --- server/src/handler.cpp | 12 ++++++++++++ util/include/teadns/builder.h | 6 ++++++ util/src/builder.cpp | 13 +++++++++++++ 3 files changed, 31 insertions(+) diff --git a/server/src/handler.cpp b/server/src/handler.cpp index 39978b3..1a5c1d1 100644 --- a/server/src/handler.cpp +++ b/server/src/handler.cpp @@ -69,6 +69,18 @@ void WebDNSHandler::handle_message(const std::shared_ptr& bind a.set_type(query->qtype()); a.set_ttl(120); a.builder().set_address(resp); + } else if(query->qclass() == rrclass::IN && query->qtype() == rrtype::TXT) { + auto dn = query->qname(); + if(dn == "_acme-challenge.con-gate.work") { + std::cout << " Letsencrypt request\n"; + std::cout << " Sending predefined key\n"; + + auto& a = response.push_answer(query->qname()); + a.set_class(query->qclass()); + a.set_type(query->qtype()); + a.set_ttl(120); + a.builder().set_text("-YEqeIGJqoOz5uLbUiUfK06--n3jtVoI__6WJY-Ehgk"); + } } } diff --git a/util/include/teadns/builder.h b/util/include/teadns/builder.h index f4b426b..7b2d6a1 100644 --- a/util/include/teadns/builder.h +++ b/util/include/teadns/builder.h @@ -143,6 +143,12 @@ namespace ts::dns { uint32_t address{0}; ); + define_builder(TXT, base, + inline void set_text(const std::string& text) { this->_text = text; } + private: + std::string _text; + ); + #undef define_builder } } diff --git a/util/src/builder.cpp b/util/src/builder.cpp index a197de2..b5adb98 100644 --- a/util/src/builder.cpp +++ b/util/src/builder.cpp @@ -119,4 +119,17 @@ bool rrbuilder::A::build(char *&buffer, size_t &max_size, std::string &error) { buffer += 4; max_size -= 4; return true; +} + +bool rrbuilder::TXT::build(char *&buffer, size_t &max_size, std::string &error) { + if(max_size + 1 < this->_text.size()) { + error = "buffer too small"; + return false; + } + + *buffer = this->_text.size(); + memcpy(buffer + 1, this->_text.data(), this->_text.size()); + buffer += this->_text.size() + 1; + max_size -= this->_text.size() + 1; + return true; } \ No newline at end of file