logo

pleroma

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

ensure_privileged_plug.ex (1158B)


  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.Web.Plugs.EnsurePrivilegedPlug do
  5. @moduledoc """
  6. Ensures staff are privileged enough to do certain tasks.
  7. """
  8. import Pleroma.Web.TranslationHelpers
  9. import Plug.Conn
  10. alias Pleroma.Config
  11. alias Pleroma.User
  12. def init(options) do
  13. options
  14. end
  15. def call(%{assigns: %{user: %User{is_admin: false, is_moderator: false}}} = conn, _) do
  16. conn
  17. |> render_error(:forbidden, "User isn't privileged.")
  18. |> halt()
  19. end
  20. def call(
  21. %{assigns: %{user: %User{is_admin: is_admin, is_moderator: is_moderator}}} = conn,
  22. privilege
  23. ) do
  24. if (is_admin and privilege in Config.get([:instance, :admin_privileges])) or
  25. (is_moderator and privilege in Config.get([:instance, :moderator_privileges])) do
  26. conn
  27. else
  28. conn
  29. |> render_error(:forbidden, "User isn't privileged.")
  30. |> halt()
  31. end
  32. end
  33. def call(conn, _) do
  34. conn
  35. |> render_error(:forbidden, "User isn't privileged.")
  36. |> halt()
  37. end
  38. end