aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Eilertsen <haraldei@anduin.net>2018-08-07 20:07:37 +0200
committerHarald Eilertsen <haraldei@anduin.net>2018-08-07 20:07:37 +0200
commit540f8e4dd046ba37bd692fe96b15df4fe5ddec4c (patch)
tree861b25bd481f205af0559d46176f856ac2ad3c91
parentfb3d996d90f9e496654ae4485b9d036dcc7baf8a (diff)
downloadrust-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.rs23
-rw-r--r--tests/zotapi.rs5
2 files changed, 21 insertions, 7 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 60ac388..c2d77ee 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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, "{}");