2025-09-28 19:37:49 +02:00
|
|
|
let mimetype_ext_assoc =
|
|
|
|
|
[
|
2025-09-28 19:53:53 +02:00
|
|
|
(("text", "plain"), ".txt"); (("text", "markdown"), ".md")
|
|
|
|
|
; (("text", "html"), ".html"); (("text", "html"), ".htm")
|
|
|
|
|
; (("application", "pdf"), ".pdf"); (("image", "jpeg"), ".jpg")
|
|
|
|
|
; (("image", "jpeg"), ".jpeg"); (("image", "png"), ".png")
|
|
|
|
|
; (("image", "gif"), ".gif")
|
2025-09-28 19:37:49 +02:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
(* <> than the actual set of "supported" extension (which depends on config files) *)
|
|
|
|
|
let all_known_mimetypes, all_known_extensions = List.split mimetype_ext_assoc
|
|
|
|
|
let is_valid_filename path = Fpath.mem_ext all_known_extensions path
|
|
|
|
|
|
|
|
|
|
let media_to_known_mimetype = function
|
|
|
|
|
| Cohttp.Accept.MediaType (m, m_sub) ->
|
|
|
|
|
List.find_opt (( = ) (m, m_sub)) all_known_mimetypes
|
|
|
|
|
| AnyMediaSubtype m ->
|
|
|
|
|
List.find_opt (fun (m', _) -> String.equal m m') all_known_mimetypes
|
2025-09-28 19:57:49 +02:00
|
|
|
| AnyMedia -> Some Config.default_mimetype
|
2025-09-28 19:37:49 +02:00
|
|
|
|
|
|
|
|
let mimetype_to_extension (m, m_sub) =
|
|
|
|
|
assert (m <> "*");
|
|
|
|
|
assert (m_sub <> "*");
|
|
|
|
|
List.assoc_opt (m, m_sub) mimetype_ext_assoc
|
|
|
|
|
|
|
|
|
|
let extension_to_mimetype ext =
|
|
|
|
|
List.find_map
|
|
|
|
|
(fun (mime, ext') ->
|
|
|
|
|
match String.equal ext ext' with false -> None | true -> Some mime)
|
|
|
|
|
mimetype_ext_assoc
|