Add an ability to disabled captcha
authorEkaterina Vaartis <vaartis@cock.li>
Fri, 14 Dec 2018 23:00:00 +0000 (02:00 +0300)
committerEkaterina Vaartis <vaartis@cock.li>
Sat, 15 Dec 2018 00:12:47 +0000 (03:12 +0300)
config/config.exs
lib/pleroma/captcha.ex
lib/pleroma/web/twitter_api/twitter_api.ex

index df4c618a75f33e531c241a6a64705aa5e4f59290..32593045c237d0c82daf08d9dd27ec8d97615410 100644 (file)
@@ -11,6 +11,7 @@ config :pleroma, ecto_repos: [Pleroma.Repo]
 config :pleroma, Pleroma.Repo, types: Pleroma.PostgresTypes
 
 config :pleroma, Pleroma.Captcha,
+  enabled: false,
   method: Pleroma.Captcha.Kocaptcha
 
 # Kocaptcha is a very simple captcha service, the source code is here: https://github.com/koto-bank/kocaptcha
index 31f3bc797e02eae73718541f03c23a52611a851b..ffa5640ea91c7f2e72e061f7da5797afcd1b1956 100644 (file)
@@ -28,27 +28,37 @@ defmodule Pleroma.Captcha do
 
   @doc false
   def handle_call(:new, _from, state) do
-    method = Pleroma.Config.get!([__MODULE__, :method])
-
-    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)
-
-            token = json_resp["token"]
-
-            true = :ets.insert(@ets, {token, json_resp["md5"]})
-
-            {
-              :reply,
-              %{type: :kocaptcha, token: token, url: endpoint <> json_resp["url"]},
-              state
-            }
-        end
+    enabled = Pleroma.Config.get([__MODULE__, :enabled])
+
+    if !enabled do
+      {
+        :reply,
+        %{type: :none},
+        state
+      }
+    else
+      method = Pleroma.Config.get!([__MODULE__, :method])
+
+      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)
+
+              token = json_resp["token"]
+
+              true = :ets.insert(@ets, {token, json_resp["md5"]})
+
+              {
+                :reply,
+                %{type: :kocaptcha, token: token, url: endpoint <> json_resp["url"]},
+                state
+              }
+          end
+      end
     end
   end
 
index c9e8fbcbb4d0825abb3ff0ad60f854786406903d..9f98c43c90cd3a56c96710db7a5415cce188a013 100644 (file)
@@ -137,8 +137,16 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
       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
-    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
       {:error, %{error: Jason.encode!(%{captcha: ["Invalid CAPTCHA"]})}}
     else