From c06632d0dfdb19e047ae1175a46b926e6772650f Mon Sep 17 00:00:00 2001 From: Curly Bryce Date: Wed, 3 Jul 2024 19:13:13 -0600 Subject: Serialize, Deserialize UID to make coding easier --- src/main.rs | 88 ++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 46 insertions(+), 42 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 709b5b3..aad989f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,10 +8,7 @@ use tokio::sync::Mutex; use uid::UID; mod db; -use db::DB; -use db::User; -use db::Config; -use db::Token; +use db::{DB, User, Config, Token, Color}; #[get("/")] async fn index() -> &'static str { @@ -21,36 +18,36 @@ async fn index() -> &'static str { #[derive(Serialize)] struct AuthUserOut { name: String, - id: String, + id: UID, tokovec: Vec, } impl Into for User { fn into(self) -> AuthUserOut { - AuthUserOut { name: self.get_name(), id: self.hex_id(), tokovec: self.get_tokovec() } + AuthUserOut { name: self.get_name(), id: self.get_id(), tokovec: self.get_tokovec() } } } #[derive(Serialize)] struct UserOut { name: String, - id: String, + id: UID, } impl Into for User { fn into(self) -> UserOut { - UserOut { name: self.get_name(), id: self.hex_id() } + UserOut { name: self.get_name(), id: self.get_id() } } } #[post("/get", data="", format="json")] async fn get_user_authenticated(data: Json, db: &State>) -> (Status, Result, Json>) { let db = db.lock().await; - match db.get_user_authenticated(&data.id, &data.session).await { + match db.get_user_authenticated(data.id, &data.session).await { Ok(n) => (Status::Ok, Ok(Json(n.clone().into()))), Err(n) => (Status::NotFound, Err(n.into())) } } #[get("/")] -async fn get_user(user: &str, db: &State>) -> (Status, Result, Json>) { +async fn get_user(user: UID, db: &State>) -> (Status, Result, Json>) { let db = db.lock().await; - match db.get_user(user).await { + match db.get_user(user) { Ok(n) => (Status::Ok, Ok(Json(n.clone().into()))), Err(n) => (Status::NotFound, Err(n.into())) } @@ -73,22 +70,22 @@ async fn get_all_users(db: &State>) -> (Status, Result String { - "random".into() +fn default_id() -> UID { + uid::EMPTY_UID } #[derive(Deserialize)] struct UserForm { name: String, password: String, #[serde(default = "default_id")] - id: String, + id: UID, } #[post("/register", data="", format="json")] async fn new_user(data: Json, db: &State>) -> (Status, Result<(), Json>) { let mut db = db.lock().await; let id; - if data.id == "random".to_string() { + if data.id == uid::EMPTY_UID { match db.uid_generator.new_uid() { // Gotten a new UID to make a new user with Ok(n) => id = Some(n), @@ -96,25 +93,18 @@ async fn new_user(data: Json, db: &State>) -> (Status, Resul Err(n) => return (Status::InternalServerError, Err(n.clone().into())), }; } else { - match UID::from(data.id.clone()) { - // Could not make UID from input - Err(n) => return (Status::BadRequest, Err(n.into())), - // Made a UID - Ok(n) => { - if db.uid_generator.is_taken(n) { - // UID is taken - return (Status::BadRequest, Err("UID is taken".to_string().into())); - } else { - // UID is not taken - match db.uid_generator.add_uid(n) { - // Could not add UID for some reason - Err(n) => return (Status::InternalServerError, Err(n.into())), - // Made - Ok(n) => id = Some(n), - }; - } - }, - }; + if db.uid_generator.is_taken(data.id) { + // UID is taken + return (Status::BadRequest, Err("UID is taken".to_string().into())); + } else { + // UID is not taken + match db.uid_generator.add_uid(data.id) { + // Could not add UID for some reason + Err(n) => return (Status::InternalServerError, Err(n.into())), + // Made + Ok(n) => id = Some(n), + }; + } } match id { @@ -132,14 +122,14 @@ async fn new_user(data: Json, db: &State>) -> (Status, Resul #[derive(Deserialize)] struct LoginForm { - id: String, + id: UID, password: String, clientid: String, } #[post("/login", data="", format="json", rank=2)] async fn login(data: Json, db: &State>) -> (Status, Json) { let mut db = db.lock().await; - match db.login(&data.id, &data.password, &data.clientid).await { + match db.login(data.id, &data.password, &data.clientid).await { Ok(n) => (Status::Ok, n.into()), Err(n) => (Status::Unauthorized, n.into()), } @@ -147,13 +137,13 @@ async fn login(data: Json, db: &State>) -> (Status, Json, db: &State>) -> (Status, Result<(), Json>) { let mut db = db.lock().await; - match db.logout(&data.id, &data.session).await { + match db.logout(data.id, &data.session).await { Ok(_) => (Status::Ok, Ok(())), Err(n) => (Status::Unauthorized, Err(n.into())), } @@ -161,7 +151,7 @@ async fn logout(data: Json, db: &State>) -> (Status, Resul #[post("/logout/all", data="", format="json")] async fn logout_all(data: Json, db: &State>) -> (Status, Result, Json>) { let mut db = db.lock().await; - match db.logout_all(&data.id, &data.session).await { + match db.logout_all(data.id, &data.session).await { Ok(n) => (Status::Ok, Ok(n.into())), Err(n) => (Status::Unauthorized, Err(n.into())), } @@ -169,7 +159,7 @@ async fn logout_all(data: Json, db: &State>) -> (Status, R #[post("/sessions", data="", format="json")] async fn get_sessions(data: Json, db: &State>) -> (Status, Result>, Json>) { let db = db.lock().await; - match db.get_sessions(&data.id, &data.session).await { + match db.get_sessions(data.id, &data.session).await { Ok(n) => (Status::Ok, Ok(n.into())), Err(n) => (Status::Unauthorized, Err(n.into())), } @@ -178,16 +168,30 @@ async fn get_sessions(data: Json, db: &State>) -> (Status, #[post("/delete", data="", format="json")] async fn delete(data: Json, db: &State>) -> (Status, Result, Json>) { let mut db = db.lock().await; - match db.delete_user(&data.id, &data.session).await { + match db.delete_user(data.id, &data.session).await { Ok(n) => (Status::Ok, Ok(n.into())), Err(n) => (Status::Unauthorized, Err(n.into())), } } +#[derive(Deserialize, Debug)] +struct TransferForm { + id: UID, + session: String, + to: UID, + color: Color, + amount: usize, +} +#[post("/out", data="", format="json")] +async fn transfer_out(data: Json, db: &State>) -> (Status, Result<(), String>) { + println!("{:?}", data); + (Status::Ok, Ok(())) +} + #[launch] fn rocket() -> _ { rocket::build().manage(Mutex::new(DB::load(Config::new()))) .mount("/", routes![index]) .mount("/user", routes![login, get_users_by_name, get_user_authenticated, get_user, new_user, get_all_users, logout, logout_all, get_sessions, delete]) - .mount("/transfer", routes![]) + .mount("/transfer", routes![transfer_out]) } \ No newline at end of file -- cgit v1.2.3