diff options
author | Quentin Dufour <quentin@deuxfleurs.fr> | 2023-12-08 18:13:00 +0100 |
---|---|---|
committer | Quentin Dufour <quentin@deuxfleurs.fr> | 2023-12-08 18:13:00 +0100 |
commit | 532c99f3d30ab8adc0963f0814ce3151e1b61caf (patch) | |
tree | 5127fd43a7cf06275caf18879c589d2cc142fcc9 | |
parent | cf18eb8afb76a25150c885c6cf525aedcc25facc (diff) | |
download | aerogramme-532c99f3d30ab8adc0963f0814ce3151e1b61caf.tar.gz aerogramme-532c99f3d30ab8adc0963f0814ce3151e1b61caf.zip |
rework static login provider
-rw-r--r-- | src/config.rs | 1 | ||||
-rw-r--r-- | src/login/static_provider.rs | 20 |
2 files changed, 14 insertions, 7 deletions
diff --git a/src/config.rs b/src/config.rs index 85d38aa..876091f 100644 --- a/src/config.rs +++ b/src/config.rs @@ -124,6 +124,7 @@ pub struct UserEntry { pub email_addresses: Vec<String>, pub password: String, + #[serde(flatten)] pub crypto_root: CryptographyRoot, #[serde(flatten)] diff --git a/src/login/static_provider.rs b/src/login/static_provider.rs index d0a4624..0f6ab3a 100644 --- a/src/login/static_provider.rs +++ b/src/login/static_provider.rs @@ -19,12 +19,17 @@ pub struct StaticLoginProvider { impl StaticLoginProvider { pub fn new(config: LoginStaticConfig) -> Result<Self> { let mut lp = Self { - user_list: config.user_list, + user_list: config.user_list.clone(), users: HashMap::new(), users_by_email: HashMap::new(), }; - lp.update_user_list(); + lp + .update_user_list() + .context( + format!( + "failed to read {:?}, make sure it exists and it's correctly formatted", + config.user_list))?; Ok(lp) } @@ -32,17 +37,18 @@ impl StaticLoginProvider { pub fn update_user_list(&mut self) -> Result<()> { let ulist: UserList = read_config(self.user_list.clone())?; - let users = ulist + self.users = ulist .into_iter() .map(|(k, v)| (k, Arc::new(v))) .collect::<HashMap<_, _>>(); - let mut users_by_email = HashMap::new(); - for (_, u) in users.iter() { + + self.users_by_email.clear(); + for (_, u) in self.users.iter() { for m in u.email_addresses.iter() { - if users_by_email.contains_key(m) { + if self.users_by_email.contains_key(m) { bail!("Several users have same email address: {}", m); } - users_by_email.insert(m.clone(), u.clone()); + self.users_by_email.insert(m.clone(), u.clone()); } } Ok(()) |