37 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
	
		
			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.Service do
 | |
|   @doc """
 | |
|   Request new captcha from a captcha service.
 | |
| 
 | |
|   Returns:
 | |
| 
 | |
|   Type/Name of the service, the token to identify the captcha,
 | |
|   the data of the answer and service-specific data to use the newly created captcha
 | |
|   """
 | |
|   @callback new() :: %{
 | |
|               type: atom(),
 | |
|               token: String.t(),
 | |
|               answer_data: any()
 | |
|             }
 | |
| 
 | |
|   @doc """
 | |
|   Validated the provided captcha solution.
 | |
| 
 | |
|   Arguments:
 | |
|   * `token` the captcha is associated with
 | |
|   * `captcha` solution of the captcha to validate
 | |
|   * `answer_data` is the data needed to validate the answer (presumably encrypted)
 | |
| 
 | |
|   Returns:
 | |
| 
 | |
|   `true` if captcha is valid, `false` if not
 | |
|   """
 | |
|   @callback validate(
 | |
|               token :: String.t(),
 | |
|               captcha :: String.t(),
 | |
|               answer_data :: any()
 | |
|             ) :: :ok | {:error, String.t()}
 | |
| end
 | 
