66 lines
1.6 KiB
C++
66 lines
1.6 KiB
C++
#include "common/Http.h"
|
|
|
|
#include <drogon/HttpRequest.h>
|
|
|
|
#include <sstream>
|
|
|
|
namespace visione::http
|
|
{
|
|
drogon::HttpResponsePtr json(Json::Value body, drogon::HttpStatusCode status)
|
|
{
|
|
auto response = drogon::HttpResponse::newHttpJsonResponse(std::move(body));
|
|
response->setStatusCode(status);
|
|
return response;
|
|
}
|
|
|
|
drogon::HttpResponsePtr error(const std::string &code,
|
|
drogon::HttpStatusCode status,
|
|
const std::string &message)
|
|
{
|
|
Json::Value body;
|
|
body["error"] = code;
|
|
if (!message.empty())
|
|
{
|
|
body["message"] = message;
|
|
}
|
|
return json(std::move(body), status);
|
|
}
|
|
|
|
drogon::HttpResponsePtr redirect(const std::string &url,
|
|
drogon::HttpStatusCode status)
|
|
{
|
|
auto response = drogon::HttpResponse::newRedirectionResponse(url);
|
|
response->setStatusCode(status);
|
|
return response;
|
|
}
|
|
|
|
Json::Value requireJson(const drogon::HttpRequestPtr &request)
|
|
{
|
|
const auto &body = request->getJsonObject();
|
|
if (!body)
|
|
{
|
|
return Json::Value(Json::nullValue);
|
|
}
|
|
return *body;
|
|
}
|
|
|
|
Json::Value parseJsonBody(const std::string &body)
|
|
{
|
|
if (body.empty())
|
|
{
|
|
return Json::Value(Json::nullValue);
|
|
}
|
|
|
|
Json::CharReaderBuilder builder;
|
|
builder["collectComments"] = false;
|
|
std::string errors;
|
|
Json::Value parsed;
|
|
std::istringstream stream(body);
|
|
if (!Json::parseFromStream(builder, stream, &parsed, &errors))
|
|
{
|
|
return Json::Value(Json::nullValue);
|
|
}
|
|
return parsed;
|
|
}
|
|
} // namespace visione::http
|