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?")] fn link_strava_callback(config: State, code: String) -> Result { strava::exchange_token( &config.client_id, &config.client_secret, &code) .map(|t| format!("{:#?}", t)) } #[get("/link_strava")] fn link_strava(config: State) -> 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(); }