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