use axum::extract::{Extension, State}; use axum_extra::extract::cookie::CookieJar; use crate::error::AuthError; use crate::features::AuthService; use crate::features::reclaim::types::{ReclaimCmd, ReclaimResp}; use export::data::{AppRequest, AppRequestData, AppResponseData}; use super::super::cookies; #[utoipa::path( post, path = "/auth/email/reclaim", tag = "auth", request_body = AppRequestData, responses( (status = 200, description = "A Signup verification code was issued to the mailbox if the account is inactive; otherwise a constant-shaped no-op is returned.", body = AppResponseData), (status = 400, description = "Validation / PoW failure.", body = super::super::openapi::ErrorBody), (status = 429, description = "Rate limited.", body = super::super::openapi::ErrorBody), ), )] pub(crate) async fn handler( State(svc): State, jar: CookieJar, cid: Option>, cmd: AppRequest, ) -> Result<(CookieJar, AppResponseData), AuthError> { let resp = svc.reclaim_code(cmd.into_inner(), cid.map(|c| c.0 .0)).await?; let cookie = cookies::temp_key_to_cookie(&svc.config, &resp.temp_key); let jar = jar.add(cookie); Ok((jar, AppResponseData::ok(resp))) }