userver: /home/antonyzhilin/arcadia/taxi/uservices/userver/libraries/grpc-protovalidate/src/grpc-protovalidate/server/middleware.cpp Source File
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
middleware.cpp
1#include <grpc-protovalidate/server/middleware.hpp>
2
3#include <fmt/core.h>
4#include <google/protobuf/arena.h>
5
6#include <userver/logging/log.hpp>
7#include <userver/ugrpc/status_utils.hpp>
8
9#include <grpc-protovalidate/impl/utils.hpp>
10
11USERVER_NAMESPACE_BEGIN
12
13namespace grpc_protovalidate::server {
14
17 return it != per_method.end() ? it->second : global;
18}
19
22
23Middleware::~Middleware() = default;
24
26 const {
27 const auto& settings = settings_.Get(context.GetCallName());
29
32
33 if (!result.ok()) {
34 // Usually that means some CEL expression in a proto file can not be parsed or evaluated.
37 fmt::format(
38 "Validator internal error (check request constraints in the proto file): {}", result.status().ToString()
39 )});
40 } else if (result.value().violations_size() > 0) {
41 for (const auto& violation : result.value().violations()) {
42 LOG_ERROR() << "Request constraint violation: " << violation.proto();
43 }
44
48 gstatus.set_message(fmt::format("Request violates constraints (count={})", result.value().violations_size())
49 );
52 } else {
55 fmt::format("Request violates constraints (count={})", result.value().violations_size())});
56 }
57 } else {
58 LOG_DEBUG() << "Request is valid";
59 }
60}
61
62} // namespace grpc_protovalidate::server
63
64USERVER_NAMESPACE_END