use super::{ActionMechanism, ActionSpec};
use sysknife_types::RiskLevel;
pub fn specs() -> Vec<ActionSpec> {
vec![
list_toolboxes("testuser"),
create_toolbox("testuser", "sysknife-dev", Some("41"), None),
remove_toolbox("testuser", "sysknife-dev"),
]
}
fn toolbox_as(username: &str, toolbox_cmd: &str) -> ActionMechanism {
ActionMechanism::Command {
program: "sudo",
args: vec![
"runuser".to_string(),
"-l".to_string(),
username.to_string(),
"-c".to_string(),
format!("XDG_RUNTIME_DIR=/run/user/$(id -u) {}", toolbox_cmd),
],
}
}
pub fn list_toolboxes(username: &str) -> ActionSpec {
ActionSpec {
action_name: "ListToolboxes",
mechanism: toolbox_as(username, "toolbox list"),
risk_level: RiskLevel::Low,
reboot_required: false,
rollback_available: false,
}
}
pub fn create_toolbox(
username: &str,
name: &str,
release: Option<&str>,
image: Option<&str>,
) -> ActionSpec {
let mut cmd = format!("toolbox create --container '{}'", name);
if let Some(release) = release {
cmd.push_str(&format!(" --release '{}'", release));
}
if let Some(image) = image {
cmd.push_str(&format!(" --image '{}'", image));
}
ActionSpec {
action_name: "CreateToolbox",
mechanism: toolbox_as(username, &cmd),
risk_level: RiskLevel::Medium,
reboot_required: false,
rollback_available: false,
}
}
pub fn remove_toolbox(username: &str, name: &str) -> ActionSpec {
let cmd = format!("toolbox rm '{}'", name);
ActionSpec {
action_name: "RemoveToolbox",
mechanism: toolbox_as(username, &cmd),
risk_level: RiskLevel::Medium,
reboot_required: false,
rollback_available: false,
}
}