autter-core 2.0.2

Autter authentication service for Shrimpcamp
Documentation
#[macro_export]
macro_rules! get_user_from_token {
    ($jar:ident, $db:expr) => {{
        if let Some(token) = $jar.get("__Secure-shrimpcamp-token") {
            match $db
                .get_user_by_token(&tritools::encoding::hash(
                    token.to_string().replace("__Secure-shrimpcamp-token=", ""),
                ))
                .await
            {
                Ok(mut ua) => {
                    if ua
                        .permissions
                        .contains(&autter_core::model::UserPermission::Banned)
                    {
                        // check expiration
                        let now = tritools::time::unix_epoch_timestamp() as usize;
                        let expired = ua.ban_expire <= now;

                        if expired && ua.ban_expire != 0 {
                            ua.permissions.remove(
                                ua.permissions
                                    .iter()
                                    .position(|x| *x == autter_core::model::UserPermission::Banned)
                                    .unwrap(),
                            );
                            $db.update_user_permissions(&ua.id, ua.permissions.clone())
                                .await
                                .expect("failed to auto unban user");

                            Some(ua)
                        } else {
                            // banned
                            let mut banned_user = autter_core::model::User::banned();

                            banned_user.ban_reason = ua.ban_reason;
                            banned_user.ban_expire = ua.ban_expire;

                            Some(banned_user)
                        }
                    } else {
                        Some(ua)
                    }
                }
                Err(_) => None,
            }
        } else {
            None
        }
    }};
}

#[macro_export]
macro_rules! permissions_list {
    ($data:expr, $membership:ident, $lid:expr) => {{
        let role_id = if let OrganizationRole::Custom(rid) = $membership.role {
            rid
        } else {
            0
        };

        match $data.get_permissions_list_by_id(&$lid).await {
            Ok(permissions_list) => {
                if !permissions_list.roles.contains(&role_id)
                    && $membership.role != OrganizationRole::Owner
                {
                    false
                } else {
                    true
                }
            }
            Err(_) => $membership.role == OrganizationRole::Owner,
        }
    }};
}