| defmodule PlausibleWeb.Captcha do | |
| alias Plausible.HTTPClient | |
| @verify_endpoint "https://hcaptcha.com/siteverify" | |
| def enabled? do | |
| is_binary(sitekey()) | |
| end | |
| def sitekey() do | |
| Application.get_env(:plausible, :hcaptcha, [])[:sitekey] | |
| end | |
| def verify(token) do | |
| if enabled?() do | |
| res = | |
| HTTPClient.impl().post( | |
| @verify_endpoint, | |
| [{"content-type", "application/x-www-form-urlencoded"}], | |
| %{ | |
| response: token, | |
| secret: secret() | |
| } | |
| ) | |
| case res do | |
| {:ok, %Finch.Response{status: 200, body: %{"success" => success}}} -> | |
| success | |
| _ -> | |
| false | |
| end | |
| else | |
| true | |
| end | |
| end | |
| defp secret() do | |
| Application.get_env(:plausible, :hcaptcha, [])[:secret] | |
| end | |
| end | |