Skip to content

Commit

Permalink
feat(filebrowser): quality-of-life improvements (#123)
Browse files Browse the repository at this point in the history
New features: uploading, downloading, hidden file toggle, refresh button, syntax highlighting toggle, sticky sidebar.

Bug fixes: Files are no longer renamed null when canceled, warn when files will be overwritten when renaming, confirmation when deleting files, horizontal scroll bar doesn't cover file contents when editing, copying actually increases number.
  • Loading branch information
ravenclaw900 committed Feb 6, 2022
1 parent f938983 commit 8e2e404
Show file tree
Hide file tree
Showing 15 changed files with 611 additions and 174 deletions.
54 changes: 54 additions & 0 deletions src/backend/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions src/backend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ jwts = "0.2.4"
sha2 = "0.10.1"
toml = "0.5.8"
if-addrs = "0.7.0"
zip = { version = "0.5.13", default-features = false, features = ["deflate", "time"] }
walkdir = "2.3.2"

[patch.crates-io]
psutil = { git = "https://github.com/mygnu/rust-psutil", branch = "update-dependencies" }
Expand Down
2 changes: 1 addition & 1 deletion src/backend/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ fn main() {
.or(main_route)
.with(warp::compression::gzip());

let socket_routes = terminal_route.or(socket_route).or(file_route);
let socket_routes = terminal_route.or(file_route).or(socket_route);

let routes = socket_routes
.or(login_route)
Expand Down
29 changes: 8 additions & 21 deletions src/backend/src/page_handlers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -229,28 +229,12 @@ pub async fn browser_handler(
)))
.await;
}
"open" => {
let _send = (*socket_send)
.send(Message::text(SerJson::serialize_json(
&shared::BrowserFileData {
textdata: std::fs::read_to_string(std::path::Path::new(
&data.args[0],
))
.unwrap(),
},
)))
.await;
}
"img" => {
let _send = (*socket_send)
.send(Message::binary(std::fs::read(&data.args[0]).unwrap()))
.await;
}
"save" => {
std::fs::write(std::path::Path::new(&data.args[0]), &data.args[1]).unwrap();
}
"copy" => {
std::fs::copy(&data.args[0], format!("{} {}", &data.args[0], 2)).unwrap();
let mut num = 2;
while std::path::Path::new(&format!("{} {}", &data.args[0], num)).exists() {
num += 1;
}
std::fs::copy(&data.args[0], format!("{} {}", &data.args[0], num)).unwrap();
browser_refresh(&mut *socket_send, &data.args[0]).await;
}
"rm" => {
Expand All @@ -273,6 +257,9 @@ pub async fn browser_handler(
std::fs::rename(&data.args[0], &data.args[1]).unwrap();
browser_refresh(&mut *socket_send, &data.args[0]).await;
}
"refresh" => {
browser_refresh(&mut *socket_send, &data.args[0]).await;
}
_ => {}
},
}
Expand Down
46 changes: 22 additions & 24 deletions src/backend/src/shared.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,30 +4,6 @@ lazy_static::lazy_static! {
pub static ref CONFIG: crate::config::Config = crate::config::config();
}

pub fn validate_token(token: &str) -> bool {
let key = jwts::jws::Key::new(&crate::CONFIG.secret, jwts::jws::Algorithm::HS256);
let verified: jwts::jws::Token<jwts::Claims>;
if let Ok(token) = jwts::jws::Token::verify_with_key(token, &key) {
verified = token;
} else {
log::error!("Couldn't verify token");
return false;
};
let config = jwts::ValidationConfig {
iat_validation: false,
nbf_validation: false,
exp_validation: true,
expected_iss: Some("DietPi Dashboard".to_string()),
expected_sub: None,
expected_aud: None,
expected_jti: None,
};
if verified.validate_claims(&config).is_err() {
return false;
}
true
}

#[derive(SerJson)]
pub struct SysData {
pub cpu: f32,
Expand Down Expand Up @@ -150,3 +126,25 @@ pub struct BrowserList {
pub struct TokenError {
pub error: bool,
}

#[derive(DeJson)]
pub struct FileRequest {
#[nserde(default)]
pub cmd: String,
#[nserde(default)]
pub path: String,
#[nserde(default)]
pub token: String,
#[nserde(default)]
pub arg: String,
}

#[derive(SerJson)]
pub struct FileSize {
pub size: usize,
}

#[derive(SerJson)]
pub struct FileUploadFinished {
pub finished: bool,
}
Loading

0 comments on commit 8e2e404

Please sign in to comment.