diff options
author | Tyler Murphy <tylermurphy534@gmail.com> | 2022-11-09 16:48:36 -0500 |
---|---|---|
committer | Tyler Murphy <tylermurphy534@gmail.com> | 2022-11-09 16:48:36 -0500 |
commit | 5ea42e3463271f0cee2968557e8220a0b39a0bc2 (patch) | |
tree | 3ff0b009a0d81564f8017ed2e06c2757595696f9 /src/persist.rs | |
parent | move persist data to /var/run/crab (diff) | |
download | crab-5ea42e3463271f0cee2968557e8220a0b39a0bc2.tar.gz crab-5ea42e3463271f0cee2968557e8220a0b39a0bc2.tar.bz2 crab-5ea42e3463271f0cee2968557e8220a0b39a0bc2.zip |
move secure files to secure handler
Diffstat (limited to '')
-rw-r--r-- | src/persist.rs | 64 |
1 files changed, 12 insertions, 52 deletions
diff --git a/src/persist.rs b/src/persist.rs index 68bd22e..6a813dc 100644 --- a/src/persist.rs +++ b/src/persist.rs @@ -1,11 +1,10 @@ -use std::fs; -use std::os::linux::fs::MetadataExt; -use std::os::unix::prelude::PermissionsExt; use std::time::SystemTime; -use nix::unistd; use serde_json::Value; +use crate::secure; + const PERSIST_TIME: u64 = 60 * 3; +const PERSIST_PATH: &str = "/var/run/crab"; pub fn get_persist(user: &str) -> bool { let json = match get_terminal_config() { @@ -16,7 +15,7 @@ pub fn get_persist(user: &str) -> bool { Some(data) => data, None => return false }; - return now() - timestamp < PERSIST_TIME && timestamp < now(); + return now() - timestamp < PERSIST_TIME && timestamp - 1 < now(); } pub fn set_persist(user: &str) { @@ -29,11 +28,11 @@ pub fn set_persist(user: &str) { Some(data) => data, None => return }; - match write_terminal_config(&id, &json.to_string()) { - Ok(_) => {}, - Err(e) => { - eprintln!("Internal Error: {}", e) - } + match secure::write_file(PERSIST_PATH, &format!("{}", id), &json.to_string()) { + Ok(_) => {}, + Err(e) => { + eprintln!("Internal Error: {}", e) + } }; } @@ -54,12 +53,9 @@ fn get_terminal_config() -> Option<Value> { Some(data) => data, None => return None }; - if !is_file_root(&path(&id)) { - return None; - } - let data = match std::fs::read_to_string(path(&id)) { - Ok(data) => data, - Err(_) => "{}".to_string() + let data = match secure::read_file(PERSIST_PATH, &format!("{}", id)) { + Some(data) => data, + None => "{}".to_string() }; let json: Value = match serde_json::from_str(&data) { Ok(data) => data, @@ -68,42 +64,6 @@ fn get_terminal_config() -> Option<Value> { Some(json) } -fn write_terminal_config(id: &i32, data: &str) -> Result<(), Box<dyn std::error::Error>> { - std::fs::create_dir_all("/var/run/crab")?; - make_file_root("/var/run/crab")?; - std::fs::write(path(&id), "")?; - make_file_root(&path(&id))?; - std::fs::write(path(&id), data)?; - Ok(()) -} - -fn make_file_root(path: &str) -> Result<(), Box<dyn std::error::Error>> { - unistd::chown(std::path::Path::new(path), Some(unistd::Uid::from(0)), Some(unistd::Gid::from(0)))?; - let metadata = std::fs::metadata(path)?; - let mut perms = metadata.permissions(); - perms.set_mode(0o100600); - fs::set_permissions(path, perms)?; - Ok(()) -} - -fn is_file_root(path: &str) -> bool { - let metadata = match std::fs::metadata(path) { - Ok(data) => data, - Err(e) => { - if let Some(err) = e.raw_os_error() { - return err == 2; - } - return true - } - }; - let perms = metadata.permissions(); - return perms.mode() == 0o100600 && metadata.st_uid() == 0 && metadata.st_gid() == 0; -} - fn now() -> u64 { return SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs(); } - -fn path(id: &i32) -> String { - return format!("/var/run/crab/{}", id); -} |