]> Untitled Git - lemmy.git/commitdiff
Switching back to isahc.
authorDessalines <tyhou13@gmx.com>
Thu, 25 Jun 2020 19:36:03 +0000 (15:36 -0400)
committerDessalines <tyhou13@gmx.com>
Thu, 25 Jun 2020 19:36:03 +0000 (15:36 -0400)
server/Cargo.lock
server/Cargo.toml
server/src/apub/activities.rs
server/src/apub/extensions/signatures.rs
server/src/apub/fetcher.rs
server/src/apub/mod.rs
server/src/lib.rs

index f124396b7e3200ab361bfbe9b4976cc4da9fa38b..a8f5c880581373dd26c5026cc829df85fc12680f 100644 (file)
@@ -440,20 +440,6 @@ dependencies = [
  "syn",
 ]
 
-[[package]]
-name = "attohttpc"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93610ce1c035e8a273fe56a19852e42798f3c019ca2726e52d2971197f116525"
-dependencies = [
- "http",
- "log",
- "rustls",
- "url",
- "webpki",
- "webpki-roots",
-]
-
 [[package]]
 name = "atty"
 version = "0.2.14"
@@ -795,6 +781,37 @@ dependencies = [
  "lazy_static",
 ]
 
+[[package]]
+name = "curl"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0447a642435be046540f042950d874a4907f9fee28c0513a0beb3ba89f91eb7"
+dependencies = [
+ "curl-sys",
+ "libc",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "socket2",
+ "winapi 0.3.8",
+]
+
+[[package]]
+name = "curl-sys"
+version = "0.4.32+curl-7.70.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "834425a2f22fdd621434196965bf99fbfd9eaed96348488e27b7ac40736c560b"
+dependencies = [
+ "cc",
+ "libc",
+ "libnghttp2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+ "winapi 0.3.8",
+]
+
 [[package]]
 name = "darling"
 version = "0.10.2"
@@ -1430,6 +1447,31 @@ dependencies = [
  "winreg",
 ]
 
+[[package]]
+name = "isahc"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f54e7cf252df9a36605ccfabea2a754ad30c24b51b77f830486e555ac8e76bce"
+dependencies = [
+ "bytes",
+ "crossbeam-channel",
+ "crossbeam-utils",
+ "curl",
+ "curl-sys",
+ "encoding_rs",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "http",
+ "lazy_static",
+ "log",
+ "mime",
+ "slab",
+ "sluice",
+ "tracing",
+ "tracing-futures",
+]
+
 [[package]]
 name = "itertools"
 version = "0.9.0"
@@ -1502,7 +1544,6 @@ dependencies = [
  "actix-rt",
  "actix-web",
  "actix-web-actors",
- "attohttpc",
  "base64 0.12.2",
  "bcrypt",
  "chrono",
@@ -1517,6 +1558,7 @@ dependencies = [
  "htmlescape",
  "http",
  "http-signature-normalization",
+ "isahc",
  "itertools",
  "jsonwebtoken",
  "lazy_static",
@@ -1589,6 +1631,28 @@ version = "0.2.71"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9457b06509d27052635f90d6466700c65095fdf75409b3fbdd903e988b886f49"
 
+[[package]]
+name = "libnghttp2-sys"
+version = "0.1.4+1.41.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03624ec6df166e79e139a2310ca213283d6b3c30810c54844f307086d4488df1"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
 [[package]]
 name = "linked-hash-map"
 version = "0.3.0"
@@ -2357,19 +2421,6 @@ dependencies = [
  "semver",
 ]
 
-[[package]]
-name = "rustls"
-version = "0.17.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0d4a31f5d68413404705d6982529b0e11a9aacd4839d1d6222ee3b8cb4015e1"
-dependencies = [
- "base64 0.11.0",
- "log",
- "ring",
- "sct",
- "webpki",
-]
-
 [[package]]
 name = "ryu"
 version = "1.0.5"
@@ -2413,16 +2464,6 @@ version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
 
-[[package]]
-name = "sct"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c"
-dependencies = [
- "ring",
- "untrusted",
-]
-
 [[package]]
 name = "security-framework"
 version = "0.4.4"
@@ -2590,6 +2631,18 @@ version = "0.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
 
+[[package]]
+name = "sluice"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed13b7cb46f13a15db2c4740f087a848acc8b31af89f95844d40137451f89b1"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+]
+
 [[package]]
 name = "smallvec"
 version = "1.4.0"
@@ -2808,6 +2861,48 @@ dependencies = [
  "tokio",
 ]
 
+[[package]]
+name = "tracing"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a41f40ed0e162c911ac6fcb53ecdc8134c46905fdbbae8c50add462a538b495f"
+dependencies = [
+ "cfg-if",
+ "log",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99bbad0de3fd923c9c3232ead88510b783e5a4d16a6154adffa3d53308de984c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0aa83a9a47081cd522c09c81b31aec2c9273424976f922ad61c053b58350b715"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab7bb6f14721aa00656086e9335d363c5c8747bae02ebe32ea2c7dece5689b4c"
+dependencies = [
+ "pin-project",
+ "tracing",
+]
+
 [[package]]
 name = "trust-dns-proto"
 version = "0.18.0-alpha.2"
@@ -3105,25 +3200,6 @@ dependencies = [
  "wasm-bindgen",
 ]
 
-[[package]]
-name = "webpki"
-version = "0.21.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab146130f5f790d45f82aeeb09e55a256573373ec64409fc19a6fb82fb1032ae"
-dependencies = [
- "ring",
- "untrusted",
-]
-
-[[package]]
-name = "webpki-roots"
-version = "0.19.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8eff4b7516a57307f9349c64bf34caa34b940b66fed4b2fb3136cb7386e5739"
-dependencies = [
- "webpki",
-]
-
 [[package]]
 name = "widestring"
 version = "0.4.2"
index 52a9bae8e9e041a986a5faf250597931bbf1b198..df6c90afd5bc4fbf384a3be4e748991e485884fa 100644 (file)
@@ -40,7 +40,7 @@ htmlescape = "0.3.1"
 url = { version = "2.1.1", features = ["serde"] }
 config = {version = "0.10.1", default-features = false, features = ["hjson"] }
 percent-encoding = "2.1.0"
-attohttpc = { version = "0.14.0", default-features = false, features = ["tls-rustls"] }
+isahc = "0.9.2"
 comrak = "0.7"
 openssl = "0.10"
 http = "0.2.1"
index 3c4034c96979718254f147b51395cb3a44b1c937..b5bb9d76c7dffff589c05e65186f0e3514d1c05a 100644 (file)
@@ -5,6 +5,7 @@ use crate::{
 use activitystreams::{context, object::properties::ObjectProperties, public, Activity, Base};
 use diesel::PgConnection;
 use failure::{Error, _core::fmt::Debug};
+use isahc::prelude::*;
 use log::debug;
 use serde::Serialize;
 use url::Url;
@@ -56,18 +57,16 @@ where
   for t in to {
     let to_url = Url::parse(&t)?;
     if !is_apub_id_valid(&to_url) {
-      debug!("Not sending activity to {} (invalid or blacklisted)", t);
+      debug!("Not sending activity to {} (invalid or blocklisted)", t);
       continue;
     }
-    let mut request = attohttpc::post(t).header("Host", to_url.domain().unwrap());
-    let signature = sign(&mut request, actor)?;
+    let request = Request::post(t).header("Host", to_url.domain().unwrap());
+    let signature = sign(&request, actor)?;
     let res = request
       .header("Signature", signature)
       .header("Content-Type", "application/json")
-      .text(json.to_owned())
-      .send()?
-      .text()?;
-
+      .body(json.to_owned())?
+      .send()?;
     debug!("Result for activity send: {:?}", res);
   }
   Ok(())
index 7aa9489c3cf432b921755ccea522dd5345cc0306..4156f0b3f84a567e67db063cfe81d002bfc9c1e2 100644 (file)
@@ -1,8 +1,8 @@
 use crate::apub::ActorType;
 use activitystreams::ext::Extension;
 use actix_web::HttpRequest;
-use attohttpc::RequestBuilder;
 use failure::Error;
+use http::request::Builder;
 use http_signature_normalization::Config;
 use log::debug;
 use openssl::{
@@ -35,29 +35,28 @@ pub fn generate_actor_keypair() -> Result<Keypair, Error> {
   })
 }
 
-// TODO is it possible to create this signature, with just the url and actor?
 /// Signs request headers with the given keypair.
-pub fn sign(request: &mut RequestBuilder, actor: &dyn ActorType) -> Result<String, Error> {
+pub fn sign(request: &Builder, actor: &dyn ActorType) -> Result<String, Error> {
   let signing_key_id = format!("{}#main-key", actor.actor_id());
 
   let headers = request
-    .inspect()
-    .headers()
+    .headers_ref()
+    .unwrap()
     .iter()
     .map(|h| -> Result<(String, String), Error> {
       Ok((h.0.as_str().to_owned(), h.1.to_str()?.to_owned()))
     })
     .collect::<Result<BTreeMap<String, String>, Error>>()?;
 
-  let mut path_and_query = request.inspect().url().path().to_owned();
-  if let Some(query) = request.inspect().url().query() {
-    path_and_query.push_str(query);
-  }
-
   let signature_header_value = HTTP_SIG_CONFIG
     .begin_sign(
-      request.inspect().method().as_str(),
-      &path_and_query,
+      request.method_ref().unwrap().as_str(),
+      request
+        .uri_ref()
+        .unwrap()
+        .path_and_query()
+        .unwrap()
+        .as_str(),
       headers,
     )?
     .sign(signing_key_id, |signing_string| {
index 20bab4e2636648f84f493a30fa7b6201f32fa424..7f7a3f971751821ee3e6de66ac2120ac92ebdbff 100644 (file)
@@ -2,6 +2,7 @@ use activitystreams::object::Note;
 use actix_web::Result;
 use diesel::{result::Error::NotFound, PgConnection};
 use failure::{Error, _core::fmt::Debug};
+use isahc::prelude::*;
 use log::debug;
 use serde::Deserialize;
 use std::time::Duration;
@@ -63,11 +64,11 @@ where
   }
   // TODO: this function should return a future
   let timeout = Duration::from_secs(60);
-  let text: String = attohttpc::get(url.as_str())
+  let text = Request::get(url.as_str())
     .header("Accept", APUB_JSON_CONTENT_TYPE)
     .connect_timeout(timeout)
     .timeout(timeout)
-    // .body(())
+    .body(())?
     .send()?
     .text()?;
   let res: Response = serde_json::from_str(&text)?;
index 7d2aee65c9101afc113ed27487489ac5218a2910..6a2d6cffb385b7a12a427fff7a9170a5c50125aa 100644 (file)
@@ -32,6 +32,7 @@ use actix_web::{body::Body, HttpResponse, Result};
 use chrono::NaiveDateTime;
 use diesel::PgConnection;
 use failure::Error;
+use isahc::prelude::*;
 use log::debug;
 use serde::Serialize;
 use url::Url;
@@ -252,7 +253,7 @@ pub fn fetch_webfinger_url(mention: &MentionData) -> Result<String, Error> {
     mention.domain
   );
   debug!("Fetching webfinger url: {}", &fetch_url);
-  let text: String = attohttpc::get(&fetch_url).send()?.text()?;
+  let text = isahc::get(&fetch_url)?.text()?;
   let res: WebFingerResponse = serde_json::from_str(&text)?;
   let link = res
     .links
index 2391449caf818155ebc3c500c6d15537030259d8..b7c210497271e0d9b3930a622df88da218fe8f93 100644 (file)
@@ -39,6 +39,7 @@ pub mod websocket;
 use crate::settings::Settings;
 use actix_web::dev::ConnectionInfo;
 use chrono::{DateTime, FixedOffset, Local, NaiveDateTime, Utc};
+use isahc::prelude::*;
 use itertools::Itertools;
 use lettre::{
   smtp::{
@@ -85,8 +86,7 @@ pub fn is_email_regex(test: &str) -> bool {
 }
 
 pub fn is_image_content_type(test: &str) -> Result<(), failure::Error> {
-  if attohttpc::get(test)
-    .send()?
+  if isahc::get(test)?
     .headers()
     .get("Content-Type")
     .ok_or_else(|| format_err!("No Content-Type header"))?
@@ -180,7 +180,7 @@ pub struct IframelyResponse {
 
 pub fn fetch_iframely(url: &str) -> Result<IframelyResponse, failure::Error> {
   let fetch_url = format!("http://iframely/oembed?url={}", url);
-  let text: String = attohttpc::get(&fetch_url).send()?.text()?;
+  let text = isahc::get(&fetch_url)?.text()?;
   let res: IframelyResponse = serde_json::from_str(&text)?;
   Ok(res)
 }
@@ -204,7 +204,7 @@ pub fn fetch_pictrs(image_url: &str) -> Result<PictrsResponse, failure::Error> {
     "http://pictrs:8080/image/download?url={}",
     utf8_percent_encode(image_url, NON_ALPHANUMERIC) // TODO this might not be needed
   );
-  let text = attohttpc::get(&fetch_url).send()?.text()?;
+  let text = isahc::get(&fetch_url)?.text()?;
   let res: PictrsResponse = serde_json::from_str(&text)?;
   if res.msg == "ok" {
     Ok(res)