4#include <drogon/HttpResponse.h>
5#include <drogon/utils/Utilities.h>
7#include <boost/filesystem/path.hpp>
8#include <nlohmann/json.hpp>
10#include "cavoke_base_exception.h"
15struct adl_serializer<boost::filesystem::path> {
16 static void to_json(json &j,
const boost::filesystem::path &value) {
20 static void from_json(
const json &j, boost::filesystem::path &value) {
21 value = j.get<std::string>();
25inline nlohmann::json to_nlohmann(
const Json::Value &obj) {
26 static Json::StreamWriterBuilder builder;
27 return json::parse(Json::writeString(builder, obj),
nullptr,
true,
true);
31namespace cavoke::server::controllers {
40inline drogon::HttpResponsePtr newNlohmannJsonResponse(
41 const nlohmann::json &obj) {
42 auto res = drogon::HttpResponse::newHttpResponse();
43 res->setContentTypeCode(drogon::CT_APPLICATION_JSON);
44 res->setBody(obj.dump());
49inline drogon::HttpResponsePtr newStatusCodeResponse(
50 const drogon::HttpStatusCode &status_code) {
51 auto res = drogon::HttpResponse::newHttpResponse();
52 res->setStatusCode(status_code);
56inline drogon::HttpResponsePtr newCavokeErrorResponse(
57 const cavoke_base_exception &err,
58 const drogon::HttpStatusCode &status_code = drogon::k200OK) {
59 auto resp = newNlohmannJsonResponse(err);
60 resp->setStatusCode(status_code);
64#define CALLBACK_STATUS_CODE(code) \
65 callback(newStatusCodeResponse(::drogon::code))
68namespace cavoke::server {
70inline std::string hide_password(std::string str) {
71 return std::regex_replace(str, std::regex(R
"(\b[^\s]*pass[^\s]*\b)"),
76#define MAPPER_TYPE(T) ::drogon::orm::Mapper<T>
78#define MAPPER_WITH_CLIENT_FOR(T, dbclient) MAPPER_TYPE(T)(dbclient)
80#define MAPPER_FOR(T) MAPPER_WITH_CLIENT_FOR(T, drogon::app().getDbClient())