]> 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 3d1b88845429679b5d13fc3c99ad36ef3272a91e..5f1079ef238851deda151092208df357094ffdc3 100644 (file)
@@ -1,23 +1,23 @@
 use crate::{captcha_as_wav_base64, Perform};
 use actix_web::web::Data;
 use captcha::{gen, Difficulty};
-use chrono::Duration;
-use lemmy_api_common::person::{CaptchaResponse, GetCaptcha, GetCaptchaResponse};
-use lemmy_db_schema::{source::local_site::LocalSite, utils::naive_now};
-use lemmy_utils::{error::LemmyError, ConnectionId};
-use lemmy_websocket::{messages::CaptchaItem, LemmyContext};
+use lemmy_api_common::{
+  context::LemmyContext,
+  person::{CaptchaResponse, GetCaptcha, GetCaptchaResponse},
+};
+use lemmy_db_schema::source::{
+  captcha_answer::{CaptchaAnswer, CaptchaAnswerForm},
+  local_site::LocalSite,
+};
+use lemmy_utils::error::LemmyError;
 
 #[async_trait::async_trait(?Send)]
 impl Perform for GetCaptcha {
   type Response = GetCaptchaResponse;
 
-  #[tracing::instrument(skip(context, _websocket_id))]
-  async fn perform(
-    &self,
-    context: &Data<LemmyContext>,
-    _websocket_id: Option<ConnectionId>,
-  ) -> Result<Self::Response, LemmyError> {
-    let local_site = LocalSite::read(context.pool()).await?;
+  #[tracing::instrument(skip(context))]
+  async fn perform(&self, context: &Data<LemmyContext>) -> Result<Self::Response, LemmyError> {
+    let local_site = LocalSite::read(&mut context.pool()).await?;
 
     if !local_site.captcha_enabled {
       return Ok(GetCaptchaResponse { ok: None });
@@ -33,21 +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_item = CaptchaItem {
-      answer,
-      uuid: uuid.clone(),
-      expires: naive_now() + Duration::minutes(10), // expires in 10 minutes
-    };
-
-    // Stores the captcha item on the queue
-    context.chat_server().do_send(captcha_item);
+    let captcha_form: CaptchaAnswerForm = CaptchaAnswerForm { answer };
+    // Stores the captcha item in the db
+    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(),
+      }),
     })
   }
 }