Julien Boeuf | 1d2240c | 2015-04-09 21:07:56 -0700 | [diff] [blame] | 1 | /* |
| 2 | * |
Jan Tattermusch | 7897ae9 | 2017-06-07 22:57:36 +0200 | [diff] [blame] | 3 | * Copyright 2015 gRPC authors. |
Julien Boeuf | 1d2240c | 2015-04-09 21:07:56 -0700 | [diff] [blame] | 4 | * |
Jan Tattermusch | 7897ae9 | 2017-06-07 22:57:36 +0200 | [diff] [blame] | 5 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 6 | * you may not use this file except in compliance with the License. |
| 7 | * You may obtain a copy of the License at |
Julien Boeuf | 1d2240c | 2015-04-09 21:07:56 -0700 | [diff] [blame] | 8 | * |
Jan Tattermusch | 7897ae9 | 2017-06-07 22:57:36 +0200 | [diff] [blame] | 9 | * http://www.apache.org/licenses/LICENSE-2.0 |
Julien Boeuf | 1d2240c | 2015-04-09 21:07:56 -0700 | [diff] [blame] | 10 | * |
Jan Tattermusch | 7897ae9 | 2017-06-07 22:57:36 +0200 | [diff] [blame] | 11 | * Unless required by applicable law or agreed to in writing, software |
| 12 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 14 | * See the License for the specific language governing permissions and |
| 15 | * limitations under the License. |
Julien Boeuf | 1d2240c | 2015-04-09 21:07:56 -0700 | [diff] [blame] | 16 | * |
| 17 | */ |
| 18 | |
Julien Boeuf | fce25ee | 2015-04-10 08:44:20 -0700 | [diff] [blame] | 19 | #ifndef GRPC_INTERNAL_CPP_CLIENT_SECURE_CREDENTIALS_H |
| 20 | #define GRPC_INTERNAL_CPP_CLIENT_SECURE_CREDENTIALS_H |
| 21 | |
Julien Boeuf | 1d2240c | 2015-04-09 21:07:56 -0700 | [diff] [blame] | 22 | #include <grpc/grpc_security.h> |
| 23 | |
Julien Boeuf | 5be92a3 | 2015-08-28 16:28:18 -0700 | [diff] [blame] | 24 | #include <grpc++/security/credentials.h> |
Craig Tiller | f40df23 | 2016-03-25 13:38:14 -0700 | [diff] [blame] | 25 | #include <grpc++/support/config.h> |
Julien Boeuf | 1d2240c | 2015-04-09 21:07:56 -0700 | [diff] [blame] | 26 | |
Julien Boeuf | 2d04118 | 2015-08-31 20:30:09 -0700 | [diff] [blame] | 27 | #include "src/cpp/server/thread_pool_interface.h" |
| 28 | |
Julien Boeuf | 1d2240c | 2015-04-09 21:07:56 -0700 | [diff] [blame] | 29 | namespace grpc { |
| 30 | |
Vijay Pai | c0b2acb | 2016-11-01 16:31:56 -0700 | [diff] [blame] | 31 | class SecureChannelCredentials final : public ChannelCredentials { |
Julien Boeuf | 1d2240c | 2015-04-09 21:07:56 -0700 | [diff] [blame] | 32 | public: |
David Garcia Quintas | e1300de | 2016-01-27 18:41:26 -0800 | [diff] [blame] | 33 | explicit SecureChannelCredentials(grpc_channel_credentials* c_creds); |
| 34 | ~SecureChannelCredentials() { grpc_channel_credentials_release(c_creds_); } |
Julien Boeuf | 54a902e | 2015-10-12 13:26:21 -0700 | [diff] [blame] | 35 | grpc_channel_credentials* GetRawCreds() { return c_creds_; } |
Julien Boeuf | 1d2240c | 2015-04-09 21:07:56 -0700 | [diff] [blame] | 36 | |
yang-g | 8c2be9f | 2015-08-19 16:28:09 -0700 | [diff] [blame] | 37 | std::shared_ptr<grpc::Channel> CreateChannel( |
Vijay Pai | c0b2acb | 2016-11-01 16:31:56 -0700 | [diff] [blame] | 38 | const string& target, const grpc::ChannelArguments& args) override; |
| 39 | SecureChannelCredentials* AsSecureCredentials() override { return this; } |
Julien Boeuf | 1d2240c | 2015-04-09 21:07:56 -0700 | [diff] [blame] | 40 | |
| 41 | private: |
Julien Boeuf | 54a902e | 2015-10-12 13:26:21 -0700 | [diff] [blame] | 42 | grpc_channel_credentials* const c_creds_; |
Julien Boeuf | 1d2240c | 2015-04-09 21:07:56 -0700 | [diff] [blame] | 43 | }; |
| 44 | |
Vijay Pai | c0b2acb | 2016-11-01 16:31:56 -0700 | [diff] [blame] | 45 | class SecureCallCredentials final : public CallCredentials { |
Julien Boeuf | 54a902e | 2015-10-12 13:26:21 -0700 | [diff] [blame] | 46 | public: |
David Garcia Quintas | e1300de | 2016-01-27 18:41:26 -0800 | [diff] [blame] | 47 | explicit SecureCallCredentials(grpc_call_credentials* c_creds); |
| 48 | ~SecureCallCredentials() { grpc_call_credentials_release(c_creds_); } |
Julien Boeuf | 54a902e | 2015-10-12 13:26:21 -0700 | [diff] [blame] | 49 | grpc_call_credentials* GetRawCreds() { return c_creds_; } |
| 50 | |
Vijay Pai | c0b2acb | 2016-11-01 16:31:56 -0700 | [diff] [blame] | 51 | bool ApplyToCall(grpc_call* call) override; |
| 52 | SecureCallCredentials* AsSecureCredentials() override { return this; } |
Julien Boeuf | 54a902e | 2015-10-12 13:26:21 -0700 | [diff] [blame] | 53 | |
| 54 | private: |
| 55 | grpc_call_credentials* const c_creds_; |
| 56 | }; |
| 57 | |
Craig Tiller | 7c70b6c | 2017-01-23 07:48:42 -0800 | [diff] [blame] | 58 | class MetadataCredentialsPluginWrapper final : private GrpcLibraryCodegen { |
Julien Boeuf | 2d04118 | 2015-08-31 20:30:09 -0700 | [diff] [blame] | 59 | public: |
| 60 | static void Destroy(void* wrapper); |
Mark D. Roth | 2caf021 | 2017-09-01 15:04:13 -0700 | [diff] [blame] | 61 | static int GetMetadata( |
| 62 | void* wrapper, grpc_auth_metadata_context context, |
| 63 | grpc_credentials_plugin_metadata_cb cb, void* user_data, |
| 64 | grpc_metadata creds_md[GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX], |
Mark D. Roth | 1ff6ee1 | 2017-09-06 14:56:18 -0700 | [diff] [blame] | 65 | size_t* num_creds_md, grpc_status_code* status, |
| 66 | const char** error_details); |
Julien Boeuf | 2d04118 | 2015-08-31 20:30:09 -0700 | [diff] [blame] | 67 | |
| 68 | explicit MetadataCredentialsPluginWrapper( |
| 69 | std::unique_ptr<MetadataCredentialsPlugin> plugin); |
| 70 | |
| 71 | private: |
Mark D. Roth | 2caf021 | 2017-09-01 15:04:13 -0700 | [diff] [blame] | 72 | void InvokePlugin( |
| 73 | grpc_auth_metadata_context context, |
| 74 | grpc_credentials_plugin_metadata_cb cb, void* user_data, |
| 75 | grpc_metadata creds_md[GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX], |
ncteisen | 520cc8f | 2017-09-29 10:36:28 -0700 | [diff] [blame] | 76 | size_t* num_creds_md, grpc_status_code* status_code, |
Mark D. Roth | 1ff6ee1 | 2017-09-06 14:56:18 -0700 | [diff] [blame] | 77 | const char** error_details); |
Julien Boeuf | 2d04118 | 2015-08-31 20:30:09 -0700 | [diff] [blame] | 78 | std::unique_ptr<ThreadPoolInterface> thread_pool_; |
| 79 | std::unique_ptr<MetadataCredentialsPlugin> plugin_; |
| 80 | }; |
| 81 | |
Julien Boeuf | 1d2240c | 2015-04-09 21:07:56 -0700 | [diff] [blame] | 82 | } // namespace grpc |
| 83 | |
Julien Boeuf | fce25ee | 2015-04-10 08:44:20 -0700 | [diff] [blame] | 84 | #endif // GRPC_INTERNAL_CPP_CLIENT_SECURE_CREDENTIALS_H |