Skip to content
Clone
a06673b
32 lines 1.3 KB Rust
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<ReclaimCmd>,
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<ReclaimResp>),
(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<AuthService>,
jar: CookieJar,
cid: Option<Extension<rate_limit::ClientId>>,
cmd: AppRequest<ReclaimCmd>,
) -> Result<(CookieJar, AppResponseData<ReclaimResp>), 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)))
}