Cavoke  1.1.0
A Platform for creating and hosting multiplayer turn-based board games
Loading...
Searching...
No Matches
utils.h
1#ifndef CAVOKE_UTILS_H
2#define CAVOKE_UTILS_H
3
4#include <drogon/HttpResponse.h>
5#include <drogon/utils/Utilities.h>
6#include <json/json.h>
7#include <boost/filesystem/path.hpp>
8#include <nlohmann/json.hpp>
9#include <regex>
10#include "cavoke_base_exception.h"
11
12namespace nlohmann {
14template <>
15struct adl_serializer<boost::filesystem::path> {
16 static void to_json(json &j, const boost::filesystem::path &value) {
17 j = value.string();
18 }
19
20 static void from_json(const json &j, boost::filesystem::path &value) {
21 value = j.get<std::string>();
22 }
23};
24
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);
28}
29} // namespace nlohmann
30
31namespace cavoke::server::controllers {
32
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());
45 return res;
46}
47
49inline drogon::HttpResponsePtr newStatusCodeResponse(
50 const drogon::HttpStatusCode &status_code) {
51 auto res = drogon::HttpResponse::newHttpResponse();
52 res->setStatusCode(status_code);
53 return res;
54}
55
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);
61 return resp;
62}
63
64#define CALLBACK_STATUS_CODE(code) \
65 callback(newStatusCodeResponse(::drogon::code))
66} // namespace cavoke::server::controllers
67
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)"),
72 R"(<pass hidden>)");
73}
74} // namespace cavoke::server
75
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())
81
82#endif // CAVOKE_UTILS_H