mirror of
https://akkoma.dev/AkkomaGang/akkoma.git
synced 2024-11-13 12:44:51 +00:00
Add an ability to disabled captcha
This commit is contained in:
parent
a2399c1c7c
commit
28c43a417e
3 changed files with 37 additions and 18 deletions
|
@ -11,6 +11,7 @@ config :pleroma, ecto_repos: [Pleroma.Repo]
|
||||||
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
|
||||||
|
|
|
@ -28,27 +28,37 @@ defmodule Pleroma.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
|
||||||
|
|
||||||
|
|
|
@ -137,8 +137,16 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI 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
|
||||||
|
|
Loading…
Reference in a new issue