keymaster.rs 813 B

12345678910111213141516171819202122232425
  1. use futures::{Future, BoxFuture};
  2. use serde_json;
  3. use session::Session;
  4. use mercury::MercuryError;
  5. #[derive(Deserialize, Debug, Clone)]
  6. #[serde(rename_all = "camelCase")]
  7. pub struct Token {
  8. pub access_token: String,
  9. pub expires_in: u32,
  10. pub token_type: String,
  11. pub scope: Vec<String>,
  12. }
  13. pub fn get_token(session: &Session, client_id: &str, scopes: &str) -> BoxFuture<Token, MercuryError> {
  14. let url = format!("hm://keymaster/token/authenticated?client_id={}&scope={}",
  15. client_id, scopes);
  16. session.mercury().get(url).map(move |response| {
  17. let data = response.payload.first().expect("Empty payload");
  18. let data = String::from_utf8(data.clone()).unwrap();
  19. let token : Token = serde_json::from_str(&data).unwrap();
  20. token
  21. }).boxed()
  22. }