Phoenix (Elixir)
defmodule DisposableGuard.Plug do
import Plug.Conn
def init(opts), do: opts
def call(conn, _opts) do
email = conn.params["email"] || conn.body_params["email"]
if email && disposable?(email) do
conn
|> put_resp_content_type("application/json")
|> send_resp(400, Jason.encode!(%{error: "Please use a real email address."}))
|> halt()
else
conn
end
end
defp disposable?(email) do
api_key = System.get_env("DG_KEY")
url = "https://api.disposableguard.com/v1/check?email=#{URI.encode(email)}"
try do
case HTTPoison.get(url, [{"Authorization", "Bearer #{api_key}"}]) do
{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
Jason.decode!(body)["is_disposable"] == true
_ -> false
end
rescue
_ -> false # fail-open
end
end
endNotes
Add to your router: `plug DisposableGuard.Plug`. Requires `httpoison` and `jason` packages.