mirror of https://github.com/grpc/grpc.git
parent
f60d5ef011
commit
73563e41b0
13 changed files with 203 additions and 3 deletions
@ -0,0 +1,59 @@ |
||||
//
|
||||
//
|
||||
// Copyright 2020 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 GRPC_CORE_EXT_XDS_CERTIFICATE_PROVIDER_FACTORY_H |
||||
#define GRPC_CORE_EXT_XDS_CERTIFICATE_PROVIDER_FACTORY_H |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include "src/core/lib/iomgr/error.h" |
||||
#include "src/core/lib/json/json.h" |
||||
#include "src/core/lib/security/certificate_provider.h" |
||||
|
||||
namespace grpc_core { |
||||
|
||||
// Factories for plugins. Each plugin implementation should create its own
|
||||
// factory implementation and register an instance with the registry.
|
||||
class CertificateProviderFactory { |
||||
public: |
||||
// Interface for configs for CertificateProviders.
|
||||
class Config { |
||||
public: |
||||
virtual ~Config() = default; |
||||
|
||||
// Name of the type of the CertificateProvider. Unique to each type of
|
||||
// config.
|
||||
virtual const char* name() const = 0; |
||||
}; |
||||
|
||||
virtual ~CertificateProviderFactory() = default; |
||||
|
||||
// Name of the plugin.
|
||||
virtual const char* name() const = 0; |
||||
|
||||
virtual std::unique_ptr<Config> CreateCertificateProviderConfig( |
||||
const Json& config_json, grpc_error** error) = 0; |
||||
|
||||
// Create a CertificateProvider instance from config.
|
||||
virtual RefCountedPtr<grpc_tls_certificate_provider> |
||||
CreateCertificateProvider(std::unique_ptr<Config> config) = 0; |
||||
}; |
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif // GRPC_CORE_EXT_XDS_CERTIFICATE_PROVIDER_FACTORY_H
|
@ -0,0 +1,57 @@ |
||||
//
|
||||
//
|
||||
// Copyright 2020 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 GRPC_CORE_EXT_XDS_CERTIFICATE_PROVIDER_REGISTRY_H |
||||
#define GRPC_CORE_EXT_XDS_CERTIFICATE_PROVIDER_REGISTRY_H |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include <string> |
||||
|
||||
#include "src/core/ext/xds/certificate_provider_factory.h" |
||||
|
||||
namespace grpc_core { |
||||
|
||||
// Global registry for all the certificate provider plugins.
|
||||
class CertificateProviderRegistry { |
||||
public: |
||||
// Returns the factory for the plugin keyed by name.
|
||||
static CertificateProviderFactory* LookupCertificateProviderFactory( |
||||
const std::string& name); |
||||
|
||||
// The following methods are used to create and populate the
|
||||
// CertificateProviderRegistry. NOT THREAD SAFE -- to be used only during
|
||||
// global gRPC initialization and shutdown.
|
||||
|
||||
// Global initialization of the registry.
|
||||
static void InitRegistry(); |
||||
|
||||
// Global shutdown of the registry.
|
||||
static void ShutdownRegistry(); |
||||
|
||||
// Register a provider with the registry. Can only be called after calling
|
||||
// InitRegistry(). The key of the factory is extracted from factory
|
||||
// parameter with method CertificateProviderFactory::name. If the same key
|
||||
// is registered twice, an exception is raised.
|
||||
static void RegisterCertificateProviderFactory( |
||||
std::unique_ptr<CertificateProviderFactory> factory); |
||||
}; |
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif // GRPC_CORE_EXT_XDS_CERTIFICATE_PROVIDER_REGISTRY_H
|
@ -0,0 +1,50 @@ |
||||
//
|
||||
//
|
||||
// Copyright 2020 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 GRPC_CORE_EXT_XDS_CERTIFICATE_PROVIDER_STORE_H |
||||
#define GRPC_CORE_EXT_XDS_CERTIFICATE_PROVIDER_STORE_H |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include <map> |
||||
|
||||
#include "src/core/lib/gprpp/ref_counted_ptr.h" |
||||
#include "src/core/lib/gprpp/sync.h" |
||||
#include "src/core/lib/security/certificate_provider.h" |
||||
|
||||
namespace grpc_core { |
||||
|
||||
// Map for xDS based grpc_tls_certificate_provider instances.
|
||||
class CertificateProviderStore { |
||||
public: |
||||
// If a provider corresponding to the config is found, a raw pointer to the
|
||||
// grpc_tls_certificate_provider in the map is returned. If no provider is
|
||||
// found for a key, a new provider is created. The CertificateProviderStore
|
||||
// maintains a ref to the grpc_tls_certificate_provider for its entire
|
||||
// lifetime.
|
||||
RefCountedPtr<grpc_tls_certificate_provider> CreateOrGetCertificateProvider( |
||||
absl::string_view key); |
||||
|
||||
private: |
||||
// Underlying map for the providers.
|
||||
std::map<std::string, RefCountedPtr<grpc_tls_certificate_provider>> map_; |
||||
}; |
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif // GRPC_CORE_EXT_XDS_CERTIFICATE_PROVIDER_STORE_H
|
Loading…
Reference in new issue