diff options
author | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2017-06-18 09:22:16 -0400 |
---|---|---|
committer | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2017-06-18 09:22:16 -0400 |
commit | 4ce93172a7a2bc06b984ddf2fadbfb17bbf204e6 (patch) | |
tree | 547e90fc221e39a2963e252966bc48d19f12032e /src | |
parent | c6c2f0929dd7bb0ec64373c40309a27e659624b5 (diff) |
fix: Create working urls based on the incoming request.
Diffstat (limited to 'src')
-rw-r--r-- | src/render/mod.rs | 42 | ||||
-rw-r--r-- | src/server.rs | 9 |
2 files changed, 29 insertions, 22 deletions
diff --git a/src/render/mod.rs b/src/render/mod.rs index b47ee55..9bce062 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -5,10 +5,15 @@ use horrorshow::Raw; #[derive(Debug)] pub struct Renderer { + pub base_url: String, pub user: Option<String>, } impl Renderer { + fn get_url(&self, path: &str) -> String { + format!("{}{}", self.base_url, path) + } + fn render_in_page<'a>(&self, content: Box<RenderBox + 'a>) -> String { info!("Rendering page with context: {:?}", self); let login_box: Box<RenderBox> = match self.user { @@ -17,16 +22,16 @@ impl Renderer { : "Logged in as "; : user; : " ("; - a(href="logout") { // TODO get base url from context - : "log out" + a(href=self.get_url("logout")) { + : "Log out" } : ")"; } } None => { box_html! { - a(href="login") { // TODO Get base url from context - : "Login" + a(href=self.get_url("login")) { // TODO Get base url from context + : "Log in" } } } @@ -83,24 +88,25 @@ impl Renderer { }) } - fn unit_table<'a>(&self, units: &'a [&unit::Unit]) -> Box<RenderBox + 'a> { - fn render_unit<'a>(unit: &'a unit::Unit) -> Box<RenderBox + 'a> { - box_html! { - tr { - td { - a(href=format_args!("/status/{}", &unit.name)) { - : &unit.name - } - } - td { - : format_args!("{} ({})", - &unit.active_state, - &unit.sub_state) + fn render_unit<'a>(&'a self, unit: &'a unit::Unit) -> Box<RenderBox + 'a> { + box_html! { + tr { + td { + a(href=self.get_url(&format!("/status/{}", &unit.name))) { + : &unit.name } } + td { + : format_args!("{} ({})", + &unit.active_state, + &unit.sub_state) + } } } + } + + fn unit_table<'a>(&'a self, units: &'a [&unit::Unit]) -> Box<RenderBox + 'a> { box_html! { table { tr { @@ -112,7 +118,7 @@ impl Renderer { } } @ for unit in units { - : render_unit(unit) + : self.render_unit(unit) } } } diff --git a/src/server.rs b/src/server.rs index 58027e9..a4c2d35 100644 --- a/src/server.rs +++ b/src/server.rs @@ -147,7 +147,7 @@ fn authenticate(r: &mut Request) -> IronResult<Response> { let login = Login { user: user.to_string() }; // TODO Make a validated login type info!("User logged in: {:?}", login); r.session().set(login)?; - let url = Url::parse("http://localhost:8080/").unwrap(); + let url = url_for!(r, "root"); Ok(Response::with((status::Found, Redirect(url)))) } else { login(r) @@ -156,13 +156,14 @@ fn authenticate(r: &mut Request) -> IronResult<Response> { fn logout(r: &mut Request) -> IronResult<Response> { r.session().set::<Login>(Default::default()); - let url = Url::parse("http://localhost:8080/").unwrap(); + let url = url_for!(r, "root"); Ok(Response::with((status::Found, Redirect(url)))) } fn make_renderer(r: &mut Request) -> IronResult<render::Renderer> { let user = get_logged_in_user(r)?.map(|u| u.user); - Ok(render::Renderer { user: user }) + let base_url = format!("{}", url_for!(r, "root")); + Ok(render::Renderer { base_url: base_url, user: user }) } pub fn serve(context: Context, port: u16) -> HttpResult<Listening> { @@ -175,7 +176,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(""), + css: get "/static/main.css" => Static::new(""), // TODO: Use this instead? https://doc.rust-lang.org/std/macro.include.html ); let mut chain = Chain::new(router); chain.link_around(SessionStorage::new(SignedCookieBackend::new(secret))); |