package mehari

  1. Overview
  2. Docs

Source file mehari.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
type 'addr request = 'addr Request.t
type response = Response.t
type 'a status = 'a Response.status
type mime = Mime.t
type body = Response.body

module Gemtext = Gemtext

let paragraph = Gemtext.paragraph
let uri = Request.uri
let target = Request.target
let ip = Request.ip
let port = Request.port
let sni = Request.sni
let query = Request.query
let client_cert = Request.client_cert
let param = Request.param
let response = Response.response
let response_body = Response.response_body
let response_text = Response.response_text
let response_gemtext = Response.response_gemtext
let response_raw = Response.response_raw

include Response.Status

let string = Response.string
let gemtext = Response.gemtext
let lines = Response.lines
let seq = Response.seq
let stream = Response.stream
let page = Response.page
let make_mime = Mime.make_mime
let from_filename = Mime.from_filename
let from_content = Mime.from_content
let no_mime = Mime.no_mime
let gemini = Mime.gemini
let app_octet_stream = Mime.app_octet_stream
let plaintext = Mime.plaintext
let text = Mime.text
let with_charset = Mime.with_charset

module type NET = sig
  module IO : Types.IO

  type route
  type rate_limiter
  type addr
  type handler = addr Request.t -> Response.t IO.t
  type middleware = handler -> handler

  val no_middleware : middleware
  val pipeline : middleware list -> middleware
  val router : route list -> handler

  val route :
    ?rate_limit:rate_limiter ->
    ?mw:middleware ->
    ?regex:bool ->
    string ->
    handler ->
    route

  val scope :
    ?rate_limit:rate_limiter -> ?mw:middleware -> string -> route list -> route

  val no_route : route

  val make_rate_limit :
    ?period:int -> int -> [ `Second | `Minute | `Hour | `Day ] -> rate_limiter

  val virtual_hosts :
    ?meth:[ `ByURL | `SNI ] -> (string * handler) list -> handler

  val set_log_lvl : Logs.level -> unit
  val logger : handler -> handler
  val debug : 'a Logs.log
  val info : 'a Logs.log
  val warning : 'a Logs.log
  val error : 'a Logs.log
end

module type FS = sig
  module IO : Types.IO

  type addr
  type handler = addr Handler.Make(IO).t
  type dir_path

  val response_document : ?mime:mime -> dir_path -> response IO.t

  val static :
    ?handler:(dir_path -> handler) ->
    ?dir_listing:
      (([ `Regular_file | `Directory | `Other ] * string) list -> handler) ->
    ?index:string ->
    ?show_hidden:bool ->
    dir_path ->
    handler
end

module Private = struct
  module type IO = Types.IO
  module type ADDR = Types.ADDR

  type response_view = Response.view

  let view_of_resp = Response.view_of_resp

  module Cert = struct
    let get_certs ~exn_msg = function
      | default :: mult -> `Multiple_default (default, mult)
      | _ -> invalid_arg exn_msg
  end

  module CGI = Cgi
  module Handler = Handler
  module Logger_impl = Logger_impl
  module Protocol = Protocol
  module Rate_limiter_impl = Rate_limiter_impl
  module Router_impl = Router_impl
  module Static = Static
end
OCaml

Innovation. Community. Security.