diff options
Diffstat (limited to 'server/registry')
-rw-r--r-- | server/registry/Cargo.toml | 8 | ||||
-rw-r--r-- | server/registry/src/list.rs | 24 | ||||
-rw-r--r-- | server/registry/src/main.rs | 6 |
3 files changed, 28 insertions, 10 deletions
diff --git a/server/registry/Cargo.toml b/server/registry/Cargo.toml index c616174f..49f58a46 100644 --- a/server/registry/Cargo.toml +++ b/server/registry/Cargo.toml @@ -6,16 +6,16 @@ edition = "2021" [dependencies] log = "0.4.22" env_logger = "0.11.5" -anyhow = "1.0.86" +anyhow = "1.0.89" rocket = { version = "0.5.1", features = ["json"] } -tokio = { version = "1.39.2", features = ["full"] } +tokio = { version = "1.40.0", features = ["full"] } serde_json = "1.0.128" markup = "0.15.0" serde = { version = "1.0.210", features = ["derive"] } -tokio-tungstenite = { version = "0.23.1", features = [ +tokio-tungstenite = { version = "0.24.0", features = [ "rustls-tls-native-roots", ] } -rustls = { version = "0.23.12", features = ["ring"] } +rustls = { version = "0.23.13", features = ["ring"] } hurrycurry-protocol = { path = "../protocol" } hurrycurry-client-lib = { path = "../client-lib" } diff --git a/server/registry/src/list.rs b/server/registry/src/list.rs index 1c2cd4a3..5684b473 100644 --- a/server/registry/src/list.rs +++ b/server/registry/src/list.rs @@ -20,9 +20,13 @@ use anyhow::Result; use hurrycurry_protocol::registry::Entry; use rocket::{ get, - http::MediaType, + http::{Header, MediaType}, request::{self, FromRequest, Outcome}, - response::content::{RawHtml, RawJson}, + response::{ + self, + content::{RawHtml, RawJson}, + Responder, + }, Either, Request, State, }; use std::sync::Arc; @@ -32,12 +36,12 @@ use tokio::sync::RwLock; pub(super) async fn r_list( registry: &State<Arc<RwLock<Registry>>>, json: AcceptJson, -) -> Either<RawJson<Arc<str>>, RawHtml<Arc<str>>> { - if json.0 { +) -> Cors<Either<RawJson<Arc<str>>, RawHtml<Arc<str>>>> { + Cors(if json.0 { Either::Left(RawJson(registry.read().await.json_response.clone())) } else { Either::Right(RawHtml(registry.read().await.html_response.clone())) - } + }) } pub(super) fn generate_json_list(entries: &[Entry]) -> Result<Arc<str>> { @@ -100,3 +104,13 @@ impl<'r> FromRequest<'r> for AcceptJson { }) } } + +pub struct Cors<T>(pub T); +#[rocket::async_trait] +impl<'r, T: Responder<'r, 'static>> Responder<'r, 'static> for Cors<T> { + fn respond_to(self, req: &'r Request<'_>) -> response::Result<'static> { + let mut b = self.0.respond_to(req)?; + b.set_header(Header::new("access-control-allow-origin", "*")); + Ok(b) + } +} diff --git a/server/registry/src/main.rs b/server/registry/src/main.rs index 5bb7a0a3..30fb8d66 100644 --- a/server/registry/src/main.rs +++ b/server/registry/src/main.rs @@ -26,7 +26,7 @@ use list::{generate_html_list, generate_json_list, r_list}; use lobby::lobby_wrapper; use log::{error, info}; use register::r_register; -use rocket::{get, routes, shield::Shield, Config}; +use rocket::{fairing::AdHoc, get, http::Header, routes, shield::Shield, Config}; use std::{ cmp::Reverse, collections::HashMap, @@ -73,6 +73,10 @@ fn main() { }) .attach(Shield::new()) .manage(registry) + .attach(AdHoc::on_response("set server header", |_req, res| { + res.set_header(Header::new("server", "hurrycurry-registry")); + Box::pin(async {}) + })) .mount("/", routes![r_index, r_list, r_register]) .ignite() .await |