summaryrefslogtreecommitdiff
path: root/src/server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/server.rs')
-rw-r--r--src/server.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/server.rs b/src/server.rs
index 6fb534d..760c7ab 100644
--- a/src/server.rs
+++ b/src/server.rs
@@ -21,6 +21,8 @@ use rusqlite::Connection;
use db;
use auth;
use url;
+use std::fmt;
+use std::error::Error;
#[derive(Debug)]
pub struct Context {
@@ -42,6 +44,28 @@ struct Login {
user: String,
}
+#[derive(Debug)]
+enum SystemdError {
+ Unauthorized,
+}
+impl fmt::Display for SystemdError {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match *self {
+ SystemdError::Unauthorized => write!(f, "Not authorized")
+ }
+ }
+}
+impl Error for SystemdError {
+ fn description(&self) -> &str {
+ match *self {
+ SystemdError::Unauthorized => "unauthorized",
+ }
+ }
+ fn cause(&self) -> Option<&Error> {
+ None
+ }
+}
+
impl iron_sessionstorage::Value for Login {
fn get_key() -> &'static str {
"login"
@@ -200,6 +224,14 @@ fn static_file(r: &mut Request) -> IronResult<Response> {
})
}
+fn test(r: &mut Request) -> IronResult<Response> {
+ let renderer = make_renderer(r)?;
+ Err(IronError::new(SystemdError::Unauthorized,
+ (status::Unauthorized,
+ Header(ContentType::html()),
+ renderer.unauthorized())))
+}
+
pub fn serve(context: Context, state: State, port: u16) -> HttpResult<Listening> {
// TODO: Use a real secret.
let secret = b"secret2".to_vec();
@@ -210,6 +242,7 @@ pub fn serve(context: Context, state: State, port: u16) -> HttpResult<Listening>
logout: get "/logout" => logout,
details: get "/status/:unit" => unit_status,
journal: get "/journal/:unit" => journal,
+ test: get "/test" => test,
css: get "/static/:file" => static_file,
);
let mut chain = Chain::new(router);