wip clean up ToS

This commit is contained in:
swrup 2026-02-10 21:49:42 +01:00 committed by Swrup
parent 7d7dd2400c
commit b0fa0b1780
10 changed files with 150 additions and 153 deletions

View file

@ -1,14 +1,6 @@
(* TODO check for mathcing ETAG with a middleware instead? *)
(* /terms + /privacy
- try to find a response with an acceptable mime-type
- pick the version in the most preferred language of the user
- apply compression if that is allowed by the client
- set ETAG header
- If it did not change, a "304 Not Modified" response will be returned
- A "Taler-Terms-Version" header is generated to indicate the legal version of the terms
- When returning a full response (not a "304 Not Modified"),
include a "Avail-Languages" header: a comma-separated list of the languages available *)
(* /terms + /privacy *)
(* TODO response *)
module Respond_with = struct
open Vif.Response
open Syntax
@ -32,15 +24,6 @@ module Respond_with = struct
let not_modified () =
let* () = empty in
respond `Not_modified
let unsupported_media_type req =
let body =
error_detail ~hint:"no acceptable mimetype" `Unsupported_media_type
in
let* () = add ~field:"content-type" "application/json" in
let* () = add ~field:"accept" Headers.accept_header_value in
let* () = with_string ?compression:None req body in
respond `Unsupported_media_type
end
let _aux kind req _server _env =
@ -59,35 +42,32 @@ let _aux kind req _server _env =
| Ok true ->
Logs.err (fun m -> m "not modified");
Respond_with.not_modified ()
| Ok false -> (
match Headers.select_mimetype headers with
| None ->
Logs.err (fun m -> m "unsupported_media_type");
Respond_with.unsupported_media_type req
| Some mime ->
let lang = Headers.select_language headers in
let compression = Headers.select_encoding headers in
let data = Assets.get_content ~mime ~lang kind in
(* -- *)
let open Vif.Response in
let open Syntax in
let* () = with_string ?compression req data in
let* () =
let etag_field_value = Headers_lib.Etag.to_field_value etag in
add ~field:"etag" etag_field_value
in
let* () =
(* todo: is it "taler-privacy-version" for /policy ? *)
add ~field:"taler-terms-version" Assets.terms_legal_version
in
let* () =
add ~field:"avail-languages" Headers.avail_languages_header_value
in
let* () =
let content_type = Fmt.str "%a" Assets.Mimetype.pp_mime mime in
add ~field:"content-type" content_type
in
respond `OK)
| Ok false ->
let mime = Headers.select_mimetype headers in
let lang = Headers.select_language headers in
let compression = Headers.select_encoding headers in
let data = Assets.get_content ~mime ~lang kind in
(* -- *)
let open Vif.Response in
let open Syntax in
let* () = with_string ?compression req data in
let* () =
let etag_field_value = Headers_lib.Etag.to_field_value etag in
add ~field:"etag" etag_field_value
in
let* () =
(* todo: is it "taler-privacy-version" for /policy ? *)
add ~field:"taler-terms-version" Assets.terms_legal_version
in
(* TODO add compression and mimetype headers too *)
let* () =
add ~field:"avail-languages" Headers.avail_languages_header_value
in
let* () =
let content_type = Fmt.str "%a" Assets.Mimetype.pp mime in
add ~field:"content-type" content_type
in
respond `OK
(* WIP DEBUG *)
let aux _kind req _server _env =