Skip to content
Extraits de code Groupes Projets
Vérifiée Valider 84dca778 rédigé par Kubat's avatar Kubat
Parcourir les fichiers

Can now init permissions on cmd pkg from config

The permissions related to a CmdPackage can now be initialized from the
configuration file.
parent 74aaaede
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -36,35 +36,47 @@ impl CmdAdminRegister { ...@@ -36,35 +36,47 @@ impl CmdAdminRegister {
None => return Err("Is not an admin".to_string()), None => return Err("Is not an admin".to_string()),
} }
} }
#[allow(dead_code)]
pub fn from_vec(admins_vec: Vec<UserId>) -> CmdAdminRegister {
CmdAdminRegister { admins: admins_vec }
}
} }
#[allow(dead_code)] impl CmdAcl {
pub fn action_permited( #[allow(dead_code)]
cmd_admin_register: &CmdAdminRegister, pub fn action_permited(
acls: &CmdAcl, cmd_admin_register: &CmdAdminRegister,
room: &Room, acls: &CmdAcl,
user_id: &UserId, room: &Room,
) -> Result<(), String> { user_id: &UserId,
return match acls { ) -> Result<(), String> {
CmdAcl::AdminOnly => bool_to_result!( return match acls {
cmd_admin_register.is_admin(user_id.clone()), CmdAcl::AdminOnly => bool_to_result!(
(), cmd_admin_register.is_admin(user_id.clone()),
"Is not an admin".to_string() (),
), "Is not an admin".to_string()
CmdAcl::RoomOnly(room_id) => bool_to_result!( ),
room.room_id() == room_id, CmdAcl::RoomOnly(room_id) => bool_to_result!(
(), room.room_id() == room_id,
"Not permited in this room".to_string() (),
), "Not permited in this room".to_string()
CmdAcl::List(acl_list) => match acl_list ),
.iter() CmdAcl::List(acl_list) => match acl_list
.map(|acl| action_permited(cmd_admin_register, acl, room, user_id)) .iter()
.filter(|acl_res| acl_res.is_err()) .map(|acl| CmdAcl::action_permited(cmd_admin_register, acl, room, user_id))
.map(|acl_res| acl_res.clone().unwrap_err()) .filter(|acl_res| acl_res.is_err())
.reduce(|err1, err2| err1 + ", " + &err2) .map(|acl_res| acl_res.clone().unwrap_err())
{ .reduce(|err1, err2| err1 + ", " + &err2)
Some(err) => Err(err), {
None => Ok(()), Some(err) => Err(err),
}, None => Ok(()),
}; },
};
}
#[allow(dead_code)]
pub fn from_string(string: String) -> CmdAcl {
CmdAcl::AdminOnly
}
} }
use crate::cmd::{ use crate::cmd::{
acl::{action_permited, CmdAcl, CmdAdminRegister}, acl::{CmdAcl, CmdAdminRegister},
cmd::Cmd, cmd::Cmd,
}; };
use ini::Properties as IniSection;
use log::{error, info, warn}; use log::{error, info, warn};
use matrix_sdk::{room::Room, ruma::UserId}; use matrix_sdk::{room::Room, ruma::UserId};
use std::convert::TryFrom;
pub struct CmdPackage { pub struct CmdPackage {
name: String, name: String,
...@@ -16,7 +18,7 @@ pub struct CmdPackage { ...@@ -16,7 +18,7 @@ pub struct CmdPackage {
impl CmdPackage { impl CmdPackage {
#[allow(dead_code)] #[allow(dead_code)]
pub fn handle(&self, room: &Room, user_id: &UserId, user_cmd: Vec<String>) -> String { pub fn handle(&self, room: &Room, user_id: &UserId, user_cmd: Vec<String>) -> String {
match action_permited(&self.admin_register, &self.acl, room, user_id) { match CmdAcl::action_permited(&self.admin_register, &self.acl, room, user_id) {
Err(string) => "Action not permited: ".to_string() + &string, Err(string) => "Action not permited: ".to_string() + &string,
Ok(()) => match user_cmd.split_first() { Ok(()) => match user_cmd.split_first() {
None => "No command was passed".to_string(), None => "No command was passed".to_string(),
...@@ -31,4 +33,21 @@ impl CmdPackage { ...@@ -31,4 +33,21 @@ impl CmdPackage {
}, },
} }
} }
#[allow(dead_code)]
pub fn from_config(section: IniSection, commands: Vec<Cmd>) -> CmdPackage {
CmdPackage {
name: section.get("name").unwrap().to_string(),
acl: CmdAcl::from_string(section.get("acl").unwrap().to_string()),
admin_register: CmdAdminRegister::from_vec(
section
.get("admins")
.unwrap()
.split(",")
.map(|x| UserId::try_from(x).unwrap())
.collect::<Vec<UserId>>(),
),
commands: commands,
}
}
} }
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter