feat: implement fetching password with either username or email

This commit is contained in:
realaravinth
2022-05-11 18:30:01 +05:30
parent 7e2be86c12
commit d9b36179d1

View File

@@ -103,9 +103,8 @@ impl MCDatabase for Database {
/// register a new user /// register a new user
async fn register(&self, p: &Register) -> DBResult<()> { async fn register(&self, p: &Register) -> DBResult<()> {
let res; let res = if let Some(email) = &p.email {
if let Some(email) = &p.email { sqlx::query!(
res = sqlx::query!(
"insert into mcaptcha_users "insert into mcaptcha_users
(name , password, email, secret) values ($1, $2, $3, $4)", (name , password, email, secret) values ($1, $2, $3, $4)",
&p.username, &p.username,
@@ -114,9 +113,9 @@ impl MCDatabase for Database {
&p.secret, &p.secret,
) )
.execute(&self.pool) .execute(&self.pool)
.await; .await
} else { } else {
res = sqlx::query!( sqlx::query!(
"INSERT INTO mcaptcha_users "INSERT INTO mcaptcha_users
(name , password, secret) VALUES ($1, $2, $3)", (name , password, secret) VALUES ($1, $2, $3)",
&p.username, &p.username,
@@ -124,7 +123,7 @@ impl MCDatabase for Database {
&p.secret, &p.secret,
) )
.execute(&self.pool) .execute(&self.pool)
.await; .await
}; };
res.map_err(map_register_err)?; res.map_err(map_register_err)?;
Ok(()) Ok(())
@@ -190,19 +189,30 @@ impl MCDatabase for Database {
} }
/// get a user's password /// get a user's password
async fn get_password(&self, username: &str) -> DBResult<String> { async fn get_password(&self, l: &Login) -> DBResult<String> {
struct Password { struct Password {
password: String, password: String,
} }
let rec = sqlx::query_as!( let rec = match l {
Login::Username(u) => sqlx::query_as!(
Password, Password,
r#"SELECT password FROM mcaptcha_users WHERE name = ($1)"#, r#"SELECT password FROM mcaptcha_users WHERE name = ($1)"#,
username, u,
) )
.fetch_one(&self.pool) .fetch_one(&self.pool)
.await .await
.map_err(map_register_err)?; .map_err(map_register_err)?,
Login::Email(e) => sqlx::query_as!(
Password,
r#"SELECT password FROM mcaptcha_users WHERE email = ($1)"#,
e,
)
.fetch_one(&self.pool)
.await
.map_err(map_register_err)?,
};
Ok(rec.password) Ok(rec.password)
} }