From 049f2b6eea24c5a28dea6e9d7d9200f5106fae57 Mon Sep 17 00:00:00 2001 From: realaravinth Date: Thu, 12 May 2022 10:42:55 +0530 Subject: [PATCH] feat: migrate update secret to use db_* interface --- sqlx-data.json | 205 ----------------------------------- src/api/v1/account/secret.rs | 27 +---- 2 files changed, 6 insertions(+), 226 deletions(-) diff --git a/sqlx-data.json b/sqlx-data.json index 66954e59..2cce9ae5 100644 --- a/sqlx-data.json +++ b/sqlx-data.json @@ -39,19 +39,6 @@ }, "query": "SELECT email, secret FROM mcaptcha_users WHERE name = ($1)" }, - "1e9fe69b23e4bfa7bb369455753100307e334e8dbaf02ff37cda08992fe95910": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Varchar", - "Text" - ] - } - }, - "query": "UPDATE mcaptcha_users set name = $1\n WHERE name = $2" - }, "238569a64d7dbd252e3b27204f207e8a8548109717b89495ddf8f9a870c7c75d": { "describe": { "columns": [], @@ -95,19 +82,6 @@ }, "query": "INSERT INTO mcaptcha_config\n (key, user_id, duration, name)\n VALUES ($1, (SELECT ID FROM mcaptcha_users WHERE name = $2), $3, $4)" }, - "3b1c8128fc48b16d8e8ea6957dd4fbc0eb19ae64748fd7824e9f5e1901dd1726": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Varchar", - "Text" - ] - } - }, - "query": "UPDATE mcaptcha_users set secret = $1\n WHERE name = $2" - }, "3ebc2aab517b9a2db463b6ea64aee76da5d051817acba8d0fb55ad503acc6b63": { "describe": { "columns": [ @@ -149,41 +123,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" }, - "45d9e9fb6344fe3a18c2529d50c935d3837bfe25c96595beb6970d6067720578": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Varchar", - "Text", - "Varchar", - "Varchar" - ] - } - }, - "query": "insert into mcaptcha_users \n (name , password, email, secret) values ($1, $2, $3, $4)" - }, - "47fa50aecfb1499b0a18fa9299643017a1a8d69d4e9980032e0d8f745465d14f": { - "describe": { - "columns": [ - { - "name": "exists", - "ordinal": 0, - "type_info": "Bool" - } - ], - "nullable": [ - null - ], - "parameters": { - "Left": [ - "Text" - ] - } - }, - "query": "SELECT EXISTS (SELECT 1 from mcaptcha_users WHERE email = $1)" - }, "4a5dfbc5aeb2bab290a09640cc25223d484fbc7549e5bc54f33bab8616725031": { "describe": { "columns": [ @@ -354,20 +293,6 @@ }, "query": "DELETE FROM mcaptcha_levels \n WHERE config_id = (\n SELECT config_id FROM mcaptcha_config where key = ($1) \n AND user_id = (\n SELECT ID from mcaptcha_users WHERE name = $2\n )\n )" }, - "81c779ed4bb59f8b94dea730cbda31f7733ef16d509a3ed607388b5ddef74638": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Varchar", - "Text", - "Varchar" - ] - } - }, - "query": "INSERT INTO mcaptcha_users \n (name , password, secret) VALUES ($1, $2, $3)" - }, "84484cb6892db29121816bc5bff5702b9e857e20aa14e79d080d78ae7593153b": { "describe": { "columns": [ @@ -503,26 +428,6 @@ }, "query": "SELECT name FROM mcaptcha_config \n WHERE key = $1 \n AND user_id = (\n SELECT user_id FROM mcaptcha_users WHERE NAME = $2)" }, - "ad23588ee4bcbb13e208460ce21e2fa9f1373893934b530b339fea10360b34a8": { - "describe": { - "columns": [ - { - "name": "exists", - "ordinal": 0, - "type_info": "Bool" - } - ], - "nullable": [ - null - ], - "parameters": { - "Left": [ - "Text" - ] - } - }, - "query": "SELECT EXISTS (SELECT 1 from mcaptcha_users WHERE name = $1)" - }, "ada91fac02c7bba9b13deebccda6f6fc45773b5a6e786c37c27b4a71a5cd29f2": { "describe": { "columns": [ @@ -556,45 +461,6 @@ }, "query": "SELECT config_id, duration, name from mcaptcha_config WHERE\n key = $1 AND\n user_id = (SELECT ID FROM mcaptcha_users WHERE name = $2) " }, - "b97d810814fbeb2df19f47bcfa381bc6fb7ac6832d040b377cf4fca2ca896cfb": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Varchar", - "Text" - ] - } - }, - "query": "UPDATE mcaptcha_users set email = $1\n WHERE name = $2" - }, - "bdf2e2781bfa2e9c81c18ef8df7230809d3b20274685a35b1c544804f2a58241": { - "describe": { - "columns": [ - { - "name": "name", - "ordinal": 0, - "type_info": "Varchar" - }, - { - "name": "password", - "ordinal": 1, - "type_info": "Text" - } - ], - "nullable": [ - false, - false - ], - "parameters": { - "Left": [ - "Text" - ] - } - }, - "query": "SELECT name, password FROM mcaptcha_users WHERE email = ($1)" - }, "c2e167e56242de7e0a835e25004b15ca8340545fa0ca7ac8f3293157d2d03d98": { "describe": { "columns": [ @@ -649,18 +515,6 @@ }, "query": "SELECT time FROM mcaptcha_pow_fetched_stats\n WHERE \n config_id = (\n SELECT \n 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" }, - "ca9d5241f1234d1825f7ead391ebe9099fca776e7101ac6e1761881606def5fa": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Text" - ] - } - }, - "query": "DELETE FROM mcaptcha_users WHERE name = ($1)" - }, "d85750d86bbafeaf6f52cec3d49d708bef1a9ef85bbd9c55d63c9c27cb93223c": { "describe": { "columns": [], @@ -731,39 +585,6 @@ }, "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" }, - "e4c710d33b709aee262fa0704372ac216d98851447ef4fbe221740b7ae4ea422": { - "describe": { - "columns": [ - { - "name": "secret", - "ordinal": 0, - "type_info": "Varchar" - } - ], - "nullable": [ - false - ], - "parameters": { - "Left": [ - "Text" - ] - } - }, - "query": "SELECT secret FROM mcaptcha_users WHERE name = ($1)" - }, - "e9ed973dfd2bfef36d5a4724aef4993328e1d8d3ca397fe6d5408a780efc775a": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Text", - "Text" - ] - } - }, - "query": "UPDATE mcaptcha_users set password = $1\n WHERE name = $2" - }, "f330cb94c53d33495df94aacec7e4e91d8a920742b89a63d1c59a8ea8937c5c8": { "describe": { "columns": [], @@ -778,31 +599,5 @@ } }, "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 )));" - }, - "f3dee60b85be2ae861b6695286e387529dabf3d11202fb2eeb7e75a7bb3bd0a4": { - "describe": { - "columns": [ - { - "name": "name", - "ordinal": 0, - "type_info": "Varchar" - }, - { - "name": "password", - "ordinal": 1, - "type_info": "Text" - } - ], - "nullable": [ - false, - false - ], - "parameters": { - "Left": [ - "Text" - ] - } - }, - "query": "SELECT name, password FROM mcaptcha_users WHERE name = ($1)" } } \ No newline at end of file diff --git a/src/api/v1/account/secret.rs b/src/api/v1/account/secret.rs index 08584a51..3a432f82 100644 --- a/src/api/v1/account/secret.rs +++ b/src/api/v1/account/secret.rs @@ -14,12 +14,9 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ -use std::borrow::Cow; - use actix_identity::Identity; use actix_web::{HttpResponse, Responder}; use db_core::prelude::*; -use serde::{Deserialize, Serialize}; use crate::api::v1::mcaptcha::get_random; use crate::errors::*; @@ -49,26 +46,14 @@ async fn update_user_secret( loop { secret = get_random(32); - let res = sqlx::query!( - "UPDATE mcaptcha_users set secret = $1 - WHERE name = $2", - &secret, - &username, - ) - .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")) - && err.message().contains("mcaptcha_users_secret_key") - { - continue; - } else { - return Err(sqlx::Error::Database(err).into()); - } + + match data.dblib.update_secret(&username, &secret).await { + Ok(_) => break, + Err(DBError::SecretTaken) => continue, + Err(e) => return Err(e.into()), } } + Ok(HttpResponse::Ok()) }