diff options
author | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2020-01-28 22:18:05 -0500 |
---|---|---|
committer | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2020-01-28 22:18:05 -0500 |
commit | 6c16bcd190328443f15029fc3ee2467b6c270eed (patch) | |
tree | 0928ac96e2e8fcb905df786b67fd9bdce82a44d0 | |
parent | 94cbd545217d85f6e975131ee70a26194b7fdb3c (diff) |
Beginning of Strava integration
-rw-r--r-- | src/server.rs | 47 |
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(); +} |