Skip to main content

reifydb_auth/
registry.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026 ReifyDB
3
4use std::collections::HashMap;
5
6use reifydb_core::interface::auth::AuthenticationProvider;
7use reifydb_runtime::context::clock::Clock;
8
9use crate::method::{github::GithubProvider, 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		providers.insert("github".to_string(), Box::new(GithubProvider));
22		Self {
23			providers,
24		}
25	}
26
27	pub fn register(&mut self, provider: Box<dyn AuthenticationProvider>) {
28		self.providers.insert(provider.method().to_string(), provider);
29	}
30
31	pub fn get(&self, method: &str) -> Option<&dyn AuthenticationProvider> {
32		self.providers.get(method).map(|p| p.as_ref())
33	}
34}
35
36impl Default for AuthenticationRegistry {
37	fn default() -> Self {
38		Self::new(Clock::Real)
39	}
40}