Browse Source

Up captcha timer to 60 secs again, save used captchas in cachex

tags/v0.9.9
Ekaterina Vaartis 5 years ago
parent
commit
448af3601a
3 changed files with 29 additions and 4 deletions
  1. +1
    -1
      config/config.exs
  2. +10
    -0
      lib/pleroma/application.ex
  3. +18
    -3
      lib/pleroma/captcha/captcha.ex

+ 1
- 1
config/config.exs View File

@@ -12,7 +12,7 @@ config :pleroma, Pleroma.Repo, types: Pleroma.PostgresTypes

config :pleroma, Pleroma.Captcha,
enabled: false,
seconds_valid: 20,
seconds_valid: 60,
method: Pleroma.Captcha.Kocaptcha

config :pleroma, Pleroma.Captcha.Kocaptcha, endpoint: "https://captcha.kotobank.ch"


+ 10
- 0
lib/pleroma/application.ex View File

@@ -28,6 +28,16 @@ defmodule Pleroma.Application do
worker(
Cachex,
[
:used_captcha_cache,
[
ttl_interval: :timer.seconds(60 * 2)
]
],
id: :cachex_used_captcha_cache
),
worker(
Cachex,
[
:user_cache,
[
default_ttl: 25000,


+ 18
- 3
lib/pleroma/captcha/captcha.ex View File

@@ -80,9 +80,24 @@ defmodule Pleroma.Captcha do
result =
with {:ok, data} <- MessageEncryptor.decrypt(answer_data, secret, sign_secret),
%{at: at, answer_data: answer_md5} <- :erlang.binary_to_term(data) do
if DateTime.after?(at, valid_if_after),
do: method().validate(token, captcha, answer_md5),
else: {:error, "CAPTCHA expired"}
try do
if DateTime.before?(at, valid_if_after), do: throw({:error, "CAPTCHA expired"})

if not is_nil(Cachex.get!(:used_captcha_cache, token)),
do: throw({:error, "CAPTCHA already used"})

res = method().validate(token, captcha, answer_md5)
# Throw if an error occurs
if res != :ok, do: throw(res)

# Mark this captcha as used
{:ok, _} =
Cachex.put(:used_captcha_cache, token, true, ttl: :timer.seconds(seconds_valid))

:ok
catch
:throw, e -> e
end
else
_ -> {:error, "Invalid answer data"}
end


Loading…
Cancel
Save