diff options
Diffstat (limited to 'src/server.rs')
-rw-r--r-- | src/server.rs | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/server.rs b/src/server.rs index a4c2d35..c0e9028 100644 --- a/src/server.rs +++ b/src/server.rs @@ -2,6 +2,7 @@ use iron; use iron::error::HttpResult; use iron::headers::ContentType; use iron::modifiers::{Header, Redirect}; +use iron::mime::{Mime, TopLevel, SubLevel}; use iron::status; use iron::{Iron, IronError, Request, IronResult, Response, Chain, Listening, Plugin, Url}; use iron_sessionstorage::SessionStorage; @@ -166,6 +167,19 @@ fn make_renderer(r: &mut Request) -> IronResult<render::Renderer> { Ok(render::Renderer { base_url: base_url, user: user }) } +fn static_file(r: &mut Request) -> IronResult<Response> { + let file = iexpect!(r.extensions.get::<Router>().unwrap().find("file"), + status::BadRequest); + let css = ContentType(Mime(TopLevel::Text, + SubLevel::Css, vec![])); + Ok(match file { + "main.css" => + Response::with((status::Ok, Header(css), + include_str!("data/main.css"))), + _ => Response::with(status::NotFound) + }) +} + pub fn serve(context: Context, port: u16) -> HttpResult<Listening> { // TODO: Use a real secret. let secret = b"secret2".to_vec(); @@ -176,7 +190,7 @@ pub fn serve(context: Context, port: u16) -> HttpResult<Listening> { logout: get "/logout" => logout, details: get "/status/:unit" => unit_status, journal: get "/journal/:unit" => journal, - css: get "/static/main.css" => Static::new(""), // TODO: Use this instead? https://doc.rust-lang.org/std/macro.include.html + css: get "/static/:file" => static_file, ); let mut chain = Chain::new(router); chain.link_around(SessionStorage::new(SignedCookieBackend::new(secret))); |