Added printing for both shells and download paths
This commit is contained in:
parent
ad6d7dcc26
commit
59a22d3616
@ -43,4 +43,8 @@ impl Config {
|
||||
let key_str = key.into();
|
||||
self.shells.get(&key_str).cloned()
|
||||
}
|
||||
|
||||
pub fn get_shell_keys(&self) -> Vec<String> {
|
||||
self.shells.keys().map(|s| s.to_owned()).collect()
|
||||
}
|
||||
}
|
||||
|
11
src/main.rs
11
src/main.rs
@ -8,7 +8,7 @@ use axum::{
|
||||
};
|
||||
|
||||
mod argparse;
|
||||
mod print_dir;
|
||||
mod print_interface;
|
||||
mod config;
|
||||
mod shells;
|
||||
mod logging;
|
||||
@ -23,7 +23,14 @@ async fn main() {
|
||||
None => conf.web_port
|
||||
};
|
||||
|
||||
print_dir::print_interface(&args.interface, &port, &args.directory);
|
||||
println!("Files in current directory:");
|
||||
print_interface::print_directory(&args.interface, &port, &args.directory, None).unwrap();
|
||||
|
||||
println!("\nFiles in persistent download directory:");
|
||||
print_interface::print_directory(&args.interface, &port, &conf.get_download_path(), Some("download")).unwrap();
|
||||
|
||||
println!("\nConfigured shells:");
|
||||
print_interface::print_interface(&args.interface, &port, &conf.get_shell_keys(), Some("shells"));
|
||||
|
||||
let app = Router::new()
|
||||
.route("/upload", post(upload::upload_handler))
|
||||
|
@ -1,41 +0,0 @@
|
||||
use std::{fs, io};
|
||||
use std::net::IpAddr;
|
||||
use std::path::Path;
|
||||
use if_addrs::{get_if_addrs, IfAddr, Interface};
|
||||
|
||||
fn print_single_interface<P: AsRef<Path>>(iface: Interface, port: &u16, path: P) -> io::Result<()> {
|
||||
for entry in fs::read_dir(path)? {
|
||||
let entry = entry?;
|
||||
let entry_path = entry.path();
|
||||
if entry_path.is_dir() { continue }
|
||||
|
||||
let filename = entry_path.file_name().unwrap();
|
||||
|
||||
if let IfAddr::V4(_) = iface.addr {
|
||||
println!("http://{}:{}/{}", iface.ip(), port, filename.to_str().unwrap());
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn is_last_octet_one(ip: IpAddr) -> bool {
|
||||
match ip {
|
||||
IpAddr::V4(addr) => addr.octets()[3] == 1,
|
||||
_ => false
|
||||
}
|
||||
}
|
||||
|
||||
pub fn print_interface<P: AsRef<Path>>(iface_str: &str, port: &u16, path: P) {
|
||||
for iface in get_if_addrs().unwrap() {
|
||||
if iface_str == "all" {
|
||||
if iface.is_loopback() || is_last_octet_one(iface.ip()) {
|
||||
continue
|
||||
}
|
||||
} else {
|
||||
if iface_str != iface.name { continue }
|
||||
}
|
||||
|
||||
print_single_interface(iface, port, &path).unwrap();
|
||||
}
|
||||
}
|
50
src/print_interface.rs
Normal file
50
src/print_interface.rs
Normal file
@ -0,0 +1,50 @@
|
||||
use std::{fs, io};
|
||||
use std::net::IpAddr;
|
||||
use std::path::Path;
|
||||
use if_addrs::{get_if_addrs, IfAddr, Interface};
|
||||
|
||||
fn print_single_interface(iface: Interface, port: &u16, keys: &Vec<String>, prefix: Option<&str>) {
|
||||
for key in keys.iter() {
|
||||
if let IfAddr::V4(_) = iface.addr {
|
||||
match prefix {
|
||||
Some(prefix) => println!("http://{}:{}/{}/{}", iface.ip(), port, prefix, key),
|
||||
None => println!("http://{}:{}/{}", iface.ip(), port, key),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn is_last_octet_one(ip: IpAddr) -> bool {
|
||||
match ip {
|
||||
IpAddr::V4(addr) => addr.octets()[3] == 1,
|
||||
_ => false
|
||||
}
|
||||
}
|
||||
|
||||
pub fn print_interface(iface_str: &str, port: &u16, keys: &Vec<String>, prefix: Option<&str>) {
|
||||
for iface in get_if_addrs().unwrap() {
|
||||
if iface_str == "all" {
|
||||
if iface.is_loopback() || is_last_octet_one(iface.ip()) {
|
||||
continue
|
||||
}
|
||||
} else {
|
||||
if iface_str != iface.name { continue }
|
||||
}
|
||||
|
||||
print_single_interface(iface, port, keys, prefix);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pub fn print_directory<P: AsRef<Path>>(iface_str: &str, port: &u16, path: P, prefix: Option<&str>) -> io::Result<()> {
|
||||
let files = fs::read_dir(path)?
|
||||
.filter_map(|entry| entry.ok())
|
||||
.map(|entry| entry.path())
|
||||
.filter(|path| path.is_file())
|
||||
.map(|path| path.file_name().unwrap().to_string_lossy().to_string())
|
||||
.collect::<Vec<String>>();
|
||||
|
||||
print_interface(iface_str.into(), port, &files, prefix);
|
||||
|
||||
Ok(())
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user