openauth-plugins 0.0.3

Official OpenAuth plugin modules.
Documentation
use openauth_core::context::AuthContext;
use openauth_core::db::{DbRecord, DbValue};
use openauth_core::error::OpenAuthError;

pub fn anonymous_user_create_values(
    context: &AuthContext,
    anonymous_field_name: &str,
) -> Result<DbRecord, OpenAuthError> {
    let mut values = DbRecord::new();
    for (name, field) in &context.options.user.additional_fields {
        let storage_name = field.db_name.as_deref().unwrap_or(name).to_owned();
        if let Some(value) = &field.default_value {
            values.insert(storage_name, value.clone());
        } else if field.required {
            return Err(OpenAuthError::Api(format!(
                "missing default value for required anonymous user field `{name}`"
            )));
        } else {
            values.insert(storage_name, DbValue::Null);
        }
    }
    values.insert(anonymous_field_name.to_owned(), DbValue::Boolean(true));
    Ok(values)
}

pub fn anonymous_session_create_values(context: &AuthContext) -> DbRecord {
    context
        .options
        .session
        .additional_fields
        .iter()
        .map(|(name, field)| {
            (
                field.db_name.clone().unwrap_or_else(|| name.clone()),
                field.default_value.clone().unwrap_or(DbValue::Null),
            )
        })
        .collect()
}