diff options
author | metamuffin <metamuffin@disroot.org> | 2023-12-16 11:59:20 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-12-16 11:59:20 +0100 |
commit | 0a3abebd73e7e7d879ad94fc1d2ec26f9221edc2 (patch) | |
tree | 5b86c719a47682b64997eb64d01db05bd8116553 /server | |
parent | 6e5dadf5a42b633c199be54969d229e34c4c3a00 (diff) | |
download | jellything-0a3abebd73e7e7d879ad94fc1d2ec26f9221edc2.tar jellything-0a3abebd73e7e7d879ad94fc1d2ec26f9221edc2.tar.bz2 jellything-0a3abebd73e7e7d879ad94fc1d2ec26f9221edc2.tar.zst |
fix cors on federation redirect
Diffstat (limited to 'server')
-rw-r--r-- | server/src/routes/stream.rs | 17 |
1 files changed, 15 insertions, 2 deletions
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<RequestRange>, spec: StreamSpec, -) -> Result<Either<StreamResponse, Redirect>, MyError> { +) -> Result<Either<StreamResponse, RedirectResponse>, 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, |