openauth-plugins 0.0.4

Official OpenAuth plugin modules.
Documentation
use openauth_core::api::ApiRequest;
use openauth_core::context::request_state::current_new_session;
use openauth_core::context::AuthContext;
use openauth_core::db::{DbValue, Update, Where};
use openauth_core::error::OpenAuthError;

use super::config::{LastLoginMethodOptions, DEFAULT_DATABASE_FIELD_NAME};
use super::resolve::LoginMethodContext;

pub async fn persist_last_login_method(
    context: &AuthContext,
    request: &ApiRequest,
    options: &LastLoginMethodOptions,
) -> Result<(), OpenAuthError> {
    if !options.store_in_database {
        return Ok(());
    }
    let Some(adapter) = context.adapter() else {
        return Ok(());
    };
    let Some(new_session) = current_new_session().ok().flatten() else {
        return Ok(());
    };
    let login_context = LoginMethodContext::from_request(context, request);
    let Some(method) = options.resolve_login_method(&login_context) else {
        return Ok(());
    };

    adapter
        .update(
            Update::new("user")
                .where_clause(Where::new("id", DbValue::String(new_session.user.id)))
                .data(DEFAULT_DATABASE_FIELD_NAME, DbValue::String(method)),
        )
        .await?;
    Ok(())
}