openauth-plugins 0.0.4

Official OpenAuth plugin modules.
Documentation
use openauth_core::api::{AuthEndpointOptions, BodyField, BodySchema, JsonSchemaType};
use openauth_core::db::User;
use serde::{Deserialize, Serialize};

#[derive(Deserialize)]
pub(super) struct PasswordBody {
    pub(super) password: Option<String>,
}

#[derive(Deserialize)]
pub(super) struct EnableBody {
    pub(super) password: Option<String>,
    pub(super) issuer: Option<String>,
}

#[derive(Deserialize)]
pub(super) struct CodeBody {
    pub(super) code: String,
    #[serde(default, alias = "trustDevice")]
    pub(super) trust_device: Option<bool>,
    #[serde(default, alias = "disableSession")]
    pub(super) disable_session: Option<bool>,
}

#[derive(Deserialize)]
pub(super) struct ViewBackupCodesBody {
    #[serde(alias = "userId")]
    pub(super) user_id: String,
}

#[derive(Serialize)]
pub(super) struct StatusBody {
    pub(super) status: bool,
}

#[derive(Serialize)]
pub(super) struct TokenUserBody {
    pub(super) token: String,
    pub(super) user: User,
}

#[derive(Serialize)]
pub(super) struct EnableBodyResponse {
    #[serde(rename = "totpURI")]
    pub(super) totp_uri: String,
    #[serde(rename = "backupCodes")]
    pub(super) backup_codes: Vec<String>,
}

#[derive(Serialize)]
pub(super) struct BackupCodesBody {
    pub(super) status: bool,
    #[serde(rename = "backupCodes")]
    pub(super) backup_codes: Vec<String>,
}

pub(super) fn body_options(operation_id: &str, schema: BodySchema) -> AuthEndpointOptions {
    AuthEndpointOptions::new()
        .operation_id(operation_id)
        .allowed_media_types(["application/json"])
        .body_schema(schema)
}

pub(super) fn password_schema() -> BodySchema {
    BodySchema::object([BodyField::optional("password", JsonSchemaType::String)])
}

pub(super) fn password_issuer_schema() -> BodySchema {
    BodySchema::object([
        BodyField::optional("password", JsonSchemaType::String),
        BodyField::optional("issuer", JsonSchemaType::String),
    ])
}

pub(super) fn code_schema() -> BodySchema {
    BodySchema::object([
        BodyField::new("code", JsonSchemaType::String),
        BodyField::optional("trustDevice", JsonSchemaType::Boolean),
        BodyField::optional("disableSession", JsonSchemaType::Boolean),
    ])
}

pub(super) fn optional_trust_schema() -> BodySchema {
    BodySchema::object([BodyField::optional("trustDevice", JsonSchemaType::Boolean)])
}

pub(super) fn view_backup_codes_schema() -> BodySchema {
    BodySchema::object([BodyField::new("userId", JsonSchemaType::String)])
}