From cb8236cda62cddb72f4320af6347defae44b81ca Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Fri, 20 Mar 2020 21:19:34 +0400 Subject: [PATCH 01/65] Add embeddable posts --- lib/pleroma/web/embed_controller.ex | 42 +++++++++ lib/pleroma/web/endpoint.ex | 2 +- lib/pleroma/web/router.ex | 2 + .../web/templates/embed/_attachment.html.eex | 8 ++ lib/pleroma/web/templates/embed/show.html.eex | 76 ++++++++++++++++ .../web/templates/layout/embed.html.eex | 14 +++ lib/pleroma/web/views/embed_view.ex | 83 ++++++++++++++++++ priv/static/embed.css | Bin 0 -> 1408 bytes priv/static/embed.js | Bin 0 -> 942 bytes 9 files changed, 226 insertions(+), 1 deletion(-) create mode 100644 lib/pleroma/web/embed_controller.ex create mode 100644 lib/pleroma/web/templates/embed/_attachment.html.eex create mode 100644 lib/pleroma/web/templates/embed/show.html.eex create mode 100644 lib/pleroma/web/templates/layout/embed.html.eex create mode 100644 lib/pleroma/web/views/embed_view.ex create mode 100644 priv/static/embed.css create mode 100644 priv/static/embed.js diff --git a/lib/pleroma/web/embed_controller.ex b/lib/pleroma/web/embed_controller.ex new file mode 100644 index 000000000..f6b8a5ee1 --- /dev/null +++ b/lib/pleroma/web/embed_controller.ex @@ -0,0 +1,42 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.EmbedController do + use Pleroma.Web, :controller + + alias Pleroma.Activity + alias Pleroma.Object + alias Pleroma.User + + alias Pleroma.Web.ActivityPub.Visibility + + plug(:put_layout, :embed) + + def show(conn, %{"id" => id}) do + with %Activity{local: true} = activity <- + Activity.get_by_id_with_object(id), + true <- Visibility.is_public?(activity.object) do + {:ok, author} = User.get_or_fetch(activity.object.data["actor"]) + + conn + |> delete_resp_header("x-frame-options") + |> delete_resp_header("content-security-policy") + |> render("show.html", + activity: activity, + author: User.sanitize_html(author), + counts: get_counts(activity) + ) + end + end + + defp get_counts(%Activity{} = activity) do + %Object{data: data} = Object.normalize(activity) + + %{ + likes: Map.get(data, "like_count", 0), + replies: Map.get(data, "repliesCount", 0), + announces: Map.get(data, "announcement_count", 0) + } + end +end diff --git a/lib/pleroma/web/endpoint.ex b/lib/pleroma/web/endpoint.ex index 72cb3ee27..4f665db12 100644 --- a/lib/pleroma/web/endpoint.ex +++ b/lib/pleroma/web/endpoint.ex @@ -35,7 +35,7 @@ defmodule Pleroma.Web.Endpoint do at: "/", from: :pleroma, only: - ~w(index.html robots.txt static finmoji emoji packs sounds images instance sw.js sw-pleroma.js favicon.png schemas doc), + ~w(index.html robots.txt static finmoji emoji packs sounds images instance sw.js sw-pleroma.js favicon.png schemas doc embed.js embed.css), # credo:disable-for-previous-line Credo.Check.Readability.MaxLineLength gzip: true, cache_control_for_etags: @static_cache_control, diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 3f36f6c1a..eef0a8023 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -637,6 +637,8 @@ defmodule Pleroma.Web.Router do post("/auth/password", MastodonAPI.AuthController, :password_reset) get("/web/*path", MastoFEController, :index) + + get("/embed/:id", EmbedController, :show) end pipeline :remote_media do diff --git a/lib/pleroma/web/templates/embed/_attachment.html.eex b/lib/pleroma/web/templates/embed/_attachment.html.eex new file mode 100644 index 000000000..7e04e9550 --- /dev/null +++ b/lib/pleroma/web/templates/embed/_attachment.html.eex @@ -0,0 +1,8 @@ +<%= case @mediaType do %> +<% "audio" -> %> + +<% "video" -> %> + +<% _ -> %> +<%= @name %> +<% end %> diff --git a/lib/pleroma/web/templates/embed/show.html.eex b/lib/pleroma/web/templates/embed/show.html.eex new file mode 100644 index 000000000..6bf8fac29 --- /dev/null +++ b/lib/pleroma/web/templates/embed/show.html.eex @@ -0,0 +1,76 @@ +
+ + +
+ <%= if status_title(@activity) != "" do %> +
open<% end %>> + <%= raw status_title(@activity) %> +
<%= activity_content(@activity) %>
+
+ <% else %> +
<%= activity_content(@activity) %>
+ <% end %> + <%= for %{"name" => name, "url" => [url | _]} <- attachments(@activity) do %> +
+ <%= if sensitive?(@activity) do %> +
+ <%= Gettext.gettext("sensitive media") %> +
+ <%= render("_attachment.html", %{name: name, url: url["href"], + mediaType: fetch_media_type(url)}) %> +
+
+ <% else %> + <%= render("_attachment.html", %{name: name, url: url["href"], + mediaType: fetch_media_type(url)}) %> + <% end %> +
+ <% end %> +
+ +
+
<%= Gettext.gettext("replies") %>
<%= @counts.replies %>
+
<%= Gettext.gettext("announces") %>
<%= @counts.announces %>
+
<%= Gettext.gettext("likes") %>
<%= @counts.likes %>
+
+ +

+ <%= link published(@activity), to: activity_url(@author, @activity) %> +

+
+ + diff --git a/lib/pleroma/web/templates/layout/embed.html.eex b/lib/pleroma/web/templates/layout/embed.html.eex new file mode 100644 index 000000000..57ae4f802 --- /dev/null +++ b/lib/pleroma/web/templates/layout/embed.html.eex @@ -0,0 +1,14 @@ + + + + + + <%= Pleroma.Config.get([:instance, :name]) %> + + <%= Phoenix.HTML.raw(assigns[:meta] || "") %> + + + + <%= render @view_module, @view_template, assigns %> + + diff --git a/lib/pleroma/web/views/embed_view.ex b/lib/pleroma/web/views/embed_view.ex new file mode 100644 index 000000000..77536835b --- /dev/null +++ b/lib/pleroma/web/views/embed_view.ex @@ -0,0 +1,83 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.EmbedView do + use Pleroma.Web, :view + + alias Calendar.Strftime + alias Pleroma.Activity + alias Pleroma.Emoji.Formatter + alias Pleroma.Object + alias Pleroma.User + alias Pleroma.Web.Gettext + alias Pleroma.Web.MediaProxy + alias Pleroma.Web.Metadata.Utils + alias Pleroma.Web.Router.Helpers + + use Phoenix.HTML + + @media_types ["image", "audio", "video"] + + defp emoji_for_user(%User{} = user) do + user.source_data + |> Map.get("tag", []) + |> Enum.filter(fn %{"type" => t} -> t == "Emoji" end) + |> Enum.map(fn %{"icon" => %{"url" => url}, "name" => name} -> + {String.trim(name, ":"), url} + end) + end + + defp fetch_media_type(%{"mediaType" => mediaType}) do + Utils.fetch_media_type(@media_types, mediaType) + end + + defp open_content? do + Pleroma.Config.get( + [:frontend_configurations, :collapse_message_with_subjects], + true + ) + end + + defp full_nickname(user) do + %{host: host} = URI.parse(user.ap_id) + "@" <> user.nickname <> "@" <> host + end + + defp status_title(%Activity{object: %Object{data: %{"name" => name}}}) when is_binary(name), + do: name + + defp status_title(%Activity{object: %Object{data: %{"summary" => summary}}}) + when is_binary(summary), + do: summary + + defp status_title(_), do: nil + + defp activity_content(%Activity{object: %Object{data: %{"content" => content}}}) do + content |> Pleroma.HTML.filter_tags() |> raw() + end + + defp activity_content(_), do: nil + + defp activity_url(%User{local: true}, activity) do + Helpers.o_status_url(Pleroma.Web.Endpoint, :notice, activity) + end + + defp activity_url(%User{local: false}, %Activity{object: %Object{data: data}}) do + data["url"] || data["external_url"] || data["id"] + end + + defp attachments(%Activity{object: %Object{data: %{"attachment" => attachments}}}) do + attachments + end + + defp sensitive?(%Activity{object: %Object{data: %{"sensitive" => sensitive}}}) do + sensitive + end + + defp published(%Activity{object: %Object{data: %{"published" => published}}}) do + published + |> NaiveDateTime.from_iso8601!() + |> Strftime.strftime!("%B %d, %Y, %l:%M %p") + end +end diff --git a/priv/static/embed.css b/priv/static/embed.css new file mode 100644 index 0000000000000000000000000000000000000000..cc79ee7ab74981e6fe7047d5e80eda3b0e4e3880 GIT binary patch literal 1408 zcmb7E+iu%141Ld62pINKOm5P3Y2$tkZOJwlT?~oNWyAh`y18+XY(*bM9Z}>thit4k zv)?Pm8ff>uvy&0LwaU7heR+C)YQMj{h0D$w;vHyI=bCvio_p!Ai&q7F9FSx@Yj8c9 znyuqu1R>D$HQPwNIP=C5S)D+CR;vmQK;Tjt?c{v?e6(mty0_Kh9(A8Eow7hRQ?jF& zw6RV|#~lcqe9fN6)1?mXupa_81yib)@PKpRuCp(r>6O;(rLC>Jv*uODz zbsA3mh=PWYYQ6rNI}kvULHdm3iMWuhbwFqXQ^uOWT>LSk>cJjlX5$7MJ(UV>e7ZKCr!%Ba_<_D zNd{RWD}(L+Q;o$G^P~TfcyZ)7DV1kvX^u2hvyqg7(Pwh6X1~k;Ok@)js%8pPZ&ISh zo_H{2+6`rXLnw0jE(V(DbN;T$HOY4u*7Ii92obZ~-w8Q7Puy}nt+PYZupEnRf2`9E VyE{O0Gas{fx6thdwqh4)`3o~s!h!$* literal 0 HcmV?d00001 diff --git a/priv/static/embed.js b/priv/static/embed.js new file mode 100644 index 0000000000000000000000000000000000000000..f675f6417934e2c7cccb4012b499e16bcd8ef7fa GIT binary patch literal 942 zcmZ{j!EW0y42JJ{3ic#>Xaw}yB8OoMu)~TL=wXK-2i2lu0kV`ya?+snyN{IYxIi%< z44Wo@e!oap?ckbZyo0KS_Z5H`B0@~TG)b)J{iFf}RQduNSaPjb8g;1vFfCL&VO+wX zNbH2-7DVIwqs4?`FOAdq_S9C|H$#su$t?JiRKgl=HXB&q%~AkGx~i!+zzArGhr#%| z3Mj3&CsO)tVnTYr^ zidq1b-Aq`!Tw(NnX~TBX5L{-R3>N)t ztG@$=%L`g;k`LeMizqyjrpusf%%t__lPDPr=Ts4!;H@?8Kp?_-F=5YN)5W6nCk(Ci zXHMyi*68vYesU#`L+q-lMS(ACYBUvWiEqTKzTHLbh0VC z^ry`K=wo^;6R+kGGZByP9{w}C+sR%=*Y{xbH89fu@lBK!|1vgN2$ Dx91wg literal 0 HcmV?d00001 From d0c26956da160b2fbfd4855ca7fe31eeebe6528d Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 25 May 2020 12:46:14 +0200 Subject: [PATCH 02/65] User: Don't error out if we want to refresh a user but can't --- lib/pleroma/user.ex | 17 +++++++---- .../activity_pub_controller_test.exs | 30 +++++++++++++++++++ 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index d2eeeb479..842b28c06 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1618,12 +1618,19 @@ def html_filter_policy(_), do: Pleroma.Config.get([:markup, :scrub_policy]) def fetch_by_ap_id(ap_id), do: ActivityPub.make_user_from_ap_id(ap_id) def get_or_fetch_by_ap_id(ap_id) do - user = get_cached_by_ap_id(ap_id) + cached_user = get_cached_by_ap_id(ap_id) - if !is_nil(user) and !needs_update?(user) do - {:ok, user} - else - fetch_by_ap_id(ap_id) + maybe_fetched_user = needs_update?(cached_user) && fetch_by_ap_id(ap_id) + + case {cached_user, maybe_fetched_user} do + {_, {:ok, %User{} = user}} -> + {:ok, user} + + {%User{} = user, _} -> + {:ok, user} + + _ -> + {:error, :not_found} end end diff --git a/test/web/activity_pub/activity_pub_controller_test.exs b/test/web/activity_pub/activity_pub_controller_test.exs index dd2a48a61..24edab41a 100644 --- a/test/web/activity_pub/activity_pub_controller_test.exs +++ b/test/web/activity_pub/activity_pub_controller_test.exs @@ -451,6 +451,36 @@ test "it inserts an incoming activity into the database", %{conn: conn} do assert Activity.get_by_ap_id(data["id"]) end + @tag capture_log: true + test "it inserts an incoming activity into the database" <> + "even if we can't fetch the user but have it in our db", + %{conn: conn} do + user = + insert(:user, + ap_id: "https://mastodon.example.org/users/raymoo", + ap_enabled: true, + local: false, + last_refreshed_at: nil + ) + + data = + File.read!("test/fixtures/mastodon-post-activity.json") + |> Poison.decode!() + |> Map.put("actor", user.ap_id) + |> put_in(["object", "attridbutedTo"], user.ap_id) + + conn = + conn + |> assign(:valid_signature, true) + |> put_req_header("content-type", "application/activity+json") + |> post("/inbox", data) + + assert "ok" == json_response(conn, 200) + + ObanHelpers.perform(all_enqueued(worker: ReceiverWorker)) + assert Activity.get_by_ap_id(data["id"]) + end + test "it clears `unreachable` federation status of the sender", %{conn: conn} do data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!() From 0c970a9d44fc0ceddbb52483f6f2fab11243e0ca Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 25 May 2020 12:49:38 +0200 Subject: [PATCH 03/65] UserTest: Add test for user refreshing. --- test/user_test.exs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/user_test.exs b/test/user_test.exs index 45125f704..3556ef1b4 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -586,6 +586,26 @@ test "updates an existing user, if stale" do refute user.last_refreshed_at == orig_user.last_refreshed_at end + + @tag capture_log: true + test "it returns the old user if stale, but unfetchable" do + a_week_ago = NaiveDateTime.add(NaiveDateTime.utc_now(), -604_800) + + orig_user = + insert( + :user, + local: false, + nickname: "admin@mastodon.example.org", + ap_id: "http://mastodon.example.org/users/raymoo", + last_refreshed_at: a_week_ago + ) + + assert orig_user.last_refreshed_at == a_week_ago + + {:ok, user} = User.get_or_fetch_by_ap_id("http://mastodon.example.org/users/raymoo") + + assert user.last_refreshed_at == orig_user.last_refreshed_at + end end test "returns an ap_id for a user" do From 3bec0d2e50a0c468508ae884a3e5dc371106501e Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 25 May 2020 12:59:42 +0200 Subject: [PATCH 04/65] Factory: Set users to be ap_enabled by default. --- test/support/factory.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/support/factory.ex b/test/support/factory.ex index d4284831c..6e3676aca 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -34,7 +34,8 @@ def user_factory do last_digest_emailed_at: NaiveDateTime.utc_now(), last_refreshed_at: NaiveDateTime.utc_now(), notification_settings: %Pleroma.User.NotificationSetting{}, - multi_factor_authentication_settings: %Pleroma.MFA.Settings{} + multi_factor_authentication_settings: %Pleroma.MFA.Settings{}, + ap_enabled: true } %{ From aeb0875025cf37ad8cefe43c637f56a5a16f8628 Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 25 May 2020 13:48:47 +0200 Subject: [PATCH 05/65] StealEmojiPolicyTest: Fix flaky test. --- test/web/activity_pub/mrf/steal_emoji_policy_test.exs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/web/activity_pub/mrf/steal_emoji_policy_test.exs b/test/web/activity_pub/mrf/steal_emoji_policy_test.exs index 8882c8c13..0e7e57c77 100644 --- a/test/web/activity_pub/mrf/steal_emoji_policy_test.exs +++ b/test/web/activity_pub/mrf/steal_emoji_policy_test.exs @@ -14,8 +14,6 @@ defmodule Pleroma.Web.ActivityPub.MRF.StealEmojiPolicyTest do end setup do - clear_config(:mrf_steal_emoji) - emoji_path = Path.join(Config.get([:instance, :static_dir]), "emoji/stolen") File.rm_rf!(emoji_path) File.mkdir!(emoji_path) @@ -53,8 +51,8 @@ test "Steals emoji on unknown shortcode from allowed remote host" do } } - Config.put([:mrf_steal_emoji, :hosts], ["example.org"]) - Config.put([:mrf_steal_emoji, :size_limit], 284_468) + clear_config([:mrf_steal_emoji, :hosts], ["example.org"]) + clear_config([:mrf_steal_emoji, :size_limit], 284_468) assert {:ok, message} == StealEmojiPolicy.filter(message) From 5fef40520819bea1effab5ed4937613d8896a453 Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 25 May 2020 15:06:35 +0200 Subject: [PATCH 06/65] User: Change signature of get_users_from_set --- lib/pleroma/conversation.ex | 2 +- lib/pleroma/notification.ex | 3 ++- lib/pleroma/user.ex | 5 +++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/conversation.ex b/lib/pleroma/conversation.ex index 37d455cfc..e76eb0087 100644 --- a/lib/pleroma/conversation.ex +++ b/lib/pleroma/conversation.ex @@ -63,7 +63,7 @@ def create_or_bump_for(activity, opts \\ []) do ap_id when is_binary(ap_id) and byte_size(ap_id) > 0 <- object.data["context"] do {:ok, conversation} = create_for_ap_id(ap_id) - users = User.get_users_from_set(activity.recipients, false) + users = User.get_users_from_set(activity.recipients, local_only: false) participations = Enum.map(users, fn user -> diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 8aa9ed2d4..557961e94 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -370,7 +370,8 @@ def get_notified_from_activity(%Activity{data: %{"type" => type}} = activity, lo when type in ["Create", "Like", "Announce", "Follow", "Move", "EmojiReact"] do potential_receiver_ap_ids = get_potential_receiver_ap_ids(activity) - potential_receivers = User.get_users_from_set(potential_receiver_ap_ids, local_only) + potential_receivers = + User.get_users_from_set(potential_receiver_ap_ids, local_only: local_only) notification_enabled_ap_ids = potential_receiver_ap_ids diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index d2eeeb479..f57cd3e74 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1208,8 +1208,9 @@ def increment_unread_conversation_count(conversation, %User{local: true} = user) def increment_unread_conversation_count(_, user), do: {:ok, user} - @spec get_users_from_set([String.t()], boolean()) :: [User.t()] - def get_users_from_set(ap_ids, local_only \\ true) do + @spec get_users_from_set([String.t()], keyword()) :: [User.t()] + def get_users_from_set(ap_ids, opts \\ []) do + local_only = Keyword.get(opts, :local_only, true) criteria = %{ap_id: ap_ids, deactivated: false} criteria = if local_only, do: Map.put(criteria, :local, true), else: criteria From 6bd7070b00a8d0ac64292f4c7152b71bee5f6b69 Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 25 May 2020 15:08:43 +0200 Subject: [PATCH 07/65] Transmogrifier: Use a simpler way to get mentions. --- .../web/activity_pub/transmogrifier.ex | 10 ++++-- test/web/activity_pub/transmogrifier_test.exs | 33 +++++++++++-------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index d594c64f4..8443c284c 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -1045,10 +1045,14 @@ def add_hashtags(object) do Map.put(object, "tag", tags) end + # TODO These should be added on our side on insertion, it doesn't make much + # sense to regenerate these all the time def add_mention_tags(object) do - {enabled_receivers, disabled_receivers} = Utils.get_notified_from_object(object) - potential_receivers = enabled_receivers ++ disabled_receivers - mentions = Enum.map(potential_receivers, &build_mention_tag/1) + to = object["to"] || [] + cc = object["cc"] || [] + mentioned = User.get_users_from_set(to ++ cc, local_only: false) + + mentions = Enum.map(mentioned, &build_mention_tag/1) tags = object["tag"] || [] Map.put(object, "tag", tags ++ mentions) diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 356004d48..94d8552e8 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -1094,23 +1094,28 @@ test "it turns mentions into tags" do {:ok, activity} = CommonAPI.post(user, %{status: "hey, @#{other_user.nickname}, how are ya? #2hu"}) - {:ok, modified} = Transmogrifier.prepare_outgoing(activity.data) - object = modified["object"] + with_mock Pleroma.Notification, + get_notified_from_activity: fn _, _ -> [] end do + {:ok, modified} = Transmogrifier.prepare_outgoing(activity.data) - expected_mention = %{ - "href" => other_user.ap_id, - "name" => "@#{other_user.nickname}", - "type" => "Mention" - } + object = modified["object"] - expected_tag = %{ - "href" => Pleroma.Web.Endpoint.url() <> "/tags/2hu", - "type" => "Hashtag", - "name" => "#2hu" - } + expected_mention = %{ + "href" => other_user.ap_id, + "name" => "@#{other_user.nickname}", + "type" => "Mention" + } - assert Enum.member?(object["tag"], expected_tag) - assert Enum.member?(object["tag"], expected_mention) + expected_tag = %{ + "href" => Pleroma.Web.Endpoint.url() <> "/tags/2hu", + "type" => "Hashtag", + "name" => "#2hu" + } + + refute called(Pleroma.Notification.get_notified_from_activity(:_, :_)) + assert Enum.member?(object["tag"], expected_tag) + assert Enum.member?(object["tag"], expected_mention) + end end test "it adds the sensitive property" do From 6a85fe1f9d0bfe7aee042671a86c9e58ae2d102b Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 25 May 2020 15:53:14 +0200 Subject: [PATCH 08/65] Docs: Document reasonable Postgres settings. --- docs/configuration/postgresql.md | 31 +++++++++++++++++++++++++++++++ docs/installation/otp_en.md | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 docs/configuration/postgresql.md diff --git a/docs/configuration/postgresql.md b/docs/configuration/postgresql.md new file mode 100644 index 000000000..068f133a9 --- /dev/null +++ b/docs/configuration/postgresql.md @@ -0,0 +1,31 @@ +# Optimizing your Postgresql performance + +Pleroma performance depends to a large extent on good database performance. The default Postgresql settings are mostly fine, but often you can get better performance by changing a few settings. + +You can use [PGTune](https://pgtune.leopard.in.ua) to get recommendations for your setup. If you do, set the "Number of Connections" field to 20, as Pleroma will only use 10 concurrent connections anyway. If you don't, it will give you advice that might even hurt your performance. + +We also recommend not using the "Network Storage" option. + +## Example configurations + +Here are some configuration suggestions for Postgresql 10+. + +### 1GB RAM, 1 CPU +``` +shared_buffers = 256MB +effective_cache_size = 768MB +maintenance_work_mem = 64MB +work_mem = 13107kB +``` + +### 2GB RAM, 2 CPU +``` +shared_buffers = 512MB +effective_cache_size = 1536MB +maintenance_work_mem = 128MB +work_mem = 26214kB +max_worker_processes = 2 +max_parallel_workers_per_gather = 1 +max_parallel_workers = 2 +``` + diff --git a/docs/installation/otp_en.md b/docs/installation/otp_en.md index fb99af699..b627bbb7a 100644 --- a/docs/installation/otp_en.md +++ b/docs/installation/otp_en.md @@ -63,7 +63,7 @@ apt install postgresql-11-rum ``` #### (Optional) Performance configuration -For optimal performance, you may use [PGTune](https://pgtune.leopard.in.ua), don't forget to restart postgresql after editing the configuration +Check out our Postgresql document for a guide on optimizing Postgresql performance settings. ```sh tab="Alpine" rc-service postgresql restart From f7cb3f4cfc7eaf6ff67e27a7d6449e23e09a501e Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 25 May 2020 17:11:35 +0000 Subject: [PATCH 09/65] Apply suggestion to docs/installation/otp_en.md --- docs/installation/otp_en.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation/otp_en.md b/docs/installation/otp_en.md index b627bbb7a..6f9749ef1 100644 --- a/docs/installation/otp_en.md +++ b/docs/installation/otp_en.md @@ -63,7 +63,7 @@ apt install postgresql-11-rum ``` #### (Optional) Performance configuration -Check out our Postgresql document for a guide on optimizing Postgresql performance settings. +It is encouraged to check [Optimizing your Postgresql performance](../configuration/postgresql.md) document, for tips on PostgreSQL tuning. ```sh tab="Alpine" rc-service postgresql restart From af3568a6d99cbd73d1e685d7d2f57292ef951f43 Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 25 May 2020 19:26:07 +0200 Subject: [PATCH 10/65] Docs: sql -> SQL --- docs/configuration/postgresql.md | 6 +++--- docs/installation/otp_en.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/configuration/postgresql.md b/docs/configuration/postgresql.md index 068f133a9..6983fb459 100644 --- a/docs/configuration/postgresql.md +++ b/docs/configuration/postgresql.md @@ -1,6 +1,6 @@ -# Optimizing your Postgresql performance +# Optimizing your PostgreSQL performance -Pleroma performance depends to a large extent on good database performance. The default Postgresql settings are mostly fine, but often you can get better performance by changing a few settings. +Pleroma performance depends to a large extent on good database performance. The default PostgreSQL settings are mostly fine, but often you can get better performance by changing a few settings. You can use [PGTune](https://pgtune.leopard.in.ua) to get recommendations for your setup. If you do, set the "Number of Connections" field to 20, as Pleroma will only use 10 concurrent connections anyway. If you don't, it will give you advice that might even hurt your performance. @@ -8,7 +8,7 @@ We also recommend not using the "Network Storage" option. ## Example configurations -Here are some configuration suggestions for Postgresql 10+. +Here are some configuration suggestions for PostgreSQL 10+. ### 1GB RAM, 1 CPU ``` diff --git a/docs/installation/otp_en.md b/docs/installation/otp_en.md index 6f9749ef1..86135cd20 100644 --- a/docs/installation/otp_en.md +++ b/docs/installation/otp_en.md @@ -63,7 +63,7 @@ apt install postgresql-11-rum ``` #### (Optional) Performance configuration -It is encouraged to check [Optimizing your Postgresql performance](../configuration/postgresql.md) document, for tips on PostgreSQL tuning. +It is encouraged to check [Optimizing your PostgreSQL performance](../configuration/postgresql.md) document, for tips on PostgreSQL tuning. ```sh tab="Alpine" rc-service postgresql restart From 0ba1f2631a09cc0a40f8a0bc2f81ff2c83beedfb Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Mon, 25 May 2020 22:02:22 +0400 Subject: [PATCH 11/65] Add OpenAPI spec for AdminAPI.OAuthAppContoller --- .../controllers/admin_api_controller.ex | 83 ------- .../controllers/oauth_app_controller.ex | 87 +++++++ .../operations/admin/oauth_app_operation.ex | 215 +++++++++++++++++ lib/pleroma/web/oauth/app.ex | 29 +-- lib/pleroma/web/router.ex | 8 +- .../controllers/admin_api_controller_test.exs | 185 --------------- .../controllers/oauth_app_controller_test.exs | 220 ++++++++++++++++++ 7 files changed, 541 insertions(+), 286 deletions(-) create mode 100644 lib/pleroma/web/admin_api/controllers/oauth_app_controller.ex create mode 100644 lib/pleroma/web/api_spec/operations/admin/oauth_app_operation.ex create mode 100644 test/web/admin_api/controllers/oauth_app_controller_test.exs diff --git a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex index 6b1d64a2e..4f10bd947 100644 --- a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex @@ -32,8 +32,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do alias Pleroma.Web.CommonAPI alias Pleroma.Web.Endpoint alias Pleroma.Web.MastodonAPI - alias Pleroma.Web.MastodonAPI.AppView - alias Pleroma.Web.OAuth.App alias Pleroma.Web.Router require Logger @@ -122,10 +120,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do :config_update, :resend_confirmation_email, :confirm_email, - :oauth_app_create, - :oauth_app_list, - :oauth_app_update, - :oauth_app_delete, :reload_emoji ] ) @@ -995,83 +989,6 @@ def resend_confirmation_email(%{assigns: %{user: admin}} = conn, %{"nicknames" = conn |> json("") end - def oauth_app_create(conn, params) do - params = - if params["name"] do - Map.put(params, "client_name", params["name"]) - else - params - end - - result = - case App.create(params) do - {:ok, app} -> - AppView.render("show.json", %{app: app, admin: true}) - - {:error, changeset} -> - App.errors(changeset) - end - - json(conn, result) - end - - def oauth_app_update(conn, params) do - params = - if params["name"] do - Map.put(params, "client_name", params["name"]) - else - params - end - - with {:ok, app} <- App.update(params) do - json(conn, AppView.render("show.json", %{app: app, admin: true})) - else - {:error, changeset} -> - json(conn, App.errors(changeset)) - - nil -> - json_response(conn, :bad_request, "") - end - end - - def oauth_app_list(conn, params) do - {page, page_size} = page_params(params) - - search_params = %{ - client_name: params["name"], - client_id: params["client_id"], - page: page, - page_size: page_size - } - - search_params = - if Map.has_key?(params, "trusted") do - Map.put(search_params, :trusted, params["trusted"]) - else - search_params - end - - with {:ok, apps, count} <- App.search(search_params) do - json( - conn, - AppView.render("index.json", - apps: apps, - count: count, - page_size: page_size, - admin: true - ) - ) - end - end - - def oauth_app_delete(conn, params) do - with {:ok, _app} <- App.destroy(params["id"]) do - json_response(conn, :no_content, "") - else - _ -> json_response(conn, :bad_request, "") - end - end - def stats(conn, _) do count = Stats.get_status_visibility_count() diff --git a/lib/pleroma/web/admin_api/controllers/oauth_app_controller.ex b/lib/pleroma/web/admin_api/controllers/oauth_app_controller.ex new file mode 100644 index 000000000..04e629fc1 --- /dev/null +++ b/lib/pleroma/web/admin_api/controllers/oauth_app_controller.ex @@ -0,0 +1,87 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.OAuthAppController do + use Pleroma.Web, :controller + + import Pleroma.Web.ControllerHelper, only: [json_response: 3] + + alias Pleroma.Plugs.OAuthScopesPlug + alias Pleroma.Web.OAuth.App + + require Logger + + plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(:put_view, Pleroma.Web.MastodonAPI.AppView) + + plug( + OAuthScopesPlug, + %{scopes: ["write"], admin: true} + when action in [:create, :index, :update, :delete] + ) + + action_fallback(Pleroma.Web.AdminAPI.FallbackController) + + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.OAuthAppOperation + + def index(conn, params) do + search_params = + params + |> Map.take([:client_id, :page, :page_size, :trusted]) + |> Map.put(:client_name, params[:name]) + + with {:ok, apps, count} <- App.search(search_params) do + render(conn, "index.json", + apps: apps, + count: count, + page_size: params.page_size, + admin: true + ) + end + end + + def create(%{body_params: params} = conn, _) do + params = + if params[:name] do + Map.put(params, :client_name, params[:name]) + else + params + end + + case App.create(params) do + {:ok, app} -> + render(conn, "show.json", app: app, admin: true) + + {:error, changeset} -> + json(conn, App.errors(changeset)) + end + end + + def update(%{body_params: params} = conn, %{id: id}) do + params = + if params[:name] do + Map.put(params, :client_name, params.name) + else + params + end + + with {:ok, app} <- App.update(id, params) do + render(conn, "show.json", app: app, admin: true) + else + {:error, changeset} -> + json(conn, App.errors(changeset)) + + nil -> + json_response(conn, :bad_request, "") + end + end + + def delete(conn, params) do + with {:ok, _app} <- App.destroy(params.id) do + json_response(conn, :no_content, "") + else + _ -> json_response(conn, :bad_request, "") + end + end +end diff --git a/lib/pleroma/web/api_spec/operations/admin/oauth_app_operation.ex b/lib/pleroma/web/api_spec/operations/admin/oauth_app_operation.ex new file mode 100644 index 000000000..fbc9f80d7 --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/admin/oauth_app_operation.ex @@ -0,0 +1,215 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Admin.OAuthAppOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.ApiError + + import Pleroma.Web.ApiSpec.Helpers + + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + def index_operation do + %Operation{ + summary: "List OAuth apps", + tags: ["Admin", "oAuth Apps"], + operationId: "AdminAPI.OAuthAppController.index", + security: [%{"oAuth" => ["write"]}], + parameters: [ + Operation.parameter(:name, :query, %Schema{type: :string}, "App name"), + Operation.parameter(:client_id, :query, %Schema{type: :string}, "Client ID"), + Operation.parameter(:page, :query, %Schema{type: :integer, default: 1}, "Page"), + Operation.parameter( + :trusted, + :query, + %Schema{type: :boolean, default: false}, + "Trusted apps" + ), + Operation.parameter( + :page_size, + :query, + %Schema{type: :integer, default: 50}, + "Number of apps to return" + ) + ], + responses: %{ + 200 => + Operation.response("List of apps", "application/json", %Schema{ + type: :object, + properties: %{ + apps: %Schema{type: :array, items: oauth_app()}, + count: %Schema{type: :integer}, + page_size: %Schema{type: :integer} + }, + example: %{ + "apps" => [ + %{ + "id" => 1, + "name" => "App name", + "client_id" => "yHoDSiWYp5mPV6AfsaVOWjdOyt5PhWRiafi6MRd1lSk", + "client_secret" => "nLmis486Vqrv2o65eM9mLQx_m_4gH-Q6PcDpGIMl6FY", + "redirect_uri" => "https://example.com/oauth-callback", + "website" => "https://example.com", + "trusted" => true + } + ], + "count" => 1, + "page_size" => 50 + } + }) + } + } + end + + def create_operation do + %Operation{ + tags: ["Admin", "oAuth Apps"], + summary: "Create OAuth App", + operationId: "AdminAPI.OAuthAppController.create", + requestBody: request_body("Parameters", create_request()), + security: [%{"oAuth" => ["write"]}], + responses: %{ + 200 => Operation.response("App", "application/json", oauth_app()), + 400 => Operation.response("Bad Request", "application/json", ApiError) + } + } + end + + def update_operation do + %Operation{ + tags: ["Admin", "oAuth Apps"], + summary: "Update OAuth App", + operationId: "AdminAPI.OAuthAppController.update", + parameters: [id_param()], + security: [%{"oAuth" => ["write"]}], + requestBody: request_body("Parameters", update_request()), + responses: %{ + 200 => Operation.response("App", "application/json", oauth_app()), + 400 => + Operation.response("Bad Request", "application/json", %Schema{ + oneOf: [ApiError, %Schema{type: :string}] + }) + } + } + end + + def delete_operation do + %Operation{ + tags: ["Admin", "oAuth Apps"], + summary: "Delete OAuth App", + operationId: "AdminAPI.OAuthAppController.delete", + parameters: [id_param()], + security: [%{"oAuth" => ["write"]}], + responses: %{ + 204 => no_content_response(), + 400 => no_content_response() + } + } + end + + defp create_request do + %Schema{ + title: "oAuthAppCreateRequest", + type: :object, + required: [:name, :redirect_uris], + properties: %{ + name: %Schema{type: :string, description: "Application Name"}, + scopes: %Schema{type: :array, items: %Schema{type: :string}, description: "oAuth scopes"}, + redirect_uris: %Schema{ + type: :string, + description: + "Where the user should be redirected after authorization. To display the authorization code to the user instead of redirecting to a web page, use `urn:ietf:wg:oauth:2.0:oob` in this parameter." + }, + website: %Schema{ + type: :string, + nullable: true, + description: "A URL to the homepage of the app" + }, + trusted: %Schema{ + type: :boolean, + nullable: true, + default: false, + description: "Is the app trusted?" + } + }, + example: %{ + "name" => "My App", + "redirect_uris" => "https://myapp.com/auth/callback", + "website" => "https://myapp.com/", + "scopes" => ["read", "write"], + "trusted" => true + } + } + end + + defp update_request do + %Schema{ + title: "oAuthAppUpdateRequest", + type: :object, + properties: %{ + name: %Schema{type: :string, description: "Application Name"}, + scopes: %Schema{type: :array, items: %Schema{type: :string}, description: "oAuth scopes"}, + redirect_uris: %Schema{ + type: :string, + description: + "Where the user should be redirected after authorization. To display the authorization code to the user instead of redirecting to a web page, use `urn:ietf:wg:oauth:2.0:oob` in this parameter." + }, + website: %Schema{ + type: :string, + nullable: true, + description: "A URL to the homepage of the app" + }, + trusted: %Schema{ + type: :boolean, + nullable: true, + default: false, + description: "Is the app trusted?" + } + }, + example: %{ + "name" => "My App", + "redirect_uris" => "https://myapp.com/auth/callback", + "website" => "https://myapp.com/", + "scopes" => ["read", "write"], + "trusted" => true + } + } + end + + defp oauth_app do + %Schema{ + title: "oAuthApp", + type: :object, + properties: %{ + id: %Schema{type: :integer}, + name: %Schema{type: :string}, + client_id: %Schema{type: :string}, + client_secret: %Schema{type: :string}, + redirect_uri: %Schema{type: :string}, + website: %Schema{type: :string, nullable: true}, + trusted: %Schema{type: :boolean} + }, + example: %{ + "id" => 123, + "name" => "My App", + "client_id" => "TWhM-tNSuncnqN7DBJmoyeLnk6K3iJJ71KKXxgL1hPM", + "client_secret" => "ZEaFUFmF0umgBX1qKJDjaU99Q31lDkOU8NutzTOoliw", + "redirect_uri" => "https://myapp.com/oauth-callback", + "website" => "https://myapp.com/", + "trusted" => false + } + } + end + + def id_param do + Operation.parameter(:id, :path, :integer, "App ID", + example: 1337, + required: true + ) + end +end diff --git a/lib/pleroma/web/oauth/app.ex b/lib/pleroma/web/oauth/app.ex index 6a6d5f2e2..df99472e1 100644 --- a/lib/pleroma/web/oauth/app.ex +++ b/lib/pleroma/web/oauth/app.ex @@ -25,12 +25,12 @@ defmodule Pleroma.Web.OAuth.App do timestamps() end - @spec changeset(App.t(), map()) :: Ecto.Changeset.t() + @spec changeset(t(), map()) :: Ecto.Changeset.t() def changeset(struct, params) do cast(struct, params, [:client_name, :redirect_uris, :scopes, :website, :trusted]) end - @spec register_changeset(App.t(), map()) :: Ecto.Changeset.t() + @spec register_changeset(t(), map()) :: Ecto.Changeset.t() def register_changeset(struct, params \\ %{}) do changeset = struct @@ -52,18 +52,19 @@ def register_changeset(struct, params \\ %{}) do end end - @spec create(map()) :: {:ok, App.t()} | {:error, Ecto.Changeset.t()} + @spec create(map()) :: {:ok, t()} | {:error, Ecto.Changeset.t()} def create(params) do - with changeset <- __MODULE__.register_changeset(%__MODULE__{}, params) do - Repo.insert(changeset) - end + %__MODULE__{} + |> register_changeset(params) + |> Repo.insert() end - @spec update(map()) :: {:ok, App.t()} | {:error, Ecto.Changeset.t()} - def update(params) do - with %__MODULE__{} = app <- Repo.get(__MODULE__, params["id"]), - changeset <- changeset(app, params) do - Repo.update(changeset) + @spec update(pos_integer(), map()) :: {:ok, t()} | {:error, Ecto.Changeset.t()} + def update(id, params) do + with %__MODULE__{} = app <- Repo.get(__MODULE__, id) do + app + |> changeset(params) + |> Repo.update() end end @@ -71,7 +72,7 @@ def update(params) do Gets app by attrs or create new with attrs. And updates the scopes if need. """ - @spec get_or_make(map(), list(String.t())) :: {:ok, App.t()} | {:error, Ecto.Changeset.t()} + @spec get_or_make(map(), list(String.t())) :: {:ok, t()} | {:error, Ecto.Changeset.t()} def get_or_make(attrs, scopes) do with %__MODULE__{} = app <- Repo.get_by(__MODULE__, attrs) do update_scopes(app, scopes) @@ -92,7 +93,7 @@ defp update_scopes(%__MODULE__{} = app, scopes) do |> Repo.update() end - @spec search(map()) :: {:ok, [App.t()], non_neg_integer()} + @spec search(map()) :: {:ok, [t()], non_neg_integer()} def search(params) do query = from(a in __MODULE__) @@ -128,7 +129,7 @@ def search(params) do {:ok, Repo.all(query), count} end - @spec destroy(pos_integer()) :: {:ok, App.t()} | {:error, Ecto.Changeset.t()} + @spec destroy(pos_integer()) :: {:ok, t()} | {:error, Ecto.Changeset.t()} def destroy(id) do with %__MODULE__{} = app <- Repo.get(__MODULE__, id) do Repo.delete(app) diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index e493a4153..46f03cdfd 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -205,10 +205,10 @@ defmodule Pleroma.Web.Router do post("/reload_emoji", AdminAPIController, :reload_emoji) get("/stats", AdminAPIController, :stats) - get("/oauth_app", AdminAPIController, :oauth_app_list) - post("/oauth_app", AdminAPIController, :oauth_app_create) - patch("/oauth_app/:id", AdminAPIController, :oauth_app_update) - delete("/oauth_app/:id", AdminAPIController, :oauth_app_delete) + get("/oauth_app", OAuthAppController, :index) + post("/oauth_app", OAuthAppController, :create) + patch("/oauth_app/:id", OAuthAppController, :update) + delete("/oauth_app/:id", OAuthAppController, :delete) end scope "/api/pleroma/emoji", Pleroma.Web.PleromaAPI do diff --git a/test/web/admin_api/controllers/admin_api_controller_test.exs b/test/web/admin_api/controllers/admin_api_controller_test.exs index 321840a8c..f704cdd3a 100644 --- a/test/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/web/admin_api/controllers/admin_api_controller_test.exs @@ -3522,191 +3522,6 @@ test "status visibility count", %{conn: conn} do response["status_visibility"] end end - - describe "POST /api/pleroma/admin/oauth_app" do - test "errors", %{conn: conn} do - response = conn |> post("/api/pleroma/admin/oauth_app", %{}) |> json_response(200) - - assert response == %{"name" => "can't be blank", "redirect_uris" => "can't be blank"} - end - - test "success", %{conn: conn} do - base_url = Web.base_url() - app_name = "Trusted app" - - response = - conn - |> post("/api/pleroma/admin/oauth_app", %{ - name: app_name, - redirect_uris: base_url - }) - |> json_response(200) - - assert %{ - "client_id" => _, - "client_secret" => _, - "name" => ^app_name, - "redirect_uri" => ^base_url, - "trusted" => false - } = response - end - - test "with trusted", %{conn: conn} do - base_url = Web.base_url() - app_name = "Trusted app" - - response = - conn - |> post("/api/pleroma/admin/oauth_app", %{ - name: app_name, - redirect_uris: base_url, - trusted: true - }) - |> json_response(200) - - assert %{ - "client_id" => _, - "client_secret" => _, - "name" => ^app_name, - "redirect_uri" => ^base_url, - "trusted" => true - } = response - end - end - - describe "GET /api/pleroma/admin/oauth_app" do - setup do - app = insert(:oauth_app) - {:ok, app: app} - end - - test "list", %{conn: conn} do - response = - conn - |> get("/api/pleroma/admin/oauth_app") - |> json_response(200) - - assert %{"apps" => apps, "count" => count, "page_size" => _} = response - - assert length(apps) == count - end - - test "with page size", %{conn: conn} do - insert(:oauth_app) - page_size = 1 - - response = - conn - |> get("/api/pleroma/admin/oauth_app", %{page_size: to_string(page_size)}) - |> json_response(200) - - assert %{"apps" => apps, "count" => _, "page_size" => ^page_size} = response - - assert length(apps) == page_size - end - - test "search by client name", %{conn: conn, app: app} do - response = - conn - |> get("/api/pleroma/admin/oauth_app", %{name: app.client_name}) - |> json_response(200) - - assert %{"apps" => [returned], "count" => _, "page_size" => _} = response - - assert returned["client_id"] == app.client_id - assert returned["name"] == app.client_name - end - - test "search by client id", %{conn: conn, app: app} do - response = - conn - |> get("/api/pleroma/admin/oauth_app", %{client_id: app.client_id}) - |> json_response(200) - - assert %{"apps" => [returned], "count" => _, "page_size" => _} = response - - assert returned["client_id"] == app.client_id - assert returned["name"] == app.client_name - end - - test "only trusted", %{conn: conn} do - app = insert(:oauth_app, trusted: true) - - response = - conn - |> get("/api/pleroma/admin/oauth_app", %{trusted: true}) - |> json_response(200) - - assert %{"apps" => [returned], "count" => _, "page_size" => _} = response - - assert returned["client_id"] == app.client_id - assert returned["name"] == app.client_name - end - end - - describe "DELETE /api/pleroma/admin/oauth_app/:id" do - test "with id", %{conn: conn} do - app = insert(:oauth_app) - - response = - conn - |> delete("/api/pleroma/admin/oauth_app/" <> to_string(app.id)) - |> json_response(:no_content) - - assert response == "" - end - - test "with non existance id", %{conn: conn} do - response = - conn - |> delete("/api/pleroma/admin/oauth_app/0") - |> json_response(:bad_request) - - assert response == "" - end - end - - describe "PATCH /api/pleroma/admin/oauth_app/:id" do - test "with id", %{conn: conn} do - app = insert(:oauth_app) - - name = "another name" - url = "https://example.com" - scopes = ["admin"] - id = app.id - website = "http://website.com" - - response = - conn - |> patch("/api/pleroma/admin/oauth_app/" <> to_string(app.id), %{ - name: name, - trusted: true, - redirect_uris: url, - scopes: scopes, - website: website - }) - |> json_response(200) - - assert %{ - "client_id" => _, - "client_secret" => _, - "id" => ^id, - "name" => ^name, - "redirect_uri" => ^url, - "trusted" => true, - "website" => ^website - } = response - end - - test "without id", %{conn: conn} do - response = - conn - |> patch("/api/pleroma/admin/oauth_app/0") - |> json_response(:bad_request) - - assert response == "" - end - end end # Needed for testing diff --git a/test/web/admin_api/controllers/oauth_app_controller_test.exs b/test/web/admin_api/controllers/oauth_app_controller_test.exs new file mode 100644 index 000000000..ed7c4172c --- /dev/null +++ b/test/web/admin_api/controllers/oauth_app_controller_test.exs @@ -0,0 +1,220 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.OAuthAppControllerTest do + use Pleroma.Web.ConnCase, async: true + use Oban.Testing, repo: Pleroma.Repo + + import Pleroma.Factory + + alias Pleroma.Config + alias Pleroma.Web + + setup do + admin = insert(:user, is_admin: true) + token = insert(:oauth_admin_token, user: admin) + + conn = + build_conn() + |> assign(:user, admin) + |> assign(:token, token) + + {:ok, %{admin: admin, token: token, conn: conn}} + end + + describe "POST /api/pleroma/admin/oauth_app" do + test "errors", %{conn: conn} do + response = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/pleroma/admin/oauth_app", %{}) + |> json_response_and_validate_schema(400) + + assert %{ + "error" => "Missing field: name. Missing field: redirect_uris." + } = response + end + + test "success", %{conn: conn} do + base_url = Web.base_url() + app_name = "Trusted app" + + response = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/pleroma/admin/oauth_app", %{ + name: app_name, + redirect_uris: base_url + }) + |> json_response_and_validate_schema(200) + + assert %{ + "client_id" => _, + "client_secret" => _, + "name" => ^app_name, + "redirect_uri" => ^base_url, + "trusted" => false + } = response + end + + test "with trusted", %{conn: conn} do + base_url = Web.base_url() + app_name = "Trusted app" + + response = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/pleroma/admin/oauth_app", %{ + name: app_name, + redirect_uris: base_url, + trusted: true + }) + |> json_response_and_validate_schema(200) + + assert %{ + "client_id" => _, + "client_secret" => _, + "name" => ^app_name, + "redirect_uri" => ^base_url, + "trusted" => true + } = response + end + end + + describe "GET /api/pleroma/admin/oauth_app" do + setup do + app = insert(:oauth_app) + {:ok, app: app} + end + + test "list", %{conn: conn} do + response = + conn + |> get("/api/pleroma/admin/oauth_app") + |> json_response_and_validate_schema(200) + + assert %{"apps" => apps, "count" => count, "page_size" => _} = response + + assert length(apps) == count + end + + test "with page size", %{conn: conn} do + insert(:oauth_app) + page_size = 1 + + response = + conn + |> get("/api/pleroma/admin/oauth_app?page_size=#{page_size}") + |> json_response_and_validate_schema(200) + + assert %{"apps" => apps, "count" => _, "page_size" => ^page_size} = response + + assert length(apps) == page_size + end + + test "search by client name", %{conn: conn, app: app} do + response = + conn + |> get("/api/pleroma/admin/oauth_app?name=#{app.client_name}") + |> json_response_and_validate_schema(200) + + assert %{"apps" => [returned], "count" => _, "page_size" => _} = response + + assert returned["client_id"] == app.client_id + assert returned["name"] == app.client_name + end + + test "search by client id", %{conn: conn, app: app} do + response = + conn + |> get("/api/pleroma/admin/oauth_app?client_id=#{app.client_id}") + |> json_response_and_validate_schema(200) + + assert %{"apps" => [returned], "count" => _, "page_size" => _} = response + + assert returned["client_id"] == app.client_id + assert returned["name"] == app.client_name + end + + test "only trusted", %{conn: conn} do + app = insert(:oauth_app, trusted: true) + + response = + conn + |> get("/api/pleroma/admin/oauth_app?trusted=true") + |> json_response_and_validate_schema(200) + + assert %{"apps" => [returned], "count" => _, "page_size" => _} = response + + assert returned["client_id"] == app.client_id + assert returned["name"] == app.client_name + end + end + + describe "DELETE /api/pleroma/admin/oauth_app/:id" do + test "with id", %{conn: conn} do + app = insert(:oauth_app) + + response = + conn + |> delete("/api/pleroma/admin/oauth_app/" <> to_string(app.id)) + |> json_response_and_validate_schema(:no_content) + + assert response == "" + end + + test "with non existance id", %{conn: conn} do + response = + conn + |> delete("/api/pleroma/admin/oauth_app/0") + |> json_response_and_validate_schema(:bad_request) + + assert response == "" + end + end + + describe "PATCH /api/pleroma/admin/oauth_app/:id" do + test "with id", %{conn: conn} do + app = insert(:oauth_app) + + name = "another name" + url = "https://example.com" + scopes = ["admin"] + id = app.id + website = "http://website.com" + + response = + conn + |> put_req_header("content-type", "application/json") + |> patch("/api/pleroma/admin/oauth_app/#{id}", %{ + name: name, + trusted: true, + redirect_uris: url, + scopes: scopes, + website: website + }) + |> json_response_and_validate_schema(200) + + assert %{ + "client_id" => _, + "client_secret" => _, + "id" => ^id, + "name" => ^name, + "redirect_uri" => ^url, + "trusted" => true, + "website" => ^website + } = response + end + + test "without id", %{conn: conn} do + response = + conn + |> put_req_header("content-type", "application/json") + |> patch("/api/pleroma/admin/oauth_app/0") + |> json_response_and_validate_schema(:bad_request) + + assert response == "" + end + end +end From e32b7ae044be284c4b0d596d2effd1c7801873b3 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Mon, 25 May 2020 23:01:37 +0400 Subject: [PATCH 12/65] Skip failing `:crypt` test on mac --- test/plugs/authentication_plug_test.exs | 1 + 1 file changed, 1 insertion(+) diff --git a/test/plugs/authentication_plug_test.exs b/test/plugs/authentication_plug_test.exs index 3c70c1747..777ae15ae 100644 --- a/test/plugs/authentication_plug_test.exs +++ b/test/plugs/authentication_plug_test.exs @@ -68,6 +68,7 @@ test "with a bcrypt hash, it updates to a pkbdf2 hash", %{conn: conn} do assert "$pbkdf2" <> _ = user.password_hash end + @tag :skip_on_mac test "with a crypt hash, it updates to a pkbdf2 hash", %{conn: conn} do user = insert(:user, From d7a57004ef975e2cf02facb9d80cff287a5d6d3b Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Mon, 25 May 2020 23:27:47 +0300 Subject: [PATCH 13/65] [#1501] Made user feed contain public and unlisted activities. --- lib/pleroma/web/activity_pub/activity_pub.ex | 25 ++++++++++++++----- lib/pleroma/web/feed/user_controller.ex | 2 +- test/web/feed/user_controller_test.exs | 26 +++++++++++++++++++- 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 2cea55285..0fe71694a 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -538,14 +538,27 @@ def fetch_latest_activity_id_for_context(context, opts \\ %{}) do |> Repo.one() end - @spec fetch_public_activities(map(), Pagination.type()) :: [Activity.t()] - def fetch_public_activities(opts \\ %{}, pagination \\ :keyset) do + @spec fetch_public_or_unlisted_activities(map(), Pagination.type()) :: [Activity.t()] + def fetch_public_or_unlisted_activities(opts \\ %{}, pagination \\ :keyset) do opts = Map.drop(opts, ["user"]) - [Constants.as_public()] - |> fetch_activities_query(opts) - |> restrict_unlisted() - |> Pagination.fetch_paginated(opts, pagination) + query = fetch_activities_query([Constants.as_public()], opts) + + query = + if opts["restrict_unlisted"] do + restrict_unlisted(query) + else + query + end + + Pagination.fetch_paginated(query, opts, pagination) + end + + @spec fetch_public_activities(map(), Pagination.type()) :: [Activity.t()] + def fetch_public_activities(opts \\ %{}, pagination \\ :keyset) do + opts + |> Map.put("restrict_unlisted", true) + |> fetch_public_or_unlisted_activities(pagination) end @valid_visibilities ~w[direct unlisted public private] diff --git a/lib/pleroma/web/feed/user_controller.ex b/lib/pleroma/web/feed/user_controller.ex index 1b72e23dc..5a6fc9de0 100644 --- a/lib/pleroma/web/feed/user_controller.ex +++ b/lib/pleroma/web/feed/user_controller.ex @@ -56,7 +56,7 @@ def feed(conn, %{"nickname" => nickname} = params) do "actor_id" => user.ap_id } |> put_if_exist("max_id", params["max_id"]) - |> ActivityPub.fetch_public_activities() + |> ActivityPub.fetch_public_or_unlisted_activities() conn |> put_resp_content_type("application/#{format}+xml") diff --git a/test/web/feed/user_controller_test.exs b/test/web/feed/user_controller_test.exs index 05ad427c2..fa2ed1ea5 100644 --- a/test/web/feed/user_controller_test.exs +++ b/test/web/feed/user_controller_test.exs @@ -11,13 +11,14 @@ defmodule Pleroma.Web.Feed.UserControllerTest do alias Pleroma.Config alias Pleroma.Object alias Pleroma.User + alias Pleroma.Web.CommonAPI setup do: clear_config([:instance, :federating], true) describe "feed" do setup do: clear_config([:feed]) - test "gets a feed", %{conn: conn} do + test "gets an atom feed", %{conn: conn} do Config.put( [:feed, :post_title], %{max_length: 10, omission: "..."} @@ -157,6 +158,29 @@ test "returns 404 for a missing feed", %{conn: conn} do assert response(conn, 404) end + + test "returns feed with public and unlisted activities", %{conn: conn} do + user = insert(:user) + + {:ok, _} = CommonAPI.post(user, %{status: "public", visibility: "public"}) + {:ok, _} = CommonAPI.post(user, %{status: "direct", visibility: "direct"}) + {:ok, _} = CommonAPI.post(user, %{status: "unlisted", visibility: "unlisted"}) + {:ok, _} = CommonAPI.post(user, %{status: "private", visibility: "private"}) + + resp = + conn + |> put_req_header("accept", "application/atom+xml") + |> get(user_feed_path(conn, :feed, user.nickname)) + |> response(200) + + activity_titles = + resp + |> SweetXml.parse() + |> SweetXml.xpath(~x"//entry/title/text()"l) + |> Enum.sort() + + assert activity_titles == ['public', 'unlisted'] + end end # Note: see ActivityPubControllerTest for JSON format tests From 8f08384d8058f61753c28d37c90b47a2886f348c Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Mon, 18 May 2020 10:09:21 +0300 Subject: [PATCH 14/65] another view for account in admin-fe status_show --- .../web/admin_api/controllers/status_controller.ex | 2 +- test/web/admin_api/controllers/status_controller_test.exs | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/admin_api/controllers/status_controller.ex b/lib/pleroma/web/admin_api/controllers/status_controller.ex index 08cb9c10b..c91fbc771 100644 --- a/lib/pleroma/web/admin_api/controllers/status_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/status_controller.ex @@ -42,7 +42,7 @@ def index(%{assigns: %{user: _admin}} = conn, params) do def show(conn, %{id: id}) do with %Activity{} = activity <- Activity.get_by_id(id) do conn - |> put_view(MastodonAPI.StatusView) + |> put_view(Pleroma.Web.AdminAPI.StatusView) |> render("show.json", %{activity: activity}) else nil -> {:error, :not_found} diff --git a/test/web/admin_api/controllers/status_controller_test.exs b/test/web/admin_api/controllers/status_controller_test.exs index 124d8dc2e..eff78fb0a 100644 --- a/test/web/admin_api/controllers/status_controller_test.exs +++ b/test/web/admin_api/controllers/status_controller_test.exs @@ -42,6 +42,14 @@ test "shows activity", %{conn: conn} do |> json_response_and_validate_schema(200) assert response["id"] == activity.id + + account = response["account"] + actor = User.get_by_ap_id(activity.actor) + + assert account["id"] == actor.id + assert account["nickname"] == actor.nickname + assert account["deactivated"] == actor.deactivated + assert account["confirmation_pending"] == actor.confirmation_pending end end From 95ebfb9190e6e7d446213ca57e8c99aa3116ed0a Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 26 May 2020 13:13:39 +0400 Subject: [PATCH 15/65] Move invite actions to AdminAPI.InviteTokenController --- .../controllers/admin_api_controller.ex | 72 ----- .../controllers/invite_token_controller.ex | 88 +++++++ .../admin/invite_token_operation.ex | 165 ++++++++++++ lib/pleroma/web/router.ex | 8 +- .../controllers/admin_api_controller_test.exs | 223 ---------------- .../invite_token_controller_test.exs | 247 ++++++++++++++++++ 6 files changed, 504 insertions(+), 299 deletions(-) create mode 100644 lib/pleroma/web/admin_api/controllers/invite_token_controller.ex create mode 100644 lib/pleroma/web/api_spec/operations/admin/invite_token_operation.ex create mode 100644 test/web/admin_api/controllers/invite_token_controller_test.exs diff --git a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex index 6b1d64a2e..95582b008 100644 --- a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex @@ -16,7 +16,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do alias Pleroma.ReportNote alias Pleroma.Stats alias Pleroma.User - alias Pleroma.UserInviteToken alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Builder alias Pleroma.Web.ActivityPub.Pipeline @@ -69,14 +68,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do ] ) - plug(OAuthScopesPlug, %{scopes: ["read:invites"], admin: true} when action == :invites) - - plug( - OAuthScopesPlug, - %{scopes: ["write:invites"], admin: true} - when action in [:create_invite_token, :revoke_invite, :email_invite] - ) - plug( OAuthScopesPlug, %{scopes: ["write:follows"], admin: true} @@ -575,69 +566,6 @@ def relay_unfollow(%{assigns: %{user: admin}} = conn, %{"relay_url" => target}) end end - @doc "Sends registration invite via email" - def email_invite(%{assigns: %{user: user}} = conn, %{"email" => email} = params) do - with {_, false} <- {:registrations_open, Config.get([:instance, :registrations_open])}, - {_, true} <- {:invites_enabled, Config.get([:instance, :invites_enabled])}, - {:ok, invite_token} <- UserInviteToken.create_invite(), - email <- - Pleroma.Emails.UserEmail.user_invitation_email( - user, - invite_token, - email, - params["name"] - ), - {:ok, _} <- Pleroma.Emails.Mailer.deliver(email) do - json_response(conn, :no_content, "") - else - {:registrations_open, _} -> - {:error, "To send invites you need to set the `registrations_open` option to false."} - - {:invites_enabled, _} -> - {:error, "To send invites you need to set the `invites_enabled` option to true."} - end - end - - @doc "Create an account registration invite token" - def create_invite_token(conn, params) do - opts = %{} - - opts = - if params["max_use"], - do: Map.put(opts, :max_use, params["max_use"]), - else: opts - - opts = - if params["expires_at"], - do: Map.put(opts, :expires_at, params["expires_at"]), - else: opts - - {:ok, invite} = UserInviteToken.create_invite(opts) - - json(conn, AccountView.render("invite.json", %{invite: invite})) - end - - @doc "Get list of created invites" - def invites(conn, _params) do - invites = UserInviteToken.list_invites() - - conn - |> put_view(AccountView) - |> render("invites.json", %{invites: invites}) - end - - @doc "Revokes invite by token" - def revoke_invite(conn, %{"token" => token}) do - with {:ok, invite} <- UserInviteToken.find_by_token(token), - {:ok, updated_invite} = UserInviteToken.update_invite(invite, %{used: true}) do - conn - |> put_view(AccountView) - |> render("invite.json", %{invite: updated_invite}) - else - nil -> {:error, :not_found} - end - end - @doc "Get a password reset token (base64 string) for given nickname" def get_password_reset(conn, %{"nickname" => nickname}) do (%User{local: true} = user) = User.get_cached_by_nickname(nickname) diff --git a/lib/pleroma/web/admin_api/controllers/invite_token_controller.ex b/lib/pleroma/web/admin_api/controllers/invite_token_controller.ex new file mode 100644 index 000000000..a0291e9c3 --- /dev/null +++ b/lib/pleroma/web/admin_api/controllers/invite_token_controller.ex @@ -0,0 +1,88 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.InviteTokenController do + use Pleroma.Web, :controller + + import Pleroma.Web.ControllerHelper, only: [json_response: 3] + + alias Pleroma.Config + alias Pleroma.Plugs.OAuthScopesPlug + alias Pleroma.UserInviteToken + alias Pleroma.Web.AdminAPI.AccountView + + require Logger + + plug(OAuthScopesPlug, %{scopes: ["read:invites"], admin: true} when action == :index) + + plug( + OAuthScopesPlug, + %{scopes: ["write:invites"], admin: true} when action in [:create, :revoke, :email] + ) + + action_fallback(Pleroma.Web.AdminAPI.FallbackController) + + @doc "Get list of created invites" + def index(conn, _params) do + invites = UserInviteToken.list_invites() + + conn + |> put_view(AccountView) + |> render("invites.json", %{invites: invites}) + end + + @doc "Create an account registration invite token" + def create(conn, params) do + opts = %{} + + opts = + if params["max_use"], + do: Map.put(opts, :max_use, params["max_use"]), + else: opts + + opts = + if params["expires_at"], + do: Map.put(opts, :expires_at, params["expires_at"]), + else: opts + + {:ok, invite} = UserInviteToken.create_invite(opts) + + json(conn, AccountView.render("invite.json", %{invite: invite})) + end + + @doc "Revokes invite by token" + def revoke(conn, %{"token" => token}) do + with {:ok, invite} <- UserInviteToken.find_by_token(token), + {:ok, updated_invite} = UserInviteToken.update_invite(invite, %{used: true}) do + conn + |> put_view(AccountView) + |> render("invite.json", %{invite: updated_invite}) + else + nil -> {:error, :not_found} + end + end + + @doc "Sends registration invite via email" + def email(%{assigns: %{user: user}} = conn, %{"email" => email} = params) do + with {_, false} <- {:registrations_open, Config.get([:instance, :registrations_open])}, + {_, true} <- {:invites_enabled, Config.get([:instance, :invites_enabled])}, + {:ok, invite_token} <- UserInviteToken.create_invite(), + email <- + Pleroma.Emails.UserEmail.user_invitation_email( + user, + invite_token, + email, + params["name"] + ), + {:ok, _} <- Pleroma.Emails.Mailer.deliver(email) do + json_response(conn, :no_content, "") + else + {:registrations_open, _} -> + {:error, "To send invites you need to set the `registrations_open` option to false."} + + {:invites_enabled, _} -> + {:error, "To send invites you need to set the `invites_enabled` option to true."} + end + end +end diff --git a/lib/pleroma/web/api_spec/operations/admin/invite_token_operation.ex b/lib/pleroma/web/api_spec/operations/admin/invite_token_operation.ex new file mode 100644 index 000000000..09a7735d1 --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/admin/invite_token_operation.ex @@ -0,0 +1,165 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Admin.InviteTokenOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.Account + alias Pleroma.Web.ApiSpec.Schemas.ApiError + alias Pleroma.Web.ApiSpec.Schemas.FlakeID + alias Pleroma.Web.ApiSpec.Schemas.Status + alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope + + import Pleroma.Web.ApiSpec.Helpers + import Pleroma.Web.ApiSpec.StatusOperation, only: [id_param: 0] + + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + def index_operation do + %Operation{ + tags: ["Admin", "Statuses"], + operationId: "AdminAPI.StatusController.index", + security: [%{"oAuth" => ["read:statuses"]}], + parameters: [ + Operation.parameter( + :godmode, + :query, + %Schema{type: :boolean, default: false}, + "Allows to see private statuses" + ), + Operation.parameter( + :local_only, + :query, + %Schema{type: :boolean, default: false}, + "Excludes remote statuses" + ), + Operation.parameter( + :with_reblogs, + :query, + %Schema{type: :boolean, default: false}, + "Allows to see reblogs" + ), + Operation.parameter( + :page, + :query, + %Schema{type: :integer, default: 1}, + "Page" + ), + Operation.parameter( + :page_size, + :query, + %Schema{type: :integer, default: 50}, + "Number of statuses to return" + ) + ], + responses: %{ + 200 => + Operation.response("Array of statuses", "application/json", %Schema{ + type: :array, + items: status() + }) + } + } + end + + def show_operation do + %Operation{ + tags: ["Admin", "Statuses"], + summary: "Show Status", + operationId: "AdminAPI.StatusController.show", + parameters: [id_param()], + security: [%{"oAuth" => ["read:statuses"]}], + responses: %{ + 200 => Operation.response("Status", "application/json", Status), + 404 => Operation.response("Not Found", "application/json", ApiError) + } + } + end + + def update_operation do + %Operation{ + tags: ["Admin", "Statuses"], + summary: "Change the scope of an individual reported status", + operationId: "AdminAPI.StatusController.update", + parameters: [id_param()], + security: [%{"oAuth" => ["write:statuses"]}], + requestBody: request_body("Parameters", update_request(), required: true), + responses: %{ + 200 => Operation.response("Status", "application/json", Status), + 400 => Operation.response("Error", "application/json", ApiError) + } + } + end + + def delete_operation do + %Operation{ + tags: ["Admin", "Statuses"], + summary: "Delete an individual reported status", + operationId: "AdminAPI.StatusController.delete", + parameters: [id_param()], + security: [%{"oAuth" => ["write:statuses"]}], + responses: %{ + 200 => empty_object_response(), + 404 => Operation.response("Not Found", "application/json", ApiError) + } + } + end + + defp status do + %Schema{ + anyOf: [ + Status, + %Schema{ + type: :object, + properties: %{ + account: %Schema{allOf: [Account, admin_account()]} + } + } + ] + } + end + + defp admin_account do + %Schema{ + type: :object, + properties: %{ + id: FlakeID, + avatar: %Schema{type: :string}, + nickname: %Schema{type: :string}, + display_name: %Schema{type: :string}, + deactivated: %Schema{type: :boolean}, + local: %Schema{type: :boolean}, + roles: %Schema{ + type: :object, + properties: %{ + admin: %Schema{type: :boolean}, + moderator: %Schema{type: :boolean} + } + }, + tags: %Schema{type: :string}, + confirmation_pending: %Schema{type: :string} + } + } + end + + defp update_request do + %Schema{ + type: :object, + properties: %{ + sensitive: %Schema{ + type: :boolean, + description: "Mark status and attached media as sensitive?" + }, + visibility: VisibilityScope + }, + example: %{ + "visibility" => "private", + "sensitive" => "false" + } + } + end +end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index e493a4153..fe36f0189 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -164,10 +164,10 @@ defmodule Pleroma.Web.Router do post("/relay", AdminAPIController, :relay_follow) delete("/relay", AdminAPIController, :relay_unfollow) - post("/users/invite_token", AdminAPIController, :create_invite_token) - get("/users/invites", AdminAPIController, :invites) - post("/users/revoke_invite", AdminAPIController, :revoke_invite) - post("/users/email_invite", AdminAPIController, :email_invite) + post("/users/invite_token", InviteTokenController, :create) + get("/users/invites", InviteTokenController, :index) + post("/users/revoke_invite", InviteTokenController, :revoke) + post("/users/email_invite", InviteTokenController, :email) get("/users/:nickname/password_reset", AdminAPIController, :get_password_reset) patch("/users/force_password_reset", AdminAPIController, :force_password_reset) diff --git a/test/web/admin_api/controllers/admin_api_controller_test.exs b/test/web/admin_api/controllers/admin_api_controller_test.exs index 321840a8c..f7e163f57 100644 --- a/test/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/web/admin_api/controllers/admin_api_controller_test.exs @@ -20,7 +20,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do alias Pleroma.ReportNote alias Pleroma.Tests.ObanHelpers alias Pleroma.User - alias Pleroma.UserInviteToken alias Pleroma.Web alias Pleroma.Web.ActivityPub.Relay alias Pleroma.Web.CommonAPI @@ -588,122 +587,6 @@ test "/:right DELETE, can remove from a permission group (multiple)", %{ end end - describe "POST /api/pleroma/admin/email_invite, with valid config" do - setup do: clear_config([:instance, :registrations_open], false) - setup do: clear_config([:instance, :invites_enabled], true) - - test "sends invitation and returns 204", %{admin: admin, conn: conn} do - recipient_email = "foo@bar.com" - recipient_name = "J. D." - - conn = - post( - conn, - "/api/pleroma/admin/users/email_invite?email=#{recipient_email}&name=#{recipient_name}" - ) - - assert json_response(conn, :no_content) - - token_record = List.last(Repo.all(Pleroma.UserInviteToken)) - assert token_record - refute token_record.used - - notify_email = Config.get([:instance, :notify_email]) - instance_name = Config.get([:instance, :name]) - - email = - Pleroma.Emails.UserEmail.user_invitation_email( - admin, - token_record, - recipient_email, - recipient_name - ) - - Swoosh.TestAssertions.assert_email_sent( - from: {instance_name, notify_email}, - to: {recipient_name, recipient_email}, - html_body: email.html_body - ) - end - - test "it returns 403 if requested by a non-admin" do - non_admin_user = insert(:user) - token = insert(:oauth_token, user: non_admin_user) - - conn = - build_conn() - |> assign(:user, non_admin_user) - |> assign(:token, token) - |> post("/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD") - - assert json_response(conn, :forbidden) - end - - test "email with +", %{conn: conn, admin: admin} do - recipient_email = "foo+bar@baz.com" - - conn - |> put_req_header("content-type", "application/json;charset=utf-8") - |> post("/api/pleroma/admin/users/email_invite", %{email: recipient_email}) - |> json_response(:no_content) - - token_record = - Pleroma.UserInviteToken - |> Repo.all() - |> List.last() - - assert token_record - refute token_record.used - - notify_email = Config.get([:instance, :notify_email]) - instance_name = Config.get([:instance, :name]) - - email = - Pleroma.Emails.UserEmail.user_invitation_email( - admin, - token_record, - recipient_email - ) - - Swoosh.TestAssertions.assert_email_sent( - from: {instance_name, notify_email}, - to: recipient_email, - html_body: email.html_body - ) - end - end - - describe "POST /api/pleroma/admin/users/email_invite, with invalid config" do - setup do: clear_config([:instance, :registrations_open]) - setup do: clear_config([:instance, :invites_enabled]) - - test "it returns 500 if `invites_enabled` is not enabled", %{conn: conn} do - Config.put([:instance, :registrations_open], false) - Config.put([:instance, :invites_enabled], false) - - conn = post(conn, "/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD") - - assert json_response(conn, :bad_request) == - %{ - "error" => - "To send invites you need to set the `invites_enabled` option to true." - } - end - - test "it returns 500 if `registrations_open` is enabled", %{conn: conn} do - Config.put([:instance, :registrations_open], true) - Config.put([:instance, :invites_enabled], true) - - conn = post(conn, "/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD") - - assert json_response(conn, :bad_request) == - %{ - "error" => - "To send invites you need to set the `registrations_open` option to false." - } - end - end - test "/api/pleroma/admin/users/:nickname/password_reset", %{conn: conn} do user = insert(:user) @@ -1318,112 +1201,6 @@ test "returns 404 if user not found", %{conn: conn} do end end - describe "POST /api/pleroma/admin/users/invite_token" do - test "without options", %{conn: conn} do - conn = post(conn, "/api/pleroma/admin/users/invite_token") - - invite_json = json_response(conn, 200) - invite = UserInviteToken.find_by_token!(invite_json["token"]) - refute invite.used - refute invite.expires_at - refute invite.max_use - assert invite.invite_type == "one_time" - end - - test "with expires_at", %{conn: conn} do - conn = - post(conn, "/api/pleroma/admin/users/invite_token", %{ - "expires_at" => Date.to_string(Date.utc_today()) - }) - - invite_json = json_response(conn, 200) - invite = UserInviteToken.find_by_token!(invite_json["token"]) - - refute invite.used - assert invite.expires_at == Date.utc_today() - refute invite.max_use - assert invite.invite_type == "date_limited" - end - - test "with max_use", %{conn: conn} do - conn = post(conn, "/api/pleroma/admin/users/invite_token", %{"max_use" => 150}) - - invite_json = json_response(conn, 200) - invite = UserInviteToken.find_by_token!(invite_json["token"]) - refute invite.used - refute invite.expires_at - assert invite.max_use == 150 - assert invite.invite_type == "reusable" - end - - test "with max use and expires_at", %{conn: conn} do - conn = - post(conn, "/api/pleroma/admin/users/invite_token", %{ - "max_use" => 150, - "expires_at" => Date.to_string(Date.utc_today()) - }) - - invite_json = json_response(conn, 200) - invite = UserInviteToken.find_by_token!(invite_json["token"]) - refute invite.used - assert invite.expires_at == Date.utc_today() - assert invite.max_use == 150 - assert invite.invite_type == "reusable_date_limited" - end - end - - describe "GET /api/pleroma/admin/users/invites" do - test "no invites", %{conn: conn} do - conn = get(conn, "/api/pleroma/admin/users/invites") - - assert json_response(conn, 200) == %{"invites" => []} - end - - test "with invite", %{conn: conn} do - {:ok, invite} = UserInviteToken.create_invite() - - conn = get(conn, "/api/pleroma/admin/users/invites") - - assert json_response(conn, 200) == %{ - "invites" => [ - %{ - "expires_at" => nil, - "id" => invite.id, - "invite_type" => "one_time", - "max_use" => nil, - "token" => invite.token, - "used" => false, - "uses" => 0 - } - ] - } - end - end - - describe "POST /api/pleroma/admin/users/revoke_invite" do - test "with token", %{conn: conn} do - {:ok, invite} = UserInviteToken.create_invite() - - conn = post(conn, "/api/pleroma/admin/users/revoke_invite", %{"token" => invite.token}) - - assert json_response(conn, 200) == %{ - "expires_at" => nil, - "id" => invite.id, - "invite_type" => "one_time", - "max_use" => nil, - "token" => invite.token, - "used" => true, - "uses" => 0 - } - end - - test "with invalid token", %{conn: conn} do - conn = post(conn, "/api/pleroma/admin/users/revoke_invite", %{"token" => "foo"}) - - assert json_response(conn, :not_found) == %{"error" => "Not found"} - end - end - describe "GET /api/pleroma/admin/reports/:id" do test "returns report by its id", %{conn: conn} do [reporter, target_user] = insert_pair(:user) diff --git a/test/web/admin_api/controllers/invite_token_controller_test.exs b/test/web/admin_api/controllers/invite_token_controller_test.exs new file mode 100644 index 000000000..eb57b4d44 --- /dev/null +++ b/test/web/admin_api/controllers/invite_token_controller_test.exs @@ -0,0 +1,247 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.InviteTokenControllerTest do + use Pleroma.Web.ConnCase, async: true + + import Pleroma.Factory + + alias Pleroma.Config + alias Pleroma.Repo + alias Pleroma.UserInviteToken + + setup do + admin = insert(:user, is_admin: true) + token = insert(:oauth_admin_token, user: admin) + + conn = + build_conn() + |> assign(:user, admin) + |> assign(:token, token) + + {:ok, %{admin: admin, token: token, conn: conn}} + end + + describe "POST /api/pleroma/admin/users/email_invite, with valid config" do + setup do: clear_config([:instance, :registrations_open], false) + setup do: clear_config([:instance, :invites_enabled], true) + + test "sends invitation and returns 204", %{admin: admin, conn: conn} do + recipient_email = "foo@bar.com" + recipient_name = "J. D." + + conn = + post( + conn, + "/api/pleroma/admin/users/email_invite?email=#{recipient_email}&name=#{recipient_name}" + ) + + assert json_response(conn, :no_content) + + token_record = List.last(Repo.all(Pleroma.UserInviteToken)) + assert token_record + refute token_record.used + + notify_email = Config.get([:instance, :notify_email]) + instance_name = Config.get([:instance, :name]) + + email = + Pleroma.Emails.UserEmail.user_invitation_email( + admin, + token_record, + recipient_email, + recipient_name + ) + + Swoosh.TestAssertions.assert_email_sent( + from: {instance_name, notify_email}, + to: {recipient_name, recipient_email}, + html_body: email.html_body + ) + end + + test "it returns 403 if requested by a non-admin" do + non_admin_user = insert(:user) + token = insert(:oauth_token, user: non_admin_user) + + conn = + build_conn() + |> assign(:user, non_admin_user) + |> assign(:token, token) + |> post("/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD") + + assert json_response(conn, :forbidden) + end + + test "email with +", %{conn: conn, admin: admin} do + recipient_email = "foo+bar@baz.com" + + conn + |> put_req_header("content-type", "application/json;charset=utf-8") + |> post("/api/pleroma/admin/users/email_invite", %{email: recipient_email}) + |> json_response(:no_content) + + token_record = + Pleroma.UserInviteToken + |> Repo.all() + |> List.last() + + assert token_record + refute token_record.used + + notify_email = Config.get([:instance, :notify_email]) + instance_name = Config.get([:instance, :name]) + + email = + Pleroma.Emails.UserEmail.user_invitation_email( + admin, + token_record, + recipient_email + ) + + Swoosh.TestAssertions.assert_email_sent( + from: {instance_name, notify_email}, + to: recipient_email, + html_body: email.html_body + ) + end + end + + describe "POST /api/pleroma/admin/users/email_invite, with invalid config" do + setup do: clear_config([:instance, :registrations_open]) + setup do: clear_config([:instance, :invites_enabled]) + + test "it returns 500 if `invites_enabled` is not enabled", %{conn: conn} do + Config.put([:instance, :registrations_open], false) + Config.put([:instance, :invites_enabled], false) + + conn = post(conn, "/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD") + + assert json_response(conn, :bad_request) == + %{ + "error" => + "To send invites you need to set the `invites_enabled` option to true." + } + end + + test "it returns 500 if `registrations_open` is enabled", %{conn: conn} do + Config.put([:instance, :registrations_open], true) + Config.put([:instance, :invites_enabled], true) + + conn = post(conn, "/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD") + + assert json_response(conn, :bad_request) == + %{ + "error" => + "To send invites you need to set the `registrations_open` option to false." + } + end + end + + describe "POST /api/pleroma/admin/users/invite_token" do + test "without options", %{conn: conn} do + conn = post(conn, "/api/pleroma/admin/users/invite_token") + + invite_json = json_response(conn, 200) + invite = UserInviteToken.find_by_token!(invite_json["token"]) + refute invite.used + refute invite.expires_at + refute invite.max_use + assert invite.invite_type == "one_time" + end + + test "with expires_at", %{conn: conn} do + conn = + post(conn, "/api/pleroma/admin/users/invite_token", %{ + "expires_at" => Date.to_string(Date.utc_today()) + }) + + invite_json = json_response(conn, 200) + invite = UserInviteToken.find_by_token!(invite_json["token"]) + + refute invite.used + assert invite.expires_at == Date.utc_today() + refute invite.max_use + assert invite.invite_type == "date_limited" + end + + test "with max_use", %{conn: conn} do + conn = post(conn, "/api/pleroma/admin/users/invite_token", %{"max_use" => 150}) + + invite_json = json_response(conn, 200) + invite = UserInviteToken.find_by_token!(invite_json["token"]) + refute invite.used + refute invite.expires_at + assert invite.max_use == 150 + assert invite.invite_type == "reusable" + end + + test "with max use and expires_at", %{conn: conn} do + conn = + post(conn, "/api/pleroma/admin/users/invite_token", %{ + "max_use" => 150, + "expires_at" => Date.to_string(Date.utc_today()) + }) + + invite_json = json_response(conn, 200) + invite = UserInviteToken.find_by_token!(invite_json["token"]) + refute invite.used + assert invite.expires_at == Date.utc_today() + assert invite.max_use == 150 + assert invite.invite_type == "reusable_date_limited" + end + end + + describe "GET /api/pleroma/admin/users/invites" do + test "no invites", %{conn: conn} do + conn = get(conn, "/api/pleroma/admin/users/invites") + + assert json_response(conn, 200) == %{"invites" => []} + end + + test "with invite", %{conn: conn} do + {:ok, invite} = UserInviteToken.create_invite() + + conn = get(conn, "/api/pleroma/admin/users/invites") + + assert json_response(conn, 200) == %{ + "invites" => [ + %{ + "expires_at" => nil, + "id" => invite.id, + "invite_type" => "one_time", + "max_use" => nil, + "token" => invite.token, + "used" => false, + "uses" => 0 + } + ] + } + end + end + + describe "POST /api/pleroma/admin/users/revoke_invite" do + test "with token", %{conn: conn} do + {:ok, invite} = UserInviteToken.create_invite() + + conn = post(conn, "/api/pleroma/admin/users/revoke_invite", %{"token" => invite.token}) + + assert json_response(conn, 200) == %{ + "expires_at" => nil, + "id" => invite.id, + "invite_type" => "one_time", + "max_use" => nil, + "token" => invite.token, + "used" => true, + "uses" => 0 + } + end + + test "with invalid token", %{conn: conn} do + conn = post(conn, "/api/pleroma/admin/users/revoke_invite", %{"token" => "foo"}) + + assert json_response(conn, :not_found) == %{"error" => "Not found"} + end + end +end From 2a4f965191af6ec6ab953569898acff55bd1502b Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 26 May 2020 15:02:51 +0400 Subject: [PATCH 16/65] Add OpenAPI spec for AdminAPI.InviteTokenController --- .../controllers/invite_token_controller.ex | 25 +- .../admin/invite_token_operation.ex | 241 ++++++++---------- .../invite_token_controller_test.exs | 84 ++++-- 3 files changed, 179 insertions(+), 171 deletions(-) diff --git a/lib/pleroma/web/admin_api/controllers/invite_token_controller.ex b/lib/pleroma/web/admin_api/controllers/invite_token_controller.ex index a0291e9c3..a09966e5c 100644 --- a/lib/pleroma/web/admin_api/controllers/invite_token_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/invite_token_controller.ex @@ -14,6 +14,7 @@ defmodule Pleroma.Web.AdminAPI.InviteTokenController do require Logger + plug(Pleroma.Web.ApiSpec.CastAndValidate) plug(OAuthScopesPlug, %{scopes: ["read:invites"], admin: true} when action == :index) plug( @@ -23,6 +24,8 @@ defmodule Pleroma.Web.AdminAPI.InviteTokenController do action_fallback(Pleroma.Web.AdminAPI.FallbackController) + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.InviteTokenOperation + @doc "Get list of created invites" def index(conn, _params) do invites = UserInviteToken.list_invites() @@ -33,26 +36,14 @@ def index(conn, _params) do end @doc "Create an account registration invite token" - def create(conn, params) do - opts = %{} - - opts = - if params["max_use"], - do: Map.put(opts, :max_use, params["max_use"]), - else: opts - - opts = - if params["expires_at"], - do: Map.put(opts, :expires_at, params["expires_at"]), - else: opts - - {:ok, invite} = UserInviteToken.create_invite(opts) + def create(%{body_params: params} = conn, _) do + {:ok, invite} = UserInviteToken.create_invite(params) json(conn, AccountView.render("invite.json", %{invite: invite})) end @doc "Revokes invite by token" - def revoke(conn, %{"token" => token}) do + def revoke(%{body_params: %{token: token}} = conn, _) do with {:ok, invite} <- UserInviteToken.find_by_token(token), {:ok, updated_invite} = UserInviteToken.update_invite(invite, %{used: true}) do conn @@ -64,7 +55,7 @@ def revoke(conn, %{"token" => token}) do end @doc "Sends registration invite via email" - def email(%{assigns: %{user: user}} = conn, %{"email" => email} = params) do + def email(%{assigns: %{user: user}, body_params: %{email: email} = params} = conn, _) do with {_, false} <- {:registrations_open, Config.get([:instance, :registrations_open])}, {_, true} <- {:invites_enabled, Config.get([:instance, :invites_enabled])}, {:ok, invite_token} <- UserInviteToken.create_invite(), @@ -73,7 +64,7 @@ def email(%{assigns: %{user: user}} = conn, %{"email" => email} = params) do user, invite_token, email, - params["name"] + params[:name] ), {:ok, _} <- Pleroma.Emails.Mailer.deliver(email) do json_response(conn, :no_content, "") diff --git a/lib/pleroma/web/api_spec/operations/admin/invite_token_operation.ex b/lib/pleroma/web/api_spec/operations/admin/invite_token_operation.ex index 09a7735d1..0f7403f26 100644 --- a/lib/pleroma/web/api_spec/operations/admin/invite_token_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/invite_token_operation.ex @@ -5,14 +5,9 @@ defmodule Pleroma.Web.ApiSpec.Admin.InviteTokenOperation do alias OpenApiSpex.Operation alias OpenApiSpex.Schema - alias Pleroma.Web.ApiSpec.Schemas.Account alias Pleroma.Web.ApiSpec.Schemas.ApiError - alias Pleroma.Web.ApiSpec.Schemas.FlakeID - alias Pleroma.Web.ApiSpec.Schemas.Status - alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope import Pleroma.Web.ApiSpec.Helpers - import Pleroma.Web.ApiSpec.StatusOperation, only: [id_param: 0] def open_api_operation(action) do operation = String.to_existing_atom("#{action}_operation") @@ -21,144 +16,132 @@ def open_api_operation(action) do def index_operation do %Operation{ - tags: ["Admin", "Statuses"], - operationId: "AdminAPI.StatusController.index", - security: [%{"oAuth" => ["read:statuses"]}], - parameters: [ - Operation.parameter( - :godmode, - :query, - %Schema{type: :boolean, default: false}, - "Allows to see private statuses" - ), - Operation.parameter( - :local_only, - :query, - %Schema{type: :boolean, default: false}, - "Excludes remote statuses" - ), - Operation.parameter( - :with_reblogs, - :query, - %Schema{type: :boolean, default: false}, - "Allows to see reblogs" - ), - Operation.parameter( - :page, - :query, - %Schema{type: :integer, default: 1}, - "Page" - ), - Operation.parameter( - :page_size, - :query, - %Schema{type: :integer, default: 50}, - "Number of statuses to return" - ) - ], + tags: ["Admin", "Invites"], + summary: "Get a list of generated invites", + operationId: "AdminAPI.InviteTokenController.index", + security: [%{"oAuth" => ["read:invites"]}], responses: %{ 200 => - Operation.response("Array of statuses", "application/json", %Schema{ - type: :array, - items: status() + Operation.response("Intites", "application/json", %Schema{ + type: :object, + properties: %{ + invites: %Schema{type: :array, items: invite()} + }, + example: %{ + "invites" => [ + %{ + "id" => 123, + "token" => "kSQtDj_GNy2NZsL9AQDFIsHN5qdbguB6qRg3WHw6K1U=", + "used" => true, + "expires_at" => nil, + "uses" => 0, + "max_use" => nil, + "invite_type" => "one_time" + } + ] + } }) } } end - def show_operation do + def create_operation do %Operation{ - tags: ["Admin", "Statuses"], - summary: "Show Status", - operationId: "AdminAPI.StatusController.show", - parameters: [id_param()], - security: [%{"oAuth" => ["read:statuses"]}], - responses: %{ - 200 => Operation.response("Status", "application/json", Status), - 404 => Operation.response("Not Found", "application/json", ApiError) - } - } - end - - def update_operation do - %Operation{ - tags: ["Admin", "Statuses"], - summary: "Change the scope of an individual reported status", - operationId: "AdminAPI.StatusController.update", - parameters: [id_param()], - security: [%{"oAuth" => ["write:statuses"]}], - requestBody: request_body("Parameters", update_request(), required: true), - responses: %{ - 200 => Operation.response("Status", "application/json", Status), - 400 => Operation.response("Error", "application/json", ApiError) - } - } - end - - def delete_operation do - %Operation{ - tags: ["Admin", "Statuses"], - summary: "Delete an individual reported status", - operationId: "AdminAPI.StatusController.delete", - parameters: [id_param()], - security: [%{"oAuth" => ["write:statuses"]}], - responses: %{ - 200 => empty_object_response(), - 404 => Operation.response("Not Found", "application/json", ApiError) - } - } - end - - defp status do - %Schema{ - anyOf: [ - Status, - %Schema{ + tags: ["Admin", "Invites"], + summary: "Create an account registration invite token", + operationId: "AdminAPI.InviteTokenController.create", + security: [%{"oAuth" => ["write:invites"]}], + requestBody: + request_body("Parameters", %Schema{ type: :object, properties: %{ - account: %Schema{allOf: [Account, admin_account()]} + max_use: %Schema{type: :integer}, + expires_at: %Schema{type: :string, format: :date, example: "2020-04-20"} } + }), + responses: %{ + 200 => Operation.response("Invite", "application/json", invite()) + } + } + end + + def revoke_operation do + %Operation{ + tags: ["Admin", "Invites"], + summary: "Revoke invite by token", + operationId: "AdminAPI.InviteTokenController.revoke", + security: [%{"oAuth" => ["write:invites"]}], + requestBody: + request_body( + "Parameters", + %Schema{ + type: :object, + required: [:token], + properties: %{ + token: %Schema{type: :string} + } + }, + required: true + ), + responses: %{ + 200 => Operation.response("Invite", "application/json", invite()), + 400 => Operation.response("Bad Request", "application/json", ApiError), + 404 => Operation.response("Not Found", "application/json", ApiError) + } + } + end + + def email_operation do + %Operation{ + tags: ["Admin", "Invites"], + summary: "Sends registration invite via email", + operationId: "AdminAPI.InviteTokenController.email", + security: [%{"oAuth" => ["write:invites"]}], + requestBody: + request_body( + "Parameters", + %Schema{ + type: :object, + required: [:email], + properties: %{ + email: %Schema{type: :string, format: :email}, + name: %Schema{type: :string} + } + }, + required: true + ), + responses: %{ + 204 => no_content_response(), + 400 => Operation.response("Bad Request", "application/json", ApiError), + 403 => Operation.response("Forbidden", "application/json", ApiError) + } + } + end + + defp invite do + %Schema{ + title: "Invite", + type: :object, + properties: %{ + id: %Schema{type: :integer}, + token: %Schema{type: :string}, + used: %Schema{type: :boolean}, + expires_at: %Schema{type: :string, format: :date, nullable: true}, + uses: %Schema{type: :integer}, + max_use: %Schema{type: :integer, nullable: true}, + invite_type: %Schema{ + type: :string, + enum: ["one_time", "reusable", "date_limited", "reusable_date_limited"] } - ] - } - end - - defp admin_account do - %Schema{ - type: :object, - properties: %{ - id: FlakeID, - avatar: %Schema{type: :string}, - nickname: %Schema{type: :string}, - display_name: %Schema{type: :string}, - deactivated: %Schema{type: :boolean}, - local: %Schema{type: :boolean}, - roles: %Schema{ - type: :object, - properties: %{ - admin: %Schema{type: :boolean}, - moderator: %Schema{type: :boolean} - } - }, - tags: %Schema{type: :string}, - confirmation_pending: %Schema{type: :string} - } - } - end - - defp update_request do - %Schema{ - type: :object, - properties: %{ - sensitive: %Schema{ - type: :boolean, - description: "Mark status and attached media as sensitive?" - }, - visibility: VisibilityScope }, example: %{ - "visibility" => "private", - "sensitive" => "false" + "id" => 123, + "token" => "kSQtDj_GNy2NZsL9AQDFIsHN5qdbguB6qRg3WHw6K1U=", + "used" => true, + "expires_at" => nil, + "uses" => 0, + "max_use" => nil, + "invite_type" => "one_time" } } end diff --git a/test/web/admin_api/controllers/invite_token_controller_test.exs b/test/web/admin_api/controllers/invite_token_controller_test.exs index eb57b4d44..cb486f4d1 100644 --- a/test/web/admin_api/controllers/invite_token_controller_test.exs +++ b/test/web/admin_api/controllers/invite_token_controller_test.exs @@ -32,12 +32,14 @@ test "sends invitation and returns 204", %{admin: admin, conn: conn} do recipient_name = "J. D." conn = - post( - conn, - "/api/pleroma/admin/users/email_invite?email=#{recipient_email}&name=#{recipient_name}" - ) + conn + |> put_req_header("content-type", "application/json;charset=utf-8") + |> post("/api/pleroma/admin/users/email_invite", %{ + email: recipient_email, + name: recipient_name + }) - assert json_response(conn, :no_content) + assert json_response_and_validate_schema(conn, :no_content) token_record = List.last(Repo.all(Pleroma.UserInviteToken)) assert token_record @@ -69,7 +71,11 @@ test "it returns 403 if requested by a non-admin" do build_conn() |> assign(:user, non_admin_user) |> assign(:token, token) - |> post("/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD") + |> put_req_header("content-type", "application/json;charset=utf-8") + |> post("/api/pleroma/admin/users/email_invite", %{ + email: "foo@bar.com", + name: "JD" + }) assert json_response(conn, :forbidden) end @@ -80,7 +86,7 @@ test "email with +", %{conn: conn, admin: admin} do conn |> put_req_header("content-type", "application/json;charset=utf-8") |> post("/api/pleroma/admin/users/email_invite", %{email: recipient_email}) - |> json_response(:no_content) + |> json_response_and_validate_schema(:no_content) token_record = Pleroma.UserInviteToken @@ -116,9 +122,15 @@ test "it returns 500 if `invites_enabled` is not enabled", %{conn: conn} do Config.put([:instance, :registrations_open], false) Config.put([:instance, :invites_enabled], false) - conn = post(conn, "/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD") + conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/pleroma/admin/users/email_invite", %{ + email: "foo@bar.com", + name: "JD" + }) - assert json_response(conn, :bad_request) == + assert json_response_and_validate_schema(conn, :bad_request) == %{ "error" => "To send invites you need to set the `invites_enabled` option to true." @@ -129,9 +141,15 @@ test "it returns 500 if `registrations_open` is enabled", %{conn: conn} do Config.put([:instance, :registrations_open], true) Config.put([:instance, :invites_enabled], true) - conn = post(conn, "/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD") + conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/pleroma/admin/users/email_invite", %{ + email: "foo@bar.com", + name: "JD" + }) - assert json_response(conn, :bad_request) == + assert json_response_and_validate_schema(conn, :bad_request) == %{ "error" => "To send invites you need to set the `registrations_open` option to false." @@ -141,9 +159,12 @@ test "it returns 500 if `registrations_open` is enabled", %{conn: conn} do describe "POST /api/pleroma/admin/users/invite_token" do test "without options", %{conn: conn} do - conn = post(conn, "/api/pleroma/admin/users/invite_token") + conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/pleroma/admin/users/invite_token") - invite_json = json_response(conn, 200) + invite_json = json_response_and_validate_schema(conn, 200) invite = UserInviteToken.find_by_token!(invite_json["token"]) refute invite.used refute invite.expires_at @@ -153,11 +174,13 @@ test "without options", %{conn: conn} do test "with expires_at", %{conn: conn} do conn = - post(conn, "/api/pleroma/admin/users/invite_token", %{ + conn + |> put_req_header("content-type", "application/json") + |> post("/api/pleroma/admin/users/invite_token", %{ "expires_at" => Date.to_string(Date.utc_today()) }) - invite_json = json_response(conn, 200) + invite_json = json_response_and_validate_schema(conn, 200) invite = UserInviteToken.find_by_token!(invite_json["token"]) refute invite.used @@ -167,9 +190,12 @@ test "with expires_at", %{conn: conn} do end test "with max_use", %{conn: conn} do - conn = post(conn, "/api/pleroma/admin/users/invite_token", %{"max_use" => 150}) + conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/pleroma/admin/users/invite_token", %{"max_use" => 150}) - invite_json = json_response(conn, 200) + invite_json = json_response_and_validate_schema(conn, 200) invite = UserInviteToken.find_by_token!(invite_json["token"]) refute invite.used refute invite.expires_at @@ -179,12 +205,14 @@ test "with max_use", %{conn: conn} do test "with max use and expires_at", %{conn: conn} do conn = - post(conn, "/api/pleroma/admin/users/invite_token", %{ + conn + |> put_req_header("content-type", "application/json") + |> post("/api/pleroma/admin/users/invite_token", %{ "max_use" => 150, "expires_at" => Date.to_string(Date.utc_today()) }) - invite_json = json_response(conn, 200) + invite_json = json_response_and_validate_schema(conn, 200) invite = UserInviteToken.find_by_token!(invite_json["token"]) refute invite.used assert invite.expires_at == Date.utc_today() @@ -197,7 +225,7 @@ test "with max use and expires_at", %{conn: conn} do test "no invites", %{conn: conn} do conn = get(conn, "/api/pleroma/admin/users/invites") - assert json_response(conn, 200) == %{"invites" => []} + assert json_response_and_validate_schema(conn, 200) == %{"invites" => []} end test "with invite", %{conn: conn} do @@ -205,7 +233,7 @@ test "with invite", %{conn: conn} do conn = get(conn, "/api/pleroma/admin/users/invites") - assert json_response(conn, 200) == %{ + assert json_response_and_validate_schema(conn, 200) == %{ "invites" => [ %{ "expires_at" => nil, @@ -225,9 +253,12 @@ test "with invite", %{conn: conn} do test "with token", %{conn: conn} do {:ok, invite} = UserInviteToken.create_invite() - conn = post(conn, "/api/pleroma/admin/users/revoke_invite", %{"token" => invite.token}) + conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/pleroma/admin/users/revoke_invite", %{"token" => invite.token}) - assert json_response(conn, 200) == %{ + assert json_response_and_validate_schema(conn, 200) == %{ "expires_at" => nil, "id" => invite.id, "invite_type" => "one_time", @@ -239,9 +270,12 @@ test "with token", %{conn: conn} do end test "with invalid token", %{conn: conn} do - conn = post(conn, "/api/pleroma/admin/users/revoke_invite", %{"token" => "foo"}) + conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/pleroma/admin/users/revoke_invite", %{"token" => "foo"}) - assert json_response(conn, :not_found) == %{"error" => "Not found"} + assert json_response_and_validate_schema(conn, :not_found) == %{"error" => "Not found"} end end end From fca48154a23c0b38d514b2bc4d49a74274e02a8f Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 26 May 2020 15:21:33 +0400 Subject: [PATCH 17/65] Add AdminAPI.InviteView --- ...ken_controller.ex => invite_controller.ex} | 29 +++++++++---------- .../web/admin_api/views/account_view.ex | 18 ------------ .../web/admin_api/views/invite_view.ex | 25 ++++++++++++++++ ...token_operation.ex => invite_operation.ex} | 10 +++---- lib/pleroma/web/router.ex | 8 ++--- ...er_test.exs => invite_controller_test.exs} | 2 +- 6 files changed, 49 insertions(+), 43 deletions(-) rename lib/pleroma/web/admin_api/controllers/{invite_token_controller.ex => invite_controller.ex} (79%) create mode 100644 lib/pleroma/web/admin_api/views/invite_view.ex rename lib/pleroma/web/api_spec/operations/admin/{invite_token_operation.ex => invite_operation.ex} (93%) rename test/web/admin_api/controllers/{invite_token_controller_test.exs => invite_controller_test.exs} (99%) diff --git a/lib/pleroma/web/admin_api/controllers/invite_token_controller.ex b/lib/pleroma/web/admin_api/controllers/invite_controller.ex similarity index 79% rename from lib/pleroma/web/admin_api/controllers/invite_token_controller.ex rename to lib/pleroma/web/admin_api/controllers/invite_controller.ex index a09966e5c..7d169b8d2 100644 --- a/lib/pleroma/web/admin_api/controllers/invite_token_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/invite_controller.ex @@ -2,7 +2,7 @@ # Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.Web.AdminAPI.InviteTokenController do +defmodule Pleroma.Web.AdminAPI.InviteController do use Pleroma.Web, :controller import Pleroma.Web.ControllerHelper, only: [json_response: 3] @@ -10,7 +10,6 @@ defmodule Pleroma.Web.AdminAPI.InviteTokenController do alias Pleroma.Config alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.UserInviteToken - alias Pleroma.Web.AdminAPI.AccountView require Logger @@ -24,33 +23,30 @@ defmodule Pleroma.Web.AdminAPI.InviteTokenController do action_fallback(Pleroma.Web.AdminAPI.FallbackController) - defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.InviteTokenOperation + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.InviteOperation @doc "Get list of created invites" def index(conn, _params) do invites = UserInviteToken.list_invites() - conn - |> put_view(AccountView) - |> render("invites.json", %{invites: invites}) + render(conn, "index.json", invites: invites) end @doc "Create an account registration invite token" def create(%{body_params: params} = conn, _) do {:ok, invite} = UserInviteToken.create_invite(params) - json(conn, AccountView.render("invite.json", %{invite: invite})) + render(conn, "show.json", invite: invite) end @doc "Revokes invite by token" def revoke(%{body_params: %{token: token}} = conn, _) do with {:ok, invite} <- UserInviteToken.find_by_token(token), {:ok, updated_invite} = UserInviteToken.update_invite(invite, %{used: true}) do - conn - |> put_view(AccountView) - |> render("invite.json", %{invite: updated_invite}) + render(conn, "show.json", invite: updated_invite) else nil -> {:error, :not_found} + error -> error end end @@ -59,14 +55,14 @@ def email(%{assigns: %{user: user}, body_params: %{email: email} = params} = con with {_, false} <- {:registrations_open, Config.get([:instance, :registrations_open])}, {_, true} <- {:invites_enabled, Config.get([:instance, :invites_enabled])}, {:ok, invite_token} <- UserInviteToken.create_invite(), - email <- - Pleroma.Emails.UserEmail.user_invitation_email( - user, + {:ok, _} <- + user + |> Pleroma.Emails.UserEmail.user_invitation_email( invite_token, email, params[:name] - ), - {:ok, _} <- Pleroma.Emails.Mailer.deliver(email) do + ) + |> Pleroma.Emails.Mailer.deliver() do json_response(conn, :no_content, "") else {:registrations_open, _} -> @@ -74,6 +70,9 @@ def email(%{assigns: %{user: user}, body_params: %{email: email} = params} = con {:invites_enabled, _} -> {:error, "To send invites you need to set the `invites_enabled` option to true."} + + {:error, error} -> + {:error, error} end end end diff --git a/lib/pleroma/web/admin_api/views/account_view.ex b/lib/pleroma/web/admin_api/views/account_view.ex index 46dadb5ee..120159527 100644 --- a/lib/pleroma/web/admin_api/views/account_view.ex +++ b/lib/pleroma/web/admin_api/views/account_view.ex @@ -80,24 +80,6 @@ def render("show.json", %{user: user}) do } end - def render("invite.json", %{invite: invite}) do - %{ - "id" => invite.id, - "token" => invite.token, - "used" => invite.used, - "expires_at" => invite.expires_at, - "uses" => invite.uses, - "max_use" => invite.max_use, - "invite_type" => invite.invite_type - } - end - - def render("invites.json", %{invites: invites}) do - %{ - invites: render_many(invites, AccountView, "invite.json", as: :invite) - } - end - def render("created.json", %{user: user}) do %{ type: "success", diff --git a/lib/pleroma/web/admin_api/views/invite_view.ex b/lib/pleroma/web/admin_api/views/invite_view.ex new file mode 100644 index 000000000..f93cb6916 --- /dev/null +++ b/lib/pleroma/web/admin_api/views/invite_view.ex @@ -0,0 +1,25 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.InviteView do + use Pleroma.Web, :view + + def render("index.json", %{invites: invites}) do + %{ + invites: render_many(invites, __MODULE__, "show.json", as: :invite) + } + end + + def render("show.json", %{invite: invite}) do + %{ + "id" => invite.id, + "token" => invite.token, + "used" => invite.used, + "expires_at" => invite.expires_at, + "uses" => invite.uses, + "max_use" => invite.max_use, + "invite_type" => invite.invite_type + } + end +end diff --git a/lib/pleroma/web/api_spec/operations/admin/invite_token_operation.ex b/lib/pleroma/web/api_spec/operations/admin/invite_operation.ex similarity index 93% rename from lib/pleroma/web/api_spec/operations/admin/invite_token_operation.ex rename to lib/pleroma/web/api_spec/operations/admin/invite_operation.ex index 0f7403f26..4ae44fff6 100644 --- a/lib/pleroma/web/api_spec/operations/admin/invite_token_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/invite_operation.ex @@ -2,7 +2,7 @@ # Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.Web.ApiSpec.Admin.InviteTokenOperation do +defmodule Pleroma.Web.ApiSpec.Admin.InviteOperation do alias OpenApiSpex.Operation alias OpenApiSpex.Schema alias Pleroma.Web.ApiSpec.Schemas.ApiError @@ -18,7 +18,7 @@ def index_operation do %Operation{ tags: ["Admin", "Invites"], summary: "Get a list of generated invites", - operationId: "AdminAPI.InviteTokenController.index", + operationId: "AdminAPI.InviteController.index", security: [%{"oAuth" => ["read:invites"]}], responses: %{ 200 => @@ -49,7 +49,7 @@ def create_operation do %Operation{ tags: ["Admin", "Invites"], summary: "Create an account registration invite token", - operationId: "AdminAPI.InviteTokenController.create", + operationId: "AdminAPI.InviteController.create", security: [%{"oAuth" => ["write:invites"]}], requestBody: request_body("Parameters", %Schema{ @@ -69,7 +69,7 @@ def revoke_operation do %Operation{ tags: ["Admin", "Invites"], summary: "Revoke invite by token", - operationId: "AdminAPI.InviteTokenController.revoke", + operationId: "AdminAPI.InviteController.revoke", security: [%{"oAuth" => ["write:invites"]}], requestBody: request_body( @@ -95,7 +95,7 @@ def email_operation do %Operation{ tags: ["Admin", "Invites"], summary: "Sends registration invite via email", - operationId: "AdminAPI.InviteTokenController.email", + operationId: "AdminAPI.InviteController.email", security: [%{"oAuth" => ["write:invites"]}], requestBody: request_body( diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index fe36f0189..9b7c7ee3d 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -164,10 +164,10 @@ defmodule Pleroma.Web.Router do post("/relay", AdminAPIController, :relay_follow) delete("/relay", AdminAPIController, :relay_unfollow) - post("/users/invite_token", InviteTokenController, :create) - get("/users/invites", InviteTokenController, :index) - post("/users/revoke_invite", InviteTokenController, :revoke) - post("/users/email_invite", InviteTokenController, :email) + post("/users/invite_token", InviteController, :create) + get("/users/invites", InviteController, :index) + post("/users/revoke_invite", InviteController, :revoke) + post("/users/email_invite", InviteController, :email) get("/users/:nickname/password_reset", AdminAPIController, :get_password_reset) patch("/users/force_password_reset", AdminAPIController, :force_password_reset) diff --git a/test/web/admin_api/controllers/invite_token_controller_test.exs b/test/web/admin_api/controllers/invite_controller_test.exs similarity index 99% rename from test/web/admin_api/controllers/invite_token_controller_test.exs rename to test/web/admin_api/controllers/invite_controller_test.exs index cb486f4d1..ab186c5e7 100644 --- a/test/web/admin_api/controllers/invite_token_controller_test.exs +++ b/test/web/admin_api/controllers/invite_controller_test.exs @@ -2,7 +2,7 @@ # Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.Web.AdminAPI.InviteTokenControllerTest do +defmodule Pleroma.Web.AdminAPI.InviteControllerTest do use Pleroma.Web.ConnCase, async: true import Pleroma.Factory From 51bc6674f6a9b6794ba981052a1e432915beaef7 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 26 May 2020 13:45:54 +0200 Subject: [PATCH 18/65] Mastodon API Controllers: Use the correct params for rate limiting. --- .../web/mastodon_api/controllers/account_controller.ex | 2 +- lib/pleroma/web/mastodon_api/controllers/status_controller.ex | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 75512442d..47649d41d 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -81,7 +81,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do plug( RateLimiter, - [name: :relation_id_action, params: ["id", "uri"]] when action in @relationship_actions + [name: :relation_id_action, params: [:id, :uri]] when action in @relationship_actions ) plug(RateLimiter, [name: :relations_actions] when action in @relationship_actions) diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex index 83d997abd..f20157a5f 100644 --- a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex @@ -84,13 +84,13 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do plug( RateLimiter, - [name: :status_id_action, bucket_name: "status_id_action:reblog_unreblog", params: ["id"]] + [name: :status_id_action, bucket_name: "status_id_action:reblog_unreblog", params: [:id]] when action in ~w(reblog unreblog)a ) plug( RateLimiter, - [name: :status_id_action, bucket_name: "status_id_action:fav_unfav", params: ["id"]] + [name: :status_id_action, bucket_name: "status_id_action:fav_unfav", params: [:id]] when action in ~w(favourite unfavourite)a ) From 2069ec5006b9142b784dc6ab8b190838481dfe5b Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 26 May 2020 16:11:42 +0400 Subject: [PATCH 19/65] Fix Oban warnings --- lib/pleroma/workers/cron/clear_oauth_token_worker.ex | 2 ++ lib/pleroma/workers/cron/digest_emails_worker.ex | 2 ++ lib/pleroma/workers/cron/new_users_digest_worker.ex | 4 ++++ lib/pleroma/workers/cron/purge_expired_activities_worker.ex | 2 ++ 4 files changed, 10 insertions(+) diff --git a/lib/pleroma/workers/cron/clear_oauth_token_worker.ex b/lib/pleroma/workers/cron/clear_oauth_token_worker.ex index 341eff054..a4c3b9516 100644 --- a/lib/pleroma/workers/cron/clear_oauth_token_worker.ex +++ b/lib/pleroma/workers/cron/clear_oauth_token_worker.ex @@ -16,6 +16,8 @@ defmodule Pleroma.Workers.Cron.ClearOauthTokenWorker do def perform(_opts, _job) do if Config.get([:oauth2, :clean_expired_tokens], false) do Token.delete_expired_tokens() + else + :ok end end end diff --git a/lib/pleroma/workers/cron/digest_emails_worker.ex b/lib/pleroma/workers/cron/digest_emails_worker.ex index dd13c3b17..7f09ff3cf 100644 --- a/lib/pleroma/workers/cron/digest_emails_worker.ex +++ b/lib/pleroma/workers/cron/digest_emails_worker.ex @@ -37,6 +37,8 @@ def perform(_opts, _job) do ) |> Repo.all() |> send_emails + else + :ok end end diff --git a/lib/pleroma/workers/cron/new_users_digest_worker.ex b/lib/pleroma/workers/cron/new_users_digest_worker.ex index 9bd0a5621..5c816b3fe 100644 --- a/lib/pleroma/workers/cron/new_users_digest_worker.ex +++ b/lib/pleroma/workers/cron/new_users_digest_worker.ex @@ -55,7 +55,11 @@ def perform(_args, _job) do |> Repo.all() |> Enum.map(&Pleroma.Emails.NewUsersDigestEmail.new_users(&1, users_and_statuses)) |> Enum.each(&Pleroma.Emails.Mailer.deliver/1) + else + :ok end + else + :ok end end end diff --git a/lib/pleroma/workers/cron/purge_expired_activities_worker.ex b/lib/pleroma/workers/cron/purge_expired_activities_worker.ex index b8953dd7f..84b3b84de 100644 --- a/lib/pleroma/workers/cron/purge_expired_activities_worker.ex +++ b/lib/pleroma/workers/cron/purge_expired_activities_worker.ex @@ -23,6 +23,8 @@ defmodule Pleroma.Workers.Cron.PurgeExpiredActivitiesWorker do def perform(_opts, _job) do if Config.get([ActivityExpiration, :enabled]) do Enum.each(ActivityExpiration.due_expirations(@interval), &delete_activity/1) + else + :ok end end From 337ca33e5e4a84885eee3abd2de529663c27f1f1 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 26 May 2020 16:00:56 +0200 Subject: [PATCH 20/65] Config: Restore old new background image Became lost in a settings restructure --- config/config.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.exs b/config/config.exs index 7385fb6c3..d15998715 100644 --- a/config/config.exs +++ b/config/config.exs @@ -274,7 +274,7 @@ config :pleroma, :frontend_configurations, pleroma_fe: %{ alwaysShowSubjectInput: true, - background: "/static/aurora_borealis.jpg", + background: "/images/city.jpg", collapseMessageWithSubject: false, disableChat: false, greentext: false, From acba7043be4256976b4026e1b331c38842ec0e86 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 26 May 2020 16:46:57 +0200 Subject: [PATCH 21/65] Migrations: Add index on client_id and client_secret for apps. Greatly speeds up app lookup. --- priv/repo/migrations/20200526144426_add_apps_indexes.exs | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 priv/repo/migrations/20200526144426_add_apps_indexes.exs diff --git a/priv/repo/migrations/20200526144426_add_apps_indexes.exs b/priv/repo/migrations/20200526144426_add_apps_indexes.exs new file mode 100644 index 000000000..5cb6a0473 --- /dev/null +++ b/priv/repo/migrations/20200526144426_add_apps_indexes.exs @@ -0,0 +1,7 @@ +defmodule Pleroma.Repo.Migrations.AddAppsIndexes do + use Ecto.Migration + + def change do + create(index(:apps, [:client_id, :client_secret])) + end +end From d8d99fd4cf56b4e3adb17c75062a08ec3fdebb89 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 26 May 2020 17:46:16 +0200 Subject: [PATCH 22/65] Activity.Queries: Use correct actor restriction. --- lib/pleroma/activity/queries.ex | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/pleroma/activity/queries.ex b/lib/pleroma/activity/queries.ex index a34c20343..c99aae44b 100644 --- a/lib/pleroma/activity/queries.ex +++ b/lib/pleroma/activity/queries.ex @@ -24,10 +24,7 @@ def by_ap_id(query \\ Activity, ap_id) do @spec by_actor(query, String.t()) :: query def by_actor(query \\ Activity, actor) do - from( - activity in query, - where: fragment("(?)->>'actor' = ?", activity.data, ^actor) - ) + from(a in query, where: a.actor == ^actor) end @spec by_author(query, User.t()) :: query From 3249141588c8f73f1958f782041798fbde05e69f Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 27 May 2020 09:42:28 +0300 Subject: [PATCH 23/65] validate actor type --- docs/API/admin_api.md | 18 +++++++++- lib/pleroma/user.ex | 5 +-- .../controllers/admin_api_controller.ex | 13 ++++--- .../controllers/admin_api_controller_test.exs | 35 ++++++++++++++++--- 4 files changed, 60 insertions(+), 11 deletions(-) diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index c455047cc..639c3224d 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -511,7 +511,23 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret - `discoverable` - `actor_type` -- Response: none (code `200`) +- Response: + +```json +{"status": "success"} +``` + +```json +{"errors": + {"actor_type": "is invalid"}, + {"email": "has invalid format"}, + ... + } +``` + +```json +{"error": "Unable to update user."} +``` ## `GET /api/pleroma/admin/reports` diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 842b28c06..2684e1139 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -538,9 +538,10 @@ def update_as_admin_changeset(struct, params) do |> delete_change(:also_known_as) |> unique_constraint(:email) |> validate_format(:email, @email_regex) + |> validate_inclusion(:actor_type, ["Person", "Service"]) end - @spec update_as_admin(%User{}, map) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()} + @spec update_as_admin(User.t(), map()) :: {:ok, User.t()} | {:error, Changeset.t()} def update_as_admin(user, params) do params = Map.put(params, "password_confirmation", params["password"]) changeset = update_as_admin_changeset(user, params) @@ -561,7 +562,7 @@ def password_update_changeset(struct, params) do |> put_change(:password_reset_pending, false) end - @spec reset_password(User.t(), map) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()} + @spec reset_password(User.t(), map()) :: {:ok, User.t()} | {:error, Changeset.t()} def reset_password(%User{} = user, params) do reset_password(user, user, params) end diff --git a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex index 6b1d64a2e..6aedccec6 100644 --- a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex @@ -693,7 +693,7 @@ def update_user_credentials( %{assigns: %{user: admin}} = conn, %{"nickname" => nickname} = params ) do - with {_, user} <- {:user, User.get_cached_by_nickname(nickname)}, + with {_, %User{} = user} <- {:user, User.get_cached_by_nickname(nickname)}, {:ok, _user} <- User.update_as_admin(user, params) do ModerationLog.insert_log(%{ @@ -715,11 +715,16 @@ def update_user_credentials( json(conn, %{status: "success"}) else {:error, changeset} -> - {_, {error, _}} = Enum.at(changeset.errors, 0) - json(conn, %{error: "New password #{error}."}) + errors = + Enum.reduce(changeset.errors, %{}, fn + {key, {error, _}}, acc -> + Map.put(acc, key, error) + end) + + json(conn, %{errors: errors}) _ -> - json(conn, %{error: "Unable to change password."}) + json(conn, %{error: "Unable to update user."}) end end diff --git a/test/web/admin_api/controllers/admin_api_controller_test.exs b/test/web/admin_api/controllers/admin_api_controller_test.exs index 321840a8c..ead840186 100644 --- a/test/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/web/admin_api/controllers/admin_api_controller_test.exs @@ -3191,8 +3191,12 @@ test "returns 403 if requested by a non-admin" do end describe "PATCH /users/:nickname/credentials" do - test "changes password and email", %{conn: conn, admin: admin} do + setup do user = insert(:user) + [user: user] + end + + test "changes password and email", %{conn: conn, admin: admin, user: user} do assert user.password_reset_pending == false conn = @@ -3222,9 +3226,7 @@ test "changes password and email", %{conn: conn, admin: admin} do "@#{admin.nickname} forced password reset for users: @#{user.nickname}" end - test "returns 403 if requested by a non-admin" do - user = insert(:user) - + test "returns 403 if requested by a non-admin", %{user: user} do conn = build_conn() |> assign(:user, user) @@ -3236,6 +3238,31 @@ test "returns 403 if requested by a non-admin" do assert json_response(conn, :forbidden) end + + test "changes actor type from permitted list", %{conn: conn, user: user} do + assert user.actor_type == "Person" + + assert patch(conn, "/api/pleroma/admin/users/#{user.nickname}/credentials", %{ + "actor_type" => "Service" + }) + |> json_response(200) == %{"status" => "success"} + + updated_user = User.get_by_id(user.id) + + assert updated_user.actor_type == "Service" + + assert patch(conn, "/api/pleroma/admin/users/#{user.nickname}/credentials", %{ + "actor_type" => "Application" + }) + |> json_response(200) == %{"errors" => %{"actor_type" => "is invalid"}} + end + + test "update non existing user", %{conn: conn} do + assert patch(conn, "/api/pleroma/admin/users/non-existing/credentials", %{ + "password" => "new_password" + }) + |> json_response(200) == %{"error" => "Unable to update user."} + end end describe "PATCH /users/:nickname/force_password_reset" do From 7e13200869a41647f25bdcf416ecd36ff09219bc Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 27 May 2020 09:46:12 +0200 Subject: [PATCH 24/65] ActivityPub: Change ordering to `nulls last` in favorites query This makes it use our existing index and speeds up the query. --- lib/pleroma/web/activity_pub/activity_pub.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 0fe71694a..b8a2873d8 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1158,7 +1158,7 @@ def fetch_favourites(user, params \\ %{}, pagination \\ :keyset) do |> Activity.with_joined_object() |> Object.with_joined_activity() |> select([_like, object, activity], %{activity | object: object}) - |> order_by([like, _, _], desc: like.id) + |> order_by([like, _, _], desc_nulls_last: like.id) |> Pagination.fetch_paginated( Map.merge(params, %{"skip_order" => true}), pagination, From b8e029b5ea33c9267ac26ab7ba598f1cd7be46c2 Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 27 May 2020 12:41:06 +0200 Subject: [PATCH 25/65] Notification: Actually preload objects. --- lib/pleroma/notification.ex | 15 +++------------ test/notification_test.exs | 11 +++++++---- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 8aa9ed2d4..fb16ec896 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -92,8 +92,9 @@ def for_user_query(user, opts \\ %{}) do |> join(:left, [n, a], object in Object, on: fragment( - "(?->>'id') = COALESCE((? -> 'object'::text) ->> 'id'::text)", + "(?->>'id') = COALESCE(?->'object'->>'id', ?->>'object')", object.data, + a.data, a.data ) ) @@ -224,18 +225,8 @@ def set_read_up_to(%{id: user_id} = user, id) do |> Marker.multi_set_last_read_id(user, "notifications") |> Repo.transaction() - Notification + for_user_query(user) |> where([n], n.id in ^notification_ids) - |> join(:inner, [n], activity in assoc(n, :activity)) - |> join(:left, [n, a], object in Object, - on: - fragment( - "(?->>'id') = COALESCE((? -> 'object'::text) ->> 'id'::text)", - object.data, - a.data - ) - ) - |> preload([n, a, o], activity: {a, object: o}) |> Repo.all() end diff --git a/test/notification_test.exs b/test/notification_test.exs index 3a96721fa..37c255fee 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -454,8 +454,7 @@ test "it sets all notifications as read up to a specified notification ID" do status: "hey again @#{other_user.nickname}!" }) - [n2, n1] = notifs = Notification.for_user(other_user) - assert length(notifs) == 2 + [n2, n1] = Notification.for_user(other_user) assert n2.id > n1.id @@ -464,7 +463,9 @@ test "it sets all notifications as read up to a specified notification ID" do status: "hey yet again @#{other_user.nickname}!" }) - Notification.set_read_up_to(other_user, n2.id) + [_, read_notification] = Notification.set_read_up_to(other_user, n2.id) + + assert read_notification.activity.object [n3, n2, n1] = Notification.for_user(other_user) @@ -972,7 +973,9 @@ test "it returns notifications for muted user without notifications" do {:ok, _activity} = CommonAPI.post(muted, %{status: "hey @#{user.nickname}"}) - assert length(Notification.for_user(user)) == 1 + [notification] = Notification.for_user(user) + + assert notification.activity.object end test "it doesn't return notifications for muted user with notifications" do From c6290be682bd12b1772153d421f36e5ddb9d664b Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 27 May 2020 14:42:21 +0400 Subject: [PATCH 26/65] Fix typo --- lib/pleroma/web/api_spec/operations/admin/invite_operation.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/operations/admin/invite_operation.ex b/lib/pleroma/web/api_spec/operations/admin/invite_operation.ex index 4ae44fff6..d3af9db49 100644 --- a/lib/pleroma/web/api_spec/operations/admin/invite_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/invite_operation.ex @@ -22,7 +22,7 @@ def index_operation do security: [%{"oAuth" => ["read:invites"]}], responses: %{ 200 => - Operation.response("Intites", "application/json", %Schema{ + Operation.response("Invites", "application/json", %Schema{ type: :object, properties: %{ invites: %Schema{type: :array, items: invite()} From 047a11c48f2bc88b6b278b6a5acd94807c7e5138 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 27 May 2020 10:55:42 +0000 Subject: [PATCH 27/65] Apply suggestion to lib/pleroma/web/admin_api/controllers/admin_api_controller.ex --- .../web/admin_api/controllers/admin_api_controller.ex | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex index 6aedccec6..783203c07 100644 --- a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex @@ -715,11 +715,7 @@ def update_user_credentials( json(conn, %{status: "success"}) else {:error, changeset} -> - errors = - Enum.reduce(changeset.errors, %{}, fn - {key, {error, _}}, acc -> - Map.put(acc, key, error) - end) + errors = Map.new(changeset.errors, fn {key, {error, _}} -> {key, error} end) json(conn, %{errors: errors}) From 73f222d76a03e7bfad1aae80e0dc9d2777a94f3e Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 27 May 2020 12:56:15 +0200 Subject: [PATCH 28/65] Migrations: Make user_id index on notifications better for query. --- .../20200527104138_change_notification_user_index.exs | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 priv/repo/migrations/20200527104138_change_notification_user_index.exs diff --git a/priv/repo/migrations/20200527104138_change_notification_user_index.exs b/priv/repo/migrations/20200527104138_change_notification_user_index.exs new file mode 100644 index 000000000..4dcfe6de9 --- /dev/null +++ b/priv/repo/migrations/20200527104138_change_notification_user_index.exs @@ -0,0 +1,8 @@ +defmodule Pleroma.Repo.Migrations.ChangeNotificationUserIndex do + use Ecto.Migration + + def change do + drop_if_exists(index(:notifications, [:user_id])) + create_if_not_exists(index(:notifications, [:user_id, "id desc nulls last"])) + end +end From 48fd9be65ae2c25e170e494720a07c126e80e2f6 Mon Sep 17 00:00:00 2001 From: kPherox Date: Tue, 26 May 2020 09:47:03 +0000 Subject: [PATCH 29/65] Exclude post actor from to of relay announce --- lib/pleroma/web/activity_pub/builder.ex | 16 +++++++++++----- test/web/activity_pub/relay_test.exs | 1 + 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/pleroma/web/activity_pub/builder.ex b/lib/pleroma/web/activity_pub/builder.ex index 7ece764f5..51b74414a 100644 --- a/lib/pleroma/web/activity_pub/builder.ex +++ b/lib/pleroma/web/activity_pub/builder.ex @@ -7,6 +7,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do alias Pleroma.Object alias Pleroma.User + alias Pleroma.Web.ActivityPub.Relay alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Visibility @@ -85,15 +86,20 @@ def like(actor, object) do end end + @spec announce(User.t(), Object.t(), keyword()) :: {:ok, map(), keyword()} def announce(actor, object, options \\ []) do public? = Keyword.get(options, :public, false) - to = [actor.follower_address, object.data["actor"]] to = - if public? do - [Pleroma.Constants.as_public() | to] - else - to + cond do + actor.ap_id == Relay.relay_ap_id() -> + [actor.follower_address] + + public? -> + [actor.follower_address, object.data["actor"], Pleroma.Constants.as_public()] + + true -> + [actor.follower_address, object.data["actor"]] end {:ok, diff --git a/test/web/activity_pub/relay_test.exs b/test/web/activity_pub/relay_test.exs index dbee8a0f4..b3b573c9b 100644 --- a/test/web/activity_pub/relay_test.exs +++ b/test/web/activity_pub/relay_test.exs @@ -108,6 +108,7 @@ test "returns error when object is unknown" do assert {:ok, %Activity{} = activity} = Relay.publish(note) assert activity.data["type"] == "Announce" assert activity.data["actor"] == service_actor.ap_id + assert activity.data["to"] == [service_actor.follower_address] assert called(Pleroma.Web.Federator.publish(activity)) end From 78c46fb7ba2aa9e9842d3c7d8331488fd10a3b9d Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 27 May 2020 19:34:56 +0300 Subject: [PATCH 30/65] MediaProxy test: use config macros instead of directly putting values They were not properly cleaned later and caused trouble for another tests --- test/web/media_proxy/media_proxy_test.exs | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/test/web/media_proxy/media_proxy_test.exs b/test/web/media_proxy/media_proxy_test.exs index 69c2d5dae..69d2a71a6 100644 --- a/test/web/media_proxy/media_proxy_test.exs +++ b/test/web/media_proxy/media_proxy_test.exs @@ -124,15 +124,7 @@ test "encoded url are tried to match for proxy as `conn.request_path` encodes th end test "uses the configured base_url" do - base_url = Pleroma.Config.get([:media_proxy, :base_url]) - - if base_url do - on_exit(fn -> - Pleroma.Config.put([:media_proxy, :base_url], base_url) - end) - end - - Pleroma.Config.put([:media_proxy, :base_url], "https://cache.pleroma.social") + clear_config([:media_proxy, :base_url], "https://cache.pleroma.social") url = "https://pleroma.soykaf.com/static/logo.png" encoded = url(url) @@ -213,8 +205,8 @@ test "mediaproxy whitelist" do end test "does not change whitelisted urls" do - Pleroma.Config.put([:media_proxy, :whitelist], ["mycdn.akamai.com"]) - Pleroma.Config.put([:media_proxy, :base_url], "https://cache.pleroma.social") + clear_config([:media_proxy, :whitelist], ["mycdn.akamai.com"]) + clear_config([:media_proxy, :base_url], "https://cache.pleroma.social") media_url = "https://mycdn.akamai.com" From 8f6d428880721d4b0151991e7943706b70ab8005 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 27 May 2020 19:35:35 +0300 Subject: [PATCH 31/65] AccountView: Use mediaproxy URLs for emojis Also use atom keys in emoji maps instead of binaries Closes #1810 --- .../web/mastodon_api/views/account_view.ex | 12 ++++--- .../mastodon_api/views/account_view_test.exs | 35 ++++++++++++++++--- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 45fffaad2..04c419d2f 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -182,12 +182,14 @@ defp do_render("show.json", %{user: user} = opts) do bot = user.actor_type in ["Application", "Service"] emojis = - Enum.map(user.emoji, fn {shortcode, url} -> + Enum.map(user.emoji, fn {shortcode, raw_url} -> + url = MediaProxy.url(raw_url) + %{ - "shortcode" => shortcode, - "url" => url, - "static_url" => url, - "visible_in_picker" => false + shortcode: shortcode, + url: url, + static_url: url, + visible_in_picker: false } end) diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index 487ec26c2..f91333e5c 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -54,10 +54,10 @@ test "Represent a user account" do header_static: "http://localhost:4001/images/banner.png", emojis: [ %{ - "static_url" => "/file.png", - "url" => "/file.png", - "shortcode" => "karjalanpiirakka", - "visible_in_picker" => false + static_url: "/file.png", + url: "/file.png", + shortcode: "karjalanpiirakka", + visible_in_picker: false } ], fields: [], @@ -491,4 +491,31 @@ test "shows non-zero when historical unapproved requests are present" do AccountView.render("show.json", %{user: user, for: user}) end end + + test "uses mediaproxy urls when it's enabled" do + clear_config([:media_proxy, :enabled], true) + + user = + insert(:user, + avatar: %{"url" => [%{"href" => "https://evil.website/avatar.png"}]}, + banner: %{"url" => [%{"href" => "https://evil.website/banner.png"}]}, + emoji: %{"joker_smile" => "https://evil.website/society.png"} + ) + + AccountView.render("show.json", %{user: user}) + |> Enum.all?(fn + {key, url} when key in [:avatar, :avatar_static, :header, :header_static] -> + String.starts_with?(url, Pleroma.Web.base_url()) + + {:emojis, emojis} -> + Enum.all?(emojis, fn %{url: url, static_url: static_url} -> + String.starts_with?(url, Pleroma.Web.base_url()) && + String.starts_with?(static_url, Pleroma.Web.base_url()) + end) + + _ -> + true + end) + |> assert() + end end From 455a402c8a967b3a234c836b0574c4f011860d43 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 27 May 2020 20:27:30 +0300 Subject: [PATCH 32/65] HTTP Security plug: rewrite &csp_string/0 - Directives are now separated with ";" instead of " ;", according to https://www.w3.org/TR/CSP2/#policy-parsing the space is optional - Use an IO list, which at the end gets converted to a binary as opposed to ++ing a bunch of arrays with binaries together and joining them to a string. I doubt it gives any significant real world advantage, but the code is cleaner and now I can sleep at night. - The static part of csp is pre-joined to a single binary at compile time. Same reasoning as the last point. --- lib/pleroma/plugs/http_security_plug.ex | 52 ++++++++++++++----------- test/plugs/http_security_plug_test.exs | 2 +- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/lib/pleroma/plugs/http_security_plug.ex b/lib/pleroma/plugs/http_security_plug.ex index 6462797b6..f9aff2fab 100644 --- a/lib/pleroma/plugs/http_security_plug.ex +++ b/lib/pleroma/plugs/http_security_plug.ex @@ -31,7 +31,7 @@ defp headers do {"x-content-type-options", "nosniff"}, {"referrer-policy", referrer_policy}, {"x-download-options", "noopen"}, - {"content-security-policy", csp_string() <> ";"} + {"content-security-policy", csp_string()} ] if report_uri do @@ -43,23 +43,35 @@ defp headers do ] } - headers ++ [{"reply-to", Jason.encode!(report_group)}] + [{"reply-to", Jason.encode!(report_group)} | headers] else headers end end + @csp_start [ + "default-src 'none'", + "base-uri 'self'", + "frame-ancestors 'none'", + "style-src 'self' 'unsafe-inline'", + "font-src 'self'", + "manifest-src 'self'" + ] + |> Enum.join(";") + |> Kernel.<>(";") + |> List.wrap() + defp csp_string do scheme = Config.get([Pleroma.Web.Endpoint, :url])[:scheme] static_url = Pleroma.Web.Endpoint.static_url() websocket_url = Pleroma.Web.Endpoint.websocket_url() report_uri = Config.get([:http_security, :report_uri]) - connect_src = "connect-src 'self' #{static_url} #{websocket_url}" + connect_src = ["connect-src 'self' ", static_url, ?\s, websocket_url] connect_src = if Pleroma.Config.get(:env) == :dev do - connect_src <> " http://localhost:3035/" + [connect_src," http://localhost:3035/"] else connect_src end @@ -71,27 +83,23 @@ defp csp_string do "script-src 'self'" end - main_part = [ - "default-src 'none'", - "base-uri 'self'", - "frame-ancestors 'none'", - "img-src 'self' data: blob: https:", - "media-src 'self' https:", - "style-src 'self' 'unsafe-inline'", - "font-src 'self'", - "manifest-src 'self'", - connect_src, - script_src - ] + report = if report_uri, do: ["report-uri ", report_uri, ";report-to csp-endpoint"] + insecure = if scheme == "https", do: "upgrade-insecure-requests" - report = if report_uri, do: ["report-uri #{report_uri}; report-to csp-endpoint"], else: [] - - insecure = if scheme == "https", do: ["upgrade-insecure-requests"], else: [] - - (main_part ++ report ++ insecure) - |> Enum.join("; ") + @csp_start + |> add_csp_param("img-src 'self' data: blob: https:") + |> add_csp_param("media-src 'self' https:") + |> add_csp_param(connect_src) + |> add_csp_param(script_src) + |> add_csp_param(insecure) + |> add_csp_param(report) + |> :erlang.iolist_to_binary() end + defp add_csp_param(csp_iodata, nil), do: csp_iodata + + defp add_csp_param(csp_iodata, param), do: [[param, ?;] | csp_iodata] + def warn_if_disabled do unless Config.get([:http_security, :enabled]) do Logger.warn(" diff --git a/test/plugs/http_security_plug_test.exs b/test/plugs/http_security_plug_test.exs index 84e4c274f..63b4d3f31 100644 --- a/test/plugs/http_security_plug_test.exs +++ b/test/plugs/http_security_plug_test.exs @@ -67,7 +67,7 @@ test "it sends `report-to` & `report-uri` CSP response headers" do [csp] = Conn.get_resp_header(conn, "content-security-policy") - assert csp =~ ~r|report-uri https://endpoint.com; report-to csp-endpoint;| + assert csp =~ ~r|report-uri https://endpoint.com;report-to csp-endpoint;| [reply_to] = Conn.get_resp_header(conn, "reply-to") From 29ff6d414ba096e74e04264af895abcabcf580b4 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 27 May 2020 21:01:36 +0300 Subject: [PATCH 33/65] HTTP security plug: Harden img-src and media-src when MediaProxy is enabled --- lib/pleroma/plugs/http_security_plug.ex | 41 +++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/plugs/http_security_plug.ex b/lib/pleroma/plugs/http_security_plug.ex index f9aff2fab..df38d5022 100644 --- a/lib/pleroma/plugs/http_security_plug.ex +++ b/lib/pleroma/plugs/http_security_plug.ex @@ -67,11 +67,23 @@ defp csp_string do websocket_url = Pleroma.Web.Endpoint.websocket_url() report_uri = Config.get([:http_security, :report_uri]) + img_src = "img-src 'self' data: blob:" + media_src = "media-src 'self'" + + {img_src, media_src} = + if Config.get([:media_proxy, :enabled]) && + !Config.get([:media_proxy, :proxy_opts, :redirect_on_failure]) do + sources = get_proxy_and_attachment_sources() + {[img_src, sources], [media_src, sources]} + else + {img_src, media_src} + end + connect_src = ["connect-src 'self' ", static_url, ?\s, websocket_url] connect_src = if Pleroma.Config.get(:env) == :dev do - [connect_src," http://localhost:3035/"] + [connect_src, " http://localhost:3035/"] else connect_src end @@ -87,8 +99,8 @@ defp csp_string do insecure = if scheme == "https", do: "upgrade-insecure-requests" @csp_start - |> add_csp_param("img-src 'self' data: blob: https:") - |> add_csp_param("media-src 'self' https:") + |> add_csp_param(img_src) + |> add_csp_param(media_src) |> add_csp_param(connect_src) |> add_csp_param(script_src) |> add_csp_param(insecure) @@ -96,6 +108,29 @@ defp csp_string do |> :erlang.iolist_to_binary() end + defp get_proxy_and_attachment_sources do + media_proxy_whitelist = + Enum.reduce(Config.get([:media_proxy, :whitelist]), [], fn host, acc -> + add_source(acc, host) + end) + + upload_base_url = + if Config.get([Pleroma.Upload, :base_url]), + do: URI.parse(Config.get([Pleroma.Upload, :base_url])).host + + s3_endpoint = + if Config.get([Pleroma.Upload, :uploader]) == Pleroma.Uploaders.S3, + do: URI.parse(Config.get([Pleroma.Uploaders.S3, :public_endpoint])).host + + [] + |> add_source(upload_base_url) + |> add_source(s3_endpoint) + |> add_source(media_proxy_whitelist) + end + + defp add_source(iodata, nil), do: iodata + defp add_source(iodata, source), do: [[?\s, source] | iodata] + defp add_csp_param(csp_iodata, nil), do: csp_iodata defp add_csp_param(csp_iodata, param), do: [[param, ?;] | csp_iodata] From d28b9708d2713984a8852152deec5fa467be4862 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 27 May 2020 13:50:24 -0500 Subject: [PATCH 34/65] Update AdminFE build, re-enables emoji packs --- priv/static/adminfe/chunk-3384.2278f87c.css | Bin 5550 -> 0 bytes priv/static/adminfe/chunk-3384.d50ed383.css | Bin 0 -> 5605 bytes ...1.c4799067.css => chunk-7e30.f2b9674a.css} | Bin 23982 -> 23982 bytes priv/static/adminfe/chunk-e458.6c0703cb.css | Bin 0 -> 3863 bytes priv/static/adminfe/chunk-e458.f88bafea.css | Bin 3156 -> 0 bytes priv/static/adminfe/index.html | 2 +- priv/static/adminfe/static/js/app.0146039c.js | Bin 0 -> 190274 bytes .../adminfe/static/js/app.0146039c.js.map | Bin 0 -> 421137 bytes priv/static/adminfe/static/js/app.203f69f8.js | Bin 187722 -> 0 bytes .../adminfe/static/js/app.203f69f8.js.map | Bin 416278 -> 0 bytes .../adminfe/static/js/chunk-3384.458ffaf1.js | Bin 23953 -> 0 bytes .../static/js/chunk-3384.458ffaf1.js.map | Bin 85906 -> 0 bytes .../adminfe/static/js/chunk-3384.b2ebeeca.js | Bin 0 -> 24591 bytes .../static/js/chunk-3384.b2ebeeca.js.map | Bin 0 -> 86706 bytes .../adminfe/static/js/chunk-4011.67fb1692.js | Bin 117521 -> 0 bytes .../static/js/chunk-4011.67fb1692.js.map | Bin 397967 -> 0 bytes .../adminfe/static/js/chunk-7e30.ec42e302.js | Bin 0 -> 119434 bytes .../static/js/chunk-7e30.ec42e302.js.map | Bin 0 -> 403603 bytes .../adminfe/static/js/chunk-e458.4e5aad44.js | Bin 16756 -> 0 bytes .../static/js/chunk-e458.4e5aad44.js.map | Bin 55666 -> 0 bytes .../adminfe/static/js/chunk-e458.bb460d81.js | Bin 0 -> 17199 bytes .../static/js/chunk-e458.bb460d81.js.map | Bin 0 -> 57478 bytes ...untime.1b4f6ce0.js => runtime.b08eb412.js} | Bin 4032 -> 4032 bytes ...b4f6ce0.js.map => runtime.b08eb412.js.map} | Bin 16879 -> 16879 bytes 24 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 priv/static/adminfe/chunk-3384.2278f87c.css create mode 100644 priv/static/adminfe/chunk-3384.d50ed383.css rename priv/static/adminfe/{chunk-4011.c4799067.css => chunk-7e30.f2b9674a.css} (58%) create mode 100644 priv/static/adminfe/chunk-e458.6c0703cb.css delete mode 100644 priv/static/adminfe/chunk-e458.f88bafea.css create mode 100644 priv/static/adminfe/static/js/app.0146039c.js create mode 100644 priv/static/adminfe/static/js/app.0146039c.js.map delete mode 100644 priv/static/adminfe/static/js/app.203f69f8.js delete mode 100644 priv/static/adminfe/static/js/app.203f69f8.js.map delete mode 100644 priv/static/adminfe/static/js/chunk-3384.458ffaf1.js delete mode 100644 priv/static/adminfe/static/js/chunk-3384.458ffaf1.js.map create mode 100644 priv/static/adminfe/static/js/chunk-3384.b2ebeeca.js create mode 100644 priv/static/adminfe/static/js/chunk-3384.b2ebeeca.js.map delete mode 100644 priv/static/adminfe/static/js/chunk-4011.67fb1692.js delete mode 100644 priv/static/adminfe/static/js/chunk-4011.67fb1692.js.map create mode 100644 priv/static/adminfe/static/js/chunk-7e30.ec42e302.js create mode 100644 priv/static/adminfe/static/js/chunk-7e30.ec42e302.js.map delete mode 100644 priv/static/adminfe/static/js/chunk-e458.4e5aad44.js delete mode 100644 priv/static/adminfe/static/js/chunk-e458.4e5aad44.js.map create mode 100644 priv/static/adminfe/static/js/chunk-e458.bb460d81.js create mode 100644 priv/static/adminfe/static/js/chunk-e458.bb460d81.js.map rename priv/static/adminfe/static/js/{runtime.1b4f6ce0.js => runtime.b08eb412.js} (83%) rename priv/static/adminfe/static/js/{runtime.1b4f6ce0.js.map => runtime.b08eb412.js.map} (95%) diff --git a/priv/static/adminfe/chunk-3384.2278f87c.css b/priv/static/adminfe/chunk-3384.2278f87c.css deleted file mode 100644 index 96e3273eb0687ee7f7725d5e672f46a965cf116a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5550 zcmd5=?QY^a5Pg+M)k<64I!Y*|DEV{Wq%w&E-X?M6m_irj-S7A_HUY|l_U@_@YV5H+ zo;h=7#&N;APt>uFeGq=w(Nb)(=jWu`4>4)j4~kY>Az0fVx*8V*^`x${g0zD0yrC`9 z3ucM8pkS@Qv?Uy^IV}$*?P2L>CO>ldg9K?{L=aT4dfT*p_WIK8BfJ$%|ES%xsFpx$ z++`^U#!yn}}3 zE>p3n7o3P<rK@3NDBF5@;mp05#tn)k^!&;EpQ#o zm6U_2C~LEp@kUOX9nmVXbGoc-ALf>xiSg@aKutDr8u)x#`7DNp}8y@=o|Kxj$O`4#C~K)6@HO;L?kq?S06U&_y?z%}UJ;Ha(}BG`dhOzbvc34W4^{8jn1=sS}JKq}yMU zj>f&i>(F*XI2GP?fjc=VkyPO}Z=cHP&II1>#%e(rn+l)?Q`R-^dScuoGZ~PXb&xF> zBqdK|Hv|K--x1527nKhR%uB1FV4bEJZ@wV{msnus8wV%5A}DJ%xJN56>YB4HB<=Hx zk3!i)wUB>9+_D?iR@D%nM3T`DvK!>LrOKoV)II(n%JEY`hfakxCNIn+#K$V)Pvx~= zV1*KDIw;^g!pjqfCWWqgf=j&k}} z7d6WjSY}XhxiqU5o(_PwHyf})N|brjQwBbV_!x7>8835i#_^ozh;w+9uK5e#ctQ1Z zh1R9(Dz?x$`dk6@492tts%AjXT0SauSzuZ|mw7mY&G(TmkTk0w3`Nrde7?x+kFP+P(?rbmQx}J171BP>Lk8&R9?4B~zw9zG#uO-(sShlwH z@oH|n1ac0V<=@$^e~D`-%}V+~WhG|pr#fj}u{EUc@tPdQ7pJ9sTY*~6%*eM1<4`@L zp017wA&Au9dE3COnksvNxj1gN^q^0l>a9Z!TXNPx90vKT%!FfE2~RPuPq9!$x`~9! z>x5*`%ouyy8dRk7FJ3YaxpK1lQ dE`}p?k7pURf(JEI^cbE%4f~0v!`{d+{0F4E7~TK? diff --git a/priv/static/adminfe/chunk-3384.d50ed383.css b/priv/static/adminfe/chunk-3384.d50ed383.css new file mode 100644 index 0000000000000000000000000000000000000000..70ae2a26b301dbfb2f28404a8271ed37d27c5479 GIT binary patch literal 5605 zcmc&&>u#eu5PlV;)k<5P8bO+-5&3i8q%vRPcN?1!)E0n+A63dlrehM{g)tD==*dM_W$Ip`<-* zeaqy>M*bi{8W<4-6|CMjZJ#~C)e+tcrhn9FdZ}K4w%EvLgS72MMAaLEo?5-ng^Du0rQZ*%-3xtD)&dba@$(1(`E>k!8!-S^oNywKsY zr0rG*js_-NB*RGmBtFdUjfq2;s^FUevyRUGb`MApXFvD7pw-)C;b7FvLNG#5gSUE^ zB`7E20C?Hx_|{Mk_#iS2;;aBbiX?^T9m}Wh(?1y^#i)5)p zhx$C|`KKh=fW(Yv-&VAV)FOz>>(Ev5JD}uJc}J1z?U=wd z-L_edfvn*E2^A;f>Jw2Q>)tJP;)Ll#SyYp;5x1f>L3>``E^UBS#}UEkRRn(kgq8%I zUy;@V!o31+ifWvbTH;84DT_QmtFgg?KN-guc&1gZ!o1kgS7Nfj;!)w#%}U7)Ha(}B zG`do-yuMa}8$9=NKV3O{s9P98NVmVYI-1T7)uHW&9H%h?{1_GQ7RMcKD%CI7~_WuMqvRbxDhBqJYWH^^^ml}Qz- zd;CiLa?%5I=v3Ha^1?zweB-K!&sG*v%vZ?HlMH60Xio?%R6FCU@2b3paxJu~>} z(=GKQ=Km^}JW0Ll=Rzv6Sx7YnGAmh@(+vNfqGr1S%K|DcmuA(*`2cu+wgDTYM43ko zkfbp1ImV}$GtPKif-_F%JV#u@qiPVo9*$Q;zf@>lQ&+Kt&e4|&pa(FfEl@QBde-t$ zsmlV>^0@>YjQXX5T{uOy3Y}YmbwZRXt~IEjosli11eL9=Pt~yFa!n6)mZbUf)cYCd zL(ex|Kls*?cip0EaPnMu20gD*Os0`R;~Robcl=Yzv5J2#H~XpuF8@*>NE=Lz))>>K zV_XCjZQ^|@5_YMx(HKjXF~p$=z|`OgG=ry2B_YIekV(&$)N;n4C)V#MK1DjXnv|C= zWfgF-7jj)sx?TXoxwc247G!o$8EV=dE?-MN(qP%z*2k;Sb`9hlG|PXpU4IwXP@0wW zmC8!YU|9vbuGkvV_jpT&>BVU+-&UZOGc)pS!Z=jVsHdw_LI@)DZ)zKuRmV*)Fc+uI zmLBx!Q@wSlVN1@My}}@Wl9|wtaXGE~6j$=Xc@JF2Q^dl7@j~4`-RSj Iy^(SJ53Q>$%K!iX literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/chunk-4011.c4799067.css b/priv/static/adminfe/chunk-7e30.f2b9674a.css similarity index 58% rename from priv/static/adminfe/chunk-4011.c4799067.css rename to priv/static/adminfe/chunk-7e30.f2b9674a.css index 1fb099c0cca6dfc9af98c8f02cd740c310c9d230..a4a56712e4f1769009fee52ac1921b98d2fd293b 100644 GIT binary patch delta 3071 zcma)8TTI$#6pyy0$XWyiL_`FH3d%)5xp}Kl9pa7ZimixuR#_FTvc-&AO{U4xbklks zmMm$skA0X*x_g_|WLvr{&8FGjmQ44$HJQFF+a9)wM$dsi4|_bf-}%n(eCK@M+T)D1 z#~B-yr%s#8%gv7*r!p^OnFp<=VT-LicrU}i4-5}P2lQ{~QE4oLH7%Qctbi}H5)^i| zGbDbe2!h?jwZCExW-=;ysi4qZ)`l1xWmSj)+DsMm5YU>bWTKc{0vOjBN$|r=H9Xg` ziRQaZ4Kq-vue)(vPcZhTJ{%biO*<2e%osvbQzOIr(eP9>_0+-G*udoVaKu@D;59ul zT06n;&>b35)$mlmq&~@ao~w zxL33bV6W{g^zvBCXZY~KNLk^ZSxk77_*jn^Y?(hq;jYC+u91Htym-J3b9NT2C~dHo#YuC$KFyNBW($emt}G)*_%o{^O;8O-4Rcl!v}9Fc z($B4C6cQx*cwD%{;e*$99u0jq(%$+CaNgA9`c(a^!Y9}7qIL*tQXD8d{7`2Bog8Y0ed)67_6_8)QW%nRkL z4&xbaxuo!{+J*{NO(_cY8W#%Nl|p#0rU(^Bq+VcVD64go=56pauu@Cfv|dYB#y>nK zR2zxeR7YAeUS}du@9=eL%KwaC3_TqLVcQ^tJ-#T1G2SuQ&K5vH4wrf61YPX<3asu@ z{YNNdxHKr3Ty7L@x!QFnO^l6%!q-QlPK$M7dd3h9O{Zz0Nl=+QPINk+xN}LldxEhv ztcvEN+tVwowc zfxJq3f2klc@j7GC!d6oQL@ZqJ1Oz01e~FZt>Ruq}YxF)P(9|l1SvTu&xE}V{3Dg6P VD*0WL18BARS%@qftxioO5< delta 3071 zcma)8TTI(!6c23c3U1IsTiQ}e3+-s37ka;N8)YDrTL-ReltK&CQ3r)VHN=iVA|z&+ z!Z;5mCJXFw4+71+Z*e4QX3U}xeKQe!)g{7RUpm6eYir!p^OS*asoCsf1$?0vqp+)< zA@MuK;O`}_0rMQpWLP+K0J0CO+B-P(0F#^Y6+lw)UJC}(vT z&v45nfoIh=RIqBwQLxvzP}sKc;k}w-R2-3dftjJAwt+NngQJ3#TGFQVTDmg+;W(jM zPt1lo(vtBy1A%&nt4UM-XWUZg>mmr-IzH@i1$m6|j=^>=4+`^gm}gGV#jZDFb(iWt zLLtMYLc!o_K;f3FQ*+Y9*hnaReI)8MStq7vbkWdsnid*(mgI4w)A6JspOm}D8%tBJ zpRa;}I=T$F0x_)cIVl@uoj=I%Q>DRk2;^zBy#jekbWBjr$j}CZ*Ggf&sX%qYfkrnp zd2oG$gR;@!U}!Y82k>Q61+w=?Qws{>-c}UGdL{7j%PPVKSJ({tX42-mW*sr#7K&hz znpc|b2)EO$K_Tv&&mS?Qp3DyskpMPZNQSMJcDm_SO)^+@XMx8}d;;zvL=L!R@SD34 zgEY`@lENKv4!qi$hkkRdWDk7Rsz*!Qw*Yf(WHUc#D?{s68`*G2+eHYA#TVgjNj~hp zWQCt30?^v&<=B_}0M9$ffsY<0HG;}J>5R#wh0MXxK)bV?ki9Pn!!v0fbBvlir3ifU z;7K^X7x00Htd1W&Np&p1TbBz6{BH3A6I$vQf~Sjzi1JPeyxm3E`J{_ntzWz938F+U zhK_E+LVq`1LVfbmG&68n!H1phDa<(QtcT6A_5-$Gf$F69c(km1174w+V%qSBFB}Oa5-liUK&-!^YbeJ9zYXpiwB(7UxKQJ>xxu%H1CN z{(h^F!JdtI^Y`hbYnP+z`DN677^Rs=@2LJziGHe6}K#s$QD2;YWiQr%Dqel*GMcT-QSK z!hWHOi+yGAX4@W%Qb~h4@h`{g$Ju$JA$xv42xcn0$vVO)h zIokDLw2Us)yfpaB?7rYkbc2bmt;q?a1K&Lh1CAeyVXWy;S@UB$W}k~>F(S3tOH8>m zTo)+pn2x$7NEqI9Vd0gR(Wc+T5RI(2(F7qKn!8%j=fZ=u2A_%mulpZDrXApaau`X{ z@a5zEIXI7pZ#FN1w^QsioRNTWA96|yKn?%q+6YSO393wJP93kL(v6*r$c{5q)qNui z8xeFpx(qO_IDLj_Mv8dIzP{up1>S;%=Y+o&`)htL-^F;%4QFAqIn^8s15BVrh?h|< zo~J{gLd6NB)8Av<68emP^_>yrX~b|c8fH=O7I!cUxx~$ZbGhu>L6}PQCT^Mgc=^$A zCP=1aeabqj;iQa6mVIi-5qTOveFJTIIInn(8s2qQ1R4+?Kl#mO`8Z>;naC1hOai*x!8F+aMLrTLRjqBYlEM-bgvi;BKl* z?#35yavR{QjnBB3Ng@mW@T_`Nmi|6oNXn` zZmb-N+;Du9L%S;}gJ6P(Y_ue^RQ1JYB{~H4L`YmJ+IOGBv9H}!DNw`nPH9MfIKNgJ ze_)iAd|QO4ZNA-X;i=ahOfp`QzBZRtRJPHmE0TJMN>M|ZN*2XBbC-yR;`3;0d$JKt zWMvTS$>>e7nH=_}x>|&w+0r#cTl1Y#P}zNV5Lshm8kgs>v_5$vfpk-Yganh<>dNU-6zb%2r(Di!f0YiW*%L~^E zrdHh{|9>W~%f0s{?t5xi$Z(Fwc5X30j43(zl<*t3kW81?r;7+>N_rl z?x69h1Vk_Bv~L5DecwQuFwu8-sPFe4FO~U}-tmClNKN9U535!ScuyGKc7hSmO(NIM zMiZc^c^yo1A75iczk^mbYU;~CfEC4PA^uR7Yg!jVv6Ix literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/chunk-e458.f88bafea.css b/priv/static/adminfe/chunk-e458.f88bafea.css deleted file mode 100644 index 085bdf076634d1c32de700c691be2e9f1edc326f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3156 zcmcIn+j8145d9Usbf%rD7(>!Dm0$WN86huN#g;s>9H0#U-jysF85}YpmK$j?@m)TQ)h%6BuuI3>_dE%vypn6h1Skt8 zr(wl-)Q3=Mp>9LqS(fomuiSD&UAFNGQh79&l@^=42WgHuVNZ-KYe#eUc$0pnxHX(JIe_6o*I!K)Ffg)|^Muaq{mn~cbwW`wS~TIH@H z^n7$0U{QkDU^OE}ddPmhm8L-6;tdZ8e;xMc{GL9mfC?-WVX@s;z@$Ych&V{p) zAyAts@DnK6b$NkNwvkg|^v*qY*CekOEZLJ!ozCumG3~Buj#mflQYgy43bD``aW*&=Ldtopv+HE!O61Vw zhV7#rx>ddnM)ydr5TqQtrN72XR@e%Xpy=fvGRk1^53YYE3+YI@gDH+iuL^p!*-gDG z_!o2SVL;TtQfusqS#&hMc(Sp9zB zv*4zH-iATC!wCEvN|NN;aD06E_tas)5aA+O?w?!fT|Z#4?-SSa`@Y1zr$0oF^&&?+ zdvdKLR7LV|3}NwcdxeMTGjob{Y5DJ(Sb9)jebkGwr&gX0`p@B=>0d=YHlf$KdWh?> b6PhJYvmPA(kHG{0WHuIj@XBDa+41-f3@WKn diff --git a/priv/static/adminfe/index.html b/priv/static/adminfe/index.html index a236dd0f7..73e680115 100644 --- a/priv/static/adminfe/index.html +++ b/priv/static/adminfe/index.html @@ -1 +1 @@ -Admin FE
\ No newline at end of file +Admin FE
\ No newline at end of file diff --git a/priv/static/adminfe/static/js/app.0146039c.js b/priv/static/adminfe/static/js/app.0146039c.js new file mode 100644 index 0000000000000000000000000000000000000000..ab08475ad53edb4085f6145168cc7186d5c4c662 GIT binary patch literal 190274 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%0ACVv!FL`2DxhB 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 jyT97pywjexhuk+K4(Vls*Q@^r*^&_5 literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/app.0146039c.js.map b/priv/static/adminfe/static/js/app.0146039c.js.map new file mode 100644 index 0000000000000000000000000000000000000000..178715dc68bdf1c3b6d2a0ec617f0c1d6750f9c8 GIT binary patch literal 421137 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 literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/app.203f69f8.js b/priv/static/adminfe/static/js/app.203f69f8.js deleted file mode 100644 index d06fdf71def65f514bd5f24044db9870982f1d86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187722 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%0AE>uF}n}!WG#3I$qthG6CDXZy415 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%0A9Sc56>yA#9K(iUyI*^PC+jxhxe?dtlz0)qwi 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�wg@4cJlIP^w{HeE{6m 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

5!9@c~d80t|>_5`<$3ejw4AmSTnMqu#` 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 e;=O6eFjD;{_5tK+gP diff --git a/priv/static/adminfe/static/js/chunk-3384.458ffaf1.js.map b/priv/static/adminfe/static/js/chunk-3384.458ffaf1.js.map deleted file mode 100644 index 0bb577aab36f0734561caf482991fa82768972a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85906 zcmeHQiGLGEvi?^letEH3%O}P-4lFCn2ZSSpBWyP0r(R|4sWTULEGX^;9tY3Wwub{w`;*!8q_!X`@K|6Llnw|%R5JTEv;;tN5{%R#5#IEfWC8_o4^ z!-l4zrl^^)h3T02Ty5ODxp}KKFEEe#%|=HsLk<*%+1Y8Hgw0IDO1_b>{&bvtju!46 zx8}#kGf3k|Wym39tNCpPuhS4x(8|0R`8-YB+q}7zVfhl`c&g~;&CL+{!r{9LVcBWT z&s2JvUb%PN+}fJAr6M`Jck=B{hSntm@IcBl@4d~&&7FDSDWLehjg6f~Q9EAm&*I~L zf3!Cqjru)r0@*n^F2u<6nwzby%+y1APpx+)FpDZpm=$jy?`$vpT3P5dx;mw%P}Os@ zAEwdz=yDL(ljg8J7}YzC-f8_!Qb(VIVSkX|?^!Z+)D}g;EqsEAT8v{N*iO<_j9pvNwu@0caiGrZBZE4T`7>de# z&_f$Nsnv}~XZ;hF8xMdIHdG%eP$%tV&=@t(@Tk!o(MGB)^gAaZy38O)XE9&1`E%C> zHPP42ey`OYcJbAGQ|^BezvuXy1fvr^O0kau0?bW(Njw~b_H2;UHPAFpPKI%k{Lnfe ziXZeiUN)b$<KwEqpU*cD%aV%Ye z#0@Yqg(vCs2~2-LN=vhK;unu{!ir~}EN4~o1W|5x8>g{abuXViVl!hfb(hR;=;)~Y z6eCtVkHrcUx}rvX7!%*wPU{XJyp++c4EjmiaIHSLXrGKo$ppm3pR>_uutMz-i(cuD zJEQhM1`HrBRyg>TPFvo&#*=zDe@qx_TBiV9JTmlPUu4!=zcNn zwMT-PGsXTGuFtU3?y;{?W2mZ(16nca09-~EA`bZ%y6{v`Z*^ijSrHwDcVVx1kRq<0 znPn$n`=o!-qqFdwNII!Xr}(K2n4wdNoyWC)r_&fD@q^z>EmQ+wddXxrxZ(K;JB9*zfu6V^brkXMz19p@Sj zt`3I{0?|(Fx0Gc9R+GWV+!eQ4nDz)QWOsxJ2)iGT&hD#?bpnG*0Fd!Ctc8S$s@-a9 z>69%{wbR$x_6!sw_Ud&LKB;5s0-U^7#-2?30%)d{jNagO_-Dzf$<}Kx%$p{PIX%J}Q3spz<8e zK9QF{RDQ(wN9YKBKByj5ALH@)UbXV7dVx;`@khRVC~$gT`+MnQ{SJr$^Qk;PlJBt= z!4DZq4b8I1gX%teII32fC{PnfUI3D6^?C0535Ie|jZx=O6@UW_;HFwV^a{ShOJa+S ze_z=6Gim%sspEe?md2aKjcdV|()a=3ZxLpUuJV>6RLnmFia3JD^7%kMe-vPzS382n zEv2*gYvgs*}eA z_cfB6kRRZ)g{n27akZ)dzCvj{K-*de-&y^PtyDn`vSdphwQGXg&YnCwk(M5Mv^*5b zzuN=U)oM>m9pOi<+SVUJwnqZT`#q^BZCvchqjUG@pgPt^KM8sagrLQdz%0~>{ZWnB zz8x0o%817MG9n>i1uV|t33*7>TJ@$fqrjJ#?_{e30p`t~-*pLc-YHIp7U4uyU!M(B z#NXx`UUQ?YRhM;?-?~Q!)g65lb`P0*P<;tV-+-2{s_lTHH~q1fl9ak9AnDTzTCG*P z6j#F!x0FhcRIUL!dGq#!hspw5$|=GW7z&Z_Jy^C1IQkE5Ux|>z+^==r^?n|ZSZ|Hkzc2KI$&*1dfu;q>rT%1D+jd~KT@Vo_e2;k@dOQnOEAiY z;Uj%Uaj&kUDHgadpASUo>`ToOeRenIe{JEqOUoW`4KN zHr@h-RH8)Z<=&an>r+5NJKcF9dZQ4X&I1vKd|{D9<+ZhEh}+VOiZ?%Nngk-2orxmv{=x?clDq0B#)y8=zUNF=~o{QdGibR>ThAMK+eM#ltD z-MTWPV}^>+yqTPe7=3GQMt>{_I~KSNvtm>fzJU3O4r+biFirX!Hy1XyH*5u{3 z_VTt&?^0vWh|--&CCE?3)g zjA$a0U_{;W5wU8!XhhTu*#Y&813tx@I+)oh{GJ^> zoXI7GFheg}$Y`~k9|*Fylox6+c#f)2DfG-XIb#48YyKE-U_*tU4qmmYsx%Q}u{t7s zYE?C`XZH})>BAgC6dB(@;Hgz1v!so-_>LB9t$I!%t5xFxBnKQ(t=e&hiZ#6(Das9$ z`#Pf#@gp4sWQU9g0XnGCc*gg@73}ZTHufJt?>1n)Lf)Vs4PQuEwYq8ihgLVNel~SI zRyQTlPL=BrZspYN8u(VcOyGl^S*yE&@7)85f*8IQVPY$XFa=mtT#|Q23m9#`q2gq$ zG)~Fgnp)+Q!?r10po}@=(ToRb!ugrh%&IPHKtB`O=$z&3XKL?DonT6>XqI_bQ~gy4 z`6dcnd?Ms=0pwQcg4lcwqt;itoJ8R0a0b3Q=wmd}x1a-^zPq$zZS%>*pk^$h#iS9z zwdHGA*ZzoRnMRDwBeSkBK(~fDg~Dm(6zEK0(ce-n-Y%R}5X=A!mwS+y15}@?)M@&Z z+G9YSn^tsoH+~HS;iZ8YKz8@kS=7!%R@4zN4=6Uqoov9Jv`nYif_+Iq0XGODN*iLu zCp8V_$#=DxM1hVEVQcX{HHmeuCL@al_Y+l0QxUR*S?+9^K-mdSrn(<6%WX=>&ovlo zW;w80?Q!J+Cbsp*F{8)(zae_ep|sT0MEIb+cmHNBeo=XKv{h?;tCJpWe+EQ}8#cvI zmzmfOs(lR+kB;PZp9Z7oWmn+7)YeE!uJ+Ur@<2k9AgHvve8^zIQ5CZ>r_GRk*`Z?MG#u*~g9x)Zllb4v04+K&$zX?vG zAgd|@`UG5cajn{8nL~2QK~;SCS`{%4VmX~gQ5$NxW+%R;ygrf7O>xXM^!+c8@c~qz zpk-rn-^AQCbxm7ByM}$!K)W|5cg-T#)HRfz>3W@}L9Kdga@Q-g6$ru;lp7Ncos0ajK*L3lt1yq&evCE%z`>Q85KsPJ;x9s69@79KvQH23 z%U>e+R$WV)kTrBiK8G#9iKCME!E~xAh>HmHzu@8&cY#GjYh*bdb8%aZ-6%8$Nuna|Fhz z{`{@@*Jws234W+?Nu3@Vm$$Xd^%$2r&6`P4@GLV#zlMp2V?+Fpu)w+|s~f)`zhITa zQPYtol zL~k)O@ikUcVDL0eFa>iT{LW7^;Am{TwFaCRY6Xyy%d?Q}7|4K7z6L4)NZWe!u>=P{ z4Kx}|?*h=m_%5J*yZ4q8R>q2_O^^k*Z2}PB5x#~40^r~(34KMZU~_yLyyVMv0B->* z=^AEX+cv0#XUEszJpjT56Y?I}QJs!YFw^s>EC6j1+7N)^YxuS^qfHG{RBUh*)L!pZ z_DoyG($t`gxOW$aQ=OzBEJO4Zh0$S+h?&xdqOKxDPDzH{N&ylQ=cDPyW(Fsn-Zx5t zZfn10tZ=-rp3O3zU)tvlvY@Hphf$$|L|p^I;w1>gDO8Q!RPd%6%i=``qh|-6t#5-; z6lh(8cn7bFV>W9L2$h1BF7|$#u}5zeBJW)QA(yttF3`MPQ&24G#lJFIpKN@(ucQTw z3u5?z>4TIpi)L6Y#1FjZGaDHZoVM?)An?Ud(?Ep2$$g5x#N4(Y0ONd5W^)uFDwYF} zsfb%l_~0FxMGAf8Pdx{`Iyi!sz96{D>Q;5NJ;HSms^Z|T zCGgdBmC=Z1>A-X= zF@ZOVEieZLv7;au=qij>v}+h2W2IX<#j6q1-osylZWz!o<;DFBdZ<^%suV`be)vT_ zG*SdW+cZGSL%|@xB2QX&`g#B7-{6xLxV!LtQ1JPh<~kU(fqUuiq5*g(Z0Da6)!lsj zGo0W4!NwDWzeu|lol1ll|AgKy#J9#pLbaYAGE944e7w&aF&0nRI=<5PES~aDG=yKN zyE}`gjB&+?sj(I$QyBhR4I`)#t%^XCl@MkS9Z?fo2}mHTouJM^H95i`M2#mqVPO7i za{!?Xj05<^aXY)zL~po0cX-`K&0>p-+uoi9#LP?^2lH-JS)c^o=BgKU_$SPdvN7CcZc%+h`#D1pN` z3n;MPWZm2>QkGhc1{OBy!D1693Sr^Q>HO+hV1W(CInFGOP6H)_mWiOujTZR2f)?ZY zPJsob8vtC??lfn4>%n}^G8-;(f2_xrP%2YrxtNoTze!Fu%xSC3BhTR*KMWi`b zV=c`K7ZNix$kXO$bnD=Yv->M}O>eEcEtnSdIg97V(*Iw*rinZ# zT4CQf;8SrTHiz|wDUn;w9cC}Sq7{`|Bq_!zJ*A*%paANMhKR`)h4(CW5gRnKVOYR4 z&`0WJ*nkMUY2{LqLm-N3yqLsobxuvIC?ZNlxH26i1 zKXNOK?FEH7A-AG5EleD-?DU$Lu&f>Rh9rhv+Sn(_c52fF^B^{u!C*j?+&mGB_P!-_ zKKv&0F{BSWT+=}=X<)KmUrh77HXmoCVF*1w^xvj>cB5- zHbpS?3%NB^2&tO^+&0ta?;eov4yte|=y3uH=rZe-(y4))LWc3z9W!mYB}4VsmI)lz zvNaX~;B0c)sRpw^*#pL5*lMu&NZ!HI-!q?RVBP%dzw(^rdi^qD0FX^lJ%mW}!=5 zcN~MF+N{SmvH7EVu0XzhU?lAT%fHm@?9r?{au<{>7oeN5O|!R1x4`Y(XJY8L!u-ql zqCTtF_8MN%ptU_5iE`A%<=*%5gFD}#V;=|vuXMgq7}viSH3M{G#}!o$w_l|gI~Lcy z1Y@#8LS<6pG}E*LDo0Y`#yXl0J-i8QZ!hi-o_EL6c5 zV4Zv~@0omrMYk-*x0rGZdf!5G&k@H4{)Ou`62gWx_Na-ds#rP-aDW#fZuk4ja-sEk?X5K?DX9dB7~$+k3&J2<*QS;v$QQU0qM;0iCw(OfDv?%^k!GyYi;ddzCRk zjD9V5kFAwMT9+-I$)xW$By=^-06Kqb*8`cP`Oca^9#piU-tHTy8u)I9AuJ}-_GPWy zATf(`P_Hp3ZKLg{j!8&YHYOS^)?1MA2^1H#t^1<)Fs+erzJY>ihen3be(gxi7>alQ z(11s`)Mfxq9Sh=TNC$? zmWwl?MeH~*LQZfe<`$FnT$<}VxM)jI6RVJBS!ya_Mf}SMOE@nlEt1pPytF9@9+L(l z1q4p8-$ACroqRM3v(~#!s@Ob~$pAJN)V52ip#8ZyWmktW-hD2$K{`&6CMVal-#H?e zUe>Vk0#)}gSlxaru~=H zaN$x{h2U(kJwOihZL6hk7i&R|%gmmq9Z9=leh6oWSyr024t2d4&JB9VtTdYj=ucmo zRbiwEfO)FGDgT_SDPvYf*GvRMH@BMwtpha%0MC}#DUaEYT@x)0dKoPXQQWk#;fcac zM7M2Dv*vSzTL3t>x{RT#u|K{0e$lQbQRi6!*fj3zI^8gg7`xIi@Ez;E>YP!UUEg5Q z{sSu4#&3E`g{a>3N2-m*cf6@afT0r1V0f5&oQ6$)9#l7eY~EM5PZ&uVgKBYk5B4%8 zSDjm7t#zC5E_%~Qm>mGr6hy4MUnF8!oZui&YroASVmmX77}BGG3CcXVPDbL3*!C4g zOms^iVkRqKf{0-=3N%b(Q4dp01~ujZxITa|TsshFJIfw6y0Lwz&Ny;N!5*3D zhM_FMT>o_WLmUHi&&nSaMdj!2-p}6(?O->Cu?8e`LIXV?3iV(wpH1}Q8FFByqe9q_C>LFTa_;0>9ynpn)S!%v=(nX9`UFbv`%0BmAZ$IAW`Ci zBbGo+7}-?Y*_zfgw%La>%`F-4P=G^vi6Zpik0qgTo?5P~1B;u^vAePKMK=K@K_6%}?A z%V<;GQ>09hr8AxpvQJN{zX{Kj9ygJIMeaZI{Fnw@T@3yhskOjX1G^q$3Zn4ec@24@ zcsi~jQ-U4lj+t27*LusEC_FZf6Q;CFGf}D0y>@gi4%qS$lA}2{YEjd{wc9E-dw$8fisYj2XZ=GnOScID>HovqcaTRW{*qqVX6CP7Ja zpNKu%7uSlMH-^zL=JC1F-KaJ0;grpOFIu`0ec&4$H+`3fZ+|C0&hFy(YIyFnzG=!E zIeU7w-u%yh>Sx~#Rd^+NP|0lxs+P!3UB zIhF(P7jOJp*(fSiJ^%%2g$J27aQtuzTzM54vl)x&xS)RAu|Q=pr^mUj$ly$w*9#Rn z*?afHYdMbo^#U+Fz?tNY;U&@4@9~YC(T!Kcf;MtMG<_uYCt%SlT8c(MJHkQsIIlWK zXgyq4C|v-pIRVx{m6A?t34AY1!#6768a*af#&?1vaxriWlqZ<;uv>Y2+{ax8U5wf= zm5<0dk>sBX>|yEk!t2+)$o=2!caGOvY&{hi`MckLdoVDQoC z9mDS-bDZFC<5iyAjb18pF8?kRGmhoo6JmzB?5j|lR;n>bnw*88w z+Y*abNc9^ZylE8O;WT$SD;}H!2zObefGhM=ZaG?(>SqdPWJ(usN2WxoTLn30CL+u} zLlZX8TtI}5##{W7fxVXF=q;DaB_gZl)bCY$<~P*3J(3><#E8O6JR;8WC|j)B@E`8;~h@8F7x&seo`#=p@f z#TOM6&77*!o;fL=A|l!11=5i%lB!7^>+hf^Ta8XqtSH6Kr22f_qbsM}{Y?D6!(IZ{ z@0VX+_g>>J3EqwneK0OzC0FnxoJcinBS=)#!krnId{@3&U0rkk{4=N5j(M?7d^u>y~q2R04wcOo6aw{QSgTr#q{`MCbAP9B`COhoQQT%uMEq5?I$`}0_ov*Z8cRAgP z!2sWQSMF(&M|y!*bT3kmI`vamTAld)VziroaXM_DEWTbaJ)nD^OS1zSo^Kt}!mLm(iP)XPX?HXK3S9 z>T$Y@o)*z(6n53_wfe6Y*3vPRb#e%hCw0Oh&C)(dlmS6)Z^TL*5I`-!(C3jbx99Um z{}68^anUAz%}{CH>0HB;QS#Rb*ad7KG6q#fz&Y)AUEw4*y~9yglr zN^r8N<;}0I%AA4bbwQeytMjNfXzww)MsD2|`{wg9YuLwi@hZ3n_q*{HLQmxKcN0P^ zT%ZQS?8L3n3Z|hUqBfC#KOEk%vTf6oMSTqQkgB0j90nne<0d>@8YEhchK%9CL59h- zR0j0SWs8$U8g`>bIs&;)Vb%5nKvi;e&Puf#14`$N-2ekiaywonqOE)*YWE`73p7Aj zWfzVhYOrMPmBePsURs9Jno+9V03KC>0`6lgi{C-qY_~3-+j|g85GfB)B;4O;)3C>51Wq>AUuWaXqGf`2G-jGT=7uGWR!tho)2iR|S);x>l zb?=T^Z7BY_XN=DeQIQD|eN=;O@gHlALEF0t;@SeI8(dSXS6}3mvMI&*~ zD^VZ!)ebM(Nes_R*3Ixc!lkTILm^_L?qwTMVZ~zf6~d=P8LV_J)w$diMR&Lq@1g6AnH z+8F#JUW~o8_yS!=7j3AN6S=7uoyCz1z7pX!+vu`Cj*{^(z6UZazG@762*HLFF-`5s zvN~_p2629llS;0^R1rr}_UdiadD5>$xE}pHrp7!5+3lF@^t^asy0^C2gRx*todfifI5eXjcU92W3?Iw5|Yv;_kxM=6aj1^!D6$^d~ z^2<(x4y>TtszvQ*%a{h(o;LvgG;fOR*d<{Vjfcrsi=B$fJ*#^Zo1|U}5b4;(a+7r7 z6*M=~qny}LmNg7dX7Gqo)@E{Sr$sC(Oo>c0v$1BD9gDEVhGDVb-<>tjQ@A5{>%wH} z++CEfauF>`B*|hV0pLaX4!2^J0NaRzszte*eK)#!bA9k$+SY6$6K_kjkOVa7D7SVa zTy>6ni@zf81o{=d>l;W*Pa z7#^K~5EfJfLz2_jO<4`BIl$Ixo*6LHnkG{7fhacUH4w4~H9t&r@;b4+v8_0RjZdn~ zhvk2Ci0UAkzQIJHF_t}Qi|oR9W-y|VndS@dPdn5Pf_H!gb#%*QN*vv6OzlZ zX#pv4=H+pJi1Z=Q988n+JMEL`e@>bwt$5qLf4`EPHE_xNZnPe4qSOXI)}!I+absz{ z!vC#q+;FAY+R6|Mu4Ay`mffG1po^>_{vAY8|0$%y)~E)9WHQB=lzwqllDMZR6N zl-*`4Z$jsj@c3q&j1bBa=7b#YMzB7c@yc;Ly1+g21_L3_QQ4W``v;DR|D~t^O(QFU zd}Hcv-By7z0|GMe?{#lFm+Y*AiZ=}Jr0QjBM;;3RIp!g|+Ck@8*D|$FkPN0)T_kHc z{c2luxMw7H*Bh)fsI5+w$s(EZ07ENK>AY4PN;+M6oUlA;7wo1k1X|_#P5b2Tb^{r* z+nX&c2f6^0P9!ror^UT>MHg^#Ylu@pDrmz*y95R6vjanneIs|--d+EO6JR?3{jXlc zu8?y6lR=XS*Zvmukl@$ow111CNVJk_PPi2>2=Tbw`vxUSL=1! zR_OlqLg7j>A$vze`s2FOo!NqIQ~~jdnRQIBGT1Q=RXwZP&q$;N>Yd`SC9?j-c87lx~}06X%j|5JA9Uruw2rh#GN1OkT5yeZ3BT>6S5`E&`MFxMitR`yqX4nfv#(*^O*DbliHX@uFym)!s` zgQ%C~HP0i5IT$DzQ($PJ2$Muh(pAlBSWd^Lo{w_~{G@$RaBka!zn)HT`hx+ib(sZ3 zxO@+n@+i46K`uEt#VM_VkZMdGvF#yqXb!*Qi3hfb(0dtHC>=bI5HXIYS;iVE?+#ibA#2uGM2OX z6TB*k)&)DJrV=fe6;QJE3d-0Do&#ypq%CpaY%)L@BfsdoXy8ngaivSC;!2PrMUp%t zVyG{O;z`_mMZBa-|gdaG;?)nBp^2z z(QhVYOH2wSHzdZr5G8Q@@iRdPpo2m-?GuYk#x5QkDoB?uqm5apZfBqY1kDtBTdtDk zAc>yyQp22IHYo$krr`K_SCUoafUtQ*(*SEC>eugD9me)d&0^@%;!mKzCxNJwZlm+* zAS%iUVhA3SV=aNS%t{M|R>nh+&W)mY9M~3o8mmOTeD-M4IMA9u1O_s_oMS(w%~9^@ zFivDEZh0D+fmih{x_1d}`a%RAgUIA7QvpoKDg#2?uqAakgB{O=cI7adfy3emtJLVV zKfJS+O%YYNY><~&*gYGK1}o&mIAQu+0C`ZbJLaxvIM#N8QTj^-}#cA=E(w56qj zLYm%y1`tgNi2Etj2+=Fa;xGCyMZin3jQ*Gys)Kb{v`Kry9ef|kp%YD1D9!83gw!OS z9VX}5Fp_URcGk#26ARmB$0(^#QBf>lMk z(kRa^Ov&5px}1mw&pwto|7UxBdvlu$n~=O!s&Z|(gEKjB)P}acX;+qXb#i5>kIhm! zE2?J8E>Y(fUa>}U+LMjKSP4CDAhv*hOy{Nzo!t}))1NMsc`NXysGYdAaK5*xi<1C- z`U+yO&g}4SlsQ60Vn&MMjnqEmlAlxM^}5)M3L+)JEp;j#f(6Yhuh~sDhy5kHty{-i z&D*Vb(vsce)(TeJ%q--s*v;KU$%5UKcD}6FiQWvB>D&{loLScEig5fVTCOwFl#4I) z%G|4TDJ%5tOaQ#pze5nh^Y0`?VLUv%p-z=Y#>=yzSYOrwqKnl?OQy#{kIrjguBcV& z#TCV>+{8B}Oy$ZIM5x?52~IJ3QV`9YZ`|pGsu8@a4nFk{iw2+eLQ7!^2ExJxXb1~j zA1-wAIuy^;;-P3IFf+*k0Jj!67sH4zT7<694w{0luy6so!UD6zHN%C(VEXr$8@#9| zLw}AtjeQN-oGs$19f;v9XrB;9)S_whuz>$3P|Wj~)AgE68h|>@X*BcoLLaN`r6*b$ zfIR);`_V?tcmo7dtpALcCb44ysPlYg?}gg_cwk&*%a#yw7uMHPMDK{>%UsKcCOJC25aH3$N^5`JVd*r_DDiQoK6^s<6i`N z%ugG_I%^~=JlN}W*dO=O5ReVL+TgE^=gOS@s(ms#LzAKHfVSy{;CV@~H)gb559@=+ z-e9=I3pv>y4fN7Bn)J>UKtAa()-?;So(8Iti#F1FgK#ejqk6h~)&+~Chcv|GPt$3L z+3WYL-;D5b%%i(j+hs_!A;FX@c`!s-IPA>5pi@y1WdloDtHYTMTHT=-4u9t+o>s5Sy z*2s(k(P)MsC0*?oiRDTsE68@)~^W#((1Yvo;x9=u}jol3Fdexm}{t*0r z^(}h_0)igXH>Lgg0coJXUn)VadyjEPzuyU{Ls;jnB`AX)hT&31Sj3*S72D|IuRe!y zkpL^cV6lI%t$qE036CFTS2`90aB5ORcc-thtpx9>@;|QGrs|?cPyU^05ZXT;GS-Av z!L8ZVge-}D(4k?lWf%48$JqNqwEAzoRUJF&SWs3P!{%B09C|uK2!l!zsj5XvDFP~R zVSwm#-TG7tzN4U>C4;%5f5EP5hz#obk_D7@DxM^+mNzzz%QmKyR{pdjI|qBS2||=M znm{!m`}cr4JQmXiPi*JCe$mWKUb&NZ>~Z)IMz9i0@|n3W05-){*)aUmD%rN=&ju&9 z0aj;acq8mKdYCO`H2w&^$FmJG!OjmXJF3}$tu7JaBohKOvFCwaGDj$ZjaF zM9l7t0zfJ}$zvSbvpiTY-7*{w*Lp;=kJ#4uV~6XYm}9J-2R8d~y-I)Vh668q+Rwt(C99u@(i zUH>Mwkk%-z6G&cW6dEj%n2xrT&!I6XI0eUGI9R+^3`(@Ivh1C#PhPK^NQ7212{P^| z1LnzK5X7Q&55*a**Yyq|tz~nSt|=2r{c@plvoSQM0hj?HDco+`7r63~e+4PX1JXxs z?|%lL;bd0%?%vLMm);y7m zPnwy^vK*72^vK@4%;!#su=GtO*XaFNs1-}f|-> zKQl=dKuq!tO;Tjt@Q?SzOQc~&aIS67%&-d5??7`9L~of!)7T(7)7N(EnxyY&k^^ajw1PPjD34L!P z2H}l^v<)YxhIls+N`j<24yGhAxhOHS(5MBjG@-VrM!8w&syQ1hr`5BSeU>Slssogj!dF??ow4@dL~^2sVa`+EyW~0mLuDo1NTx|7Rldk;NA-% zf@maj$c_hKdO4xwuxJX4f5=Wj3JhT8f~=HHxAAD^iXe$!0ZS1sQxLVf%}&{s?t^Pl z39-phum|=y64<k;9upszxjsu`E$;hO=)uIm`JJM z5%HOlsj+!`>Z_ZiHXV_&0T+>Zm66r)yK+M%3nMdx6+(t@**rfaE{u3VOIs&;F$unRZ+Ph za~UlYK=NxYcNy=dWG@>g2#Dmkp@@J*Ddd)g?d)l@b@03K2ojr|2fAVL^D&uZ@Q|hkIntrRp1Y2Qmh=g70!i)(T#xgJ<`V>RqCD9vk@_TravBBDSS6b{d#0-_2x zvxpI+ds;GDTWKk=J5R8)qu|8moxBOA^5z9wxSISRyWGN4%}6Z%=WQU#?m}@KU|VAD z6|n5DRinp$*b9qou|w>Vv2+K2=W)&K zB7cBfg=DqeYj(zPzI1m4XDXA|XuA}BJ9|E~6#ufF;dkG?;U>0%eC{+;Rc#4NTF>X6 zoxonD8S>o=Q*nKZW@;XL>3$U-kU0izocq}aY{La#wlhe!d$3jE%XS89I?lP>V#=O@ zzsPn5<8uYZIF4fSSP08#SbJ>aqk;S5t0yNo0XV^7lmEu1_V^;g5yMNYu!_B*qdtt` zkK7I)yrFZ3s^AF^;%igNC;%L4Y5^pQ2Y(%mV+&8&s+lx|0u zzL82Q|!P8EG7fmYK| zO}a6NRgl~MWgh^=h`0%p4(CbW|FRE&*G>Y5bDr#)&w;TC)kgfk>;o8PFygj1*p%}x z`v7zv&Tm|aqQBNYfQhT?{zibfxz)P8^X=xOjQ|rHn`tM&ye*V$1(@8-m%RYjuos{J z#s5v40VH)XjAVJ2kIH3(hT)w=12wl-)m5rnR4h;%LMqiZ8jydNiS#7Z{Mc zrd;IAv|vQda?7=3dE4j>SINROZ~u)Z+p~Y~vQBSP4N07y=BlP^es@*RN4O z&`PoZhgW=4+M0!`AVVe4Spre63tRhnS-J`tn{Xh(fnT%bwF`iUO(ecTO-CChv9LU{ zSZs855}Lw%7FP7@i3%=YhoZep7HB_RgeH}>F71vqXMA}nEIHf8Hs)us6j^7soW<-E zLoHjpz-G%95%aA81(u}Bc;clwbN z*)NOM>Oq$-QQyc^2=thj9~!rCxruy1J(Sg6i18 zuu@c+TN})a6}?3y`D)d)ea$-`0(ky(!^!V-@KfW`4e5!?hzoM(yaG6$gG6%Wkj!?r z5oY722^f+Lc4rL*tTMbajF0>Mkr7^dLTsAKl}Xyujfb!HJ!a)}Bg_kYJ{7DeL4MucBG{3Q@(^O|6`tv4#-(BDaUeZp|S*fo%n5%w)|Hf#W0|CSrRD zQ(Mw0N2OV^KKmeF+s2K+>0S?E7BZ$;kLQr4*=Zz{7HItDE~ zGqZzRQ~Knufh7V$zBBuve19zEyBn*WxOX}_i~b(16VZ0VO3I_c*;&GZFRWXEd}lBY z@FTgy70KY1qsP-u*s$jA(^kf>^A(BLp_1m=IR?sL>W;KwR44(--rORo{b+{o*o)Z( zV9o=@al#{VNn<=ZyN}!lmhdw6d7FcLN>ofIre&C%M%4TMH-6! zqbZv+KxL$OR`Ut98MMN{lWnHLbTUs|tF%k(4^a6t#T?@9W=PQr*1VXuRX`Nm0c|`| z$=wlAvsN7Jrg5(Z#)|H(;^-?{(ID# zW#d9Pf(js~ovvN*SFmk-ru=OFVF^^A7}?96sYz~)v^PW!T%*O(}bjXZA- ze_AtaQQ1q>=DbaMRZW}xqo8(iY1}A2Nt-NAW;}{VPY}R(&};QEhYDJY3qFZsZ2PAy z1?6&9|B|#~V2DR&{S)pd(v~xZXbM|N*6dTEk#lD$lOy~jOw%hL zn-2V1cV(-M0_GLT9^SrKl(ad$*0ZAf)Ipof9u40UosNzN-9djiQoq$wfuK(w^zS>O z0*0{U2N8ys>5np^PeS;|NDl0dmcq+5bPtWCiu2Nyle2%6)Q!${&5#y=}>>OoeBz$O7v@Hu7^cO+n&oySkvZG@VN%{`Bbr!M~O2i*W zPYJV5AZM|WxTMpz?7+$=!*gF2h*=#D8<#kuNB)L2?nPb$2zvkG{ruH(R? zE2xhnue*t5Mz#U|$3L8sd$lxj;dmQ&WF)VF(~M2_WIi{r(P^LdBq9Snk2@&g;v$1} zri?*Nt!CQg1}61LPGIIY)Cc^l3dex{goQ@qmT44Jl}Q#TR@SLT?RF9TY@uloDhysT zCd#5+mS%;!Hyr=Z9B38YqNMM==xE70ZHZ56e0O38H2h;n_xJNQPKQ zhlur!NjP@twf1a#J<|KQKSZ!|H`)L^Nx#!RiT)>!d1SlI!gVL-lO0UsLqFE8y#!}W zd)0wt`DLNla{M$Qr@GzKpen%H*~F>bMzVbl)LseX`>?F^W`W<05Zvj@BNf64ow|m$ zXqVb9J%+PgS_JMWLO9`1J#XD>CZMVXbVc_wD6Rl1&xSW~=nwp5%K;-4O}`w1ZDx|R z0CrRS?X3I9lcz;N)%UizAx);J2u^l^#8#Ow-i&xiN$g1)>eUoFG+)#tlAamkdUV^J zGcKVD+pjyzd}Y`^J;SYX_OyRdvP4sG5`0?C=m&REf^s1%2t;|X{M#TxIk#f-(fhW2o6`k3=nF0uX?Mf$9oUu=Zq8RZ<-Y!oMpY z^scL}!OEzg)_wc9xsEg5C#H25G%-^$_iXh{SVcB>t!r=uDHDY&x_?08cCZGVEve z=?V^n&2kVDtVCJZS=o*Do~wPcymn>)N+cvo6z4kRE+fsH_&BGOd>3W-0K|6B{`Q6J zD}PP0BYotHa6`nbe)*G7`AK|nK-0$FUi?M2Q+4{+Rq5AD^)I3=X@-9`(GHj6z6kbz zgJ54L&A*8CpHi$dix6Mr`oBT0ua)Q!Yz7K61b`@k-K7w5VTo_BY2YqbLcWt9XLn^2 zfyOltI&qhQCVA78H}xd$v{viQ|NN(Z_MJIWPqr)f+`6^fx@WR;{jISkVcFY2g7u#f z62KBH{Yf~nIvB_fBbT0xvNl0^1!0SHlM$kx8cEA-hzsJ_g_}4o8pEEXofX}ylR{$e z?6BKUv9+n4>kV+UF|HM}Bnbe$t5V#qp8QrIH*$NplU?@rc3#Mi9^G}}_F5odM}lM` zIUwyXzj~=VT&t9*Pp;s{X}Ug$yZq_4Cb;myN!)6TJELe?Na4>t91!D(b<%jKe$vVNi2FpDak zdy+$^nGCt4u#`^zs(tCfqm98}HLaqff^Z|GFJW2Sxe;Xb*wg^4CjCA#2_KVE8=g5m zi@oy=ZdmhjEq?d34@Y*xQ_oGRNIv~T5M!4s?23D;$|mSL8)htw`&-%jrhRhv*3D+C z(b_nfbPSCPa!>XW1c_$r3-5@({%jHB+ahgr9Ar2dMT#j z=QK+%ME*-$#A9^$<}j4as{w;R714+Z?L!c(*C<eO}hF`{RTC0E=$#De&RPPAwa z(%}U;v-2i#^Fh^f4GvqTrFfNq#AMrymLe$&jMD8f4_LPMyAD1m zYe14Ud>dvY=eRbSPIFNdKh1c6R|z$dg2fde^3s}Z;l4Bq^t;{_Xd$grY8q<*9lq@L zq=5I=)$cNm&6l-4DBT&V@Qhijl0(u!*jIU3A*tkbShsDBbwRC-Q_6S*Wo&gc!e#`G zY?W&|OmXAP+;b0ohcHYAV_fKb)P;fc@alL80}227-yf!TgI+IOj(!?{6qB->529Xo z5n9(<%5kD6EFq@uOd!ij@p2*Peuoi?&I+-Z4bCRN|6XeGfT5@HMG&5dfwFs^=%VY% zA}R`qZ>=Gp1bn;uxWZ)=CnE397UEMdY!rXU<7u!CPcTxvq)Sg)H=aD_@l#n?nKkd_H}AH0b3BzDD*>QrPsE8|jSKS?1HQfCQNvW$StuELXxk+*^ZD{WKPBrhzHn;2+7s8p4 zIlXPdnY<#NxiaZ{)kOwrf<6hHO60k+gCy%PScqBK2jAt8IRS>sAQ@S9LNv-D)bI^q zLba~n*LF>tE$jES*@B!ylEE2^ci)wQK7cMU4r$BXlC9b|N7vsVRgJIX5mQ8b%`@J# z6Sbzkt*AAjy};#MK%y8rib{LJe%2;J2RjDIm1YEZVA1E|Y6$fyHPj*+Lm8BzWI8xj zu-zaMELpI5zcVq3XII96XxVVBzi!%4GKF6*v(g^W%VY0SGv(%OHO>56YO0$$VFQ!N zMbp(J18!eyuEuLwvTm?>#k!S$!Me7&UR$|2I)_-fU#5L#Gbuf^=27PfM=t`z1569f zq=)f0DM_n+yVjycE!(U~Y1iIH!WD}Y!YvmwkqdZY+S{s>cfCQY=C+6?KSPqH)#)j0 ztdr9aCN_J-=11>nIgppI7@VEW$U+H@;X^LK^1upSPGbN%gNv027<$Y`%K@w{pnpZU zGJvAC7TXcSRxGcu{F@N=$_Md2Bexs~3_PB2vV!xyB>o_iu8zcgCCC(RMuqzrOrbJZ zdoXJ^fjDi0zIy|w#F-TsWrteIi|R=MUD?C z0jI;w%DZ8bwez|x6XUq0PSCuZ+Otrfw3YiK}Zdtc9fTk$J zc*Qr698Yeh*%mE4){q&tO?8y3}pk_CBHkg-X)~8oQQIr9r3`P%z%hjTcGx^vS;Obn;^IgQ$6b4DekDkK- zh?FH6^oD7%P}?z0A;@&`3&uI#rSDmWRr|ws5Z_hw^w~kZqiMqs(#WqIOjvf%d<2Mn znWYJV`orsn#Wc*qdgtL(TTXall@GD3B{x6BDw9eo0q1!%yx|%577wg+NMu4j2LwsJ z_sJ<3v3da2V&ArK)Z5IqZ+UU?j*N59>uFGO#TL(j~ed?xAYEck3uu zJa4Y*WgCXLjOl23INzz~v5+t*8#hEn0r87J>b2i`WGe!tofdNtVz09L|GxUd*i@Y^Qh?4tJa4+T_M&$1D|DF z!cLM$5)!TI-=LQuX60DaO*Z-PLJRE!h~TXEgrbt9Y$Z|8>?_2qFTYxL=+Z6xaYI+eQoc7)nG%tNc=N07~q zjgMfr*VbT-(zXn%Nqr?&)$JCeHJ)c7HG);kHeywEolrggt=w^~;h=$S_SHZ`jZmv~ z8?jcCI>Aq`#<15EI3!dyNc-efo65Vr(fdb)azY-t zJ+-@?GUh`aJA%Ucx=V0Mu`1Z=MVye;pg3%fCyQZl?;ddtd7^iNdr=nOgP)(L%jh2K zqz+;snMUEQ!P$5bVd_c=`VU=?-H-CgJib6g zMceu5mZYhks>U4fKwNAw^l1~=(^|c*g9%q5EC8D-)qYSH#Wkn8O=#4b)dfebnm45i zjF1PVNzgLExf)5j$?&Ln9B7P2Fkm3DEkXzlTW>PL7G{jG$v+Fy%h zCAcww|4UE~_2XBJqBp=>=7)0rUk8c<_p-2Ml)#Oa>(C3c%fM#1@brXTQBs+NWtiGe z*abh8DcoG}V;Q!9Jo!}HbPUs|z^dk^SkEY_d~PYjATH#)CheSpar7Iw&7ELYu(%)0 zI&Xkk3_kF(iS4T=z1iqo15@F}jj-0gA$Aq&>khq#ZycT$U+FU&ci{ySpzeiuu7u$$yzt-wF_|n@uqh=DM)Kptm*RXxxr!?_rSYFicypG@!jY&h^3?09rj(-wbIP#q!UUJgTbt zgpS*gqzj`$Mk>^m(N6f86P2)2&lcnjH+{@N*x#lHkor!r!9`{D+$z{$qt*5qKp4dq z+N#Nf((eY5b>z`WkLat$&6LMw0^0CBV$->RY18gfpt9*mpwNpwXoaARZVCd?o@vBn9W=t^ncr&GPJ$BUyG*a8|AwhmllEyX zWwFcDR<}(%Z#CPBgnt?2)amRFI-!r3eHvI8n2$X;`hhR5w}dpDPI}|y3)@!?R`}wO zwCw$w;EF%oeg1NO7kA&1l6!=Bv?)R!o56UTLIt^*sB?w;*6`vAG$M27SA46gEhiw9 zcfaif-)dx;eZITj1|3sU_0XwT8|d6yMp``Z+{e+_z;kDu&g1wEK065SxKN#o?hR+*TQN@4@)>_BNMFk3 zuihVnpCeQdrekIrer%1+2fRxg^9Jq<#o|jy$HXupDohp05veJa%@Di+BtVGdHOzG2 zqlodtA^kgtj~yORpqTXEG)VU(IDE`eWx@T2^fv)!`_E6Iea%e~K`K6@0l`WCMoZCc zK@T{J@;r6NAf(TK6;4No{F&$+cf~+UL_AO)6)V`oMiQ$qlm8aw8+;Y~ioPXo3kG^4 z1VBpSbln8cQa}*rhD{4(Zm7P`kY8(?N}Grq;ehA-r8g}D))Z+n$q?2p@p$A=Le(vz z&ka2BG(O+l*RJOMBdH1^Q1g03^5Gd$s+fLe{UXGOtwes(q#!gF{DHgA0C z&4;5$-$=D3%yBN8K8XFMuGy7yX`3YD%42!F-SdrneNsk$hEAugC z<6Eay*xaZ;7dVStS?cq{8q`&pkvuS~KDY<45y44T7LA-$mo|a73!;&v%K6<84p@0x zQLW}{bZ!l&$vIO}Ey2SU_PXrHHyelQfPvKxS&e*K1fohLhr<^nbqqslKRcqug!!mw z49B3C&6${YYCxREY=%$s@gh7$LarcW2TP_K7^g^`wA7If_SS5%a9c5(mAhU;)0dQ; zG_TlB26>X~Vz8UxvJfc4p~u9GwJ&*evBy30eg7x;rKL$nbt{m# zGLQ{ex#PYzj0v;3jTo&)Q^{P-I5m*474_*dy+tqvV@;so7uR#IZJs%{_B$bWL-u22rSiGWb+DzW ziz-&E)(9fn>ah75@DZz6plZNM1Jz=Iz(^L{Dr10ZL8CPny6q%u&FZIFtJX4#NmN3b z=!ZN|qKciBlwT#0RYL_NDYp?3b|vv$v?}L6Q1T}$`UqM3)+~4+LQG)Xp2W|MPfF5^ zRpL-dn!VjM7Ip*IQdYjU=kj^mwH=m9y$EyaWip0#~lMHk$@wPmR@FDW( zN~5XkP$vGfJQ+{gWpZse-*WQZ2Yd^SG|ZH3c@UxZcZ=VCZ6-$Wu(n zbEDWlQ@VXpYl(s*sWmINz=pdifwNB5oEU(xBEbak+PI^HPbp<_)ddm;fgv)ZFF-}g zJ@zzn(jb3nkivX~r?83}0HL>rNJJbU86;9`8H`7D-6ikJhU~j4@5+r3Mk2vC2&)pB zs({MnZ9G;W9Z(~QW&CAZETb*AiaFHHsa0}%LXl}cx6ATb&+u8wyxvukPodNHFgI1q z^Mo)*+j&*SnD$L2^Py3FZ@^+eJsPfPpOO-j&XeQ%U)WqgL0jwcP0b|mwLUpf;Gkx0 zHM|O*!9;Q0slWC40#L!HME5u+?7Qt(3f0&vql|6r$Kw8jM=DXsV~t; z`lzTy)_YP`IifzQl2qZ<10Yg$^?jN3jhrJ%Y0J6wY47Mi?%n&(PLZyV#QH}F2kYe=)X9x<8 literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-3384.b2ebeeca.js.map b/priv/static/adminfe/static/js/chunk-3384.b2ebeeca.js.map new file mode 100644 index 0000000000000000000000000000000000000000..b08db9d6e93734164f7998335f18798d51f8d6b1 GIT binary patch literal 86706 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 diff --git a/priv/static/adminfe/static/js/chunk-4011.67fb1692.js.map b/priv/static/adminfe/static/js/chunk-4011.67fb1692.js.map deleted file mode 100644 index 6df398cbc049afdc07b00eeb8831a50aed160b1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 397967 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 JgBv&A|9|gX3akJC diff --git a/priv/static/adminfe/static/js/chunk-7e30.ec42e302.js b/priv/static/adminfe/static/js/chunk-7e30.ec42e302.js new file mode 100644 index 0000000000000000000000000000000000000000..0a0e1ca347ace596dd018d9c5d2fcdf2dddb36bf GIT binary patch literal 119434 zcmeHwdw1Kmw&(xzDO^scSDMnQleB5WEKOFLN9!g|eBvZMJsvL&B~cb@iBw1`j_de- z_W5nRL4b~I({7yl-gQ!ocx`NK>^FeUVVaHe!`@*sT*RY;-^x5&^gZ7`e%#&b_7=-> z+S%O=M$=_>u>NCmXCv4PkArV-XMY6IWSNbsG|xI!n1pHfI9Qg+T3Hq8s0!}CkBhak zpLT-T`0m@Fdq3@EowD1DPr~5ack%YBt?zEUd}z1c$j7DI8r|N0clV`R;0J1FR36#g z-r3CGtlIkS+aGhg_4hB{ymngysPBjOKDY&bpbqy(HK5q+9Xz9327#~O#~&A!J04ox z`!%1q1%5!X(VySh^SihB{+`?VBz(MGZ8%`~JNv7{hdo# zC*hm%&i76?{(1a<_}d$69&g@_Ua#1euxPifo<4Hgf*1V$e(PHoPCr1eff=h)g3#0H zAJ2Y$;`=<>eCB+%MoN1{C+TW=k#FR;f^L}gxx@%#5+XHWkRh4G@Wlt7wqcoIXqun5q1=K7IA_%Y|*gFa1 zWi?H*Djmfn-#q=Hyw(x>5=66cyr7

f$#3+MXpvK9769C&S)Dd}IHJzH>HMfU5cW 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±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%0DmT(?fK$;2n<^FnPG3FB*LE1Hu; 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 M;L|}XQ}Gy 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Ν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 LnOmEi`}F?-th5^< diff --git a/priv/static/adminfe/static/js/chunk-e458.bb460d81.js b/priv/static/adminfe/static/js/chunk-e458.bb460d81.js new file mode 100644 index 0000000000000000000000000000000000000000..a08717166a110e651128b9bd121a12375ba80aa6 GIT binary patch literal 17199 zcmd^H`*YhklK%bv3Wc||E1fCYo@A1&QogD96+4OJhhk42mvT`gEYadaLxQqpkN)@l z8VwNCD{(TZ+N#@3O-A|vG`btzjRw$~=1r7_*^PH2dLus=zAmzKw6z5L^Uu#;THdHE z2F=f(onTO=!?t+x>vQLed%rJFH#=8l8ptS1o6;>@(YklaLNp4QM}c%+2rq9ItrufI zZ}?lH>6{(@apJVxbW3H01$crP9mYvA+-80e4GPzw!nWdc^ z01xhDo(lf0<6zL?xiky&uPKGe5+~N(*LSLk^8eIbswCxovGVX+!56%?f*rxGqk{WndeZCnROL$BeChX zwY9Y<3j}}yOF1~m3ORKnElIIR^z%0cfANAW4Sd;5o2}+z-;uxydRIaQ0}-CkmsSh& z6}zGs%51bapA&M6vy^XtH1a|*jsihMjy%uB6A zTO_l@j94Rj*wh{Q{Us7C8AnFA-28|H6Y55HKZ6*NnY#0a)Vc33)6{pdI!}{kscB!f z?&~HLM#ad7`1)lk{a z3~!vOG)me)TizA*luc*Dhj!r$;Z_p~)ami-XRu9tdUFu2IjxpE*gEcABe!XWp5JQ5 zZY2POMZPB0uJ0CG()(MG3mDj5EE41ot^jliF0Z`H;Lksc7kYZ>)wiNGFO7no*e{BXLtiKdYGd!0ew2#bnYy39(RUz_YMG9MO$Vy+F2_yh|I&u~;`)c41a$lx#RA9gR>--x^KOlh_Ixhn` z(}Nu9N@Zuu{D?#1yvs1!HfIl~<}`sAWHEw8XD%3+zMKfc_nkCr)5)(b#jSMayQi5s z1QqDZ{83sDk95@ztG`TL94PMtl~;ns;$BJ_NhpwGj{Ue4=wgDrq3KS6tN?*jA5RS(iWCT3F+AMJTG+^rBYL$taWKk8basbkhhowxj0R)B z2WF+Kxt&g1)7C;rO!OJMO=rQPjjf>s9UZtT#<-Ox>9DX=reR4mUmnY| zG@hulL04~=$}4%hTN<4Ix@adH$iF6>?y^ig-Sl7q>F}k;tPqjbA9g{hL~TP>d04fx zd$CCSazLhlU3NCnfO}UYhKEJM)x)r?nhs-XM{ ziJv;z%;h}`R>>5t_waY}#~`4SLZ|TbC)XjJwX1~&lhs{_>!@Q@C2+epvB9zPXhZuP z6K}ISlJkQGN35Tg=7X_}K zu6%^et$~Lip5+qJ{7rIDyXVuFsDN*t$96ARcDGtxss?BMcTNj;t#qYISDBRSKX5F~ zJ~Q?#9ei3C%TwJu-nxI~beuQqGH_h=&ATpUfE?eh)8i-HoVUX}0NG}5&jLK8jty_n z>Gb-^Ytw0X!=36_JVB>}lg9(oDV}hrI+pn8w3D4xloFpi)v`+Uf*SrEk zntS*56emnHhk9-ckj~|+_yaeKwvQywDb~uN1$e?b77Wm-eEjOrbP5LCsfICNNs|=6 zf6T9Wh?b%PM2zO^bMa9%iSFp~sy+W=9bOaHl%vm*}*cj3XwKw*8Vj)iJdk z$A=%QPG&{wSic8K$G-o}Q0n)XQXPv(dr!jS8`CM$MmvL%Xu;i4R&~vE<5vJvoWaPLcZWk(J$2H?T*G*jB~3mToJF@x zSNmKA^hwC`?hZHiwU8DF(frT+jP0)b^nEwikNKxmzgEK`V(u%SG8SnN*pT)ytqS|ULK!(~I zMZ6zI66;F9?Hi7D3g96%Oao@rHLc|KufM)i99-*_v;YM)dA`HJ^;!qD3K-Jp!)^IV zjUMXJ78nvg9}*5R!=awL0!Tkkw>LN>4z+SDKpWc0=#XR2P;Y1!AXhmYM{FQN?J5?a z<$1lczs{`b<*|U;RQkArC&w9@O~n8)1;?|OH>avO){)TyGh79gdTA8vSaiM3KIAR()L^Zsr_jZU=HT7az9KP=cR6K%B?Af5ZC!*d?3b#4Lj zy_e%L>paoEX93cA{86&piPpIV$R&<@8@%3$b_olRy*^z#<=~d!Mu4>Z>E+Q0GeZE| zKn-KSjw0Q?+Bj#YNwn@PKokdAy3Z6fxe7>W-FnAIysW8SHw%zzkFSTkWu#iQ79i!U z6&rm;JjLxT_5WouWb;=5vs=R$u%k$W<=zCZi!iKIYp?=FJ`QB)@qB%aon8SHyfP&)IrzfYp2NpVRS%B2GzWz`4+(N6_0%XC@{EL4o6&2coEkG75)_m4rp)J?~ zq@4c6#Ty>2m1BWF&^$Rg;v~BGgXOjWsp{_bX_rT1FP!8=aBnTXs6#xghB9DBlBu8P zo4f{v4$T%I7ys~VLyM?g+yZpm3E$nkT>`?&b!mM51&`;bNGoN;_ReyV1d`kY|_+C}z``+9brD_9_Ik5oc&7jcA=1TYV~ z7NahAk1u$Sm$B|(5n6}c?11-PsUwL6?r2f&Huu>D&Esui~`c%SufC!fV*u@&KxOyBNorNHq9?9iK*1>J)q+SDSs)O8!b;}=c5rymHYxX-+0$9aDOS9n=mwf zWzsWMcBwB2mlv>bbp{XV2H6OEtGXpG3n)sW4z4TGB9hTq;L3SyYj6YEo!YEn+tn^Bs3e(D6X-lfp3PZz#6U+mJbz(tKyQ_qekA`ehdQu76RpQKnvB_`$~9RaI^?N^i5A2H=x;f*sXic9rQGIckqZG+y3 z#BUp&wdPEhb@4x&8_L1Kz2MEXgsq|~~ms!g?}H6QV(eRR~`-EABk zbdtoDF|od@CzP6KrZQ0^QB|H&dxTNdh)|3w)}hOPM0vcAm|~sW6ziZ?xz&v9(-Z6K zyNh+qvni@d*dOpTq1IVH$^?FnAZxLs3o2p1>?yK!iWab~l zs!?C>rgyc4_p_DNIe1!DhN1Z#;AU;9Oj>yArrx@0??LRFrfi$tBGhj}^e%*dYVTu} zQkF^C%fbmyp>>Y1BjEs~a}=uLOuv*l-OF*qEWu+XZSPTvlBt9DM{n_@r5-b938L;x zy^?)}=uL!5!4kJd%t9qO3L@b2iY9}@3~)8Nd_wm6HvL4TvTW@sW=`6dV}EiiXt~~1Zk;yv&)fOmOur~F=gr&ZqYMqKzm3mq|1!{efWzLpDh%k~?WmVZL z7r)NcgBmUB(}GI+AsD3;c$b-V8nCQNEqt7wZ}6~olQs<0hKvJDy5Jw^U^FsU`NjLb zX@r?905<2acEeFy$80mW9Z8XZTdE!zi(@LWQ)L`W<5vA#WS12MIFB~4nA%Wlt4zmS z-s~4Nxk8tI7*+?RS|ygz|3blRHLDeq4df@wxA~Lg%SDon#kWOVbVX;xWv`F$Q?W%= z>!9#+rLN|wlieu;{8Qhk8`{0mkd3R)!xcQ>*@6h}x@n^@XEJG0ITBmS0j`G&!&u zN=X;}UWx8ZW)4aw52y{A%cNs;S7uz6UK?kwccO^k^GiB>xH&!f%s=L<$ zCP>$OoRFm-4CrT5tIP1&E4cul23Nav0ua;JS&#eyU)i|cA zjSYcdY2kHlg30p2Ykw;@k8;!Lm)48_T3`R~Mv;|p{v-Sd1+M_-XK%Oc|K7su^`1Q4 O2%m4_(bG%((Z2v_2pr)6 literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-e458.bb460d81.js.map b/priv/static/adminfe/static/js/chunk-e458.bb460d81.js.map new file mode 100644 index 0000000000000000000000000000000000000000..89f05fb991b8168a2835b4bc2f60b0d4afb046e0 GIT binary patch literal 57478 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 F{}0OeWOM)k literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/runtime.1b4f6ce0.js b/priv/static/adminfe/static/js/runtime.b08eb412.js similarity index 83% rename from priv/static/adminfe/static/js/runtime.1b4f6ce0.js rename to priv/static/adminfe/static/js/runtime.b08eb412.js index 6558531ba18c4cb854e2c1a9c609256d40dfd89c..2a9a4e0db23ffdc2e04e5d36f235d4cac427124d 100644 GIT binary patch delta 155 zcmX>ge?Wf2eI^$3RAYn5jLcG#-!aKemS+CLkz#6)nqq8WJXxN_k{=|iWTlj5lw@gU zZjv}Tokfv9)x^{SC}x&yU~XWXoHV(f#d7lnmSz@?B%{=%)YRm}$ge?Wf2eI^zY14F~fpO`dRQcX-PHVZJbGjbRinOme;m?uw`XR+i5$tzhYC7YOA zS{j&{Pfll1oVW=2N|Wz!!Zn(tnkFWun3!y4=32+fZ~nNd^|FNhXFyo8O8p z<>W{*N=-^lO-`IVOTiheD@MsGMkzJf#0Y4D(c}dhB9oaEg(v$e0+lA2m>Hy47*6I= zbe=4&$+@{mv5G|$WD`)2p-v34Z68$iHyfylFma@q8l delta 192 zcmaFg%=o^UaYHy0i;01u;p7Y^WtLPEQ;W?_Ovxe~hDj!AX341ro8O8p<>UYgr==yP z8BU(1;4BDI9iwCwqhw~DmSkvVX*79(hR9?lMd8VYiWY((BfzpIsiujEDJCY91vEuA z7b#Y;K&)X@)1UlTRdBO`ng|nzk&(GYnuU4tWFHMAbCXTXEiDbq%z@^rPkyX{WM-O$ PMN(o~YT{-A&HEAnsG>GF From 95f6240889c216feaffe55d928e0a4d5ff634119 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 27 May 2020 14:34:37 -0500 Subject: [PATCH 35/65] Fix minor spelling error --- lib/pleroma/emoji/pack.ex | 2 +- .../web/pleroma_api/controllers/emoji_pack_controller.ex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/emoji/pack.ex b/lib/pleroma/emoji/pack.ex index eb7d598c6..14a5185be 100644 --- a/lib/pleroma/emoji/pack.ex +++ b/lib/pleroma/emoji/pack.ex @@ -499,7 +499,7 @@ defp download_archive(url, sha) do if Base.decode16!(sha) == :crypto.hash(:sha256, archive) do {:ok, archive} else - {:error, :imvalid_checksum} + {:error, :invalid_checksum} end end end diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex index 2c53dcde1..d1efdeb5d 100644 --- a/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex @@ -106,7 +106,7 @@ def download(%{body_params: %{url: url, name: name} = params} = conn, _) do |> put_status(:internal_server_error) |> json(%{error: "The requested instance does not support sharing emoji packs"}) - {:error, :imvalid_checksum} -> + {:error, :invalid_checksum} -> conn |> put_status(:internal_server_error) |> json(%{error: "SHA256 for the pack doesn't match the one sent by the server"}) From a2f57bd82b1b495a754516231b56e53ae41c6b69 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 27 May 2020 16:27:07 -0500 Subject: [PATCH 36/65] Permit easy access to vaccum full and analyze via a mix task --- lib/mix/tasks/pleroma/database.ex | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/lib/mix/tasks/pleroma/database.ex b/lib/mix/tasks/pleroma/database.ex index 778de162f..c4f343f04 100644 --- a/lib/mix/tasks/pleroma/database.ex +++ b/lib/mix/tasks/pleroma/database.ex @@ -135,4 +135,30 @@ def run(["fix_likes_collections"]) do end) |> Stream.run() end + + def run(["vacuum", args]) do + start_pleroma() + + case args do + "analyze" -> + Logger.info("Runnning VACUUM ANALYZE.") + Repo.query!( + "vacuum analyze;", + [], + timeout: :infinity + ) + + "full" -> + Logger.info("Runnning VACUUM FULL. This could take a while.") + + Repo.query!( + "vacuum full;", + [], + timeout: :infinity + ) + + _ -> + Logger.error("Error: invalid vacuum argument.") + end + end end From 73ca57e4f1620ddaf167c368f48a0096b2096a96 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 27 May 2020 16:27:29 -0500 Subject: [PATCH 37/65] Make it obvious a full vacuum can take a while --- lib/mix/tasks/pleroma/database.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mix/tasks/pleroma/database.ex b/lib/mix/tasks/pleroma/database.ex index c4f343f04..1fdafcc88 100644 --- a/lib/mix/tasks/pleroma/database.ex +++ b/lib/mix/tasks/pleroma/database.ex @@ -34,7 +34,7 @@ def run(["remove_embedded_objects" | args]) do ) if Keyword.get(options, :vacuum) do - Logger.info("Runnning VACUUM FULL") + Logger.info("Runnning VACUUM FULL. This could take a while.") Repo.query!( "vacuum full;", @@ -94,7 +94,7 @@ def run(["prune_objects" | args]) do |> Repo.delete_all(timeout: :infinity) if Keyword.get(options, :vacuum) do - Logger.info("Runnning VACUUM FULL") + Logger.info("Runnning VACUUM FULL. This could take a while.") Repo.query!( "vacuum full;", From 0d57e066260234fb582a63870cbae7517e7b6246 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 27 May 2020 16:31:37 -0500 Subject: [PATCH 38/65] Make clearer that this is time and resource consuming --- lib/mix/tasks/pleroma/database.ex | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/mix/tasks/pleroma/database.ex b/lib/mix/tasks/pleroma/database.ex index 1fdafcc88..2f1f33469 100644 --- a/lib/mix/tasks/pleroma/database.ex +++ b/lib/mix/tasks/pleroma/database.ex @@ -34,7 +34,11 @@ def run(["remove_embedded_objects" | args]) do ) if Keyword.get(options, :vacuum) do - Logger.info("Runnning VACUUM FULL. This could take a while.") + Logger.info("Runnning VACUUM FULL.") + + Logger.warn( + "Re-packing your entire database may take a while and will consume extra disk space during the process." + ) Repo.query!( "vacuum full;", @@ -94,7 +98,11 @@ def run(["prune_objects" | args]) do |> Repo.delete_all(timeout: :infinity) if Keyword.get(options, :vacuum) do - Logger.info("Runnning VACUUM FULL. This could take a while.") + Logger.info("Runnning VACUUM FULL.") + + Logger.warn( + "Re-packing your entire database may take a while and will consume extra disk space during the process." + ) Repo.query!( "vacuum full;", @@ -142,6 +150,7 @@ def run(["vacuum", args]) do case args do "analyze" -> Logger.info("Runnning VACUUM ANALYZE.") + Repo.query!( "vacuum analyze;", [], @@ -149,7 +158,11 @@ def run(["vacuum", args]) do ) "full" -> - Logger.info("Runnning VACUUM FULL. This could take a while.") + Logger.info("Runnning VACUUM FULL.") + + Logger.warn( + "Re-packing your entire database may take a while and will consume extra disk space during the process." + ) Repo.query!( "vacuum full;", From 30f96b19c1850d0dd534edbe66ce19a1c8198729 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 27 May 2020 16:40:51 -0500 Subject: [PATCH 39/65] Abstract out the database maintenance. I'd like to use this from AdminFE too. --- lib/mix/tasks/pleroma/database.ex | 52 +++---------------------------- lib/pleroma/maintenance.ex | 37 ++++++++++++++++++++++ 2 files changed, 41 insertions(+), 48 deletions(-) create mode 100644 lib/pleroma/maintenance.ex diff --git a/lib/mix/tasks/pleroma/database.ex b/lib/mix/tasks/pleroma/database.ex index 2f1f33469..7049293d9 100644 --- a/lib/mix/tasks/pleroma/database.ex +++ b/lib/mix/tasks/pleroma/database.ex @@ -5,6 +5,7 @@ defmodule Mix.Tasks.Pleroma.Database do alias Pleroma.Conversation alias Pleroma.Object + alias Pleroma.Maintenance alias Pleroma.Repo alias Pleroma.User require Logger @@ -34,17 +35,7 @@ def run(["remove_embedded_objects" | args]) do ) if Keyword.get(options, :vacuum) do - Logger.info("Runnning VACUUM FULL.") - - Logger.warn( - "Re-packing your entire database may take a while and will consume extra disk space during the process." - ) - - Repo.query!( - "vacuum full;", - [], - timeout: :infinity - ) + Maintenance.vacuum("full") end end @@ -98,17 +89,7 @@ def run(["prune_objects" | args]) do |> Repo.delete_all(timeout: :infinity) if Keyword.get(options, :vacuum) do - Logger.info("Runnning VACUUM FULL.") - - Logger.warn( - "Re-packing your entire database may take a while and will consume extra disk space during the process." - ) - - Repo.query!( - "vacuum full;", - [], - timeout: :infinity - ) + Maintenance.vacuum("full") end end @@ -147,31 +128,6 @@ def run(["fix_likes_collections"]) do def run(["vacuum", args]) do start_pleroma() - case args do - "analyze" -> - Logger.info("Runnning VACUUM ANALYZE.") - - Repo.query!( - "vacuum analyze;", - [], - timeout: :infinity - ) - - "full" -> - Logger.info("Runnning VACUUM FULL.") - - Logger.warn( - "Re-packing your entire database may take a while and will consume extra disk space during the process." - ) - - Repo.query!( - "vacuum full;", - [], - timeout: :infinity - ) - - _ -> - Logger.error("Error: invalid vacuum argument.") - end + Maintenance.vacuum(args) end end diff --git a/lib/pleroma/maintenance.ex b/lib/pleroma/maintenance.ex new file mode 100644 index 000000000..326c17825 --- /dev/null +++ b/lib/pleroma/maintenance.ex @@ -0,0 +1,37 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Maintenance do + alias Pleroma.Repo + require Logger + + def vacuum(args) do + case args do + "analyze" -> + Logger.info("Runnning VACUUM ANALYZE.") + + Repo.query!( + "vacuum analyze;", + [], + timeout: :infinity + ) + + "full" -> + Logger.info("Runnning VACUUM FULL.") + + Logger.warn( + "Re-packing your entire database may take a while and will consume extra disk space during the process." + ) + + Repo.query!( + "vacuum full;", + [], + timeout: :infinity + ) + + _ -> + Logger.error("Error: invalid vacuum argument.") + end + end +end From 92fba24c743a5d2d9ed78df7499fd3123a6ad6ac Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 27 May 2020 17:17:06 -0500 Subject: [PATCH 40/65] Alpha sort --- lib/mix/tasks/pleroma/database.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mix/tasks/pleroma/database.ex b/lib/mix/tasks/pleroma/database.ex index 7049293d9..82e2abdcb 100644 --- a/lib/mix/tasks/pleroma/database.ex +++ b/lib/mix/tasks/pleroma/database.ex @@ -4,8 +4,8 @@ defmodule Mix.Tasks.Pleroma.Database do alias Pleroma.Conversation - alias Pleroma.Object alias Pleroma.Maintenance + alias Pleroma.Object alias Pleroma.Repo alias Pleroma.User require Logger From 800e62405855af673328278ce08e9b1c5cb0602f Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Thu, 28 May 2020 19:32:56 +0400 Subject: [PATCH 41/65] Update installation guides --- docs/installation/debian_based_en.md | 4 ++-- docs/installation/debian_based_jp.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/installation/debian_based_en.md b/docs/installation/debian_based_en.md index 62d8733f7..2c20d521a 100644 --- a/docs/installation/debian_based_en.md +++ b/docs/installation/debian_based_en.md @@ -38,8 +38,8 @@ sudo apt install git build-essential postgresql postgresql-contrib * Download and add the Erlang repository: ```shell -wget -P /tmp/ https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb -sudo dpkg -i /tmp/erlang-solutions_1.0_all.deb +wget -P /tmp/ https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb +sudo dpkg -i /tmp/erlang-solutions_2.0_all.deb ``` * Install Elixir and Erlang: diff --git a/docs/installation/debian_based_jp.md b/docs/installation/debian_based_jp.md index a3c4621d8..1e5a9be91 100644 --- a/docs/installation/debian_based_jp.md +++ b/docs/installation/debian_based_jp.md @@ -40,8 +40,8 @@ sudo apt install git build-essential postgresql postgresql-contrib * Erlangのリポジトリをダウンロードおよびインストールします。 ``` -wget -P /tmp/ https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb -sudo dpkg -i /tmp/erlang-solutions_1.0_all.deb +wget -P /tmp/ https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb +sudo dpkg -i /tmp/erlang-solutions_2.0_all.deb ``` * ElixirとErlangをインストールします、 From ae05792d2a825dbb7d53a7f5a079548ae8310c63 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 28 May 2020 19:41:34 +0300 Subject: [PATCH 42/65] get-packs for local generated pack --- lib/mix/tasks/pleroma/emoji.ex | 38 ++++++++++--------- test/instance_static/local_pack/files.json | 3 ++ test/instance_static/local_pack/manifest.json | 10 +++++ test/tasks/emoji_test.exs | 13 +++++++ 4 files changed, 47 insertions(+), 17 deletions(-) create mode 100644 test/instance_static/local_pack/files.json create mode 100644 test/instance_static/local_pack/manifest.json diff --git a/lib/mix/tasks/pleroma/emoji.ex b/lib/mix/tasks/pleroma/emoji.ex index cdffa88b2..29a5fa99c 100644 --- a/lib/mix/tasks/pleroma/emoji.ex +++ b/lib/mix/tasks/pleroma/emoji.ex @@ -15,7 +15,7 @@ def run(["ls-packs" | args]) do {options, [], []} = parse_global_opts(args) url_or_path = options[:manifest] || default_manifest() - manifest = fetch_manifest(url_or_path) + manifest = fetch_and_decode(url_or_path) Enum.each(manifest, fn {name, info} -> to_print = [ @@ -42,12 +42,12 @@ def run(["get-packs" | args]) do url_or_path = options[:manifest] || default_manifest() - manifest = fetch_manifest(url_or_path) + manifest = fetch_and_decode(url_or_path) for pack_name <- pack_names do if Map.has_key?(manifest, pack_name) do pack = manifest[pack_name] - src_url = pack["src"] + src = pack["src"] IO.puts( IO.ANSI.format([ @@ -57,11 +57,11 @@ def run(["get-packs" | args]) do :normal, " from ", :underline, - src_url + src ]) ) - binary_archive = Tesla.get!(client(), src_url).body + {:ok, binary_archive} = fetch(src) archive_sha = :crypto.hash(:sha256, binary_archive) |> Base.encode16() sha_status_text = ["SHA256 of ", :bright, pack_name, :normal, " source file is ", :bright] @@ -74,8 +74,8 @@ def run(["get-packs" | args]) do raise "Bad SHA256 for #{pack_name}" end - # The url specified in files should be in the same directory - files_url = + # The location specified in files should be in the same directory + files_loc = url_or_path |> Path.dirname() |> Path.join(pack["files"]) @@ -88,11 +88,11 @@ def run(["get-packs" | args]) do :normal, " from ", :underline, - files_url + files_loc ]) ) - files = Tesla.get!(client(), files_url).body |> Jason.decode!() + files = fetch_and_decode(files_loc) IO.puts(IO.ANSI.format(["Unpacking ", :bright, pack_name])) @@ -237,16 +237,20 @@ def run(["gen-pack" | args]) do end end - defp fetch_manifest(from) do - Jason.decode!( - if String.starts_with?(from, "http") do - Tesla.get!(client(), from).body - else - File.read!(from) - end - ) + defp fetch_and_decode(from) do + with {:ok, json} <- fetch(from) do + Jason.decode!(json) + end end + defp fetch("http" <> _ = from) do + with {:ok, %{body: body}} <- Tesla.get(client(), from) do + {:ok, body} + end + end + + defp fetch(path), do: File.read(path) + defp parse_global_opts(args) do OptionParser.parse( args, diff --git a/test/instance_static/local_pack/files.json b/test/instance_static/local_pack/files.json new file mode 100644 index 000000000..279770998 --- /dev/null +++ b/test/instance_static/local_pack/files.json @@ -0,0 +1,3 @@ +{ + "blank": "blank.png" +} \ No newline at end of file diff --git a/test/instance_static/local_pack/manifest.json b/test/instance_static/local_pack/manifest.json new file mode 100644 index 000000000..01067042f --- /dev/null +++ b/test/instance_static/local_pack/manifest.json @@ -0,0 +1,10 @@ +{ + "local": { + "src_sha256": "384025A1AC6314473863A11AC7AB38A12C01B851A3F82359B89B4D4211D3291D", + "src": "test/fixtures/emoji/packs/blank.png.zip", + "license": "Apache 2.0", + "homepage": "https://example.com", + "files": "files.json", + "description": "Some local pack" + } +} \ No newline at end of file diff --git a/test/tasks/emoji_test.exs b/test/tasks/emoji_test.exs index f5de3ef0e..499f098c2 100644 --- a/test/tasks/emoji_test.exs +++ b/test/tasks/emoji_test.exs @@ -73,6 +73,19 @@ test "download pack from default manifest" do on_exit(fn -> File.rm_rf!("test/instance_static/emoji/finmoji") end) end + test "install local emoji pack" do + assert capture_io(fn -> + Emoji.run([ + "get-packs", + "local", + "--manifest", + "test/instance_static/local_pack/manifest.json" + ]) + end) =~ "Writing pack.json for" + + on_exit(fn -> File.rm_rf!("test/instance_static/emoji/local") end) + end + test "pack not found" do mock(fn %{ From d4a18d44feb4ae67f6476b30fac96c0e6aa511dd Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 28 May 2020 00:49:49 -0500 Subject: [PATCH 43/65] Update default instance description --- config/config.exs | 2 +- lib/pleroma/web/api_spec/operations/instance_operation.ex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/config.exs b/config/config.exs index d15998715..3729526ea 100644 --- a/config/config.exs +++ b/config/config.exs @@ -183,7 +183,7 @@ name: "Pleroma", email: "example@example.com", notify_email: "noreply@example.com", - description: "A Pleroma instance, an alternative fediverse server", + description: "Pleroma: An efficient and flexible fediverse server", background_image: "/images/city.jpg", limit: 5_000, chat_limit: 5_000, diff --git a/lib/pleroma/web/api_spec/operations/instance_operation.ex b/lib/pleroma/web/api_spec/operations/instance_operation.ex index d5c335d0c..bf39ae643 100644 --- a/lib/pleroma/web/api_spec/operations/instance_operation.ex +++ b/lib/pleroma/web/api_spec/operations/instance_operation.ex @@ -137,7 +137,7 @@ defp instance do "background_upload_limit" => 4_000_000, "background_image" => "/static/image.png", "banner_upload_limit" => 4_000_000, - "description" => "A Pleroma instance, an alternative fediverse server", + "description" => "Pleroma: An efficient and flexible fediverse server", "email" => "lain@lain.com", "languages" => ["en"], "max_toot_chars" => 5000, From 394258d548d20d1bea50166bc31f8e48462080dd Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 28 May 2020 16:10:06 -0500 Subject: [PATCH 44/65] Docs: Attachement limitations in MastoAPI differences --- docs/API/differences_in_mastoapi_responses.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index e65fd5da4..434ade9a4 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -6,10 +6,6 @@ A Pleroma instance can be identified by " (compatible; Pleroma Pleroma uses 128-bit ids as opposed to Mastodon's 64 bits. However just like Mastodon's ids they are lexically sortable strings -## Attachment cap - -Some apps operate under the assumption that no more than 4 attachments can be returned or uploaded. Pleroma however does not enforce any limits on attachment count neither when returning the status object nor when posting. - ## Timelines Adding the parameter `with_muted=true` to the timeline queries will also return activities by muted (not by blocked!) users. @@ -32,12 +28,20 @@ Has these additional fields under the `pleroma` object: - `thread_muted`: true if the thread the post belongs to is muted - `emoji_reactions`: A list with emoji / reaction maps. The format is `{name: "☕", count: 1, me: true}`. Contains no information about the reacting users, for that use the `/statuses/:id/reactions` endpoint. -## Attachments +## Media Attachments Has these additional fields under the `pleroma` object: - `mime_type`: mime type of the attachment. +### Attachment cap + +Some apps operate under the assumption that no more than 4 attachments can be returned or uploaded. Pleroma however does not enforce any limits on attachment count neither when returning the status object nor when posting. + +### Limitations + +Pleroma does not process remote images and therefore cannot include fields such as `meta` and `blurhash`. It does not support focal points or aspect ratios. The frontend is expected to handle it. + ## Accounts The `id` parameter can also be the `nickname` of the user. This only works in these endpoints, not the deeper nested ones for following etc. From 27180611dfffd064e65793f90c67dc16fff8ecc2 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Fri, 29 May 2020 12:32:48 +0300 Subject: [PATCH 45/65] HTTP Security plug: make starting csp string generation more readable --- lib/pleroma/plugs/http_security_plug.ex | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/lib/pleroma/plugs/http_security_plug.ex b/lib/pleroma/plugs/http_security_plug.ex index df38d5022..2208d1d6c 100644 --- a/lib/pleroma/plugs/http_security_plug.ex +++ b/lib/pleroma/plugs/http_security_plug.ex @@ -49,17 +49,16 @@ defp headers do end end - @csp_start [ - "default-src 'none'", - "base-uri 'self'", - "frame-ancestors 'none'", - "style-src 'self' 'unsafe-inline'", - "font-src 'self'", - "manifest-src 'self'" - ] - |> Enum.join(";") - |> Kernel.<>(";") - |> List.wrap() + static_csp_rules = [ + "default-src 'none'", + "base-uri 'self'", + "frame-ancestors 'none'", + "style-src 'self' 'unsafe-inline'", + "font-src 'self'", + "manifest-src 'self'" + ] + + @csp_start [Enum.join(static_csp_rules, ";") <> ";"] defp csp_string do scheme = Config.get([Pleroma.Web.Endpoint, :url])[:scheme] From 9df5b1e6ae8357942ef85563eebaf583f1dbc19a Mon Sep 17 00:00:00 2001 From: kPherox Date: Tue, 26 May 2020 11:32:05 +0000 Subject: [PATCH 46/65] Don't make relay announce notification --- lib/pleroma/web/activity_pub/side_effects.ex | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 7eae0c52c..60ab8733d 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -11,6 +11,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do alias Pleroma.Repo alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.ActivityPub.Relay alias Pleroma.Web.ActivityPub.Utils def handle(object, meta \\ []) @@ -36,8 +37,10 @@ def handle(%{data: %{"type" => "Announce"}} = object, meta) do Utils.add_announce_to_object(object, announced_object) - Notification.create_notifications(object) - ActivityPub.stream_out(object) + if object.data["actor"] != Relay.relay_ap_id() do + Notification.create_notifications(object) + ActivityPub.stream_out(object) + end {:ok, object, meta} end From 228ff3760efb62d4452b3025fa9e78fed164655e Mon Sep 17 00:00:00 2001 From: kPherox Date: Wed, 27 May 2020 05:24:36 +0000 Subject: [PATCH 47/65] Use `User.is_internal_user?` instead --- lib/pleroma/web/activity_pub/side_effects.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 60ab8733d..fb6275450 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -11,7 +11,6 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do alias Pleroma.Repo alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub - alias Pleroma.Web.ActivityPub.Relay alias Pleroma.Web.ActivityPub.Utils def handle(object, meta \\ []) @@ -34,10 +33,11 @@ def handle(%{data: %{"type" => "Like"}} = object, meta) do # - Stream out the announce def handle(%{data: %{"type" => "Announce"}} = object, meta) do announced_object = Object.get_by_ap_id(object.data["object"]) + user = User.get_cached_by_ap_id(object.data["actor"]) Utils.add_announce_to_object(object, announced_object) - if object.data["actor"] != Relay.relay_ap_id() do + if !User.is_internal_user?(user) do Notification.create_notifications(object) ActivityPub.stream_out(object) end From 1b586ff3aece21d277e40f95cc5c60fc15818a87 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 29 May 2020 10:17:06 -0500 Subject: [PATCH 48/65] Document new database vacuum tasks --- docs/administration/CLI_tasks/database.md | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/administration/CLI_tasks/database.md b/docs/administration/CLI_tasks/database.md index ff400c8ed..647f6f274 100644 --- a/docs/administration/CLI_tasks/database.md +++ b/docs/administration/CLI_tasks/database.md @@ -69,3 +69,32 @@ mix pleroma.database update_users_following_followers_counts ```sh tab="From Source" mix pleroma.database fix_likes_collections ``` + +## Vacuum the database + +### Analyze + +Running an `analyze` vacuum job can improve performance by updating statistics used by the query planner. **It is safe to cancel this.** + +```sh tab="OTP" +./bin/pleroma_ctl database vacuum analyze +``` + +```sh tab="From Source" +mix pleroma.database vacuum analyze +``` + +### Full + +Running a `full` vacuum job rebuilds your entire database by reading all of the data and rewriting it into smaller +and more compact files with an optimized layout. This process will take a long time and use additional disk space as +it builds the files side-by-side the existing database files. It can make your database faster and use less disk space, +but should only be run if necessary. **It is safe to cancel this.** + +```sh tab="OTP" +./bin/pleroma_ctl database vacuum full +``` + +```sh tab="From Source" +mix pleroma.database vacuum full +``` \ No newline at end of file From da1e31fae3f7a7e0063c3a6fb4315e1578d72daa Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Fri, 29 May 2020 17:17:02 +0200 Subject: [PATCH 49/65] http_security_plug.ex: Fix non-proxied media --- lib/pleroma/plugs/http_security_plug.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/plugs/http_security_plug.ex b/lib/pleroma/plugs/http_security_plug.ex index 2208d1d6c..4b926e867 100644 --- a/lib/pleroma/plugs/http_security_plug.ex +++ b/lib/pleroma/plugs/http_security_plug.ex @@ -75,7 +75,7 @@ defp csp_string do sources = get_proxy_and_attachment_sources() {[img_src, sources], [media_src, sources]} else - {img_src, media_src} + {img_src <> " https:", media_src <> " https:"} end connect_src = ["connect-src 'self' ", static_url, ?\s, websocket_url] From de0e2628391ca039ac0d029c251136d53b6f8e63 Mon Sep 17 00:00:00 2001 From: kPherox Date: Mon, 25 May 2020 23:21:43 +0900 Subject: [PATCH 50/65] Fix argument error in streamer `Repo.exists` can't use `nil` as it is unsafe. Use parent object instead of activity because currently Announce activity's context is null. --- lib/pleroma/web/streamer/streamer.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/streamer/streamer.ex b/lib/pleroma/web/streamer/streamer.ex index 49a400df7..0cf41189b 100644 --- a/lib/pleroma/web/streamer/streamer.ex +++ b/lib/pleroma/web/streamer/streamer.ex @@ -136,7 +136,7 @@ def filtered_by_user?(%User{} = user, %Activity{} = item) do false <- Pleroma.Web.ActivityPub.MRF.subdomain_match?(domain_blocks, item_host), false <- Pleroma.Web.ActivityPub.MRF.subdomain_match?(domain_blocks, parent_host), true <- thread_containment(item, user), - false <- CommonAPI.thread_muted?(user, item) do + false <- CommonAPI.thread_muted?(user, parent) do false else _ -> true From 9ca978494fee4be96ec9b6b93e74afe08dd05fcc Mon Sep 17 00:00:00 2001 From: kPherox Date: Fri, 29 May 2020 21:08:09 +0900 Subject: [PATCH 51/65] Add test for stream boosts of mastodon user --- test/web/streamer/streamer_test.exs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test/web/streamer/streamer_test.exs b/test/web/streamer/streamer_test.exs index cb4595bb6..4cf640ce8 100644 --- a/test/web/streamer/streamer_test.exs +++ b/test/web/streamer/streamer_test.exs @@ -112,6 +112,25 @@ test "it streams boosts of the user in the 'user' stream", %{user: user} do refute Streamer.filtered_by_user?(user, announce) end + test "it streams boosts of mastodon user in the 'user' stream", %{user: user} do + Streamer.get_topic_and_add_socket("user", user) + + other_user = insert(:user) + {:ok, activity} = CommonAPI.post(other_user, %{status: "hey"}) + + data = + File.read!("test/fixtures/mastodon-announce.json") + |> Poison.decode!() + |> Map.put("object", activity.data["object"]) + |> Map.put("actor", user.ap_id) + + {:ok, %Pleroma.Activity{data: data, local: false} = announce} = + Pleroma.Web.ActivityPub.Transmogrifier.handle_incoming(data) + + assert_receive {:render_with_user, Pleroma.Web.StreamerView, "update.json", ^announce} + refute Streamer.filtered_by_user?(user, announce) + end + test "it sends notify to in the 'user' stream", %{user: user, notify: notify} do Streamer.get_topic_and_add_socket("user", user) Streamer.stream("user", notify) From d38f28870e7ba1c8c1b315d52e68a83fb1a68b6d Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 29 May 2020 10:33:31 -0500 Subject: [PATCH 52/65] Add blob: to connect-src CSP --- CHANGELOG.md | 1 + lib/pleroma/plugs/http_security_plug.ex | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dabc2a85a..839bf90ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Fix follower/blocks import when nicknames starts with @ - Filtering of push notifications on activities from blocked domains - Resolving Peertube accounts with Webfinger +- `blob:` urls not being allowed by connect-src CSP ## [Unreleased (patch)] diff --git a/lib/pleroma/plugs/http_security_plug.ex b/lib/pleroma/plugs/http_security_plug.ex index 2208d1d6c..41e3a31f4 100644 --- a/lib/pleroma/plugs/http_security_plug.ex +++ b/lib/pleroma/plugs/http_security_plug.ex @@ -78,7 +78,7 @@ defp csp_string do {img_src, media_src} end - connect_src = ["connect-src 'self' ", static_url, ?\s, websocket_url] + connect_src = ["connect-src 'self' blob: ", static_url, ?\s, websocket_url] connect_src = if Pleroma.Config.get(:env) == :dev do From 0a83af330b7f33601848bca79bd1651b45eaea87 Mon Sep 17 00:00:00 2001 From: Roman Chvanikov Date: Fri, 29 May 2020 23:05:03 +0300 Subject: [PATCH 53/65] fix unused var warning --- test/web/streamer/streamer_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/web/streamer/streamer_test.exs b/test/web/streamer/streamer_test.exs index 4cf640ce8..3f012259a 100644 --- a/test/web/streamer/streamer_test.exs +++ b/test/web/streamer/streamer_test.exs @@ -124,7 +124,7 @@ test "it streams boosts of mastodon user in the 'user' stream", %{user: user} do |> Map.put("object", activity.data["object"]) |> Map.put("actor", user.ap_id) - {:ok, %Pleroma.Activity{data: data, local: false} = announce} = + {:ok, %Pleroma.Activity{data: _data, local: false} = announce} = Pleroma.Web.ActivityPub.Transmogrifier.handle_incoming(data) assert_receive {:render_with_user, Pleroma.Web.StreamerView, "update.json", ^announce} From 109af93227f65d308641e345c68c3884addb0181 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Fri, 29 May 2020 21:15:07 +0000 Subject: [PATCH 54/65] Apply suggestion to lib/pleroma/plugs/http_security_plug.ex --- lib/pleroma/plugs/http_security_plug.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/plugs/http_security_plug.ex b/lib/pleroma/plugs/http_security_plug.ex index 4b926e867..589072535 100644 --- a/lib/pleroma/plugs/http_security_plug.ex +++ b/lib/pleroma/plugs/http_security_plug.ex @@ -75,7 +75,7 @@ defp csp_string do sources = get_proxy_and_attachment_sources() {[img_src, sources], [media_src, sources]} else - {img_src <> " https:", media_src <> " https:"} + {[img_src, " https:"], [media_src, " https:"]} end connect_src = ["connect-src 'self' ", static_url, ?\s, websocket_url] From d2a1975e565e2e83859a607af29320226877cc4d Mon Sep 17 00:00:00 2001 From: rinpatch Date: Sat, 30 May 2020 00:18:17 +0300 Subject: [PATCH 55/65] mix.lock: update hackney to 1.16.0 Closes #1612 --- mix.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mix.lock b/mix.lock index 470b401a3..5383c2c6e 100644 --- a/mix.lock +++ b/mix.lock @@ -12,7 +12,7 @@ "calendar": {:hex, :calendar, "0.17.6", "ec291cb2e4ba499c2e8c0ef5f4ace974e2f9d02ae9e807e711a9b0c7850b9aee", [:mix], [{:tzdata, "~> 0.5.20 or ~> 0.1.201603 or ~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "738d0e17a93c2ccfe4ddc707bdc8e672e9074c8569498483feb1c4530fb91b2b"}, "captcha": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", "e0f16822d578866e186a0974d65ad58cddc1e2ab", [ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"]}, "castore": {:hex, :castore, "0.1.5", "591c763a637af2cc468a72f006878584bc6c306f8d111ef8ba1d4c10e0684010", [:mix], [], "hexpm", "6db356b2bc6cc22561e051ff545c20ad064af57647e436650aa24d7d06cd941a"}, - "certifi": {:hex, :certifi, "2.5.1", "867ce347f7c7d78563450a18a6a28a8090331e77fa02380b4a21962a65d36ee5", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm", "805abd97539caf89ec6d4732c91e62ba9da0cda51ac462380bbd28ee697a8c42"}, + "certifi": {:hex, :certifi, "2.5.2", "b7cfeae9d2ed395695dd8201c57a2d019c0c43ecaf8b8bcb9320b40d6662f340", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm", "3b3b5f36493004ac3455966991eaf6e768ce9884693d9968055aeeeb1e575040"}, "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, "comeonin": {:hex, :comeonin, "5.3.1", "7fe612b739c78c9c1a75186ef2d322ce4d25032d119823269d0aa1e2f1e20025", [:mix], [], "hexpm", "d6222483060c17f0977fad1b7401ef0c5863c985a64352755f366aee3799c245"}, "connection": {:hex, :connection, "1.0.4", "a1cae72211f0eef17705aaededacac3eb30e6625b04a6117c1b2db6ace7d5976", [:mix], [], "hexpm", "4a0850c9be22a43af9920a71ab17c051f5f7d45c209e40269a1938832510e4d9"}, @@ -50,12 +50,12 @@ "gen_state_machine": {:hex, :gen_state_machine, "2.0.5", "9ac15ec6e66acac994cc442dcc2c6f9796cf380ec4b08267223014be1c728a95", [:mix], [], "hexpm"}, "gettext": {:hex, :gettext, "0.17.4", "f13088e1ec10ce01665cf25f5ff779e7df3f2dc71b37084976cf89d1aa124d5c", [:mix], [], "hexpm", "3c75b5ea8288e2ee7ea503ff9e30dfe4d07ad3c054576a6e60040e79a801e14d"}, "gun": {:git, "https://github.com/ninenines/gun.git", "e1a69b36b180a574c0ac314ced9613fdd52312cc", [ref: "e1a69b36b180a574c0ac314ced9613fdd52312cc"]}, - "hackney": {:hex, :hackney, "1.15.2", "07e33c794f8f8964ee86cebec1a8ed88db5070e52e904b8f12209773c1036085", [:rebar3], [{:certifi, "2.5.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.5", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "e0100f8ef7d1124222c11ad362c857d3df7cb5f4204054f9f0f4a728666591fc"}, + "hackney": {:hex, :hackney, "1.16.0", "5096ac8e823e3a441477b2d187e30dd3fff1a82991a806b2003845ce72ce2d84", [:rebar3], [{:certifi, "2.5.2", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.1", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.0", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.6", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "3bf0bebbd5d3092a3543b783bf065165fa5d3ad4b899b836810e513064134e18"}, "html_entities": {:hex, :html_entities, "0.5.1", "1c9715058b42c35a2ab65edc5b36d0ea66dd083767bef6e3edb57870ef556549", [:mix], [], "hexpm", "30efab070904eb897ff05cd52fa61c1025d7f8ef3a9ca250bc4e6513d16c32de"}, "html_sanitize_ex": {:hex, :html_sanitize_ex, "1.3.0", "f005ad692b717691203f940c686208aa3d8ffd9dd4bb3699240096a51fa9564e", [:mix], [{:mochiweb, "~> 2.15", [hex: :mochiweb, repo: "hexpm", optional: false]}], "hexpm"}, "http_signatures": {:git, "https://git.pleroma.social/pleroma/http_signatures.git", "293d77bb6f4a67ac8bde1428735c3b42f22cbb30", [ref: "293d77bb6f4a67ac8bde1428735c3b42f22cbb30"]}, "httpoison": {:hex, :httpoison, "1.6.2", "ace7c8d3a361cebccbed19c283c349b3d26991eff73a1eaaa8abae2e3c8089b6", [:mix], [{:hackney, "~> 1.15 and >= 1.15.2", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "aa2c74bd271af34239a3948779612f87df2422c2fdcfdbcec28d9c105f0773fe"}, - "idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "4bdd305eb64e18b0273864920695cb18d7a2021f31a11b9c5fbcd9a253f936e2"}, + "idna": {:hex, :idna, "6.0.1", "1d038fb2e7668ce41fbf681d2c45902e52b3cb9e9c77b55334353b222c2ee50c", [:rebar3], [{:unicode_util_compat, "0.5.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "a02c8a1c4fd601215bb0b0324c8a6986749f807ce35f25449ec9e69758708122"}, "inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm", "64a2d30189704ae41ca7dbdd587f5291db5d1dda1414e0774c29ffc81088c1bc"}, "jason": {:hex, :jason, "1.2.1", "12b22825e22f468c02eb3e4b9985f3d0cb8dc40b9bd704730efa11abd2708c44", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "b659b8571deedf60f79c5a608e15414085fa141344e2716fbd6988a084b5f993"}, "joken": {:hex, :joken, "2.2.0", "2daa1b12be05184aff7b5ace1d43ca1f81345962285fff3f88db74927c954d3a", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "b4f92e30388206f869dd25d1af628a1d99d7586e5cf0672f64d4df84c4d2f5e9"}, @@ -102,7 +102,7 @@ "recon": {:hex, :recon, "2.5.0", "2f7fcbec2c35034bade2f9717f77059dc54eb4e929a3049ca7ba6775c0bd66cd", [:mix, :rebar3], [], "hexpm", "72f3840fedd94f06315c523f6cecf5b4827233bed7ae3fe135b2a0ebeab5e196"}, "remote_ip": {:git, "https://git.pleroma.social/pleroma/remote_ip.git", "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8", [ref: "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8"]}, "sleeplocks": {:hex, :sleeplocks, "1.1.1", "3d462a0639a6ef36cc75d6038b7393ae537ab394641beb59830a1b8271faeed3", [:rebar3], [], "hexpm", "84ee37aeff4d0d92b290fff986d6a95ac5eedf9b383fadfd1d88e9b84a1c02e1"}, - "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.5", "6eaf7ad16cb568bb01753dbbd7a95ff8b91c7979482b95f38443fe2c8852a79b", [:make, :mix, :rebar3], [], "hexpm", "13104d7897e38ed7f044c4de953a6c28597d1c952075eb2e328bc6d6f2bfc496"}, + "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, "sweet_xml": {:hex, :sweet_xml, "0.6.6", "fc3e91ec5dd7c787b6195757fbcf0abc670cee1e4172687b45183032221b66b8", [:mix], [], "hexpm", "2e1ec458f892ffa81f9f8386e3f35a1af6db7a7a37748a64478f13163a1f3573"}, "swoosh": {:hex, :swoosh, "0.23.5", "bfd9404bbf5069b1be2ffd317923ce57e58b332e25dbca2a35dedd7820dfee5a", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}], "hexpm", "e3928e1d2889a308aaf3e42755809ac21cffd77cb58eef01cbfdab4ce2fd1e21"}, "syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"}, @@ -112,7 +112,7 @@ "trailing_format_plug": {:hex, :trailing_format_plug, "0.0.7", "64b877f912cf7273bed03379936df39894149e35137ac9509117e59866e10e45", [:mix], [{:plug, "> 0.12.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bd4fde4c15f3e993a999e019d64347489b91b7a9096af68b2bdadd192afa693f"}, "tzdata": {:hex, :tzdata, "0.5.22", "f2ba9105117ee0360eae2eca389783ef7db36d533899b2e84559404dbc77ebb8", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "cd66c8a1e6a9e121d1f538b01bef459334bb4029a1ffb4eeeb5e4eae0337e7b6"}, "ueberauth": {:hex, :ueberauth, "0.6.2", "25a31111249d60bad8b65438b2306a4dc91f3208faa62f5a8c33e8713989b2e8", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "db9fbfb5ac707bc4f85a297758406340bf0358b4af737a88113c1a9eee120ac7"}, - "unicode_util_compat": {:hex, :unicode_util_compat, "0.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm", "1d1848c40487cdb0b30e8ed975e34e025860c02e419cb615d255849f3427439d"}, + "unicode_util_compat": {:hex, :unicode_util_compat, "0.5.0", "8516502659002cec19e244ebd90d312183064be95025a319a6c7e89f4bccd65b", [:rebar3], [], "hexpm", "d48d002e15f5cc105a696cf2f1bbb3fc72b4b770a184d8420c8db20da2674b38"}, "unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm", "6c7729a2d214806450d29766abc2afaa7a2cbecf415be64f36a6691afebb50e5"}, "web_push_encryption": {:hex, :web_push_encryption, "0.2.3", "a0ceab85a805a30852f143d22d71c434046fbdbafbc7292e7887cec500826a80", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jose, "~> 1.8", [hex: :jose, repo: "hexpm", optional: false]}, {:poison, "~> 3.0", [hex: :poison, repo: "hexpm", optional: false]}], "hexpm", "9315c8f37c108835cf3f8e9157d7a9b8f420a34f402d1b1620a31aed5b93ecdf"}, "websocket_client": {:git, "https://github.com/jeremyong/websocket_client.git", "9a6f65d05ebf2725d62fb19262b21f1805a59fbf", []}, From 6d4b80822b15f5958518f4c6006862fb1f92354a Mon Sep 17 00:00:00 2001 From: Steven Fuchs Date: Sat, 30 May 2020 10:02:37 +0000 Subject: [PATCH 56/65] Conversation pagination --- .../controllers/conversation_controller.ex | 17 ++ .../conversation_controller_test.exs | 165 +++++++++--------- 2 files changed, 100 insertions(+), 82 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex b/lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex index f35ec3596..69f0e3846 100644 --- a/lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex @@ -21,6 +21,7 @@ defmodule Pleroma.Web.MastodonAPI.ConversationController do @doc "GET /api/v1/conversations" def index(%{assigns: %{user: user}} = conn, params) do + params = stringify_pagination_params(params) participations = Participation.for_user_with_last_activity_id(user, params) conn @@ -36,4 +37,20 @@ def mark_as_read(%{assigns: %{user: user}} = conn, %{id: participation_id}) do render(conn, "participation.json", participation: participation, for: user) end end + + defp stringify_pagination_params(params) do + atom_keys = + Pleroma.Pagination.page_keys() + |> Enum.map(&String.to_atom(&1)) + + str_keys = + params + |> Map.take(atom_keys) + |> Enum.map(fn {key, value} -> {to_string(key), value} end) + |> Enum.into(%{}) + + params + |> Map.delete(atom_keys) + |> Map.merge(str_keys) + end end diff --git a/test/web/mastodon_api/controllers/conversation_controller_test.exs b/test/web/mastodon_api/controllers/conversation_controller_test.exs index 693ba51e5..3e21e6bf1 100644 --- a/test/web/mastodon_api/controllers/conversation_controller_test.exs +++ b/test/web/mastodon_api/controllers/conversation_controller_test.exs @@ -12,84 +12,88 @@ defmodule Pleroma.Web.MastodonAPI.ConversationControllerTest do setup do: oauth_access(["read:statuses"]) - test "returns a list of conversations", %{user: user_one, conn: conn} do - user_two = insert(:user) - user_three = insert(:user) + describe "returns a list of conversations" do + setup(%{user: user_one, conn: conn}) do + user_two = insert(:user) + user_three = insert(:user) - {:ok, user_two} = User.follow(user_two, user_one) + {:ok, user_two} = User.follow(user_two, user_one) - assert User.get_cached_by_id(user_two.id).unread_conversation_count == 0 + {:ok, %{user: user_one, user_two: user_two, user_three: user_three, conn: conn}} + end - {:ok, direct} = - CommonAPI.post(user_one, %{ - status: "Hi @#{user_two.nickname}, @#{user_three.nickname}!", - visibility: "direct" - }) + test "returns correct conversations", %{ + user: user_one, + user_two: user_two, + user_three: user_three, + conn: conn + } do + assert User.get_cached_by_id(user_two.id).unread_conversation_count == 0 + {:ok, direct} = create_direct_message(user_one, [user_two, user_three]) - assert User.get_cached_by_id(user_two.id).unread_conversation_count == 1 + assert User.get_cached_by_id(user_two.id).unread_conversation_count == 1 - {:ok, _follower_only} = - CommonAPI.post(user_one, %{ - status: "Hi @#{user_two.nickname}!", - visibility: "private" - }) + {:ok, _follower_only} = + CommonAPI.post(user_one, %{ + status: "Hi @#{user_two.nickname}!", + visibility: "private" + }) - res_conn = get(conn, "/api/v1/conversations") + res_conn = get(conn, "/api/v1/conversations") - assert response = json_response_and_validate_schema(res_conn, 200) + assert response = json_response_and_validate_schema(res_conn, 200) - assert [ - %{ - "id" => res_id, - "accounts" => res_accounts, - "last_status" => res_last_status, - "unread" => unread - } - ] = response + assert [ + %{ + "id" => res_id, + "accounts" => res_accounts, + "last_status" => res_last_status, + "unread" => unread + } + ] = response - account_ids = Enum.map(res_accounts, & &1["id"]) - assert length(res_accounts) == 2 - assert user_two.id in account_ids - assert user_three.id in account_ids - assert is_binary(res_id) - assert unread == false - assert res_last_status["id"] == direct.id - assert User.get_cached_by_id(user_one.id).unread_conversation_count == 0 + account_ids = Enum.map(res_accounts, & &1["id"]) + assert length(res_accounts) == 2 + assert user_two.id in account_ids + assert user_three.id in account_ids + assert is_binary(res_id) + assert unread == false + assert res_last_status["id"] == direct.id + assert User.get_cached_by_id(user_one.id).unread_conversation_count == 0 + end + + test "observes limit params", %{ + user: user_one, + user_two: user_two, + user_three: user_three, + conn: conn + } do + {:ok, _} = create_direct_message(user_one, [user_two, user_three]) + {:ok, _} = create_direct_message(user_two, [user_one, user_three]) + {:ok, _} = create_direct_message(user_three, [user_two, user_one]) + + res_conn = get(conn, "/api/v1/conversations?limit=1") + + assert response = json_response_and_validate_schema(res_conn, 200) + + assert Enum.count(response) == 1 + + res_conn = get(conn, "/api/v1/conversations?limit=2") + + assert response = json_response_and_validate_schema(res_conn, 200) + + assert Enum.count(response) == 2 + end end test "filters conversations by recipients", %{user: user_one, conn: conn} do user_two = insert(:user) user_three = insert(:user) - - {:ok, direct1} = - CommonAPI.post(user_one, %{ - status: "Hi @#{user_two.nickname}!", - visibility: "direct" - }) - - {:ok, _direct2} = - CommonAPI.post(user_one, %{ - status: "Hi @#{user_three.nickname}!", - visibility: "direct" - }) - - {:ok, direct3} = - CommonAPI.post(user_one, %{ - status: "Hi @#{user_two.nickname}, @#{user_three.nickname}!", - visibility: "direct" - }) - - {:ok, _direct4} = - CommonAPI.post(user_two, %{ - status: "Hi @#{user_three.nickname}!", - visibility: "direct" - }) - - {:ok, direct5} = - CommonAPI.post(user_two, %{ - status: "Hi @#{user_one.nickname}!", - visibility: "direct" - }) + {:ok, direct1} = create_direct_message(user_one, [user_two]) + {:ok, _direct2} = create_direct_message(user_one, [user_three]) + {:ok, direct3} = create_direct_message(user_one, [user_two, user_three]) + {:ok, _direct4} = create_direct_message(user_two, [user_three]) + {:ok, direct5} = create_direct_message(user_two, [user_one]) assert [conversation1, conversation2] = conn @@ -109,12 +113,7 @@ test "filters conversations by recipients", %{user: user_one, conn: conn} do test "updates the last_status on reply", %{user: user_one, conn: conn} do user_two = insert(:user) - - {:ok, direct} = - CommonAPI.post(user_one, %{ - status: "Hi @#{user_two.nickname}", - visibility: "direct" - }) + {:ok, direct} = create_direct_message(user_one, [user_two]) {:ok, direct_reply} = CommonAPI.post(user_two, %{ @@ -133,12 +132,7 @@ test "updates the last_status on reply", %{user: user_one, conn: conn} do test "the user marks a conversation as read", %{user: user_one, conn: conn} do user_two = insert(:user) - - {:ok, direct} = - CommonAPI.post(user_one, %{ - status: "Hi @#{user_two.nickname}", - visibility: "direct" - }) + {:ok, direct} = create_direct_message(user_one, [user_two]) assert User.get_cached_by_id(user_one.id).unread_conversation_count == 0 assert User.get_cached_by_id(user_two.id).unread_conversation_count == 1 @@ -194,15 +188,22 @@ test "the user marks a conversation as read", %{user: user_one, conn: conn} do test "(vanilla) Mastodon frontend behaviour", %{user: user_one, conn: conn} do user_two = insert(:user) - - {:ok, direct} = - CommonAPI.post(user_one, %{ - status: "Hi @#{user_two.nickname}!", - visibility: "direct" - }) + {:ok, direct} = create_direct_message(user_one, [user_two]) res_conn = get(conn, "/api/v1/statuses/#{direct.id}/context") assert %{"ancestors" => [], "descendants" => []} == json_response(res_conn, 200) end + + defp create_direct_message(sender, recips) do + hellos = + recips + |> Enum.map(fn s -> "@#{s.nickname}" end) + |> Enum.join(", ") + + CommonAPI.post(sender, %{ + status: "Hi #{hellos}!", + visibility: "direct" + }) + end end From 0cb7b0ea8477bdd7af2e5e9071843be5b8623dff Mon Sep 17 00:00:00 2001 From: rinpatch Date: Sat, 30 May 2020 13:59:04 +0300 Subject: [PATCH 57/65] hackney adapter helper: support tlsv1.3 and remove custom opts - partitial_chain is no longer exported, but it seems to be the default anyway. - The bug that caused sni to not be sent automatically seems to be fixed - https://github.com/benoitc/hackney/issues/612 --- lib/pleroma/http/adapter_helper/hackney.ex | 17 +---------------- test/http/adapter_helper/hackney_test.exs | 12 ------------ 2 files changed, 1 insertion(+), 28 deletions(-) diff --git a/lib/pleroma/http/adapter_helper/hackney.ex b/lib/pleroma/http/adapter_helper/hackney.ex index dcb4cac71..3972a03a9 100644 --- a/lib/pleroma/http/adapter_helper/hackney.ex +++ b/lib/pleroma/http/adapter_helper/hackney.ex @@ -22,22 +22,7 @@ def options(connection_opts \\ [], %URI{} = uri) do |> Pleroma.HTTP.AdapterHelper.maybe_add_proxy(proxy) end - defp add_scheme_opts(opts, %URI{scheme: "http"}), do: opts - - defp add_scheme_opts(opts, %URI{scheme: "https", host: host}) do - ssl_opts = [ - ssl_options: [ - # Workaround for remote server certificate chain issues - partial_chain: &:hackney_connect.partial_chain/1, - - # We don't support TLS v1.3 yet - versions: [:tlsv1, :"tlsv1.1", :"tlsv1.2"], - server_name_indication: to_charlist(host) - ] - ] - - Keyword.merge(opts, ssl_opts) - end + defp add_scheme_opts(opts, _), do: opts def after_request(_), do: :ok end diff --git a/test/http/adapter_helper/hackney_test.exs b/test/http/adapter_helper/hackney_test.exs index 3f7e708e0..f2361ff0b 100644 --- a/test/http/adapter_helper/hackney_test.exs +++ b/test/http/adapter_helper/hackney_test.exs @@ -31,17 +31,5 @@ test "respect connection opts and no proxy", %{uri: uri} do assert opts[:b] == 1 refute Keyword.has_key?(opts, :proxy) end - - test "add opts for https" do - uri = URI.parse("https://domain.com") - - opts = Hackney.options(uri) - - assert opts[:ssl_options] == [ - partial_chain: &:hackney_connect.partial_chain/1, - versions: [:tlsv1, :"tlsv1.1", :"tlsv1.2"], - server_name_indication: 'domain.com' - ] - end end end From b973d0b2f0809e7a96c39f6eef1d86050c9d421b Mon Sep 17 00:00:00 2001 From: Roman Chvanikov Date: Sat, 30 May 2020 16:47:09 +0300 Subject: [PATCH 58/65] Fix config setting to not affect other tests --- test/user_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/user_test.exs b/test/user_test.exs index 3556ef1b4..6b344158d 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -1802,7 +1802,7 @@ test "avatar fallback" do user = insert(:user) assert User.avatar_url(user) =~ "/images/avi.png" - Pleroma.Config.put([:assets, :default_user_avatar], "avatar.png") + clear_config([:assets, :default_user_avatar], "avatar.png") user = User.get_cached_by_nickname_or_id(user.nickname) assert User.avatar_url(user) =~ "avatar.png" From 9460983032257022ff29c063901f6b714e4fbf59 Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 1 Jun 2020 13:03:22 +0200 Subject: [PATCH 59/65] AccountController: Federate user account changes. Hotfixy commit, will be moved to the pipeline. --- .../controllers/account_controller.ex | 23 +++++++++-- .../update_credentials_test.exs | 38 +++++++++++-------- 2 files changed, 43 insertions(+), 18 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 47649d41d..97295a52f 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -139,9 +139,7 @@ def verify_credentials(%{assigns: %{user: user}} = conn, _) do end @doc "PATCH /api/v1/accounts/update_credentials" - def update_credentials(%{assigns: %{user: original_user}, body_params: params} = conn, _params) do - user = original_user - + def update_credentials(%{assigns: %{user: user}, body_params: params} = conn, _params) do params = params |> Enum.filter(fn {_, value} -> not is_nil(value) end) @@ -183,12 +181,31 @@ def update_credentials(%{assigns: %{user: original_user}, body_params: params} = changeset = User.update_changeset(user, user_params) with {:ok, user} <- User.update_and_set_cache(changeset) do + user + |> build_update_activity_params() + |> ActivityPub.update() + render(conn, "show.json", user: user, for: user, with_pleroma_settings: true) else _e -> render_error(conn, :forbidden, "Invalid request") end end + # Hotfix, handling will be redone with the pipeline + defp build_update_activity_params(user) do + object = + Pleroma.Web.ActivityPub.UserView.render("user.json", user: user) + |> Map.delete("@context") + + %{ + local: true, + to: [user.follower_address], + cc: [], + object: object, + actor: user.ap_id + } + end + defp add_if_present(map, params, params_field, map_field, value_function \\ &{:ok, &1}) do with true <- is_map(params), true <- Map.has_key?(params, params_field), diff --git a/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs b/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs index 696228203..7c420985d 100644 --- a/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs +++ b/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs @@ -8,6 +8,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do use Pleroma.Web.ConnCase + import Mock import Pleroma.Factory setup do: clear_config([:instance, :max_account_fields]) @@ -52,24 +53,31 @@ test "sets user settings in a generic way", %{conn: conn} do user = Repo.get(User, user_data["id"]) - res_conn = - conn - |> assign(:user, user) - |> patch("/api/v1/accounts/update_credentials", %{ - "pleroma_settings_store" => %{ - masto_fe: %{ - theme: "blub" + clear_config([:instance, :federating], true) + + with_mock Pleroma.Web.Federator, + publish: fn _activity -> :ok end do + res_conn = + conn + |> assign(:user, user) + |> patch("/api/v1/accounts/update_credentials", %{ + "pleroma_settings_store" => %{ + masto_fe: %{ + theme: "blub" + } } - } - }) + }) - assert user_data = json_response_and_validate_schema(res_conn, 200) + assert user_data = json_response_and_validate_schema(res_conn, 200) - assert user_data["pleroma"]["settings_store"] == - %{ - "pleroma_fe" => %{"theme" => "bla"}, - "masto_fe" => %{"theme" => "blub"} - } + assert user_data["pleroma"]["settings_store"] == + %{ + "pleroma_fe" => %{"theme" => "bla"}, + "masto_fe" => %{"theme" => "blub"} + } + + assert_called(Pleroma.Web.Federator.publish(:_)) + end end test "updates the user's bio", %{conn: conn} do From d4d4b92f758979fbc22cd56a9f30435df5c40ab6 Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 1 Jun 2020 13:17:56 +0200 Subject: [PATCH 60/65] TimelineController: Only return `Create` in public timelines. --- .../mastodon_api/controllers/timeline_controller.ex | 2 +- .../controllers/timeline_controller_test.exs | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex index 958567510..f67f75430 100644 --- a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex @@ -111,7 +111,7 @@ def public(%{assigns: %{user: user}} = conn, params) do else activities = params - |> Map.put("type", ["Create", "Announce"]) + |> Map.put("type", ["Create"]) |> Map.put("local_only", local_only) |> Map.put("blocking_user", user) |> Map.put("muting_user", user) diff --git a/test/web/mastodon_api/controllers/timeline_controller_test.exs b/test/web/mastodon_api/controllers/timeline_controller_test.exs index 2375ac8e8..65b4079fe 100644 --- a/test/web/mastodon_api/controllers/timeline_controller_test.exs +++ b/test/web/mastodon_api/controllers/timeline_controller_test.exs @@ -60,9 +60,9 @@ test "the home timeline when the direct messages are excluded", %{user: user, co describe "public" do @tag capture_log: true test "the public timeline", %{conn: conn} do - following = insert(:user) + user = insert(:user) - {:ok, _activity} = CommonAPI.post(following, %{status: "test"}) + {:ok, activity} = CommonAPI.post(user, %{status: "test"}) _activity = insert(:note_activity, local: false) @@ -77,6 +77,13 @@ test "the public timeline", %{conn: conn} do conn = get(build_conn(), "/api/v1/timelines/public?local=1") assert [%{"content" => "test"}] = json_response_and_validate_schema(conn, :ok) + + # does not contain repeats + {:ok, _} = CommonAPI.repeat(activity.id, user) + + conn = get(build_conn(), "/api/v1/timelines/public?local=true") + + assert [_] = json_response_and_validate_schema(conn, :ok) end test "the public timeline includes only public statuses for an authenticated user" do From ac31f687c0fbe06251257acb72b67146b472d22f Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 1 Jun 2020 13:35:39 +0200 Subject: [PATCH 61/65] Config: Default to Hackney again Gun needs some server setting changes (files) and has problems with OTP 23 (wildcards), so use Hackney as a default again for now. --- config/config.exs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/config.exs b/config/config.exs index d15998715..9a9fbb436 100644 --- a/config/config.exs +++ b/config/config.exs @@ -171,7 +171,8 @@ "application/ld+json" => ["activity+json"] } -config :tesla, adapter: Tesla.Adapter.Gun +config :tesla, adapter: Tesla.Adapter.Hackney + # Configures http settings, upstream proxy etc. config :pleroma, :http, proxy_url: nil, From 7e6ec778d965419ed4083428d4d39b2a689f7619 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 20 May 2020 17:45:06 +0300 Subject: [PATCH 62/65] exclude replies on blocked domains --- benchmarks/load_testing/activities.ex | 365 ++++++++++-------- benchmarks/load_testing/fetcher.ex | 71 ++++ benchmarks/load_testing/users.ex | 22 +- .../mix/tasks/pleroma/benchmarks/tags.ex | 38 +- lib/pleroma/web/activity_pub/activity_pub.ex | 27 ++ .../api_spec/operations/timeline_operation.ex | 7 + .../controllers/timeline_controller.ex | 13 +- ...ients_contain_blocked_domains_function.exs | 33 ++ .../controllers/timeline_controller_test.exs | 68 ++++ 9 files changed, 469 insertions(+), 175 deletions(-) create mode 100644 priv/repo/migrations/20200520155351_add_recipients_contain_blocked_domains_function.exs diff --git a/benchmarks/load_testing/activities.ex b/benchmarks/load_testing/activities.ex index ff0d481a8..074ded457 100644 --- a/benchmarks/load_testing/activities.ex +++ b/benchmarks/load_testing/activities.ex @@ -22,8 +22,21 @@ defmodule Pleroma.LoadTesting.Activities do @max_concurrency 10 @visibility ~w(public private direct unlisted) - @types ~w(simple emoji mentions hell_thread attachment tag like reblog simple_thread remote) - @groups ~w(user friends non_friends) + @types [ + :simple, + :emoji, + :mentions, + :hell_thread, + :attachment, + :tag, + :like, + :reblog, + :simple_thread + ] + @groups [:friends_local, :friends_remote, :non_friends_local, :non_friends_local] + @remote_groups [:friends_remote, :non_friends_remote] + @friends_groups [:friends_local, :friends_remote] + @non_friends_groups [:non_friends_local, :non_friends_remote] @spec generate(User.t(), keyword()) :: :ok def generate(user, opts \\ []) do @@ -34,33 +47,24 @@ def generate(user, opts \\ []) do opts = Keyword.merge(@defaults, opts) - friends = - user - |> Users.get_users(limit: opts[:friends_used], local: :local, friends?: true) - |> Enum.shuffle() + users = Users.prepare_users(user, opts) - non_friends = - user - |> Users.get_users(limit: opts[:non_friends_used], local: :local, friends?: false) - |> Enum.shuffle() + {:ok, _} = Agent.start_link(fn -> users[:non_friends_remote] end, name: :non_friends_remote) task_data = for visibility <- @visibility, type <- @types, - group <- @groups, + group <- [:user | @groups], do: {visibility, type, group} IO.puts("Starting generating #{opts[:iterations]} iterations of activities...") - friends_thread = Enum.take(friends, 5) - non_friends_thread = Enum.take(friends, 5) - public_long_thread = fn -> - generate_long_thread("public", user, friends_thread, non_friends_thread, opts) + generate_long_thread("public", users, opts) end private_long_thread = fn -> - generate_long_thread("private", user, friends_thread, non_friends_thread, opts) + generate_long_thread("private", users, opts) end iterations = opts[:iterations] @@ -73,10 +77,10 @@ def generate(user, opts \\ []) do i when i == iterations - 2 -> spawn(public_long_thread) spawn(private_long_thread) - generate_activities(user, friends, non_friends, Enum.shuffle(task_data), opts) + generate_activities(users, Enum.shuffle(task_data), opts) _ -> - generate_activities(user, friends, non_friends, Enum.shuffle(task_data), opts) + generate_activities(users, Enum.shuffle(task_data), opts) end ) end) @@ -127,16 +131,16 @@ def generate_tagged_activities(opts \\ []) do end) end - defp generate_long_thread(visibility, user, friends, non_friends, _opts) do + defp generate_long_thread(visibility, users, _opts) do group = if visibility == "public", - do: "friends", - else: "user" + do: :friends_local, + else: :user tasks = get_reply_tasks(visibility, group) |> Stream.cycle() |> Enum.take(50) {:ok, activity} = - CommonAPI.post(user, %{ + CommonAPI.post(users[:user], %{ status: "Start of #{visibility} long thread", visibility: visibility }) @@ -150,31 +154,28 @@ defp generate_long_thread(visibility, user, friends, non_friends, _opts) do Map.put(state, key, activity) end) - acc = {activity.id, ["@" <> user.nickname, "reply to long thread"]} - insert_replies_for_long_thread(tasks, visibility, user, friends, non_friends, acc) + acc = {activity.id, ["@" <> users[:user].nickname, "reply to long thread"]} + insert_replies_for_long_thread(tasks, visibility, users, acc) IO.puts("Generating #{visibility} long thread ended\n") end - defp insert_replies_for_long_thread(tasks, visibility, user, friends, non_friends, acc) do + defp insert_replies_for_long_thread(tasks, visibility, users, acc) do Enum.reduce(tasks, acc, fn - "friend", {id, data} -> - friend = Enum.random(friends) - insert_reply(friend, List.delete(data, "@" <> friend.nickname), id, visibility) - - "non_friend", {id, data} -> - non_friend = Enum.random(non_friends) - insert_reply(non_friend, List.delete(data, "@" <> non_friend.nickname), id, visibility) - - "user", {id, data} -> + :user, {id, data} -> + user = users[:user] insert_reply(user, List.delete(data, "@" <> user.nickname), id, visibility) + + group, {id, data} -> + replier = Enum.random(users[group]) + insert_reply(replier, List.delete(data, "@" <> replier.nickname), id, visibility) end) end - defp generate_activities(user, friends, non_friends, task_data, opts) do + defp generate_activities(users, task_data, opts) do Task.async_stream( task_data, fn {visibility, type, group} -> - insert_activity(type, visibility, group, user, friends, non_friends, opts) + insert_activity(type, visibility, group, users, opts) end, max_concurrency: @max_concurrency, timeout: 30_000 @@ -182,67 +183,104 @@ defp generate_activities(user, friends, non_friends, task_data, opts) do |> Stream.run() end - defp insert_activity("simple", visibility, group, user, friends, non_friends, _opts) do - {:ok, _activity} = + defp insert_local_activity(visibility, group, users, status) do + {:ok, _} = group - |> get_actor(user, friends, non_friends) - |> CommonAPI.post(%{status: "Simple status", visibility: visibility}) + |> get_actor(users) + |> CommonAPI.post(%{status: status, visibility: visibility}) end - defp insert_activity("emoji", visibility, group, user, friends, non_friends, _opts) do - {:ok, _activity} = - group - |> get_actor(user, friends, non_friends) - |> CommonAPI.post(%{ - status: "Simple status with emoji :firefox:", - visibility: visibility - }) + defp insert_remote_activity(visibility, group, users, status) do + actor = get_actor(group, users) + {act_data, obj_data} = prepare_activity_data(actor, visibility, users[:user]) + {activity_data, object_data} = other_data(actor, status) + + activity_data + |> Map.merge(act_data) + |> Map.put("object", Map.merge(object_data, obj_data)) + |> Pleroma.Web.ActivityPub.ActivityPub.insert(false) end - defp insert_activity("mentions", visibility, group, user, friends, non_friends, _opts) do + defp user_mentions(users) do user_mentions = - get_random_mentions(friends, Enum.random(0..3)) ++ - get_random_mentions(non_friends, Enum.random(0..3)) + Enum.reduce( + @groups, + [], + fn group, acc -> + acc ++ get_random_mentions(users[group], Enum.random(0..2)) + end + ) - user_mentions = - if Enum.random([true, false]), - do: ["@" <> user.nickname | user_mentions], - else: user_mentions - - {:ok, _activity} = - group - |> get_actor(user, friends, non_friends) - |> CommonAPI.post(%{ - status: Enum.join(user_mentions, ", ") <> " simple status with mentions", - visibility: visibility - }) + if Enum.random([true, false]), + do: ["@" <> users[:user].nickname | user_mentions], + else: user_mentions end - defp insert_activity("hell_thread", visibility, group, user, friends, non_friends, _opts) do - mentions = - with {:ok, nil} <- Cachex.get(:user_cache, "hell_thread_mentions") do - cached = - ([user | Enum.take(friends, 10)] ++ Enum.take(non_friends, 10)) - |> Enum.map(&"@#{&1.nickname}") - |> Enum.join(", ") + defp hell_thread_mentions(users) do + with {:ok, nil} <- Cachex.get(:user_cache, "hell_thread_mentions") do + cached = + @groups + |> Enum.reduce([users[:user]], fn group, acc -> + acc ++ Enum.take(users[group], 5) + end) + |> Enum.map(&"@#{&1.nickname}") + |> Enum.join(", ") - Cachex.put(:user_cache, "hell_thread_mentions", cached) - cached - else - {:ok, cached} -> cached - end - - {:ok, _activity} = - group - |> get_actor(user, friends, non_friends) - |> CommonAPI.post(%{ - status: mentions <> " hell thread status", - visibility: visibility - }) + Cachex.put(:user_cache, "hell_thread_mentions", cached) + cached + else + {:ok, cached} -> cached + end end - defp insert_activity("attachment", visibility, group, user, friends, non_friends, _opts) do - actor = get_actor(group, user, friends, non_friends) + defp insert_activity(:simple, visibility, group, users, _opts) + when group in @remote_groups do + insert_remote_activity(visibility, group, users, "Remote status") + end + + defp insert_activity(:simple, visibility, group, users, _opts) do + insert_local_activity(visibility, group, users, "Simple status") + end + + defp insert_activity(:emoji, visibility, group, users, _opts) + when group in @remote_groups do + insert_remote_activity(visibility, group, users, "Remote status with emoji :firefox:") + end + + defp insert_activity(:emoji, visibility, group, users, _opts) do + insert_local_activity(visibility, group, users, "Simple status with emoji :firefox:") + end + + defp insert_activity(:mentions, visibility, group, users, _opts) + when group in @remote_groups do + mentions = user_mentions(users) + + status = Enum.join(mentions, ", ") <> " remote status with mentions" + + insert_remote_activity(visibility, group, users, status) + end + + defp insert_activity(:mentions, visibility, group, users, _opts) do + mentions = user_mentions(users) + + status = Enum.join(mentions, ", ") <> " simple status with mentions" + insert_remote_activity(visibility, group, users, status) + end + + defp insert_activity(:hell_thread, visibility, group, users, _) + when group in @remote_groups do + mentions = hell_thread_mentions(users) + insert_remote_activity(visibility, group, users, mentions <> " remote hell thread status") + end + + defp insert_activity(:hell_thread, visibility, group, users, _opts) do + mentions = hell_thread_mentions(users) + + insert_local_activity(visibility, group, users, mentions <> " hell thread status") + end + + defp insert_activity(:attachment, visibility, group, users, _opts) do + actor = get_actor(group, users) obj_data = %{ "actor" => actor.ap_id, @@ -268,67 +306,54 @@ defp insert_activity("attachment", visibility, group, user, friends, non_friends }) end - defp insert_activity("tag", visibility, group, user, friends, non_friends, _opts) do - {:ok, _activity} = - group - |> get_actor(user, friends, non_friends) - |> CommonAPI.post(%{status: "Status with #tag", visibility: visibility}) + defp insert_activity(:tag, visibility, group, users, _opts) do + insert_local_activity(visibility, group, users, "Status with #tag") end - defp insert_activity("like", visibility, group, user, friends, non_friends, opts) do - actor = get_actor(group, user, friends, non_friends) + defp insert_activity(:like, visibility, group, users, opts) do + actor = get_actor(group, users) with activity_id when not is_nil(activity_id) <- get_random_create_activity_id(), {:ok, _activity} <- CommonAPI.favorite(actor, activity_id) do :ok else {:error, _} -> - insert_activity("like", visibility, group, user, friends, non_friends, opts) + insert_activity(:like, visibility, group, users, opts) nil -> Process.sleep(15) - insert_activity("like", visibility, group, user, friends, non_friends, opts) + insert_activity(:like, visibility, group, users, opts) end end - defp insert_activity("reblog", visibility, group, user, friends, non_friends, opts) do - actor = get_actor(group, user, friends, non_friends) + defp insert_activity(:reblog, visibility, group, users, opts) do + actor = get_actor(group, users) with activity_id when not is_nil(activity_id) <- get_random_create_activity_id(), - {:ok, _activity, _object} <- CommonAPI.repeat(activity_id, actor) do + {:ok, _activity} <- CommonAPI.repeat(activity_id, actor) do :ok else {:error, _} -> - insert_activity("reblog", visibility, group, user, friends, non_friends, opts) + insert_activity(:reblog, visibility, group, users, opts) nil -> Process.sleep(15) - insert_activity("reblog", visibility, group, user, friends, non_friends, opts) + insert_activity(:reblog, visibility, group, users, opts) end end - defp insert_activity("simple_thread", visibility, group, user, friends, non_friends, _opts) - when visibility in ["public", "unlisted", "private"] do - actor = get_actor(group, user, friends, non_friends) - tasks = get_reply_tasks(visibility, group) - - {:ok, activity} = CommonAPI.post(user, %{status: "Simple status", visibility: visibility}) - - acc = {activity.id, ["@" <> actor.nickname, "reply to status"]} - insert_replies(tasks, visibility, user, friends, non_friends, acc) - end - - defp insert_activity("simple_thread", "direct", group, user, friends, non_friends, _opts) do - actor = get_actor(group, user, friends, non_friends) + defp insert_activity(:simple_thread, "direct", group, users, _opts) do + actor = get_actor(group, users) tasks = get_reply_tasks("direct", group) list = case group do - "non_friends" -> - Enum.take(non_friends, 3) + :user -> + group = Enum.random(@friends_groups) + Enum.take(users[group], 3) _ -> - Enum.take(friends, 3) + Enum.take(users[group], 3) end data = Enum.map(list, &("@" <> &1.nickname)) @@ -339,40 +364,30 @@ defp insert_activity("simple_thread", "direct", group, user, friends, non_friend visibility: "direct" }) - acc = {activity.id, ["@" <> user.nickname | data] ++ ["reply to status"]} - insert_direct_replies(tasks, user, list, acc) + acc = {activity.id, ["@" <> users[:user].nickname | data] ++ ["reply to status"]} + insert_direct_replies(tasks, users[:user], list, acc) end - defp insert_activity("remote", _, "user", _, _, _, _), do: :ok + defp insert_activity(:simple_thread, visibility, group, users, _opts) do + actor = get_actor(group, users) + tasks = get_reply_tasks(visibility, group) - defp insert_activity("remote", visibility, group, user, _friends, _non_friends, opts) do - remote_friends = - Users.get_users(user, limit: opts[:friends_used], local: :external, friends?: true) + {:ok, activity} = + CommonAPI.post(users[:user], %{status: "Simple status", visibility: visibility}) - remote_non_friends = - Users.get_users(user, limit: opts[:non_friends_used], local: :external, friends?: false) - - actor = get_actor(group, user, remote_friends, remote_non_friends) - - {act_data, obj_data} = prepare_activity_data(actor, visibility, user) - {activity_data, object_data} = other_data(actor) - - activity_data - |> Map.merge(act_data) - |> Map.put("object", Map.merge(object_data, obj_data)) - |> Pleroma.Web.ActivityPub.ActivityPub.insert(false) + acc = {activity.id, ["@" <> actor.nickname, "reply to status"]} + insert_replies(tasks, visibility, users, acc) end - defp get_actor("user", user, _friends, _non_friends), do: user - defp get_actor("friends", _user, friends, _non_friends), do: Enum.random(friends) - defp get_actor("non_friends", _user, _friends, non_friends), do: Enum.random(non_friends) + defp get_actor(:user, %{user: user}), do: user + defp get_actor(group, users), do: Enum.random(users[group]) - defp other_data(actor) do + defp other_data(actor, content) do %{host: host} = URI.parse(actor.ap_id) datetime = DateTime.utc_now() - context_id = "http://#{host}:4000/contexts/#{UUID.generate()}" - activity_id = "http://#{host}:4000/activities/#{UUID.generate()}" - object_id = "http://#{host}:4000/objects/#{UUID.generate()}" + context_id = "https://#{host}/contexts/#{UUID.generate()}" + activity_id = "https://#{host}/activities/#{UUID.generate()}" + object_id = "https://#{host}/objects/#{UUID.generate()}" activity_data = %{ "actor" => actor.ap_id, @@ -389,7 +404,7 @@ defp other_data(actor) do "attributedTo" => actor.ap_id, "bcc" => [], "bto" => [], - "content" => "Remote post", + "content" => content, "context" => context_id, "conversation" => context_id, "emoji" => %{}, @@ -475,51 +490,65 @@ defp prepare_activity_data(_actor, "direct", mention) do {act_data, obj_data} end - defp get_reply_tasks("public", "user"), do: ~w(friend non_friend user) - defp get_reply_tasks("public", "friends"), do: ~w(non_friend user friend) - defp get_reply_tasks("public", "non_friends"), do: ~w(user friend non_friend) + defp get_reply_tasks("public", :user) do + [:friends_local, :friends_remote, :non_friends_local, :non_friends_remote, :user] + end - defp get_reply_tasks(visibility, "user") when visibility in ["unlisted", "private"], - do: ~w(friend user friend) + defp get_reply_tasks("public", group) when group in @friends_groups do + [:non_friends_local, :non_friends_remote, :user, :friends_local, :friends_remote] + end - defp get_reply_tasks(visibility, "friends") when visibility in ["unlisted", "private"], - do: ~w(user friend user) + defp get_reply_tasks("public", group) when group in @non_friends_groups do + [:user, :friends_local, :friends_remote, :non_friends_local, :non_friends_remote] + end - defp get_reply_tasks(visibility, "non_friends") when visibility in ["unlisted", "private"], - do: [] + defp get_reply_tasks(visibility, :user) when visibility in ["unlisted", "private"] do + [:friends_local, :friends_remote, :user, :friends_local, :friends_remote] + end - defp get_reply_tasks("direct", "user"), do: ~w(friend user friend) - defp get_reply_tasks("direct", "friends"), do: ~w(user friend user) - defp get_reply_tasks("direct", "non_friends"), do: ~w(user non_friend user) + defp get_reply_tasks(visibility, group) + when visibility in ["unlisted", "private"] and group in @friends_groups do + [:user, :friends_remote, :friends_local, :user] + end - defp insert_replies(tasks, visibility, user, friends, non_friends, acc) do + defp get_reply_tasks(visibility, group) + when visibility in ["unlisted", "private"] and + group in @non_friends_groups, + do: [] + + defp get_reply_tasks("direct", :user), do: [:friends_local, :user, :friends_remote] + + defp get_reply_tasks("direct", group) when group in @friends_groups, + do: [:user, group, :user] + + defp get_reply_tasks("direct", group) when group in @non_friends_groups do + [:user, :non_friends_remote, :user, :non_friends_local] + end + + defp insert_replies(tasks, visibility, users, acc) do Enum.reduce(tasks, acc, fn - "friend", {id, data} -> - friend = Enum.random(friends) - insert_reply(friend, data, id, visibility) + :user, {id, data} -> + insert_reply(users[:user], data, id, visibility) - "non_friend", {id, data} -> - non_friend = Enum.random(non_friends) - insert_reply(non_friend, data, id, visibility) - - "user", {id, data} -> - insert_reply(user, data, id, visibility) + group, {id, data} -> + replier = Enum.random(users[group]) + insert_reply(replier, data, id, visibility) end) end defp insert_direct_replies(tasks, user, list, acc) do Enum.reduce(tasks, acc, fn - group, {id, data} when group in ["friend", "non_friend"] -> + :user, {id, data} -> + {reply_id, _} = insert_reply(user, List.delete(data, "@" <> user.nickname), id, "direct") + {reply_id, data} + + _, {id, data} -> actor = Enum.random(list) {reply_id, _} = insert_reply(actor, List.delete(data, "@" <> actor.nickname), id, "direct") {reply_id, data} - - "user", {id, data} -> - {reply_id, _} = insert_reply(user, List.delete(data, "@" <> user.nickname), id, "direct") - {reply_id, data} end) end diff --git a/benchmarks/load_testing/fetcher.ex b/benchmarks/load_testing/fetcher.ex index 0de4924bc..b278faf9f 100644 --- a/benchmarks/load_testing/fetcher.ex +++ b/benchmarks/load_testing/fetcher.ex @@ -36,6 +36,7 @@ defp fetch_timelines(user) do fetch_home_timeline(user) fetch_direct_timeline(user) fetch_public_timeline(user) + fetch_public_timeline(user, :with_blocks) fetch_public_timeline(user, :local) fetch_public_timeline(user, :tag) fetch_notifications(user) @@ -227,6 +228,76 @@ defp fetch_public_timeline(user, :only_media) do fetch_public_timeline(opts, "public timeline only media") end + # TODO: remove using `:method` after benchmarks + defp fetch_public_timeline(user, :with_blocks) do + opts = opts_for_public_timeline(user) + + remote_non_friends = Agent.get(:non_friends_remote, & &1) + + Benchee.run( + %{ + "public timeline without blocks" => fn opts -> + ActivityPub.fetch_public_activities(opts) + end + }, + inputs: %{ + "old filtering" => Map.delete(opts, :method), + "with psql fun" => Map.put(opts, :method, :fun), + "with unnest" => Map.put(opts, :method, :unnest) + } + ) + + Enum.each(remote_non_friends, fn non_friend -> + {:ok, _} = User.block(user, non_friend) + end) + + user = User.get_by_id(user.id) + + opts = Map.put(opts, "blocking_user", user) + + Benchee.run( + %{ + "public timeline with user block" => fn opts -> + ActivityPub.fetch_public_activities(opts) + end + }, + inputs: %{ + "old filtering" => Map.delete(opts, :method), + "with psql fun" => Map.put(opts, :method, :fun), + "with unnest" => Map.put(opts, :method, :unnest) + } + ) + + domains = + Enum.reduce(remote_non_friends, [], fn non_friend, domains -> + {:ok, _user} = User.unblock(user, non_friend) + %{host: host} = URI.parse(non_friend.ap_id) + [host | domains] + end) + + domains = Enum.uniq(domains) + + Enum.each(domains, fn domain -> + {:ok, _} = User.block_domain(user, domain) + end) + + user = User.get_by_id(user.id) + opts = Map.put(opts, "blocking_user", user) + + Benchee.run( + %{ + "public timeline with domain block" => fn opts -> + ActivityPub.fetch_public_activities(opts) + end + }, + inputs: %{ + "old filtering" => Map.delete(opts, :method), + "with psql fun" => Map.put(opts, :method, :fun), + "with unnest" => Map.put(opts, :method, :unnest) + } + ) + end + defp fetch_public_timeline(opts, title) when is_binary(title) do first_page_last = ActivityPub.fetch_public_activities(opts) |> List.last() diff --git a/benchmarks/load_testing/users.ex b/benchmarks/load_testing/users.ex index e4d0b22ff..6cf3958c1 100644 --- a/benchmarks/load_testing/users.ex +++ b/benchmarks/load_testing/users.ex @@ -27,7 +27,7 @@ def generate(opts \\ []) do make_friends(main_user, opts[:friends]) - Repo.get(User, main_user.id) + User.get_by_id(main_user.id) end def generate_users(max) do @@ -166,4 +166,24 @@ defp run_stream(users, main_user) do ) |> Stream.run() end + + @spec prepare_users(User.t(), keyword()) :: map() + def prepare_users(user, opts) do + friends_limit = opts[:friends_used] + non_friends_limit = opts[:non_friends_used] + + %{ + user: user, + friends_local: fetch_users(user, friends_limit, :local, true), + friends_remote: fetch_users(user, friends_limit, :external, true), + non_friends_local: fetch_users(user, non_friends_limit, :local, false), + non_friends_remote: fetch_users(user, non_friends_limit, :external, false) + } + end + + defp fetch_users(user, limit, local, friends?) do + user + |> get_users(limit: limit, local: local, friends?: friends?) + |> Enum.shuffle() + end end diff --git a/benchmarks/mix/tasks/pleroma/benchmarks/tags.ex b/benchmarks/mix/tasks/pleroma/benchmarks/tags.ex index 657403202..1162b2e06 100644 --- a/benchmarks/mix/tasks/pleroma/benchmarks/tags.ex +++ b/benchmarks/mix/tasks/pleroma/benchmarks/tags.ex @@ -5,7 +5,6 @@ defmodule Mix.Tasks.Pleroma.Benchmarks.Tags do import Ecto.Query alias Pleroma.Repo - alias Pleroma.Web.MastodonAPI.TimelineController def run(_args) do Mix.Pleroma.start_pleroma() @@ -37,7 +36,7 @@ def run(_args) do Benchee.run( %{ "Hashtag fetching, any" => fn tags -> - TimelineController.hashtag_fetching( + hashtag_fetching( %{ "any" => tags }, @@ -47,7 +46,7 @@ def run(_args) do end, # Will always return zero results because no overlapping hashtags are generated. "Hashtag fetching, all" => fn tags -> - TimelineController.hashtag_fetching( + hashtag_fetching( %{ "all" => tags }, @@ -67,7 +66,7 @@ def run(_args) do Benchee.run( %{ "Hashtag fetching" => fn tag -> - TimelineController.hashtag_fetching( + hashtag_fetching( %{ "tag" => tag }, @@ -80,4 +79,35 @@ def run(_args) do time: 5 ) end + + defp hashtag_fetching(params, user, local_only) do + tags = + [params["tag"], params["any"]] + |> List.flatten() + |> Enum.uniq() + |> Enum.filter(& &1) + |> Enum.map(&String.downcase(&1)) + + tag_all = + params + |> Map.get("all", []) + |> Enum.map(&String.downcase(&1)) + + tag_reject = + params + |> Map.get("none", []) + |> Enum.map(&String.downcase(&1)) + + _activities = + params + |> Map.put("type", "Create") + |> Map.put("local_only", local_only) + |> Map.put("blocking_user", user) + |> Map.put("muting_user", user) + |> Map.put("user", user) + |> Map.put("tag", tags) + |> Map.put("tag_all", tag_all) + |> Map.put("tag_reject", tag_reject) + |> Pleroma.Web.ActivityPub.ActivityPub.fetch_public_activities() + end end diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index b8a2873d8..e7958f7a8 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -932,6 +932,33 @@ defp restrict_blocked(query, %{"blocking_user" => %User{} = user} = opts) do query = if has_named_binding?(query, :object), do: query, else: Activity.with_joined_object(query) + # TODO: update after benchmarks + query = + case opts[:method] do + :fun -> + from(a in query, + where: + fragment( + "recipients_contain_blocked_domains(?, ?) = false", + a.recipients, + ^domain_blocks + ) + ) + + :unnest -> + from(a in query, + where: + fragment( + "NOT ? && (SELECT ARRAY(SELECT split_part(UNNEST(?), '/', 3)))", + ^domain_blocks, + a.recipients + ) + ) + + _ -> + query + end + from( [activity, object: o] in query, where: fragment("not (? = ANY(?))", activity.actor, ^blocked_ap_ids), diff --git a/lib/pleroma/web/api_spec/operations/timeline_operation.ex b/lib/pleroma/web/api_spec/operations/timeline_operation.ex index 8e19bace7..375b441a1 100644 --- a/lib/pleroma/web/api_spec/operations/timeline_operation.ex +++ b/lib/pleroma/web/api_spec/operations/timeline_operation.ex @@ -62,6 +62,13 @@ def public_operation do only_media_param(), with_muted_param(), exclude_visibilities_param(), + # TODO: remove after benchmarks + Operation.parameter( + :method, + :query, + %Schema{type: :string}, + "Temp parameter" + ), reply_visibility_param() | pagination_params() ], operationId: "TimelineController.public", diff --git a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex index 958567510..1734df4b5 100644 --- a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex @@ -109,14 +109,23 @@ def public(%{assigns: %{user: user}} = conn, params) do if restrict? and is_nil(user) do render_error(conn, :unauthorized, "authorization required for timeline view") else - activities = + # TODO: return back after benchmarks + params = params |> Map.put("type", ["Create", "Announce"]) |> Map.put("local_only", local_only) |> Map.put("blocking_user", user) |> Map.put("muting_user", user) |> Map.put("reply_filtering_user", user) - |> ActivityPub.fetch_public_activities() + + params = + if params["method"] do + Map.put(params, :method, String.to_existing_atom(params["method"])) + else + params + end + + activities = ActivityPub.fetch_public_activities(params) conn |> add_link_headers(activities, %{"local" => local_only}) diff --git a/priv/repo/migrations/20200520155351_add_recipients_contain_blocked_domains_function.exs b/priv/repo/migrations/20200520155351_add_recipients_contain_blocked_domains_function.exs new file mode 100644 index 000000000..14e873125 --- /dev/null +++ b/priv/repo/migrations/20200520155351_add_recipients_contain_blocked_domains_function.exs @@ -0,0 +1,33 @@ +defmodule Pleroma.Repo.Migrations.AddRecipientsContainBlockedDomainsFunction do + use Ecto.Migration + @disable_ddl_transaction true + + def up do + statement = """ + CREATE OR REPLACE FUNCTION recipients_contain_blocked_domains(recipients varchar[], blocked_domains varchar[]) RETURNS boolean AS $$ + DECLARE + recipient_domain varchar; + recipient varchar; + BEGIN + FOREACH recipient IN ARRAY recipients LOOP + recipient_domain = split_part(recipient, '/', 3)::varchar; + + IF recipient_domain = ANY(blocked_domains) THEN + RETURN TRUE; + END IF; + END LOOP; + + RETURN FALSE; + END; + $$ LANGUAGE plpgsql; + """ + + execute(statement) + end + + def down do + execute( + "drop function if exists recipients_contain_blocked_domains(recipients varchar[], blocked_domains varchar[])" + ) + end +end diff --git a/test/web/mastodon_api/controllers/timeline_controller_test.exs b/test/web/mastodon_api/controllers/timeline_controller_test.exs index 2375ac8e8..3474c0cf9 100644 --- a/test/web/mastodon_api/controllers/timeline_controller_test.exs +++ b/test/web/mastodon_api/controllers/timeline_controller_test.exs @@ -90,6 +90,74 @@ test "the public timeline includes only public statuses for an authenticated use res_conn = get(conn, "/api/v1/timelines/public") assert length(json_response_and_validate_schema(res_conn, 200)) == 1 end + + test "doesn't return replies if follower is posting with blocked user" do + %{conn: conn, user: blocker} = oauth_access(["read:statuses"]) + [blockee, friend] = insert_list(2, :user) + {:ok, blocker} = User.follow(blocker, friend) + {:ok, _} = User.block(blocker, blockee) + + conn = assign(conn, :user, blocker) + + {:ok, %{id: activity_id} = activity} = CommonAPI.post(friend, %{status: "hey!"}) + + {:ok, reply_from_blockee} = + CommonAPI.post(blockee, %{status: "heya", in_reply_to_status_id: activity}) + + {:ok, _reply_from_friend} = + CommonAPI.post(friend, %{status: "status", in_reply_to_status_id: reply_from_blockee}) + + res_conn = get(conn, "/api/v1/timelines/public") + [%{"id" => ^activity_id}] = json_response_and_validate_schema(res_conn, 200) + end + + # TODO: update after benchmarks + test "doesn't return replies if follow is posting with users from blocked domain" do + %{conn: conn, user: blocker} = oauth_access(["read:statuses"]) + friend = insert(:user) + blockee = insert(:user, ap_id: "https://example.com/users/blocked") + {:ok, blocker} = User.follow(blocker, friend) + {:ok, blocker} = User.block_domain(blocker, "example.com") + + conn = assign(conn, :user, blocker) + + {:ok, %{id: activity_id} = activity} = CommonAPI.post(friend, %{status: "hey!"}) + + {:ok, reply_from_blockee} = + CommonAPI.post(blockee, %{status: "heya", in_reply_to_status_id: activity}) + + {:ok, _reply_from_friend} = + CommonAPI.post(friend, %{status: "status", in_reply_to_status_id: reply_from_blockee}) + + res_conn = get(conn, "/api/v1/timelines/public?method=fun") + + activities = json_response_and_validate_schema(res_conn, 200) + [%{"id" => ^activity_id}] = activities + end + + # TODO: update after benchmarks + test "doesn't return replies if follow is posting with users from blocked domain with unnest param" do + %{conn: conn, user: blocker} = oauth_access(["read:statuses"]) + friend = insert(:user) + blockee = insert(:user, ap_id: "https://example.com/users/blocked") + {:ok, blocker} = User.follow(blocker, friend) + {:ok, blocker} = User.block_domain(blocker, "example.com") + + conn = assign(conn, :user, blocker) + + {:ok, %{id: activity_id} = activity} = CommonAPI.post(friend, %{status: "hey!"}) + + {:ok, reply_from_blockee} = + CommonAPI.post(blockee, %{status: "heya", in_reply_to_status_id: activity}) + + {:ok, _reply_from_friend} = + CommonAPI.post(friend, %{status: "status", in_reply_to_status_id: reply_from_blockee}) + + res_conn = get(conn, "/api/v1/timelines/public?method=unnest") + + activities = json_response_and_validate_schema(res_conn, 200) + [%{"id" => ^activity_id}] = activities + end end defp local_and_remote_activities do From 19f468c5bc230d6790b00aa87e509a07e709aaa7 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 2 Jun 2020 08:50:24 +0300 Subject: [PATCH 63/65] replies filtering for blocked domains --- benchmarks/load_testing/fetcher.ex | 30 ++++------------- lib/pleroma/web/activity_pub/activity_pub.ex | 33 ++++--------------- .../api_spec/operations/timeline_operation.ex | 7 ---- .../controllers/timeline_controller.ex | 13 ++------ .../controllers/timeline_controller_test.exs | 27 +-------------- 5 files changed, 15 insertions(+), 95 deletions(-) diff --git a/benchmarks/load_testing/fetcher.ex b/benchmarks/load_testing/fetcher.ex index b278faf9f..22a06e472 100644 --- a/benchmarks/load_testing/fetcher.ex +++ b/benchmarks/load_testing/fetcher.ex @@ -228,24 +228,16 @@ defp fetch_public_timeline(user, :only_media) do fetch_public_timeline(opts, "public timeline only media") end - # TODO: remove using `:method` after benchmarks defp fetch_public_timeline(user, :with_blocks) do opts = opts_for_public_timeline(user) remote_non_friends = Agent.get(:non_friends_remote, & &1) - Benchee.run( - %{ - "public timeline without blocks" => fn opts -> - ActivityPub.fetch_public_activities(opts) - end - }, - inputs: %{ - "old filtering" => Map.delete(opts, :method), - "with psql fun" => Map.put(opts, :method, :fun), - "with unnest" => Map.put(opts, :method, :unnest) - } - ) + Benchee.run(%{ + "public timeline without blocks" => fn -> + ActivityPub.fetch_public_activities(opts) + end + }) Enum.each(remote_non_friends, fn non_friend -> {:ok, _} = User.block(user, non_friend) @@ -257,15 +249,10 @@ defp fetch_public_timeline(user, :with_blocks) do Benchee.run( %{ - "public timeline with user block" => fn opts -> + "public timeline with user block" => fn -> ActivityPub.fetch_public_activities(opts) end }, - inputs: %{ - "old filtering" => Map.delete(opts, :method), - "with psql fun" => Map.put(opts, :method, :fun), - "with unnest" => Map.put(opts, :method, :unnest) - } ) domains = @@ -289,11 +276,6 @@ defp fetch_public_timeline(user, :with_blocks) do "public timeline with domain block" => fn opts -> ActivityPub.fetch_public_activities(opts) end - }, - inputs: %{ - "old filtering" => Map.delete(opts, :method), - "with psql fun" => Map.put(opts, :method, :fun), - "with unnest" => Map.put(opts, :method, :unnest) } ) end diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index e7958f7a8..673b10b22 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -932,37 +932,16 @@ defp restrict_blocked(query, %{"blocking_user" => %User{} = user} = opts) do query = if has_named_binding?(query, :object), do: query, else: Activity.with_joined_object(query) - # TODO: update after benchmarks - query = - case opts[:method] do - :fun -> - from(a in query, - where: - fragment( - "recipients_contain_blocked_domains(?, ?) = false", - a.recipients, - ^domain_blocks - ) - ) - - :unnest -> - from(a in query, - where: - fragment( - "NOT ? && (SELECT ARRAY(SELECT split_part(UNNEST(?), '/', 3)))", - ^domain_blocks, - a.recipients - ) - ) - - _ -> - query - end - from( [activity, object: o] in query, where: fragment("not (? = ANY(?))", activity.actor, ^blocked_ap_ids), where: fragment("not (? && ?)", activity.recipients, ^blocked_ap_ids), + where: + fragment( + "recipients_contain_blocked_domains(?, ?) = false", + activity.recipients, + ^domain_blocks + ), where: fragment( "not (?->>'type' = 'Announce' and ?->'to' \\?| ?)", diff --git a/lib/pleroma/web/api_spec/operations/timeline_operation.ex b/lib/pleroma/web/api_spec/operations/timeline_operation.ex index 375b441a1..8e19bace7 100644 --- a/lib/pleroma/web/api_spec/operations/timeline_operation.ex +++ b/lib/pleroma/web/api_spec/operations/timeline_operation.ex @@ -62,13 +62,6 @@ def public_operation do only_media_param(), with_muted_param(), exclude_visibilities_param(), - # TODO: remove after benchmarks - Operation.parameter( - :method, - :query, - %Schema{type: :string}, - "Temp parameter" - ), reply_visibility_param() | pagination_params() ], operationId: "TimelineController.public", diff --git a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex index 1734df4b5..958567510 100644 --- a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex @@ -109,23 +109,14 @@ def public(%{assigns: %{user: user}} = conn, params) do if restrict? and is_nil(user) do render_error(conn, :unauthorized, "authorization required for timeline view") else - # TODO: return back after benchmarks - params = + activities = params |> Map.put("type", ["Create", "Announce"]) |> Map.put("local_only", local_only) |> Map.put("blocking_user", user) |> Map.put("muting_user", user) |> Map.put("reply_filtering_user", user) - - params = - if params["method"] do - Map.put(params, :method, String.to_existing_atom(params["method"])) - else - params - end - - activities = ActivityPub.fetch_public_activities(params) + |> ActivityPub.fetch_public_activities() conn |> add_link_headers(activities, %{"local" => local_only}) diff --git a/test/web/mastodon_api/controllers/timeline_controller_test.exs b/test/web/mastodon_api/controllers/timeline_controller_test.exs index 3474c0cf9..2ad6828ad 100644 --- a/test/web/mastodon_api/controllers/timeline_controller_test.exs +++ b/test/web/mastodon_api/controllers/timeline_controller_test.exs @@ -111,7 +111,6 @@ test "doesn't return replies if follower is posting with blocked user" do [%{"id" => ^activity_id}] = json_response_and_validate_schema(res_conn, 200) end - # TODO: update after benchmarks test "doesn't return replies if follow is posting with users from blocked domain" do %{conn: conn, user: blocker} = oauth_access(["read:statuses"]) friend = insert(:user) @@ -129,31 +128,7 @@ test "doesn't return replies if follow is posting with users from blocked domain {:ok, _reply_from_friend} = CommonAPI.post(friend, %{status: "status", in_reply_to_status_id: reply_from_blockee}) - res_conn = get(conn, "/api/v1/timelines/public?method=fun") - - activities = json_response_and_validate_schema(res_conn, 200) - [%{"id" => ^activity_id}] = activities - end - - # TODO: update after benchmarks - test "doesn't return replies if follow is posting with users from blocked domain with unnest param" do - %{conn: conn, user: blocker} = oauth_access(["read:statuses"]) - friend = insert(:user) - blockee = insert(:user, ap_id: "https://example.com/users/blocked") - {:ok, blocker} = User.follow(blocker, friend) - {:ok, blocker} = User.block_domain(blocker, "example.com") - - conn = assign(conn, :user, blocker) - - {:ok, %{id: activity_id} = activity} = CommonAPI.post(friend, %{status: "hey!"}) - - {:ok, reply_from_blockee} = - CommonAPI.post(blockee, %{status: "heya", in_reply_to_status_id: activity}) - - {:ok, _reply_from_friend} = - CommonAPI.post(friend, %{status: "status", in_reply_to_status_id: reply_from_blockee}) - - res_conn = get(conn, "/api/v1/timelines/public?method=unnest") + res_conn = get(conn, "/api/v1/timelines/public") activities = json_response_and_validate_schema(res_conn, 200) [%{"id" => ^activity_id}] = activities From 81fb45a71ba1d606e6a522ac746f3c7a7dd8136b Mon Sep 17 00:00:00 2001 From: Fristi Date: Mon, 1 Jun 2020 16:25:57 +0000 Subject: [PATCH 64/65] Translated using Weblate (Dutch) Currently translated at 29.2% (31 of 106 strings) Translation: Pleroma/Pleroma backend Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma/nl/ --- priv/gettext/nl/LC_MESSAGES/errors.po | 84 ++++++++++++++------------- 1 file changed, 43 insertions(+), 41 deletions(-) diff --git a/priv/gettext/nl/LC_MESSAGES/errors.po b/priv/gettext/nl/LC_MESSAGES/errors.po index 7e12ff96c..3118f6b5d 100644 --- a/priv/gettext/nl/LC_MESSAGES/errors.po +++ b/priv/gettext/nl/LC_MESSAGES/errors.po @@ -3,14 +3,16 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-05-15 09:37+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2020-06-02 07:36+0000\n" +"Last-Translator: Fristi \n" +"Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Translate Toolkit 2.5.1\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.0.4\n" ## This file is a PO Template file. ## @@ -23,142 +25,142 @@ msgstr "" ## effect: edit them in PO (`.po`) files instead. ## From Ecto.Changeset.cast/4 msgid "can't be blank" -msgstr "" +msgstr "kan niet leeg zijn" ## From Ecto.Changeset.unique_constraint/3 msgid "has already been taken" -msgstr "" +msgstr "is al bezet" ## From Ecto.Changeset.put_change/3 msgid "is invalid" -msgstr "" +msgstr "is ongeldig" ## From Ecto.Changeset.validate_format/3 msgid "has invalid format" -msgstr "" +msgstr "heeft een ongeldig formaat" ## From Ecto.Changeset.validate_subset/3 msgid "has an invalid entry" -msgstr "" +msgstr "heeft een ongeldige entry" ## From Ecto.Changeset.validate_exclusion/3 msgid "is reserved" -msgstr "" +msgstr "is gereserveerd" ## From Ecto.Changeset.validate_confirmation/3 msgid "does not match confirmation" -msgstr "" +msgstr "komt niet overeen met bevestiging" ## From Ecto.Changeset.no_assoc_constraint/3 msgid "is still associated with this entry" -msgstr "" +msgstr "is nog geassocieerd met deze entry" msgid "are still associated with this entry" -msgstr "" +msgstr "zijn nog geassocieerd met deze entry" ## From Ecto.Changeset.validate_length/3 msgid "should be %{count} character(s)" msgid_plural "should be %{count} character(s)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "dient %{count} karakter te bevatten" +msgstr[1] "dient %{count} karakters te bevatten" msgid "should have %{count} item(s)" msgid_plural "should have %{count} item(s)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "dient %{count} item te bevatten" +msgstr[1] "dient %{count} items te bevatten" msgid "should be at least %{count} character(s)" msgid_plural "should be at least %{count} character(s)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "dient ten minste %{count} karakter te bevatten" +msgstr[1] "dient ten minste %{count} karakters te bevatten" msgid "should have at least %{count} item(s)" msgid_plural "should have at least %{count} item(s)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "dient ten minste %{count} item te bevatten" +msgstr[1] "dient ten minste %{count} items te bevatten" msgid "should be at most %{count} character(s)" msgid_plural "should be at most %{count} character(s)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "dient niet meer dan %{count} karakter te bevatten" +msgstr[1] "dient niet meer dan %{count} karakters te bevatten" msgid "should have at most %{count} item(s)" msgid_plural "should have at most %{count} item(s)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "dient niet meer dan %{count} item te bevatten" +msgstr[1] "dient niet meer dan %{count} items te bevatten" ## From Ecto.Changeset.validate_number/3 msgid "must be less than %{number}" -msgstr "" +msgstr "dient kleiner te zijn dan %{number}" msgid "must be greater than %{number}" -msgstr "" +msgstr "dient groter te zijn dan %{number}" msgid "must be less than or equal to %{number}" -msgstr "" +msgstr "dient kleiner dan of gelijk te zijn aan %{number}" msgid "must be greater than or equal to %{number}" -msgstr "" +msgstr "dient groter dan of gelijk te zijn aan %{number}" msgid "must be equal to %{number}" -msgstr "" +msgstr "dient gelijk te zijn aan %{number}" #: lib/pleroma/web/common_api/common_api.ex:421 #, elixir-format msgid "Account not found" -msgstr "" +msgstr "Account niet gevonden" #: lib/pleroma/web/common_api/common_api.ex:249 #, elixir-format msgid "Already voted" -msgstr "" +msgstr "Al gestemd" #: lib/pleroma/web/oauth/oauth_controller.ex:360 #, elixir-format msgid "Bad request" -msgstr "" +msgstr "Bad request" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:425 #, elixir-format msgid "Can't delete object" -msgstr "" +msgstr "Object kan niet verwijderd worden" #: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:196 #, elixir-format msgid "Can't delete this post" -msgstr "" +msgstr "Bericht kan niet verwijderd worden" #: lib/pleroma/web/controller_helper.ex:95 #: lib/pleroma/web/controller_helper.ex:101 #, elixir-format msgid "Can't display this activity" -msgstr "" +msgstr "Activiteit kan niet worden getoond" #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:227 #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:254 #, elixir-format msgid "Can't find user" -msgstr "" +msgstr "Gebruiker kan niet gevonden worden" #: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:114 #, elixir-format msgid "Can't get favorites" -msgstr "" +msgstr "Favorieten konden niet opgehaald worden" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:437 #, elixir-format msgid "Can't like object" -msgstr "" +msgstr "Object kan niet geliked worden" #: lib/pleroma/web/common_api/utils.ex:556 #, elixir-format msgid "Cannot post an empty status without attachments" -msgstr "" +msgstr "Status kan niet geplaatst worden zonder tekst of bijlagen" #: lib/pleroma/web/common_api/utils.ex:504 #, elixir-format msgid "Comment must be up to %{max_size} characters" -msgstr "" +msgstr "Opmerking dient maximaal %{max_size} karakters te bevatten" #: lib/pleroma/config/config_db.ex:222 #, elixir-format From 165a4b2a690ff7809ebbae65cddff3221d52489a Mon Sep 17 00:00:00 2001 From: rinpatch Date: Mon, 1 Jun 2020 22:18:20 +0300 Subject: [PATCH 65/65] Do not include activities of invisible users unless explicitly requested Closes #1833 --- lib/pleroma/user/query.ex | 6 +++--- lib/pleroma/web/activity_pub/activity_pub.ex | 12 ++++++++++++ lib/pleroma/web/admin_api/search.ex | 3 +-- test/tasks/relay_test.exs | 3 ++- .../controllers/admin_api_controller_test.exs | 13 +++++-------- 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/lib/pleroma/user/query.ex b/lib/pleroma/user/query.ex index 293bbc082..66ffe9090 100644 --- a/lib/pleroma/user/query.ex +++ b/lib/pleroma/user/query.ex @@ -45,7 +45,7 @@ defmodule Pleroma.User.Query do is_admin: boolean(), is_moderator: boolean(), super_users: boolean(), - exclude_service_users: boolean(), + invisible: boolean(), followers: User.t(), friends: User.t(), recipients_from_activity: [String.t()], @@ -89,8 +89,8 @@ defp compose_query({key, value}, query) where(query, [u], ilike(field(u, ^key), ^"%#{value}%")) end - defp compose_query({:exclude_service_users, _}, query) do - where(query, [u], not like(u.ap_id, "%/relay") and not like(u.ap_id, "%/internal/fetch")) + defp compose_query({:invisible, bool}, query) when is_boolean(bool) do + where(query, [u], u.invisible == ^bool) end defp compose_query({key, value}, query) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index b8a2873d8..a38f9a3c8 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1030,6 +1030,17 @@ defp exclude_poll_votes(query, _) do end end + defp exclude_invisible_actors(query, %{"invisible_actors" => true}), do: query + + defp exclude_invisible_actors(query, _opts) do + invisible_ap_ids = + User.Query.build(%{invisible: true, select: [:ap_id]}) + |> Repo.all() + |> Enum.map(fn %{ap_id: ap_id} -> ap_id end) + + from([activity] in query, where: activity.actor not in ^invisible_ap_ids) + end + defp exclude_id(query, %{"exclude_id" => id}) when is_binary(id) do from(activity in query, where: activity.id != ^id) end @@ -1135,6 +1146,7 @@ def fetch_activities_query(recipients, opts \\ %{}) do |> restrict_instance(opts) |> Activity.restrict_deactivated_users() |> exclude_poll_votes(opts) + |> exclude_invisible_actors(opts) |> exclude_visibility(opts) end diff --git a/lib/pleroma/web/admin_api/search.ex b/lib/pleroma/web/admin_api/search.ex index c28efadd5..0bfb8f022 100644 --- a/lib/pleroma/web/admin_api/search.ex +++ b/lib/pleroma/web/admin_api/search.ex @@ -21,7 +21,7 @@ def user(params \\ %{}) do query = params |> Map.drop([:page, :page_size]) - |> Map.put(:exclude_service_users, true) + |> Map.put(:invisible, false) |> User.Query.build() |> order_by([u], u.nickname) @@ -31,7 +31,6 @@ def user(params \\ %{}) do count = Repo.aggregate(query, :count, :id) results = Repo.all(paginated_query) - {:ok, results, count} end end diff --git a/test/tasks/relay_test.exs b/test/tasks/relay_test.exs index d3d88467d..678288854 100644 --- a/test/tasks/relay_test.exs +++ b/test/tasks/relay_test.exs @@ -65,7 +65,8 @@ test "relay is unfollowed" do "type" => "Undo", "actor_id" => follower_id, "limit" => 1, - "skip_preload" => true + "skip_preload" => true, + "invisible_actors" => true }) assert undo_activity.data["type"] == "Undo" diff --git a/test/web/admin_api/controllers/admin_api_controller_test.exs b/test/web/admin_api/controllers/admin_api_controller_test.exs index ead840186..193690469 100644 --- a/test/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/web/admin_api/controllers/admin_api_controller_test.exs @@ -757,8 +757,8 @@ test "renders users array for the first page", %{conn: conn, admin: admin} do end test "pagination works correctly with service users", %{conn: conn} do - service1 = insert(:user, ap_id: Web.base_url() <> "/relay") - service2 = insert(:user, ap_id: Web.base_url() <> "/internal/fetch") + service1 = User.get_or_create_service_actor_by_ap_id(Web.base_url() <> "/meido", "meido") + insert_list(25, :user) assert %{"count" => 26, "page_size" => 10, "users" => users1} = @@ -767,8 +767,7 @@ test "pagination works correctly with service users", %{conn: conn} do |> json_response(200) assert Enum.count(users1) == 10 - assert service1 not in [users1] - assert service2 not in [users1] + assert service1 not in users1 assert %{"count" => 26, "page_size" => 10, "users" => users2} = conn @@ -776,8 +775,7 @@ test "pagination works correctly with service users", %{conn: conn} do |> json_response(200) assert Enum.count(users2) == 10 - assert service1 not in [users2] - assert service2 not in [users2] + assert service1 not in users2 assert %{"count" => 26, "page_size" => 10, "users" => users3} = conn @@ -785,8 +783,7 @@ test "pagination works correctly with service users", %{conn: conn} do |> json_response(200) assert Enum.count(users3) == 6 - assert service1 not in [users3] - assert service2 not in [users3] + assert service1 not in users3 end test "renders empty array for the second page", %{conn: conn} do