summaryrefslogtreecommitdiff
path: root/server/registry
diff options
context:
space:
mode:
Diffstat (limited to 'server/registry')
-rw-r--r--server/registry/Cargo.toml8
-rw-r--r--server/registry/src/list.rs24
-rw-r--r--server/registry/src/main.rs6
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