From 2b04b39f5d8eac1f61644b0d8d47f299b3290d76 Mon Sep 17 00:00:00 2001 From: Bat Date: Wed, 18 Jul 2018 16:58:28 +0200 Subject: [PATCH] Correctly parse HTTP Accept headers --- plume-common/src/activity_pub/mod.rs | 10 +++++++++- plume-common/src/activity_pub/request.rs | 6 +++--- plume-models/src/blogs.rs | 4 ++-- plume-models/src/users.rs | 4 ++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/plume-common/src/activity_pub/mod.rs b/plume-common/src/activity_pub/mod.rs index 2f5e068b..626bdc18 100644 --- a/plume-common/src/activity_pub/mod.rs +++ b/plume-common/src/activity_pub/mod.rs @@ -17,7 +17,15 @@ pub mod sign; pub const CONTEXT_URL: &'static str = "https://www.w3.org/ns/activitystreams"; pub const PUBLIC_VISIBILTY: &'static str = "https://www.w3.org/ns/activitystreams#Public"; -pub const AP_ACCEPT_HEADER: &'static str = "application/ld+json; profile=\"https://w3.org/ns/activitystreams\", application/ld+json;profile=\"https://w3.org/ns/activitystreams\", application/activity+json, application/ld+json"; + +pub fn ap_accept_header() -> Vec<&'static str> { + vec![ + "application/ld+json; profile=\"https://w3.org/ns/activitystreams\"", + "application/ld+json;profile=\"https://w3.org/ns/activitystreams\"", + "application/activity+json", + "application/ld+json" + ] +} pub fn context() -> serde_json::Value { json!([ diff --git a/plume-common/src/activity_pub/request.rs b/plume-common/src/activity_pub/request.rs index b00e0868..05e24cbb 100644 --- a/plume-common/src/activity_pub/request.rs +++ b/plume-common/src/activity_pub/request.rs @@ -2,14 +2,14 @@ use base64; use openssl::hash::{Hasher, MessageDigest}; use reqwest::{ mime::Mime, - header::{ContentType, Date, Headers, UserAgent} + header::{Accept, Date, Headers, UserAgent, qitem} }; use std::{ str::FromStr, time::SystemTime }; -use activity_pub::AP_ACCEPT_HEADER; +use activity_pub::ap_accept_header; use activity_pub::sign::Signer; const USER_AGENT: &'static str = "Plume/0.1.0"; @@ -26,7 +26,7 @@ pub fn headers() -> Headers { let mut headers = Headers::new(); headers.set(UserAgent::new(USER_AGENT)); headers.set(Date(SystemTime::now().into())); - headers.set(ContentType(Mime::from_str(AP_ACCEPT_HEADER).unwrap())); + headers.set(Accept(ap_accept_header().into_iter().map(|h| qitem(h.parse::().expect("Invalid Content-Type"))).collect())); headers } diff --git a/plume-models/src/blogs.rs b/plume-models/src/blogs.rs index 1032f4d7..bd2a0a31 100644 --- a/plume-models/src/blogs.rs +++ b/plume-models/src/blogs.rs @@ -18,7 +18,7 @@ use webfinger::*; use {BASE_URL, USE_HTTPS}; use plume_common::activity_pub::{ - AP_ACCEPT_HEADER, ApSignature, ActivityStream, Id, IntoId, PublicKey, + ap_accept_header, ApSignature, ActivityStream, Id, IntoId, PublicKey, inbox::WithInbox, sign }; @@ -109,7 +109,7 @@ impl Blog { fn fetch_from_url(conn: &PgConnection, url: String) -> Option { let req = Client::new() .get(&url[..]) - .header(Accept(vec![qitem(AP_ACCEPT_HEADER.parse::().unwrap())])) + .header(Accept(ap_accept_header().into_iter().map(|h| qitem(h.parse::().expect("Invalid Content-Type"))).collect())) .send(); match req { Ok(mut res) => { diff --git a/plume-models/src/users.rs b/plume-models/src/users.rs index 9d66d2c7..1175c1eb 100644 --- a/plume-models/src/users.rs +++ b/plume-models/src/users.rs @@ -13,7 +13,7 @@ use openssl::{ sign }; use plume_common::activity_pub::{ - AP_ACCEPT_HEADER, ActivityStream, Id, IntoId, ApSignature, PublicKey, + ap_accept_header, ActivityStream, Id, IntoId, ApSignature, PublicKey, inbox::WithInbox, sign::{Signer, gen_keypair} }; @@ -155,7 +155,7 @@ impl User { fn fetch_from_url(conn: &PgConnection, url: String) -> Option { let req = Client::new() .get(&url[..]) - .header(Accept(vec![qitem(AP_ACCEPT_HEADER.parse::().unwrap())])) + .header(Accept(ap_accept_header().into_iter().map(|h| qitem(h.parse::().expect("Invalid Content-Type"))).collect())) .send(); match req { Ok(mut res) => {