12
12
#include " common/config/version_converter.h"
13
13
#include " config/config.pb.h"
14
14
#include " envoy/common/exception.h"
15
+ // #include "envoy/grpc/status.h"
15
16
#include " envoy/service/auth/v2/external_auth.grpc.pb.h"
16
17
#include " envoy/service/auth/v3/external_auth.grpc.pb.h"
17
18
#include " src/common/http/http.h"
22
23
namespace authservice {
23
24
namespace service {
24
25
26
+ ::grpc::Status convertGrpcStatus (const google::rpc::Code status);
27
+
25
28
template <class RequestType , class ResponseType >
26
29
::grpc::Status Check (
27
30
const RequestType &request, ResponseType &response,
@@ -59,14 +62,6 @@ ::grpc::Status Check(
59
62
return ::grpc::Status::OK;
60
63
}
61
64
62
- // TODO(incfly): Clean up trigger rule after checking the current Istio
63
- // ExtAuthz API is sufficient.
64
- const auto default_response_code =
65
- allow_unmatched_requests
66
- ? grpc::Status::OK
67
- : grpc::Status (grpc::StatusCode::PERMISSION_DENIED,
68
- " permission denied" );
69
-
70
65
// Find a configured processing chain.
71
66
for (auto &chain : chains) {
72
67
if (chain->Matches (&request_v3)) {
@@ -80,7 +75,6 @@ ::grpc::Status Check(
80
75
// Create a new instance of a processor.
81
76
auto processor = chain->New ();
82
77
auto status = processor->Process (&request_v3, &response_v3, ioc, yield);
83
-
84
78
// response v2/v3 conversion layer
85
79
if constexpr (std::is_same_v<
86
80
ResponseType,
@@ -97,42 +91,44 @@ ::grpc::Status Check(
97
91
::envoy::service::auth::v3::CheckResponse>) {
98
92
response = response_v3;
99
93
}
100
-
101
- // See src/filters/filter.h:filter::Process for a description of how
102
- // status codes should be handled
103
- switch (status) {
104
- case google::rpc::Code::OK: // The request was successful
105
- case google::rpc::Code::UNAUTHENTICATED: // A filter indicated the
106
- // request had no
107
- // authentication but was
108
- // processed correctly.
109
- case google::rpc::Code::PERMISSION_DENIED: // A filter indicated
110
- // insufficient permissions
111
- // for the authenticated
112
- // requester but was processed
113
- // correctly.
114
- return ::grpc::Status::OK;
115
- case google::rpc::Code::INVALID_ARGUMENT: // The request was not well
116
- // formed. Indicate a
117
- // processing error to the
118
- // caller.
119
- return ::grpc::Status (::grpc::StatusCode::INVALID_ARGUMENT,
120
- " invalid request" );
121
- default : // All other errors are treated as internal processing
122
- // failures.
123
- return ::grpc::Status (::grpc::StatusCode::INTERNAL,
124
- " internal error" );
125
- }
94
+ return convertGrpcStatus (status);
126
95
}
127
96
}
97
+ // No matching filter chain found.
98
+
99
+ // TODO(incfly): Clean up trigger rule after checking the current Istio
100
+ // ExtAuthz API is sufficient.
101
+ auto default_response_code =
102
+ grpc::Status (grpc::StatusCode::PERMISSION_DENIED, " permission denied" );
103
+ google::rpc::Code code = google::rpc::Code::PERMISSION_DENIED;
104
+ if (allow_unmatched_requests) {
105
+ default_response_code = grpc::Status::OK;
106
+ code = google::rpc::Code::OK;
107
+ }
108
+ envoy::service::auth::v2::CheckResponse response_v2;
109
+ envoy::service::auth::v3::CheckResponse response_v3;
110
+ response_v2.mutable_status ()->set_code (code);
111
+ response_v3.mutable_status ()->set_code (code);
112
+ if constexpr (std::is_same_v<ResponseType,
113
+ ::envoy::service::auth::v2::CheckResponse>) {
114
+ response = response_v2;
115
+ } else if (std::is_same_v<ResponseType,
116
+ ::envoy::service::auth::v3::CheckResponse>) {
117
+ response = response_v3;
118
+ }
119
+
120
+ if constexpr (std::is_same_v<ResponseType,
121
+ ::envoy::service::auth::v3::CheckResponse>) {
122
+ response = response_v3;
123
+ }
128
124
129
- // No matching filter chain found. Allow request to continue.
130
125
spdlog::debug (
131
- " {}: no matching filter chain for request to {}://{}{}, respond with: "
126
+ " {}: no matching filter chain for request to "
127
+ " {}://{}{}, allow_unmatched_requests {}, respond with: "
132
128
" {}" ,
133
129
__func__, request.attributes ().request ().http ().scheme (),
134
130
request.attributes ().request ().http ().host (),
135
- request.attributes ().request ().http ().path (),
131
+ request.attributes ().request ().http ().path (), allow_unmatched_requests,
136
132
default_response_code.error_code ());
137
133
return default_response_code;
138
134
} catch (const std::exception &exception ) {
0 commit comments