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 { match handler {
AccessControllerType::Help => {} AccessControllerType::Help => {}
_ => { _ => {
if !message_context.sender_can_manage_global_config()? { if !message_context.sender_can_manage_global_config() {
bot.messaging() bot.messaging()
.send_error_markdown_no_fail( .send_error_markdown_no_fail(
message_context.room(), message_context.room(),

View File

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

View File

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

View File

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

View File

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

View File

@@ -39,7 +39,7 @@ pub async fn handle(bot: &Bot, message_context: &MessageContext) -> anyhow::Resu
)); ));
message.push('\n'); 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( message.push_str(&strings::help::agent::create_agent_global(
bot.command_prefix(), bot.command_prefix(),
)); ));

View File

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

View File

@@ -3,7 +3,7 @@ use mxlink::MessageResponseType;
use crate::{entity::MessageContext, strings, Bot}; use crate::{entity::MessageContext, strings, Bot};
pub async fn handle(bot: &Bot, message_context: &MessageContext) -> anyhow::Result<()> { 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 = let sender_can_manage_room_local_agents =
message_context.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 &self.thread_info
} }
pub fn sender_can_manage_global_config(&self) -> anyhow::Result<bool> { pub fn sender_can_manage_global_config(&self) -> bool {
Ok(self.trigger_event_info.sender_is_admin) self.trigger_event_info.sender_is_admin
} }
pub fn sender_can_manage_room_local_agents(&self) -> anyhow::Result<bool> { pub fn sender_can_manage_room_local_agents(&self) -> mxidwc::Result<bool> {
Ok(self.sender_can_manage_global_config()? Ok(self.sender_can_manage_global_config()
|| self.sender_is_allowed_room_local_agent_manager()?) || self.sender_is_allowed_room_local_agent_manager()?)
} }
@@ -102,21 +102,8 @@ impl MessageContext {
combined combined
} }
fn sender_is_allowed_room_local_agent_manager(&self) -> anyhow::Result<bool> { fn sender_is_allowed_room_local_agent_manager(&self) -> mxidwc::Result<bool> {
match &self self.room_config_context()
.global_config() .is_user_allowed_room_local_agent_manager(self.sender_id().clone())
.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,
))
}
}
} }
} }

View File

@@ -1,3 +1,5 @@
use mxlink::matrix_sdk::ruma::OwnedUserId;
use super::globalconfig::GlobalConfig; use super::globalconfig::GlobalConfig;
use super::roomconfig::RoomConfig; use super::roomconfig::RoomConfig;
@@ -180,4 +182,18 @@ impl RoomConfigContext {
.clone() .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))
}
}
}
} }