use crate::access_keys::store::get_access_keys;
use crate::errors::auth::{
JUNO_AUTH_ERROR_NOT_ADMIN_CONTROLLER, JUNO_AUTH_ERROR_NOT_CONTROLLER,
JUNO_AUTH_ERROR_NOT_WRITE_CONTROLLER,
};
use junobuild_shared::ic::api::caller;
use junobuild_shared::segments::access_keys::{
is_admin_controller, is_valid_access_key, is_write_access_key,
};
use junobuild_shared::types::state::AccessKeys;
pub fn caller_is_admin() -> Result<(), String> {
let caller = caller();
let controllers: AccessKeys = get_access_keys();
if is_admin_controller(caller, &controllers) {
Ok(())
} else {
Err(JUNO_AUTH_ERROR_NOT_ADMIN_CONTROLLER.to_string())
}
}
pub fn caller_has_write_permission() -> Result<(), String> {
let caller = caller();
let controllers: AccessKeys = get_access_keys();
if is_write_access_key(caller, &controllers) {
Ok(())
} else {
Err(JUNO_AUTH_ERROR_NOT_WRITE_CONTROLLER.to_string())
}
}
pub fn caller_is_access_key() -> Result<(), String> {
let caller = caller();
let controllers: AccessKeys = get_access_keys();
if is_valid_access_key(caller, &controllers) {
Ok(())
} else {
Err(JUNO_AUTH_ERROR_NOT_CONTROLLER.to_string())
}
}