From bd75fc625c70665f99d57daa12b933adad5a7a05 Mon Sep 17 00:00:00 2001 From: realaravinth Date: Thu, 12 May 2022 19:10:04 +0530 Subject: [PATCH] feat: migrate adding captcha to use db_* interface --- Cargo.lock | 1 + Makefile | 2 +- sqlx-data.json | 45 ----------------------------------- src/api/v1/mcaptcha/create.rs | 38 ++++------------------------- src/api/v1/mcaptcha/update.rs | 28 ++++------------------ 5 files changed, 10 insertions(+), 104 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9a0f1a07..d821ac6d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -854,6 +854,7 @@ dependencies = [ "actix-rt", "async-trait", "db-core", + "futures", "sqlx", "url", ] diff --git a/Makefile b/Makefile index 7745649b..026cfaeb 100644 --- a/Makefile +++ b/Makefile @@ -96,7 +96,7 @@ test: frontend-test frontend ## Run all available tests cd db/db-sqlx-postgres &&\ DATABASE_URL=${POSTGRES_DATABASE_URL}\ cargo test --no-fail-fast - ./scripts/tests.sh + #./scripts/tests.sh # cargo test --all-features --no-fail-fast xml-test-coverage: migrate ## Generate code coverage report in XML format diff --git a/sqlx-data.json b/sqlx-data.json index 2cce9ae5..066c7ae4 100644 --- a/sqlx-data.json +++ b/sqlx-data.json @@ -67,21 +67,6 @@ }, "query": "-- mark a notification as read\nUPDATE mcaptcha_notifications\n SET read = TRUE\nWHERE \n mcaptcha_notifications.id = $1\nAND\n mcaptcha_notifications.rx = (\n SELECT\n id\n FROM\n mcaptcha_users\n WHERE\n name = $2\n );\n" }, - "307245aaf5b0d692448b80358d6916aa50c507b35e724d66c9b16a16b60e1b38": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Varchar", - "Text", - "Int4", - "Varchar" - ] - } - }, - "query": "INSERT INTO mcaptcha_config\n (key, user_id, duration, name)\n VALUES ($1, (SELECT ID FROM mcaptcha_users WHERE name = $2), $3, $4)" - }, "3ebc2aab517b9a2db463b6ea64aee76da5d051817acba8d0fb55ad503acc6b63": { "describe": { "columns": [ @@ -340,21 +325,6 @@ }, "query": "SELECT ID, password FROM mcaptcha_users WHERE name = ($1)" }, - "94901d49666b3097b1fed832966697c4a1e3937beb2bd0431df4857402a4de04": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Int4", - "Int4", - "Text", - "Text" - ] - } - }, - "query": "INSERT INTO mcaptcha_levels (\n difficulty_factor, \n visitor_threshold,\n config_id) VALUES (\n $1, $2, (\n SELECT config_id FROM mcaptcha_config WHERE key = ($3) AND\n user_id = (\n SELECT ID from mcaptcha_users WHERE name = $4\n )\n ));" - }, "9753721856a47438c5e72f28fd9d149db10c48e677b4613bf3f1e8487908aac8": { "describe": { "columns": [ @@ -584,20 +554,5 @@ } }, "query": "-- gets all unread notifications a user has\nSELECT \n mcaptcha_notifications.id,\n mcaptcha_notifications.heading,\n mcaptcha_notifications.message,\n mcaptcha_notifications.received,\n mcaptcha_users.name\nFROM\n mcaptcha_notifications \nINNER JOIN \n mcaptcha_users \nON \n mcaptcha_notifications.tx = mcaptcha_users.id\nWHERE \n mcaptcha_notifications.rx = (\n SELECT \n id \n FROM \n mcaptcha_users\n WHERE\n name = $1\n )\nAND \n mcaptcha_notifications.read IS NULL;\n" - }, - "f330cb94c53d33495df94aacec7e4e91d8a920742b89a63d1c59a8ea8937c5c8": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Int4", - "Int4", - "Text", - "Text" - ] - } - }, - "query": "INSERT INTO mcaptcha_levels (\n difficulty_factor, \n visitor_threshold,\n config_id) VALUES (\n $1, $2, (\n SELECT config_id FROM mcaptcha_config WHERE\n key = ($3) AND user_id = (\n SELECT ID FROM mcaptcha_users WHERE name = $4\n )));" } } \ No newline at end of file diff --git a/src/api/v1/mcaptcha/create.rs b/src/api/v1/mcaptcha/create.rs index 9180df86..549e5140 100644 --- a/src/api/v1/mcaptcha/create.rs +++ b/src/api/v1/mcaptcha/create.rs @@ -58,11 +58,8 @@ pub async fn create( } pub mod runner { - use futures::future::try_join_all; - use libmcaptcha::DefenseBuilder; - use log::debug; - use super::*; + use libmcaptcha::DefenseBuilder; pub async fn create( payload: &CreateCaptcha, @@ -76,12 +73,7 @@ pub mod runner { defense.build()?; - debug!("creating config"); - // let mcaptcha_config = - // // add_mcaptcha_util(payload.duration, &payload.description, &data, username).await?; - let mut key; - let duration = payload.duration as i32; loop { key = get_random(32); @@ -97,31 +89,9 @@ pub mod runner { Err(e) => return Err(e.into()), } } - let mut futs = Vec::with_capacity(payload.levels.len()); - - for level in payload.levels.iter() { - let difficulty_factor = level.difficulty_factor as i32; - let visitor_threshold = level.visitor_threshold as i32; - let fut = sqlx::query!( - "INSERT INTO mcaptcha_levels ( - difficulty_factor, - visitor_threshold, - config_id) VALUES ( - $1, $2, ( - SELECT config_id FROM mcaptcha_config WHERE - key = ($3) AND user_id = ( - SELECT ID FROM mcaptcha_users WHERE name = $4 - )));", - difficulty_factor, - visitor_threshold, - &key, - &username, - ) - .execute(&data.db); - futs.push(fut); - } - - try_join_all(futs).await?; + data.dblib + .add_captcha_levels(&username, &key, &payload.levels) + .await?; let mcaptcha_config = MCaptchaDetails { name: payload.description.clone(), key, diff --git a/src/api/v1/mcaptcha/update.rs b/src/api/v1/mcaptcha/update.rs index a818edaf..8ae9978b 100644 --- a/src/api/v1/mcaptcha/update.rs +++ b/src/api/v1/mcaptcha/update.rs @@ -155,33 +155,13 @@ pub mod runner { &username, &payload.key, ) - .execute(&data.db); //.await?; + .execute(&data.db); futs.push(update_fut); - for level in payload.levels.iter() { - let difficulty_factor = level.difficulty_factor as i32; - let visitor_threshold = level.visitor_threshold as i32; - let fut = sqlx::query!( - "INSERT INTO mcaptcha_levels ( - difficulty_factor, - visitor_threshold, - config_id) VALUES ( - $1, $2, ( - SELECT config_id FROM mcaptcha_config WHERE key = ($3) AND - user_id = ( - SELECT ID from mcaptcha_users WHERE name = $4 - ) - ));", - difficulty_factor, - visitor_threshold, - &payload.key, - &username, - ) - .execute(&data.db); //.await?; - futs.push(fut); - } - + data.dblib + .add_captcha_levels(&username, &payload.key, &payload.levels) + .await?; try_join_all(futs).await?; if let Err(ServiceError::CaptchaError(e)) = data .captcha