Skip to main content

reifydb_auth/
registry.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2025 ReifyDB
3
4use 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}