summaryrefslogtreecommitdiff
path: root/src/request_handler/views.rs
diff options
context:
space:
mode:
authorYves Fischer <yvesf-git@xapek.org>2018-11-26 21:01:09 +0100
committerYves Fischer <yvesf-git@xapek.org>2018-11-26 21:01:09 +0100
commit16055300c760c636399f555ce30c07deff2a6820 (patch)
tree9b93f656f413ec02810c4deab38cdf8cec2f34ab /src/request_handler/views.rs
parent4a966e386d2a095c3028c758f2bc872fcb3c1e48 (diff)
downloadnginx-auth-totp-16055300c760c636399f555ce30c07deff2a6820.tar.gz
nginx-auth-totp-16055300c760c636399f555ce30c07deff2a6820.zip
Redo response builder usage
- Set correct content-type header - Refactor views to use one base-view
Diffstat (limited to 'src/request_handler/views.rs')
-rw-r--r--src/request_handler/views.rs179
1 files changed, 78 insertions, 101 deletions
diff --git a/src/request_handler/views.rs b/src/request_handler/views.rs
index ee020eb..1a239a4 100644
--- a/src/request_handler/views.rs
+++ b/src/request_handler/views.rs
@@ -1,138 +1,115 @@
-use horrorshow::Template;
+use std::boxed::Box;
+use horrorshow::{Render, RenderBox, Template};
-pub(in super) fn info_debug<'a>(path_rest: &'a str, cookies: Vec<(String, String)>) -> String {
+
+fn render_base_template(title: &'static str, page_body: Box<RenderBox>) -> String {
(html! {
: horrorshow::helper::doctype::HTML;
html {
head {
- title: "Hello world!";
+ title: title;
+ meta(name="viewport", content="width=device-width, initial-scale=1.5");
}
body {
- h1(id = "heading") {
- : "Hello! This is <html />";
- : "And path rest is: ";
- : path_rest;
- : "... ok :)";
- }
- h2: "Valid cookies are:";
- table(border="1") {
- thead {
- th: "Cookie value";
- th: "Valid until";
- }
- tbody {
- @ for (name, valid_until) in cookies {
- tr {
- td: name;
- td: valid_until;
- }
- }
- }
- }
+ : page_body;
}
}
}).into_string().unwrap()
}
-pub(in super) fn info<'a>(path_rest: &'a str) -> String {
- (html! {
- : horrorshow::helper::doctype::HTML;
- html {
- head {
- title: "Hello world!";
+pub(in super) fn info_debug<'a>(path_rest: &'a str, cookies: Vec<(String, String)>) -> String {
+ let path = path_rest.to_string();
+ render_base_template("Info (debug)", box_html! {
+ h1(id = "heading") {
+ : "Hello! This is <html />";
+ : "And path rest is: ";
+ : path;
+ : "... ok :)";
+ }
+ h2: "Valid cookies are:";
+ table(border="1") {
+ thead {
+ th: "Cookie value";
+ th: "Valid until";
}
- body {
- h1(id = "heading") {
- : "Hello! This is <html />";
- : "And path rest is: ";
- : path_rest;
- : "... ok :)";
+ tbody {
+ @ for (name, valid_until) in cookies {
+ tr {
+ td: name;
+ td: valid_until;
+ }
}
}
}
- }).into_string().unwrap()
+ })
+}
+
+pub(in super) fn info<'a>(path_rest: &'a str) -> String {
+ let path = path_rest.to_string();
+ render_base_template("Info", box_html! {
+ h1(id = "heading") {
+ : "Hello! This is <html />";
+ : "And path rest is: ";
+ : path;
+ : "... ok :)";
+ }
+ })
}
pub(in super) fn login_is_logged_in() -> String {
- (html! {
- : horrorshow::helper::doctype::HTML;
- html {
- head {
- title: "TOTP Login";
- }
- body {
- h1(id = "heading") {
- : "Currently logged in"
- }
- }
+ render_base_template("Logged in", box_html! {
+ h1(id = "heading") {
+ : "Currently logged in"
}
- }).into_string().unwrap()
+ })
}
pub(in super) fn login_login_form<'a>(redirect: &'a str) -> String {
- (html! {
- : horrorshow::helper::doctype::HTML;
- html {
- head {
- title: "TOTP Login";
- }
- body {
- h1(id = "heading") {
- : "Login"
- }
- form(method="POST") {
- label(for="token") {
+ let redirect = redirect.to_string();
+ render_base_template("TOTP Login", box_html! {
+ h1(id = "heading") {
+ : "Login"
+ }
+ form(method="POST") {
+ div {
+ label(for="token") {
: "Enter TOTP token"
- }
- input(name="token",id="token",type="text");
- input(name="redirect", type="hidden", value=redirect);
- input(name="send",type="submit",value="Submit");
}
}
+ div {
+ input(name="token",id="token",type="number",autocomplete="off",required="");
+ input(name="redirect", type="hidden", value=redirect);
+ }
+ div {
+ input(name="send",type="submit",value="Submit");
+ }
}
- }).into_string().unwrap()
+ })
}
pub(in super) fn login_auth_success(redirect: &String) -> String {
- (html! {
- : horrorshow::helper::doctype::HTML;
- html {
- head {
- title: "TOTP Successful";
- meta(http-equiv="refresh", content=format!("3; URL={}", redirect))
- }
- body {
- h1(id = "heading") {
- : "Login succesful"
- }
- a(href=redirect) {
- : "Try again... redirecting to ";
- }
- span {
- : format!("{}", redirect)
- }
- }
+ let redirect = redirect.clone();
+ render_base_template("Login successful", box_html! {
+ h1(id = "heading") {
+ : "Login succesful"
}
- }).into_string().unwrap()
+ a(href=&redirect) {
+ : "redirecting to ";
+ }
+ span {
+ : format!("{}", redirect)
+ }
+ })
}
pub(in super) fn login_auth_fail() -> String {
- (html! {
- : horrorshow::helper::doctype::HTML;
- html {
- head {
- title: "TOTP Login failed";
- meta(http-equiv="refresh", content="1")
- }
- body {
- h1(id = "heading") {
- : "Login failed"
- }
- a(href="login") {
- : "Try again... "
- }
- }
+ render_base_template("Login failed", box_html! {
+ h1(id = "heading") {
+ : "Login failed"
}
- }).into_string().unwrap()
+ a(href="login") {
+ : "Try again... "
+ }
+ })
} \ No newline at end of file