diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-11-24 23:04:30 +0100 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-11-24 23:12:18 +0100 |
commit | 4f300537149e201d611940d3aa40ead1742423cd (patch) | |
tree | 11533afe0cd8778dc7f6d3a11e5e75cfdbf0a2d3 | |
parent | e6808c096c7b608f1b2fd91046154e100f6e1673 (diff) |
add file metadata to list output if available
-rw-r--r-- | src/main.rs | 25 |
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) |