From 0a3abebd73e7e7d879ad94fc1d2ec26f9221edc2 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 16 Dec 2023 11:59:20 +0100 Subject: fix cors on federation redirect --- server/src/routes/stream.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'server/src') diff --git a/server/src/routes/stream.rs b/server/src/routes/stream.rs index 279a621..e7b3d54 100644 --- a/server/src/routes/stream.rs +++ b/server/src/routes/stream.rs @@ -46,7 +46,7 @@ pub async fn r_stream( id: &str, range: Option, spec: StreamSpec, -) -> Result, MyError> { +) -> Result, MyError> { let node = db .node .get(&id.to_string())? @@ -85,7 +85,7 @@ pub async fn r_stream( let uri = session.stream(&remote_id, &spec); info!("federation redirect"); - return Ok(Either::Right(Redirect::found(uri))); + return Ok(Either::Right(RedirectResponse(uri))); } info!( @@ -120,6 +120,19 @@ pub async fn r_stream( } } +pub struct RedirectResponse(String); + +#[rocket::async_trait] +impl<'r> Responder<'r, 'static> for RedirectResponse { + fn respond_to(self, _: &'r Request<'_>) -> response::Result<'static> { + let mut b = Response::build(); + b.status(Status::Found); + b.header(Header::new("access-control-allow-origin", "*")); + b.header(Header::new("location", self.0)); + Ok(b.finalize()) + } +} + pub struct StreamResponse { stream: DuplexStream, advertise_range: bool, -- cgit v1.2.3-70-g09d2