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 () =