feat: advance sitekey edit now allows modifying publication status

This commit is contained in:
Aravinth Manivannan 2023-06-30 16:48:53 +05:30
parent 6834e555d8
commit 22edb04ce2
No known key found for this signature in database
GPG key ID: AD9F0F08E855ED88
5 changed files with 48 additions and 23 deletions

View file

@ -130,6 +130,7 @@ async fn create(
levels,
duration: data.settings.captcha.default_difficulty_strategy.duration,
description: payload.description,
publish_benchmarks: payload.publish_benchmarks,
};
let mcaptcha_config = create_runner(&msg, &data, &username).await?;
@ -137,11 +138,6 @@ async fn create(
.add_traffic_pattern(&username, &mcaptcha_config.key, &pattern)
.await?;
if payload.publish_benchmarks {
data.db
.analytics_create_psuedo_id_if_not_exists(&mcaptcha_config.key)
.await?;
}
Ok(HttpResponse::Ok().json(mcaptcha_config))
}
@ -166,21 +162,12 @@ async fn update(
let levels =
calculate(&pattern, &data.settings.captcha.default_difficulty_strategy)?;
if payload.pattern.publish_benchmarks {
data.db
.analytics_create_psuedo_id_if_not_exists(&payload.key)
.await?;
} else {
data.db
.analytics_delete_all_records_for_campaign(&payload.key)
.await?;
}
let msg = UpdateCaptcha {
levels,
duration: data.settings.captcha.default_difficulty_strategy.duration,
description: payload.pattern.description,
key: payload.key,
publish_benchmarks: payload.pattern.publish_benchmarks,
};
update_captcha_runner(&msg, &data, &username).await?;

View file

@ -76,6 +76,7 @@ pub struct UpdateCaptcha {
pub duration: u32,
pub description: String,
pub key: String,
pub publish_benchmarks: bool,
}
#[my_codegen::post(
@ -139,6 +140,16 @@ pub mod runner {
e
);
}
if payload.publish_benchmarks {
data.db
.analytics_create_psuedo_id_if_not_exists(&payload.key)
.await?;
} else {
data.db
.analytics_delete_all_records_for_campaign(&payload.key)
.await?;
}
Ok(())
}
}

View file

@ -35,15 +35,22 @@ struct AdvanceEditPage {
name: String,
key: String,
levels: Vec<Level>,
publish_benchmarks: bool,
}
impl AdvanceEditPage {
fn new(config: Captcha, levels: Vec<Level>, key: String) -> Self {
fn new(
config: Captcha,
levels: Vec<Level>,
key: String,
publish_benchmarks: bool,
) -> Self {
AdvanceEditPage {
duration: config.duration as u32,
name: config.description,
levels,
key,
publish_benchmarks,
}
}
}
@ -63,8 +70,9 @@ pub async fn advance(
let config = data.db.get_captcha_config(&username, &key).await?;
let levels = data.db.get_captcha_levels(Some(&username), &key).await?;
let publish_benchmarks = data.db.analytics_captcha_is_published(&key).await?;
let body = AdvanceEditPage::new(config, levels, key)
let body = AdvanceEditPage::new(config, levels, key, publish_benchmarks)
.render_once()
.unwrap();
Ok(HttpResponse::Ok()
@ -107,12 +115,7 @@ pub async fn easy(
Ok(c) => {
let config = data.db.get_captcha_config(&username, &key).await?;
let publish_benchmarks =
match data.db.analytics_get_psuedo_id_from_capmaign_id(&key).await {
Ok(_) => Ok(true),
Err(db_core::errors::DBError::CaptchaNotFound) => Ok(false),
Err(e) => Err(e),
}?;
println!("publish_benchmarks psot edit: {publish_benchmarks}");
data.db.analytics_captcha_is_published(&key).await?;
let pattern = TrafficPatternRequest {
peak_sustainable_traffic: c.peak_sustainable_traffic as u32,
avg_traffic: c.avg_traffic as u32,

View file

@ -16,6 +16,22 @@
<. } .>
<. let level = levels.len() + 1; .>
<. include!("../add/advance/add-level.html"); .>
<label class="sitekey-form__label" for="publish_benchmarks">
Anonymously publish CAPTCHA performance statistics to help other webmasters
<input
class="sitekey-form__input"
type="checkbox"
id="publish_benchmarks"
name="publish_benchmarks"
<. if publish_benchmarks { .>
checked
<. }.>
/>
</label>
<button data-sitekey="<.= key .>"
id="sitekey-form__submit" class="sitekey-form__submit" type="submit">
Submit

View file

@ -47,11 +47,19 @@ const submit = async (e: Event) => {
const key = BTN.get().dataset.sitekey;
const PUBLISH_BENCHMARKS = <HTMLInputElement>(
Add.FORM.querySelector("#publish_benchmarks")
);
const payload = {
levels,
duration,
description,
key,
publish_benchmarks: PUBLISH_BENCHMARKS.checked,
};
console.debug(`[form submition] json payload: ${JSON.stringify(payload)}`);