| // |
| // |
| // 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_SECURITY_AUTH_METADATA_PROCESSOR_H |
| #define GRPCPP_SECURITY_AUTH_METADATA_PROCESSOR_H |
| |
| #include <map> |
| |
| #include <grpcpp/security/auth_context.h> |
| #include <grpcpp/support/status.h> |
| #include <grpcpp/support/string_ref.h> |
| |
| namespace grpc { |
| |
| /// Interface allowing custom server-side authorization based on credentials |
| /// encoded in metadata. Objects of this type can be passed to |
| /// \a ServerCredentials::SetAuthMetadataProcessor(). |
| /// Please also check out \a grpc::experimental::Interceptor for another way to |
| /// do customized operations on the information provided by a specific call. |
| class AuthMetadataProcessor { |
| public: |
| typedef std::multimap<grpc::string_ref, grpc::string_ref> InputMetadata; |
| typedef std::multimap<std::string, std::string> OutputMetadata; |
| |
| virtual ~AuthMetadataProcessor() {} |
| |
| /// If this method returns true, the \a Process function will be scheduled in |
| /// a different thread from the one processing the call. |
| virtual bool IsBlocking() const { return true; } |
| |
| /// Processes a Call associated with a connection. |
| /// auth_metadata: the authentication metadata associated with the particular |
| /// call |
| /// context: contains the connection-level info, e.g. the peer identity. This |
| /// parameter is readable and writable. Note that since the information is |
| /// shared for all calls associated with the connection, if the |
| /// implementation updates the info in a specific call, all the subsequent |
| /// calls will see the updates. A typical usage of context is to use |
| /// |auth_metadata| to infer the peer identity, and augment it with |
| /// properties. |
| /// consumed_auth_metadata: contains the metadata that the implementation |
| /// wants to remove from the current call, so that the server application is |
| /// no longer able to see it anymore. A typical usage would be to do token |
| /// authentication in the first call, and then remove the token information |
| /// for all subsequent calls. |
| /// response_metadata(CURRENTLY NOT SUPPORTED): the metadata that will be sent |
| /// as part of the response. |
| /// return: if the return value is not Status::OK, the rpc call will be |
| /// aborted with the error code and error message sent back to the client. |
| virtual grpc::Status Process(const InputMetadata& auth_metadata, |
| grpc::AuthContext* context, |
| OutputMetadata* consumed_auth_metadata, |
| OutputMetadata* response_metadata) = 0; |
| }; |
| |
| } // namespace grpc |
| |
| #endif // GRPCPP_SECURITY_AUTH_METADATA_PROCESSOR_H |