blob: bf26e707e330471716a72a4db332071bb9ba3209 [file] [log] [blame]
/*
*
* Copyright 2018 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.
*
*/
#include <grpc/support/port_platform.h>
#include "src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h"
#include <stdlib.h>
#include <string.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc/support/string_util.h>
#include "src/core/lib/surface/api_trace.h"
/** -- gRPC TLS server authorization check API implementation. -- **/
grpc_tls_server_authorization_check_config::
grpc_tls_server_authorization_check_config(
const void* config_user_data,
int (*schedule)(void* config_user_data,
grpc_tls_server_authorization_check_arg* arg),
void (*cancel)(void* config_user_data,
grpc_tls_server_authorization_check_arg* arg),
void (*destruct)(void* config_user_data))
: config_user_data_(const_cast<void*>(config_user_data)),
schedule_(schedule),
cancel_(cancel),
destruct_(destruct) {}
grpc_tls_server_authorization_check_config::
~grpc_tls_server_authorization_check_config() {
if (destruct_ != nullptr) {
destruct_(config_user_data_);
}
}
int grpc_tls_server_authorization_check_config::Schedule(
grpc_tls_server_authorization_check_arg* arg) const {
if (schedule_ == nullptr) {
gpr_log(GPR_ERROR, "schedule API is nullptr");
if (arg != nullptr) {
arg->status = GRPC_STATUS_NOT_FOUND;
arg->error_details->set_error_details(
"schedule API in server authorization check config is nullptr");
}
return 1;
}
if (arg != nullptr && context_ != nullptr) {
arg->config = const_cast<grpc_tls_server_authorization_check_config*>(this);
}
return schedule_(config_user_data_, arg);
}
void grpc_tls_server_authorization_check_config::Cancel(
grpc_tls_server_authorization_check_arg* arg) const {
if (cancel_ == nullptr) {
gpr_log(GPR_ERROR, "cancel API is nullptr.");
if (arg != nullptr) {
arg->status = GRPC_STATUS_NOT_FOUND;
arg->error_details->set_error_details(
"schedule API in server authorization check config is nullptr");
}
return;
}
if (arg != nullptr) {
arg->config = const_cast<grpc_tls_server_authorization_check_config*>(this);
}
cancel_(config_user_data_, arg);
}
/** -- Wrapper APIs declared in grpc_security.h -- **/
grpc_tls_credentials_options* grpc_tls_credentials_options_create() {
grpc_core::ExecCtx exec_ctx;
return new grpc_tls_credentials_options();
}
void grpc_tls_credentials_options_set_cert_request_type(
grpc_tls_credentials_options* options,
grpc_ssl_client_certificate_request_type type) {
GPR_ASSERT(options != nullptr);
options->set_cert_request_type(type);
}
void grpc_tls_credentials_options_set_server_verification_option(
grpc_tls_credentials_options* options,
grpc_tls_server_verification_option server_verification_option) {
GPR_ASSERT(options != nullptr);
options->set_server_verification_option(server_verification_option);
}
void grpc_tls_credentials_options_set_certificate_provider(
grpc_tls_credentials_options* options,
grpc_tls_certificate_provider* provider) {
GPR_ASSERT(options != nullptr);
GPR_ASSERT(provider != nullptr);
grpc_core::ExecCtx exec_ctx;
options->set_certificate_provider(
provider->Ref(DEBUG_LOCATION, "set_certificate_provider"));
}
void grpc_tls_credentials_options_watch_root_certs(
grpc_tls_credentials_options* options) {
GPR_ASSERT(options != nullptr);
options->set_watch_root_cert(true);
}
void grpc_tls_credentials_options_set_root_cert_name(
grpc_tls_credentials_options* options, const char* root_cert_name) {
GPR_ASSERT(options != nullptr);
options->set_root_cert_name(root_cert_name);
}
void grpc_tls_credentials_options_watch_identity_key_cert_pairs(
grpc_tls_credentials_options* options) {
GPR_ASSERT(options != nullptr);
options->set_watch_identity_pair(true);
}
void grpc_tls_credentials_options_set_identity_cert_name(
grpc_tls_credentials_options* options, const char* identity_cert_name) {
GPR_ASSERT(options != nullptr);
options->set_identity_cert_name(identity_cert_name);
}
void grpc_tls_credentials_options_set_server_authorization_check_config(
grpc_tls_credentials_options* options,
grpc_tls_server_authorization_check_config* config) {
GPR_ASSERT(options != nullptr);
GPR_ASSERT(config != nullptr);
grpc_core::ExecCtx exec_ctx;
options->set_server_authorization_check_config(config->Ref());
}
grpc_tls_server_authorization_check_config*
grpc_tls_server_authorization_check_config_create(
const void* config_user_data,
int (*schedule)(void* config_user_data,
grpc_tls_server_authorization_check_arg* arg),
void (*cancel)(void* config_user_data,
grpc_tls_server_authorization_check_arg* arg),
void (*destruct)(void* config_user_data)) {
if (schedule == nullptr) {
gpr_log(GPR_ERROR,
"Schedule API is nullptr in creating TLS server authorization "
"check config.");
return nullptr;
}
grpc_core::ExecCtx exec_ctx;
return new grpc_tls_server_authorization_check_config(
config_user_data, schedule, cancel, destruct);
}
void grpc_tls_server_authorization_check_config_release(
grpc_tls_server_authorization_check_config* config) {
GRPC_API_TRACE(
"grpc_tls_server_authorization_check_config_release(config=%p)", 1,
(config));
grpc_core::ExecCtx exec_ctx;
if (config != nullptr) config->Unref();
}