test: Add 4 and update 6 files
All checks were successful
Build-Test-Publish / build (linux/amd64) (push) Successful in 1m23s
Build-Test-Publish / build (linux/arm64) (push) Successful in 2m21s
Build-Test-Publish / create-manifest (push) Successful in 12s

This commit is contained in:
Your Name
2025-08-10 23:31:41 +12:00
parent 22d4af7ac8
commit baa215e762
10 changed files with 978 additions and 23 deletions

View File

@@ -1,4 +1,5 @@
#include "update_handler.hpp"
#include "validation.hpp"
#include <nlohmann/json.hpp>
#include <drogon/MultiPart.h>
#include <iostream>
@@ -114,6 +115,60 @@ void UpdateHandler::handle_update_object(const drogon::HttpRequestPtr& req, std:
std::string hash = body["hash"].get<std::string>();
nlohmann::json new_metadata = body["metadata"];
// Validate hash format
auto hashValidation = InputValidator::validateHash(hash);
if (!hashValidation.valid) {
resp->setStatusCode(drogon::k400BadRequest);
nlohmann::json response = {{"result", "error"}, {"error", "Invalid hash: " + hashValidation.error}};
resp->setBody(response.dump());
resp->setContentTypeCode(drogon::CT_APPLICATION_JSON);
server_.add_security_headers(resp);
callback(resp);
return;
}
// Validate metadata
auto metadataValidation = InputValidator::validateMetadata(new_metadata);
if (!metadataValidation.valid) {
resp->setStatusCode(drogon::k400BadRequest);
nlohmann::json response = {{"result", "error"}, {"error", "Invalid metadata: " + metadataValidation.error}};
resp->setBody(response.dump());
resp->setContentTypeCode(drogon::CT_APPLICATION_JSON);
server_.add_security_headers(resp);
callback(resp);
return;
}
// If metadata contains labeltags, validate them
if (new_metadata.contains("labeltags") && new_metadata["labeltags"].is_array()) {
std::vector<std::string> labeltags;
for (const auto& lt : new_metadata["labeltags"]) {
if (!lt.is_string()) {
resp->setStatusCode(drogon::k400BadRequest);
nlohmann::json response = {{"result", "error"}, {"error", "Invalid label:tag format in metadata"}};
resp->setBody(response.dump());
resp->setContentTypeCode(drogon::CT_APPLICATION_JSON);
server_.add_security_headers(resp);
callback(resp);
return;
}
labeltags.push_back(lt.get<std::string>());
}
if (!labeltags.empty()) {
auto labeltagsValidation = InputValidator::validateLabelTags(labeltags);
if (!labeltagsValidation.valid) {
resp->setStatusCode(drogon::k400BadRequest);
nlohmann::json response = {{"result", "error"}, {"error", labeltagsValidation.error}};
resp->setBody(response.dump());
resp->setContentTypeCode(drogon::CT_APPLICATION_JSON);
server_.add_security_headers(resp);
callback(resp);
return;
}
}
}
// Get the object entry
dbEntry entry;
if (!server_.db_->get(hash, entry)) {