logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

changeset.ex (1766B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.MFA.Changeset do
  5. alias Pleroma.MFA
  6. alias Pleroma.MFA.Settings
  7. alias Pleroma.User
  8. def disable(%Ecto.Changeset{} = changeset, force \\ false) do
  9. settings =
  10. changeset
  11. |> Ecto.Changeset.apply_changes()
  12. |> MFA.fetch_settings()
  13. if force || not MFA.enabled?(settings) do
  14. put_change(changeset, %Settings{settings | enabled: false})
  15. else
  16. changeset
  17. end
  18. end
  19. def disable_totp(%User{multi_factor_authentication_settings: settings} = user) do
  20. user
  21. |> put_change(%Settings{settings | totp: %Settings.TOTP{}})
  22. end
  23. def confirm_totp(%User{multi_factor_authentication_settings: settings} = user) do
  24. totp_settings = %Settings.TOTP{settings.totp | confirmed: true}
  25. user
  26. |> put_change(%Settings{settings | totp: totp_settings, enabled: true})
  27. end
  28. def setup_totp(%User{} = user, attrs) do
  29. mfa_settings = MFA.fetch_settings(user)
  30. totp_settings =
  31. %Settings.TOTP{}
  32. |> Ecto.Changeset.cast(attrs, [:secret, :delivery_type])
  33. user
  34. |> put_change(%Settings{mfa_settings | totp: Ecto.Changeset.apply_changes(totp_settings)})
  35. end
  36. def cast_backup_codes(%User{} = user, codes) do
  37. user
  38. |> put_change(%Settings{
  39. user.multi_factor_authentication_settings
  40. | backup_codes: codes
  41. })
  42. end
  43. defp put_change(%User{} = user, settings) do
  44. user
  45. |> Ecto.Changeset.change()
  46. |> put_change(settings)
  47. end
  48. defp put_change(%Ecto.Changeset{} = changeset, settings) do
  49. changeset
  50. |> Ecto.Changeset.put_change(:multi_factor_authentication_settings, settings)
  51. end
  52. end