defmodule PhilomenaWeb.CaptchaPlug do
  alias Philomena.Captcha
  alias Phoenix.Controller
  alias Plug.Conn

  def init([]), do: false

  def call(conn, _opts) do
    user = conn |> Pow.Plug.current_user()

    conn
    |> maybe_check_captcha(user)
  end

  defp maybe_check_captcha(conn, nil) do
    case Captcha.valid_solution?(conn.params) do
      true  -> conn
      false ->
        conn
        |> Controller.put_flash(:error, "There was an error verifying you're not a robot. Please try again.")
        |> Controller.redirect(external: conn.assigns.referrer)
        |> Conn.halt()
    end
  end
  defp maybe_check_captcha(conn, _user), do: conn
end