feat: fetch username of owner and description in easy captcha method

This commit is contained in:
Aravinth Manivannan 2024-01-05 01:02:27 +05:30
parent 3b8051159d
commit c70a30e640
No known key found for this signature in database
GPG Key ID: F8F50389936984FF
7 changed files with 208 additions and 145 deletions

View File

@ -397,6 +397,10 @@ pub struct EasyCaptcha {
pub traffic_pattern: TrafficPattern, pub traffic_pattern: TrafficPattern,
/// captcha key/sitekey /// captcha key/sitekey
pub key: String, pub key: String,
/// captcha description
pub description: String,
/// Owner of the captcha configuration
pub username: String,
} }
#[derive(Default, PartialEq, Serialize, Deserialize, Clone, Debug)] #[derive(Default, PartialEq, Serialize, Deserialize, Clone, Debug)]

View File

@ -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"
}

View File

@ -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"
}

View File

@ -1274,16 +1274,16 @@ impl MCDatabase for Database {
} }
} }
/// Get all easy captcha configurations on instance /// Get all easy captcha configurations on instance
async fn get_all_easy_captchas( async fn get_all_easy_captchas(
&self, &self,
limit: usize, limit: usize,
offset: usize, offset: usize,
) -> DBResult<Vec<EasyCaptcha>> { ) -> DBResult<Vec<EasyCaptcha>> {
struct InnerEasyCaptcha { struct InnerEasyCaptcha {
captcha_key: String, captcha_key: String,
name: String,
username: String,
peak_sustainable_traffic: i32, peak_sustainable_traffic: i32,
avg_traffic: i32, avg_traffic: i32,
broke_my_site_traffic: Option<i32>, broke_my_site_traffic: Option<i32>,
@ -1294,6 +1294,8 @@ impl MCDatabase for Database {
mcaptcha_sitekey_user_provided_avg_traffic.avg_traffic, mcaptcha_sitekey_user_provided_avg_traffic.avg_traffic,
mcaptcha_sitekey_user_provided_avg_traffic.peak_sustainable_traffic, mcaptcha_sitekey_user_provided_avg_traffic.peak_sustainable_traffic,
mcaptcha_sitekey_user_provided_avg_traffic.broke_my_site_traffic, mcaptcha_sitekey_user_provided_avg_traffic.broke_my_site_traffic,
mcaptcha_config.name,
mcaptcha_users.name as username,
mcaptcha_config.captcha_key mcaptcha_config.captcha_key
FROM FROM
mcaptcha_sitekey_user_provided_avg_traffic mcaptcha_sitekey_user_provided_avg_traffic
@ -1301,6 +1303,10 @@ impl MCDatabase for Database {
mcaptcha_config mcaptcha_config
ON ON
mcaptcha_config.config_id = mcaptcha_sitekey_user_provided_avg_traffic.config_id 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 ORDER BY mcaptcha_config.config_id
LIMIT ? OFFSET ?", LIMIT ? OFFSET ?",
limit as i64, limit as i64,
@ -1310,15 +1316,21 @@ impl MCDatabase for Database {
.await .await
.map_err(|e| map_row_not_found_err(e, DBError::TrafficPatternNotFound))?; .map_err(|e| map_row_not_found_err(e, DBError::TrafficPatternNotFound))?;
let mut res = Vec::with_capacity(inner_res.len()); let mut res = Vec::with_capacity(inner_res.len());
inner_res.drain(0..).for_each(|v| inner_res.drain(0..).for_each(|v| {
res.push(EasyCaptcha { res.push(EasyCaptcha {
key: v.captcha_key, key: v.captcha_key,
description: v.name,
username: v.username,
traffic_pattern: TrafficPattern { traffic_pattern: TrafficPattern {
broke_my_site_traffic: v.broke_my_site_traffic.as_ref().map(|v| *v as u32), broke_my_site_traffic: v
.broke_my_site_traffic
.as_ref()
.map(|v| *v as u32),
avg_traffic: v.avg_traffic as u32, avg_traffic: v.avg_traffic as u32,
peak_sustainable_traffic: v.peak_sustainable_traffic as u32, peak_sustainable_traffic: v.peak_sustainable_traffic as u32,
} },
})); })
});
Ok(res) Ok(res)
} }
} }

View File

@ -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"
}

View File

@ -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"
}

View File

@ -710,12 +710,13 @@ impl MCDatabase for Database {
limit: usize, limit: usize,
offset: usize, offset: usize,
) -> DBResult<Vec<EasyCaptcha>> { ) -> DBResult<Vec<EasyCaptcha>> {
struct InnerEasyCaptcha { struct InnerEasyCaptcha {
key: String, key: String,
peak_sustainable_traffic: i32, peak_sustainable_traffic: i32,
avg_traffic: i32, avg_traffic: i32,
broke_my_site_traffic: Option<i32>, broke_my_site_traffic: Option<i32>,
name: String,
username: String,
} }
let mut inner_res = sqlx::query_as!( let mut inner_res = sqlx::query_as!(
InnerEasyCaptcha, InnerEasyCaptcha,
@ -723,6 +724,8 @@ impl MCDatabase for Database {
mcaptcha_sitekey_user_provided_avg_traffic.avg_traffic, mcaptcha_sitekey_user_provided_avg_traffic.avg_traffic,
mcaptcha_sitekey_user_provided_avg_traffic.peak_sustainable_traffic, mcaptcha_sitekey_user_provided_avg_traffic.peak_sustainable_traffic,
mcaptcha_sitekey_user_provided_avg_traffic.broke_my_site_traffic, mcaptcha_sitekey_user_provided_avg_traffic.broke_my_site_traffic,
mcaptcha_config.name,
mcaptcha_users.name as username,
mcaptcha_config.key mcaptcha_config.key
FROM FROM
mcaptcha_sitekey_user_provided_avg_traffic mcaptcha_sitekey_user_provided_avg_traffic
@ -730,6 +733,10 @@ impl MCDatabase for Database {
mcaptcha_config mcaptcha_config
ON ON
mcaptcha_config.config_id = mcaptcha_sitekey_user_provided_avg_traffic.config_id 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 ORDER BY mcaptcha_config.config_id
OFFSET $1 LIMIT $2; ", OFFSET $1 LIMIT $2; ",
offset as i32, offset as i32,
@ -739,15 +746,21 @@ impl MCDatabase for Database {
.await .await
.map_err(|e| map_row_not_found_err(e, DBError::TrafficPatternNotFound))?; .map_err(|e| map_row_not_found_err(e, DBError::TrafficPatternNotFound))?;
let mut res = Vec::with_capacity(inner_res.len()); let mut res = Vec::with_capacity(inner_res.len());
inner_res.drain(0..).for_each(|v| inner_res.drain(0..).for_each(|v| {
res.push(EasyCaptcha { res.push(EasyCaptcha {
key: v.key, key: v.key,
description: v.name,
username: v.username,
traffic_pattern: TrafficPattern { traffic_pattern: TrafficPattern {
broke_my_site_traffic: v.broke_my_site_traffic.as_ref().map(|v| *v as u32), broke_my_site_traffic: v
.broke_my_site_traffic
.as_ref()
.map(|v| *v as u32),
avg_traffic: v.avg_traffic as u32, avg_traffic: v.avg_traffic as u32,
peak_sustainable_traffic: v.peak_sustainable_traffic as u32, peak_sustainable_traffic: v.peak_sustainable_traffic as u32,
} },
})); })
});
Ok(res) Ok(res)
} }