aboutsummaryrefslogtreecommitdiffstats
path: root/teleterm/src/web/oauth.rs
diff options
context:
space:
mode:
Diffstat (limited to 'teleterm/src/web/oauth.rs')
-rw-r--r--teleterm/src/web/oauth.rs56
1 files changed, 56 insertions, 0 deletions
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(),
+ )
+}