summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/data/main.css45
-rw-r--r--src/server.rs16
2 files changed, 60 insertions, 1 deletions
diff --git a/src/data/main.css b/src/data/main.css
new file mode 100644
index 0000000..db30eb5
--- /dev/null
+++ b/src/data/main.css
@@ -0,0 +1,45 @@
+// CSS file for systemhttpd
+h1 { color: red; }
+body {
+ font-family: "Arial";
+ font-size: 1em;
+ margin: 0;
+ padding: 0;
+}
+table, th, td, tr {
+ padding: 0;
+ margin: 0;
+ border-collapse: collapse;
+}
+.right {
+ position: relative;
+ float: right;
+}
+nav {
+ background: lightblue;
+ overflow: hidden;
+ font-weight: bold;
+}
+nav ul {
+ margin: 0;
+ padding: 0;
+ display: inline-block;
+}
+nav ul li {
+ display: inline-block;
+ list-style-type: none;
+ margin: 0;
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+ font-size: 1em;
+}
+main {
+ margin: 1em;
+}
+th {
+ text-align: left;
+ background: lightgray;
+}
+tr:nth-child(odd) {
+ background: #eee;
+}
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)));