aboutsummaryrefslogtreecommitdiff
path: root/server/src/routes/stream.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/routes/stream.rs')
-rw-r--r--server/src/routes/stream.rs17
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,