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!
+
+
+
+Now, head on over to the login page and get watchin'!
+
+{% endblock %}