Create Account endpoint works
This commit is contained in:
@@ -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>(
|
||||||
|
|||||||
@@ -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()
|
||||||
|
}
|
||||||
|
|||||||
22
src/main.rs
22
src/main.rs
@@ -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(),
|
||||||
|
|||||||
Reference in New Issue
Block a user