From 540f8e4dd046ba37bd692fe96b15df4fe5ddec4c Mon Sep 17 00:00:00 2001 From: Harald Eilertsen Date: Tue, 7 Aug 2018 20:07:37 +0200 Subject: 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. --- src/lib.rs | 23 ++++++++++++++++++----- tests/zotapi.rs | 5 +++-- 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(url: T) -> Client -where - T: Into +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, "{}"); -- cgit v1.2.3