doido-auth 0.0.20

Unified authentication for Doido — AuthUser trait, extractors, strategies, and auth generators.
Documentation
use crate::models::user::Model as User;
use doido::controller::{controller, Context, Response};
use doido_auth::{require_user, CurrentUser, TwoFactor};
use serde::Deserialize;

#[derive(Deserialize)]
pub struct TwoFactorForm {
    pub code: String,
}

pub struct TwoFactorController;

#[controller]
impl TwoFactorController {
    #[before_action(require_user)]
    /// POST /users/two_factor
    pub async fn create(mut ctx: Context, user: CurrentUser<User>) -> doido::Result<Response> {
        let form: TwoFactorForm = ctx.body_json().await?;
        TwoFactor::verify(&user, &form.code)?;
        Ok(ctx.status(204))
    }
}