diff options
Diffstat (limited to 'src/server.rs')
-rw-r--r-- | src/server.rs | 33 |
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); |