aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-11-24 23:04:30 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-11-24 23:12:18 +0100
commit4f300537149e201d611940d3aa40ead1742423cd (patch)
tree11533afe0cd8778dc7f6d3a11e5e75cfdbf0a2d3
parente6808c096c7b608f1b2fd91046154e100f6e1673 (diff)
add file metadata to list output if available
-rw-r--r--src/main.rs25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/main.rs b/src/main.rs
index 843cea0..489a8a1 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,5 +1,6 @@
use std::fs::{self, File, OpenOptions};
use std::io::{self, BufReader, Write};
+use std::os::unix::fs::{MetadataExt, PermissionsExt};
use actix_web::{
dev::ServiceRequest, http::header::ContentType, rt::time::sleep, web, App, HttpResponse,
@@ -198,7 +199,29 @@ async fn handle_data_list(info: web::Query<DataRequest>) -> HttpResponse {
.body(
ls.map(|result| {
result
- .map(|entry| format!("{}", entry.path().display()))
+ .map(|entry| match entry.metadata() {
+ Ok(meta) => {
+ format!(
+ "ty={} perm={:4o} uid={:5} gid={:5} {}",
+ if meta.is_symlink() {
+ "s"
+ } else if meta.is_dir() {
+ "d"
+ } else {
+ "-"
+ },
+ meta.permissions().mode() & 0xfff,
+ meta.uid(),
+ meta.gid(),
+ entry.path().display()
+ )
+ }
+ Err(e) => format!(
+ "ty=? perm=???? {} (meta error: {})",
+ entry.path().display(),
+ e
+ ),
+ })
.unwrap_or_else(|e| format!("error: {}", e))
})
.reduce(|acc, entry| acc + "\n" + &entry)