From 7845a4e3d7b9f660e8979e1693cb67a6352d8345 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BC=D1=98=D0=B0=D0=BD=20=D0=93=D0=B5=D0=BE?= =?UTF-8?q?=D1=80=D0=B3=D0=B8=D0=B5=D0=B2=D1=81=D0=BA=D0=B8?= Date: Wed, 4 Jul 2018 14:03:30 +0200 Subject: [PATCH] first skeleton --- src/main.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/main.rs diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..1199882 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,48 @@ +extern crate actix_web; +extern crate actix; +extern crate futures; +extern crate tar; + +use actix_web::{server, error, fs, App, HttpRequest, HttpResponse, Error, Result, http::Method, http::StatusCode}; + +use std::env; +use std::io; +use std::path::PathBuf; + + +fn main() -> Result<(), Error> { + let bind_addr = env::var("HTTP_ADDR").unwrap_or("127.0.0.1:8088".to_string()); + let sys = actix::System::new("static_index"); + + server::new(|| { + let s = fs::StaticFiles::new(".").show_files_listing().files_listing_renderer(handle_directory); + App::new() + .resource(r"/{tail:.*}.tar", |r| r.method(Method::GET).f(handle_tar)) + .handler("/", s) + }) + .bind(&bind_addr) + .expect(&format!("Can't listen on {} ", bind_addr)) + .start(); + + println!("Started http server: {}", bind_addr); + let _ = sys.run(); + Ok(()) +} + +fn handle_directory<'a, 'b>( + dir: &'a fs::Directory, + req: &'b HttpRequest, +) -> io::Result { + Ok(HttpResponse::with_body(StatusCode::OK, "directory index here")) +} + +fn handle_tar(req: &HttpRequest) -> Result { + let path: PathBuf = req.match_info().query("tail")?; + if !(path.is_dir()) { + return Err(error::ErrorBadRequest("not a directory")); + } + + Ok(HttpResponse::Ok().body(format!("fixme: {:?}\n", path))) +} + +