From 569b19e8373110fb12021c488309169afd8c117c Mon Sep 17 00:00:00 2001 From: Joe Ardent Date: Fri, 2 Jun 2023 14:15:13 -0700 Subject: [PATCH] Minor tweaks. --- src/generic_handlers.rs | 2 +- src/login.rs | 5 +++-- src/signup.rs | 22 ++++++++++++++++------ src/templates.rs | 12 ++++++------ 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/generic_handlers.rs b/src/generic_handlers.rs index 5d2c89c..09e0cd1 100644 --- a/src/generic_handlers.rs +++ b/src/generic_handlers.rs @@ -19,7 +19,7 @@ pub async fn handle_slash(auth: AuthContext) -> impl IntoResponse { } #[cfg(test)] -mod tests { +mod test { use axum_test::TestServer; use crate::db; diff --git a/src/login.rs b/src/login.rs index 465033e..c89c00b 100644 --- a/src/login.rs +++ b/src/login.rs @@ -39,11 +39,12 @@ pub enum LoginErrorKind { impl IntoResponse for LoginError { fn into_response(self) -> Response { match self.0 { - LoginErrorKind::Unknown | LoginErrorKind::Internal => ( + LoginErrorKind::Internal => ( StatusCode::INTERNAL_SERVER_ERROR, "An unknown error occurred; you cursed, brah?", ) .into_response(), + LoginErrorKind::Unknown => (StatusCode::OK, "Not successful.").into_response(), _ => (StatusCode::OK, format!("{self}")).into_response(), } } @@ -79,7 +80,7 @@ pub async fn post_login( .await .map_err(|_| LoginErrorKind::Internal)?; - Ok(Redirect::temporary("/")) + Ok(Redirect::to("/")) } _ => Err(LoginErrorKind::BadPassword.into()), } diff --git a/src/signup.rs b/src/signup.rs index f32a47f..0fc696e 100644 --- a/src/signup.rs +++ b/src/signup.rs @@ -78,8 +78,11 @@ pub async fn post_create_user( let email = &signup.email; let password = &signup.password; let verify = &signup.pw_verify; - let username = username.trim(); + let username = urlencoding::decode(username) + .map_err(|_| CreateUserErrorKind::BadUsername)? + .to_string(); + let username = username.trim(); let name_len = username.graphemes(true).size_hint().1.unwrap(); // we are not ascii exclusivists around here if !(1..=20).contains(&name_len) { @@ -165,7 +168,7 @@ pub async fn handle_signup_success( // private fns //-************************************************************************ -async fn create_user( +pub(crate) async fn create_user( username: &str, displayname: &Option, email: &Option, @@ -181,14 +184,21 @@ async fn create_user( .to_string(); let id = Uuid::new_v4(); - let res = sqlx::query(CREATE_QUERY) + let query = sqlx::query(CREATE_QUERY) .bind(id) .bind(username) .bind(displayname) .bind(email) - .bind(&pwhash) - .execute(pool) - .await; + .bind(&pwhash); + + let res = { + let txn = pool.begin().await.expect("Could not beign transaction"); + let r = query.execute(pool).await; + txn.commit() + .await + .expect("Should be able to commit transaction"); + r + }; match res { Ok(_) => { diff --git a/src/templates.rs b/src/templates.rs index a40b25d..45ed268 100644 --- a/src/templates.rs +++ b/src/templates.rs @@ -3,7 +3,7 @@ use serde::{Deserialize, Serialize}; use crate::User; -#[derive(Debug, Default, Template, Deserialize, Serialize)] +#[derive(Debug, Default, Template, Deserialize, Serialize, PartialEq, Eq)] #[template(path = "signup.html")] pub struct CreateUser { pub username: String, @@ -13,29 +13,29 @@ pub struct CreateUser { pub pw_verify: String, } -#[derive(Debug, Default, Template, Deserialize, Serialize)] +#[derive(Debug, Default, Template, Deserialize, Serialize, PartialEq, Eq)] #[template(path = "login_post.html")] pub struct LoginPost { pub username: String, pub password: String, } -#[derive(Debug, Default, Template, Deserialize, Serialize)] +#[derive(Debug, Default, Template, Deserialize, Serialize, PartialEq, Eq)] #[template(path = "login_get.html")] pub struct LoginGet { pub username: String, pub password: String, } -#[derive(Debug, Default, Template, Deserialize, Serialize)] +#[derive(Debug, Default, Template, Deserialize, Serialize, PartialEq, Eq)] #[template(path = "logout_get.html")] pub struct LogoutGet; -#[derive(Debug, Default, Template, Deserialize, Serialize)] +#[derive(Debug, Default, Template, Deserialize, Serialize, PartialEq, Eq)] #[template(path = "logout_post.html")] pub struct LogoutPost; -#[derive(Debug, Default, Template, Deserialize, Serialize)] +#[derive(Debug, Default, Template, Deserialize, Serialize, PartialEq, Eq)] #[template(path = "index.html")] pub struct Index { pub user: Option,