changed to simple file server
This commit is contained in:
@@ -8,3 +8,5 @@ edition = "2018"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
simple-server = "0.4.0"
|
simple-server = "0.4.0"
|
||||||
|
rust_util = "0.2.2"
|
||||||
|
|
||||||
|
|||||||
77
src/main.rs
77
src/main.rs
@@ -1,31 +1,72 @@
|
|||||||
use simple_server::Server;
|
use simple_server::Server;
|
||||||
|
use rust_util::{
|
||||||
|
XResult,
|
||||||
|
util_msg::{
|
||||||
|
MessageType,
|
||||||
|
print_message,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
use std::str::FromStr;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
fn main() {
|
fn main() -> XResult<()> {
|
||||||
let host = "127.0.0.1";
|
let host = "127.0.0.1";
|
||||||
let port = "8080";
|
let port = "8080";
|
||||||
|
let base_path = std::env::var("HOME")?;
|
||||||
|
|
||||||
|
print_message(MessageType::INFO, &format!("Base path: {}", &base_path));
|
||||||
|
|
||||||
println!("Starting server @{}:{}...", host, port);
|
println!("Starting server @{}:{}...", host, port);
|
||||||
let server = Server::new(|request, mut response| {
|
let server = Server::new(move |request, mut response| {
|
||||||
|
// let uri = request.uri();
|
||||||
|
let uri_str = request.uri().to_string();
|
||||||
|
|
||||||
let mut buff = String::with_capacity(1024);
|
let mut local_path_buff = match PathBuf::from_str(&base_path) {
|
||||||
buff.push_str(&format!("Method: {}\n", request.method()));
|
Ok(p) => p, Err(e) => {
|
||||||
buff.push_str(&format!("URI: {}\n", request.uri()));
|
return Ok(response.status(500).body(format!("{}", e).as_bytes().to_vec())?);
|
||||||
buff.push_str(&format!("Version: {:?}\n", &request.version()));
|
}
|
||||||
// buff.push_str(&format!("Headers: {:?}\n", request.headers()));
|
};
|
||||||
for header in request.headers() {
|
local_path_buff.push(uri_str.chars().skip(1).collect::<String>());
|
||||||
if let Ok(val) = header.1.to_str() {
|
let local_path = local_path_buff.as_path();
|
||||||
buff.push_str(&format!("{}:{}\n", header.0, val));
|
|
||||||
|
println!("{:?}", &base_path);
|
||||||
|
println!("{:?} {}", local_path, local_path.exists());
|
||||||
|
|
||||||
|
if !local_path.exists() {
|
||||||
|
return Ok(response.status(404).body("not found!".as_bytes().to_vec())?);
|
||||||
|
}
|
||||||
|
if local_path.is_dir() && !uri_str.ends_with('/') {
|
||||||
|
return Ok(response.status(302).header("location", &format!("{}/", &uri_str)).body("".as_bytes().to_vec())?);
|
||||||
|
}
|
||||||
|
|
||||||
|
if local_path.is_dir() {
|
||||||
|
return Ok(response.status(200).body("dir!".as_bytes().to_vec())?);
|
||||||
} else {
|
} else {
|
||||||
// TODO, INGORE ?
|
return Ok(response.status(200).body("file!".as_bytes().to_vec())?);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
buff.push_str("\n");
|
|
||||||
buff.push_str(&format!("Body: {:?}\n", request.body()));
|
|
||||||
|
|
||||||
Ok(response
|
// let mut buff = String::with_capacity(1024);
|
||||||
.status(200)
|
// buff.push_str(&format!("Method: {}\n", request.method()));
|
||||||
.header("content-type", "text/plain; charset=UTF-8")
|
// buff.push_str(&format!("URI: {}\n", request.uri()));
|
||||||
.body(buff.as_bytes().to_vec())?)
|
// buff.push_str(&format!("Version: {:?}\n", &request.version()));
|
||||||
|
// // buff.push_str(&format!("Headers: {:?}\n", request.headers()));
|
||||||
|
// for header in request.headers() {
|
||||||
|
// if let Ok(val) = header.1.to_str() {
|
||||||
|
// buff.push_str(&format!("{}:{}\n", header.0, val));
|
||||||
|
// } else {
|
||||||
|
// // TODO, INGORE ?
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// buff.push_str("\n");
|
||||||
|
// buff.push_str(&format!("Body: {:?}\n", request.body()));
|
||||||
|
|
||||||
|
// Ok(response
|
||||||
|
// .status(200)
|
||||||
|
// .header("content-type", "text/plain; charset=UTF-8")
|
||||||
|
// .body(buff.as_bytes().to_vec())?)
|
||||||
});
|
});
|
||||||
|
|
||||||
server.listen(host, port);
|
server.listen(host, port);
|
||||||
|
|
||||||
|
// Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user