diff --git a/db/db-core/src/lib.rs b/db/db-core/src/lib.rs index fe21e913..2ae7a17e 100644 --- a/db/db-core/src/lib.rs +++ b/db/db-core/src/lib.rs @@ -397,6 +397,10 @@ pub struct EasyCaptcha { pub traffic_pattern: TrafficPattern, /// captcha key/sitekey pub key: String, + /// captcha description + pub description: String, + /// Owner of the captcha configuration + pub username: String, } #[derive(Default, PartialEq, Serialize, Deserialize, Clone, Debug)] diff --git a/db/db-sqlx-maria/.sqlx/query-c4aeba65b8bcd0f62ef79ed6549b4960d92dadfaf88401d7e2faacb93a2be169.json b/db/db-sqlx-maria/.sqlx/query-c4aeba65b8bcd0f62ef79ed6549b4960d92dadfaf88401d7e2faacb93a2be169.json deleted file mode 100644 index a3ab00eb..00000000 --- a/db/db-sqlx-maria/.sqlx/query-c4aeba65b8bcd0f62ef79ed6549b4960d92dadfaf88401d7e2faacb93a2be169.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "db_name": "MySQL", - "query": "SELECT \n mcaptcha_sitekey_user_provided_avg_traffic.avg_traffic, \n mcaptcha_sitekey_user_provided_avg_traffic.peak_sustainable_traffic, \n mcaptcha_sitekey_user_provided_avg_traffic.broke_my_site_traffic,\n mcaptcha_config.captcha_key\n FROM \n mcaptcha_sitekey_user_provided_avg_traffic \n INNER JOIN\n mcaptcha_config\n ON\n mcaptcha_config.config_id = mcaptcha_sitekey_user_provided_avg_traffic.config_id\n ORDER BY mcaptcha_config.config_id\n LIMIT ? OFFSET ?", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "avg_traffic", - "type_info": { - "type": "Long", - "flags": "NOT_NULL | NO_DEFAULT_VALUE", - "char_set": 63, - "max_size": 11 - } - }, - { - "ordinal": 1, - "name": "peak_sustainable_traffic", - "type_info": { - "type": "Long", - "flags": "NOT_NULL | NO_DEFAULT_VALUE", - "char_set": 63, - "max_size": 11 - } - }, - { - "ordinal": 2, - "name": "broke_my_site_traffic", - "type_info": { - "type": "Long", - "flags": "", - "char_set": 63, - "max_size": 11 - } - }, - { - "ordinal": 3, - "name": "captcha_key", - "type_info": { - "type": "VarString", - "flags": "NOT_NULL | UNIQUE_KEY | NO_DEFAULT_VALUE", - "char_set": 224, - "max_size": 400 - } - } - ], - "parameters": { - "Right": 2 - }, - "nullable": [ - false, - false, - true, - false - ] - }, - "hash": "c4aeba65b8bcd0f62ef79ed6549b4960d92dadfaf88401d7e2faacb93a2be169" -} diff --git a/db/db-sqlx-maria/.sqlx/query-d587844217f202c23d29c3cb4c819551bc204dd459c956c41024fa74aadbba64.json b/db/db-sqlx-maria/.sqlx/query-d587844217f202c23d29c3cb4c819551bc204dd459c956c41024fa74aadbba64.json new file mode 100644 index 00000000..712493aa --- /dev/null +++ b/db/db-sqlx-maria/.sqlx/query-d587844217f202c23d29c3cb4c819551bc204dd459c956c41024fa74aadbba64.json @@ -0,0 +1,80 @@ +{ + "db_name": "MySQL", + "query": "SELECT \n mcaptcha_sitekey_user_provided_avg_traffic.avg_traffic, \n mcaptcha_sitekey_user_provided_avg_traffic.peak_sustainable_traffic, \n mcaptcha_sitekey_user_provided_avg_traffic.broke_my_site_traffic,\n mcaptcha_config.name,\n mcaptcha_users.name as username,\n mcaptcha_config.captcha_key\n FROM \n mcaptcha_sitekey_user_provided_avg_traffic \n INNER JOIN\n mcaptcha_config\n ON\n mcaptcha_config.config_id = mcaptcha_sitekey_user_provided_avg_traffic.config_id\n INNER JOIN\n mcaptcha_users\n ON\n mcaptcha_config.user_id = mcaptcha_users.ID\n ORDER BY mcaptcha_config.config_id\n LIMIT ? OFFSET ?", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "avg_traffic", + "type_info": { + "type": "Long", + "flags": "NOT_NULL | NO_DEFAULT_VALUE", + "char_set": 63, + "max_size": 11 + } + }, + { + "ordinal": 1, + "name": "peak_sustainable_traffic", + "type_info": { + "type": "Long", + "flags": "NOT_NULL | NO_DEFAULT_VALUE", + "char_set": 63, + "max_size": 11 + } + }, + { + "ordinal": 2, + "name": "broke_my_site_traffic", + "type_info": { + "type": "Long", + "flags": "", + "char_set": 63, + "max_size": 11 + } + }, + { + "ordinal": 3, + "name": "name", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | NO_DEFAULT_VALUE", + "char_set": 224, + "max_size": 400 + } + }, + { + "ordinal": 4, + "name": "username", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | UNIQUE_KEY | NO_DEFAULT_VALUE", + "char_set": 224, + "max_size": 400 + } + }, + { + "ordinal": 5, + "name": "captcha_key", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | UNIQUE_KEY | NO_DEFAULT_VALUE", + "char_set": 224, + "max_size": 400 + } + } + ], + "parameters": { + "Right": 2 + }, + "nullable": [ + false, + false, + true, + false, + false, + false + ] + }, + "hash": "d587844217f202c23d29c3cb4c819551bc204dd459c956c41024fa74aadbba64" +} diff --git a/db/db-sqlx-maria/src/lib.rs b/db/db-sqlx-maria/src/lib.rs index 74ba0b3c..1c77910a 100644 --- a/db/db-sqlx-maria/src/lib.rs +++ b/db/db-sqlx-maria/src/lib.rs @@ -1274,33 +1274,39 @@ impl MCDatabase for Database { } } - /// Get all easy captcha configurations on instance async fn get_all_easy_captchas( &self, limit: usize, offset: usize, ) -> DBResult> { - - struct InnerEasyCaptcha { - captcha_key: String, - peak_sustainable_traffic: i32, - avg_traffic: i32, - broke_my_site_traffic: Option, - } + struct InnerEasyCaptcha { + captcha_key: String, + name: String, + username: String, + peak_sustainable_traffic: i32, + avg_traffic: i32, + broke_my_site_traffic: Option, + } let mut inner_res = sqlx::query_as!( InnerEasyCaptcha, - "SELECT - mcaptcha_sitekey_user_provided_avg_traffic.avg_traffic, - mcaptcha_sitekey_user_provided_avg_traffic.peak_sustainable_traffic, - mcaptcha_sitekey_user_provided_avg_traffic.broke_my_site_traffic, - mcaptcha_config.captcha_key - FROM - mcaptcha_sitekey_user_provided_avg_traffic - INNER JOIN - mcaptcha_config - ON - mcaptcha_config.config_id = mcaptcha_sitekey_user_provided_avg_traffic.config_id + "SELECT + mcaptcha_sitekey_user_provided_avg_traffic.avg_traffic, + mcaptcha_sitekey_user_provided_avg_traffic.peak_sustainable_traffic, + mcaptcha_sitekey_user_provided_avg_traffic.broke_my_site_traffic, + mcaptcha_config.name, + mcaptcha_users.name as username, + mcaptcha_config.captcha_key + FROM + mcaptcha_sitekey_user_provided_avg_traffic + INNER JOIN + mcaptcha_config + ON + mcaptcha_config.config_id = mcaptcha_sitekey_user_provided_avg_traffic.config_id + INNER JOIN + mcaptcha_users + ON + mcaptcha_config.user_id = mcaptcha_users.ID ORDER BY mcaptcha_config.config_id LIMIT ? OFFSET ?", limit as i64, @@ -1309,16 +1315,22 @@ impl MCDatabase for Database { .fetch_all(&self.pool) .await .map_err(|e| map_row_not_found_err(e, DBError::TrafficPatternNotFound))?; - let mut res = Vec::with_capacity(inner_res.len()); - inner_res.drain(0..).for_each(|v| - res.push(EasyCaptcha { - key: v.captcha_key, - traffic_pattern: TrafficPattern { - broke_my_site_traffic: v.broke_my_site_traffic.as_ref().map(|v| *v as u32), - avg_traffic: v.avg_traffic as u32, - peak_sustainable_traffic: v.peak_sustainable_traffic as u32, - } - })); + let mut res = Vec::with_capacity(inner_res.len()); + inner_res.drain(0..).for_each(|v| { + res.push(EasyCaptcha { + key: v.captcha_key, + description: v.name, + username: v.username, + traffic_pattern: TrafficPattern { + broke_my_site_traffic: v + .broke_my_site_traffic + .as_ref() + .map(|v| *v as u32), + avg_traffic: v.avg_traffic as u32, + peak_sustainable_traffic: v.peak_sustainable_traffic as u32, + }, + }) + }); Ok(res) } } diff --git a/db/db-sqlx-postgres/.sqlx/query-258b3eab56916d2fa89b86ea39a525fcf804db932629ba38ccb64440494267f2.json b/db/db-sqlx-postgres/.sqlx/query-258b3eab56916d2fa89b86ea39a525fcf804db932629ba38ccb64440494267f2.json deleted file mode 100644 index d0639efc..00000000 --- a/db/db-sqlx-postgres/.sqlx/query-258b3eab56916d2fa89b86ea39a525fcf804db932629ba38ccb64440494267f2.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "SELECT \n mcaptcha_sitekey_user_provided_avg_traffic.avg_traffic, \n mcaptcha_sitekey_user_provided_avg_traffic.peak_sustainable_traffic, \n mcaptcha_sitekey_user_provided_avg_traffic.broke_my_site_traffic,\n mcaptcha_config.key\n FROM \n mcaptcha_sitekey_user_provided_avg_traffic \n INNER JOIN\n mcaptcha_config\n ON\n mcaptcha_config.config_id = mcaptcha_sitekey_user_provided_avg_traffic.config_id\n ORDER BY mcaptcha_config.config_id\n OFFSET $1 LIMIT $2; ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "avg_traffic", - "type_info": "Int4" - }, - { - "ordinal": 1, - "name": "peak_sustainable_traffic", - "type_info": "Int4" - }, - { - "ordinal": 2, - "name": "broke_my_site_traffic", - "type_info": "Int4" - }, - { - "ordinal": 3, - "name": "key", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Int8", - "Int8" - ] - }, - "nullable": [ - false, - false, - true, - false - ] - }, - "hash": "258b3eab56916d2fa89b86ea39a525fcf804db932629ba38ccb64440494267f2" -} diff --git a/db/db-sqlx-postgres/.sqlx/query-f01a9c09c8722bc195f477a8c3ce6466d415e7c74665fa882eff4a8566e70577.json b/db/db-sqlx-postgres/.sqlx/query-f01a9c09c8722bc195f477a8c3ce6466d415e7c74665fa882eff4a8566e70577.json new file mode 100644 index 00000000..cc409744 --- /dev/null +++ b/db/db-sqlx-postgres/.sqlx/query-f01a9c09c8722bc195f477a8c3ce6466d415e7c74665fa882eff4a8566e70577.json @@ -0,0 +1,53 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT \n mcaptcha_sitekey_user_provided_avg_traffic.avg_traffic, \n mcaptcha_sitekey_user_provided_avg_traffic.peak_sustainable_traffic, \n mcaptcha_sitekey_user_provided_avg_traffic.broke_my_site_traffic,\n mcaptcha_config.name,\n mcaptcha_users.name as username,\n mcaptcha_config.key\n FROM \n mcaptcha_sitekey_user_provided_avg_traffic \n INNER JOIN\n mcaptcha_config\n ON\n mcaptcha_config.config_id = mcaptcha_sitekey_user_provided_avg_traffic.config_id\n INNER JOIN\n mcaptcha_users\n ON\n mcaptcha_config.user_id = mcaptcha_users.ID\n ORDER BY mcaptcha_config.config_id\n OFFSET $1 LIMIT $2; ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "avg_traffic", + "type_info": "Int4" + }, + { + "ordinal": 1, + "name": "peak_sustainable_traffic", + "type_info": "Int4" + }, + { + "ordinal": 2, + "name": "broke_my_site_traffic", + "type_info": "Int4" + }, + { + "ordinal": 3, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 4, + "name": "username", + "type_info": "Varchar" + }, + { + "ordinal": 5, + "name": "key", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Int8", + "Int8" + ] + }, + "nullable": [ + false, + false, + true, + false, + false, + false + ] + }, + "hash": "f01a9c09c8722bc195f477a8c3ce6466d415e7c74665fa882eff4a8566e70577" +} diff --git a/db/db-sqlx-postgres/src/lib.rs b/db/db-sqlx-postgres/src/lib.rs index 19bed122..f52e1b28 100644 --- a/db/db-sqlx-postgres/src/lib.rs +++ b/db/db-sqlx-postgres/src/lib.rs @@ -710,19 +710,22 @@ impl MCDatabase for Database { limit: usize, offset: usize, ) -> DBResult> { - - struct InnerEasyCaptcha { - key: String, - peak_sustainable_traffic: i32, - avg_traffic: i32, - broke_my_site_traffic: Option, - } + struct InnerEasyCaptcha { + key: String, + peak_sustainable_traffic: i32, + avg_traffic: i32, + broke_my_site_traffic: Option, + name: String, + username: String, + } let mut inner_res = sqlx::query_as!( InnerEasyCaptcha, "SELECT mcaptcha_sitekey_user_provided_avg_traffic.avg_traffic, mcaptcha_sitekey_user_provided_avg_traffic.peak_sustainable_traffic, mcaptcha_sitekey_user_provided_avg_traffic.broke_my_site_traffic, + mcaptcha_config.name, + mcaptcha_users.name as username, mcaptcha_config.key FROM mcaptcha_sitekey_user_provided_avg_traffic @@ -730,6 +733,10 @@ impl MCDatabase for Database { mcaptcha_config ON mcaptcha_config.config_id = mcaptcha_sitekey_user_provided_avg_traffic.config_id + INNER JOIN + mcaptcha_users + ON + mcaptcha_config.user_id = mcaptcha_users.ID ORDER BY mcaptcha_config.config_id OFFSET $1 LIMIT $2; ", offset as i32, @@ -738,16 +745,22 @@ impl MCDatabase for Database { .fetch_all(&self.pool) .await .map_err(|e| map_row_not_found_err(e, DBError::TrafficPatternNotFound))?; - let mut res = Vec::with_capacity(inner_res.len()); - inner_res.drain(0..).for_each(|v| - res.push(EasyCaptcha { - key: v.key, - traffic_pattern: TrafficPattern { - broke_my_site_traffic: v.broke_my_site_traffic.as_ref().map(|v| *v as u32), - avg_traffic: v.avg_traffic as u32, - peak_sustainable_traffic: v.peak_sustainable_traffic as u32, - } - })); + let mut res = Vec::with_capacity(inner_res.len()); + inner_res.drain(0..).for_each(|v| { + res.push(EasyCaptcha { + key: v.key, + description: v.name, + username: v.username, + traffic_pattern: TrafficPattern { + broke_my_site_traffic: v + .broke_my_site_traffic + .as_ref() + .map(|v| *v as u32), + avg_traffic: v.avg_traffic as u32, + peak_sustainable_traffic: v.peak_sustainable_traffic as u32, + }, + }) + }); Ok(res) }