relay/src/routes/media.rs

33 lines
946 B
Rust
Raw Normal View History

use crate::{
data::MediaCache,
error::Error,
requests::{BreakerStrategy, Requests},
};
2022-11-18 04:39:26 +00:00
use actix_web::{body::BodyStream, web, HttpResponse};
use uuid::Uuid;
2022-11-01 21:50:23 +00:00
#[tracing::instrument(name = "Media", skip(media, requests))]
2021-02-10 04:17:20 +00:00
pub(crate) async fn route(
2021-02-10 04:05:06 +00:00
media: web::Data<MediaCache>,
requests: web::Data<Requests>,
uuid: web::Path<Uuid>,
2021-09-18 17:55:39 +00:00
) -> 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?;
2022-11-18 04:39:26 +00:00
let mut response = HttpResponse::build(res.status());
2022-11-18 04:39:26 +00:00
for (name, value) in res.headers().iter().filter(|(h, _)| *h != "connection") {
response.insert_header((name.clone(), value.clone()));
}
return Ok(response.body(BodyStream::new(res.bytes_stream())));
}
Ok(HttpResponse::NotFound().finish())
}