aboutsummaryrefslogtreecommitdiff
path: root/src/main.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/main.rs
parent97bc774cac822a725d39a9d72dec10ce04394742 (diff)
downloadpoko_server-723ea13a55af719a920b445d9c8cda0c2545c682.tar.gz
poko_server-723ea13a55af719a920b445d9c8cda0c2545c682.tar.bz2
poko_server-723ea13a55af719a920b445d9c8cda0c2545c682.zip
full session management
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/main.rs b/src/main.rs
index 281b63b..22c096d 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -31,7 +31,7 @@ impl Into<UserOut> for User {
#[get("/<user>")]
async fn get_user(user: &str, db: &State<Mutex<DB>>) -> (Status, Result<Json<UserOut>, Json<String>>) {
- let mut db = db.lock().await;
+ let db = db.lock().await;
match db.get_user(user).await {
Ok(n) => (Status::Ok, Ok(Json(n.clone().into()))),
Err(n) => (Status::NotFound, Err(n.into()))
@@ -133,11 +133,27 @@ struct LogoutForm {
sessionhash: String,
}
#[post("/logout", data="<data>", format="json")]
-async fn logout(data: Json<LogoutForm>, db: &State<Mutex<DB>>) -> (Status, Result<(), String>) {
+async fn logout(data: Json<LogoutForm>, db: &State<Mutex<DB>>) -> (Status, Result<(), Json<String>>) {
let mut db = db.lock().await;
match db.logout(&data.id, &data.sessionhash).await {
Ok(_) => (Status::Ok, Ok(())),
- Err(n) => (Status::Unauthorized, Err(n)),
+ Err(n) => (Status::Unauthorized, Err(n.into())),
+ }
+}
+#[post("/logout/all", data="<data>", format="json")]
+async fn logout_all(data: Json<LogoutForm>, db: &State<Mutex<DB>>) -> (Status, Result<Json<String>, Json<String>>) {
+ let mut db = db.lock().await;
+ match db.logout_all(&data.id, &data.sessionhash).await {
+ Ok(n) => (Status::Ok, Ok(n.into())),
+ Err(n) => (Status::Unauthorized, Err(n.into())),
+ }
+}
+#[post("/sessions", data="<data>", format="json")]
+async fn get_sessions(data: Json<LogoutForm>, db: &State<Mutex<DB>>) -> (Status, Result<Json<Vec<(String, String)>>, Json<String>>) {
+ let db = db.lock().await;
+ match db.get_sessions(&data.id, &data.sessionhash).await {
+ Ok(n) => (Status::Ok, Ok(n.into())),
+ Err(n) => (Status::Unauthorized, Err(n.into())),
}
}
@@ -145,5 +161,5 @@ async fn logout(data: Json<LogoutForm>, db: &State<Mutex<DB>>) -> (Status, Resul
fn rocket() -> _ {
rocket::build().manage(Mutex::new(DB::load(Config::new())))
.mount("/", routes![index])
- .mount("/user", routes![login, get_users_by_name, get_user, new_user, get_all_users, logout])
+ .mount("/user", routes![login, get_users_by_name, get_user, new_user, get_all_users, logout, logout_all, get_sessions])
} \ No newline at end of file