projects
/
akkoma
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
timeline controller: rate limit timelines to 3 requests per 500ms per timeline per...
[akkoma]
/
lib
/
pleroma
/
captcha
/
captcha.ex
diff --git
a/lib/pleroma/captcha/captcha.ex
b/lib/pleroma/captcha/captcha.ex
index f105cbb2529bc97a1ad42c6f37de050ddc546044..cf75c3adc3bb0b41b5c74e82c461d6f312fb2875 100644
(file)
--- a/
lib/pleroma/captcha/captcha.ex
+++ b/
lib/pleroma/captcha/captcha.ex
@@
-1,8
+1,10
@@
# Pleroma: A lightweight social networking server
# Pleroma: A lightweight social networking server
-# Copyright © 2017-20
19
Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-20
20
Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Captcha do
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Captcha do
+ import Pleroma.Web.Gettext
+
alias Calendar.DateTime
alias Plug.Crypto.KeyGenerator
alias Plug.Crypto.MessageEncryptor
alias Calendar.DateTime
alias Plug.Crypto.KeyGenerator
alias Plug.Crypto.MessageEncryptor
@@
-10,7
+12,7
@@
defmodule Pleroma.Captcha do
use GenServer
@doc false
use GenServer
@doc false
- def start_link do
+ def start_link
(_)
do
GenServer.start_link(__MODULE__, [], name: __MODULE__)
end
GenServer.start_link(__MODULE__, [], name: __MODULE__)
end
@@
-48,7
+50,7
@@
defmodule Pleroma.Captcha do
token = new_captcha[:token]
secret = KeyGenerator.generate(secret_key_base, token <> "_encrypt")
sign_secret = KeyGenerator.generate(secret_key_base, token <> "_sign")
token = new_captcha[:token]
secret = KeyGenerator.generate(secret_key_base, token <> "_encrypt")
sign_secret = KeyGenerator.generate(secret_key_base, token <> "_sign")
- # Basicall
t
y copy what Phoenix.Token does here, add the time to
+ # Basically copy what Phoenix.Token does here, add the time to
# the actual data and make it a binary to then encrypt it
encrypted_captcha_answer =
%{
# the actual data and make it a binary to then encrypt it
encrypted_captcha_answer =
%{
@@
-60,7
+62,7
@@
defmodule Pleroma.Captcha do
{
:reply,
{
:reply,
- # Rep
al
ce the answer with the encrypted answer
+ # Rep
la
ce the answer with the encrypted answer
%{new_captcha | answer_data: encrypted_captcha_answer},
state
}
%{new_captcha | answer_data: encrypted_captcha_answer},
state
}
@@
-80,13
+82,15
@@
defmodule Pleroma.Captcha do
valid_if_after = DateTime.subtract!(DateTime.now_utc(), seconds_valid)
result =
valid_if_after = DateTime.subtract!(DateTime.now_utc(), seconds_valid)
result =
- with {:ok, data} <- MessageEncryptor.decrypt(answer_data, secret, sign_secret),
+ with false <- is_nil(answer_data),
+ {:ok, data} <- MessageEncryptor.decrypt(answer_data, secret, sign_secret),
%{at: at, answer_data: answer_md5} <- :erlang.binary_to_term(data) do
try do
%{at: at, answer_data: answer_md5} <- :erlang.binary_to_term(data) do
try do
- if DateTime.before?(at, valid_if_after), do: throw({:error, "CAPTCHA expired"})
+ if DateTime.before?(at, valid_if_after),
+ do: throw({:error, dgettext("errors", "CAPTCHA expired")})
if not is_nil(Cachex.get!(:used_captcha_cache, token)),
if not is_nil(Cachex.get!(:used_captcha_cache, token)),
- do: throw({:error,
"CAPTCHA already used"
})
+ do: throw({:error,
dgettext("errors", "CAPTCHA already used")
})
res = method().validate(token, captcha, answer_md5)
# Throw if an error occurs
res = method().validate(token, captcha, answer_md5)
# Throw if an error occurs
@@
-101,7
+105,7
@@
defmodule Pleroma.Captcha do
:throw, e -> e
end
else
:throw, e -> e
end
else
- _ -> {:error,
"Invalid answer data"
}
+ _ -> {:error,
dgettext("errors", "Invalid answer data")
}
end
{:reply, result, state}
end
{:reply, result, state}