mirror of
https://github.com/ChrisTitusTech/linutil.git
synced 2024-11-21 21:09:42 +00:00
implement a root check menu
This commit is contained in:
parent
f5f38243f0
commit
eab47e9eb8
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"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "cfg_aliases"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.5.20"
|
||||
|
@ -436,6 +442,7 @@ dependencies = [
|
|||
"anstyle",
|
||||
"clap",
|
||||
"linutil_core",
|
||||
"nix 0.29.0",
|
||||
"oneshot",
|
||||
"portable-pty",
|
||||
"rand",
|
||||
|
@ -528,6 +535,18 @@ dependencies = [
|
|||
"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]]
|
||||
name = "nom"
|
||||
version = "7.1.3"
|
||||
|
@ -598,7 +617,7 @@ dependencies = [
|
|||
"lazy_static",
|
||||
"libc",
|
||||
"log",
|
||||
"nix",
|
||||
"nix 0.25.1",
|
||||
"serial",
|
||||
"shared_library",
|
||||
"shell-words",
|
||||
|
|
|
@ -29,6 +29,7 @@ textwrap = "0.16.1"
|
|||
anstyle = "1.0.8"
|
||||
ansi-to-tui = "7.0.0"
|
||||
zips = "0.1.7"
|
||||
nix = { version = "0.29.0", features = [ "user" ] }
|
||||
|
||||
[[bin]]
|
||||
name = "linutil"
|
||||
|
|
|
@ -3,6 +3,7 @@ mod filter;
|
|||
mod float;
|
||||
mod floating_text;
|
||||
mod hint;
|
||||
mod root;
|
||||
mod running_command;
|
||||
pub mod state;
|
||||
mod theme;
|
||||
|
@ -28,6 +29,8 @@ use ratatui::{
|
|||
};
|
||||
use state::AppState;
|
||||
|
||||
use crate::root::create_app_state;
|
||||
|
||||
// Linux utility toolbox
|
||||
#[derive(Debug, Parser)]
|
||||
struct Args {
|
||||
|
@ -54,7 +57,7 @@ struct Args {
|
|||
fn main() -> io::Result<()> {
|
||||
let args = Args::parse();
|
||||
|
||||
let mut state = AppState::new(
|
||||
let mut state = create_app_state(
|
||||
args.config,
|
||||
args.theme,
|
||||
args.override_validation,
|
||||
|
|
45
tui/src/root.rs
Normal file
45
tui/src/root.rs
Normal file
|
@ -0,0 +1,45 @@
|
|||
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\nThis means you have full system access and commands can potentially damage your system if used incorrectly.\n\nPlease proceed with caution and make sure you understand what each command 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.refresh_tab();
|
||||
}
|
||||
|
||||
pub fn set_float_window(&mut self, float: Float<dyn FloatContent + 'static>) {
|
||||
self.focus = Focus::FloatingWindow(float);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "tips")]
|
||||
|
|
Loading…
Reference in New Issue
Block a user