mirror of
https://github.com/ChrisTitusTech/linutil.git
synced 2024-11-24 06:01:55 +00:00
Merge 96f7fa6528
into 76f8e6438b
This commit is contained in:
commit
a86c4399d9
21
Cargo.lock
generated
21
Cargo.lock
generated
|
@ -157,6 +157,12 @@ version = "1.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cfg_aliases"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "4.5.20"
|
version = "4.5.20"
|
||||||
|
@ -445,6 +451,7 @@ dependencies = [
|
||||||
"anstyle",
|
"anstyle",
|
||||||
"clap",
|
"clap",
|
||||||
"linutil_core",
|
"linutil_core",
|
||||||
|
"nix 0.29.0",
|
||||||
"oneshot",
|
"oneshot",
|
||||||
"portable-pty",
|
"portable-pty",
|
||||||
"rand",
|
"rand",
|
||||||
|
@ -538,6 +545,18 @@ dependencies = [
|
||||||
"pin-utils",
|
"pin-utils",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "nix"
|
||||||
|
version = "0.29.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 2.6.0",
|
||||||
|
"cfg-if",
|
||||||
|
"cfg_aliases",
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nom"
|
name = "nom"
|
||||||
version = "7.1.3"
|
version = "7.1.3"
|
||||||
|
@ -623,7 +642,7 @@ dependencies = [
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log",
|
||||||
"nix",
|
"nix 0.25.1",
|
||||||
"serial",
|
"serial",
|
||||||
"shared_library",
|
"shared_library",
|
||||||
"shell-words",
|
"shell-words",
|
||||||
|
|
|
@ -84,7 +84,13 @@ checkAURHelper() {
|
||||||
}
|
}
|
||||||
|
|
||||||
checkEscalationTool() {
|
checkEscalationTool() {
|
||||||
## Check for escalation tools.
|
if [ "$(id -u)" = "0" ]; then
|
||||||
|
ESCALATION_TOOL="eval"
|
||||||
|
ESCALATION_TOOL_CHECKED=true
|
||||||
|
printf "%b\n" "${CYAN}Running as root, no escalation needed${RC}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -z "$ESCALATION_TOOL_CHECKED" ]; then
|
if [ -z "$ESCALATION_TOOL_CHECKED" ]; then
|
||||||
ESCALATION_TOOLS='sudo doas'
|
ESCALATION_TOOLS='sudo doas'
|
||||||
for tool in ${ESCALATION_TOOLS}; do
|
for tool in ${ESCALATION_TOOLS}; do
|
||||||
|
|
|
@ -30,6 +30,7 @@ textwrap = "0.16.1"
|
||||||
anstyle = "1.0.8"
|
anstyle = "1.0.8"
|
||||||
ansi-to-tui = "7.0.0"
|
ansi-to-tui = "7.0.0"
|
||||||
zips = "0.1.7"
|
zips = "0.1.7"
|
||||||
|
nix = { version = "0.29.0", features = [ "user" ] }
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "linutil"
|
name = "linutil"
|
||||||
|
|
|
@ -3,6 +3,7 @@ mod filter;
|
||||||
mod float;
|
mod float;
|
||||||
mod floating_text;
|
mod floating_text;
|
||||||
mod hint;
|
mod hint;
|
||||||
|
mod root;
|
||||||
mod running_command;
|
mod running_command;
|
||||||
pub mod state;
|
pub mod state;
|
||||||
mod theme;
|
mod theme;
|
||||||
|
@ -28,6 +29,8 @@ use ratatui::{
|
||||||
};
|
};
|
||||||
use state::AppState;
|
use state::AppState;
|
||||||
|
|
||||||
|
use crate::root::create_app_state;
|
||||||
|
|
||||||
// Linux utility toolbox
|
// Linux utility toolbox
|
||||||
#[derive(Debug, Parser)]
|
#[derive(Debug, Parser)]
|
||||||
struct Args {
|
struct Args {
|
||||||
|
@ -54,7 +57,7 @@ struct Args {
|
||||||
fn main() -> io::Result<()> {
|
fn main() -> io::Result<()> {
|
||||||
let args = Args::parse();
|
let args = Args::parse();
|
||||||
|
|
||||||
let mut state = AppState::new(
|
let mut state = create_app_state(
|
||||||
args.config,
|
args.config,
|
||||||
args.theme,
|
args.theme,
|
||||||
args.override_validation,
|
args.override_validation,
|
||||||
|
|
49
tui/src/root.rs
Normal file
49
tui/src/root.rs
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
use crate::{
|
||||||
|
float::Float, float::FloatContent, floating_text::FloatingText, state::AppState, theme::Theme,
|
||||||
|
};
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
#[cfg(unix)]
|
||||||
|
use nix::unistd::Uid;
|
||||||
|
|
||||||
|
pub fn create_app_state(
|
||||||
|
config_path: Option<PathBuf>,
|
||||||
|
theme: Theme,
|
||||||
|
override_validation: bool,
|
||||||
|
size_bypass: bool,
|
||||||
|
skip_confirmation: bool,
|
||||||
|
) -> AppState {
|
||||||
|
#[cfg(unix)]
|
||||||
|
{
|
||||||
|
if Uid::effective().is_root() {
|
||||||
|
let mut state = AppState::new(
|
||||||
|
config_path,
|
||||||
|
theme,
|
||||||
|
override_validation,
|
||||||
|
size_bypass,
|
||||||
|
skip_confirmation,
|
||||||
|
);
|
||||||
|
|
||||||
|
let warning = FloatingText::new(
|
||||||
|
"\
|
||||||
|
WARNING: You are running this utility as root!\n\n\
|
||||||
|
This means you have full system access and commands can potentially damage your system if used incorrectly.\n\n\
|
||||||
|
Please proceed with caution and make sure you understand what each script does before executing it.\
|
||||||
|
".into(),
|
||||||
|
"Root User Warning",
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
let float: Float<dyn FloatContent> = Float::new(Box::new(warning), 60, 40);
|
||||||
|
state.set_float_window(float);
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AppState::new(
|
||||||
|
config_path,
|
||||||
|
theme,
|
||||||
|
override_validation,
|
||||||
|
size_bypass,
|
||||||
|
skip_confirmation,
|
||||||
|
)
|
||||||
|
}
|
|
@ -873,6 +873,10 @@ impl AppState {
|
||||||
self.current_tab.select(Some(next));
|
self.current_tab.select(Some(next));
|
||||||
self.refresh_tab();
|
self.refresh_tab();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_float_window(&mut self, float: Float<dyn FloatContent + 'static>) {
|
||||||
|
self.focus = Focus::FloatingWindow(float);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "tips")]
|
#[cfg(feature = "tips")]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user