Switching back to isahc.
This commit is contained in:
parent
dc94e58cbf
commit
7d1c6e9a40
7 changed files with 160 additions and 84 deletions
190
server/Cargo.lock
generated
vendored
190
server/Cargo.lock
generated
vendored
|
@ -440,20 +440,6 @@ dependencies = [
|
||||||
"syn",
|
"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]]
|
[[package]]
|
||||||
name = "atty"
|
name = "atty"
|
||||||
version = "0.2.14"
|
version = "0.2.14"
|
||||||
|
@ -795,6 +781,37 @@ dependencies = [
|
||||||
"lazy_static",
|
"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]]
|
[[package]]
|
||||||
name = "darling"
|
name = "darling"
|
||||||
version = "0.10.2"
|
version = "0.10.2"
|
||||||
|
@ -1430,6 +1447,31 @@ dependencies = [
|
||||||
"winreg",
|
"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]]
|
[[package]]
|
||||||
name = "itertools"
|
name = "itertools"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
|
@ -1502,7 +1544,6 @@ dependencies = [
|
||||||
"actix-rt",
|
"actix-rt",
|
||||||
"actix-web",
|
"actix-web",
|
||||||
"actix-web-actors",
|
"actix-web-actors",
|
||||||
"attohttpc",
|
|
||||||
"base64 0.12.2",
|
"base64 0.12.2",
|
||||||
"bcrypt",
|
"bcrypt",
|
||||||
"chrono",
|
"chrono",
|
||||||
|
@ -1517,6 +1558,7 @@ dependencies = [
|
||||||
"htmlescape",
|
"htmlescape",
|
||||||
"http",
|
"http",
|
||||||
"http-signature-normalization",
|
"http-signature-normalization",
|
||||||
|
"isahc",
|
||||||
"itertools",
|
"itertools",
|
||||||
"jsonwebtoken",
|
"jsonwebtoken",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
|
@ -1589,6 +1631,28 @@ version = "0.2.71"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9457b06509d27052635f90d6466700c65095fdf75409b3fbdd903e988b886f49"
|
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]]
|
[[package]]
|
||||||
name = "linked-hash-map"
|
name = "linked-hash-map"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
|
@ -2357,19 +2421,6 @@ dependencies = [
|
||||||
"semver",
|
"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]]
|
[[package]]
|
||||||
name = "ryu"
|
name = "ryu"
|
||||||
version = "1.0.5"
|
version = "1.0.5"
|
||||||
|
@ -2413,16 +2464,6 @@ version = "1.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
|
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]]
|
[[package]]
|
||||||
name = "security-framework"
|
name = "security-framework"
|
||||||
version = "0.4.4"
|
version = "0.4.4"
|
||||||
|
@ -2590,6 +2631,18 @@ version = "0.4.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
|
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]]
|
[[package]]
|
||||||
name = "smallvec"
|
name = "smallvec"
|
||||||
version = "1.4.0"
|
version = "1.4.0"
|
||||||
|
@ -2808,6 +2861,48 @@ dependencies = [
|
||||||
"tokio",
|
"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]]
|
[[package]]
|
||||||
name = "trust-dns-proto"
|
name = "trust-dns-proto"
|
||||||
version = "0.18.0-alpha.2"
|
version = "0.18.0-alpha.2"
|
||||||
|
@ -3105,25 +3200,6 @@ dependencies = [
|
||||||
"wasm-bindgen",
|
"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]]
|
[[package]]
|
||||||
name = "widestring"
|
name = "widestring"
|
||||||
version = "0.4.2"
|
version = "0.4.2"
|
||||||
|
|
2
server/Cargo.toml
vendored
2
server/Cargo.toml
vendored
|
@ -40,7 +40,7 @@ htmlescape = "0.3.1"
|
||||||
url = { version = "2.1.1", features = ["serde"] }
|
url = { version = "2.1.1", features = ["serde"] }
|
||||||
config = {version = "0.10.1", default-features = false, features = ["hjson"] }
|
config = {version = "0.10.1", default-features = false, features = ["hjson"] }
|
||||||
percent-encoding = "2.1.0"
|
percent-encoding = "2.1.0"
|
||||||
attohttpc = { version = "0.14.0", default-features = false, features = ["tls-rustls"] }
|
isahc = "0.9.2"
|
||||||
comrak = "0.7"
|
comrak = "0.7"
|
||||||
openssl = "0.10"
|
openssl = "0.10"
|
||||||
http = "0.2.1"
|
http = "0.2.1"
|
||||||
|
|
|
@ -5,6 +5,7 @@ use crate::{
|
||||||
use activitystreams::{context, object::properties::ObjectProperties, public, Activity, Base};
|
use activitystreams::{context, object::properties::ObjectProperties, public, Activity, Base};
|
||||||
use diesel::PgConnection;
|
use diesel::PgConnection;
|
||||||
use failure::{Error, _core::fmt::Debug};
|
use failure::{Error, _core::fmt::Debug};
|
||||||
|
use isahc::prelude::*;
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
@ -56,18 +57,16 @@ where
|
||||||
for t in to {
|
for t in to {
|
||||||
let to_url = Url::parse(&t)?;
|
let to_url = Url::parse(&t)?;
|
||||||
if !is_apub_id_valid(&to_url) {
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
let mut request = attohttpc::post(t).header("Host", to_url.domain().unwrap());
|
let request = Request::post(t).header("Host", to_url.domain().unwrap());
|
||||||
let signature = sign(&mut request, actor)?;
|
let signature = sign(&request, actor)?;
|
||||||
let res = request
|
let res = request
|
||||||
.header("Signature", signature)
|
.header("Signature", signature)
|
||||||
.header("Content-Type", "application/json")
|
.header("Content-Type", "application/json")
|
||||||
.text(json.to_owned())
|
.body(json.to_owned())?
|
||||||
.send()?
|
.send()?;
|
||||||
.text()?;
|
|
||||||
|
|
||||||
debug!("Result for activity send: {:?}", res);
|
debug!("Result for activity send: {:?}", res);
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
use crate::apub::ActorType;
|
use crate::apub::ActorType;
|
||||||
use activitystreams::ext::Extension;
|
use activitystreams::ext::Extension;
|
||||||
use actix_web::HttpRequest;
|
use actix_web::HttpRequest;
|
||||||
use attohttpc::RequestBuilder;
|
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
use http::request::Builder;
|
||||||
use http_signature_normalization::Config;
|
use http_signature_normalization::Config;
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use openssl::{
|
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.
|
/// 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 signing_key_id = format!("{}#main-key", actor.actor_id());
|
||||||
|
|
||||||
let headers = request
|
let headers = request
|
||||||
.inspect()
|
.headers_ref()
|
||||||
.headers()
|
.unwrap()
|
||||||
.iter()
|
.iter()
|
||||||
.map(|h| -> Result<(String, String), Error> {
|
.map(|h| -> Result<(String, String), Error> {
|
||||||
Ok((h.0.as_str().to_owned(), h.1.to_str()?.to_owned()))
|
Ok((h.0.as_str().to_owned(), h.1.to_str()?.to_owned()))
|
||||||
})
|
})
|
||||||
.collect::<Result<BTreeMap<String, String>, Error>>()?;
|
.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
|
let signature_header_value = HTTP_SIG_CONFIG
|
||||||
.begin_sign(
|
.begin_sign(
|
||||||
request.inspect().method().as_str(),
|
request.method_ref().unwrap().as_str(),
|
||||||
&path_and_query,
|
request
|
||||||
|
.uri_ref()
|
||||||
|
.unwrap()
|
||||||
|
.path_and_query()
|
||||||
|
.unwrap()
|
||||||
|
.as_str(),
|
||||||
headers,
|
headers,
|
||||||
)?
|
)?
|
||||||
.sign(signing_key_id, |signing_string| {
|
.sign(signing_key_id, |signing_string| {
|
||||||
|
|
|
@ -2,6 +2,7 @@ use activitystreams::object::Note;
|
||||||
use actix_web::Result;
|
use actix_web::Result;
|
||||||
use diesel::{result::Error::NotFound, PgConnection};
|
use diesel::{result::Error::NotFound, PgConnection};
|
||||||
use failure::{Error, _core::fmt::Debug};
|
use failure::{Error, _core::fmt::Debug};
|
||||||
|
use isahc::prelude::*;
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
@ -63,11 +64,11 @@ where
|
||||||
}
|
}
|
||||||
// TODO: this function should return a future
|
// TODO: this function should return a future
|
||||||
let timeout = Duration::from_secs(60);
|
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)
|
.header("Accept", APUB_JSON_CONTENT_TYPE)
|
||||||
.connect_timeout(timeout)
|
.connect_timeout(timeout)
|
||||||
.timeout(timeout)
|
.timeout(timeout)
|
||||||
// .body(())
|
.body(())?
|
||||||
.send()?
|
.send()?
|
||||||
.text()?;
|
.text()?;
|
||||||
let res: Response = serde_json::from_str(&text)?;
|
let res: Response = serde_json::from_str(&text)?;
|
||||||
|
|
|
@ -32,6 +32,7 @@ use actix_web::{body::Body, HttpResponse, Result};
|
||||||
use chrono::NaiveDateTime;
|
use chrono::NaiveDateTime;
|
||||||
use diesel::PgConnection;
|
use diesel::PgConnection;
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
use isahc::prelude::*;
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
@ -252,7 +253,7 @@ pub fn fetch_webfinger_url(mention: &MentionData) -> Result<String, Error> {
|
||||||
mention.domain
|
mention.domain
|
||||||
);
|
);
|
||||||
debug!("Fetching webfinger url: {}", &fetch_url);
|
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 res: WebFingerResponse = serde_json::from_str(&text)?;
|
||||||
let link = res
|
let link = res
|
||||||
.links
|
.links
|
||||||
|
|
|
@ -39,6 +39,7 @@ pub mod websocket;
|
||||||
use crate::settings::Settings;
|
use crate::settings::Settings;
|
||||||
use actix_web::dev::ConnectionInfo;
|
use actix_web::dev::ConnectionInfo;
|
||||||
use chrono::{DateTime, FixedOffset, Local, NaiveDateTime, Utc};
|
use chrono::{DateTime, FixedOffset, Local, NaiveDateTime, Utc};
|
||||||
|
use isahc::prelude::*;
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use lettre::{
|
use lettre::{
|
||||||
smtp::{
|
smtp::{
|
||||||
|
@ -85,8 +86,7 @@ pub fn is_email_regex(test: &str) -> bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_image_content_type(test: &str) -> Result<(), failure::Error> {
|
pub fn is_image_content_type(test: &str) -> Result<(), failure::Error> {
|
||||||
if attohttpc::get(test)
|
if isahc::get(test)?
|
||||||
.send()?
|
|
||||||
.headers()
|
.headers()
|
||||||
.get("Content-Type")
|
.get("Content-Type")
|
||||||
.ok_or_else(|| format_err!("No Content-Type header"))?
|
.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> {
|
pub fn fetch_iframely(url: &str) -> Result<IframelyResponse, failure::Error> {
|
||||||
let fetch_url = format!("http://iframely/oembed?url={}", url);
|
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)?;
|
let res: IframelyResponse = serde_json::from_str(&text)?;
|
||||||
Ok(res)
|
Ok(res)
|
||||||
}
|
}
|
||||||
|
@ -204,7 +204,7 @@ pub fn fetch_pictrs(image_url: &str) -> Result<PictrsResponse, failure::Error> {
|
||||||
"http://pictrs:8080/image/download?url={}",
|
"http://pictrs:8080/image/download?url={}",
|
||||||
utf8_percent_encode(image_url, NON_ALPHANUMERIC) // TODO this might not be needed
|
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)?;
|
let res: PictrsResponse = serde_json::from_str(&text)?;
|
||||||
if res.msg == "ok" {
|
if res.msg == "ok" {
|
||||||
Ok(res)
|
Ok(res)
|
||||||
|
|
Loading…
Reference in a new issue