Packages
Plug to get constant response time for requests. Simple protection against side channel attacks.
Current section
Files
Jump to
Current section
Files
lib/request_time_plug.ex
defmodule RequestTimePlug do
import Plug.Conn
def init(default), do: default
def call(%Plug.Conn{} = conn, opts) do
delay_time = Keyword.get(opts, :response_time, 0)
conn
|> assign(:start_time, :os.system_time(:millisecond))
|> Plug.Conn.register_before_send(fn conn ->
execution_time = :os.system_time(:millisecond) - conn.assigns[:start_time]
delay_time = delay_time - execution_time
if delay_time > 0 do
Process.sleep(delay_time)
end
conn
end)
end
end