openauth-plugins 0.0.4

Official OpenAuth plugin modules.
Documentation
use indexmap::IndexMap;
use openauth_core::db::{DbField, DbFieldType, DbTable, ForeignKey, OnDelete};
use openauth_core::plugin::PluginSchemaContribution;

pub fn contributions(table_name: &str) -> Vec<PluginSchemaContribution> {
    vec![
        PluginSchemaContribution::field(
            "user",
            "two_factor_enabled",
            DbField::new("two_factor_enabled", DbFieldType::Boolean)
                .optional()
                .generated(),
        ),
        PluginSchemaContribution::table("twoFactor", two_factor_table(table_name)),
    ]
}

fn two_factor_table(name: &str) -> DbTable {
    let mut fields = IndexMap::new();
    fields.insert("id".to_owned(), DbField::new("id", DbFieldType::String));
    fields.insert(
        "secret".to_owned(),
        DbField::new("secret", DbFieldType::String)
            .indexed()
            .hidden(),
    );
    fields.insert(
        "backup_codes".to_owned(),
        DbField::new("backup_codes", DbFieldType::String).hidden(),
    );
    fields.insert(
        "user_id".to_owned(),
        DbField::new("user_id", DbFieldType::String)
            .indexed()
            .hidden()
            .references(ForeignKey::new("users", "id", OnDelete::Cascade)),
    );
    fields.insert(
        "verified".to_owned(),
        DbField::new("verified", DbFieldType::Boolean)
            .optional()
            .generated(),
    );
    DbTable {
        name: name.to_owned(),
        fields,
        order: Some(20),
    }
}