test: Add 4 and update 6 files
This commit is contained in:
@@ -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)) {
|
||||
|
Reference in New Issue
Block a user