Skip to main content

openstack_keystone_core/
plugin_manager.rs

1// Licensed under the Apache License, Version 2.0 (the "License");
2// you may not use this file except in compliance with the License.
3// You may obtain a copy of the License at
4//
5//     http://www.apache.org/licenses/LICENSE-2.0
6//
7// Unless required by applicable law or agreed to in writing, software
8// distributed under the License is distributed on an "AS IS" BASIS,
9// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10// See the License for the specific language governing permissions and
11// limitations under the License.
12//
13// SPDX-License-Identifier: Apache-2.0
14//! # Plugin manager
15//!
16//! A driver, also known as a backend, is an important architectural component
17//! of Keystone. It is an abstraction around the data access needed by a
18//! particular subsystem. This pluggable implementation is not only how Keystone
19//! implements its own data access, but how you can implement your own!
20//!
21//! The [PluginManagerApi] is responsible for picking the proper backend driver for
22//! the provider.
23use std::sync::Arc;
24
25use crate::application_credential::{
26    ApplicationCredentialProviderError, backend::ApplicationCredentialBackend,
27};
28use crate::assignment::backend::AssignmentBackend;
29use crate::assignment::error::AssignmentProviderError;
30use crate::catalog::backend::CatalogBackend;
31use crate::catalog::error::CatalogProviderError;
32use crate::federation::backend::FederationBackend;
33use crate::federation::error::FederationProviderError;
34use crate::identity::backend::IdentityBackend;
35use crate::identity::error::IdentityProviderError;
36use crate::identity_mapping::IdentityMappingProviderError;
37use crate::identity_mapping::backend::IdentityMappingBackend;
38use crate::k8s_auth::K8sAuthProviderError;
39use crate::k8s_auth::backend::K8sAuthBackend;
40use crate::resource::backend::ResourceBackend;
41use crate::resource::error::ResourceProviderError;
42use crate::revoke::RevokeProviderError;
43use crate::revoke::backend::RevokeBackend;
44use crate::role::RoleProviderError;
45use crate::role::backend::RoleBackend;
46use crate::token::TokenProviderError;
47use crate::token::backend::TokenRestrictionBackend;
48use crate::trust::TrustProviderError;
49use crate::trust::backend::TrustBackend;
50
51/// Plugin manager trait.
52pub trait PluginManagerApi {
53    /// Get registered application credential backend.
54    fn get_application_credential_backend<S: AsRef<str>>(
55        &self,
56        name: S,
57    ) -> Result<&Arc<dyn ApplicationCredentialBackend>, ApplicationCredentialProviderError>;
58
59    /// Get registered assignment backend.
60    fn get_assignment_backend<S: AsRef<str>>(
61        &self,
62        name: S,
63    ) -> Result<&Arc<dyn AssignmentBackend>, AssignmentProviderError>;
64
65    /// Get registered catalog backend.
66    fn get_catalog_backend<S: AsRef<str>>(
67        &self,
68        name: S,
69    ) -> Result<&Arc<dyn CatalogBackend>, CatalogProviderError>;
70
71    /// Get registered federation backend.
72    fn get_federation_backend<S: AsRef<str>>(
73        &self,
74        name: S,
75    ) -> Result<&Arc<dyn FederationBackend>, FederationProviderError>;
76
77    /// Get registered identity backend.
78    fn get_identity_backend<S: AsRef<str>>(
79        &self,
80        name: S,
81    ) -> Result<&Arc<dyn IdentityBackend>, IdentityProviderError>;
82
83    /// Get registered identity mapping backend.
84    fn get_identity_mapping_backend<S: AsRef<str>>(
85        &self,
86        name: S,
87    ) -> Result<&Arc<dyn IdentityMappingBackend>, IdentityMappingProviderError>;
88
89    /// Get registered k8s auth backend.
90    fn get_k8s_auth_backend<S: AsRef<str>>(
91        &self,
92        name: S,
93    ) -> Result<&Arc<dyn K8sAuthBackend>, K8sAuthProviderError>;
94
95    /// Get registered resource backend.
96    fn get_resource_backend<S: AsRef<str>>(
97        &self,
98        name: S,
99    ) -> Result<&Arc<dyn ResourceBackend>, ResourceProviderError>;
100
101    /// Get registered revoke backend.
102    fn get_revoke_backend<S: AsRef<str>>(
103        &self,
104        name: S,
105    ) -> Result<&Arc<dyn RevokeBackend>, RevokeProviderError>;
106
107    /// Get role resource backend.
108    fn get_role_backend<S: AsRef<str>>(
109        &self,
110        name: S,
111    ) -> Result<&Arc<dyn RoleBackend>, RoleProviderError>;
112
113    /// Get registered token restriction backend.
114    fn get_token_restriction_backend<S: AsRef<str>>(
115        &self,
116        name: S,
117    ) -> Result<&Arc<dyn TokenRestrictionBackend>, TokenProviderError>;
118
119    /// Get registered trust backend.
120    fn get_trust_backend<S: AsRef<str>>(
121        &self,
122        name: S,
123    ) -> Result<&Arc<dyn TrustBackend>, TrustProviderError>;
124
125    /// Register application credential backend.
126    fn register_application_credential_backend<S: AsRef<str>>(
127        &mut self,
128        name: S,
129        plugin: Arc<dyn ApplicationCredentialBackend>,
130    );
131
132    /// Register assignment backend.
133    fn register_assignment_backend<S: AsRef<str>>(
134        &mut self,
135        name: S,
136        plugin: Arc<dyn AssignmentBackend>,
137    );
138
139    /// Register catalog backend.
140    fn register_catalog_backend<S: AsRef<str>>(&mut self, name: S, plugin: Arc<dyn CatalogBackend>);
141
142    /// Register federation backend.
143    fn register_federation_backend<S: AsRef<str>>(
144        &mut self,
145        name: S,
146        plugin: Arc<dyn FederationBackend>,
147    );
148
149    /// Register identity backend.
150    fn register_identity_backend<S: AsRef<str>>(
151        &mut self,
152        name: S,
153        plugin: Arc<dyn IdentityBackend>,
154    );
155
156    /// Register identity mapping backend.
157    fn register_identity_mapping_backend<S: AsRef<str>>(
158        &mut self,
159        name: S,
160        plugin: Arc<dyn IdentityMappingBackend>,
161    );
162
163    /// Register k8s_auth backend.
164    fn register_k8s_auth_backend<S: AsRef<str>>(
165        &mut self,
166        name: S,
167        plugin: Arc<dyn K8sAuthBackend>,
168    );
169
170    /// Register resource backend.
171    fn register_resource_backend<S: AsRef<str>>(
172        &mut self,
173        name: S,
174        plugin: Arc<dyn ResourceBackend>,
175    );
176
177    /// Register revoke backend.
178    fn register_revoke_backend<S: AsRef<str>>(&mut self, name: S, plugin: Arc<dyn RevokeBackend>);
179
180    /// Register role backend.
181    fn register_role_backend<S: AsRef<str>>(&mut self, name: S, plugin: Arc<dyn RoleBackend>);
182
183    /// Register token restriction backend.
184    fn register_token_restriction_backend<S: AsRef<str>>(
185        &mut self,
186        name: S,
187        plugin: Arc<dyn TokenRestrictionBackend>,
188    );
189
190    /// Register trust backend.
191    fn register_trust_backend<S: AsRef<str>>(&mut self, name: S, plugin: Arc<dyn TrustBackend>);
192}