summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Orbekk <kjetil.orbekk@gmail.com>2020-01-28 22:18:05 -0500
committerKjetil Orbekk <kjetil.orbekk@gmail.com>2020-01-28 22:18:05 -0500
commit6c16bcd190328443f15029fc3ee2467b6c270eed (patch)
tree0928ac96e2e8fcb905df786b67fd9bdce82a44d0
parent94cbd545217d85f6e975131ee70a26194b7fdb3c (diff)
Beginning of Strava integration
-rw-r--r--src/server.rs47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/server.rs b/src/server.rs
new file mode 100644
index 0000000..6f05afe
--- /dev/null
+++ b/src/server.rs
@@ -0,0 +1,47 @@
+use rocket::response;
+use rocket::State;
+use rocket_contrib::templates::Template;
+use std::collections::HashMap;
+
+use crate::Config;
+use crate::strava;
+
+#[get("/")]
+fn index() -> Template {
+ let mut context = HashMap::new();
+ context.insert("parent", "layout");
+ context.insert("message", "Hello, World");
+ Template::render("index", context)
+}
+
+#[get("/link_strava_callback?<code>")]
+fn link_strava_callback(config: State<Config>, code: String) -> Result<String, impl std::error::Error> {
+ strava::exchange_token(
+ &config.client_id, &config.client_secret, &code)
+ .map(|t| format!("{:#?}", t))
+}
+
+#[get("/link_strava")]
+fn link_strava(config: State<Config>) -> response::Redirect {
+ response::Redirect::to(
+ format!(
+ concat!(
+ "https://www.strava.com/oauth/authorize?",
+ "client_id={}&",
+ "response_type=code&",
+ "redirect_uri={}&",
+ "approval_prompt=force&",
+ "scope=read",
+ ),
+ config.client_id,
+ format!("{}/link_strava_callback", config.base_url))
+ )
+}
+
+pub fn start(config: Config) {
+ rocket::ignite()
+ .manage(config)
+ .mount("/", routes![index, link_strava, link_strava_callback])
+ .attach(Template::fairing())
+ .launch();
+}