userver
C++ Async Framework
Loading...
Searching...
No Matches
middleware.cpp
1
#
include
<
grpc
-
protovalidate
/
server
/
middleware
.
hpp
>
2
3
#
include
<
utility
>
4
5
#
include
<
userver
/
grpc
-
protovalidate
/
validate
.
hpp
>
6
#
include
<
userver
/
logging
/
log
.
hpp
>
7
#
include
<
userver
/
ugrpc
/
client
/
exceptions
.
hpp
>
8
#
include
<
userver
/
utils
/
assert
.
hpp
>
9
10
USERVER_NAMESPACE_BEGIN
11
12
namespace
grpc_protovalidate::
server
{
13
14
namespace
{
15
16
void
LogError(
const
ValidationError& error) {
17
switch
(error.GetType()) {
18
case
ValidationError::Type::kInternal:
19
LOG_ERROR
() << error;
20
return
;
21
case
ValidationError::Type::kRule:
22
LOG_WARNING
() << error;
23
return
;
24
}
25
UINVARIANT
(
false
,
"Unexpected error type"
);
26
}
27
28
}
// namespace
29
30
const
ValidationSettings
&
Settings
::
Get
(
std
::
string_view
method_name
)
const
{
31
auto
it
=
per_method
.
find
(
method_name
);
32
return
it
!=
per_method
.
end
() ?
it
->
second
:
global
;
33
}
34
35
Middleware
::
Middleware
(
const
Settings
&
settings
)
36
:
settings_
(
settings
)
37
{}
38
39
Middleware
::~
Middleware
() =
default
;
40
41
void
Middleware
::
PostRecvMessage
(
ugrpc
::
server
::
MiddlewareCallContext
&
context
,
google
::
protobuf
::
Message
&
request
)
42
const
{
43
const
ValidationSettings
&
settings
=
settings_
.
Get
(
context
.
GetCallName
());
44
const
ValidationResult
result
=
ValidateMessage
(
request
, {.
fail_fast
=
settings
.
fail_fast
});
45
if
(
result
.
IsSuccess
()) {
46
return
;
47
}
48
LogError
(
result
.
GetError
());
49
context
.
SetError
(
result
.
GetError
().
GetGrpcStatus
(
settings
.
send_violations
));
50
}
51
52
void
Middleware
::
PreSendMessage
(
ugrpc
::
server
::
MiddlewareCallContext
&
context
,
google
::
protobuf
::
Message
&
response
)
53
const
{
54
const
ValidationSettings
&
settings
=
settings_
.
Get
(
context
.
GetCallName
());
55
if
(!
settings
.
validate_responses
) {
56
return
;
57
}
58
const
ValidationResult
result
=
ValidateMessage
(
response
, {.
fail_fast
=
settings
.
fail_fast
});
59
if
(
result
.
IsSuccess
()) {
60
return
;
61
}
62
LogError
(
result
.
GetError
());
63
context
.
SetError
(
result
.
GetError
().
GetGrpcStatus
(
settings
.
send_violations
,
grpc
::
StatusCode
::
DATA_LOSS
));
64
}
65
66
}
// namespace grpc_protovalidate::server
67
68
USERVER_NAMESPACE_END
src
grpc-protovalidate
server
middleware.cpp
Generated on Tue Jan 27 2026 16:42:39 for userver by
Doxygen
1.13.2