diff options
Diffstat (limited to 'src/SimpleHandlers.cpp')
-rw-r--r-- | src/SimpleHandlers.cpp | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/src/SimpleHandlers.cpp b/src/SimpleHandlers.cpp index 0a4bdb1..d9c6448 100644 --- a/src/SimpleHandlers.cpp +++ b/src/SimpleHandlers.cpp @@ -2,11 +2,14 @@ #include "Response.hpp" +#include <array> #include <cctype> +#include <memory> #include <string> -#include <fstream> #include <iomanip> #include <sstream> +#include <iostream> +#include <stdexcept> using namespace Response; @@ -113,7 +116,30 @@ std::string url_encode(std::string const &value) { return escaped.str(); } + +std::string exec(const char* cmd) { + std::array<char, 128> buffer{}; + std::string result; + std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd, "r"), pclose); + if (!pipe) { + throw std::runtime_error("popen() failed!"); + } + while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) { + result += buffer.data(); + } + return result; +} + json Handler::latexRenderHandler(std::string const &arguments, std::string const &session, void *payload) { (void) payload; - return simple_response("https://latex.codecogs.com/png.latex?" + url_encode(arguments), session, true); + + std::string file = exec("mktemp"); + + std::string result = exec(("curl -s 'https://latex.codecogs.com/png.latex?" + url_encode(arguments) + "' " + "-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0' " + "-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' " + "-H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'DNT: 1' -H 'Connection: keep-alive' " + "-H 'Upgrade-Insecure-Requests: 1' --output " + file).c_str()); + + return simple_response(result, session, true); } |