mirror of
https://github.com/mCaptcha/mCaptcha.git
synced 2025-03-29 04:38:59 +03:00
feat: migrate captcha exists to use db_* interface
This commit is contained in:
parent
0bb975a230
commit
81ad030338
4 changed files with 56 additions and 56 deletions
|
@ -108,26 +108,6 @@
|
||||||
},
|
},
|
||||||
"query": "SELECT time FROM mcaptcha_pow_confirmed_stats \n WHERE \n config_id = (\n SELECT config_id FROM mcaptcha_config \n WHERE \n key = $1\n AND\n user_id = (\n SELECT \n ID FROM mcaptcha_users WHERE name = $2))\n ORDER BY time DESC"
|
"query": "SELECT time FROM mcaptcha_pow_confirmed_stats \n WHERE \n config_id = (\n SELECT config_id FROM mcaptcha_config \n WHERE \n key = $1\n AND\n user_id = (\n SELECT \n ID FROM mcaptcha_users WHERE name = $2))\n ORDER BY time DESC"
|
||||||
},
|
},
|
||||||
"4a5dfbc5aeb2bab290a09640cc25223d484fbc7549e5bc54f33bab8616725031": {
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"name": "exists",
|
|
||||||
"ordinal": 0,
|
|
||||||
"type_info": "Bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nullable": [
|
|
||||||
null
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"query": "SELECT EXISTS (SELECT 1 from mcaptcha_config WHERE key = $1)"
|
|
||||||
},
|
|
||||||
"4c3a9fe30a4c6bd49ab1cb8883c4495993aa05f2991483b4f04913b2e5043a63": {
|
"4c3a9fe30a4c6bd49ab1cb8883c4495993aa05f2991483b4f04913b2e5043a63": {
|
||||||
"describe": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
|
|
|
@ -14,8 +14,6 @@
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
use std::borrow::Cow;
|
|
||||||
|
|
||||||
use actix_identity::Identity;
|
use actix_identity::Identity;
|
||||||
use actix_web::{web, HttpResponse, Responder};
|
use actix_web::{web, HttpResponse, Responder};
|
||||||
use libmcaptcha::defense::Level;
|
use libmcaptcha::defense::Level;
|
||||||
|
@ -83,14 +81,14 @@ pub mod runner {
|
||||||
duration,
|
duration,
|
||||||
};
|
};
|
||||||
|
|
||||||
match data.dblib.create_captcha(&username, &p).await {
|
match data.dblib.create_captcha(username, &p).await {
|
||||||
Ok(_) => break,
|
Ok(_) => break,
|
||||||
Err(DBError::SecretTaken) => continue,
|
Err(DBError::SecretTaken) => continue,
|
||||||
Err(e) => return Err(e.into()),
|
Err(e) => return Err(e.into()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
data.dblib
|
data.dblib
|
||||||
.add_captcha_levels(&username, &key, &payload.levels)
|
.add_captcha_levels(username, &key, &payload.levels)
|
||||||
.await?;
|
.await?;
|
||||||
let mcaptcha_config = MCaptchaDetails {
|
let mcaptcha_config = MCaptchaDetails {
|
||||||
name: payload.description.clone(),
|
name: payload.description.clone(),
|
||||||
|
|
|
@ -160,7 +160,7 @@ pub mod runner {
|
||||||
futs.push(update_fut);
|
futs.push(update_fut);
|
||||||
|
|
||||||
data.dblib
|
data.dblib
|
||||||
.add_captcha_levels(&username, &payload.key, &payload.levels)
|
.add_captcha_levels(username, &payload.key, &payload.levels)
|
||||||
.await?;
|
.await?;
|
||||||
try_join_all(futs).await?;
|
try_join_all(futs).await?;
|
||||||
if let Err(ServiceError::CaptchaError(e)) = data
|
if let Err(ServiceError::CaptchaError(e)) = data
|
||||||
|
|
|
@ -42,43 +42,65 @@ pub async fn get_config(
|
||||||
payload: web::Json<GetConfigPayload>,
|
payload: web::Json<GetConfigPayload>,
|
||||||
data: AppData,
|
data: AppData,
|
||||||
) -> ServiceResult<impl Responder> {
|
) -> ServiceResult<impl Responder> {
|
||||||
let res = sqlx::query!(
|
// let res = sqlx::query!(
|
||||||
"SELECT EXISTS (SELECT 1 from mcaptcha_config WHERE key = $1)",
|
// "SELECT EXISTS (SELECT 1 from mcaptcha_config WHERE key = $1)",
|
||||||
&payload.key,
|
// &payload.key,
|
||||||
)
|
// )
|
||||||
.fetch_one(&data.db)
|
// .fetch_one(&data.db)
|
||||||
.await?;
|
// .await?;
|
||||||
|
|
||||||
if res.exists.is_none() {
|
//if res.exists.is_none() {
|
||||||
|
if !data.dblib.captcha_exists(None, &payload.key).await? {
|
||||||
return Err(ServiceError::TokenNotFound);
|
return Err(ServiceError::TokenNotFound);
|
||||||
}
|
}
|
||||||
let payload = payload.into_inner();
|
let payload = payload.into_inner();
|
||||||
match res.exists {
|
|
||||||
Some(true) => {
|
|
||||||
match data.captcha.get_pow(payload.key.clone()).await {
|
|
||||||
Ok(Some(config)) => {
|
|
||||||
record_fetch(&payload.key, &data.db).await;
|
|
||||||
Ok(HttpResponse::Ok().json(config))
|
|
||||||
}
|
|
||||||
Ok(None) => {
|
|
||||||
init_mcaptcha(&data, &payload.key).await?;
|
|
||||||
let config = data
|
|
||||||
.captcha
|
|
||||||
.get_pow(payload.key.clone())
|
|
||||||
.await
|
|
||||||
.expect("mcaptcha should be initialized and ready to go");
|
|
||||||
// background it. would require data::Data to be static
|
|
||||||
// to satidfy lifetime
|
|
||||||
record_fetch(&payload.key, &data.db).await;
|
|
||||||
Ok(HttpResponse::Ok().json(config))
|
|
||||||
}
|
|
||||||
Err(e) => Err(e.into()),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Some(false) => Err(ServiceError::TokenNotFound),
|
match data.captcha.get_pow(payload.key.clone()).await {
|
||||||
None => Err(ServiceError::TokenNotFound),
|
Ok(Some(config)) => {
|
||||||
|
record_fetch(&payload.key, &data.db).await;
|
||||||
|
Ok(HttpResponse::Ok().json(config))
|
||||||
|
}
|
||||||
|
Ok(None) => {
|
||||||
|
init_mcaptcha(&data, &payload.key).await?;
|
||||||
|
let config = data
|
||||||
|
.captcha
|
||||||
|
.get_pow(payload.key.clone())
|
||||||
|
.await
|
||||||
|
.expect("mcaptcha should be initialized and ready to go");
|
||||||
|
// background it. would require data::Data to be static
|
||||||
|
// to satidfy lifetime
|
||||||
|
record_fetch(&payload.key, &data.db).await;
|
||||||
|
Ok(HttpResponse::Ok().json(config))
|
||||||
|
}
|
||||||
|
Err(e) => Err(e.into()),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// match res.exists {
|
||||||
|
// Some(true) => {
|
||||||
|
// match data.captcha.get_pow(payload.key.clone()).await {
|
||||||
|
// Ok(Some(config)) => {
|
||||||
|
// record_fetch(&payload.key, &data.db).await;
|
||||||
|
// Ok(HttpResponse::Ok().json(config))
|
||||||
|
// }
|
||||||
|
// Ok(None) => {
|
||||||
|
// init_mcaptcha(&data, &payload.key).await?;
|
||||||
|
// let config = data
|
||||||
|
// .captcha
|
||||||
|
// .get_pow(payload.key.clone())
|
||||||
|
// .await
|
||||||
|
// .expect("mcaptcha should be initialized and ready to go");
|
||||||
|
// // background it. would require data::Data to be static
|
||||||
|
// // to satidfy lifetime
|
||||||
|
// record_fetch(&payload.key, &data.db).await;
|
||||||
|
// Ok(HttpResponse::Ok().json(config))
|
||||||
|
// }
|
||||||
|
// Err(e) => Err(e.into()),
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Some(false) => Err(ServiceError::TokenNotFound),
|
||||||
|
// None => Err(ServiceError::TokenNotFound),
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
/// Call this when [MCaptcha][libmcaptcha::MCaptcha] is not in master.
|
/// Call this when [MCaptcha][libmcaptcha::MCaptcha] is not in master.
|
||||||
///
|
///
|
||||||
|
|
Loading…
Add table
Reference in a new issue