use rocket::config; use rocket::config::Environment; use rocket::config::Value; use rocket::response; use rocket::State; use rocket_contrib::templates::Template; use std::collections::HashMap; use crate::strava; pub struct Params { pub base_url: String, } #[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(db_url: &str, config: Params) { let mut database_config = HashMap::new(); let mut databases = HashMap::new(); database_config.insert("url", Value::from(db_url)); databases.insert("db", Value::from(database_config)); rocket::ignite() .manage(config) .mount("/", routes![index, link_strava, link_strava_callback]) .attach(Template::fairing()) .launch(); }