mirror of
https://github.com/mCaptcha/mCaptcha.git
synced 2026-02-11 10:05:41 +00:00
feat: delete analytics when webmaster updates publishing status
This commit is contained in:
@@ -283,6 +283,12 @@ pub trait MCDatabase: std::marker::Send + std::marker::Sync + CloneSPDatabase {
|
|||||||
&self,
|
&self,
|
||||||
psuedo_id: &str,
|
psuedo_id: &str,
|
||||||
) -> DBResult<String>;
|
) -> DBResult<String>;
|
||||||
|
|
||||||
|
/// Delete all records for campaign
|
||||||
|
async fn analytics_delete_all_records_for_campaign(
|
||||||
|
&self,
|
||||||
|
campaign_id: &str,
|
||||||
|
) -> DBResult<()>;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Default, Deserialize, Serialize, PartialEq)]
|
#[derive(Debug, Clone, Default, Deserialize, Serialize, PartialEq)]
|
||||||
@@ -389,7 +395,6 @@ pub struct Secret {
|
|||||||
/// user's secret
|
/// user's secret
|
||||||
pub secret: String,
|
pub secret: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Trait to clone MCDatabase
|
/// Trait to clone MCDatabase
|
||||||
pub trait CloneSPDatabase {
|
pub trait CloneSPDatabase {
|
||||||
/// clone DB
|
/// clone DB
|
||||||
|
|||||||
@@ -304,6 +304,21 @@ pub async fn database_works<'a, T: MCDatabase>(
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
.is_empty());
|
.is_empty());
|
||||||
|
|
||||||
|
db.analytics_delete_all_records_for_campaign(c.key)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(db.analytics_fetch(c.key, 1000, 0).await.unwrap().len(), 0);
|
||||||
|
let err = db.analytics_get_psuedo_id_from_capmaign_id(c.key).await;
|
||||||
|
assert!(err.is_err());
|
||||||
|
assert_eq!(
|
||||||
|
format!("{:?}", err),
|
||||||
|
format!("{:?}", Err::<(), errors::DBError>(DBError::CaptchaNotFound))
|
||||||
|
);
|
||||||
|
db.analytics_delete_all_records_for_campaign(c.key)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
// analytics end
|
||||||
|
|
||||||
assert_eq!(db.fetch_solve(p.username, c.key).await.unwrap().len(), 1);
|
assert_eq!(db.fetch_solve(p.username, c.key).await.unwrap().len(), 1);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
db.fetch_config_fetched(p.username, c.key)
|
db.fetch_config_fetched(p.username, c.key)
|
||||||
@@ -314,7 +329,6 @@ pub async fn database_works<'a, T: MCDatabase>(
|
|||||||
);
|
);
|
||||||
assert_eq!(db.fetch_solve(p.username, c.key).await.unwrap().len(), 1);
|
assert_eq!(db.fetch_solve(p.username, c.key).await.unwrap().len(), 1);
|
||||||
assert_eq!(db.fetch_confirm(p.username, c.key).await.unwrap().len(), 1);
|
assert_eq!(db.fetch_confirm(p.username, c.key).await.unwrap().len(), 1);
|
||||||
// analytics end
|
|
||||||
|
|
||||||
// update captcha key; set key = username;
|
// update captcha key; set key = username;
|
||||||
db.update_captcha_key(p.username, c.key, p.username)
|
db.update_captcha_key(p.username, c.key, p.username)
|
||||||
|
|||||||
@@ -214,6 +214,16 @@
|
|||||||
},
|
},
|
||||||
"query": "INSERT INTO mcaptcha_users \n (name , password, secret) VALUES (?, ?, ?)"
|
"query": "INSERT INTO mcaptcha_users \n (name , password, secret) VALUES (?, ?, ?)"
|
||||||
},
|
},
|
||||||
|
"6094468b7fa20043b0da90e366b7f1fa29a8c748e163b6712725440b25ae9361": {
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"nullable": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"query": "\n DELETE FROM\n mcaptcha_pow_analytics\n WHERE\n config_id = (\n SELECT config_id FROM mcaptcha_config WHERE captcha_key = ?\n ) "
|
||||||
|
},
|
||||||
"66ec7df10484f8e0206f3c97afc9136021589556c38dbbed341d6574487f79f2": {
|
"66ec7df10484f8e0206f3c97afc9136021589556c38dbbed341d6574487f79f2": {
|
||||||
"describe": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
@@ -883,6 +893,16 @@
|
|||||||
},
|
},
|
||||||
"query": "INSERT INTO mcaptcha_pow_solved_stats \n (config_id, time) VALUES ((SELECT config_id FROM mcaptcha_config where captcha_key= ?), ?)"
|
"query": "INSERT INTO mcaptcha_pow_solved_stats \n (config_id, time) VALUES ((SELECT config_id FROM mcaptcha_config where captcha_key= ?), ?)"
|
||||||
},
|
},
|
||||||
|
"e4d9bf156a368dcee1433dd5ced9f1991aa15f84e0ade916433aada40f68f0aa": {
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"nullable": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"query": "\n DELETE FROM\n mcaptcha_psuedo_campaign_id\n WHERE config_id = (\n SELECT config_id FROM mcaptcha_config WHERE captcha_key = ?\n );"
|
||||||
|
},
|
||||||
"e6569a6064d0e07abea4c0bd4686cdfdaac64f0109ac40efaed06a744a2eaf5e": {
|
"e6569a6064d0e07abea4c0bd4686cdfdaac64f0109ac40efaed06a744a2eaf5e": {
|
||||||
"describe": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
|
|||||||
@@ -1049,6 +1049,38 @@ impl MCDatabase for Database {
|
|||||||
.map_err(|e| map_row_not_found_err(e, DBError::CaptchaNotFound))?;
|
.map_err(|e| map_row_not_found_err(e, DBError::CaptchaNotFound))?;
|
||||||
Ok(res.captcha_key)
|
Ok(res.captcha_key)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn analytics_delete_all_records_for_campaign(
|
||||||
|
&self,
|
||||||
|
campaign_id: &str,
|
||||||
|
) -> DBResult<()> {
|
||||||
|
let _ = sqlx::query!(
|
||||||
|
"
|
||||||
|
DELETE FROM
|
||||||
|
mcaptcha_psuedo_campaign_id
|
||||||
|
WHERE config_id = (
|
||||||
|
SELECT config_id FROM mcaptcha_config WHERE captcha_key = ?
|
||||||
|
);",
|
||||||
|
campaign_id
|
||||||
|
)
|
||||||
|
.execute(&self.pool)
|
||||||
|
.await;
|
||||||
|
|
||||||
|
let _ = sqlx::query!(
|
||||||
|
"
|
||||||
|
DELETE FROM
|
||||||
|
mcaptcha_pow_analytics
|
||||||
|
WHERE
|
||||||
|
config_id = (
|
||||||
|
SELECT config_id FROM mcaptcha_config WHERE captcha_key = ?
|
||||||
|
) ",
|
||||||
|
campaign_id
|
||||||
|
)
|
||||||
|
.execute(&self.pool)
|
||||||
|
.await;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
|
|||||||
@@ -240,6 +240,18 @@
|
|||||||
},
|
},
|
||||||
"query": "SELECT email FROM mcaptcha_users WHERE name = $1"
|
"query": "SELECT email FROM mcaptcha_users WHERE name = $1"
|
||||||
},
|
},
|
||||||
|
"30d8945806b4c68b6da800395f61c1e480839093bfcda9c693bf1972a65c7d79": {
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"nullable": [],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Text"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"query": "\n DELETE FROM\n mcaptcha_psuedo_campaign_id\n WHERE config_id = (\n SELECT config_id FROM mcaptcha_config WHERE key = ($1)\n );"
|
||||||
|
},
|
||||||
"3b1c8128fc48b16d8e8ea6957dd4fbc0eb19ae64748fd7824e9f5e1901dd1726": {
|
"3b1c8128fc48b16d8e8ea6957dd4fbc0eb19ae64748fd7824e9f5e1901dd1726": {
|
||||||
"describe": {
|
"describe": {
|
||||||
"columns": [],
|
"columns": [],
|
||||||
@@ -588,6 +600,18 @@
|
|||||||
},
|
},
|
||||||
"query": "INSERT INTO mcaptcha_pow_analytics \n (config_id, time, difficulty_factor, worker_type)\n VALUES ((SELECT config_id FROM mcaptcha_config WHERE key = $1), $2, $3, $4)"
|
"query": "INSERT INTO mcaptcha_pow_analytics \n (config_id, time, difficulty_factor, worker_type)\n VALUES ((SELECT config_id FROM mcaptcha_config WHERE key = $1), $2, $3, $4)"
|
||||||
},
|
},
|
||||||
|
"b67da576ff30a1bc8b1c0a79eff07f0622bd9ea035d3de15b91f5e1e8a5fda9b": {
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"nullable": [],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Text"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"query": "\n DELETE FROM\n mcaptcha_pow_analytics\n WHERE\n config_id = (\n SELECT config_id FROM mcaptcha_config WHERE key = $1\n )\n "
|
||||||
|
},
|
||||||
"b97d810814fbeb2df19f47bcfa381bc6fb7ac6832d040b377cf4fca2ca896cfb": {
|
"b97d810814fbeb2df19f47bcfa381bc6fb7ac6832d040b377cf4fca2ca896cfb": {
|
||||||
"describe": {
|
"describe": {
|
||||||
"columns": [],
|
"columns": [],
|
||||||
|
|||||||
@@ -1057,6 +1057,39 @@ impl MCDatabase for Database {
|
|||||||
.map_err(|e| map_row_not_found_err(e, DBError::CaptchaNotFound))?;
|
.map_err(|e| map_row_not_found_err(e, DBError::CaptchaNotFound))?;
|
||||||
Ok(res.key)
|
Ok(res.key)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn analytics_delete_all_records_for_campaign(
|
||||||
|
&self,
|
||||||
|
campaign_id: &str,
|
||||||
|
) -> DBResult<()> {
|
||||||
|
let _ = sqlx::query!(
|
||||||
|
"
|
||||||
|
DELETE FROM
|
||||||
|
mcaptcha_psuedo_campaign_id
|
||||||
|
WHERE config_id = (
|
||||||
|
SELECT config_id FROM mcaptcha_config WHERE key = ($1)
|
||||||
|
);",
|
||||||
|
campaign_id
|
||||||
|
)
|
||||||
|
.execute(&self.pool)
|
||||||
|
.await;
|
||||||
|
|
||||||
|
let _ = sqlx::query!(
|
||||||
|
"
|
||||||
|
DELETE FROM
|
||||||
|
mcaptcha_pow_analytics
|
||||||
|
WHERE
|
||||||
|
config_id = (
|
||||||
|
SELECT config_id FROM mcaptcha_config WHERE key = $1
|
||||||
|
)
|
||||||
|
",
|
||||||
|
campaign_id
|
||||||
|
)
|
||||||
|
.execute(&self.pool)
|
||||||
|
.await;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
|
|||||||
Reference in New Issue
Block a user