Add an ability to disabled captcha

This commit is contained in:
Ekaterina Vaartis 2018-12-15 02:00:00 +03:00
parent a2399c1c7c
commit 28c43a417e
3 changed files with 37 additions and 18 deletions

View File

@ -11,6 +11,7 @@
config :pleroma, Pleroma.Repo, types: Pleroma.PostgresTypes config :pleroma, Pleroma.Repo, types: Pleroma.PostgresTypes
config :pleroma, Pleroma.Captcha, config :pleroma, Pleroma.Captcha,
enabled: false,
method: Pleroma.Captcha.Kocaptcha method: Pleroma.Captcha.Kocaptcha
# Kocaptcha is a very simple captcha service, the source code is here: https://github.com/koto-bank/kocaptcha # Kocaptcha is a very simple captcha service, the source code is here: https://github.com/koto-bank/kocaptcha

View File

@ -28,27 +28,37 @@ def validate(token, captcha) do
@doc false @doc false
def handle_call(:new, _from, state) do def handle_call(:new, _from, state) do
method = Pleroma.Config.get!([__MODULE__, :method]) enabled = Pleroma.Config.get([__MODULE__, :enabled])
case method do if !enabled do
__MODULE__.Kocaptcha -> {
endpoint = Pleroma.Config.get!([method, :endpoint]) :reply,
case HTTPoison.get(endpoint <> "/new") do %{type: :none},
{:error, _} -> state
%{error: "Kocaptcha service unavailable"} }
{:ok, res} -> else
json_resp = Poison.decode!(res.body) method = Pleroma.Config.get!([__MODULE__, :method])
token = json_resp["token"] case method do
__MODULE__.Kocaptcha ->
endpoint = Pleroma.Config.get!([method, :endpoint])
case HTTPoison.get(endpoint <> "/new") do
{:error, _} ->
%{error: "Kocaptcha service unavailable"}
{:ok, res} ->
json_resp = Poison.decode!(res.body)
true = :ets.insert(@ets, {token, json_resp["md5"]}) token = json_resp["token"]
{ true = :ets.insert(@ets, {token, json_resp["md5"]})
:reply,
%{type: :kocaptcha, token: token, url: endpoint <> json_resp["url"]}, {
state :reply,
} %{type: :kocaptcha, token: token, url: endpoint <> json_resp["url"]},
end state
}
end
end
end end
end end

View File

@ -137,8 +137,16 @@ def register_user(params) do
captcha_token: params["captcha_token"] captcha_token: params["captcha_token"]
} }
captcha_enabled = Pleroma.Config.get([Pleroma.Captcha, :enabled])
# true if captcha is disabled or enabled and valid, false otherwise
captcha_ok = if !captcha_enabled do
true
else
Pleroma.Captcha.validate(params[:captcha_token], params[:captcha_solution])
end
# Captcha invalid # Captcha invalid
if not Pleroma.Captcha.validate(params[:captcha_token], params[:captcha_solution]) do if not captcha_ok do
# I have no idea how this error handling works # I have no idea how this error handling works
{:error, %{error: Jason.encode!(%{captcha: ["Invalid CAPTCHA"]})}} {:error, %{error: Jason.encode!(%{captcha: ["Invalid CAPTCHA"]})}}
else else