HTTPDigest.Plug (HTTPDigest v0.1.0)

Copy Markdown View Source

Verifies Content-Digest on incoming Plug requests.

Because Plug.Parsers consumes the raw body, digest computation must be hooked into body reading:

plug Plug.Parsers,
  parsers: [:json],
  json_decoder: JSON,
  body_reader: {HTTPDigest.Plug, :read_body, []}

plug HTTPDigest.Plug, required: true

On failure, the default response is 403 with Want-Content-Digest. Override it with :on_failure.

Summary

Functions

A body_reader for Plug.Parsers that folds raw request body chunks into a digest stream stored in conn.private[:http_digest_stream].

Functions

read_body(conn, opts)

@spec read_body(
  Plug.Conn.t(),
  keyword()
) ::
  {:ok, binary(), Plug.Conn.t()}
  | {:more, binary(), Plug.Conn.t()}
  | {:error, term()}

A body_reader for Plug.Parsers that folds raw request body chunks into a digest stream stored in conn.private[:http_digest_stream].