dialtone_axum 0.1.0

Dialtone Axum Back-end
Documentation
use crate::response::response_error::ResponseError;

use dialtone_common::authz::actor::authz_actor_on_host;
use dialtone_common::authz::ap_object::authz_ap_object_on_host;

use dialtone_common::authz::user_authz_info::UserAuthzInfo;
use dialtone_common::rest::users::web_user::SystemRole;

use dialtone_sqlx::db::actor_owner::fetch_authz::fetch_actor_owner_authz;
use dialtone_sqlx::db::ap_object::fetch_authz::fetch_ap_object_authz;
use sqlx::{Executor, Postgres};

pub async fn authz_for_actor(
    exec: impl Executor<'_, Database = Postgres>,
    user_authz: &UserAuthzInfo,
    actor_id: &str,
) -> Result<bool, ResponseError> {
    if authz_actor_on_host(user_authz, &SystemRole::ActorAdmin, &actor_id) {
        return Ok(true);
    }
    let actor_authz = fetch_actor_owner_authz(exec, actor_id, &user_authz.acct).await?;
    Ok(actor_authz)
}

pub async fn authz_actor_for_ap_object(
    exec: impl Executor<'_, Database = Postgres>,
    user_authz: &UserAuthzInfo,
    actor_id: &str,
) -> Result<bool, ResponseError> {
    if authz_actor_on_host(&user_authz, &SystemRole::ContentAdmin, &actor_id) {
        return Ok(true);
    }
    let ap_object_authz = fetch_actor_owner_authz(exec, actor_id, &user_authz.acct).await?;
    Ok(ap_object_authz)
}

pub async fn authz_for_ap_object(
    exec: impl Executor<'_, Database = Postgres>,
    user_authz: &UserAuthzInfo,
    ap_object_id: &str,
) -> Result<bool, ResponseError> {
    if authz_ap_object_on_host(&user_authz, &SystemRole::ContentAdmin, &ap_object_id) {
        return Ok(true);
    }
    let ap_object_authz = fetch_ap_object_authz(exec, ap_object_id, &user_authz.acct).await?;
    Ok(ap_object_authz)
}