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.

189 lines
6.2KB

  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.NodeInfoTest do
  5. use Pleroma.Web.ConnCase
  6. import Pleroma.Factory
  7. test "GET /.well-known/nodeinfo", %{conn: conn} do
  8. links =
  9. conn
  10. |> get("/.well-known/nodeinfo")
  11. |> json_response(200)
  12. |> Map.fetch!("links")
  13. Enum.each(links, fn link ->
  14. href = Map.fetch!(link, "href")
  15. conn
  16. |> get(href)
  17. |> json_response(200)
  18. end)
  19. end
  20. test "nodeinfo shows staff accounts", %{conn: conn} do
  21. moderator = insert(:user, local: true, is_moderator: true)
  22. admin = insert(:user, local: true, is_admin: true)
  23. conn =
  24. conn
  25. |> get("/nodeinfo/2.1.json")
  26. assert result = json_response(conn, 200)
  27. assert moderator.ap_id in result["metadata"]["staffAccounts"]
  28. assert admin.ap_id in result["metadata"]["staffAccounts"]
  29. end
  30. test "nodeinfo shows restricted nicknames", %{conn: conn} do
  31. conn =
  32. conn
  33. |> get("/nodeinfo/2.1.json")
  34. assert result = json_response(conn, 200)
  35. assert Pleroma.Config.get([Pleroma.User, :restricted_nicknames]) ==
  36. result["metadata"]["restrictedNicknames"]
  37. end
  38. test "returns software.repository field in nodeinfo 2.1", %{conn: conn} do
  39. conn
  40. |> get("/.well-known/nodeinfo")
  41. |> json_response(200)
  42. conn =
  43. conn
  44. |> get("/nodeinfo/2.1.json")
  45. assert result = json_response(conn, 200)
  46. assert Pleroma.Application.repository() == result["software"]["repository"]
  47. end
  48. test "returns fieldsLimits field", %{conn: conn} do
  49. max_account_fields = Pleroma.Config.get([:instance, :max_account_fields])
  50. max_remote_account_fields = Pleroma.Config.get([:instance, :max_remote_account_fields])
  51. account_field_name_length = Pleroma.Config.get([:instance, :account_field_name_length])
  52. account_field_value_length = Pleroma.Config.get([:instance, :account_field_value_length])
  53. Pleroma.Config.put([:instance, :max_account_fields], 10)
  54. Pleroma.Config.put([:instance, :max_remote_account_fields], 15)
  55. Pleroma.Config.put([:instance, :account_field_name_length], 255)
  56. Pleroma.Config.put([:instance, :account_field_value_length], 2048)
  57. response =
  58. conn
  59. |> get("/nodeinfo/2.1.json")
  60. |> json_response(:ok)
  61. assert response["metadata"]["fieldsLimits"]["maxFields"] == 10
  62. assert response["metadata"]["fieldsLimits"]["maxRemoteFields"] == 15
  63. assert response["metadata"]["fieldsLimits"]["nameLength"] == 255
  64. assert response["metadata"]["fieldsLimits"]["valueLength"] == 2048
  65. Pleroma.Config.put([:instance, :max_account_fields], max_account_fields)
  66. Pleroma.Config.put([:instance, :max_remote_account_fields], max_remote_account_fields)
  67. Pleroma.Config.put([:instance, :account_field_name_length], account_field_name_length)
  68. Pleroma.Config.put([:instance, :account_field_value_length], account_field_value_length)
  69. end
  70. test "it returns the safe_dm_mentions feature if enabled", %{conn: conn} do
  71. option = Pleroma.Config.get([:instance, :safe_dm_mentions])
  72. Pleroma.Config.put([:instance, :safe_dm_mentions], true)
  73. response =
  74. conn
  75. |> get("/nodeinfo/2.1.json")
  76. |> json_response(:ok)
  77. assert "safe_dm_mentions" in response["metadata"]["features"]
  78. Pleroma.Config.put([:instance, :safe_dm_mentions], false)
  79. response =
  80. conn
  81. |> get("/nodeinfo/2.1.json")
  82. |> json_response(:ok)
  83. refute "safe_dm_mentions" in response["metadata"]["features"]
  84. Pleroma.Config.put([:instance, :safe_dm_mentions], option)
  85. end
  86. test "it shows if federation is enabled/disabled", %{conn: conn} do
  87. original = Pleroma.Config.get([:instance, :federating])
  88. Pleroma.Config.put([:instance, :federating], true)
  89. response =
  90. conn
  91. |> get("/nodeinfo/2.1.json")
  92. |> json_response(:ok)
  93. assert response["metadata"]["federation"]["enabled"] == true
  94. Pleroma.Config.put([:instance, :federating], false)
  95. response =
  96. conn
  97. |> get("/nodeinfo/2.1.json")
  98. |> json_response(:ok)
  99. assert response["metadata"]["federation"]["enabled"] == false
  100. Pleroma.Config.put([:instance, :federating], original)
  101. end
  102. test "it shows MRF transparency data if enabled", %{conn: conn} do
  103. config = Pleroma.Config.get([:instance, :rewrite_policy])
  104. Pleroma.Config.put([:instance, :rewrite_policy], [Pleroma.Web.ActivityPub.MRF.SimplePolicy])
  105. option = Pleroma.Config.get([:instance, :mrf_transparency])
  106. Pleroma.Config.put([:instance, :mrf_transparency], true)
  107. simple_config = %{"reject" => ["example.com"]}
  108. Pleroma.Config.put(:mrf_simple, simple_config)
  109. response =
  110. conn
  111. |> get("/nodeinfo/2.1.json")
  112. |> json_response(:ok)
  113. assert response["metadata"]["federation"]["mrf_simple"] == simple_config
  114. Pleroma.Config.put([:instance, :rewrite_policy], config)
  115. Pleroma.Config.put([:instance, :mrf_transparency], option)
  116. Pleroma.Config.put(:mrf_simple, %{})
  117. end
  118. test "it performs exclusions from MRF transparency data if configured", %{conn: conn} do
  119. config = Pleroma.Config.get([:instance, :rewrite_policy])
  120. Pleroma.Config.put([:instance, :rewrite_policy], [Pleroma.Web.ActivityPub.MRF.SimplePolicy])
  121. option = Pleroma.Config.get([:instance, :mrf_transparency])
  122. Pleroma.Config.put([:instance, :mrf_transparency], true)
  123. exclusions = Pleroma.Config.get([:instance, :mrf_transparency_exclusions])
  124. Pleroma.Config.put([:instance, :mrf_transparency_exclusions], ["other.site"])
  125. simple_config = %{"reject" => ["example.com", "other.site"]}
  126. expected_config = %{"reject" => ["example.com"]}
  127. Pleroma.Config.put(:mrf_simple, simple_config)
  128. response =
  129. conn
  130. |> get("/nodeinfo/2.1.json")
  131. |> json_response(:ok)
  132. assert response["metadata"]["federation"]["mrf_simple"] == expected_config
  133. assert response["metadata"]["federation"]["exclusions"] == true
  134. Pleroma.Config.put([:instance, :rewrite_policy], config)
  135. Pleroma.Config.put([:instance, :mrf_transparency], option)
  136. Pleroma.Config.put([:instance, :mrf_transparency_exclusions], exclusions)
  137. Pleroma.Config.put(:mrf_simple, %{})
  138. end
  139. end