aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/mfa/backup_codes.ex
diff options
context:
space:
mode:
authorIvan Tashkinov <ivantashkinov@gmail.com>2020-05-08 21:37:55 +0300
committerIvan Tashkinov <ivantashkinov@gmail.com>2020-05-08 21:37:55 +0300
commitb2924ab1fbba4e6add15030cf8444d2d3f0cfe0c (patch)
tree000420341c4397cb7e380ff6fa52bb023700476a /lib/pleroma/mfa/backup_codes.ex
parentd5cdc907e3fda14c2ce78ddbb124739441330ecc (diff)
parent570940a3fd8d5a2fb600656432dfc01304161221 (diff)
downloadpleroma-b2924ab1fbba4e6add15030cf8444d2d3f0cfe0c.tar.gz
Merge remote-tracking branch 'remotes/origin/develop' into restricted-relations-embedding
Diffstat (limited to 'lib/pleroma/mfa/backup_codes.ex')
-rw-r--r--lib/pleroma/mfa/backup_codes.ex31
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/pleroma/mfa/backup_codes.ex b/lib/pleroma/mfa/backup_codes.ex
new file mode 100644
index 000000000..2b5ec34f8
--- /dev/null
+++ b/lib/pleroma/mfa/backup_codes.ex
@@ -0,0 +1,31 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.MFA.BackupCodes do
+ @moduledoc """
+ This module contains functions for generating backup codes.
+ """
+ alias Pleroma.Config
+
+ @config_ns [:instance, :multi_factor_authentication, :backup_codes]
+
+ @doc """
+ Generates backup codes.
+ """
+ @spec generate(Keyword.t()) :: list(String.t())
+ def generate(opts \\ []) do
+ number_of_codes = Keyword.get(opts, :number_of_codes, default_backup_codes_number())
+ code_length = Keyword.get(opts, :length, default_backup_codes_code_length())
+
+ Enum.map(1..number_of_codes, fn _ ->
+ :crypto.strong_rand_bytes(div(code_length, 2))
+ |> Base.encode16(case: :lower)
+ end)
+ end
+
+ defp default_backup_codes_number, do: Config.get(@config_ns ++ [:number], 5)
+
+ defp default_backup_codes_code_length,
+ do: Config.get(@config_ns ++ [:length], 16)
+end