From 82203d9a4163d58e6f22d84c19cc2446978a3714 Mon Sep 17 00:00:00 2001 From: Cameron Cordes Date: Wed, 8 Jul 2020 09:19:27 -0400 Subject: [PATCH] Create Account endpoint works --- src/data/mod.rs | 6 +----- src/database/mod.rs | 11 +++++++++++ src/main.rs | 22 +++++++++++++++------- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/data/mod.rs b/src/data/mod.rs index 44f4d0a..e8bde2c 100644 --- a/src/data/mod.rs +++ b/src/data/mod.rs @@ -20,11 +20,7 @@ impl FromStr for Claims { type Err = jsonwebtoken::errors::Error; fn from_str(s: &str) -> Result { - let token = *(s - .split("Bearer ") - .collect::>() - .last() - .unwrap_or(&"")); + let token = *(s.split("Bearer ").collect::>().last().unwrap_or(&"")); println!("Parsing token: '{}'", token); match decode::( diff --git a/src/database/mod.rs b/src/database/mod.rs index f345735..66afe58 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -57,3 +57,14 @@ pub fn get_user(user: &str, pass: &str) -> Option { _ => None, } } + +pub fn user_exists(name: &str) -> bool { + use schema::users::dsl::*; + + users + .filter(username.eq(name)) + .load::(&connect()) + .unwrap_or_default() + .first() + .is_some() +} diff --git a/src/main.rs b/src/main.rs index 88b8e82..428ad0e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,8 +8,8 @@ use data::{LoginRequest, ThumbnailRequest}; use jsonwebtoken::{encode, EncodingKey, Header}; use std::path::PathBuf; -use crate::data::{Claims, Token}; -use crate::database::{create_user, get_user}; +use crate::data::{Claims, CreateAccountRequest, Token}; +use crate::database::{create_user, get_user, user_exists}; use crate::files::list_files; mod data; @@ -17,10 +17,18 @@ mod database; mod files; #[post("/register")] -async fn register() -> impl Responder { - create_user("u", "p"); - println!("{:?}", get_user("u", "p")); - "".to_owned() +async fn register(user: Json) -> impl Responder { + if !user.username.is_empty() && user.password.len() > 5 && user.password == user.confirmation { + if user_exists(&user.username) { + HttpResponse::BadRequest() + } else if let Some(_user) = create_user(&user.username, &user.password) { + HttpResponse::Ok() + } else { + HttpResponse::InternalServerError() + } + } else { + HttpResponse::BadRequest() + } } #[post("/login")] @@ -28,7 +36,7 @@ async fn login(creds: Json) -> impl Responder { if let Some(user) = get_user(&creds.username, &creds.password) { let claims = Claims { sub: user.id.to_string(), - exp: (Utc::now() + Duration::seconds(30)).timestamp(), + exp: (Utc::now() + Duration::days(3)).timestamp(), }; let token = encode( &Header::default(),