Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

120 lines
3.1KB

  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Plugs.UserIsAdminPlugTest do
  5. use Pleroma.Web.ConnCase, async: true
  6. alias Pleroma.Plugs.UserIsAdminPlug
  7. import Pleroma.Factory
  8. describe "unless [:auth, :enforce_oauth_admin_scope_usage]," do
  9. setup do: clear_config([:auth, :enforce_oauth_admin_scope_usage], false)
  10. test "accepts a user that is an admin" do
  11. user = insert(:user, is_admin: true)
  12. conn = assign(build_conn(), :user, user)
  13. ret_conn = UserIsAdminPlug.call(conn, %{})
  14. assert conn == ret_conn
  15. end
  16. test "denies a user that isn't an admin" do
  17. user = insert(:user)
  18. conn =
  19. build_conn()
  20. |> assign(:user, user)
  21. |> UserIsAdminPlug.call(%{})
  22. assert conn.status == 403
  23. end
  24. test "denies when a user isn't set" do
  25. conn = UserIsAdminPlug.call(build_conn(), %{})
  26. assert conn.status == 403
  27. end
  28. end
  29. describe "with [:auth, :enforce_oauth_admin_scope_usage]," do
  30. setup do: clear_config([:auth, :enforce_oauth_admin_scope_usage], true)
  31. setup do
  32. admin_user = insert(:user, is_admin: true)
  33. non_admin_user = insert(:user, is_admin: false)
  34. blank_user = nil
  35. {:ok, %{users: [admin_user, non_admin_user, blank_user]}}
  36. end
  37. test "if token has any of admin scopes, accepts a user that is an admin", %{conn: conn} do
  38. user = insert(:user, is_admin: true)
  39. token = insert(:oauth_token, user: user, scopes: ["admin:something"])
  40. conn =
  41. conn
  42. |> assign(:user, user)
  43. |> assign(:token, token)
  44. ret_conn = UserIsAdminPlug.call(conn, %{})
  45. assert conn == ret_conn
  46. end
  47. test "if token has any of admin scopes, denies a user that isn't an admin", %{conn: conn} do
  48. user = insert(:user, is_admin: false)
  49. token = insert(:oauth_token, user: user, scopes: ["admin:something"])
  50. conn =
  51. conn
  52. |> assign(:user, user)
  53. |> assign(:token, token)
  54. |> UserIsAdminPlug.call(%{})
  55. assert conn.status == 403
  56. end
  57. test "if token has any of admin scopes, denies when a user isn't set", %{conn: conn} do
  58. token = insert(:oauth_token, scopes: ["admin:something"])
  59. conn =
  60. conn
  61. |> assign(:user, nil)
  62. |> assign(:token, token)
  63. |> UserIsAdminPlug.call(%{})
  64. assert conn.status == 403
  65. end
  66. test "if token lacks admin scopes, denies users regardless of is_admin flag",
  67. %{users: users} do
  68. for user <- users do
  69. token = insert(:oauth_token, user: user)
  70. conn =
  71. build_conn()
  72. |> assign(:user, user)
  73. |> assign(:token, token)
  74. |> UserIsAdminPlug.call(%{})
  75. assert conn.status == 403
  76. end
  77. end
  78. test "if token is missing, denies users regardless of is_admin flag", %{users: users} do
  79. for user <- users do
  80. conn =
  81. build_conn()
  82. |> assign(:user, user)
  83. |> assign(:token, nil)
  84. |> UserIsAdminPlug.call(%{})
  85. assert conn.status == 403
  86. end
  87. end
  88. end
  89. end