diff --git a/.gitignore b/.gitignore index daffc58..ddb00c0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ build/ compile_commands.json lander.data +data/ diff --git a/landerctl b/landerctl index e1f44de..d74e0fa 100755 --- a/landerctl +++ b/landerctl @@ -12,4 +12,7 @@ if [ "$1" = add ]; then elif [ "$1" = get ]; then curl -is "$URL/$2" | sed -En 's/^[lL]ocation: (.*)/\1/p' + +elif [ "$1" = paste ]; then + curl -v --data-binary @"$2" -XPOST -H "X-Api-Key: $API_KEY" "$URL/p/" fi diff --git a/src/main.cpp b/src/main.cpp index 3c8fa0f..4fe8031 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -53,7 +53,7 @@ int main() { crow::SimpleApp app; - app.loglevel(crow::LogLevel::Warning); + app.loglevel(crow::LogLevel::Info); CROW_ROUTE(app, "/") .methods(crow::HTTPMethod::Get)( @@ -71,22 +71,23 @@ int main() { }); // Add a new Redirect with a randomly generated key - CROW_ROUTE(app, "/s/").methods(crow::HTTPMethod::Post)( - [api_key, base_url, trie](const crow::request req) { - AUTH(); + CROW_ROUTE(app, "/s/") + .methods(crow::HTTPMethod::Post)( + [api_key, base_url, trie](const crow::request req) { + AUTH(); - Entry *new_entry = entry_new(Redirect, req.body.c_str()); - char *key = ternarytrie_add_random(trie, new_entry); + Entry *new_entry = entry_new(Redirect, req.body.c_str()); + char *key = ternarytrie_add_random(trie, new_entry); - if (key == NULL) { - return crow::response(crow::status::INTERNAL_SERVER_ERROR); - } + if (key == NULL) { + return crow::response(crow::status::INTERNAL_SERVER_ERROR); + } - std::string res = base_url + key; - free(key); + std::string res = base_url + key; + free(key); - return crow::response(res); - }); + return crow::response(res); + }); // Add a new Redirect with a given path CROW_ROUTE(app, "/s/") @@ -105,5 +106,32 @@ int main() { return crow::response(base_url + key); }); + // Add a new Paste with a randomly generated key + CROW_ROUTE(app, "/p/") + .methods(crow::HTTPMethod::Post)( + [api_key, base_url, data_dir, trie](const crow::request &req) { + AUTH(); + + Entry *new_entry = entry_new(Paste, ""); + char *key = ternarytrie_add_random(trie, new_entry); + + if (key == NULL) { + return crow::response(crow::status::INTERNAL_SERVER_ERROR); + } + + // Write paste contents to file + std::fstream file; + file.open(data_dir + "/pastes/" + key, std::ios_base::out); + + if (!file.is_open()) { + return crow::response(crow::status::INTERNAL_SERVER_ERROR); + } + + file << req.body; + file.close(); + + return crow::response(base_url + key); + }); + app.port(18080).multithreaded().run(); } diff --git a/tries/src/ternarytrie.c b/tries/src/ternarytrie.c index 93378d1..f65b165 100644 --- a/tries/src/ternarytrie.c +++ b/tries/src/ternarytrie.c @@ -59,7 +59,12 @@ char entry_type_to_char(EntryType et) { Entry *entry_new(EntryType type, const char *string) { Entry *entry = malloc(sizeof(Entry)); entry->type = type; - entry->string = my_strdup(string); + + if (string != NULL) { + entry->string = my_strdup(string); + } else { + entry->string = NULL; + } return entry; }