diff options
author | lain <lain@soykaf.club> | 2020-05-07 14:45:20 +0200 |
---|---|---|
committer | lain <lain@soykaf.club> | 2020-05-07 14:45:20 +0200 |
commit | f0c22df2265e922a66ca69c3508fe812b8e20b6b (patch) | |
tree | be510abc9cc9154e07b2ec9eaf344e6e4e88bed1 /lib/pleroma/mfa/backup_codes.ex | |
parent | 92caae592338a3ca307686e7644f2de18bb57ce5 (diff) | |
parent | 4c92dfb73ef1f40438adf5da009499205a677912 (diff) | |
download | pleroma-f0c22df2265e922a66ca69c3508fe812b8e20b6b.tar.gz |
Merge branch 'develop' of git.pleroma.social:pleroma/pleroma into feature/undo-validator-reduced
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 |