aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs88
1 files changed, 46 insertions, 42 deletions
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<Token>,
}
impl Into<AuthUserOut> 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<UserOut> 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="<data>", format="json")]
async fn get_user_authenticated(data: Json<LogoutForm>, db: &State<Mutex<DB>>) -> (Status, Result<Json<AuthUserOut>, Json<String>>) {
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("/<user>")]
-async fn get_user(user: &str, db: &State<Mutex<DB>>) -> (Status, Result<Json<UserOut>, Json<String>>) {
+async fn get_user(user: UID, db: &State<Mutex<DB>>) -> (Status, Result<Json<UserOut>, Json<String>>) {
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<Mutex<DB>>) -> (Status, Result<Json<Vec<UserOu
}
}
-fn default_id() -> 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="<data>", format="json")]
async fn new_user(data: Json<UserForm>, db: &State<Mutex<DB>>) -> (Status, Result<(), Json<String>>) {
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<UserForm>, db: &State<Mutex<DB>>) -> (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<UserForm>, db: &State<Mutex<DB>>) -> (Status, Resul
#[derive(Deserialize)]
struct LoginForm {
- id: String,
+ id: UID,
password: String,
clientid: String,
}
#[post("/login", data="<data>", format="json", rank=2)]
async fn login(data: Json<LoginForm>, db: &State<Mutex<DB>>) -> (Status, Json<String>) {
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<LoginForm>, db: &State<Mutex<DB>>) -> (Status, Json<St
#[derive(Deserialize)]
struct LogoutForm {
- id: String,
+ id: UID,
session: String,
}
#[post("/logout", data="<data>", format="json")]
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.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<LogoutForm>, db: &State<Mutex<DB>>) -> (Status, Resul
#[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.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<LogoutForm>, db: &State<Mutex<DB>>) -> (Status, R
#[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.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<LogoutForm>, db: &State<Mutex<DB>>) -> (Status,
#[post("/delete", data="<data>", format="json")]
async fn delete(data: Json<LogoutForm>, db: &State<Mutex<DB>>) -> (Status, Result<Json<String>, Json<String>>) {
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="<data>", format="json")]
+async fn transfer_out(data: Json<TransferForm>, db: &State<Mutex<DB>>) -> (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