summaryrefslogtreecommitdiff
path: root/src/persist.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/persist.rs64
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);
-}