2026-02-18 21:23:15 +00:00
|
|
|
defmodule BerrypodWeb.Plugs.CacheRawBody do
|
2026-01-31 22:41:15 +00:00
|
|
|
@moduledoc """
|
|
|
|
|
Custom body reader that caches the raw request body for webhook signature verification.
|
|
|
|
|
Used with Plug.Parsers :body_reader option.
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
def read_body(conn, opts) do
|
|
|
|
|
case Plug.Conn.read_body(conn, opts) do
|
|
|
|
|
{:ok, body, conn} ->
|
|
|
|
|
conn = Plug.Conn.assign(conn, :raw_body, body)
|
|
|
|
|
{:ok, body, conn}
|
|
|
|
|
|
|
|
|
|
{:more, body, conn} ->
|
|
|
|
|
existing = conn.assigns[:raw_body] || ""
|
|
|
|
|
conn = Plug.Conn.assign(conn, :raw_body, existing <> body)
|
|
|
|
|
{:more, body, conn}
|
|
|
|
|
|
|
|
|
|
{:error, reason} ->
|
|
|
|
|
{:error, reason}
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|