blob: ed9afb37b001244b211a705c2e8c4080eb725dc6 [file] [log] [blame]
Julien Boeuf1d2240c2015-04-09 21:07:56 -07001/*
2 *
Jan Tattermusch7897ae92017-06-07 22:57:36 +02003 * Copyright 2015 gRPC authors.
Julien Boeuf1d2240c2015-04-09 21:07:56 -07004 *
Jan Tattermusch7897ae92017-06-07 22:57:36 +02005 * 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 Boeuf1d2240c2015-04-09 21:07:56 -07008 *
Jan Tattermusch7897ae92017-06-07 22:57:36 +02009 * http://www.apache.org/licenses/LICENSE-2.0
Julien Boeuf1d2240c2015-04-09 21:07:56 -070010 *
Jan Tattermusch7897ae92017-06-07 22:57:36 +020011 * 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 Boeuf1d2240c2015-04-09 21:07:56 -070016 *
17 */
18
Julien Boeuffce25ee2015-04-10 08:44:20 -070019#ifndef GRPC_INTERNAL_CPP_CLIENT_SECURE_CREDENTIALS_H
20#define GRPC_INTERNAL_CPP_CLIENT_SECURE_CREDENTIALS_H
21
Julien Boeuf1d2240c2015-04-09 21:07:56 -070022#include <grpc/grpc_security.h>
23
Julien Boeuf5be92a32015-08-28 16:28:18 -070024#include <grpc++/security/credentials.h>
Craig Tillerf40df232016-03-25 13:38:14 -070025#include <grpc++/support/config.h>
Julien Boeuf1d2240c2015-04-09 21:07:56 -070026
Julien Boeuf2d041182015-08-31 20:30:09 -070027#include "src/cpp/server/thread_pool_interface.h"
28
Julien Boeuf1d2240c2015-04-09 21:07:56 -070029namespace grpc {
30
Vijay Paic0b2acb2016-11-01 16:31:56 -070031class SecureChannelCredentials final : public ChannelCredentials {
Julien Boeuf1d2240c2015-04-09 21:07:56 -070032 public:
David Garcia Quintase1300de2016-01-27 18:41:26 -080033 explicit SecureChannelCredentials(grpc_channel_credentials* c_creds);
34 ~SecureChannelCredentials() { grpc_channel_credentials_release(c_creds_); }
Julien Boeuf54a902e2015-10-12 13:26:21 -070035 grpc_channel_credentials* GetRawCreds() { return c_creds_; }
Julien Boeuf1d2240c2015-04-09 21:07:56 -070036
yang-g8c2be9f2015-08-19 16:28:09 -070037 std::shared_ptr<grpc::Channel> CreateChannel(
Vijay Paic0b2acb2016-11-01 16:31:56 -070038 const string& target, const grpc::ChannelArguments& args) override;
39 SecureChannelCredentials* AsSecureCredentials() override { return this; }
Julien Boeuf1d2240c2015-04-09 21:07:56 -070040
41 private:
Julien Boeuf54a902e2015-10-12 13:26:21 -070042 grpc_channel_credentials* const c_creds_;
Julien Boeuf1d2240c2015-04-09 21:07:56 -070043};
44
Vijay Paic0b2acb2016-11-01 16:31:56 -070045class SecureCallCredentials final : public CallCredentials {
Julien Boeuf54a902e2015-10-12 13:26:21 -070046 public:
David Garcia Quintase1300de2016-01-27 18:41:26 -080047 explicit SecureCallCredentials(grpc_call_credentials* c_creds);
48 ~SecureCallCredentials() { grpc_call_credentials_release(c_creds_); }
Julien Boeuf54a902e2015-10-12 13:26:21 -070049 grpc_call_credentials* GetRawCreds() { return c_creds_; }
50
Vijay Paic0b2acb2016-11-01 16:31:56 -070051 bool ApplyToCall(grpc_call* call) override;
52 SecureCallCredentials* AsSecureCredentials() override { return this; }
Julien Boeuf54a902e2015-10-12 13:26:21 -070053
54 private:
55 grpc_call_credentials* const c_creds_;
56};
57
Craig Tiller7c70b6c2017-01-23 07:48:42 -080058class MetadataCredentialsPluginWrapper final : private GrpcLibraryCodegen {
Julien Boeuf2d041182015-08-31 20:30:09 -070059 public:
60 static void Destroy(void* wrapper);
Mark D. Roth2caf0212017-09-01 15:04:13 -070061 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. Roth1ff6ee12017-09-06 14:56:18 -070065 size_t* num_creds_md, grpc_status_code* status,
66 const char** error_details);
Julien Boeuf2d041182015-08-31 20:30:09 -070067
68 explicit MetadataCredentialsPluginWrapper(
69 std::unique_ptr<MetadataCredentialsPlugin> plugin);
70
71 private:
Mark D. Roth2caf0212017-09-01 15:04:13 -070072 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],
ncteisen520cc8f2017-09-29 10:36:28 -070076 size_t* num_creds_md, grpc_status_code* status_code,
Mark D. Roth1ff6ee12017-09-06 14:56:18 -070077 const char** error_details);
Julien Boeuf2d041182015-08-31 20:30:09 -070078 std::unique_ptr<ThreadPoolInterface> thread_pool_;
79 std::unique_ptr<MetadataCredentialsPlugin> plugin_;
80};
81
Julien Boeuf1d2240c2015-04-09 21:07:56 -070082} // namespace grpc
83
Julien Boeuffce25ee2015-04-10 08:44:20 -070084#endif // GRPC_INTERNAL_CPP_CLIENT_SECURE_CREDENTIALS_H