doido-auth 0.0.20

Unified authentication for Doido — AuthUser trait, extractors, strategies, and auth generators.
Documentation
use crate::models::user::{ActiveModel, 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 {
    /// GET /users/two_factor
    #[before_action(require_user)]
    pub async fn show(ctx: Context, _user: CurrentUser<User>) -> Response {
        ctx.render("auth/two_factor", serde_json::json!({}))
    }

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