add unsupported media type response

This commit is contained in:
swrup 2026-04-12 20:15:08 +02:00 committed by Swrup
parent 305818ae4a
commit 86b03e6985
2 changed files with 26 additions and 21 deletions

View file

@ -83,30 +83,34 @@ let get_content t accept accept_language =
| AnyMediaSubtype m -> | AnyMediaSubtype m ->
Array.find_index (fun (m', _) -> m = m') supported_mimetypes Array.find_index (fun (m', _) -> m = m') supported_mimetypes
in in
let i = List.find_map find_lang_index accept_language in let i_opt = List.find_map find_lang_index accept_language in
let j = List.find_map find_mime_index accept in let j_opt = List.find_map find_mime_index accept in
(* TODO *) match (i_opt, j_opt) with
let i = Option.get i in | None, _ | _, None -> None
let j = Option.get j in | Some i, Some j ->
(supported_languages.(i), supported_mimetypes.(j), content_matrix.(i).(j)) Some
( supported_languages.(i),
supported_mimetypes.(j),
content_matrix.(i).(j) )
let aux t req _server _env = let aux t req _server _env =
let headers = Vifu.Request.headers req in let headers = Vifu.Request.headers req in
if has_matching_etag (asset_etag t) headers then Respond.not_modified () if has_matching_etag (asset_etag t) headers then Respond.not_modified ()
else else
let compression = select_encoding headers in match get_content t (get_accept headers) (get_accept_language headers) with
let language, mimetype, content = | None -> Respond.unsupported_media_type ()
get_content t (get_accept headers) (get_accept_language headers) | Some (language, mimetype, content) ->
in
(* -- *)
let open Vifu.Response in let open Vifu.Response in
let open Syntax in let open Syntax in
let compression = select_encoding headers in
let* () = with_string ?compression req content in let* () = with_string ?compression req content in
let* () = add ~field:"etag" (asset_etag t) in let* () = add ~field:"etag" (asset_etag t) in
let* () = add ~field:"taler-terms-version" Cfg.terms_legal_version in let* () = add ~field:"taler-terms-version" Cfg.terms_legal_version in
let* () = add ~field:"accept" (accept t) in let* () = add ~field:"accept" (accept t) in
let* () = add ~field:"avail-languages" (avail_languages t) in let* () = add ~field:"avail-languages" (avail_languages t) in
let* () = add ~field:"content-type" (Fmt.str "%a" pp_mimetype mimetype) in let* () =
add ~field:"content-type" (Fmt.str "%a" pp_mimetype mimetype)
in
let* () = add ~field:"content-language" language in let* () = add ~field:"content-language" language in
respond `OK respond `OK

View file

@ -16,6 +16,7 @@ let bad_request () = empty `Bad_request
let no_content () = empty `No_content let no_content () = empty `No_content
let not_modified () = empty `Not_modified let not_modified () = empty `Not_modified
let not_implemented () = empty `Not_implemented let not_implemented () = empty `Not_implemented
let unsupported_media_type () = empty `Unsupported_media_type
let respond_json req jsont status body = let respond_json req jsont status body =
Logs.info (fun m -> m "%a" pp_status status); Logs.info (fun m -> m "%a" pp_status status);