#include "crow.h" extern "C" { #include "ternarytrie.h" } int main() { // Read in API key char *api_key = getenv("LANDER_API_KEY"); if (api_key == NULL) { printf("No API key provided."); return 1; } TernaryTrie *trie = ternarytrie_init(); std::string file_path = "lander.data"; ternarytrie_populate(trie, file_path.c_str()); crow::SimpleApp app; CROW_ROUTE(app, "/") .methods(crow::HTTPMethod::Post)( [api_key, trie](const crow::request &req, std::string s) { // Authenticate request std::string provided_api_key = req.get_header_value("X-Api-Key"); if (strcmp(api_key, provided_api_key.c_str()) != 0) { return crow::response(crow::status::UNAUTHORIZED); } bool res = ternarytrie_add(trie, s.c_str(), req.body.c_str()); if (!res) { return crow::response(crow::status::CONFLICT); } return crow::response(crow::status::NO_CONTENT); }); CROW_ROUTE(app, "/") .methods(crow::HTTPMethod::Get)( [trie](crow::response &res, std::string s) { char *payload = ternarytrie_search(trie, s.c_str()); if (payload != NULL) { res.redirect(payload); } else { res.code = 404; } res.end(); }); app.port(18080).multithreaded().run(); }