Relocate some access check code
This commit is contained in:
@@ -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(),
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
@@ -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(),
|
||||||
));
|
));
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
@@ -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()?;
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user