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