aboutsummaryrefslogtreecommitdiff
path: root/src/db.rs
diff options
context:
space:
mode:
authorCurly Bryce <curlybryce@protonmail.com>2024-07-03 15:24:45 -0600
committerCurly Bryce <curlybryce@protonmail.com>2024-07-03 15:24:45 -0600
commit723ea13a55af719a920b445d9c8cda0c2545c682 (patch)
tree53ee782a02e04e4a4b296975bee4a70b57b2c801 /src/db.rs
parent97bc774cac822a725d39a9d72dec10ce04394742 (diff)
downloadpoko_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.rs47
1 files changed, 39 insertions, 8 deletions
diff --git a/src/db.rs b/src/db.rs
index 43a2cc7..a609fe5 100644
--- a/src/db.rs
+++ b/src/db.rs
@@ -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
+ }
}