This commit is contained in:
Your Name
2025-05-25 11:11:44 +12:00
parent 89bdd04ff8
commit 3db0208fe9
4 changed files with 7 additions and 95 deletions

View File

@@ -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"`

View File

@@ -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<std::string, std::string> 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<std::string, std::string> 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<std::string, std::string> 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();

View File

@@ -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<std::string, std::string> parse_label_tag(const std::string& label_tag) const;
void add_file_metadata(const std::string &file_path, nlohmann::json &metadata) const;

View File

@@ -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}"