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