Create Account endpoint works

This commit is contained in:
Cameron Cordes
2020-07-08 09:19:27 -04:00
parent e3bb607d95
commit 82203d9a41
3 changed files with 27 additions and 12 deletions

View File

@@ -20,11 +20,7 @@ impl FromStr for Claims {
type Err = jsonwebtoken::errors::Error; type Err = jsonwebtoken::errors::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> { fn from_str(s: &str) -> Result<Self, Self::Err> {
let token = *(s let token = *(s.split("Bearer ").collect::<Vec<_>>().last().unwrap_or(&""));
.split("Bearer ")
.collect::<Vec<_>>()
.last()
.unwrap_or(&""));
println!("Parsing token: '{}'", token); println!("Parsing token: '{}'", token);
match decode::<Claims>( match decode::<Claims>(

View File

@@ -57,3 +57,14 @@ pub fn get_user(user: &str, pass: &str) -> Option<User> {
_ => None, _ => None,
} }
} }
pub fn user_exists(name: &str) -> bool {
use schema::users::dsl::*;
users
.filter(username.eq(name))
.load::<User>(&connect())
.unwrap_or_default()
.first()
.is_some()
}

View File

@@ -8,8 +8,8 @@ use data::{LoginRequest, ThumbnailRequest};
use jsonwebtoken::{encode, EncodingKey, Header}; use jsonwebtoken::{encode, EncodingKey, Header};
use std::path::PathBuf; use std::path::PathBuf;
use crate::data::{Claims, Token}; use crate::data::{Claims, CreateAccountRequest, Token};
use crate::database::{create_user, get_user}; use crate::database::{create_user, get_user, user_exists};
use crate::files::list_files; use crate::files::list_files;
mod data; mod data;
@@ -17,10 +17,18 @@ mod database;
mod files; mod files;
#[post("/register")] #[post("/register")]
async fn register() -> impl Responder { async fn register(user: Json<CreateAccountRequest>) -> impl Responder {
create_user("u", "p"); if !user.username.is_empty() && user.password.len() > 5 && user.password == user.confirmation {
println!("{:?}", get_user("u", "p")); if user_exists(&user.username) {
"".to_owned() HttpResponse::BadRequest()
} else if let Some(_user) = create_user(&user.username, &user.password) {
HttpResponse::Ok()
} else {
HttpResponse::InternalServerError()
}
} else {
HttpResponse::BadRequest()
}
} }
#[post("/login")] #[post("/login")]
@@ -28,7 +36,7 @@ async fn login(creds: Json<LoginRequest>) -> impl Responder {
if let Some(user) = get_user(&creds.username, &creds.password) { if let Some(user) = get_user(&creds.username, &creds.password) {
let claims = Claims { let claims = Claims {
sub: user.id.to_string(), sub: user.id.to_string(),
exp: (Utc::now() + Duration::seconds(30)).timestamp(), exp: (Utc::now() + Duration::days(3)).timestamp(),
}; };
let token = encode( let token = encode(
&Header::default(), &Header::default(),