tls_credentials_options.cc 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. /*
  2. *
  3. * Copyright 2019 gRPC authors.
  4. *
  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
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  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.
  16. *
  17. */
  18. #include <grpc/grpc_security.h>
  19. #include <grpc/support/alloc.h>
  20. #include <grpcpp/security/tls_credentials_options.h>
  21. #include "absl/container/inlined_vector.h"
  22. #include "src/cpp/common/tls_credentials_options_util.h"
  23. namespace grpc {
  24. namespace experimental {
  25. /** gRPC TLS server authorization check arg API implementation **/
  26. TlsServerAuthorizationCheckArg::TlsServerAuthorizationCheckArg(
  27. grpc_tls_server_authorization_check_arg* arg)
  28. : c_arg_(arg) {
  29. GPR_ASSERT(c_arg_ != nullptr);
  30. if (c_arg_->context != nullptr) {
  31. gpr_log(GPR_ERROR, "c_arg context has already been set");
  32. }
  33. c_arg_->context = static_cast<void*>(this);
  34. c_arg_->destroy_context = &TlsServerAuthorizationCheckArgDestroyContext;
  35. }
  36. TlsServerAuthorizationCheckArg::~TlsServerAuthorizationCheckArg() {}
  37. void* TlsServerAuthorizationCheckArg::cb_user_data() const {
  38. return c_arg_->cb_user_data;
  39. }
  40. int TlsServerAuthorizationCheckArg::success() const { return c_arg_->success; }
  41. std::string TlsServerAuthorizationCheckArg::target_name() const {
  42. std::string cpp_target_name(c_arg_->target_name);
  43. return cpp_target_name;
  44. }
  45. std::string TlsServerAuthorizationCheckArg::peer_cert() const {
  46. std::string cpp_peer_cert(c_arg_->peer_cert);
  47. return cpp_peer_cert;
  48. }
  49. std::string TlsServerAuthorizationCheckArg::peer_cert_full_chain() const {
  50. std::string cpp_peer_cert_full_chain(c_arg_->peer_cert_full_chain);
  51. return cpp_peer_cert_full_chain;
  52. }
  53. grpc_status_code TlsServerAuthorizationCheckArg::status() const {
  54. return c_arg_->status;
  55. }
  56. std::string TlsServerAuthorizationCheckArg::error_details() const {
  57. return c_arg_->error_details->error_details();
  58. }
  59. void TlsServerAuthorizationCheckArg::set_cb_user_data(void* cb_user_data) {
  60. c_arg_->cb_user_data = cb_user_data;
  61. }
  62. void TlsServerAuthorizationCheckArg::set_success(int success) {
  63. c_arg_->success = success;
  64. }
  65. void TlsServerAuthorizationCheckArg::set_target_name(
  66. const std::string& target_name) {
  67. c_arg_->target_name = gpr_strdup(target_name.c_str());
  68. }
  69. void TlsServerAuthorizationCheckArg::set_peer_cert(
  70. const std::string& peer_cert) {
  71. c_arg_->peer_cert = gpr_strdup(peer_cert.c_str());
  72. }
  73. void TlsServerAuthorizationCheckArg::set_peer_cert_full_chain(
  74. const std::string& peer_cert_full_chain) {
  75. c_arg_->peer_cert_full_chain = gpr_strdup(peer_cert_full_chain.c_str());
  76. }
  77. void TlsServerAuthorizationCheckArg::set_status(grpc_status_code status) {
  78. c_arg_->status = status;
  79. }
  80. void TlsServerAuthorizationCheckArg::set_error_details(
  81. const std::string& error_details) {
  82. c_arg_->error_details->set_error_details(error_details.c_str());
  83. }
  84. void TlsServerAuthorizationCheckArg::OnServerAuthorizationCheckDoneCallback() {
  85. if (c_arg_->cb == nullptr) {
  86. gpr_log(GPR_ERROR, "server authorizaton check arg callback API is nullptr");
  87. return;
  88. }
  89. c_arg_->cb(c_arg_);
  90. }
  91. TlsServerAuthorizationCheckConfig::TlsServerAuthorizationCheckConfig(
  92. std::shared_ptr<TlsServerAuthorizationCheckInterface>
  93. server_authorization_check_interface)
  94. : server_authorization_check_interface_(
  95. std::move(server_authorization_check_interface)) {
  96. c_config_ = grpc_tls_server_authorization_check_config_create(
  97. nullptr, &TlsServerAuthorizationCheckConfigCSchedule,
  98. &TlsServerAuthorizationCheckConfigCCancel, nullptr);
  99. c_config_->set_context(static_cast<void*>(this));
  100. }
  101. TlsServerAuthorizationCheckConfig::~TlsServerAuthorizationCheckConfig() {
  102. grpc_tls_server_authorization_check_config_release(c_config_);
  103. }
  104. TlsCredentialsOptions::TlsCredentialsOptions(
  105. std::shared_ptr<CertificateProviderInterface> certificate_provider)
  106. : certificate_provider_(std::move(certificate_provider)) {
  107. c_credentials_options_ = grpc_tls_credentials_options_create();
  108. if (certificate_provider_ != nullptr) {
  109. grpc_tls_credentials_options_set_certificate_provider(
  110. c_credentials_options_, certificate_provider_->c_provider());
  111. }
  112. }
  113. void TlsCredentialsOptions::watch_root_certs() {
  114. grpc_tls_credentials_options_watch_root_certs(c_credentials_options_);
  115. }
  116. void TlsCredentialsOptions::set_root_cert_name(
  117. const std::string& root_cert_name) {
  118. grpc_tls_credentials_options_set_root_cert_name(c_credentials_options_,
  119. root_cert_name.c_str());
  120. }
  121. void TlsCredentialsOptions::watch_identity_key_cert_pairs() {
  122. grpc_tls_credentials_options_watch_identity_key_cert_pairs(
  123. c_credentials_options_);
  124. }
  125. void TlsCredentialsOptions::set_identity_cert_name(
  126. const std::string& identity_cert_name) {
  127. grpc_tls_credentials_options_set_identity_cert_name(
  128. c_credentials_options_, identity_cert_name.c_str());
  129. }
  130. void TlsChannelCredentialsOptions::set_server_verification_option(
  131. grpc_tls_server_verification_option server_verification_option) {
  132. grpc_tls_credentials_options* options = c_credentials_options();
  133. GPR_ASSERT(options != nullptr);
  134. grpc_tls_credentials_options_set_server_verification_option(
  135. options, server_verification_option);
  136. }
  137. void TlsChannelCredentialsOptions::set_server_authorization_check_config(
  138. std::shared_ptr<TlsServerAuthorizationCheckConfig> config) {
  139. grpc_tls_credentials_options* options = c_credentials_options();
  140. GPR_ASSERT(options != nullptr);
  141. if (config != nullptr) {
  142. grpc_tls_credentials_options_set_server_authorization_check_config(
  143. options, config->c_config());
  144. }
  145. }
  146. void TlsServerCredentialsOptions::set_cert_request_type(
  147. grpc_ssl_client_certificate_request_type cert_request_type) {
  148. grpc_tls_credentials_options* options = c_credentials_options();
  149. GPR_ASSERT(options != nullptr);
  150. grpc_tls_credentials_options_set_cert_request_type(options,
  151. cert_request_type);
  152. }
  153. } // namespace experimental
  154. } // namespace grpc