aboutsummaryrefslogtreecommitdiffstats
path: root/src/SimpleHandlers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/SimpleHandlers.cpp')
-rw-r--r--src/SimpleHandlers.cpp30
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);
}