aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-12-16 11:59:20 +0100
committermetamuffin <metamuffin@disroot.org>2023-12-16 11:59:20 +0100
commit0a3abebd73e7e7d879ad94fc1d2ec26f9221edc2 (patch)
tree5b86c719a47682b64997eb64d01db05bd8116553 /server
parent6e5dadf5a42b633c199be54969d229e34c4c3a00 (diff)
downloadjellything-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.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,