relay/src/routes/media.rs
asonix 2281fcdb5b
All checks were successful
/ clippy (pull_request) Successful in 1m29s
/ tests (pull_request) Successful in 2m6s
/ check (aarch64-unknown-linux-musl) (pull_request) Successful in 2m34s
/ check (armv7-unknown-linux-musleabihf) (pull_request) Successful in 2m41s
/ check (x86_64-unknown-linux-musl) (pull_request) Successful in 2m31s
Start upgrading to http1
2024-04-14 20:54:01 -05:00

36 lines
1 KiB
Rust

use crate::{
data::MediaCache,
error::Error,
requests::{BreakerStrategy, Requests},
};
use actix_web::{body::BodyStream, web, HttpResponse};
use uuid::Uuid;
#[tracing::instrument(name = "Media", skip(media, requests))]
pub(crate) async fn route(
media: web::Data<MediaCache>,
requests: web::Data<Requests>,
uuid: web::Path<Uuid>,
) -> Result<HttpResponse, Error> {
let uuid = uuid.into_inner();
if let Some(url) = media.get_url(uuid).await? {
let res = requests
.fetch_response(&url, BreakerStrategy::Allow404AndBelow)
.await?;
let mut response = HttpResponse::build(crate::http1::status_to_http02(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),
));
}
return Ok(response.body(BodyStream::new(res.bytes_stream())));
}
Ok(HttpResponse::NotFound().finish())
}