summaryrefslogtreecommitdiff
path: root/lib/pleroma/captcha/captcha_service.ex
blob: 959038cef55e68eb5dd9eeb6224d90cad08a4f40 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 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