From fee7fff3df8348afe14ae9815e54b20a1c722070 Mon Sep 17 00:00:00 2001 From: Joe Ardent Date: Thu, 18 May 2023 15:49:33 -0700 Subject: [PATCH] better signup pages --- .env | 1 + src/users.rs | 24 ++++++++++++++++++++++-- templates/signup.html | 12 +++++++----- templates/signup_success.html | 16 ++++++++++++++++ 4 files changed, 46 insertions(+), 7 deletions(-) create mode 100644 .env create mode 100644 templates/signup_success.html diff --git a/.env b/.env new file mode 100644 index 0000000..04f6365 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +DATABASE_URL=sqlite://${HOME}/.witch-watch.db diff --git a/src/users.rs b/src/users.rs index 8ffedf0..3a1d4b1 100644 --- a/src/users.rs +++ b/src/users.rs @@ -1,7 +1,10 @@ +use std::fmt::Display; + use argon2::{ password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString}, Argon2, }; +use askama::Template; use axum::{ extract::{Form, State}, http::StatusCode, @@ -24,6 +27,19 @@ pub struct User { email: Option, } +impl Display for User { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let uname = &self.username; + let dname = if let Some(ref n) = self.displayname { + n + } else { + "" + }; + let email = if let Some(ref e) = self.email { e } else { "" }; + write!(f, "Username: {uname}\nDisplayname: {dname}\nEmail: {email}") + } +} + #[derive(Debug, Clone, sqlx::FromRow, sqlx::Encode)] pub(crate) struct DbUser { id: Uuid, @@ -34,6 +50,10 @@ pub(crate) struct DbUser { pwhash: String, } +#[derive(Debug, Clone, Template)] +#[template(path = "signup_success.html")] +pub struct CreateUserSuccess(User); + impl From for User { fn from(dbu: DbUser) -> Self { User { @@ -56,7 +76,7 @@ pub async fn get_create_user() -> CreateUser { pub async fn post_create_user( State(pool): State, Form(signup): Form, -) -> Result<(), CreateUserError> { +) -> Result { let username = &signup.username; let displayname = &signup.displayname; let email = &signup.email; @@ -102,7 +122,7 @@ pub async fn post_create_user( let user = create_user(username, displayname, email, password, &pool).await?; tracing::debug!("created {user:?}"); - Ok(()) + Ok(CreateUserSuccess(user)) } async fn create_user( diff --git a/templates/signup.html b/templates/signup.html index 7eea006..61b5b44 100644 --- a/templates/signup.html +++ b/templates/signup.html @@ -4,18 +4,20 @@ {% block content %} +

- +
- +
- +
- +
- +
+

{% endblock %} diff --git a/templates/signup_success.html b/templates/signup_success.html new file mode 100644 index 0000000..f8e9efc --- /dev/null +++ b/templates/signup_success.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} + +{% block title %}Thanks for Signing Up for Witch Watch, Bish{% endblock %} + +{% block content %} + +

You did it!

+ +

+{{ self.0 }} +

+
+ +

Now, head on over to the login page and get watchin'!

+ +{% endblock %}