diff options
author | Curly Bryce <curlybryce@protonmail.com> | 2024-07-03 15:24:45 -0600 |
---|---|---|
committer | Curly Bryce <curlybryce@protonmail.com> | 2024-07-03 15:24:45 -0600 |
commit | 723ea13a55af719a920b445d9c8cda0c2545c682 (patch) | |
tree | 53ee782a02e04e4a4b296975bee4a70b57b2c801 /src/db.rs | |
parent | 97bc774cac822a725d39a9d72dec10ce04394742 (diff) | |
download | poko_server-723ea13a55af719a920b445d9c8cda0c2545c682.tar.gz poko_server-723ea13a55af719a920b445d9c8cda0c2545c682.tar.bz2 poko_server-723ea13a55af719a920b445d9c8cda0c2545c682.zip |
full session management
Diffstat (limited to 'src/db.rs')
-rw-r--r-- | src/db.rs | 47 |
1 files changed, 39 insertions, 8 deletions
@@ -81,14 +81,21 @@ impl User { } } - fn clear_sessions(&mut self) { - self.sessions.clear() + fn clear_sessions(&mut self, session: &String) { + if self.authenticate(session) { + self.sessions.clear() + } } - fn get_sessions(&mut self) -> Vec<(String, String)> { - self.sessions.iter().map(|(k, v)| { - (k.clone(), v.clone()) - }).collect() + fn get_sessions(&self, session: &String) -> Result<Vec<(String, String)>, String> { + if self.authenticate(session) { + let v = self.sessions.iter().map(|(k, v)| { + (k.clone(), v.clone()) + }).collect(); + Ok(v) + } else { + Err("Not Authenticated".into()) + } } fn login(&mut self, password: &String, clientid: &String) -> Result<String, String> { @@ -169,10 +176,10 @@ impl DB { DB { uid_generator: uid::Generator::new(), users: vec![], config } } - pub async fn get_user(&mut self, id: &str) -> Result<&User, String> { + pub async fn get_user(&self, id: &str) -> Result<&User, String> { match UID::from(id.to_string()) { Ok(n) => { - for u in self.users.iter_mut() { + for u in self.users.iter() { if u.id == n { return Ok(u) } @@ -250,4 +257,28 @@ impl DB { let _ = self.save().await; r } + pub async fn logout_all(&mut self, id: &String, session: &String) -> Result<String, String> { + let r = match self.get_mut_user(id).await { + Ok(n) => { + n.clear_sessions(session); + Ok("Logged out of everything".into()) + }, + Err(n) => Err(n) + }; + + let _ = self.save().await; + r + } + + pub async fn get_sessions(&self, id: &String, session: &String) -> Result<Vec<(String, String)>, String> { + let r = match self.get_user(id).await { + Ok(n) => { + n.get_sessions(session) + }, + Err(n) => Err(n) + }; + + let _ = self.save().await; + r + } } |