diff options
author | lain <lain@soykaf.club> | 2020-05-07 08:14:54 +0000 |
---|---|---|
committer | lain <lain@soykaf.club> | 2020-05-07 08:14:54 +0000 |
commit | f4c2bf0985f3d65d9caa6f02a71c89db9f070fb1 (patch) | |
tree | a7f4ece6dcd0a534b464e455fa382d3ebd8f4d07 /lib/pleroma/mfa/backup_codes.ex | |
parent | 68a126317d7cdd670c8e244319da08ff85639d33 (diff) | |
parent | 3d0c567fbc3506770fdac5f1269c45b244928747 (diff) | |
download | pleroma-f4c2bf0985f3d65d9caa6f02a71c89db9f070fb1.tar.gz |
Merge branch 'issue/209' into 'develop'
[#209] 2FA/two_factor_authentication support
See merge request pleroma/pleroma!801
Diffstat (limited to 'lib/pleroma/mfa/backup_codes.ex')
-rw-r--r-- | lib/pleroma/mfa/backup_codes.ex | 31 |
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 |