32class DROGON_EXPORT RestfulController : trantor::NonCopyable
35 void enableMasquerading(
const std::vector<std::string> &pMasqueradingVector)
38 masqueradingVector_ = pMasqueradingVector;
39 for (
size_t i = 0; i < masqueradingVector_.size(); ++i)
41 masqueradingMap_.insert(
42 std::pair<std::string, size_t>{masqueradingVector_[i], i});
46 void disableMasquerading()
48 masquerading_ =
false;
49 masqueradingVector_ = columnsVector_;
50 for (
size_t i = 0; i < masqueradingVector_.size(); ++i)
52 masqueradingMap_.insert(
53 std::pair<std::string, size_t>{masqueradingVector_[i], i});
57 void registerAJsonValidator(
58 const std::string &fieldName,
59 const std::function<
bool(
const Json::Value &, std::string &)>
62 validators_.emplace_back(fieldName, validator);
65 void registerAJsonValidator(
66 const std::string &fieldName,
67 std::function<
bool(
const Json::Value &, std::string &)> &&validator)
69 validators_.emplace_back(fieldName, std::move(validator));
95 RestfulController(
const std::vector<std::string> &columnsVector)
96 : columnsVector_(columnsVector)
100 std::vector<std::string> fieldsSelector(
const std::set<std::string> &fields)
102 std::vector<std::string> ret;
103 for (
auto &field : masqueradingVector_)
105 if (!field.empty() && fields.find(field) != fields.end())
107 ret.emplace_back(field);
111 ret.emplace_back(std::string{});
117 template <
typename T>
118 Json::Value makeJson(
const HttpRequestPtr &req,
const T &obj)
120 auto &queryParams = req->parameters();
121 auto iter = queryParams.find(
"fields");
124 if (iter != queryParams.end())
126 auto fields = utils::splitStringToSet(iter->second,
",");
127 return obj.toMasqueradedJson(fieldsSelector(fields));
131 return obj.toMasqueradedJson(masqueradingVector_);
136 if (iter != queryParams.end())
138 auto fields = utils::splitString(iter->second,
",");
139 return obj.toMasqueradedJson(fields);
148 bool doCustomValidations(
const Json::Value &pJson, std::string &err)
150 for (
auto &validator : validators_)
152 if (pJson.isMember(validator.first))
154 if (!validator.second(pJson[validator.first], err))
163 bool isMasquerading()
const
165 return masquerading_;
168 const std::vector<std::string> &masqueradingVector()
const
170 return masqueradingVector_;
174 bool masquerading_{
true};
175 std::vector<std::string> masqueradingVector_;
177 std::pair<std::string,
178 std::function<bool(
const Json::Value &, std::string &)>>>
180 std::unordered_map<std::string, size_t> masqueradingMap_;
181 const std::vector<std::string> columnsVector_;