diff options
Diffstat (limited to 'src/Utilities/Utilities.hpp')
-rw-r--r-- | src/Utilities/Utilities.hpp | 142 |
1 files changed, 0 insertions, 142 deletions
diff --git a/src/Utilities/Utilities.hpp b/src/Utilities/Utilities.hpp deleted file mode 100644 index 0c9f435..0000000 --- a/src/Utilities/Utilities.hpp +++ /dev/null @@ -1,142 +0,0 @@ -#pragma once - -#include <ctime> -#include <string> -#include <curl/curl.h> -#include <boost/date_time.hpp> - -#define NOW std::time(0) -#define LOG_TIME_FORMAT "%y-%m-%d %H:%M:%S" -#define HR_TIME_FORMAT "%d.%m.%y, %H:%M:%S UHR" -#define NOW_STRING TimeStampToHReadble(NOW, false) - -static std::string TimeStampToHReadble(const time_t rawTime, bool HR_READABLE) { - struct tm *dt; - char buffer[30]; - dt = localtime(&rawTime); - if(HR_READABLE) { - strftime(buffer, sizeof(buffer), HR_TIME_FORMAT, dt); - } else { - strftime(buffer, sizeof(buffer), LOG_TIME_FORMAT, dt); - } - return std::string(buffer); -} - -#include <fstream> -static std::string getApiTokenFromFile(const std::string& filePath) { - std::string token = "NO-TOKEN"; - - std::ifstream inFile(filePath); - - if (inFile) { - // TODO: validate, at least a little - currently we just assume the file contains the correct data - std::getline(inFile, token); - } else { - return ""; - } - - return token; -} - -#ifdef NDEBUG - -static std::string getProductionApiToken() { - return getApiTokenFromFile("../release.api"); -} - -#else - -static std::string getDebugApiToken() { - return getApiTokenFromFile("../debug.api"); -} - -#endif - -static CURLcode downloadFile(const std::string& url, const std::string& fileName) { - - CURL *curl; - FILE *fp; - CURLcode res; - curl = curl_easy_init(); - - if (curl) { - fp = fopen(fileName.c_str(), "wb"); - - curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); - curl_easy_setopt(curl, CURLOPT_USERAGENT, - "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36"); //so apparently the Website stw.berlin blocks the IPwhen accessing it very often with the bot... - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); - res = curl_easy_perform(curl); - if (res != CURLE_OK){ - //TODO: return int as status instead of boolean - maybe even this curl error? - return CURLE_COULDNT_CONNECT; - } - curl_easy_cleanup(curl); - fclose(fp); - return CURLE_OK; - } else { - return CURLE_COULDNT_CONNECT; - } -} - -static CURLcode downloadMensaFile(const int& ID, const boost::posix_time::ptime& datum) { - - std::string datumString = std::to_string(datum.date().year()) + "-" + std::to_string(datum.date().month().as_number()) + "-" + std::to_string(datum.date().day()); - - std::string postfield = "resources_id=" + std::to_string(ID) + "&date=" + datumString; - - CURL *curl; - FILE *fp; - CURLcode res; - curl = curl_easy_init(); - - if (curl) { - fp = fopen(std::to_string(ID).c_str(), "wb"); - - struct curl_slist *slist1; - - slist1 = nullptr; - slist1 = curl_slist_append(slist1, "Cookie: seitenbereich=mensen; _ga=GA1.2.1719763776.1545837849; filterkennz=[]; PHPSESSID=9fa00137a2ad065fe595196ddb34e0ba; _gid=GA1.2.226483670.1549982576; loadDataForResource=191; storedPathname=/mensen.html; _gat=1"); - slist1 = curl_slist_append(slist1, "Origin: https://www.stw.berlin"); - slist1 = curl_slist_append(slist1, "Accept-Encoding: gzip, deflate, br"); - slist1 = curl_slist_append(slist1, "Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7"); - slist1 = curl_slist_append(slist1, "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36"); - slist1 = curl_slist_append(slist1, "Content-Type: application/x-www-form-urlencoded; charset=UTF-8"); - slist1 = curl_slist_append(slist1, "Accept: */*"); - slist1 = curl_slist_append(slist1, "Referer: https://www.stw.berlin/mensen.html"); - slist1 = curl_slist_append(slist1, "X-Requested-With: XMLHttpRequest"); - slist1 = curl_slist_append(slist1, "Connection: keep-alive"); - slist1 = curl_slist_append(slist1, "DNT: 1"); - - curl = curl_easy_init(); - curl_easy_setopt(curl, CURLOPT_BUFFERSIZE, 102400L); - curl_easy_setopt(curl, CURLOPT_URL, "https://www.stw.berlin/xhr/speiseplan-wochentag.html"); - curl_easy_setopt(curl, CURLOPT_TIMEOUT, 5L); - curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L); - curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postfield.c_str()); - curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)32); - curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist1); - curl_easy_setopt(curl, CURLOPT_USERAGENT, "curl/7.63.0"); - curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 50L); - curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, (long)CURL_HTTP_VERSION_2TLS); - curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, ""); - curl_easy_setopt(curl, CURLOPT_SSH_KNOWNHOSTS, "/home/max/.ssh/known_hosts"); - curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L); - - curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); - res = curl_easy_perform(curl); - if (res != CURLE_OK){ - //TODO: return int as status instead of boolean - maybe even this curl error? - return res; - } - curl_easy_cleanup(curl); - curl = nullptr; - curl_slist_free_all(slist1); - slist1 = nullptr; - fclose(fp); - return CURLE_OK; - } else { - return CURLE_FAILED_INIT; - } -} |