6 #ifndef IROHA_SHARED_MODEL_QUERY_VALIDATOR_HPP 7 #define IROHA_SHARED_MODEL_QUERY_VALIDATOR_HPP 9 #include <boost/variant/apply_visitor.hpp> 10 #include <boost/variant/static_visitor.hpp> 31 namespace validation {
37 template <
typename FieldVal
idator>
39 :
public boost::static_visitor<ReasonsGroupType> {
41 : validator_(std::move(validator)) {}
51 reason.first =
"GetAccount";
60 reason.first =
"GetBlock";
69 reason.first =
"GetSignatories";
79 reason.first =
"GetAccountTransactions";
90 reason.first =
"GetAccountAssetTransactions";
101 reason.first =
"GetTransactions";
104 if (hashes.size() == 0) {
105 reason.second.push_back(
"tx_hashes cannot be empty");
108 for (
const auto &h : hashes) {
118 reason.first =
"GetAccountAssets";
130 reason.first =
"GetAccountDetail";
132 using iroha::operator|;
135 qry.
key() | [&reason,
this](
const auto &key) {
138 qry.
writer() | [&reason,
this](
const auto &writer) {
141 qry.
paginationMeta() | [&reason,
this](
const auto &pagination_meta) {
151 reason.first =
"GetRoles";
159 reason.first =
"GetRolePermissions";
168 reason.first =
"GetAssetInfo";
178 reason.first =
"GetPendingTransactions";
189 reason.first =
"GetPeers";
203 template <
typename FieldVal
idator,
typename QueryFieldVal
idator>
206 const QueryFieldValidator &query_field_validator)
207 : field_validator_(field_validator),
208 query_field_validator_(query_field_validator) {}
213 QueryFieldValidator{config}) {}
222 std::string qry_reason_name =
"Query";
225 field_validator_.validateCreatorAccountId(qry_reason,
227 field_validator_.validateCreatedTime(qry_reason, qry.
createdTime());
228 field_validator_.validateCounter(qry_reason, qry.
queryCounter());
230 if (not qry_reason.second.empty()) {
235 boost::apply_visitor(query_field_validator_, qry.
get());
236 if (not field_reason.second.empty()) {
237 answer.
addReason(std::move(field_reason));
251 #endif // IROHA_SHARED_MODEL_QUERY_VALIDATOR_HPP
virtual boost::optional< const AccountDetailPaginationMeta & > paginationMeta() const =0
Get the query pagination metadata.
Definition: get_pending_transactions.hpp:21
QueryFieldValidator query_field_validator_
Definition: query_validator.hpp:246
virtual const types::AccountIdType & creatorAccountId() const =0
virtual const TxPaginationMeta & paginationMeta() const =0
Get the query pagination metadata.
ReasonsGroupType operator()(const interface::GetAccount &qry) const
Definition: query_validator.hpp:49
Definition: get_asset_info.hpp:17
virtual const types::AccountIdType & accountId() const =0
virtual types::HeightType height() const =0
void validateAccountId(ReasonsGroupType &reason, const interface::types::AccountIdType &account_id) const
Definition: field_validator.cpp:76
virtual const types::AccountIdType & accountId() const =0
Definition: get_transactions.hpp:14
ReasonsGroupType operator()(const interface::GetPendingTransactions &qry) const
Definition: query_validator.hpp:175
virtual const types::AccountIdType & assetId() const =0
void validateAssetId(ReasonsGroupType &reason, const interface::types::AssetIdType &asset_id) const
Definition: field_validator.cpp:89
ReasonsGroupType operator()(const interface::GetAccountTransactions &qry) const
Definition: query_validator.hpp:76
virtual const types::RoleIdType & roleId() const =0
void addReason(ReasonsGroupType &&reasons)
Definition: answer.hpp:64
ReasonsGroupType operator()(const interface::GetRoles &qry) const
Definition: query_validator.hpp:149
virtual boost::optional< types::AccountIdType > writer() const =0
Answer answer_
Definition: query_validator.hpp:244
Definition: abstract_validator.hpp:16
void validateHeight(ReasonsGroupType &reason, const interface::types::HeightType &height) const
Definition: field_validator.cpp:370
virtual boost::optional< const interface::AssetPaginationMeta & > paginationMeta() const =0
Get the query pagination metadata.
Definition: get_account_asset_transactions.hpp:21
void validateRoleId(ReasonsGroupType &reason, const interface::types::RoleIdType &role_id) const
Definition: field_validator.cpp:139
virtual const types::AccountIdType & accountId() const =0
virtual const TransactionHashesType & transactionHashes() const =0
virtual const QueryVariantType & get() const =0
QueryValidator(std::shared_ptr< ValidatorsConfig > config)
Definition: query_validator.hpp:211
ReasonsGroupType operator()(const interface::GetRolePermissions &qry) const
Definition: query_validator.hpp:156
void validateTxPaginationMeta(ReasonsGroupType &reason, const interface::TxPaginationMeta &tx_pagination_meta) const
Definition: field_validator.cpp:411
ReasonsGroupType operator()(const interface::GetAssetInfo &qry) const
Definition: query_validator.hpp:166
ReasonsGroupType operator()(const interface::GetTransactions &qry) const
Definition: query_validator.hpp:99
virtual const TxPaginationMeta & paginationMeta() const =0
Get the query pagination metadata.
QueryValidatorVisitor(std::shared_ptr< ValidatorsConfig > config)
Definition: query_validator.hpp:46
void validateAssetPaginationMeta(ReasonsGroupType &reason, const interface::AssetPaginationMeta &asset_pagination_meta) const
Definition: field_validator.cpp:421
virtual const types::AssetIdType & assetId() const =0
Definition: get_signatories.hpp:18
virtual types::TimestampType createdTime() const =0
Definition: get_account_transactions.hpp:21
ReasonsGroupType operator()(const interface::GetSignatories &qry) const
Definition: query_validator.hpp:67
Answer validate(const interface::Query &qry) const override
Definition: query_validator.hpp:220
virtual types::CounterType queryCounter() const =0
void validateHash(ReasonsGroupType &reason, const crypto::Hash &hash) const
Definition: field_validator.cpp:381
ReasonsGroupType operator()(const interface::GetPeers &qry) const
Definition: query_validator.hpp:187
Definition: get_roles.hpp:17
Definition: get_peers.hpp:17
ReasonsGroupType operator()(const interface::GetAccountAssetTransactions &qry) const
Definition: query_validator.hpp:87
Definition: get_account_detail.hpp:29
Definition: get_account.hpp:14
virtual const types::AccountIdType & accountId() const =0
virtual const types::AccountIdType & accountId() const =0
Definition: query_validator.hpp:38
virtual const types::AccountIdType & accountId() const =0
void validateAccountDetailKey(ReasonsGroupType &reason, const interface::types::AccountDetailKeyType &key) const
Definition: field_validator.cpp:189
Definition: field_validator.hpp:35
Definition: get_block.hpp:14
virtual boost::optional< types::AccountDetailKeyType > key() const =0
std::vector< ConcreteReasonType > GroupedReasons
Definition: answer.hpp:20
ReasonsGroupType operator()(const interface::GetBlock &qry) const
Definition: query_validator.hpp:58
ReasonsGroupType operator()(const interface::GetAccountAssets &qry) const
Definition: query_validator.hpp:115
Definition: get_role_permissions.hpp:18
ReasonsGroupType operator()(const interface::GetAccountDetail &qry) const
Definition: query_validator.hpp:127
std::pair< ReasonsGroupName, GroupedReasons > ReasonsGroupType
Definition: answer.hpp:22
Definition: command_executor.hpp:12
void validateAccountDetailPaginationMeta(ReasonsGroupType &reason, const interface::AccountDetailPaginationMeta &pagination_meta) const
Definition: field_validator.cpp:431
Definition: query_validator.hpp:204
FieldValidator field_validator_
Definition: query_validator.hpp:245
virtual boost::optional< const TxPaginationMeta & > paginationMeta() const =0
Definition: answer.hpp:28
Definition: get_account_assets.hpp:20