package vif

  1. Overview
  2. Docs

Module Vif.MiddlewaresSource

Middlewares.

Middleware is a function fn that applies to all requests. The user can introspect the headers (and only the headers) of the requests in order to add information (such as the connected user if a field in the headers provides such information). This information added to the request can be retrieved from the request handlers via Request.get.

Here is an example of middleware confirming client authentication via the "Authorization" field:

  let ( let* ) = Option.bind

  let decode str =
    match String.split_on_char ' ' str with
    | [ "Basic"; b64 ] ->
        let data = Base64.decode b64 in
        let* data = Result.to_option data in
        let data = String.split_on_char ':' data in
        let username = List.hd data and password = List.tl data in
        let password = String.concat ":" password in
        Some (username password)
    | _ -> None

  let auth =
    VIf.Middlewares.v ~name:"auth" @@ fun req _target _server _ ->
    let hdrs = Vif.Request.headers_of_request req in
    let* value = Vif.Headers.get hdrs "Authorization" in
    let* username, password = decode value in
    Some (username, password)

  let () =
    Miou_unix.run @@ fun () ->
    let middlewares = Vif.Middlewares.[ auth ] in
    Vif.run ~middlewares routes ()
Sourcetype 'cfg t =
  1. | [] : 'cfg t
  2. | :: : ('cfg, 'a) Middleware.t * 'cfg t -> 'cfg t
Sourcetype ('cfg, 'v) fn = Request.request -> string -> Server.t -> 'cfg -> 'v option

Type of function which implements a middleware.

Sourceval v : name:string -> ('cfg, 'v) fn -> ('cfg, 'v) Middleware.t

make ~name fn creates a new middleware which can be used by the server (you must specify the witness returned by this function into run).

Once all middlewares has been executed on the incoming request, it is possible to obtain the values calculated by these middlewares using Request.get.