xref: /aosp_15_r20/external/grpc-grpc/src/cpp/common/alts_context.cc (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker //
2*cc02d7e2SAndroid Build Coastguard Worker //
3*cc02d7e2SAndroid Build Coastguard Worker // Copyright 2019 gRPC authors.
4*cc02d7e2SAndroid Build Coastguard Worker //
5*cc02d7e2SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
6*cc02d7e2SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
7*cc02d7e2SAndroid Build Coastguard Worker // You may obtain a copy of the License at
8*cc02d7e2SAndroid Build Coastguard Worker //
9*cc02d7e2SAndroid Build Coastguard Worker //     http://www.apache.org/licenses/LICENSE-2.0
10*cc02d7e2SAndroid Build Coastguard Worker //
11*cc02d7e2SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
12*cc02d7e2SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
13*cc02d7e2SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*cc02d7e2SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
15*cc02d7e2SAndroid Build Coastguard Worker // limitations under the License.
16*cc02d7e2SAndroid Build Coastguard Worker //
17*cc02d7e2SAndroid Build Coastguard Worker //
18*cc02d7e2SAndroid Build Coastguard Worker 
19*cc02d7e2SAndroid Build Coastguard Worker #include <stddef.h>
20*cc02d7e2SAndroid Build Coastguard Worker 
21*cc02d7e2SAndroid Build Coastguard Worker #include <map>
22*cc02d7e2SAndroid Build Coastguard Worker #include <string>
23*cc02d7e2SAndroid Build Coastguard Worker 
24*cc02d7e2SAndroid Build Coastguard Worker #include "upb/base/string_view.h"
25*cc02d7e2SAndroid Build Coastguard Worker #include "upb/message/map.h"
26*cc02d7e2SAndroid Build Coastguard Worker 
27*cc02d7e2SAndroid Build Coastguard Worker #include <grpc/grpc_security_constants.h>
28*cc02d7e2SAndroid Build Coastguard Worker #include <grpcpp/security/alts_context.h>
29*cc02d7e2SAndroid Build Coastguard Worker 
30*cc02d7e2SAndroid Build Coastguard Worker #include "src/proto/grpc/gcp/altscontext.upb.h"
31*cc02d7e2SAndroid Build Coastguard Worker #include "src/proto/grpc/gcp/transport_security_common.upb.h"
32*cc02d7e2SAndroid Build Coastguard Worker 
33*cc02d7e2SAndroid Build Coastguard Worker namespace grpc {
34*cc02d7e2SAndroid Build Coastguard Worker namespace experimental {
35*cc02d7e2SAndroid Build Coastguard Worker 
36*cc02d7e2SAndroid Build Coastguard Worker // A upb-generated grpc_gcp_AltsContext is passed in to construct an
37*cc02d7e2SAndroid Build Coastguard Worker // AltsContext. Normal users should use GetAltsContextFromAuthContext to get
38*cc02d7e2SAndroid Build Coastguard Worker // AltsContext, instead of constructing their own.
AltsContext(const grpc_gcp_AltsContext * ctx)39*cc02d7e2SAndroid Build Coastguard Worker AltsContext::AltsContext(const grpc_gcp_AltsContext* ctx) {
40*cc02d7e2SAndroid Build Coastguard Worker   upb_StringView application_protocol =
41*cc02d7e2SAndroid Build Coastguard Worker       grpc_gcp_AltsContext_application_protocol(ctx);
42*cc02d7e2SAndroid Build Coastguard Worker   if (application_protocol.data != nullptr && application_protocol.size > 0) {
43*cc02d7e2SAndroid Build Coastguard Worker     application_protocol_ =
44*cc02d7e2SAndroid Build Coastguard Worker         std::string(application_protocol.data, application_protocol.size);
45*cc02d7e2SAndroid Build Coastguard Worker   }
46*cc02d7e2SAndroid Build Coastguard Worker   upb_StringView record_protocol = grpc_gcp_AltsContext_record_protocol(ctx);
47*cc02d7e2SAndroid Build Coastguard Worker   if (record_protocol.data != nullptr && record_protocol.size > 0) {
48*cc02d7e2SAndroid Build Coastguard Worker     record_protocol_ = std::string(record_protocol.data, record_protocol.size);
49*cc02d7e2SAndroid Build Coastguard Worker   }
50*cc02d7e2SAndroid Build Coastguard Worker   upb_StringView peer_service_account =
51*cc02d7e2SAndroid Build Coastguard Worker       grpc_gcp_AltsContext_peer_service_account(ctx);
52*cc02d7e2SAndroid Build Coastguard Worker   if (peer_service_account.data != nullptr && peer_service_account.size > 0) {
53*cc02d7e2SAndroid Build Coastguard Worker     peer_service_account_ =
54*cc02d7e2SAndroid Build Coastguard Worker         std::string(peer_service_account.data, peer_service_account.size);
55*cc02d7e2SAndroid Build Coastguard Worker   }
56*cc02d7e2SAndroid Build Coastguard Worker   upb_StringView local_service_account =
57*cc02d7e2SAndroid Build Coastguard Worker       grpc_gcp_AltsContext_local_service_account(ctx);
58*cc02d7e2SAndroid Build Coastguard Worker   if (local_service_account.data != nullptr && local_service_account.size > 0) {
59*cc02d7e2SAndroid Build Coastguard Worker     local_service_account_ =
60*cc02d7e2SAndroid Build Coastguard Worker         std::string(local_service_account.data, local_service_account.size);
61*cc02d7e2SAndroid Build Coastguard Worker   }
62*cc02d7e2SAndroid Build Coastguard Worker   const grpc_gcp_RpcProtocolVersions* versions =
63*cc02d7e2SAndroid Build Coastguard Worker       grpc_gcp_AltsContext_peer_rpc_versions(ctx);
64*cc02d7e2SAndroid Build Coastguard Worker   if (versions != nullptr) {
65*cc02d7e2SAndroid Build Coastguard Worker     const grpc_gcp_RpcProtocolVersions_Version* max_version =
66*cc02d7e2SAndroid Build Coastguard Worker         grpc_gcp_RpcProtocolVersions_max_rpc_version(versions);
67*cc02d7e2SAndroid Build Coastguard Worker     if (max_version != nullptr) {
68*cc02d7e2SAndroid Build Coastguard Worker       int max_version_major =
69*cc02d7e2SAndroid Build Coastguard Worker           grpc_gcp_RpcProtocolVersions_Version_major(max_version);
70*cc02d7e2SAndroid Build Coastguard Worker       int max_version_minor =
71*cc02d7e2SAndroid Build Coastguard Worker           grpc_gcp_RpcProtocolVersions_Version_minor(max_version);
72*cc02d7e2SAndroid Build Coastguard Worker       peer_rpc_versions_.max_rpc_version.major_version = max_version_major;
73*cc02d7e2SAndroid Build Coastguard Worker       peer_rpc_versions_.max_rpc_version.minor_version = max_version_minor;
74*cc02d7e2SAndroid Build Coastguard Worker     }
75*cc02d7e2SAndroid Build Coastguard Worker     const grpc_gcp_RpcProtocolVersions_Version* min_version =
76*cc02d7e2SAndroid Build Coastguard Worker         grpc_gcp_RpcProtocolVersions_min_rpc_version(versions);
77*cc02d7e2SAndroid Build Coastguard Worker     if (min_version != nullptr) {
78*cc02d7e2SAndroid Build Coastguard Worker       int min_version_major =
79*cc02d7e2SAndroid Build Coastguard Worker           grpc_gcp_RpcProtocolVersions_Version_major(min_version);
80*cc02d7e2SAndroid Build Coastguard Worker       int min_version_minor =
81*cc02d7e2SAndroid Build Coastguard Worker           grpc_gcp_RpcProtocolVersions_Version_minor(min_version);
82*cc02d7e2SAndroid Build Coastguard Worker       peer_rpc_versions_.min_rpc_version.major_version = min_version_major;
83*cc02d7e2SAndroid Build Coastguard Worker       peer_rpc_versions_.min_rpc_version.minor_version = min_version_minor;
84*cc02d7e2SAndroid Build Coastguard Worker     }
85*cc02d7e2SAndroid Build Coastguard Worker   }
86*cc02d7e2SAndroid Build Coastguard Worker   if (grpc_gcp_AltsContext_security_level(ctx) >= GRPC_SECURITY_MIN ||
87*cc02d7e2SAndroid Build Coastguard Worker       grpc_gcp_AltsContext_security_level(ctx) <= GRPC_SECURITY_MAX) {
88*cc02d7e2SAndroid Build Coastguard Worker     security_level_ = static_cast<grpc_security_level>(
89*cc02d7e2SAndroid Build Coastguard Worker         grpc_gcp_AltsContext_security_level(ctx));
90*cc02d7e2SAndroid Build Coastguard Worker   }
91*cc02d7e2SAndroid Build Coastguard Worker   if (grpc_gcp_AltsContext_peer_attributes_size(ctx) != 0) {
92*cc02d7e2SAndroid Build Coastguard Worker     size_t iter = kUpb_Map_Begin;
93*cc02d7e2SAndroid Build Coastguard Worker     const grpc_gcp_AltsContext_PeerAttributesEntry* peer_attributes_entry =
94*cc02d7e2SAndroid Build Coastguard Worker         grpc_gcp_AltsContext_peer_attributes_next(ctx, &iter);
95*cc02d7e2SAndroid Build Coastguard Worker     while (peer_attributes_entry != nullptr) {
96*cc02d7e2SAndroid Build Coastguard Worker       upb_StringView key =
97*cc02d7e2SAndroid Build Coastguard Worker           grpc_gcp_AltsContext_PeerAttributesEntry_key(peer_attributes_entry);
98*cc02d7e2SAndroid Build Coastguard Worker       upb_StringView val =
99*cc02d7e2SAndroid Build Coastguard Worker           grpc_gcp_AltsContext_PeerAttributesEntry_value(peer_attributes_entry);
100*cc02d7e2SAndroid Build Coastguard Worker       peer_attributes_map_[std::string(key.data, key.size)] =
101*cc02d7e2SAndroid Build Coastguard Worker           std::string(val.data, val.size);
102*cc02d7e2SAndroid Build Coastguard Worker       peer_attributes_entry =
103*cc02d7e2SAndroid Build Coastguard Worker           grpc_gcp_AltsContext_peer_attributes_next(ctx, &iter);
104*cc02d7e2SAndroid Build Coastguard Worker     }
105*cc02d7e2SAndroid Build Coastguard Worker   }
106*cc02d7e2SAndroid Build Coastguard Worker }
107*cc02d7e2SAndroid Build Coastguard Worker 
application_protocol() const108*cc02d7e2SAndroid Build Coastguard Worker std::string AltsContext::application_protocol() const {
109*cc02d7e2SAndroid Build Coastguard Worker   return application_protocol_;
110*cc02d7e2SAndroid Build Coastguard Worker }
111*cc02d7e2SAndroid Build Coastguard Worker 
record_protocol() const112*cc02d7e2SAndroid Build Coastguard Worker std::string AltsContext::record_protocol() const { return record_protocol_; }
113*cc02d7e2SAndroid Build Coastguard Worker 
peer_service_account() const114*cc02d7e2SAndroid Build Coastguard Worker std::string AltsContext::peer_service_account() const {
115*cc02d7e2SAndroid Build Coastguard Worker   return peer_service_account_;
116*cc02d7e2SAndroid Build Coastguard Worker }
117*cc02d7e2SAndroid Build Coastguard Worker 
local_service_account() const118*cc02d7e2SAndroid Build Coastguard Worker std::string AltsContext::local_service_account() const {
119*cc02d7e2SAndroid Build Coastguard Worker   return local_service_account_;
120*cc02d7e2SAndroid Build Coastguard Worker }
121*cc02d7e2SAndroid Build Coastguard Worker 
security_level() const122*cc02d7e2SAndroid Build Coastguard Worker grpc_security_level AltsContext::security_level() const {
123*cc02d7e2SAndroid Build Coastguard Worker   return security_level_;
124*cc02d7e2SAndroid Build Coastguard Worker }
125*cc02d7e2SAndroid Build Coastguard Worker 
peer_rpc_versions() const126*cc02d7e2SAndroid Build Coastguard Worker AltsContext::RpcProtocolVersions AltsContext::peer_rpc_versions() const {
127*cc02d7e2SAndroid Build Coastguard Worker   return peer_rpc_versions_;
128*cc02d7e2SAndroid Build Coastguard Worker }
129*cc02d7e2SAndroid Build Coastguard Worker 
peer_attributes() const130*cc02d7e2SAndroid Build Coastguard Worker const std::map<std::string, std::string>& AltsContext::peer_attributes() const {
131*cc02d7e2SAndroid Build Coastguard Worker   return peer_attributes_map_;
132*cc02d7e2SAndroid Build Coastguard Worker }
133*cc02d7e2SAndroid Build Coastguard Worker 
134*cc02d7e2SAndroid Build Coastguard Worker }  // namespace experimental
135*cc02d7e2SAndroid Build Coastguard Worker }  // namespace grpc
136