aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Dufour <quentin@deuxfleurs.fr>2023-12-21 15:36:05 +0100
committerQuentin Dufour <quentin@deuxfleurs.fr>2023-12-21 15:36:05 +0100
commite9aabe8e82e3c3a8190c0224cd1fdf2fc4d2505a (patch)
tree950c3030d6cd58b39afe36147fb19228fe205e3d
parenta3a9f87d2c1d2f1c01ecba3a00c592e477a6b22b (diff)
downloadaerogramme-e9aabe8e82e3c3a8190c0224cd1fdf2fc4d2505a.tar.gz
aerogramme-e9aabe8e82e3c3a8190c0224cd1fdf2fc4d2505a.zip
move storage logic into the storage module
-rw-r--r--src/login/static_provider.rs20
-rw-r--r--src/storage/in_memory.rs16
2 files changed, 20 insertions, 16 deletions
diff --git a/src/login/static_provider.rs b/src/login/static_provider.rs
index 76ad6a6..b11123c 100644
--- a/src/login/static_provider.rs
+++ b/src/login/static_provider.rs
@@ -24,7 +24,7 @@ pub struct UserDatabase {
pub struct StaticLoginProvider {
user_db: watch::Receiver<UserDatabase>,
- in_memory_store: tokio::sync::Mutex<HashMap<String, Arc<storage::in_memory::MemBuilder>>>,
+ in_memory_store: storage::in_memory::MemDb,
}
pub async fn update_user_list(config: PathBuf, up: watch::Sender<UserDatabase>) -> Result<()> {
@@ -71,7 +71,7 @@ impl StaticLoginProvider {
tokio::spawn(update_user_list(config.user_list, tx));
rx.changed().await?;
- Ok(Self { user_db: rx, in_memory_store: tokio::sync::Mutex::new(HashMap::new()) })
+ Ok(Self { user_db: rx, in_memory_store: storage::in_memory::MemDb::new() })
}
}
@@ -94,13 +94,7 @@ impl LoginProvider for StaticLoginProvider {
tracing::debug!(user=%username, "fetch keys");
let storage: storage::Builder = match &user.config.storage {
- StaticStorage::InMemory => {
- let mut global_storage = self.in_memory_store.lock().await;
- global_storage
- .entry(username.to_string())
- .or_insert(storage::in_memory::MemBuilder::new(username))
- .clone()
- },
+ StaticStorage::InMemory => self.in_memory_store.builder(username).await,
StaticStorage::Garage(grgconf) => storage::garage::GarageBuilder::new(storage::garage::GarageConf {
region: grgconf.aws_region.clone(),
k2v_endpoint: grgconf.k2v_endpoint.clone(),
@@ -129,13 +123,7 @@ impl LoginProvider for StaticLoginProvider {
tracing::debug!(user=%user.username, "public_login");
let storage: storage::Builder = match &user.config.storage {
- StaticStorage::InMemory => {
- let mut global_storage = self.in_memory_store.lock().await;
- global_storage
- .entry(user.username.to_string())
- .or_insert(storage::in_memory::MemBuilder::new(&user.username))
- .clone()
- },
+ StaticStorage::InMemory => self.in_memory_store.builder(&user.username).await,
StaticStorage::Garage(grgconf) => storage::garage::GarageBuilder::new(storage::garage::GarageConf {
region: grgconf.aws_region.clone(),
k2v_endpoint: grgconf.k2v_endpoint.clone(),
diff --git a/src/storage/in_memory.rs b/src/storage/in_memory.rs
index 00eedab..fb6e599 100644
--- a/src/storage/in_memory.rs
+++ b/src/storage/in_memory.rs
@@ -9,6 +9,22 @@ use tokio::sync::Notify;
/// It means that when a user disconnects, its data are lost.
/// It's intended only for basic debugging, do not use it for advanced tests...
+#[derive(Debug, Default)]
+pub struct MemDb(tokio::sync::Mutex<HashMap<String, Arc<MemBuilder>>>);
+impl MemDb {
+ pub fn new() -> Self {
+ Self(tokio::sync::Mutex::new(HashMap::new()))
+ }
+
+ pub async fn builder(&self, username: &str) -> Arc<MemBuilder> {
+ let mut global_storage = self.0.lock().await;
+ global_storage
+ .entry(username.to_string())
+ .or_insert(MemBuilder::new(username))
+ .clone()
+ }
+}
+
#[derive(Debug, Clone)]
enum InternalData {
Tombstone,