Compare commits
No commits in common. "main" and "v0.3.114" have entirely different histories.
10 changed files with 394 additions and 733 deletions
1020
Cargo.lock
generated
1020
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
40
Cargo.toml
40
Cargo.toml
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "ap-relay"
|
||||
description = "A simple activitypub relay"
|
||||
version = "0.3.115"
|
||||
version = "0.3.114"
|
||||
authors = ["asonix <asonix@asonix.dog>"]
|
||||
license = "AGPL-3.0"
|
||||
readme = "README.md"
|
||||
|
@ -24,44 +24,44 @@ default = []
|
|||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
actix-web = { version = "4.4.0", default-features = false, features = ["compress-brotli", "compress-gzip", "rustls-0_23"] }
|
||||
actix-web = { version = "4.4.0", default-features = false, features = ["compress-brotli", "compress-gzip", "rustls-0_22"] }
|
||||
actix-webfinger = { version = "0.5.0", default-features = false }
|
||||
activitystreams = "0.7.0-alpha.25"
|
||||
activitystreams-ext = "0.1.0-alpha.3"
|
||||
ammonia = "4.0.0"
|
||||
async-cpupool = "0.3.0"
|
||||
async-cpupool = "0.2.2"
|
||||
bcrypt = "0.15"
|
||||
base64 = "0.22"
|
||||
clap = { version = "4.0.0", features = ["derive"] }
|
||||
color-eyre = "0.6.2"
|
||||
config = { version = "0.14.0", default-features = false, features = ["toml", "json", "yaml"] }
|
||||
console-subscriber = { version = "0.4", optional = true }
|
||||
dashmap = "6.0.1"
|
||||
console-subscriber = { version = "0.2", optional = true }
|
||||
dashmap = "5.1.0"
|
||||
dotenv = "0.15.0"
|
||||
futures-core = "0.3.30"
|
||||
lru = "0.12.0"
|
||||
metrics = "0.23.0"
|
||||
metrics-exporter-prometheus = { version = "0.15.0", default-features = false, features = [
|
||||
metrics = "0.22.0"
|
||||
metrics-exporter-prometheus = { version = "0.13.0", default-features = false, features = [
|
||||
"http-listener",
|
||||
] }
|
||||
metrics-util = "0.17.0"
|
||||
metrics-util = "0.16.0"
|
||||
mime = "0.3.16"
|
||||
minify-html = "0.15.0"
|
||||
opentelemetry = "0.24"
|
||||
opentelemetry_sdk = { version = "0.24", features = ["rt-tokio"] }
|
||||
opentelemetry-otlp = "0.17"
|
||||
opentelemetry = "0.22"
|
||||
opentelemetry_sdk = { version = "0.22", features = ["rt-tokio"] }
|
||||
opentelemetry-otlp = "0.15"
|
||||
pin-project-lite = "0.2.9"
|
||||
# pinned to metrics-util
|
||||
quanta = "0.12.0"
|
||||
rand = "0.8"
|
||||
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "stream"]}
|
||||
reqwest-middleware = { version = "0.3", default-features = false, features = ["json"] }
|
||||
reqwest-tracing = "0.5.0"
|
||||
reqwest = { version = "0.11", default-features = false, features = ["rustls-tls", "stream"]}
|
||||
reqwest-middleware = "0.2"
|
||||
reqwest-tracing = "0.4.5"
|
||||
ring = "0.17.5"
|
||||
rsa = "0.9"
|
||||
rsa-magic-public-key = "0.8.0"
|
||||
rustls = { version = "0.23.0", default-features = false, features = ["ring", "logging", "std", "tls12"] }
|
||||
rustls-channel-resolver = "0.3.0"
|
||||
rustls = "0.22.0"
|
||||
rustls-channel-resolver = "0.2.0"
|
||||
rustls-pemfile = "2"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
||||
|
@ -77,7 +77,7 @@ time = { version = "0.3.17", features = ["serde"] }
|
|||
tracing = "0.1"
|
||||
tracing-error = "0.2"
|
||||
tracing-log = "0.2"
|
||||
tracing-opentelemetry = "0.25"
|
||||
tracing-opentelemetry = "0.23"
|
||||
tracing-subscriber = { version = "0.3", features = [
|
||||
"ansi",
|
||||
"env-filter",
|
||||
|
@ -87,17 +87,17 @@ tokio = { version = "1", features = ["full", "tracing"] }
|
|||
uuid = { version = "1", features = ["v4", "serde"] }
|
||||
|
||||
[dependencies.background-jobs]
|
||||
version = "0.19.0"
|
||||
version = "0.18.0"
|
||||
default-features = false
|
||||
features = ["error-logging", "metrics", "tokio"]
|
||||
|
||||
[dependencies.http-signature-normalization-actix]
|
||||
version = "0.11.1"
|
||||
version = "0.11.0"
|
||||
default-features = false
|
||||
features = ["server", "ring"]
|
||||
|
||||
[dependencies.http-signature-normalization-reqwest]
|
||||
version = "0.12.0"
|
||||
version = "0.11.0"
|
||||
default-features = false
|
||||
features = ["middleware", "ring"]
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ version: '3.3'
|
|||
|
||||
services:
|
||||
relay:
|
||||
image: asonix/relay:0.3.115
|
||||
image: asonix/relay:0.3.108
|
||||
ports:
|
||||
- "8079:8079"
|
||||
restart: always
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
rustPlatform.buildRustPackage {
|
||||
pname = "relay";
|
||||
version = "0.3.115";
|
||||
version = "0.3.114";
|
||||
src = ./.;
|
||||
cargoLock.lockFile = ./Cargo.lock;
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ use crate::{
|
|||
error::{Error, ErrorKind},
|
||||
extractors::XApiToken,
|
||||
};
|
||||
use actix_web::http::header::Header;
|
||||
use reqwest_middleware::ClientWithMiddleware;
|
||||
use serde::de::DeserializeOwned;
|
||||
|
||||
|
@ -86,17 +87,13 @@ async fn get_results<T: DeserializeOwned>(
|
|||
|
||||
let res = client
|
||||
.get(iri.as_str())
|
||||
.header(XApiToken::http1_name(), x_api_token.to_string())
|
||||
.header(XApiToken::name(), x_api_token.to_string())
|
||||
.send()
|
||||
.await
|
||||
.map_err(|e| ErrorKind::SendRequest(iri.to_string(), e.to_string()))?;
|
||||
|
||||
if !res.status().is_success() {
|
||||
return Err(ErrorKind::Status(
|
||||
iri.to_string(),
|
||||
crate::http1::status_to_http02(res.status()),
|
||||
)
|
||||
.into());
|
||||
return Err(ErrorKind::Status(iri.to_string(), res.status()).into());
|
||||
}
|
||||
|
||||
let t = res
|
||||
|
@ -119,7 +116,7 @@ async fn post_domains(
|
|||
|
||||
let res = client
|
||||
.post(iri.as_str())
|
||||
.header(XApiToken::http1_name(), x_api_token.to_string())
|
||||
.header(XApiToken::name(), x_api_token.to_string())
|
||||
.json(&Domains { domains })
|
||||
.send()
|
||||
.await
|
||||
|
|
|
@ -163,10 +163,6 @@ impl XApiToken {
|
|||
pub(crate) fn new(token: String) -> Self {
|
||||
Self(token)
|
||||
}
|
||||
|
||||
pub(crate) const fn http1_name() -> reqwest::header::HeaderName {
|
||||
reqwest::header::HeaderName::from_static("x-api-token")
|
||||
}
|
||||
}
|
||||
|
||||
impl Header for XApiToken {
|
||||
|
|
18
src/http1.rs
18
src/http1.rs
|
@ -1,18 +0,0 @@
|
|||
pub(crate) fn name_to_http02(
|
||||
name: &reqwest::header::HeaderName,
|
||||
) -> actix_web::http::header::HeaderName {
|
||||
actix_web::http::header::HeaderName::from_bytes(name.as_ref())
|
||||
.expect("headername conversions always work")
|
||||
}
|
||||
|
||||
pub(crate) fn value_to_http02(
|
||||
value: &reqwest::header::HeaderValue,
|
||||
) -> actix_web::http::header::HeaderValue {
|
||||
actix_web::http::header::HeaderValue::from_bytes(value.as_bytes())
|
||||
.expect("headervalue conversions always work")
|
||||
}
|
||||
|
||||
pub(crate) fn status_to_http02(status: reqwest::StatusCode) -> actix_web::http::StatusCode {
|
||||
actix_web::http::StatusCode::from_u16(status.as_u16())
|
||||
.expect("statuscode conversions always work")
|
||||
}
|
17
src/main.rs
17
src/main.rs
|
@ -12,7 +12,7 @@ use error::Error;
|
|||
use http_signature_normalization_actix::middleware::VerifySignature;
|
||||
use metrics_exporter_prometheus::PrometheusBuilder;
|
||||
use metrics_util::layers::FanoutBuilder;
|
||||
use opentelemetry::{trace::TracerProvider, KeyValue};
|
||||
use opentelemetry::KeyValue;
|
||||
use opentelemetry_otlp::WithExportConfig;
|
||||
use opentelemetry_sdk::Resource;
|
||||
use reqwest_middleware::ClientWithMiddleware;
|
||||
|
@ -33,7 +33,6 @@ mod db;
|
|||
mod error;
|
||||
mod extractors;
|
||||
mod future;
|
||||
mod http1;
|
||||
mod jobs;
|
||||
mod middleware;
|
||||
mod requests;
|
||||
|
@ -83,11 +82,13 @@ fn init_subscriber(
|
|||
let subscriber = subscriber.with(console_layer);
|
||||
|
||||
if let Some(url) = opentelemetry_url {
|
||||
let tracer_provider = opentelemetry_otlp::new_pipeline()
|
||||
let tracer = opentelemetry_otlp::new_pipeline()
|
||||
.tracing()
|
||||
.with_trace_config(opentelemetry_sdk::trace::Config::default().with_resource(
|
||||
Resource::new(vec![KeyValue::new("service.name", software_name)]),
|
||||
))
|
||||
.with_trace_config(
|
||||
opentelemetry_sdk::trace::config().with_resource(Resource::new(vec![
|
||||
KeyValue::new("service.name", software_name),
|
||||
])),
|
||||
)
|
||||
.with_exporter(
|
||||
opentelemetry_otlp::new_exporter()
|
||||
.tonic()
|
||||
|
@ -96,7 +97,7 @@ fn init_subscriber(
|
|||
.install_batch(opentelemetry_sdk::runtime::Tokio)?;
|
||||
|
||||
let otel_layer = tracing_opentelemetry::layer()
|
||||
.with_tracer(tracer_provider.tracer(software_name))
|
||||
.with_tracer(tracer)
|
||||
.with_filter(targets);
|
||||
|
||||
let subscriber = subscriber.with(otel_layer);
|
||||
|
@ -417,7 +418,7 @@ async fn server_main(
|
|||
.with_no_client_auth()
|
||||
.with_cert_resolver(cert_rx);
|
||||
server
|
||||
.bind_rustls_0_23(bind_address, server_config)?
|
||||
.bind_rustls_0_22(bind_address, server_config)?
|
||||
.run()
|
||||
.await?;
|
||||
|
||||
|
|
|
@ -233,11 +233,7 @@ impl Requests {
|
|||
}
|
||||
}
|
||||
|
||||
return Err(ErrorKind::Status(
|
||||
parsed_url.to_string(),
|
||||
crate::http1::status_to_http02(status),
|
||||
)
|
||||
.into());
|
||||
return Err(ErrorKind::Status(parsed_url.to_string(), status).into());
|
||||
}
|
||||
|
||||
// only actually succeed a breaker on 2xx response
|
||||
|
|
|
@ -23,13 +23,10 @@ pub(crate) async fn route(
|
|||
.fetch_response(&url, BreakerStrategy::Allow404AndBelow)
|
||||
.await?;
|
||||
|
||||
let mut response = HttpResponse::build(crate::http1::status_to_http02(res.status()));
|
||||
let mut response = HttpResponse::build(res.status());
|
||||
|
||||
for (name, value) in res.headers().iter().filter(|(h, _)| *h != "connection") {
|
||||
response.insert_header((
|
||||
crate::http1::name_to_http02(name),
|
||||
crate::http1::value_to_http02(value),
|
||||
));
|
||||
response.insert_header((name.clone(), value.clone()));
|
||||
}
|
||||
|
||||
return Ok(response.body(BodyStream::new(limit_stream(
|
||||
|
|
Loading…
Reference in a new issue