]> Untitled Git - lemmy.git/blobdiff - crates/api/src/local_user/get_captcha.rs
Make functions work with both connection and pool (#3420)
[lemmy.git] / crates / api / src / local_user / get_captcha.rs
index 6dbc34823c20b2fa7c83a1f90b332835989abf17..5f1079ef238851deda151092208df357094ffdc3 100644 (file)
@@ -1,14 +1,13 @@
 use crate::{captcha_as_wav_base64, Perform};
 use actix_web::web::Data;
 use captcha::{gen, Difficulty};
-use chrono::Duration;
 use lemmy_api_common::{
   context::LemmyContext,
   person::{CaptchaResponse, GetCaptcha, GetCaptchaResponse},
 };
-use lemmy_db_schema::{
-  source::{captcha_answer::CaptchaAnswer, local_site::LocalSite},
-  utils::naive_now,
+use lemmy_db_schema::source::{
+  captcha_answer::{CaptchaAnswer, CaptchaAnswerForm},
+  local_site::LocalSite,
 };
 use lemmy_utils::error::LemmyError;
 
@@ -18,7 +17,7 @@ impl Perform for GetCaptcha {
 
   #[tracing::instrument(skip(context))]
   async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
-    let local_site = LocalSite::read(context.pool()).await?;
+    let local_site = LocalSite::read(&mut context.pool()).await?;
 
     if !local_site.captcha_enabled {
       return Ok(GetCaptchaResponse { ok: None });
@@ -34,20 +33,18 @@ impl Perform for GetCaptcha {
 
     let png = captcha.as_base64().expect("failed to generate captcha");
 
-    let uuid = uuid::Uuid::new_v4().to_string();
+    let wav = captcha_as_wav_base64(&captcha)?;
 
-    let wav = captcha_as_wav_base64(&captcha);
-
-    let captcha: CaptchaAnswer = CaptchaAnswer {
-      answer,
-      uuid: uuid.clone(),
-      expires: naive_now() + Duration::minutes(10), // expires in 10 minutes
-    };
+    let captcha_form: CaptchaAnswerForm = CaptchaAnswerForm { answer };
     // Stores the captcha item in the db
-    CaptchaAnswer::insert(context.pool(), &captcha).await?;
+    let captcha = CaptchaAnswer::insert(&mut context.pool(), &captcha_form).await?;
 
     Ok(GetCaptchaResponse {
-      ok: Some(CaptchaResponse { png, wav, uuid }),
+      ok: Some(CaptchaResponse {
+        png,
+        wav,
+        uuid: captcha.uuid.to_string(),
+      }),
     })
   }
 }