mirror of
https://github.com/mCaptcha/mCaptcha.git
synced 2026-02-11 18:15:39 +00:00
feat: migrate user regisration to use db_*
This commit is contained in:
@@ -18,6 +18,7 @@
|
|||||||
use actix_identity::Identity;
|
use actix_identity::Identity;
|
||||||
use actix_web::http::header;
|
use actix_web::http::header;
|
||||||
use actix_web::{web, HttpResponse, Responder};
|
use actix_web::{web, HttpResponse, Responder};
|
||||||
|
use db_core::errors::DBError;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use super::mcaptcha::get_random;
|
use super::mcaptcha::get_random;
|
||||||
@@ -166,48 +167,21 @@ pub mod runners {
|
|||||||
|
|
||||||
loop {
|
loop {
|
||||||
secret = get_random(32);
|
secret = get_random(32);
|
||||||
let res;
|
|
||||||
if let Some(email) = &payload.email {
|
let p = db_core::Register {
|
||||||
res = sqlx::query!(
|
username: &username,
|
||||||
"insert into mcaptcha_users
|
hash: &hash,
|
||||||
(name , password, email, secret) values ($1, $2, $3, $4)",
|
email: payload.email.as_ref().map(|s| s.as_str()),
|
||||||
&username,
|
secret: &secret,
|
||||||
&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 if let Err(sqlx::Error::Database(err)) = res {
|
|
||||||
if err.code() == Some(Cow::from("23505")) {
|
|
||||||
let msg = err.message();
|
|
||||||
if msg.contains("mcaptcha_users_name_key") {
|
|
||||||
return Err(ServiceError::UsernameTaken);
|
|
||||||
} else if msg.contains("mcaptcha_users_email_key") {
|
|
||||||
return Err(ServiceError::EmailTaken);
|
|
||||||
} else if msg.contains("mcaptcha_users_secret_key") {
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
return Err(ServiceError::InternalServerError);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return Err(sqlx::Error::Database(err).into());
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
match data.dblib.register(&p).await {
|
||||||
|
Ok(_) => break,
|
||||||
|
Err(DBError::SecretTaken) => continue,
|
||||||
|
Err(e) => return Err(e.into()),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -150,6 +150,10 @@ pub async fn bad_post_req_test<T: Serialize>(
|
|||||||
.to_request(),
|
.to_request(),
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
if resp.status() != err.status_code() {
|
||||||
|
let resp_err: ErrorToResponse = test::read_body_json(resp).await;
|
||||||
|
panic!("error {}", resp_err.error);
|
||||||
|
}
|
||||||
assert_eq!(resp.status(), err.status_code());
|
assert_eq!(resp.status(), err.status_code());
|
||||||
let resp_err: ErrorToResponse = test::read_body_json(resp).await;
|
let resp_err: ErrorToResponse = test::read_body_json(resp).await;
|
||||||
//println!("{}", txt.error);
|
//println!("{}", txt.error);
|
||||||
|
|||||||
Reference in New Issue
Block a user