summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorIlja <ilja@ilja.space>2022-05-21 18:48:21 +0200
committerIlja <ilja@ilja.space>2022-06-21 12:10:26 +0200
commit5b19543f0afaaad7f8fc302946547ae5c18e8bb3 (patch)
tree50e19a06860d8e2bc80cc23fb024976df2b3ea1c /lib
parent7466136ad3288cc2b442495d40af6e0787b250fb (diff)
downloadpleroma-5b19543f0afaaad7f8fc302946547ae5c18e8bb3.tar.gz
pleroma-5b19543f0afaaad7f8fc302946547ae5c18e8bb3.zip
Add new setting and Plug to allow for privilege settings for staff
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/plugs/ensure_privileged_plug.ex44
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/pleroma/web/plugs/ensure_privileged_plug.ex b/lib/pleroma/web/plugs/ensure_privileged_plug.ex
new file mode 100644
index 000000000..be09f3d81
--- /dev/null
+++ b/lib/pleroma/web/plugs/ensure_privileged_plug.ex
@@ -0,0 +1,44 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.Plugs.EnsurePrivilegedPlug do
+ @moduledoc """
+ Ensures staff are privileged enough to do certain tasks.
+ """
+ import Pleroma.Web.TranslationHelpers
+ import Plug.Conn
+
+ alias Pleroma.Config
+ alias Pleroma.User
+
+ def init(options) do
+ options
+ end
+
+ def call(%{assigns: %{user: %User{is_admin: false, is_moderator: false}}} = conn, _) do
+ conn
+ |> render_error(:forbidden, "User isn't privileged.")
+ |> halt()
+ end
+
+ def call(
+ %{assigns: %{user: %User{is_admin: is_admin, is_moderator: is_moderator}}} = conn,
+ priviledge
+ ) do
+ if (is_admin and priviledge in Config.get([:instance, :admin_privileges])) or
+ (is_moderator and priviledge in Config.get([:instance, :moderator_privileges])) do
+ conn
+ else
+ conn
+ |> render_error(:forbidden, "User isn't privileged.")
+ |> halt()
+ end
+ end
+
+ def call(conn, _) do
+ conn
+ |> render_error(:forbidden, "User isn't privileged.")
+ |> halt()
+ end
+end