| /* |
| * |
| * Copyright 2015 gRPC authors. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| */ |
| |
| #ifndef GRPCPP_IMPL_CODEGEN_SECURITY_AUTH_CONTEXT_H |
| #define GRPCPP_IMPL_CODEGEN_SECURITY_AUTH_CONTEXT_H |
| |
| #include <iterator> |
| #include <vector> |
| |
| #include <grpcpp/impl/codegen/config.h> |
| #include <grpcpp/impl/codegen/string_ref.h> |
| |
| struct grpc_auth_context; |
| struct grpc_auth_property; |
| struct grpc_auth_property_iterator; |
| |
| namespace grpc { |
| class SecureAuthContext; |
| |
| typedef std::pair<grpc::string_ref, grpc::string_ref> AuthProperty; |
| |
| class AuthPropertyIterator |
| : public std::iterator<std::input_iterator_tag, const AuthProperty> { |
| public: |
| ~AuthPropertyIterator(); |
| AuthPropertyIterator& operator++(); |
| AuthPropertyIterator operator++(int); |
| bool operator==(const AuthPropertyIterator& rhs) const; |
| bool operator!=(const AuthPropertyIterator& rhs) const; |
| const AuthProperty operator*(); |
| |
| protected: |
| AuthPropertyIterator(); |
| AuthPropertyIterator(const grpc_auth_property* property, |
| const grpc_auth_property_iterator* iter); |
| |
| private: |
| friend class SecureAuthContext; |
| const grpc_auth_property* property_; |
| // The following items form a grpc_auth_property_iterator. |
| const grpc_auth_context* ctx_; |
| size_t index_; |
| const char* name_; |
| }; |
| |
| /// Class encapsulating the Authentication Information. |
| /// |
| /// It includes the secure identity of the peer, the type of secure transport |
| /// used as well as any other properties required by the authorization layer. |
| class AuthContext { |
| public: |
| virtual ~AuthContext() {} |
| |
| /// Returns true if the peer is authenticated. |
| virtual bool IsPeerAuthenticated() const = 0; |
| |
| /// A peer identity. |
| /// |
| /// It is, in general, comprised of one or more properties (in which case they |
| /// have the same name). |
| virtual std::vector<grpc::string_ref> GetPeerIdentity() const = 0; |
| virtual grpc::string GetPeerIdentityPropertyName() const = 0; |
| |
| /// Returns all the property values with the given name. |
| virtual std::vector<grpc::string_ref> FindPropertyValues( |
| const grpc::string& name) const = 0; |
| |
| /// Iteration over all the properties. |
| virtual AuthPropertyIterator begin() const = 0; |
| virtual AuthPropertyIterator end() const = 0; |
| |
| /// Mutation functions: should only be used by an AuthMetadataProcessor. |
| virtual void AddProperty(const grpc::string& key, |
| const grpc::string_ref& value) = 0; |
| virtual bool SetPeerIdentityPropertyName(const grpc::string& name) = 0; |
| }; |
| |
| } // namespace grpc |
| |
| #endif // GRPCPP_IMPL_CODEGEN_SECURITY_AUTH_CONTEXT_H |