summaryrefslogtreecommitdiff
path: root/server/registry/src
diff options
context:
space:
mode:
Diffstat (limited to 'server/registry/src')
-rw-r--r--server/registry/src/list.rs24
-rw-r--r--server/registry/src/main.rs6
2 files changed, 24 insertions, 6 deletions
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