Relocate some access check code

This commit is contained in:
Slavi Pantaleev
2024-09-19 10:02:23 +03:00
parent fb1f16aa40
commit 324c8a976f
10 changed files with 56 additions and 59 deletions

View File

@@ -13,7 +13,7 @@ pub async fn dispatch_controller(
match handler {
AccessControllerType::Help => {}
_ => {
if !message_context.sender_can_manage_global_config()? {
if !message_context.sender_can_manage_global_config() {
bot.messaging()
.send_error_markdown_no_fail(
message_context.room(),

View File

@@ -80,24 +80,21 @@ fn build_section_users(
message.push_str(&strings::access::users_no_patterns());
}
let can_manage_global_config = message_context.sender_can_manage_global_config();
if let Ok(can_manage_global_config) = can_manage_global_config {
if can_manage_global_config {
message.push_str("\n\n");
if message_context.sender_can_manage_global_config() {
message.push_str("\n\n");
message.push_str(strings::the_following_commands_are_available());
message.push('\n');
message.push_str(strings::the_following_commands_are_available());
message.push('\n');
message.push_str(&strings::help::access::users_command_get(command_prefix));
message.push('\n');
message.push_str(&strings::help::access::users_command_get(command_prefix));
message.push('\n');
message.push_str(&strings::help::access::users_command_set(command_prefix));
message.push_str("\n\n");
message.push_str(&strings::help::access::users_command_set(command_prefix));
message.push_str("\n\n");
message.push_str(&strings::help::access::example_user_patterns(
homeserver_name,
));
}
message.push_str(&strings::help::access::example_user_patterns(
homeserver_name,
));
}
message
@@ -156,27 +153,24 @@ fn build_section_room_local_agent_managers(
message.push_str(&strings::access::room_local_agent_managers_no_patterns());
}
let can_manage_global_config = message_context.sender_can_manage_global_config();
if let Ok(can_manage_global_config) = can_manage_global_config {
if can_manage_global_config {
message.push_str("\n\n");
message.push_str(strings::the_following_commands_are_available());
message.push('\n');
if message_context.sender_can_manage_global_config() {
message.push_str("\n\n");
message.push_str(strings::the_following_commands_are_available());
message.push('\n');
message.push_str(
&strings::help::access::room_local_agent_managers_command_get(command_prefix),
);
message.push('\n');
message.push_str(
&strings::help::access::room_local_agent_managers_command_get(command_prefix),
);
message.push('\n');
message.push_str(
&strings::help::access::room_local_agent_managers_command_set(command_prefix),
);
message.push_str("\n\n");
message.push_str(
&strings::help::access::room_local_agent_managers_command_set(command_prefix),
);
message.push_str("\n\n");
message.push_str(&strings::help::access::example_user_patterns(
homeserver_name,
));
}
message.push_str(&strings::help::access::example_user_patterns(
homeserver_name,
));
}
message

View File

@@ -138,7 +138,7 @@ pub async fn handle_global(
provider: &str,
agent_id_prefixless: &str,
) -> anyhow::Result<()> {
if !message_context.sender_can_manage_global_config()? {
if !message_context.sender_can_manage_global_config() {
bot.messaging()
.send_error_markdown_no_fail(
message_context.room(),

View File

@@ -50,7 +50,7 @@ pub async fn handle(
.await
}
PublicIdentifier::DynamicGlobal(_) => {
if !message_context.sender_can_manage_global_config()? {
if !message_context.sender_can_manage_global_config() {
bot.messaging()
.send_error_markdown_no_fail(
message_context.room(),

View File

@@ -47,7 +47,7 @@ pub async fn handle(
}
}
PublicIdentifier::DynamicGlobal(_) => {
if !message_context.sender_can_manage_global_config()? {
if !message_context.sender_can_manage_global_config() {
bot.messaging()
.send_error_markdown_no_fail(
message_context.room(),

View File

@@ -39,7 +39,7 @@ pub async fn handle(bot: &Bot, message_context: &MessageContext) -> anyhow::Resu
));
message.push('\n');
if message_context.sender_can_manage_global_config()? {
if message_context.sender_can_manage_global_config() {
message.push_str(&strings::help::agent::create_agent_global(
bot.command_prefix(),
));

View File

@@ -40,7 +40,7 @@ async fn dispatch_config_related_handler(
bot: &Bot,
) -> anyhow::Result<()> {
if let SettingsStorageSource::Global = config_type {
if !message_context.sender_can_manage_global_config()? {
if !message_context.sender_can_manage_global_config() {
bot.messaging()
.send_error_markdown_no_fail(
message_context.room(),

View File

@@ -3,7 +3,7 @@ use mxlink::MessageResponseType;
use crate::{entity::MessageContext, strings, Bot};
pub async fn handle(bot: &Bot, message_context: &MessageContext) -> anyhow::Result<()> {
let sender_can_manage_global_config = message_context.sender_can_manage_global_config()?;
let sender_can_manage_global_config = message_context.sender_can_manage_global_config();
let sender_can_manage_room_local_agents =
message_context.sender_can_manage_room_local_agents()?;

View File

@@ -70,12 +70,12 @@ impl MessageContext {
&self.thread_info
}
pub fn sender_can_manage_global_config(&self) -> anyhow::Result<bool> {
Ok(self.trigger_event_info.sender_is_admin)
pub fn sender_can_manage_global_config(&self) -> bool {
self.trigger_event_info.sender_is_admin
}
pub fn sender_can_manage_room_local_agents(&self) -> anyhow::Result<bool> {
Ok(self.sender_can_manage_global_config()?
pub fn sender_can_manage_room_local_agents(&self) -> mxidwc::Result<bool> {
Ok(self.sender_can_manage_global_config()
|| self.sender_is_allowed_room_local_agent_manager()?)
}
@@ -102,21 +102,8 @@ impl MessageContext {
combined
}
fn sender_is_allowed_room_local_agent_manager(&self) -> anyhow::Result<bool> {
match &self
.global_config()
.access
.room_local_agent_manager_patterns
{
None => Ok(false),
Some(patterns) => {
let allowed_regexes = mxidwc::parse_patterns_vector(patterns)?;
Ok(mxidwc::match_user_id(
self.sender_id().as_str(),
&allowed_regexes,
))
}
}
fn sender_is_allowed_room_local_agent_manager(&self) -> mxidwc::Result<bool> {
self.room_config_context()
.is_user_allowed_room_local_agent_manager(self.sender_id().clone())
}
}

View File

@@ -1,3 +1,5 @@
use mxlink::matrix_sdk::ruma::OwnedUserId;
use super::globalconfig::GlobalConfig;
use super::roomconfig::RoomConfig;
@@ -180,4 +182,18 @@ impl RoomConfigContext {
.clone()
})
}
pub fn is_user_allowed_room_local_agent_manager(
&self,
user_id: OwnedUserId,
) -> mxidwc::Result<bool> {
match &self.global_config.access.room_local_agent_manager_patterns {
None => Ok(false),
Some(patterns) => {
let allowed_regexes = mxidwc::parse_patterns_vector(patterns)?;
Ok(mxidwc::match_user_id(user_id.as_str(), &allowed_regexes))
}
}
}
}