aboutsummaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
Diffstat (limited to 'server/src')
-rw-r--r--server/src/assets.rs51
-rw-r--r--server/src/main.rs9
2 files changed, 56 insertions, 4 deletions
diff --git a/server/src/assets.rs b/server/src/assets.rs
new file mode 100644
index 0000000..320a4e4
--- /dev/null
+++ b/server/src/assets.rs
@@ -0,0 +1,51 @@
+#[cfg(not(feature = "standalone"))]
+#[macro_export]
+macro_rules! s_file {
+ ($path: literal, $content_type: literal) => {
+ warp::fs::file($path)
+ };
+}
+
+#[cfg(not(feature = "standalone"))]
+#[macro_export]
+macro_rules! s_asset_dir {
+ () => {
+ warp::fs::dir("client-web/public/assets")
+ };
+}
+
+#[cfg(feature = "standalone")]
+#[macro_export]
+macro_rules! s_file {
+ ($path: literal, $content_type: literal) => {
+ warp::any().map(|| {
+ warp::reply::with_header(
+ include_str!(concat!("../../", $path)),
+ "content-type",
+ $content_type,
+ )
+ })
+ };
+}
+
+#[cfg(feature = "standalone")]
+#[macro_export]
+macro_rules! s_asset_dir {
+ () => {{
+ use include_dir::{include_dir, Dir};
+ const DIR: Dir = include_dir!("$CARGO_MANIFEST_DIR/../client-web/public/assets");
+ warp::path::tail().and_then(|t: warp::path::Tail| async move {
+ let path = t.as_str();
+ let content_type = match &path {
+ _ if path.ends_with(".wasm") => "application/wasm",
+ _ if path.ends_with(".js") => "application/javascript",
+ _ if path.ends_with(".css") => "text/css",
+ _ if path.ends_with(".svg") => "image/svg+xml",
+ _ => "application/octet-stream",
+ };
+ DIR.get_file(path)
+ .map(|f| warp::reply::with_header(f.contents(), "content-type", content_type))
+ .ok_or(warp::reject::not_found())
+ })
+ }};
+}
diff --git a/server/src/main.rs b/server/src/main.rs
index 413f23a..c818eb5 100644
--- a/server/src/main.rs
+++ b/server/src/main.rs
@@ -3,6 +3,7 @@
which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
Copyright (C) 2022 metamuffin <metamuffin@disroot.org>
*/
+pub mod assets;
pub mod protocol;
pub mod room;
@@ -41,10 +42,10 @@ async fn run() {
.and(warp::ws())
.map(signaling_connect);
- let index: _ = warp::path!().and(warp::fs::file("../client-web/public/start.html"));
- let room: _ = warp::path!("room").and(warp::fs::file("../client-web/public/app.html"));
- let assets: _ = warp::path("assets").and(warp::fs::dir("../client-web/public/assets"));
- let sw_script: _ = warp::path("sw.js").and(warp::fs::file("../client-web/public/assets/sw.js"));
+ let index: _ = warp::path!().and(s_file!("client-web/public/start.html", "text/html"));
+ let room: _ = warp::path!("room").and(s_file!("client-web/public/app.html", "text/html"));
+ let assets: _ = warp::path("assets").and(s_asset_dir!());
+ let sw_script: _ = warp::path("sw.js").and(s_file!("client-web/public/assets/sw.js", "application/javascript"));
let favicon: _ = warp::path!("favicon.ico").map(|| "");
let old_format_redirect: _ = warp::path!("room" / String).map(|rsecret| {
reply::with_header(