From 6d9fe052e6b9d8150f587b64a540309a9cbba889 Mon Sep 17 00:00:00 2001 From: Robert Czechowski <czechowski@bwinf.de> Date: Tue, 14 Aug 2018 10:36:53 +0200 Subject: [PATCH] Add MedalError AccessDenied, Add helper type aliases for results --- src/functions.rs | 11 ++++++++--- src/webfw_iron.rs | 7 +++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/functions.rs b/src/functions.rs index a0a87fc2..cab219ea 100644 --- a/src/functions.rs +++ b/src/functions.rs @@ -70,9 +70,14 @@ pub struct ContestInfo { #[derive(Clone)] pub enum MedalError { - NotLoggedIn + NotLoggedIn, + AccessDenied, } +type MedalValue = (String, json_val::Map<String, json_val::Value>); +type MedalResult<T> = Result<T, MedalError>; +type MedalValueResult = MedalResult<MedalValue>; + pub fn show_contests<T: MedalConnection>(conn: &T) -> (String, json_val::Map<String, json_val::Value>) { let mut data = json_val::Map::new(); @@ -276,7 +281,7 @@ pub struct GroupInfo { pub code: String, } -pub fn show_groups<T: MedalConnection>(conn: &T, session_token: String) -> (String, json_val::Map<String, json_val::Value>) { +pub fn show_groups<T: MedalConnection>(conn: &T, session_token: String) -> Result<(String, json_val::Map<String, json_val::Value>), MedalError> { let session = conn.get_session(session_token).unwrap(); // TODO handle error // let groupvec = conn.get_group(session_token); @@ -292,7 +297,7 @@ pub fn show_groups<T: MedalConnection>(conn: &T, session_token: String) -> (Str data.insert("group".to_string(), to_json(&v)); data.insert("csrftoken".to_string(), to_json(&session.csrf_token)); - ("groups".to_string(), data) + Ok(("groups".to_string(), data)) } #[derive(Serialize, Deserialize)] diff --git a/src/webfw_iron.rs b/src/webfw_iron.rs index d1a82ab0..aae3bf79 100644 --- a/src/webfw_iron.rs +++ b/src/webfw_iron.rs @@ -186,7 +186,10 @@ impl<'c, 'a, 'b> From<AugMedalError<'c, 'a, 'b>> for IronError { match me { functions::MedalError::NotLoggedIn => IronError { error: Box::new(SessionError { message: "Not Logged in, redirecting to login page".to_string() }), - response: Response::with((status::Found, RedirectRaw(format!("/login?{}", req.url.path().join("/"))))) } + response: Response::with((status::Found, RedirectRaw(format!("/login?{}", req.url.path().join("/"))))) }, + functions::MedalError::AccessDenied => IronError { + error: Box::new(SessionError { message: "Access denied".to_string() }), + response: Response::with(status::Forbidden) } } } } @@ -467,7 +470,7 @@ fn groups(req: &mut Request) -> IronResult<Response> { let conn = mutex.lock().unwrap_or_else(|e| e.into_inner()); // Antwort erstellen und zurücksenden - functions::show_groups(&*conn, session_token) + functions::show_groups(&*conn, session_token).map_err(|me| {AugMedalError(me, req)})? /*let mut data = json_val::Map::new(); data.insert("reason".to_string(), to_json(&"Not implemented".to_string())); ("groups", data)*/ -- GitLab