xref: /aosp_15_r20/external/grpc-grpc/spm-cpp-include/grpcpp/security/auth_context.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker //
2*cc02d7e2SAndroid Build Coastguard Worker //
3*cc02d7e2SAndroid Build Coastguard Worker // Copyright 2015 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 #ifndef GRPCPP_SECURITY_AUTH_CONTEXT_H
20*cc02d7e2SAndroid Build Coastguard Worker #define GRPCPP_SECURITY_AUTH_CONTEXT_H
21*cc02d7e2SAndroid Build Coastguard Worker 
22*cc02d7e2SAndroid Build Coastguard Worker #include <iterator>
23*cc02d7e2SAndroid Build Coastguard Worker #include <vector>
24*cc02d7e2SAndroid Build Coastguard Worker 
25*cc02d7e2SAndroid Build Coastguard Worker #include <grpcpp/support/config.h>
26*cc02d7e2SAndroid Build Coastguard Worker #include <grpcpp/support/string_ref.h>
27*cc02d7e2SAndroid Build Coastguard Worker 
28*cc02d7e2SAndroid Build Coastguard Worker struct grpc_auth_context;
29*cc02d7e2SAndroid Build Coastguard Worker struct grpc_auth_property;
30*cc02d7e2SAndroid Build Coastguard Worker struct grpc_auth_property_iterator;
31*cc02d7e2SAndroid Build Coastguard Worker 
32*cc02d7e2SAndroid Build Coastguard Worker namespace grpc {
33*cc02d7e2SAndroid Build Coastguard Worker class SecureAuthContext;
34*cc02d7e2SAndroid Build Coastguard Worker 
35*cc02d7e2SAndroid Build Coastguard Worker typedef std::pair<string_ref, string_ref> AuthProperty;
36*cc02d7e2SAndroid Build Coastguard Worker 
37*cc02d7e2SAndroid Build Coastguard Worker class AuthPropertyIterator {
38*cc02d7e2SAndroid Build Coastguard Worker  public:
39*cc02d7e2SAndroid Build Coastguard Worker   using iterator_category = std::forward_iterator_tag;
40*cc02d7e2SAndroid Build Coastguard Worker   using value_type = const AuthProperty;
41*cc02d7e2SAndroid Build Coastguard Worker   using pointer = void;
42*cc02d7e2SAndroid Build Coastguard Worker   using reference = void;
43*cc02d7e2SAndroid Build Coastguard Worker   using difference_type = std::ptrdiff_t;
44*cc02d7e2SAndroid Build Coastguard Worker 
45*cc02d7e2SAndroid Build Coastguard Worker   ~AuthPropertyIterator();
46*cc02d7e2SAndroid Build Coastguard Worker   AuthPropertyIterator& operator++();
47*cc02d7e2SAndroid Build Coastguard Worker   AuthPropertyIterator operator++(int);
48*cc02d7e2SAndroid Build Coastguard Worker   bool operator==(const AuthPropertyIterator& rhs) const;
49*cc02d7e2SAndroid Build Coastguard Worker   bool operator!=(const AuthPropertyIterator& rhs) const;
50*cc02d7e2SAndroid Build Coastguard Worker   AuthProperty operator*();
51*cc02d7e2SAndroid Build Coastguard Worker 
52*cc02d7e2SAndroid Build Coastguard Worker  protected:
53*cc02d7e2SAndroid Build Coastguard Worker   AuthPropertyIterator();
54*cc02d7e2SAndroid Build Coastguard Worker   AuthPropertyIterator(const grpc_auth_property* property,
55*cc02d7e2SAndroid Build Coastguard Worker                        const grpc_auth_property_iterator* iter);
56*cc02d7e2SAndroid Build Coastguard Worker 
57*cc02d7e2SAndroid Build Coastguard Worker  private:
58*cc02d7e2SAndroid Build Coastguard Worker   friend class SecureAuthContext;
59*cc02d7e2SAndroid Build Coastguard Worker   const grpc_auth_property* property_;
60*cc02d7e2SAndroid Build Coastguard Worker   // The following items form a grpc_auth_property_iterator.
61*cc02d7e2SAndroid Build Coastguard Worker   const grpc_auth_context* ctx_;
62*cc02d7e2SAndroid Build Coastguard Worker   size_t index_;
63*cc02d7e2SAndroid Build Coastguard Worker   const char* name_;
64*cc02d7e2SAndroid Build Coastguard Worker };
65*cc02d7e2SAndroid Build Coastguard Worker 
66*cc02d7e2SAndroid Build Coastguard Worker /// Class encapsulating the Authentication Information.
67*cc02d7e2SAndroid Build Coastguard Worker ///
68*cc02d7e2SAndroid Build Coastguard Worker /// It includes the secure identity of the peer, the type of secure transport
69*cc02d7e2SAndroid Build Coastguard Worker /// used as well as any other properties required by the authorization layer.
70*cc02d7e2SAndroid Build Coastguard Worker class AuthContext {
71*cc02d7e2SAndroid Build Coastguard Worker  public:
~AuthContext()72*cc02d7e2SAndroid Build Coastguard Worker   virtual ~AuthContext() {}
73*cc02d7e2SAndroid Build Coastguard Worker 
74*cc02d7e2SAndroid Build Coastguard Worker   /// Returns true if the peer is authenticated.
75*cc02d7e2SAndroid Build Coastguard Worker   virtual bool IsPeerAuthenticated() const = 0;
76*cc02d7e2SAndroid Build Coastguard Worker 
77*cc02d7e2SAndroid Build Coastguard Worker   /// A peer identity.
78*cc02d7e2SAndroid Build Coastguard Worker   ///
79*cc02d7e2SAndroid Build Coastguard Worker   /// It is, in general, comprised of one or more properties (in which case they
80*cc02d7e2SAndroid Build Coastguard Worker   /// have the same name).
81*cc02d7e2SAndroid Build Coastguard Worker   virtual std::vector<grpc::string_ref> GetPeerIdentity() const = 0;
82*cc02d7e2SAndroid Build Coastguard Worker   virtual std::string GetPeerIdentityPropertyName() const = 0;
83*cc02d7e2SAndroid Build Coastguard Worker 
84*cc02d7e2SAndroid Build Coastguard Worker   /// Returns all the property values with the given name.
85*cc02d7e2SAndroid Build Coastguard Worker   virtual std::vector<grpc::string_ref> FindPropertyValues(
86*cc02d7e2SAndroid Build Coastguard Worker       const std::string& name) const = 0;
87*cc02d7e2SAndroid Build Coastguard Worker 
88*cc02d7e2SAndroid Build Coastguard Worker   /// Iteration over all the properties.
89*cc02d7e2SAndroid Build Coastguard Worker   virtual AuthPropertyIterator begin() const = 0;
90*cc02d7e2SAndroid Build Coastguard Worker   virtual AuthPropertyIterator end() const = 0;
91*cc02d7e2SAndroid Build Coastguard Worker 
92*cc02d7e2SAndroid Build Coastguard Worker   /// Mutation functions: should only be used by an AuthMetadataProcessor.
93*cc02d7e2SAndroid Build Coastguard Worker   virtual void AddProperty(const std::string& key, const string_ref& value) = 0;
94*cc02d7e2SAndroid Build Coastguard Worker   virtual bool SetPeerIdentityPropertyName(const std::string& name) = 0;
95*cc02d7e2SAndroid Build Coastguard Worker };
96*cc02d7e2SAndroid Build Coastguard Worker 
97*cc02d7e2SAndroid Build Coastguard Worker }  // namespace grpc
98*cc02d7e2SAndroid Build Coastguard Worker 
99*cc02d7e2SAndroid Build Coastguard Worker #endif  // GRPCPP_SECURITY_AUTH_CONTEXT_H
100