From b96c671e015acb1e2c8497cfedf56ee59ff3944f Mon Sep 17 00:00:00 2001 From: Swrup Date: Sat, 13 Sep 2025 19:32:30 +0200 Subject: [PATCH] basic static files w/ crunch --- .../{privacy.html => privacy/en/0.html} | 0 src/assets/{terms.html => terms/en/0.html} | 0 src/config.ml | 6 ++++ src/dune | 10 +++++++ src/mte.ml | 29 ++++++++++++++----- 5 files changed, 37 insertions(+), 8 deletions(-) rename src/assets/{privacy.html => privacy/en/0.html} (100%) rename src/assets/{terms.html => terms/en/0.html} (100%) create mode 100644 src/config.ml diff --git a/src/assets/privacy.html b/src/assets/privacy/en/0.html similarity index 100% rename from src/assets/privacy.html rename to src/assets/privacy/en/0.html diff --git a/src/assets/terms.html b/src/assets/terms/en/0.html similarity index 100% rename from src/assets/terms.html rename to src/assets/terms/en/0.html diff --git a/src/config.ml b/src/config.ml new file mode 100644 index 00000000..e9481024 --- /dev/null +++ b/src/config.ml @@ -0,0 +1,6 @@ +(* https://docs.taler.net/manpages/taler-exchange.conf.5.html *) + +let terms_dir = Fpath.(v "terms") +let terms_etag = "0" +let privacy_dir = Fpath.(v "privacy") +let privacy_etag = "0" diff --git a/src/dune b/src/dune index b9b1fc67..78b22c32 100644 --- a/src/dune +++ b/src/dune @@ -1,4 +1,14 @@ (executable (public_name mte) (name mte) + (modules assets mte config) (libraries vif fmt jsont)) + +(rule + (target assets.ml) + (deps + (source_tree assets)) + (action + (with-stdout-to + %{null} + (run ocaml-crunch -m plain assets -o %{target})))) diff --git a/src/mte.ml b/src/mte.ml index 971a9997..291275e4 100644 --- a/src/mte.ml +++ b/src/mte.ml @@ -1,18 +1,31 @@ -let terms req _server _env = - Vif.Response.with_file ~compression:`DEFLATE req - Fpath.(v "assets" / "terms.html") +module Assets = struct + let get path = + let path = Fpath.to_string path in + match Assets.read path with + | None -> Fmt.failwith "asset loading failure `%s`" path + | Some data -> data -let privacy req _server _env = - Vif.Response.with_file ~compression:`DEFLATE req - Fpath.(v "assets" / "privacy.html") + let terms = + get Fpath.((Config.terms_dir / "en" / Config.terms_etag) + ".html") + + let privacy = + get Fpath.((Config.privacy_dir / "en" / Config.privacy_etag) + ".html") +end + +let static data req _server _env = + let open Vif.Response.Syntax in + let* () = Vif.Response.with_string ~compression:`Gzip req data in + let field = "content-type" in + let* () = Vif.Response.add ~field "html; charset=utf-8" in + Vif.Response.respond `OK let routes = let open Vif.Uri in let open Vif.Route in (*let open Vif.Type in*) [ - get (rel / "terms" /?? nil) --> terms - ; get (rel / "privacy" /?? nil) --> privacy + get (rel / "terms" /?? nil) --> static Assets.terms + ; get (rel / "privacy" /?? nil) --> static Assets.privacy ] let () =