Switch to drogon
All checks were successful
Build-Test-Publish / build (linux/amd64) (push) Successful in 56s
Build-Test-Publish / build (linux/arm64) (push) Successful in 1m40s
Build-Test-Publish / create-manifest (push) Successful in 18s

This commit is contained in:
Your Name
2025-06-15 16:19:23 +12:00
parent 69de93c793
commit eedd39a533
10 changed files with 538 additions and 10738 deletions

172
src/HttpController.cpp Normal file
View File

@@ -0,0 +1,172 @@
#include "HttpController.hpp"
#include "server.hpp"
#include "put_handler.hpp"
#include "update_handler.hpp"
#include "welcome_page.hpp"
#include <nlohmann/json.hpp>
namespace simple_object_storage {
void HttpController::getIndex(const drogon::HttpRequestPtr &req,
std::function<void(const drogon::HttpResponsePtr &)> &&callback) {
auto resp = drogon::HttpResponse::newHttpResponse();
resp->setBody(welcome_page());
resp->setContentTypeCode(drogon::CT_TEXT_HTML);
callback(resp);
}
void HttpController::getHash(const drogon::HttpRequestPtr &req,
std::function<void(const drogon::HttpResponsePtr &)> &&callback,
const std::string &key) {
auto server = Server::getInstance();
if (server) {
server->handle_get_hash(req, std::move(callback), key);
} else {
auto resp = drogon::HttpResponse::newHttpResponse();
resp->setStatusCode(drogon::k500InternalServerError);
callback(resp);
}
}
void HttpController::getVersion(const drogon::HttpRequestPtr &req,
std::function<void(const drogon::HttpResponsePtr &)> &&callback,
const std::string &key) {
auto server = Server::getInstance();
if (server) {
server->handle_get_version(req, std::move(callback));
} else {
auto resp = drogon::HttpResponse::newHttpResponse();
resp->setStatusCode(drogon::k500InternalServerError);
callback(resp);
}
}
void HttpController::checkExists(const drogon::HttpRequestPtr &req,
std::function<void(const drogon::HttpResponsePtr &)> &&callback,
const std::string &key) {
auto server = Server::getInstance();
if (server) {
server->handle_exists(req, std::move(callback), key);
} else {
auto resp = drogon::HttpResponse::newHttpResponse();
resp->setStatusCode(drogon::k500InternalServerError);
callback(resp);
}
}
void HttpController::getDirectory(const drogon::HttpRequestPtr &req,
std::function<void(const drogon::HttpResponsePtr &)> &&callback) {
auto server = Server::getInstance();
if (server) {
server->handle_get_directory(req, std::move(callback));
} else {
auto resp = drogon::HttpResponse::newHttpResponse();
resp->setStatusCode(drogon::k500InternalServerError);
callback(resp);
}
}
void HttpController::uploadObject(const drogon::HttpRequestPtr &req,
std::function<void(const drogon::HttpResponsePtr &)> &&callback) {
auto server = Server::getInstance();
if (server && server->put_handler_) {
server->put_handler_->handle_put_object(req, std::move(callback));
} else {
auto resp = drogon::HttpResponse::newHttpResponse();
resp->setStatusCode(drogon::k500InternalServerError);
callback(resp);
}
}
void HttpController::updateObject(const drogon::HttpRequestPtr &req,
std::function<void(const drogon::HttpResponsePtr &)> &&callback) {
auto server = Server::getInstance();
if (server && server->update_handler_) {
server->update_handler_->handle_update_object(req, std::move(callback));
} else {
auto resp = drogon::HttpResponse::newHttpResponse();
resp->setStatusCode(drogon::k500InternalServerError);
callback(resp);
}
}
void HttpController::getMetadata(const drogon::HttpRequestPtr &req,
std::function<void(const drogon::HttpResponsePtr &)> &&callback,
const std::string &key) {
auto server = Server::getInstance();
if (server) {
server->handle_get_metadata(req, std::move(callback), key);
} else {
auto resp = drogon::HttpResponse::newHttpResponse();
resp->setStatusCode(drogon::k500InternalServerError);
callback(resp);
}
}
void HttpController::deleteObject(const drogon::HttpRequestPtr &req,
std::function<void(const drogon::HttpResponsePtr &)> &&callback) {
auto server = Server::getInstance();
if (server) {
server->handle_delete_object(req, std::move(callback));
} else {
auto resp = drogon::HttpResponse::newHttpResponse();
resp->setStatusCode(drogon::k500InternalServerError);
callback(resp);
}
}
void HttpController::getStatus(const drogon::HttpRequestPtr &req,
std::function<void(const drogon::HttpResponsePtr &)> &&callback) {
auto resp = drogon::HttpResponse::newHttpResponse();
nlohmann::json response = {{"result", "success"}, {"status", "ok"}};
resp->setBody(response.dump());
resp->setContentTypeCode(drogon::CT_APPLICATION_JSON);
callback(resp);
}
void HttpController::getObject(const drogon::HttpRequestPtr &req,
std::function<void(const drogon::HttpResponsePtr &)> &&callback,
const std::string &key) {
auto server = Server::getInstance();
if (server) {
server->handle_get_object(req, std::move(callback), key);
} else {
auto resp = drogon::HttpResponse::newHttpResponse();
resp->setStatusCode(drogon::k500InternalServerError);
callback(resp);
}
}
void HttpController::getRoot(const drogon::HttpRequestPtr &req,
std::function<void(const drogon::HttpResponsePtr &)> &&callback) {
auto resp = drogon::HttpResponse::newHttpResponse();
resp->setBody(welcome_page());
resp->setContentTypeCode(drogon::CT_TEXT_HTML);
callback(resp);
}
void HttpController::getAny(const drogon::HttpRequestPtr &req,
std::function<void(const drogon::HttpResponsePtr &)> &&callback,
const std::string &path) {
auto server = Server::getInstance();
if (server) {
server->handle_get_object(req, std::move(callback), path);
} else {
auto resp = drogon::HttpResponse::newHttpResponse();
resp->setStatusCode(drogon::k500InternalServerError);
callback(resp);
}
}
void HttpController::putNotFound(const drogon::HttpRequestPtr &req,
std::function<void(const drogon::HttpResponsePtr &)> &&callback,
const std::string &path) {
auto resp = drogon::HttpResponse::newHttpResponse();
resp->setStatusCode(drogon::k404NotFound);
nlohmann::json response = {{"result", "error"}, {"error", "Not found - put requests must be to /upload"}};
resp->setBody(response.dump());
resp->setContentTypeCode(drogon::CT_APPLICATION_JSON);
callback(resp);
}
} // namespace simple_object_storage