1use std::collections::HashMap;
5
6use reifydb_core::interface::auth::AuthenticationProvider;
7use reifydb_runtime::context::clock::Clock;
8
9use crate::method::{password::PasswordProvider, solana::SolanaProvider, token::TokenProvider};
10
11pub struct AuthenticationRegistry {
12 providers: HashMap<String, Box<dyn AuthenticationProvider>>,
13}
14
15impl AuthenticationRegistry {
16 pub fn new(clock: Clock) -> Self {
17 let mut providers: HashMap<String, Box<dyn AuthenticationProvider>> = HashMap::new();
18 providers.insert("password".to_string(), Box::new(PasswordProvider));
19 providers.insert("token".to_string(), Box::new(TokenProvider));
20 providers.insert("solana".to_string(), Box::new(SolanaProvider::new(clock)));
21 Self {
22 providers,
23 }
24 }
25
26 pub fn register(&mut self, provider: Box<dyn AuthenticationProvider>) {
27 self.providers.insert(provider.method().to_string(), provider);
28 }
29
30 pub fn get(&self, method: &str) -> Option<&dyn AuthenticationProvider> {
31 self.providers.get(method).map(|p| p.as_ref())
32 }
33}
34
35impl Default for AuthenticationRegistry {
36 fn default() -> Self {
37 Self::new(Clock::default())
38 }
39}