 8f00d90f91
			
		
	
	
		8f00d90f91
		
	
	
	
	
		
			
			Closes #2275 As discovered in the issue, captcha used Tesla.get instead of Pleroma.HTTP. I've also grep'ed the repo and changed the other place where this was used.
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| # Pleroma: A lightweight social networking server
 | |
| # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 | |
| # SPDX-License-Identifier: AGPL-3.0-only
 | |
| 
 | |
| defmodule Pleroma.Captcha.Kocaptcha do
 | |
|   alias Pleroma.Captcha.Service
 | |
|   @behaviour Service
 | |
| 
 | |
|   @impl Service
 | |
|   def new do
 | |
|     endpoint = Pleroma.Config.get!([__MODULE__, :endpoint])
 | |
| 
 | |
|     case Pleroma.HTTP.get(endpoint <> "/new") do
 | |
|       {:error, _} ->
 | |
|         %{error: :kocaptcha_service_unavailable}
 | |
| 
 | |
|       {:ok, res} ->
 | |
|         json_resp = Jason.decode!(res.body)
 | |
| 
 | |
|         %{
 | |
|           type: :kocaptcha,
 | |
|           token: json_resp["token"],
 | |
|           url: endpoint <> json_resp["url"],
 | |
|           answer_data: json_resp["md5"],
 | |
|           seconds_valid: Pleroma.Config.get([Pleroma.Captcha, :seconds_valid])
 | |
|         }
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   @impl Service
 | |
|   def validate(_token, captcha, answer_data) do
 | |
|     # Here the token is unsed, because the unencrypted captcha answer is just passed to method
 | |
|     if not is_nil(captcha) and
 | |
|          :crypto.hash(:md5, captcha) |> Base.encode16() == String.upcase(answer_data),
 | |
|        do: :ok,
 | |
|        else: {:error, :invalid}
 | |
|   end
 | |
| end
 |