diff --git a/migrations/20210310122154_mcaptcha_users.sql b/migrations/20210310122154_mcaptcha_users.sql index 09a59c35..5054c5d2 100644 --- a/migrations/20210310122154_mcaptcha_users.sql +++ b/migrations/20210310122154_mcaptcha_users.sql @@ -1,6 +1,6 @@ CREATE TABLE IF NOT EXISTS mcaptcha_users ( name VARCHAR(100) NOT NULL UNIQUE, - email VARCHAR(100) NOT NULL UNIQUE, + email VARCHAR(100) UNIQUE DEFAULT NULL, secret varchar(50) NOT NULL UNIQUE, password TEXT NOT NULL, ID SERIAL PRIMARY KEY NOT NULL diff --git a/src/api/v1/auth.rs b/src/api/v1/auth.rs index 194b581a..955e108d 100644 --- a/src/api/v1/auth.rs +++ b/src/api/v1/auth.rs @@ -29,7 +29,7 @@ use crate::Data; pub struct Register { pub username: String, pub password: String, - pub email: String, + pub email: Option, } #[derive(Clone, Debug, Deserialize, Serialize)] @@ -53,22 +53,44 @@ pub async fn signup( } let username = data.creds.username(&payload.username)?; let hash = data.creds.password(&payload.password)?; - data.creds.email(Some(&payload.email))?; + // let payload = payload.into_inner(); + // let email = payload.email.clone(); + // if payload.email.is_some() { + // let email = email.clone().unwrap(); + // data.creds.email(Some(&email))?; + // } + + if let Some(email) = &payload.email { + data.creds.email(Some(&email))?; + } let mut secret; loop { secret = get_random(32); - let res = sqlx::query!( - "INSERT INTO mcaptcha_users + let res; + if let Some(email) = &payload.email { + res = sqlx::query!( + "INSERT INTO mcaptcha_users (name , password, email, secret) VALUES ($1, $2, $3, $4)", - &username, - &hash, - &payload.email, - &secret, - ) - .execute(&data.db) - .await; + &username, + &hash, + &email, + &secret, + ) + .execute(&data.db) + .await; + } else { + res = sqlx::query!( + "INSERT INTO mcaptcha_users + (name , password, secret) VALUES ($1, $2, $3)", + &username, + &hash, + &secret, + ) + .execute(&data.db) + .await; + } if res.is_ok() { break; } else { diff --git a/src/api/v1/tests/auth.rs b/src/api/v1/tests/auth.rs index 1715a496..9372cc87 100644 --- a/src/api/v1/tests/auth.rs +++ b/src/api/v1/tests/auth.rs @@ -39,6 +39,17 @@ async fn auth_works() { delete_user(NAME, &data).await; + // 1. Register with email == None + let msg = Register { + username: NAME.into(), + password: PASSWORD.into(), + email: None, + }; + let resp = test::call_service(&mut app, post_request!(&msg, SIGNUP).to_request()).await; + assert_eq!(resp.status(), StatusCode::OK); + // delete user + delete_user(NAME, &data).await; + // 1. Register and signin let (_, _, signin_resp) = register_and_signin(NAME, EMAIL, PASSWORD).await; let cookies = get_cookie!(signin_resp); @@ -69,7 +80,7 @@ async fn auth_works() { let msg = Register { username: NAME.into(), password: PASSWORD.into(), - email: EMAIL.into(), + email: Some(EMAIL.into()), }; bad_post_req_test( NAME, diff --git a/src/tests/mod.rs b/src/tests/mod.rs index bcec4113..c13175c4 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -76,7 +76,7 @@ pub async fn register<'a>(name: &'a str, email: &str, password: &str) { let msg = Register { username: name.into(), password: password.into(), - email: email.into(), + email: Some(email.into()), }; let resp = test::call_service(&mut app, post_request!(&msg, "/api/v1/signup").to_request()).await;