Skip to content

Commit

Permalink
Moved security level checks to security expressions.
Browse files Browse the repository at this point in the history
Expressions are way more flexible.
  • Loading branch information
mkrueger committed Feb 7, 2025
1 parent 63f374b commit c751d85
Show file tree
Hide file tree
Showing 9 changed files with 279 additions and 221 deletions.
126 changes: 63 additions & 63 deletions crates/icbsetup/src/import/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ use icy_board_engine::{
icb_config::{
AccountingOptions, ConfigSwitches, EventOptions, FileTransferOptions, LimitOptions, MessageOptions, SystemControlOptions, UserCommandLevels,
},
security_expr::SecurityExpression,
user_base::{PasswordInfo, User},
PCBoardRecordImporter,
},
Expand Down Expand Up @@ -270,72 +271,71 @@ impl PCBoardImporter {
},
sysop_command_level: SysopCommandLevels {
sysop: self.data.sysop_security.sysop as u8,
read_all_comments: self.data.sysop_security.read_all_comments as u8,
read_all_mail: self.data.sysop_security.read_all_mail as u8,
copy_move_messages: self.data.sysop_security.copy_move_messages as u8,
enter_color_codes_in_messages: self.data.sysop_security.enter_at_vars_in_messages as u8,
use_broadcast_command: self.data.sysop_security.use_broadcast_command as u8,
view_private_uploads: self.data.sysop_security.view_private_uploads as u8,
edit_message_headers: self.data.sysop_security.edit_message_headers as u8,
protect_unprotect_messages: self.data.sysop_security.protect_unprotect_messages as u8,
set_pack_out_date_on_messages: self.data.sysop_security.set_pack_out_date_on_messages as u8,
edit_any_message: self.data.sysop_security.edit_any_message as u8,
not_update_msg_read: self.data.sysop_security.not_update_msg_read_status as u8,
enter_generic_messages: self.data.sysop_security.enter_generic_message as u8,
overwrite_files_on_uploads: self.data.sysop_security.overwrite_uploads as u8,
see_all_return_receipts: self.data.sysop_security.see_all_return_receipt_messages as u8,

sec_1_view_caller_log: self.data.sysop_security.sec_1_view_caller_log as u8,
sec_2_view_usr_list: self.data.sysop_security.sec_2_view_usr_list as u8,
sec_3_pack_renumber_msg: self.data.sysop_security.sec_3_pack_renumber_msg as u8,
sec_4_recover_deleted_msg: self.data.sysop_security.sec_4_recover_deleted_msg as u8,
sec_5_list_message_hdr: self.data.sysop_security.sec_5_list_message_hdr as u8,
sec_6_view_any_file: self.data.sysop_security.sec_6_view_any_file as u8,
sec_7_user_maint: self.data.sysop_security.sec_7_user_maint as u8,
sec_8_pack_usr_file: self.data.sysop_security.sec_8_pack_usr_file as u8,
sec_9_exit_to_dos: self.data.sysop_security.sec_9_exit_to_dos as u8,
sec_10_shelled_dos_func: self.data.sysop_security.sec_10_shelled_dos_func as u8,
sec_11_view_other_nodes: self.data.sysop_security.sec_11_view_other_nodes as u8,
sec_12_logoff_alt_node: self.data.sysop_security.sec_12_logoff_alt_node as u8,
sec_13_view_alt_node_callers: self.data.sysop_security.sec_13_drop_alt_node_to_dos as u8,
sec_14_drop_alt_node_to_dos: self.data.sysop_security.sec_14_drop_to_dos as u8,
read_all_comments: SecurityExpression::from_req_security(self.data.sysop_security.read_all_comments as u8),
read_all_mail: SecurityExpression::from_req_security(self.data.sysop_security.read_all_mail as u8),
copy_move_messages: SecurityExpression::from_req_security(self.data.sysop_security.copy_move_messages as u8),
enter_color_codes_in_messages: SecurityExpression::from_req_security(self.data.sysop_security.enter_at_vars_in_messages as u8),
use_broadcast_command: SecurityExpression::from_req_security(self.data.sysop_security.use_broadcast_command as u8),
view_private_uploads: SecurityExpression::from_req_security(self.data.sysop_security.view_private_uploads as u8),
edit_message_headers: SecurityExpression::from_req_security(self.data.sysop_security.edit_message_headers as u8),
protect_unprotect_messages: SecurityExpression::from_req_security(self.data.sysop_security.protect_unprotect_messages as u8),
set_pack_out_date_on_messages: SecurityExpression::from_req_security(self.data.sysop_security.set_pack_out_date_on_messages as u8),
edit_any_message: SecurityExpression::from_req_security(self.data.sysop_security.edit_any_message as u8),
not_update_msg_read: SecurityExpression::from_req_security(self.data.sysop_security.not_update_msg_read_status as u8),
enter_generic_messages: SecurityExpression::from_req_security(self.data.sysop_security.enter_generic_message as u8),
overwrite_files_on_uploads: SecurityExpression::from_req_security(self.data.sysop_security.overwrite_uploads as u8),
see_all_return_receipts: SecurityExpression::from_req_security(self.data.sysop_security.see_all_return_receipt_messages as u8),

sec_1_view_caller_log: SecurityExpression::from_req_security(self.data.sysop_security.sec_1_view_caller_log as u8),
sec_2_view_usr_list: SecurityExpression::from_req_security(self.data.sysop_security.sec_2_view_usr_list as u8),
sec_3_pack_renumber_msg: SecurityExpression::from_req_security(self.data.sysop_security.sec_3_pack_renumber_msg as u8),
sec_4_recover_deleted_msg: SecurityExpression::from_req_security(self.data.sysop_security.sec_4_recover_deleted_msg as u8),
sec_5_list_message_hdr: SecurityExpression::from_req_security(self.data.sysop_security.sec_5_list_message_hdr as u8),
sec_6_view_any_file: SecurityExpression::from_req_security(self.data.sysop_security.sec_6_view_any_file as u8),
sec_7_user_maint: SecurityExpression::from_req_security(self.data.sysop_security.sec_7_user_maint as u8),
sec_8_pack_usr_file: SecurityExpression::from_req_security(self.data.sysop_security.sec_8_pack_usr_file as u8),
sec_9_exit_to_dos: SecurityExpression::from_req_security(self.data.sysop_security.sec_9_exit_to_dos as u8),
sec_10_shelled_dos_func: SecurityExpression::from_req_security(self.data.sysop_security.sec_10_shelled_dos_func as u8),
sec_11_view_other_nodes: SecurityExpression::from_req_security(self.data.sysop_security.sec_11_view_other_nodes as u8),
sec_12_logoff_alt_node: SecurityExpression::from_req_security(self.data.sysop_security.sec_12_logoff_alt_node as u8),
sec_13_view_alt_node_callers: SecurityExpression::from_req_security(self.data.sysop_security.sec_13_drop_alt_node_to_dos as u8),
sec_14_drop_alt_node_to_dos: SecurityExpression::from_req_security(self.data.sysop_security.sec_14_drop_to_dos as u8),
},

user_command_level: UserCommandLevels {
cmd_a: self.data.user_levels.cmd_a as u8,
cmd_b: self.data.user_levels.cmd_b as u8,
cmd_c: self.data.user_levels.cmd_c as u8,
cmd_d: self.data.user_levels.cmd_d as u8,
cmd_e: self.data.user_levels.cmd_e as u8,
cmd_f: self.data.user_levels.cmd_f as u8,

cmd_h: self.data.user_levels.cmd_h as u8,
cmd_i: self.data.user_levels.cmd_i as u8,
cmd_j: self.data.user_levels.cmd_j as u8,
cmd_k: self.data.user_levels.cmd_k as u8,
cmd_l: self.data.user_levels.cmd_l as u8,
cmd_m: self.data.user_levels.cmd_m as u8,
cmd_n: self.data.user_levels.cmd_n as u8,
cmd_o: self.data.user_levels.cmd_o as u8,
cmd_p: self.data.user_levels.cmd_p as u8,
cmd_q: self.data.user_levels.cmd_q as u8,
cmd_r: self.data.user_levels.cmd_r as u8,
cmd_s: self.data.user_levels.cmd_s as u8,
cmd_t: self.data.user_levels.cmd_t as u8,
cmd_u: self.data.user_levels.cmd_u as u8,
cmd_v: self.data.user_levels.cmd_v as u8,
cmd_w: self.data.user_levels.cmd_w as u8,
cmd_x: self.data.user_levels.cmd_x as u8,
cmd_y: self.data.user_levels.cmd_y as u8,
cmd_z: self.data.user_levels.cmd_z as u8,

cmd_chat: self.data.user_levels.cmd_chat as u8,
cmd_open_door: self.data.user_levels.cmd_open_door as u8,
cmd_show_user_list: self.data.user_levels.cmd_show_user_list as u8,
cmd_test_file: self.data.user_levels.cmd_test_file as u8,
cmd_who: self.data.user_levels.cmd_who as u8,
batch_file_transfer: self.data.user_levels.batch_file_transfer as u8,
edit_own_messages: self.data.user_levels.edit_own_messages as u8,
cmd_a: SecurityExpression::from_req_security(self.data.user_levels.cmd_a as u8),
cmd_b: SecurityExpression::from_req_security(self.data.user_levels.cmd_b as u8),
cmd_c: SecurityExpression::from_req_security(self.data.user_levels.cmd_c as u8),
cmd_d: SecurityExpression::from_req_security(self.data.user_levels.cmd_d as u8),
cmd_e: SecurityExpression::from_req_security(self.data.user_levels.cmd_e as u8),
cmd_f: SecurityExpression::from_req_security(self.data.user_levels.cmd_f as u8),
cmd_h: SecurityExpression::from_req_security(self.data.user_levels.cmd_h as u8),
cmd_i: SecurityExpression::from_req_security(self.data.user_levels.cmd_i as u8),
cmd_j: SecurityExpression::from_req_security(self.data.user_levels.cmd_j as u8),
cmd_k: SecurityExpression::from_req_security(self.data.user_levels.cmd_k as u8),
cmd_l: SecurityExpression::from_req_security(self.data.user_levels.cmd_l as u8),
cmd_m: SecurityExpression::from_req_security(self.data.user_levels.cmd_m as u8),
cmd_n: SecurityExpression::from_req_security(self.data.user_levels.cmd_n as u8),
cmd_o: SecurityExpression::from_req_security(self.data.user_levels.cmd_o as u8),
cmd_p: SecurityExpression::from_req_security(self.data.user_levels.cmd_p as u8),
cmd_q: SecurityExpression::from_req_security(self.data.user_levels.cmd_q as u8),
cmd_r: SecurityExpression::from_req_security(self.data.user_levels.cmd_r as u8),
cmd_s: SecurityExpression::from_req_security(self.data.user_levels.cmd_s as u8),
cmd_t: SecurityExpression::from_req_security(self.data.user_levels.cmd_t as u8),
cmd_u: SecurityExpression::from_req_security(self.data.user_levels.cmd_u as u8),
cmd_v: SecurityExpression::from_req_security(self.data.user_levels.cmd_v as u8),
cmd_w: SecurityExpression::from_req_security(self.data.user_levels.cmd_w as u8),
cmd_x: SecurityExpression::from_req_security(self.data.user_levels.cmd_x as u8),
cmd_y: SecurityExpression::from_req_security(self.data.user_levels.cmd_y as u8),
cmd_z: SecurityExpression::from_req_security(self.data.user_levels.cmd_z as u8),

cmd_chat: SecurityExpression::from_req_security(self.data.user_levels.cmd_chat as u8),
cmd_open_door: SecurityExpression::from_req_security(self.data.user_levels.cmd_open_door as u8),
cmd_show_user_list: SecurityExpression::from_req_security(self.data.user_levels.cmd_show_user_list as u8),
cmd_test_file: SecurityExpression::from_req_security(self.data.user_levels.cmd_test_file as u8),
cmd_who: SecurityExpression::from_req_security(self.data.user_levels.cmd_who as u8),
batch_file_transfer: SecurityExpression::from_req_security(self.data.user_levels.batch_file_transfer as u8),
edit_own_messages: SecurityExpression::from_req_security(self.data.user_levels.edit_own_messages as u8),
},
color_configuration,
board: BoardInformation {
Expand Down
19 changes: 10 additions & 9 deletions crates/icbsetup/src/tabs/general/conferences/conference_editor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,15 +64,16 @@ impl ConferenceEditor {
}),
),
ConfigEntry::Item(
ListItem::new(get_text("conf_req_sec_if_pub"), ListValue::Text(50, conf.required_security.to_string()))
.with_label_width(24)
.with_edit_width(14)
.with_update_text_value(&|board: &(usize, Arc<Mutex<IcyBoard>>), value: String| {
let mut ib = board.1.lock().unwrap();
if let Ok(se) = SecurityExpression::from_str(&value) {
ib.conferences[board.0].required_security = se;
}
}),
ListItem::new(
get_text("conf_req_sec_if_pub"),
ListValue::Security(conf.required_security.clone(), conf.required_security.to_string()),
)
.with_label_width(24)
.with_edit_width(14)
.with_update_sec_value(&|board: &(usize, Arc<Mutex<IcyBoard>>), value: SecurityExpression| {
let mut ib = board.1.lock().unwrap();
ib.conferences[board.0].required_security = value;
}),
),
],
),
Expand Down
4 changes: 2 additions & 2 deletions crates/icbsetup/src/tabs/general/new_user_options.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::sync::{Arc, Mutex};

use crate::{cfg_entry_bool, cfg_entry_sec_level, cfg_entry_text};
use crate::{cfg_entry_bool, cfg_entry_text, cfg_entry_u8};
use crossterm::event::KeyEvent;
use icy_board_engine::icy_board::IcyBoard;
use icy_board_tui::{
Expand All @@ -26,7 +26,7 @@ impl NewUserOptions {

let entry: Vec<ConfigEntry<Arc<Mutex<IcyBoard>>>> = vec![
ConfigEntry::Separator,
cfg_entry_sec_level!("new_user_security_level", label_width, new_user_settings, sec_level, lock),
cfg_entry_u8!("new_user_security_level", label_width, 0, 255, new_user_settings, sec_level, lock),
ConfigEntry::Separator,
cfg_entry_bool!("allow_one_name_users", label_width, new_user_settings, allow_one_name_users, lock),
cfg_entry_text!("new_user_groups", label_width, 30, new_user_settings, new_user_groups, lock),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use icy_board_tui::{
tab_page::{Page, PageMessage},
};

use crate::{cfg_entry_sec_level, tabs::ICBConfigMenuUI};
use crate::{cfg_entry_sec_level, cfg_entry_u8, tabs::ICBConfigMenuUI};

pub struct SysopCommands {
menu: ICBConfigMenuUI,
Expand All @@ -21,7 +21,7 @@ impl SysopCommands {
let label_width = 52;
let entry = vec![
ConfigEntry::Separator,
cfg_entry_sec_level!("sysop_sec_level", label_width, sysop_command_level, sysop, lock),
cfg_entry_u8!("sysop_sec_level", label_width, 0, 255, sysop_command_level, sysop, lock),
cfg_entry_sec_level!("sysop_sec_read_all_comments", label_width, sysop_command_level, read_all_comments, lock),
cfg_entry_sec_level!("sysop_sec_read_all_mail", label_width, sysop_command_level, read_all_mail, lock),
cfg_entry_sec_level!("sysop_sec_copy_move_messages", label_width, sysop_command_level, copy_move_messages, lock),
Expand Down
4 changes: 2 additions & 2 deletions crates/icbsetup/src/tabs/general/subscription_information.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use icy_board_tui::{
tab_page::{Page, PageMessage},
};

use crate::{cfg_entry_bool, cfg_entry_sec_level, cfg_entry_u32};
use crate::{cfg_entry_bool, cfg_entry_u32, cfg_entry_u8};

use super::ICBConfigMenuUI;

Expand All @@ -25,7 +25,7 @@ impl SubscriptionInformation {
ConfigEntry::Separator,
cfg_entry_bool!("subscription_is_enabled", label_width, subscription_info, is_enabled, lock),
cfg_entry_u32!("subscription_length", label_width, 0, 1000, subscription_info, subscription_length, lock),
cfg_entry_sec_level!("default_expired_level", label_width, subscription_info, default_expired_level, lock),
cfg_entry_u8!("default_expired_level", label_width, 0, 255, subscription_info, default_expired_level, lock),
cfg_entry_u32!("warning_days", label_width, 0, 365, subscription_info, warning_days, lock),
];
ConfigMenu {
Expand Down
12 changes: 6 additions & 6 deletions crates/icbsetup/src/tabs/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -140,34 +140,34 @@ macro_rules! cfg_entry_sec_level {
icy_board_tui::config_menu::ConfigEntry::Item(
icy_board_tui::config_menu::ListItem::new(
icy_board_tui::get_text($i),
icy_board_tui::config_menu::ListValue::U32($lock.config.$property.$conf as u32, 0, 255),
icy_board_tui::config_menu::ListValue::Security($lock.config.$property.$conf.clone(), $lock.config.$property.$conf.to_string()),
)
.with_status(&icy_board_tui::get_text(&format!("{}-status", $i)))
.with_help(&icy_board_tui::get_text(&format!("{}-help", $i)))
.with_label_width($width)
.with_update_value(Box::new(|board: &Arc<Mutex<IcyBoard>>, value: &icy_board_tui::config_menu::ListValue| {
let icy_board_tui::config_menu::ListValue::U32(val, _, _) = value else {
let icy_board_tui::config_menu::ListValue::Security(val, _) = value else {
return;
};
board.lock().unwrap().config.$property.$conf = *val as u8;
board.lock().unwrap().config.$property.$conf = val.clone();
})),
)
};
($i:expr, $width:expr, $property:ident, $conf:ident, $lock:expr, $edit_width:expr) => {
icy_board_tui::config_menu::ConfigEntry::Item(
icy_board_tui::config_menu::ListItem::new(
icy_board_tui::get_text($i),
icy_board_tui::config_menu::ListValue::U32($lock.config.$property.$conf as u32, 0, 255),
icy_board_tui::config_menu::ListValue::Security($lock.config.$property.$conf.clone(), $lock.config.$property.$conf.to_string()),
)
.with_status(&icy_board_tui::get_text(&format!("{}-status", $i)))
.with_help(&icy_board_tui::get_text(&format!("{}-help", $i)))
.with_label_width($width)
.with_edit_width($edit_width)
.with_update_value(Box::new(|board: &Arc<Mutex<IcyBoard>>, value: &icy_board_tui::config_menu::ListValue| {
let icy_board_tui::config_menu::ListValue::U32(val, _, _) = value else {
let icy_board_tui::config_menu::ListValue::Security(val, _) = value else {
return;
};
board.lock().unwrap().config.$property.$conf = *val as u8;
board.lock().unwrap().config.$property.$conf = val.clone();
})),
)
};
Expand Down
Loading

0 comments on commit c751d85

Please sign in to comment.