diff options
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, |