From ccae2cb90ac79f1c138d1a5e5da6cb0f20b50607 Mon Sep 17 00:00:00 2001 From: Colin Reeder Date: Sun, 27 Sep 2020 12:21:37 -0600 Subject: Add logout button in header --- icons/res/logout.svg | 6 ++++++ icons/src/lib.rs | 1 + res/main.css | 1 + src/components/mod.rs | 5 +++++ src/routes/mod.rs | 36 ++++++++++++++++++++++++++++++++++++ 5 files changed, 49 insertions(+) create mode 100644 icons/res/logout.svg diff --git a/icons/res/logout.svg b/icons/res/logout.svg new file mode 100644 index 0000000..da1e0e2 --- /dev/null +++ b/icons/res/logout.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/icons/src/lib.rs b/icons/src/lib.rs index 0728295..e9ef054 100644 --- a/icons/src/lib.rs +++ b/icons/src/lib.rs @@ -41,6 +41,7 @@ macro_rules! icons { } icons! { + LOGOUT => "logout.svg", NOTIFICATIONS => "notifications.svg", NOTIFICATIONS_SOME => "notifications-some.svg", PERSON => "person.svg", diff --git a/res/main.css b/res/main.css index e365b2d..c23309a 100644 --- a/res/main.css +++ b/res/main.css @@ -81,6 +81,7 @@ body { background: none; border: none; padding: 0; + cursor: pointer; } .votebox { diff --git a/src/components/mod.rs b/src/components/mod.rs index 255f38a..9f7db1f 100644 --- a/src/components/mod.rs +++ b/src/components/mod.rs @@ -248,6 +248,11 @@ pub fn HTPage<'a, Children: render::Render>( {hitide_icons::PERSON.img()} +
+ +
}) } else { diff --git a/src/routes/mod.rs b/src/routes/mod.rs index 5fde279..d2718e9 100644 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -719,6 +719,38 @@ async fn handler_login_submit( } } +async fn handler_logout( + _: (), + ctx: Arc, + req: hyper::Request, +) -> Result, crate::Error> { + let cookies = get_cookie_map_for_req(&req)?; + + res_to_error( + ctx.http_client + .request(for_client( + hyper::Request::delete(format!( + "{}/api/unstable/logins/~current", + ctx.backend_host, + )) + .body(Default::default())?, + req.headers(), + &cookies, + )?) + .await?, + ) + .await?; + + Ok(hyper::Response::builder() + .status(hyper::StatusCode::SEE_OTHER) + .header(hyper::header::LOCATION, "/") + .header( + hyper::header::SET_COOKIE, + format!("hitideToken=\"\"; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT"), + ) + .body("Successfully logged out.".into())?) +} + async fn page_lookup( _: (), ctx: Arc, @@ -1588,6 +1620,10 @@ pub fn route_root() -> crate::RouteNode<()> { crate::RouteNode::new().with_handler_async("POST", handler_login_submit), ), ) + .with_child( + "logout", + crate::RouteNode::new().with_handler_async("POST", handler_logout), + ) .with_child( "lookup", crate::RouteNode::new().with_handler_async("GET", page_lookup), -- cgit v1.2.3