defmodule PowCaptcha.Phoenix.ControllerCallbacks do @moduledoc """ Controller callback logic for captcha verification. """ use Pow.Extension.Phoenix.ControllerCallbacks.Base alias Pow.Config alias Plug.Conn alias Phoenix.Controller alias Pow.Phoenix.RegistrationController alias PowResetPassword.Phoenix.ResetPasswordController @doc false @impl true def before_process(RegistrationController, :create, conn, config) do verifier = Config.get(config, :captcha_verifier) return_path = routes(conn).registration_path(conn, :new) verifier.valid_solution?(conn.params) |> maybe_halt(conn, return_path) end def before_process(ResetPasswordController, :create, conn, config) do verifier = Config.get(config, :captcha_verifier) return_path = routes(conn).path_for(conn, ResetPasswordController, :new) verifier.valid_solution?(conn.params) |> maybe_halt(conn, return_path) end defp maybe_halt(false, conn, return_path) do conn |> Controller.put_flash(:error, "There was an error verifying you're not a robot. Please try again.") |> Controller.redirect(to: return_path) |> Conn.halt() end defp maybe_halt(true, conn, _return_path) do conn end end