- @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
+ defp validate_answer_data(token, answer_data) do
+ {secret, sign_secret} = secret_pair(token)
+
+ 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
+ {:ok, %{at: at, answer_data: answer_md5}}
+ else
+ _ -> {:error, :invalid_answer_data}