diff options
author | Harald Eilertsen <haraldei@anduin.net> | 2018-08-07 20:07:37 +0200 |
---|---|---|
committer | Harald Eilertsen <haraldei@anduin.net> | 2018-08-07 20:07:37 +0200 |
commit | 540f8e4dd046ba37bd692fe96b15df4fe5ddec4c (patch) | |
tree | 861b25bd481f205af0559d46176f856ac2ad3c91 | |
parent | fb3d996d90f9e496654ae4485b9d036dcc7baf8a (diff) | |
download | rust-zotapi-540f8e4dd046ba37bd692fe96b15df4fe5ddec4c.tar.gz rust-zotapi-540f8e4dd046ba37bd692fe96b15df4fe5ddec4c.tar.bz2 rust-zotapi-540f8e4dd046ba37bd692fe96b15df4fe5ddec4c.zip |
Pass authorization info to endpoint.
It seems like Hubzilla will accept basic authorization info in the first
request. This does not follow the described signal flow for basic
authorization, but for now we'll use whatever works.
-rw-r--r-- | src/lib.rs | 23 | ||||
-rw-r--r-- | tests/zotapi.rs | 5 |
2 files changed, 21 insertions, 7 deletions
@@ -1,16 +1,28 @@ extern crate reqwest; +use reqwest::{ + header::{Accept, qitem}, + mime, +}; use std::io::Read; const ZOTAPI_CHANNEL_STREAM_PATH : &str = "/api/z/1.0/channel/stream"; pub struct Client { + inner: reqwest::Client, base_url: String, + user: String, + pw: String, } impl Client { pub fn channel_stream(&self) -> String { - let mut res = reqwest::get(&self.channel_stream_url()).unwrap(); + let mut res = self.inner.get(&self.channel_stream_url()) + .header(Accept(vec![qitem(mime::APPLICATION_JSON)])) + .basic_auth(self.user.clone(), Some(self.pw.clone())) + .send() + .unwrap(); + let mut body = String::new(); res.read_to_string(&mut body).unwrap(); body @@ -21,12 +33,13 @@ impl Client { } } -pub fn client<T>(url: T) -> Client -where - T: Into<String> +pub fn client(url: &str, user: &str, pw: &str) -> Client { Client { - base_url: url.into(), + inner: reqwest::Client::new(), + base_url: String::from(url), + user: String::from(user), + pw: String::from(pw), } } diff --git a/tests/zotapi.rs b/tests/zotapi.rs index c45673f..102e5de 100644 --- a/tests/zotapi.rs +++ b/tests/zotapi.rs @@ -1,17 +1,18 @@ extern crate zotapi; extern crate mockito; -use mockito::mock; +use mockito::{mock, Matcher}; #[test] fn get_channel_stream() { let m = mock("GET", "/api/z/1.0/channel/stream") + .match_header("Authorization", Matcher::Regex(r"Basic \w+".into())) .with_status(200) .with_header("content-type", "application/json") .with_body("{}") .create(); - let z = zotapi::client(format!("http://{}", mockito::SERVER_ADDRESS)); + let z = zotapi::client(&format!("http://{}", mockito::SERVER_ADDRESS), "testuser", "test1234"); let data = z.channel_stream(); m.assert(); assert_eq!(data, "{}"); |