diff --git a/README.md b/README.md index efd7c1a..f260d6b 100644 --- a/README.md +++ b/README.md @@ -50,10 +50,6 @@ curl -X PUT \ - the object_file is uploaded, hashed, added to the registry (if that hash doesn't already exist), and {label:tag,hash} entries are added to the directory index. - matching tags on older versions are removed. -### Delete Tag -- to delete a label/tag (object remains): - - `curl http://localhost:8123/deletetag?token="WRITE_TOKEN"\&labeltag="LABEL:TAG"` - ### Delete Object - to delete an object (and all tags on that object): - `curl http://localhost:8123/deleteobject?token="WRITE_TOKEN"\&hash="HASH"` diff --git a/src/server.cpp b/src/server.cpp index 189e5c2..a50a38f 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -186,21 +186,12 @@ void Server::setup_routes() { handle_get_metadata(req, res); }); - // Delete a label/tag (object remains) - server_.Get("/deletetag", [this](const httplib::Request& req, httplib::Response& res) { - handle_delete_tag(req, res); - }); // Delete an object (and all tags on that object) server_.Get("/deleteobject", [this](const httplib::Request& req, httplib::Response& res) { handle_delete_object(req, res); }); - // Add a tag to an existing object - server_.Get("/appendtag", [this](const httplib::Request& req, httplib::Response& res) { - handle_append_tag(req, res); - }); - server_.Get("/status", [this](const httplib::Request& req, httplib::Response& res) { res.set_content(nlohmann::json({{"result", "success"}, {"status", "ok"}}).dump(), "application/json"); }); @@ -486,33 +477,6 @@ void Server::add_file_metadata(const std::string &file_path, nlohmann::json &met metadata["file_modification_time"] = std::chrono::system_clock::to_time_t(sctp); } -void Server::handle_delete_tag(const httplib::Request& req, httplib::Response& res) { - std::map params; - if (!validate_write_request(req, res, {"token", "labeltag"}, params)) { - return; - } - - // Validate label:tag format - auto [label, tag] = parse_label_tag(params["labeltag"]); - if (label.empty() || tag.empty()) { - res.status = 400; - nlohmann::json response = {{"result", "error"}, {"error", "Invalid label:tag format"}}; - res.set_content(response.dump(), "application/json"); - return; - } - - // Delete the label:tag from the database - if (!db_->remove(params["labeltag"])) { - res.status = 404; - nlohmann::json response = {{"result", "error"}, {"error", "Label:tag not found or deletion failed"}}; - res.set_content(response.dump(), "application/json"); - return; - } - - nlohmann::json response = {{"result", "success"}}; - res.set_content(response.dump(), "application/json"); -} - void Server::handle_delete_object(const httplib::Request& req, httplib::Response& res) { std::map params; if (!validate_write_request(req, res, {"token", "hash"}, params)) { @@ -551,57 +515,6 @@ void Server::handle_delete_object(const httplib::Request& req, httplib::Response res.set_content(response.dump(), "application/json"); } -void Server::handle_append_tag(const httplib::Request& req, httplib::Response& res) { - std::map params; - if (!validate_write_request(req, res, {"token", "labeltag", "hash"}, params)) { - return; - } - - // Validate label:tag format - auto [label, tag] = parse_label_tag(params["labeltag"]); - if (label.empty() || tag.empty()) { - res.status = 400; - nlohmann::json response = {{"result", "error"}, {"error", "Invalid label:tag format"}}; - res.set_content(response.dump(), "application/json"); - return; - } - - // Validate that the hash exists as a file - std::filesystem::path file_path = config_.object_store_path / params["hash"]; - if (!std::filesystem::exists(file_path) || !std::filesystem::is_regular_file(file_path)) { - res.status = 404; - nlohmann::json response = {{"result", "error"}, {"error", "Object not found for hash: " + params["hash"]}}; - res.set_content(response.dump(), "application/json"); - return; - } - - // Check if the label:tag already exists - dbEntry existing_entry; - if (db_->get(params["labeltag"], existing_entry)) { - if (existing_entry.hash == params["hash"]) { - // Label:tag already points to this hash, nothing to do - nlohmann::json response = {{"result", "success"}, {"message", "Label:tag already points to this hash"}}; - res.set_content(response.dump(), "application/json"); - return; - } - } - - // Create a new entry with the label:tag pointing to the hash - dbEntry entry; - entry.label_tag = params["labeltag"]; - entry.hash = params["hash"]; - entry.metadata = nlohmann::json({}); // Empty metadata for appended tags - - if (!db_->update_or_insert(entry)) { - res.status = 500; - nlohmann::json response = {{"result", "error"}, {"error", "Failed to append tag"}}; - res.set_content(response.dump(), "application/json"); - return; - } - - nlohmann::json response = {{"result", "success"}}; - res.set_content(response.dump(), "application/json"); -} void Server::handle_exists(const httplib::Request& req, httplib::Response& res) { const auto& key = req.matches[1].str(); diff --git a/src/server.hpp b/src/server.hpp index 57ab08c..0620c26 100644 --- a/src/server.hpp +++ b/src/server.hpp @@ -28,9 +28,7 @@ private: void handle_get_directory(const httplib::Request& req, httplib::Response& res); void handle_put_object(const httplib::Request& req, httplib::Response& res); void handle_get_metadata(const httplib::Request& req, httplib::Response& res); - void handle_delete_tag(const httplib::Request& req, httplib::Response& res); void handle_delete_object(const httplib::Request& req, httplib::Response& res); - void handle_append_tag(const httplib::Request& req, httplib::Response& res); void handle_exists(const httplib::Request& req, httplib::Response& res); std::pair parse_label_tag(const std::string& label_tag) const; void add_file_metadata(const std::string &file_path, nlohmann::json &metadata) const; diff --git a/test.sh b/test.sh index 940b876..6aa0a45 100755 --- a/test.sh +++ b/test.sh @@ -53,11 +53,16 @@ BASE_TAG="autotest" # upload this script as an object echo "uploading ${SCRIPT_DIR}/${SCRIPT_NAME} to ${BASE_TAG}:test1" -OBJECT_HASH=$(curl -X PUT \ +UPLOAD_RESPONSE=$(curl -X PUT \ -H "Authorization: Bearer ${WRITE_TOKEN}" \ -F "file=@${SCRIPT_DIR}/${SCRIPT_NAME}" \ -F 'metadata={"labeltag":"${BASE_TAG}:test1","description":"Example file","tags":["test","example"],"custom_field":"custom value"}' \ - "http://localhost:8123/upload" | jq -r '.hash') + "http://localhost:8123/upload") + +echo "upload response: ${UPLOAD_RESPONSE}" + +OBJECT_HASH=$(echo ${UPLOAD_RESPONSE} | jq -r '.hash') + #OBJECT_HASH=$(curl -s "${BASE_URL}/upload?token=${WRITE_TOKEN}&labeltag=${BASE_TAG}:test1&filename=${SCRIPT_NAME}" -T ${SCRIPT_DIR}/${SCRIPT_NAME} | jq -r '.hash') echo "received hash ${OBJECT_HASH}"