package sihl

  1. Overview
  2. Docs

Source file sihl.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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
module App = Core_app
module Cleaner = Core_cleaner
module Command = Core_command
module Configuration = Core_configuration
module Container = Core_container
module Log = Core_log
module Random = Core_random
module Schedule = Core_schedule
module Time = Core_time

module Web = struct
  include Web
  module Http = Web_http

  module Request = struct
    include Opium.Request

    let bearer_token req =
      match Opium.Request.header "authorization" req with
      | Some authorization ->
        (try Some (Scanf.sscanf authorization "Bearer %s" (fun b -> b)) with
        | _ -> None)
      | None -> None
    ;;
  end

  module Response = Opium.Response
  module Cookie = Opium.Cookie
  module Body = Opium.Body
  module Router = Opium.Router
  module Route = Opium.Route

  module Csrf = struct
    module Crypto = Web_csrf.Crypto

    let find = Web_csrf.find
    let find_exn = Web_csrf.find_exn
    let log_src = Web_csrf.log_src
  end

  module Flash = struct
    let find_alert = Web_flash.find_alert
    let set_alert = Web_flash.set_alert
    let find_notice = Web_flash.find_notice
    let set_notice = Web_flash.set_notice
    let find = Web_flash.find
    let set = Web_flash.set
    let log_src = Web_flash.log_src
  end

  module Rest = struct
    type action =
      [ `Index
      | `Create
      | `New
      | `Edit
      | `Show
      | `Update
      | `Destroy
      ]

    type query = Web_rest.Query.t =
      { filter : string option
      ; limit : int option
      ; offset : int option
      ; sort : [ `Desc | `Asc ] option
      }

    let of_request = Web_rest.Query.of_request
    let to_query_string = Web_rest.Query.to_query_string
    let next_page = Web_rest.Query.next_page
    let previous_page = Web_rest.Query.previous_page
    let last_page = Web_rest.Query.last_page
    let first_page = Web_rest.Query.first_page
    let query_filter q = q.filter
    let query_sort q = q.sort |> Option.map Web_rest.Query.string_of_sort
    let query_limit q = q.limit |> Option.map string_of_int
    let query_offset q = q.offset |> Option.map string_of_int

    type form = (string * string option * string option) list

    let find_form = Web_rest.Form.find
    let resource_of_service = Web_rest.resource_of_service
    let resource_of_controller = Web_rest.resource_of_controller

    module type SERVICE = sig
      include Web_rest.SERVICE
    end

    module type VIEW = sig
      include Web_rest.VIEW
    end

    module type CONTROLLER = sig
      include Web_rest.CONTROLLER
    end
  end

  module Htmx = struct
    let is_htmx = Web_htmx.is_htmx
    let current_url = Web_htmx.current_url
    let prompt = Web_htmx.prompt
    let target = Web_htmx.target
    let trigger_name = Web_htmx.trigger_name
    let trigger_req = Web_htmx.trigger_req
    let set_push = Web_htmx.set_push
    let set_redirect = Web_htmx.set_redirect
    let set_refresh = Web_htmx.set_refresh
    let set_trigger = Web_htmx.set_trigger
    let set_trigger_after_settle = Web_htmx.set_trigger_after_settle
    let set_trigger_after_swap = Web_htmx.set_trigger_after_swap
    let log_src = Web_csrf.log_src
  end

  module Id = struct
    let find = Web_id.find
  end

  module Session = struct
    let find = Web_session.find
    let set = Web_session.set
    let set_value = Web_session.set_value
    let update_or_set_value = Web_session.update_or_set_value
    let get_all = Web_session.get_all
    let log_src = Web_session.log_src
  end

  module Middleware = struct
    let csrf = Web_csrf.middleware
    let error = Web_error.middleware
    let error_log_src = Web_error.log_src
    let flash = Web_flash.middleware
    let id = Web_id.middleware
    let migration = Web_migration.middleware
    let migration_log_src = Web_migration.log_src
    let trailing_slash = Web_trailing_slash.middleware
    let static_file = Web_static.middleware
  end
end

module Database = struct
  include Database
  module Migration = Database_migration
end

module Contract = struct
  module Cache = Contract_cache
  module Database = Contract_database
  module Email = Contract_email
  module Email_template = Contract_email_template
  module Http = Contract_http
  module Migration = Contract_migration
  module Password_reset = Contract_password_reset
  module Queue = Contract_queue
  module Random = Contract_random
  module Schedule = Contract_schedule
  module Storage = Contract_storage
  module Token = Contract_token
  module User = Contract_user
end

module Test = struct
  module Session = Session
end