aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-11-27 12:48:24 -0500
committerJesse Luehrs <doy@tozt.net>2019-11-27 15:17:17 -0500
commit23911b9ad5d942456fc2b4a517c5cf6c67e0a611 (patch)
tree29a76423d36bb3269a596ec0564e755985f940b8
parentd26fe166b1f5fe2a5ea153a4d908598c61f4979b (diff)
downloadteleterm-23911b9ad5d942456fc2b4a517c5cf6c67e0a611.tar.gz
teleterm-23911b9ad5d942456fc2b4a517c5cf6c67e0a611.zip
add oauth endpoint
no functionality yet
-rw-r--r--teleterm/src/web.rs6
-rw-r--r--teleterm/src/web/oauth.rs56
2 files changed, 62 insertions, 0 deletions
diff --git a/teleterm/src/web.rs b/teleterm/src/web.rs
index 48c8c3c..c1e954c 100644
--- a/teleterm/src/web.rs
+++ b/teleterm/src/web.rs
@@ -2,6 +2,7 @@ mod disk_session;
mod list;
mod login;
mod logout;
+mod oauth;
mod view;
mod watch;
mod ws;
@@ -158,6 +159,11 @@ fn router(data: &Config) -> impl gotham::handler::NewHandler {
.get("/login")
.with_query_string_extractor::<login::QueryParams>()
.to(login::run);
+ route
+ .get("/oauth/:method")
+ .with_path_extractor::<oauth::PathParts>()
+ .with_query_string_extractor::<oauth::QueryParams>()
+ .to(oauth::run);
route.get("/logout").to(logout::run);
})
}
diff --git a/teleterm/src/web/oauth.rs b/teleterm/src/web/oauth.rs
new file mode 100644
index 0000000..59f60e1
--- /dev/null
+++ b/teleterm/src/web/oauth.rs
@@ -0,0 +1,56 @@
+use gotham::state::FromState as _;
+use std::convert::TryFrom as _;
+
+#[derive(
+ serde::Deserialize,
+ gotham_derive::StateData,
+ gotham_derive::StaticResponseExtender,
+)]
+pub struct PathParts {
+ method: String,
+}
+
+#[derive(
+ serde::Deserialize,
+ gotham_derive::StateData,
+ gotham_derive::StaticResponseExtender,
+)]
+pub struct QueryParams {
+ code: String,
+}
+
+pub fn run(
+ mut state: gotham::state::State,
+) -> (gotham::state::State, hyper::Response<hyper::Body>) {
+ let auth_type = {
+ let path_parts = PathParts::borrow_from(&state);
+ crate::protocol::AuthType::try_from(path_parts.method.as_str())
+ };
+ let auth_type = match auth_type {
+ Ok(auth_type) => auth_type,
+ Err(e) => {
+ return (
+ state,
+ hyper::Response::builder()
+ .status(hyper::StatusCode::BAD_REQUEST)
+ .body(hyper::Body::from(format!("{}", e)))
+ .unwrap(),
+ );
+ }
+ };
+ let code = {
+ let query_params = QueryParams::borrow_from(&state);
+ query_params.code.clone()
+ };
+
+ // TODO
+
+ (
+ state,
+ hyper::Response::builder()
+ .status(hyper::StatusCode::FOUND)
+ .header(hyper::header::LOCATION, "/")
+ .body(hyper::Body::empty())
+ .unwrap(),
+ )
+}