keymaster.rs 852 B

1234567891011121314151617181920212223242526272829303132
  1. use futures::Future;
  2. use serde_json;
  3. use crate::mercury::MercuryError;
  4. use crate::session::Session;
  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(
  14. session: &Session,
  15. client_id: &str,
  16. scopes: &str,
  17. ) -> Box<dyn Future<Item = Token, Error = MercuryError>> {
  18. let url = format!(
  19. "hm://keymaster/token/authenticated?client_id={}&scope={}",
  20. client_id, scopes
  21. );
  22. Box::new(session.mercury().get(url).map(move |response| {
  23. let data = response.payload.first().expect("Empty payload");
  24. let data = String::from_utf8(data.clone()).unwrap();
  25. let token: Token = serde_json::from_str(&data).unwrap();
  26. token
  27. }))
  28. }