From 6e4f52f8a2e510273149acbaf629521d1b4aec2e Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 16 Oct 2019 16:16:39 +0200 Subject: [PATCH 001/581] Introduce new ingestion pipeline structure, implement internal Likes with it. --- lib/pleroma/web/activity_pub/activity_pub.ex | 35 ++++++++++++ lib/pleroma/web/activity_pub/builder.ex | 43 ++++++++++++++ .../web/activity_pub/object_validator.ex | 57 +++++++++++++++++++ lib/pleroma/web/activity_pub/side_effects.ex | 28 +++++++++ lib/pleroma/web/common_api/common_api.ex | 29 ++++++++-- .../controllers/status_controller.ex | 6 +- test/notification_test.exs | 8 +-- test/object_test.exs | 3 +- test/tasks/database_test.exs | 2 +- test/user_test.exs | 4 +- .../activity_pub/activity_validator_test.exs | 21 +++++++ test/web/activity_pub/side_effects_test.exs | 32 +++++++++++ test/web/activity_pub/transmogrifier_test.exs | 2 +- .../activity_pub/views/object_view_test.exs | 2 +- test/web/common_api/common_api_test.exs | 11 ++-- .../notification_controller_test.exs | 2 +- .../controllers/status_controller_test.exs | 16 +++--- .../views/notification_view_test.exs | 2 +- test/web/ostatus/ostatus_controller_test.exs | 4 +- .../controllers/account_controller_test.exs | 16 +++--- test/web/push/impl_test.exs | 2 +- test/web/streamer/streamer_test.exs | 6 +- 22 files changed, 284 insertions(+), 47 deletions(-) create mode 100644 lib/pleroma/web/activity_pub/builder.ex create mode 100644 lib/pleroma/web/activity_pub/object_validator.ex create mode 100644 lib/pleroma/web/activity_pub/side_effects.ex create mode 100644 test/web/activity_pub/activity_validator_test.exs create mode 100644 test/web/activity_pub/side_effects_test.exs diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 364452b5d..f4fc45926 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -18,6 +18,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do alias Pleroma.Web.ActivityPub.MRF alias Pleroma.Web.ActivityPub.Transmogrifier alias Pleroma.Web.ActivityPub.Utils + alias Pleroma.Web.ActivityPub.ObjectValidator + alias Pleroma.Web.ActivityPub.SideEffects alias Pleroma.Web.Streamer alias Pleroma.Web.WebFinger alias Pleroma.Workers.BackgroundWorker @@ -123,6 +125,38 @@ def increase_poll_votes_if_vote(%{ def increase_poll_votes_if_vote(_create_data), do: :noop + @spec common_pipeline(map(), keyword()) :: {:ok, Activity.t(), keyword()} | {:error, any()} + def common_pipeline(object, meta) do + with {_, {:ok, validated_object, meta}} <- + {:validate_object, ObjectValidator.validate(object, meta)}, + {_, {:ok, mrfd_object}} <- {:mrf_object, MRF.filter(validated_object)}, + {_, {:ok, %Activity{} = activity, meta}} <- + {:persist_object, persist(mrfd_object, meta)}, + {_, {:ok, %Activity{} = activity, meta}} <- + {:execute_side_effects, SideEffects.handle(activity, meta)} do + {:ok, activity, meta} + else + e -> {:error, e} + end + end + + # TODO rewrite in with style + @spec persist(map(), keyword()) :: {:ok, Activity.t() | Object.t()} + def persist(object, meta) do + local = Keyword.get(meta, :local) + {recipients, _, _} = get_recipients(object) + + {:ok, activity} = + Repo.insert(%Activity{ + data: object, + local: local, + recipients: recipients, + actor: object["actor"] + }) + + {:ok, activity, meta} + end + def insert(map, local \\ true, fake \\ false, bypass_actor_check \\ false) when is_map(map) do with nil <- Activity.normalize(map), map <- lazy_put_activity_defaults(map, fake), @@ -130,6 +164,7 @@ def insert(map, local \\ true, fake \\ false, bypass_actor_check \\ false) when {_, true} <- {:remote_limit_error, check_remote_limit(map)}, {:ok, map} <- MRF.filter(map), {recipients, _, _} = get_recipients(map), + # ??? {:fake, false, map, recipients} <- {:fake, fake, map, recipients}, :ok <- Containment.contain_child(map), {:ok, map, object} <- insert_full_object(map) do diff --git a/lib/pleroma/web/activity_pub/builder.ex b/lib/pleroma/web/activity_pub/builder.ex new file mode 100644 index 000000000..1787f1510 --- /dev/null +++ b/lib/pleroma/web/activity_pub/builder.ex @@ -0,0 +1,43 @@ +defmodule Pleroma.Web.ActivityPub.Builder do + @moduledoc """ + This module builds the objects. Meant to be used for creating local objects. + + This module encodes our addressing policies and general shape of our objects. + """ + + alias Pleroma.Web.ActivityPub.Utils + alias Pleroma.Web.ActivityPub.Visibility + alias Pleroma.User + alias Pleroma.Object + + @spec like(User.t(), Object.t()) :: {:ok, map(), keyword()} + def like(actor, object) do + object_actor = User.get_cached_by_ap_id(object.data["actor"]) + + # Address the actor of the object, and our actor's follower collection if the post is public. + to = + if Visibility.is_public?(object) do + [actor.follower_address, object.data["actor"]] + else + [object.data["actor"]] + end + + # CC everyone who's been addressed in the object, except ourself and the object actor's + # follower collection + cc = + (object.data["to"] ++ (object.data["cc"] || [])) + |> List.delete(actor.ap_id) + |> List.delete(object_actor.follower_address) + + {:ok, + %{ + "id" => Utils.generate_activity_id(), + "actor" => actor.ap_id, + "type" => "Like", + "object" => object.data["id"], + "to" => to, + "cc" => cc, + "context" => object.data["context"] + }, []} + end +end diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex new file mode 100644 index 000000000..8ecad0dec --- /dev/null +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -0,0 +1,57 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.ObjectValidator do + @moduledoc """ + This module is responsible for validating an object (which can be an activity) + and checking if it is both well formed and also compatible with our view of + the system. + """ + + alias Pleroma.User + alias Pleroma.Object + alias Pleroma.Web.ActivityPub.Utils + + def validate_id(object, meta) do + with {_, true} <- {:id_presence, Map.has_key?(object, "id")} do + {:ok, object, meta} + else + e -> {:error, e} + end + end + + def validate_actor(object, meta) do + with {_, %User{}} <- {:actor_validation, User.get_cached_by_ap_id(object["actor"])} do + {:ok, object, meta} + else + e -> {:error, e} + end + end + + def common_validations(object, meta) do + with {_, {:ok, object, meta}} <- {:validate_id, validate_id(object, meta)}, + {_, {:ok, object, meta}} <- {:validate_actor, validate_actor(object, meta)} do + {:ok, object, meta} + else + e -> {:error, e} + end + end + + @spec validate(map(), keyword()) :: {:ok, map(), keyword()} | {:error, any()} + def validate(object, meta) + + def validate(%{"type" => "Like"} = object, meta) do + with {:ok, object, meta} <- common_validations(object, meta), + {_, %Object{} = liked_object} <- {:find_liked_object, Object.normalize(object["object"])}, + {_, nil} <- {:existing_like, Utils.get_existing_like(object["actor"], liked_object)} do + {:ok, object, meta} + else + e -> {:error, e} + end + end + + def validate(object, meta) do + common_validations(object, meta) + end +end diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex new file mode 100644 index 000000000..6d3e77a62 --- /dev/null +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -0,0 +1,28 @@ +defmodule Pleroma.Web.ActivityPub.SideEffects do + @moduledoc """ + This module looks at an inserted object and executes the side effects that it + implies. For example, a `Like` activity will increase the like count on the + liked object, a `Follow` activity will add the user to the follower + collection, and so on. + """ + alias Pleroma.Web.ActivityPub.Utils + alias Pleroma.Object + alias Pleroma.Notification + + def handle(object, meta \\ []) + + # Tasks this handles: + # - Add like to object + # - Set up notification + def handle(%{data: %{"type" => "Like"}} = object, meta) do + liked_object = Object.get_by_ap_id(object.data["object"]) + Utils.add_like_to_object(object, liked_object) + Notification.create_notifications(object) + {:ok, object, meta} + end + + # Nothing to do + def handle(object, meta) do + {:ok, object, meta} + end +end diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index 386408d51..466beb724 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -10,6 +10,7 @@ defmodule Pleroma.Web.CommonAPI do alias Pleroma.ThreadMute alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.ActivityPub.Builder alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Visibility @@ -17,6 +18,7 @@ defmodule Pleroma.Web.CommonAPI do import Pleroma.Web.CommonAPI.Utils require Pleroma.Constants + require Logger def follow(follower, followed) do timeout = Pleroma.Config.get([:activitypub, :follow_handshake_timeout]) @@ -98,16 +100,31 @@ def unrepeat(id_or_ap_id, user) do end end - def favorite(id_or_ap_id, user) do - with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id), - object <- Object.normalize(activity), - nil <- Utils.get_existing_like(user.ap_id, object) do - ActivityPub.like(user, object) + @spec favorite(User.t(), binary()) :: {:ok, Activity.t()} | {:error, any()} + def favorite(%User{} = user, id) do + with {_, %Activity{object: object}} <- {:find_object, Activity.get_by_id_with_object(id)}, + {_, {:ok, like_object, meta}} <- {:build_object, Builder.like(user, object)}, + {_, {:ok, %Activity{} = activity, _meta}} <- + {:common_pipeline, + ActivityPub.common_pipeline(like_object, Keyword.put(meta, :local, true))} do + {:ok, activity} else - _ -> {:error, dgettext("errors", "Could not favorite")} + e -> + Logger.error("Could not favorite #{id}. Error: #{inspect(e, pretty: true)}") + {:error, dgettext("errors", "Could not favorite")} end end + # def favorite(id_or_ap_id, user) do + # with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id), + # object <- Object.normalize(activity), + # nil <- Utils.get_existing_like(user.ap_id, object) do + # ActivityPub.like(user, object) + # else + # _ -> {:error, dgettext("errors", "Could not favorite")} + # end + # end + def unfavorite(id_or_ap_id, user) do with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id) do object = Object.normalize(activity) diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex index e5d016f63..4b4482aa8 100644 --- a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex @@ -201,9 +201,9 @@ def unreblog(%{assigns: %{user: user}} = conn, %{"id" => ap_id_or_id}) do end @doc "POST /api/v1/statuses/:id/favourite" - def favourite(%{assigns: %{user: user}} = conn, %{"id" => ap_id_or_id}) do - with {:ok, _fav, %{data: %{"id" => id}}} <- CommonAPI.favorite(ap_id_or_id, user), - %Activity{} = activity <- Activity.get_create_by_object_ap_id(id) do + def favourite(%{assigns: %{user: user}} = conn, %{"id" => activity_id}) do + with {:ok, _fav} <- CommonAPI.favorite(user, activity_id), + %Activity{} = activity <- Activity.get_by_id(activity_id) do try_render(conn, "show.json", activity: activity, for: user, as: :activity) end end diff --git a/test/notification_test.exs b/test/notification_test.exs index 54c0f9877..940913aa6 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -431,7 +431,7 @@ test "it does not send notification to mentioned users in likes" do "status" => "hey @#{other_user.nickname}!" }) - {:ok, activity_two, _} = CommonAPI.favorite(activity_one.id, third_user) + {:ok, activity_two} = CommonAPI.favorite(third_user, activity_one.id) assert other_user not in Notification.get_notified_from_activity(activity_two) end @@ -461,7 +461,7 @@ test "liking an activity results in 1 notification, then 0 if the activity is de assert Enum.empty?(Notification.for_user(user)) - {:ok, _, _} = CommonAPI.favorite(activity.id, other_user) + {:ok, _} = CommonAPI.favorite(other_user, activity.id) assert length(Notification.for_user(user)) == 1 @@ -478,7 +478,7 @@ test "liking an activity results in 1 notification, then 0 if the activity is un assert Enum.empty?(Notification.for_user(user)) - {:ok, _, _} = CommonAPI.favorite(activity.id, other_user) + {:ok, _} = CommonAPI.favorite(other_user, activity.id) assert length(Notification.for_user(user)) == 1 @@ -533,7 +533,7 @@ test "liking an activity which is already deleted does not generate a notificati assert Enum.empty?(Notification.for_user(user)) - {:error, _} = CommonAPI.favorite(activity.id, other_user) + {:error, _} = CommonAPI.favorite(other_user, activity.id) assert Enum.empty?(Notification.for_user(user)) end diff --git a/test/object_test.exs b/test/object_test.exs index dd228c32f..353bc388d 100644 --- a/test/object_test.exs +++ b/test/object_test.exs @@ -182,7 +182,8 @@ test "preserves internal fields on refetch", %{mock_modified: mock_modified} do user = insert(:user) activity = Activity.get_create_by_object_ap_id(object.data["id"]) - {:ok, _activity, object} = CommonAPI.favorite(activity.id, user) + {:ok, activity} = CommonAPI.favorite(user, activity.id) + object = Object.get_by_ap_id(activity.data["object"]) assert object.data["like_count"] == 1 diff --git a/test/tasks/database_test.exs b/test/tasks/database_test.exs index b63dcac00..c0a313863 100644 --- a/test/tasks/database_test.exs +++ b/test/tasks/database_test.exs @@ -102,7 +102,7 @@ test "it turns OrderedCollection likes into empty arrays" do {:ok, %{id: id, object: object}} = CommonAPI.post(user, %{"status" => "test"}) {:ok, %{object: object2}} = CommonAPI.post(user, %{"status" => "test test"}) - CommonAPI.favorite(id, user2) + CommonAPI.favorite(user2, id) likes = %{ "first" => diff --git a/test/user_test.exs b/test/user_test.exs index 019e7b400..49c1eb02a 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -1059,8 +1059,8 @@ test "it deletes a user, all follow relationships and all activities", %{user: u object_two = insert(:note, user: follower) activity_two = insert(:note_activity, user: follower, note: object_two) - {:ok, like, _} = CommonAPI.favorite(activity_two.id, user) - {:ok, like_two, _} = CommonAPI.favorite(activity.id, follower) + {:ok, like} = CommonAPI.favorite(user, activity_two.id) + {:ok, like_two} = CommonAPI.favorite(follower, activity.id) {:ok, repeat, _} = CommonAPI.repeat(activity_two.id, user) {:ok, job} = User.delete(user) diff --git a/test/web/activity_pub/activity_validator_test.exs b/test/web/activity_pub/activity_validator_test.exs new file mode 100644 index 000000000..cb0895a81 --- /dev/null +++ b/test/web/activity_pub/activity_validator_test.exs @@ -0,0 +1,21 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do + use Pleroma.DataCase + + import Pleroma.Factory + + describe "likes" do + test "it is well formed" do + _required_fields = [ + "id", + "actor", + "object" + ] + + _user = insert(:user) + end + end +end diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs new file mode 100644 index 000000000..e505ab4dd --- /dev/null +++ b/test/web/activity_pub/side_effects_test.exs @@ -0,0 +1,32 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.SideEffectsTest do + use Pleroma.DataCase + alias Pleroma.Object + alias Pleroma.Web.CommonAPI + alias Pleroma.Web.ActivityPub.Builder + alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.ActivityPub.SideEffects + + import Pleroma.Factory + describe "like objects" do + setup do + user = insert(:user) + {:ok, post} = CommonAPI.post(user, %{"status" => "hey"}) + + {:ok, like_data, _meta} = Builder.like(user, post.object) + {:ok, like, _meta} = ActivityPub.persist(like_data, []) + + %{like: like, user: user} + end + + test "add the like to the original object", %{like: like, user: user} do + {:ok, like, _} = SideEffects.handle(like) + object = Object.get_by_ap_id(like.data["object"]) + assert object.data["like_count"] == 1 + assert user.ap_id in object.data["likes"] + end + end +end diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 6c35a6f4d..28edc5508 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -1187,7 +1187,7 @@ test "it translates ostatus IDs to external URLs" do user = insert(:user) - {:ok, activity, _} = CommonAPI.favorite(referent_activity.id, user) + {:ok, activity} = CommonAPI.favorite(user, referent_activity.id) {:ok, modified} = Transmogrifier.prepare_outgoing(activity.data) assert modified["object"] == "http://gs.example.org:4040/index.php/notice/29" diff --git a/test/web/activity_pub/views/object_view_test.exs b/test/web/activity_pub/views/object_view_test.exs index 13447dc29..998247c5c 100644 --- a/test/web/activity_pub/views/object_view_test.exs +++ b/test/web/activity_pub/views/object_view_test.exs @@ -41,7 +41,7 @@ test "renders a like activity" do object = Object.normalize(note) user = insert(:user) - {:ok, like_activity, _} = CommonAPI.favorite(note.id, user) + {:ok, like_activity} = CommonAPI.favorite(user, note.id) result = ObjectView.render("object.json", %{object: like_activity}) diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 83df44c36..d46a361c5 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -251,9 +251,12 @@ test "favoriting a status" do user = insert(:user) other_user = insert(:user) - {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) + {:ok, post_activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) - {:ok, %Activity{}, _} = CommonAPI.favorite(activity.id, user) + {:ok, %Activity{data: data}} = CommonAPI.favorite(user, post_activity.id) + assert data["type"] == "Like" + assert data["actor"] == user.ap_id + assert data["object"] == post_activity.data["object"] end test "retweeting a status twice returns an error" do @@ -270,8 +273,8 @@ test "favoriting a status twice returns an error" do other_user = insert(:user) {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) - {:ok, %Activity{}, _object} = CommonAPI.favorite(activity.id, user) - {:error, _} = CommonAPI.favorite(activity.id, user) + {:ok, %Activity{}} = CommonAPI.favorite(user, activity.id) + {:error, _} = CommonAPI.favorite(user, activity.id) end end diff --git a/test/web/mastodon_api/controllers/notification_controller_test.exs b/test/web/mastodon_api/controllers/notification_controller_test.exs index e4137e92c..6eadccb8e 100644 --- a/test/web/mastodon_api/controllers/notification_controller_test.exs +++ b/test/web/mastodon_api/controllers/notification_controller_test.exs @@ -143,7 +143,7 @@ test "filters notifications using exclude_types", %{conn: conn} do {:ok, mention_activity} = CommonAPI.post(other_user, %{"status" => "hey @#{user.nickname}"}) {:ok, create_activity} = CommonAPI.post(user, %{"status" => "hey"}) - {:ok, favorite_activity, _} = CommonAPI.favorite(create_activity.id, other_user) + {:ok, favorite_activity} = CommonAPI.favorite(other_user, create_activity.id) {:ok, reblog_activity, _} = CommonAPI.repeat(create_activity.id, other_user) {:ok, _, _, follow_activity} = CommonAPI.follow(other_user, user) diff --git a/test/web/mastodon_api/controllers/status_controller_test.exs b/test/web/mastodon_api/controllers/status_controller_test.exs index 2de2725e0..1414d9fed 100644 --- a/test/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/web/mastodon_api/controllers/status_controller_test.exs @@ -589,7 +589,7 @@ test "reblogged status for another user", %{conn: conn} do user1 = insert(:user) user2 = insert(:user) user3 = insert(:user) - CommonAPI.favorite(activity.id, user2) + {:ok, _} = CommonAPI.favorite(user2, activity.id) {:ok, _bookmark} = Pleroma.Bookmark.create(user2.id, activity.id) {:ok, reblog_activity1, _object} = CommonAPI.repeat(activity.id, user1) {:ok, _, _object} = CommonAPI.repeat(activity.id, user2) @@ -695,7 +695,7 @@ test "unfavorites a status and returns it", %{conn: conn} do activity = insert(:note_activity) user = insert(:user) - {:ok, _, _} = CommonAPI.favorite(activity.id, user) + {:ok, _} = CommonAPI.favorite(user, activity.id) conn = conn @@ -1047,7 +1047,7 @@ test "Repeated posts that are replies incorrectly have in_reply_to_id null", %{c test "returns users who have favorited the status", %{conn: conn, activity: activity} do other_user = insert(:user) - {:ok, _, _} = CommonAPI.favorite(activity.id, other_user) + {:ok, _} = CommonAPI.favorite(other_user, activity.id) response = conn @@ -1078,7 +1078,7 @@ test "does not return users who have favorited the status but are blocked", %{ other_user = insert(:user) {:ok, user} = User.block(user, other_user) - {:ok, _, _} = CommonAPI.favorite(activity.id, other_user) + {:ok, _} = CommonAPI.favorite(other_user, activity.id) response = conn @@ -1091,7 +1091,7 @@ test "does not return users who have favorited the status but are blocked", %{ test "does not fail on an unauthenticated request", %{conn: conn, activity: activity} do other_user = insert(:user) - {:ok, _, _} = CommonAPI.favorite(activity.id, other_user) + {:ok, _} = CommonAPI.favorite(other_user, activity.id) response = conn @@ -1112,7 +1112,7 @@ test "requires authentification for private posts", %{conn: conn, user: user} do "visibility" => "direct" }) - {:ok, _, _} = CommonAPI.favorite(activity.id, other_user) + {:ok, _} = CommonAPI.favorite(other_user, activity.id) conn |> assign(:user, nil) @@ -1269,7 +1269,7 @@ test "returns the favorites of a user", %{conn: conn} do {:ok, _} = CommonAPI.post(other_user, %{"status" => "bla"}) {:ok, activity} = CommonAPI.post(other_user, %{"status" => "traps are happy"}) - {:ok, _, _} = CommonAPI.favorite(activity.id, user) + {:ok, _} = CommonAPI.favorite(user, activity.id) first_conn = conn @@ -1289,7 +1289,7 @@ test "returns the favorites of a user", %{conn: conn} do "Trees Are Never Sad Look At Them Every Once In Awhile They're Quite Beautiful." }) - {:ok, _, _} = CommonAPI.favorite(second_activity.id, user) + {:ok, _} = CommonAPI.favorite(user, second_activity.id) last_like = status["id"] diff --git a/test/web/mastodon_api/views/notification_view_test.exs b/test/web/mastodon_api/views/notification_view_test.exs index c9043a69a..d06809268 100644 --- a/test/web/mastodon_api/views/notification_view_test.exs +++ b/test/web/mastodon_api/views/notification_view_test.exs @@ -42,7 +42,7 @@ test "Favourite notification" do user = insert(:user) another_user = insert(:user) {:ok, create_activity} = CommonAPI.post(user, %{"status" => "hey"}) - {:ok, favorite_activity, _object} = CommonAPI.favorite(create_activity.id, another_user) + {:ok, favorite_activity} = CommonAPI.favorite(another_user, create_activity.id) {:ok, [notification]} = Notification.create_notifications(favorite_activity) create_activity = Activity.get_by_id(create_activity.id) diff --git a/test/web/ostatus/ostatus_controller_test.exs b/test/web/ostatus/ostatus_controller_test.exs index b1af918d8..7aee16e2c 100644 --- a/test/web/ostatus/ostatus_controller_test.exs +++ b/test/web/ostatus/ostatus_controller_test.exs @@ -271,7 +271,7 @@ test "only gets a notice in AS2 format for Create messages", %{conn: conn} do user = insert(:user) - {:ok, like_activity, _} = CommonAPI.favorite(note_activity.id, user) + {:ok, like_activity} = CommonAPI.favorite(user, note_activity.id) url = "/notice/#{like_activity.id}" assert like_activity.data["type"] == "Like" @@ -298,7 +298,7 @@ test "render html for redirect for html format", %{conn: conn} do user = insert(:user) - {:ok, like_activity, _} = CommonAPI.favorite(note_activity.id, user) + {:ok, like_activity} = CommonAPI.favorite(user, note_activity.id) assert like_activity.data["type"] == "Like" diff --git a/test/web/pleroma_api/controllers/account_controller_test.exs b/test/web/pleroma_api/controllers/account_controller_test.exs index 3b4665afd..6a6135d02 100644 --- a/test/web/pleroma_api/controllers/account_controller_test.exs +++ b/test/web/pleroma_api/controllers/account_controller_test.exs @@ -165,7 +165,7 @@ test "returns list of statuses favorited by specified user", %{ user: user } do [activity | _] = insert_pair(:note_activity) - CommonAPI.favorite(activity.id, user) + CommonAPI.favorite(user, activity.id) response = conn @@ -184,7 +184,7 @@ test "returns favorites for specified user_id when user is not logged in", %{ user: user } do activity = insert(:note_activity) - CommonAPI.favorite(activity.id, user) + CommonAPI.favorite(user, activity.id) response = conn @@ -205,7 +205,7 @@ test "returns favorited DM only when user is logged in and he is one of recipien "visibility" => "direct" }) - CommonAPI.favorite(direct.id, user) + CommonAPI.favorite(user, direct.id) response = conn @@ -236,7 +236,7 @@ test "does not return others' favorited DM when user is not one of recipients", "visibility" => "direct" }) - CommonAPI.favorite(direct.id, user) + CommonAPI.favorite(user, direct.id) response = conn @@ -255,7 +255,7 @@ test "paginates favorites using since_id and max_id", %{ activities = insert_list(10, :note_activity) Enum.each(activities, fn activity -> - CommonAPI.favorite(activity.id, user) + CommonAPI.favorite(user, activity.id) end) third_activity = Enum.at(activities, 2) @@ -283,7 +283,7 @@ test "limits favorites using limit parameter", %{ 7 |> insert_list(:note_activity) |> Enum.each(fn activity -> - CommonAPI.favorite(activity.id, user) + CommonAPI.favorite(user, activity.id) end) response = @@ -321,7 +321,7 @@ test "returns 403 error when user has hidden own favorites", %{ } do user = insert(:user, %{info: %{hide_favorites: true}}) activity = insert(:note_activity) - CommonAPI.favorite(activity.id, user) + CommonAPI.favorite(user, activity.id) conn = conn @@ -334,7 +334,7 @@ test "returns 403 error when user has hidden own favorites", %{ test "hides favorites for new users by default", %{conn: conn, current_user: current_user} do user = insert(:user) activity = insert(:note_activity) - CommonAPI.favorite(activity.id, user) + CommonAPI.favorite(user, activity.id) conn = conn diff --git a/test/web/push/impl_test.exs b/test/web/push/impl_test.exs index 2f6ce4bd2..36c69c7c9 100644 --- a/test/web/push/impl_test.exs +++ b/test/web/push/impl_test.exs @@ -152,7 +152,7 @@ test "renders body for like activity" do "Lorem ipsum dolor sit amet, consectetur :firefox: adipiscing elit. Fusce sagittis finibus turpis." }) - {:ok, activity, _} = CommonAPI.favorite(activity.id, user) + {:ok, activity} = CommonAPI.favorite(user, activity.id) object = Object.normalize(activity) assert Impl.format_body(%{activity: activity}, user, object) == "@Bob has favorited your post" diff --git a/test/web/streamer/streamer_test.exs b/test/web/streamer/streamer_test.exs index d33eb1e42..b363935a2 100644 --- a/test/web/streamer/streamer_test.exs +++ b/test/web/streamer/streamer_test.exs @@ -68,7 +68,7 @@ test "it doesn't send notify to the 'user:notification' stream when a user is bl ) {:ok, activity} = CommonAPI.post(user, %{"status" => ":("}) - {:ok, notif, _} = CommonAPI.favorite(activity.id, blocked) + {:ok, notif} = CommonAPI.favorite(blocked, activity.id) Streamer.stream("user:notification", notif) Task.await(task) @@ -87,7 +87,7 @@ test "it doesn't send notify to the 'user:notification' stream when a thread is {:ok, activity} = CommonAPI.post(user, %{"status" => "super hot take"}) {:ok, activity} = CommonAPI.add_mute(user, activity) - {:ok, notif, _} = CommonAPI.favorite(activity.id, user2) + {:ok, notif} = CommonAPI.favorite(user2, activity.id) Streamer.stream("user:notification", notif) Task.await(task) end @@ -105,7 +105,7 @@ test "it doesn't send notify to the 'user:notification' stream' when a domain is {:ok, user} = User.block_domain(user, "hecking-lewd-place.com") {:ok, activity} = CommonAPI.post(user, %{"status" => "super hot take"}) - {:ok, notif, _} = CommonAPI.favorite(activity.id, user2) + {:ok, notif} = CommonAPI.favorite(user2, activity.id) Streamer.stream("user:notification", notif) Task.await(task) From 081e8206ab75e336a76b621508b3999170159ec6 Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 16 Oct 2019 17:03:21 +0200 Subject: [PATCH 002/581] Transmogrifier: Use new ingestion pipeline for Likes. --- lib/pleroma/object/containment.ex | 12 +++++++ .../web/activity_pub/object_validator.ex | 5 +-- .../web/activity_pub/transmogrifier.ex | 31 +++++++++++++++---- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/lib/pleroma/object/containment.ex b/lib/pleroma/object/containment.ex index f077a9f32..edbe92381 100644 --- a/lib/pleroma/object/containment.ex +++ b/lib/pleroma/object/containment.ex @@ -32,6 +32,18 @@ def get_actor(%{"actor" => nil, "attributedTo" => actor}) when not is_nil(actor) get_actor(%{"actor" => actor}) end + def get_object(%{"object" => id}) when is_binary(id) do + id + end + + def get_object(%{"object" => %{"id" => id}}) when is_binary(id) do + id + end + + def get_object(_) do + nil + end + @doc """ Checks that an imported AP object's actor matches the domain it came from. """ diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index 8ecad0dec..0048cc4ec 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -31,7 +31,7 @@ def validate_actor(object, meta) do def common_validations(object, meta) do with {_, {:ok, object, meta}} <- {:validate_id, validate_id(object, meta)}, - {_, {:ok, object, meta}} <- {:validate_actor, validate_actor(object, meta)} do + {_, {:ok, object, meta}} <- {:validate_actor, validate_actor(object, meta)} do {:ok, object, meta} else e -> {:error, e} @@ -43,7 +43,8 @@ def validate(object, meta) def validate(%{"type" => "Like"} = object, meta) do with {:ok, object, meta} <- common_validations(object, meta), - {_, %Object{} = liked_object} <- {:find_liked_object, Object.normalize(object["object"])}, + {_, %Object{} = liked_object} <- + {:find_liked_object, Object.normalize(object["object"])}, {_, nil} <- {:existing_like, Utils.get_existing_like(object["actor"], liked_object)} do {:ok, object, meta} else diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index b56343beb..3e982adcb 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -563,19 +563,38 @@ def handle_incoming( end def handle_incoming( - %{"type" => "Like", "object" => object_id, "actor" => _actor, "id" => id} = data, + %{"type" => "Like", "object" => _object_id, "actor" => _actor, "id" => _id} = data, _options ) do - with actor <- Containment.get_actor(data), - {:ok, %User{} = actor} <- User.get_or_fetch_by_ap_id(actor), - {:ok, object} <- get_obj_helper(object_id), - {:ok, activity, _object} <- ActivityPub.like(actor, object, id, false) do + with data <- Map.take(data, ["type", "object", "actor", "context", "id"]), + actor <- Containment.get_actor(data), + object <- Containment.get_object(data), + data <- data |> Map.put("actor", actor) |> Map.put("object", object), + _user <- User.get_or_fetch_by_ap_id(actor), + object <- Object.normalize(object), + data <- Map.put_new(data, "context", object.data["context"]), + {_, {:ok, activity, _meta}} <- + {:common_pipeline, ActivityPub.common_pipeline(data, local: false)} do {:ok, activity} else - _e -> :error + e -> {:error, e} end end + # def handle_incoming( + # %{"type" => "Like", "object" => object_id, "actor" => _actor, "id" => id} = data, + # _options + # ) do + # with actor <- Containment.get_actor(data), + # {:ok, %User{} = actor} <- User.get_or_fetch_by_ap_id(actor), + # {:ok, object} <- get_obj_helper(object_id), + # {:ok, activity, _object} <- ActivityPub.like(actor, object, id, false) do + # {:ok, activity} + # else + # _e -> :error + # end + # end + def handle_incoming( %{"type" => "Announce", "object" => object_id, "actor" => _actor, "id" => id} = data, _options From 66452f518faa1f079f02006943b0c2cdc830b47f Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 17 Oct 2019 18:36:52 +0200 Subject: [PATCH 003/581] ObjectValidator: Rewrite LikeValidator with Ecto. --- .../web/activity_pub/object_validator.ex | 42 ++-------- .../object_validators/like_validator.ex | 69 ++++++++++++++++ .../object_validators/types/object.ex | 25 ++++++ lib/pleroma/web/common_api/common_api.ex | 10 --- .../activity_pub/activity_validator_test.exs | 21 ----- .../activity_pub/object_validator_test.exs | 80 +++++++++++++++++++ test/web/activity_pub/side_effects_test.exs | 1 + 7 files changed, 183 insertions(+), 65 deletions(-) create mode 100644 lib/pleroma/web/activity_pub/object_validators/like_validator.ex create mode 100644 lib/pleroma/web/activity_pub/object_validators/types/object.ex delete mode 100644 test/web/activity_pub/activity_validator_test.exs create mode 100644 test/web/activity_pub/object_validator_test.exs diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index 0048cc4ec..adcb53c65 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -9,50 +9,24 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do the system. """ - alias Pleroma.User - alias Pleroma.Object - alias Pleroma.Web.ActivityPub.Utils - - def validate_id(object, meta) do - with {_, true} <- {:id_presence, Map.has_key?(object, "id")} do - {:ok, object, meta} - else - e -> {:error, e} - end - end - - def validate_actor(object, meta) do - with {_, %User{}} <- {:actor_validation, User.get_cached_by_ap_id(object["actor"])} do - {:ok, object, meta} - else - e -> {:error, e} - end - end - - def common_validations(object, meta) do - with {_, {:ok, object, meta}} <- {:validate_id, validate_id(object, meta)}, - {_, {:ok, object, meta}} <- {:validate_actor, validate_actor(object, meta)} do - {:ok, object, meta} - else - e -> {:error, e} - end - end + alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator @spec validate(map(), keyword()) :: {:ok, map(), keyword()} | {:error, any()} def validate(object, meta) def validate(%{"type" => "Like"} = object, meta) do - with {:ok, object, meta} <- common_validations(object, meta), - {_, %Object{} = liked_object} <- - {:find_liked_object, Object.normalize(object["object"])}, - {_, nil} <- {:existing_like, Utils.get_existing_like(object["actor"], liked_object)} do + with {_, %{valid?: true, changes: object}} <- + {:validate_object, LikeValidator.cast_and_validate(object)} do + object = stringify_keys(object) {:ok, object, meta} else e -> {:error, e} end end - def validate(object, meta) do - common_validations(object, meta) + defp stringify_keys(object) do + object + |> Enum.map(fn {key, val} -> {to_string(key), val} end) + |> Enum.into(%{}) end end diff --git a/lib/pleroma/web/activity_pub/object_validators/like_validator.ex b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex new file mode 100644 index 000000000..d5a2f7202 --- /dev/null +++ b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex @@ -0,0 +1,69 @@ +defmodule Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator do + use Ecto.Schema + import Ecto.Changeset + + alias Pleroma.Web.ActivityPub.ObjectValidators.Types + alias Pleroma.Web.ActivityPub.Utils + alias Pleroma.User + alias Pleroma.Object + + @primary_key false + + embedded_schema do + field(:id, :string, primary_key: true) + field(:type, :string) + field(:object, Types.ObjectID) + field(:actor, Types.ObjectID) + field(:context, :string) + field(:to, {:array, :string}) + field(:cc, {:array, :string}) + end + + def cast_and_validate(data) do + data + |> cast_data() + |> validate_data() + end + + def cast_data(data) do + %__MODULE__{} + |> cast(data, [:id, :type, :object, :actor, :context, :to, :cc]) + end + + def validate_data(data_cng) do + data_cng + |> validate_inclusion(:type, ["Like"]) + |> validate_required([:id, :type, :object, :actor, :context]) + |> validate_change(:actor, &actor_valid?/2) + |> validate_change(:object, &object_valid?/2) + |> validate_existing_like() + end + + def validate_existing_like(%{changes: %{actor: actor, object: object}} = cng) do + if Utils.get_existing_like(actor, %{data: %{"id" => object}}) do + cng + |> add_error(:actor, "already liked this object") + |> add_error(:object, "already liked by this actor") + else + cng + end + end + + def validate_existing_like(cng), do: cng + + def actor_valid?(field_name, actor) do + if User.get_cached_by_ap_id(actor) do + [] + else + [{field_name, "can't find user"}] + end + end + + def object_valid?(field_name, object) do + if Object.get_cached_by_ap_id(object) do + [] + else + [{field_name, "can't find object"}] + end + end +end diff --git a/lib/pleroma/web/activity_pub/object_validators/types/object.ex b/lib/pleroma/web/activity_pub/object_validators/types/object.ex new file mode 100644 index 000000000..92fc13ba8 --- /dev/null +++ b/lib/pleroma/web/activity_pub/object_validators/types/object.ex @@ -0,0 +1,25 @@ +defmodule Pleroma.Web.ActivityPub.ObjectValidators.Types.ObjectID do + use Ecto.Type + + def type, do: :string + + def cast(object) when is_binary(object) do + {:ok, object} + end + + def cast(%{"id" => object}) when is_binary(object) do + {:ok, object} + end + + def cast(_) do + :error + end + + def dump(data) do + {:ok, data} + end + + def load(data) do + {:ok, data} + end +end diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index 466beb724..e0b22a314 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -115,16 +115,6 @@ def favorite(%User{} = user, id) do end end - # def favorite(id_or_ap_id, user) do - # with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id), - # object <- Object.normalize(activity), - # nil <- Utils.get_existing_like(user.ap_id, object) do - # ActivityPub.like(user, object) - # else - # _ -> {:error, dgettext("errors", "Could not favorite")} - # end - # end - def unfavorite(id_or_ap_id, user) do with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id) do object = Object.normalize(activity) diff --git a/test/web/activity_pub/activity_validator_test.exs b/test/web/activity_pub/activity_validator_test.exs deleted file mode 100644 index cb0895a81..000000000 --- a/test/web/activity_pub/activity_validator_test.exs +++ /dev/null @@ -1,21 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do - use Pleroma.DataCase - - import Pleroma.Factory - - describe "likes" do - test "it is well formed" do - _required_fields = [ - "id", - "actor", - "object" - ] - - _user = insert(:user) - end - end -end diff --git a/test/web/activity_pub/object_validator_test.exs b/test/web/activity_pub/object_validator_test.exs new file mode 100644 index 000000000..374a7c0df --- /dev/null +++ b/test/web/activity_pub/object_validator_test.exs @@ -0,0 +1,80 @@ +defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do + use Pleroma.DataCase + + alias Pleroma.Web.CommonAPI + alias Pleroma.Web.ActivityPub.ObjectValidator + alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator + alias Pleroma.Web.ActivityPub.Utils + import Pleroma.Factory + + describe "likes" do + setup do + user = insert(:user) + {:ok, post_activity} = CommonAPI.post(user, %{"status" => "uguu"}) + + valid_like = %{ + "type" => "Like", + "id" => Utils.generate_activity_id(), + "object" => post_activity.data["object"], + "actor" => user.ap_id, + "context" => "a context" + } + + %{valid_like: valid_like, user: user, post_activity: post_activity} + end + + test "returns ok when called in the ObjectValidator", %{valid_like: valid_like} do + {:ok, object, _meta} = ObjectValidator.validate(valid_like, []) + + assert "id" in Map.keys(object) + end + + test "is valid for a valid object", %{valid_like: valid_like} do + assert LikeValidator.cast_and_validate(valid_like).valid? + end + + test "it errors when the actor is missing or not known", %{valid_like: valid_like} do + without_actor = Map.delete(valid_like, "actor") + + refute LikeValidator.cast_and_validate(without_actor).valid? + + with_invalid_actor = Map.put(valid_like, "actor", "invalidactor") + + refute LikeValidator.cast_and_validate(with_invalid_actor).valid? + end + + test "it errors when the object is missing or not known", %{valid_like: valid_like} do + without_object = Map.delete(valid_like, "object") + + refute LikeValidator.cast_and_validate(without_object).valid? + + with_invalid_object = Map.put(valid_like, "object", "invalidobject") + + refute LikeValidator.cast_and_validate(with_invalid_object).valid? + end + + test "it errors when the actor has already like the object", %{ + valid_like: valid_like, + user: user, + post_activity: post_activity + } do + _like = CommonAPI.favorite(user, post_activity.id) + + refute LikeValidator.cast_and_validate(valid_like).valid? + end + + test "it works when actor or object are wrapped in maps", %{valid_like: valid_like} do + wrapped_like = + valid_like + |> Map.put("actor", %{"id" => valid_like["actor"]}) + |> Map.put("object", %{"id" => valid_like["object"]}) + + validated = LikeValidator.cast_and_validate(wrapped_like) + + assert validated.valid? + + assert {:actor, valid_like["actor"]} in validated.changes + assert {:object, valid_like["object"]} in validated.changes + end + end +end diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index e505ab4dd..9d99e05a0 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -11,6 +11,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do alias Pleroma.Web.ActivityPub.SideEffects import Pleroma.Factory + describe "like objects" do setup do user = insert(:user) From 203d61b95012fd2cb8a8618f6f51a3748c940cc1 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 17 Oct 2019 19:35:31 +0200 Subject: [PATCH 004/581] Transmogrifier: Make proper use of the LikeValidator. --- .../web/activity_pub/object_validator.ex | 10 ++- .../object_validators/like_validator.ex | 2 +- .../web/activity_pub/transmogrifier.ex | 79 +++++++++++++------ .../activity_pub/object_validator_test.exs | 2 + test/web/activity_pub/transmogrifier_test.exs | 4 +- 5 files changed, 68 insertions(+), 29 deletions(-) diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index adcb53c65..33e67dbb9 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -10,6 +10,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do """ alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator + alias Pleroma.User + alias Pleroma.Object @spec validate(map(), keyword()) :: {:ok, map(), keyword()} | {:error, any()} def validate(object, meta) @@ -24,9 +26,15 @@ def validate(%{"type" => "Like"} = object, meta) do end end - defp stringify_keys(object) do + def stringify_keys(object) do object |> Enum.map(fn {key, val} -> {to_string(key), val} end) |> Enum.into(%{}) end + + def fetch_actor_and_object(object) do + User.get_or_fetch_by_ap_id(object["actor"]) + Object.normalize(object["object"]) + :ok + end end diff --git a/lib/pleroma/web/activity_pub/object_validators/like_validator.ex b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex index d5a2f7202..e6a5aaca8 100644 --- a/lib/pleroma/web/activity_pub/object_validators/like_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex @@ -33,7 +33,7 @@ def cast_data(data) do def validate_data(data_cng) do data_cng |> validate_inclusion(:type, ["Like"]) - |> validate_required([:id, :type, :object, :actor, :context]) + |> validate_required([:id, :type, :object, :actor, :context, :to, :cc]) |> validate_change(:actor, &actor_valid?/2) |> validate_change(:object, &object_valid?/2) |> validate_existing_like() diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 3e982adcb..591d7aa94 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -16,6 +16,8 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do alias Pleroma.Web.ActivityPub.Visibility alias Pleroma.Web.Federator alias Pleroma.Workers.TransmogrifierWorker + alias Pleroma.Web.ActivityPub.ObjectValidator + alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator import Ecto.Query @@ -562,39 +564,21 @@ def handle_incoming( end end - def handle_incoming( - %{"type" => "Like", "object" => _object_id, "actor" => _actor, "id" => _id} = data, - _options - ) do - with data <- Map.take(data, ["type", "object", "actor", "context", "id"]), - actor <- Containment.get_actor(data), - object <- Containment.get_object(data), - data <- data |> Map.put("actor", actor) |> Map.put("object", object), - _user <- User.get_or_fetch_by_ap_id(actor), - object <- Object.normalize(object), - data <- Map.put_new(data, "context", object.data["context"]), + def handle_incoming(%{"type" => "Like"} = data, _options) do + with {_, %{changes: cast_data}} <- {:casting_data, LikeValidator.cast_data(data)}, + cast_data <- ObjectValidator.stringify_keys(cast_data), + :ok <- ObjectValidator.fetch_actor_and_object(cast_data), + {_, {:ok, cast_data}} <- {:maybe_add_context, maybe_add_context_from_object(cast_data)}, + {_, {:ok, cast_data}} <- + {:maybe_add_recipients, maybe_add_recipients_from_object(cast_data)}, {_, {:ok, activity, _meta}} <- - {:common_pipeline, ActivityPub.common_pipeline(data, local: false)} do + {:common_pipeline, ActivityPub.common_pipeline(cast_data, local: false)} do {:ok, activity} else e -> {:error, e} end end - # def handle_incoming( - # %{"type" => "Like", "object" => object_id, "actor" => _actor, "id" => id} = data, - # _options - # ) do - # with actor <- Containment.get_actor(data), - # {:ok, %User{} = actor} <- User.get_or_fetch_by_ap_id(actor), - # {:ok, object} <- get_obj_helper(object_id), - # {:ok, activity, _object} <- ActivityPub.like(actor, object, id, false) do - # {:ok, activity} - # else - # _e -> :error - # end - # end - def handle_incoming( %{"type" => "Announce", "object" => object_id, "actor" => _actor, "id" => id} = data, _options @@ -1156,4 +1140,47 @@ def maybe_fix_user_url(%{"url" => url} = data) when is_map(url) do def maybe_fix_user_url(data), do: data def maybe_fix_user_object(data), do: maybe_fix_user_url(data) + + defp maybe_add_context_from_object(%{"context" => context} = data) when is_binary(context), + do: {:ok, data} + + defp maybe_add_context_from_object(%{"object" => object} = data) when is_binary(object) do + if object = Object.normalize(object) do + data = + data + |> Map.put("context", object.data["context"]) + + {:ok, data} + else + {:error, "No context on referenced object"} + end + end + + defp maybe_add_context_from_object(_) do + {:error, "No referenced object"} + end + + defp maybe_add_recipients_from_object(%{"object" => object} = data) do + to = data["to"] || [] + cc = data["cc"] || [] + + if to == [] && cc == [] do + if object = Object.normalize(object) do + data = + data + |> Map.put("to", [object.data["actor"]]) + |> Map.put("cc", cc) + + {:ok, data} + else + {:error, "No actor on referenced object"} + end + else + {:ok, data} + end + end + + defp maybe_add_recipients_from_object(_) do + {:error, "No referenced object"} + end end diff --git a/test/web/activity_pub/object_validator_test.exs b/test/web/activity_pub/object_validator_test.exs index 374a7c0df..2292db6d7 100644 --- a/test/web/activity_pub/object_validator_test.exs +++ b/test/web/activity_pub/object_validator_test.exs @@ -13,6 +13,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do {:ok, post_activity} = CommonAPI.post(user, %{"status" => "uguu"}) valid_like = %{ + "to" => [user.ap_id], + "cc" => [], "type" => "Like", "id" => Utils.generate_activity_id(), "object" => post_activity.data["object"], diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 28edc5508..e5d4dcd64 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -333,7 +333,9 @@ test "it works for incoming likes" do |> Poison.decode!() |> Map.put("object", activity.data["object"]) - {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + {:ok, %Activity{data: data, local: false} = activity} = Transmogrifier.handle_incoming(data) + + refute Enum.empty?(activity.recipients) assert data["actor"] == "http://mastodon.example.org/users/admin" assert data["type"] == "Like" From 4ec299ea9c1cf45c42e98d7b33f33a72f5e7a9c0 Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 18 Oct 2019 12:11:25 +0200 Subject: [PATCH 005/581] CommonAPI tests: Capture logs. --- test/web/common_api/common_api_test.exs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index d46a361c5..63d7ea79f 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -13,6 +13,7 @@ defmodule Pleroma.Web.CommonAPITest do alias Pleroma.Web.CommonAPI import Pleroma.Factory + import ExUnit.CaptureLog require Pleroma.Constants @@ -274,7 +275,9 @@ test "favoriting a status twice returns an error" do {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) {:ok, %Activity{}} = CommonAPI.favorite(user, activity.id) - {:error, _} = CommonAPI.favorite(user, activity.id) + assert capture_log(fn -> + assert {:error, _} = CommonAPI.favorite(user, activity.id) + end) =~ "[error]" end end From 15bbc34c079018f1c988fe9d445bec50e85bbeaf Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 18 Oct 2019 12:44:53 +0200 Subject: [PATCH 006/581] Tests: Capture log. --- test/notification_test.exs | 6 +++++- test/web/common_api/common_api_test.exs | 5 +++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/test/notification_test.exs b/test/notification_test.exs index 940913aa6..480c9415b 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -14,6 +14,8 @@ defmodule Pleroma.NotificationTest do alias Pleroma.Web.CommonAPI alias Pleroma.Web.Streamer + import ExUnit.CaptureLog + describe "create_notifications" do test "notifies someone when they are directly addressed" do user = insert(:user) @@ -533,7 +535,9 @@ test "liking an activity which is already deleted does not generate a notificati assert Enum.empty?(Notification.for_user(user)) - {:error, _} = CommonAPI.favorite(other_user, activity.id) + assert capture_log(fn -> + {:error, _} = CommonAPI.favorite(other_user, activity.id) + end) =~ "[error]" assert Enum.empty?(Notification.for_user(user)) end diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 63d7ea79f..8195b1910 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -275,9 +275,10 @@ test "favoriting a status twice returns an error" do {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) {:ok, %Activity{}} = CommonAPI.favorite(user, activity.id) + assert capture_log(fn -> - assert {:error, _} = CommonAPI.favorite(user, activity.id) - end) =~ "[error]" + assert {:error, _} = CommonAPI.favorite(user, activity.id) + end) =~ "[error]" end end From f1381d68e740daf4c341359a2b5837bc2bd3a051 Mon Sep 17 00:00:00 2001 From: lain Date: Sat, 19 Oct 2019 14:46:14 +0200 Subject: [PATCH 007/581] StatusControllerTest: Capture log. --- .../controllers/status_controller_test.exs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/test/web/mastodon_api/controllers/status_controller_test.exs b/test/web/mastodon_api/controllers/status_controller_test.exs index 1414d9fed..2bbd8a151 100644 --- a/test/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/web/mastodon_api/controllers/status_controller_test.exs @@ -17,6 +17,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do alias Pleroma.Web.CommonAPI import Pleroma.Factory + import ExUnit.CaptureLog describe "posting statuses" do setup do @@ -681,12 +682,14 @@ test "favs a status and returns it", %{conn: conn} do test "returns 400 error for a wrong id", %{conn: conn} do user = insert(:user) - conn = - conn - |> assign(:user, user) - |> post("/api/v1/statuses/1/favourite") + assert capture_log(fn -> + conn = + conn + |> assign(:user, user) + |> post("/api/v1/statuses/1/favourite") - assert json_response(conn, 400) == %{"error" => "Could not favorite"} + assert json_response(conn, 400) == %{"error" => "Could not favorite"} + end) =~ "[error]" end end From d4270397dcb2aebde8ed14fd89998ab57aaae545 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Tue, 22 Oct 2019 13:42:59 +0300 Subject: [PATCH 008/581] Marker: added unread_count field --- lib/pleroma/marker.ex | 5 +- .../web/mastodon_api/views/marker_view.ex | 1 + .../20191021113356_add_unread_to_marker.exs | 49 +++++++++++++++++++ .../controllers/marker_controller_test.exs | 7 ++- .../mastodon_api/views/marker_view_test.exs | 4 +- 5 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 priv/repo/migrations/20191021113356_add_unread_to_marker.exs diff --git a/lib/pleroma/marker.ex b/lib/pleroma/marker.ex index 7f87c86c3..c4d554980 100644 --- a/lib/pleroma/marker.ex +++ b/lib/pleroma/marker.ex @@ -18,6 +18,7 @@ defmodule Pleroma.Marker do field(:last_read_id, :string, default: "") field(:timeline, :string, default: "") field(:lock_version, :integer, default: 0) + field(:unread_count, :integer, default: 0) belongs_to(:user, User, type: FlakeId.Ecto.CompatType) timestamps() @@ -38,7 +39,7 @@ def upsert(%User{} = user, attrs) do Multi.insert(multi, timeline, marker, returning: true, - on_conflict: {:replace, [:last_read_id]}, + on_conflict: {:replace, [:last_read_id, :unread_count]}, conflict_target: [:user_id, :timeline] ) end) @@ -55,7 +56,7 @@ defp get_marker(user, timeline) do @doc false defp changeset(marker, attrs) do marker - |> cast(attrs, [:last_read_id]) + |> cast(attrs, [:last_read_id, :unread_count]) |> validate_required([:user_id, :timeline, :last_read_id]) |> validate_inclusion(:timeline, @timelines) end diff --git a/lib/pleroma/web/mastodon_api/views/marker_view.ex b/lib/pleroma/web/mastodon_api/views/marker_view.ex index 38fbeed5f..1501c2a30 100644 --- a/lib/pleroma/web/mastodon_api/views/marker_view.ex +++ b/lib/pleroma/web/mastodon_api/views/marker_view.ex @@ -10,6 +10,7 @@ def render("markers.json", %{markers: markers}) do Map.put_new(acc, m.timeline, %{ last_read_id: m.last_read_id, version: m.lock_version, + unread_count: m.unread_count, updated_at: NaiveDateTime.to_iso8601(m.updated_at) }) end) diff --git a/priv/repo/migrations/20191021113356_add_unread_to_marker.exs b/priv/repo/migrations/20191021113356_add_unread_to_marker.exs new file mode 100644 index 000000000..32789b7f9 --- /dev/null +++ b/priv/repo/migrations/20191021113356_add_unread_to_marker.exs @@ -0,0 +1,49 @@ +defmodule Pleroma.Repo.Migrations.AddUnreadToMarker do + use Ecto.Migration + import Ecto.Query + alias Pleroma.Repo + alias Pleroma.Notification + + def up do + alter table(:markers) do + add_if_not_exists(:unread_count, :integer, default: 0) + end + + flush() + + update_markers() + end + + def down do + alter table(:markers) do + remove_if_exists(:unread_count, :integer) + end + end + + def update_markers do + from(q in Notification, + select: %{ + timeline: "notifications", + user_id: q.user_id, + unread_count: fragment("COUNT(*) FILTER (WHERE seen = false) as unread_count"), + last_read_id: fragment("(MAX(id) FILTER (WHERE seen = true)::text) as last_read_id ") + }, + group_by: [q.user_id] + ) + |> Repo.all() + |> Enum.reduce(Ecto.Multi.new(), fn attrs, multi -> + marker = + Pleroma.Marker + |> struct(attrs) + |> Ecto.Changeset.change() + + multi + |> Ecto.Multi.insert(attrs[:user_id], marker, + returning: true, + on_conflict: {:replace, [:last_read_id, :unread_count]}, + conflict_target: [:user_id, :timeline] + ) + end) + |> Pleroma.Repo.transaction() + end +end diff --git a/test/web/mastodon_api/controllers/marker_controller_test.exs b/test/web/mastodon_api/controllers/marker_controller_test.exs index 1fcad873d..5e7b4001f 100644 --- a/test/web/mastodon_api/controllers/marker_controller_test.exs +++ b/test/web/mastodon_api/controllers/marker_controller_test.exs @@ -15,7 +15,7 @@ test "gets markers with correct scopes", %{conn: conn} do {:ok, %{"notifications" => marker}} = Pleroma.Marker.upsert( user, - %{"notifications" => %{"last_read_id" => "69420"}} + %{"notifications" => %{"last_read_id" => "69420", "unread_count" => 7}} ) response = @@ -28,6 +28,7 @@ test "gets markers with correct scopes", %{conn: conn} do assert response == %{ "notifications" => %{ "last_read_id" => "69420", + "unread_count" => 7, "updated_at" => NaiveDateTime.to_iso8601(marker.updated_at), "version" => 0 } @@ -70,7 +71,8 @@ test "creates a marker with correct scopes", %{conn: conn} do "notifications" => %{ "last_read_id" => "69420", "updated_at" => _, - "version" => 0 + "version" => 0, + "unread_count" => 0 } } = response end @@ -98,6 +100,7 @@ test "updates exist marker", %{conn: conn} do assert response == %{ "notifications" => %{ "last_read_id" => "69888", + "unread_count" => 0, "updated_at" => NaiveDateTime.to_iso8601(marker.updated_at), "version" => 0 } diff --git a/test/web/mastodon_api/views/marker_view_test.exs b/test/web/mastodon_api/views/marker_view_test.exs index 8a5c89d56..3ce794617 100644 --- a/test/web/mastodon_api/views/marker_view_test.exs +++ b/test/web/mastodon_api/views/marker_view_test.exs @@ -8,17 +8,19 @@ defmodule Pleroma.Web.MastodonAPI.MarkerViewTest do import Pleroma.Factory test "returns markers" do - marker1 = insert(:marker, timeline: "notifications", last_read_id: "17") + marker1 = insert(:marker, timeline: "notifications", last_read_id: "17", unread_count: 5) marker2 = insert(:marker, timeline: "home", last_read_id: "42") assert MarkerView.render("markers.json", %{markers: [marker1, marker2]}) == %{ "home" => %{ last_read_id: "42", + unread_count: 0, updated_at: NaiveDateTime.to_iso8601(marker2.updated_at), version: 0 }, "notifications" => %{ last_read_id: "17", + unread_count: 5, updated_at: NaiveDateTime.to_iso8601(marker1.updated_at), version: 0 } From 9a4afbd2a0486238bfaf4047d91376d32635514a Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Tue, 22 Oct 2019 16:13:22 +0300 Subject: [PATCH 009/581] added update unread_count for notifications --- lib/pleroma/marker.ex | 36 ++++++++++++++++++++++++++ lib/pleroma/notification.ex | 50 ++++++++++++++++++++++++------------- test/notification_test.exs | 7 ++++++ 3 files changed, 76 insertions(+), 17 deletions(-) diff --git a/lib/pleroma/marker.ex b/lib/pleroma/marker.ex index c4d554980..4b8198690 100644 --- a/lib/pleroma/marker.ex +++ b/lib/pleroma/marker.ex @@ -11,6 +11,7 @@ defmodule Pleroma.Marker do alias Ecto.Multi alias Pleroma.Repo alias Pleroma.User + alias __MODULE__ @timelines ["notifications"] @@ -46,6 +47,41 @@ def upsert(%User{} = user, attrs) do |> Repo.transaction() end + @spec multi_set_unread_count(Multi.t(), User.t(), String.t()) :: Multi.t() + def multi_set_unread_count(multi, %User{} = user, "notifications") do + multi + |> Multi.run(:counters, fn _repo, _changes -> + query = + from(q in Pleroma.Notification, + where: q.user_id == ^user.id, + select: %{ + timeline: "notifications", + user_id: ^user.id, + unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END ) as unread_count") + } + ) + + {:ok, Repo.one(query)} + end) + |> Multi.insert( + :marker, + fn %{counters: attrs} -> + Marker + |> struct(attrs) + |> Ecto.Changeset.change() + end, + returning: true, + on_conflict: {:replace, [:last_read_id, :unread_count]}, + conflict_target: [:user_id, :timeline] + ) + end + + def set_unread_count(%User{} = user, timeline) do + Multi.new() + |> multi_set_unread_count(user, timeline) + |> Repo.transaction() + end + defp get_marker(user, timeline) do case Repo.find_resource(get_query(user, timeline)) do {:ok, marker} -> %__MODULE__{marker | user: user} diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index e5da1492b..d339fdf64 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -5,7 +5,9 @@ defmodule Pleroma.Notification do use Ecto.Schema + alias Ecto.Multi alias Pleroma.Activity + alias Pleroma.Marker alias Pleroma.Notification alias Pleroma.Object alias Pleroma.Pagination @@ -151,25 +153,23 @@ def for_user_since(user, date) do |> Repo.all() end - def set_read_up_to(%{id: user_id} = _user, id) do + def set_read_up_to(%{id: user_id} = user, id) do query = from( n in Notification, where: n.user_id == ^user_id, where: n.id <= ^id, where: n.seen == false, - update: [ - set: [ - seen: true, - updated_at: ^NaiveDateTime.utc_now() - ] - ], # Ideally we would preload object and activities here # but Ecto does not support preloads in update_all select: n.id ) - {_, notification_ids} = Repo.update_all(query, []) + {:ok, %{ids: {_, notification_ids}}} = + Multi.new() + |> Multi.update_all(:ids, query, set: [seen: true, updated_at: NaiveDateTime.utc_now()]) + |> Marker.multi_set_unread_count(user, "notifications") + |> Repo.transaction() Notification |> where([n], n.id in ^notification_ids) @@ -186,11 +186,18 @@ def set_read_up_to(%{id: user_id} = _user, id) do |> Repo.all() end + @spec read_one(User.t(), String.t()) :: + {:ok, Notification.t()} | {:error, Ecto.Changeset.t()} | nil def read_one(%User{} = user, notification_id) do with {:ok, %Notification{} = notification} <- get(user, notification_id) do - notification - |> changeset(%{seen: true}) - |> Repo.update() + Multi.new() + |> Multi.update(:update, changeset(notification, %{seen: true})) + |> Marker.multi_set_unread_count(user, "notifications") + |> Repo.transaction() + |> case do + {:ok, %{update: notification}} -> {:ok, notification} + {:error, :update, changeset, _} -> {:error, changeset} + end end end @@ -243,8 +250,11 @@ def create_notifications(%Activity{data: %{"to" => _, "type" => "Create"}} = act object = Object.normalize(activity) unless object && object.data["type"] == "Answer" do - users = get_notified_from_activity(activity) - notifications = Enum.map(users, fn user -> create_notification(activity, user) end) + notifications = + activity + |> get_notified_from_activity() + |> Enum.map(&create_notification(activity, &1)) + {:ok, notifications} else {:ok, []} @@ -253,8 +263,11 @@ def create_notifications(%Activity{data: %{"to" => _, "type" => "Create"}} = act def create_notifications(%Activity{data: %{"to" => _, "type" => type}} = activity) when type in ["Like", "Announce", "Follow"] do - users = get_notified_from_activity(activity) - notifications = Enum.map(users, fn user -> create_notification(activity, user) end) + notifications = + activity + |> get_notified_from_activity + |> Enum.map(&create_notification(activity, &1)) + {:ok, notifications} end @@ -263,8 +276,11 @@ def create_notifications(_), do: {:ok, []} # TODO move to sql, too. def create_notification(%Activity{} = activity, %User{} = user) do unless skip?(activity, user) do - notification = %Notification{user_id: user.id, activity: activity} - {:ok, notification} = Repo.insert(notification) + {:ok, %{notification: notification}} = + Multi.new() + |> Multi.insert(:notification, %Notification{user_id: user.id, activity: activity}) + |> Marker.multi_set_unread_count(user, "notifications") + |> Repo.transaction() ["user", "user:notification"] |> Streamer.stream(notification) diff --git a/test/notification_test.exs b/test/notification_test.exs index 96316f8dd..558ac358c 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -310,6 +310,13 @@ test "it sets all notifications as read up to a specified notification ID" do assert n1.seen == true assert n2.seen == true assert n3.seen == false + + assert %Pleroma.Marker{unread_count: 1} = + Pleroma.Repo.get_by( + Pleroma.Marker, + user_id: other_user.id, + timeline: "notifications" + ) end end From 97d5c79aa07bfe836cd676424ce1b5a298c72b60 Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 23 Oct 2019 11:52:27 +0200 Subject: [PATCH 010/581] Add Pipeline module, test for federation. --- lib/pleroma/web/activity_pub/activity_pub.ex | 19 +--- lib/pleroma/web/activity_pub/pipeline.ex | 41 +++++++++ .../web/activity_pub/transmogrifier.ex | 7 +- lib/pleroma/web/common_api/common_api.ex | 3 +- test/web/activity_pub/pipeline_test.exs | 87 +++++++++++++++++++ 5 files changed, 135 insertions(+), 22 deletions(-) create mode 100644 lib/pleroma/web/activity_pub/pipeline.ex create mode 100644 test/web/activity_pub/pipeline_test.exs diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index f4fc45926..0789ec31c 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -18,8 +18,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do alias Pleroma.Web.ActivityPub.MRF alias Pleroma.Web.ActivityPub.Transmogrifier alias Pleroma.Web.ActivityPub.Utils - alias Pleroma.Web.ActivityPub.ObjectValidator - alias Pleroma.Web.ActivityPub.SideEffects alias Pleroma.Web.Streamer alias Pleroma.Web.WebFinger alias Pleroma.Workers.BackgroundWorker @@ -125,25 +123,10 @@ def increase_poll_votes_if_vote(%{ def increase_poll_votes_if_vote(_create_data), do: :noop - @spec common_pipeline(map(), keyword()) :: {:ok, Activity.t(), keyword()} | {:error, any()} - def common_pipeline(object, meta) do - with {_, {:ok, validated_object, meta}} <- - {:validate_object, ObjectValidator.validate(object, meta)}, - {_, {:ok, mrfd_object}} <- {:mrf_object, MRF.filter(validated_object)}, - {_, {:ok, %Activity{} = activity, meta}} <- - {:persist_object, persist(mrfd_object, meta)}, - {_, {:ok, %Activity{} = activity, meta}} <- - {:execute_side_effects, SideEffects.handle(activity, meta)} do - {:ok, activity, meta} - else - e -> {:error, e} - end - end - # TODO rewrite in with style @spec persist(map(), keyword()) :: {:ok, Activity.t() | Object.t()} def persist(object, meta) do - local = Keyword.get(meta, :local) + local = Keyword.fetch!(meta, :local) {recipients, _, _} = get_recipients(object) {:ok, activity} = diff --git a/lib/pleroma/web/activity_pub/pipeline.ex b/lib/pleroma/web/activity_pub/pipeline.ex new file mode 100644 index 000000000..cb3571917 --- /dev/null +++ b/lib/pleroma/web/activity_pub/pipeline.ex @@ -0,0 +1,41 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.Pipeline do + alias Pleroma.Activity + alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.ActivityPub.MRF + alias Pleroma.Web.ActivityPub.ObjectValidator + alias Pleroma.Web.ActivityPub.SideEffects + alias Pleroma.Web.Federator + + @spec common_pipeline(map(), keyword()) :: {:ok, Activity.t(), keyword()} | {:error, any()} + def common_pipeline(object, meta) do + with {_, {:ok, validated_object, meta}} <- + {:validate_object, ObjectValidator.validate(object, meta)}, + {_, {:ok, mrfd_object}} <- {:mrf_object, MRF.filter(validated_object)}, + {_, {:ok, %Activity{} = activity, meta}} <- + {:persist_object, ActivityPub.persist(mrfd_object, meta)}, + {_, {:ok, %Activity{} = activity, meta}} <- + {:execute_side_effects, SideEffects.handle(activity, meta)}, + {_, {:ok, _}} <- {:federation, maybe_federate(activity, meta)} do + {:ok, activity, meta} + else + e -> {:error, e} + end + end + + defp maybe_federate(activity, meta) do + with {:ok, local} <- Keyword.fetch(meta, :local) do + if local do + Federator.publish(activity) + {:ok, :federated} + else + {:ok, :not_federated} + end + else + _e -> {:error, "local not set in meta"} + end + end +end diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 591d7aa94..4dd884ce9 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -12,12 +12,13 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do alias Pleroma.Repo alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.ActivityPub.ObjectValidator + alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator + alias Pleroma.Web.ActivityPub.Pipeline alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Visibility alias Pleroma.Web.Federator alias Pleroma.Workers.TransmogrifierWorker - alias Pleroma.Web.ActivityPub.ObjectValidator - alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator import Ecto.Query @@ -572,7 +573,7 @@ def handle_incoming(%{"type" => "Like"} = data, _options) do {_, {:ok, cast_data}} <- {:maybe_add_recipients, maybe_add_recipients_from_object(cast_data)}, {_, {:ok, activity, _meta}} <- - {:common_pipeline, ActivityPub.common_pipeline(cast_data, local: false)} do + {:common_pipeline, Pipeline.common_pipeline(cast_data, local: false)} do {:ok, activity} else e -> {:error, e} diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index e0b22a314..535a48dcc 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -11,6 +11,7 @@ defmodule Pleroma.Web.CommonAPI do alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Builder + alias Pleroma.Web.ActivityPub.Pipeline alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Visibility @@ -106,7 +107,7 @@ def favorite(%User{} = user, id) do {_, {:ok, like_object, meta}} <- {:build_object, Builder.like(user, object)}, {_, {:ok, %Activity{} = activity, _meta}} <- {:common_pipeline, - ActivityPub.common_pipeline(like_object, Keyword.put(meta, :local, true))} do + Pipeline.common_pipeline(like_object, Keyword.put(meta, :local, true))} do {:ok, activity} else e -> diff --git a/test/web/activity_pub/pipeline_test.exs b/test/web/activity_pub/pipeline_test.exs new file mode 100644 index 000000000..318d306af --- /dev/null +++ b/test/web/activity_pub/pipeline_test.exs @@ -0,0 +1,87 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.PipelineTest do + use Pleroma.DataCase + + import Mock + import Pleroma.Factory + + describe "common_pipeline/2" do + test "it goes through validation, filtering, persisting, side effects and federation for local activities" do + activity = insert(:note_activity) + meta = [local: true] + + with_mocks([ + {Pleroma.Web.ActivityPub.ObjectValidator, [], [validate: fn o, m -> {:ok, o, m} end]}, + { + Pleroma.Web.ActivityPub.MRF, + [], + [filter: fn o -> {:ok, o} end] + }, + { + Pleroma.Web.ActivityPub.ActivityPub, + [], + [persist: fn o, m -> {:ok, o, m} end] + }, + { + Pleroma.Web.ActivityPub.SideEffects, + [], + [handle: fn o, m -> {:ok, o, m} end] + }, + { + Pleroma.Web.Federator, + [], + [publish: fn _o -> :ok end] + } + ]) do + assert {:ok, ^activity, ^meta} = + Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta) + + assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta)) + assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity)) + assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta)) + assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta)) + assert_called(Pleroma.Web.Federator.publish(activity)) + end + end + + test "it goes through validation, filtering, persisting, side effects without federation for remote activities" do + activity = insert(:note_activity) + meta = [local: false] + + with_mocks([ + {Pleroma.Web.ActivityPub.ObjectValidator, [], [validate: fn o, m -> {:ok, o, m} end]}, + { + Pleroma.Web.ActivityPub.MRF, + [], + [filter: fn o -> {:ok, o} end] + }, + { + Pleroma.Web.ActivityPub.ActivityPub, + [], + [persist: fn o, m -> {:ok, o, m} end] + }, + { + Pleroma.Web.ActivityPub.SideEffects, + [], + [handle: fn o, m -> {:ok, o, m} end] + }, + { + Pleroma.Web.Federator, + [], + [] + } + ]) do + assert {:ok, ^activity, ^meta} = + Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta) + + assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta)) + assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity)) + assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta)) + assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta)) + end + end + end +end From 1adafa096653c4538e4162a2dffba982ee6c6d8e Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 23 Oct 2019 12:18:05 +0200 Subject: [PATCH 011/581] Credo fixes. --- lib/pleroma/web/activity_pub/builder.ex | 4 ++-- lib/pleroma/web/activity_pub/object_validator.ex | 4 ++-- .../web/activity_pub/object_validators/like_validator.ex | 8 ++++++-- lib/pleroma/web/activity_pub/side_effects.ex | 4 ++-- test/web/activity_pub/object_validator_test.exs | 3 ++- 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/lib/pleroma/web/activity_pub/builder.ex b/lib/pleroma/web/activity_pub/builder.ex index 1787f1510..429a510b8 100644 --- a/lib/pleroma/web/activity_pub/builder.ex +++ b/lib/pleroma/web/activity_pub/builder.ex @@ -5,10 +5,10 @@ defmodule Pleroma.Web.ActivityPub.Builder do This module encodes our addressing policies and general shape of our objects. """ + alias Pleroma.Object + alias Pleroma.User alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Visibility - alias Pleroma.User - alias Pleroma.Object @spec like(User.t(), Object.t()) :: {:ok, map(), keyword()} def like(actor, object) do diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index 33e67dbb9..27a8dd852 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -9,9 +9,9 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do the system. """ - alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator - alias Pleroma.User alias Pleroma.Object + alias Pleroma.User + alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator @spec validate(map(), keyword()) :: {:ok, map(), keyword()} | {:error, any()} def validate(object, meta) diff --git a/lib/pleroma/web/activity_pub/object_validators/like_validator.ex b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex index e6a5aaca8..5fa486653 100644 --- a/lib/pleroma/web/activity_pub/object_validators/like_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex @@ -1,11 +1,15 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator do use Ecto.Schema import Ecto.Changeset + alias Pleroma.Object + alias Pleroma.User alias Pleroma.Web.ActivityPub.ObjectValidators.Types alias Pleroma.Web.ActivityPub.Utils - alias Pleroma.User - alias Pleroma.Object @primary_key false diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 6d3e77a62..666a4e310 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -5,9 +5,9 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do liked object, a `Follow` activity will add the user to the follower collection, and so on. """ - alias Pleroma.Web.ActivityPub.Utils - alias Pleroma.Object alias Pleroma.Notification + alias Pleroma.Object + alias Pleroma.Web.ActivityPub.Utils def handle(object, meta \\ []) diff --git a/test/web/activity_pub/object_validator_test.exs b/test/web/activity_pub/object_validator_test.exs index 2292db6d7..3c5c3696e 100644 --- a/test/web/activity_pub/object_validator_test.exs +++ b/test/web/activity_pub/object_validator_test.exs @@ -1,10 +1,11 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do use Pleroma.DataCase - alias Pleroma.Web.CommonAPI alias Pleroma.Web.ActivityPub.ObjectValidator alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator alias Pleroma.Web.ActivityPub.Utils + alias Pleroma.Web.CommonAPI + import Pleroma.Factory describe "likes" do From 25077812bfc8a7a94c3fa953b2924003296470c2 Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 23 Oct 2019 12:25:20 +0200 Subject: [PATCH 012/581] SideEffectsTest: Fix test. --- test/web/activity_pub/side_effects_test.exs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index 9d99e05a0..b34e45a7f 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -4,11 +4,12 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do use Pleroma.DataCase + alias Pleroma.Object - alias Pleroma.Web.CommonAPI - alias Pleroma.Web.ActivityPub.Builder alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.ActivityPub.Builder alias Pleroma.Web.ActivityPub.SideEffects + alias Pleroma.Web.CommonAPI import Pleroma.Factory @@ -18,7 +19,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do {:ok, post} = CommonAPI.post(user, %{"status" => "hey"}) {:ok, like_data, _meta} = Builder.like(user, post.object) - {:ok, like, _meta} = ActivityPub.persist(like_data, []) + {:ok, like, _meta} = ActivityPub.persist(like_data, [local: true]) %{like: like, user: user} end From aa64b3108ba6aa4294e541e86da323ba1e1a7243 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 23 Oct 2019 11:54:52 +0300 Subject: [PATCH 013/581] fix migrate --- lib/pleroma/marker.ex | 5 +++-- .../20191021113356_add_unread_to_marker.exs | 18 +++++++----------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/lib/pleroma/marker.ex b/lib/pleroma/marker.ex index 4b8198690..098fe3bbd 100644 --- a/lib/pleroma/marker.ex +++ b/lib/pleroma/marker.ex @@ -56,8 +56,9 @@ def multi_set_unread_count(multi, %User{} = user, "notifications") do where: q.user_id == ^user.id, select: %{ timeline: "notifications", - user_id: ^user.id, - unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END ) as unread_count") + user_id: type(^user.id, :string), + unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END )"), + last_read_id: type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) } ) diff --git a/priv/repo/migrations/20191021113356_add_unread_to_marker.exs b/priv/repo/migrations/20191021113356_add_unread_to_marker.exs index 32789b7f9..964c7fb98 100644 --- a/priv/repo/migrations/20191021113356_add_unread_to_marker.exs +++ b/priv/repo/migrations/20191021113356_add_unread_to_marker.exs @@ -25,25 +25,21 @@ def update_markers do select: %{ timeline: "notifications", user_id: q.user_id, - unread_count: fragment("COUNT(*) FILTER (WHERE seen = false) as unread_count"), - last_read_id: fragment("(MAX(id) FILTER (WHERE seen = true)::text) as last_read_id ") + unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END )"), + last_read_id: type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) }, group_by: [q.user_id] ) |> Repo.all() - |> Enum.reduce(Ecto.Multi.new(), fn attrs, multi -> - marker = - Pleroma.Marker - |> struct(attrs) - |> Ecto.Changeset.change() - - multi - |> Ecto.Multi.insert(attrs[:user_id], marker, + |> Enum.each(fn attrs -> + Pleroma.Marker + |> struct(attrs) + |> Ecto.Changeset.change() + |> Pleroma.Repo.insert( returning: true, on_conflict: {:replace, [:last_read_id, :unread_count]}, conflict_target: [:user_id, :timeline] ) end) - |> Pleroma.Repo.transaction() end end From d3fb9e02cc0ce7dc462e587e639e117aaef5fbc5 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 23 Oct 2019 22:48:04 +0300 Subject: [PATCH 014/581] add tests --- lib/pleroma/marker.ex | 9 +++------ .../20191021113356_add_unread_to_marker.exs | 3 ++- test/marker_test.exs | 15 +++++++++++++++ test/notification_test.exs | 3 +++ 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/lib/pleroma/marker.ex b/lib/pleroma/marker.ex index 098fe3bbd..5f6a47f38 100644 --- a/lib/pleroma/marker.ex +++ b/lib/pleroma/marker.ex @@ -58,7 +58,8 @@ def multi_set_unread_count(multi, %User{} = user, "notifications") do timeline: "notifications", user_id: type(^user.id, :string), unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END )"), - last_read_id: type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) + last_read_id: + type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) } ) @@ -77,11 +78,7 @@ def multi_set_unread_count(multi, %User{} = user, "notifications") do ) end - def set_unread_count(%User{} = user, timeline) do - Multi.new() - |> multi_set_unread_count(user, timeline) - |> Repo.transaction() - end + def multi_set_unread_count(multi, _, _), do: multi defp get_marker(user, timeline) do case Repo.find_resource(get_query(user, timeline)) do diff --git a/priv/repo/migrations/20191021113356_add_unread_to_marker.exs b/priv/repo/migrations/20191021113356_add_unread_to_marker.exs index 964c7fb98..c15e2ff13 100644 --- a/priv/repo/migrations/20191021113356_add_unread_to_marker.exs +++ b/priv/repo/migrations/20191021113356_add_unread_to_marker.exs @@ -26,7 +26,8 @@ def update_markers do timeline: "notifications", user_id: q.user_id, unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END )"), - last_read_id: type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) + last_read_id: + type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) }, group_by: [q.user_id] ) diff --git a/test/marker_test.exs b/test/marker_test.exs index 04bd67fe6..1900ed08b 100644 --- a/test/marker_test.exs +++ b/test/marker_test.exs @@ -8,6 +8,21 @@ defmodule Pleroma.MarkerTest do import Pleroma.Factory + describe "multi_set_unread_count/3" do + test "returns multi" do + user = insert(:user) + + assert %Ecto.Multi{ + operations: [marker: {:run, _}, counters: {:run, _}] + } = + Marker.multi_set_unread_count( + Ecto.Multi.new(), + user, + "notifications" + ) + end + end + describe "get_markers/2" do test "returns user markers" do user = insert(:user) diff --git a/test/notification_test.exs b/test/notification_test.exs index 558ac358c..1e8a9ca98 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -31,6 +31,9 @@ test "notifies someone when they are directly addressed" do assert notified_ids == [other_user.id, third_user.id] assert notification.activity_id == activity.id assert other_notification.activity_id == activity.id + + assert [%Pleroma.Marker{unread_count: 2}] = + Pleroma.Marker.get_markers(other_user, ["notifications"]) end test "it creates a notification for subscribed users" do From 922e3d082c38ccd108710e21d4bda8e65b551f9c Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Thu, 24 Oct 2019 09:50:41 +0300 Subject: [PATCH 015/581] add test --- lib/pleroma/marker.ex | 14 +------------- lib/pleroma/notification.ex | 14 ++++++++++++++ test/marker_test.exs | 6 ++++++ 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/lib/pleroma/marker.ex b/lib/pleroma/marker.ex index 5f6a47f38..a7ea542dd 100644 --- a/lib/pleroma/marker.ex +++ b/lib/pleroma/marker.ex @@ -51,19 +51,7 @@ def upsert(%User{} = user, attrs) do def multi_set_unread_count(multi, %User{} = user, "notifications") do multi |> Multi.run(:counters, fn _repo, _changes -> - query = - from(q in Pleroma.Notification, - where: q.user_id == ^user.id, - select: %{ - timeline: "notifications", - user_id: type(^user.id, :string), - unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END )"), - last_read_id: - type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) - } - ) - - {:ok, Repo.one(query)} + {:ok, Repo.one(Pleroma.Notification.notifications_info_query(user))} end) |> Multi.insert( :marker, diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index af56cc667..373f9b06a 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -36,6 +36,20 @@ def changeset(%Notification{} = notification, attrs) do |> cast(attrs, [:seen]) end + @spec notifications_info_query(User.t()) :: Ecto.Queryable.t() + def notifications_info_query(user) do + from(q in Pleroma.Notification, + where: q.user_id == ^user.id, + select: %{ + timeline: "notifications", + user_id: type(^user.id, :string), + unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END )"), + last_read_id: + type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) + } + ) + end + def for_user_query(user, opts \\ []) do Notification |> where(user_id: ^user.id) diff --git a/test/marker_test.exs b/test/marker_test.exs index 1900ed08b..5d03db48e 100644 --- a/test/marker_test.exs +++ b/test/marker_test.exs @@ -21,6 +21,12 @@ test "returns multi" do "notifications" ) end + + test "return empty multi" do + user = insert(:user) + multi = Ecto.Multi.new() + assert Marker.multi_set_unread_count(multi, user, "home") == multi + end end describe "get_markers/2" do From 1b82eb6d4102bc2d7acec0a905e7714c95eadc94 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 30 Oct 2019 23:22:38 +0300 Subject: [PATCH 016/581] move sql (update_markers) from migrate to mix task --- lib/mix/tasks/pleroma/marker.ex | 36 +++++++++++++++ .../20191021113356_add_unread_to_marker.exs | 46 ------------------- .../20191030202008_add_unread_to_marker.exs | 18 ++++++++ 3 files changed, 54 insertions(+), 46 deletions(-) create mode 100644 lib/mix/tasks/pleroma/marker.ex delete mode 100644 priv/repo/migrations/20191021113356_add_unread_to_marker.exs create mode 100644 priv/repo/migrations/20191030202008_add_unread_to_marker.exs diff --git a/lib/mix/tasks/pleroma/marker.ex b/lib/mix/tasks/pleroma/marker.ex new file mode 100644 index 000000000..1d5be11de --- /dev/null +++ b/lib/mix/tasks/pleroma/marker.ex @@ -0,0 +1,36 @@ +defmodule Mix.Tasks.Pleroma.Marker do + use Mix.Task + import Mix.Pleroma + + import Ecto.Query + alias Pleroma.Repo + alias Pleroma.Notification + + def run(["update_markers"]) do + start_pleroma() + + from(q in Notification, + select: %{ + timeline: "notifications", + user_id: q.user_id, + unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END )"), + last_read_id: + type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) + }, + group_by: [q.user_id] + ) + |> Repo.all() + |> Enum.each(fn attrs -> + Pleroma.Marker + |> struct(attrs) + |> Ecto.Changeset.change() + |> Pleroma.Repo.insert( + returning: true, + on_conflict: {:replace, [:last_read_id, :unread_count]}, + conflict_target: [:user_id, :timeline] + ) + end) + + shell_info("Done") + end +end diff --git a/priv/repo/migrations/20191021113356_add_unread_to_marker.exs b/priv/repo/migrations/20191021113356_add_unread_to_marker.exs deleted file mode 100644 index c15e2ff13..000000000 --- a/priv/repo/migrations/20191021113356_add_unread_to_marker.exs +++ /dev/null @@ -1,46 +0,0 @@ -defmodule Pleroma.Repo.Migrations.AddUnreadToMarker do - use Ecto.Migration - import Ecto.Query - alias Pleroma.Repo - alias Pleroma.Notification - - def up do - alter table(:markers) do - add_if_not_exists(:unread_count, :integer, default: 0) - end - - flush() - - update_markers() - end - - def down do - alter table(:markers) do - remove_if_exists(:unread_count, :integer) - end - end - - def update_markers do - from(q in Notification, - select: %{ - timeline: "notifications", - user_id: q.user_id, - unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END )"), - last_read_id: - type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) - }, - group_by: [q.user_id] - ) - |> Repo.all() - |> Enum.each(fn attrs -> - Pleroma.Marker - |> struct(attrs) - |> Ecto.Changeset.change() - |> Pleroma.Repo.insert( - returning: true, - on_conflict: {:replace, [:last_read_id, :unread_count]}, - conflict_target: [:user_id, :timeline] - ) - end) - end -end diff --git a/priv/repo/migrations/20191030202008_add_unread_to_marker.exs b/priv/repo/migrations/20191030202008_add_unread_to_marker.exs new file mode 100644 index 000000000..f81339c9f --- /dev/null +++ b/priv/repo/migrations/20191030202008_add_unread_to_marker.exs @@ -0,0 +1,18 @@ +defmodule Pleroma.Repo.Migrations.AddUnreadToMarker do + use Ecto.Migration + import Ecto.Query + alias Pleroma.Repo + alias Pleroma.Notification + + def up do + alter table(:markers) do + add_if_not_exists(:unread_count, :integer, default: 0) + end + end + + def down do + alter table(:markers) do + remove_if_exists(:unread_count, :integer) + end + end +end From 209319c8d289564653f73cbf15fb6449d91cf3ca Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 30 Oct 2019 23:49:05 +0300 Subject: [PATCH 017/581] update marker api --- .../web/mastodon_api/views/marker_view.ex | 6 ++++-- .../controllers/marker_controller_test.exs | 20 +++++++++---------- .../mastodon_api/views/marker_view_test.exs | 8 ++++---- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/views/marker_view.ex b/lib/pleroma/web/mastodon_api/views/marker_view.ex index 1501c2a30..81545cff0 100644 --- a/lib/pleroma/web/mastodon_api/views/marker_view.ex +++ b/lib/pleroma/web/mastodon_api/views/marker_view.ex @@ -10,8 +10,10 @@ def render("markers.json", %{markers: markers}) do Map.put_new(acc, m.timeline, %{ last_read_id: m.last_read_id, version: m.lock_version, - unread_count: m.unread_count, - updated_at: NaiveDateTime.to_iso8601(m.updated_at) + updated_at: NaiveDateTime.to_iso8601(m.updated_at), + pleroma: %{ + unread_count: m.unread_count + } }) end) end diff --git a/test/web/mastodon_api/controllers/marker_controller_test.exs b/test/web/mastodon_api/controllers/marker_controller_test.exs index 5e7b4001f..e0aacccb4 100644 --- a/test/web/mastodon_api/controllers/marker_controller_test.exs +++ b/test/web/mastodon_api/controllers/marker_controller_test.exs @@ -26,13 +26,13 @@ test "gets markers with correct scopes", %{conn: conn} do |> json_response(200) assert response == %{ - "notifications" => %{ - "last_read_id" => "69420", - "unread_count" => 7, - "updated_at" => NaiveDateTime.to_iso8601(marker.updated_at), - "version" => 0 - } - } + "notifications" => %{ + "last_read_id" => "69420", + "updated_at" => NaiveDateTime.to_iso8601(marker.updated_at), + "version" => 0, + "pleroma" => %{ "unread_count" => 7 } + } + } end test "gets markers with missed scopes", %{conn: conn} do @@ -72,7 +72,7 @@ test "creates a marker with correct scopes", %{conn: conn} do "last_read_id" => "69420", "updated_at" => _, "version" => 0, - "unread_count" => 0 + "pleroma" => %{ "unread_count" => 0 } } } = response end @@ -100,9 +100,9 @@ test "updates exist marker", %{conn: conn} do assert response == %{ "notifications" => %{ "last_read_id" => "69888", - "unread_count" => 0, "updated_at" => NaiveDateTime.to_iso8601(marker.updated_at), - "version" => 0 + "version" => 0, + "pleroma" => %{ "unread_count" => 0 } } } end diff --git a/test/web/mastodon_api/views/marker_view_test.exs b/test/web/mastodon_api/views/marker_view_test.exs index 3ce794617..f172e5023 100644 --- a/test/web/mastodon_api/views/marker_view_test.exs +++ b/test/web/mastodon_api/views/marker_view_test.exs @@ -14,15 +14,15 @@ test "returns markers" do assert MarkerView.render("markers.json", %{markers: [marker1, marker2]}) == %{ "home" => %{ last_read_id: "42", - unread_count: 0, updated_at: NaiveDateTime.to_iso8601(marker2.updated_at), - version: 0 + version: 0, + pleroma: %{unread_count: 0} }, "notifications" => %{ last_read_id: "17", - unread_count: 5, updated_at: NaiveDateTime.to_iso8601(marker1.updated_at), - version: 0 + version: 0, + pleroma: %{unread_count: 5} } } end From 58da7f66202f3f2e90d4954649c3e5a0e3a7dc32 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Thu, 31 Oct 2019 17:34:17 +0300 Subject: [PATCH 018/581] updated docs\changelog --- CHANGELOG.md | 1 + docs/API/differences_in_mastoapi_responses.md | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 51e5424c6..c14c8c0e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Mastodon API: Add `pleroma.direct_conversation_id` to the status endpoint (`GET /api/v1/statuses/:id`) - Mastodon API: `pleroma.thread_muted` to the Status entity - Mastodon API: Mark the direct conversation as read for the author when they send a new direct message +- Mastodon API: Add `pleroma.unread_count` to the Marker entity ### Added diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index aca0f5e0e..d18b976b6 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -155,3 +155,9 @@ Has theses additionnal parameters (which are the same as in Pleroma-API): * `captcha_solution`: optional, contains provider-specific captcha solution, * `captcha_token`: optional, contains provider-specific captcha token * `token`: invite token required when the registerations aren't public. + +## Markers + +Has these additional fields under the `pleroma` object: + +- `unread_count`: contains number unread notifications From 1b3a942a84b8b612e07e3bf34801137741926911 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Thu, 31 Oct 2019 17:36:59 +0300 Subject: [PATCH 019/581] fix format --- lib/mix/tasks/pleroma/marker.ex | 10 +++++----- .../controllers/marker_controller_test.exs | 18 +++++++++--------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/mix/tasks/pleroma/marker.ex b/lib/mix/tasks/pleroma/marker.ex index 1d5be11de..bebef0d6a 100644 --- a/lib/mix/tasks/pleroma/marker.ex +++ b/lib/mix/tasks/pleroma/marker.ex @@ -1,10 +1,10 @@ defmodule Mix.Tasks.Pleroma.Marker do use Mix.Task import Mix.Pleroma - import Ecto.Query - alias Pleroma.Repo + alias Pleroma.Notification + alias Pleroma.Repo def run(["update_markers"]) do start_pleroma() @@ -15,7 +15,7 @@ def run(["update_markers"]) do user_id: q.user_id, unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END )"), last_read_id: - type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) + type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) }, group_by: [q.user_id] ) @@ -26,8 +26,8 @@ def run(["update_markers"]) do |> Ecto.Changeset.change() |> Pleroma.Repo.insert( returning: true, - on_conflict: {:replace, [:last_read_id, :unread_count]}, - conflict_target: [:user_id, :timeline] + on_conflict: {:replace, [:last_read_id, :unread_count]}, + conflict_target: [:user_id, :timeline] ) end) diff --git a/test/web/mastodon_api/controllers/marker_controller_test.exs b/test/web/mastodon_api/controllers/marker_controller_test.exs index e0aacccb4..8bcfcb7e1 100644 --- a/test/web/mastodon_api/controllers/marker_controller_test.exs +++ b/test/web/mastodon_api/controllers/marker_controller_test.exs @@ -26,13 +26,13 @@ test "gets markers with correct scopes", %{conn: conn} do |> json_response(200) assert response == %{ - "notifications" => %{ - "last_read_id" => "69420", - "updated_at" => NaiveDateTime.to_iso8601(marker.updated_at), - "version" => 0, - "pleroma" => %{ "unread_count" => 7 } - } - } + "notifications" => %{ + "last_read_id" => "69420", + "updated_at" => NaiveDateTime.to_iso8601(marker.updated_at), + "version" => 0, + "pleroma" => %{"unread_count" => 7} + } + } end test "gets markers with missed scopes", %{conn: conn} do @@ -72,7 +72,7 @@ test "creates a marker with correct scopes", %{conn: conn} do "last_read_id" => "69420", "updated_at" => _, "version" => 0, - "pleroma" => %{ "unread_count" => 0 } + "pleroma" => %{"unread_count" => 0} } } = response end @@ -102,7 +102,7 @@ test "updates exist marker", %{conn: conn} do "last_read_id" => "69888", "updated_at" => NaiveDateTime.to_iso8601(marker.updated_at), "version" => 0, - "pleroma" => %{ "unread_count" => 0 } + "pleroma" => %{"unread_count" => 0} } } end From 57995fa8cf26c9d5cd31969b59dbafb9f8c8fdc7 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Sat, 2 Nov 2019 21:19:01 +0300 Subject: [PATCH 020/581] fix migrate update migrate --- lib/mix/tasks/pleroma/marker.ex | 36 ------------------- .../20191030202008_add_unread_to_marker.exs | 32 ++++++++++++++++- 2 files changed, 31 insertions(+), 37 deletions(-) delete mode 100644 lib/mix/tasks/pleroma/marker.ex diff --git a/lib/mix/tasks/pleroma/marker.ex b/lib/mix/tasks/pleroma/marker.ex deleted file mode 100644 index bebef0d6a..000000000 --- a/lib/mix/tasks/pleroma/marker.ex +++ /dev/null @@ -1,36 +0,0 @@ -defmodule Mix.Tasks.Pleroma.Marker do - use Mix.Task - import Mix.Pleroma - import Ecto.Query - - alias Pleroma.Notification - alias Pleroma.Repo - - def run(["update_markers"]) do - start_pleroma() - - from(q in Notification, - select: %{ - timeline: "notifications", - user_id: q.user_id, - unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END )"), - last_read_id: - type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) - }, - group_by: [q.user_id] - ) - |> Repo.all() - |> Enum.each(fn attrs -> - Pleroma.Marker - |> struct(attrs) - |> Ecto.Changeset.change() - |> Pleroma.Repo.insert( - returning: true, - on_conflict: {:replace, [:last_read_id, :unread_count]}, - conflict_target: [:user_id, :timeline] - ) - end) - - shell_info("Done") - end -end diff --git a/priv/repo/migrations/20191030202008_add_unread_to_marker.exs b/priv/repo/migrations/20191030202008_add_unread_to_marker.exs index f81339c9f..2b3abc682 100644 --- a/priv/repo/migrations/20191030202008_add_unread_to_marker.exs +++ b/priv/repo/migrations/20191030202008_add_unread_to_marker.exs @@ -2,12 +2,15 @@ defmodule Pleroma.Repo.Migrations.AddUnreadToMarker do use Ecto.Migration import Ecto.Query alias Pleroma.Repo - alias Pleroma.Notification def up do alter table(:markers) do add_if_not_exists(:unread_count, :integer, default: 0) end + + flush() + + update_markers() end def down do @@ -15,4 +18,31 @@ def down do remove_if_exists(:unread_count, :integer) end end + + def update_markers do + now = NaiveDateTime.utc_now() + + markers_attrs = + from(q in "notifications", + select: %{ + timeline: "notifications", + user_id: q.user_id, + unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END )"), + last_read_id: + type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) + }, + group_by: [q.user_id] + ) + |> Repo.all() + |> Enum.map(fn attrs -> + attrs + |> Map.put_new(:inserted_at, now) + |> Map.put_new(:updated_at, now) + end) + + Repo.insert_all("markers", markers_attrs, + on_conflict: {:replace, [:last_read_id, :unread_count]}, + conflict_target: [:user_id, :timeline] + ) + end end From 3d1b445cbf001f76af614441c241dcc299e76af7 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 5 Nov 2019 15:02:09 +0100 Subject: [PATCH 021/581] Object Validators: Extract common validations. --- .../web/activity_pub/object_validator.ex | 7 ++-- .../object_validators/common_validations.ex | 32 +++++++++++++++++++ .../object_validators/like_validator.ex | 26 +++------------ .../web/activity_pub/transmogrifier.ex | 7 ++-- test/web/activity_pub/side_effects_test.exs | 2 +- 5 files changed, 47 insertions(+), 27 deletions(-) create mode 100644 lib/pleroma/web/activity_pub/object_validators/common_validations.ex diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index 27a8dd852..539be1143 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -17,9 +17,10 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do def validate(object, meta) def validate(%{"type" => "Like"} = object, meta) do - with {_, %{valid?: true, changes: object}} <- - {:validate_object, LikeValidator.cast_and_validate(object)} do - object = stringify_keys(object) + with {_, {:ok, object}} <- + {:validate_object, + object |> LikeValidator.cast_and_validate() |> Ecto.Changeset.apply_action(:insert)} do + object = stringify_keys(object |> Map.from_struct()) {:ok, object, meta} else e -> {:error, e} diff --git a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex new file mode 100644 index 000000000..db0e2072d --- /dev/null +++ b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex @@ -0,0 +1,32 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations do + import Ecto.Changeset + + alias Pleroma.Object + alias Pleroma.User + + def validate_actor_presence(cng, field_name \\ :actor) do + cng + |> validate_change(field_name, fn field_name, actor -> + if User.get_cached_by_ap_id(actor) do + [] + else + [{field_name, "can't find user"}] + end + end) + end + + def validate_object_presence(cng, field_name \\ :object) do + cng + |> validate_change(field_name, fn field_name, actor -> + if Object.get_cached_by_ap_id(actor) do + [] + else + [{field_name, "can't find user"}] + end + end) + end +end diff --git a/lib/pleroma/web/activity_pub/object_validators/like_validator.ex b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex index 5fa486653..ccbc7d071 100644 --- a/lib/pleroma/web/activity_pub/object_validators/like_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex @@ -4,13 +4,13 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator do use Ecto.Schema - import Ecto.Changeset - alias Pleroma.Object - alias Pleroma.User alias Pleroma.Web.ActivityPub.ObjectValidators.Types alias Pleroma.Web.ActivityPub.Utils + import Ecto.Changeset + import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations + @primary_key false embedded_schema do @@ -38,8 +38,8 @@ def validate_data(data_cng) do data_cng |> validate_inclusion(:type, ["Like"]) |> validate_required([:id, :type, :object, :actor, :context, :to, :cc]) - |> validate_change(:actor, &actor_valid?/2) - |> validate_change(:object, &object_valid?/2) + |> validate_actor_presence() + |> validate_object_presence() |> validate_existing_like() end @@ -54,20 +54,4 @@ def validate_existing_like(%{changes: %{actor: actor, object: object}} = cng) do end def validate_existing_like(cng), do: cng - - def actor_valid?(field_name, actor) do - if User.get_cached_by_ap_id(actor) do - [] - else - [{field_name, "can't find user"}] - end - end - - def object_valid?(field_name, object) do - if Object.get_cached_by_ap_id(object) do - [] - else - [{field_name, "can't find object"}] - end - end end diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 4dd884ce9..9a0c37e13 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -566,8 +566,11 @@ def handle_incoming( end def handle_incoming(%{"type" => "Like"} = data, _options) do - with {_, %{changes: cast_data}} <- {:casting_data, LikeValidator.cast_data(data)}, - cast_data <- ObjectValidator.stringify_keys(cast_data), + with {_, {:ok, cast_data_sym}} <- + {:casting_data, + data |> LikeValidator.cast_data() |> Ecto.Changeset.apply_action(:insert)}, + {_, cast_data} <- + {:stringify_keys, ObjectValidator.stringify_keys(cast_data_sym |> Map.from_struct())}, :ok <- ObjectValidator.fetch_actor_and_object(cast_data), {_, {:ok, cast_data}} <- {:maybe_add_context, maybe_add_context_from_object(cast_data)}, {_, {:ok, cast_data}} <- diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index b34e45a7f..ef91954ae 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -19,7 +19,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do {:ok, post} = CommonAPI.post(user, %{"status" => "hey"}) {:ok, like_data, _meta} = Builder.like(user, post.object) - {:ok, like, _meta} = ActivityPub.persist(like_data, [local: true]) + {:ok, like, _meta} = ActivityPub.persist(like_data, local: true) %{like: like, user: user} end From faced6236b9e2ce9675cf743068f16098b744562 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 5 Nov 2019 15:02:31 +0100 Subject: [PATCH 022/581] NoteValidator: Add very basic validator for Note objects. --- .../object_validators/note_validator.ex | 64 +++++++++++++++++++ .../object_validators/note_validator_test.exs | 35 ++++++++++ 2 files changed, 99 insertions(+) create mode 100644 lib/pleroma/web/activity_pub/object_validators/note_validator.ex create mode 100644 test/web/activity_pub/object_validators/note_validator_test.exs diff --git a/lib/pleroma/web/activity_pub/object_validators/note_validator.ex b/lib/pleroma/web/activity_pub/object_validators/note_validator.ex new file mode 100644 index 000000000..c660f30f0 --- /dev/null +++ b/lib/pleroma/web/activity_pub/object_validators/note_validator.ex @@ -0,0 +1,64 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.ObjectValidators.NoteValidator do + use Ecto.Schema + + alias Pleroma.Web.ActivityPub.ObjectValidators.Types + + import Ecto.Changeset + + @primary_key false + + embedded_schema do + field(:id, :string, primary_key: true) + field(:to, {:array, :string}, default: []) + field(:cc, {:array, :string}, default: []) + field(:bto, {:array, :string}, default: []) + field(:bcc, {:array, :string}, default: []) + # TODO: Write type + field(:tag, {:array, :map}, default: []) + field(:type, :string) + field(:content, :string) + field(:context, :string) + field(:actor, Types.ObjectID) + field(:attributedTo, Types.ObjectID) + field(:summary, :string) + # TODO: Write type + field(:published, :string) + # TODO: Write type + field(:emoji, :map, default: %{}) + field(:sensitive, :boolean, default: false) + # TODO: Write type + field(:attachment, {:array, :map}, default: []) + field(:replies_count, :integer, default: 0) + field(:like_count, :integer, default: 0) + field(:announcement_count, :integer, default: 0) + field(:inRepyTo, :string) + + field(:likes, {:array, :string}, default: []) + field(:announcements, {:array, :string}, default: []) + + # see if needed + field(:conversation, :string) + field(:context_id, :string) + end + + def cast_and_validate(data) do + data + |> cast_data() + |> validate_data() + end + + def cast_data(data) do + %__MODULE__{} + |> cast(data, __schema__(:fields)) + end + + def validate_data(data_cng) do + data_cng + |> validate_inclusion(:type, ["Note"]) + |> validate_required([:id, :actor, :to, :cc, :type, :content, :context]) + end +end diff --git a/test/web/activity_pub/object_validators/note_validator_test.exs b/test/web/activity_pub/object_validators/note_validator_test.exs new file mode 100644 index 000000000..2bcd75e25 --- /dev/null +++ b/test/web/activity_pub/object_validators/note_validator_test.exs @@ -0,0 +1,35 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.ObjectValidators.NoteValidatorTest do + use Pleroma.DataCase + + alias Pleroma.Web.ActivityPub.ObjectValidators.NoteValidator + alias Pleroma.Web.ActivityPub.Utils + + import Pleroma.Factory + + describe "Notes" do + setup do + user = insert(:user) + + note = %{ + "id" => Utils.generate_activity_id(), + "type" => "Note", + "actor" => user.ap_id, + "to" => [user.follower_address], + "cc" => [], + "content" => "Hellow this is content.", + "context" => "xxx", + "summary" => "a post" + } + + %{user: user, note: note} + end + + test "a basic note validates", %{note: note} do + %{valid?: true} = NoteValidator.cast_and_validate(note) + end + end +end From ddbfc995ac40db9bd1da137b03e5acf6d050ddc5 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Mon, 11 Nov 2019 17:06:41 +0300 Subject: [PATCH 023/581] clean sql query --- lib/pleroma/marker.ex | 2 +- lib/pleroma/notification.ex | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/pleroma/marker.ex b/lib/pleroma/marker.ex index a7ea542dd..d5ca27bf2 100644 --- a/lib/pleroma/marker.ex +++ b/lib/pleroma/marker.ex @@ -56,7 +56,7 @@ def multi_set_unread_count(multi, %User{} = user, "notifications") do |> Multi.insert( :marker, fn %{counters: attrs} -> - Marker + %Marker{timeline: "notifications", user_id: user.id} |> struct(attrs) |> Ecto.Changeset.change() end, diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 373f9b06a..158903c4b 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -41,8 +41,6 @@ def notifications_info_query(user) do from(q in Pleroma.Notification, where: q.user_id == ^user.id, select: %{ - timeline: "notifications", - user_id: type(^user.id, :string), unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END )"), last_read_id: type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) From b5b62f42b2864dc8b95c8ba7d650321ebcc332ad Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Tue, 12 Nov 2019 15:59:34 +0300 Subject: [PATCH 024/581] update Marker.multi_set_unread_count --- lib/pleroma/marker.ex | 7 ++++++- lib/pleroma/notification.ex | 21 ++++++++++++++------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/lib/pleroma/marker.ex b/lib/pleroma/marker.ex index d5ca27bf2..a32546094 100644 --- a/lib/pleroma/marker.ex +++ b/lib/pleroma/marker.ex @@ -9,6 +9,7 @@ defmodule Pleroma.Marker do import Ecto.Query alias Ecto.Multi + alias Pleroma.Notification alias Pleroma.Repo alias Pleroma.User alias __MODULE__ @@ -51,7 +52,11 @@ def upsert(%User{} = user, attrs) do def multi_set_unread_count(multi, %User{} = user, "notifications") do multi |> Multi.run(:counters, fn _repo, _changes -> - {:ok, Repo.one(Pleroma.Notification.notifications_info_query(user))} + {:ok, + %{ + unread_count: Repo.aggregate(Notification.unread_count_query(user), :count, :id), + last_read_id: Repo.one(Notification.last_read_query(user)) + }} end) |> Multi.insert( :marker, diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 158903c4b..1cc6a4735 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -36,15 +36,22 @@ def changeset(%Notification{} = notification, attrs) do |> cast(attrs, [:seen]) end - @spec notifications_info_query(User.t()) :: Ecto.Queryable.t() - def notifications_info_query(user) do + @spec unread_count_query(User.t()) :: Ecto.Queryable.t() + def unread_count_query(user) do from(q in Pleroma.Notification, where: q.user_id == ^user.id, - select: %{ - unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END )"), - last_read_id: - type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) - } + where: q.seen == false + ) + end + + @spec last_read_query(User.t()) :: Ecto.Queryable.t() + def last_read_query(user) do + from(q in Pleroma.Notification, + where: q.user_id == ^user.id, + where: q.seen == true, + select: type(q.id, :string), + limit: 1, + order_by: [desc: :id] ) end From b9041c209787dc279d4dc5194d65dff73684cdb9 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Fri, 15 Nov 2019 22:10:41 +0300 Subject: [PATCH 025/581] added recount unread notifications to markers --- lib/pleroma/marker.ex | 29 +++++++++++++++++-- .../controllers/marker_controller.ex | 8 ++++- test/marker_test.exs | 14 +++++++++ .../controllers/marker_controller_test.exs | 3 +- 4 files changed, 50 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/marker.ex b/lib/pleroma/marker.ex index a32546094..2d217a0b7 100644 --- a/lib/pleroma/marker.ex +++ b/lib/pleroma/marker.ex @@ -15,6 +15,7 @@ defmodule Pleroma.Marker do alias __MODULE__ @timelines ["notifications"] + @type t :: %__MODULE__{} schema "markers" do field(:last_read_id, :string, default: "") @@ -26,8 +27,18 @@ defmodule Pleroma.Marker do timestamps() end - def get_markers(user, timelines \\ []) do - Repo.all(get_query(user, timelines)) + @doc """ + Gets markers by user and timeline. + + opts: + `recount_unread` - run force recount unread notifications for `true` value + """ + @spec get_markers(User.t(), list(String), map()) :: list(t()) + def get_markers(user, timelines \\ [], opts \\ %{}) do + user + |> get_query(timelines) + |> recount_unread_notifications(opts[:recount_unread]) + |> Repo.all() end def upsert(%User{} = user, attrs) do @@ -99,4 +110,18 @@ defp get_query(user, timelines) do |> by_user_id(user.id) |> by_timeline(timelines) end + + defp recount_unread_notifications(query, true) do + from( + q in query, + left_join: n in "notifications", + on: n.user_id == q.user_id and n.seen == false, + group_by: [:id], + select_merge: %{ + unread_count: fragment("count(?)", n.id) + } + ) + end + + defp recount_unread_notifications(query, _), do: query end diff --git a/lib/pleroma/web/mastodon_api/controllers/marker_controller.ex b/lib/pleroma/web/mastodon_api/controllers/marker_controller.ex index ce025624d..6649ffbda 100644 --- a/lib/pleroma/web/mastodon_api/controllers/marker_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/marker_controller.ex @@ -18,7 +18,13 @@ defmodule Pleroma.Web.MastodonAPI.MarkerController do # GET /api/v1/markers def index(%{assigns: %{user: user}} = conn, params) do - markers = Pleroma.Marker.get_markers(user, params["timeline"]) + markers = + Pleroma.Marker.get_markers( + user, + params["timeline"], + %{recount_unread: true} + ) + render(conn, "markers.json", %{markers: markers}) end diff --git a/test/marker_test.exs b/test/marker_test.exs index 5d03db48e..7b1d2218a 100644 --- a/test/marker_test.exs +++ b/test/marker_test.exs @@ -36,6 +36,20 @@ test "returns user markers" do insert(:marker, timeline: "home", user: user) assert Marker.get_markers(user, ["notifications"]) == [refresh_record(marker)] end + + test "returns user markers with recount unread notifications" do + user = insert(:user) + marker = insert(:marker, user: user) + insert(:notification, user: user) + insert(:notification, user: user) + insert(:marker, timeline: "home", user: user) + + assert Marker.get_markers( + user, + ["notifications"], + %{recount_unread: true} + ) == [%Marker{refresh_record(marker) | unread_count: 2}] + end end describe "upsert/2" do diff --git a/test/web/mastodon_api/controllers/marker_controller_test.exs b/test/web/mastodon_api/controllers/marker_controller_test.exs index 8bcfcb7e1..64bf79bb1 100644 --- a/test/web/mastodon_api/controllers/marker_controller_test.exs +++ b/test/web/mastodon_api/controllers/marker_controller_test.exs @@ -11,11 +11,12 @@ defmodule Pleroma.Web.MastodonAPI.MarkerControllerTest do test "gets markers with correct scopes", %{conn: conn} do user = insert(:user) token = insert(:oauth_token, user: user, scopes: ["read:statuses"]) + insert_list(7, :notification, user: user) {:ok, %{"notifications" => marker}} = Pleroma.Marker.upsert( user, - %{"notifications" => %{"last_read_id" => "69420", "unread_count" => 7}} + %{"notifications" => %{"last_read_id" => "69420"}} ) response = From 1993d7096d673d8a8151fedd7bcac909d584d13d Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 5 Dec 2019 12:33:06 +0100 Subject: [PATCH 026/581] Validators: Add a type for the datetime used in AP. --- .../object_validators/note_validator.ex | 3 +- .../object_validators/types/date_time.ex | 34 +++++++++++++++++++ .../types/date_time_test.exs | 32 +++++++++++++++++ 3 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 lib/pleroma/web/activity_pub/object_validators/types/date_time.ex create mode 100644 test/web/activity_pub/object_validators/types/date_time_test.exs diff --git a/lib/pleroma/web/activity_pub/object_validators/note_validator.ex b/lib/pleroma/web/activity_pub/object_validators/note_validator.ex index c660f30f0..eea15ce1c 100644 --- a/lib/pleroma/web/activity_pub/object_validators/note_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/note_validator.ex @@ -25,8 +25,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.NoteValidator do field(:actor, Types.ObjectID) field(:attributedTo, Types.ObjectID) field(:summary, :string) - # TODO: Write type - field(:published, :string) + field(:published, Types.DateTime) # TODO: Write type field(:emoji, :map, default: %{}) field(:sensitive, :boolean, default: false) diff --git a/lib/pleroma/web/activity_pub/object_validators/types/date_time.ex b/lib/pleroma/web/activity_pub/object_validators/types/date_time.ex new file mode 100644 index 000000000..4f412fcde --- /dev/null +++ b/lib/pleroma/web/activity_pub/object_validators/types/date_time.ex @@ -0,0 +1,34 @@ +defmodule Pleroma.Web.ActivityPub.ObjectValidators.Types.DateTime do + @moduledoc """ + The AP standard defines the date fields in AP as xsd:DateTime. Elixir's + DateTime can't parse this, but it can parse the related iso8601. This + module punches the date until it looks like iso8601 and normalizes to + it. + + DateTimes without a timezone offset are treated as UTC. + + Reference: https://www.w3.org/TR/activitystreams-vocabulary/#dfn-published + """ + use Ecto.Type + + def type, do: :string + + def cast(datetime) when is_binary(datetime) do + with {:ok, datetime, _} <- DateTime.from_iso8601(datetime) do + {:ok, DateTime.to_iso8601(datetime)} + else + {:error, :missing_offset} -> cast("#{datetime}Z") + _e -> :error + end + end + + def cast(_), do: :error + + def dump(data) do + {:ok, data} + end + + def load(data) do + {:ok, data} + end +end diff --git a/test/web/activity_pub/object_validators/types/date_time_test.exs b/test/web/activity_pub/object_validators/types/date_time_test.exs new file mode 100644 index 000000000..3e17a9497 --- /dev/null +++ b/test/web/activity_pub/object_validators/types/date_time_test.exs @@ -0,0 +1,32 @@ +defmodule Pleroma.Web.ActivityPub.ObjectValidators.Types.DateTimeTest do + alias Pleroma.Web.ActivityPub.ObjectValidators.Types.DateTime + use Pleroma.DataCase + + test "it validates an xsd:Datetime" do + valid_strings = [ + "2004-04-12T13:20:00", + "2004-04-12T13:20:15.5", + "2004-04-12T13:20:00-05:00", + "2004-04-12T13:20:00Z" + ] + + invalid_strings = [ + "2004-04-12T13:00", + "2004-04-1213:20:00", + "99-04-12T13:00", + "2004-04-12" + ] + + assert {:ok, "2004-04-01T12:00:00Z"} == DateTime.cast("2004-04-01T12:00:00Z") + + Enum.each(valid_strings, fn date_time -> + result = DateTime.cast(date_time) + assert {:ok, _} = result + end) + + Enum.each(invalid_strings, fn date_time -> + result = DateTime.cast(date_time) + assert :error == result + end) + end +end From d4bafabfd14887e61eb5bc1d877035dcfebbd33f Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 9 Dec 2019 10:39:14 +0100 Subject: [PATCH 027/581] Beginnings of the create validator --- .../object_validators/create_validator.ex | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 lib/pleroma/web/activity_pub/object_validators/create_validator.ex diff --git a/lib/pleroma/web/activity_pub/object_validators/create_validator.ex b/lib/pleroma/web/activity_pub/object_validators/create_validator.ex new file mode 100644 index 000000000..bd90f7250 --- /dev/null +++ b/lib/pleroma/web/activity_pub/object_validators/create_validator.ex @@ -0,0 +1,31 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateNoteValidator do + use Ecto.Schema + + alias Pleroma.Web.ActivityPub.ObjectValidators.Types + alias Pleroma.Web.ActivityPub.ObjectValidators.NoteValidator + + import Ecto.Changeset + + @primary_key false + + embedded_schema do + field(:id, :string, primary_key: true) + field(:actor, Types.ObjectID) + field(:type, :string) + field(:to, {:array, :string}) + field(:cc, {:array, :string}) + field(:bto, {:array, :string}, default: []) + field(:bcc, {:array, :string}, default: []) + + embeds_one(:object, NoteValidator) + end + + def cast_data(data) do + %__MODULE__{} + |> cast(data, __schema__(:fields)) + end +end From cd040691bd28fea1437b8f1c39bb914465e1ff46 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Mon, 10 Feb 2020 09:01:45 +0300 Subject: [PATCH 028/581] maked `unread_count` as virtual field --- lib/pleroma/marker.ex | 31 ++- lib/pleroma/notification.ex | 14 +- .../controllers/marker_controller.ex | 8 +- mix.lock | 192 +++++++++--------- ....exs => 20200210050658_update_markers.exs} | 15 +- test/marker_test.exs | 14 +- test/notification_test.exs | 5 +- 7 files changed, 123 insertions(+), 156 deletions(-) rename priv/repo/migrations/{20191030202008_add_unread_to_marker.exs => 20200210050658_update_markers.exs} (68%) diff --git a/lib/pleroma/marker.ex b/lib/pleroma/marker.ex index 2d217a0b7..dab97d8b6 100644 --- a/lib/pleroma/marker.ex +++ b/lib/pleroma/marker.ex @@ -21,7 +21,7 @@ defmodule Pleroma.Marker do field(:last_read_id, :string, default: "") field(:timeline, :string, default: "") field(:lock_version, :integer, default: 0) - field(:unread_count, :integer, default: 0) + field(:unread_count, :integer, default: 0, virtual: true) belongs_to(:user, User, type: FlakeId.Ecto.CompatType) timestamps() @@ -33,14 +33,15 @@ defmodule Pleroma.Marker do opts: `recount_unread` - run force recount unread notifications for `true` value """ - @spec get_markers(User.t(), list(String), map()) :: list(t()) - def get_markers(user, timelines \\ [], opts \\ %{}) do + @spec get_markers(User.t(), list(String)) :: list(t()) + def get_markers(user, timelines \\ []) do user |> get_query(timelines) - |> recount_unread_notifications(opts[:recount_unread]) + |> unread_count_query() |> Repo.all() end + @spec upsert(User.t(), map()) :: {:ok | :error, any()} def upsert(%User{} = user, attrs) do attrs |> Map.take(@timelines) @@ -52,22 +53,18 @@ def upsert(%User{} = user, attrs) do Multi.insert(multi, timeline, marker, returning: true, - on_conflict: {:replace, [:last_read_id, :unread_count]}, + on_conflict: {:replace, [:last_read_id]}, conflict_target: [:user_id, :timeline] ) end) |> Repo.transaction() end - @spec multi_set_unread_count(Multi.t(), User.t(), String.t()) :: Multi.t() - def multi_set_unread_count(multi, %User{} = user, "notifications") do + @spec multi_set_last_read_id(Multi.t(), User.t(), String.t()) :: Multi.t() + def multi_set_last_read_id(multi, %User{} = user, "notifications") do multi |> Multi.run(:counters, fn _repo, _changes -> - {:ok, - %{ - unread_count: Repo.aggregate(Notification.unread_count_query(user), :count, :id), - last_read_id: Repo.one(Notification.last_read_query(user)) - }} + {:ok, %{last_read_id: Repo.one(Notification.last_read_query(user))}} end) |> Multi.insert( :marker, @@ -77,12 +74,12 @@ def multi_set_unread_count(multi, %User{} = user, "notifications") do |> Ecto.Changeset.change() end, returning: true, - on_conflict: {:replace, [:last_read_id, :unread_count]}, + on_conflict: {:replace, [:last_read_id]}, conflict_target: [:user_id, :timeline] ) end - def multi_set_unread_count(multi, _, _), do: multi + def multi_set_last_read_id(multi, _, _), do: multi defp get_marker(user, timeline) do case Repo.find_resource(get_query(user, timeline)) do @@ -94,7 +91,7 @@ defp get_marker(user, timeline) do @doc false defp changeset(marker, attrs) do marker - |> cast(attrs, [:last_read_id, :unread_count]) + |> cast(attrs, [:last_read_id]) |> validate_required([:user_id, :timeline, :last_read_id]) |> validate_inclusion(:timeline, @timelines) end @@ -111,7 +108,7 @@ defp get_query(user, timelines) do |> by_timeline(timelines) end - defp recount_unread_notifications(query, true) do + defp unread_count_query(query) do from( q in query, left_join: n in "notifications", @@ -122,6 +119,4 @@ defp recount_unread_notifications(query, true) do } ) end - - defp recount_unread_notifications(query, _), do: query end diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 2e4fe2edb..70fd97bfa 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -38,14 +38,6 @@ def changeset(%Notification{} = notification, attrs) do |> cast(attrs, [:seen]) end - @spec unread_count_query(User.t()) :: Ecto.Queryable.t() - def unread_count_query(user) do - from(q in Pleroma.Notification, - where: q.user_id == ^user.id, - where: q.seen == false - ) - end - @spec last_read_query(User.t()) :: Ecto.Queryable.t() def last_read_query(user) do from(q in Pleroma.Notification, @@ -229,7 +221,7 @@ def set_read_up_to(%{id: user_id} = user, id) do {:ok, %{ids: {_, notification_ids}}} = Multi.new() |> Multi.update_all(:ids, query, set: [seen: true, updated_at: NaiveDateTime.utc_now()]) - |> Marker.multi_set_unread_count(user, "notifications") + |> Marker.multi_set_last_read_id(user, "notifications") |> Repo.transaction() Notification @@ -253,7 +245,7 @@ def read_one(%User{} = user, notification_id) do with {:ok, %Notification{} = notification} <- get(user, notification_id) do Multi.new() |> Multi.update(:update, changeset(notification, %{seen: true})) - |> Marker.multi_set_unread_count(user, "notifications") + |> Marker.multi_set_last_read_id(user, "notifications") |> Repo.transaction() |> case do {:ok, %{update: notification}} -> {:ok, notification} @@ -340,7 +332,7 @@ def create_notification(%Activity{} = activity, %User{} = user) do {:ok, %{notification: notification}} = Multi.new() |> Multi.insert(:notification, %Notification{user_id: user.id, activity: activity}) - |> Marker.multi_set_unread_count(user, "notifications") + |> Marker.multi_set_last_read_id(user, "notifications") |> Repo.transaction() ["user", "user:notification"] diff --git a/lib/pleroma/web/mastodon_api/controllers/marker_controller.ex b/lib/pleroma/web/mastodon_api/controllers/marker_controller.ex index 6649ffbda..ce025624d 100644 --- a/lib/pleroma/web/mastodon_api/controllers/marker_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/marker_controller.ex @@ -18,13 +18,7 @@ defmodule Pleroma.Web.MastodonAPI.MarkerController do # GET /api/v1/markers def index(%{assigns: %{user: user}} = conn, params) do - markers = - Pleroma.Marker.get_markers( - user, - params["timeline"], - %{recount_unread: true} - ) - + markers = Pleroma.Marker.get_markers(user, params["timeline"]) render(conn, "markers.json", %{markers: markers}) end diff --git a/mix.lock b/mix.lock index b8a35a795..1893e7e41 100644 --- a/mix.lock +++ b/mix.lock @@ -1,112 +1,112 @@ %{ - "accept": {:hex, :accept, "0.3.5", "b33b127abca7cc948bbe6caa4c263369abf1347cfa9d8e699c6d214660f10cd1", [:rebar3], [], "hexpm"}, + "accept": {:hex, :accept, "0.3.5", "b33b127abca7cc948bbe6caa4c263369abf1347cfa9d8e699c6d214660f10cd1", [:rebar3], [], "hexpm", "11b18c220bcc2eab63b5470c038ef10eb6783bcb1fcdb11aa4137defa5ac1bb8"}, "auto_linker": {:git, "https://git.pleroma.social/pleroma/auto_linker.git", "95e8188490e97505c56636c1379ffdf036c1fdde", [ref: "95e8188490e97505c56636c1379ffdf036c1fdde"]}, - "base62": {:hex, :base62, "1.2.1", "4866763e08555a7b3917064e9eef9194c41667276c51b59de2bc42c6ea65f806", [:mix], [{:custom_base, "~> 0.2.1", [hex: :custom_base, repo: "hexpm", optional: false]}], "hexpm"}, - "base64url": {:hex, :base64url, "0.0.1", "36a90125f5948e3afd7be97662a1504b934dd5dac78451ca6e9abf85a10286be", [:rebar], [], "hexpm"}, - "bbcode": {:hex, :bbcode, "0.1.1", "0023e2c7814119b2e620b7add67182e3f6019f92bfec9a22da7e99821aceba70", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm"}, - "benchee": {:hex, :benchee, "1.0.1", "66b211f9bfd84bd97e6d1beaddf8fc2312aaabe192f776e8931cb0c16f53a521", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}], "hexpm"}, - "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm"}, - "cachex": {:hex, :cachex, "3.0.3", "4e2d3e05814a5738f5ff3903151d5c25636d72a3527251b753f501ad9c657967", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm"}, - "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"}, + "base62": {:hex, :base62, "1.2.1", "4866763e08555a7b3917064e9eef9194c41667276c51b59de2bc42c6ea65f806", [:mix], [{:custom_base, "~> 0.2.1", [hex: :custom_base, repo: "hexpm", optional: false]}], "hexpm", "3b29948de2013d3f93aa898c884a9dff847e7aec75d9d6d8c1dc4c61c2716c42"}, + "base64url": {:hex, :base64url, "0.0.1", "36a90125f5948e3afd7be97662a1504b934dd5dac78451ca6e9abf85a10286be", [:rebar], [], "hexpm", "fab09b20e3f5db886725544cbcf875b8e73ec93363954eb8a1a9ed834aa8c1f9"}, + "bbcode": {:hex, :bbcode, "0.1.1", "0023e2c7814119b2e620b7add67182e3f6019f92bfec9a22da7e99821aceba70", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "5a981b98ac7d366a9b6bf40eac389aaf4d6e623c631e6b6f8a6b571efaafd338"}, + "benchee": {:hex, :benchee, "1.0.1", "66b211f9bfd84bd97e6d1beaddf8fc2312aaabe192f776e8931cb0c16f53a521", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}], "hexpm", "3ad58ae787e9c7c94dd7ceda3b587ec2c64604563e049b2a0e8baafae832addb"}, + "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"}, + "cachex": {:hex, :cachex, "3.0.3", "4e2d3e05814a5738f5ff3903151d5c25636d72a3527251b753f501ad9c657967", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm", "3aadb1e605747122f60aa7b0b121cca23c14868558157563b3f3e19ea929f7d0"}, + "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"]}, - "certifi": {:hex, :certifi, "2.5.1", "867ce347f7c7d78563450a18a6a28a8090331e77fa02380b4a21962a65d36ee5", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm"}, - "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm"}, - "comeonin": {:hex, :comeonin, "4.1.2", "3eb5620fd8e35508991664b4c2b04dd41e52f1620b36957be837c1d7784b7592", [:mix], [{:argon2_elixir, "~> 1.2", [hex: :argon2_elixir, repo: "hexpm", optional: true]}, {:bcrypt_elixir, "~> 0.12.1 or ~> 1.0", [hex: :bcrypt_elixir, repo: "hexpm", optional: true]}, {:pbkdf2_elixir, "~> 0.12", [hex: :pbkdf2_elixir, repo: "hexpm", optional: true]}], "hexpm"}, - "connection": {:hex, :connection, "1.0.4", "a1cae72211f0eef17705aaededacac3eb30e6625b04a6117c1b2db6ace7d5976", [:mix], [], "hexpm"}, - "cors_plug": {:hex, :cors_plug, "1.5.2", "72df63c87e4f94112f458ce9d25800900cc88608c1078f0e4faddf20933eda6e", [:mix], [{:plug, "~> 1.3 or ~> 1.4 or ~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, - "cowboy": {:hex, :cowboy, "2.7.0", "91ed100138a764355f43316b1d23d7ff6bdb0de4ea618cb5d8677c93a7a2f115", [:rebar3], [{:cowlib, "~> 2.8.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.7.1", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm"}, - "cowlib": {:hex, :cowlib, "2.8.0", "fd0ff1787db84ac415b8211573e9a30a3ebe71b5cbff7f720089972b2319c8a4", [:rebar3], [], "hexpm"}, - "credo": {:hex, :credo, "1.1.5", "caec7a3cadd2e58609d7ee25b3931b129e739e070539ad1a0cd7efeeb47014f4", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm"}, - "crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"}, + "certifi": {:hex, :certifi, "2.5.1", "867ce347f7c7d78563450a18a6a28a8090331e77fa02380b4a21962a65d36ee5", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm", "805abd97539caf89ec6d4732c91e62ba9da0cda51ac462380bbd28ee697a8c42"}, + "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, + "comeonin": {:hex, :comeonin, "4.1.2", "3eb5620fd8e35508991664b4c2b04dd41e52f1620b36957be837c1d7784b7592", [:mix], [{:argon2_elixir, "~> 1.2", [hex: :argon2_elixir, repo: "hexpm", optional: true]}, {:bcrypt_elixir, "~> 0.12.1 or ~> 1.0", [hex: :bcrypt_elixir, repo: "hexpm", optional: true]}, {:pbkdf2_elixir, "~> 0.12", [hex: :pbkdf2_elixir, repo: "hexpm", optional: true]}], "hexpm", "d8700a0ca4dbb616c22c9b3f6dd539d88deaafec3efe66869d6370c9a559b3e9"}, + "connection": {:hex, :connection, "1.0.4", "a1cae72211f0eef17705aaededacac3eb30e6625b04a6117c1b2db6ace7d5976", [:mix], [], "hexpm", "4a0850c9be22a43af9920a71ab17c051f5f7d45c209e40269a1938832510e4d9"}, + "cors_plug": {:hex, :cors_plug, "1.5.2", "72df63c87e4f94112f458ce9d25800900cc88608c1078f0e4faddf20933eda6e", [:mix], [{:plug, "~> 1.3 or ~> 1.4 or ~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "9af027d20dc12dd0c4345a6b87247e0c62965871feea0bfecf9764648b02cc69"}, + "cowboy": {:hex, :cowboy, "2.7.0", "91ed100138a764355f43316b1d23d7ff6bdb0de4ea618cb5d8677c93a7a2f115", [:rebar3], [{:cowlib, "~> 2.8.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.7.1", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "04fd8c6a39edc6aaa9c26123009200fc61f92a3a94f3178c527b70b767c6e605"}, + "cowlib": {:hex, :cowlib, "2.8.0", "fd0ff1787db84ac415b8211573e9a30a3ebe71b5cbff7f720089972b2319c8a4", [:rebar3], [], "hexpm", "79f954a7021b302186a950a32869dbc185523d99d3e44ce430cd1f3289f41ed4"}, + "credo": {:hex, :credo, "1.1.5", "caec7a3cadd2e58609d7ee25b3931b129e739e070539ad1a0cd7efeeb47014f4", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "d0bbd3222607ccaaac5c0340f7f525c627ae4d7aee6c8c8c108922620c5b6446"}, + "crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "48e513299cd28b12c77266c0ed5b1c844368e5c1823724994ae84834f43d6bbe"}, "crypt": {:git, "https://github.com/msantos/crypt", "1f2b58927ab57e72910191a7ebaeff984382a1d3", [ref: "1f2b58927ab57e72910191a7ebaeff984382a1d3"]}, - "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm"}, - "db_connection": {:hex, :db_connection, "2.2.0", "e923e88887cd60f9891fd324ac5e0290954511d090553c415fbf54be4c57ee63", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm"}, - "decimal": {:hex, :decimal, "1.8.1", "a4ef3f5f3428bdbc0d35374029ffcf4ede8533536fa79896dd450168d9acdf3c", [:mix], [], "hexpm"}, - "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm"}, - "earmark": {:hex, :earmark, "1.4.2", "3aa0bd23bc4c61cf2f1e5d752d1bb470560a6f8539974f767a38923bb20e1d7f", [:mix], [], "hexpm"}, - "ecto": {:hex, :ecto, "3.3.1", "82ab74298065bf0c64ca299f6c6785e68ea5d6b980883ee80b044499df35aba1", [:mix], [{:decimal, "~> 1.6", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm"}, - "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm"}, - "ecto_sql": {:hex, :ecto_sql, "3.3.2", "92804e0de69bb63e621273c3492252cb08a29475c05d40eeb6f41ad2d483cfd3", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm"}, - "esshd": {:hex, :esshd, "0.1.0", "6f93a2062adb43637edad0ea7357db2702a4b80dd9683482fe00f5134e97f4c1", [:mix], [], "hexpm"}, - "eternal": {:hex, :eternal, "1.2.1", "d5b6b2499ba876c57be2581b5b999ee9bdf861c647401066d3eeed111d096bc4", [:mix], [], "hexpm"}, + "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, + "db_connection": {:hex, :db_connection, "2.2.0", "e923e88887cd60f9891fd324ac5e0290954511d090553c415fbf54be4c57ee63", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm", "bdf196feedfa6b83071e808b2b086fb113f8a1c4c7761f6eff6fe4b96aba0086"}, + "decimal": {:hex, :decimal, "1.8.1", "a4ef3f5f3428bdbc0d35374029ffcf4ede8533536fa79896dd450168d9acdf3c", [:mix], [], "hexpm", "3cb154b00225ac687f6cbd4acc4b7960027c757a5152b369923ead9ddbca7aec"}, + "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, + "earmark": {:hex, :earmark, "1.4.2", "3aa0bd23bc4c61cf2f1e5d752d1bb470560a6f8539974f767a38923bb20e1d7f", [:mix], [], "hexpm", "5e8806285d8a3a8999bd38e4a73c58d28534c856bc38c44818e5ba85bbda16fb"}, + "ecto": {:hex, :ecto, "3.3.1", "82ab74298065bf0c64ca299f6c6785e68ea5d6b980883ee80b044499df35aba1", [:mix], [{:decimal, "~> 1.6", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "e6c614dfe3bcff2d575ce16d815dbd43f4ee1844599a83de1eea81976a31c174"}, + "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, + "ecto_sql": {:hex, :ecto_sql, "3.3.2", "92804e0de69bb63e621273c3492252cb08a29475c05d40eeb6f41ad2d483cfd3", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b82d89d4e6a9f7f7f04783b07e8b0af968e0be2f01ee4b39047fe727c5c07471"}, + "esshd": {:hex, :esshd, "0.1.0", "6f93a2062adb43637edad0ea7357db2702a4b80dd9683482fe00f5134e97f4c1", [:mix], [], "hexpm", "98d0f3c6f4b8a0333170df770c6fe772b3d04564fb514c1a09504cf5ab2f48a5"}, + "eternal": {:hex, :eternal, "1.2.1", "d5b6b2499ba876c57be2581b5b999ee9bdf861c647401066d3eeed111d096bc4", [:mix], [], "hexpm", "b14f1dc204321429479c569cfbe8fb287541184ed040956c8862cb7a677b8406"}, "ex2ms": {:hex, :ex2ms, "1.5.0", "19e27f9212be9a96093fed8cdfbef0a2b56c21237196d26760f11dfcfae58e97", [:mix], [], "hexpm"}, - "ex_aws": {:hex, :ex_aws, "2.1.1", "1e4de2106cfbf4e837de41be41cd15813eabc722315e388f0d6bb3732cec47cd", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "1.6.3 or 1.6.5 or 1.7.1 or 1.8.6 or ~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8", [hex: :jsx, repo: "hexpm", optional: true]}, {:poison, ">= 1.2.0", [hex: :poison, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm"}, - "ex_aws_s3": {:hex, :ex_aws_s3, "2.0.2", "c0258bbdfea55de4f98f0b2f0ca61fe402cc696f573815134beb1866e778f47b", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm"}, - "ex_const": {:hex, :ex_const, "0.2.4", "d06e540c9d834865b012a17407761455efa71d0ce91e5831e86881b9c9d82448", [:mix], [], "hexpm"}, - "ex_doc": {:hex, :ex_doc, "0.21.2", "caca5bc28ed7b3bdc0b662f8afe2bee1eedb5c3cf7b322feeeb7c6ebbde089d6", [:mix], [{:earmark, "~> 1.3.3 or ~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm"}, - "ex_machina": {:hex, :ex_machina, "2.3.0", "92a5ad0a8b10ea6314b876a99c8c9e3f25f4dde71a2a835845b136b9adaf199a", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm"}, + "ex_aws": {:hex, :ex_aws, "2.1.1", "1e4de2106cfbf4e837de41be41cd15813eabc722315e388f0d6bb3732cec47cd", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "1.6.3 or 1.6.5 or 1.7.1 or 1.8.6 or ~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8", [hex: :jsx, repo: "hexpm", optional: true]}, {:poison, ">= 1.2.0", [hex: :poison, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "06b6fde12b33bb6d65d5d3493e903ba5a56d57a72350c15285a4298338089e10"}, + "ex_aws_s3": {:hex, :ex_aws_s3, "2.0.2", "c0258bbdfea55de4f98f0b2f0ca61fe402cc696f573815134beb1866e778f47b", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "0569f5b211b1a3b12b705fe2a9d0e237eb1360b9d76298028df2346cad13097a"}, + "ex_const": {:hex, :ex_const, "0.2.4", "d06e540c9d834865b012a17407761455efa71d0ce91e5831e86881b9c9d82448", [:mix], [], "hexpm", "96fd346610cc992b8f896ed26a98be82ac4efb065a0578f334a32d60a3ba9767"}, + "ex_doc": {:hex, :ex_doc, "0.21.2", "caca5bc28ed7b3bdc0b662f8afe2bee1eedb5c3cf7b322feeeb7c6ebbde089d6", [:mix], [{:earmark, "~> 1.3.3 or ~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "f1155337ae17ff7a1255217b4c1ceefcd1860b7ceb1a1874031e7a861b052e39"}, + "ex_machina": {:hex, :ex_machina, "2.3.0", "92a5ad0a8b10ea6314b876a99c8c9e3f25f4dde71a2a835845b136b9adaf199a", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "b84f6af156264530b312a8ab98ac6088f6b77ae5fe2058305c81434aa01fbaf9"}, "ex_syslogger": {:git, "https://github.com/slashmili/ex_syslogger.git", "f3963399047af17e038897c69e20d552e6899e1d", [tag: "1.4.0"]}, - "excoveralls": {:hex, :excoveralls, "0.11.2", "0c6f2c8db7683b0caa9d490fb8125709c54580b4255ffa7ad35f3264b075a643", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm"}, - "fast_html": {:hex, :fast_html, "1.0.1", "5bc7df4dc4607ec2c314c16414e4111d79a209956c4f5df96602d194c61197f9", [:make, :mix], [], "hexpm"}, - "fast_sanitize": {:hex, :fast_sanitize, "0.1.6", "60a5ae96879956dea409a91a77f5dd2994c24cc10f80eefd8f9892ee4c0c7b25", [:mix], [{:fast_html, "~> 1.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, - "flake_id": {:hex, :flake_id, "0.1.0", "7716b086d2e405d09b647121a166498a0d93d1a623bead243e1f74216079ccb3", [:mix], [{:base62, "~> 1.2", [hex: :base62, repo: "hexpm", optional: false]}, {:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"}, - "floki": {:hex, :floki, "0.23.1", "e100306ce7d8841d70a559748e5091542e2cfc67ffb3ade92b89a8435034dab1", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm"}, - "gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm"}, - "gen_stage": {:hex, :gen_stage, "0.14.3", "d0c66f1c87faa301c1a85a809a3ee9097a4264b2edf7644bf5c123237ef732bf", [:mix], [], "hexpm"}, - "gen_state_machine": {:hex, :gen_state_machine, "2.0.5", "9ac15ec6e66acac994cc442dcc2c6f9796cf380ec4b08267223014be1c728a95", [:mix], [], "hexpm"}, - "gettext": {:hex, :gettext, "0.17.1", "8baab33482df4907b3eae22f719da492cee3981a26e649b9c2be1c0192616962", [:mix], [], "hexpm"}, - "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"}, - "html_entities": {:hex, :html_entities, "0.5.0", "40f5c5b9cbe23073b48a4e69c67b6c11974f623a76165e2b92d098c0e88ccb1d", [:mix], [], "hexpm"}, + "excoveralls": {:hex, :excoveralls, "0.11.2", "0c6f2c8db7683b0caa9d490fb8125709c54580b4255ffa7ad35f3264b075a643", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "e11a4490976aabeed3eb9dc70ec94a4f2d11fed5c9d4b5dc5d89bfa0a215abb5"}, + "fast_html": {:hex, :fast_html, "1.0.1", "5bc7df4dc4607ec2c314c16414e4111d79a209956c4f5df96602d194c61197f9", [:make, :mix], [], "hexpm", "18e627dd62051a375ef94b197f41e8027c3e8eef0180ab8f81e0543b3dc6900a"}, + "fast_sanitize": {:hex, :fast_sanitize, "0.1.6", "60a5ae96879956dea409a91a77f5dd2994c24cc10f80eefd8f9892ee4c0c7b25", [:mix], [{:fast_html, "~> 1.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "b73f50f0cb522dd0331ea8e8c90b408de42c50f37641219d6364f0e3e7efd22c"}, + "flake_id": {:hex, :flake_id, "0.1.0", "7716b086d2e405d09b647121a166498a0d93d1a623bead243e1f74216079ccb3", [:mix], [{:base62, "~> 1.2", [hex: :base62, repo: "hexpm", optional: false]}, {:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "31fc8090fde1acd267c07c36ea7365b8604055f897d3a53dd967658c691bd827"}, + "floki": {:hex, :floki, "0.23.1", "e100306ce7d8841d70a559748e5091542e2cfc67ffb3ade92b89a8435034dab1", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "39b431b6330206cadee418e793177401ebedf2e86abc945ddd545aedb37dfc19"}, + "gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm", "29bd14a88030980849c7ed2447b8db6d6c9278a28b11a44cafe41b791205440f"}, + "gen_stage": {:hex, :gen_stage, "0.14.3", "d0c66f1c87faa301c1a85a809a3ee9097a4264b2edf7644bf5c123237ef732bf", [:mix], [], "hexpm", "8453e2289d94c3199396eb517d65d6715ef26bcae0ee83eb5ff7a84445458d76"}, + "gen_state_machine": {:hex, :gen_state_machine, "2.0.5", "9ac15ec6e66acac994cc442dcc2c6f9796cf380ec4b08267223014be1c728a95", [:mix], [], "hexpm", "5cacd405e72b2609a7e1f891bddb80c53d0b3b7b0036d1648e7382ca108c41c8"}, + "gettext": {:hex, :gettext, "0.17.1", "8baab33482df4907b3eae22f719da492cee3981a26e649b9c2be1c0192616962", [:mix], [], "hexpm", "f7d97341e536f95b96eef2988d6d4230f7262cf239cda0e2e63123ee0b717222"}, + "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"}, + "html_entities": {:hex, :html_entities, "0.5.0", "40f5c5b9cbe23073b48a4e69c67b6c11974f623a76165e2b92d098c0e88ccb1d", [:mix], [], "hexpm", "8e9186e1873bea1067895f6a542b59df6c9fcf3b516ba272eeff3ea0c7b755cd"}, "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.1", "2ce5bf6e535cd0ab02e905ba8c276580bab80052c5c549f53ddea52d72e81f33", [:mix], [{:hackney, "~> 1.15 and >= 1.15.2", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"}, - "idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm"}, - "inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm"}, - "jason": {:hex, :jason, "1.1.2", "b03dedea67a99223a2eaf9f1264ce37154564de899fd3d8b9a21b1a6fd64afe7", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm"}, - "joken": {:hex, :joken, "2.1.0", "bf21a73105d82649f617c5e59a7f8919aa47013d2519ebcc39d998d8d12adda9", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm"}, - "jose": {:hex, :jose, "1.9.0", "4167c5f6d06ffaebffd15cdb8da61a108445ef5e85ab8f5a7ad926fdf3ada154", [:mix, :rebar3], [{:base64url, "~> 0.0.1", [hex: :base64url, repo: "hexpm", optional: false]}], "hexpm"}, - "libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm"}, - "makeup": {:hex, :makeup, "1.0.0", "671df94cf5a594b739ce03b0d0316aa64312cee2574b6a44becb83cd90fb05dc", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm"}, - "makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm"}, - "meck": {:hex, :meck, "0.8.13", "ffedb39f99b0b99703b8601c6f17c7f76313ee12de6b646e671e3188401f7866", [:rebar3], [], "hexpm"}, - "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"}, - "mime": {:hex, :mime, "1.3.1", "30ce04ab3175b6ad0bdce0035cba77bba68b813d523d1aac73d9781b4d193cf8", [:mix], [], "hexpm"}, - "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm"}, + "httpoison": {:hex, :httpoison, "1.6.1", "2ce5bf6e535cd0ab02e905ba8c276580bab80052c5c549f53ddea52d72e81f33", [:mix], [{:hackney, "~> 1.15 and >= 1.15.2", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "89149056039084024a284cd703b2d1900d584958dba432132cb21ef35aed7487"}, + "idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "4bdd305eb64e18b0273864920695cb18d7a2021f31a11b9c5fbcd9a253f936e2"}, + "inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm", "64a2d30189704ae41ca7dbdd587f5291db5d1dda1414e0774c29ffc81088c1bc"}, + "jason": {:hex, :jason, "1.1.2", "b03dedea67a99223a2eaf9f1264ce37154564de899fd3d8b9a21b1a6fd64afe7", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fdf843bca858203ae1de16da2ee206f53416bbda5dc8c9e78f43243de4bc3afe"}, + "joken": {:hex, :joken, "2.1.0", "bf21a73105d82649f617c5e59a7f8919aa47013d2519ebcc39d998d8d12adda9", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "eb02df7d5526df13063397e051b926b7006d5986d66f399eefc474f560cdad6a"}, + "jose": {:hex, :jose, "1.9.0", "4167c5f6d06ffaebffd15cdb8da61a108445ef5e85ab8f5a7ad926fdf3ada154", [:mix, :rebar3], [{:base64url, "~> 0.0.1", [hex: :base64url, repo: "hexpm", optional: false]}], "hexpm", "6429c4fee52b2dda7861ee19a4f09c8c1ffa213bee3a1ec187828fde95d447ed"}, + "libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm", "1feaf05ee886815ad047cad7ede17d6910710986148ae09cf73eee2989717b81"}, + "makeup": {:hex, :makeup, "1.0.0", "671df94cf5a594b739ce03b0d0316aa64312cee2574b6a44becb83cd90fb05dc", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "a10c6eb62cca416019663129699769f0c2ccf39428b3bb3c0cb38c718a0c186d"}, + "makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "d4b316c7222a85bbaa2fd7c6e90e37e953257ad196dc229505137c5e505e9eff"}, + "meck": {:hex, :meck, "0.8.13", "ffedb39f99b0b99703b8601c6f17c7f76313ee12de6b646e671e3188401f7866", [:rebar3], [], "hexpm", "d34f013c156db51ad57cc556891b9720e6a1c1df5fe2e15af999c84d6cebeb1a"}, + "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, + "mime": {:hex, :mime, "1.3.1", "30ce04ab3175b6ad0bdce0035cba77bba68b813d523d1aac73d9781b4d193cf8", [:mix], [], "hexpm", "6cbe761d6a0ca5a31a0931bf4c63204bceb64538e664a8ecf784a9a6f3b875f1"}, + "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, "mochiweb": {:hex, :mochiweb, "2.18.0", "eb55f1db3e6e960fac4e6db4e2db9ec3602cc9f30b86cd1481d56545c3145d2e", [:rebar3], [], "hexpm"}, - "mock": {:hex, :mock, "0.3.4", "c5862eb3b8c64237f45f586cf00c9d892ba07bb48305a43319d428ce3c2897dd", [:mix], [{:meck, "~> 0.8.13", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm"}, - "mogrify": {:hex, :mogrify, "0.6.1", "de1b527514f2d95a7bbe9642eb556061afb337e220cf97adbf3a4e6438ed70af", [:mix], [], "hexpm"}, - "mox": {:hex, :mox, "0.5.1", "f86bb36026aac1e6f924a4b6d024b05e9adbed5c63e8daa069bd66fb3292165b", [:mix], [], "hexpm"}, + "mock": {:hex, :mock, "0.3.4", "c5862eb3b8c64237f45f586cf00c9d892ba07bb48305a43319d428ce3c2897dd", [:mix], [{:meck, "~> 0.8.13", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "e6d886252f1a41f4ba06ecf2b4c8d38760b34b1c08a11c28f7397b2e03995964"}, + "mogrify": {:hex, :mogrify, "0.6.1", "de1b527514f2d95a7bbe9642eb556061afb337e220cf97adbf3a4e6438ed70af", [:mix], [], "hexpm", "3bc928d817974fa10cc11e6c89b9a9361e37e96dbbf3d868c41094ec05745dcd"}, + "mox": {:hex, :mox, "0.5.1", "f86bb36026aac1e6f924a4b6d024b05e9adbed5c63e8daa069bd66fb3292165b", [:mix], [], "hexpm", "052346cf322311c49a0f22789f3698eea030eec09b8c47367f0686ef2634ae14"}, "myhtmlex": {:git, "https://git.pleroma.social/pleroma/myhtmlex.git", "ad0097e2f61d4953bfef20fb6abddf23b87111e6", [ref: "ad0097e2f61d4953bfef20fb6abddf23b87111e6", submodules: true]}, - "nimble_parsec": {:hex, :nimble_parsec, "0.5.1", "c90796ecee0289dbb5ad16d3ad06f957b0cd1199769641c961cfe0b97db190e0", [:mix], [], "hexpm"}, + "nimble_parsec": {:hex, :nimble_parsec, "0.5.1", "c90796ecee0289dbb5ad16d3ad06f957b0cd1199769641c961cfe0b97db190e0", [:mix], [], "hexpm", "00e3ebdc821fb3a36957320d49e8f4bfa310d73ea31c90e5f925dc75e030da8f"}, "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, - "oban": {:hex, :oban, "0.12.1", "695e9490c6e0edfca616d80639528e448bd29b3bff7b7dd10a56c79b00a5d7fb", [:mix], [{:ecto_sql, "~> 3.1", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm"}, - "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm"}, - "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "0.12.4", "8dd29ed783f2e12195d7e0a4640effc0a7c37e6537da491f1db01839eee6d053", [:mix], [], "hexpm"}, - "phoenix": {:hex, :phoenix, "1.4.10", "619e4a545505f562cd294df52294372d012823f4fd9d34a6657a8b242898c255", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm"}, - "phoenix_ecto": {:hex, :phoenix_ecto, "4.0.0", "c43117a136e7399ea04ecaac73f8f23ee0ffe3e07acfcb8062fe5f4c9f0f6531", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, - "phoenix_html": {:hex, :phoenix_html, "2.13.3", "850e292ff6e204257f5f9c4c54a8cb1f6fbc16ed53d360c2b780a3d0ba333867", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, - "phoenix_pubsub": {:hex, :phoenix_pubsub, "1.1.2", "496c303bdf1b2e98a9d26e89af5bba3ab487ba3a3735f74bf1f4064d2a845a3e", [:mix], [], "hexpm"}, - "phoenix_swoosh": {:hex, :phoenix_swoosh, "0.2.0", "a7e0b32077cd6d2323ae15198839b05d9caddfa20663fd85787479e81f89520e", [:mix], [{:phoenix, "~> 1.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.2", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 0.1", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm"}, - "plug": {:hex, :plug, "1.9.0", "8d7c4e26962283ff9f8f3347bd73838e2413fbc38b7bb5467d5924f68f3a5a4a", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.1.0", "b75768153c3a8a9e8039d4b25bb9b14efbc58e9c4a6e6a270abff1cd30cbe320", [:mix], [{:cowboy, "~> 2.5", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, - "plug_crypto": {:hex, :plug_crypto, "1.0.0", "18e49317d3fa343f24620ed22795ec29d4a5e602d52d1513ccea0b07d8ea7d4d", [:mix], [], "hexpm"}, - "plug_static_index_html": {:hex, :plug_static_index_html, "1.0.0", "840123d4d3975585133485ea86af73cb2600afd7f2a976f9f5fd8b3808e636a0", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, - "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm"}, - "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm"}, - "postgrex": {:hex, :postgrex, "0.15.3", "5806baa8a19a68c4d07c7a624ccdb9b57e89cbc573f1b98099e3741214746ae4", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm"}, - "prometheus": {:hex, :prometheus, "4.4.1", "1e96073b3ed7788053768fea779cbc896ddc3bdd9ba60687f2ad50b252ac87d6", [:mix, :rebar3], [], "hexpm"}, - "prometheus_ecto": {:hex, :prometheus_ecto, "1.4.3", "3dd4da1812b8e0dbee81ea58bb3b62ed7588f2eae0c9e97e434c46807ff82311", [:mix], [{:ecto, "~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm"}, - "prometheus_ex": {:hex, :prometheus_ex, "3.0.5", "fa58cfd983487fc5ead331e9a3e0aa622c67232b3ec71710ced122c4c453a02f", [:mix], [{:prometheus, "~> 4.0", [hex: :prometheus, repo: "hexpm", optional: false]}], "hexpm"}, - "prometheus_phoenix": {:hex, :prometheus_phoenix, "1.3.0", "c4b527e0b3a9ef1af26bdcfbfad3998f37795b9185d475ca610fe4388fdd3bb5", [:mix], [{:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.3 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm"}, - "prometheus_plugs": {:hex, :prometheus_plugs, "1.1.5", "25933d48f8af3a5941dd7b621c889749894d8a1082a6ff7c67cc99dec26377c5", [:mix], [{:accept, "~> 0.1", [hex: :accept, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}, {:prometheus_process_collector, "~> 1.1", [hex: :prometheus_process_collector, repo: "hexpm", optional: true]}], "hexpm"}, - "quack": {:hex, :quack, "0.1.1", "cca7b4da1a233757fdb44b3334fce80c94785b3ad5a602053b7a002b5a8967bf", [:mix], [{:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: false]}, {:tesla, "~> 1.2.0", [hex: :tesla, repo: "hexpm", optional: false]}], "hexpm"}, - "quantum": {:hex, :quantum, "2.3.4", "72a0e8855e2adc101459eac8454787cb74ab4169de6ca50f670e72142d4960e9", [:mix], [{:calendar, "~> 0.17", [hex: :calendar, repo: "hexpm", optional: true]}, {:crontab, "~> 1.1", [hex: :crontab, repo: "hexpm", optional: false]}, {:gen_stage, "~> 0.12", [hex: :gen_stage, repo: "hexpm", optional: false]}, {:swarm, "~> 3.3", [hex: :swarm, repo: "hexpm", optional: false]}, {:timex, "~> 3.1", [hex: :timex, repo: "hexpm", optional: true]}], "hexpm"}, - "ranch": {:hex, :ranch, "1.7.1", "6b1fab51b49196860b733a49c07604465a47bdb78aa10c1c16a3d199f7f8c881", [:rebar3], [], "hexpm"}, + "oban": {:hex, :oban, "0.12.1", "695e9490c6e0edfca616d80639528e448bd29b3bff7b7dd10a56c79b00a5d7fb", [:mix], [{:ecto_sql, "~> 3.1", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c1d58d69b8b5a86e7167abbb8cc92764a66f25f12f6172052595067fc6a30a17"}, + "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, + "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "0.12.4", "8dd29ed783f2e12195d7e0a4640effc0a7c37e6537da491f1db01839eee6d053", [:mix], [], "hexpm", "595d09db74cb093b1903381c9de423276a931a2480a46a1a5dc7f932a2a6375b"}, + "phoenix": {:hex, :phoenix, "1.4.10", "619e4a545505f562cd294df52294372d012823f4fd9d34a6657a8b242898c255", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "256ad7a140efadc3f0290470369da5bd3de985ec7c706eba07c2641b228974be"}, + "phoenix_ecto": {:hex, :phoenix_ecto, "4.0.0", "c43117a136e7399ea04ecaac73f8f23ee0ffe3e07acfcb8062fe5f4c9f0f6531", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "fe15d9fee5b82f5e64800502011ffe530650d42e1710ae9b14bc4c9be38bf303"}, + "phoenix_html": {:hex, :phoenix_html, "2.13.3", "850e292ff6e204257f5f9c4c54a8cb1f6fbc16ed53d360c2b780a3d0ba333867", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "8b01b3d6d39731ab18aa548d928b5796166d2500755f553725cfe967bafba7d9"}, + "phoenix_pubsub": {:hex, :phoenix_pubsub, "1.1.2", "496c303bdf1b2e98a9d26e89af5bba3ab487ba3a3735f74bf1f4064d2a845a3e", [:mix], [], "hexpm", "1f13f9f0f3e769a667a6b6828d29dec37497a082d195cc52dbef401a9b69bf38"}, + "phoenix_swoosh": {:hex, :phoenix_swoosh, "0.2.0", "a7e0b32077cd6d2323ae15198839b05d9caddfa20663fd85787479e81f89520e", [:mix], [{:phoenix, "~> 1.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.2", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 0.1", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "ebf1bfa7b3c1c850c04929afe02e2e0d7ab135e0706332c865de03e761676b1f"}, + "plug": {:hex, :plug, "1.9.0", "8d7c4e26962283ff9f8f3347bd73838e2413fbc38b7bb5467d5924f68f3a5a4a", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "9902eda2c52ada2a096434682e99a2493f5d06a94d6ac6bcfff9805f952350f1"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.1.0", "b75768153c3a8a9e8039d4b25bb9b14efbc58e9c4a6e6a270abff1cd30cbe320", [:mix], [{:cowboy, "~> 2.5", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "6cd8ddd1bd1fbfa54d3fc61d4719c2057dae67615395d58d40437a919a46f132"}, + "plug_crypto": {:hex, :plug_crypto, "1.0.0", "18e49317d3fa343f24620ed22795ec29d4a5e602d52d1513ccea0b07d8ea7d4d", [:mix], [], "hexpm", "73c1682f0e414cfb5d9b95c8e8cd6ffcfdae699e3b05e1db744e58b7be857759"}, + "plug_static_index_html": {:hex, :plug_static_index_html, "1.0.0", "840123d4d3975585133485ea86af73cb2600afd7f2a976f9f5fd8b3808e636a0", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "79fd4fcf34d110605c26560cbae8f23c603ec4158c08298bd4360fdea90bb5cf"}, + "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"}, + "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, + "postgrex": {:hex, :postgrex, "0.15.3", "5806baa8a19a68c4d07c7a624ccdb9b57e89cbc573f1b98099e3741214746ae4", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "4737ce62a31747b4c63c12b20c62307e51bb4fcd730ca0c32c280991e0606c90"}, + "prometheus": {:hex, :prometheus, "4.4.1", "1e96073b3ed7788053768fea779cbc896ddc3bdd9ba60687f2ad50b252ac87d6", [:mix, :rebar3], [], "hexpm", "d39f2ce1f3f29f3bf04f915aa3cf9c7cd4d2cee2f975e05f526e06cae9b7c902"}, + "prometheus_ecto": {:hex, :prometheus_ecto, "1.4.3", "3dd4da1812b8e0dbee81ea58bb3b62ed7588f2eae0c9e97e434c46807ff82311", [:mix], [{:ecto, "~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "8d66289f77f913b37eda81fd287340c17e61a447549deb28efc254532b2bed82"}, + "prometheus_ex": {:hex, :prometheus_ex, "3.0.5", "fa58cfd983487fc5ead331e9a3e0aa622c67232b3ec71710ced122c4c453a02f", [:mix], [{:prometheus, "~> 4.0", [hex: :prometheus, repo: "hexpm", optional: false]}], "hexpm", "9fd13404a48437e044b288b41f76e64acd9735fb8b0e3809f494811dfa66d0fb"}, + "prometheus_phoenix": {:hex, :prometheus_phoenix, "1.3.0", "c4b527e0b3a9ef1af26bdcfbfad3998f37795b9185d475ca610fe4388fdd3bb5", [:mix], [{:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.3 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "c4d1404ac4e9d3d963da601db2a7d8ea31194f0017057fabf0cfb9bf5a6c8c75"}, + "prometheus_plugs": {:hex, :prometheus_plugs, "1.1.5", "25933d48f8af3a5941dd7b621c889749894d8a1082a6ff7c67cc99dec26377c5", [:mix], [{:accept, "~> 0.1", [hex: :accept, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}, {:prometheus_process_collector, "~> 1.1", [hex: :prometheus_process_collector, repo: "hexpm", optional: true]}], "hexpm", "0273a6483ccb936d79ca19b0ab629aef0dba958697c94782bb728b920dfc6a79"}, + "quack": {:hex, :quack, "0.1.1", "cca7b4da1a233757fdb44b3334fce80c94785b3ad5a602053b7a002b5a8967bf", [:mix], [{:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: false]}, {:tesla, "~> 1.2.0", [hex: :tesla, repo: "hexpm", optional: false]}], "hexpm", "d736bfa7444112eb840027bb887832a0e403a4a3437f48028c3b29a2dbbd2543"}, + "quantum": {:hex, :quantum, "2.3.4", "72a0e8855e2adc101459eac8454787cb74ab4169de6ca50f670e72142d4960e9", [:mix], [{:calendar, "~> 0.17", [hex: :calendar, repo: "hexpm", optional: true]}, {:crontab, "~> 1.1", [hex: :crontab, repo: "hexpm", optional: false]}, {:gen_stage, "~> 0.12", [hex: :gen_stage, repo: "hexpm", optional: false]}, {:swarm, "~> 3.3", [hex: :swarm, repo: "hexpm", optional: false]}, {:timex, "~> 3.1", [hex: :timex, repo: "hexpm", optional: true]}], "hexpm", "6de553ba9ac0668d3728b699d5065543f3e40c854154017461ee8c09038752da"}, + "ranch": {:hex, :ranch, "1.7.1", "6b1fab51b49196860b733a49c07604465a47bdb78aa10c1c16a3d199f7f8c881", [:rebar3], [], "hexpm", "451d8527787df716d99dc36162fca05934915db0b6141bbdac2ea8d3c7afc7d7"}, "recon": {:git, "https://github.com/ferd/recon.git", "75d70c7c08926d2f24f1ee6de14ee50fe8a52763", [tag: "2.4.0"]}, "remote_ip": {:git, "https://git.pleroma.social/pleroma/remote_ip.git", "825dc00aaba5a1b7c4202a532b696b595dd3bcb3", [ref: "825dc00aaba5a1b7c4202a532b696b595dd3bcb3"]}, - "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.5", "6eaf7ad16cb568bb01753dbbd7a95ff8b91c7979482b95f38443fe2c8852a79b", [:make, :mix, :rebar3], [], "hexpm"}, - "swarm": {:hex, :swarm, "3.4.0", "64f8b30055d74640d2186c66354b33b999438692a91be275bb89cdc7e401f448", [:mix], [{:gen_state_machine, "~> 2.0", [hex: :gen_state_machine, repo: "hexpm", optional: false]}, {:libring, "~> 1.0", [hex: :libring, repo: "hexpm", optional: false]}], "hexpm"}, - "sweet_xml": {:hex, :sweet_xml, "0.6.6", "fc3e91ec5dd7c787b6195757fbcf0abc670cee1e4172687b45183032221b66b8", [:mix], [], "hexpm"}, - "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"}, + "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.5", "6eaf7ad16cb568bb01753dbbd7a95ff8b91c7979482b95f38443fe2c8852a79b", [:make, :mix, :rebar3], [], "hexpm", "13104d7897e38ed7f044c4de953a6c28597d1c952075eb2e328bc6d6f2bfc496"}, + "swarm": {:hex, :swarm, "3.4.0", "64f8b30055d74640d2186c66354b33b999438692a91be275bb89cdc7e401f448", [:mix], [{:gen_state_machine, "~> 2.0", [hex: :gen_state_machine, repo: "hexpm", optional: false]}, {:libring, "~> 1.0", [hex: :libring, repo: "hexpm", optional: false]}], "hexpm", "94884f84783fc1ba027aba8fe8a7dae4aad78c98e9f9c76667ec3471585c08c6"}, + "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": {:git, "https://github.com/Vagabond/erlang-syslog.git", "4a6c6f2c996483e86c1320e9553f91d337bcb6aa", [tag: "1.0.5"]}, - "telemetry": {:hex, :telemetry, "0.4.1", "ae2718484892448a24470e6aa341bc847c3277bfb8d4e9289f7474d752c09c7f", [:rebar3], [], "hexpm"}, - "tesla": {:hex, :tesla, "1.3.0", "f35d72f029e608f9cdc6f6d6fcc7c66cf6d6512a70cfef9206b21b8bd0203a30", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, "~> 1.3", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "~> 4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 0.4", [hex: :mint, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.3", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm"}, - "timex": {:hex, :timex, "3.6.1", "efdf56d0e67a6b956cc57774353b0329c8ab7726766a11547e529357ffdc1d56", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5 or ~> 1.0.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm"}, - "trailing_format_plug": {:hex, :trailing_format_plug, "0.0.7", "64b877f912cf7273bed03379936df39894149e35137ac9509117e59866e10e45", [:mix], [{:plug, "> 0.12.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, - "tzdata": {:hex, :tzdata, "0.5.22", "f2ba9105117ee0360eae2eca389783ef7db36d533899b2e84559404dbc77ebb8", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"}, - "ueberauth": {:hex, :ueberauth, "0.6.2", "25a31111249d60bad8b65438b2306a4dc91f3208faa62f5a8c33e8713989b2e8", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, - "unicode_util_compat": {:hex, :unicode_util_compat, "0.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm"}, - "unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm"}, - "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"}, + "telemetry": {:hex, :telemetry, "0.4.1", "ae2718484892448a24470e6aa341bc847c3277bfb8d4e9289f7474d752c09c7f", [:rebar3], [], "hexpm", "4738382e36a0a9a2b6e25d67c960e40e1a2c95560b9f936d8e29de8cd858480f"}, + "tesla": {:hex, :tesla, "1.3.0", "f35d72f029e608f9cdc6f6d6fcc7c66cf6d6512a70cfef9206b21b8bd0203a30", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, "~> 1.3", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "~> 4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 0.4", [hex: :mint, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.3", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "93a7cacc5ca47997759cfa1d3ab25501d291e490908006d5be56f37f89d96693"}, + "timex": {:hex, :timex, "3.6.1", "efdf56d0e67a6b956cc57774353b0329c8ab7726766a11547e529357ffdc1d56", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5 or ~> 1.0.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "f354efb2400dd7a80fd9eb6c8419068c4f632da4ac47f3d8822d6e33f08bc852"}, + "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"}, + "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", []}, } diff --git a/priv/repo/migrations/20191030202008_add_unread_to_marker.exs b/priv/repo/migrations/20200210050658_update_markers.exs similarity index 68% rename from priv/repo/migrations/20191030202008_add_unread_to_marker.exs rename to priv/repo/migrations/20200210050658_update_markers.exs index 2b3abc682..b280e156c 100644 --- a/priv/repo/migrations/20191030202008_add_unread_to_marker.exs +++ b/priv/repo/migrations/20200210050658_update_markers.exs @@ -1,25 +1,17 @@ -defmodule Pleroma.Repo.Migrations.AddUnreadToMarker do +defmodule Pleroma.Repo.Migrations.UpdateMarkers do use Ecto.Migration import Ecto.Query alias Pleroma.Repo def up do - alter table(:markers) do - add_if_not_exists(:unread_count, :integer, default: 0) - end - - flush() - update_markers() end def down do - alter table(:markers) do - remove_if_exists(:unread_count, :integer) - end + :ok end - def update_markers do + defp update_markers do now = NaiveDateTime.utc_now() markers_attrs = @@ -27,7 +19,6 @@ def update_markers do select: %{ timeline: "notifications", user_id: q.user_id, - unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END )"), last_read_id: type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) }, diff --git a/test/marker_test.exs b/test/marker_test.exs index 7b1d2218a..54c710691 100644 --- a/test/marker_test.exs +++ b/test/marker_test.exs @@ -15,7 +15,7 @@ test "returns multi" do assert %Ecto.Multi{ operations: [marker: {:run, _}, counters: {:run, _}] } = - Marker.multi_set_unread_count( + Marker.multi_set_last_read_id( Ecto.Multi.new(), user, "notifications" @@ -25,19 +25,12 @@ test "returns multi" do test "return empty multi" do user = insert(:user) multi = Ecto.Multi.new() - assert Marker.multi_set_unread_count(multi, user, "home") == multi + assert Marker.multi_set_last_read_id(multi, user, "home") == multi end end describe "get_markers/2" do test "returns user markers" do - user = insert(:user) - marker = insert(:marker, user: user) - insert(:marker, timeline: "home", user: user) - assert Marker.get_markers(user, ["notifications"]) == [refresh_record(marker)] - end - - test "returns user markers with recount unread notifications" do user = insert(:user) marker = insert(:marker, user: user) insert(:notification, user: user) @@ -46,8 +39,7 @@ test "returns user markers with recount unread notifications" do assert Marker.get_markers( user, - ["notifications"], - %{recount_unread: true} + ["notifications"] ) == [%Marker{refresh_record(marker) | unread_count: 2}] end end diff --git a/test/notification_test.exs b/test/notification_test.exs index c9b352097..49a79b2d3 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -338,12 +338,15 @@ test "it sets all notifications as read up to a specified notification ID" do assert n2.seen == true assert n3.seen == false - assert %Pleroma.Marker{unread_count: 1} = + assert %Pleroma.Marker{} = + m = Pleroma.Repo.get_by( Pleroma.Marker, user_id: other_user.id, timeline: "notifications" ) + + assert m.last_read_id == to_string(n2.id) end end From 3830cb538bd3aaee3fc48bc97b57230a558b98cf Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Mon, 10 Feb 2020 09:14:15 +0300 Subject: [PATCH 029/581] removed a comments --- lib/pleroma/marker.ex | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/pleroma/marker.ex b/lib/pleroma/marker.ex index dab97d8b6..ff5f60351 100644 --- a/lib/pleroma/marker.ex +++ b/lib/pleroma/marker.ex @@ -27,12 +27,7 @@ defmodule Pleroma.Marker do timestamps() end - @doc """ - Gets markers by user and timeline. - - opts: - `recount_unread` - run force recount unread notifications for `true` value - """ + @doc "Gets markers by user and timeline." @spec get_markers(User.t(), list(String)) :: list(t()) def get_markers(user, timelines \\ []) do user From 514c899275a32e6ef63305f9424c50344d41b12e Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 11 Feb 2020 10:12:57 +0300 Subject: [PATCH 030/581] adding gun adapter --- CHANGELOG.md | 1 + config/config.exs | 67 +- config/description.exs | 2 +- config/test.exs | 2 + docs/API/admin_api.md | 2 + docs/configuration/cheatsheet.md | 36 +- lib/mix/tasks/pleroma/benchmark.ex | 39 + lib/mix/tasks/pleroma/emoji.ex | 9 +- lib/pleroma/application.ex | 90 +- lib/pleroma/config/config_db.ex | 11 - lib/pleroma/config/transfer_task.ex | 43 +- lib/pleroma/gun/api.ex | 26 + lib/pleroma/gun/api/mock.ex | 151 +++ lib/pleroma/gun/conn.ex | 29 + lib/pleroma/gun/gun.ex | 45 + lib/pleroma/http/adapter.ex | 64 ++ lib/pleroma/http/adapter/gun.ex | 123 +++ lib/pleroma/http/adapter/hackney.ex | 41 + lib/pleroma/http/connection.ex | 113 ++- lib/pleroma/http/http.ex | 156 ++- lib/pleroma/http/request.ex | 23 + lib/pleroma/http/request_builder.ex | 107 +- lib/pleroma/object/fetcher.ex | 6 +- lib/pleroma/otp_version.ex | 63 ++ lib/pleroma/pool/connections.ex | 415 ++++++++ lib/pleroma/pool/pool.ex | 22 + lib/pleroma/pool/request.ex | 72 ++ lib/pleroma/pool/supervisor.ex | 36 + lib/pleroma/reverse_proxy/client.ex | 26 +- lib/pleroma/reverse_proxy/client/hackney.ex | 24 + lib/pleroma/reverse_proxy/client/tesla.ex | 87 ++ lib/pleroma/reverse_proxy/reverse_proxy.ex | 20 +- .../mrf/media_proxy_warming_policy.ex | 14 +- lib/pleroma/web/rel_me.ex | 18 +- lib/pleroma/web/rich_media/parser.ex | 18 +- lib/pleroma/web/web_finger/web_finger.ex | 2 +- mix.exs | 4 + mix.lock | 2 + test/activity/ir/topics_test.exs | 2 +- test/config/config_db_test.exs | 8 - test/fixtures/warnings/otp_version/21.1 | 1 + test/fixtures/warnings/otp_version/22.1 | 1 + test/fixtures/warnings/otp_version/22.4 | 1 + test/fixtures/warnings/otp_version/23.0 | 1 + test/fixtures/warnings/otp_version/error | 1 + test/fixtures/warnings/otp_version/undefined | 1 + test/gun/gun_test.exs | 33 + test/http/adapter/gun_test.exs | 266 +++++ test/http/adapter/hackney_test.exs | 54 + test/http/adapter_test.exs | 65 ++ test/http/connection_test.exs | 142 +++ test/http/request_builder_test.exs | 30 +- test/http_test.exs | 35 +- test/notification_test.exs | 7 + test/otp_version_test.exs | 58 ++ test/pool/connections_test.exs | 959 ++++++++++++++++++ test/reverse_proxy/client/tesla_test.exs | 93 ++ .../reverse_proxy_test.exs | 121 ++- test/support/http_request_mock.ex | 94 +- test/user_invite_token_test.exs | 4 - .../admin_api/admin_api_controller_test.exs | 9 +- test/web/common_api/common_api_utils_test.exs | 7 + test/web/push/impl_test.exs | 2 +- 63 files changed, 3615 insertions(+), 389 deletions(-) create mode 100644 lib/pleroma/gun/api.ex create mode 100644 lib/pleroma/gun/api/mock.ex create mode 100644 lib/pleroma/gun/conn.ex create mode 100644 lib/pleroma/gun/gun.ex create mode 100644 lib/pleroma/http/adapter.ex create mode 100644 lib/pleroma/http/adapter/gun.ex create mode 100644 lib/pleroma/http/adapter/hackney.ex create mode 100644 lib/pleroma/http/request.ex create mode 100644 lib/pleroma/otp_version.ex create mode 100644 lib/pleroma/pool/connections.ex create mode 100644 lib/pleroma/pool/pool.ex create mode 100644 lib/pleroma/pool/request.ex create mode 100644 lib/pleroma/pool/supervisor.ex create mode 100644 lib/pleroma/reverse_proxy/client/hackney.ex create mode 100644 lib/pleroma/reverse_proxy/client/tesla.ex create mode 100644 test/fixtures/warnings/otp_version/21.1 create mode 100644 test/fixtures/warnings/otp_version/22.1 create mode 100644 test/fixtures/warnings/otp_version/22.4 create mode 100644 test/fixtures/warnings/otp_version/23.0 create mode 100644 test/fixtures/warnings/otp_version/error create mode 100644 test/fixtures/warnings/otp_version/undefined create mode 100644 test/gun/gun_test.exs create mode 100644 test/http/adapter/gun_test.exs create mode 100644 test/http/adapter/hackney_test.exs create mode 100644 test/http/adapter_test.exs create mode 100644 test/http/connection_test.exs create mode 100644 test/otp_version_test.exs create mode 100644 test/pool/connections_test.exs create mode 100644 test/reverse_proxy/client/tesla_test.exs rename test/{ => reverse_proxy}/reverse_proxy_test.exs (79%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e838983b..48080503a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -73,6 +73,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Support for custom Elixir modules (such as MRF policies) - User settings: Add _This account is a_ option. - OAuth: admin scopes support (relevant setting: `[:auth, :enforce_oauth_admin_scope_usage]`). +- New HTTP adapter [gun](https://github.com/ninenines/gun). Gun adapter requires OTP version older that 22.2, otherwise pleroma won’t start. For hackney OTP update is not required.
API Changes diff --git a/config/config.exs b/config/config.exs index ccc0c4e52..27091393b 100644 --- a/config/config.exs +++ b/config/config.exs @@ -58,20 +58,6 @@ config :pleroma, Pleroma.Captcha.Kocaptcha, endpoint: "https://captcha.kotobank.ch" -config :pleroma, :hackney_pools, - federation: [ - max_connections: 50, - timeout: 150_000 - ], - media: [ - max_connections: 50, - timeout: 150_000 - ], - upload: [ - max_connections: 25, - timeout: 300_000 - ] - # Upload configuration config :pleroma, Pleroma.Upload, uploader: Pleroma.Uploaders.Local, @@ -185,20 +171,12 @@ } config :tesla, adapter: Tesla.Adapter.Hackney - # Configures http settings, upstream proxy etc. config :pleroma, :http, proxy_url: nil, send_user_agent: true, user_agent: :default, - adapter: [ - 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"] - ] - ] + adapter: [] config :pleroma, :instance, name: "Pleroma", @@ -612,6 +590,49 @@ config :pleroma, configurable_from_database: false +config :pleroma, :connections_pool, + receive_connection_timeout: 250, + max_connections: 250, + retry: 5, + retry_timeout: 100, + await_up_timeout: 5_000 + +config :pleroma, :pools, + federation: [ + size: 50, + max_overflow: 10, + timeout: 150_000 + ], + media: [ + size: 50, + max_overflow: 10, + timeout: 150_000 + ], + upload: [ + size: 25, + max_overflow: 5, + timeout: 300_000 + ], + default: [ + size: 10, + max_overflow: 2, + timeout: 10_000 + ] + +config :pleroma, :hackney_pools, + federation: [ + max_connections: 50, + timeout: 150_000 + ], + media: [ + max_connections: 50, + timeout: 150_000 + ], + upload: [ + max_connections: 25, + timeout: 300_000 + ] + # Import environment specific config. This must remain at the bottom # of this file so it overrides the configuration defined above. import_config "#{Mix.env()}.exs" diff --git a/config/description.exs b/config/description.exs index efea7c137..d5322fa33 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2728,7 +2728,7 @@ key: :adapter, type: :module, description: "Tesla adapter", - suggestions: [Tesla.Adapter.Hackney] + suggestions: [Tesla.Adapter.Hackney, Tesla.Adapter.Gun] } ] }, diff --git a/config/test.exs b/config/test.exs index 078c46205..83783cf8f 100644 --- a/config/test.exs +++ b/config/test.exs @@ -94,6 +94,8 @@ config :pleroma, :modules, runtime_dir: "test/fixtures/modules" +config :pleroma, Pleroma.Gun.API, Pleroma.Gun.API.Mock + if File.exists?("./config/test.secret.exs") do import_config "test.secret.exs" else diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index fb6dfcb08..cd8123c5d 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -731,6 +731,8 @@ Some modifications are necessary to save the config settings correctly: Most of the settings will be applied in `runtime`, this means that you don't need to restart the instance. But some settings are applied in `compile time` and require a reboot of the instance, such as: - all settings inside these keys: - `:hackney_pools` + - `:connections_pool` + - `:pools` - `:chat` - partially settings inside these keys: - `:seconds_valid` in `Pleroma.Captcha` diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 2bd935983..1c67eca35 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -368,8 +368,7 @@ Available caches: * `proxy_url`: an upstream proxy to fetch posts and/or media with, (default: `nil`) * `send_user_agent`: should we include a user agent with HTTP requests? (default: `true`) * `user_agent`: what user agent should we use? (default: `:default`), must be string or `:default` -* `adapter`: array of hackney options - +* `adapter`: array of adapter options ### :hackney_pools @@ -388,6 +387,39 @@ For each pool, the options are: * `timeout` - retention duration for connections +### :connections_pool + +*For `gun` adapter* + +Advanced settings for connections pool. Pool with opened connections. These connections can be reused in worker pools. + +* `:receive_connection_timeout` - timeout to receive connection from pool. Default: 250ms. +* `:max_connections` - maximum number of connections in the pool. Default: 250 connections. +* `:retry` - number of retries, while `gun` will try to reconnect if connections goes down. Default: 5. +* `:retry_timeout` - timeout while `gun` will try to reconnect. Default: 100ms. +* `:await_up_timeout` - timeout while `gun` will wait until connection is up. Default: 5000ms. + +### :pools + +*For `gun` adapter* + +Advanced settings for workers pools. + +There's four pools used: + +* `:federation` for the federation jobs. + You may want this pool max_connections to be at least equal to the number of federator jobs + retry queue jobs. +* `:media` for rich media, media proxy +* `:upload` for uploaded media (if using a remote uploader and `proxy_remote: true`) +* `:default` for other requests + +For each pool, the options are: + +* `:size` - how much workers the pool can hold +* `:timeout` - timeout while `gun` will wait for response +* `:max_overflow` - additional workers if pool is under load + + ## Captcha ### Pleroma.Captcha diff --git a/lib/mix/tasks/pleroma/benchmark.ex b/lib/mix/tasks/pleroma/benchmark.ex index 84dccf7f3..01e079136 100644 --- a/lib/mix/tasks/pleroma/benchmark.ex +++ b/lib/mix/tasks/pleroma/benchmark.ex @@ -74,4 +74,43 @@ def run(["render_timeline", nickname | _] = args) do inputs: inputs ) end + + def run(["adapters"]) do + start_pleroma() + + :ok = + Pleroma.Pool.Connections.open_conn( + "https://httpbin.org/stream-bytes/1500", + :gun_connections + ) + + Process.sleep(1_500) + + Benchee.run( + %{ + "Without conn and without pool" => fn -> + {:ok, %Tesla.Env{}} = + Pleroma.HTTP.get("https://httpbin.org/stream-bytes/1500", [], + adapter: [pool: :no_pool, receive_conn: false] + ) + end, + "Without conn and with pool" => fn -> + {:ok, %Tesla.Env{}} = + Pleroma.HTTP.get("https://httpbin.org/stream-bytes/1500", [], + adapter: [receive_conn: false] + ) + end, + "With reused conn and without pool" => fn -> + {:ok, %Tesla.Env{}} = + Pleroma.HTTP.get("https://httpbin.org/stream-bytes/1500", [], + adapter: [pool: :no_pool] + ) + end, + "With reused conn and with pool" => fn -> + {:ok, %Tesla.Env{}} = Pleroma.HTTP.get("https://httpbin.org/stream-bytes/1500") + end + }, + parallel: 10 + ) + end end diff --git a/lib/mix/tasks/pleroma/emoji.ex b/lib/mix/tasks/pleroma/emoji.ex index 24d999707..b4e8d3a0b 100644 --- a/lib/mix/tasks/pleroma/emoji.ex +++ b/lib/mix/tasks/pleroma/emoji.ex @@ -4,13 +4,13 @@ defmodule Mix.Tasks.Pleroma.Emoji do use Mix.Task + import Mix.Pleroma @shortdoc "Manages emoji packs" @moduledoc File.read!("docs/administration/CLI_tasks/emoji.md") def run(["ls-packs" | args]) do - Mix.Pleroma.start_pleroma() - Application.ensure_all_started(:hackney) + start_pleroma() {options, [], []} = parse_global_opts(args) @@ -36,8 +36,7 @@ def run(["ls-packs" | args]) do end def run(["get-packs" | args]) do - Mix.Pleroma.start_pleroma() - Application.ensure_all_started(:hackney) + start_pleroma() {options, pack_names, []} = parse_global_opts(args) @@ -135,7 +134,7 @@ def run(["get-packs" | args]) do end def run(["gen-pack", src]) do - Application.ensure_all_started(:hackney) + start_pleroma() proposed_name = Path.basename(src) |> Path.rootname() name = String.trim(IO.gets("Pack name [#{proposed_name}]: ")) diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 27758cf94..df6d3a98d 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -3,8 +3,12 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Application do - import Cachex.Spec use Application + + import Cachex.Spec + + alias Pleroma.Config + require Logger @name Mix.Project.config()[:name] @@ -18,9 +22,9 @@ def named_version, do: @name <> " " <> @version def repository, do: @repository def user_agent do - case Pleroma.Config.get([:http, :user_agent], :default) do + case Config.get([:http, :user_agent], :default) do :default -> - info = "#{Pleroma.Web.base_url()} <#{Pleroma.Config.get([:instance, :email], "")}>" + info = "#{Pleroma.Web.base_url()} <#{Config.get([:instance, :email], "")}>" named_version() <> "; " <> info custom -> @@ -32,7 +36,7 @@ def user_agent do # for more information on OTP Applications def start(_type, _args) do Pleroma.HTML.compile_scrubbers() - Pleroma.Config.DeprecationWarnings.warn() + Config.DeprecationWarnings.warn() Pleroma.Plugs.HTTPSecurityPlug.warn_if_disabled() Pleroma.Repo.check_migrations_applied!() setup_instrumenters() @@ -42,17 +46,17 @@ def start(_type, _args) do children = [ Pleroma.Repo, - Pleroma.Config.TransferTask, + Config.TransferTask, Pleroma.Emoji, Pleroma.Captcha, Pleroma.Plugs.RateLimiter.Supervisor ] ++ cachex_children() ++ - hackney_pool_children() ++ + http_pools_children(Config.get(:env)) ++ [ Pleroma.Stats, Pleroma.JobQueueMonitor, - {Oban, Pleroma.Config.get(Oban)} + {Oban, Config.get(Oban)} ] ++ task_children(@env) ++ streamer_child(@env) ++ @@ -62,6 +66,18 @@ def start(_type, _args) do Pleroma.Gopher.Server ] + case Pleroma.OTPVersion.check_version() do + :ok -> :ok + {:error, version} -> raise " + !!!OTP VERSION WARNING!!! + You are using gun adapter with OTP version #{version}, which doesn't support correct handling of unordered certificates chains. + " + :undefined -> raise " + !!!OTP VERSION WARNING!!! + To support correct handling of unordered certificates chains - OTP version must be > 22.2. + " + end + # See http://elixir-lang.org/docs/stable/elixir/Supervisor.html # for other strategies and supported options opts = [strategy: :one_for_one, name: Pleroma.Supervisor] @@ -69,7 +85,7 @@ def start(_type, _args) do end def load_custom_modules do - dir = Pleroma.Config.get([:modules, :runtime_dir]) + dir = Config.get([:modules, :runtime_dir]) if dir && File.exists?(dir) do dir @@ -110,20 +126,6 @@ defp setup_instrumenters do Pleroma.Web.Endpoint.Instrumenter.setup() end - def enabled_hackney_pools do - [:media] ++ - if Application.get_env(:tesla, :adapter) == Tesla.Adapter.Hackney do - [:federation] - else - [] - end ++ - if Pleroma.Config.get([Pleroma.Upload, :proxy_remote]) do - [:upload] - else - [] - end - end - defp cachex_children do [ build_cachex("used_captcha", ttl_interval: seconds_valid_interval()), @@ -145,7 +147,7 @@ defp idempotency_expiration, do: expiration(default: :timer.seconds(6 * 60 * 60), interval: :timer.seconds(60)) defp seconds_valid_interval, - do: :timer.seconds(Pleroma.Config.get!([Pleroma.Captcha, :seconds_valid])) + do: :timer.seconds(Config.get!([Pleroma.Captcha, :seconds_valid])) defp build_cachex(type, opts), do: %{ @@ -154,7 +156,7 @@ defp build_cachex(type, opts), type: :worker } - defp chat_enabled?, do: Pleroma.Config.get([:chat, :enabled]) + defp chat_enabled?, do: Config.get([:chat, :enabled]) defp streamer_child(:test), do: [] @@ -168,13 +170,6 @@ defp chat_child(_env, true) do defp chat_child(_, _), do: [] - defp hackney_pool_children do - for pool <- enabled_hackney_pools() do - options = Pleroma.Config.get([:hackney_pools, pool]) - :hackney_pool.child_spec(pool, options) - end - end - defp task_children(:test) do [ %{ @@ -199,4 +194,37 @@ defp task_children(_) do } ] end + + # start hackney and gun pools in tests + defp http_pools_children(:test) do + hackney_options = Config.get([:hackney_pools, :federation]) + hackney_pool = :hackney_pool.child_spec(:federation, hackney_options) + [hackney_pool, Pleroma.Pool.Supervisor] + end + + defp http_pools_children(_) do + :tesla + |> Application.get_env(:adapter) + |> http_pools() + end + + defp http_pools(Tesla.Adapter.Hackney) do + pools = [:federation, :media] + + pools = + if Config.get([Pleroma.Upload, :proxy_remote]) do + [:upload | pools] + else + pools + end + + for pool <- pools do + options = Config.get([:hackney_pools, pool]) + :hackney_pool.child_spec(pool, options) + end + end + + defp http_pools(Tesla.Adapter.Gun), do: [Pleroma.Pool.Supervisor] + + defp http_pools(_), do: [] end diff --git a/lib/pleroma/config/config_db.ex b/lib/pleroma/config/config_db.ex index 119251bee..bdacefa97 100644 --- a/lib/pleroma/config/config_db.ex +++ b/lib/pleroma/config/config_db.ex @@ -278,8 +278,6 @@ defp do_convert({:proxy_url, {type, host, port}}) do } end - defp do_convert({:partial_chain, entity}), do: %{"tuple" => [":partial_chain", inspect(entity)]} - defp do_convert(entity) when is_tuple(entity) do value = entity @@ -323,15 +321,6 @@ defp do_transform(%{"tuple" => [":proxy_url", %{"tuple" => [type, host, port]}]} {:proxy_url, {do_transform_string(type), parse_host(host), port}} end - defp do_transform(%{"tuple" => [":partial_chain", entity]}) do - {partial_chain, []} = - entity - |> String.replace(~r/[^\w|^{:,[|^,|^[|^\]^}|^\/|^\.|^"]^\s/, "") - |> Code.eval_string() - - {:partial_chain, partial_chain} - end - defp do_transform(%{"tuple" => entity}) do Enum.reduce(entity, {}, fn val, acc -> Tuple.append(acc, do_transform(val)) end) end diff --git a/lib/pleroma/config/transfer_task.ex b/lib/pleroma/config/transfer_task.ex index 6c5ba1f95..251074aaa 100644 --- a/lib/pleroma/config/transfer_task.ex +++ b/lib/pleroma/config/transfer_task.ex @@ -18,7 +18,10 @@ defmodule Pleroma.Config.TransferTask do {:pleroma, Oban}, {:pleroma, :rate_limit}, {:pleroma, :markup}, - {:plerome, :streamer} + {:pleroma, :streamer}, + {:pleroma, :pools}, + {:pleroma, :connections_pool}, + {:tesla, :adapter} ] @reboot_time_subkeys [ @@ -74,6 +77,28 @@ def load_and_update_env(deleted \\ [], restart_pleroma? \\ true) do end end + defp group_for_restart(:logger, key, _, merged_value) do + # change logger configuration in runtime, without restart + if Keyword.keyword?(merged_value) and + key not in [:compile_time_application, :backends, :compile_time_purge_matching] do + Logger.configure_backend(key, merged_value) + else + Logger.configure([{key, merged_value}]) + end + + nil + end + + defp group_for_restart(:tesla, _, _, _), do: :pleroma + + defp group_for_restart(group, _, _, _) when group != :pleroma, do: group + + defp group_for_restart(group, key, value, _) do + if pleroma_need_restart?(group, key, value) do + group + end + end + defp merge_and_update(setting) do try do key = ConfigDB.from_string(setting.key) @@ -95,21 +120,7 @@ defp merge_and_update(setting) do :ok = update_env(group, key, merged_value) - if group != :logger do - if group != :pleroma or pleroma_need_restart?(group, key, value) do - group - end - else - # change logger configuration in runtime, without restart - if Keyword.keyword?(merged_value) and - key not in [:compile_time_application, :backends, :compile_time_purge_matching] do - Logger.configure_backend(key, merged_value) - else - Logger.configure([{key, merged_value}]) - end - - nil - end + group_for_restart(group, key, value, merged_value) rescue error -> error_msg = diff --git a/lib/pleroma/gun/api.ex b/lib/pleroma/gun/api.ex new file mode 100644 index 000000000..a0c3c5415 --- /dev/null +++ b/lib/pleroma/gun/api.ex @@ -0,0 +1,26 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Gun.API do + @callback open(charlist(), pos_integer(), map()) :: {:ok, pid()} + @callback info(pid()) :: map() + @callback close(pid()) :: :ok + @callback await_up(pid) :: {:ok, atom()} | {:error, atom()} + @callback connect(pid(), map()) :: reference() + @callback await(pid(), reference()) :: {:response, :fin, 200, []} + + def open(host, port, opts), do: api().open(host, port, opts) + + def info(pid), do: api().info(pid) + + def close(pid), do: api().close(pid) + + def await_up(pid), do: api().await_up(pid) + + def connect(pid, opts), do: api().connect(pid, opts) + + def await(pid, ref), do: api().await(pid, ref) + + defp api, do: Pleroma.Config.get([Pleroma.Gun.API], Pleroma.Gun) +end diff --git a/lib/pleroma/gun/api/mock.ex b/lib/pleroma/gun/api/mock.ex new file mode 100644 index 000000000..0134b016e --- /dev/null +++ b/lib/pleroma/gun/api/mock.ex @@ -0,0 +1,151 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Gun.API.Mock do + @behaviour Pleroma.Gun.API + + alias Pleroma.Gun.API + + @impl API + def open('some-domain.com', 443, _) do + {:ok, conn_pid} = Task.start_link(fn -> Process.sleep(1_000) end) + + Registry.register(API.Mock, conn_pid, %{ + origin_scheme: "https", + origin_host: 'some-domain.com', + origin_port: 443 + }) + + {:ok, conn_pid} + end + + @impl API + def open(ip, port, _) + when ip in [{10_755, 10_368, 61_708, 131, 64_206, 45_068, 0, 9_694}, {127, 0, 0, 1}] and + port in [80, 443] do + {:ok, conn_pid} = Task.start_link(fn -> Process.sleep(1_000) end) + + scheme = if port == 443, do: "https", else: "http" + + Registry.register(API.Mock, conn_pid, %{ + origin_scheme: scheme, + origin_host: ip, + origin_port: port + }) + + {:ok, conn_pid} + end + + @impl API + def open('localhost', 1234, %{ + protocols: [:socks], + proxy: {:socks5, 'localhost', 1234}, + socks_opts: %{host: 'proxy-socks.com', port: 80, version: 5} + }) do + {:ok, conn_pid} = Task.start_link(fn -> Process.sleep(1_000) end) + + Registry.register(API.Mock, conn_pid, %{ + origin_scheme: "http", + origin_host: 'proxy-socks.com', + origin_port: 80 + }) + + {:ok, conn_pid} + end + + @impl API + def open('localhost', 1234, %{ + protocols: [:socks], + proxy: {:socks4, 'localhost', 1234}, + socks_opts: %{ + host: 'proxy-socks.com', + port: 443, + protocols: [:http2], + tls_opts: [], + transport: :tls, + version: 4 + } + }) do + {:ok, conn_pid} = Task.start_link(fn -> Process.sleep(1_000) end) + + Registry.register(API.Mock, conn_pid, %{ + origin_scheme: "https", + origin_host: 'proxy-socks.com', + origin_port: 443 + }) + + {:ok, conn_pid} + end + + @impl API + def open('gun-not-up.com', 80, _opts), do: {:error, :timeout} + + @impl API + def open('example.com', port, _) when port in [443, 115] do + {:ok, conn_pid} = Task.start_link(fn -> Process.sleep(1_000) end) + + Registry.register(API.Mock, conn_pid, %{ + origin_scheme: "https", + origin_host: 'example.com', + origin_port: 443 + }) + + {:ok, conn_pid} + end + + @impl API + def open(domain, 80, _) do + {:ok, conn_pid} = Task.start_link(fn -> Process.sleep(1_000) end) + + Registry.register(API.Mock, conn_pid, %{ + origin_scheme: "http", + origin_host: domain, + origin_port: 80 + }) + + {:ok, conn_pid} + end + + @impl API + def open({127, 0, 0, 1}, 8123, _) do + Task.start_link(fn -> Process.sleep(1_000) end) + end + + @impl API + def open('localhost', 9050, _) do + Task.start_link(fn -> Process.sleep(1_000) end) + end + + @impl API + def await_up(_pid), do: {:ok, :http} + + @impl API + def connect(pid, %{host: _, port: 80}) do + ref = make_ref() + Registry.register(API.Mock, ref, pid) + ref + end + + @impl API + def connect(pid, %{host: _, port: 443, protocols: [:http2], transport: :tls}) do + ref = make_ref() + Registry.register(API.Mock, ref, pid) + ref + end + + @impl API + def await(pid, ref) do + [{_, ^pid}] = Registry.lookup(API.Mock, ref) + {:response, :fin, 200, []} + end + + @impl API + def info(pid) do + [{_, info}] = Registry.lookup(API.Mock, pid) + info + end + + @impl API + def close(_pid), do: :ok +end diff --git a/lib/pleroma/gun/conn.ex b/lib/pleroma/gun/conn.ex new file mode 100644 index 000000000..2474829d6 --- /dev/null +++ b/lib/pleroma/gun/conn.ex @@ -0,0 +1,29 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Gun.Conn do + @moduledoc """ + Struct for gun connection data + """ + @type gun_state :: :up | :down + @type conn_state :: :active | :idle + + @type t :: %__MODULE__{ + conn: pid(), + gun_state: gun_state(), + conn_state: conn_state(), + used_by: [pid()], + last_reference: pos_integer(), + crf: float(), + retries: pos_integer() + } + + defstruct conn: nil, + gun_state: :open, + conn_state: :init, + used_by: [], + last_reference: 0, + crf: 1, + retries: 0 +end diff --git a/lib/pleroma/gun/gun.ex b/lib/pleroma/gun/gun.ex new file mode 100644 index 000000000..4a1bbc95f --- /dev/null +++ b/lib/pleroma/gun/gun.ex @@ -0,0 +1,45 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Gun do + @behaviour Pleroma.Gun.API + + alias Pleroma.Gun.API + + @gun_keys [ + :connect_timeout, + :http_opts, + :http2_opts, + :protocols, + :retry, + :retry_timeout, + :trace, + :transport, + :tls_opts, + :tcp_opts, + :socks_opts, + :ws_opts + ] + + @impl API + def open(host, port, opts \\ %{}), do: :gun.open(host, port, Map.take(opts, @gun_keys)) + + @impl API + defdelegate info(pid), to: :gun + + @impl API + defdelegate close(pid), to: :gun + + @impl API + defdelegate await_up(pid), to: :gun + + @impl API + defdelegate connect(pid, opts), to: :gun + + @impl API + defdelegate await(pid, ref), to: :gun + + @spec flush(pid() | reference()) :: :ok + defdelegate flush(pid), to: :gun +end diff --git a/lib/pleroma/http/adapter.ex b/lib/pleroma/http/adapter.ex new file mode 100644 index 000000000..6166a3eb4 --- /dev/null +++ b/lib/pleroma/http/adapter.ex @@ -0,0 +1,64 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.HTTP.Adapter do + alias Pleroma.HTTP.Connection + + @type proxy :: + {Connection.host(), pos_integer()} + | {Connection.proxy_type(), pos_integer()} + @type host_type :: :domain | :ip + + @callback options(keyword(), URI.t()) :: keyword() + @callback after_request(keyword()) :: :ok + + @spec options(keyword(), URI.t()) :: keyword() + def options(opts, _uri) do + proxy = Pleroma.Config.get([:http, :proxy_url], nil) + maybe_add_proxy(opts, format_proxy(proxy)) + end + + @spec maybe_get_conn(URI.t(), keyword()) :: keyword() + def maybe_get_conn(_uri, opts), do: opts + + @spec after_request(keyword()) :: :ok + def after_request(_opts), do: :ok + + @spec format_proxy(String.t() | tuple() | nil) :: proxy() | nil + def format_proxy(nil), do: nil + + def format_proxy(proxy_url) do + with {:ok, host, port} <- Connection.parse_proxy(proxy_url) do + {host, port} + else + {:ok, type, host, port} -> {type, host, port} + _ -> nil + end + end + + @spec maybe_add_proxy(keyword(), proxy() | nil) :: keyword() + def maybe_add_proxy(opts, nil), do: opts + def maybe_add_proxy(opts, proxy), do: Keyword.put_new(opts, :proxy, proxy) + + @spec domain_or_fallback(String.t()) :: charlist() + def domain_or_fallback(host) do + case domain_or_ip(host) do + {:domain, domain} -> domain + {:ip, _ip} -> to_charlist(host) + end + end + + @spec domain_or_ip(String.t()) :: {host_type(), Connection.host()} + def domain_or_ip(host) do + charlist = to_charlist(host) + + case :inet.parse_address(charlist) do + {:error, :einval} -> + {:domain, :idna.encode(charlist)} + + {:ok, ip} when is_tuple(ip) and tuple_size(ip) in [4, 8] -> + {:ip, ip} + end + end +end diff --git a/lib/pleroma/http/adapter/gun.ex b/lib/pleroma/http/adapter/gun.ex new file mode 100644 index 000000000..f25afeda7 --- /dev/null +++ b/lib/pleroma/http/adapter/gun.ex @@ -0,0 +1,123 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.HTTP.Adapter.Gun do + @behaviour Pleroma.HTTP.Adapter + + alias Pleroma.HTTP.Adapter + + require Logger + + alias Pleroma.Pool.Connections + + @defaults [ + connect_timeout: 20_000, + domain_lookup_timeout: 5_000, + tls_handshake_timeout: 5_000, + retry_timeout: 100, + await_up_timeout: 5_000 + ] + + @spec options(keyword(), URI.t()) :: keyword() + def options(connection_opts \\ [], %URI{} = uri) do + proxy = Pleroma.Config.get([:http, :proxy_url], nil) + + @defaults + |> Keyword.merge(Pleroma.Config.get([:http, :adapter], [])) + |> add_original(uri) + |> add_scheme_opts(uri) + |> Adapter.maybe_add_proxy(Adapter.format_proxy(proxy)) + |> maybe_get_conn(uri, connection_opts) + end + + @spec after_request(keyword()) :: :ok + def after_request(opts) do + with conn when not is_nil(conn) <- opts[:conn], + body_as when body_as != :chunks <- opts[:body_as] do + Connections.checkout(conn, self(), :gun_connections) + end + + :ok + end + + defp add_original(opts, %URI{host: host, port: port}) do + formatted_host = Adapter.domain_or_fallback(host) + + Keyword.put(opts, :original, "#{formatted_host}:#{port}") + end + + defp add_scheme_opts(opts, %URI{scheme: "http"}), do: opts + + defp add_scheme_opts(opts, %URI{scheme: "https", host: host, port: port}) do + adapter_opts = [ + certificates_verification: true, + tls_opts: [ + verify: :verify_peer, + cacertfile: CAStore.file_path(), + depth: 20, + reuse_sessions: false, + verify_fun: + {&:ssl_verify_hostname.verify_fun/3, [check_hostname: Adapter.domain_or_fallback(host)]} + ] + ] + + adapter_opts = + if port != 443 do + Keyword.put(adapter_opts, :transport, :tls) + else + adapter_opts + end + + Keyword.merge(opts, adapter_opts) + end + + defp maybe_get_conn(adapter_opts, uri, connection_opts) do + {receive_conn?, opts} = + adapter_opts + |> Keyword.merge(connection_opts) + |> Keyword.pop(:receive_conn, true) + + if Connections.alive?(:gun_connections) and receive_conn? do + try_to_get_conn(uri, opts) + else + opts + end + end + + defp try_to_get_conn(uri, opts) do + try do + case Connections.checkin(uri, :gun_connections) do + nil -> + Logger.info( + "Gun connections pool checkin was not succesfull. Trying to open conn for next request." + ) + + :ok = Connections.open_conn(uri, :gun_connections, opts) + opts + + conn when is_pid(conn) -> + Logger.debug("received conn #{inspect(conn)} #{Connections.compose_uri(uri)}") + + opts + |> Keyword.put(:conn, conn) + |> Keyword.put(:close_conn, false) + end + rescue + error -> + Logger.warn("Gun connections pool checkin caused error #{inspect(error)}") + opts + catch + :exit, {:timeout, _} -> + Logger.info( + "Gun connections pool checkin with timeout error #{Connections.compose_uri(uri)}" + ) + + opts + + :exit, error -> + Logger.warn("Gun pool checkin exited with error #{inspect(error)}") + opts + end + end +end diff --git a/lib/pleroma/http/adapter/hackney.ex b/lib/pleroma/http/adapter/hackney.ex new file mode 100644 index 000000000..00db30083 --- /dev/null +++ b/lib/pleroma/http/adapter/hackney.ex @@ -0,0 +1,41 @@ +defmodule Pleroma.HTTP.Adapter.Hackney do + @behaviour Pleroma.HTTP.Adapter + + @defaults [ + connect_timeout: 10_000, + recv_timeout: 20_000, + follow_redirect: true, + force_redirect: true, + pool: :federation + ] + + @spec options(keyword(), URI.t()) :: keyword() + def options(connection_opts \\ [], %URI{} = uri) do + proxy = Pleroma.Config.get([:http, :proxy_url], nil) + + @defaults + |> Keyword.merge(Pleroma.Config.get([:http, :adapter], [])) + |> Keyword.merge(connection_opts) + |> add_scheme_opts(uri) + |> Pleroma.HTTP.Adapter.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 + + def after_request(_), do: :ok +end diff --git a/lib/pleroma/http/connection.ex b/lib/pleroma/http/connection.ex index 7e2c6f5e8..85918341a 100644 --- a/lib/pleroma/http/connection.ex +++ b/lib/pleroma/http/connection.ex @@ -4,40 +4,99 @@ defmodule Pleroma.HTTP.Connection do @moduledoc """ - Connection for http-requests. + Configure Tesla.Client with default and customized adapter options. """ + @type ip_address :: ipv4_address() | ipv6_address() + @type ipv4_address :: {0..255, 0..255, 0..255, 0..255} + @type ipv6_address :: + {0..65_535, 0..65_535, 0..65_535, 0..65_535, 0..65_535, 0..65_535, 0..65_535, 0..65_535} + @type proxy_type() :: :socks4 | :socks5 + @type host() :: charlist() | ip_address() - @hackney_options [ - connect_timeout: 10_000, - recv_timeout: 20_000, - follow_redirect: true, - force_redirect: true, - pool: :federation - ] - @adapter Application.get_env(:tesla, :adapter) + @defaults [pool: :federation] + + require Logger + + alias Pleroma.Config + alias Pleroma.HTTP.Adapter @doc """ - Configure a client connection - - # Returns - - Tesla.Env.client + Merge default connection & adapter options with received ones. """ - @spec new(Keyword.t()) :: Tesla.Env.client() - def new(opts \\ []) do - Tesla.client([], {@adapter, hackney_options(opts)}) + + @spec options(URI.t(), keyword()) :: keyword() + def options(%URI{} = uri, opts \\ []) do + @defaults + |> pool_timeout() + |> Keyword.merge(opts) + |> adapter().options(uri) end - # fetch Hackney options - # - def hackney_options(opts) do - options = Keyword.get(opts, :adapter, []) - adapter_options = Pleroma.Config.get([:http, :adapter], []) - proxy_url = Pleroma.Config.get([:http, :proxy_url], nil) + defp pool_timeout(opts) do + timeout = + Config.get([:pools, opts[:pool], :timeout]) || Config.get([:pools, :default, :timeout]) - @hackney_options - |> Keyword.merge(adapter_options) - |> Keyword.merge(options) - |> Keyword.merge(proxy: proxy_url) + Keyword.merge(opts, timeout: timeout) + end + + @spec after_request(keyword()) :: :ok + def after_request(opts), do: adapter().after_request(opts) + + defp adapter do + case Application.get_env(:tesla, :adapter) do + Tesla.Adapter.Gun -> Adapter.Gun + Tesla.Adapter.Hackney -> Adapter.Hackney + _ -> Adapter + end + end + + @spec parse_proxy(String.t() | tuple() | nil) :: + {:ok, host(), pos_integer()} + | {:ok, proxy_type(), host(), pos_integer()} + | {:error, atom()} + | nil + + def parse_proxy(nil), do: nil + + def parse_proxy(proxy) when is_binary(proxy) do + with [host, port] <- String.split(proxy, ":"), + {port, ""} <- Integer.parse(port) do + {:ok, parse_host(host), port} + else + {_, _} -> + Logger.warn("parsing port in proxy fail #{inspect(proxy)}") + {:error, :error_parsing_port_in_proxy} + + :error -> + Logger.warn("parsing port in proxy fail #{inspect(proxy)}") + {:error, :error_parsing_port_in_proxy} + + _ -> + Logger.warn("parsing proxy fail #{inspect(proxy)}") + {:error, :error_parsing_proxy} + end + end + + def parse_proxy(proxy) when is_tuple(proxy) do + with {type, host, port} <- proxy do + {:ok, type, parse_host(host), port} + else + _ -> + Logger.warn("parsing proxy fail #{inspect(proxy)}") + {:error, :error_parsing_proxy} + end + end + + @spec parse_host(String.t() | atom() | charlist()) :: charlist() | ip_address() + def parse_host(host) when is_list(host), do: host + def parse_host(host) when is_atom(host), do: to_charlist(host) + + def parse_host(host) when is_binary(host) do + host = to_charlist(host) + + case :inet.parse_address(host) do + {:error, :einval} -> host + {:ok, ip} -> ip + end end end diff --git a/lib/pleroma/http/http.ex b/lib/pleroma/http/http.ex index dec24458a..ad47dc936 100644 --- a/lib/pleroma/http/http.ex +++ b/lib/pleroma/http/http.ex @@ -4,21 +4,47 @@ defmodule Pleroma.HTTP do @moduledoc """ - + Wrapper for `Tesla.request/2`. """ alias Pleroma.HTTP.Connection + alias Pleroma.HTTP.Request alias Pleroma.HTTP.RequestBuilder, as: Builder + alias Tesla.Client + alias Tesla.Env + + require Logger @type t :: __MODULE__ @doc """ - Builds and perform http request. + Performs GET request. + + See `Pleroma.HTTP.request/5` + """ + @spec get(Request.url() | nil, Request.headers(), keyword()) :: + nil | {:ok, Env.t()} | {:error, any()} + def get(url, headers \\ [], options \\ []) + def get(nil, _, _), do: nil + def get(url, headers, options), do: request(:get, url, "", headers, options) + + @doc """ + Performs POST request. + + See `Pleroma.HTTP.request/5` + """ + @spec post(Request.url(), String.t(), Request.headers(), keyword()) :: + {:ok, Env.t()} | {:error, any()} + def post(url, body, headers \\ [], options \\ []), + do: request(:post, url, body, headers, options) + + @doc """ + Builds and performs http request. # Arguments: `method` - :get, :post, :put, :delete - `url` - `body` + `url` - full url + `body` - request body `headers` - a keyworld list of headers, e.g. `[{"content-type", "text/plain"}]` `options` - custom, per-request middleware or adapter options @@ -26,23 +52,78 @@ defmodule Pleroma.HTTP do `{:ok, %Tesla.Env{}}` or `{:error, error}` """ - def request(method, url, body \\ "", headers \\ [], options \\ []) do + @spec request(atom(), Request.url(), String.t(), Request.headers(), keyword()) :: + {:ok, Env.t()} | {:error, any()} + def request(method, url, body, headers, options) when is_binary(url) do + with uri <- URI.parse(url), + received_adapter_opts <- Keyword.get(options, :adapter, []), + adapter_opts <- Connection.options(uri, received_adapter_opts), + options <- put_in(options[:adapter], adapter_opts), + params <- Keyword.get(options, :params, []), + request <- build_request(method, headers, options, url, body, params), + client <- Tesla.client([Tesla.Middleware.FollowRedirects], tesla_adapter()), + pid <- Process.whereis(adapter_opts[:pool]) do + pool_alive? = + if tesla_adapter() == Tesla.Adapter.Gun do + if pid, do: Process.alive?(pid), else: false + else + false + end + + request_opts = + adapter_opts + |> Enum.into(%{}) + |> Map.put(:env, Pleroma.Config.get([:env])) + |> Map.put(:pool_alive?, pool_alive?) + + response = + request( + client, + request, + request_opts + ) + + Connection.after_request(adapter_opts) + + response + end + end + + @spec request(Client.t(), keyword(), map()) :: {:ok, Env.t()} | {:error, any()} + def request(%Client{} = client, request, %{env: :test}), do: request_try(client, request) + + def request(%Client{} = client, request, %{body_as: :chunks}) do + request_try(client, request) + end + + def request(%Client{} = client, request, %{pool_alive?: false}) do + request_try(client, request) + end + + def request(%Client{} = client, request, %{pool: pool, timeout: timeout}) do try do - options = - process_request_options(options) - |> process_sni_options(url) + :poolboy.transaction( + pool, + &Pleroma.Pool.Request.execute(&1, client, request, timeout + 500), + timeout + 1_000 + ) + rescue + e -> + {:error, e} + catch + :exit, {:timeout, _} -> + Logger.warn("Receive response from pool failed #{request[:url]}") + {:error, :recv_pool_timeout} - params = Keyword.get(options, :params, []) + :exit, e -> + {:error, e} + end + end - %{} - |> Builder.method(method) - |> Builder.headers(headers) - |> Builder.opts(options) - |> Builder.url(url) - |> Builder.add_param(:body, :body, body) - |> Builder.add_param(:query, :query, params) - |> Enum.into([]) - |> (&Tesla.request(Connection.new(options), &1)).() + @spec request_try(Client.t(), keyword()) :: {:ok, Env.t()} | {:error, any()} + def request_try(client, request) do + try do + Tesla.request(client, request) rescue e -> {:error, e} @@ -52,35 +133,16 @@ def request(method, url, body \\ "", headers \\ [], options \\ []) do end end - defp process_sni_options(options, nil), do: options - - defp process_sni_options(options, url) do - uri = URI.parse(url) - host = uri.host |> to_charlist() - - case uri.scheme do - "https" -> options ++ [ssl: [server_name_indication: host]] - _ -> options - end + defp build_request(method, headers, options, url, body, params) do + Builder.new() + |> Builder.method(method) + |> Builder.headers(headers) + |> Builder.opts(options) + |> Builder.url(url) + |> Builder.add_param(:body, :body, body) + |> Builder.add_param(:query, :query, params) + |> Builder.convert_to_keyword() end - def process_request_options(options) do - Keyword.merge(Pleroma.HTTP.Connection.hackney_options([]), options) - end - - @doc """ - Performs GET request. - - See `Pleroma.HTTP.request/5` - """ - def get(url, headers \\ [], options \\ []), - do: request(:get, url, "", headers, options) - - @doc """ - Performs POST request. - - See `Pleroma.HTTP.request/5` - """ - def post(url, body, headers \\ [], options \\ []), - do: request(:post, url, body, headers, options) + defp tesla_adapter, do: Application.get_env(:tesla, :adapter) end diff --git a/lib/pleroma/http/request.ex b/lib/pleroma/http/request.ex new file mode 100644 index 000000000..891d88d53 --- /dev/null +++ b/lib/pleroma/http/request.ex @@ -0,0 +1,23 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.HTTP.Request do + @moduledoc """ + Request struct. + """ + defstruct method: :get, url: "", query: [], headers: [], body: "", opts: [] + + @type method :: :head | :get | :delete | :trace | :options | :post | :put | :patch + @type url :: String.t() + @type headers :: [{String.t(), String.t()}] + + @type t :: %__MODULE__{ + method: method(), + url: url(), + query: keyword(), + headers: headers(), + body: String.t(), + opts: keyword() + } +end diff --git a/lib/pleroma/http/request_builder.ex b/lib/pleroma/http/request_builder.ex index e23457999..491acd0f9 100644 --- a/lib/pleroma/http/request_builder.ex +++ b/lib/pleroma/http/request_builder.ex @@ -7,77 +7,54 @@ defmodule Pleroma.HTTP.RequestBuilder do Helper functions for building Tesla requests """ + alias Pleroma.HTTP.Request + alias Tesla.Multipart + @doc """ - Specify the request method when building a request - - ## Parameters - - - request (Map) - Collected request options - - m (atom) - Request method - - ## Returns - - Map + Creates new request """ - @spec method(map(), atom) :: map() - def method(request, m) do - Map.put_new(request, :method, m) - end + @spec new(Request.t()) :: Request.t() + def new(%Request{} = request \\ %Request{}), do: request @doc """ Specify the request method when building a request - - ## Parameters - - - request (Map) - Collected request options - - u (String) - Request URL - - ## Returns - - Map """ - @spec url(map(), String.t()) :: map() - def url(request, u) do - Map.put_new(request, :url, u) - end + @spec method(Request.t(), Request.method()) :: Request.t() + def method(request, m), do: %{request | method: m} + + @doc """ + Specify the request method when building a request + """ + @spec url(Request.t(), Request.url()) :: Request.t() + def url(request, u), do: %{request | url: u} @doc """ Add headers to the request """ - @spec headers(map(), list(tuple)) :: map() - def headers(request, header_list) do - header_list = + @spec headers(Request.t(), Request.headers()) :: Request.t() + def headers(request, headers) do + headers_list = if Pleroma.Config.get([:http, :send_user_agent]) do - header_list ++ [{"User-Agent", Pleroma.Application.user_agent()}] + headers ++ [{"user-agent", Pleroma.Application.user_agent()}] else - header_list + headers end - Map.put_new(request, :headers, header_list) + %{request | headers: headers_list} end @doc """ Add custom, per-request middleware or adapter options to the request """ - @spec opts(map(), Keyword.t()) :: map() - def opts(request, options) do - Map.put_new(request, :opts, options) - end + @spec opts(Request.t(), keyword()) :: Request.t() + def opts(request, options), do: %{request | opts: options} + # NOTE: isn't used anywhere @doc """ Add optional parameters to the request - ## Parameters - - - request (Map) - Collected request options - - definitions (Map) - Map of parameter name to parameter location. - - options (KeywordList) - The provided optional parameters - - ## Returns - - Map """ - @spec add_optional_params(map(), %{optional(atom) => atom}, keyword()) :: map() + @spec add_optional_params(Request.t(), %{optional(atom) => atom}, keyword()) :: map() def add_optional_params(request, _, []), do: request def add_optional_params(request, definitions, [{key, value} | tail]) do @@ -94,49 +71,43 @@ def add_optional_params(request, definitions, [{key, value} | tail]) do @doc """ Add optional parameters to the request - - ## Parameters - - - request (Map) - Collected request options - - location (atom) - Where to put the parameter - - key (atom) - The name of the parameter - - value (any) - The value of the parameter - - ## Returns - - Map """ - @spec add_param(map(), atom, atom, any()) :: map() - def add_param(request, :query, :query, values), do: Map.put(request, :query, values) + @spec add_param(Request.t(), atom(), atom(), any()) :: Request.t() + def add_param(request, :query, :query, values), do: %{request | query: values} - def add_param(request, :body, :body, value), do: Map.put(request, :body, value) + def add_param(request, :body, :body, value), do: %{request | body: value} def add_param(request, :body, key, value) do request - |> Map.put_new_lazy(:body, &Tesla.Multipart.new/0) + |> Map.put(:body, Multipart.new()) |> Map.update!( :body, - &Tesla.Multipart.add_field( + &Multipart.add_field( &1, key, Jason.encode!(value), - headers: [{:"Content-Type", "application/json"}] + headers: [{"content-type", "application/json"}] ) ) end def add_param(request, :file, name, path) do request - |> Map.put_new_lazy(:body, &Tesla.Multipart.new/0) - |> Map.update!(:body, &Tesla.Multipart.add_file(&1, path, name: name)) + |> Map.put(:body, Multipart.new()) + |> Map.update!(:body, &Multipart.add_file(&1, path, name: name)) end def add_param(request, :form, name, value) do - request - |> Map.update(:body, %{name => value}, &Map.put(&1, name, value)) + Map.update(request, :body, %{name => value}, &Map.put(&1, name, value)) end def add_param(request, location, key, value) do Map.update(request, location, [{key, value}], &(&1 ++ [{key, value}])) end + + def convert_to_keyword(request) do + request + |> Map.from_struct() + |> Enum.into([]) + end end diff --git a/lib/pleroma/object/fetcher.ex b/lib/pleroma/object/fetcher.ex index 037c42339..5e9bf1574 100644 --- a/lib/pleroma/object/fetcher.ex +++ b/lib/pleroma/object/fetcher.ex @@ -137,7 +137,7 @@ defp make_signature(id, date) do date: date }) - [{:Signature, signature}] + [{"signature", signature}] end defp sign_fetch(headers, id, date) do @@ -150,7 +150,7 @@ defp sign_fetch(headers, id, date) do defp maybe_date_fetch(headers, date) do if Pleroma.Config.get([:activitypub, :sign_object_fetches]) do - headers ++ [{:Date, date}] + headers ++ [{"date", date}] else headers end @@ -162,7 +162,7 @@ def fetch_and_contain_remote_object_from_id(id) when is_binary(id) do date = Pleroma.Signature.signed_date() headers = - [{:Accept, "application/activity+json"}] + [{"accept", "application/activity+json"}] |> maybe_date_fetch(date) |> sign_fetch(id, date) diff --git a/lib/pleroma/otp_version.ex b/lib/pleroma/otp_version.ex new file mode 100644 index 000000000..0be189304 --- /dev/null +++ b/lib/pleroma/otp_version.ex @@ -0,0 +1,63 @@ +defmodule Pleroma.OTPVersion do + @type check_status() :: :undefined | {:error, String.t()} | :ok + + require Logger + + @spec check_version() :: check_status() + def check_version do + # OTP Version https://erlang.org/doc/system_principles/versions.html#otp-version + paths = [ + Path.join(:code.root_dir(), "OTP_VERSION"), + Path.join([:code.root_dir(), "releases", :erlang.system_info(:otp_release), "OTP_VERSION"]) + ] + + :tesla + |> Application.get_env(:adapter) + |> get_and_check_version(paths) + end + + @spec get_and_check_version(module(), [Path.t()]) :: check_status() + def get_and_check_version(Tesla.Adapter.Gun, paths) do + paths + |> check_files() + |> check_version() + end + + def get_and_check_version(_, _), do: :ok + + defp check_files([]), do: nil + + defp check_files([path | paths]) do + if File.exists?(path) do + File.read!(path) + else + check_files(paths) + end + end + + defp check_version(nil), do: :undefined + + defp check_version(version) do + try do + version = String.replace(version, ~r/\r|\n|\s/, "") + + formatted = + version + |> String.split(".") + |> Enum.map(&String.to_integer/1) + |> Enum.take(2) + + with [major, minor] when length(formatted) == 2 <- formatted, + true <- (major == 22 and minor >= 2) or major > 22 do + :ok + else + false -> {:error, version} + _ -> :undefined + end + rescue + _ -> :undefined + catch + _ -> :undefined + end + end +end diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex new file mode 100644 index 000000000..1ed16d1c1 --- /dev/null +++ b/lib/pleroma/pool/connections.ex @@ -0,0 +1,415 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Pool.Connections do + use GenServer + + require Logger + + @type domain :: String.t() + @type conn :: Pleroma.Gun.Conn.t() + + @type t :: %__MODULE__{ + conns: %{domain() => conn()}, + opts: keyword() + } + + defstruct conns: %{}, opts: [] + + alias Pleroma.Gun.API + alias Pleroma.Gun.Conn + + @spec start_link({atom(), keyword()}) :: {:ok, pid()} + def start_link({name, opts}) do + GenServer.start_link(__MODULE__, opts, name: name) + end + + @impl true + def init(opts), do: {:ok, %__MODULE__{conns: %{}, opts: opts}} + + @spec checkin(String.t() | URI.t(), atom()) :: pid() | nil + def checkin(url, name) + def checkin(url, name) when is_binary(url), do: checkin(URI.parse(url), name) + + def checkin(%URI{} = uri, name) do + timeout = Pleroma.Config.get([:connections_pool, :receive_connection_timeout], 250) + + GenServer.call( + name, + {:checkin, uri}, + timeout + ) + end + + @spec open_conn(String.t() | URI.t(), atom(), keyword()) :: :ok + def open_conn(url, name, opts \\ []) + def open_conn(url, name, opts) when is_binary(url), do: open_conn(URI.parse(url), name, opts) + + def open_conn(%URI{} = uri, name, opts) do + pool_opts = Pleroma.Config.get([:connections_pool], []) + + opts = + opts + |> Enum.into(%{}) + |> Map.put_new(:receive, false) + |> Map.put_new(:retry, pool_opts[:retry] || 5) + |> Map.put_new(:retry_timeout, pool_opts[:retry_timeout] || 100) + |> Map.put_new(:await_up_timeout, pool_opts[:await_up_timeout] || 5_000) + + GenServer.cast(name, {:open_conn, %{opts: opts, uri: uri}}) + end + + @spec alive?(atom()) :: boolean() + def alive?(name) do + pid = Process.whereis(name) + if pid, do: Process.alive?(pid), else: false + end + + @spec get_state(atom()) :: t() + def get_state(name) do + GenServer.call(name, :state) + end + + @spec checkout(pid(), pid(), atom()) :: :ok + def checkout(conn, pid, name) do + GenServer.cast(name, {:checkout, conn, pid}) + end + + @impl true + def handle_cast({:open_conn, %{opts: opts, uri: uri}}, state) do + Logger.debug("opening new #{compose_uri(uri)}") + max_connections = state.opts[:max_connections] + + key = compose_key(uri) + + if Enum.count(state.conns) < max_connections do + open_conn(key, uri, state, opts) + else + try_to_open_conn(key, uri, state, opts) + end + end + + @impl true + def handle_cast({:checkout, conn_pid, pid}, state) do + Logger.debug("checkout #{inspect(conn_pid)}") + + state = + with true <- Process.alive?(conn_pid), + {key, conn} <- find_conn(state.conns, conn_pid), + used_by <- List.keydelete(conn.used_by, pid, 0) do + conn_state = + if used_by == [] do + :idle + else + conn.conn_state + end + + put_in(state.conns[key], %{conn | conn_state: conn_state, used_by: used_by}) + else + false -> + Logger.warn("checkout for closed conn #{inspect(conn_pid)}") + state + + nil -> + Logger.info("checkout for alive conn #{inspect(conn_pid)}, but is not in state") + state + end + + {:noreply, state} + end + + @impl true + def handle_call({:checkin, uri}, from, state) do + Logger.debug("checkin #{compose_uri(uri)}") + key = compose_key(uri) + + case state.conns[key] do + %{conn: conn, gun_state: gun_state} = current_conn when gun_state == :up -> + Logger.debug("reusing conn #{compose_uri(uri)}") + + with time <- :os.system_time(:second), + last_reference <- time - current_conn.last_reference, + current_crf <- crf(last_reference, 100, current_conn.crf), + state <- + put_in(state.conns[key], %{ + current_conn + | last_reference: time, + crf: current_crf, + conn_state: :active, + used_by: [from | current_conn.used_by] + }) do + {:reply, conn, state} + end + + %{gun_state: gun_state} when gun_state == :down -> + {:reply, nil, state} + + nil -> + {:reply, nil, state} + end + end + + @impl true + def handle_call(:state, _from, state), do: {:reply, state, state} + + @impl true + def handle_info({:gun_up, conn_pid, _protocol}, state) do + state = + with true <- Process.alive?(conn_pid), + conn_key when is_binary(conn_key) <- compose_key_gun_info(conn_pid), + {key, conn} <- find_conn(state.conns, conn_pid, conn_key), + time <- :os.system_time(:second), + last_reference <- time - conn.last_reference, + current_crf <- crf(last_reference, 100, conn.crf) do + put_in(state.conns[key], %{ + conn + | gun_state: :up, + last_reference: time, + crf: current_crf, + conn_state: :active, + retries: 0 + }) + else + :error_gun_info -> + Logger.warn(":gun.info caused error") + state + + false -> + Logger.warn(":gun_up message for closed conn #{inspect(conn_pid)}") + state + + nil -> + Logger.warn( + ":gun_up message for alive conn #{inspect(conn_pid)}, but deleted from state" + ) + + :ok = API.close(conn_pid) + + state + end + + {:noreply, state} + end + + @impl true + def handle_info({:gun_down, conn_pid, _protocol, _reason, _killed}, state) do + # we can't get info on this pid, because pid is dead + state = + with true <- Process.alive?(conn_pid), + {key, conn} <- find_conn(state.conns, conn_pid) do + if conn.retries == 5 do + Logger.debug("closing conn if retries is eq 5 #{inspect(conn_pid)}") + :ok = API.close(conn.conn) + + put_in( + state.conns, + Map.delete(state.conns, key) + ) + else + put_in(state.conns[key], %{ + conn + | gun_state: :down, + retries: conn.retries + 1 + }) + end + else + false -> + # gun can send gun_down for closed conn, maybe connection is not closed yet + Logger.warn(":gun_down message for closed conn #{inspect(conn_pid)}") + state + + nil -> + Logger.warn( + ":gun_down message for alive conn #{inspect(conn_pid)}, but deleted from state" + ) + + :ok = API.close(conn_pid) + + state + end + + {:noreply, state} + end + + defp compose_key(%URI{scheme: scheme, host: host, port: port}), do: "#{scheme}:#{host}:#{port}" + + defp compose_key_gun_info(pid) do + try do + # sometimes :gun.info can raise MatchError, which lead to pool terminate + %{origin_host: origin_host, origin_scheme: scheme, origin_port: port} = API.info(pid) + + host = + case :inet.ntoa(origin_host) do + {:error, :einval} -> origin_host + ip -> ip + end + + "#{scheme}:#{host}:#{port}" + rescue + _ -> :error_gun_info + end + end + + defp find_conn(conns, conn_pid) do + Enum.find(conns, fn {_key, conn} -> + conn.conn == conn_pid + end) + end + + defp find_conn(conns, conn_pid, conn_key) do + Enum.find(conns, fn {key, conn} -> + key == conn_key and conn.conn == conn_pid + end) + end + + defp open_conn(key, uri, state, %{proxy: {proxy_host, proxy_port}} = opts) do + connect_opts = + uri + |> destination_opts() + |> add_http2_opts(uri.scheme, Map.get(opts, :tls_opts, [])) + + with open_opts <- Map.delete(opts, :tls_opts), + {:ok, conn} <- API.open(proxy_host, proxy_port, open_opts), + {:ok, _} <- API.await_up(conn), + stream <- API.connect(conn, connect_opts), + {:response, :fin, 200, _} <- API.await(conn, stream), + state <- + put_in(state.conns[key], %Conn{ + conn: conn, + gun_state: :up, + conn_state: :active, + last_reference: :os.system_time(:second) + }) do + {:noreply, state} + else + error -> + Logger.warn( + "Received error on opening connection with http proxy #{uri.scheme}://#{ + compose_uri(uri) + }: #{inspect(error)}" + ) + + {:noreply, state} + end + end + + defp open_conn(key, uri, state, %{proxy: {proxy_type, proxy_host, proxy_port}} = opts) do + version = + proxy_type + |> to_string() + |> String.last() + |> case do + "4" -> 4 + _ -> 5 + end + + socks_opts = + uri + |> destination_opts() + |> add_http2_opts(uri.scheme, Map.get(opts, :tls_opts, [])) + |> Map.put(:version, version) + + opts = + opts + |> Map.put(:protocols, [:socks]) + |> Map.put(:socks_opts, socks_opts) + + with {:ok, conn} <- API.open(proxy_host, proxy_port, opts), + {:ok, _} <- API.await_up(conn), + state <- + put_in(state.conns[key], %Conn{ + conn: conn, + gun_state: :up, + conn_state: :active, + last_reference: :os.system_time(:second) + }) do + {:noreply, state} + else + error -> + Logger.warn( + "Received error on opening connection with socks proxy #{uri.scheme}://#{ + compose_uri(uri) + }: #{inspect(error)}" + ) + + {:noreply, state} + end + end + + defp open_conn(key, %URI{host: host, port: port} = uri, state, opts) do + Logger.debug("opening conn #{compose_uri(uri)}") + {_type, host} = Pleroma.HTTP.Adapter.domain_or_ip(host) + + with {:ok, conn} <- API.open(host, port, opts), + {:ok, _} <- API.await_up(conn), + state <- + put_in(state.conns[key], %Conn{ + conn: conn, + gun_state: :up, + conn_state: :active, + last_reference: :os.system_time(:second) + }) do + Logger.debug("new conn opened #{compose_uri(uri)}") + Logger.debug("replying to the call #{compose_uri(uri)}") + {:noreply, state} + else + error -> + Logger.warn( + "Received error on opening connection #{uri.scheme}://#{compose_uri(uri)}: #{ + inspect(error) + }" + ) + + {:noreply, state} + end + end + + defp destination_opts(%URI{host: host, port: port}) do + {_type, host} = Pleroma.HTTP.Adapter.domain_or_ip(host) + %{host: host, port: port} + end + + defp add_http2_opts(opts, "https", tls_opts) do + Map.merge(opts, %{protocols: [:http2], transport: :tls, tls_opts: tls_opts}) + end + + defp add_http2_opts(opts, _, _), do: opts + + @spec get_unused_conns(map()) :: [{domain(), conn()}] + def get_unused_conns(conns) do + conns + |> Enum.filter(fn {_k, v} -> + v.conn_state == :idle and v.used_by == [] + end) + |> Enum.sort(fn {_x_k, x}, {_y_k, y} -> + x.crf <= y.crf and x.last_reference <= y.last_reference + end) + end + + defp try_to_open_conn(key, uri, state, opts) do + Logger.debug("try to open conn #{compose_uri(uri)}") + + with [{close_key, least_used} | _conns] <- get_unused_conns(state.conns), + :ok <- API.close(least_used.conn), + state <- + put_in( + state.conns, + Map.delete(state.conns, close_key) + ) do + Logger.debug( + "least used conn found and closed #{inspect(least_used.conn)} #{compose_uri(uri)}" + ) + + open_conn(key, uri, state, opts) + else + [] -> {:noreply, state} + end + end + + def crf(current, steps, crf) do + 1 + :math.pow(0.5, current / steps) * crf + end + + def compose_uri(%URI{} = uri), do: "#{uri.host}#{uri.path}" +end diff --git a/lib/pleroma/pool/pool.ex b/lib/pleroma/pool/pool.ex new file mode 100644 index 000000000..a7ae64ce4 --- /dev/null +++ b/lib/pleroma/pool/pool.ex @@ -0,0 +1,22 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Pool do + def child_spec(opts) do + poolboy_opts = + opts + |> Keyword.put(:worker_module, Pleroma.Pool.Request) + |> Keyword.put(:name, {:local, opts[:name]}) + |> Keyword.put(:size, opts[:size]) + |> Keyword.put(:max_overflow, opts[:max_overflow]) + + %{ + id: opts[:id] || {__MODULE__, make_ref()}, + start: {:poolboy, :start_link, [poolboy_opts, [name: opts[:name]]]}, + restart: :permanent, + shutdown: 5000, + type: :worker + } + end +end diff --git a/lib/pleroma/pool/request.ex b/lib/pleroma/pool/request.ex new file mode 100644 index 000000000..2c3574561 --- /dev/null +++ b/lib/pleroma/pool/request.ex @@ -0,0 +1,72 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Pool.Request do + use GenServer + + require Logger + + def start_link(args) do + GenServer.start_link(__MODULE__, args) + end + + @impl true + def init(_), do: {:ok, []} + + @spec execute(pid() | atom(), Tesla.Client.t(), keyword(), pos_integer()) :: + {:ok, Tesla.Env.t()} | {:error, any()} + def execute(pid, client, request, timeout) do + GenServer.call(pid, {:execute, client, request}, timeout) + end + + @impl true + def handle_call({:execute, client, request}, _from, state) do + response = Pleroma.HTTP.request_try(client, request) + + {:reply, response, state} + end + + @impl true + def handle_info({:gun_data, _conn, stream, _, _}, state) do + # in some cases if we reuse conn and got {:error, :body_too_large} + # gun continues to send messages to this process, + # so we flush messages for this request + :ok = :gun.flush(stream) + + {:noreply, state} + end + + @impl true + def handle_info({:gun_up, _conn, _protocol}, state) do + {:noreply, state} + end + + @impl true + def handle_info({:gun_down, _conn, _protocol, _reason, _killed}, state) do + # don't flush messages here, because gun can reconnect + {:noreply, state} + end + + @impl true + def handle_info({:gun_error, _conn, stream, _error}, state) do + :ok = :gun.flush(stream) + {:noreply, state} + end + + @impl true + def handle_info({:gun_push, _conn, _stream, _new_stream, _method, _uri, _headers}, state) do + {:noreply, state} + end + + @impl true + def handle_info({:gun_response, _conn, _stream, _, _status, _headers}, state) do + {:noreply, state} + end + + @impl true + def handle_info(msg, state) do + Logger.warn("Received unexpected message #{inspect(__MODULE__)} #{inspect(msg)}") + {:noreply, state} + end +end diff --git a/lib/pleroma/pool/supervisor.ex b/lib/pleroma/pool/supervisor.ex new file mode 100644 index 000000000..32be2264d --- /dev/null +++ b/lib/pleroma/pool/supervisor.ex @@ -0,0 +1,36 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Pool.Supervisor do + use Supervisor + + alias Pleroma.Pool + + def start_link(args) do + Supervisor.start_link(__MODULE__, args, name: __MODULE__) + end + + def init(_) do + children = + [ + %{ + id: Pool.Connections, + start: + {Pool.Connections, :start_link, + [{:gun_connections, Pleroma.Config.get([:connections_pool])}]} + } + ] ++ pools() + + Supervisor.init(children, strategy: :one_for_one) + end + + defp pools do + for {pool_name, pool_opts} <- Pleroma.Config.get([:pools]) do + pool_opts + |> Keyword.put(:id, {Pool, pool_name}) + |> Keyword.put(:name, pool_name) + |> Pool.child_spec() + end + end +end diff --git a/lib/pleroma/reverse_proxy/client.ex b/lib/pleroma/reverse_proxy/client.ex index 776c4794c..63261b94c 100644 --- a/lib/pleroma/reverse_proxy/client.ex +++ b/lib/pleroma/reverse_proxy/client.ex @@ -3,19 +3,23 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ReverseProxy.Client do - @callback request(atom(), String.t(), [tuple()], String.t(), list()) :: - {:ok, pos_integer(), [tuple()], reference() | map()} - | {:ok, pos_integer(), [tuple()]} + @type status :: pos_integer() + @type header_name :: String.t() + @type header_value :: String.t() + @type headers :: [{header_name(), header_value()}] + + @callback request(atom(), String.t(), headers(), String.t(), list()) :: + {:ok, status(), headers(), reference() | map()} + | {:ok, status(), headers()} | {:ok, reference()} | {:error, term()} - @callback stream_body(reference() | pid() | map()) :: - {:ok, binary()} | :done | {:error, String.t()} + @callback stream_body(map()) :: {:ok, binary(), map()} | :done | {:error, atom() | String.t()} @callback close(reference() | pid() | map()) :: :ok - def request(method, url, headers, "", opts \\ []) do - client().request(method, url, headers, "", opts) + def request(method, url, headers, body \\ "", opts \\ []) do + client().request(method, url, headers, body, opts) end def stream_body(ref), do: client().stream_body(ref) @@ -23,6 +27,12 @@ def stream_body(ref), do: client().stream_body(ref) def close(ref), do: client().close(ref) defp client do - Pleroma.Config.get([Pleroma.ReverseProxy.Client], :hackney) + :tesla + |> Application.get_env(:adapter) + |> client() end + + defp client(Tesla.Adapter.Hackney), do: Pleroma.ReverseProxy.Client.Hackney + defp client(Tesla.Adapter.Gun), do: Pleroma.ReverseProxy.Client.Tesla + defp client(_), do: Pleroma.Config.get!(Pleroma.ReverseProxy.Client) end diff --git a/lib/pleroma/reverse_proxy/client/hackney.ex b/lib/pleroma/reverse_proxy/client/hackney.ex new file mode 100644 index 000000000..e41560ab0 --- /dev/null +++ b/lib/pleroma/reverse_proxy/client/hackney.ex @@ -0,0 +1,24 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.ReverseProxy.Client.Hackney do + @behaviour Pleroma.ReverseProxy.Client + + @impl true + def request(method, url, headers, body, opts \\ []) do + :hackney.request(method, url, headers, body, opts) + end + + @impl true + def stream_body(ref) do + case :hackney.stream_body(ref) do + :done -> :done + {:ok, data} -> {:ok, data, ref} + {:error, error} -> {:error, error} + end + end + + @impl true + def close(ref), do: :hackney.close(ref) +end diff --git a/lib/pleroma/reverse_proxy/client/tesla.ex b/lib/pleroma/reverse_proxy/client/tesla.ex new file mode 100644 index 000000000..55a11b4a8 --- /dev/null +++ b/lib/pleroma/reverse_proxy/client/tesla.ex @@ -0,0 +1,87 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.ReverseProxy.Client.Tesla do + @type headers() :: [{String.t(), String.t()}] + @type status() :: pos_integer() + + @behaviour Pleroma.ReverseProxy.Client + + @spec request(atom(), String.t(), headers(), String.t(), keyword()) :: + {:ok, status(), headers} + | {:ok, status(), headers, map()} + | {:error, atom() | String.t()} + | no_return() + + @impl true + def request(method, url, headers, body, opts \\ []) do + _adapter = check_adapter() + + with opts <- Keyword.merge(opts, body_as: :chunks, mode: :passive), + {:ok, response} <- + Pleroma.HTTP.request( + method, + url, + body, + headers, + Keyword.put(opts, :adapter, opts) + ) do + if is_map(response.body) and method != :head do + {:ok, response.status, response.headers, response.body} + else + {:ok, response.status, response.headers} + end + else + {:error, error} -> {:error, error} + end + end + + @impl true + @spec stream_body(map()) :: {:ok, binary(), map()} | {:error, atom() | String.t()} | :done + def stream_body(%{pid: pid, opts: opts, fin: true}) do + # if connection was sended and there were redirects, we need to close new conn - pid manually + if opts[:old_conn], do: Tesla.Adapter.Gun.close(pid) + # if there were redirects we need to checkout old conn + conn = opts[:old_conn] || opts[:conn] + + if conn, do: :ok = Pleroma.Pool.Connections.checkout(conn, self(), :gun_connections) + + :done + end + + def stream_body(client) do + case read_chunk!(client) do + {:fin, body} -> + {:ok, body, Map.put(client, :fin, true)} + + {:nofin, part} -> + {:ok, part, client} + + {:error, error} -> + {:error, error} + end + end + + defp read_chunk!(%{pid: pid, stream: stream, opts: opts}) do + adapter = check_adapter() + adapter.read_chunk(pid, stream, opts) + end + + @impl true + @spec close(map) :: :ok | no_return() + def close(%{pid: pid}) do + adapter = check_adapter() + adapter.close(pid) + end + + defp check_adapter do + adapter = Application.get_env(:tesla, :adapter) + + unless adapter == Tesla.Adapter.Gun do + raise "#{adapter} doesn't support reading body in chunks" + end + + adapter + end +end diff --git a/lib/pleroma/reverse_proxy/reverse_proxy.ex b/lib/pleroma/reverse_proxy/reverse_proxy.ex index 2ed719315..9f5710c92 100644 --- a/lib/pleroma/reverse_proxy/reverse_proxy.ex +++ b/lib/pleroma/reverse_proxy/reverse_proxy.ex @@ -3,8 +3,6 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ReverseProxy do - alias Pleroma.HTTP - @keep_req_headers ~w(accept user-agent accept-encoding cache-control if-modified-since) ++ ~w(if-unmodified-since if-none-match if-range range) @resp_cache_headers ~w(etag date last-modified cache-control) @@ -61,10 +59,10 @@ defmodule Pleroma.ReverseProxy do * `req_headers`, `resp_headers` additional headers. - * `http`: options for [hackney](https://github.com/benoitc/hackney). + * `http`: options for [gun](https://github.com/ninenines/gun). """ - @default_hackney_options [pool: :media] + @default_options [pool: :media] @inline_content_types [ "image/gif", @@ -97,11 +95,7 @@ defmodule Pleroma.ReverseProxy do def call(_conn, _url, _opts \\ []) def call(conn = %{method: method}, url, opts) when method in @methods do - hackney_opts = - Pleroma.HTTP.Connection.hackney_options([]) - |> Keyword.merge(@default_hackney_options) - |> Keyword.merge(Keyword.get(opts, :http, [])) - |> HTTP.process_request_options() + client_opts = Keyword.merge(@default_options, Keyword.get(opts, :http, [])) req_headers = build_req_headers(conn.req_headers, opts) @@ -113,7 +107,7 @@ def call(conn = %{method: method}, url, opts) when method in @methods do end with {:ok, nil} <- Cachex.get(:failed_proxy_url_cache, url), - {:ok, code, headers, client} <- request(method, url, req_headers, hackney_opts), + {:ok, code, headers, client} <- request(method, url, req_headers, client_opts), :ok <- header_length_constraint( headers, @@ -159,11 +153,11 @@ def call(conn, _, _) do |> halt() end - defp request(method, url, headers, hackney_opts) do + defp request(method, url, headers, opts) do Logger.debug("#{__MODULE__} #{method} #{url} #{inspect(headers)}") method = method |> String.downcase() |> String.to_existing_atom() - case client().request(method, url, headers, "", hackney_opts) do + case client().request(method, url, headers, "", opts) do {:ok, code, headers, client} when code in @valid_resp_codes -> {:ok, code, downcase_headers(headers), client} @@ -213,7 +207,7 @@ defp chunk_reply(conn, client, opts, sent_so_far, duration) do duration, Keyword.get(opts, :max_read_duration, @max_read_duration) ), - {:ok, data} <- client().stream_body(client), + {:ok, data, client} <- client().stream_body(client), {:ok, duration} <- increase_read_duration(duration), sent_so_far = sent_so_far + byte_size(data), :ok <- diff --git a/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex b/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex index df774b0f7..ade87daf2 100644 --- a/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex @@ -12,17 +12,23 @@ defmodule Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy do require Logger - @hackney_options [ - pool: :media, - recv_timeout: 10_000 + @options [ + pool: :media ] def perform(:prefetch, url) do Logger.debug("Prefetching #{inspect(url)}") + opts = + if Application.get_env(:tesla, :adapter) == Tesla.Adapter.Hackney do + Keyword.put(@options, :recv_timeout, 10_000) + else + @options + end + url |> MediaProxy.url() - |> HTTP.get([], adapter: @hackney_options) + |> HTTP.get([], adapter: opts) end def perform(:preload, %{"object" => %{"attachment" => attachments}} = _message) do diff --git a/lib/pleroma/web/rel_me.ex b/lib/pleroma/web/rel_me.ex index 16b1a53d2..0ae926375 100644 --- a/lib/pleroma/web/rel_me.ex +++ b/lib/pleroma/web/rel_me.ex @@ -3,11 +3,9 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.RelMe do - @hackney_options [ + @options [ pool: :media, - recv_timeout: 2_000, - max_body: 2_000_000, - with_body: true + max_body: 2_000_000 ] if Pleroma.Config.get(:env) == :test do @@ -25,8 +23,18 @@ def parse(url) when is_binary(url) do def parse(_), do: {:error, "No URL provided"} defp parse_url(url) do + opts = + if Application.get_env(:tesla, :adapter) == Tesla.Adapter.Hackney do + Keyword.merge(@options, + recv_timeout: 2_000, + with_body: true + ) + else + @options + end + with {:ok, %Tesla.Env{body: html, status: status}} when status in 200..299 <- - Pleroma.HTTP.get(url, [], adapter: @hackney_options), + Pleroma.HTTP.get(url, [], adapter: opts), data <- Floki.attribute(html, "link[rel~=me]", "href") ++ Floki.attribute(html, "a[rel~=me]", "href") do diff --git a/lib/pleroma/web/rich_media/parser.ex b/lib/pleroma/web/rich_media/parser.ex index c06b0a0f2..9deb03845 100644 --- a/lib/pleroma/web/rich_media/parser.ex +++ b/lib/pleroma/web/rich_media/parser.ex @@ -3,11 +3,9 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.RichMedia.Parser do - @hackney_options [ + @options [ pool: :media, - recv_timeout: 2_000, - max_body: 2_000_000, - with_body: true + max_body: 2_000_000 ] defp parsers do @@ -77,8 +75,18 @@ defp get_ttl_from_image(data, url) do end defp parse_url(url) do + opts = + if Application.get_env(:tesla, :adapter) == Tesla.Adapter.Hackney do + Keyword.merge(@options, + recv_timeout: 2_000, + with_body: true + ) + else + @options + end + try do - {:ok, %Tesla.Env{body: html}} = Pleroma.HTTP.get(url, [], adapter: @hackney_options) + {:ok, %Tesla.Env{body: html}} = Pleroma.HTTP.get(url, [], adapter: opts) html |> parse_html diff --git a/lib/pleroma/web/web_finger/web_finger.ex b/lib/pleroma/web/web_finger/web_finger.ex index b4cc80179..91e9e2271 100644 --- a/lib/pleroma/web/web_finger/web_finger.ex +++ b/lib/pleroma/web/web_finger/web_finger.ex @@ -205,7 +205,7 @@ def finger(account) do with response <- HTTP.get( address, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ), {:ok, %{status: status, body: body}} when status in 200..299 <- response do doc = XML.parse_document(body) diff --git a/mix.exs b/mix.exs index b28c65694..7c6de5423 100644 --- a/mix.exs +++ b/mix.exs @@ -120,6 +120,10 @@ defp deps do {:cachex, "~> 3.0.2"}, {:poison, "~> 3.0", override: true}, {:tesla, "~> 1.3", override: true}, + {:castore, "~> 0.1"}, + {:cowlib, "~> 2.8", override: true}, + {:gun, + github: "ninenines/gun", ref: "bd6425ab87428cf4c95f4d23e0a48fd065fbd714", override: true}, {:jason, "~> 1.0"}, {:mogrify, "~> 0.6.1"}, {:ex_aws, "~> 2.1"}, diff --git a/mix.lock b/mix.lock index 9c811a974..158a87e47 100644 --- a/mix.lock +++ b/mix.lock @@ -9,6 +9,7 @@ "cachex": {:hex, :cachex, "3.0.3", "4e2d3e05814a5738f5ff3903151d5c25636d72a3527251b753f501ad9c657967", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm", "3aadb1e605747122f60aa7b0b121cca23c14868558157563b3f3e19ea929f7d0"}, "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"}, "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, "comeonin": {:hex, :comeonin, "4.1.2", "3eb5620fd8e35508991664b4c2b04dd41e52f1620b36957be837c1d7784b7592", [:mix], [{:argon2_elixir, "~> 1.2", [hex: :argon2_elixir, repo: "hexpm", optional: true]}, {:bcrypt_elixir, "~> 0.12.1 or ~> 1.0", [hex: :bcrypt_elixir, repo: "hexpm", optional: true]}, {:pbkdf2_elixir, "~> 0.12", [hex: :pbkdf2_elixir, repo: "hexpm", optional: true]}], "hexpm", "d8700a0ca4dbb616c22c9b3f6dd539d88deaafec3efe66869d6370c9a559b3e9"}, @@ -45,6 +46,7 @@ "gen_stage": {:hex, :gen_stage, "0.14.3", "d0c66f1c87faa301c1a85a809a3ee9097a4264b2edf7644bf5c123237ef732bf", [:mix], [], "hexpm"}, "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", "bd6425ab87428cf4c95f4d23e0a48fd065fbd714", [ref: "bd6425ab87428cf4c95f4d23e0a48fd065fbd714"]}, "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"}, "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"}, diff --git a/test/activity/ir/topics_test.exs b/test/activity/ir/topics_test.exs index e75f83586..8729e5746 100644 --- a/test/activity/ir/topics_test.exs +++ b/test/activity/ir/topics_test.exs @@ -83,7 +83,7 @@ test "converts tags to hash tags", %{activity: %{object: %{data: data} = object} assert Enum.member?(topics, "hashtag:bar") end - test "only converts strinngs to hash tags", %{ + test "only converts strings to hash tags", %{ activity: %{object: %{data: data} = object} = activity } do tagged_data = Map.put(data, "tag", [2]) diff --git a/test/config/config_db_test.exs b/test/config/config_db_test.exs index 812709fd8..394040a59 100644 --- a/test/config/config_db_test.exs +++ b/test/config/config_db_test.exs @@ -478,14 +478,6 @@ test "simple keyword" do assert ConfigDB.from_binary(binary) == [key: "value"] end - test "keyword with partial_chain key" do - binary = - ConfigDB.transform([%{"tuple" => [":partial_chain", "&:hackney_connect.partial_chain/1"]}]) - - assert binary == :erlang.term_to_binary(partial_chain: &:hackney_connect.partial_chain/1) - assert ConfigDB.from_binary(binary) == [partial_chain: &:hackney_connect.partial_chain/1] - end - test "keyword" do binary = ConfigDB.transform([ diff --git a/test/fixtures/warnings/otp_version/21.1 b/test/fixtures/warnings/otp_version/21.1 new file mode 100644 index 000000000..90cd64c4f --- /dev/null +++ b/test/fixtures/warnings/otp_version/21.1 @@ -0,0 +1 @@ +21.1 \ No newline at end of file diff --git a/test/fixtures/warnings/otp_version/22.1 b/test/fixtures/warnings/otp_version/22.1 new file mode 100644 index 000000000..d9b314368 --- /dev/null +++ b/test/fixtures/warnings/otp_version/22.1 @@ -0,0 +1 @@ +22.1 \ No newline at end of file diff --git a/test/fixtures/warnings/otp_version/22.4 b/test/fixtures/warnings/otp_version/22.4 new file mode 100644 index 000000000..1da8ccd28 --- /dev/null +++ b/test/fixtures/warnings/otp_version/22.4 @@ -0,0 +1 @@ +22.4 \ No newline at end of file diff --git a/test/fixtures/warnings/otp_version/23.0 b/test/fixtures/warnings/otp_version/23.0 new file mode 100644 index 000000000..4266d8634 --- /dev/null +++ b/test/fixtures/warnings/otp_version/23.0 @@ -0,0 +1 @@ +23.0 \ No newline at end of file diff --git a/test/fixtures/warnings/otp_version/error b/test/fixtures/warnings/otp_version/error new file mode 100644 index 000000000..8fdd954df --- /dev/null +++ b/test/fixtures/warnings/otp_version/error @@ -0,0 +1 @@ +22 \ No newline at end of file diff --git a/test/fixtures/warnings/otp_version/undefined b/test/fixtures/warnings/otp_version/undefined new file mode 100644 index 000000000..66dc9051d --- /dev/null +++ b/test/fixtures/warnings/otp_version/undefined @@ -0,0 +1 @@ +undefined \ No newline at end of file diff --git a/test/gun/gun_test.exs b/test/gun/gun_test.exs new file mode 100644 index 000000000..7f185617c --- /dev/null +++ b/test/gun/gun_test.exs @@ -0,0 +1,33 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.GunTest do + use ExUnit.Case + alias Pleroma.Gun + + @moduletag :integration + + test "opens connection and receive response" do + {:ok, conn} = Gun.open('httpbin.org', 443) + assert is_pid(conn) + {:ok, _protocol} = Gun.await_up(conn) + ref = :gun.get(conn, '/get?a=b&c=d') + assert is_reference(ref) + + assert {:response, :nofin, 200, _} = Gun.await(conn, ref) + assert json = receive_response(conn, ref) + + assert %{"args" => %{"a" => "b", "c" => "d"}} = Jason.decode!(json) + end + + defp receive_response(conn, ref, acc \\ "") do + case Gun.await(conn, ref) do + {:data, :nofin, body} -> + receive_response(conn, ref, acc <> body) + + {:data, :fin, body} -> + acc <> body + end + end +end diff --git a/test/http/adapter/gun_test.exs b/test/http/adapter/gun_test.exs new file mode 100644 index 000000000..37489e1a4 --- /dev/null +++ b/test/http/adapter/gun_test.exs @@ -0,0 +1,266 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.HTTP.Adapter.GunTest do + use ExUnit.Case, async: true + use Pleroma.Tests.Helpers + import ExUnit.CaptureLog + alias Pleroma.Config + alias Pleroma.HTTP.Adapter.Gun + alias Pleroma.Pool.Connections + + setup_all do + {:ok, _} = Registry.start_link(keys: :unique, name: Pleroma.Gun.API.Mock) + :ok + end + + describe "options/1" do + clear_config([:http, :adapter]) do + Config.put([:http, :adapter], a: 1, b: 2) + end + + test "https url with default port" do + uri = URI.parse("https://example.com") + + opts = Gun.options(uri) + assert opts[:certificates_verification] + tls_opts = opts[:tls_opts] + assert tls_opts[:verify] == :verify_peer + assert tls_opts[:depth] == 20 + assert tls_opts[:reuse_sessions] == false + + assert tls_opts[:verify_fun] == + {&:ssl_verify_hostname.verify_fun/3, [check_hostname: 'example.com']} + + assert File.exists?(tls_opts[:cacertfile]) + + assert opts[:original] == "example.com:443" + end + + test "https ipv4 with default port" do + uri = URI.parse("https://127.0.0.1") + + opts = Gun.options(uri) + + assert opts[:tls_opts][:verify_fun] == + {&:ssl_verify_hostname.verify_fun/3, [check_hostname: '127.0.0.1']} + + assert opts[:original] == "127.0.0.1:443" + end + + test "https ipv6 with default port" do + uri = URI.parse("https://[2a03:2880:f10c:83:face:b00c:0:25de]") + + opts = Gun.options(uri) + + assert opts[:tls_opts][:verify_fun] == + {&:ssl_verify_hostname.verify_fun/3, + [check_hostname: '2a03:2880:f10c:83:face:b00c:0:25de']} + + assert opts[:original] == "2a03:2880:f10c:83:face:b00c:0:25de:443" + end + + test "https url with non standart port" do + uri = URI.parse("https://example.com:115") + + opts = Gun.options(uri) + + assert opts[:certificates_verification] + assert opts[:transport] == :tls + end + + test "receive conn by default" do + uri = URI.parse("http://another-domain.com") + :ok = Connections.open_conn(uri, :gun_connections) + + received_opts = Gun.options(uri) + assert received_opts[:close_conn] == false + assert is_pid(received_opts[:conn]) + end + + test "don't receive conn if receive_conn is false" do + uri = URI.parse("http://another-domain2.com") + :ok = Connections.open_conn(uri, :gun_connections) + + opts = [receive_conn: false] + received_opts = Gun.options(opts, uri) + assert received_opts[:close_conn] == nil + assert received_opts[:conn] == nil + end + + test "get conn on next request" do + level = Application.get_env(:logger, :level) + Logger.configure(level: :info) + on_exit(fn -> Logger.configure(level: level) end) + uri = URI.parse("http://some-domain2.com") + + assert capture_log(fn -> + opts = Gun.options(uri) + + assert opts[:conn] == nil + assert opts[:close_conn] == nil + end) =~ + "Gun connections pool checkin was not succesfull. Trying to open conn for next request." + + opts = Gun.options(uri) + + assert is_pid(opts[:conn]) + assert opts[:close_conn] == false + end + + test "merges with defaul http adapter config" do + defaults = Gun.options(URI.parse("https://example.com")) + assert Keyword.has_key?(defaults, :a) + assert Keyword.has_key?(defaults, :b) + end + + test "default ssl adapter opts with connection" do + uri = URI.parse("https://some-domain.com") + + :ok = Connections.open_conn(uri, :gun_connections) + + opts = Gun.options(uri) + + assert opts[:certificates_verification] + tls_opts = opts[:tls_opts] + assert tls_opts[:verify] == :verify_peer + assert tls_opts[:depth] == 20 + assert tls_opts[:reuse_sessions] == false + + assert opts[:original] == "some-domain.com:443" + assert opts[:close_conn] == false + assert is_pid(opts[:conn]) + end + + test "parses string proxy host & port" do + proxy = Config.get([:http, :proxy_url]) + Config.put([:http, :proxy_url], "localhost:8123") + on_exit(fn -> Config.put([:http, :proxy_url], proxy) end) + + uri = URI.parse("https://some-domain.com") + opts = Gun.options([receive_conn: false], uri) + assert opts[:proxy] == {'localhost', 8123} + end + + test "parses tuple proxy scheme host and port" do + proxy = Config.get([:http, :proxy_url]) + Config.put([:http, :proxy_url], {:socks, 'localhost', 1234}) + on_exit(fn -> Config.put([:http, :proxy_url], proxy) end) + + uri = URI.parse("https://some-domain.com") + opts = Gun.options([receive_conn: false], uri) + assert opts[:proxy] == {:socks, 'localhost', 1234} + end + + test "passed opts have more weight than defaults" do + proxy = Config.get([:http, :proxy_url]) + Config.put([:http, :proxy_url], {:socks5, 'localhost', 1234}) + on_exit(fn -> Config.put([:http, :proxy_url], proxy) end) + uri = URI.parse("https://some-domain.com") + opts = Gun.options([receive_conn: false, proxy: {'example.com', 4321}], uri) + + assert opts[:proxy] == {'example.com', 4321} + end + end + + describe "after_request/1" do + test "body_as not chunks" do + uri = URI.parse("http://some-domain.com") + :ok = Connections.open_conn(uri, :gun_connections) + opts = Gun.options(uri) + :ok = Gun.after_request(opts) + conn = opts[:conn] + + assert %Connections{ + conns: %{ + "http:some-domain.com:80" => %Pleroma.Gun.Conn{ + conn: ^conn, + conn_state: :idle, + used_by: [] + } + } + } = Connections.get_state(:gun_connections) + end + + test "body_as chunks" do + uri = URI.parse("http://some-domain.com") + :ok = Connections.open_conn(uri, :gun_connections) + opts = Gun.options([body_as: :chunks], uri) + :ok = Gun.after_request(opts) + conn = opts[:conn] + self = self() + + assert %Connections{ + conns: %{ + "http:some-domain.com:80" => %Pleroma.Gun.Conn{ + conn: ^conn, + conn_state: :active, + used_by: [{^self, _}] + } + } + } = Connections.get_state(:gun_connections) + end + + test "with no connection" do + uri = URI.parse("http://uniq-domain.com") + + :ok = Connections.open_conn(uri, :gun_connections) + + opts = Gun.options([body_as: :chunks], uri) + conn = opts[:conn] + opts = Keyword.delete(opts, :conn) + self = self() + + :ok = Gun.after_request(opts) + + assert %Connections{ + conns: %{ + "http:uniq-domain.com:80" => %Pleroma.Gun.Conn{ + conn: ^conn, + conn_state: :active, + used_by: [{^self, _}] + } + } + } = Connections.get_state(:gun_connections) + end + + test "with ipv4" do + uri = URI.parse("http://127.0.0.1") + :ok = Connections.open_conn(uri, :gun_connections) + opts = Gun.options(uri) + send(:gun_connections, {:gun_up, opts[:conn], :http}) + :ok = Gun.after_request(opts) + conn = opts[:conn] + + assert %Connections{ + conns: %{ + "http:127.0.0.1:80" => %Pleroma.Gun.Conn{ + conn: ^conn, + conn_state: :idle, + used_by: [] + } + } + } = Connections.get_state(:gun_connections) + end + + test "with ipv6" do + uri = URI.parse("http://[2a03:2880:f10c:83:face:b00c:0:25de]") + :ok = Connections.open_conn(uri, :gun_connections) + opts = Gun.options(uri) + send(:gun_connections, {:gun_up, opts[:conn], :http}) + :ok = Gun.after_request(opts) + conn = opts[:conn] + + assert %Connections{ + conns: %{ + "http:2a03:2880:f10c:83:face:b00c:0:25de:80" => %Pleroma.Gun.Conn{ + conn: ^conn, + conn_state: :idle, + used_by: [] + } + } + } = Connections.get_state(:gun_connections) + end + end +end diff --git a/test/http/adapter/hackney_test.exs b/test/http/adapter/hackney_test.exs new file mode 100644 index 000000000..35cb58125 --- /dev/null +++ b/test/http/adapter/hackney_test.exs @@ -0,0 +1,54 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.HTTP.Adapter.HackneyTest do + use ExUnit.Case + use Pleroma.Tests.Helpers + + alias Pleroma.Config + alias Pleroma.HTTP.Adapter.Hackney + + setup_all do + uri = URI.parse("http://domain.com") + {:ok, uri: uri} + end + + describe "options/2" do + clear_config([:http, :adapter]) do + Config.put([:http, :adapter], a: 1, b: 2) + end + + test "add proxy and opts from config", %{uri: uri} do + proxy = Config.get([:http, :proxy_url]) + Config.put([:http, :proxy_url], "localhost:8123") + on_exit(fn -> Config.put([:http, :proxy_url], proxy) end) + + opts = Hackney.options(uri) + + assert opts[:a] == 1 + assert opts[:b] == 2 + assert opts[:proxy] == "localhost:8123" + end + + test "respect connection opts and no proxy", %{uri: uri} do + opts = Hackney.options([a: 2, b: 1], uri) + + assert opts[:a] == 2 + 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 diff --git a/test/http/adapter_test.exs b/test/http/adapter_test.exs new file mode 100644 index 000000000..37e47dabe --- /dev/null +++ b/test/http/adapter_test.exs @@ -0,0 +1,65 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.HTTP.AdapterTest do + use ExUnit.Case, async: true + + alias Pleroma.HTTP.Adapter + + describe "domain_or_ip/1" do + test "with domain" do + assert Adapter.domain_or_ip("example.com") == {:domain, 'example.com'} + end + + test "with idna domain" do + assert Adapter.domain_or_ip("ですexample.com") == {:domain, 'xn--example-183fne.com'} + end + + test "with ipv4" do + assert Adapter.domain_or_ip("127.0.0.1") == {:ip, {127, 0, 0, 1}} + end + + test "with ipv6" do + assert Adapter.domain_or_ip("2a03:2880:f10c:83:face:b00c:0:25de") == + {:ip, {10_755, 10_368, 61_708, 131, 64_206, 45_068, 0, 9_694}} + end + end + + describe "domain_or_fallback/1" do + test "with domain" do + assert Adapter.domain_or_fallback("example.com") == 'example.com' + end + + test "with idna domain" do + assert Adapter.domain_or_fallback("ですexample.com") == 'xn--example-183fne.com' + end + + test "with ipv4" do + assert Adapter.domain_or_fallback("127.0.0.1") == '127.0.0.1' + end + + test "with ipv6" do + assert Adapter.domain_or_fallback("2a03:2880:f10c:83:face:b00c:0:25de") == + '2a03:2880:f10c:83:face:b00c:0:25de' + end + end + + describe "format_proxy/1" do + test "with nil" do + assert Adapter.format_proxy(nil) == nil + end + + test "with string" do + assert Adapter.format_proxy("127.0.0.1:8123") == {{127, 0, 0, 1}, 8123} + end + + test "localhost with port" do + assert Adapter.format_proxy("localhost:8123") == {'localhost', 8123} + end + + test "tuple" do + assert Adapter.format_proxy({:socks4, :localhost, 9050}) == {:socks4, 'localhost', 9050} + end + end +end diff --git a/test/http/connection_test.exs b/test/http/connection_test.exs new file mode 100644 index 000000000..c1ff0cc21 --- /dev/null +++ b/test/http/connection_test.exs @@ -0,0 +1,142 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.HTTP.ConnectionTest do + use ExUnit.Case + use Pleroma.Tests.Helpers + import ExUnit.CaptureLog + alias Pleroma.Config + alias Pleroma.HTTP.Connection + + setup_all do + {:ok, _} = Registry.start_link(keys: :unique, name: Pleroma.Gun.API.Mock) + :ok + end + + describe "parse_host/1" do + test "as atom to charlist" do + assert Connection.parse_host(:localhost) == 'localhost' + end + + test "as string to charlist" do + assert Connection.parse_host("localhost.com") == 'localhost.com' + end + + test "as string ip to tuple" do + assert Connection.parse_host("127.0.0.1") == {127, 0, 0, 1} + end + end + + describe "parse_proxy/1" do + test "ip with port" do + assert Connection.parse_proxy("127.0.0.1:8123") == {:ok, {127, 0, 0, 1}, 8123} + end + + test "host with port" do + assert Connection.parse_proxy("localhost:8123") == {:ok, 'localhost', 8123} + end + + test "as tuple" do + assert Connection.parse_proxy({:socks4, :localhost, 9050}) == + {:ok, :socks4, 'localhost', 9050} + end + + test "as tuple with string host" do + assert Connection.parse_proxy({:socks5, "localhost", 9050}) == + {:ok, :socks5, 'localhost', 9050} + end + end + + describe "parse_proxy/1 errors" do + test "ip without port" do + capture_log(fn -> + assert Connection.parse_proxy("127.0.0.1") == {:error, :error_parsing_proxy} + end) =~ "parsing proxy fail \"127.0.0.1\"" + end + + test "host without port" do + capture_log(fn -> + assert Connection.parse_proxy("localhost") == {:error, :error_parsing_proxy} + end) =~ "parsing proxy fail \"localhost\"" + end + + test "host with bad port" do + capture_log(fn -> + assert Connection.parse_proxy("localhost:port") == {:error, :error_parsing_port_in_proxy} + end) =~ "parsing port in proxy fail \"localhost:port\"" + end + + test "ip with bad port" do + capture_log(fn -> + assert Connection.parse_proxy("127.0.0.1:15.9") == {:error, :error_parsing_port_in_proxy} + end) =~ "parsing port in proxy fail \"127.0.0.1:15.9\"" + end + + test "as tuple without port" do + capture_log(fn -> + assert Connection.parse_proxy({:socks5, :localhost}) == {:error, :error_parsing_proxy} + end) =~ "parsing proxy fail {:socks5, :localhost}" + end + + test "with nil" do + assert Connection.parse_proxy(nil) == nil + end + end + + describe "options/3" do + clear_config([:http, :proxy_url]) + + test "without proxy_url in config" do + Config.delete([:http, :proxy_url]) + + opts = Connection.options(%URI{}) + refute Keyword.has_key?(opts, :proxy) + end + + test "parses string proxy host & port" do + Config.put([:http, :proxy_url], "localhost:8123") + + opts = Connection.options(%URI{}) + assert opts[:proxy] == {'localhost', 8123} + end + + test "parses tuple proxy scheme host and port" do + Config.put([:http, :proxy_url], {:socks, 'localhost', 1234}) + + opts = Connection.options(%URI{}) + assert opts[:proxy] == {:socks, 'localhost', 1234} + end + + test "passed opts have more weight than defaults" do + Config.put([:http, :proxy_url], {:socks5, 'localhost', 1234}) + + opts = Connection.options(%URI{}, proxy: {'example.com', 4321}) + + assert opts[:proxy] == {'example.com', 4321} + end + + test "default ssl adapter opts with connection" do + adapter = Application.get_env(:tesla, :adapter) + Application.put_env(:tesla, :adapter, Tesla.Adapter.Gun) + on_exit(fn -> Application.put_env(:tesla, :adapter, adapter) end) + + uri = URI.parse("https://some-domain.com") + + pid = Process.whereis(:federation) + :ok = Pleroma.Pool.Connections.open_conn(uri, :gun_connections, genserver_pid: pid) + + opts = Connection.options(uri) + + assert opts[:certificates_verification] + tls_opts = opts[:tls_opts] + assert tls_opts[:verify] == :verify_peer + assert tls_opts[:depth] == 20 + assert tls_opts[:reuse_sessions] == false + + assert opts[:original] == "some-domain.com:443" + assert opts[:close_conn] == false + assert is_pid(opts[:conn]) + end + end +end diff --git a/test/http/request_builder_test.exs b/test/http/request_builder_test.exs index 80ef25d7b..27ca651be 100644 --- a/test/http/request_builder_test.exs +++ b/test/http/request_builder_test.exs @@ -5,30 +5,32 @@ defmodule Pleroma.HTTP.RequestBuilderTest do use ExUnit.Case, async: true use Pleroma.Tests.Helpers + alias Pleroma.Config + alias Pleroma.HTTP.Request alias Pleroma.HTTP.RequestBuilder describe "headers/2" do clear_config([:http, :send_user_agent]) test "don't send pleroma user agent" do - assert RequestBuilder.headers(%{}, []) == %{headers: []} + assert RequestBuilder.headers(%Request{}, []) == %Request{headers: []} end test "send pleroma user agent" do - Pleroma.Config.put([:http, :send_user_agent], true) - Pleroma.Config.put([:http, :user_agent], :default) + Config.put([:http, :send_user_agent], true) + Config.put([:http, :user_agent], :default) - assert RequestBuilder.headers(%{}, []) == %{ - headers: [{"User-Agent", Pleroma.Application.user_agent()}] + assert RequestBuilder.headers(%Request{}, []) == %Request{ + headers: [{"user-agent", Pleroma.Application.user_agent()}] } end test "send custom user agent" do - Pleroma.Config.put([:http, :send_user_agent], true) - Pleroma.Config.put([:http, :user_agent], "totally-not-pleroma") + Config.put([:http, :send_user_agent], true) + Config.put([:http, :user_agent], "totally-not-pleroma") - assert RequestBuilder.headers(%{}, []) == %{ - headers: [{"User-Agent", "totally-not-pleroma"}] + assert RequestBuilder.headers(%Request{}, []) == %Request{ + headers: [{"user-agent", "totally-not-pleroma"}] } end end @@ -40,19 +42,19 @@ test "don't add if keyword is empty" do test "add query parameter" do assert RequestBuilder.add_optional_params( - %{}, + %Request{}, %{query: :query, body: :body, another: :val}, [ {:query, "param1=val1¶m2=val2"}, {:body, "some body"} ] - ) == %{query: "param1=val1¶m2=val2", body: "some body"} + ) == %Request{query: "param1=val1¶m2=val2", body: "some body"} end end describe "add_param/4" do test "add file parameter" do - %{ + %Request{ body: %Tesla.Multipart{ boundary: _, content_type_params: [], @@ -69,7 +71,7 @@ test "add file parameter" do } ] } - } = RequestBuilder.add_param(%{}, :file, "filename.png", "some-path/filename.png") + } = RequestBuilder.add_param(%Request{}, :file, "filename.png", "some-path/filename.png") end test "add key to body" do @@ -81,7 +83,7 @@ test "add key to body" do %Tesla.Multipart.Part{ body: "\"someval\"", dispositions: [name: "somekey"], - headers: ["Content-Type": "application/json"] + headers: [{"content-type", "application/json"}] } ] } diff --git a/test/http_test.exs b/test/http_test.exs index 5f9522cf0..d80b96496 100644 --- a/test/http_test.exs +++ b/test/http_test.exs @@ -3,8 +3,10 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTPTest do - use Pleroma.DataCase + use ExUnit.Case + use Pleroma.Tests.Helpers import Tesla.Mock + alias Pleroma.HTTP setup do mock(fn @@ -27,7 +29,7 @@ defmodule Pleroma.HTTPTest do describe "get/1" do test "returns successfully result" do - assert Pleroma.HTTP.get("http://example.com/hello") == { + assert HTTP.get("http://example.com/hello") == { :ok, %Tesla.Env{status: 200, body: "hello"} } @@ -36,7 +38,7 @@ test "returns successfully result" do describe "get/2 (with headers)" do test "returns successfully result for json content-type" do - assert Pleroma.HTTP.get("http://example.com/hello", [{"content-type", "application/json"}]) == + assert HTTP.get("http://example.com/hello", [{"content-type", "application/json"}]) == { :ok, %Tesla.Env{ @@ -50,10 +52,35 @@ test "returns successfully result for json content-type" do describe "post/2" do test "returns successfully result" do - assert Pleroma.HTTP.post("http://example.com/world", "") == { + assert HTTP.post("http://example.com/world", "") == { :ok, %Tesla.Env{status: 200, body: "world"} } end end + + describe "connection pools" do + @describetag :integration + clear_config([Pleroma.Gun.API]) do + Pleroma.Config.put([Pleroma.Gun.API], Pleroma.Gun) + end + + test "gun" do + adapter = Application.get_env(:tesla, :adapter) + Application.put_env(:tesla, :adapter, Tesla.Adapter.Gun) + + on_exit(fn -> + Application.put_env(:tesla, :adapter, adapter) + end) + + options = [adapter: [pool: :federation]] + + assert {:ok, resp} = HTTP.get("https://httpbin.org/user-agent", [], options) + + assert resp.status == 200 + + state = Pleroma.Pool.Connections.get_state(:gun_connections) + assert state.conns["https:httpbin.org:443"] + end + end end diff --git a/test/notification_test.exs b/test/notification_test.exs index 04bf5b41a..1de3c6e3b 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -649,6 +649,13 @@ test "notifications are deleted if a remote user is deleted" do "object" => remote_user.ap_id } + remote_user_url = remote_user.ap_id + + Tesla.Mock.mock(fn + %{method: :get, url: ^remote_user_url} -> + %Tesla.Env{status: 404, body: ""} + end) + {:ok, _delete_activity} = Transmogrifier.handle_incoming(delete_user_message) ObanHelpers.perform_all() diff --git a/test/otp_version_test.exs b/test/otp_version_test.exs new file mode 100644 index 000000000..f26b90f61 --- /dev/null +++ b/test/otp_version_test.exs @@ -0,0 +1,58 @@ +defmodule Pleroma.OTPVersionTest do + use ExUnit.Case, async: true + + alias Pleroma.OTPVersion + + describe "get_and_check_version/2" do + test "22.4" do + assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [ + "test/fixtures/warnings/otp_version/22.4" + ]) == :ok + end + + test "22.1" do + assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [ + "test/fixtures/warnings/otp_version/22.1" + ]) == {:error, "22.1"} + end + + test "21.1" do + assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [ + "test/fixtures/warnings/otp_version/21.1" + ]) == {:error, "21.1"} + end + + test "23.0" do + assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [ + "test/fixtures/warnings/otp_version/23.0" + ]) == :ok + end + + test "undefined" do + assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [ + "test/fixtures/warnings/otp_version/undefined" + ]) == :undefined + end + + test "not parsable" do + assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [ + "test/fixtures/warnings/otp_version/error" + ]) == :undefined + end + + test "with non existance file" do + assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [ + "test/fixtures/warnings/otp_version/non-exising", + "test/fixtures/warnings/otp_version/22.4" + ]) == :ok + end + + test "empty paths" do + assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, []) == :undefined + end + + test "another adapter" do + assert OTPVersion.get_and_check_version(Tesla.Adapter.Hackney, []) == :ok + end + end +end diff --git a/test/pool/connections_test.exs b/test/pool/connections_test.exs new file mode 100644 index 000000000..6f0e041ae --- /dev/null +++ b/test/pool/connections_test.exs @@ -0,0 +1,959 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Pool.ConnectionsTest do + use ExUnit.Case + use Pleroma.Tests.Helpers + import ExUnit.CaptureLog + alias Pleroma.Gun.API + alias Pleroma.Gun.Conn + alias Pleroma.Pool.Connections + + setup_all do + {:ok, _} = Registry.start_link(keys: :unique, name: API.Mock) + :ok + end + + setup do + name = :test_connections + adapter = Application.get_env(:tesla, :adapter) + Application.put_env(:tesla, :adapter, Tesla.Adapter.Gun) + on_exit(fn -> Application.put_env(:tesla, :adapter, adapter) end) + + {:ok, _pid} = + Connections.start_link({name, [max_connections: 2, receive_connection_timeout: 1_500]}) + + {:ok, name: name} + end + + describe "alive?/2" do + test "is alive", %{name: name} do + assert Connections.alive?(name) + end + + test "returns false if not started" do + refute Connections.alive?(:some_random_name) + end + end + + test "opens connection and reuse it on next request", %{name: name} do + url = "http://some-domain.com" + key = "http:some-domain.com:80" + refute Connections.checkin(url, name) + :ok = Connections.open_conn(url, name) + + conn = Connections.checkin(url, name) + assert is_pid(conn) + assert Process.alive?(conn) + + self = self() + + %Connections{ + conns: %{ + ^key => %Conn{ + conn: ^conn, + gun_state: :up, + used_by: [{^self, _}], + conn_state: :active + } + } + } = Connections.get_state(name) + + reused_conn = Connections.checkin(url, name) + + assert conn == reused_conn + + %Connections{ + conns: %{ + ^key => %Conn{ + conn: ^conn, + gun_state: :up, + used_by: [{^self, _}, {^self, _}], + conn_state: :active + } + } + } = Connections.get_state(name) + + :ok = Connections.checkout(conn, self, name) + + %Connections{ + conns: %{ + ^key => %Conn{ + conn: ^conn, + gun_state: :up, + used_by: [{^self, _}], + conn_state: :active + } + } + } = Connections.get_state(name) + + :ok = Connections.checkout(conn, self, name) + + %Connections{ + conns: %{ + ^key => %Conn{ + conn: ^conn, + gun_state: :up, + used_by: [], + conn_state: :idle + } + } + } = Connections.get_state(name) + end + + test "reuse connection for idna domains", %{name: name} do + url = "http://ですsome-domain.com" + refute Connections.checkin(url, name) + + :ok = Connections.open_conn(url, name) + + conn = Connections.checkin(url, name) + assert is_pid(conn) + assert Process.alive?(conn) + + self = self() + + %Connections{ + conns: %{ + "http:ですsome-domain.com:80" => %Conn{ + conn: ^conn, + gun_state: :up, + used_by: [{^self, _}], + conn_state: :active + } + } + } = Connections.get_state(name) + + reused_conn = Connections.checkin(url, name) + + assert conn == reused_conn + end + + test "reuse for ipv4", %{name: name} do + url = "http://127.0.0.1" + + refute Connections.checkin(url, name) + + :ok = Connections.open_conn(url, name) + + conn = Connections.checkin(url, name) + assert is_pid(conn) + assert Process.alive?(conn) + + self = self() + + %Connections{ + conns: %{ + "http:127.0.0.1:80" => %Conn{ + conn: ^conn, + gun_state: :up, + used_by: [{^self, _}], + conn_state: :active + } + } + } = Connections.get_state(name) + + reused_conn = Connections.checkin(url, name) + + assert conn == reused_conn + + :ok = Connections.checkout(conn, self, name) + :ok = Connections.checkout(reused_conn, self, name) + + %Connections{ + conns: %{ + "http:127.0.0.1:80" => %Conn{ + conn: ^conn, + gun_state: :up, + used_by: [], + conn_state: :idle + } + } + } = Connections.get_state(name) + end + + test "reuse for ipv6", %{name: name} do + url = "http://[2a03:2880:f10c:83:face:b00c:0:25de]" + + refute Connections.checkin(url, name) + + :ok = Connections.open_conn(url, name) + + conn = Connections.checkin(url, name) + assert is_pid(conn) + assert Process.alive?(conn) + + self = self() + + %Connections{ + conns: %{ + "http:2a03:2880:f10c:83:face:b00c:0:25de:80" => %Conn{ + conn: ^conn, + gun_state: :up, + used_by: [{^self, _}], + conn_state: :active + } + } + } = Connections.get_state(name) + + reused_conn = Connections.checkin(url, name) + + assert conn == reused_conn + end + + test "up and down ipv4", %{name: name} do + self = self() + url = "http://127.0.0.1" + :ok = Connections.open_conn(url, name) + conn = Connections.checkin(url, name) + send(name, {:gun_down, conn, nil, nil, nil}) + send(name, {:gun_up, conn, nil}) + + %Connections{ + conns: %{ + "http:127.0.0.1:80" => %Conn{ + conn: ^conn, + gun_state: :up, + used_by: [{^self, _}], + conn_state: :active + } + } + } = Connections.get_state(name) + end + + test "up and down ipv6", %{name: name} do + self = self() + url = "http://[2a03:2880:f10c:83:face:b00c:0:25de]" + :ok = Connections.open_conn(url, name) + conn = Connections.checkin(url, name) + send(name, {:gun_down, conn, nil, nil, nil}) + send(name, {:gun_up, conn, nil}) + + %Connections{ + conns: %{ + "http:2a03:2880:f10c:83:face:b00c:0:25de:80" => %Conn{ + conn: ^conn, + gun_state: :up, + used_by: [{^self, _}], + conn_state: :active + } + } + } = Connections.get_state(name) + end + + test "reuses connection based on protocol", %{name: name} do + http_url = "http://some-domain.com" + http_key = "http:some-domain.com:80" + https_url = "https://some-domain.com" + https_key = "https:some-domain.com:443" + + refute Connections.checkin(http_url, name) + :ok = Connections.open_conn(http_url, name) + conn = Connections.checkin(http_url, name) + assert is_pid(conn) + assert Process.alive?(conn) + + refute Connections.checkin(https_url, name) + :ok = Connections.open_conn(https_url, name) + https_conn = Connections.checkin(https_url, name) + + refute conn == https_conn + + reused_https = Connections.checkin(https_url, name) + + refute conn == reused_https + + assert reused_https == https_conn + + %Connections{ + conns: %{ + ^http_key => %Conn{ + conn: ^conn, + gun_state: :up + }, + ^https_key => %Conn{ + conn: ^https_conn, + gun_state: :up + } + } + } = Connections.get_state(name) + end + + test "connection can't get up", %{name: name} do + url = "http://gun-not-up.com" + + assert capture_log(fn -> + :ok = Connections.open_conn(url, name) + refute Connections.checkin(url, name) + end) =~ + "Received error on opening connection http://gun-not-up.com: {:error, :timeout}" + end + + test "process gun_down message and then gun_up", %{name: name} do + self = self() + url = "http://gun-down-and-up.com" + key = "http:gun-down-and-up.com:80" + :ok = Connections.open_conn(url, name) + conn = Connections.checkin(url, name) + + assert is_pid(conn) + assert Process.alive?(conn) + + %Connections{ + conns: %{ + ^key => %Conn{ + conn: ^conn, + gun_state: :up, + used_by: [{^self, _}] + } + } + } = Connections.get_state(name) + + send(name, {:gun_down, conn, :http, nil, nil}) + + %Connections{ + conns: %{ + ^key => %Conn{ + conn: ^conn, + gun_state: :down, + used_by: [{^self, _}] + } + } + } = Connections.get_state(name) + + send(name, {:gun_up, conn, :http}) + + conn2 = Connections.checkin(url, name) + assert conn == conn2 + + assert is_pid(conn2) + assert Process.alive?(conn2) + + %Connections{ + conns: %{ + ^key => %Conn{ + conn: _, + gun_state: :up, + used_by: [{^self, _}, {^self, _}] + } + } + } = Connections.get_state(name) + end + + test "async processes get same conn for same domain", %{name: name} do + url = "http://some-domain.com" + :ok = Connections.open_conn(url, name) + + tasks = + for _ <- 1..5 do + Task.async(fn -> + Connections.checkin(url, name) + end) + end + + tasks_with_results = Task.yield_many(tasks) + + results = + Enum.map(tasks_with_results, fn {task, res} -> + res || Task.shutdown(task, :brutal_kill) + end) + + conns = for {:ok, value} <- results, do: value + + %Connections{ + conns: %{ + "http:some-domain.com:80" => %Conn{ + conn: conn, + gun_state: :up + } + } + } = Connections.get_state(name) + + assert Enum.all?(conns, fn res -> res == conn end) + end + + test "remove frequently used and idle", %{name: name} do + self = self() + http_url = "http://some-domain.com" + https_url = "https://some-domain.com" + :ok = Connections.open_conn(https_url, name) + :ok = Connections.open_conn(http_url, name) + + conn1 = Connections.checkin(https_url, name) + + [conn2 | _conns] = + for _ <- 1..4 do + Connections.checkin(http_url, name) + end + + http_key = "http:some-domain.com:80" + + %Connections{ + conns: %{ + ^http_key => %Conn{ + conn: ^conn2, + gun_state: :up, + conn_state: :active, + used_by: [{^self, _}, {^self, _}, {^self, _}, {^self, _}] + }, + "https:some-domain.com:443" => %Conn{ + conn: ^conn1, + gun_state: :up, + conn_state: :active, + used_by: [{^self, _}] + } + } + } = Connections.get_state(name) + + :ok = Connections.checkout(conn1, self, name) + + another_url = "http://another-domain.com" + :ok = Connections.open_conn(another_url, name) + conn = Connections.checkin(another_url, name) + + %Connections{ + conns: %{ + "http:another-domain.com:80" => %Conn{ + conn: ^conn, + gun_state: :up + }, + ^http_key => %Conn{ + conn: _, + gun_state: :up + } + } + } = Connections.get_state(name) + end + + describe "integration test" do + @describetag :integration + + clear_config([API]) do + Pleroma.Config.put([API], Pleroma.Gun) + end + + test "opens connection and reuse it on next request", %{name: name} do + url = "http://httpbin.org" + :ok = Connections.open_conn(url, name) + Process.sleep(250) + conn = Connections.checkin(url, name) + + assert is_pid(conn) + assert Process.alive?(conn) + + reused_conn = Connections.checkin(url, name) + + assert conn == reused_conn + + %Connections{ + conns: %{ + "http:httpbin.org:80" => %Conn{ + conn: ^conn, + gun_state: :up + } + } + } = Connections.get_state(name) + end + + test "opens ssl connection and reuse it on next request", %{name: name} do + url = "https://httpbin.org" + :ok = Connections.open_conn(url, name) + Process.sleep(1_000) + conn = Connections.checkin(url, name) + + assert is_pid(conn) + assert Process.alive?(conn) + + reused_conn = Connections.checkin(url, name) + + assert conn == reused_conn + + %Connections{ + conns: %{ + "https:httpbin.org:443" => %Conn{ + conn: ^conn, + gun_state: :up + } + } + } = Connections.get_state(name) + end + + test "remove frequently used and idle", %{name: name} do + self = self() + https1 = "https://www.google.com" + https2 = "https://httpbin.org" + + :ok = Connections.open_conn(https1, name) + :ok = Connections.open_conn(https2, name) + Process.sleep(1_500) + conn = Connections.checkin(https1, name) + + for _ <- 1..4 do + Connections.checkin(https2, name) + end + + %Connections{ + conns: %{ + "https:httpbin.org:443" => %Conn{ + conn: _, + gun_state: :up + }, + "https:www.google.com:443" => %Conn{ + conn: _, + gun_state: :up + } + } + } = Connections.get_state(name) + + :ok = Connections.checkout(conn, self, name) + http = "http://httpbin.org" + Process.sleep(1_000) + :ok = Connections.open_conn(http, name) + conn = Connections.checkin(http, name) + + %Connections{ + conns: %{ + "http:httpbin.org:80" => %Conn{ + conn: ^conn, + gun_state: :up + }, + "https:httpbin.org:443" => %Conn{ + conn: _, + gun_state: :up + } + } + } = Connections.get_state(name) + end + + test "remove earlier used and idle", %{name: name} do + self = self() + + https1 = "https://www.google.com" + https2 = "https://httpbin.org" + :ok = Connections.open_conn(https1, name) + :ok = Connections.open_conn(https2, name) + Process.sleep(1_500) + + Connections.checkin(https1, name) + conn = Connections.checkin(https1, name) + + Process.sleep(1_000) + Connections.checkin(https2, name) + Connections.checkin(https2, name) + + %Connections{ + conns: %{ + "https:httpbin.org:443" => %Conn{ + conn: _, + gun_state: :up + }, + "https:www.google.com:443" => %Conn{ + conn: ^conn, + gun_state: :up + } + } + } = Connections.get_state(name) + + :ok = Connections.checkout(conn, self, name) + :ok = Connections.checkout(conn, self, name) + + http = "http://httpbin.org" + :ok = Connections.open_conn(http, name) + Process.sleep(1_000) + + conn = Connections.checkin(http, name) + + %Connections{ + conns: %{ + "http:httpbin.org:80" => %Conn{ + conn: ^conn, + gun_state: :up + }, + "https:httpbin.org:443" => %Conn{ + conn: _, + gun_state: :up + } + } + } = Connections.get_state(name) + end + + test "doesn't open new conn on pool overflow", %{name: name} do + self = self() + + https1 = "https://www.google.com" + https2 = "https://httpbin.org" + :ok = Connections.open_conn(https1, name) + :ok = Connections.open_conn(https2, name) + Process.sleep(1_000) + Connections.checkin(https1, name) + conn1 = Connections.checkin(https1, name) + conn2 = Connections.checkin(https2, name) + + %Connections{ + conns: %{ + "https:httpbin.org:443" => %Conn{ + conn: ^conn2, + gun_state: :up, + conn_state: :active, + used_by: [{^self, _}] + }, + "https:www.google.com:443" => %Conn{ + conn: ^conn1, + gun_state: :up, + conn_state: :active, + used_by: [{^self, _}, {^self, _}] + } + } + } = Connections.get_state(name) + + refute Connections.checkin("http://httpbin.org", name) + + %Connections{ + conns: %{ + "https:httpbin.org:443" => %Conn{ + conn: ^conn2, + gun_state: :up, + conn_state: :active, + used_by: [{^self, _}] + }, + "https:www.google.com:443" => %Conn{ + conn: ^conn1, + gun_state: :up, + conn_state: :active, + used_by: [{^self, _}, {^self, _}] + } + } + } = Connections.get_state(name) + end + + test "get idle connection with the smallest crf", %{ + name: name + } do + self = self() + + https1 = "https://www.google.com" + https2 = "https://httpbin.org" + + :ok = Connections.open_conn(https1, name) + :ok = Connections.open_conn(https2, name) + Process.sleep(1_500) + Connections.checkin(https1, name) + Connections.checkin(https2, name) + Connections.checkin(https1, name) + conn1 = Connections.checkin(https1, name) + conn2 = Connections.checkin(https2, name) + + %Connections{ + conns: %{ + "https:httpbin.org:443" => %Conn{ + conn: ^conn2, + gun_state: :up, + conn_state: :active, + used_by: [{^self, _}, {^self, _}], + crf: crf2 + }, + "https:www.google.com:443" => %Conn{ + conn: ^conn1, + gun_state: :up, + conn_state: :active, + used_by: [{^self, _}, {^self, _}, {^self, _}], + crf: crf1 + } + } + } = Connections.get_state(name) + + assert crf1 > crf2 + + :ok = Connections.checkout(conn1, self, name) + :ok = Connections.checkout(conn1, self, name) + :ok = Connections.checkout(conn1, self, name) + + :ok = Connections.checkout(conn2, self, name) + :ok = Connections.checkout(conn2, self, name) + + %Connections{ + conns: %{ + "https:httpbin.org:443" => %Conn{ + conn: ^conn2, + gun_state: :up, + conn_state: :idle, + used_by: [] + }, + "https:www.google.com:443" => %Conn{ + conn: ^conn1, + gun_state: :up, + conn_state: :idle, + used_by: [] + } + } + } = Connections.get_state(name) + + http = "http://httpbin.org" + :ok = Connections.open_conn(http, name) + Process.sleep(1_000) + conn = Connections.checkin(http, name) + + %Connections{ + conns: %{ + "https:www.google.com:443" => %Conn{ + conn: ^conn1, + gun_state: :up, + conn_state: :idle, + used_by: [], + crf: crf1 + }, + "http:httpbin.org:80" => %Conn{ + conn: ^conn, + gun_state: :up, + conn_state: :active, + used_by: [{^self, _}], + crf: crf + } + } + } = Connections.get_state(name) + + assert crf1 > crf + end + end + + describe "with proxy" do + test "as ip", %{name: name} do + url = "http://proxy-string.com" + key = "http:proxy-string.com:80" + :ok = Connections.open_conn(url, name, proxy: {{127, 0, 0, 1}, 8123}) + + conn = Connections.checkin(url, name) + + %Connections{ + conns: %{ + ^key => %Conn{ + conn: ^conn, + gun_state: :up + } + } + } = Connections.get_state(name) + + reused_conn = Connections.checkin(url, name) + + assert reused_conn == conn + end + + test "as host", %{name: name} do + url = "http://proxy-tuple-atom.com" + :ok = Connections.open_conn(url, name, proxy: {'localhost', 9050}) + conn = Connections.checkin(url, name) + + %Connections{ + conns: %{ + "http:proxy-tuple-atom.com:80" => %Conn{ + conn: ^conn, + gun_state: :up + } + } + } = Connections.get_state(name) + + reused_conn = Connections.checkin(url, name) + + assert reused_conn == conn + end + + test "as ip and ssl", %{name: name} do + url = "https://proxy-string.com" + + :ok = Connections.open_conn(url, name, proxy: {{127, 0, 0, 1}, 8123}) + conn = Connections.checkin(url, name) + + %Connections{ + conns: %{ + "https:proxy-string.com:443" => %Conn{ + conn: ^conn, + gun_state: :up + } + } + } = Connections.get_state(name) + + reused_conn = Connections.checkin(url, name) + + assert reused_conn == conn + end + + test "as host and ssl", %{name: name} do + url = "https://proxy-tuple-atom.com" + :ok = Connections.open_conn(url, name, proxy: {'localhost', 9050}) + conn = Connections.checkin(url, name) + + %Connections{ + conns: %{ + "https:proxy-tuple-atom.com:443" => %Conn{ + conn: ^conn, + gun_state: :up + } + } + } = Connections.get_state(name) + + reused_conn = Connections.checkin(url, name) + + assert reused_conn == conn + end + + test "with socks type", %{name: name} do + url = "http://proxy-socks.com" + + :ok = Connections.open_conn(url, name, proxy: {:socks5, 'localhost', 1234}) + + conn = Connections.checkin(url, name) + + %Connections{ + conns: %{ + "http:proxy-socks.com:80" => %Conn{ + conn: ^conn, + gun_state: :up + } + } + } = Connections.get_state(name) + + reused_conn = Connections.checkin(url, name) + + assert reused_conn == conn + end + + test "with socks4 type and ssl", %{name: name} do + url = "https://proxy-socks.com" + + :ok = Connections.open_conn(url, name, proxy: {:socks4, 'localhost', 1234}) + + conn = Connections.checkin(url, name) + + %Connections{ + conns: %{ + "https:proxy-socks.com:443" => %Conn{ + conn: ^conn, + gun_state: :up + } + } + } = Connections.get_state(name) + + reused_conn = Connections.checkin(url, name) + + assert reused_conn == conn + end + end + + describe "crf/3" do + setup do + crf = Connections.crf(1, 10, 1) + {:ok, crf: crf} + end + + test "more used will have crf higher", %{crf: crf} do + # used 3 times + crf1 = Connections.crf(1, 10, crf) + crf1 = Connections.crf(1, 10, crf1) + + # used 2 times + crf2 = Connections.crf(1, 10, crf) + + assert crf1 > crf2 + end + + test "recently used will have crf higher on equal references", %{crf: crf} do + # used 3 sec ago + crf1 = Connections.crf(3, 10, crf) + + # used 4 sec ago + crf2 = Connections.crf(4, 10, crf) + + assert crf1 > crf2 + end + + test "equal crf on equal reference and time", %{crf: crf} do + # used 2 times + crf1 = Connections.crf(1, 10, crf) + + # used 2 times + crf2 = Connections.crf(1, 10, crf) + + assert crf1 == crf2 + end + + test "recently used will have higher crf", %{crf: crf} do + crf1 = Connections.crf(2, 10, crf) + crf1 = Connections.crf(1, 10, crf1) + + crf2 = Connections.crf(3, 10, crf) + crf2 = Connections.crf(4, 10, crf2) + assert crf1 > crf2 + end + end + + describe "get_unused_conns/1" do + test "crf is equalent, sorting by reference" do + conns = %{ + "1" => %Conn{ + conn_state: :idle, + last_reference: now() - 1 + }, + "2" => %Conn{ + conn_state: :idle, + last_reference: now() + } + } + + assert [{"1", _unused_conn} | _others] = Connections.get_unused_conns(conns) + end + + test "reference is equalent, sorting by crf" do + conns = %{ + "1" => %Conn{ + conn_state: :idle, + crf: 1.999 + }, + "2" => %Conn{ + conn_state: :idle, + crf: 2 + } + } + + assert [{"1", _unused_conn} | _others] = Connections.get_unused_conns(conns) + end + + test "higher crf and lower reference" do + conns = %{ + "1" => %Conn{ + conn_state: :idle, + crf: 3, + last_reference: now() - 1 + }, + "2" => %Conn{ + conn_state: :idle, + crf: 2, + last_reference: now() + } + } + + assert [{"2", _unused_conn} | _others] = Connections.get_unused_conns(conns) + end + + test "lower crf and lower reference" do + conns = %{ + "1" => %Conn{ + conn_state: :idle, + crf: 1.99, + last_reference: now() - 1 + }, + "2" => %Conn{ + conn_state: :idle, + crf: 2, + last_reference: now() + } + } + + assert [{"1", _unused_conn} | _others] = Connections.get_unused_conns(conns) + end + end + + defp now do + :os.system_time(:second) + end +end diff --git a/test/reverse_proxy/client/tesla_test.exs b/test/reverse_proxy/client/tesla_test.exs new file mode 100644 index 000000000..75a70988c --- /dev/null +++ b/test/reverse_proxy/client/tesla_test.exs @@ -0,0 +1,93 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.ReverseProxy.Client.TeslaTest do + use ExUnit.Case + use Pleroma.Tests.Helpers + alias Pleroma.ReverseProxy.Client + @moduletag :integration + + clear_config_all([Pleroma.Gun.API]) do + Pleroma.Config.put([Pleroma.Gun.API], Pleroma.Gun) + end + + setup do + Application.put_env(:tesla, :adapter, Tesla.Adapter.Gun) + + on_exit(fn -> + Application.put_env(:tesla, :adapter, Tesla.Mock) + end) + end + + test "get response body stream" do + {:ok, status, headers, ref} = + Client.Tesla.request( + :get, + "http://httpbin.org/stream-bytes/10", + [{"accept", "application/octet-stream"}], + "", + [] + ) + + assert status == 200 + assert headers != [] + + {:ok, response, ref} = Client.Tesla.stream_body(ref) + check_ref(ref) + assert is_binary(response) + assert byte_size(response) == 10 + + assert :done == Client.Tesla.stream_body(ref) + assert :ok = Client.Tesla.close(ref) + end + + test "head response" do + {:ok, status, headers} = Client.Tesla.request(:head, "https://httpbin.org/get", [], "") + + assert status == 200 + assert headers != [] + end + + test "get error response" do + {:ok, status, headers, _body} = + Client.Tesla.request( + :get, + "https://httpbin.org/status/500", + [], + "" + ) + + assert status == 500 + assert headers != [] + end + + describe "client error" do + setup do + adapter = Application.get_env(:tesla, :adapter) + Application.put_env(:tesla, :adapter, Tesla.Adapter.Hackney) + + on_exit(fn -> Application.put_env(:tesla, :adapter, adapter) end) + :ok + end + + test "adapter doesn't support reading body in chunks" do + assert_raise RuntimeError, + "Elixir.Tesla.Adapter.Hackney doesn't support reading body in chunks", + fn -> + Client.Tesla.request( + :get, + "http://httpbin.org/stream-bytes/10", + [{"accept", "application/octet-stream"}], + "" + ) + end + end + end + + defp check_ref(%{pid: pid, stream: stream} = ref) do + assert is_pid(pid) + assert is_reference(stream) + assert ref[:fin] + end +end diff --git a/test/reverse_proxy_test.exs b/test/reverse_proxy/reverse_proxy_test.exs similarity index 79% rename from test/reverse_proxy_test.exs rename to test/reverse_proxy/reverse_proxy_test.exs index 0672f57db..1ab3cc4bb 100644 --- a/test/reverse_proxy_test.exs +++ b/test/reverse_proxy/reverse_proxy_test.exs @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ReverseProxyTest do - use Pleroma.Web.ConnCase, async: true + use Pleroma.Web.ConnCase import ExUnit.CaptureLog import Mox alias Pleroma.ReverseProxy @@ -29,11 +29,11 @@ defp user_agent_mock(user_agent, invokes) do {"content-length", byte_size(json) |> to_string()} ], %{url: url}} end) - |> expect(:stream_body, invokes, fn %{url: url} -> + |> expect(:stream_body, invokes, fn %{url: url} = client -> case Registry.lookup(Pleroma.ReverseProxy.ClientMock, url) do [{_, 0}] -> Registry.update_value(Pleroma.ReverseProxy.ClientMock, url, &(&1 + 1)) - {:ok, json} + {:ok, json, client} [{_, 1}] -> Registry.unregister(Pleroma.ReverseProxy.ClientMock, url) @@ -78,7 +78,39 @@ test "closed connection", %{conn: conn} do assert conn.halted end - describe "max_body " do + defp stream_mock(invokes, with_close? \\ false) do + ClientMock + |> expect(:request, fn :get, "/stream-bytes/" <> length, _, _, _ -> + Registry.register(Pleroma.ReverseProxy.ClientMock, "/stream-bytes/" <> length, 0) + + {:ok, 200, [{"content-type", "application/octet-stream"}], + %{url: "/stream-bytes/" <> length}} + end) + |> expect(:stream_body, invokes, fn %{url: "/stream-bytes/" <> length} = client -> + max = String.to_integer(length) + + case Registry.lookup(Pleroma.ReverseProxy.ClientMock, "/stream-bytes/" <> length) do + [{_, current}] when current < max -> + Registry.update_value( + Pleroma.ReverseProxy.ClientMock, + "/stream-bytes/" <> length, + &(&1 + 10) + ) + + {:ok, "0123456789", client} + + [{_, ^max}] -> + Registry.unregister(Pleroma.ReverseProxy.ClientMock, "/stream-bytes/" <> length) + :done + end + end) + + if with_close? do + expect(ClientMock, :close, fn _ -> :ok end) + end + end + + describe "max_body" do test "length returns error if content-length more than option", %{conn: conn} do user_agent_mock("hackney/1.15.1", 0) @@ -94,38 +126,6 @@ test "length returns error if content-length more than option", %{conn: conn} do end) == "" end - defp stream_mock(invokes, with_close? \\ false) do - ClientMock - |> expect(:request, fn :get, "/stream-bytes/" <> length, _, _, _ -> - Registry.register(Pleroma.ReverseProxy.ClientMock, "/stream-bytes/" <> length, 0) - - {:ok, 200, [{"content-type", "application/octet-stream"}], - %{url: "/stream-bytes/" <> length}} - end) - |> expect(:stream_body, invokes, fn %{url: "/stream-bytes/" <> length} -> - max = String.to_integer(length) - - case Registry.lookup(Pleroma.ReverseProxy.ClientMock, "/stream-bytes/" <> length) do - [{_, current}] when current < max -> - Registry.update_value( - Pleroma.ReverseProxy.ClientMock, - "/stream-bytes/" <> length, - &(&1 + 10) - ) - - {:ok, "0123456789"} - - [{_, ^max}] -> - Registry.unregister(Pleroma.ReverseProxy.ClientMock, "/stream-bytes/" <> length) - :done - end - end) - - if with_close? do - expect(ClientMock, :close, fn _ -> :ok end) - end - end - test "max_body_length returns error if streaming body more than that option", %{conn: conn} do stream_mock(3, true) @@ -223,12 +223,12 @@ defp headers_mock(_) do Registry.register(Pleroma.ReverseProxy.ClientMock, "/headers", 0) {:ok, 200, [{"content-type", "application/json"}], %{url: "/headers", headers: headers}} end) - |> expect(:stream_body, 2, fn %{url: url, headers: headers} -> + |> expect(:stream_body, 2, fn %{url: url, headers: headers} = client -> case Registry.lookup(Pleroma.ReverseProxy.ClientMock, url) do [{_, 0}] -> Registry.update_value(Pleroma.ReverseProxy.ClientMock, url, &(&1 + 1)) headers = for {k, v} <- headers, into: %{}, do: {String.capitalize(k), v} - {:ok, Jason.encode!(%{headers: headers})} + {:ok, Jason.encode!(%{headers: headers}), client} [{_, 1}] -> Registry.unregister(Pleroma.ReverseProxy.ClientMock, url) @@ -305,11 +305,11 @@ defp disposition_headers_mock(headers) do {:ok, 200, headers, %{url: "/disposition"}} end) - |> expect(:stream_body, 2, fn %{url: "/disposition"} -> + |> expect(:stream_body, 2, fn %{url: "/disposition"} = client -> case Registry.lookup(Pleroma.ReverseProxy.ClientMock, "/disposition") do [{_, 0}] -> Registry.update_value(Pleroma.ReverseProxy.ClientMock, "/disposition", &(&1 + 1)) - {:ok, ""} + {:ok, "", client} [{_, 1}] -> Registry.unregister(Pleroma.ReverseProxy.ClientMock, "/disposition") @@ -341,4 +341,45 @@ test "with content-disposition header", %{conn: conn} do assert {"content-disposition", "attachment; filename=\"filename.jpg\""} in conn.resp_headers end end + + describe "tesla client using gun integration" do + @describetag :integration + + clear_config([Pleroma.ReverseProxy.Client]) do + Pleroma.Config.put([Pleroma.ReverseProxy.Client], Pleroma.ReverseProxy.Client.Tesla) + end + + clear_config([Pleroma.Gun.API]) do + Pleroma.Config.put([Pleroma.Gun.API], Pleroma.Gun) + end + + setup do + adapter = Application.get_env(:tesla, :adapter) + Application.put_env(:tesla, :adapter, Tesla.Adapter.Gun) + + on_exit(fn -> + Application.put_env(:tesla, :adapter, adapter) + end) + end + + test "common", %{conn: conn} do + conn = ReverseProxy.call(conn, "http://httpbin.org/stream-bytes/10") + assert byte_size(conn.resp_body) == 10 + assert conn.state == :chunked + assert conn.status == 200 + end + + test "ssl", %{conn: conn} do + conn = ReverseProxy.call(conn, "https://httpbin.org/stream-bytes/10") + assert byte_size(conn.resp_body) == 10 + assert conn.state == :chunked + assert conn.status == 200 + end + + test "follow redirects", %{conn: conn} do + conn = ReverseProxy.call(conn, "https://httpbin.org/redirect/5") + assert conn.state == :chunked + assert conn.status == 200 + end + end end diff --git a/test/support/http_request_mock.ex b/test/support/http_request_mock.ex index ba3341327..5727871ea 100644 --- a/test/support/http_request_mock.ex +++ b/test/support/http_request_mock.ex @@ -107,7 +107,7 @@ def get( "https://osada.macgirvin.com/.well-known/webfinger?resource=acct:mike@osada.macgirvin.com", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -120,7 +120,7 @@ def get( "https://social.heldscal.la/.well-known/webfinger?resource=https://social.heldscal.la/user/29191", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -141,7 +141,7 @@ def get( "https://pawoo.net/.well-known/webfinger?resource=acct:https://pawoo.net/users/pekorino", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -167,7 +167,7 @@ def get( "https://social.stopwatchingus-heidelberg.de/.well-known/webfinger?resource=acct:https://social.stopwatchingus-heidelberg.de/user/18330", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -188,7 +188,7 @@ def get( "https://mamot.fr/.well-known/webfinger?resource=acct:https://mamot.fr/users/Skruyb", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -201,7 +201,7 @@ def get( "https://social.heldscal.la/.well-known/webfinger?resource=nonexistant@social.heldscal.la", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -214,7 +214,7 @@ def get( "https://squeet.me/xrd/?uri=lain@squeet.me", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -227,7 +227,7 @@ def get( "https://mst3k.interlinked.me/users/luciferMysticus", _, _, - Accept: "application/activity+json" + [{"accept", "application/activity+json"}] ) do {:ok, %Tesla.Env{ @@ -248,7 +248,7 @@ def get( "https://hubzilla.example.org/channel/kaniini", _, _, - Accept: "application/activity+json" + [{"accept", "application/activity+json"}] ) do {:ok, %Tesla.Env{ @@ -257,7 +257,7 @@ def get( }} end - def get("https://niu.moe/users/rye", _, _, Accept: "application/activity+json") do + def get("https://niu.moe/users/rye", _, _, [{"accept", "application/activity+json"}]) do {:ok, %Tesla.Env{ status: 200, @@ -265,7 +265,7 @@ def get("https://niu.moe/users/rye", _, _, Accept: "application/activity+json") }} end - def get("https://n1u.moe/users/rye", _, _, Accept: "application/activity+json") do + def get("https://n1u.moe/users/rye", _, _, [{"accept", "application/activity+json"}]) do {:ok, %Tesla.Env{ status: 200, @@ -284,7 +284,7 @@ def get("http://mastodon.example.org/users/admin/statuses/100787282858396771", _ }} end - def get("https://puckipedia.com/", _, _, Accept: "application/activity+json") do + def get("https://puckipedia.com/", _, _, [{"accept", "application/activity+json"}]) do {:ok, %Tesla.Env{ status: 200, @@ -308,9 +308,9 @@ def get("https://peertube.moe/videos/watch/df5f464b-be8d-46fb-ad81-2d4c2d1630e3" }} end - def get("https://mobilizon.org/events/252d5816-00a3-4a89-a66f-15bf65c33e39", _, _, - Accept: "application/activity+json" - ) do + def get("https://mobilizon.org/events/252d5816-00a3-4a89-a66f-15bf65c33e39", _, _, [ + {"accept", "application/activity+json"} + ]) do {:ok, %Tesla.Env{ status: 200, @@ -318,7 +318,7 @@ def get("https://mobilizon.org/events/252d5816-00a3-4a89-a66f-15bf65c33e39", _, }} end - def get("https://mobilizon.org/@tcit", _, _, Accept: "application/activity+json") do + def get("https://mobilizon.org/@tcit", _, _, [{"accept", "application/activity+json"}]) do {:ok, %Tesla.Env{ status: 200, @@ -358,7 +358,7 @@ def get("https://wedistribute.org/wp-json/pterotype/v1/actor/-blog", _, _, _) do }} end - def get("http://mastodon.example.org/users/admin", _, _, Accept: "application/activity+json") do + def get("http://mastodon.example.org/users/admin", _, _, _) do {:ok, %Tesla.Env{ status: 200, @@ -366,7 +366,9 @@ def get("http://mastodon.example.org/users/admin", _, _, Accept: "application/ac }} end - def get("http://mastodon.example.org/users/relay", _, _, Accept: "application/activity+json") do + def get("http://mastodon.example.org/users/relay", _, _, [ + {"accept", "application/activity+json"} + ]) do {:ok, %Tesla.Env{ status: 200, @@ -374,7 +376,9 @@ def get("http://mastodon.example.org/users/relay", _, _, Accept: "application/ac }} end - def get("http://mastodon.example.org/users/gargron", _, _, Accept: "application/activity+json") do + def get("http://mastodon.example.org/users/gargron", _, _, [ + {"accept", "application/activity+json"} + ]) do {:error, :nxdomain} end @@ -557,7 +561,7 @@ def get( "http://mastodon.example.org/@admin/99541947525187367", _, _, - Accept: "application/activity+json" + _ ) do {:ok, %Tesla.Env{ @@ -582,7 +586,7 @@ def get("https://shitposter.club/notice/7369654", _, _, _) do }} end - def get("https://mstdn.io/users/mayuutann", _, _, Accept: "application/activity+json") do + def get("https://mstdn.io/users/mayuutann", _, _, [{"accept", "application/activity+json"}]) do {:ok, %Tesla.Env{ status: 200, @@ -594,7 +598,7 @@ def get( "https://mstdn.io/users/mayuutann/statuses/99568293732299394", _, _, - Accept: "application/activity+json" + [{"accept", "application/activity+json"}] ) do {:ok, %Tesla.Env{ @@ -614,7 +618,7 @@ def get("https://pleroma.soykaf.com/users/lain/feed.atom", _, _, _) do }} end - def get(url, _, _, Accept: "application/xrd+xml,application/jrd+json") + def get(url, _, _, [{"accept", "application/xrd+xml,application/jrd+json"}]) when url in [ "https://pleroma.soykaf.com/.well-known/webfinger?resource=acct:https://pleroma.soykaf.com/users/lain", "https://pleroma.soykaf.com/.well-known/webfinger?resource=https://pleroma.soykaf.com/users/lain" @@ -641,7 +645,7 @@ def get( "https://shitposter.club/.well-known/webfinger?resource=https://shitposter.club/user/1", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -685,7 +689,7 @@ def get( "https://shitposter.club/.well-known/webfinger?resource=https://shitposter.club/user/5381", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -738,7 +742,7 @@ def get( "https://social.sakamoto.gq/.well-known/webfinger?resource=https://social.sakamoto.gq/users/eal", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -751,7 +755,7 @@ def get( "https://social.sakamoto.gq/objects/0ccc1a2c-66b0-4305-b23a-7f7f2b040056", _, _, - Accept: "application/atom+xml" + [{"accept", "application/atom+xml"}] ) do {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/sakamoto.atom")}} end @@ -768,7 +772,7 @@ def get( "https://mastodon.social/.well-known/webfinger?resource=https://mastodon.social/users/lambadalambda", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -790,7 +794,7 @@ def get( "http://gs.example.org/.well-known/webfinger?resource=http://gs.example.org:4040/index.php/user/1", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -804,7 +808,7 @@ def get( "http://gs.example.org:4040/index.php/user/1", _, _, - Accept: "application/activity+json" + [{"accept", "application/activity+json"}] ) do {:ok, %Tesla.Env{status: 406, body: ""}} end @@ -840,7 +844,7 @@ def get( "https://squeet.me/xrd?uri=lain@squeet.me", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -853,7 +857,7 @@ def get( "https://social.heldscal.la/.well-known/webfinger?resource=shp@social.heldscal.la", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -866,7 +870,7 @@ def get( "https://social.heldscal.la/.well-known/webfinger?resource=invalid_content@social.heldscal.la", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{status: 200, body: ""}} end @@ -883,7 +887,7 @@ def get( "http://framatube.org/main/xrd?uri=framasoft@framatube.org", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -905,7 +909,7 @@ def get( "http://gnusocial.de/main/xrd?uri=winterdienst@gnusocial.de", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -942,7 +946,7 @@ def get( "https://gerzilla.de/xrd/?uri=kaniini@gerzilla.de", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -1005,7 +1009,7 @@ def get("https://apfed.club/channel/indio", _, _, _) do %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/osada-user-indio.json")}} end - def get("https://social.heldscal.la/user/23211", _, _, Accept: "application/activity+json") do + def get("https://social.heldscal.la/user/23211", _, _, [{"accept", "application/activity+json"}]) do {:ok, Tesla.Mock.json(%{"id" => "https://social.heldscal.la/user/23211"}, status: 200)} end @@ -1138,7 +1142,7 @@ def get( "https://zetsubou.xn--q9jyb4c/.well-known/webfinger?resource=lain@zetsubou.xn--q9jyb4c", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -1151,7 +1155,7 @@ def get( "https://zetsubou.xn--q9jyb4c/.well-known/webfinger?resource=https://zetsubou.xn--q9jyb4c/users/lain", _, _, - Accept: "application/xrd+xml,application/jrd+json" + [{"accept", "application/xrd+xml,application/jrd+json"}] ) do {:ok, %Tesla.Env{ @@ -1173,7 +1177,9 @@ def get( }} end - def get("https://info.pleroma.site/activity.json", _, _, Accept: "application/activity+json") do + def get("https://info.pleroma.site/activity.json", _, _, [ + {"accept", "application/activity+json"} + ]) do {:ok, %Tesla.Env{ status: 200, @@ -1185,7 +1191,9 @@ def get("https://info.pleroma.site/activity.json", _, _, _) do {:ok, %Tesla.Env{status: 404, body: ""}} end - def get("https://info.pleroma.site/activity2.json", _, _, Accept: "application/activity+json") do + def get("https://info.pleroma.site/activity2.json", _, _, [ + {"accept", "application/activity+json"} + ]) do {:ok, %Tesla.Env{ status: 200, @@ -1197,7 +1205,9 @@ def get("https://info.pleroma.site/activity2.json", _, _, _) do {:ok, %Tesla.Env{status: 404, body: ""}} end - def get("https://info.pleroma.site/activity3.json", _, _, Accept: "application/activity+json") do + def get("https://info.pleroma.site/activity3.json", _, _, [ + {"accept", "application/activity+json"} + ]) do {:ok, %Tesla.Env{ status: 200, diff --git a/test/user_invite_token_test.exs b/test/user_invite_token_test.exs index 111e40361..671560e41 100644 --- a/test/user_invite_token_test.exs +++ b/test/user_invite_token_test.exs @@ -4,7 +4,6 @@ defmodule Pleroma.UserInviteTokenTest do use ExUnit.Case, async: true - use Pleroma.DataCase alias Pleroma.UserInviteToken describe "valid_invite?/1 one time invites" do @@ -64,7 +63,6 @@ test "expires today returns true", %{invite: invite} do test "expires yesterday returns false", %{invite: invite} do invite = %{invite | expires_at: Date.add(Date.utc_today(), -1)} - invite = Repo.insert!(invite) refute UserInviteToken.valid_invite?(invite) end end @@ -82,7 +80,6 @@ test "not overdue date and less uses returns true", %{invite: invite} do test "overdue date and less uses returns false", %{invite: invite} do invite = %{invite | expires_at: Date.add(Date.utc_today(), -1)} - invite = Repo.insert!(invite) refute UserInviteToken.valid_invite?(invite) end @@ -93,7 +90,6 @@ test "not overdue date with more uses returns false", %{invite: invite} do test "overdue date with more uses returns false", %{invite: invite} do invite = %{invite | expires_at: Date.add(Date.utc_today(), -1), uses: 5} - invite = Repo.insert!(invite) refute UserInviteToken.valid_invite?(invite) end end diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index 5fbdf96f6..02ffbfa0b 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -2439,7 +2439,8 @@ test "saving full setting if value is not keyword", %{conn: conn} do "value" => "Tesla.Adapter.Httpc", "db" => [":adapter"] } - ] + ], + "need_reboot" => true } end @@ -2526,7 +2527,6 @@ test "common config example", %{conn: conn} do %{"tuple" => [":seconds_valid", 60]}, %{"tuple" => [":path", ""]}, %{"tuple" => [":key1", nil]}, - %{"tuple" => [":partial_chain", "&:hackney_connect.partial_chain/1"]}, %{"tuple" => [":regex1", "~r/https:\/\/example.com/"]}, %{"tuple" => [":regex2", "~r/https:\/\/example.com/u"]}, %{"tuple" => [":regex3", "~r/https:\/\/example.com/i"]}, @@ -2556,7 +2556,6 @@ test "common config example", %{conn: conn} do %{"tuple" => [":seconds_valid", 60]}, %{"tuple" => [":path", ""]}, %{"tuple" => [":key1", nil]}, - %{"tuple" => [":partial_chain", "&:hackney_connect.partial_chain/1"]}, %{"tuple" => [":regex1", "~r/https:\\/\\/example.com/"]}, %{"tuple" => [":regex2", "~r/https:\\/\\/example.com/u"]}, %{"tuple" => [":regex3", "~r/https:\\/\\/example.com/i"]}, @@ -2569,7 +2568,6 @@ test "common config example", %{conn: conn} do ":seconds_valid", ":path", ":key1", - ":partial_chain", ":regex1", ":regex2", ":regex3", @@ -2583,7 +2581,8 @@ test "common config example", %{conn: conn} do "value" => "Tesla.Adapter.Httpc", "db" => [":adapter"] } - ] + ], + "need_reboot" => true } end diff --git a/test/web/common_api/common_api_utils_test.exs b/test/web/common_api/common_api_utils_test.exs index 848300ef3..759501a67 100644 --- a/test/web/common_api/common_api_utils_test.exs +++ b/test/web/common_api/common_api_utils_test.exs @@ -474,6 +474,13 @@ test "returns recipients when object not found" do activity = insert(:note_activity, user: user, note: object) Pleroma.Repo.delete(object) + obj_url = activity.data["object"] + + Tesla.Mock.mock(fn + %{method: :get, url: ^obj_url} -> + %Tesla.Env{status: 404, body: ""} + end) + assert Utils.maybe_notify_mentioned_recipients(["test-test"], activity) == [ "test-test" ] diff --git a/test/web/push/impl_test.exs b/test/web/push/impl_test.exs index acae7a734..737976f1f 100644 --- a/test/web/push/impl_test.exs +++ b/test/web/push/impl_test.exs @@ -126,7 +126,7 @@ test "renders title and body for follow activity" do user = insert(:user, nickname: "Bob") other_user = insert(:user) {:ok, _, _, activity} = CommonAPI.follow(user, other_user) - object = Object.normalize(activity) + object = Object.normalize(activity, false) assert Impl.format_body(%{activity: activity}, user, object) == "@Bob has followed you" From 2a219f5e86bea076b1bc93f1a9205c764d43a380 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 18 Feb 2020 09:12:46 -0600 Subject: [PATCH 031/581] Improve changelog message --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 48080503a..e4bce5c02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -73,7 +73,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Support for custom Elixir modules (such as MRF policies) - User settings: Add _This account is a_ option. - OAuth: admin scopes support (relevant setting: `[:auth, :enforce_oauth_admin_scope_usage]`). -- New HTTP adapter [gun](https://github.com/ninenines/gun). Gun adapter requires OTP version older that 22.2, otherwise pleroma won’t start. For hackney OTP update is not required. +- New HTTP adapter [gun](https://github.com/ninenines/gun). Gun adapter requires minimum OTP version of 22.2 otherwise Pleroma won’t start. For hackney OTP update is not required.
API Changes From 7d73e7a09a72354acf526652e307149afbf5b1a3 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 18 Feb 2020 09:18:09 -0600 Subject: [PATCH 032/581] Spelling --- lib/pleroma/http/adapter/gun.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/http/adapter/gun.ex b/lib/pleroma/http/adapter/gun.ex index f25afeda7..ec6475e96 100644 --- a/lib/pleroma/http/adapter/gun.ex +++ b/lib/pleroma/http/adapter/gun.ex @@ -90,7 +90,7 @@ defp try_to_get_conn(uri, opts) do case Connections.checkin(uri, :gun_connections) do nil -> Logger.info( - "Gun connections pool checkin was not succesfull. Trying to open conn for next request." + "Gun connections pool checkin was not successful. Trying to open conn for next request." ) :ok = Connections.open_conn(uri, :gun_connections, opts) From 138a3c1fe48bbace79c0121d4571db3c2a827860 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 18 Feb 2020 09:30:18 -0600 Subject: [PATCH 033/581] Spelling was wrong in test as well --- test/http/adapter/gun_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/http/adapter/gun_test.exs b/test/http/adapter/gun_test.exs index 37489e1a4..1d7977c83 100644 --- a/test/http/adapter/gun_test.exs +++ b/test/http/adapter/gun_test.exs @@ -101,7 +101,7 @@ test "get conn on next request" do assert opts[:conn] == nil assert opts[:close_conn] == nil end) =~ - "Gun connections pool checkin was not succesfull. Trying to open conn for next request." + "Gun connections pool checkin was not successful. Trying to open conn for next request." opts = Gun.options(uri) From c9db0507f8d49aee9988b0b63477672f5df9c0b2 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 19 Feb 2020 12:19:03 +0300 Subject: [PATCH 034/581] removing retry option and changing some logger messages levels --- lib/pleroma/http/adapter/gun.ex | 28 +++++++++++++++++++++------- lib/pleroma/pool/connections.ex | 17 ++++++++--------- test/http/adapter/gun_test.exs | 2 +- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/lib/pleroma/http/adapter/gun.ex b/lib/pleroma/http/adapter/gun.ex index ec6475e96..f1018dd8d 100644 --- a/lib/pleroma/http/adapter/gun.ex +++ b/lib/pleroma/http/adapter/gun.ex @@ -15,7 +15,7 @@ defmodule Pleroma.HTTP.Adapter.Gun do connect_timeout: 20_000, domain_lookup_timeout: 5_000, tls_handshake_timeout: 5_000, - retry_timeout: 100, + retry: 0, await_up_timeout: 5_000 ] @@ -89,7 +89,7 @@ defp try_to_get_conn(uri, opts) do try do case Connections.checkin(uri, :gun_connections) do nil -> - Logger.info( + Logger.debug( "Gun connections pool checkin was not successful. Trying to open conn for next request." ) @@ -97,7 +97,9 @@ defp try_to_get_conn(uri, opts) do opts conn when is_pid(conn) -> - Logger.debug("received conn #{inspect(conn)} #{Connections.compose_uri(uri)}") + Logger.debug( + "received conn #{inspect(conn)} #{uri.scheme}://#{Connections.compose_uri(uri)}" + ) opts |> Keyword.put(:conn, conn) @@ -105,18 +107,30 @@ defp try_to_get_conn(uri, opts) do end rescue error -> - Logger.warn("Gun connections pool checkin caused error #{inspect(error)}") + Logger.warn( + "Gun connections pool checkin caused error #{uri.scheme}://#{ + Connections.compose_uri(uri) + } #{inspect(error)}" + ) + opts catch :exit, {:timeout, _} -> - Logger.info( - "Gun connections pool checkin with timeout error #{Connections.compose_uri(uri)}" + Logger.warn( + "Gun connections pool checkin with timeout error #{uri.scheme}://#{ + Connections.compose_uri(uri) + }" ) opts :exit, error -> - Logger.warn("Gun pool checkin exited with error #{inspect(error)}") + Logger.warn( + "Gun pool checkin exited with error #{uri.scheme}://#{Connections.compose_uri(uri)} #{ + inspect(error) + }" + ) + opts end end diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index 1ed16d1c1..c7136e0e0 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -52,8 +52,7 @@ def open_conn(%URI{} = uri, name, opts) do opts = opts |> Enum.into(%{}) - |> Map.put_new(:receive, false) - |> Map.put_new(:retry, pool_opts[:retry] || 5) + |> Map.put_new(:retry, pool_opts[:retry] || 0) |> Map.put_new(:retry_timeout, pool_opts[:retry_timeout] || 100) |> Map.put_new(:await_up_timeout, pool_opts[:await_up_timeout] || 5_000) @@ -108,11 +107,11 @@ def handle_cast({:checkout, conn_pid, pid}, state) do put_in(state.conns[key], %{conn | conn_state: conn_state, used_by: used_by}) else false -> - Logger.warn("checkout for closed conn #{inspect(conn_pid)}") + Logger.debug("checkout for closed conn #{inspect(conn_pid)}") state nil -> - Logger.info("checkout for alive conn #{inspect(conn_pid)}, but is not in state") + Logger.debug("checkout for alive conn #{inspect(conn_pid)}, but is not in state") state end @@ -172,15 +171,15 @@ def handle_info({:gun_up, conn_pid, _protocol}, state) do }) else :error_gun_info -> - Logger.warn(":gun.info caused error") + Logger.debug(":gun.info caused error") state false -> - Logger.warn(":gun_up message for closed conn #{inspect(conn_pid)}") + Logger.debug(":gun_up message for closed conn #{inspect(conn_pid)}") state nil -> - Logger.warn( + Logger.debug( ":gun_up message for alive conn #{inspect(conn_pid)}, but deleted from state" ) @@ -216,11 +215,11 @@ def handle_info({:gun_down, conn_pid, _protocol, _reason, _killed}, state) do else false -> # gun can send gun_down for closed conn, maybe connection is not closed yet - Logger.warn(":gun_down message for closed conn #{inspect(conn_pid)}") + Logger.debug(":gun_down message for closed conn #{inspect(conn_pid)}") state nil -> - Logger.warn( + Logger.debug( ":gun_down message for alive conn #{inspect(conn_pid)}, but deleted from state" ) diff --git a/test/http/adapter/gun_test.exs b/test/http/adapter/gun_test.exs index 1d7977c83..ef1b4a882 100644 --- a/test/http/adapter/gun_test.exs +++ b/test/http/adapter/gun_test.exs @@ -91,7 +91,7 @@ test "don't receive conn if receive_conn is false" do test "get conn on next request" do level = Application.get_env(:logger, :level) - Logger.configure(level: :info) + Logger.configure(level: :debug) on_exit(fn -> Logger.configure(level: level) end) uri = URI.parse("http://some-domain2.com") From effb4a3d48462060e31db23bfcfd3e7c989d3141 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Sat, 21 Sep 2019 03:15:09 +0200 Subject: [PATCH 035/581] init.d/pleroma: Add option to attach an elixir console --- installation/init.d/pleroma | 48 +++++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/installation/init.d/pleroma b/installation/init.d/pleroma index ed50bb551..384536f7e 100755 --- a/installation/init.d/pleroma +++ b/installation/init.d/pleroma @@ -1,21 +1,45 @@ #!/sbin/openrc-run - -# Requires OpenRC >= 0.35 -directory=/opt/pleroma - -command=/usr/bin/mix -command_args="phx.server" +supervisor=supervise-daemon command_user=pleroma:pleroma command_background=1 - -export PORT=4000 -export MIX_ENV=prod - # Ask process to terminate within 30 seconds, otherwise kill it retry="SIGTERM/30/SIGKILL/5" - pidfile="/var/run/pleroma.pid" +directory=/opt/pleroma +healthcheck_delay=60 +healthcheck_timer=30 + +: ${pleroma_port:-4000} + +# Needs OpenRC >= 0.42 +#respawn_max=0 +#respawn_delay=5 + +# put pleroma_console=YES in /etc/conf.d/pleroma if you want to be able to +# connect to pleroma via an elixir console +if yesno "${pleroma_console}"; then + command=elixir + command_args="--name pleroma@127.0.0.1 --erl '-kernel inet_dist_listen_min 9001 inet_dist_listen_max 9001 inet_dist_use_interface {127,0,0,1}' -S mix phx.server" + + start_post() { + einfo "You can get a console by using this command as pleroma's user:" + einfo "iex --name console@127.0.0.1 --remsh pleroma@127.0.0.1" + } +else + command=/usr/bin/mix + command_args="phx.server" +fi + +export MIX_ENV=prod depend() { - need nginx postgresql + need nginx postgresql +} + +healthcheck() { + # put pleroma_health=YES in /etc/conf.d/pleroma if you want healthchecking + # and make sure you have curl installed + yesno "$pleroma_health" || return 0 + + curl -q "localhost:${pleroma_port}/api/pleroma/healthcheck" } From 3849bbb60d9085bced717fef1f09216d570af287 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 21 Feb 2020 10:15:56 +0300 Subject: [PATCH 036/581] temp using tesla from fork --- mix.exs | 6 +++++- mix.lock | 46 +++++++++++++++++++++++----------------------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/mix.exs b/mix.exs index 273307bbe..18e33b214 100644 --- a/mix.exs +++ b/mix.exs @@ -119,7 +119,11 @@ defp deps do {:calendar, "~> 0.17.4"}, {:cachex, "~> 3.0.2"}, {:poison, "~> 3.0", override: true}, - {:tesla, "~> 1.3", override: true}, + # {:tesla, "~> 1.3", override: true}, + {:tesla, + github: "alex-strizhakov/tesla", + ref: "922cc3db13b421763edbea76246b8ea61c38c6fa", + override: true}, {:castore, "~> 0.1"}, {:cowlib, "~> 2.8", override: true}, {:gun, diff --git a/mix.lock b/mix.lock index 12ce1afac..10b2fe30d 100644 --- a/mix.lock +++ b/mix.lock @@ -21,42 +21,42 @@ "crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"}, "crypt": {:git, "https://github.com/msantos/crypt", "1f2b58927ab57e72910191a7ebaeff984382a1d3", [ref: "1f2b58927ab57e72910191a7ebaeff984382a1d3"]}, "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, - "db_connection": {:hex, :db_connection, "2.2.1", "caee17725495f5129cb7faebde001dc4406796f12a62b8949f4ac69315080566", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm"}, + "db_connection": {:hex, :db_connection, "2.2.1", "caee17725495f5129cb7faebde001dc4406796f12a62b8949f4ac69315080566", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm", "2b02ece62d9f983fcd40954e443b7d9e6589664380e5546b2b9b523cd0fb59e1"}, "decimal": {:hex, :decimal, "1.8.1", "a4ef3f5f3428bdbc0d35374029ffcf4ede8533536fa79896dd450168d9acdf3c", [:mix], [], "hexpm", "3cb154b00225ac687f6cbd4acc4b7960027c757a5152b369923ead9ddbca7aec"}, "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, - "earmark": {:hex, :earmark, "1.4.3", "364ca2e9710f6bff494117dbbd53880d84bebb692dafc3a78eb50aa3183f2bfd", [:mix], [], "hexpm"}, - "ecto": {:hex, :ecto, "3.3.3", "0830bf3aebcbf3d8c1a1811cd581773b6866886c012f52c0f027031fa96a0b53", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm"}, + "earmark": {:hex, :earmark, "1.4.3", "364ca2e9710f6bff494117dbbd53880d84bebb692dafc3a78eb50aa3183f2bfd", [:mix], [], "hexpm", "8cf8a291ebf1c7b9539e3cddb19e9cef066c2441b1640f13c34c1d3cfc825fec"}, + "ecto": {:hex, :ecto, "3.3.3", "0830bf3aebcbf3d8c1a1811cd581773b6866886c012f52c0f027031fa96a0b53", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "12e368e3c2a2938d7776defaabdae40e82900fc4d8d66120ec1e01dfd8b93c3a"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, - "ecto_sql": {:hex, :ecto_sql, "3.3.4", "aa18af12eb875fbcda2f75e608b3bd534ebf020fc4f6448e4672fcdcbb081244", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4 or ~> 3.3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm"}, - "esshd": {:hex, :esshd, "0.1.1", "d4dd4c46698093a40a56afecce8a46e246eb35463c457c246dacba2e056f31b5", [:mix], [], "hexpm"}, + "ecto_sql": {:hex, :ecto_sql, "3.3.4", "aa18af12eb875fbcda2f75e608b3bd534ebf020fc4f6448e4672fcdcbb081244", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4 or ~> 3.3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5eccbdbf92e3c6f213007a82d5dbba4cd9bb659d1a21331f89f408e4c0efd7a8"}, + "esshd": {:hex, :esshd, "0.1.1", "d4dd4c46698093a40a56afecce8a46e246eb35463c457c246dacba2e056f31b5", [:mix], [], "hexpm", "d73e341e3009d390aa36387dc8862860bf9f874c94d9fd92ade2926376f49981"}, "eternal": {:hex, :eternal, "1.2.1", "d5b6b2499ba876c57be2581b5b999ee9bdf861c647401066d3eeed111d096bc4", [:mix], [], "hexpm", "b14f1dc204321429479c569cfbe8fb287541184ed040956c8862cb7a677b8406"}, "ex2ms": {:hex, :ex2ms, "1.5.0", "19e27f9212be9a96093fed8cdfbef0a2b56c21237196d26760f11dfcfae58e97", [:mix], [], "hexpm"}, "ex_aws": {:hex, :ex_aws, "2.1.1", "1e4de2106cfbf4e837de41be41cd15813eabc722315e388f0d6bb3732cec47cd", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "1.6.3 or 1.6.5 or 1.7.1 or 1.8.6 or ~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8", [hex: :jsx, repo: "hexpm", optional: true]}, {:poison, ">= 1.2.0", [hex: :poison, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "06b6fde12b33bb6d65d5d3493e903ba5a56d57a72350c15285a4298338089e10"}, "ex_aws_s3": {:hex, :ex_aws_s3, "2.0.2", "c0258bbdfea55de4f98f0b2f0ca61fe402cc696f573815134beb1866e778f47b", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "0569f5b211b1a3b12b705fe2a9d0e237eb1360b9d76298028df2346cad13097a"}, "ex_const": {:hex, :ex_const, "0.2.4", "d06e540c9d834865b012a17407761455efa71d0ce91e5831e86881b9c9d82448", [:mix], [], "hexpm", "96fd346610cc992b8f896ed26a98be82ac4efb065a0578f334a32d60a3ba9767"}, - "ex_doc": {:hex, :ex_doc, "0.21.3", "857ec876b35a587c5d9148a2512e952e24c24345552259464b98bfbb883c7b42", [:mix], [{:earmark, "~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm"}, + "ex_doc": {:hex, :ex_doc, "0.21.3", "857ec876b35a587c5d9148a2512e952e24c24345552259464b98bfbb883c7b42", [:mix], [{:earmark, "~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "0db1ee8d1547ab4877c5b5dffc6604ef9454e189928d5ba8967d4a58a801f161"}, "ex_machina": {:hex, :ex_machina, "2.3.0", "92a5ad0a8b10ea6314b876a99c8c9e3f25f4dde71a2a835845b136b9adaf199a", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "b84f6af156264530b312a8ab98ac6088f6b77ae5fe2058305c81434aa01fbaf9"}, - "ex_syslogger": {:hex, :ex_syslogger, "1.5.0", "bc936ee3fd13d9e592cb4c3a1e8a55fccd33b05e3aa7b185f211f3ed263ff8f0", [:mix], [{:poison, ">= 1.5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:syslog, "~> 1.0.5", [hex: :syslog, repo: "hexpm", optional: false]}], "hexpm"}, - "excoveralls": {:hex, :excoveralls, "0.12.2", "a513defac45c59e310ac42fcf2b8ae96f1f85746410f30b1ff2b710a4b6cd44b", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm"}, + "ex_syslogger": {:hex, :ex_syslogger, "1.5.0", "bc936ee3fd13d9e592cb4c3a1e8a55fccd33b05e3aa7b185f211f3ed263ff8f0", [:mix], [{:poison, ">= 1.5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:syslog, "~> 1.0.5", [hex: :syslog, repo: "hexpm", optional: false]}], "hexpm", "f3b4b184dcdd5f356b7c26c6cd72ab0918ba9dfb4061ccfaf519e562942af87b"}, + "excoveralls": {:hex, :excoveralls, "0.12.2", "a513defac45c59e310ac42fcf2b8ae96f1f85746410f30b1ff2b710a4b6cd44b", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "151c476331d49b45601ffc45f43cb3a8beb396b02a34e3777fea0ad34ae57d89"}, "fast_html": {:hex, :fast_html, "1.0.3", "2cc0d4b68496266a1530e0c852cafeaede0bd10cfdee26fda50dc696c203162f", [:make, :mix], [], "hexpm", "ab3d782b639d3c4655fbaec0f9d032c91f8cab8dd791ac7469c2381bc7c32f85"}, "fast_sanitize": {:hex, :fast_sanitize, "0.1.7", "2a7cd8734c88a2de6de55022104f8a3b87f1fdbe8bbf131d9049764b53d50d0d", [:mix], [{:fast_html, "~> 1.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f39fe8ea08fbac17487c30bf09b7d9f3e12472e51fb07a88ffeb8fd17da8ab67"}, "flake_id": {:hex, :flake_id, "0.1.0", "7716b086d2e405d09b647121a166498a0d93d1a623bead243e1f74216079ccb3", [:mix], [{:base62, "~> 1.2", [hex: :base62, repo: "hexpm", optional: false]}, {:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "31fc8090fde1acd267c07c36ea7365b8604055f897d3a53dd967658c691bd827"}, - "floki": {:hex, :floki, "0.25.0", "b1c9ddf5f32a3a90b43b76f3386ca054325dc2478af020e87b5111c19f2284ac", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm"}, + "floki": {:hex, :floki, "0.25.0", "b1c9ddf5f32a3a90b43b76f3386ca054325dc2478af020e87b5111c19f2284ac", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "631f4e627c46d5ecd347df5a2accdaf0621c77c3693c5b75a8ad58e84c61f242"}, "gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm", "29bd14a88030980849c7ed2447b8db6d6c9278a28b11a44cafe41b791205440f"}, "gen_stage": {:hex, :gen_stage, "0.14.3", "d0c66f1c87faa301c1a85a809a3ee9097a4264b2edf7644bf5c123237ef732bf", [:mix], [], "hexpm"}, "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", "bd6425ab87428cf4c95f4d23e0a48fd065fbd714", [ref: "bd6425ab87428cf4c95f4d23e0a48fd065fbd714"]}, "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"}, - "html_entities": {:hex, :html_entities, "0.5.1", "1c9715058b42c35a2ab65edc5b36d0ea66dd083767bef6e3edb57870ef556549", [:mix], [], "hexpm"}, + "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"}, + "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"}, "inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm", "64a2d30189704ae41ca7dbdd587f5291db5d1dda1414e0774c29ffc81088c1bc"}, "jason": {:hex, :jason, "1.1.2", "b03dedea67a99223a2eaf9f1264ce37154564de899fd3d8b9a21b1a6fd64afe7", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fdf843bca858203ae1de16da2ee206f53416bbda5dc8c9e78f43243de4bc3afe"}, - "joken": {:hex, :joken, "2.2.0", "2daa1b12be05184aff7b5ace1d43ca1f81345962285fff3f88db74927c954d3a", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm"}, - "jose": {:hex, :jose, "1.10.1", "16d8e460dae7203c6d1efa3f277e25b5af8b659febfc2f2eb4bacf87f128b80a", [:mix, :rebar3], [], "hexpm"}, + "joken": {:hex, :joken, "2.2.0", "2daa1b12be05184aff7b5ace1d43ca1f81345962285fff3f88db74927c954d3a", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "b4f92e30388206f869dd25d1af628a1d99d7586e5cf0672f64d4df84c4d2f5e9"}, + "jose": {:hex, :jose, "1.10.1", "16d8e460dae7203c6d1efa3f277e25b5af8b659febfc2f2eb4bacf87f128b80a", [:mix, :rebar3], [], "hexpm", "3c7ddc8a9394b92891db7c2771da94bf819834a1a4c92e30857b7d582e2f8257"}, "libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm"}, "makeup": {:hex, :makeup, "1.0.0", "671df94cf5a594b739ce03b0d0316aa64312cee2574b6a44becb83cd90fb05dc", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "a10c6eb62cca416019663129699769f0c2ccf39428b3bb3c0cb38c718a0c186d"}, "makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "d4b316c7222a85bbaa2fd7c6e90e37e953257ad196dc229505137c5e505e9eff"}, @@ -69,38 +69,38 @@ "mogrify": {:hex, :mogrify, "0.6.1", "de1b527514f2d95a7bbe9642eb556061afb337e220cf97adbf3a4e6438ed70af", [:mix], [], "hexpm", "3bc928d817974fa10cc11e6c89b9a9361e37e96dbbf3d868c41094ec05745dcd"}, "mox": {:hex, :mox, "0.5.1", "f86bb36026aac1e6f924a4b6d024b05e9adbed5c63e8daa069bd66fb3292165b", [:mix], [], "hexpm", "052346cf322311c49a0f22789f3698eea030eec09b8c47367f0686ef2634ae14"}, "myhtmlex": {:git, "https://git.pleroma.social/pleroma/myhtmlex.git", "ad0097e2f61d4953bfef20fb6abddf23b87111e6", [ref: "ad0097e2f61d4953bfef20fb6abddf23b87111e6", submodules: true]}, - "nimble_parsec": {:hex, :nimble_parsec, "0.5.3", "def21c10a9ed70ce22754fdeea0810dafd53c2db3219a0cd54cf5526377af1c6", [:mix], [], "hexpm"}, + "nimble_parsec": {:hex, :nimble_parsec, "0.5.3", "def21c10a9ed70ce22754fdeea0810dafd53c2db3219a0cd54cf5526377af1c6", [:mix], [], "hexpm", "589b5af56f4afca65217a1f3eb3fee7e79b09c40c742fddc1c312b3ac0b3399f"}, "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, "oban": {:hex, :oban, "0.12.1", "695e9490c6e0edfca616d80639528e448bd29b3bff7b7dd10a56c79b00a5d7fb", [:mix], [{:ecto_sql, "~> 3.1", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c1d58d69b8b5a86e7167abbb8cc92764a66f25f12f6172052595067fc6a30a17"}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "0.12.4", "8dd29ed783f2e12195d7e0a4640effc0a7c37e6537da491f1db01839eee6d053", [:mix], [], "hexpm", "595d09db74cb093b1903381c9de423276a931a2480a46a1a5dc7f932a2a6375b"}, - "phoenix": {:hex, :phoenix, "1.4.13", "67271ad69b51f3719354604f4a3f968f83aa61c19199343656c9caee057ff3b8", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm"}, - "phoenix_ecto": {:hex, :phoenix_ecto, "4.1.0", "a044d0756d0464c5a541b4a0bf4bcaf89bffcaf92468862408290682c73ae50d", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, - "phoenix_html": {:hex, :phoenix_html, "2.14.0", "d8c6bc28acc8e65f8ea0080ee05aa13d912c8758699283b8d3427b655aabe284", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, + "phoenix": {:hex, :phoenix, "1.4.13", "67271ad69b51f3719354604f4a3f968f83aa61c19199343656c9caee057ff3b8", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ab765a0feddb81fc62e2116c827b5f068df85159c162bee760745276ad7ddc1b"}, + "phoenix_ecto": {:hex, :phoenix_ecto, "4.1.0", "a044d0756d0464c5a541b4a0bf4bcaf89bffcaf92468862408290682c73ae50d", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "c5e666a341ff104d0399d8f0e4ff094559b2fde13a5985d4cb5023b2c2ac558b"}, + "phoenix_html": {:hex, :phoenix_html, "2.14.0", "d8c6bc28acc8e65f8ea0080ee05aa13d912c8758699283b8d3427b655aabe284", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "b0bb30eda478a06dbfbe96728061a93833db3861a49ccb516f839ecb08493fbb"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "1.1.2", "496c303bdf1b2e98a9d26e89af5bba3ab487ba3a3735f74bf1f4064d2a845a3e", [:mix], [], "hexpm", "1f13f9f0f3e769a667a6b6828d29dec37497a082d195cc52dbef401a9b69bf38"}, "phoenix_swoosh": {:hex, :phoenix_swoosh, "0.2.0", "a7e0b32077cd6d2323ae15198839b05d9caddfa20663fd85787479e81f89520e", [:mix], [{:phoenix, "~> 1.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.2", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 0.1", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "ebf1bfa7b3c1c850c04929afe02e2e0d7ab135e0706332c865de03e761676b1f"}, "plug": {:hex, :plug, "1.9.0", "8d7c4e26962283ff9f8f3347bd73838e2413fbc38b7bb5467d5924f68f3a5a4a", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "9902eda2c52ada2a096434682e99a2493f5d06a94d6ac6bcfff9805f952350f1"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.1.2", "8b0addb5908c5238fac38e442e81b6fcd32788eaa03246b4d55d147c47c5805e", [:mix], [{:cowboy, "~> 2.5", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, - "plug_crypto": {:hex, :plug_crypto, "1.1.2", "bdd187572cc26dbd95b87136290425f2b580a116d3fb1f564216918c9730d227", [:mix], [], "hexpm"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.1.2", "8b0addb5908c5238fac38e442e81b6fcd32788eaa03246b4d55d147c47c5805e", [:mix], [{:cowboy, "~> 2.5", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "7d722581ce865a237e14da6d946f92704101740a256bd13ec91e63c0b122fc70"}, + "plug_crypto": {:hex, :plug_crypto, "1.1.2", "bdd187572cc26dbd95b87136290425f2b580a116d3fb1f564216918c9730d227", [:mix], [], "hexpm", "6b8b608f895b6ffcfad49c37c7883e8df98ae19c6a28113b02aa1e9c5b22d6b5"}, "plug_static_index_html": {:hex, :plug_static_index_html, "1.0.0", "840123d4d3975585133485ea86af73cb2600afd7f2a976f9f5fd8b3808e636a0", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "79fd4fcf34d110605c26560cbae8f23c603ec4158c08298bd4360fdea90bb5cf"}, "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, "postgrex": {:hex, :postgrex, "0.15.3", "5806baa8a19a68c4d07c7a624ccdb9b57e89cbc573f1b98099e3741214746ae4", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "4737ce62a31747b4c63c12b20c62307e51bb4fcd730ca0c32c280991e0606c90"}, - "prometheus": {:hex, :prometheus, "4.5.0", "8f4a2246fe0beb50af0f77c5e0a5bb78fe575c34a9655d7f8bc743aad1c6bf76", [:mix, :rebar3], [], "hexpm"}, + "prometheus": {:hex, :prometheus, "4.5.0", "8f4a2246fe0beb50af0f77c5e0a5bb78fe575c34a9655d7f8bc743aad1c6bf76", [:mix, :rebar3], [], "hexpm", "679b5215480fff612b8351f45c839d995a07ce403e42ff02f1c6b20960d41a4e"}, "prometheus_ecto": {:hex, :prometheus_ecto, "1.4.3", "3dd4da1812b8e0dbee81ea58bb3b62ed7588f2eae0c9e97e434c46807ff82311", [:mix], [{:ecto, "~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "8d66289f77f913b37eda81fd287340c17e61a447549deb28efc254532b2bed82"}, "prometheus_ex": {:hex, :prometheus_ex, "3.0.5", "fa58cfd983487fc5ead331e9a3e0aa622c67232b3ec71710ced122c4c453a02f", [:mix], [{:prometheus, "~> 4.0", [hex: :prometheus, repo: "hexpm", optional: false]}], "hexpm", "9fd13404a48437e044b288b41f76e64acd9735fb8b0e3809f494811dfa66d0fb"}, "prometheus_phoenix": {:hex, :prometheus_phoenix, "1.3.0", "c4b527e0b3a9ef1af26bdcfbfad3998f37795b9185d475ca610fe4388fdd3bb5", [:mix], [{:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.3 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "c4d1404ac4e9d3d963da601db2a7d8ea31194f0017057fabf0cfb9bf5a6c8c75"}, "prometheus_plugs": {:hex, :prometheus_plugs, "1.1.5", "25933d48f8af3a5941dd7b621c889749894d8a1082a6ff7c67cc99dec26377c5", [:mix], [{:accept, "~> 0.1", [hex: :accept, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}, {:prometheus_process_collector, "~> 1.1", [hex: :prometheus_process_collector, repo: "hexpm", optional: true]}], "hexpm", "0273a6483ccb936d79ca19b0ab629aef0dba958697c94782bb728b920dfc6a79"}, "quack": {:hex, :quack, "0.1.1", "cca7b4da1a233757fdb44b3334fce80c94785b3ad5a602053b7a002b5a8967bf", [:mix], [{:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: false]}, {:tesla, "~> 1.2.0", [hex: :tesla, repo: "hexpm", optional: false]}], "hexpm", "d736bfa7444112eb840027bb887832a0e403a4a3437f48028c3b29a2dbbd2543"}, "ranch": {:hex, :ranch, "1.7.1", "6b1fab51b49196860b733a49c07604465a47bdb78aa10c1c16a3d199f7f8c881", [:rebar3], [], "hexpm", "451d8527787df716d99dc36162fca05934915db0b6141bbdac2ea8d3c7afc7d7"}, - "recon": {:hex, :recon, "2.5.0", "2f7fcbec2c35034bade2f9717f77059dc54eb4e929a3049ca7ba6775c0bd66cd", [:mix, :rebar3], [], "hexpm"}, + "recon": {:hex, :recon, "2.5.0", "2f7fcbec2c35034bade2f9717f77059dc54eb4e929a3049ca7ba6775c0bd66cd", [:mix, :rebar3], [], "hexpm", "72f3840fedd94f06315c523f6cecf5b4827233bed7ae3fe135b2a0ebeab5e196"}, "remote_ip": {:git, "https://git.pleroma.social/pleroma/remote_ip.git", "825dc00aaba5a1b7c4202a532b696b595dd3bcb3", [ref: "825dc00aaba5a1b7c4202a532b696b595dd3bcb3"]}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.5", "6eaf7ad16cb568bb01753dbbd7a95ff8b91c7979482b95f38443fe2c8852a79b", [:make, :mix, :rebar3], [], "hexpm", "13104d7897e38ed7f044c4de953a6c28597d1c952075eb2e328bc6d6f2bfc496"}, "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.0.6", "995970c9aa7feb380ac493302138e308d6e04fd57da95b439a6df5bb3bf75076", [:rebar3], [], "hexpm"}, + "syslog": {:hex, :syslog, "1.0.6", "995970c9aa7feb380ac493302138e308d6e04fd57da95b439a6df5bb3bf75076", [:rebar3], [], "hexpm", "769ddfabd0d2a16f3f9c17eb7509951e0ca4f68363fb26f2ee51a8ec4a49881a"}, "telemetry": {:hex, :telemetry, "0.4.1", "ae2718484892448a24470e6aa341bc847c3277bfb8d4e9289f7474d752c09c7f", [:rebar3], [], "hexpm", "4738382e36a0a9a2b6e25d67c960e40e1a2c95560b9f936d8e29de8cd858480f"}, - "tesla": {:hex, :tesla, "1.3.2", "deb92c5c9ce35e747a395ba413ca78593a4f75bf0e1545630ee2e3d34264021e", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, "~> 1.3", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "~> 4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.3", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm"}, + "tesla": {:git, "https://github.com/alex-strizhakov/tesla.git", "922cc3db13b421763edbea76246b8ea61c38c6fa", [ref: "922cc3db13b421763edbea76246b8ea61c38c6fa"]}, "timex": {:hex, :timex, "3.6.1", "efdf56d0e67a6b956cc57774353b0329c8ab7726766a11547e529357ffdc1d56", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5 or ~> 1.0.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "f354efb2400dd7a80fd9eb6c8419068c4f632da4ac47f3d8822d6e33f08bc852"}, "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"}, From a03c420b84d9901be70520d8c027ccb53449990d Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 21 Feb 2020 12:32:42 +0300 Subject: [PATCH 037/581] by default don't use gun retries remove conn depends on retry setting from config --- config/config.exs | 2 +- lib/pleroma/pool/connections.ex | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/config/config.exs b/config/config.exs index 853a53fc9..7f3a4d1b6 100644 --- a/config/config.exs +++ b/config/config.exs @@ -599,7 +599,7 @@ config :pleroma, :connections_pool, receive_connection_timeout: 250, max_connections: 250, - retry: 5, + retry: 0, retry_timeout: 100, await_up_timeout: 5_000 diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index c7136e0e0..d20927580 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -5,6 +5,8 @@ defmodule Pleroma.Pool.Connections do use GenServer + alias Pleroma.Config + require Logger @type domain :: String.t() @@ -33,7 +35,7 @@ def checkin(url, name) def checkin(url, name) when is_binary(url), do: checkin(URI.parse(url), name) def checkin(%URI{} = uri, name) do - timeout = Pleroma.Config.get([:connections_pool, :receive_connection_timeout], 250) + timeout = Config.get([:connections_pool, :receive_connection_timeout], 250) GenServer.call( name, @@ -47,7 +49,7 @@ def open_conn(url, name, opts \\ []) def open_conn(url, name, opts) when is_binary(url), do: open_conn(URI.parse(url), name, opts) def open_conn(%URI{} = uri, name, opts) do - pool_opts = Pleroma.Config.get([:connections_pool], []) + pool_opts = Config.get([:connections_pool], []) opts = opts @@ -193,12 +195,13 @@ def handle_info({:gun_up, conn_pid, _protocol}, state) do @impl true def handle_info({:gun_down, conn_pid, _protocol, _reason, _killed}, state) do + retries = Config.get([:connections_pool, :retry], 0) # we can't get info on this pid, because pid is dead state = with true <- Process.alive?(conn_pid), {key, conn} <- find_conn(state.conns, conn_pid) do - if conn.retries == 5 do - Logger.debug("closing conn if retries is eq 5 #{inspect(conn_pid)}") + if conn.retries == retries do + Logger.debug("closing conn if retries is eq #{inspect(conn_pid)}") :ok = API.close(conn.conn) put_in( From ad8f26c0a4a0a579e93547e78313d3e4ecef6ed5 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 21 Feb 2020 12:53:40 +0300 Subject: [PATCH 038/581] more info in Connections.checkin timout errors --- lib/pleroma/http/adapter/gun.ex | 13 +++++++++---- test/http_test.exs | 4 ++-- test/pool/connections_test.exs | 8 ++++++-- test/reverse_proxy/client/tesla_test.exs | 4 ++-- test/reverse_proxy/reverse_proxy_test.exs | 8 ++++---- 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/lib/pleroma/http/adapter/gun.ex b/lib/pleroma/http/adapter/gun.ex index f1018dd8d..fc40b324a 100644 --- a/lib/pleroma/http/adapter/gun.ex +++ b/lib/pleroma/http/adapter/gun.ex @@ -115,11 +115,16 @@ defp try_to_get_conn(uri, opts) do opts catch - :exit, {:timeout, _} -> + :exit, {:timeout, {_, operation, [_, {method, _}, _]}} -> + messages_len = + :gun_connections + |> Process.whereis() + |> Process.info(:message_queue_len) + Logger.warn( - "Gun connections pool checkin with timeout error #{uri.scheme}://#{ - Connections.compose_uri(uri) - }" + "Gun connections pool checkin with timeout error for #{operation} #{method} #{ + uri.scheme + }://#{Connections.compose_uri(uri)}. Messages length: #{messages_len}" ) opts diff --git a/test/http_test.exs b/test/http_test.exs index d80b96496..83c27f6e1 100644 --- a/test/http_test.exs +++ b/test/http_test.exs @@ -61,8 +61,8 @@ test "returns successfully result" do describe "connection pools" do @describetag :integration - clear_config([Pleroma.Gun.API]) do - Pleroma.Config.put([Pleroma.Gun.API], Pleroma.Gun) + clear_config(Pleroma.Gun.API) do + Pleroma.Config.put(Pleroma.Gun.API, Pleroma.Gun) end test "gun" do diff --git a/test/pool/connections_test.exs b/test/pool/connections_test.exs index 6f0e041ae..d0d711c55 100644 --- a/test/pool/connections_test.exs +++ b/test/pool/connections_test.exs @@ -15,6 +15,10 @@ defmodule Pleroma.Pool.ConnectionsTest do :ok end + clear_config([:connections_pool, :retry]) do + Pleroma.Config.put([:connections_pool, :retry], 5) + end + setup do name = :test_connections adapter = Application.get_env(:tesla, :adapter) @@ -429,8 +433,8 @@ test "remove frequently used and idle", %{name: name} do describe "integration test" do @describetag :integration - clear_config([API]) do - Pleroma.Config.put([API], Pleroma.Gun) + clear_config(API) do + Pleroma.Config.put(API, Pleroma.Gun) end test "opens connection and reuse it on next request", %{name: name} do diff --git a/test/reverse_proxy/client/tesla_test.exs b/test/reverse_proxy/client/tesla_test.exs index 75a70988c..231271b0d 100644 --- a/test/reverse_proxy/client/tesla_test.exs +++ b/test/reverse_proxy/client/tesla_test.exs @@ -8,8 +8,8 @@ defmodule Pleroma.ReverseProxy.Client.TeslaTest do alias Pleroma.ReverseProxy.Client @moduletag :integration - clear_config_all([Pleroma.Gun.API]) do - Pleroma.Config.put([Pleroma.Gun.API], Pleroma.Gun) + clear_config_all(Pleroma.Gun.API) do + Pleroma.Config.put(Pleroma.Gun.API, Pleroma.Gun) end setup do diff --git a/test/reverse_proxy/reverse_proxy_test.exs b/test/reverse_proxy/reverse_proxy_test.exs index 1ab3cc4bb..f61fc02c5 100644 --- a/test/reverse_proxy/reverse_proxy_test.exs +++ b/test/reverse_proxy/reverse_proxy_test.exs @@ -345,12 +345,12 @@ test "with content-disposition header", %{conn: conn} do describe "tesla client using gun integration" do @describetag :integration - clear_config([Pleroma.ReverseProxy.Client]) do - Pleroma.Config.put([Pleroma.ReverseProxy.Client], Pleroma.ReverseProxy.Client.Tesla) + clear_config(Pleroma.ReverseProxy.Client) do + Pleroma.Config.put(Pleroma.ReverseProxy.Client, Pleroma.ReverseProxy.Client.Tesla) end - clear_config([Pleroma.Gun.API]) do - Pleroma.Config.put([Pleroma.Gun.API], Pleroma.Gun) + clear_config(Pleroma.Gun.API) do + Pleroma.Config.put(Pleroma.Gun.API, Pleroma.Gun) end setup do From 6806df80ddb1e52aef2b89b923d9a3e2844b5aeb Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 21 Feb 2020 14:28:16 +0300 Subject: [PATCH 039/581] don't log info ssl messages --- lib/pleroma/http/adapter/gun.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/http/adapter/gun.ex b/lib/pleroma/http/adapter/gun.ex index fc40b324a..0a6872ad6 100644 --- a/lib/pleroma/http/adapter/gun.ex +++ b/lib/pleroma/http/adapter/gun.ex @@ -58,7 +58,8 @@ defp add_scheme_opts(opts, %URI{scheme: "https", host: host, port: port}) do depth: 20, reuse_sessions: false, verify_fun: - {&:ssl_verify_hostname.verify_fun/3, [check_hostname: Adapter.domain_or_fallback(host)]} + {&:ssl_verify_hostname.verify_fun/3, [check_hostname: Adapter.domain_or_fallback(host)]}, + log_level: :warning ] ] From f604f9e47061b9d47c1bb62cc7aaf44fabdf69b3 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 21 Feb 2020 14:33:55 +0300 Subject: [PATCH 040/581] hackney pool timeout --- lib/pleroma/http/connection.ex | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/http/connection.ex b/lib/pleroma/http/connection.ex index 85918341a..e2d7afbbd 100644 --- a/lib/pleroma/http/connection.ex +++ b/lib/pleroma/http/connection.ex @@ -33,8 +33,14 @@ def options(%URI{} = uri, opts \\ []) do end defp pool_timeout(opts) do - timeout = - Config.get([:pools, opts[:pool], :timeout]) || Config.get([:pools, :default, :timeout]) + {config_key, default} = + if Application.get_env(:tesla, :adapter) == Tesla.Adapter.Gun do + {:pools, Config.get([:pools, :default, :timeout])} + else + {:hackney_pools, 10_000} + end + + timeout = Config.get([config_key, opts[:pool], :timeout], default) Keyword.merge(opts, timeout: timeout) end From d44f9e3b6cfd5a0dae07f6194bfd05360afd6560 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 21 Feb 2020 16:56:55 +0300 Subject: [PATCH 041/581] fix for timeout clause --- lib/pleroma/http/adapter/gun.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/http/adapter/gun.ex b/lib/pleroma/http/adapter/gun.ex index 0a6872ad6..7b7e38d8c 100644 --- a/lib/pleroma/http/adapter/gun.ex +++ b/lib/pleroma/http/adapter/gun.ex @@ -117,7 +117,7 @@ defp try_to_get_conn(uri, opts) do opts catch :exit, {:timeout, {_, operation, [_, {method, _}, _]}} -> - messages_len = + {:message_queue_len, messages_len} = :gun_connections |> Process.whereis() |> Process.info(:message_queue_len) From 8efae966b1e87fe448a13d04eae0898c4a102c29 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Mon, 24 Feb 2020 19:56:27 +0300 Subject: [PATCH 042/581] open conn in separate task --- lib/mix/tasks/pleroma/benchmark.ex | 2 +- lib/pleroma/gun/api.ex | 7 +- lib/pleroma/gun/api/mock.ex | 5 +- lib/pleroma/gun/conn.ex | 146 +++++++++++++++ lib/pleroma/gun/gun.ex | 5 +- lib/pleroma/http/adapter/gun.ex | 21 +-- lib/pleroma/pool/connections.ex | 287 ++++++++++------------------- restarter/lib/pleroma.ex | 4 +- test/gun/gun_test.exs | 6 + test/http/adapter/gun_test.exs | 17 +- test/http/connection_test.exs | 2 +- test/pool/connections_test.exs | 186 ++++++++++--------- 12 files changed, 384 insertions(+), 304 deletions(-) diff --git a/lib/mix/tasks/pleroma/benchmark.ex b/lib/mix/tasks/pleroma/benchmark.ex index 01e079136..7a7430289 100644 --- a/lib/mix/tasks/pleroma/benchmark.ex +++ b/lib/mix/tasks/pleroma/benchmark.ex @@ -79,7 +79,7 @@ def run(["adapters"]) do start_pleroma() :ok = - Pleroma.Pool.Connections.open_conn( + Pleroma.Gun.Conn.open( "https://httpbin.org/stream-bytes/1500", :gun_connections ) diff --git a/lib/pleroma/gun/api.ex b/lib/pleroma/gun/api.ex index a0c3c5415..f79c9f443 100644 --- a/lib/pleroma/gun/api.ex +++ b/lib/pleroma/gun/api.ex @@ -6,9 +6,10 @@ defmodule Pleroma.Gun.API do @callback open(charlist(), pos_integer(), map()) :: {:ok, pid()} @callback info(pid()) :: map() @callback close(pid()) :: :ok - @callback await_up(pid) :: {:ok, atom()} | {:error, atom()} + @callback await_up(pid, pos_integer()) :: {:ok, atom()} | {:error, atom()} @callback connect(pid(), map()) :: reference() @callback await(pid(), reference()) :: {:response, :fin, 200, []} + @callback set_owner(pid(), pid()) :: :ok def open(host, port, opts), do: api().open(host, port, opts) @@ -16,11 +17,13 @@ def info(pid), do: api().info(pid) def close(pid), do: api().close(pid) - def await_up(pid), do: api().await_up(pid) + def await_up(pid, timeout \\ 5_000), do: api().await_up(pid, timeout) def connect(pid, opts), do: api().connect(pid, opts) def await(pid, ref), do: api().await(pid, ref) + def set_owner(pid, owner), do: api().set_owner(pid, owner) + defp api, do: Pleroma.Config.get([Pleroma.Gun.API], Pleroma.Gun) end diff --git a/lib/pleroma/gun/api/mock.ex b/lib/pleroma/gun/api/mock.ex index 0134b016e..6d24b0e69 100644 --- a/lib/pleroma/gun/api/mock.ex +++ b/lib/pleroma/gun/api/mock.ex @@ -118,7 +118,10 @@ def open('localhost', 9050, _) do end @impl API - def await_up(_pid), do: {:ok, :http} + def await_up(_pid, _timeout), do: {:ok, :http} + + @impl API + def set_owner(_pid, _owner), do: :ok @impl API def connect(pid, %{host: _, port: 80}) do diff --git a/lib/pleroma/gun/conn.ex b/lib/pleroma/gun/conn.ex index 2474829d6..ddb9f30b0 100644 --- a/lib/pleroma/gun/conn.ex +++ b/lib/pleroma/gun/conn.ex @@ -6,6 +6,11 @@ defmodule Pleroma.Gun.Conn do @moduledoc """ Struct for gun connection data """ + alias Pleroma.Gun.API + alias Pleroma.Pool.Connections + + require Logger + @type gun_state :: :up | :down @type conn_state :: :active | :idle @@ -26,4 +31,145 @@ defmodule Pleroma.Gun.Conn do last_reference: 0, crf: 1, retries: 0 + + @spec open(String.t() | URI.t(), atom(), keyword()) :: :ok | nil + def open(url, name, opts \\ []) + def open(url, name, opts) when is_binary(url), do: open(URI.parse(url), name, opts) + + def open(%URI{} = uri, name, opts) do + pool_opts = Pleroma.Config.get([:connections_pool], []) + + opts = + opts + |> Enum.into(%{}) + |> Map.put_new(:retry, pool_opts[:retry] || 0) + |> Map.put_new(:retry_timeout, pool_opts[:retry_timeout] || 100) + |> Map.put_new(:await_up_timeout, pool_opts[:await_up_timeout] || 5_000) + + key = "#{uri.scheme}:#{uri.host}:#{uri.port}" + + Logger.debug("opening new connection #{Connections.compose_uri_log(uri)}") + + conn_pid = + if Connections.count(name) < opts[:max_connection] do + do_open(uri, opts) + else + try_do_open(name, uri, opts) + end + + if is_pid(conn_pid) do + conn = %Pleroma.Gun.Conn{ + conn: conn_pid, + gun_state: :up, + conn_state: :active, + last_reference: :os.system_time(:second) + } + + :ok = API.set_owner(conn_pid, Process.whereis(name)) + Connections.add_conn(name, key, conn) + end + end + + defp do_open(uri, %{proxy: {proxy_host, proxy_port}} = opts) do + connect_opts = + uri + |> destination_opts() + |> add_http2_opts(uri.scheme, Map.get(opts, :tls_opts, [])) + + with open_opts <- Map.delete(opts, :tls_opts), + {:ok, conn} <- API.open(proxy_host, proxy_port, open_opts), + {:ok, _} <- API.await_up(conn, opts[:await_up_timeout]), + stream <- API.connect(conn, connect_opts), + {:response, :fin, 200, _} <- API.await(conn, stream) do + conn + else + error -> + Logger.warn( + "Received error on opening connection with http proxy #{ + Connections.compose_uri_log(uri) + } #{inspect(error)}" + ) + + nil + end + end + + defp do_open(uri, %{proxy: {proxy_type, proxy_host, proxy_port}} = opts) do + version = + proxy_type + |> to_string() + |> String.last() + |> case do + "4" -> 4 + _ -> 5 + end + + socks_opts = + uri + |> destination_opts() + |> add_http2_opts(uri.scheme, Map.get(opts, :tls_opts, [])) + |> Map.put(:version, version) + + opts = + opts + |> Map.put(:protocols, [:socks]) + |> Map.put(:socks_opts, socks_opts) + + with {:ok, conn} <- API.open(proxy_host, proxy_port, opts), + {:ok, _} <- API.await_up(conn, opts[:await_up_timeout]) do + conn + else + error -> + Logger.warn( + "Received error on opening connection with socks proxy #{ + Connections.compose_uri_log(uri) + } #{inspect(error)}" + ) + + nil + end + end + + defp do_open(%URI{host: host, port: port} = uri, opts) do + {_type, host} = Pleroma.HTTP.Adapter.domain_or_ip(host) + + with {:ok, conn} <- API.open(host, port, opts), + {:ok, _} <- API.await_up(conn, opts[:await_up_timeout]) do + conn + else + error -> + Logger.warn( + "Received error on opening connection #{Connections.compose_uri_log(uri)} #{ + inspect(error) + }" + ) + + nil + end + end + + defp destination_opts(%URI{host: host, port: port}) do + {_type, host} = Pleroma.HTTP.Adapter.domain_or_ip(host) + %{host: host, port: port} + end + + defp add_http2_opts(opts, "https", tls_opts) do + Map.merge(opts, %{protocols: [:http2], transport: :tls, tls_opts: tls_opts}) + end + + defp add_http2_opts(opts, _, _), do: opts + + defp try_do_open(name, uri, opts) do + Logger.debug("try to open conn #{Connections.compose_uri_log(uri)}") + + with [{close_key, least_used} | _conns] <- + Connections.get_unused_conns(name), + :ok <- Pleroma.Gun.API.close(least_used.conn) do + Connections.remove_conn(name, close_key) + + do_open(uri, opts) + else + [] -> nil + end + end end diff --git a/lib/pleroma/gun/gun.ex b/lib/pleroma/gun/gun.ex index 4a1bbc95f..da82983b1 100644 --- a/lib/pleroma/gun/gun.ex +++ b/lib/pleroma/gun/gun.ex @@ -32,7 +32,7 @@ def open(host, port, opts \\ %{}), do: :gun.open(host, port, Map.take(opts, @gun defdelegate close(pid), to: :gun @impl API - defdelegate await_up(pid), to: :gun + defdelegate await_up(pid, timeout \\ 5_000), to: :gun @impl API defdelegate connect(pid, opts), to: :gun @@ -42,4 +42,7 @@ def open(host, port, opts \\ %{}), do: :gun.open(host, port, Map.take(opts, @gun @spec flush(pid() | reference()) :: :ok defdelegate flush(pid), to: :gun + + @impl API + defdelegate set_owner(pid, owner), to: :gun end diff --git a/lib/pleroma/http/adapter/gun.ex b/lib/pleroma/http/adapter/gun.ex index 7b7e38d8c..908d71898 100644 --- a/lib/pleroma/http/adapter/gun.ex +++ b/lib/pleroma/http/adapter/gun.ex @@ -12,7 +12,7 @@ defmodule Pleroma.HTTP.Adapter.Gun do alias Pleroma.Pool.Connections @defaults [ - connect_timeout: 20_000, + connect_timeout: 5_000, domain_lookup_timeout: 5_000, tls_handshake_timeout: 5_000, retry: 0, @@ -94,13 +94,11 @@ defp try_to_get_conn(uri, opts) do "Gun connections pool checkin was not successful. Trying to open conn for next request." ) - :ok = Connections.open_conn(uri, :gun_connections, opts) + Task.start(fn -> Pleroma.Gun.Conn.open(uri, :gun_connections, opts) end) opts conn when is_pid(conn) -> - Logger.debug( - "received conn #{inspect(conn)} #{uri.scheme}://#{Connections.compose_uri(uri)}" - ) + Logger.debug("received conn #{inspect(conn)} #{Connections.compose_uri_log(uri)}") opts |> Keyword.put(:conn, conn) @@ -109,13 +107,14 @@ defp try_to_get_conn(uri, opts) do rescue error -> Logger.warn( - "Gun connections pool checkin caused error #{uri.scheme}://#{ - Connections.compose_uri(uri) - } #{inspect(error)}" + "Gun connections pool checkin caused error #{Connections.compose_uri_log(uri)} #{ + inspect(error) + }" ) opts catch + # TODO: here must be no timeouts :exit, {:timeout, {_, operation, [_, {method, _}, _]}} -> {:message_queue_len, messages_len} = :gun_connections @@ -124,15 +123,15 @@ defp try_to_get_conn(uri, opts) do Logger.warn( "Gun connections pool checkin with timeout error for #{operation} #{method} #{ - uri.scheme - }://#{Connections.compose_uri(uri)}. Messages length: #{messages_len}" + Connections.compose_uri_log(uri) + }. Messages length: #{messages_len}" ) opts :exit, error -> Logger.warn( - "Gun pool checkin exited with error #{uri.scheme}://#{Connections.compose_uri(uri)} #{ + "Gun pool checkin exited with error #{Connections.compose_uri_log(uri)} #{ inspect(error) }" ) diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index d20927580..a444f822f 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -20,7 +20,6 @@ defmodule Pleroma.Pool.Connections do defstruct conns: %{}, opts: [] alias Pleroma.Gun.API - alias Pleroma.Gun.Conn @spec start_link({atom(), keyword()}) :: {:ok, pid()} def start_link({name, opts}) do @@ -44,23 +43,6 @@ def checkin(%URI{} = uri, name) do ) end - @spec open_conn(String.t() | URI.t(), atom(), keyword()) :: :ok - def open_conn(url, name, opts \\ []) - def open_conn(url, name, opts) when is_binary(url), do: open_conn(URI.parse(url), name, opts) - - def open_conn(%URI{} = uri, name, opts) do - pool_opts = Config.get([:connections_pool], []) - - opts = - opts - |> Enum.into(%{}) - |> Map.put_new(:retry, pool_opts[:retry] || 0) - |> Map.put_new(:retry_timeout, pool_opts[:retry_timeout] || 100) - |> Map.put_new(:await_up_timeout, pool_opts[:await_up_timeout] || 5_000) - - GenServer.cast(name, {:open_conn, %{opts: opts, uri: uri}}) - end - @spec alive?(atom()) :: boolean() def alive?(name) do pid = Process.whereis(name) @@ -72,23 +54,37 @@ def get_state(name) do GenServer.call(name, :state) end + @spec count(atom()) :: pos_integer() + def count(name) do + GenServer.call(name, :count) + end + + @spec get_unused_conns(atom()) :: [{domain(), conn()}] + def get_unused_conns(name) do + GenServer.call(name, :unused_conns) + end + @spec checkout(pid(), pid(), atom()) :: :ok def checkout(conn, pid, name) do GenServer.cast(name, {:checkout, conn, pid}) end + @spec add_conn(atom(), String.t(), Pleroma.Gun.Conn.t()) :: :ok + def add_conn(name, key, conn) do + GenServer.cast(name, {:add_conn, key, conn}) + end + + @spec remove_conn(atom(), String.t()) :: :ok + def remove_conn(name, key) do + GenServer.cast(name, {:remove_conn, key}) + end + @impl true - def handle_cast({:open_conn, %{opts: opts, uri: uri}}, state) do - Logger.debug("opening new #{compose_uri(uri)}") - max_connections = state.opts[:max_connections] + def handle_cast({:add_conn, key, conn}, state) do + state = put_in(state.conns[key], conn) - key = compose_key(uri) - - if Enum.count(state.conns) < max_connections do - open_conn(key, uri, state, opts) - else - try_to_open_conn(key, uri, state, opts) - end + Process.monitor(conn.conn) + {:noreply, state} end @impl true @@ -120,14 +116,20 @@ def handle_cast({:checkout, conn_pid, pid}, state) do {:noreply, state} end + @impl true + def handle_cast({:remove_conn, key}, state) do + state = put_in(state.conns, Map.delete(state.conns, key)) + {:noreply, state} + end + @impl true def handle_call({:checkin, uri}, from, state) do - Logger.debug("checkin #{compose_uri(uri)}") - key = compose_key(uri) + key = "#{uri.scheme}:#{uri.host}:#{uri.port}" + Logger.debug("checkin #{key}") case state.conns[key] do %{conn: conn, gun_state: gun_state} = current_conn when gun_state == :up -> - Logger.debug("reusing conn #{compose_uri(uri)}") + Logger.debug("reusing conn #{key}") with time <- :os.system_time(:second), last_reference <- time - current_conn.last_reference, @@ -154,12 +156,31 @@ def handle_call({:checkin, uri}, from, state) do @impl true def handle_call(:state, _from, state), do: {:reply, state, state} + @impl true + def handle_call(:count, _from, state) do + {:reply, Enum.count(state.conns), state} + end + + @impl true + def handle_call(:unused_conns, _from, state) do + unused_conns = + state.conns + |> Enum.filter(fn {_k, v} -> + v.conn_state == :idle and v.used_by == [] + end) + |> Enum.sort(fn {_x_k, x}, {_y_k, y} -> + x.crf <= y.crf and x.last_reference <= y.last_reference + end) + + {:reply, unused_conns, state} + end + @impl true def handle_info({:gun_up, conn_pid, _protocol}, state) do state = - with true <- Process.alive?(conn_pid), - conn_key when is_binary(conn_key) <- compose_key_gun_info(conn_pid), + with conn_key when is_binary(conn_key) <- compose_key_gun_info(conn_pid), {key, conn} <- find_conn(state.conns, conn_pid, conn_key), + {true, key} <- {Process.alive?(conn_pid), key}, time <- :os.system_time(:second), last_reference <- time - conn.last_reference, current_crf <- crf(last_reference, 100, conn.crf) do @@ -176,14 +197,16 @@ def handle_info({:gun_up, conn_pid, _protocol}, state) do Logger.debug(":gun.info caused error") state - false -> + {false, key} -> Logger.debug(":gun_up message for closed conn #{inspect(conn_pid)}") - state + + put_in( + state.conns, + Map.delete(state.conns, key) + ) nil -> - Logger.debug( - ":gun_up message for alive conn #{inspect(conn_pid)}, but deleted from state" - ) + Logger.debug(":gun_up message for conn which is not found in state") :ok = API.close(conn_pid) @@ -198,8 +221,8 @@ def handle_info({:gun_down, conn_pid, _protocol, _reason, _killed}, state) do retries = Config.get([:connections_pool, :retry], 0) # we can't get info on this pid, because pid is dead state = - with true <- Process.alive?(conn_pid), - {key, conn} <- find_conn(state.conns, conn_pid) do + with {key, conn} <- find_conn(state.conns, conn_pid), + {true, key} <- {Process.alive?(conn_pid), key} do if conn.retries == retries do Logger.debug("closing conn if retries is eq #{inspect(conn_pid)}") :ok = API.close(conn.conn) @@ -216,15 +239,17 @@ def handle_info({:gun_down, conn_pid, _protocol, _reason, _killed}, state) do }) end else - false -> + {false, key} -> # gun can send gun_down for closed conn, maybe connection is not closed yet Logger.debug(":gun_down message for closed conn #{inspect(conn_pid)}") - state + + put_in( + state.conns, + Map.delete(state.conns, key) + ) nil -> - Logger.debug( - ":gun_down message for alive conn #{inspect(conn_pid)}, but deleted from state" - ) + Logger.debug(":gun_down message for conn which is not found in state") :ok = API.close(conn_pid) @@ -234,7 +259,29 @@ def handle_info({:gun_down, conn_pid, _protocol, _reason, _killed}, state) do {:noreply, state} end - defp compose_key(%URI{scheme: scheme, host: host, port: port}), do: "#{scheme}:#{host}:#{port}" + @impl true + def handle_info({:DOWN, _ref, :process, conn_pid, reason}, state) do + Logger.debug("received DOWM message for #{inspect(conn_pid)} reason -> #{inspect(reason)}") + + state = + with {key, conn} <- find_conn(state.conns, conn_pid) do + Enum.each(conn.used_by, fn {pid, _ref} -> + Process.exit(pid, reason) + end) + + put_in( + state.conns, + Map.delete(state.conns, key) + ) + else + nil -> + Logger.debug(":DOWN message for conn which is not found in state") + + state + end + + {:noreply, state} + end defp compose_key_gun_info(pid) do try do @@ -265,153 +312,11 @@ defp find_conn(conns, conn_pid, conn_key) do end) end - defp open_conn(key, uri, state, %{proxy: {proxy_host, proxy_port}} = opts) do - connect_opts = - uri - |> destination_opts() - |> add_http2_opts(uri.scheme, Map.get(opts, :tls_opts, [])) - - with open_opts <- Map.delete(opts, :tls_opts), - {:ok, conn} <- API.open(proxy_host, proxy_port, open_opts), - {:ok, _} <- API.await_up(conn), - stream <- API.connect(conn, connect_opts), - {:response, :fin, 200, _} <- API.await(conn, stream), - state <- - put_in(state.conns[key], %Conn{ - conn: conn, - gun_state: :up, - conn_state: :active, - last_reference: :os.system_time(:second) - }) do - {:noreply, state} - else - error -> - Logger.warn( - "Received error on opening connection with http proxy #{uri.scheme}://#{ - compose_uri(uri) - }: #{inspect(error)}" - ) - - {:noreply, state} - end - end - - defp open_conn(key, uri, state, %{proxy: {proxy_type, proxy_host, proxy_port}} = opts) do - version = - proxy_type - |> to_string() - |> String.last() - |> case do - "4" -> 4 - _ -> 5 - end - - socks_opts = - uri - |> destination_opts() - |> add_http2_opts(uri.scheme, Map.get(opts, :tls_opts, [])) - |> Map.put(:version, version) - - opts = - opts - |> Map.put(:protocols, [:socks]) - |> Map.put(:socks_opts, socks_opts) - - with {:ok, conn} <- API.open(proxy_host, proxy_port, opts), - {:ok, _} <- API.await_up(conn), - state <- - put_in(state.conns[key], %Conn{ - conn: conn, - gun_state: :up, - conn_state: :active, - last_reference: :os.system_time(:second) - }) do - {:noreply, state} - else - error -> - Logger.warn( - "Received error on opening connection with socks proxy #{uri.scheme}://#{ - compose_uri(uri) - }: #{inspect(error)}" - ) - - {:noreply, state} - end - end - - defp open_conn(key, %URI{host: host, port: port} = uri, state, opts) do - Logger.debug("opening conn #{compose_uri(uri)}") - {_type, host} = Pleroma.HTTP.Adapter.domain_or_ip(host) - - with {:ok, conn} <- API.open(host, port, opts), - {:ok, _} <- API.await_up(conn), - state <- - put_in(state.conns[key], %Conn{ - conn: conn, - gun_state: :up, - conn_state: :active, - last_reference: :os.system_time(:second) - }) do - Logger.debug("new conn opened #{compose_uri(uri)}") - Logger.debug("replying to the call #{compose_uri(uri)}") - {:noreply, state} - else - error -> - Logger.warn( - "Received error on opening connection #{uri.scheme}://#{compose_uri(uri)}: #{ - inspect(error) - }" - ) - - {:noreply, state} - end - end - - defp destination_opts(%URI{host: host, port: port}) do - {_type, host} = Pleroma.HTTP.Adapter.domain_or_ip(host) - %{host: host, port: port} - end - - defp add_http2_opts(opts, "https", tls_opts) do - Map.merge(opts, %{protocols: [:http2], transport: :tls, tls_opts: tls_opts}) - end - - defp add_http2_opts(opts, _, _), do: opts - - @spec get_unused_conns(map()) :: [{domain(), conn()}] - def get_unused_conns(conns) do - conns - |> Enum.filter(fn {_k, v} -> - v.conn_state == :idle and v.used_by == [] - end) - |> Enum.sort(fn {_x_k, x}, {_y_k, y} -> - x.crf <= y.crf and x.last_reference <= y.last_reference - end) - end - - defp try_to_open_conn(key, uri, state, opts) do - Logger.debug("try to open conn #{compose_uri(uri)}") - - with [{close_key, least_used} | _conns] <- get_unused_conns(state.conns), - :ok <- API.close(least_used.conn), - state <- - put_in( - state.conns, - Map.delete(state.conns, close_key) - ) do - Logger.debug( - "least used conn found and closed #{inspect(least_used.conn)} #{compose_uri(uri)}" - ) - - open_conn(key, uri, state, opts) - else - [] -> {:noreply, state} - end - end - def crf(current, steps, crf) do 1 + :math.pow(0.5, current / steps) * crf end - def compose_uri(%URI{} = uri), do: "#{uri.host}#{uri.path}" + def compose_uri_log(%URI{scheme: scheme, host: host, path: path}) do + "#{scheme}://#{host}#{path}" + end end diff --git a/restarter/lib/pleroma.ex b/restarter/lib/pleroma.ex index d7817909d..4ade890f9 100644 --- a/restarter/lib/pleroma.ex +++ b/restarter/lib/pleroma.ex @@ -44,7 +44,7 @@ def handle_cast(:need_reboot, state) do end def handle_cast({:restart, :test, _}, state) do - Logger.warn("pleroma restarted") + Logger.warn("pleroma manually restarted") {:noreply, Map.put(state, :need_reboot?, false)} end @@ -57,7 +57,7 @@ def handle_cast({:restart, _, delay}, state) do def handle_cast({:after_boot, _}, %{after_boot: true} = state), do: {:noreply, state} def handle_cast({:after_boot, :test}, state) do - Logger.warn("pleroma restarted") + Logger.warn("pleroma restarted after boot") {:noreply, Map.put(state, :after_boot, true)} end diff --git a/test/gun/gun_test.exs b/test/gun/gun_test.exs index 7f185617c..9f3e0f938 100644 --- a/test/gun/gun_test.exs +++ b/test/gun/gun_test.exs @@ -19,6 +19,12 @@ test "opens connection and receive response" do assert json = receive_response(conn, ref) assert %{"args" => %{"a" => "b", "c" => "d"}} = Jason.decode!(json) + + {:ok, pid} = Task.start(fn -> Process.sleep(50) end) + + :ok = :gun.set_owner(conn, pid) + + assert :gun.info(conn).owner == pid end defp receive_response(conn, ref, acc \\ "") do diff --git a/test/http/adapter/gun_test.exs b/test/http/adapter/gun_test.exs index ef1b4a882..a8dcbae04 100644 --- a/test/http/adapter/gun_test.exs +++ b/test/http/adapter/gun_test.exs @@ -7,6 +7,7 @@ defmodule Pleroma.HTTP.Adapter.GunTest do use Pleroma.Tests.Helpers import ExUnit.CaptureLog alias Pleroma.Config + alias Pleroma.Gun.Conn alias Pleroma.HTTP.Adapter.Gun alias Pleroma.Pool.Connections @@ -72,7 +73,7 @@ test "https url with non standart port" do test "receive conn by default" do uri = URI.parse("http://another-domain.com") - :ok = Connections.open_conn(uri, :gun_connections) + :ok = Conn.open(uri, :gun_connections) received_opts = Gun.options(uri) assert received_opts[:close_conn] == false @@ -81,7 +82,7 @@ test "receive conn by default" do test "don't receive conn if receive_conn is false" do uri = URI.parse("http://another-domain2.com") - :ok = Connections.open_conn(uri, :gun_connections) + :ok = Conn.open(uri, :gun_connections) opts = [receive_conn: false] received_opts = Gun.options(opts, uri) @@ -118,7 +119,7 @@ test "merges with defaul http adapter config" do test "default ssl adapter opts with connection" do uri = URI.parse("https://some-domain.com") - :ok = Connections.open_conn(uri, :gun_connections) + :ok = Conn.open(uri, :gun_connections) opts = Gun.options(uri) @@ -167,7 +168,7 @@ test "passed opts have more weight than defaults" do describe "after_request/1" do test "body_as not chunks" do uri = URI.parse("http://some-domain.com") - :ok = Connections.open_conn(uri, :gun_connections) + :ok = Conn.open(uri, :gun_connections) opts = Gun.options(uri) :ok = Gun.after_request(opts) conn = opts[:conn] @@ -185,7 +186,7 @@ test "body_as not chunks" do test "body_as chunks" do uri = URI.parse("http://some-domain.com") - :ok = Connections.open_conn(uri, :gun_connections) + :ok = Conn.open(uri, :gun_connections) opts = Gun.options([body_as: :chunks], uri) :ok = Gun.after_request(opts) conn = opts[:conn] @@ -205,7 +206,7 @@ test "body_as chunks" do test "with no connection" do uri = URI.parse("http://uniq-domain.com") - :ok = Connections.open_conn(uri, :gun_connections) + :ok = Conn.open(uri, :gun_connections) opts = Gun.options([body_as: :chunks], uri) conn = opts[:conn] @@ -227,7 +228,7 @@ test "with no connection" do test "with ipv4" do uri = URI.parse("http://127.0.0.1") - :ok = Connections.open_conn(uri, :gun_connections) + :ok = Conn.open(uri, :gun_connections) opts = Gun.options(uri) send(:gun_connections, {:gun_up, opts[:conn], :http}) :ok = Gun.after_request(opts) @@ -246,7 +247,7 @@ test "with ipv4" do test "with ipv6" do uri = URI.parse("http://[2a03:2880:f10c:83:face:b00c:0:25de]") - :ok = Connections.open_conn(uri, :gun_connections) + :ok = Conn.open(uri, :gun_connections) opts = Gun.options(uri) send(:gun_connections, {:gun_up, opts[:conn], :http}) :ok = Gun.after_request(opts) diff --git a/test/http/connection_test.exs b/test/http/connection_test.exs index c1ff0cc21..53ccbc9cd 100644 --- a/test/http/connection_test.exs +++ b/test/http/connection_test.exs @@ -124,7 +124,7 @@ test "default ssl adapter opts with connection" do uri = URI.parse("https://some-domain.com") pid = Process.whereis(:federation) - :ok = Pleroma.Pool.Connections.open_conn(uri, :gun_connections, genserver_pid: pid) + :ok = Pleroma.Gun.Conn.open(uri, :gun_connections, genserver_pid: pid) opts = Connection.options(uri) diff --git a/test/pool/connections_test.exs b/test/pool/connections_test.exs index d0d711c55..f766e3b5f 100644 --- a/test/pool/connections_test.exs +++ b/test/pool/connections_test.exs @@ -45,7 +45,7 @@ test "opens connection and reuse it on next request", %{name: name} do url = "http://some-domain.com" key = "http:some-domain.com:80" refute Connections.checkin(url, name) - :ok = Connections.open_conn(url, name) + :ok = Conn.open(url, name) conn = Connections.checkin(url, name) assert is_pid(conn) @@ -110,7 +110,7 @@ test "reuse connection for idna domains", %{name: name} do url = "http://ですsome-domain.com" refute Connections.checkin(url, name) - :ok = Connections.open_conn(url, name) + :ok = Conn.open(url, name) conn = Connections.checkin(url, name) assert is_pid(conn) @@ -139,7 +139,7 @@ test "reuse for ipv4", %{name: name} do refute Connections.checkin(url, name) - :ok = Connections.open_conn(url, name) + :ok = Conn.open(url, name) conn = Connections.checkin(url, name) assert is_pid(conn) @@ -182,7 +182,7 @@ test "reuse for ipv6", %{name: name} do refute Connections.checkin(url, name) - :ok = Connections.open_conn(url, name) + :ok = Conn.open(url, name) conn = Connections.checkin(url, name) assert is_pid(conn) @@ -209,7 +209,7 @@ test "reuse for ipv6", %{name: name} do test "up and down ipv4", %{name: name} do self = self() url = "http://127.0.0.1" - :ok = Connections.open_conn(url, name) + :ok = Conn.open(url, name) conn = Connections.checkin(url, name) send(name, {:gun_down, conn, nil, nil, nil}) send(name, {:gun_up, conn, nil}) @@ -229,7 +229,7 @@ test "up and down ipv4", %{name: name} do test "up and down ipv6", %{name: name} do self = self() url = "http://[2a03:2880:f10c:83:face:b00c:0:25de]" - :ok = Connections.open_conn(url, name) + :ok = Conn.open(url, name) conn = Connections.checkin(url, name) send(name, {:gun_down, conn, nil, nil, nil}) send(name, {:gun_up, conn, nil}) @@ -253,13 +253,13 @@ test "reuses connection based on protocol", %{name: name} do https_key = "https:some-domain.com:443" refute Connections.checkin(http_url, name) - :ok = Connections.open_conn(http_url, name) + :ok = Conn.open(http_url, name) conn = Connections.checkin(http_url, name) assert is_pid(conn) assert Process.alive?(conn) refute Connections.checkin(https_url, name) - :ok = Connections.open_conn(https_url, name) + :ok = Conn.open(https_url, name) https_conn = Connections.checkin(https_url, name) refute conn == https_conn @@ -288,17 +288,17 @@ test "connection can't get up", %{name: name} do url = "http://gun-not-up.com" assert capture_log(fn -> - :ok = Connections.open_conn(url, name) + refute Conn.open(url, name) refute Connections.checkin(url, name) end) =~ - "Received error on opening connection http://gun-not-up.com: {:error, :timeout}" + "Received error on opening connection http://gun-not-up.com {:error, :timeout}" end test "process gun_down message and then gun_up", %{name: name} do self = self() url = "http://gun-down-and-up.com" key = "http:gun-down-and-up.com:80" - :ok = Connections.open_conn(url, name) + :ok = Conn.open(url, name) conn = Connections.checkin(url, name) assert is_pid(conn) @@ -347,7 +347,7 @@ test "process gun_down message and then gun_up", %{name: name} do test "async processes get same conn for same domain", %{name: name} do url = "http://some-domain.com" - :ok = Connections.open_conn(url, name) + :ok = Conn.open(url, name) tasks = for _ <- 1..5 do @@ -381,8 +381,8 @@ test "remove frequently used and idle", %{name: name} do self = self() http_url = "http://some-domain.com" https_url = "https://some-domain.com" - :ok = Connections.open_conn(https_url, name) - :ok = Connections.open_conn(http_url, name) + :ok = Conn.open(https_url, name) + :ok = Conn.open(http_url, name) conn1 = Connections.checkin(https_url, name) @@ -413,7 +413,7 @@ test "remove frequently used and idle", %{name: name} do :ok = Connections.checkout(conn1, self, name) another_url = "http://another-domain.com" - :ok = Connections.open_conn(another_url, name) + :ok = Conn.open(another_url, name) conn = Connections.checkin(another_url, name) %Connections{ @@ -437,9 +437,19 @@ test "remove frequently used and idle", %{name: name} do Pleroma.Config.put(API, Pleroma.Gun) end + test "opens connection and change owner", %{name: name} do + url = "https://httpbin.org" + :ok = Conn.open(url, name) + conn = Connections.checkin(url, name) + + pid = Process.whereis(name) + + assert :gun.info(conn).owner == pid + end + test "opens connection and reuse it on next request", %{name: name} do url = "http://httpbin.org" - :ok = Connections.open_conn(url, name) + :ok = Conn.open(url, name) Process.sleep(250) conn = Connections.checkin(url, name) @@ -462,7 +472,7 @@ test "opens connection and reuse it on next request", %{name: name} do test "opens ssl connection and reuse it on next request", %{name: name} do url = "https://httpbin.org" - :ok = Connections.open_conn(url, name) + :ok = Conn.open(url, name) Process.sleep(1_000) conn = Connections.checkin(url, name) @@ -488,8 +498,8 @@ test "remove frequently used and idle", %{name: name} do https1 = "https://www.google.com" https2 = "https://httpbin.org" - :ok = Connections.open_conn(https1, name) - :ok = Connections.open_conn(https2, name) + :ok = Conn.open(https1, name) + :ok = Conn.open(https2, name) Process.sleep(1_500) conn = Connections.checkin(https1, name) @@ -513,7 +523,7 @@ test "remove frequently used and idle", %{name: name} do :ok = Connections.checkout(conn, self, name) http = "http://httpbin.org" Process.sleep(1_000) - :ok = Connections.open_conn(http, name) + :ok = Conn.open(http, name) conn = Connections.checkin(http, name) %Connections{ @@ -535,8 +545,8 @@ test "remove earlier used and idle", %{name: name} do https1 = "https://www.google.com" https2 = "https://httpbin.org" - :ok = Connections.open_conn(https1, name) - :ok = Connections.open_conn(https2, name) + :ok = Conn.open(https1, name) + :ok = Conn.open(https2, name) Process.sleep(1_500) Connections.checkin(https1, name) @@ -563,7 +573,7 @@ test "remove earlier used and idle", %{name: name} do :ok = Connections.checkout(conn, self, name) http = "http://httpbin.org" - :ok = Connections.open_conn(http, name) + :ok = Conn.open(http, name) Process.sleep(1_000) conn = Connections.checkin(http, name) @@ -587,8 +597,8 @@ test "doesn't open new conn on pool overflow", %{name: name} do https1 = "https://www.google.com" https2 = "https://httpbin.org" - :ok = Connections.open_conn(https1, name) - :ok = Connections.open_conn(https2, name) + :ok = Conn.open(https1, name) + :ok = Conn.open(https2, name) Process.sleep(1_000) Connections.checkin(https1, name) conn1 = Connections.checkin(https1, name) @@ -639,8 +649,8 @@ test "get idle connection with the smallest crf", %{ https1 = "https://www.google.com" https2 = "https://httpbin.org" - :ok = Connections.open_conn(https1, name) - :ok = Connections.open_conn(https2, name) + :ok = Conn.open(https1, name) + :ok = Conn.open(https2, name) Process.sleep(1_500) Connections.checkin(https1, name) Connections.checkin(https2, name) @@ -694,7 +704,7 @@ test "get idle connection with the smallest crf", %{ } = Connections.get_state(name) http = "http://httpbin.org" - :ok = Connections.open_conn(http, name) + :ok = Conn.open(http, name) Process.sleep(1_000) conn = Connections.checkin(http, name) @@ -725,7 +735,7 @@ test "get idle connection with the smallest crf", %{ test "as ip", %{name: name} do url = "http://proxy-string.com" key = "http:proxy-string.com:80" - :ok = Connections.open_conn(url, name, proxy: {{127, 0, 0, 1}, 8123}) + :ok = Conn.open(url, name, proxy: {{127, 0, 0, 1}, 8123}) conn = Connections.checkin(url, name) @@ -745,7 +755,7 @@ test "as ip", %{name: name} do test "as host", %{name: name} do url = "http://proxy-tuple-atom.com" - :ok = Connections.open_conn(url, name, proxy: {'localhost', 9050}) + :ok = Conn.open(url, name, proxy: {'localhost', 9050}) conn = Connections.checkin(url, name) %Connections{ @@ -765,7 +775,7 @@ test "as host", %{name: name} do test "as ip and ssl", %{name: name} do url = "https://proxy-string.com" - :ok = Connections.open_conn(url, name, proxy: {{127, 0, 0, 1}, 8123}) + :ok = Conn.open(url, name, proxy: {{127, 0, 0, 1}, 8123}) conn = Connections.checkin(url, name) %Connections{ @@ -784,7 +794,7 @@ test "as ip and ssl", %{name: name} do test "as host and ssl", %{name: name} do url = "https://proxy-tuple-atom.com" - :ok = Connections.open_conn(url, name, proxy: {'localhost', 9050}) + :ok = Conn.open(url, name, proxy: {'localhost', 9050}) conn = Connections.checkin(url, name) %Connections{ @@ -804,7 +814,7 @@ test "as host and ssl", %{name: name} do test "with socks type", %{name: name} do url = "http://proxy-socks.com" - :ok = Connections.open_conn(url, name, proxy: {:socks5, 'localhost', 1234}) + :ok = Conn.open(url, name, proxy: {:socks5, 'localhost', 1234}) conn = Connections.checkin(url, name) @@ -825,7 +835,7 @@ test "with socks type", %{name: name} do test "with socks4 type and ssl", %{name: name} do url = "https://proxy-socks.com" - :ok = Connections.open_conn(url, name, proxy: {:socks4, 'localhost', 1234}) + :ok = Conn.open(url, name, proxy: {:socks4, 'localhost', 1234}) conn = Connections.checkin(url, name) @@ -892,71 +902,75 @@ test "recently used will have higher crf", %{crf: crf} do end describe "get_unused_conns/1" do - test "crf is equalent, sorting by reference" do - conns = %{ - "1" => %Conn{ - conn_state: :idle, - last_reference: now() - 1 - }, - "2" => %Conn{ - conn_state: :idle, - last_reference: now() - } - } + test "crf is equalent, sorting by reference", %{name: name} do + Connections.add_conn(name, "1", %Conn{ + conn_state: :idle, + last_reference: now() - 1 + }) - assert [{"1", _unused_conn} | _others] = Connections.get_unused_conns(conns) + Connections.add_conn(name, "2", %Conn{ + conn_state: :idle, + last_reference: now() + }) + + assert [{"1", _unused_conn} | _others] = Connections.get_unused_conns(name) end - test "reference is equalent, sorting by crf" do - conns = %{ - "1" => %Conn{ - conn_state: :idle, - crf: 1.999 - }, - "2" => %Conn{ - conn_state: :idle, - crf: 2 - } - } + test "reference is equalent, sorting by crf", %{name: name} do + Connections.add_conn(name, "1", %Conn{ + conn_state: :idle, + crf: 1.999 + }) - assert [{"1", _unused_conn} | _others] = Connections.get_unused_conns(conns) + Connections.add_conn(name, "2", %Conn{ + conn_state: :idle, + crf: 2 + }) + + assert [{"1", _unused_conn} | _others] = Connections.get_unused_conns(name) end - test "higher crf and lower reference" do - conns = %{ - "1" => %Conn{ - conn_state: :idle, - crf: 3, - last_reference: now() - 1 - }, - "2" => %Conn{ - conn_state: :idle, - crf: 2, - last_reference: now() - } - } + test "higher crf and lower reference", %{name: name} do + Connections.add_conn(name, "1", %Conn{ + conn_state: :idle, + crf: 3, + last_reference: now() - 1 + }) - assert [{"2", _unused_conn} | _others] = Connections.get_unused_conns(conns) + Connections.add_conn(name, "2", %Conn{ + conn_state: :idle, + crf: 2, + last_reference: now() + }) + + assert [{"2", _unused_conn} | _others] = Connections.get_unused_conns(name) end - test "lower crf and lower reference" do - conns = %{ - "1" => %Conn{ - conn_state: :idle, - crf: 1.99, - last_reference: now() - 1 - }, - "2" => %Conn{ - conn_state: :idle, - crf: 2, - last_reference: now() - } - } + test "lower crf and lower reference", %{name: name} do + Connections.add_conn(name, "1", %Conn{ + conn_state: :idle, + crf: 1.99, + last_reference: now() - 1 + }) - assert [{"1", _unused_conn} | _others] = Connections.get_unused_conns(conns) + Connections.add_conn(name, "2", %Conn{ + conn_state: :idle, + crf: 2, + last_reference: now() + }) + + assert [{"1", _unused_conn} | _others] = Connections.get_unused_conns(name) end end + test "count/1", %{name: name} do + assert Connections.count(name) == 0 + Connections.add_conn(name, "1", %Conn{conn: self()}) + assert Connections.count(name) == 1 + Connections.remove_conn(name, "1") + assert Connections.count(name) == 0 + end + defp now do :os.system_time(:second) end From 6b012ddd69aec0f85c22ad91dbb76e05f2edaf58 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 25 Feb 2020 19:01:29 +0300 Subject: [PATCH 043/581] some docs --- docs/configuration/cheatsheet.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index d99537a50..d5a978c5a 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -394,6 +394,8 @@ For each pool, the options are: Advanced settings for connections pool. Pool with opened connections. These connections can be reused in worker pools. +For big instances it's recommended to increase `max_connections` up to 500-1000. It will increase memory usage, but federation would work faster. + * `:receive_connection_timeout` - timeout to receive connection from pool. Default: 250ms. * `:max_connections` - maximum number of connections in the pool. Default: 250 connections. * `:retry` - number of retries, while `gun` will try to reconnect if connections goes down. Default: 5. From 2622cf1190fe8e6ec9145a8cd2538a56889aa7e2 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Mon, 2 Mar 2020 09:22:34 +0300 Subject: [PATCH 044/581] returning repo parameters --- config/config.exs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/config/config.exs b/config/config.exs index 159aa6398..82012dc10 100644 --- a/config/config.exs +++ b/config/config.exs @@ -49,8 +49,7 @@ config :pleroma, Pleroma.Repo, types: Pleroma.PostgresTypes, telemetry_event: [Pleroma.Repo.Instrumenter], - migration_lock: nil, - parameters: [gin_fuzzy_search_limit: "500"] + migration_lock: nil config :pleroma, Pleroma.Captcha, enabled: true, @@ -603,6 +602,8 @@ config :pleroma, configurable_from_database: false +config :pleroma, Pleroma.Repo, parameters: [gin_fuzzy_search_limit: "500"] + config :pleroma, :connections_pool, receive_connection_timeout: 250, max_connections: 250, From 137c600cae9869e706d10b06dea04c9249e043da Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Mon, 2 Mar 2020 10:01:07 +0300 Subject: [PATCH 045/581] stop connections manually --- test/pool/connections_test.exs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/test/pool/connections_test.exs b/test/pool/connections_test.exs index f766e3b5f..0e7a118ab 100644 --- a/test/pool/connections_test.exs +++ b/test/pool/connections_test.exs @@ -23,11 +23,18 @@ defmodule Pleroma.Pool.ConnectionsTest do name = :test_connections adapter = Application.get_env(:tesla, :adapter) Application.put_env(:tesla, :adapter, Tesla.Adapter.Gun) - on_exit(fn -> Application.put_env(:tesla, :adapter, adapter) end) - {:ok, _pid} = + {:ok, pid} = Connections.start_link({name, [max_connections: 2, receive_connection_timeout: 1_500]}) + on_exit(fn -> + Application.put_env(:tesla, :adapter, adapter) + + if Process.alive?(pid) do + GenServer.stop(name) + end + end) + {:ok, name: name} end From 85d571fc238c14bedbc0d9a0af2c7c0d76d62c4a Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Mon, 2 Mar 2020 12:52:41 -0600 Subject: [PATCH 046/581] Move Tesla repo to our GitLab --- mix.exs | 2 +- mix.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index 017228b4c..5c1d89208 100644 --- a/mix.exs +++ b/mix.exs @@ -121,7 +121,7 @@ defp deps do {:poison, "~> 3.0", override: true}, # {:tesla, "~> 1.3", override: true}, {:tesla, - github: "alex-strizhakov/tesla", + git: "https://git.pleroma.social/pleroma/elixir-libraries/tesla.git", ref: "922cc3db13b421763edbea76246b8ea61c38c6fa", override: true}, {:castore, "~> 0.1"}, diff --git a/mix.lock b/mix.lock index fecc959e0..8b5c61895 100644 --- a/mix.lock +++ b/mix.lock @@ -102,7 +102,7 @@ "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.0.6", "995970c9aa7feb380ac493302138e308d6e04fd57da95b439a6df5bb3bf75076", [:rebar3], [], "hexpm", "769ddfabd0d2a16f3f9c17eb7509951e0ca4f68363fb26f2ee51a8ec4a49881a"}, "telemetry": {:hex, :telemetry, "0.4.1", "ae2718484892448a24470e6aa341bc847c3277bfb8d4e9289f7474d752c09c7f", [:rebar3], [], "hexpm", "4738382e36a0a9a2b6e25d67c960e40e1a2c95560b9f936d8e29de8cd858480f"}, - "tesla": {:git, "https://github.com/alex-strizhakov/tesla.git", "922cc3db13b421763edbea76246b8ea61c38c6fa", [ref: "922cc3db13b421763edbea76246b8ea61c38c6fa"]}, + "tesla": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/tesla.git", "922cc3db13b421763edbea76246b8ea61c38c6fa", [ref: "922cc3db13b421763edbea76246b8ea61c38c6fa"]}, "timex": {:hex, :timex, "3.6.1", "efdf56d0e67a6b956cc57774353b0329c8ab7726766a11547e529357ffdc1d56", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5 or ~> 1.0.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "f354efb2400dd7a80fd9eb6c8419068c4f632da4ac47f3d8822d6e33f08bc852"}, "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"}, From f987d83885eef7cd8d114feefe8870a8c5e841c6 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Mon, 2 Mar 2020 13:00:05 -0600 Subject: [PATCH 047/581] Clarify in docs how to control connections_pool for Gun. It could easily be confused with the Hackney settings. --- docs/configuration/cheatsheet.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 507f15b87..abb5a3c5f 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -395,7 +395,8 @@ For each pool, the options are: Advanced settings for connections pool. Pool with opened connections. These connections can be reused in worker pools. -For big instances it's recommended to increase `max_connections` up to 500-1000. It will increase memory usage, but federation would work faster. +For big instances it's recommended to increase `config :pleroma, :connections_pool, max_connections: 500` up to 500-1000. +It will increase memory usage, but federation would work faster. * `:receive_connection_timeout` - timeout to receive connection from pool. Default: 250ms. * `:max_connections` - maximum number of connections in the pool. Default: 250 connections. From 9b6c7843d669c80bd062214e598d0f5d9738de8e Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Tue, 3 Mar 2020 04:58:12 +0100 Subject: [PATCH 048/581] debian_based_*.md: Use erlang-nox metapackage --- docs/installation/debian_based_en.md | 10 +++------- docs/installation/debian_based_jp.md | 22 +++++++++------------- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/docs/installation/debian_based_en.md b/docs/installation/debian_based_en.md index fe2dbb92d..a900ec61d 100644 --- a/docs/installation/debian_based_en.md +++ b/docs/installation/debian_based_en.md @@ -7,13 +7,9 @@ This guide will assume you are on Debian Stretch. This guide should also work wi * `postgresql` (9.6+, Ubuntu 16.04 comes with 9.5, you can get a newer version from [here](https://www.postgresql.org/download/linux/ubuntu/)) * `postgresql-contrib` (9.6+, same situtation as above) -* `elixir` (1.5+, [install from here, Debian and Ubuntu ship older versions](https://elixir-lang.org/install.html#unix-and-unix-like) or use [asdf](https://github.com/asdf-vm/asdf) as the pleroma user) +* `elixir` (1.8+, [install from here, Debian and Ubuntu ship older versions](https://elixir-lang.org/install.html#unix-and-unix-like) or use [asdf](https://github.com/asdf-vm/asdf) as the pleroma user) * `erlang-dev` -* `erlang-tools` -* `erlang-parsetools` -* `erlang-eldap`, if you want to enable ldap authenticator -* `erlang-ssh` -* `erlang-xmerl` +* `erlang-nox` * `git` * `build-essential` @@ -50,7 +46,7 @@ sudo dpkg -i /tmp/erlang-solutions_1.0_all.deb ```shell sudo apt update -sudo apt install elixir erlang-dev erlang-parsetools erlang-xmerl erlang-tools erlang-ssh +sudo apt install elixir erlang-dev erlang-nox ``` ### Install PleromaBE diff --git a/docs/installation/debian_based_jp.md b/docs/installation/debian_based_jp.md index 7aa0bcc24..a3c4621d8 100644 --- a/docs/installation/debian_based_jp.md +++ b/docs/installation/debian_based_jp.md @@ -10,21 +10,17 @@ ### 必要なソフトウェア - PostgreSQL 9.6以上 (Ubuntu16.04では9.5しか提供されていないので,[](https://www.postgresql.org/download/linux/ubuntu/)こちらから新しいバージョンを入手してください) -- postgresql-contrib 9.6以上 (同上) -- Elixir 1.5 以上 ([Debianのリポジトリからインストールしないこと!!! ここからインストールすること!](https://elixir-lang.org/install.html#unix-and-unix-like)。または [asdf](https://github.com/asdf-vm/asdf) をpleromaユーザーでインストールしてください) - - erlang-dev -- erlang-tools -- erlang-parsetools -- erlang-eldap (LDAP認証を有効化するときのみ必要) -- erlang-ssh -- erlang-xmerl -- git -- build-essential +- `postgresql-contrib` 9.6以上 (同上) +- Elixir 1.8 以上 ([Debianのリポジトリからインストールしないこと!!! ここからインストールすること!](https://elixir-lang.org/install.html#unix-and-unix-like)。または [asdf](https://github.com/asdf-vm/asdf) をpleromaユーザーでインストールしてください) +- `erlang-dev` +- `erlang-nox` +- `git` +- `build-essential` #### このガイドで利用している追加パッケージ -- nginx (おすすめです。他のリバースプロキシを使う場合は、参考となる設定をこのリポジトリから探してください) -- certbot (または何らかのLet's Encrypt向けACMEクライアント) +- `nginx` (おすすめです。他のリバースプロキシを使う場合は、参考となる設定をこのリポジトリから探してください) +- `certbot` (または何らかのLet's Encrypt向けACMEクライアント) ### システムを準備する @@ -51,7 +47,7 @@ sudo dpkg -i /tmp/erlang-solutions_1.0_all.deb * ElixirとErlangをインストールします、 ``` sudo apt update -sudo apt install elixir erlang-dev erlang-parsetools erlang-xmerl erlang-tools erlang-ssh +sudo apt install elixir erlang-dev erlang-nox ``` ### Pleroma BE (バックエンド) をインストールします From 3ecdead31ae65f395104a5fd7fafc847a7b97eca Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 10:33:40 +0300 Subject: [PATCH 049/581] debug logs on pleroma restart --- restarter/lib/pleroma.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/restarter/lib/pleroma.ex b/restarter/lib/pleroma.ex index 4ade890f9..e48bc4d1d 100644 --- a/restarter/lib/pleroma.ex +++ b/restarter/lib/pleroma.ex @@ -44,7 +44,7 @@ def handle_cast(:need_reboot, state) do end def handle_cast({:restart, :test, _}, state) do - Logger.warn("pleroma manually restarted") + Logger.debug("pleroma manually restarted") {:noreply, Map.put(state, :need_reboot?, false)} end @@ -57,7 +57,7 @@ def handle_cast({:restart, _, delay}, state) do def handle_cast({:after_boot, _}, %{after_boot: true} = state), do: {:noreply, state} def handle_cast({:after_boot, :test}, state) do - Logger.warn("pleroma restarted after boot") + Logger.debug("pleroma restarted after boot") {:noreply, Map.put(state, :after_boot, true)} end From 4c8569d403f47957f7a5d698c595959007c8a95a Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 12:19:29 +0300 Subject: [PATCH 050/581] otp_version refactor --- lib/pleroma/application.ex | 35 +++++----- lib/pleroma/otp_version.ex | 68 +++++++++----------- test/fixtures/warnings/otp_version/error | 1 - test/fixtures/warnings/otp_version/undefined | 1 - test/otp_version_test.exs | 42 ++++-------- 5 files changed, 60 insertions(+), 87 deletions(-) delete mode 100644 test/fixtures/warnings/otp_version/error delete mode 100644 test/fixtures/warnings/otp_version/undefined diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 00e33d7ac..9b228d6b9 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -66,16 +66,23 @@ def start(_type, _args) do Pleroma.Gopher.Server ] - case Pleroma.OTPVersion.check_version() do - :ok -> :ok - {:error, version} -> raise " - !!!OTP VERSION WARNING!!! - You are using gun adapter with OTP version #{version}, which doesn't support correct handling of unordered certificates chains. - " - :undefined -> raise " - !!!OTP VERSION WARNING!!! - To support correct handling of unordered certificates chains - OTP version must be > 22.2. - " + if adapter() == Tesla.Adapter.Gun do + case Pleroma.OTPVersion.check() do + :ok -> + :ok + + {:error, version} -> + raise " + !!!OTP VERSION WARNING!!! + You are using gun adapter with OTP version #{version}, which doesn't support correct handling of unordered certificates chains. + " + + :undefined -> + raise " + !!!OTP VERSION WARNING!!! + To support correct handling of unordered certificates chains - OTP version must be > 22.2. + " + end end # See http://elixir-lang.org/docs/stable/elixir/Supervisor.html @@ -202,11 +209,7 @@ defp http_pools_children(:test) do [hackney_pool, Pleroma.Pool.Supervisor] end - defp http_pools_children(_) do - :tesla - |> Application.get_env(:adapter) - |> http_pools() - end + defp http_pools_children(_), do: http_pools(adapter()) defp http_pools(Tesla.Adapter.Hackney) do pools = [:federation, :media] @@ -227,4 +230,6 @@ defp http_pools(Tesla.Adapter.Hackney) do defp http_pools(Tesla.Adapter.Gun), do: [Pleroma.Pool.Supervisor] defp http_pools(_), do: [] + + defp adapter, do: Application.get_env(:tesla, :adapter) end diff --git a/lib/pleroma/otp_version.ex b/lib/pleroma/otp_version.ex index 0be189304..54ceaff47 100644 --- a/lib/pleroma/otp_version.ex +++ b/lib/pleroma/otp_version.ex @@ -1,63 +1,53 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.OTPVersion do - @type check_status() :: :undefined | {:error, String.t()} | :ok + @type check_status() :: :ok | :undefined | {:error, String.t()} - require Logger - - @spec check_version() :: check_status() - def check_version do + @spec check() :: check_status() + def check do # OTP Version https://erlang.org/doc/system_principles/versions.html#otp-version - paths = [ + [ Path.join(:code.root_dir(), "OTP_VERSION"), Path.join([:code.root_dir(), "releases", :erlang.system_info(:otp_release), "OTP_VERSION"]) ] - - :tesla - |> Application.get_env(:adapter) - |> get_and_check_version(paths) + |> get_version_from_files() + |> do_check() end - @spec get_and_check_version(module(), [Path.t()]) :: check_status() - def get_and_check_version(Tesla.Adapter.Gun, paths) do + @spec check([Path.t()]) :: check_status() + def check(paths) do paths - |> check_files() - |> check_version() + |> get_version_from_files() + |> do_check() end - def get_and_check_version(_, _), do: :ok + defp get_version_from_files([]), do: nil - defp check_files([]), do: nil - - defp check_files([path | paths]) do + defp get_version_from_files([path | paths]) do if File.exists?(path) do File.read!(path) else - check_files(paths) + get_version_from_files(paths) end end - defp check_version(nil), do: :undefined + defp do_check(nil), do: :undefined - defp check_version(version) do - try do - version = String.replace(version, ~r/\r|\n|\s/, "") + defp do_check(version) do + version = String.replace(version, ~r/\r|\n|\s/, "") - formatted = - version - |> String.split(".") - |> Enum.map(&String.to_integer/1) - |> Enum.take(2) + [major, minor] = + version + |> String.split(".") + |> Enum.map(&String.to_integer/1) + |> Enum.take(2) - with [major, minor] when length(formatted) == 2 <- formatted, - true <- (major == 22 and minor >= 2) or major > 22 do - :ok - else - false -> {:error, version} - _ -> :undefined - end - rescue - _ -> :undefined - catch - _ -> :undefined + if (major == 22 and minor >= 2) or major > 22 do + :ok + else + {:error, version} end end end diff --git a/test/fixtures/warnings/otp_version/error b/test/fixtures/warnings/otp_version/error deleted file mode 100644 index 8fdd954df..000000000 --- a/test/fixtures/warnings/otp_version/error +++ /dev/null @@ -1 +0,0 @@ -22 \ No newline at end of file diff --git a/test/fixtures/warnings/otp_version/undefined b/test/fixtures/warnings/otp_version/undefined deleted file mode 100644 index 66dc9051d..000000000 --- a/test/fixtures/warnings/otp_version/undefined +++ /dev/null @@ -1 +0,0 @@ -undefined \ No newline at end of file diff --git a/test/otp_version_test.exs b/test/otp_version_test.exs index f26b90f61..af278cc72 100644 --- a/test/otp_version_test.exs +++ b/test/otp_version_test.exs @@ -1,58 +1,38 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.OTPVersionTest do use ExUnit.Case, async: true alias Pleroma.OTPVersion - describe "get_and_check_version/2" do + describe "check/1" do test "22.4" do - assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [ - "test/fixtures/warnings/otp_version/22.4" - ]) == :ok + assert OTPVersion.check(["test/fixtures/warnings/otp_version/22.4"]) == :ok end test "22.1" do - assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [ - "test/fixtures/warnings/otp_version/22.1" - ]) == {:error, "22.1"} + assert OTPVersion.check(["test/fixtures/warnings/otp_version/22.1"]) == {:error, "22.1"} end test "21.1" do - assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [ - "test/fixtures/warnings/otp_version/21.1" - ]) == {:error, "21.1"} + assert OTPVersion.check(["test/fixtures/warnings/otp_version/21.1"]) == {:error, "21.1"} end test "23.0" do - assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [ - "test/fixtures/warnings/otp_version/23.0" - ]) == :ok - end - - test "undefined" do - assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [ - "test/fixtures/warnings/otp_version/undefined" - ]) == :undefined - end - - test "not parsable" do - assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [ - "test/fixtures/warnings/otp_version/error" - ]) == :undefined + assert OTPVersion.check(["test/fixtures/warnings/otp_version/23.0"]) == :ok end test "with non existance file" do - assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [ + assert OTPVersion.check([ "test/fixtures/warnings/otp_version/non-exising", "test/fixtures/warnings/otp_version/22.4" ]) == :ok end test "empty paths" do - assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, []) == :undefined - end - - test "another adapter" do - assert OTPVersion.get_and_check_version(Tesla.Adapter.Hackney, []) == :ok + assert OTPVersion.check([]) == :undefined end end end From 097ad10d02598fb6b77f305c10341a13fb57ceee Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 09:29:51 +0000 Subject: [PATCH 051/581] Apply suggestion to lib/pleroma/pool/connections.ex --- lib/pleroma/pool/connections.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index a444f822f..c5098cd86 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -128,7 +128,7 @@ def handle_call({:checkin, uri}, from, state) do Logger.debug("checkin #{key}") case state.conns[key] do - %{conn: conn, gun_state: gun_state} = current_conn when gun_state == :up -> + %{conn: conn, gun_state: :up} = current_conn -> Logger.debug("reusing conn #{key}") with time <- :os.system_time(:second), From 2c8d80dc0ad594cfe25ebadd9e7a187c95914b34 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 09:29:57 +0000 Subject: [PATCH 052/581] Apply suggestion to lib/pleroma/pool/connections.ex --- lib/pleroma/pool/connections.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index c5098cd86..c4c5fd66c 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -145,7 +145,7 @@ def handle_call({:checkin, uri}, from, state) do {:reply, conn, state} end - %{gun_state: gun_state} when gun_state == :down -> + %{gun_state: :down} -> {:reply, nil, state} nil -> From a3ad028973154dafad910d4d73d7d4d4822627c1 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 09:34:36 +0000 Subject: [PATCH 053/581] Apply suggestion to lib/pleroma/http/adapter.ex --- lib/pleroma/http/adapter.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/http/adapter.ex b/lib/pleroma/http/adapter.ex index 6166a3eb4..32046b1d3 100644 --- a/lib/pleroma/http/adapter.ex +++ b/lib/pleroma/http/adapter.ex @@ -57,7 +57,7 @@ def domain_or_ip(host) do {:error, :einval} -> {:domain, :idna.encode(charlist)} - {:ok, ip} when is_tuple(ip) and tuple_size(ip) in [4, 8] -> + {:ok, ip} -> {:ip, ip} end end From df3c59d9280b94cf99571cbbd1b10c334db8e44d Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 09:45:18 +0000 Subject: [PATCH 054/581] Apply suggestion to docs/configuration/cheatsheet.md --- docs/configuration/cheatsheet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index f735b19b8..65f37e846 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -416,7 +416,7 @@ It will increase memory usage, but federation would work faster. Advanced settings for workers pools. -There's four pools used: +There are four pools used: * `:federation` for the federation jobs. You may want this pool max_connections to be at least equal to the number of federator jobs + retry queue jobs. From d30ff35d94ff7d8bc07f0221323a75b07641ee8d Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 09:46:53 +0000 Subject: [PATCH 055/581] Apply suggestion to lib/pleroma/http/request_builder.ex --- lib/pleroma/http/request_builder.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/http/request_builder.ex b/lib/pleroma/http/request_builder.ex index 491acd0f9..046741d99 100644 --- a/lib/pleroma/http/request_builder.ex +++ b/lib/pleroma/http/request_builder.ex @@ -35,7 +35,7 @@ def url(request, u), do: %{request | url: u} def headers(request, headers) do headers_list = if Pleroma.Config.get([:http, :send_user_agent]) do - headers ++ [{"user-agent", Pleroma.Application.user_agent()}] + [{"user-agent", Pleroma.Application.user_agent()} | headers] else headers end From 614e3934f9190ff199df087de34146ad5f34c660 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 09:50:42 +0000 Subject: [PATCH 056/581] Apply suggestion to lib/pleroma/http/http.ex --- lib/pleroma/http/http.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/http/http.ex b/lib/pleroma/http/http.ex index ad47dc936..5fb468689 100644 --- a/lib/pleroma/http/http.ex +++ b/lib/pleroma/http/http.ex @@ -64,8 +64,8 @@ def request(method, url, body, headers, options) when is_binary(url) do client <- Tesla.client([Tesla.Middleware.FollowRedirects], tesla_adapter()), pid <- Process.whereis(adapter_opts[:pool]) do pool_alive? = - if tesla_adapter() == Tesla.Adapter.Gun do - if pid, do: Process.alive?(pid), else: false + if tesla_adapter() == Tesla.Adapter.Gun && pid do + Process.alive?(pid) else false end From a21a66972f8733de766bc538fe81f2e0ccb57925 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 09:52:01 +0000 Subject: [PATCH 057/581] Apply suggestion to lib/pleroma/http/http.ex --- lib/pleroma/http/http.ex | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/pleroma/http/http.ex b/lib/pleroma/http/http.ex index 5fb468689..0235f89ea 100644 --- a/lib/pleroma/http/http.ex +++ b/lib/pleroma/http/http.ex @@ -76,12 +76,7 @@ def request(method, url, body, headers, options) when is_binary(url) do |> Map.put(:env, Pleroma.Config.get([:env])) |> Map.put(:pool_alive?, pool_alive?) - response = - request( - client, - request, - request_opts - ) + response = request(client, request, request_opts) Connection.after_request(adapter_opts) From 7eb65929924af50146d89192c2cf557e3bdbf07f Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 09:53:31 +0000 Subject: [PATCH 058/581] Apply suggestion to lib/pleroma/pool/connections.ex --- lib/pleroma/pool/connections.ex | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index c4c5fd66c..84617815f 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -180,10 +180,10 @@ def handle_info({:gun_up, conn_pid, _protocol}, state) do state = with conn_key when is_binary(conn_key) <- compose_key_gun_info(conn_pid), {key, conn} <- find_conn(state.conns, conn_pid, conn_key), - {true, key} <- {Process.alive?(conn_pid), key}, - time <- :os.system_time(:second), - last_reference <- time - conn.last_reference, - current_crf <- crf(last_reference, 100, conn.crf) do + {true, key} <- {Process.alive?(conn_pid), key} do + time = :os.system_time(:second) + last_reference = time - conn.last_reference + current_crf = crf(last_reference, 100, conn.crf) put_in(state.conns[key], %{ conn | gun_state: :up, From 151dc4e387cfbb91b7cd85461ce0deb1e5f5fe30 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 09:53:37 +0000 Subject: [PATCH 059/581] Apply suggestion to lib/pleroma/reverse_proxy/client/tesla.ex --- lib/pleroma/reverse_proxy/client/tesla.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/reverse_proxy/client/tesla.ex b/lib/pleroma/reverse_proxy/client/tesla.ex index 55a11b4a8..498a905e1 100644 --- a/lib/pleroma/reverse_proxy/client/tesla.ex +++ b/lib/pleroma/reverse_proxy/client/tesla.ex @@ -16,7 +16,7 @@ defmodule Pleroma.ReverseProxy.Client.Tesla do @impl true def request(method, url, headers, body, opts \\ []) do - _adapter = check_adapter() + check_adapter() with opts <- Keyword.merge(opts, body_as: :chunks, mode: :passive), {:ok, response} <- From 28ed4b41d03c6a137d198b8c67fb081c7ebfbbc6 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 13:05:28 +0300 Subject: [PATCH 060/581] naming for checkin from pool timeout --- config/config.exs | 2 +- docs/configuration/cheatsheet.md | 2 +- lib/pleroma/pool/connections.ex | 3 ++- test/pool/connections_test.exs | 3 +-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/config.exs b/config/config.exs index 7c94a0f26..661dfad20 100644 --- a/config/config.exs +++ b/config/config.exs @@ -607,7 +607,7 @@ prepare: :unnamed config :pleroma, :connections_pool, - receive_connection_timeout: 250, + checkin_timeout: 250, max_connections: 250, retry: 0, retry_timeout: 100, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 65f37e846..ef3cc40e6 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -404,7 +404,7 @@ Advanced settings for connections pool. Pool with opened connections. These conn For big instances it's recommended to increase `config :pleroma, :connections_pool, max_connections: 500` up to 500-1000. It will increase memory usage, but federation would work faster. -* `:receive_connection_timeout` - timeout to receive connection from pool. Default: 250ms. +* `:checkin_timeout` - timeout to checkin connection from pool. Default: 250ms. * `:max_connections` - maximum number of connections in the pool. Default: 250 connections. * `:retry` - number of retries, while `gun` will try to reconnect if connections goes down. Default: 5. * `:retry_timeout` - timeout while `gun` will try to reconnect. Default: 100ms. diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index 84617815f..05fa8f7ad 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -34,7 +34,7 @@ def checkin(url, name) def checkin(url, name) when is_binary(url), do: checkin(URI.parse(url), name) def checkin(%URI{} = uri, name) do - timeout = Config.get([:connections_pool, :receive_connection_timeout], 250) + timeout = Config.get([:connections_pool, :checkin_timeout], 250) GenServer.call( name, @@ -184,6 +184,7 @@ def handle_info({:gun_up, conn_pid, _protocol}, state) do time = :os.system_time(:second) last_reference = time - conn.last_reference current_crf = crf(last_reference, 100, conn.crf) + put_in(state.conns[key], %{ conn | gun_state: :up, diff --git a/test/pool/connections_test.exs b/test/pool/connections_test.exs index 0e7a118ab..a084f31b9 100644 --- a/test/pool/connections_test.exs +++ b/test/pool/connections_test.exs @@ -24,8 +24,7 @@ defmodule Pleroma.Pool.ConnectionsTest do adapter = Application.get_env(:tesla, :adapter) Application.put_env(:tesla, :adapter, Tesla.Adapter.Gun) - {:ok, pid} = - Connections.start_link({name, [max_connections: 2, receive_connection_timeout: 1_500]}) + {:ok, pid} = Connections.start_link({name, [max_connections: 2, checkin_timeout: 1_500]}) on_exit(fn -> Application.put_env(:tesla, :adapter, adapter) From 24d1ac125c6ae719b3d119f2ec0079dcd74eadc2 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 13:24:19 +0300 Subject: [PATCH 061/581] hiding raise error logic to otp_version module --- lib/pleroma/application.ex | 23 ++++------------------- lib/pleroma/otp_version.ex | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 9b228d6b9..d0b9c3c41 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -42,6 +42,10 @@ def start(_type, _args) do setup_instrumenters() load_custom_modules() + if adapter() == Tesla.Adapter.Gun do + Pleroma.OTPVersion.check!() + end + # Define workers and child supervisors to be supervised children = [ @@ -66,25 +70,6 @@ def start(_type, _args) do Pleroma.Gopher.Server ] - if adapter() == Tesla.Adapter.Gun do - case Pleroma.OTPVersion.check() do - :ok -> - :ok - - {:error, version} -> - raise " - !!!OTP VERSION WARNING!!! - You are using gun adapter with OTP version #{version}, which doesn't support correct handling of unordered certificates chains. - " - - :undefined -> - raise " - !!!OTP VERSION WARNING!!! - To support correct handling of unordered certificates chains - OTP version must be > 22.2. - " - end - end - # See http://elixir-lang.org/docs/stable/elixir/Supervisor.html # for other strategies and supported options opts = [strategy: :one_for_one, name: Pleroma.Supervisor] diff --git a/lib/pleroma/otp_version.ex b/lib/pleroma/otp_version.ex index 54ceaff47..9ced2d27d 100644 --- a/lib/pleroma/otp_version.ex +++ b/lib/pleroma/otp_version.ex @@ -5,6 +5,26 @@ defmodule Pleroma.OTPVersion do @type check_status() :: :ok | :undefined | {:error, String.t()} + @spec check!() :: :ok | no_return() + def check! do + case check() do + :ok -> + :ok + + {:error, version} -> + raise " + !!!OTP VERSION WARNING!!! + You are using gun adapter with OTP version #{version}, which doesn't support correct handling of unordered certificates chains. + " + + :undefined -> + raise " + !!!OTP VERSION WARNING!!! + To support correct handling of unordered certificates chains - OTP version must be > 22.2. + " + end + end + @spec check() :: check_status() def check do # OTP Version https://erlang.org/doc/system_principles/versions.html#otp-version From d0e4d3ca3b9d8b8ed00d58e9e1c2a05ab561326c Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 14:56:49 +0300 Subject: [PATCH 062/581] removing unnecessary with comment in tesla client impovement --- lib/pleroma/pool/connections.ex | 40 +++++++++++------------ lib/pleroma/reverse_proxy/client/tesla.ex | 8 +++-- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index 05fa8f7ad..bde3ffd13 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -36,17 +36,16 @@ def checkin(url, name) when is_binary(url), do: checkin(URI.parse(url), name) def checkin(%URI{} = uri, name) do timeout = Config.get([:connections_pool, :checkin_timeout], 250) - GenServer.call( - name, - {:checkin, uri}, - timeout - ) + GenServer.call(name, {:checkin, uri}, timeout) end @spec alive?(atom()) :: boolean() def alive?(name) do - pid = Process.whereis(name) - if pid, do: Process.alive?(pid), else: false + if pid = Process.whereis(name) do + Process.alive?(pid) + else + false + end end @spec get_state(atom()) :: t() @@ -131,19 +130,20 @@ def handle_call({:checkin, uri}, from, state) do %{conn: conn, gun_state: :up} = current_conn -> Logger.debug("reusing conn #{key}") - with time <- :os.system_time(:second), - last_reference <- time - current_conn.last_reference, - current_crf <- crf(last_reference, 100, current_conn.crf), - state <- - put_in(state.conns[key], %{ - current_conn - | last_reference: time, - crf: current_crf, - conn_state: :active, - used_by: [from | current_conn.used_by] - }) do - {:reply, conn, state} - end + time = :os.system_time(:second) + last_reference = time - current_conn.last_reference + current_crf = crf(last_reference, 100, current_conn.crf) + + state = + put_in(state.conns[key], %{ + current_conn + | last_reference: time, + crf: current_crf, + conn_state: :active, + used_by: [from | current_conn.used_by] + }) + + {:reply, conn, state} %{gun_state: :down} -> {:reply, nil, state} diff --git a/lib/pleroma/reverse_proxy/client/tesla.ex b/lib/pleroma/reverse_proxy/client/tesla.ex index 498a905e1..80a0c8972 100644 --- a/lib/pleroma/reverse_proxy/client/tesla.ex +++ b/lib/pleroma/reverse_proxy/client/tesla.ex @@ -18,8 +18,9 @@ defmodule Pleroma.ReverseProxy.Client.Tesla do def request(method, url, headers, body, opts \\ []) do check_adapter() - with opts <- Keyword.merge(opts, body_as: :chunks, mode: :passive), - {:ok, response} <- + opts = Keyword.merge(opts, body_as: :chunks) + + with {:ok, response} <- Pleroma.HTTP.request( method, url, @@ -40,7 +41,8 @@ def request(method, url, headers, body, opts \\ []) do @impl true @spec stream_body(map()) :: {:ok, binary(), map()} | {:error, atom() | String.t()} | :done def stream_body(%{pid: pid, opts: opts, fin: true}) do - # if connection was sended and there were redirects, we need to close new conn - pid manually + # if connection was reused, but in tesla were redirects, + # tesla returns new opened connection, which must be closed manually if opts[:old_conn], do: Tesla.Adapter.Gun.close(pid) # if there were redirects we need to checkout old conn conn = opts[:old_conn] || opts[:conn] From 05429730e46b8605544637feebd4c409a4e9ed18 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 15:11:48 +0300 Subject: [PATCH 063/581] unnecessary with --- lib/pleroma/http/http.ex | 51 ++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/lib/pleroma/http/http.ex b/lib/pleroma/http/http.ex index 0235f89ea..f7b0095d7 100644 --- a/lib/pleroma/http/http.ex +++ b/lib/pleroma/http/http.ex @@ -55,33 +55,36 @@ def post(url, body, headers \\ [], options \\ []), @spec request(atom(), Request.url(), String.t(), Request.headers(), keyword()) :: {:ok, Env.t()} | {:error, any()} def request(method, url, body, headers, options) when is_binary(url) do - with uri <- URI.parse(url), - received_adapter_opts <- Keyword.get(options, :adapter, []), - adapter_opts <- Connection.options(uri, received_adapter_opts), - options <- put_in(options[:adapter], adapter_opts), - params <- Keyword.get(options, :params, []), - request <- build_request(method, headers, options, url, body, params), - client <- Tesla.client([Tesla.Middleware.FollowRedirects], tesla_adapter()), - pid <- Process.whereis(adapter_opts[:pool]) do - pool_alive? = - if tesla_adapter() == Tesla.Adapter.Gun && pid do - Process.alive?(pid) - else - false - end + uri = URI.parse(url) + received_adapter_opts = Keyword.get(options, :adapter, []) + adapter_opts = Connection.options(uri, received_adapter_opts) + options = put_in(options[:adapter], adapter_opts) + params = Keyword.get(options, :params, []) + request = build_request(method, headers, options, url, body, params) - request_opts = - adapter_opts - |> Enum.into(%{}) - |> Map.put(:env, Pleroma.Config.get([:env])) - |> Map.put(:pool_alive?, pool_alive?) + adapter = Application.get_env(:tesla, :adapter) + client = Tesla.client([Tesla.Middleware.FollowRedirects], adapter) - response = request(client, request, request_opts) + pid = Process.whereis(adapter_opts[:pool]) - Connection.after_request(adapter_opts) + pool_alive? = + if adapter == Tesla.Adapter.Gun && pid do + Process.alive?(pid) + else + false + end - response - end + request_opts = + adapter_opts + |> Enum.into(%{}) + |> Map.put(:env, Pleroma.Config.get([:env])) + |> Map.put(:pool_alive?, pool_alive?) + + response = request(client, request, request_opts) + + Connection.after_request(adapter_opts) + + response end @spec request(Client.t(), keyword(), map()) :: {:ok, Env.t()} | {:error, any()} @@ -138,6 +141,4 @@ defp build_request(method, headers, options, url, body, params) do |> Builder.add_param(:query, :query, params) |> Builder.convert_to_keyword() end - - defp tesla_adapter, do: Application.get_env(:tesla, :adapter) end From ee8071f0d5a8a53f6a9ae635d6ea57ce8576e21b Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 15:12:09 +0300 Subject: [PATCH 064/581] removing unused method --- lib/pleroma/http/request_builder.ex | 20 -------------------- test/http/request_builder_test.exs | 17 ----------------- 2 files changed, 37 deletions(-) diff --git a/lib/pleroma/http/request_builder.ex b/lib/pleroma/http/request_builder.ex index 046741d99..5b92ce764 100644 --- a/lib/pleroma/http/request_builder.ex +++ b/lib/pleroma/http/request_builder.ex @@ -49,26 +49,6 @@ def headers(request, headers) do @spec opts(Request.t(), keyword()) :: Request.t() def opts(request, options), do: %{request | opts: options} - # NOTE: isn't used anywhere - @doc """ - Add optional parameters to the request - - """ - @spec add_optional_params(Request.t(), %{optional(atom) => atom}, keyword()) :: map() - def add_optional_params(request, _, []), do: request - - def add_optional_params(request, definitions, [{key, value} | tail]) do - case definitions do - %{^key => location} -> - request - |> add_param(location, key, value) - |> add_optional_params(definitions, tail) - - _ -> - add_optional_params(request, definitions, tail) - end - end - @doc """ Add optional parameters to the request """ diff --git a/test/http/request_builder_test.exs b/test/http/request_builder_test.exs index f87ca11d3..f6eeac6c0 100644 --- a/test/http/request_builder_test.exs +++ b/test/http/request_builder_test.exs @@ -36,23 +36,6 @@ test "send custom user agent" do end end - describe "add_optional_params/3" do - test "don't add if keyword is empty" do - assert RequestBuilder.add_optional_params(%{}, %{}, []) == %{} - end - - test "add query parameter" do - assert RequestBuilder.add_optional_params( - %Request{}, - %{query: :query, body: :body, another: :val}, - [ - {:query, "param1=val1¶m2=val2"}, - {:body, "some body"} - ] - ) == %Request{query: "param1=val1¶m2=val2", body: "some body"} - end - end - describe "add_param/4" do test "add file parameter" do %Request{ From e605e79df9761cef3d9f93c489dd4618c6b70eda Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 15:44:13 +0300 Subject: [PATCH 065/581] simplification of formatting host method case for format_proxy method --- lib/pleroma/gun/conn.ex | 6 ++--- lib/pleroma/http/adapter.ex | 29 +++--------------------- lib/pleroma/http/adapter/gun.ex | 20 +++++++++++++---- test/http/adapter/gun_test.exs | 21 ++++++++++++++++- test/http/adapter_test.exs | 40 +-------------------------------- 5 files changed, 43 insertions(+), 73 deletions(-) diff --git a/lib/pleroma/gun/conn.ex b/lib/pleroma/gun/conn.ex index ddb9f30b0..a33d75558 100644 --- a/lib/pleroma/gun/conn.ex +++ b/lib/pleroma/gun/conn.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Gun.Conn do @@ -131,7 +131,7 @@ defp do_open(uri, %{proxy: {proxy_type, proxy_host, proxy_port}} = opts) do end defp do_open(%URI{host: host, port: port} = uri, opts) do - {_type, host} = Pleroma.HTTP.Adapter.domain_or_ip(host) + host = Pleroma.HTTP.Connection.parse_host(host) with {:ok, conn} <- API.open(host, port, opts), {:ok, _} <- API.await_up(conn, opts[:await_up_timeout]) do @@ -149,7 +149,7 @@ defp do_open(%URI{host: host, port: port} = uri, opts) do end defp destination_opts(%URI{host: host, port: port}) do - {_type, host} = Pleroma.HTTP.Adapter.domain_or_ip(host) + host = Pleroma.HTTP.Connection.parse_host(host) %{host: host, port: port} end diff --git a/lib/pleroma/http/adapter.ex b/lib/pleroma/http/adapter.ex index 32046b1d3..a3b84d8f3 100644 --- a/lib/pleroma/http/adapter.ex +++ b/lib/pleroma/http/adapter.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.Adapter do @@ -8,7 +8,6 @@ defmodule Pleroma.HTTP.Adapter do @type proxy :: {Connection.host(), pos_integer()} | {Connection.proxy_type(), pos_integer()} - @type host_type :: :domain | :ip @callback options(keyword(), URI.t()) :: keyword() @callback after_request(keyword()) :: :ok @@ -29,9 +28,8 @@ def after_request(_opts), do: :ok def format_proxy(nil), do: nil def format_proxy(proxy_url) do - with {:ok, host, port} <- Connection.parse_proxy(proxy_url) do - {host, port} - else + case Connection.parse_proxy(proxy_url) do + {:ok, host, port} -> {host, port} {:ok, type, host, port} -> {type, host, port} _ -> nil end @@ -40,25 +38,4 @@ def format_proxy(proxy_url) do @spec maybe_add_proxy(keyword(), proxy() | nil) :: keyword() def maybe_add_proxy(opts, nil), do: opts def maybe_add_proxy(opts, proxy), do: Keyword.put_new(opts, :proxy, proxy) - - @spec domain_or_fallback(String.t()) :: charlist() - def domain_or_fallback(host) do - case domain_or_ip(host) do - {:domain, domain} -> domain - {:ip, _ip} -> to_charlist(host) - end - end - - @spec domain_or_ip(String.t()) :: {host_type(), Connection.host()} - def domain_or_ip(host) do - charlist = to_charlist(host) - - case :inet.parse_address(charlist) do - {:error, :einval} -> - {:domain, :idna.encode(charlist)} - - {:ok, ip} -> - {:ip, ip} - end - end end diff --git a/lib/pleroma/http/adapter/gun.ex b/lib/pleroma/http/adapter/gun.ex index 908d71898..5e88786bd 100644 --- a/lib/pleroma/http/adapter/gun.ex +++ b/lib/pleroma/http/adapter/gun.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.Adapter.Gun do @@ -42,7 +42,7 @@ def after_request(opts) do end defp add_original(opts, %URI{host: host, port: port}) do - formatted_host = Adapter.domain_or_fallback(host) + formatted_host = format_host(host) Keyword.put(opts, :original, "#{formatted_host}:#{port}") end @@ -57,8 +57,7 @@ defp add_scheme_opts(opts, %URI{scheme: "https", host: host, port: port}) do cacertfile: CAStore.file_path(), depth: 20, reuse_sessions: false, - verify_fun: - {&:ssl_verify_hostname.verify_fun/3, [check_hostname: Adapter.domain_or_fallback(host)]}, + verify_fun: {&:ssl_verify_hostname.verify_fun/3, [check_hostname: format_host(host)]}, log_level: :warning ] ] @@ -139,4 +138,17 @@ defp try_to_get_conn(uri, opts) do opts end end + + @spec format_host(String.t()) :: charlist() + def format_host(host) do + host_charlist = to_charlist(host) + + case :inet.parse_address(host_charlist) do + {:error, :einval} -> + :idna.encode(host_charlist) + + {:ok, _ip} -> + host_charlist + end + end end diff --git a/test/http/adapter/gun_test.exs b/test/http/adapter/gun_test.exs index a8dcbae04..a05471ac6 100644 --- a/test/http/adapter/gun_test.exs +++ b/test/http/adapter/gun_test.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.Adapter.GunTest do @@ -264,4 +264,23 @@ test "with ipv6" do } = Connections.get_state(:gun_connections) end end + + describe "format_host/1" do + test "with domain" do + assert Gun.format_host("example.com") == 'example.com' + end + + test "with idna domain" do + assert Gun.format_host("ですexample.com") == 'xn--example-183fne.com' + end + + test "with ipv4" do + assert Gun.format_host("127.0.0.1") == '127.0.0.1' + end + + test "with ipv6" do + assert Gun.format_host("2a03:2880:f10c:83:face:b00c:0:25de") == + '2a03:2880:f10c:83:face:b00c:0:25de' + end + end end diff --git a/test/http/adapter_test.exs b/test/http/adapter_test.exs index 37e47dabe..4c805837c 100644 --- a/test/http/adapter_test.exs +++ b/test/http/adapter_test.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.AdapterTest do @@ -7,44 +7,6 @@ defmodule Pleroma.HTTP.AdapterTest do alias Pleroma.HTTP.Adapter - describe "domain_or_ip/1" do - test "with domain" do - assert Adapter.domain_or_ip("example.com") == {:domain, 'example.com'} - end - - test "with idna domain" do - assert Adapter.domain_or_ip("ですexample.com") == {:domain, 'xn--example-183fne.com'} - end - - test "with ipv4" do - assert Adapter.domain_or_ip("127.0.0.1") == {:ip, {127, 0, 0, 1}} - end - - test "with ipv6" do - assert Adapter.domain_or_ip("2a03:2880:f10c:83:face:b00c:0:25de") == - {:ip, {10_755, 10_368, 61_708, 131, 64_206, 45_068, 0, 9_694}} - end - end - - describe "domain_or_fallback/1" do - test "with domain" do - assert Adapter.domain_or_fallback("example.com") == 'example.com' - end - - test "with idna domain" do - assert Adapter.domain_or_fallback("ですexample.com") == 'xn--example-183fne.com' - end - - test "with ipv4" do - assert Adapter.domain_or_fallback("127.0.0.1") == '127.0.0.1' - end - - test "with ipv6" do - assert Adapter.domain_or_fallback("2a03:2880:f10c:83:face:b00c:0:25de") == - '2a03:2880:f10c:83:face:b00c:0:25de' - end - end - describe "format_proxy/1" do test "with nil" do assert Adapter.format_proxy(nil) == nil From 7d68924e4f7233590457aa7e32a21f082dd0584f Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 16:08:21 +0300 Subject: [PATCH 066/581] naming --- lib/pleroma/gun/conn.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/gun/conn.ex b/lib/pleroma/gun/conn.ex index a33d75558..a8b8c92c1 100644 --- a/lib/pleroma/gun/conn.ex +++ b/lib/pleroma/gun/conn.ex @@ -54,7 +54,7 @@ def open(%URI{} = uri, name, opts) do if Connections.count(name) < opts[:max_connection] do do_open(uri, opts) else - try_do_open(name, uri, opts) + close_least_used_and_do_open(name, uri, opts) end if is_pid(conn_pid) do @@ -159,7 +159,7 @@ defp add_http2_opts(opts, "https", tls_opts) do defp add_http2_opts(opts, _, _), do: opts - defp try_do_open(name, uri, opts) do + defp close_least_used_and_do_open(name, uri, opts) do Logger.debug("try to open conn #{Connections.compose_uri_log(uri)}") with [{close_key, least_used} | _conns] <- From 8fc00b7cbff86885ec99d01821c403a766202659 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 16:27:46 +0300 Subject: [PATCH 067/581] return error if connection failed to open --- lib/pleroma/gun/conn.ex | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/gun/conn.ex b/lib/pleroma/gun/conn.ex index a8b8c92c1..9ae419092 100644 --- a/lib/pleroma/gun/conn.ex +++ b/lib/pleroma/gun/conn.ex @@ -90,7 +90,7 @@ defp do_open(uri, %{proxy: {proxy_host, proxy_port}} = opts) do } #{inspect(error)}" ) - nil + error end end @@ -126,7 +126,7 @@ defp do_open(uri, %{proxy: {proxy_type, proxy_host, proxy_port}} = opts) do } #{inspect(error)}" ) - nil + error end end @@ -144,7 +144,7 @@ defp do_open(%URI{host: host, port: port} = uri, opts) do }" ) - nil + error end end @@ -169,7 +169,7 @@ defp close_least_used_and_do_open(name, uri, opts) do do_open(uri, opts) else - [] -> nil + [] -> {:error, :pool_overflowed} end end end From 7c0ed9302cb13ab44c1bf18017538315dcd0ce2e Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 16:46:20 +0300 Subject: [PATCH 068/581] unnecessary mock --- test/notification_test.exs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/test/notification_test.exs b/test/notification_test.exs index 1c60f6866..56a581810 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -649,13 +649,6 @@ test "notifications are deleted if a remote user is deleted" do "object" => remote_user.ap_id } - remote_user_url = remote_user.ap_id - - Tesla.Mock.mock(fn - %{method: :get, url: ^remote_user_url} -> - %Tesla.Env{status: 404, body: ""} - end) - {:ok, _delete_activity} = Transmogrifier.handle_incoming(delete_user_message) ObanHelpers.perform_all() From 6ebf389d6e6ca5f3e56f9b017531f5f7e301ed3c Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 16:51:49 +0300 Subject: [PATCH 069/581] poolboy timeout fix --- lib/pleroma/http/http.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/http/http.ex b/lib/pleroma/http/http.ex index f7b0095d7..4b774472e 100644 --- a/lib/pleroma/http/http.ex +++ b/lib/pleroma/http/http.ex @@ -102,8 +102,8 @@ def request(%Client{} = client, request, %{pool: pool, timeout: timeout}) do try do :poolboy.transaction( pool, - &Pleroma.Pool.Request.execute(&1, client, request, timeout + 500), - timeout + 1_000 + &Pleroma.Pool.Request.execute(&1, client, request, timeout), + timeout ) rescue e -> From aaa879ce75a62e69a458226e65bef31b0f2ed08c Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 17:27:22 +0300 Subject: [PATCH 070/581] proxy parsing errors --- lib/pleroma/http/connection.ex | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/http/connection.ex b/lib/pleroma/http/connection.ex index e2d7afbbd..bdd062929 100644 --- a/lib/pleroma/http/connection.ex +++ b/lib/pleroma/http/connection.ex @@ -71,15 +71,15 @@ def parse_proxy(proxy) when is_binary(proxy) do else {_, _} -> Logger.warn("parsing port in proxy fail #{inspect(proxy)}") - {:error, :error_parsing_port_in_proxy} + {:error, :invalid_proxy_port} :error -> Logger.warn("parsing port in proxy fail #{inspect(proxy)}") - {:error, :error_parsing_port_in_proxy} + {:error, :invalid_proxy_port} _ -> Logger.warn("parsing proxy fail #{inspect(proxy)}") - {:error, :error_parsing_proxy} + {:error, :invalid_proxy} end end @@ -89,7 +89,7 @@ def parse_proxy(proxy) when is_tuple(proxy) do else _ -> Logger.warn("parsing proxy fail #{inspect(proxy)}") - {:error, :error_parsing_proxy} + {:error, :invalid_proxy} end end From 24bf5c4e89e6f97ed3d53157cead48c04015a51b Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 17:27:56 +0300 Subject: [PATCH 071/581] remove try block from pool request --- lib/pleroma/http/http.ex | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/lib/pleroma/http/http.ex b/lib/pleroma/http/http.ex index 4b774472e..cc0c39400 100644 --- a/lib/pleroma/http/http.ex +++ b/lib/pleroma/http/http.ex @@ -99,23 +99,11 @@ def request(%Client{} = client, request, %{pool_alive?: false}) do end def request(%Client{} = client, request, %{pool: pool, timeout: timeout}) do - try do - :poolboy.transaction( - pool, - &Pleroma.Pool.Request.execute(&1, client, request, timeout), - timeout - ) - rescue - e -> - {:error, e} - catch - :exit, {:timeout, _} -> - Logger.warn("Receive response from pool failed #{request[:url]}") - {:error, :recv_pool_timeout} - - :exit, e -> - {:error, e} - end + :poolboy.transaction( + pool, + &Pleroma.Pool.Request.execute(&1, client, request, timeout), + timeout + ) end @spec request_try(Client.t(), keyword()) :: {:ok, Env.t()} | {:error, any()} From 3723d723652b747b00fc26054101c15e39a5af18 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 17:32:59 +0300 Subject: [PATCH 072/581] proxy parse tests fix --- test/http/connection_test.exs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/http/connection_test.exs b/test/http/connection_test.exs index 53ccbc9cd..37de11e7a 100644 --- a/test/http/connection_test.exs +++ b/test/http/connection_test.exs @@ -51,31 +51,31 @@ test "as tuple with string host" do describe "parse_proxy/1 errors" do test "ip without port" do capture_log(fn -> - assert Connection.parse_proxy("127.0.0.1") == {:error, :error_parsing_proxy} + assert Connection.parse_proxy("127.0.0.1") == {:error, :invalid_proxy} end) =~ "parsing proxy fail \"127.0.0.1\"" end test "host without port" do capture_log(fn -> - assert Connection.parse_proxy("localhost") == {:error, :error_parsing_proxy} + assert Connection.parse_proxy("localhost") == {:error, :invalid_proxy} end) =~ "parsing proxy fail \"localhost\"" end test "host with bad port" do capture_log(fn -> - assert Connection.parse_proxy("localhost:port") == {:error, :error_parsing_port_in_proxy} + assert Connection.parse_proxy("localhost:port") == {:error, :invalid_proxy_port} end) =~ "parsing port in proxy fail \"localhost:port\"" end test "ip with bad port" do capture_log(fn -> - assert Connection.parse_proxy("127.0.0.1:15.9") == {:error, :error_parsing_port_in_proxy} + assert Connection.parse_proxy("127.0.0.1:15.9") == {:error, :invalid_proxy_port} end) =~ "parsing port in proxy fail \"127.0.0.1:15.9\"" end test "as tuple without port" do capture_log(fn -> - assert Connection.parse_proxy({:socks5, :localhost}) == {:error, :error_parsing_proxy} + assert Connection.parse_proxy({:socks5, :localhost}) == {:error, :invalid_proxy} end) =~ "parsing proxy fail {:socks5, :localhost}" end From 1ad34bfdbaee7d98167dc7dc7be8b65fd5e6c5f1 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 17:44:04 +0300 Subject: [PATCH 073/581] no try block in checkout connection --- lib/pleroma/http/adapter/gun.ex | 53 ++++++--------------------------- 1 file changed, 9 insertions(+), 44 deletions(-) diff --git a/lib/pleroma/http/adapter/gun.ex b/lib/pleroma/http/adapter/gun.ex index 5e88786bd..30c5c3c16 100644 --- a/lib/pleroma/http/adapter/gun.ex +++ b/lib/pleroma/http/adapter/gun.ex @@ -86,56 +86,21 @@ defp maybe_get_conn(adapter_opts, uri, connection_opts) do end defp try_to_get_conn(uri, opts) do - try do - case Connections.checkin(uri, :gun_connections) do - nil -> - Logger.debug( - "Gun connections pool checkin was not successful. Trying to open conn for next request." - ) - - Task.start(fn -> Pleroma.Gun.Conn.open(uri, :gun_connections, opts) end) - opts - - conn when is_pid(conn) -> - Logger.debug("received conn #{inspect(conn)} #{Connections.compose_uri_log(uri)}") - - opts - |> Keyword.put(:conn, conn) - |> Keyword.put(:close_conn, false) - end - rescue - error -> - Logger.warn( - "Gun connections pool checkin caused error #{Connections.compose_uri_log(uri)} #{ - inspect(error) - }" - ) - - opts - catch - # TODO: here must be no timeouts - :exit, {:timeout, {_, operation, [_, {method, _}, _]}} -> - {:message_queue_len, messages_len} = - :gun_connections - |> Process.whereis() - |> Process.info(:message_queue_len) - - Logger.warn( - "Gun connections pool checkin with timeout error for #{operation} #{method} #{ - Connections.compose_uri_log(uri) - }. Messages length: #{messages_len}" + case Connections.checkin(uri, :gun_connections) do + nil -> + Logger.debug( + "Gun connections pool checkin was not successful. Trying to open conn for next request." ) + Task.start(fn -> Pleroma.Gun.Conn.open(uri, :gun_connections, opts) end) opts - :exit, error -> - Logger.warn( - "Gun pool checkin exited with error #{Connections.compose_uri_log(uri)} #{ - inspect(error) - }" - ) + conn when is_pid(conn) -> + Logger.debug("received conn #{inspect(conn)} #{Connections.compose_uri_log(uri)}") opts + |> Keyword.put(:conn, conn) + |> Keyword.put(:close_conn, false) end end From 8854770fc4e9079131a0897d5fb6c0ccccf98bc6 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 18:01:35 +0300 Subject: [PATCH 074/581] retry and retry_timeout settings default change --- config/config.exs | 4 ++-- docs/configuration/cheatsheet.md | 4 ++-- lib/pleroma/gun/conn.ex | 4 ++-- lib/pleroma/http/adapter/gun.ex | 3 ++- lib/pleroma/pool/connections.ex | 2 +- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/config/config.exs b/config/config.exs index 661dfad20..f0dab24b5 100644 --- a/config/config.exs +++ b/config/config.exs @@ -609,8 +609,8 @@ config :pleroma, :connections_pool, checkin_timeout: 250, max_connections: 250, - retry: 0, - retry_timeout: 100, + retry: 1, + retry_timeout: 1000, await_up_timeout: 5_000 config :pleroma, :pools, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index ef3cc40e6..a39a7436d 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -406,8 +406,8 @@ It will increase memory usage, but federation would work faster. * `:checkin_timeout` - timeout to checkin connection from pool. Default: 250ms. * `:max_connections` - maximum number of connections in the pool. Default: 250 connections. -* `:retry` - number of retries, while `gun` will try to reconnect if connections goes down. Default: 5. -* `:retry_timeout` - timeout while `gun` will try to reconnect. Default: 100ms. +* `:retry` - number of retries, while `gun` will try to reconnect if connections goes down. Default: 1. +* `:retry_timeout` - timeout while `gun` will try to reconnect. Default: 1000ms. * `:await_up_timeout` - timeout while `gun` will wait until connection is up. Default: 5000ms. ### :pools diff --git a/lib/pleroma/gun/conn.ex b/lib/pleroma/gun/conn.ex index 9ae419092..d73bec360 100644 --- a/lib/pleroma/gun/conn.ex +++ b/lib/pleroma/gun/conn.ex @@ -42,8 +42,8 @@ def open(%URI{} = uri, name, opts) do opts = opts |> Enum.into(%{}) - |> Map.put_new(:retry, pool_opts[:retry] || 0) - |> Map.put_new(:retry_timeout, pool_opts[:retry_timeout] || 100) + |> Map.put_new(:retry, pool_opts[:retry] || 1) + |> Map.put_new(:retry_timeout, pool_opts[:retry_timeout] || 1000) |> Map.put_new(:await_up_timeout, pool_opts[:await_up_timeout] || 5_000) key = "#{uri.scheme}:#{uri.host}:#{uri.port}" diff --git a/lib/pleroma/http/adapter/gun.ex b/lib/pleroma/http/adapter/gun.ex index 30c5c3c16..ecf9c5b62 100644 --- a/lib/pleroma/http/adapter/gun.ex +++ b/lib/pleroma/http/adapter/gun.ex @@ -15,7 +15,8 @@ defmodule Pleroma.HTTP.Adapter.Gun do connect_timeout: 5_000, domain_lookup_timeout: 5_000, tls_handshake_timeout: 5_000, - retry: 0, + retry: 1, + retry_timeout: 1000, await_up_timeout: 5_000 ] diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index bde3ffd13..0f7a1bfd8 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -219,7 +219,7 @@ def handle_info({:gun_up, conn_pid, _protocol}, state) do @impl true def handle_info({:gun_down, conn_pid, _protocol, _reason, _killed}, state) do - retries = Config.get([:connections_pool, :retry], 0) + retries = Config.get([:connections_pool, :retry], 1) # we can't get info on this pid, because pid is dead state = with {key, conn} <- find_conn(state.conns, conn_pid), From f98ee730f01de528797e38f27964b69a465662c4 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 18:53:44 +0300 Subject: [PATCH 075/581] adapter renaming to adapter_helper --- .../http/{adapter.ex => adapter_helper.ex} | 2 +- .../http/{adapter => adapter_helper}/gun.ex | 8 +++--- .../{adapter => adapter_helper}/hackney.ex | 6 ++-- lib/pleroma/http/connection.ex | 8 +++--- .../{adapter => adapter_helper}/gun_test.exs | 4 +-- .../hackney_test.exs | 4 +-- test/http/adapter_helper_test.exs | 28 +++++++++++++++++++ test/http/adapter_test.exs | 27 ------------------ 8 files changed, 44 insertions(+), 43 deletions(-) rename lib/pleroma/http/{adapter.ex => adapter_helper.ex} (96%) rename lib/pleroma/http/{adapter => adapter_helper}/gun.ex (94%) rename lib/pleroma/http/{adapter => adapter_helper}/hackney.ex (87%) rename test/http/{adapter => adapter_helper}/gun_test.exs (99%) rename test/http/{adapter => adapter_helper}/hackney_test.exs (93%) create mode 100644 test/http/adapter_helper_test.exs delete mode 100644 test/http/adapter_test.exs diff --git a/lib/pleroma/http/adapter.ex b/lib/pleroma/http/adapter_helper.ex similarity index 96% rename from lib/pleroma/http/adapter.ex rename to lib/pleroma/http/adapter_helper.ex index a3b84d8f3..2c13666ec 100644 --- a/lib/pleroma/http/adapter.ex +++ b/lib/pleroma/http/adapter_helper.ex @@ -2,7 +2,7 @@ # Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.HTTP.Adapter do +defmodule Pleroma.HTTP.AdapterHelper do alias Pleroma.HTTP.Connection @type proxy :: diff --git a/lib/pleroma/http/adapter/gun.ex b/lib/pleroma/http/adapter_helper/gun.ex similarity index 94% rename from lib/pleroma/http/adapter/gun.ex rename to lib/pleroma/http/adapter_helper/gun.ex index ecf9c5b62..b3298ec7f 100644 --- a/lib/pleroma/http/adapter/gun.ex +++ b/lib/pleroma/http/adapter_helper/gun.ex @@ -2,10 +2,10 @@ # Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.HTTP.Adapter.Gun do - @behaviour Pleroma.HTTP.Adapter +defmodule Pleroma.HTTP.AdapterHelper.Gun do + @behaviour Pleroma.HTTP.AdapterHelper - alias Pleroma.HTTP.Adapter + alias Pleroma.HTTP.AdapterHelper require Logger @@ -28,7 +28,7 @@ def options(connection_opts \\ [], %URI{} = uri) do |> Keyword.merge(Pleroma.Config.get([:http, :adapter], [])) |> add_original(uri) |> add_scheme_opts(uri) - |> Adapter.maybe_add_proxy(Adapter.format_proxy(proxy)) + |> AdapterHelper.maybe_add_proxy(AdapterHelper.format_proxy(proxy)) |> maybe_get_conn(uri, connection_opts) end diff --git a/lib/pleroma/http/adapter/hackney.ex b/lib/pleroma/http/adapter_helper/hackney.ex similarity index 87% rename from lib/pleroma/http/adapter/hackney.ex rename to lib/pleroma/http/adapter_helper/hackney.ex index 00db30083..a0e161eaa 100644 --- a/lib/pleroma/http/adapter/hackney.ex +++ b/lib/pleroma/http/adapter_helper/hackney.ex @@ -1,5 +1,5 @@ -defmodule Pleroma.HTTP.Adapter.Hackney do - @behaviour Pleroma.HTTP.Adapter +defmodule Pleroma.HTTP.AdapterHelper.Hackney do + @behaviour Pleroma.HTTP.AdapterHelper @defaults [ connect_timeout: 10_000, @@ -17,7 +17,7 @@ def options(connection_opts \\ [], %URI{} = uri) do |> Keyword.merge(Pleroma.Config.get([:http, :adapter], [])) |> Keyword.merge(connection_opts) |> add_scheme_opts(uri) - |> Pleroma.HTTP.Adapter.maybe_add_proxy(proxy) + |> Pleroma.HTTP.AdapterHelper.maybe_add_proxy(proxy) end defp add_scheme_opts(opts, %URI{scheme: "http"}), do: opts diff --git a/lib/pleroma/http/connection.ex b/lib/pleroma/http/connection.ex index bdd062929..dc2761182 100644 --- a/lib/pleroma/http/connection.ex +++ b/lib/pleroma/http/connection.ex @@ -18,7 +18,7 @@ defmodule Pleroma.HTTP.Connection do require Logger alias Pleroma.Config - alias Pleroma.HTTP.Adapter + alias Pleroma.HTTP.AdapterHelper @doc """ Merge default connection & adapter options with received ones. @@ -50,9 +50,9 @@ def after_request(opts), do: adapter().after_request(opts) defp adapter do case Application.get_env(:tesla, :adapter) do - Tesla.Adapter.Gun -> Adapter.Gun - Tesla.Adapter.Hackney -> Adapter.Hackney - _ -> Adapter + Tesla.Adapter.Gun -> AdapterHelper.Gun + Tesla.Adapter.Hackney -> AdapterHelper.Hackney + _ -> AdapterHelper end end diff --git a/test/http/adapter/gun_test.exs b/test/http/adapter_helper/gun_test.exs similarity index 99% rename from test/http/adapter/gun_test.exs rename to test/http/adapter_helper/gun_test.exs index a05471ac6..bc7e3f0e0 100644 --- a/test/http/adapter/gun_test.exs +++ b/test/http/adapter_helper/gun_test.exs @@ -2,13 +2,13 @@ # Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.HTTP.Adapter.GunTest do +defmodule Pleroma.HTTP.AdapterHelper.GunTest do use ExUnit.Case, async: true use Pleroma.Tests.Helpers import ExUnit.CaptureLog alias Pleroma.Config alias Pleroma.Gun.Conn - alias Pleroma.HTTP.Adapter.Gun + alias Pleroma.HTTP.AdapterHelper.Gun alias Pleroma.Pool.Connections setup_all do diff --git a/test/http/adapter/hackney_test.exs b/test/http/adapter_helper/hackney_test.exs similarity index 93% rename from test/http/adapter/hackney_test.exs rename to test/http/adapter_helper/hackney_test.exs index 35cb58125..82f5a7883 100644 --- a/test/http/adapter/hackney_test.exs +++ b/test/http/adapter_helper/hackney_test.exs @@ -2,12 +2,12 @@ # Copyright © 2017-2019 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.HTTP.Adapter.HackneyTest do +defmodule Pleroma.HTTP.AdapterHelper.HackneyTest do use ExUnit.Case use Pleroma.Tests.Helpers alias Pleroma.Config - alias Pleroma.HTTP.Adapter.Hackney + alias Pleroma.HTTP.AdapterHelper.Hackney setup_all do uri = URI.parse("http://domain.com") diff --git a/test/http/adapter_helper_test.exs b/test/http/adapter_helper_test.exs new file mode 100644 index 000000000..24d501ad5 --- /dev/null +++ b/test/http/adapter_helper_test.exs @@ -0,0 +1,28 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.HTTP.AdapterHelperTest do + use ExUnit.Case, async: true + + alias Pleroma.HTTP.AdapterHelper + + describe "format_proxy/1" do + test "with nil" do + assert AdapterHelper.format_proxy(nil) == nil + end + + test "with string" do + assert AdapterHelper.format_proxy("127.0.0.1:8123") == {{127, 0, 0, 1}, 8123} + end + + test "localhost with port" do + assert AdapterHelper.format_proxy("localhost:8123") == {'localhost', 8123} + end + + test "tuple" do + assert AdapterHelper.format_proxy({:socks4, :localhost, 9050}) == + {:socks4, 'localhost', 9050} + end + end +end diff --git a/test/http/adapter_test.exs b/test/http/adapter_test.exs deleted file mode 100644 index 4c805837c..000000000 --- a/test/http/adapter_test.exs +++ /dev/null @@ -1,27 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.HTTP.AdapterTest do - use ExUnit.Case, async: true - - alias Pleroma.HTTP.Adapter - - describe "format_proxy/1" do - test "with nil" do - assert Adapter.format_proxy(nil) == nil - end - - test "with string" do - assert Adapter.format_proxy("127.0.0.1:8123") == {{127, 0, 0, 1}, 8123} - end - - test "localhost with port" do - assert Adapter.format_proxy("localhost:8123") == {'localhost', 8123} - end - - test "tuple" do - assert Adapter.format_proxy({:socks4, :localhost, 9050}) == {:socks4, 'localhost', 9050} - end - end -end From 23f407bf093723344e63eba6a63f5cd58aa7313e Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 18:57:16 +0300 Subject: [PATCH 076/581] don't test gun itself --- test/gun/gun_test.exs | 39 --------------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 test/gun/gun_test.exs diff --git a/test/gun/gun_test.exs b/test/gun/gun_test.exs deleted file mode 100644 index 9f3e0f938..000000000 --- a/test/gun/gun_test.exs +++ /dev/null @@ -1,39 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.GunTest do - use ExUnit.Case - alias Pleroma.Gun - - @moduletag :integration - - test "opens connection and receive response" do - {:ok, conn} = Gun.open('httpbin.org', 443) - assert is_pid(conn) - {:ok, _protocol} = Gun.await_up(conn) - ref = :gun.get(conn, '/get?a=b&c=d') - assert is_reference(ref) - - assert {:response, :nofin, 200, _} = Gun.await(conn, ref) - assert json = receive_response(conn, ref) - - assert %{"args" => %{"a" => "b", "c" => "d"}} = Jason.decode!(json) - - {:ok, pid} = Task.start(fn -> Process.sleep(50) end) - - :ok = :gun.set_owner(conn, pid) - - assert :gun.info(conn).owner == pid - end - - defp receive_response(conn, ref, acc \\ "") do - case Gun.await(conn, ref) do - {:data, :nofin, body} -> - receive_response(conn, ref, acc <> body) - - {:data, :fin, body} -> - acc <> body - end - end -end From 884d9710b209cc9981c7de61d4e95fd26cd83820 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 3 Mar 2020 19:24:14 +0300 Subject: [PATCH 077/581] refactoring for gun api modules --- config/test.exs | 2 +- lib/pleroma/gun/api.ex | 46 ++++++++++----- lib/pleroma/gun/conn.ex | 22 +++---- lib/pleroma/gun/gun.ex | 49 +++++---------- lib/pleroma/pool/connections.ex | 10 ++-- test/http/adapter_helper/gun_test.exs | 2 +- test/http/connection_test.exs | 2 +- test/http_test.exs | 4 +- test/pool/connections_test.exs | 7 +-- test/reverse_proxy/client/tesla_test.exs | 4 +- test/reverse_proxy/reverse_proxy_test.exs | 4 +- .../api/mock.ex => test/support/gun_mock.ex | 59 ++++++++++--------- 12 files changed, 104 insertions(+), 107 deletions(-) rename lib/pleroma/gun/api/mock.ex => test/support/gun_mock.ex (79%) diff --git a/config/test.exs b/config/test.exs index 7cc669c19..bce9dd4aa 100644 --- a/config/test.exs +++ b/config/test.exs @@ -90,7 +90,7 @@ config :pleroma, :modules, runtime_dir: "test/fixtures/modules" -config :pleroma, Pleroma.Gun.API, Pleroma.Gun.API.Mock +config :pleroma, Pleroma.Gun, Pleroma.GunMock config :pleroma, Pleroma.Emails.NewUsersDigestEmail, enabled: true diff --git a/lib/pleroma/gun/api.ex b/lib/pleroma/gun/api.ex index f79c9f443..76aac5874 100644 --- a/lib/pleroma/gun/api.ex +++ b/lib/pleroma/gun/api.ex @@ -3,27 +3,43 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Gun.API do - @callback open(charlist(), pos_integer(), map()) :: {:ok, pid()} - @callback info(pid()) :: map() - @callback close(pid()) :: :ok - @callback await_up(pid, pos_integer()) :: {:ok, atom()} | {:error, atom()} - @callback connect(pid(), map()) :: reference() - @callback await(pid(), reference()) :: {:response, :fin, 200, []} - @callback set_owner(pid(), pid()) :: :ok + @behaviour Pleroma.Gun - def open(host, port, opts), do: api().open(host, port, opts) + alias Pleroma.Gun - def info(pid), do: api().info(pid) + @gun_keys [ + :connect_timeout, + :http_opts, + :http2_opts, + :protocols, + :retry, + :retry_timeout, + :trace, + :transport, + :tls_opts, + :tcp_opts, + :socks_opts, + :ws_opts + ] - def close(pid), do: api().close(pid) + @impl Gun + def open(host, port, opts \\ %{}), do: :gun.open(host, port, Map.take(opts, @gun_keys)) - def await_up(pid, timeout \\ 5_000), do: api().await_up(pid, timeout) + @impl Gun + defdelegate info(pid), to: :gun - def connect(pid, opts), do: api().connect(pid, opts) + @impl Gun + defdelegate close(pid), to: :gun - def await(pid, ref), do: api().await(pid, ref) + @impl Gun + defdelegate await_up(pid, timeout \\ 5_000), to: :gun - def set_owner(pid, owner), do: api().set_owner(pid, owner) + @impl Gun + defdelegate connect(pid, opts), to: :gun - defp api, do: Pleroma.Config.get([Pleroma.Gun.API], Pleroma.Gun) + @impl Gun + defdelegate await(pid, ref), to: :gun + + @impl Gun + defdelegate set_owner(pid, owner), to: :gun end diff --git a/lib/pleroma/gun/conn.ex b/lib/pleroma/gun/conn.ex index d73bec360..319718690 100644 --- a/lib/pleroma/gun/conn.ex +++ b/lib/pleroma/gun/conn.ex @@ -6,7 +6,7 @@ defmodule Pleroma.Gun.Conn do @moduledoc """ Struct for gun connection data """ - alias Pleroma.Gun.API + alias Pleroma.Gun alias Pleroma.Pool.Connections require Logger @@ -65,7 +65,7 @@ def open(%URI{} = uri, name, opts) do last_reference: :os.system_time(:second) } - :ok = API.set_owner(conn_pid, Process.whereis(name)) + :ok = Gun.set_owner(conn_pid, Process.whereis(name)) Connections.add_conn(name, key, conn) end end @@ -77,10 +77,10 @@ defp do_open(uri, %{proxy: {proxy_host, proxy_port}} = opts) do |> add_http2_opts(uri.scheme, Map.get(opts, :tls_opts, [])) with open_opts <- Map.delete(opts, :tls_opts), - {:ok, conn} <- API.open(proxy_host, proxy_port, open_opts), - {:ok, _} <- API.await_up(conn, opts[:await_up_timeout]), - stream <- API.connect(conn, connect_opts), - {:response, :fin, 200, _} <- API.await(conn, stream) do + {:ok, conn} <- Gun.open(proxy_host, proxy_port, open_opts), + {:ok, _} <- Gun.await_up(conn, opts[:await_up_timeout]), + stream <- Gun.connect(conn, connect_opts), + {:response, :fin, 200, _} <- Gun.await(conn, stream) do conn else error -> @@ -115,8 +115,8 @@ defp do_open(uri, %{proxy: {proxy_type, proxy_host, proxy_port}} = opts) do |> Map.put(:protocols, [:socks]) |> Map.put(:socks_opts, socks_opts) - with {:ok, conn} <- API.open(proxy_host, proxy_port, opts), - {:ok, _} <- API.await_up(conn, opts[:await_up_timeout]) do + with {:ok, conn} <- Gun.open(proxy_host, proxy_port, opts), + {:ok, _} <- Gun.await_up(conn, opts[:await_up_timeout]) do conn else error -> @@ -133,8 +133,8 @@ defp do_open(uri, %{proxy: {proxy_type, proxy_host, proxy_port}} = opts) do defp do_open(%URI{host: host, port: port} = uri, opts) do host = Pleroma.HTTP.Connection.parse_host(host) - with {:ok, conn} <- API.open(host, port, opts), - {:ok, _} <- API.await_up(conn, opts[:await_up_timeout]) do + with {:ok, conn} <- Gun.open(host, port, opts), + {:ok, _} <- Gun.await_up(conn, opts[:await_up_timeout]) do conn else error -> @@ -164,7 +164,7 @@ defp close_least_used_and_do_open(name, uri, opts) do with [{close_key, least_used} | _conns] <- Connections.get_unused_conns(name), - :ok <- Pleroma.Gun.API.close(least_used.conn) do + :ok <- Gun.close(least_used.conn) do Connections.remove_conn(name, close_key) do_open(uri, opts) diff --git a/lib/pleroma/gun/gun.ex b/lib/pleroma/gun/gun.ex index da82983b1..35390bb11 100644 --- a/lib/pleroma/gun/gun.ex +++ b/lib/pleroma/gun/gun.ex @@ -3,46 +3,27 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Gun do - @behaviour Pleroma.Gun.API + @callback open(charlist(), pos_integer(), map()) :: {:ok, pid()} + @callback info(pid()) :: map() + @callback close(pid()) :: :ok + @callback await_up(pid, pos_integer()) :: {:ok, atom()} | {:error, atom()} + @callback connect(pid(), map()) :: reference() + @callback await(pid(), reference()) :: {:response, :fin, 200, []} + @callback set_owner(pid(), pid()) :: :ok - alias Pleroma.Gun.API + def open(host, port, opts), do: api().open(host, port, opts) - @gun_keys [ - :connect_timeout, - :http_opts, - :http2_opts, - :protocols, - :retry, - :retry_timeout, - :trace, - :transport, - :tls_opts, - :tcp_opts, - :socks_opts, - :ws_opts - ] + def info(pid), do: api().info(pid) - @impl API - def open(host, port, opts \\ %{}), do: :gun.open(host, port, Map.take(opts, @gun_keys)) + def close(pid), do: api().close(pid) - @impl API - defdelegate info(pid), to: :gun + def await_up(pid, timeout \\ 5_000), do: api().await_up(pid, timeout) - @impl API - defdelegate close(pid), to: :gun + def connect(pid, opts), do: api().connect(pid, opts) - @impl API - defdelegate await_up(pid, timeout \\ 5_000), to: :gun + def await(pid, ref), do: api().await(pid, ref) - @impl API - defdelegate connect(pid, opts), to: :gun + def set_owner(pid, owner), do: api().set_owner(pid, owner) - @impl API - defdelegate await(pid, ref), to: :gun - - @spec flush(pid() | reference()) :: :ok - defdelegate flush(pid), to: :gun - - @impl API - defdelegate set_owner(pid, owner), to: :gun + defp api, do: Pleroma.Config.get([Pleroma.Gun], Pleroma.Gun.API) end diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index 0f7a1bfd8..92179fbfc 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -19,7 +19,7 @@ defmodule Pleroma.Pool.Connections do defstruct conns: %{}, opts: [] - alias Pleroma.Gun.API + alias Pleroma.Gun @spec start_link({atom(), keyword()}) :: {:ok, pid()} def start_link({name, opts}) do @@ -209,7 +209,7 @@ def handle_info({:gun_up, conn_pid, _protocol}, state) do nil -> Logger.debug(":gun_up message for conn which is not found in state") - :ok = API.close(conn_pid) + :ok = Gun.close(conn_pid) state end @@ -226,7 +226,7 @@ def handle_info({:gun_down, conn_pid, _protocol, _reason, _killed}, state) do {true, key} <- {Process.alive?(conn_pid), key} do if conn.retries == retries do Logger.debug("closing conn if retries is eq #{inspect(conn_pid)}") - :ok = API.close(conn.conn) + :ok = Gun.close(conn.conn) put_in( state.conns, @@ -252,7 +252,7 @@ def handle_info({:gun_down, conn_pid, _protocol, _reason, _killed}, state) do nil -> Logger.debug(":gun_down message for conn which is not found in state") - :ok = API.close(conn_pid) + :ok = Gun.close(conn_pid) state end @@ -287,7 +287,7 @@ def handle_info({:DOWN, _ref, :process, conn_pid, reason}, state) do defp compose_key_gun_info(pid) do try do # sometimes :gun.info can raise MatchError, which lead to pool terminate - %{origin_host: origin_host, origin_scheme: scheme, origin_port: port} = API.info(pid) + %{origin_host: origin_host, origin_scheme: scheme, origin_port: port} = Gun.info(pid) host = case :inet.ntoa(origin_host) do diff --git a/test/http/adapter_helper/gun_test.exs b/test/http/adapter_helper/gun_test.exs index bc7e3f0e0..66ca416d9 100644 --- a/test/http/adapter_helper/gun_test.exs +++ b/test/http/adapter_helper/gun_test.exs @@ -12,7 +12,7 @@ defmodule Pleroma.HTTP.AdapterHelper.GunTest do alias Pleroma.Pool.Connections setup_all do - {:ok, _} = Registry.start_link(keys: :unique, name: Pleroma.Gun.API.Mock) + {:ok, _} = Registry.start_link(keys: :unique, name: Pleroma.GunMock) :ok end diff --git a/test/http/connection_test.exs b/test/http/connection_test.exs index 37de11e7a..3f32898cb 100644 --- a/test/http/connection_test.exs +++ b/test/http/connection_test.exs @@ -10,7 +10,7 @@ defmodule Pleroma.HTTP.ConnectionTest do alias Pleroma.HTTP.Connection setup_all do - {:ok, _} = Registry.start_link(keys: :unique, name: Pleroma.Gun.API.Mock) + {:ok, _} = Registry.start_link(keys: :unique, name: Pleroma.GunMock) :ok end diff --git a/test/http_test.exs b/test/http_test.exs index 83c27f6e1..d45d34f32 100644 --- a/test/http_test.exs +++ b/test/http_test.exs @@ -61,8 +61,8 @@ test "returns successfully result" do describe "connection pools" do @describetag :integration - clear_config(Pleroma.Gun.API) do - Pleroma.Config.put(Pleroma.Gun.API, Pleroma.Gun) + clear_config(Pleroma.Gun) do + Pleroma.Config.put(Pleroma.Gun, Pleroma.Gun.API) end test "gun" do diff --git a/test/pool/connections_test.exs b/test/pool/connections_test.exs index a084f31b9..31dd5f6fa 100644 --- a/test/pool/connections_test.exs +++ b/test/pool/connections_test.exs @@ -6,12 +6,11 @@ defmodule Pleroma.Pool.ConnectionsTest do use ExUnit.Case use Pleroma.Tests.Helpers import ExUnit.CaptureLog - alias Pleroma.Gun.API alias Pleroma.Gun.Conn alias Pleroma.Pool.Connections setup_all do - {:ok, _} = Registry.start_link(keys: :unique, name: API.Mock) + {:ok, _} = Registry.start_link(keys: :unique, name: Pleroma.GunMock) :ok end @@ -439,8 +438,8 @@ test "remove frequently used and idle", %{name: name} do describe "integration test" do @describetag :integration - clear_config(API) do - Pleroma.Config.put(API, Pleroma.Gun) + clear_config(Pleroma.Gun) do + Pleroma.Config.put(Pleroma.Gun, Pleroma.Gun.API) end test "opens connection and change owner", %{name: name} do diff --git a/test/reverse_proxy/client/tesla_test.exs b/test/reverse_proxy/client/tesla_test.exs index 231271b0d..78bd31530 100644 --- a/test/reverse_proxy/client/tesla_test.exs +++ b/test/reverse_proxy/client/tesla_test.exs @@ -8,8 +8,8 @@ defmodule Pleroma.ReverseProxy.Client.TeslaTest do alias Pleroma.ReverseProxy.Client @moduletag :integration - clear_config_all(Pleroma.Gun.API) do - Pleroma.Config.put(Pleroma.Gun.API, Pleroma.Gun) + clear_config_all(Pleroma.Gun) do + Pleroma.Config.put(Pleroma.Gun, Pleroma.Gun.API) end setup do diff --git a/test/reverse_proxy/reverse_proxy_test.exs b/test/reverse_proxy/reverse_proxy_test.exs index f61fc02c5..8e72698ee 100644 --- a/test/reverse_proxy/reverse_proxy_test.exs +++ b/test/reverse_proxy/reverse_proxy_test.exs @@ -349,8 +349,8 @@ test "with content-disposition header", %{conn: conn} do Pleroma.Config.put(Pleroma.ReverseProxy.Client, Pleroma.ReverseProxy.Client.Tesla) end - clear_config(Pleroma.Gun.API) do - Pleroma.Config.put(Pleroma.Gun.API, Pleroma.Gun) + clear_config(Pleroma.Gun) do + Pleroma.Config.put(Pleroma.Gun, Pleroma.Gun.API) end setup do diff --git a/lib/pleroma/gun/api/mock.ex b/test/support/gun_mock.ex similarity index 79% rename from lib/pleroma/gun/api/mock.ex rename to test/support/gun_mock.ex index 6d24b0e69..e13afd08c 100644 --- a/lib/pleroma/gun/api/mock.ex +++ b/test/support/gun_mock.ex @@ -2,16 +2,17 @@ # Copyright © 2017-2019 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.Gun.API.Mock do - @behaviour Pleroma.Gun.API +defmodule Pleroma.GunMock do + @behaviour Pleroma.Gun - alias Pleroma.Gun.API + alias Pleroma.Gun + alias Pleroma.GunMock - @impl API + @impl Gun def open('some-domain.com', 443, _) do {:ok, conn_pid} = Task.start_link(fn -> Process.sleep(1_000) end) - Registry.register(API.Mock, conn_pid, %{ + Registry.register(GunMock, conn_pid, %{ origin_scheme: "https", origin_host: 'some-domain.com', origin_port: 443 @@ -20,7 +21,7 @@ def open('some-domain.com', 443, _) do {:ok, conn_pid} end - @impl API + @impl Gun def open(ip, port, _) when ip in [{10_755, 10_368, 61_708, 131, 64_206, 45_068, 0, 9_694}, {127, 0, 0, 1}] and port in [80, 443] do @@ -28,7 +29,7 @@ def open(ip, port, _) scheme = if port == 443, do: "https", else: "http" - Registry.register(API.Mock, conn_pid, %{ + Registry.register(GunMock, conn_pid, %{ origin_scheme: scheme, origin_host: ip, origin_port: port @@ -37,7 +38,7 @@ def open(ip, port, _) {:ok, conn_pid} end - @impl API + @impl Gun def open('localhost', 1234, %{ protocols: [:socks], proxy: {:socks5, 'localhost', 1234}, @@ -45,7 +46,7 @@ def open('localhost', 1234, %{ }) do {:ok, conn_pid} = Task.start_link(fn -> Process.sleep(1_000) end) - Registry.register(API.Mock, conn_pid, %{ + Registry.register(GunMock, conn_pid, %{ origin_scheme: "http", origin_host: 'proxy-socks.com', origin_port: 80 @@ -54,7 +55,7 @@ def open('localhost', 1234, %{ {:ok, conn_pid} end - @impl API + @impl Gun def open('localhost', 1234, %{ protocols: [:socks], proxy: {:socks4, 'localhost', 1234}, @@ -69,7 +70,7 @@ def open('localhost', 1234, %{ }) do {:ok, conn_pid} = Task.start_link(fn -> Process.sleep(1_000) end) - Registry.register(API.Mock, conn_pid, %{ + Registry.register(GunMock, conn_pid, %{ origin_scheme: "https", origin_host: 'proxy-socks.com', origin_port: 443 @@ -78,14 +79,14 @@ def open('localhost', 1234, %{ {:ok, conn_pid} end - @impl API + @impl Gun def open('gun-not-up.com', 80, _opts), do: {:error, :timeout} - @impl API + @impl Gun def open('example.com', port, _) when port in [443, 115] do {:ok, conn_pid} = Task.start_link(fn -> Process.sleep(1_000) end) - Registry.register(API.Mock, conn_pid, %{ + Registry.register(GunMock, conn_pid, %{ origin_scheme: "https", origin_host: 'example.com', origin_port: 443 @@ -94,11 +95,11 @@ def open('example.com', port, _) when port in [443, 115] do {:ok, conn_pid} end - @impl API + @impl Gun def open(domain, 80, _) do {:ok, conn_pid} = Task.start_link(fn -> Process.sleep(1_000) end) - Registry.register(API.Mock, conn_pid, %{ + Registry.register(GunMock, conn_pid, %{ origin_scheme: "http", origin_host: domain, origin_port: 80 @@ -107,48 +108,48 @@ def open(domain, 80, _) do {:ok, conn_pid} end - @impl API + @impl Gun def open({127, 0, 0, 1}, 8123, _) do Task.start_link(fn -> Process.sleep(1_000) end) end - @impl API + @impl Gun def open('localhost', 9050, _) do Task.start_link(fn -> Process.sleep(1_000) end) end - @impl API + @impl Gun def await_up(_pid, _timeout), do: {:ok, :http} - @impl API + @impl Gun def set_owner(_pid, _owner), do: :ok - @impl API + @impl Gun def connect(pid, %{host: _, port: 80}) do ref = make_ref() - Registry.register(API.Mock, ref, pid) + Registry.register(GunMock, ref, pid) ref end - @impl API + @impl Gun def connect(pid, %{host: _, port: 443, protocols: [:http2], transport: :tls}) do ref = make_ref() - Registry.register(API.Mock, ref, pid) + Registry.register(GunMock, ref, pid) ref end - @impl API + @impl Gun def await(pid, ref) do - [{_, ^pid}] = Registry.lookup(API.Mock, ref) + [{_, ^pid}] = Registry.lookup(GunMock, ref) {:response, :fin, 200, []} end - @impl API + @impl Gun def info(pid) do - [{_, info}] = Registry.lookup(API.Mock, pid) + [{_, info}] = Registry.lookup(GunMock, pid) info end - @impl API + @impl Gun def close(_pid), do: :ok end From d9c5ae7c09c7cbf3f4f66e01b7ed69a3d6388916 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 3 Mar 2020 17:16:24 -0600 Subject: [PATCH 078/581] Update Copyrights for gun related files --- lib/pleroma/gun/api.ex | 2 +- lib/pleroma/gun/gun.ex | 2 +- lib/pleroma/http/request.ex | 2 +- lib/pleroma/pool/connections.ex | 2 +- lib/pleroma/pool/pool.ex | 2 +- lib/pleroma/pool/request.ex | 2 +- lib/pleroma/pool/supervisor.ex | 2 +- lib/pleroma/reverse_proxy/client/hackney.ex | 2 +- lib/pleroma/reverse_proxy/client/tesla.ex | 2 +- test/http/adapter_helper/hackney_test.exs | 2 +- test/http/connection_test.exs | 2 +- test/pool/connections_test.exs | 2 +- test/reverse_proxy/client/tesla_test.exs | 2 +- test/support/gun_mock.ex | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/pleroma/gun/api.ex b/lib/pleroma/gun/api.ex index 76aac5874..f51cd7db8 100644 --- a/lib/pleroma/gun/api.ex +++ b/lib/pleroma/gun/api.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Gun.API do diff --git a/lib/pleroma/gun/gun.ex b/lib/pleroma/gun/gun.ex index 35390bb11..81855e89e 100644 --- a/lib/pleroma/gun/gun.ex +++ b/lib/pleroma/gun/gun.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Gun do diff --git a/lib/pleroma/http/request.ex b/lib/pleroma/http/request.ex index 891d88d53..761bd6ccf 100644 --- a/lib/pleroma/http/request.ex +++ b/lib/pleroma/http/request.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.Request do diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index 92179fbfc..f1fab2a24 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Pool.Connections do diff --git a/lib/pleroma/pool/pool.ex b/lib/pleroma/pool/pool.ex index a7ae64ce4..21a6fbbc5 100644 --- a/lib/pleroma/pool/pool.ex +++ b/lib/pleroma/pool/pool.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Pool do diff --git a/lib/pleroma/pool/request.ex b/lib/pleroma/pool/request.ex index 2c3574561..cce309599 100644 --- a/lib/pleroma/pool/request.ex +++ b/lib/pleroma/pool/request.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Pool.Request do diff --git a/lib/pleroma/pool/supervisor.ex b/lib/pleroma/pool/supervisor.ex index 32be2264d..f436849ac 100644 --- a/lib/pleroma/pool/supervisor.ex +++ b/lib/pleroma/pool/supervisor.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Pool.Supervisor do diff --git a/lib/pleroma/reverse_proxy/client/hackney.ex b/lib/pleroma/reverse_proxy/client/hackney.ex index e41560ab0..e84118a90 100644 --- a/lib/pleroma/reverse_proxy/client/hackney.ex +++ b/lib/pleroma/reverse_proxy/client/hackney.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ReverseProxy.Client.Hackney do diff --git a/lib/pleroma/reverse_proxy/client/tesla.ex b/lib/pleroma/reverse_proxy/client/tesla.ex index 80a0c8972..dbc6b66a3 100644 --- a/lib/pleroma/reverse_proxy/client/tesla.ex +++ b/lib/pleroma/reverse_proxy/client/tesla.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ReverseProxy.Client.Tesla do diff --git a/test/http/adapter_helper/hackney_test.exs b/test/http/adapter_helper/hackney_test.exs index 82f5a7883..3306616ef 100644 --- a/test/http/adapter_helper/hackney_test.exs +++ b/test/http/adapter_helper/hackney_test.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.AdapterHelper.HackneyTest do diff --git a/test/http/connection_test.exs b/test/http/connection_test.exs index 3f32898cb..5c1ecda0b 100644 --- a/test/http/connection_test.exs +++ b/test/http/connection_test.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.ConnectionTest do diff --git a/test/pool/connections_test.exs b/test/pool/connections_test.exs index 31dd5f6fa..963fae665 100644 --- a/test/pool/connections_test.exs +++ b/test/pool/connections_test.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Pool.ConnectionsTest do diff --git a/test/reverse_proxy/client/tesla_test.exs b/test/reverse_proxy/client/tesla_test.exs index 78bd31530..c8b0d5842 100644 --- a/test/reverse_proxy/client/tesla_test.exs +++ b/test/reverse_proxy/client/tesla_test.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ReverseProxy.Client.TeslaTest do diff --git a/test/support/gun_mock.ex b/test/support/gun_mock.ex index e13afd08c..9d664e366 100644 --- a/test/support/gun_mock.ex +++ b/test/support/gun_mock.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.GunMock do From 8d9dee1ba951e81aaa08b4db64b431a7456dae56 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 4 Mar 2020 08:56:36 +0300 Subject: [PATCH 079/581] retry_timeout description change --- docs/configuration/cheatsheet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index a39a7436d..85cc6170a 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -407,7 +407,7 @@ It will increase memory usage, but federation would work faster. * `:checkin_timeout` - timeout to checkin connection from pool. Default: 250ms. * `:max_connections` - maximum number of connections in the pool. Default: 250 connections. * `:retry` - number of retries, while `gun` will try to reconnect if connections goes down. Default: 1. -* `:retry_timeout` - timeout while `gun` will try to reconnect. Default: 1000ms. +* `:retry_timeout` - time between retries when gun will try to reconnect in milliseconds. Default: 1000ms. * `:await_up_timeout` - timeout while `gun` will wait until connection is up. Default: 5000ms. ### :pools From 6b2fb9160cd945cdd4b1265c793d1f85d559fccb Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 4 Mar 2020 09:23:42 +0300 Subject: [PATCH 080/581] otp version --- lib/pleroma/application.ex | 20 ++++++++++++- lib/pleroma/otp_version.ex | 61 +++++--------------------------------- test/otp_version_test.exs | 18 ++++++----- 3 files changed, 38 insertions(+), 61 deletions(-) diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index d0b9c3c41..c8a0617a5 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -43,7 +43,25 @@ def start(_type, _args) do load_custom_modules() if adapter() == Tesla.Adapter.Gun do - Pleroma.OTPVersion.check!() + if version = Pleroma.OTPVersion.version() do + [major, minor] = + version + |> String.split(".") + |> Enum.map(&String.to_integer/1) + |> Enum.take(2) + + if (major == 22 and minor < 2) or major < 22 do + raise " + !!!OTP VERSION WARNING!!! + You are using gun adapter with OTP version #{version}, which doesn't support correct handling of unordered certificates chains. + " + end + else + raise " + !!!OTP VERSION WARNING!!! + To support correct handling of unordered certificates chains - OTP version must be > 22.2. + " + end end # Define workers and child supervisors to be supervised diff --git a/lib/pleroma/otp_version.ex b/lib/pleroma/otp_version.ex index 9ced2d27d..114d0054f 100644 --- a/lib/pleroma/otp_version.ex +++ b/lib/pleroma/otp_version.ex @@ -3,71 +3,26 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.OTPVersion do - @type check_status() :: :ok | :undefined | {:error, String.t()} - - @spec check!() :: :ok | no_return() - def check! do - case check() do - :ok -> - :ok - - {:error, version} -> - raise " - !!!OTP VERSION WARNING!!! - You are using gun adapter with OTP version #{version}, which doesn't support correct handling of unordered certificates chains. - " - - :undefined -> - raise " - !!!OTP VERSION WARNING!!! - To support correct handling of unordered certificates chains - OTP version must be > 22.2. - " - end - end - - @spec check() :: check_status() - def check do + @spec version() :: String.t() | nil + def version do # OTP Version https://erlang.org/doc/system_principles/versions.html#otp-version [ Path.join(:code.root_dir(), "OTP_VERSION"), Path.join([:code.root_dir(), "releases", :erlang.system_info(:otp_release), "OTP_VERSION"]) ] |> get_version_from_files() - |> do_check() end - @spec check([Path.t()]) :: check_status() - def check(paths) do - paths - |> get_version_from_files() - |> do_check() - end + @spec get_version_from_files([Path.t()]) :: String.t() | nil + def get_version_from_files([]), do: nil - defp get_version_from_files([]), do: nil - - defp get_version_from_files([path | paths]) do + def get_version_from_files([path | paths]) do if File.exists?(path) do - File.read!(path) + path + |> File.read!() + |> String.replace(~r/\r|\n|\s/, "") else get_version_from_files(paths) end end - - defp do_check(nil), do: :undefined - - defp do_check(version) do - version = String.replace(version, ~r/\r|\n|\s/, "") - - [major, minor] = - version - |> String.split(".") - |> Enum.map(&String.to_integer/1) - |> Enum.take(2) - - if (major == 22 and minor >= 2) or major > 22 do - :ok - else - {:error, version} - end - end end diff --git a/test/otp_version_test.exs b/test/otp_version_test.exs index af278cc72..7d2538ec8 100644 --- a/test/otp_version_test.exs +++ b/test/otp_version_test.exs @@ -9,30 +9,34 @@ defmodule Pleroma.OTPVersionTest do describe "check/1" do test "22.4" do - assert OTPVersion.check(["test/fixtures/warnings/otp_version/22.4"]) == :ok + assert OTPVersion.get_version_from_files(["test/fixtures/warnings/otp_version/22.4"]) == + "22.4" end test "22.1" do - assert OTPVersion.check(["test/fixtures/warnings/otp_version/22.1"]) == {:error, "22.1"} + assert OTPVersion.get_version_from_files(["test/fixtures/warnings/otp_version/22.1"]) == + "22.1" end test "21.1" do - assert OTPVersion.check(["test/fixtures/warnings/otp_version/21.1"]) == {:error, "21.1"} + assert OTPVersion.get_version_from_files(["test/fixtures/warnings/otp_version/21.1"]) == + "21.1" end test "23.0" do - assert OTPVersion.check(["test/fixtures/warnings/otp_version/23.0"]) == :ok + assert OTPVersion.get_version_from_files(["test/fixtures/warnings/otp_version/23.0"]) == + "23.0" end test "with non existance file" do - assert OTPVersion.check([ + assert OTPVersion.get_version_from_files([ "test/fixtures/warnings/otp_version/non-exising", "test/fixtures/warnings/otp_version/22.4" - ]) == :ok + ]) == "22.4" end test "empty paths" do - assert OTPVersion.check([]) == :undefined + assert OTPVersion.get_version_from_files([]) == nil end end end From 22d52f5691d985e7daaa955e97e0722f038f6fae Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 4 Mar 2020 09:41:23 +0300 Subject: [PATCH 081/581] same copyright date format --- lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex | 2 +- lib/pleroma/web/activity_pub/mrf/no_placeholder_text_policy.ex | 2 +- priv/repo/migrations/20190408123347_create_conversations.exs | 2 +- test/web/activity_pub/mrf/anti_followbot_policy_test.exs | 2 +- test/web/activity_pub/mrf/anti_link_spam_policy_test.exs | 2 +- test/web/activity_pub/mrf/ensure_re_prepended_test.exs | 2 +- test/web/activity_pub/mrf/no_placeholder_text_policy_test.exs | 2 +- test/web/activity_pub/mrf/normalize_markup_test.exs | 2 +- test/web/activity_pub/mrf/object_age_policy_test.exs | 2 +- test/web/activity_pub/mrf/reject_non_public_test.exs | 2 +- test/web/activity_pub/mrf/simple_policy_test.exs | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex b/lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex index b3547ecd4..0270b96ae 100644 --- a/lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.AntiFollowbotPolicy do diff --git a/lib/pleroma/web/activity_pub/mrf/no_placeholder_text_policy.ex b/lib/pleroma/web/activity_pub/mrf/no_placeholder_text_policy.ex index f67f48ab6..fc3475048 100644 --- a/lib/pleroma/web/activity_pub/mrf/no_placeholder_text_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/no_placeholder_text_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.NoPlaceholderTextPolicy do diff --git a/priv/repo/migrations/20190408123347_create_conversations.exs b/priv/repo/migrations/20190408123347_create_conversations.exs index d75459e82..3eaa6136c 100644 --- a/priv/repo/migrations/20190408123347_create_conversations.exs +++ b/priv/repo/migrations/20190408123347_create_conversations.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Repo.Migrations.CreateConversations do diff --git a/test/web/activity_pub/mrf/anti_followbot_policy_test.exs b/test/web/activity_pub/mrf/anti_followbot_policy_test.exs index 37a7bfcf7..fca0de7c6 100644 --- a/test/web/activity_pub/mrf/anti_followbot_policy_test.exs +++ b/test/web/activity_pub/mrf/anti_followbot_policy_test.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.AntiFollowbotPolicyTest do diff --git a/test/web/activity_pub/mrf/anti_link_spam_policy_test.exs b/test/web/activity_pub/mrf/anti_link_spam_policy_test.exs index b524fdd23..fc0be6f91 100644 --- a/test/web/activity_pub/mrf/anti_link_spam_policy_test.exs +++ b/test/web/activity_pub/mrf/anti_link_spam_policy_test.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.AntiLinkSpamPolicyTest do diff --git a/test/web/activity_pub/mrf/ensure_re_prepended_test.exs b/test/web/activity_pub/mrf/ensure_re_prepended_test.exs index dbc8b9e80..38ddec5bb 100644 --- a/test/web/activity_pub/mrf/ensure_re_prepended_test.exs +++ b/test/web/activity_pub/mrf/ensure_re_prepended_test.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.EnsureRePrependedTest do diff --git a/test/web/activity_pub/mrf/no_placeholder_text_policy_test.exs b/test/web/activity_pub/mrf/no_placeholder_text_policy_test.exs index 63ed71129..64ea61dd4 100644 --- a/test/web/activity_pub/mrf/no_placeholder_text_policy_test.exs +++ b/test/web/activity_pub/mrf/no_placeholder_text_policy_test.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.NoPlaceholderTextPolicyTest do diff --git a/test/web/activity_pub/mrf/normalize_markup_test.exs b/test/web/activity_pub/mrf/normalize_markup_test.exs index 0207be56b..9b39c45bd 100644 --- a/test/web/activity_pub/mrf/normalize_markup_test.exs +++ b/test/web/activity_pub/mrf/normalize_markup_test.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.NormalizeMarkupTest do diff --git a/test/web/activity_pub/mrf/object_age_policy_test.exs b/test/web/activity_pub/mrf/object_age_policy_test.exs index 643609da4..e521fae44 100644 --- a/test/web/activity_pub/mrf/object_age_policy_test.exs +++ b/test/web/activity_pub/mrf/object_age_policy_test.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicyTest do diff --git a/test/web/activity_pub/mrf/reject_non_public_test.exs b/test/web/activity_pub/mrf/reject_non_public_test.exs index fc1d190bb..5cc68bca8 100644 --- a/test/web/activity_pub/mrf/reject_non_public_test.exs +++ b/test/web/activity_pub/mrf/reject_non_public_test.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.RejectNonPublicTest do diff --git a/test/web/activity_pub/mrf/simple_policy_test.exs b/test/web/activity_pub/mrf/simple_policy_test.exs index df0f223f8..e825a1514 100644 --- a/test/web/activity_pub/mrf/simple_policy_test.exs +++ b/test/web/activity_pub/mrf/simple_policy_test.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do From d6bebd4f9c8086dd87c75f3637a5d392a05f2daf Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 4 Mar 2020 18:13:24 +0300 Subject: [PATCH 082/581] moving some logic to tesla adapter - checking original inside gun adapter - flushing streams on max_body error --- lib/pleroma/http/adapter_helper/gun.ex | 17 ++--------------- lib/pleroma/pool/request.ex | 10 ++-------- mix.exs | 2 +- mix.lock | 3 +-- test/http/adapter_helper/gun_test.exs | 7 ------- test/http/connection_test.exs | 1 - 6 files changed, 6 insertions(+), 34 deletions(-) diff --git a/lib/pleroma/http/adapter_helper/gun.ex b/lib/pleroma/http/adapter_helper/gun.ex index b3298ec7f..5d5870d90 100644 --- a/lib/pleroma/http/adapter_helper/gun.ex +++ b/lib/pleroma/http/adapter_helper/gun.ex @@ -26,7 +26,6 @@ def options(connection_opts \\ [], %URI{} = uri) do @defaults |> Keyword.merge(Pleroma.Config.get([:http, :adapter], [])) - |> add_original(uri) |> add_scheme_opts(uri) |> AdapterHelper.maybe_add_proxy(AdapterHelper.format_proxy(proxy)) |> maybe_get_conn(uri, connection_opts) @@ -42,17 +41,12 @@ def after_request(opts) do :ok end - defp add_original(opts, %URI{host: host, port: port}) do - formatted_host = format_host(host) - - Keyword.put(opts, :original, "#{formatted_host}:#{port}") - end - defp add_scheme_opts(opts, %URI{scheme: "http"}), do: opts - defp add_scheme_opts(opts, %URI{scheme: "https", host: host, port: port}) do + defp add_scheme_opts(opts, %URI{scheme: "https", host: host}) do adapter_opts = [ certificates_verification: true, + transport: :tls, tls_opts: [ verify: :verify_peer, cacertfile: CAStore.file_path(), @@ -63,13 +57,6 @@ defp add_scheme_opts(opts, %URI{scheme: "https", host: host, port: port}) do ] ] - adapter_opts = - if port != 443 do - Keyword.put(adapter_opts, :transport, :tls) - else - adapter_opts - end - Keyword.merge(opts, adapter_opts) end diff --git a/lib/pleroma/pool/request.ex b/lib/pleroma/pool/request.ex index cce309599..0f271b3d0 100644 --- a/lib/pleroma/pool/request.ex +++ b/lib/pleroma/pool/request.ex @@ -28,12 +28,7 @@ def handle_call({:execute, client, request}, _from, state) do end @impl true - def handle_info({:gun_data, _conn, stream, _, _}, state) do - # in some cases if we reuse conn and got {:error, :body_too_large} - # gun continues to send messages to this process, - # so we flush messages for this request - :ok = :gun.flush(stream) - + def handle_info({:gun_data, _conn, _stream, _, _}, state) do {:noreply, state} end @@ -49,8 +44,7 @@ def handle_info({:gun_down, _conn, _protocol, _reason, _killed}, state) do end @impl true - def handle_info({:gun_error, _conn, stream, _error}, state) do - :ok = :gun.flush(stream) + def handle_info({:gun_error, _conn, _stream, _error}, state) do {:noreply, state} end diff --git a/mix.exs b/mix.exs index 5c1d89208..43e7e6f63 100644 --- a/mix.exs +++ b/mix.exs @@ -122,7 +122,7 @@ defp deps do # {:tesla, "~> 1.3", override: true}, {:tesla, git: "https://git.pleroma.social/pleroma/elixir-libraries/tesla.git", - ref: "922cc3db13b421763edbea76246b8ea61c38c6fa", + ref: "67436cf003d40370e944462649193706bb22ca35", override: true}, {:castore, "~> 0.1"}, {:cowlib, "~> 2.8", override: true}, diff --git a/mix.lock b/mix.lock index 255b4888b..b5daf50dc 100644 --- a/mix.lock +++ b/mix.lock @@ -102,7 +102,7 @@ "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.0.6", "995970c9aa7feb380ac493302138e308d6e04fd57da95b439a6df5bb3bf75076", [:rebar3], [], "hexpm", "769ddfabd0d2a16f3f9c17eb7509951e0ca4f68363fb26f2ee51a8ec4a49881a"}, "telemetry": {:hex, :telemetry, "0.4.1", "ae2718484892448a24470e6aa341bc847c3277bfb8d4e9289f7474d752c09c7f", [:rebar3], [], "hexpm", "4738382e36a0a9a2b6e25d67c960e40e1a2c95560b9f936d8e29de8cd858480f"}, - "tesla": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/tesla.git", "922cc3db13b421763edbea76246b8ea61c38c6fa", [ref: "922cc3db13b421763edbea76246b8ea61c38c6fa"]}, + "tesla": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/tesla.git", "67436cf003d40370e944462649193706bb22ca35", [ref: "67436cf003d40370e944462649193706bb22ca35"]}, "timex": {:hex, :timex, "3.6.1", "efdf56d0e67a6b956cc57774353b0329c8ab7726766a11547e529357ffdc1d56", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5 or ~> 1.0.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "f354efb2400dd7a80fd9eb6c8419068c4f632da4ac47f3d8822d6e33f08bc852"}, "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"}, @@ -112,4 +112,3 @@ "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", []}, } - diff --git a/test/http/adapter_helper/gun_test.exs b/test/http/adapter_helper/gun_test.exs index 66ca416d9..c1bf909a6 100644 --- a/test/http/adapter_helper/gun_test.exs +++ b/test/http/adapter_helper/gun_test.exs @@ -35,8 +35,6 @@ test "https url with default port" do {&:ssl_verify_hostname.verify_fun/3, [check_hostname: 'example.com']} assert File.exists?(tls_opts[:cacertfile]) - - assert opts[:original] == "example.com:443" end test "https ipv4 with default port" do @@ -46,8 +44,6 @@ test "https ipv4 with default port" do assert opts[:tls_opts][:verify_fun] == {&:ssl_verify_hostname.verify_fun/3, [check_hostname: '127.0.0.1']} - - assert opts[:original] == "127.0.0.1:443" end test "https ipv6 with default port" do @@ -58,8 +54,6 @@ test "https ipv6 with default port" do assert opts[:tls_opts][:verify_fun] == {&:ssl_verify_hostname.verify_fun/3, [check_hostname: '2a03:2880:f10c:83:face:b00c:0:25de']} - - assert opts[:original] == "2a03:2880:f10c:83:face:b00c:0:25de:443" end test "https url with non standart port" do @@ -129,7 +123,6 @@ test "default ssl adapter opts with connection" do assert tls_opts[:depth] == 20 assert tls_opts[:reuse_sessions] == false - assert opts[:original] == "some-domain.com:443" assert opts[:close_conn] == false assert is_pid(opts[:conn]) end diff --git a/test/http/connection_test.exs b/test/http/connection_test.exs index 5c1ecda0b..d4db3798c 100644 --- a/test/http/connection_test.exs +++ b/test/http/connection_test.exs @@ -134,7 +134,6 @@ test "default ssl adapter opts with connection" do assert tls_opts[:depth] == 20 assert tls_opts[:reuse_sessions] == false - assert opts[:original] == "some-domain.com:443" assert opts[:close_conn] == false assert is_pid(opts[:conn]) end From fe47bcde8c20d7c968a7fb20637b4bccc6389691 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 4 Mar 2020 19:44:03 +0300 Subject: [PATCH 083/581] updating tesla ref --- mix.exs | 2 +- mix.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index 43e7e6f63..3b1bbbaf2 100644 --- a/mix.exs +++ b/mix.exs @@ -122,7 +122,7 @@ defp deps do # {:tesla, "~> 1.3", override: true}, {:tesla, git: "https://git.pleroma.social/pleroma/elixir-libraries/tesla.git", - ref: "67436cf003d40370e944462649193706bb22ca35", + ref: "61b7503cef33f00834f78ddfafe0d5d9dec2270b", override: true}, {:castore, "~> 0.1"}, {:cowlib, "~> 2.8", override: true}, diff --git a/mix.lock b/mix.lock index b5daf50dc..af53e5c0f 100644 --- a/mix.lock +++ b/mix.lock @@ -102,7 +102,7 @@ "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.0.6", "995970c9aa7feb380ac493302138e308d6e04fd57da95b439a6df5bb3bf75076", [:rebar3], [], "hexpm", "769ddfabd0d2a16f3f9c17eb7509951e0ca4f68363fb26f2ee51a8ec4a49881a"}, "telemetry": {:hex, :telemetry, "0.4.1", "ae2718484892448a24470e6aa341bc847c3277bfb8d4e9289f7474d752c09c7f", [:rebar3], [], "hexpm", "4738382e36a0a9a2b6e25d67c960e40e1a2c95560b9f936d8e29de8cd858480f"}, - "tesla": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/tesla.git", "67436cf003d40370e944462649193706bb22ca35", [ref: "67436cf003d40370e944462649193706bb22ca35"]}, + "tesla": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/tesla.git", "61b7503cef33f00834f78ddfafe0d5d9dec2270b", [ref: "61b7503cef33f00834f78ddfafe0d5d9dec2270b"]}, "timex": {:hex, :timex, "3.6.1", "efdf56d0e67a6b956cc57774353b0329c8ab7726766a11547e529357ffdc1d56", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5 or ~> 1.0.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "f354efb2400dd7a80fd9eb6c8419068c4f632da4ac47f3d8822d6e33f08bc852"}, "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"}, From b34bc669b91903a4567f6f527ebe16f9cd7e0ccf Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 4 Mar 2020 20:09:18 +0300 Subject: [PATCH 084/581] adding descriptions --- config/description.exs | 213 +++++++++++++++++++++++++++++++ docs/configuration/cheatsheet.md | 4 +- 2 files changed, 215 insertions(+), 2 deletions(-) diff --git a/config/description.exs b/config/description.exs index 307f8b5bc..531d73145 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2966,5 +2966,218 @@ suggestions: [2] } ] + }, + %{ + group: :pleroma, + key: :connections_pool, + type: :group, + description: "Advanced settings for `gun` connections pool", + children: [ + %{ + key: :checkin_timeout, + type: :integer, + description: "Timeout to checkin connection from pool. Default: 250ms.", + suggestions: [250] + }, + %{ + key: :max_connections, + type: :integer, + description: "Maximum number of connections in the pool. Default: 250 connections.", + suggestions: [250] + }, + %{ + key: :retry, + type: :integer, + description: + "Number of retries, while `gun` will try to reconnect if connection goes down. Default: 1.", + suggestions: [1] + }, + %{ + key: :retry_timeout, + type: :integer, + description: + "Time between retries when `gun` will try to reconnect in milliseconds. Default: 1000ms.", + suggestions: [1000] + }, + %{ + key: :await_up_timeout, + type: :integer, + description: "Timeout while `gun` will wait until connection is up. Default: 5000ms.", + suggestions: [5000] + } + ] + }, + %{ + group: :pleroma, + key: :pools, + type: :group, + description: "Advanced settings for `gun` workers pools", + children: [ + %{ + key: :federation, + type: :keyword, + description: "Settings for federation pool.", + children: [ + %{ + key: :size, + type: :integer, + description: "Number workers in the pool.", + suggestions: [50] + }, + %{ + key: :max_overflow, + type: :integer, + description: "Number of additional workers if pool is under load.", + suggestions: [10] + }, + %{ + key: :timeout, + type: :integer, + description: "Timeout while `gun` will wait for response.", + suggestions: [150_000] + } + ] + }, + %{ + key: :media, + type: :keyword, + description: "Settings for media pool.", + children: [ + %{ + key: :size, + type: :integer, + description: "Number workers in the pool.", + suggestions: [50] + }, + %{ + key: :max_overflow, + type: :integer, + description: "Number of additional workers if pool is under load.", + suggestions: [10] + }, + %{ + key: :timeout, + type: :integer, + description: "Timeout while `gun` will wait for response.", + suggestions: [150_000] + } + ] + }, + %{ + key: :upload, + type: :keyword, + description: "Settings for upload pool.", + children: [ + %{ + key: :size, + type: :integer, + description: "Number workers in the pool.", + suggestions: [25] + }, + %{ + key: :max_overflow, + type: :integer, + description: "Number of additional workers if pool is under load.", + suggestions: [5] + }, + %{ + key: :timeout, + type: :integer, + description: "Timeout while `gun` will wait for response.", + suggestions: [300_000] + } + ] + }, + %{ + key: :default, + type: :keyword, + description: "Settings for default pool.", + children: [ + %{ + key: :size, + type: :integer, + description: "Number workers in the pool.", + suggestions: [10] + }, + %{ + key: :max_overflow, + type: :integer, + description: "Number of additional workers if pool is under load.", + suggestions: [2] + }, + %{ + key: :timeout, + type: :integer, + description: "Timeout while `gun` will wait for response.", + suggestions: [10_000] + } + ] + } + ] + }, + %{ + group: :pleroma, + key: :hackney_pools, + type: :group, + description: "Advanced settings for `hackney` connections pools", + children: [ + %{ + key: :federation, + type: :keyword, + description: "Settings for federation pool.", + children: [ + %{ + key: :max_connections, + type: :integer, + description: "Number workers in the pool.", + suggestions: [50] + }, + %{ + key: :timeout, + type: :integer, + description: "Timeout while `hackney` will wait for response.", + suggestions: [150_000] + } + ] + }, + %{ + key: :media, + type: :keyword, + description: "Settings for media pool.", + children: [ + %{ + key: :max_connections, + type: :integer, + description: "Number workers in the pool.", + suggestions: [50] + }, + %{ + key: :timeout, + type: :integer, + description: "Timeout while `hackney` will wait for response.", + suggestions: [150_000] + } + ] + }, + %{ + key: :upload, + type: :keyword, + description: "Settings for upload pool.", + children: [ + %{ + key: :max_connections, + type: :integer, + description: "Number workers in the pool.", + suggestions: [25] + }, + %{ + key: :timeout, + type: :integer, + description: "Timeout while `hackney` will wait for response.", + suggestions: [300_000] + } + ] + } + ] } ] diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 85cc6170a..833d243e8 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -406,8 +406,8 @@ It will increase memory usage, but federation would work faster. * `:checkin_timeout` - timeout to checkin connection from pool. Default: 250ms. * `:max_connections` - maximum number of connections in the pool. Default: 250 connections. -* `:retry` - number of retries, while `gun` will try to reconnect if connections goes down. Default: 1. -* `:retry_timeout` - time between retries when gun will try to reconnect in milliseconds. Default: 1000ms. +* `:retry` - number of retries, while `gun` will try to reconnect if connection goes down. Default: 1. +* `:retry_timeout` - time between retries when `gun` will try to reconnect in milliseconds. Default: 1000ms. * `:await_up_timeout` - timeout while `gun` will wait until connection is up. Default: 5000ms. ### :pools From eb324467d9c5c761a776ffc98347246c61ad02ae Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 5 Mar 2020 09:51:52 +0300 Subject: [PATCH 085/581] removing try block in getting gun info --- lib/pleroma/pool/connections.ex | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index f1fab2a24..f96c08f21 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -285,20 +285,15 @@ def handle_info({:DOWN, _ref, :process, conn_pid, reason}, state) do end defp compose_key_gun_info(pid) do - try do - # sometimes :gun.info can raise MatchError, which lead to pool terminate - %{origin_host: origin_host, origin_scheme: scheme, origin_port: port} = Gun.info(pid) + %{origin_host: origin_host, origin_scheme: scheme, origin_port: port} = Gun.info(pid) - host = - case :inet.ntoa(origin_host) do - {:error, :einval} -> origin_host - ip -> ip - end + host = + case :inet.ntoa(origin_host) do + {:error, :einval} -> origin_host + ip -> ip + end - "#{scheme}:#{host}:#{port}" - rescue - _ -> :error_gun_info - end + "#{scheme}:#{host}:#{port}" end defp find_conn(conns, conn_pid) do From f0753eed0fdddd30e127213c89a118dd2e087dc9 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 5 Mar 2020 17:31:06 +0300 Subject: [PATCH 086/581] removing try block in tesla request added mocks for tests which fail with Tesla.Mock.Error --- lib/pleroma/http/http.ex | 24 +++-------- lib/pleroma/pool/request.ex | 2 +- lib/pleroma/web/push/impl.ex | 2 +- lib/pleroma/web/web_finger/web_finger.ex | 3 +- test/fixtures/users_mock/localhost.json | 41 +++++++++++++++++++ test/notification_test.exs | 20 +++++++++ .../mrf/anti_link_spam_policy_test.exs | 9 ++++ test/web/activity_pub/relay_test.exs | 5 +++ .../notification_controller_test.exs | 13 ++++++ .../views/notification_view_test.exs | 13 ++++++ .../mastodon_api/views/status_view_test.exs | 17 ++++++++ test/web/streamer/streamer_test.exs | 12 ++++++ 12 files changed, 139 insertions(+), 22 deletions(-) create mode 100644 test/fixtures/users_mock/localhost.json diff --git a/lib/pleroma/http/http.ex b/lib/pleroma/http/http.ex index 7b7c79b64..466a94adc 100644 --- a/lib/pleroma/http/http.ex +++ b/lib/pleroma/http/http.ex @@ -88,15 +88,11 @@ def request(method, url, body, headers, options) when is_binary(url) do end @spec request(Client.t(), keyword(), map()) :: {:ok, Env.t()} | {:error, any()} - def request(%Client{} = client, request, %{env: :test}), do: request_try(client, request) + def request(%Client{} = client, request, %{env: :test}), do: request(client, request) - def request(%Client{} = client, request, %{body_as: :chunks}) do - request_try(client, request) - end + def request(%Client{} = client, request, %{body_as: :chunks}), do: request(client, request) - def request(%Client{} = client, request, %{pool_alive?: false}) do - request_try(client, request) - end + def request(%Client{} = client, request, %{pool_alive?: false}), do: request(client, request) def request(%Client{} = client, request, %{pool: pool, timeout: timeout}) do :poolboy.transaction( @@ -106,18 +102,8 @@ def request(%Client{} = client, request, %{pool: pool, timeout: timeout}) do ) end - @spec request_try(Client.t(), keyword()) :: {:ok, Env.t()} | {:error, any()} - def request_try(client, request) do - try do - Tesla.request(client, request) - rescue - e -> - {:error, e} - catch - :exit, e -> - {:error, e} - end - end + @spec request(Client.t(), keyword()) :: {:ok, Env.t()} | {:error, any()} + def request(client, request), do: Tesla.request(client, request) defp build_request(method, headers, options, url, body, params) do Builder.new() diff --git a/lib/pleroma/pool/request.ex b/lib/pleroma/pool/request.ex index 0f271b3d0..db7c10c01 100644 --- a/lib/pleroma/pool/request.ex +++ b/lib/pleroma/pool/request.ex @@ -22,7 +22,7 @@ def execute(pid, client, request, timeout) do @impl true def handle_call({:execute, client, request}, _from, state) do - response = Pleroma.HTTP.request_try(client, request) + response = Pleroma.HTTP.request(client, request) {:reply, response, state} end diff --git a/lib/pleroma/web/push/impl.ex b/lib/pleroma/web/push/impl.ex index afa510f08..233e55f21 100644 --- a/lib/pleroma/web/push/impl.ex +++ b/lib/pleroma/web/push/impl.ex @@ -32,7 +32,7 @@ def perform( type = Activity.mastodon_notification_type(notif.activity) gcm_api_key = Application.get_env(:web_push_encryption, :gcm_api_key) avatar_url = User.avatar_url(actor) - object = Object.normalize(activity) + object = Object.normalize(activity) || activity user = User.get_cached_by_id(user_id) direct_conversation_id = Activity.direct_conversation_id(activity, user) diff --git a/lib/pleroma/web/web_finger/web_finger.ex b/lib/pleroma/web/web_finger/web_finger.ex index db567a02e..7ffd0e51b 100644 --- a/lib/pleroma/web/web_finger/web_finger.ex +++ b/lib/pleroma/web/web_finger/web_finger.ex @@ -173,7 +173,8 @@ def find_lrdd_template(domain) do get_template_from_xml(body) else _ -> - with {:ok, %{body: body}} <- HTTP.get("https://#{domain}/.well-known/host-meta", []) do + with {:ok, %{body: body, status: status}} when status in 200..299 <- + HTTP.get("https://#{domain}/.well-known/host-meta", []) do get_template_from_xml(body) else e -> {:error, "Can't find LRDD template: #{inspect(e)}"} diff --git a/test/fixtures/users_mock/localhost.json b/test/fixtures/users_mock/localhost.json new file mode 100644 index 000000000..a49935db1 --- /dev/null +++ b/test/fixtures/users_mock/localhost.json @@ -0,0 +1,41 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "http://localhost:4001/schemas/litepub-0.1.jsonld", + { + "@language": "und" + } + ], + "attachment": [], + "endpoints": { + "oauthAuthorizationEndpoint": "http://localhost:4001/oauth/authorize", + "oauthRegistrationEndpoint": "http://localhost:4001/api/v1/apps", + "oauthTokenEndpoint": "http://localhost:4001/oauth/token", + "sharedInbox": "http://localhost:4001/inbox" + }, + "followers": "http://localhost:4001/users/{{nickname}}/followers", + "following": "http://localhost:4001/users/{{nickname}}/following", + "icon": { + "type": "Image", + "url": "http://localhost:4001/media/4e914f5b84e4a259a3f6c2d2edc9ab642f2ab05f3e3d9c52c81fc2d984b3d51e.jpg" + }, + "id": "http://localhost:4001/users/{{nickname}}", + "image": { + "type": "Image", + "url": "http://localhost:4001/media/f739efddefeee49c6e67e947c4811fdc911785c16ae43da4c3684051fbf8da6a.jpg?name=f739efddefeee49c6e67e947c4811fdc911785c16ae43da4c3684051fbf8da6a.jpg" + }, + "inbox": "http://localhost:4001/users/{{nickname}}/inbox", + "manuallyApprovesFollowers": false, + "name": "{{nickname}}", + "outbox": "http://localhost:4001/users/{{nickname}}/outbox", + "preferredUsername": "{{nickname}}", + "publicKey": { + "id": "http://localhost:4001/users/{{nickname}}#main-key", + "owner": "http://localhost:4001/users/{{nickname}}", + "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5DLtwGXNZElJyxFGfcVc\nXANhaMadj/iYYQwZjOJTV9QsbtiNBeIK54PJrYuU0/0YIdrvS1iqheX5IwXRhcwa\nhm3ZyLz7XeN9st7FBni4BmZMBtMpxAuYuu5p/jbWy13qAiYOhPreCx0wrWgm/lBD\n9mkgaxIxPooBE0S4ZWEJIDIV1Vft3AWcRUyWW1vIBK0uZzs6GYshbQZB952S0yo4\nFzI1hABGHncH8UvuFauh4EZ8tY7/X5I0pGRnDOcRN1dAht5w5yTA+6r5kebiFQjP\nIzN/eCO/a9Flrj9YGW7HDNtjSOH0A31PLRGlJtJO3yK57dnf5ppyCZGfL4emShQo\ncQIDAQAB\n-----END PUBLIC KEY-----\n\n" + }, + "summary": "your friendly neighborhood pleroma developer
I like cute things and distributed systems, and really hate delete and redrafts", + "tag": [], + "type": "Person", + "url": "http://localhost:4001/users/{{nickname}}" +} \ No newline at end of file diff --git a/test/notification_test.exs b/test/notification_test.exs index 56a581810..c71df4e07 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -649,12 +649,20 @@ test "notifications are deleted if a remote user is deleted" do "object" => remote_user.ap_id } + remote_user_url = remote_user.ap_id + + Tesla.Mock.mock(fn + %{method: :get, url: ^remote_user_url} -> + %Tesla.Env{status: 404, body: ""} + end) + {:ok, _delete_activity} = Transmogrifier.handle_incoming(delete_user_message) ObanHelpers.perform_all() assert Enum.empty?(Notification.for_user(local_user)) end + @tag capture_log: true test "move activity generates a notification" do %{ap_id: old_ap_id} = old_user = insert(:user) %{ap_id: new_ap_id} = new_user = insert(:user, also_known_as: [old_ap_id]) @@ -664,6 +672,18 @@ test "move activity generates a notification" do User.follow(follower, old_user) User.follow(other_follower, old_user) + old_user_url = old_user.ap_id + + body = + File.read!("test/fixtures/users_mock/localhost.json") + |> String.replace("{{nickname}}", old_user.nickname) + |> Jason.encode!() + + Tesla.Mock.mock(fn + %{method: :get, url: ^old_user_url} -> + %Tesla.Env{status: 200, body: body} + end) + Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user) ObanHelpers.perform_all() diff --git a/test/web/activity_pub/mrf/anti_link_spam_policy_test.exs b/test/web/activity_pub/mrf/anti_link_spam_policy_test.exs index fc0be6f91..1a13699be 100644 --- a/test/web/activity_pub/mrf/anti_link_spam_policy_test.exs +++ b/test/web/activity_pub/mrf/anti_link_spam_policy_test.exs @@ -110,6 +110,15 @@ test "it allows posts with links" do end describe "with unknown actors" do + setup do + Tesla.Mock.mock(fn + %{method: :get, url: "http://invalid.actor"} -> + %Tesla.Env{status: 500, body: ""} + end) + + :ok + end + test "it rejects posts without links" do message = @linkless_message diff --git a/test/web/activity_pub/relay_test.exs b/test/web/activity_pub/relay_test.exs index e3115dcd8..12bf90d90 100644 --- a/test/web/activity_pub/relay_test.exs +++ b/test/web/activity_pub/relay_test.exs @@ -89,6 +89,11 @@ test "returns error when object is unknown" do } ) + Tesla.Mock.mock(fn + %{method: :get, url: "http://mastodon.example.org/eee/99541947525187367"} -> + %Tesla.Env{status: 500, body: ""} + end) + assert capture_log(fn -> assert Relay.publish(activity) == {:error, nil} end) =~ "[error] error: nil" diff --git a/test/web/mastodon_api/controllers/notification_controller_test.exs b/test/web/mastodon_api/controllers/notification_controller_test.exs index d452ddbdd..0f0a060d2 100644 --- a/test/web/mastodon_api/controllers/notification_controller_test.exs +++ b/test/web/mastodon_api/controllers/notification_controller_test.exs @@ -407,11 +407,24 @@ test "see notifications after muting user with notifications and with_muted para assert length(json_response(conn, 200)) == 1 end + @tag capture_log: true test "see move notifications with `with_move` parameter" do old_user = insert(:user) new_user = insert(:user, also_known_as: [old_user.ap_id]) %{user: follower, conn: conn} = oauth_access(["read:notifications"]) + old_user_url = old_user.ap_id + + body = + File.read!("test/fixtures/users_mock/localhost.json") + |> String.replace("{{nickname}}", old_user.nickname) + |> Jason.encode!() + + Tesla.Mock.mock(fn + %{method: :get, url: ^old_user_url} -> + %Tesla.Env{status: 200, body: body} + end) + User.follow(follower, old_user) Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user) Pleroma.Tests.ObanHelpers.perform_all() diff --git a/test/web/mastodon_api/views/notification_view_test.exs b/test/web/mastodon_api/views/notification_view_test.exs index 4df9c3c03..57e4c8f1e 100644 --- a/test/web/mastodon_api/views/notification_view_test.exs +++ b/test/web/mastodon_api/views/notification_view_test.exs @@ -108,11 +108,24 @@ test "Follow notification" do NotificationView.render("index.json", %{notifications: [notification], for: followed}) end + @tag capture_log: true test "Move notification" do old_user = insert(:user) new_user = insert(:user, also_known_as: [old_user.ap_id]) follower = insert(:user) + old_user_url = old_user.ap_id + + body = + File.read!("test/fixtures/users_mock/localhost.json") + |> String.replace("{{nickname}}", old_user.nickname) + |> Jason.encode!() + + Tesla.Mock.mock(fn + %{method: :get, url: ^old_user_url} -> + %Tesla.Env{status: 200, body: body} + end) + User.follow(follower, old_user) Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user) Pleroma.Tests.ObanHelpers.perform_all() diff --git a/test/web/mastodon_api/views/status_view_test.exs b/test/web/mastodon_api/views/status_view_test.exs index 191895c6f..7df72decb 100644 --- a/test/web/mastodon_api/views/status_view_test.exs +++ b/test/web/mastodon_api/views/status_view_test.exs @@ -92,6 +92,23 @@ test "returns a temporary ap_id based user for activities missing db users" do Repo.delete(user) Cachex.clear(:user_cache) + finger_url = + "https://localhost/.well-known/webfinger?resource=acct:#{user.nickname}@localhost" + + Tesla.Mock.mock_global(fn + %{method: :get, url: "http://localhost/.well-known/host-meta"} -> + %Tesla.Env{status: 404, body: ""} + + %{method: :get, url: "https://localhost/.well-known/host-meta"} -> + %Tesla.Env{status: 404, body: ""} + + %{ + method: :get, + url: ^finger_url + } -> + %Tesla.Env{status: 404, body: ""} + end) + %{account: ms_user} = StatusView.render("show.json", activity: activity) assert ms_user.acct == "erroruser@example.com" diff --git a/test/web/streamer/streamer_test.exs b/test/web/streamer/streamer_test.exs index 339f99bbf..a04d70f21 100644 --- a/test/web/streamer/streamer_test.exs +++ b/test/web/streamer/streamer_test.exs @@ -122,6 +122,18 @@ test "it doesn't send notify to the 'user:notification' stream' when a domain is test "it sends follow activities to the 'user:notification' stream", %{ user: user } do + user_url = user.ap_id + + body = + File.read!("test/fixtures/users_mock/localhost.json") + |> String.replace("{{nickname}}", user.nickname) + |> Jason.encode!() + + Tesla.Mock.mock_global(fn + %{method: :get, url: ^user_url} -> + %Tesla.Env{status: 200, body: body} + end) + user2 = insert(:user) task = Task.async(fn -> assert_receive {:text, _}, @streamer_timeout end) From 058c9b01ac063f3cca22a653032663916a16a234 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 5 Mar 2020 18:28:04 +0300 Subject: [PATCH 087/581] returning, not needed --- lib/pleroma/web/push/impl.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/push/impl.ex b/lib/pleroma/web/push/impl.ex index 233e55f21..afa510f08 100644 --- a/lib/pleroma/web/push/impl.ex +++ b/lib/pleroma/web/push/impl.ex @@ -32,7 +32,7 @@ def perform( type = Activity.mastodon_notification_type(notif.activity) gcm_api_key = Application.get_env(:web_push_encryption, :gcm_api_key) avatar_url = User.avatar_url(actor) - object = Object.normalize(activity) || activity + object = Object.normalize(activity) user = User.get_cached_by_id(user_id) direct_conversation_id = Activity.direct_conversation_id(activity, user) From 931111fd5518cb79449cf79ffe29cb774c55d5ff Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 5 Mar 2020 18:57:45 +0300 Subject: [PATCH 088/581] removing integration tests --- test/http_test.exs | 25 -- test/pool/connections_test.exs | 301 ---------------------- test/reverse_proxy/client/tesla_test.exs | 93 ------- test/reverse_proxy/reverse_proxy_test.exs | 41 --- 4 files changed, 460 deletions(-) delete mode 100644 test/reverse_proxy/client/tesla_test.exs diff --git a/test/http_test.exs b/test/http_test.exs index 4aa08afcb..fd254b590 100644 --- a/test/http_test.exs +++ b/test/http_test.exs @@ -58,29 +58,4 @@ test "returns successfully result" do } end end - - describe "connection pools" do - @describetag :integration - clear_config(Pleroma.Gun) do - Pleroma.Config.put(Pleroma.Gun, Pleroma.Gun.API) - end - - test "gun" do - adapter = Application.get_env(:tesla, :adapter) - Application.put_env(:tesla, :adapter, Tesla.Adapter.Gun) - - on_exit(fn -> - Application.put_env(:tesla, :adapter, adapter) - end) - - options = [adapter: [pool: :federation]] - - assert {:ok, resp} = HTTP.get("https://httpbin.org/user-agent", [], options) - - assert resp.status == 200 - - state = Pleroma.Pool.Connections.get_state(:gun_connections) - assert state.conns["https:httpbin.org:443"] - end - end end diff --git a/test/pool/connections_test.exs b/test/pool/connections_test.exs index 963fae665..753fd8b0b 100644 --- a/test/pool/connections_test.exs +++ b/test/pool/connections_test.exs @@ -435,307 +435,6 @@ test "remove frequently used and idle", %{name: name} do } = Connections.get_state(name) end - describe "integration test" do - @describetag :integration - - clear_config(Pleroma.Gun) do - Pleroma.Config.put(Pleroma.Gun, Pleroma.Gun.API) - end - - test "opens connection and change owner", %{name: name} do - url = "https://httpbin.org" - :ok = Conn.open(url, name) - conn = Connections.checkin(url, name) - - pid = Process.whereis(name) - - assert :gun.info(conn).owner == pid - end - - test "opens connection and reuse it on next request", %{name: name} do - url = "http://httpbin.org" - :ok = Conn.open(url, name) - Process.sleep(250) - conn = Connections.checkin(url, name) - - assert is_pid(conn) - assert Process.alive?(conn) - - reused_conn = Connections.checkin(url, name) - - assert conn == reused_conn - - %Connections{ - conns: %{ - "http:httpbin.org:80" => %Conn{ - conn: ^conn, - gun_state: :up - } - } - } = Connections.get_state(name) - end - - test "opens ssl connection and reuse it on next request", %{name: name} do - url = "https://httpbin.org" - :ok = Conn.open(url, name) - Process.sleep(1_000) - conn = Connections.checkin(url, name) - - assert is_pid(conn) - assert Process.alive?(conn) - - reused_conn = Connections.checkin(url, name) - - assert conn == reused_conn - - %Connections{ - conns: %{ - "https:httpbin.org:443" => %Conn{ - conn: ^conn, - gun_state: :up - } - } - } = Connections.get_state(name) - end - - test "remove frequently used and idle", %{name: name} do - self = self() - https1 = "https://www.google.com" - https2 = "https://httpbin.org" - - :ok = Conn.open(https1, name) - :ok = Conn.open(https2, name) - Process.sleep(1_500) - conn = Connections.checkin(https1, name) - - for _ <- 1..4 do - Connections.checkin(https2, name) - end - - %Connections{ - conns: %{ - "https:httpbin.org:443" => %Conn{ - conn: _, - gun_state: :up - }, - "https:www.google.com:443" => %Conn{ - conn: _, - gun_state: :up - } - } - } = Connections.get_state(name) - - :ok = Connections.checkout(conn, self, name) - http = "http://httpbin.org" - Process.sleep(1_000) - :ok = Conn.open(http, name) - conn = Connections.checkin(http, name) - - %Connections{ - conns: %{ - "http:httpbin.org:80" => %Conn{ - conn: ^conn, - gun_state: :up - }, - "https:httpbin.org:443" => %Conn{ - conn: _, - gun_state: :up - } - } - } = Connections.get_state(name) - end - - test "remove earlier used and idle", %{name: name} do - self = self() - - https1 = "https://www.google.com" - https2 = "https://httpbin.org" - :ok = Conn.open(https1, name) - :ok = Conn.open(https2, name) - Process.sleep(1_500) - - Connections.checkin(https1, name) - conn = Connections.checkin(https1, name) - - Process.sleep(1_000) - Connections.checkin(https2, name) - Connections.checkin(https2, name) - - %Connections{ - conns: %{ - "https:httpbin.org:443" => %Conn{ - conn: _, - gun_state: :up - }, - "https:www.google.com:443" => %Conn{ - conn: ^conn, - gun_state: :up - } - } - } = Connections.get_state(name) - - :ok = Connections.checkout(conn, self, name) - :ok = Connections.checkout(conn, self, name) - - http = "http://httpbin.org" - :ok = Conn.open(http, name) - Process.sleep(1_000) - - conn = Connections.checkin(http, name) - - %Connections{ - conns: %{ - "http:httpbin.org:80" => %Conn{ - conn: ^conn, - gun_state: :up - }, - "https:httpbin.org:443" => %Conn{ - conn: _, - gun_state: :up - } - } - } = Connections.get_state(name) - end - - test "doesn't open new conn on pool overflow", %{name: name} do - self = self() - - https1 = "https://www.google.com" - https2 = "https://httpbin.org" - :ok = Conn.open(https1, name) - :ok = Conn.open(https2, name) - Process.sleep(1_000) - Connections.checkin(https1, name) - conn1 = Connections.checkin(https1, name) - conn2 = Connections.checkin(https2, name) - - %Connections{ - conns: %{ - "https:httpbin.org:443" => %Conn{ - conn: ^conn2, - gun_state: :up, - conn_state: :active, - used_by: [{^self, _}] - }, - "https:www.google.com:443" => %Conn{ - conn: ^conn1, - gun_state: :up, - conn_state: :active, - used_by: [{^self, _}, {^self, _}] - } - } - } = Connections.get_state(name) - - refute Connections.checkin("http://httpbin.org", name) - - %Connections{ - conns: %{ - "https:httpbin.org:443" => %Conn{ - conn: ^conn2, - gun_state: :up, - conn_state: :active, - used_by: [{^self, _}] - }, - "https:www.google.com:443" => %Conn{ - conn: ^conn1, - gun_state: :up, - conn_state: :active, - used_by: [{^self, _}, {^self, _}] - } - } - } = Connections.get_state(name) - end - - test "get idle connection with the smallest crf", %{ - name: name - } do - self = self() - - https1 = "https://www.google.com" - https2 = "https://httpbin.org" - - :ok = Conn.open(https1, name) - :ok = Conn.open(https2, name) - Process.sleep(1_500) - Connections.checkin(https1, name) - Connections.checkin(https2, name) - Connections.checkin(https1, name) - conn1 = Connections.checkin(https1, name) - conn2 = Connections.checkin(https2, name) - - %Connections{ - conns: %{ - "https:httpbin.org:443" => %Conn{ - conn: ^conn2, - gun_state: :up, - conn_state: :active, - used_by: [{^self, _}, {^self, _}], - crf: crf2 - }, - "https:www.google.com:443" => %Conn{ - conn: ^conn1, - gun_state: :up, - conn_state: :active, - used_by: [{^self, _}, {^self, _}, {^self, _}], - crf: crf1 - } - } - } = Connections.get_state(name) - - assert crf1 > crf2 - - :ok = Connections.checkout(conn1, self, name) - :ok = Connections.checkout(conn1, self, name) - :ok = Connections.checkout(conn1, self, name) - - :ok = Connections.checkout(conn2, self, name) - :ok = Connections.checkout(conn2, self, name) - - %Connections{ - conns: %{ - "https:httpbin.org:443" => %Conn{ - conn: ^conn2, - gun_state: :up, - conn_state: :idle, - used_by: [] - }, - "https:www.google.com:443" => %Conn{ - conn: ^conn1, - gun_state: :up, - conn_state: :idle, - used_by: [] - } - } - } = Connections.get_state(name) - - http = "http://httpbin.org" - :ok = Conn.open(http, name) - Process.sleep(1_000) - conn = Connections.checkin(http, name) - - %Connections{ - conns: %{ - "https:www.google.com:443" => %Conn{ - conn: ^conn1, - gun_state: :up, - conn_state: :idle, - used_by: [], - crf: crf1 - }, - "http:httpbin.org:80" => %Conn{ - conn: ^conn, - gun_state: :up, - conn_state: :active, - used_by: [{^self, _}], - crf: crf - } - } - } = Connections.get_state(name) - - assert crf1 > crf - end - end - describe "with proxy" do test "as ip", %{name: name} do url = "http://proxy-string.com" diff --git a/test/reverse_proxy/client/tesla_test.exs b/test/reverse_proxy/client/tesla_test.exs deleted file mode 100644 index c8b0d5842..000000000 --- a/test/reverse_proxy/client/tesla_test.exs +++ /dev/null @@ -1,93 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.ReverseProxy.Client.TeslaTest do - use ExUnit.Case - use Pleroma.Tests.Helpers - alias Pleroma.ReverseProxy.Client - @moduletag :integration - - clear_config_all(Pleroma.Gun) do - Pleroma.Config.put(Pleroma.Gun, Pleroma.Gun.API) - end - - setup do - Application.put_env(:tesla, :adapter, Tesla.Adapter.Gun) - - on_exit(fn -> - Application.put_env(:tesla, :adapter, Tesla.Mock) - end) - end - - test "get response body stream" do - {:ok, status, headers, ref} = - Client.Tesla.request( - :get, - "http://httpbin.org/stream-bytes/10", - [{"accept", "application/octet-stream"}], - "", - [] - ) - - assert status == 200 - assert headers != [] - - {:ok, response, ref} = Client.Tesla.stream_body(ref) - check_ref(ref) - assert is_binary(response) - assert byte_size(response) == 10 - - assert :done == Client.Tesla.stream_body(ref) - assert :ok = Client.Tesla.close(ref) - end - - test "head response" do - {:ok, status, headers} = Client.Tesla.request(:head, "https://httpbin.org/get", [], "") - - assert status == 200 - assert headers != [] - end - - test "get error response" do - {:ok, status, headers, _body} = - Client.Tesla.request( - :get, - "https://httpbin.org/status/500", - [], - "" - ) - - assert status == 500 - assert headers != [] - end - - describe "client error" do - setup do - adapter = Application.get_env(:tesla, :adapter) - Application.put_env(:tesla, :adapter, Tesla.Adapter.Hackney) - - on_exit(fn -> Application.put_env(:tesla, :adapter, adapter) end) - :ok - end - - test "adapter doesn't support reading body in chunks" do - assert_raise RuntimeError, - "Elixir.Tesla.Adapter.Hackney doesn't support reading body in chunks", - fn -> - Client.Tesla.request( - :get, - "http://httpbin.org/stream-bytes/10", - [{"accept", "application/octet-stream"}], - "" - ) - end - end - end - - defp check_ref(%{pid: pid, stream: stream} = ref) do - assert is_pid(pid) - assert is_reference(stream) - assert ref[:fin] - end -end diff --git a/test/reverse_proxy/reverse_proxy_test.exs b/test/reverse_proxy/reverse_proxy_test.exs index 18aae5a6b..c17ab0f89 100644 --- a/test/reverse_proxy/reverse_proxy_test.exs +++ b/test/reverse_proxy/reverse_proxy_test.exs @@ -341,45 +341,4 @@ test "with content-disposition header", %{conn: conn} do assert {"content-disposition", "attachment; filename=\"filename.jpg\""} in conn.resp_headers end end - - describe "tesla client using gun integration" do - @describetag :integration - - clear_config(Pleroma.ReverseProxy.Client) do - Pleroma.Config.put(Pleroma.ReverseProxy.Client, Pleroma.ReverseProxy.Client.Tesla) - end - - clear_config(Pleroma.Gun) do - Pleroma.Config.put(Pleroma.Gun, Pleroma.Gun.API) - end - - setup do - adapter = Application.get_env(:tesla, :adapter) - Application.put_env(:tesla, :adapter, Tesla.Adapter.Gun) - - on_exit(fn -> - Application.put_env(:tesla, :adapter, adapter) - end) - end - - test "common", %{conn: conn} do - conn = ReverseProxy.call(conn, "http://httpbin.org/stream-bytes/10") - assert byte_size(conn.resp_body) == 10 - assert conn.state == :chunked - assert conn.status == 200 - end - - test "ssl", %{conn: conn} do - conn = ReverseProxy.call(conn, "https://httpbin.org/stream-bytes/10") - assert byte_size(conn.resp_body) == 10 - assert conn.state == :chunked - assert conn.status == 200 - end - - test "follow redirects", %{conn: conn} do - conn = ReverseProxy.call(conn, "https://httpbin.org/redirect/5") - assert conn.state == :chunked - assert conn.status == 200 - end - end end From 56ff02f2ef56465b14c9670b930d154911cc7470 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 6 Mar 2020 20:23:58 +0300 Subject: [PATCH 089/581] removing GunMock to use Mox --- test/http/adapter_helper/gun_test.exs | 88 ++++++------ test/http/adapter_helper/hackney_test.exs | 8 +- test/http/connection_test.exs | 25 ++-- test/pool/connections_test.exs | 127 ++++++++++++++---- test/support/gun_mock.ex | 155 ---------------------- test/test_helper.exs | 3 + 6 files changed, 172 insertions(+), 234 deletions(-) delete mode 100644 test/support/gun_mock.ex diff --git a/test/http/adapter_helper/gun_test.exs b/test/http/adapter_helper/gun_test.exs index c1bf909a6..b1b34858a 100644 --- a/test/http/adapter_helper/gun_test.exs +++ b/test/http/adapter_helper/gun_test.exs @@ -5,17 +5,29 @@ defmodule Pleroma.HTTP.AdapterHelper.GunTest do use ExUnit.Case, async: true use Pleroma.Tests.Helpers + import ExUnit.CaptureLog + import Mox + alias Pleroma.Config alias Pleroma.Gun.Conn alias Pleroma.HTTP.AdapterHelper.Gun alias Pleroma.Pool.Connections - setup_all do - {:ok, _} = Registry.start_link(keys: :unique, name: Pleroma.GunMock) + setup :verify_on_exit! + + defp gun_mock(_) do + gun_mock() :ok end + defp gun_mock do + Pleroma.GunMock + |> expect(:open, fn _, _, _ -> Task.start_link(fn -> Process.sleep(1000) end) end) + |> expect(:await_up, fn _, _ -> {:ok, :http} end) + |> expect(:set_owner, fn _, _ -> :ok end) + end + describe "options/1" do clear_config([:http, :adapter]) do Config.put([:http, :adapter], a: 1, b: 2) @@ -24,23 +36,20 @@ defmodule Pleroma.HTTP.AdapterHelper.GunTest do test "https url with default port" do uri = URI.parse("https://example.com") - opts = Gun.options(uri) + opts = Gun.options([receive_conn: false], uri) assert opts[:certificates_verification] - tls_opts = opts[:tls_opts] - assert tls_opts[:verify] == :verify_peer - assert tls_opts[:depth] == 20 - assert tls_opts[:reuse_sessions] == false + refute opts[:tls_opts] == [] - assert tls_opts[:verify_fun] == + assert opts[:tls_opts][:verify_fun] == {&:ssl_verify_hostname.verify_fun/3, [check_hostname: 'example.com']} - assert File.exists?(tls_opts[:cacertfile]) + assert File.exists?(opts[:tls_opts][:cacertfile]) end test "https ipv4 with default port" do uri = URI.parse("https://127.0.0.1") - opts = Gun.options(uri) + opts = Gun.options([receive_conn: false], uri) assert opts[:tls_opts][:verify_fun] == {&:ssl_verify_hostname.verify_fun/3, [check_hostname: '127.0.0.1']} @@ -49,7 +58,7 @@ test "https ipv4 with default port" do test "https ipv6 with default port" do uri = URI.parse("https://[2a03:2880:f10c:83:face:b00c:0:25de]") - opts = Gun.options(uri) + opts = Gun.options([receive_conn: false], uri) assert opts[:tls_opts][:verify_fun] == {&:ssl_verify_hostname.verify_fun/3, @@ -59,32 +68,14 @@ test "https ipv6 with default port" do test "https url with non standart port" do uri = URI.parse("https://example.com:115") - opts = Gun.options(uri) + opts = Gun.options([receive_conn: false], uri) assert opts[:certificates_verification] assert opts[:transport] == :tls end - test "receive conn by default" do - uri = URI.parse("http://another-domain.com") - :ok = Conn.open(uri, :gun_connections) - - received_opts = Gun.options(uri) - assert received_opts[:close_conn] == false - assert is_pid(received_opts[:conn]) - end - - test "don't receive conn if receive_conn is false" do - uri = URI.parse("http://another-domain2.com") - :ok = Conn.open(uri, :gun_connections) - - opts = [receive_conn: false] - received_opts = Gun.options(opts, uri) - assert received_opts[:close_conn] == nil - assert received_opts[:conn] == nil - end - test "get conn on next request" do + gun_mock() level = Application.get_env(:logger, :level) Logger.configure(level: :debug) on_exit(fn -> Logger.configure(level: level) end) @@ -105,12 +96,13 @@ test "get conn on next request" do end test "merges with defaul http adapter config" do - defaults = Gun.options(URI.parse("https://example.com")) + defaults = Gun.options([receive_conn: false], URI.parse("https://example.com")) assert Keyword.has_key?(defaults, :a) assert Keyword.has_key?(defaults, :b) end test "default ssl adapter opts with connection" do + gun_mock() uri = URI.parse("https://some-domain.com") :ok = Conn.open(uri, :gun_connections) @@ -118,10 +110,7 @@ test "default ssl adapter opts with connection" do opts = Gun.options(uri) assert opts[:certificates_verification] - tls_opts = opts[:tls_opts] - assert tls_opts[:verify] == :verify_peer - assert tls_opts[:depth] == 20 - assert tls_opts[:reuse_sessions] == false + refute opts[:tls_opts] == [] assert opts[:close_conn] == false assert is_pid(opts[:conn]) @@ -158,7 +147,32 @@ test "passed opts have more weight than defaults" do end end + describe "options/1 with receive_conn parameter" do + setup :gun_mock + + test "receive conn by default" do + uri = URI.parse("http://another-domain.com") + :ok = Conn.open(uri, :gun_connections) + + received_opts = Gun.options(uri) + assert received_opts[:close_conn] == false + assert is_pid(received_opts[:conn]) + end + + test "don't receive conn if receive_conn is false" do + uri = URI.parse("http://another-domain.com") + :ok = Conn.open(uri, :gun_connections) + + opts = [receive_conn: false] + received_opts = Gun.options(opts, uri) + assert received_opts[:close_conn] == nil + assert received_opts[:conn] == nil + end + end + describe "after_request/1" do + setup :gun_mock + test "body_as not chunks" do uri = URI.parse("http://some-domain.com") :ok = Conn.open(uri, :gun_connections) @@ -223,7 +237,6 @@ test "with ipv4" do uri = URI.parse("http://127.0.0.1") :ok = Conn.open(uri, :gun_connections) opts = Gun.options(uri) - send(:gun_connections, {:gun_up, opts[:conn], :http}) :ok = Gun.after_request(opts) conn = opts[:conn] @@ -242,7 +255,6 @@ test "with ipv6" do uri = URI.parse("http://[2a03:2880:f10c:83:face:b00c:0:25de]") :ok = Conn.open(uri, :gun_connections) opts = Gun.options(uri) - send(:gun_connections, {:gun_up, opts[:conn], :http}) :ok = Gun.after_request(opts) conn = opts[:conn] diff --git a/test/http/adapter_helper/hackney_test.exs b/test/http/adapter_helper/hackney_test.exs index 3306616ef..5fda075f6 100644 --- a/test/http/adapter_helper/hackney_test.exs +++ b/test/http/adapter_helper/hackney_test.exs @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.AdapterHelper.HackneyTest do - use ExUnit.Case + use ExUnit.Case, async: true use Pleroma.Tests.Helpers alias Pleroma.Config @@ -20,11 +20,7 @@ defmodule Pleroma.HTTP.AdapterHelper.HackneyTest do end test "add proxy and opts from config", %{uri: uri} do - proxy = Config.get([:http, :proxy_url]) - Config.put([:http, :proxy_url], "localhost:8123") - on_exit(fn -> Config.put([:http, :proxy_url], proxy) end) - - opts = Hackney.options(uri) + opts = Hackney.options([proxy: "localhost:8123"], uri) assert opts[:a] == 1 assert opts[:b] == 2 diff --git a/test/http/connection_test.exs b/test/http/connection_test.exs index d4db3798c..a5ddfd435 100644 --- a/test/http/connection_test.exs +++ b/test/http/connection_test.exs @@ -3,16 +3,16 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.ConnectionTest do - use ExUnit.Case + use ExUnit.Case, async: true use Pleroma.Tests.Helpers + import ExUnit.CaptureLog + import Mox + alias Pleroma.Config alias Pleroma.HTTP.Connection - setup_all do - {:ok, _} = Registry.start_link(keys: :unique, name: Pleroma.GunMock) - :ok - end + setup :verify_on_exit! describe "parse_host/1" do test "as atom to charlist" do @@ -123,16 +123,19 @@ test "default ssl adapter opts with connection" do uri = URI.parse("https://some-domain.com") - pid = Process.whereis(:federation) - :ok = Pleroma.Gun.Conn.open(uri, :gun_connections, genserver_pid: pid) + Pleroma.GunMock + |> expect(:open, fn 'some-domain.com', 443, _ -> + Task.start_link(fn -> Process.sleep(1000) end) + end) + |> expect(:await_up, fn _, _ -> {:ok, :http2} end) + |> expect(:set_owner, fn _, _ -> :ok end) + + :ok = Pleroma.Gun.Conn.open(uri, :gun_connections) opts = Connection.options(uri) assert opts[:certificates_verification] - tls_opts = opts[:tls_opts] - assert tls_opts[:verify] == :verify_peer - assert tls_opts[:depth] == 20 - assert tls_opts[:reuse_sessions] == false + refute opts[:tls_opts] == [] assert opts[:close_conn] == false assert is_pid(opts[:conn]) diff --git a/test/pool/connections_test.exs b/test/pool/connections_test.exs index 753fd8b0b..06f32b74e 100644 --- a/test/pool/connections_test.exs +++ b/test/pool/connections_test.exs @@ -3,39 +3,83 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Pool.ConnectionsTest do - use ExUnit.Case + use ExUnit.Case, async: true use Pleroma.Tests.Helpers + import ExUnit.CaptureLog + import Mox + alias Pleroma.Gun.Conn + alias Pleroma.GunMock alias Pleroma.Pool.Connections + setup :verify_on_exit! + setup_all do - {:ok, _} = Registry.start_link(keys: :unique, name: Pleroma.GunMock) - :ok - end - - clear_config([:connections_pool, :retry]) do - Pleroma.Config.put([:connections_pool, :retry], 5) - end - - setup do name = :test_connections - adapter = Application.get_env(:tesla, :adapter) - Application.put_env(:tesla, :adapter, Tesla.Adapter.Gun) - - {:ok, pid} = Connections.start_link({name, [max_connections: 2, checkin_timeout: 1_500]}) + {:ok, pid} = Connections.start_link({name, [checkin_timeout: 150]}) + {:ok, _} = Registry.start_link(keys: :unique, name: Pleroma.GunMock) on_exit(fn -> - Application.put_env(:tesla, :adapter, adapter) - - if Process.alive?(pid) do - GenServer.stop(name) - end + if Process.alive?(pid), do: GenServer.stop(name) end) {:ok, name: name} end + defp open_mock(num \\ 1) do + GunMock + |> expect(:open, num, &start_and_register(&1, &2, &3)) + |> expect(:await_up, num, fn _, _ -> {:ok, :http} end) + |> expect(:set_owner, num, fn _, _ -> :ok end) + end + + defp connect_mock(mock) do + mock + |> expect(:connect, &connect(&1, &2)) + |> expect(:await, &await(&1, &2)) + end + + defp info_mock(mock), do: expect(mock, :info, &info(&1)) + + defp start_and_register('gun-not-up.com', _, _), do: {:error, :timeout} + + defp start_and_register(host, port, _) do + {:ok, pid} = Task.start_link(fn -> Process.sleep(1000) end) + + scheme = + case port do + 443 -> "https" + _ -> "http" + end + + Registry.register(GunMock, pid, %{ + origin_scheme: scheme, + origin_host: host, + origin_port: port + }) + + {:ok, pid} + end + + defp info(pid) do + [{_, info}] = Registry.lookup(GunMock, pid) + info + end + + defp connect(pid, _) do + ref = make_ref() + Registry.register(GunMock, ref, pid) + ref + end + + defp await(pid, ref) do + [{_, ^pid}] = Registry.lookup(GunMock, ref) + {:response, :fin, 200, []} + end + + defp now, do: :os.system_time(:second) + describe "alive?/2" do test "is alive", %{name: name} do assert Connections.alive?(name) @@ -47,6 +91,7 @@ test "returns false if not started" do end test "opens connection and reuse it on next request", %{name: name} do + open_mock() url = "http://some-domain.com" key = "http:some-domain.com:80" refute Connections.checkin(url, name) @@ -112,6 +157,7 @@ test "opens connection and reuse it on next request", %{name: name} do end test "reuse connection for idna domains", %{name: name} do + open_mock() url = "http://ですsome-domain.com" refute Connections.checkin(url, name) @@ -140,6 +186,7 @@ test "reuse connection for idna domains", %{name: name} do end test "reuse for ipv4", %{name: name} do + open_mock() url = "http://127.0.0.1" refute Connections.checkin(url, name) @@ -183,6 +230,7 @@ test "reuse for ipv4", %{name: name} do end test "reuse for ipv6", %{name: name} do + open_mock() url = "http://[2a03:2880:f10c:83:face:b00c:0:25de]" refute Connections.checkin(url, name) @@ -212,6 +260,10 @@ test "reuse for ipv6", %{name: name} do end test "up and down ipv4", %{name: name} do + open_mock() + |> info_mock() + |> allow(self(), name) + self = self() url = "http://127.0.0.1" :ok = Conn.open(url, name) @@ -233,6 +285,11 @@ test "up and down ipv4", %{name: name} do test "up and down ipv6", %{name: name} do self = self() + + open_mock() + |> info_mock() + |> allow(self, name) + url = "http://[2a03:2880:f10c:83:face:b00c:0:25de]" :ok = Conn.open(url, name) conn = Connections.checkin(url, name) @@ -252,6 +309,7 @@ test "up and down ipv6", %{name: name} do end test "reuses connection based on protocol", %{name: name} do + open_mock(2) http_url = "http://some-domain.com" http_key = "http:some-domain.com:80" https_url = "https://some-domain.com" @@ -290,6 +348,7 @@ test "reuses connection based on protocol", %{name: name} do end test "connection can't get up", %{name: name} do + expect(GunMock, :open, &start_and_register(&1, &2, &3)) url = "http://gun-not-up.com" assert capture_log(fn -> @@ -301,6 +360,11 @@ test "connection can't get up", %{name: name} do test "process gun_down message and then gun_up", %{name: name} do self = self() + + open_mock() + |> info_mock() + |> allow(self, name) + url = "http://gun-down-and-up.com" key = "http:gun-down-and-up.com:80" :ok = Conn.open(url, name) @@ -351,6 +415,7 @@ test "process gun_down message and then gun_up", %{name: name} do end test "async processes get same conn for same domain", %{name: name} do + open_mock() url = "http://some-domain.com" :ok = Conn.open(url, name) @@ -383,6 +448,7 @@ test "async processes get same conn for same domain", %{name: name} do end test "remove frequently used and idle", %{name: name} do + open_mock(3) self = self() http_url = "http://some-domain.com" https_url = "https://some-domain.com" @@ -437,6 +503,9 @@ test "remove frequently used and idle", %{name: name} do describe "with proxy" do test "as ip", %{name: name} do + open_mock() + |> connect_mock() + url = "http://proxy-string.com" key = "http:proxy-string.com:80" :ok = Conn.open(url, name, proxy: {{127, 0, 0, 1}, 8123}) @@ -458,6 +527,9 @@ test "as ip", %{name: name} do end test "as host", %{name: name} do + open_mock() + |> connect_mock() + url = "http://proxy-tuple-atom.com" :ok = Conn.open(url, name, proxy: {'localhost', 9050}) conn = Connections.checkin(url, name) @@ -477,6 +549,9 @@ test "as host", %{name: name} do end test "as ip and ssl", %{name: name} do + open_mock() + |> connect_mock() + url = "https://proxy-string.com" :ok = Conn.open(url, name, proxy: {{127, 0, 0, 1}, 8123}) @@ -497,6 +572,9 @@ test "as ip and ssl", %{name: name} do end test "as host and ssl", %{name: name} do + open_mock() + |> connect_mock() + url = "https://proxy-tuple-atom.com" :ok = Conn.open(url, name, proxy: {'localhost', 9050}) conn = Connections.checkin(url, name) @@ -516,6 +594,8 @@ test "as host and ssl", %{name: name} do end test "with socks type", %{name: name} do + open_mock() + url = "http://proxy-socks.com" :ok = Conn.open(url, name, proxy: {:socks5, 'localhost', 1234}) @@ -537,6 +617,7 @@ test "with socks type", %{name: name} do end test "with socks4 type and ssl", %{name: name} do + open_mock() url = "https://proxy-socks.com" :ok = Conn.open(url, name, proxy: {:socks4, 'localhost', 1234}) @@ -667,15 +748,13 @@ test "lower crf and lower reference", %{name: name} do end end - test "count/1", %{name: name} do + test "count/1" do + name = :test_count + {:ok, _} = Connections.start_link({name, [checkin_timeout: 150]}) assert Connections.count(name) == 0 Connections.add_conn(name, "1", %Conn{conn: self()}) assert Connections.count(name) == 1 Connections.remove_conn(name, "1") assert Connections.count(name) == 0 end - - defp now do - :os.system_time(:second) - end end diff --git a/test/support/gun_mock.ex b/test/support/gun_mock.ex deleted file mode 100644 index 9d664e366..000000000 --- a/test/support/gun_mock.ex +++ /dev/null @@ -1,155 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.GunMock do - @behaviour Pleroma.Gun - - alias Pleroma.Gun - alias Pleroma.GunMock - - @impl Gun - def open('some-domain.com', 443, _) do - {:ok, conn_pid} = Task.start_link(fn -> Process.sleep(1_000) end) - - Registry.register(GunMock, conn_pid, %{ - origin_scheme: "https", - origin_host: 'some-domain.com', - origin_port: 443 - }) - - {:ok, conn_pid} - end - - @impl Gun - def open(ip, port, _) - when ip in [{10_755, 10_368, 61_708, 131, 64_206, 45_068, 0, 9_694}, {127, 0, 0, 1}] and - port in [80, 443] do - {:ok, conn_pid} = Task.start_link(fn -> Process.sleep(1_000) end) - - scheme = if port == 443, do: "https", else: "http" - - Registry.register(GunMock, conn_pid, %{ - origin_scheme: scheme, - origin_host: ip, - origin_port: port - }) - - {:ok, conn_pid} - end - - @impl Gun - def open('localhost', 1234, %{ - protocols: [:socks], - proxy: {:socks5, 'localhost', 1234}, - socks_opts: %{host: 'proxy-socks.com', port: 80, version: 5} - }) do - {:ok, conn_pid} = Task.start_link(fn -> Process.sleep(1_000) end) - - Registry.register(GunMock, conn_pid, %{ - origin_scheme: "http", - origin_host: 'proxy-socks.com', - origin_port: 80 - }) - - {:ok, conn_pid} - end - - @impl Gun - def open('localhost', 1234, %{ - protocols: [:socks], - proxy: {:socks4, 'localhost', 1234}, - socks_opts: %{ - host: 'proxy-socks.com', - port: 443, - protocols: [:http2], - tls_opts: [], - transport: :tls, - version: 4 - } - }) do - {:ok, conn_pid} = Task.start_link(fn -> Process.sleep(1_000) end) - - Registry.register(GunMock, conn_pid, %{ - origin_scheme: "https", - origin_host: 'proxy-socks.com', - origin_port: 443 - }) - - {:ok, conn_pid} - end - - @impl Gun - def open('gun-not-up.com', 80, _opts), do: {:error, :timeout} - - @impl Gun - def open('example.com', port, _) when port in [443, 115] do - {:ok, conn_pid} = Task.start_link(fn -> Process.sleep(1_000) end) - - Registry.register(GunMock, conn_pid, %{ - origin_scheme: "https", - origin_host: 'example.com', - origin_port: 443 - }) - - {:ok, conn_pid} - end - - @impl Gun - def open(domain, 80, _) do - {:ok, conn_pid} = Task.start_link(fn -> Process.sleep(1_000) end) - - Registry.register(GunMock, conn_pid, %{ - origin_scheme: "http", - origin_host: domain, - origin_port: 80 - }) - - {:ok, conn_pid} - end - - @impl Gun - def open({127, 0, 0, 1}, 8123, _) do - Task.start_link(fn -> Process.sleep(1_000) end) - end - - @impl Gun - def open('localhost', 9050, _) do - Task.start_link(fn -> Process.sleep(1_000) end) - end - - @impl Gun - def await_up(_pid, _timeout), do: {:ok, :http} - - @impl Gun - def set_owner(_pid, _owner), do: :ok - - @impl Gun - def connect(pid, %{host: _, port: 80}) do - ref = make_ref() - Registry.register(GunMock, ref, pid) - ref - end - - @impl Gun - def connect(pid, %{host: _, port: 443, protocols: [:http2], transport: :tls}) do - ref = make_ref() - Registry.register(GunMock, ref, pid) - ref - end - - @impl Gun - def await(pid, ref) do - [{_, ^pid}] = Registry.lookup(GunMock, ref) - {:response, :fin, 200, []} - end - - @impl Gun - def info(pid) do - [{_, info}] = Registry.lookup(GunMock, pid) - info - end - - @impl Gun - def close(_pid), do: :ok -end diff --git a/test/test_helper.exs b/test/test_helper.exs index 6b91d2b46..ee880e226 100644 --- a/test/test_helper.exs +++ b/test/test_helper.exs @@ -6,7 +6,10 @@ ExUnit.start(exclude: [:federated | os_exclude]) Ecto.Adapters.SQL.Sandbox.mode(Pleroma.Repo, :manual) + Mox.defmock(Pleroma.ReverseProxy.ClientMock, for: Pleroma.ReverseProxy.Client) +Mox.defmock(Pleroma.GunMock, for: Pleroma.Gun) + {:ok, _} = Application.ensure_all_started(:ex_machina) ExUnit.after_suite(fn _results -> From c93c3096d5ffb2df1493f2b8e3f0627d9a8c5910 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 6 Mar 2020 21:04:18 +0300 Subject: [PATCH 090/581] little refactor --- lib/pleroma/gun/gun.ex | 6 ++++-- lib/pleroma/http/adapter_helper/gun.ex | 18 ++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/pleroma/gun/gun.ex b/lib/pleroma/gun/gun.ex index 81855e89e..4043e4880 100644 --- a/lib/pleroma/gun/gun.ex +++ b/lib/pleroma/gun/gun.ex @@ -11,6 +11,10 @@ defmodule Pleroma.Gun do @callback await(pid(), reference()) :: {:response, :fin, 200, []} @callback set_owner(pid(), pid()) :: :ok + @api Pleroma.Config.get([Pleroma.Gun], Pleroma.Gun.API) + + defp api, do: @api + def open(host, port, opts), do: api().open(host, port, opts) def info(pid), do: api().info(pid) @@ -24,6 +28,4 @@ def connect(pid, opts), do: api().connect(pid, opts) def await(pid, ref), do: api().await(pid, ref) def set_owner(pid, owner), do: api().set_owner(pid, owner) - - defp api, do: Pleroma.Config.get([Pleroma.Gun], Pleroma.Gun.API) end diff --git a/lib/pleroma/http/adapter_helper/gun.ex b/lib/pleroma/http/adapter_helper/gun.ex index 5d5870d90..9b03f4653 100644 --- a/lib/pleroma/http/adapter_helper/gun.ex +++ b/lib/pleroma/http/adapter_helper/gun.ex @@ -5,10 +5,9 @@ defmodule Pleroma.HTTP.AdapterHelper.Gun do @behaviour Pleroma.HTTP.AdapterHelper - alias Pleroma.HTTP.AdapterHelper - require Logger + alias Pleroma.HTTP.AdapterHelper alias Pleroma.Pool.Connections @defaults [ @@ -22,20 +21,23 @@ defmodule Pleroma.HTTP.AdapterHelper.Gun do @spec options(keyword(), URI.t()) :: keyword() def options(connection_opts \\ [], %URI{} = uri) do - proxy = Pleroma.Config.get([:http, :proxy_url], nil) + formatted_proxy = + Pleroma.Config.get([:http, :proxy_url], nil) + |> AdapterHelper.format_proxy() + + config_opts = Pleroma.Config.get([:http, :adapter], []) @defaults - |> Keyword.merge(Pleroma.Config.get([:http, :adapter], [])) + |> Keyword.merge(config_opts) |> add_scheme_opts(uri) - |> AdapterHelper.maybe_add_proxy(AdapterHelper.format_proxy(proxy)) + |> AdapterHelper.maybe_add_proxy(formatted_proxy) |> maybe_get_conn(uri, connection_opts) end @spec after_request(keyword()) :: :ok def after_request(opts) do - with conn when not is_nil(conn) <- opts[:conn], - body_as when body_as != :chunks <- opts[:body_as] do - Connections.checkout(conn, self(), :gun_connections) + if opts[:conn] && opts[:body_as] != :chunks do + Connections.checkout(opts[:conn], self(), :gun_connections) end :ok From 78282dc9839dbd17c4649cd3936bb8f4c8283745 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 6 Mar 2020 21:24:19 +0300 Subject: [PATCH 091/581] little polishing --- lib/pleroma/http/adapter_helper/gun.ex | 4 ++-- lib/pleroma/http/adapter_helper/hackney.ex | 4 +++- lib/pleroma/http/connection.ex | 15 ++++++++------- lib/pleroma/pool/connections.ex | 3 +-- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/lib/pleroma/http/adapter_helper/gun.ex b/lib/pleroma/http/adapter_helper/gun.ex index 9b03f4653..862e851c0 100644 --- a/lib/pleroma/http/adapter_helper/gun.ex +++ b/lib/pleroma/http/adapter_helper/gun.ex @@ -5,11 +5,11 @@ defmodule Pleroma.HTTP.AdapterHelper.Gun do @behaviour Pleroma.HTTP.AdapterHelper - require Logger - alias Pleroma.HTTP.AdapterHelper alias Pleroma.Pool.Connections + require Logger + @defaults [ connect_timeout: 5_000, domain_lookup_timeout: 5_000, diff --git a/lib/pleroma/http/adapter_helper/hackney.ex b/lib/pleroma/http/adapter_helper/hackney.ex index a0e161eaa..d08afae0c 100644 --- a/lib/pleroma/http/adapter_helper/hackney.ex +++ b/lib/pleroma/http/adapter_helper/hackney.ex @@ -13,8 +13,10 @@ defmodule Pleroma.HTTP.AdapterHelper.Hackney do def options(connection_opts \\ [], %URI{} = uri) do proxy = Pleroma.Config.get([:http, :proxy_url], nil) + config_opts = Pleroma.Config.get([:http, :adapter], []) + @defaults - |> Keyword.merge(Pleroma.Config.get([:http, :adapter], [])) + |> Keyword.merge(config_opts) |> Keyword.merge(connection_opts) |> add_scheme_opts(uri) |> Pleroma.HTTP.AdapterHelper.maybe_add_proxy(proxy) diff --git a/lib/pleroma/http/connection.ex b/lib/pleroma/http/connection.ex index 97eec88c1..777e5d4c8 100644 --- a/lib/pleroma/http/connection.ex +++ b/lib/pleroma/http/connection.ex @@ -6,6 +6,14 @@ defmodule Pleroma.HTTP.Connection do @moduledoc """ Configure Tesla.Client with default and customized adapter options. """ + + alias Pleroma.Config + alias Pleroma.HTTP.AdapterHelper + + require Logger + + @defaults [pool: :federation] + @type ip_address :: ipv4_address() | ipv6_address() @type ipv4_address :: {0..255, 0..255, 0..255, 0..255} @type ipv6_address :: @@ -13,13 +21,6 @@ defmodule Pleroma.HTTP.Connection do @type proxy_type() :: :socks4 | :socks5 @type host() :: charlist() | ip_address() - @defaults [pool: :federation] - - require Logger - - alias Pleroma.Config - alias Pleroma.HTTP.AdapterHelper - @doc """ Merge default connection & adapter options with received ones. """ diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index f96c08f21..7529e9240 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -6,6 +6,7 @@ defmodule Pleroma.Pool.Connections do use GenServer alias Pleroma.Config + alias Pleroma.Gun require Logger @@ -19,8 +20,6 @@ defmodule Pleroma.Pool.Connections do defstruct conns: %{}, opts: [] - alias Pleroma.Gun - @spec start_link({atom(), keyword()}) :: {:ok, pid()} def start_link({name, opts}) do GenServer.start_link(__MODULE__, opts, name: name) From 14678a7708fb43e60f2f3b610f15d5090616d85c Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Sat, 7 Mar 2020 10:12:34 +0300 Subject: [PATCH 092/581] using `stub` instead `expect` --- test/http/adapter_helper/gun_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/http/adapter_helper/gun_test.exs b/test/http/adapter_helper/gun_test.exs index b1b34858a..c65b89786 100644 --- a/test/http/adapter_helper/gun_test.exs +++ b/test/http/adapter_helper/gun_test.exs @@ -23,7 +23,7 @@ defp gun_mock(_) do defp gun_mock do Pleroma.GunMock - |> expect(:open, fn _, _, _ -> Task.start_link(fn -> Process.sleep(1000) end) end) + |> stub(:open, fn _, _, _ -> Task.start_link(fn -> Process.sleep(1000) end) end) |> expect(:await_up, fn _, _ -> {:ok, :http} end) |> expect(:set_owner, fn _, _ -> :ok end) end From 9f884a263904c8b243507d35b29da712a31fb444 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Sat, 7 Mar 2020 11:01:37 +0300 Subject: [PATCH 093/581] tests changes --- test/http/adapter_helper/gun_test.exs | 4 +- test/http/connection_test.exs | 28 -------------- test/http_test.exs | 2 +- test/reverse_proxy/reverse_proxy_test.exs | 45 ++++++++++++----------- 4 files changed, 27 insertions(+), 52 deletions(-) diff --git a/test/http/adapter_helper/gun_test.exs b/test/http/adapter_helper/gun_test.exs index c65b89786..66622b605 100644 --- a/test/http/adapter_helper/gun_test.exs +++ b/test/http/adapter_helper/gun_test.exs @@ -24,8 +24,8 @@ defp gun_mock(_) do defp gun_mock do Pleroma.GunMock |> stub(:open, fn _, _, _ -> Task.start_link(fn -> Process.sleep(1000) end) end) - |> expect(:await_up, fn _, _ -> {:ok, :http} end) - |> expect(:set_owner, fn _, _ -> :ok end) + |> stub(:await_up, fn _, _ -> {:ok, :http} end) + |> stub(:set_owner, fn _, _ -> :ok end) end describe "options/1" do diff --git a/test/http/connection_test.exs b/test/http/connection_test.exs index a5ddfd435..25a2bac1c 100644 --- a/test/http/connection_test.exs +++ b/test/http/connection_test.exs @@ -7,13 +7,10 @@ defmodule Pleroma.HTTP.ConnectionTest do use Pleroma.Tests.Helpers import ExUnit.CaptureLog - import Mox alias Pleroma.Config alias Pleroma.HTTP.Connection - setup :verify_on_exit! - describe "parse_host/1" do test "as atom to charlist" do assert Connection.parse_host(:localhost) == 'localhost' @@ -115,30 +112,5 @@ test "passed opts have more weight than defaults" do assert opts[:proxy] == {'example.com', 4321} end - - test "default ssl adapter opts with connection" do - adapter = Application.get_env(:tesla, :adapter) - Application.put_env(:tesla, :adapter, Tesla.Adapter.Gun) - on_exit(fn -> Application.put_env(:tesla, :adapter, adapter) end) - - uri = URI.parse("https://some-domain.com") - - Pleroma.GunMock - |> expect(:open, fn 'some-domain.com', 443, _ -> - Task.start_link(fn -> Process.sleep(1000) end) - end) - |> expect(:await_up, fn _, _ -> {:ok, :http2} end) - |> expect(:set_owner, fn _, _ -> :ok end) - - :ok = Pleroma.Gun.Conn.open(uri, :gun_connections) - - opts = Connection.options(uri) - - assert opts[:certificates_verification] - refute opts[:tls_opts] == [] - - assert opts[:close_conn] == false - assert is_pid(opts[:conn]) - end end end diff --git a/test/http_test.exs b/test/http_test.exs index fd254b590..618485b55 100644 --- a/test/http_test.exs +++ b/test/http_test.exs @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTPTest do - use ExUnit.Case + use ExUnit.Case, async: true use Pleroma.Tests.Helpers import Tesla.Mock alias Pleroma.HTTP diff --git a/test/reverse_proxy/reverse_proxy_test.exs b/test/reverse_proxy/reverse_proxy_test.exs index c17ab0f89..abdfddcb7 100644 --- a/test/reverse_proxy/reverse_proxy_test.exs +++ b/test/reverse_proxy/reverse_proxy_test.exs @@ -3,14 +3,17 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ReverseProxyTest do - use Pleroma.Web.ConnCase + use Pleroma.Web.ConnCase, async: true + import ExUnit.CaptureLog import Mox + alias Pleroma.ReverseProxy alias Pleroma.ReverseProxy.ClientMock + alias Plug.Conn setup_all do - {:ok, _} = Registry.start_link(keys: :unique, name: Pleroma.ReverseProxy.ClientMock) + {:ok, _} = Registry.start_link(keys: :unique, name: ClientMock) :ok end @@ -21,7 +24,7 @@ defp user_agent_mock(user_agent, invokes) do ClientMock |> expect(:request, fn :get, url, _, _, _ -> - Registry.register(Pleroma.ReverseProxy.ClientMock, url, 0) + Registry.register(ClientMock, url, 0) {:ok, 200, [ @@ -30,13 +33,13 @@ defp user_agent_mock(user_agent, invokes) do ], %{url: url}} end) |> expect(:stream_body, invokes, fn %{url: url} = client -> - case Registry.lookup(Pleroma.ReverseProxy.ClientMock, url) do + case Registry.lookup(ClientMock, url) do [{_, 0}] -> - Registry.update_value(Pleroma.ReverseProxy.ClientMock, url, &(&1 + 1)) + Registry.update_value(ClientMock, url, &(&1 + 1)) {:ok, json, client} [{_, 1}] -> - Registry.unregister(Pleroma.ReverseProxy.ClientMock, url) + Registry.unregister(ClientMock, url) :done end end) @@ -81,7 +84,7 @@ test "closed connection", %{conn: conn} do defp stream_mock(invokes, with_close? \\ false) do ClientMock |> expect(:request, fn :get, "/stream-bytes/" <> length, _, _, _ -> - Registry.register(Pleroma.ReverseProxy.ClientMock, "/stream-bytes/" <> length, 0) + Registry.register(ClientMock, "/stream-bytes/" <> length, 0) {:ok, 200, [{"content-type", "application/octet-stream"}], %{url: "/stream-bytes/" <> length}} @@ -89,10 +92,10 @@ defp stream_mock(invokes, with_close? \\ false) do |> expect(:stream_body, invokes, fn %{url: "/stream-bytes/" <> length} = client -> max = String.to_integer(length) - case Registry.lookup(Pleroma.ReverseProxy.ClientMock, "/stream-bytes/" <> length) do + case Registry.lookup(ClientMock, "/stream-bytes/" <> length) do [{_, current}] when current < max -> Registry.update_value( - Pleroma.ReverseProxy.ClientMock, + ClientMock, "/stream-bytes/" <> length, &(&1 + 10) ) @@ -100,7 +103,7 @@ defp stream_mock(invokes, with_close? \\ false) do {:ok, "0123456789", client} [{_, ^max}] -> - Registry.unregister(Pleroma.ReverseProxy.ClientMock, "/stream-bytes/" <> length) + Registry.unregister(ClientMock, "/stream-bytes/" <> length) :done end end) @@ -214,24 +217,24 @@ test "streaming", %{conn: conn} do conn = ReverseProxy.call(conn, "/stream-bytes/200") assert conn.state == :chunked assert byte_size(conn.resp_body) == 200 - assert Plug.Conn.get_resp_header(conn, "content-type") == ["application/octet-stream"] + assert Conn.get_resp_header(conn, "content-type") == ["application/octet-stream"] end defp headers_mock(_) do ClientMock |> expect(:request, fn :get, "/headers", headers, _, _ -> - Registry.register(Pleroma.ReverseProxy.ClientMock, "/headers", 0) + Registry.register(ClientMock, "/headers", 0) {:ok, 200, [{"content-type", "application/json"}], %{url: "/headers", headers: headers}} end) |> expect(:stream_body, 2, fn %{url: url, headers: headers} = client -> - case Registry.lookup(Pleroma.ReverseProxy.ClientMock, url) do + case Registry.lookup(ClientMock, url) do [{_, 0}] -> - Registry.update_value(Pleroma.ReverseProxy.ClientMock, url, &(&1 + 1)) + Registry.update_value(ClientMock, url, &(&1 + 1)) headers = for {k, v} <- headers, into: %{}, do: {String.capitalize(k), v} {:ok, Jason.encode!(%{headers: headers}), client} [{_, 1}] -> - Registry.unregister(Pleroma.ReverseProxy.ClientMock, url) + Registry.unregister(ClientMock, url) :done end end) @@ -244,7 +247,7 @@ defp headers_mock(_) do test "header passes", %{conn: conn} do conn = - Plug.Conn.put_req_header( + Conn.put_req_header( conn, "accept", "text/html" @@ -257,7 +260,7 @@ test "header passes", %{conn: conn} do test "header is filtered", %{conn: conn} do conn = - Plug.Conn.put_req_header( + Conn.put_req_header( conn, "accept-language", "en-US" @@ -301,18 +304,18 @@ test "add cache-control", %{conn: conn} do defp disposition_headers_mock(headers) do ClientMock |> expect(:request, fn :get, "/disposition", _, _, _ -> - Registry.register(Pleroma.ReverseProxy.ClientMock, "/disposition", 0) + Registry.register(ClientMock, "/disposition", 0) {:ok, 200, headers, %{url: "/disposition"}} end) |> expect(:stream_body, 2, fn %{url: "/disposition"} = client -> - case Registry.lookup(Pleroma.ReverseProxy.ClientMock, "/disposition") do + case Registry.lookup(ClientMock, "/disposition") do [{_, 0}] -> - Registry.update_value(Pleroma.ReverseProxy.ClientMock, "/disposition", &(&1 + 1)) + Registry.update_value(ClientMock, "/disposition", &(&1 + 1)) {:ok, "", client} [{_, 1}] -> - Registry.unregister(Pleroma.ReverseProxy.ClientMock, "/disposition") + Registry.unregister(ClientMock, "/disposition") :done end end) From 5f42ecc4c74172b1b17c126106fda9da24065b11 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Sat, 7 Mar 2020 12:24:39 +0300 Subject: [PATCH 094/581] start gun upload pool, if proxy_remote is enabled --- lib/pleroma/pool/supervisor.ex | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/pool/supervisor.ex b/lib/pleroma/pool/supervisor.ex index f436849ac..8dc5b64b7 100644 --- a/lib/pleroma/pool/supervisor.ex +++ b/lib/pleroma/pool/supervisor.ex @@ -5,6 +5,7 @@ defmodule Pleroma.Pool.Supervisor do use Supervisor + alias Pleroma.Config alias Pleroma.Pool def start_link(args) do @@ -17,8 +18,7 @@ def init(_) do %{ id: Pool.Connections, start: - {Pool.Connections, :start_link, - [{:gun_connections, Pleroma.Config.get([:connections_pool])}]} + {Pool.Connections, :start_link, [{:gun_connections, Config.get([:connections_pool])}]} } ] ++ pools() @@ -26,7 +26,16 @@ def init(_) do end defp pools do - for {pool_name, pool_opts} <- Pleroma.Config.get([:pools]) do + pools = Config.get(:pools) + + pools = + if Config.get([Pleroma.Upload, :proxy_remote]) == false do + Keyword.delete(pools, :upload) + else + pools + end + + for {pool_name, pool_opts} <- pools do pool_opts |> Keyword.put(:id, {Pool, pool_name}) |> Keyword.put(:name, pool_name) From 426f5ee48a09dbf321c013db08cc849c8929d86d Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 10 Mar 2020 15:31:44 +0300 Subject: [PATCH 095/581] tesla adapter can't be changed in adminFE --- lib/pleroma/config/transfer_task.ex | 58 +++++++++---------- .../admin_api/admin_api_controller_test.exs | 21 +------ 2 files changed, 31 insertions(+), 48 deletions(-) diff --git a/lib/pleroma/config/transfer_task.ex b/lib/pleroma/config/transfer_task.ex index bf1b943d8..4a4c022f0 100644 --- a/lib/pleroma/config/transfer_task.ex +++ b/lib/pleroma/config/transfer_task.ex @@ -20,8 +20,7 @@ defmodule Pleroma.Config.TransferTask do {:pleroma, :markup}, {:pleroma, :streamer}, {:pleroma, :pools}, - {:pleroma, :connections_pool}, - {:tesla, :adapter} + {:pleroma, :connections_pool} ] @reboot_time_subkeys [ @@ -35,8 +34,6 @@ defmodule Pleroma.Config.TransferTask do {:pleroma, :gopher, [:enabled]} ] - @reject [nil, :prometheus] - def start_link(_) do load_and_update_env() if Pleroma.Config.get(:env) == :test, do: Ecto.Adapters.SQL.Sandbox.checkin(Repo) @@ -45,35 +42,30 @@ def start_link(_) do @spec load_and_update_env([ConfigDB.t()]) :: :ok | false def load_and_update_env(deleted \\ [], restart_pleroma? \\ true) do - with {:configurable, true} <- - {:configurable, Pleroma.Config.get(:configurable_from_database)}, - true <- Ecto.Adapters.SQL.table_exists?(Repo, "config"), - started_applications <- Application.started_applications() do + with {_, true} <- {:configurable, Pleroma.Config.get(:configurable_from_database)} do # We need to restart applications for loaded settings take effect - in_db = Repo.all(ConfigDB) with_deleted = in_db ++ deleted - reject_for_restart = if restart_pleroma?, do: @reject, else: [:pleroma | @reject] + # TODO: some problem with prometheus after restart! + reject = [nil, :prometheus] - applications = - with_deleted - |> Enum.map(&merge_and_update(&1)) - |> Enum.uniq() - # TODO: some problem with prometheus after restart! - |> Enum.reject(&(&1 in reject_for_restart)) - - # to be ensured that pleroma will be restarted last - applications = - if :pleroma in applications do - List.delete(applications, :pleroma) ++ [:pleroma] + reject_for_restart = + if restart_pleroma? do + reject else - Restarter.Pleroma.rebooted() - applications + [:pleroma | reject] end - Enum.each(applications, &restart(started_applications, &1, Pleroma.Config.get(:env))) + started_applications = Application.started_applications() + + with_deleted + |> Enum.map(&merge_and_update(&1)) + |> Enum.uniq() + |> Enum.reject(&(&1 in reject_for_restart)) + |> maybe_set_pleroma_last() + |> Enum.each(&restart(started_applications, &1, Pleroma.Config.get(:env))) :ok else @@ -81,6 +73,18 @@ def load_and_update_env(deleted \\ [], restart_pleroma? \\ true) do end end + defp maybe_set_pleroma_last(apps) do + # to be ensured that pleroma will be restarted last + if :pleroma in apps do + apps + |> List.delete(:pleroma) + |> List.insert_at(-1, :pleroma) + else + Restarter.Pleroma.rebooted() + apps + end + end + defp group_for_restart(:logger, key, _, merged_value) do # change logger configuration in runtime, without restart if Keyword.keyword?(merged_value) and @@ -93,14 +97,10 @@ defp group_for_restart(:logger, key, _, merged_value) do nil end - defp group_for_restart(:tesla, _, _, _), do: :pleroma - defp group_for_restart(group, _, _, _) when group != :pleroma, do: group defp group_for_restart(group, key, value, _) do - if pleroma_need_restart?(group, key, value) do - group - end + if pleroma_need_restart?(group, key, value), do: group end defp merge_and_update(setting) do diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index d6b839948..76240e5bc 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -2513,8 +2513,7 @@ test "saving full setting if value is not keyword", %{conn: conn} do "value" => "Tesla.Adapter.Httpc", "db" => [":adapter"] } - ], - "need_reboot" => true + ] } end @@ -2586,9 +2585,6 @@ test "update config setting & delete with fallback to default value", %{ end test "common config example", %{conn: conn} do - adapter = Application.get_env(:tesla, :adapter) - on_exit(fn -> Application.put_env(:tesla, :adapter, adapter) end) - conn = post(conn, "/api/pleroma/admin/config", %{ configs: [ @@ -2607,16 +2603,10 @@ test "common config example", %{conn: conn} do %{"tuple" => [":regex4", "~r/https:\/\/example.com/s"]}, %{"tuple" => [":name", "Pleroma"]} ] - }, - %{ - "group" => ":tesla", - "key" => ":adapter", - "value" => "Tesla.Adapter.Httpc" } ] }) - assert Application.get_env(:tesla, :adapter) == Tesla.Adapter.Httpc assert Config.get([Pleroma.Captcha.NotReal, :name]) == "Pleroma" assert json_response(conn, 200) == %{ @@ -2648,15 +2638,8 @@ test "common config example", %{conn: conn} do ":regex4", ":name" ] - }, - %{ - "group" => ":tesla", - "key" => ":adapter", - "value" => "Tesla.Adapter.Httpc", - "db" => [":adapter"] } - ], - "need_reboot" => true + ] } end From f39e1b9eff859c0795911212c59304f68fca92bc Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 10 Mar 2020 15:54:11 +0300 Subject: [PATCH 096/581] add verify tls_opts only when we open connection for other requests tesla will add tls_opts --- lib/pleroma/gun/conn.ex | 24 +++++++++++++++++ lib/pleroma/http/adapter_helper/gun.ex | 33 ++++------------------- lib/pleroma/http/connection.ex | 13 +++++++++ test/http/adapter_helper/gun_test.exs | 37 ++++---------------------- test/http/connection_test.exs | 19 +++++++++++++ 5 files changed, 66 insertions(+), 60 deletions(-) diff --git a/lib/pleroma/gun/conn.ex b/lib/pleroma/gun/conn.ex index 319718690..57a847c30 100644 --- a/lib/pleroma/gun/conn.ex +++ b/lib/pleroma/gun/conn.ex @@ -45,6 +45,7 @@ def open(%URI{} = uri, name, opts) do |> Map.put_new(:retry, pool_opts[:retry] || 1) |> Map.put_new(:retry_timeout, pool_opts[:retry_timeout] || 1000) |> Map.put_new(:await_up_timeout, pool_opts[:await_up_timeout] || 5_000) + |> maybe_add_tls_opts(uri) key = "#{uri.scheme}:#{uri.host}:#{uri.port}" @@ -70,6 +71,29 @@ def open(%URI{} = uri, name, opts) do end end + defp maybe_add_tls_opts(opts, %URI{scheme: "http"}), do: opts + + defp maybe_add_tls_opts(opts, %URI{scheme: "https", host: host}) do + tls_opts = [ + verify: :verify_peer, + cacertfile: CAStore.file_path(), + depth: 20, + reuse_sessions: false, + verify_fun: + {&:ssl_verify_hostname.verify_fun/3, + [check_hostname: Pleroma.HTTP.Connection.format_host(host)]} + ] + + tls_opts = + if Keyword.keyword?(opts[:tls_opts]) do + Keyword.merge(tls_opts, opts[:tls_opts]) + else + tls_opts + end + + Map.put(opts, :tls_opts, tls_opts) + end + defp do_open(uri, %{proxy: {proxy_host, proxy_port}} = opts) do connect_opts = uri diff --git a/lib/pleroma/http/adapter_helper/gun.ex b/lib/pleroma/http/adapter_helper/gun.ex index 862e851c0..55c2b192a 100644 --- a/lib/pleroma/http/adapter_helper/gun.ex +++ b/lib/pleroma/http/adapter_helper/gun.ex @@ -45,21 +45,11 @@ def after_request(opts) do defp add_scheme_opts(opts, %URI{scheme: "http"}), do: opts - defp add_scheme_opts(opts, %URI{scheme: "https", host: host}) do - adapter_opts = [ - certificates_verification: true, - transport: :tls, - tls_opts: [ - verify: :verify_peer, - cacertfile: CAStore.file_path(), - depth: 20, - reuse_sessions: false, - verify_fun: {&:ssl_verify_hostname.verify_fun/3, [check_hostname: format_host(host)]}, - log_level: :warning - ] - ] - - Keyword.merge(opts, adapter_opts) + defp add_scheme_opts(opts, %URI{scheme: "https"}) do + opts + |> Keyword.put(:certificates_verification, true) + |> Keyword.put(:transport, :tls) + |> Keyword.put(:tls_opts, log_level: :warning) end defp maybe_get_conn(adapter_opts, uri, connection_opts) do @@ -93,17 +83,4 @@ defp try_to_get_conn(uri, opts) do |> Keyword.put(:close_conn, false) end end - - @spec format_host(String.t()) :: charlist() - def format_host(host) do - host_charlist = to_charlist(host) - - case :inet.parse_address(host_charlist) do - {:error, :einval} -> - :idna.encode(host_charlist) - - {:ok, _ip} -> - host_charlist - end - end end diff --git a/lib/pleroma/http/connection.ex b/lib/pleroma/http/connection.ex index 777e5d4c8..0fc88f708 100644 --- a/lib/pleroma/http/connection.ex +++ b/lib/pleroma/http/connection.ex @@ -106,4 +106,17 @@ def parse_host(host) when is_binary(host) do {:ok, ip} -> ip end end + + @spec format_host(String.t()) :: charlist() + def format_host(host) do + host_charlist = to_charlist(host) + + case :inet.parse_address(host_charlist) do + {:error, :einval} -> + :idna.encode(host_charlist) + + {:ok, _ip} -> + host_charlist + end + end end diff --git a/test/http/adapter_helper/gun_test.exs b/test/http/adapter_helper/gun_test.exs index 66622b605..6af8be15d 100644 --- a/test/http/adapter_helper/gun_test.exs +++ b/test/http/adapter_helper/gun_test.exs @@ -38,31 +38,23 @@ test "https url with default port" do opts = Gun.options([receive_conn: false], uri) assert opts[:certificates_verification] - refute opts[:tls_opts] == [] - - assert opts[:tls_opts][:verify_fun] == - {&:ssl_verify_hostname.verify_fun/3, [check_hostname: 'example.com']} - - assert File.exists?(opts[:tls_opts][:cacertfile]) + assert opts[:tls_opts][:log_level] == :warning end test "https ipv4 with default port" do uri = URI.parse("https://127.0.0.1") opts = Gun.options([receive_conn: false], uri) - - assert opts[:tls_opts][:verify_fun] == - {&:ssl_verify_hostname.verify_fun/3, [check_hostname: '127.0.0.1']} + assert opts[:certificates_verification] + assert opts[:tls_opts][:log_level] == :warning end test "https ipv6 with default port" do uri = URI.parse("https://[2a03:2880:f10c:83:face:b00c:0:25de]") opts = Gun.options([receive_conn: false], uri) - - assert opts[:tls_opts][:verify_fun] == - {&:ssl_verify_hostname.verify_fun/3, - [check_hostname: '2a03:2880:f10c:83:face:b00c:0:25de']} + assert opts[:certificates_verification] + assert opts[:tls_opts][:log_level] == :warning end test "https url with non standart port" do @@ -269,23 +261,4 @@ test "with ipv6" do } = Connections.get_state(:gun_connections) end end - - describe "format_host/1" do - test "with domain" do - assert Gun.format_host("example.com") == 'example.com' - end - - test "with idna domain" do - assert Gun.format_host("ですexample.com") == 'xn--example-183fne.com' - end - - test "with ipv4" do - assert Gun.format_host("127.0.0.1") == '127.0.0.1' - end - - test "with ipv6" do - assert Gun.format_host("2a03:2880:f10c:83:face:b00c:0:25de") == - '2a03:2880:f10c:83:face:b00c:0:25de' - end - end end diff --git a/test/http/connection_test.exs b/test/http/connection_test.exs index 25a2bac1c..0f62eddd2 100644 --- a/test/http/connection_test.exs +++ b/test/http/connection_test.exs @@ -113,4 +113,23 @@ test "passed opts have more weight than defaults" do assert opts[:proxy] == {'example.com', 4321} end end + + describe "format_host/1" do + test "with domain" do + assert Connection.format_host("example.com") == 'example.com' + end + + test "with idna domain" do + assert Connection.format_host("ですexample.com") == 'xn--example-183fne.com' + end + + test "with ipv4" do + assert Connection.format_host("127.0.0.1") == '127.0.0.1' + end + + test "with ipv6" do + assert Connection.format_host("2a03:2880:f10c:83:face:b00c:0:25de") == + '2a03:2880:f10c:83:face:b00c:0:25de' + end + end end From 863ec33ba2a90708d199f18683ffe0c4658c710a Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Wed, 11 Mar 2020 12:21:44 +0100 Subject: [PATCH 097/581] Add support for funkwhale Audio activity reel2bits fixture not included as it lacks the Actor fixture for it. Closes: https://git.pleroma.social/pleroma/pleroma/issues/1624 Closes: https://git.pleroma.social/pleroma/pleroma/issues/764 --- .../web/activity_pub/transmogrifier.ex | 5 ++- .../web/mastodon_api/views/status_view.ex | 2 +- test/fixtures/tesla_mock/funkwhale_audio.json | 44 +++++++++++++++++++ .../tesla_mock/funkwhale_channel.json | 44 +++++++++++++++++++ test/support/http_request_mock.ex | 15 +++++++ .../mastodon_api/views/status_view_test.exs | 16 +++++++ test/web/oauth/oauth_controller_test.exs | 2 +- 7 files changed, 124 insertions(+), 4 deletions(-) create mode 100644 test/fixtures/tesla_mock/funkwhale_audio.json create mode 100644 test/fixtures/tesla_mock/funkwhale_channel.json diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 9cd3de705..f52b065f6 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -229,7 +229,8 @@ def fix_url(%{"url" => url} = object) when is_map(url) do Map.put(object, "url", url["href"]) end - def fix_url(%{"type" => "Video", "url" => url} = object) when is_list(url) do + def fix_url(%{"type" => object_type, "url" => url} = object) + when object_type in ["Video", "Audio"] and is_list(url) do first_element = Enum.at(url, 0) link_element = Enum.find(url, fn x -> is_map(x) and x["mimeType"] == "text/html" end) @@ -398,7 +399,7 @@ def handle_incoming( %{"type" => "Create", "object" => %{"type" => objtype} = object} = data, options ) - when objtype in ["Article", "Event", "Note", "Video", "Page", "Question", "Answer"] do + when objtype in ["Article", "Event", "Note", "Video", "Page", "Question", "Answer", "Audio"] do actor = Containment.get_actor(data) data = diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index f7469cdff..a042075f5 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -421,7 +421,7 @@ def get_reply_to(%{data: %{"object" => _object}} = activity, _) do end def render_content(%{data: %{"type" => object_type}} = object) - when object_type in ["Video", "Event"] do + when object_type in ["Video", "Event", "Audio"] do with name when not is_nil(name) and name != "" <- object.data["name"] do "

#{name}

#{object.data["content"]}" else diff --git a/test/fixtures/tesla_mock/funkwhale_audio.json b/test/fixtures/tesla_mock/funkwhale_audio.json new file mode 100644 index 000000000..15736b1f8 --- /dev/null +++ b/test/fixtures/tesla_mock/funkwhale_audio.json @@ -0,0 +1,44 @@ +{ + "id": "https://channels.tests.funkwhale.audio/federation/music/uploads/42342395-0208-4fee-a38d-259a6dae0871", + "type": "Audio", + "name": "Compositions - Test Audio for Pleroma", + "attributedTo": "https://channels.tests.funkwhale.audio/federation/actors/compositions", + "published": "2020-03-11T10:01:52.714918+00:00", + "to": "https://www.w3.org/ns/activitystreams#Public", + "url": [ + { + "type": "Link", + "mimeType": "audio/ogg", + "href": "https://channels.tests.funkwhale.audio/api/v1/listen/3901e5d8-0445-49d5-9711-e096cf32e515/?upload=42342395-0208-4fee-a38d-259a6dae0871&download=false" + }, + { + "type": "Link", + "mimeType": "text/html", + "href": "https://channels.tests.funkwhale.audio/library/tracks/74" + } + ], + "content": "

This is a test Audio for Pleroma.

", + "mediaType": "text/html", + "tag": [ + { + "type": "Hashtag", + "name": "#funkwhale" + }, + { + "type": "Hashtag", + "name": "#test" + }, + { + "type": "Hashtag", + "name": "#tests" + } + ], + "summary": "#funkwhale #test #tests", + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + { + "manuallyApprovesFollowers": "as:manuallyApprovesFollowers" + } + ] +} diff --git a/test/fixtures/tesla_mock/funkwhale_channel.json b/test/fixtures/tesla_mock/funkwhale_channel.json new file mode 100644 index 000000000..cf9ee8151 --- /dev/null +++ b/test/fixtures/tesla_mock/funkwhale_channel.json @@ -0,0 +1,44 @@ +{ + "id": "https://channels.tests.funkwhale.audio/federation/actors/compositions", + "outbox": "https://channels.tests.funkwhale.audio/federation/actors/compositions/outbox", + "inbox": "https://channels.tests.funkwhale.audio/federation/actors/compositions/inbox", + "preferredUsername": "compositions", + "type": "Person", + "name": "Compositions", + "followers": "https://channels.tests.funkwhale.audio/federation/actors/compositions/followers", + "following": "https://channels.tests.funkwhale.audio/federation/actors/compositions/following", + "manuallyApprovesFollowers": false, + "url": [ + { + "type": "Link", + "href": "https://channels.tests.funkwhale.audio/channels/compositions", + "mediaType": "text/html" + }, + { + "type": "Link", + "href": "https://channels.tests.funkwhale.audio/api/v1/channels/compositions/rss", + "mediaType": "application/rss+xml" + } + ], + "icon": { + "type": "Image", + "url": "https://channels.tests.funkwhale.audio/media/attachments/75/b4/f1/nosmile.jpeg", + "mediaType": "image/jpeg" + }, + "summary": "

I'm testing federation with the fediverse :)

", + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + { + "manuallyApprovesFollowers": "as:manuallyApprovesFollowers" + } + ], + "publicKey": { + "owner": "https://channels.tests.funkwhale.audio/federation/actors/compositions", + "publicKeyPem": "-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEAv25u57oZfVLV3KltS+HcsdSx9Op4MmzIes1J8Wu8s0KbdXf2zEwS\nsVqyHgs/XCbnzsR3FqyJTo46D2BVnvZcuU5srNcR2I2HMaqQ0oVdnATE4K6KdcgV\nN+98pMWo56B8LTgE1VpvqbsrXLi9jCTzjrkebVMOP+ZVu+64v1qdgddseblYMnBZ\nct0s7ONbHnqrWlTGf5wES1uIZTVdn5r4MduZG+Uenfi1opBS0lUUxfWdW9r0oF2b\nyneZUyaUCbEroeKbqsweXCWVgnMarUOsgqC42KM4cf95lySSwTSaUtZYIbTw7s9W\n2jveU/rVg8BYZu5JK5obgBoxtlUeUoSswwIDAQAB\n-----END RSA PUBLIC KEY-----\n", + "id": "https://channels.tests.funkwhale.audio/federation/actors/compositions#main-key" + }, + "endpoints": { + "sharedInbox": "https://channels.tests.funkwhale.audio/federation/shared/inbox" + } +} diff --git a/test/support/http_request_mock.ex b/test/support/http_request_mock.ex index d46887865..0079d8c44 100644 --- a/test/support/http_request_mock.ex +++ b/test/support/http_request_mock.ex @@ -1273,6 +1273,21 @@ def get("https://patch.cx/users/rin", _, _, _) do {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/rin.json")}} end + def get( + "https://channels.tests.funkwhale.audio/federation/music/uploads/42342395-0208-4fee-a38d-259a6dae0871", + _, + _, + _ + ) do + {:ok, + %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/funkwhale_audio.json")}} + end + + def get("https://channels.tests.funkwhale.audio/federation/actors/compositions", _, _, _) do + {:ok, + %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/funkwhale_channel.json")}} + end + def get("http://example.com/rel_me/error", _, _, _) do {:ok, %Tesla.Env{status: 404, body: ""}} end diff --git a/test/web/mastodon_api/views/status_view_test.exs b/test/web/mastodon_api/views/status_view_test.exs index 191895c6f..3e1812a1f 100644 --- a/test/web/mastodon_api/views/status_view_test.exs +++ b/test/web/mastodon_api/views/status_view_test.exs @@ -420,6 +420,22 @@ test "a peertube video" do assert length(represented[:media_attachments]) == 1 end + test "funkwhale audio" do + user = insert(:user) + + {:ok, object} = + Pleroma.Object.Fetcher.fetch_object_from_id( + "https://channels.tests.funkwhale.audio/federation/music/uploads/42342395-0208-4fee-a38d-259a6dae0871" + ) + + %Activity{} = activity = Activity.get_create_by_object_ap_id(object.data["id"]) + + represented = StatusView.render("show.json", %{for: user, activity: activity}) + + assert represented[:id] == to_string(activity.id) + assert length(represented[:media_attachments]) == 1 + end + test "a Mobilizon event" do user = insert(:user) diff --git a/test/web/oauth/oauth_controller_test.exs b/test/web/oauth/oauth_controller_test.exs index cff469c28..5f86d999c 100644 --- a/test/web/oauth/oauth_controller_test.exs +++ b/test/web/oauth/oauth_controller_test.exs @@ -581,7 +581,7 @@ test "redirects with oauth authorization, " <> # In case scope param is missing, expecting _all_ app-supported scopes to be granted for user <- [non_admin, admin], {requested_scopes, expected_scopes} <- - %{scopes_subset => scopes_subset, nil => app_scopes} do + %{scopes_subset => scopes_subset, nil: app_scopes} do conn = post( build_conn(), From 1306b92997dc6e76e5d617d529dbc229d5aee200 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 12 Mar 2020 18:28:54 +0300 Subject: [PATCH 098/581] clean up --- lib/pleroma/application.ex | 18 +++-- lib/pleroma/config/transfer_task.ex | 42 +++++------ lib/pleroma/gun/conn.ex | 31 ++++----- lib/pleroma/http/adapter_helper.ex | 2 +- lib/pleroma/http/adapter_helper/gun.ex | 33 ++++----- lib/pleroma/http/connection.ex | 8 +-- lib/pleroma/http/http.ex | 5 +- lib/pleroma/pool/connections.ex | 96 +++++++++----------------- test/http/adapter_helper/gun_test.exs | 12 ++-- test/pool/connections_test.exs | 2 +- 10 files changed, 94 insertions(+), 155 deletions(-) diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index c8a0617a5..55b5be488 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -42,7 +42,9 @@ def start(_type, _args) do setup_instrumenters() load_custom_modules() - if adapter() == Tesla.Adapter.Gun do + adapter = Application.get_env(:tesla, :adapter) + + if adapter == Tesla.Adapter.Gun do if version = Pleroma.OTPVersion.version() do [major, minor] = version @@ -74,7 +76,7 @@ def start(_type, _args) do Pleroma.Plugs.RateLimiter.Supervisor ] ++ cachex_children() ++ - http_pools_children(Config.get(:env)) ++ + http_children(adapter, @env) ++ [ Pleroma.Stats, Pleroma.JobQueueMonitor, @@ -206,15 +208,13 @@ defp task_children(_) do end # start hackney and gun pools in tests - defp http_pools_children(:test) do + defp http_children(_, :test) do hackney_options = Config.get([:hackney_pools, :federation]) hackney_pool = :hackney_pool.child_spec(:federation, hackney_options) [hackney_pool, Pleroma.Pool.Supervisor] end - defp http_pools_children(_), do: http_pools(adapter()) - - defp http_pools(Tesla.Adapter.Hackney) do + defp http_children(Tesla.Adapter.Hackney, _) do pools = [:federation, :media] pools = @@ -230,9 +230,7 @@ defp http_pools(Tesla.Adapter.Hackney) do end end - defp http_pools(Tesla.Adapter.Gun), do: [Pleroma.Pool.Supervisor] + defp http_children(Tesla.Adapter.Gun, _), do: [Pleroma.Pool.Supervisor] - defp http_pools(_), do: [] - - defp adapter, do: Application.get_env(:tesla, :adapter) + defp http_children(_, _), do: [] end diff --git a/lib/pleroma/config/transfer_task.ex b/lib/pleroma/config/transfer_task.ex index 4a4c022f0..b6d80adb7 100644 --- a/lib/pleroma/config/transfer_task.ex +++ b/lib/pleroma/config/transfer_task.ex @@ -5,6 +5,7 @@ defmodule Pleroma.Config.TransferTask do use Task + alias Pleroma.Config alias Pleroma.ConfigDB alias Pleroma.Repo @@ -36,36 +37,31 @@ defmodule Pleroma.Config.TransferTask do def start_link(_) do load_and_update_env() - if Pleroma.Config.get(:env) == :test, do: Ecto.Adapters.SQL.Sandbox.checkin(Repo) + if Config.get(:env) == :test, do: Ecto.Adapters.SQL.Sandbox.checkin(Repo) :ignore end - @spec load_and_update_env([ConfigDB.t()]) :: :ok | false - def load_and_update_env(deleted \\ [], restart_pleroma? \\ true) do - with {_, true} <- {:configurable, Pleroma.Config.get(:configurable_from_database)} do + @spec load_and_update_env([ConfigDB.t()], boolean()) :: :ok + def load_and_update_env(deleted_settings \\ [], restart_pleroma? \\ true) do + with {_, true} <- {:configurable, Config.get(:configurable_from_database)} do # We need to restart applications for loaded settings take effect - in_db = Repo.all(ConfigDB) - - with_deleted = in_db ++ deleted # TODO: some problem with prometheus after restart! - reject = [nil, :prometheus] - - reject_for_restart = + reject_restart = if restart_pleroma? do - reject + [nil, :prometheus] else - [:pleroma | reject] + [:pleroma, nil, :prometheus] end started_applications = Application.started_applications() - with_deleted - |> Enum.map(&merge_and_update(&1)) + (Repo.all(ConfigDB) ++ deleted_settings) + |> Enum.map(&merge_and_update/1) |> Enum.uniq() - |> Enum.reject(&(&1 in reject_for_restart)) + |> Enum.reject(&(&1 in reject_restart)) |> maybe_set_pleroma_last() - |> Enum.each(&restart(started_applications, &1, Pleroma.Config.get(:env))) + |> Enum.each(&restart(started_applications, &1, Config.get(:env))) :ok else @@ -108,18 +104,14 @@ defp merge_and_update(setting) do key = ConfigDB.from_string(setting.key) group = ConfigDB.from_string(setting.group) - default = Pleroma.Config.Holder.config(group, key) + default = Config.Holder.config(group, key) value = ConfigDB.from_binary(setting.value) merged_value = - if Ecto.get_meta(setting, :state) == :deleted do - default - else - if can_be_merged?(default, value) do - ConfigDB.merge_group(group, key, default, value) - else - value - end + cond do + Ecto.get_meta(setting, :state) == :deleted -> default + can_be_merged?(default, value) -> ConfigDB.merge_group(group, key, default, value) + true -> value end :ok = update_env(group, key, merged_value) diff --git a/lib/pleroma/gun/conn.ex b/lib/pleroma/gun/conn.ex index 57a847c30..20823a765 100644 --- a/lib/pleroma/gun/conn.ex +++ b/lib/pleroma/gun/conn.ex @@ -49,8 +49,6 @@ def open(%URI{} = uri, name, opts) do key = "#{uri.scheme}:#{uri.host}:#{uri.port}" - Logger.debug("opening new connection #{Connections.compose_uri_log(uri)}") - conn_pid = if Connections.count(name) < opts[:max_connection] do do_open(uri, opts) @@ -109,9 +107,9 @@ defp do_open(uri, %{proxy: {proxy_host, proxy_port}} = opts) do else error -> Logger.warn( - "Received error on opening connection with http proxy #{ - Connections.compose_uri_log(uri) - } #{inspect(error)}" + "Opening proxied connection to #{compose_uri_log(uri)} failed with error #{ + inspect(error) + }" ) error @@ -145,9 +143,9 @@ defp do_open(uri, %{proxy: {proxy_type, proxy_host, proxy_port}} = opts) do else error -> Logger.warn( - "Received error on opening connection with socks proxy #{ - Connections.compose_uri_log(uri) - } #{inspect(error)}" + "Opening socks proxied connection to #{compose_uri_log(uri)} failed with error #{ + inspect(error) + }" ) error @@ -163,9 +161,7 @@ defp do_open(%URI{host: host, port: port} = uri, opts) do else error -> Logger.warn( - "Received error on opening connection #{Connections.compose_uri_log(uri)} #{ - inspect(error) - }" + "Opening connection to #{compose_uri_log(uri)} failed with error #{inspect(error)}" ) error @@ -184,16 +180,17 @@ defp add_http2_opts(opts, "https", tls_opts) do defp add_http2_opts(opts, _, _), do: opts defp close_least_used_and_do_open(name, uri, opts) do - Logger.debug("try to open conn #{Connections.compose_uri_log(uri)}") - - with [{close_key, least_used} | _conns] <- - Connections.get_unused_conns(name), - :ok <- Gun.close(least_used.conn) do - Connections.remove_conn(name, close_key) + with [{key, conn} | _conns] <- Connections.get_unused_conns(name), + :ok <- Gun.close(conn.conn) do + Connections.remove_conn(name, key) do_open(uri, opts) else [] -> {:error, :pool_overflowed} end end + + def compose_uri_log(%URI{scheme: scheme, host: host, path: path}) do + "#{scheme}://#{host}#{path}" + end end diff --git a/lib/pleroma/http/adapter_helper.ex b/lib/pleroma/http/adapter_helper.ex index 2c13666ec..510722ff9 100644 --- a/lib/pleroma/http/adapter_helper.ex +++ b/lib/pleroma/http/adapter_helper.ex @@ -7,7 +7,7 @@ defmodule Pleroma.HTTP.AdapterHelper do @type proxy :: {Connection.host(), pos_integer()} - | {Connection.proxy_type(), pos_integer()} + | {Connection.proxy_type(), Connection.host(), pos_integer()} @callback options(keyword(), URI.t()) :: keyword() @callback after_request(keyword()) :: :ok diff --git a/lib/pleroma/http/adapter_helper/gun.ex b/lib/pleroma/http/adapter_helper/gun.ex index 55c2b192a..f14b95c19 100644 --- a/lib/pleroma/http/adapter_helper/gun.ex +++ b/lib/pleroma/http/adapter_helper/gun.ex @@ -20,8 +20,8 @@ defmodule Pleroma.HTTP.AdapterHelper.Gun do ] @spec options(keyword(), URI.t()) :: keyword() - def options(connection_opts \\ [], %URI{} = uri) do - formatted_proxy = + def options(incoming_opts \\ [], %URI{} = uri) do + proxy = Pleroma.Config.get([:http, :proxy_url], nil) |> AdapterHelper.format_proxy() @@ -30,8 +30,8 @@ def options(connection_opts \\ [], %URI{} = uri) do @defaults |> Keyword.merge(config_opts) |> add_scheme_opts(uri) - |> AdapterHelper.maybe_add_proxy(formatted_proxy) - |> maybe_get_conn(uri, connection_opts) + |> AdapterHelper.maybe_add_proxy(proxy) + |> maybe_get_conn(uri, incoming_opts) end @spec after_request(keyword()) :: :ok @@ -43,44 +43,35 @@ def after_request(opts) do :ok end - defp add_scheme_opts(opts, %URI{scheme: "http"}), do: opts + defp add_scheme_opts(opts, %{scheme: "http"}), do: opts - defp add_scheme_opts(opts, %URI{scheme: "https"}) do + defp add_scheme_opts(opts, %{scheme: "https"}) do opts |> Keyword.put(:certificates_verification, true) - |> Keyword.put(:transport, :tls) |> Keyword.put(:tls_opts, log_level: :warning) end - defp maybe_get_conn(adapter_opts, uri, connection_opts) do + defp maybe_get_conn(adapter_opts, uri, incoming_opts) do {receive_conn?, opts} = adapter_opts - |> Keyword.merge(connection_opts) + |> Keyword.merge(incoming_opts) |> Keyword.pop(:receive_conn, true) if Connections.alive?(:gun_connections) and receive_conn? do - try_to_get_conn(uri, opts) + checkin_conn(uri, opts) else opts end end - defp try_to_get_conn(uri, opts) do + defp checkin_conn(uri, opts) do case Connections.checkin(uri, :gun_connections) do nil -> - Logger.debug( - "Gun connections pool checkin was not successful. Trying to open conn for next request." - ) - - Task.start(fn -> Pleroma.Gun.Conn.open(uri, :gun_connections, opts) end) + Task.start(Pleroma.Gun.Conn, :open, [uri, :gun_connections, opts]) opts conn when is_pid(conn) -> - Logger.debug("received conn #{inspect(conn)} #{Connections.compose_uri_log(uri)}") - - opts - |> Keyword.put(:conn, conn) - |> Keyword.put(:close_conn, false) + Keyword.merge(opts, conn: conn, close_conn: false) end end end diff --git a/lib/pleroma/http/connection.ex b/lib/pleroma/http/connection.ex index 0fc88f708..76de3fcfe 100644 --- a/lib/pleroma/http/connection.ex +++ b/lib/pleroma/http/connection.ex @@ -71,15 +71,15 @@ def parse_proxy(proxy) when is_binary(proxy) do {:ok, parse_host(host), port} else {_, _} -> - Logger.warn("parsing port in proxy fail #{inspect(proxy)}") + Logger.warn("Parsing port failed #{inspect(proxy)}") {:error, :invalid_proxy_port} :error -> - Logger.warn("parsing port in proxy fail #{inspect(proxy)}") + Logger.warn("Parsing port failed #{inspect(proxy)}") {:error, :invalid_proxy_port} _ -> - Logger.warn("parsing proxy fail #{inspect(proxy)}") + Logger.warn("Parsing proxy failed #{inspect(proxy)}") {:error, :invalid_proxy} end end @@ -89,7 +89,7 @@ def parse_proxy(proxy) when is_tuple(proxy) do {:ok, type, parse_host(host), port} else _ -> - Logger.warn("parsing proxy fail #{inspect(proxy)}") + Logger.warn("Parsing proxy failed #{inspect(proxy)}") {:error, :invalid_proxy} end end diff --git a/lib/pleroma/http/http.ex b/lib/pleroma/http/http.ex index 466a94adc..583b56484 100644 --- a/lib/pleroma/http/http.ex +++ b/lib/pleroma/http/http.ex @@ -56,10 +56,9 @@ def post(url, body, headers \\ [], options \\ []), {:ok, Env.t()} | {:error, any()} def request(method, url, body, headers, options) when is_binary(url) do uri = URI.parse(url) - received_adapter_opts = Keyword.get(options, :adapter, []) - adapter_opts = Connection.options(uri, received_adapter_opts) + adapter_opts = Connection.options(uri, options[:adapter] || []) options = put_in(options[:adapter], adapter_opts) - params = Keyword.get(options, :params, []) + params = options[:params] || [] request = build_request(method, headers, options, url, body, params) adapter = Application.get_env(:tesla, :adapter) diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index 7529e9240..772833509 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -87,18 +87,11 @@ def handle_cast({:add_conn, key, conn}, state) do @impl true def handle_cast({:checkout, conn_pid, pid}, state) do - Logger.debug("checkout #{inspect(conn_pid)}") - state = with true <- Process.alive?(conn_pid), {key, conn} <- find_conn(state.conns, conn_pid), used_by <- List.keydelete(conn.used_by, pid, 0) do - conn_state = - if used_by == [] do - :idle - else - conn.conn_state - end + conn_state = if used_by == [], do: :idle, else: conn.conn_state put_in(state.conns[key], %{conn | conn_state: conn_state, used_by: used_by}) else @@ -123,26 +116,23 @@ def handle_cast({:remove_conn, key}, state) do @impl true def handle_call({:checkin, uri}, from, state) do key = "#{uri.scheme}:#{uri.host}:#{uri.port}" - Logger.debug("checkin #{key}") case state.conns[key] do - %{conn: conn, gun_state: :up} = current_conn -> - Logger.debug("reusing conn #{key}") - + %{conn: pid, gun_state: :up} = conn -> time = :os.system_time(:second) - last_reference = time - current_conn.last_reference - current_crf = crf(last_reference, 100, current_conn.crf) + last_reference = time - conn.last_reference + crf = crf(last_reference, 100, conn.crf) state = put_in(state.conns[key], %{ - current_conn + conn | last_reference: time, - crf: current_crf, + crf: crf, conn_state: :active, - used_by: [from | current_conn.used_by] + used_by: [from | conn.used_by] }) - {:reply, conn, state} + {:reply, pid, state} %{gun_state: :down} -> {:reply, nil, state} @@ -164,50 +154,48 @@ def handle_call(:count, _from, state) do def handle_call(:unused_conns, _from, state) do unused_conns = state.conns - |> Enum.filter(fn {_k, v} -> - v.conn_state == :idle and v.used_by == [] - end) - |> Enum.sort(fn {_x_k, x}, {_y_k, y} -> - x.crf <= y.crf and x.last_reference <= y.last_reference - end) + |> Enum.filter(&filter_conns/1) + |> Enum.sort(&sort_conns/2) {:reply, unused_conns, state} end + defp filter_conns({_, %{conn_state: :idle, used_by: []}}), do: true + defp filter_conns(_), do: false + + defp sort_conns({_, c1}, {_, c2}) do + c1.crf <= c2.crf and c1.last_reference <= c2.last_reference + end + @impl true def handle_info({:gun_up, conn_pid, _protocol}, state) do - state = - with conn_key when is_binary(conn_key) <- compose_key_gun_info(conn_pid), - {key, conn} <- find_conn(state.conns, conn_pid, conn_key), - {true, key} <- {Process.alive?(conn_pid), key} do - time = :os.system_time(:second) - last_reference = time - conn.last_reference - current_crf = crf(last_reference, 100, conn.crf) + %{origin_host: host, origin_scheme: scheme, origin_port: port} = Gun.info(conn_pid) + host = + case :inet.ntoa(host) do + {:error, :einval} -> host + ip -> ip + end + + key = "#{scheme}:#{host}:#{port}" + + state = + with {_key, conn} <- find_conn(state.conns, conn_pid, key), + {true, key} <- {Process.alive?(conn_pid), key} do put_in(state.conns[key], %{ conn | gun_state: :up, - last_reference: time, - crf: current_crf, conn_state: :active, retries: 0 }) else - :error_gun_info -> - Logger.debug(":gun.info caused error") - state - {false, key} -> - Logger.debug(":gun_up message for closed conn #{inspect(conn_pid)}") - put_in( state.conns, Map.delete(state.conns, key) ) nil -> - Logger.debug(":gun_up message for conn which is not found in state") - :ok = Gun.close(conn_pid) state @@ -224,7 +212,6 @@ def handle_info({:gun_down, conn_pid, _protocol, _reason, _killed}, state) do with {key, conn} <- find_conn(state.conns, conn_pid), {true, key} <- {Process.alive?(conn_pid), key} do if conn.retries == retries do - Logger.debug("closing conn if retries is eq #{inspect(conn_pid)}") :ok = Gun.close(conn.conn) put_in( @@ -240,18 +227,13 @@ def handle_info({:gun_down, conn_pid, _protocol, _reason, _killed}, state) do end else {false, key} -> - # gun can send gun_down for closed conn, maybe connection is not closed yet - Logger.debug(":gun_down message for closed conn #{inspect(conn_pid)}") - put_in( state.conns, Map.delete(state.conns, key) ) nil -> - Logger.debug(":gun_down message for conn which is not found in state") - - :ok = Gun.close(conn_pid) + Logger.debug(":gun_down for conn which isn't found in state") state end @@ -275,7 +257,7 @@ def handle_info({:DOWN, _ref, :process, conn_pid, reason}, state) do ) else nil -> - Logger.debug(":DOWN message for conn which is not found in state") + Logger.debug(":DOWN for conn which isn't found in state") state end @@ -283,18 +265,6 @@ def handle_info({:DOWN, _ref, :process, conn_pid, reason}, state) do {:noreply, state} end - defp compose_key_gun_info(pid) do - %{origin_host: origin_host, origin_scheme: scheme, origin_port: port} = Gun.info(pid) - - host = - case :inet.ntoa(origin_host) do - {:error, :einval} -> origin_host - ip -> ip - end - - "#{scheme}:#{host}:#{port}" - end - defp find_conn(conns, conn_pid) do Enum.find(conns, fn {_key, conn} -> conn.conn == conn_pid @@ -310,8 +280,4 @@ defp find_conn(conns, conn_pid, conn_key) do def crf(current, steps, crf) do 1 + :math.pow(0.5, current / steps) * crf end - - def compose_uri_log(%URI{scheme: scheme, host: host, path: path}) do - "#{scheme}://#{host}#{path}" - end end diff --git a/test/http/adapter_helper/gun_test.exs b/test/http/adapter_helper/gun_test.exs index 6af8be15d..18025b986 100644 --- a/test/http/adapter_helper/gun_test.exs +++ b/test/http/adapter_helper/gun_test.exs @@ -6,7 +6,6 @@ defmodule Pleroma.HTTP.AdapterHelper.GunTest do use ExUnit.Case, async: true use Pleroma.Tests.Helpers - import ExUnit.CaptureLog import Mox alias Pleroma.Config @@ -63,7 +62,6 @@ test "https url with non standart port" do opts = Gun.options([receive_conn: false], uri) assert opts[:certificates_verification] - assert opts[:transport] == :tls end test "get conn on next request" do @@ -73,14 +71,12 @@ test "get conn on next request" do on_exit(fn -> Logger.configure(level: level) end) uri = URI.parse("http://some-domain2.com") - assert capture_log(fn -> - opts = Gun.options(uri) + opts = Gun.options(uri) - assert opts[:conn] == nil - assert opts[:close_conn] == nil - end) =~ - "Gun connections pool checkin was not successful. Trying to open conn for next request." + assert opts[:conn] == nil + assert opts[:close_conn] == nil + Process.sleep(50) opts = Gun.options(uri) assert is_pid(opts[:conn]) diff --git a/test/pool/connections_test.exs b/test/pool/connections_test.exs index 06f32b74e..aeda54875 100644 --- a/test/pool/connections_test.exs +++ b/test/pool/connections_test.exs @@ -355,7 +355,7 @@ test "connection can't get up", %{name: name} do refute Conn.open(url, name) refute Connections.checkin(url, name) end) =~ - "Received error on opening connection http://gun-not-up.com {:error, :timeout}" + "Opening connection to http://gun-not-up.com failed with error {:error, :timeout}" end test "process gun_down message and then gun_up", %{name: name} do From 98ed0d1c4bd2db354154cc4a1d1e6530eb68f499 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 13 Mar 2020 09:37:57 +0300 Subject: [PATCH 099/581] more clean up --- lib/pleroma/http/adapter_helper/gun.ex | 2 +- lib/pleroma/http/adapter_helper/hackney.ex | 2 +- lib/pleroma/http/connection.ex | 12 +++++++----- lib/pleroma/pool/request.ex | 1 - lib/pleroma/pool/supervisor.ex | 15 ++++++--------- lib/pleroma/reverse_proxy/client/tesla.ex | 9 +++++---- lib/pleroma/reverse_proxy/reverse_proxy.ex | 2 +- 7 files changed, 21 insertions(+), 22 deletions(-) diff --git a/lib/pleroma/http/adapter_helper/gun.ex b/lib/pleroma/http/adapter_helper/gun.ex index f14b95c19..ead7cdc6b 100644 --- a/lib/pleroma/http/adapter_helper/gun.ex +++ b/lib/pleroma/http/adapter_helper/gun.ex @@ -22,7 +22,7 @@ defmodule Pleroma.HTTP.AdapterHelper.Gun do @spec options(keyword(), URI.t()) :: keyword() def options(incoming_opts \\ [], %URI{} = uri) do proxy = - Pleroma.Config.get([:http, :proxy_url], nil) + Pleroma.Config.get([:http, :proxy_url]) |> AdapterHelper.format_proxy() config_opts = Pleroma.Config.get([:http, :adapter], []) diff --git a/lib/pleroma/http/adapter_helper/hackney.ex b/lib/pleroma/http/adapter_helper/hackney.ex index d08afae0c..dcb4cac71 100644 --- a/lib/pleroma/http/adapter_helper/hackney.ex +++ b/lib/pleroma/http/adapter_helper/hackney.ex @@ -11,7 +11,7 @@ defmodule Pleroma.HTTP.AdapterHelper.Hackney do @spec options(keyword(), URI.t()) :: keyword() def options(connection_opts \\ [], %URI{} = uri) do - proxy = Pleroma.Config.get([:http, :proxy_url], nil) + proxy = Pleroma.Config.get([:http, :proxy_url]) config_opts = Pleroma.Config.get([:http, :adapter], []) diff --git a/lib/pleroma/http/connection.ex b/lib/pleroma/http/connection.ex index 76de3fcfe..ebacf7902 100644 --- a/lib/pleroma/http/connection.ex +++ b/lib/pleroma/http/connection.ex @@ -30,12 +30,12 @@ def options(%URI{} = uri, opts \\ []) do @defaults |> pool_timeout() |> Keyword.merge(opts) - |> adapter().options(uri) + |> adapter_helper().options(uri) end defp pool_timeout(opts) do {config_key, default} = - if Application.get_env(:tesla, :adapter) == Tesla.Adapter.Gun do + if adapter() == Tesla.Adapter.Gun do {:pools, Config.get([:pools, :default, :timeout])} else {:hackney_pools, 10_000} @@ -47,10 +47,12 @@ defp pool_timeout(opts) do end @spec after_request(keyword()) :: :ok - def after_request(opts), do: adapter().after_request(opts) + def after_request(opts), do: adapter_helper().after_request(opts) - defp adapter do - case Application.get_env(:tesla, :adapter) do + defp adapter, do: Application.get_env(:tesla, :adapter) + + defp adapter_helper do + case adapter() do Tesla.Adapter.Gun -> AdapterHelper.Gun Tesla.Adapter.Hackney -> AdapterHelper.Hackney _ -> AdapterHelper diff --git a/lib/pleroma/pool/request.ex b/lib/pleroma/pool/request.ex index db7c10c01..3fb930db7 100644 --- a/lib/pleroma/pool/request.ex +++ b/lib/pleroma/pool/request.ex @@ -39,7 +39,6 @@ def handle_info({:gun_up, _conn, _protocol}, state) do @impl true def handle_info({:gun_down, _conn, _protocol, _reason, _killed}, state) do - # don't flush messages here, because gun can reconnect {:noreply, state} end diff --git a/lib/pleroma/pool/supervisor.ex b/lib/pleroma/pool/supervisor.ex index 8dc5b64b7..faf646cb2 100644 --- a/lib/pleroma/pool/supervisor.ex +++ b/lib/pleroma/pool/supervisor.ex @@ -13,16 +13,13 @@ def start_link(args) do end def init(_) do - children = - [ - %{ - id: Pool.Connections, - start: - {Pool.Connections, :start_link, [{:gun_connections, Config.get([:connections_pool])}]} - } - ] ++ pools() + conns_child = %{ + id: Pool.Connections, + start: + {Pool.Connections, :start_link, [{:gun_connections, Config.get([:connections_pool])}]} + } - Supervisor.init(children, strategy: :one_for_one) + Supervisor.init([conns_child | pools()], strategy: :one_for_one) end defp pools do diff --git a/lib/pleroma/reverse_proxy/client/tesla.ex b/lib/pleroma/reverse_proxy/client/tesla.ex index dbc6b66a3..e81ea8bde 100644 --- a/lib/pleroma/reverse_proxy/client/tesla.ex +++ b/lib/pleroma/reverse_proxy/client/tesla.ex @@ -3,11 +3,11 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ReverseProxy.Client.Tesla do + @behaviour Pleroma.ReverseProxy.Client + @type headers() :: [{String.t(), String.t()}] @type status() :: pos_integer() - @behaviour Pleroma.ReverseProxy.Client - @spec request(atom(), String.t(), headers(), String.t(), keyword()) :: {:ok, status(), headers} | {:ok, status(), headers, map()} @@ -18,7 +18,7 @@ defmodule Pleroma.ReverseProxy.Client.Tesla do def request(method, url, headers, body, opts \\ []) do check_adapter() - opts = Keyword.merge(opts, body_as: :chunks) + opts = Keyword.put(opts, :body_as, :chunks) with {:ok, response} <- Pleroma.HTTP.request( @@ -39,7 +39,8 @@ def request(method, url, headers, body, opts \\ []) do end @impl true - @spec stream_body(map()) :: {:ok, binary(), map()} | {:error, atom() | String.t()} | :done + @spec stream_body(map()) :: + {:ok, binary(), map()} | {:error, atom() | String.t()} | :done | no_return() def stream_body(%{pid: pid, opts: opts, fin: true}) do # if connection was reused, but in tesla were redirects, # tesla returns new opened connection, which must be closed manually diff --git a/lib/pleroma/reverse_proxy/reverse_proxy.ex b/lib/pleroma/reverse_proxy/reverse_proxy.ex index 8f1aa3200..35b973b56 100644 --- a/lib/pleroma/reverse_proxy/reverse_proxy.ex +++ b/lib/pleroma/reverse_proxy/reverse_proxy.ex @@ -59,7 +59,7 @@ defmodule Pleroma.ReverseProxy do * `req_headers`, `resp_headers` additional headers. - * `http`: options for [gun](https://github.com/ninenines/gun). + * `http`: options for [hackney](https://github.com/benoitc/hackney) or [gun](https://github.com/ninenines/gun). """ @default_options [pool: :media] From 7c8003c3fcdcab075b9722ab236bf2d1d0e0e8cd Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Sun, 15 Mar 2020 21:00:12 +0300 Subject: [PATCH 100/581] [#1364] Improved control over generation / sending of notifications. Fixed blocking / muting users notifications issue. Added tests. --- lib/pleroma/activity.ex | 10 ++ lib/pleroma/notification.ex | 129 +++++++++++++----- lib/pleroma/thread_mute.ex | 37 ++++- lib/pleroma/user.ex | 50 +++++-- lib/pleroma/user_relationship.ex | 9 +- .../web/activity_pub/transmogrifier.ex | 8 +- test/notification_test.exs | 112 ++++++++++++++- 7 files changed, 292 insertions(+), 63 deletions(-) diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex index 6ca05f74e..bbaa561a7 100644 --- a/lib/pleroma/activity.ex +++ b/lib/pleroma/activity.ex @@ -95,6 +95,16 @@ def with_preloaded_object(query, join_type \\ :inner) do |> preload([activity, object: object], object: object) end + def user_actor(%Activity{actor: nil}), do: nil + + def user_actor(%Activity{} = activity) do + with %User{} <- activity.user_actor do + activity.user_actor + else + _ -> User.get_cached_by_ap_id(activity.actor) + end + end + def with_joined_user_actor(query, join_type \\ :inner) do join(query, join_type, [activity], u in User, on: u.ap_id == activity.actor, diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 60dba3434..0d7a6610a 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -10,6 +10,7 @@ defmodule Pleroma.Notification do alias Pleroma.Object alias Pleroma.Pagination alias Pleroma.Repo + alias Pleroma.ThreadMute alias Pleroma.User alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.Push @@ -17,6 +18,7 @@ defmodule Pleroma.Notification do import Ecto.Query import Ecto.Changeset + require Logger @type t :: %__MODULE__{} @@ -101,7 +103,7 @@ defp exclude_notification_muted(query, user, opts) do query |> where([n, a], a.actor not in ^notification_muted_ap_ids) - |> join(:left, [n, a], tm in Pleroma.ThreadMute, + |> join(:left, [n, a], tm in ThreadMute, on: tm.user_id == ^user.id and tm.context == fragment("?->>'context'", a.data) ) |> where([n, a, o, tm], is_nil(tm.user_id)) @@ -284,58 +286,108 @@ def dismiss(%{id: user_id} = _user, id) do def create_notifications(%Activity{data: %{"to" => _, "type" => "Create"}} = activity) do object = Object.normalize(activity) - unless object && object.data["type"] == "Answer" do - users = get_notified_from_activity(activity) - notifications = Enum.map(users, fn user -> create_notification(activity, user) end) - {:ok, notifications} - else + if object && object.data["type"] == "Answer" do {:ok, []} + else + do_create_notifications(activity) end end def create_notifications(%Activity{data: %{"type" => type}} = activity) when type in ["Like", "Announce", "Follow", "Move", "EmojiReact"] do - notifications = - activity - |> get_notified_from_activity() - |> Enum.map(&create_notification(activity, &1)) - - {:ok, notifications} + do_create_notifications(activity) end def create_notifications(_), do: {:ok, []} + defp do_create_notifications(%Activity{} = activity) do + {enabled_receivers, disabled_receivers} = get_notified_from_activity(activity) + potential_receivers = enabled_receivers ++ disabled_receivers + + notifications = + Enum.map(potential_receivers, fn user -> + do_send = user in enabled_receivers + create_notification(activity, user, do_send) + end) + + {:ok, notifications} + end + # TODO move to sql, too. - def create_notification(%Activity{} = activity, %User{} = user) do + def create_notification(%Activity{} = activity, %User{} = user, do_send \\ true) do unless skip?(activity, user) do notification = %Notification{user_id: user.id, activity: activity} {:ok, notification} = Repo.insert(notification) - ["user", "user:notification"] - |> Streamer.stream(notification) + if do_send do + Streamer.stream(["user", "user:notification"], notification) + Push.send(notification) + end - Push.send(notification) notification end end + @doc """ + Returns a tuple with 2 elements: + {enabled notification receivers, currently disabled receivers (blocking / [thread] muting)} + """ def get_notified_from_activity(activity, local_only \\ true) def get_notified_from_activity(%Activity{data: %{"type" => type}} = activity, local_only) when type in ["Create", "Like", "Announce", "Follow", "Move", "EmojiReact"] do - [] - |> Utils.maybe_notify_to_recipients(activity) - |> Utils.maybe_notify_mentioned_recipients(activity) - |> Utils.maybe_notify_subscribers(activity) - |> Utils.maybe_notify_followers(activity) - |> Enum.uniq() - |> User.get_users_from_set(local_only) + potential_receiver_ap_ids = + [] + |> Utils.maybe_notify_to_recipients(activity) + |> Utils.maybe_notify_mentioned_recipients(activity) + |> Utils.maybe_notify_subscribers(activity) + |> Utils.maybe_notify_followers(activity) + |> Enum.uniq() + + notification_enabled_ap_ids = + potential_receiver_ap_ids + |> exclude_relation_restricting_ap_ids(activity) + |> exclude_thread_muter_ap_ids(activity) + + potential_receivers = + potential_receiver_ap_ids + |> Enum.uniq() + |> User.get_users_from_set(local_only) + + notification_enabled_users = + Enum.filter(potential_receivers, fn u -> u.ap_id in notification_enabled_ap_ids end) + + {notification_enabled_users, potential_receivers -- notification_enabled_users} end - def get_notified_from_activity(_, _local_only), do: [] + def get_notified_from_activity(_, _local_only), do: {[], []} + + @doc "Filters out AP IDs of users basing on their relationships with activity actor user" + def exclude_relation_restricting_ap_ids([], _activity), do: [] + + def exclude_relation_restricting_ap_ids(ap_ids, %Activity{} = activity) do + relation_restricted_ap_ids = + activity + |> Activity.user_actor() + |> User.incoming_relations_ungrouped_ap_ids([ + :block, + :notification_mute + ]) + + Enum.uniq(ap_ids) -- relation_restricted_ap_ids + end + + @doc "Filters out AP IDs of users who mute activity thread" + def exclude_thread_muter_ap_ids([], _activity), do: [] + + def exclude_thread_muter_ap_ids(ap_ids, %Activity{} = activity) do + thread_muter_ap_ids = ThreadMute.muter_ap_ids(activity.data["context"]) + + Enum.uniq(ap_ids) -- thread_muter_ap_ids + end @spec skip?(Activity.t(), User.t()) :: boolean() - def skip?(activity, user) do + def skip?(%Activity{} = activity, %User{} = user) do [ :self, :followers, @@ -344,18 +396,20 @@ def skip?(activity, user) do :non_follows, :recently_followed ] - |> Enum.any?(&skip?(&1, activity, user)) + |> Enum.find(&skip?(&1, activity, user)) end + def skip?(_, _), do: false + @spec skip?(atom(), Activity.t(), User.t()) :: boolean() - def skip?(:self, activity, user) do + def skip?(:self, %Activity{} = activity, %User{} = user) do activity.data["actor"] == user.ap_id end def skip?( :followers, - activity, - %{notification_settings: %{followers: false}} = user + %Activity{} = activity, + %User{notification_settings: %{followers: false}} = user ) do actor = activity.data["actor"] follower = User.get_cached_by_ap_id(actor) @@ -364,15 +418,19 @@ def skip?( def skip?( :non_followers, - activity, - %{notification_settings: %{non_followers: false}} = user + %Activity{} = activity, + %User{notification_settings: %{non_followers: false}} = user ) do actor = activity.data["actor"] follower = User.get_cached_by_ap_id(actor) !User.following?(follower, user) end - def skip?(:follows, activity, %{notification_settings: %{follows: false}} = user) do + def skip?( + :follows, + %Activity{} = activity, + %User{notification_settings: %{follows: false}} = user + ) do actor = activity.data["actor"] followed = User.get_cached_by_ap_id(actor) User.following?(user, followed) @@ -380,15 +438,16 @@ def skip?(:follows, activity, %{notification_settings: %{follows: false}} = user def skip?( :non_follows, - activity, - %{notification_settings: %{non_follows: false}} = user + %Activity{} = activity, + %User{notification_settings: %{non_follows: false}} = user ) do actor = activity.data["actor"] followed = User.get_cached_by_ap_id(actor) !User.following?(user, followed) end - def skip?(:recently_followed, %{data: %{"type" => "Follow"}} = activity, user) do + # To do: consider defining recency in hours and checking FollowingRelationship with a single SQL + def skip?(:recently_followed, %Activity{data: %{"type" => "Follow"}} = activity, %User{} = user) do actor = activity.data["actor"] Notification.for_user(user) diff --git a/lib/pleroma/thread_mute.ex b/lib/pleroma/thread_mute.ex index cc815430a..2b4cf02cf 100644 --- a/lib/pleroma/thread_mute.ex +++ b/lib/pleroma/thread_mute.ex @@ -9,7 +9,8 @@ defmodule Pleroma.ThreadMute do alias Pleroma.ThreadMute alias Pleroma.User - require Ecto.Query + import Ecto.Changeset + import Ecto.Query schema "thread_mutes" do belongs_to(:user, User, type: FlakeId.Ecto.CompatType) @@ -18,19 +19,43 @@ defmodule Pleroma.ThreadMute do def changeset(mute, params \\ %{}) do mute - |> Ecto.Changeset.cast(params, [:user_id, :context]) - |> Ecto.Changeset.foreign_key_constraint(:user_id) - |> Ecto.Changeset.unique_constraint(:user_id, name: :unique_index) + |> cast(params, [:user_id, :context]) + |> foreign_key_constraint(:user_id) + |> unique_constraint(:user_id, name: :unique_index) end def query(user_id, context) do {:ok, user_id} = FlakeId.Ecto.CompatType.dump(user_id) ThreadMute - |> Ecto.Query.where(user_id: ^user_id) - |> Ecto.Query.where(context: ^context) + |> where(user_id: ^user_id) + |> where(context: ^context) end + def muters_query(context) do + ThreadMute + |> join(:inner, [tm], u in assoc(tm, :user)) + |> where([tm], tm.context == ^context) + |> select([tm, u], u.ap_id) + end + + def muter_ap_ids(context, ap_ids \\ nil) + + def muter_ap_ids(context, ap_ids) when context not in [nil, ""] do + context + |> muters_query() + |> maybe_filter_on_ap_id(ap_ids) + |> Repo.all() + end + + def muter_ap_ids(_context, _ap_ids), do: [] + + defp maybe_filter_on_ap_id(query, ap_ids) when is_list(ap_ids) do + where(query, [tm, u], u.ap_id in ^ap_ids) + end + + defp maybe_filter_on_ap_id(query, _ap_ids), do: query + def add_mute(user_id, context) do %ThreadMute{} |> changeset(%{user_id: user_id, context: context}) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index db510d957..8c8ecfe35 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -149,22 +149,26 @@ defmodule Pleroma.User do {outgoing_relation, outgoing_relation_target}, {incoming_relation, incoming_relation_source} ]} <- @user_relationships_config do - # Definitions of `has_many :blocker_blocks`, `has_many :muter_mutes` etc. + # Definitions of `has_many` relations: :blocker_blocks, :muter_mutes, :reblog_muter_mutes, + # :notification_muter_mutes, :subscribee_subscriptions has_many(outgoing_relation, UserRelationship, foreign_key: :source_id, where: [relationship_type: relationship_type] ) - # Definitions of `has_many :blockee_blocks`, `has_many :mutee_mutes` etc. + # Definitions of `has_many` relations: :blockee_blocks, :mutee_mutes, :reblog_mutee_mutes, + # :notification_mutee_mutes, :subscriber_subscriptions has_many(incoming_relation, UserRelationship, foreign_key: :target_id, where: [relationship_type: relationship_type] ) - # Definitions of `has_many :blocked_users`, `has_many :muted_users` etc. + # Definitions of `has_many` relations: :blocked_users, :muted_users, :reblog_muted_users, + # :notification_muted_users, :subscriber_users has_many(outgoing_relation_target, through: [outgoing_relation, :target]) - # Definitions of `has_many :blocker_users`, `has_many :muter_users` etc. + # Definitions of `has_many` relations: :blocker_users, :muter_users, :reblog_muter_users, + # :notification_muter_users, :subscribee_users has_many(incoming_relation_source, through: [incoming_relation, :source]) end @@ -184,7 +188,9 @@ defmodule Pleroma.User do for {_relationship_type, [{_outgoing_relation, outgoing_relation_target}, _]} <- @user_relationships_config do - # Definitions of `blocked_users_relation/1`, `muted_users_relation/1`, etc. + # `def blocked_users_relation/2`, `def muted_users_relation/2`, + # `def reblog_muted_users_relation/2`, `def notification_muted_users/2`, + # `def subscriber_users/2` def unquote(:"#{outgoing_relation_target}_relation")(user, restrict_deactivated? \\ false) do target_users_query = assoc(user, unquote(outgoing_relation_target)) @@ -195,7 +201,8 @@ def unquote(:"#{outgoing_relation_target}_relation")(user, restrict_deactivated? end end - # Definitions of `blocked_users/1`, `muted_users/1`, etc. + # `def blocked_users/2`, `def muted_users/2`, `def reblog_muted_users/2`, + # `def notification_muted_users/2`, `def subscriber_users/2` def unquote(outgoing_relation_target)(user, restrict_deactivated? \\ false) do __MODULE__ |> apply(unquote(:"#{outgoing_relation_target}_relation"), [ @@ -205,7 +212,8 @@ def unquote(outgoing_relation_target)(user, restrict_deactivated? \\ false) do |> Repo.all() end - # Definitions of `blocked_users_ap_ids/1`, `muted_users_ap_ids/1`, etc. + # `def blocked_users_ap_ids/2`, `def muted_users_ap_ids/2`, `def reblog_muted_users_ap_ids/2`, + # `def notification_muted_users_ap_ids/2`, `def subscriber_users_ap_ids/2` def unquote(:"#{outgoing_relation_target}_ap_ids")(user, restrict_deactivated? \\ false) do __MODULE__ |> apply(unquote(:"#{outgoing_relation_target}_relation"), [ @@ -1217,7 +1225,9 @@ def subscribed_to?(%User{} = user, %{ap_id: ap_id}) do E.g. `outgoing_relations_ap_ids(user, [:block])` -> `%{block: ["https://some.site/users/userapid"]}` """ @spec outgoing_relations_ap_ids(User.t(), list(atom())) :: %{atom() => list(String.t())} - def outgoing_relations_ap_ids(_, []), do: %{} + def outgoing_relations_ap_ids(_user, []), do: %{} + + def outgoing_relations_ap_ids(nil, _relationship_types), do: %{} def outgoing_relations_ap_ids(%User{} = user, relationship_types) when is_list(relationship_types) do @@ -1238,6 +1248,30 @@ def outgoing_relations_ap_ids(%User{} = user, relationship_types) ) end + def incoming_relations_ungrouped_ap_ids(user, relationship_types, ap_ids \\ nil) + + def incoming_relations_ungrouped_ap_ids(_user, [], _ap_ids), do: [] + + def incoming_relations_ungrouped_ap_ids(nil, _relationship_types, _ap_ids), do: [] + + def incoming_relations_ungrouped_ap_ids(%User{} = user, relationship_types, ap_ids) + when is_list(relationship_types) do + user + |> assoc(:incoming_relationships) + |> join(:inner, [user_rel], u in assoc(user_rel, :source)) + |> where([user_rel, u], user_rel.relationship_type in ^relationship_types) + |> maybe_filter_on_ap_id(ap_ids) + |> select([user_rel, u], u.ap_id) + |> distinct(true) + |> Repo.all() + end + + defp maybe_filter_on_ap_id(query, ap_ids) when is_list(ap_ids) do + where(query, [user_rel, u], u.ap_id in ^ap_ids) + end + + defp maybe_filter_on_ap_id(query, _ap_ids), do: query + def deactivate_async(user, status \\ true) do BackgroundWorker.enqueue("deactivate_user", %{"user_id" => user.id, "status" => status}) end diff --git a/lib/pleroma/user_relationship.ex b/lib/pleroma/user_relationship.ex index 393947942..01b6ace9d 100644 --- a/lib/pleroma/user_relationship.ex +++ b/lib/pleroma/user_relationship.ex @@ -21,15 +21,18 @@ defmodule Pleroma.UserRelationship do end for relationship_type <- Keyword.keys(UserRelationshipTypeEnum.__enum_map__()) do - # Definitions of `create_block/2`, `create_mute/2` etc. + # `def create_block/2`, `def create_mute/2`, `def create_reblog_mute/2`, + # `def create_notification_mute/2`, `def create_inverse_subscription/2` def unquote(:"create_#{relationship_type}")(source, target), do: create(unquote(relationship_type), source, target) - # Definitions of `delete_block/2`, `delete_mute/2` etc. + # `def delete_block/2`, `def delete_mute/2`, `def delete_reblog_mute/2`, + # `def delete_notification_mute/2`, `def delete_inverse_subscription/2` def unquote(:"delete_#{relationship_type}")(source, target), do: delete(unquote(relationship_type), source, target) - # Definitions of `block_exists?/2`, `mute_exists?/2` etc. + # `def block_exists?/2`, `def mute_exists?/2`, `def reblog_mute_exists?/2`, + # `def notification_mute_exists?/2`, `def inverse_subscription_exists?/2` def unquote(:"#{relationship_type}_exists?")(source, target), do: exists?(unquote(relationship_type), source, target) end diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 9cd3de705..d6549a932 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -1108,13 +1108,11 @@ def add_hashtags(object) do end def add_mention_tags(object) do - mentions = - object - |> Utils.get_notified_from_object() - |> Enum.map(&build_mention_tag/1) + {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) tags = object["tag"] || [] - Map.put(object, "tag", tags ++ mentions) end diff --git a/test/notification_test.exs b/test/notification_test.exs index 56a581810..bc2d80f05 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -6,12 +6,14 @@ defmodule Pleroma.NotificationTest do use Pleroma.DataCase import Pleroma.Factory + import Mock alias Pleroma.Notification alias Pleroma.Tests.ObanHelpers alias Pleroma.User alias Pleroma.Web.ActivityPub.Transmogrifier alias Pleroma.Web.CommonAPI + alias Pleroma.Web.Push alias Pleroma.Web.Streamer describe "create_notifications" do @@ -382,7 +384,7 @@ test "Returns recent notifications" do end end - describe "notification target determination" do + describe "notification target determination / get_notified_from_activity/2" do test "it sends notifications to addressed users in new messages" do user = insert(:user) other_user = insert(:user) @@ -392,7 +394,9 @@ test "it sends notifications to addressed users in new messages" do "status" => "hey @#{other_user.nickname}!" }) - assert other_user in Notification.get_notified_from_activity(activity) + {enabled_receivers, _disabled_receivers} = Notification.get_notified_from_activity(activity) + + assert other_user in enabled_receivers end test "it sends notifications to mentioned users in new messages" do @@ -420,7 +424,9 @@ test "it sends notifications to mentioned users in new messages" do {:ok, activity} = Transmogrifier.handle_incoming(create_activity) - assert other_user in Notification.get_notified_from_activity(activity) + {enabled_receivers, _disabled_receivers} = Notification.get_notified_from_activity(activity) + + assert other_user in enabled_receivers end test "it does not send notifications to users who are only cc in new messages" do @@ -442,7 +448,9 @@ test "it does not send notifications to users who are only cc in new messages" d {:ok, activity} = Transmogrifier.handle_incoming(create_activity) - assert other_user not in Notification.get_notified_from_activity(activity) + {enabled_receivers, _disabled_receivers} = Notification.get_notified_from_activity(activity) + + assert other_user not in enabled_receivers end test "it does not send notification to mentioned users in likes" do @@ -457,7 +465,10 @@ test "it does not send notification to mentioned users in likes" do {:ok, activity_two, _} = CommonAPI.favorite(activity_one.id, third_user) - assert other_user not in Notification.get_notified_from_activity(activity_two) + {enabled_receivers, _disabled_receivers} = + Notification.get_notified_from_activity(activity_two) + + assert other_user not in enabled_receivers end test "it does not send notification to mentioned users in announces" do @@ -472,7 +483,96 @@ test "it does not send notification to mentioned users in announces" do {:ok, activity_two, _} = CommonAPI.repeat(activity_one.id, third_user) - assert other_user not in Notification.get_notified_from_activity(activity_two) + {enabled_receivers, _disabled_receivers} = + Notification.get_notified_from_activity(activity_two) + + assert other_user not in enabled_receivers + end + + test_with_mock "it returns blocking recipient in disabled recipients list", + Push, + [:passthrough], + [] do + user = insert(:user) + other_user = insert(:user) + {:ok, _user_relationship} = User.block(other_user, user) + + {:ok, activity} = CommonAPI.post(user, %{"status" => "hey @#{other_user.nickname}!"}) + + {enabled_receivers, disabled_receivers} = Notification.get_notified_from_activity(activity) + + assert [] == enabled_receivers + assert [other_user] == disabled_receivers + + assert 1 == length(Repo.all(Notification)) + refute called(Push.send(:_)) + end + + test_with_mock "it returns notification-muting recipient in disabled recipients list", + Push, + [:passthrough], + [] do + user = insert(:user) + other_user = insert(:user) + {:ok, _user_relationships} = User.mute(other_user, user) + + {:ok, activity} = CommonAPI.post(user, %{"status" => "hey @#{other_user.nickname}!"}) + + {enabled_receivers, disabled_receivers} = Notification.get_notified_from_activity(activity) + + assert [] == enabled_receivers + assert [other_user] == disabled_receivers + + assert 1 == length(Repo.all(Notification)) + refute called(Push.send(:_)) + end + + test_with_mock "it returns thread-muting recipient in disabled recipients list", + Push, + [:passthrough], + [] do + user = insert(:user) + other_user = insert(:user) + + {:ok, activity} = CommonAPI.post(user, %{"status" => "hey @#{other_user.nickname}!"}) + + {:ok, _} = CommonAPI.add_mute(other_user, activity) + + {:ok, same_context_activity} = + CommonAPI.post(user, %{ + "status" => "hey-hey-hey @#{other_user.nickname}!", + "in_reply_to_status_id" => activity.id + }) + + {enabled_receivers, disabled_receivers} = + Notification.get_notified_from_activity(same_context_activity) + + assert [other_user] == disabled_receivers + refute other_user in enabled_receivers + + [pre_mute_notification, post_mute_notification] = + Repo.all(from(n in Notification, where: n.user_id == ^other_user.id, order_by: n.id)) + + pre_mute_notification_id = pre_mute_notification.id + post_mute_notification_id = post_mute_notification.id + + assert called( + Push.send( + :meck.is(fn + %Notification{id: ^pre_mute_notification_id} -> true + _ -> false + end) + ) + ) + + refute called( + Push.send( + :meck.is(fn + %Notification{id: ^post_mute_notification_id} -> true + _ -> false + end) + ) + ) end end From 35471205f862fa069c6d87aefc1d827c9fab6e08 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Mon, 16 Mar 2020 15:47:25 +0300 Subject: [PATCH 101/581] temp fix for `:gun.info` MatchError --- lib/pleroma/pool/connections.ex | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index 772833509..16aa80548 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -169,19 +169,26 @@ defp sort_conns({_, c1}, {_, c2}) do @impl true def handle_info({:gun_up, conn_pid, _protocol}, state) do - %{origin_host: host, origin_scheme: scheme, origin_port: port} = Gun.info(conn_pid) + # TODO: temp fix for gun MatchError https://github.com/ninenines/gun/issues/222 + # TODO: REMOVE LATER + {key, conn} = + try do + %{origin_host: host, origin_scheme: scheme, origin_port: port} = Gun.info(conn_pid) - host = - case :inet.ntoa(host) do - {:error, :einval} -> host - ip -> ip + host = + case :inet.ntoa(host) do + {:error, :einval} -> host + ip -> ip + end + + key = "#{scheme}:#{host}:#{port}" + find_conn(state.conns, conn_pid, key) + rescue + MatcheError -> find_conn(state.conns, conn_pid) end - key = "#{scheme}:#{host}:#{port}" - state = - with {_key, conn} <- find_conn(state.conns, conn_pid, key), - {true, key} <- {Process.alive?(conn_pid), key} do + with {true, key} <- {Process.alive?(conn_pid), key} do put_in(state.conns[key], %{ conn | gun_state: :up, From bf474ca3c154544b54720ea23c06191e68f32522 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Mon, 16 Mar 2020 16:23:49 +0300 Subject: [PATCH 102/581] fix --- lib/pleroma/pool/connections.ex | 34 +++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index 16aa80548..91102faf7 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -167,28 +167,30 @@ defp sort_conns({_, c1}, {_, c2}) do c1.crf <= c2.crf and c1.last_reference <= c2.last_reference end - @impl true - def handle_info({:gun_up, conn_pid, _protocol}, state) do + defp find_conn_from_gun_info(conns, pid) do # TODO: temp fix for gun MatchError https://github.com/ninenines/gun/issues/222 # TODO: REMOVE LATER - {key, conn} = - try do - %{origin_host: host, origin_scheme: scheme, origin_port: port} = Gun.info(conn_pid) + try do + %{origin_host: host, origin_scheme: scheme, origin_port: port} = Gun.info(pid) - host = - case :inet.ntoa(host) do - {:error, :einval} -> host - ip -> ip - end + host = + case :inet.ntoa(host) do + {:error, :einval} -> host + ip -> ip + end - key = "#{scheme}:#{host}:#{port}" - find_conn(state.conns, conn_pid, key) - rescue - MatcheError -> find_conn(state.conns, conn_pid) - end + key = "#{scheme}:#{host}:#{port}" + find_conn(conns, pid, key) + rescue + MatcheError -> find_conn(conns, pid) + end + end + @impl true + def handle_info({:gun_up, conn_pid, _protocol}, state) do state = - with {true, key} <- {Process.alive?(conn_pid), key} do + with {key, conn} <- find_conn_from_gun_info(state.conns, conn_pid), + {true, key} <- {Process.alive?(conn_pid), key} do put_in(state.conns[key], %{ conn | gun_state: :up, From d198e7fa2a0c92be4e99c5a765de85096d318bfe Mon Sep 17 00:00:00 2001 From: eugenijm Date: Tue, 28 Jan 2020 09:47:59 +0300 Subject: [PATCH 103/581] Admin API: `PATCH /api/pleroma/admin/users/:nickname/change_password` --- CHANGELOG.md | 1 + docs/API/admin_api.md | 8 +++++ lib/pleroma/moderation_log.ex | 11 +++++++ .../web/admin_api/admin_api_controller.ex | 33 +++++++++++++++++++ lib/pleroma/web/router.ex | 1 + .../admin_api/admin_api_controller_test.exs | 26 +++++++++++++++ 6 files changed, 80 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4168086e2..0f8091c8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -67,6 +67,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Mastodon API: User timelines will now respect blocks, unless you are getting the user timeline of somebody you blocked (which would be empty otherwise). - Mastodon API: Favoriting / Repeating a post multiple times will now return the identical response every time. Before, executing that action twice would return an error ("already favorited") on the second try. - Mastodon API: Limit timeline requests to 3 per timeline per 500ms per user/ip by default. +- Admin API: `PATCH /api/pleroma/admin/users/:nickname/change_password`
### Added diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index 47afdfba5..cb8201f11 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -414,6 +414,14 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret - `nicknames` - Response: none (code `204`) +## `PATCH /api/pleroma/admin/users/:nickname/change_password` + +### Change the user password + +- Params: + - `new_password` +- Response: none (code `200`) + ## `GET /api/pleroma/admin/reports` ### Get a list of reports diff --git a/lib/pleroma/moderation_log.ex b/lib/pleroma/moderation_log.ex index e32895f70..b5435a553 100644 --- a/lib/pleroma/moderation_log.ex +++ b/lib/pleroma/moderation_log.ex @@ -605,6 +605,17 @@ def get_log_entry_message(%ModerationLog{ }" end + @spec get_log_entry_message(ModerationLog) :: String.t() + def get_log_entry_message(%ModerationLog{ + data: %{ + "actor" => %{"nickname" => actor_nickname}, + "action" => "change_password", + "subject" => subjects + } + }) do + "@#{actor_nickname} changed password for users: #{users_to_nicknames_string(subjects)}" + end + defp nicknames_to_string(nicknames) do nicknames |> Enum.map(&"@#{&1}") diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index 175260bc2..2aa2c6ac2 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -658,6 +658,39 @@ def force_password_reset(%{assigns: %{user: admin}} = conn, %{"nicknames" => nic json_response(conn, :no_content, "") end + @doc "Changes password for a given user" + def change_password(%{assigns: %{user: admin}} = conn, %{"nickname" => nickname} = params) do + with {_, user} <- {:user, User.get_cached_by_nickname(nickname)}, + {:ok, _user} <- + User.reset_password(user, %{ + password: params["new_password"], + password_confirmation: params["new_password"] + }) do + ModerationLog.insert_log(%{ + actor: admin, + subject: [user], + action: "change_password" + }) + + User.force_password_reset_async(user) + + ModerationLog.insert_log(%{ + actor: admin, + subject: [user], + action: "force_password_reset" + }) + + json(conn, %{status: "success"}) + else + {:error, changeset} -> + {_, {error, _}} = Enum.at(changeset.errors, 0) + json(conn, %{error: "New password #{error}."}) + + _ -> + json(conn, %{error: "Unable to change password."}) + end + end + def list_reports(conn, params) do {page, page_size} = page_params(params) diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index e4e3ee704..c03ad101e 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -173,6 +173,7 @@ defmodule Pleroma.Web.Router do get("/users/:nickname/password_reset", AdminAPIController, :get_password_reset) patch("/users/force_password_reset", AdminAPIController, :force_password_reset) + patch("/users/:nickname/change_password", AdminAPIController, :change_password) get("/users", AdminAPIController, :list_users) get("/users/:nickname", AdminAPIController, :user_show) diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index e4c152fb7..0c1214f05 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -3389,6 +3389,32 @@ test "returns log filtered by search", %{conn: conn, moderator: moderator} do end end + describe "PATCH /users/:nickname/change_password" do + test "changes password", %{conn: conn, admin: admin} do + user = insert(:user) + assert user.password_reset_pending == false + + conn = + patch(conn, "/api/pleroma/admin/users/#{user.nickname}/change_password", %{ + "new_password" => "password" + }) + + assert json_response(conn, 200) == %{"status" => "success"} + + ObanHelpers.perform_all() + + assert User.get_by_id(user.id).password_reset_pending == true + + [log_entry1, log_entry2] = ModerationLog |> Repo.all() |> Enum.sort() + + assert ModerationLog.get_log_entry_message(log_entry1) == + "@#{admin.nickname} changed password for users: @#{user.nickname}" + + assert ModerationLog.get_log_entry_message(log_entry2) == + "@#{admin.nickname} forced password reset for users: @#{user.nickname}" + end + end + describe "PATCH /users/:nickname/force_password_reset" do test "sets password_reset_pending to true", %{conn: conn} do user = insert(:user) From 13cce9c0debbf9a80ed5da26cb34ca563e5e1417 Mon Sep 17 00:00:00 2001 From: eugenijm Date: Fri, 31 Jan 2020 21:07:46 +0300 Subject: [PATCH 104/581] Admin API: `PATCH /api/pleroma/admin/users/:nickname/credentials`, `GET /api/pleroma/admin/users/:nickname/credentials`. --- CHANGELOG.md | 2 +- docs/API/admin_api.md | 75 +++++++++++++++- lib/pleroma/moderation_log.ex | 4 +- lib/pleroma/user.ex | 86 ++++++++++++++++++- .../web/admin_api/admin_api_controller.ex | 34 +++++--- .../web/admin_api/views/account_view.ex | 40 +++++++++ .../controllers/account_controller.ex | 60 +++---------- lib/pleroma/web/router.ex | 3 +- .../admin_api/admin_api_controller_test.exs | 57 ++++++++++-- 9 files changed, 286 insertions(+), 75 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f8091c8c..ec04c26e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -67,7 +67,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Mastodon API: User timelines will now respect blocks, unless you are getting the user timeline of somebody you blocked (which would be empty otherwise). - Mastodon API: Favoriting / Repeating a post multiple times will now return the identical response every time. Before, executing that action twice would return an error ("already favorited") on the second try. - Mastodon API: Limit timeline requests to 3 per timeline per 500ms per user/ip by default. -- Admin API: `PATCH /api/pleroma/admin/users/:nickname/change_password` +- Admin API: `PATCH /api/pleroma/admin/users/:nickname/credentials` and `GET /api/pleroma/admin/users/:nickname/credentials`
### Added diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index cb8201f11..edcf73e14 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -414,12 +414,81 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret - `nicknames` - Response: none (code `204`) -## `PATCH /api/pleroma/admin/users/:nickname/change_password` +## `GET /api/pleroma/admin/users/:nickname/credentials` -### Change the user password +### Get the user's email, password, display and settings-related fields - Params: - - `new_password` + - `nickname` + +- Response: + +```json +{ + "actor_type": "Person", + "allow_following_move": true, + "avatar": "https://pleroma.social/media/7e8e7508fd545ef580549b6881d80ec0ff2c81ed9ad37b9bdbbdf0e0d030159d.jpg", + "background": "https://pleroma.social/media/4de34c0bd10970d02cbdef8972bef0ebbf55f43cadc449554d4396156162fe9a.jpg", + "banner": "https://pleroma.social/media/8d92ba2bd244b613520abf557dd448adcd30f5587022813ee9dd068945986946.jpg", + "bio": "bio", + "default_scope": "public", + "discoverable": false, + "email": "user@example.com", + "fields": [ + { + "name": "example", + "value": "https://example.com" + } + ], + "hide_favorites": false, + "hide_followers": false, + "hide_followers_count": false, + "hide_follows": false, + "hide_follows_count": false, + "id": "9oouHaEEUR54hls968", + "locked": true, + "name": "user", + "no_rich_text": true, + "pleroma_settings_store": {}, + "raw_fields": [ + { + "id": 1, + "name": "example", + "value": "https://example.com" + }, + ], + "show_role": true, + "skip_thread_containment": false +} +``` + +## `PATCH /api/pleroma/admin/users/:nickname/credentials` + +### Change the user's email, password, display and settings-related fields + +- Params: + - `email` + - `password` + - `name` + - `bio` + - `avatar` + - `locked` + - `no_rich_text` + - `default_scope` + - `banner` + - `hide_follows` + - `hide_followers` + - `hide_followers_count` + - `hide_follows_count` + - `hide_favorites` + - `allow_following_move` + - `background` + - `show_role` + - `skip_thread_containment` + - `fields` + - `discoverable` + - `actor_type` + - Response: none (code `200`) ## `GET /api/pleroma/admin/reports` diff --git a/lib/pleroma/moderation_log.ex b/lib/pleroma/moderation_log.ex index b5435a553..7aacd9d80 100644 --- a/lib/pleroma/moderation_log.ex +++ b/lib/pleroma/moderation_log.ex @@ -609,11 +609,11 @@ def get_log_entry_message(%ModerationLog{ def get_log_entry_message(%ModerationLog{ data: %{ "actor" => %{"nickname" => actor_nickname}, - "action" => "change_password", + "action" => "updated_users", "subject" => subjects } }) do - "@#{actor_nickname} changed password for users: #{users_to_nicknames_string(subjects)}" + "@#{actor_nickname} updated users: #{users_to_nicknames_string(subjects)}" end defp nicknames_to_string(nicknames) do diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 911dde6e2..44de64345 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -417,9 +417,55 @@ def update_changeset(struct, params \\ %{}) do |> validate_format(:nickname, local_nickname_regex()) |> validate_length(:bio, max: bio_limit) |> validate_length(:name, min: 1, max: name_limit) + |> put_fields() + |> put_change_if_present(:bio, &{:ok, parse_bio(&1, struct)}) + |> put_change_if_present(:avatar, &put_upload(&1, :avatar)) + |> put_change_if_present(:banner, &put_upload(&1, :banner)) + |> put_change_if_present(:background, &put_upload(&1, :background)) + |> put_change_if_present( + :pleroma_settings_store, + &{:ok, Map.merge(struct.pleroma_settings_store, &1)} + ) |> validate_fields(false) end + defp put_fields(changeset) do + if raw_fields = get_change(changeset, :raw_fields) do + raw_fields = + raw_fields + |> Enum.filter(fn %{"name" => n} -> n != "" end) + + fields = + raw_fields + |> Enum.map(fn f -> Map.update!(f, "value", &AutoLinker.link(&1)) end) + + changeset + |> put_change(:raw_fields, raw_fields) + |> put_change(:fields, fields) + else + changeset + end + end + + defp put_change_if_present(changeset, map_field, value_function) do + if value = get_change(changeset, map_field) do + with {:ok, new_value} <- value_function.(value) do + put_change(changeset, map_field, new_value) + else + _ -> changeset + end + else + changeset + end + end + + defp put_upload(value, type) do + with %Plug.Upload{} <- value, + {:ok, object} <- ActivityPub.upload(value, type: type) do + {:ok, object.data} + end + end + def upgrade_changeset(struct, params \\ %{}, remote? \\ false) do bio_limit = Pleroma.Config.get([:instance, :user_bio_length], 5000) name_limit = Pleroma.Config.get([:instance, :user_name_length], 100) @@ -463,6 +509,27 @@ def upgrade_changeset(struct, params \\ %{}, remote? \\ false) do |> validate_fields(remote?) end + def update_as_admin_changeset(struct, params) do + struct + |> update_changeset(params) + |> cast(params, [:email]) + |> delete_change(:also_known_as) + |> unique_constraint(:email) + |> validate_format(:email, @email_regex) + end + + @spec update_as_admin(%User{}, map) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()} + def update_as_admin(user, params) do + params = Map.put(params, "password_confirmation", params["password"]) + changeset = update_as_admin_changeset(user, params) + + if params["password"] do + reset_password(user, changeset, params) + else + User.update_and_set_cache(changeset) + end + end + def password_update_changeset(struct, params) do struct |> cast(params, [:password, :password_confirmation]) @@ -473,10 +540,14 @@ def password_update_changeset(struct, params) do end @spec reset_password(User.t(), map) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()} - def reset_password(%User{id: user_id} = user, data) do + def reset_password(%User{} = user, params) do + reset_password(user, user, params) + end + + def reset_password(%User{id: user_id} = user, struct, params) do multi = Multi.new() - |> Multi.update(:user, password_update_changeset(user, data)) + |> Multi.update(:user, password_update_changeset(struct, params)) |> Multi.delete_all(:tokens, OAuth.Token.Query.get_by_user(user_id)) |> Multi.delete_all(:auth, OAuth.Authorization.delete_by_user_query(user)) @@ -1856,6 +1927,17 @@ def fields(%{fields: nil}), do: [] def fields(%{fields: fields}), do: fields + def sanitized_fields(%User{} = user) do + user + |> User.fields() + |> Enum.map(fn %{"name" => name, "value" => value} -> + %{ + "name" => name, + "value" => Pleroma.HTML.filter_tags(value, Pleroma.HTML.Scrubber.LinksOnly) + } + end) + end + def validate_fields(changeset, remote? \\ false) do limit_name = if remote?, do: :max_remote_account_fields, else: :max_account_fields limit = Pleroma.Config.get([:instance, limit_name], 0) diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index 2aa2c6ac2..0368df1e9 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -38,7 +38,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do plug( OAuthScopesPlug, %{scopes: ["read:accounts"], admin: true} - when action in [:list_users, :user_show, :right_get] + when action in [:list_users, :user_show, :right_get, :show_user_credentials] ) plug( @@ -54,7 +54,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do :tag_users, :untag_users, :right_add, - :right_delete + :right_delete, + :update_user_credentials ] ) @@ -658,21 +659,34 @@ def force_password_reset(%{assigns: %{user: admin}} = conn, %{"nicknames" => nic json_response(conn, :no_content, "") end - @doc "Changes password for a given user" - def change_password(%{assigns: %{user: admin}} = conn, %{"nickname" => nickname} = params) do + @doc "Show a given user's credentials" + def show_user_credentials(%{assigns: %{user: admin}} = conn, %{"nickname" => nickname}) do + with %User{} = user <- User.get_cached_by_nickname_or_id(nickname) do + conn + |> put_view(AccountView) + |> render("credentials.json", %{user: user, for: admin}) + else + _ -> {:error, :not_found} + end + end + + @doc "Updates a given user" + def update_user_credentials( + %{assigns: %{user: admin}} = conn, + %{"nickname" => nickname} = params + ) do with {_, user} <- {:user, User.get_cached_by_nickname(nickname)}, {:ok, _user} <- - User.reset_password(user, %{ - password: params["new_password"], - password_confirmation: params["new_password"] - }) do + User.update_as_admin(user, params) do ModerationLog.insert_log(%{ actor: admin, subject: [user], - action: "change_password" + action: "updated_users" }) - User.force_password_reset_async(user) + if params["password"] do + User.force_password_reset_async(user) + end ModerationLog.insert_log(%{ actor: admin, diff --git a/lib/pleroma/web/admin_api/views/account_view.ex b/lib/pleroma/web/admin_api/views/account_view.ex index 1e03849de..a16a3ebf0 100644 --- a/lib/pleroma/web/admin_api/views/account_view.ex +++ b/lib/pleroma/web/admin_api/views/account_view.ex @@ -23,6 +23,43 @@ def render("index.json", %{users: users}) do } end + def render("credentials.json", %{user: user, for: for_user}) do + user = User.sanitize_html(user, User.html_filter_policy(for_user)) + avatar = User.avatar_url(user) |> MediaProxy.url() + banner = User.banner_url(user) |> MediaProxy.url() + background = image_url(user.background) |> MediaProxy.url() + + user + |> Map.take([ + :id, + :bio, + :email, + :fields, + :name, + :nickname, + :locked, + :no_rich_text, + :default_scope, + :hide_follows, + :hide_followers_count, + :hide_follows_count, + :hide_followers, + :hide_favorites, + :allow_following_move, + :show_role, + :skip_thread_containment, + :pleroma_settings_store, + :raw_fields, + :discoverable, + :actor_type + ]) + |> Map.merge(%{ + "avatar" => avatar, + "banner" => banner, + "background" => background + }) + end + def render("show.json", %{user: user}) do avatar = User.avatar_url(user) |> MediaProxy.url() display_name = Pleroma.HTML.strip_tags(user.name || user.nickname) @@ -104,4 +141,7 @@ defp parse_error(errors) do "" end end + + defp image_url(%{"url" => [%{"href" => href} | _]}), do: href + defp image_url(_), do: nil end diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 88c997b9f..56e6214c5 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -8,7 +8,6 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do import Pleroma.Web.ControllerHelper, only: [add_link_headers: 2, truthy_param?: 1, assign_account_by_id: 2, json_response: 3] - alias Pleroma.Emoji alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.Plugs.RateLimiter alias Pleroma.User @@ -140,17 +139,6 @@ def verify_credentials(%{assigns: %{user: user}} = conn, _) do def update_credentials(%{assigns: %{user: original_user}} = conn, params) do user = original_user - params = - if Map.has_key?(params, "fields_attributes") do - Map.update!(params, "fields_attributes", fn fields -> - fields - |> normalize_fields_attributes() - |> Enum.filter(fn %{"name" => n} -> n != "" end) - end) - else - params - end - user_params = [ :no_rich_text, @@ -169,46 +157,20 @@ def update_credentials(%{assigns: %{user: original_user}} = conn, params) do add_if_present(acc, params, to_string(key), key, &{:ok, truthy_param?(&1)}) end) |> add_if_present(params, "display_name", :name) - |> add_if_present(params, "note", :bio, fn value -> {:ok, User.parse_bio(value, user)} end) - |> add_if_present(params, "avatar", :avatar, fn value -> - with %Plug.Upload{} <- value, - {:ok, object} <- ActivityPub.upload(value, type: :avatar) do - {:ok, object.data} - end - end) - |> add_if_present(params, "header", :banner, fn value -> - with %Plug.Upload{} <- value, - {:ok, object} <- ActivityPub.upload(value, type: :banner) do - {:ok, object.data} - end - end) - |> add_if_present(params, "pleroma_background_image", :background, fn value -> - with %Plug.Upload{} <- value, - {:ok, object} <- ActivityPub.upload(value, type: :background) do - {:ok, object.data} - end - end) - |> add_if_present(params, "fields_attributes", :fields, fn fields -> - fields = Enum.map(fields, fn f -> Map.update!(f, "value", &AutoLinker.link(&1)) end) - - {:ok, fields} - end) - |> add_if_present(params, "fields_attributes", :raw_fields) - |> add_if_present(params, "pleroma_settings_store", :pleroma_settings_store, fn value -> - {:ok, Map.merge(user.pleroma_settings_store, value)} - end) + |> add_if_present(params, "note", :bio) + |> add_if_present(params, "avatar", :avatar) + |> add_if_present(params, "header", :banner) + |> add_if_present(params, "pleroma_background_image", :background) + |> add_if_present( + params, + "fields_attributes", + :raw_fields, + &{:ok, normalize_fields_attributes(&1)} + ) + |> add_if_present(params, "pleroma_settings_store", :pleroma_settings_store) |> add_if_present(params, "default_scope", :default_scope) |> add_if_present(params, "actor_type", :actor_type) - emojis_text = (user_params["display_name"] || "") <> (user_params["note"] || "") - - user_emojis = - user - |> Map.get(:emoji, []) - |> Enum.concat(Emoji.Formatter.get_emoji_map(emojis_text)) - |> Enum.dedup() - - user_params = Map.put(user_params, :emoji, user_emojis) changeset = User.update_changeset(user, user_params) with {:ok, user} <- User.update_and_set_cache(changeset) do diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index c03ad101e..2927775eb 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -173,7 +173,8 @@ defmodule Pleroma.Web.Router do get("/users/:nickname/password_reset", AdminAPIController, :get_password_reset) patch("/users/force_password_reset", AdminAPIController, :force_password_reset) - patch("/users/:nickname/change_password", AdminAPIController, :change_password) + get("/users/:nickname/credentials", AdminAPIController, :show_user_credentials) + patch("/users/:nickname/credentials", AdminAPIController, :update_user_credentials) get("/users", AdminAPIController, :list_users) get("/users/:nickname", AdminAPIController, :user_show) diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index 0c1214f05..0a317cf88 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -3389,30 +3389,73 @@ test "returns log filtered by search", %{conn: conn, moderator: moderator} do end end - describe "PATCH /users/:nickname/change_password" do - test "changes password", %{conn: conn, admin: admin} do + describe "GET /users/:nickname/credentials" do + test "gets the user credentials", %{conn: conn} do + user = insert(:user) + conn = get(conn, "/api/pleroma/admin/users/#{user.nickname}/credentials") + + response = assert json_response(conn, 200) + assert response["email"] == user.email + end + + test "returns 403 if requested by a non-admin" do + user = insert(:user) + + conn = + build_conn() + |> assign(:user, user) + |> get("/api/pleroma/admin/users/#{user.nickname}/credentials") + + assert json_response(conn, :forbidden) + end + end + + describe "PATCH /users/:nickname/credentials" do + test "changes password and email", %{conn: conn, admin: admin} do user = insert(:user) assert user.password_reset_pending == false conn = - patch(conn, "/api/pleroma/admin/users/#{user.nickname}/change_password", %{ - "new_password" => "password" + patch(conn, "/api/pleroma/admin/users/#{user.nickname}/credentials", %{ + "password" => "new_password", + "email" => "new_email@example.com", + "name" => "new_name" }) assert json_response(conn, 200) == %{"status" => "success"} ObanHelpers.perform_all() - assert User.get_by_id(user.id).password_reset_pending == true + updated_user = User.get_by_id(user.id) - [log_entry1, log_entry2] = ModerationLog |> Repo.all() |> Enum.sort() + assert updated_user.email == "new_email@example.com" + assert updated_user.name == "new_name" + assert updated_user.password_hash != user.password_hash + assert updated_user.password_reset_pending == true + + [log_entry2, log_entry1] = ModerationLog |> Repo.all() |> Enum.sort() assert ModerationLog.get_log_entry_message(log_entry1) == - "@#{admin.nickname} changed password for users: @#{user.nickname}" + "@#{admin.nickname} updated users: @#{user.nickname}" assert ModerationLog.get_log_entry_message(log_entry2) == "@#{admin.nickname} forced password reset for users: @#{user.nickname}" end + + test "returns 403 if requested by a non-admin" do + user = insert(:user) + + conn = + build_conn() + |> assign(:user, user) + |> patch("/api/pleroma/admin/users/#{user.nickname}/credentials", %{ + "password" => "new_password", + "email" => "new_email@example.com", + "name" => "new_name" + }) + + assert json_response(conn, :forbidden) + end end describe "PATCH /users/:nickname/force_password_reset" do From 74388336852b18d5d5f108a8305f1a038301f7a1 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Mon, 16 Mar 2020 21:58:10 +0300 Subject: [PATCH 105/581] [#1364] Improved notification-related tests. --- lib/pleroma/notification.ex | 1 + test/notification_test.exs | 121 +++++++++++++++++++++++------------- 2 files changed, 79 insertions(+), 43 deletions(-) diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 0d7a6610a..104368fd1 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -344,6 +344,7 @@ def get_notified_from_activity(%Activity{data: %{"type" => type}} = activity, lo |> Utils.maybe_notify_followers(activity) |> Enum.uniq() + # Since even subscribers and followers can mute / thread-mute, filtering all above AP IDs notification_enabled_ap_ids = potential_receiver_ap_ids |> exclude_relation_restricting_ap_ids(activity) diff --git a/test/notification_test.exs b/test/notification_test.exs index bc2d80f05..a7282c929 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -82,6 +82,80 @@ test "does not create a notification for subscribed users if status is a reply" end end + describe "CommonApi.post/2 notification-related functionality" do + test_with_mock "creates but does NOT send notification to blocker user", + Push, + [:passthrough], + [] do + user = insert(:user) + blocker = insert(:user) + {:ok, _user_relationship} = User.block(blocker, user) + + {:ok, _activity} = CommonAPI.post(user, %{"status" => "hey @#{blocker.nickname}!"}) + + blocker_id = blocker.id + assert [%Notification{user_id: ^blocker_id}] = Repo.all(Notification) + refute called(Push.send(:_)) + end + + test_with_mock "creates but does NOT send notification to notification-muter user", + Push, + [:passthrough], + [] do + user = insert(:user) + muter = insert(:user) + {:ok, _user_relationships} = User.mute(muter, user) + + {:ok, _activity} = CommonAPI.post(user, %{"status" => "hey @#{muter.nickname}!"}) + + muter_id = muter.id + assert [%Notification{user_id: ^muter_id}] = Repo.all(Notification) + refute called(Push.send(:_)) + end + + test_with_mock "creates but does NOT send notification to thread-muter user", + Push, + [:passthrough], + [] do + user = insert(:user) + thread_muter = insert(:user) + + {:ok, activity} = CommonAPI.post(user, %{"status" => "hey @#{thread_muter.nickname}!"}) + + {:ok, _} = CommonAPI.add_mute(thread_muter, activity) + + {:ok, _same_context_activity} = + CommonAPI.post(user, %{ + "status" => "hey-hey-hey @#{thread_muter.nickname}!", + "in_reply_to_status_id" => activity.id + }) + + [pre_mute_notification, post_mute_notification] = + Repo.all(from(n in Notification, where: n.user_id == ^thread_muter.id, order_by: n.id)) + + pre_mute_notification_id = pre_mute_notification.id + post_mute_notification_id = post_mute_notification.id + + assert called( + Push.send( + :meck.is(fn + %Notification{id: ^pre_mute_notification_id} -> true + _ -> false + end) + ) + ) + + refute called( + Push.send( + :meck.is(fn + %Notification{id: ^post_mute_notification_id} -> true + _ -> false + end) + ) + ) + end + end + describe "create_notification" do @tag needs_streamer: true test "it creates a notification for user and send to the 'user' and the 'user:notification' stream" do @@ -489,10 +563,7 @@ test "it does not send notification to mentioned users in announces" do assert other_user not in enabled_receivers end - test_with_mock "it returns blocking recipient in disabled recipients list", - Push, - [:passthrough], - [] do + test "it returns blocking recipient in disabled recipients list" do user = insert(:user) other_user = insert(:user) {:ok, _user_relationship} = User.block(other_user, user) @@ -503,15 +574,9 @@ test "it does not send notification to mentioned users in announces" do assert [] == enabled_receivers assert [other_user] == disabled_receivers - - assert 1 == length(Repo.all(Notification)) - refute called(Push.send(:_)) end - test_with_mock "it returns notification-muting recipient in disabled recipients list", - Push, - [:passthrough], - [] do + test "it returns notification-muting recipient in disabled recipients list" do user = insert(:user) other_user = insert(:user) {:ok, _user_relationships} = User.mute(other_user, user) @@ -522,15 +587,9 @@ test "it does not send notification to mentioned users in announces" do assert [] == enabled_receivers assert [other_user] == disabled_receivers - - assert 1 == length(Repo.all(Notification)) - refute called(Push.send(:_)) end - test_with_mock "it returns thread-muting recipient in disabled recipients list", - Push, - [:passthrough], - [] do + test "it returns thread-muting recipient in disabled recipients list" do user = insert(:user) other_user = insert(:user) @@ -549,30 +608,6 @@ test "it does not send notification to mentioned users in announces" do assert [other_user] == disabled_receivers refute other_user in enabled_receivers - - [pre_mute_notification, post_mute_notification] = - Repo.all(from(n in Notification, where: n.user_id == ^other_user.id, order_by: n.id)) - - pre_mute_notification_id = pre_mute_notification.id - post_mute_notification_id = post_mute_notification.id - - assert called( - Push.send( - :meck.is(fn - %Notification{id: ^pre_mute_notification_id} -> true - _ -> false - end) - ) - ) - - refute called( - Push.send( - :meck.is(fn - %Notification{id: ^post_mute_notification_id} -> true - _ -> false - end) - ) - ) end end @@ -820,7 +855,7 @@ test "it doesn't return notifications for blocked user" do assert Notification.for_user(user) == [] end - test "it doesn't return notificatitons for blocked domain" do + test "it doesn't return notifications for blocked domain" do user = insert(:user) blocked = insert(:user, ap_id: "http://some-domain.com") {:ok, user} = User.block_domain(user, "some-domain.com") From b17d8d305f5e9bf25644fd9b3457a965e3a5c001 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Mon, 16 Mar 2020 15:39:34 -0500 Subject: [PATCH 106/581] Enable Gun adapter by default We need devs to dogfood this before we merge it into the 2.1 release --- config/config.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.exs b/config/config.exs index 3ec1868b2..154eda48a 100644 --- a/config/config.exs +++ b/config/config.exs @@ -170,7 +170,7 @@ "application/ld+json" => ["activity+json"] } -config :tesla, adapter: Tesla.Adapter.Hackney +config :tesla, adapter: Tesla.Adapter.Gun # Configures http settings, upstream proxy etc. config :pleroma, :http, proxy_url: nil, From d3cf7e19fbe089b3a6d62d6a26f3dfc866a6669d Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Tue, 17 Mar 2020 13:02:10 +0100 Subject: [PATCH 107/581] activity_pub_controller_test.exs: test posting with AP C2S uploaded media --- .../activity_pub_controller_test.exs | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/test/web/activity_pub/activity_pub_controller_test.exs b/test/web/activity_pub/activity_pub_controller_test.exs index bd8e0b5cc..2bd494a37 100644 --- a/test/web/activity_pub/activity_pub_controller_test.exs +++ b/test/web/activity_pub/activity_pub_controller_test.exs @@ -1241,16 +1241,46 @@ test "POST /api/ap/upload_media", %{conn: conn} do filename: "an_image.jpg" } - conn = + object = conn |> assign(:user, user) |> post("/api/ap/upload_media", %{"file" => image, "description" => desc}) + |> json_response(:created) - assert object = json_response(conn, :created) assert object["name"] == desc assert object["type"] == "Document" assert object["actor"] == user.ap_id + assert [%{"href" => object_href}] = object["url"] + activity_request = %{ + "@context" => "https://www.w3.org/ns/activitystreams", + "type" => "Create", + "object" => %{ + "type" => "Note", + "content" => "AP C2S test, attachment", + "attachment" => [object] + }, + "to" => "https://www.w3.org/ns/activitystreams#Public", + "cc" => [] + } + + activity_response = + conn + |> assign(:user, user) + |> post("/users/#{user.nickname}/outbox", activity_request) + |> json_response(:created) + + assert activity_response["id"] + assert activity_response["object"] + assert activity_response["actor"] == user.ap_id + + assert %Object{data: %{"attachment" => [attachment]}} = Object.normalize(activity_response["object"]) + assert attachment["type"] == "Document" + assert attachment["name"] == desc + assert [%{"href" => attachment_href}] = attachment["url"] + assert attachment_href == object_href + + # Fails if unauthenticated conn |> post("/api/ap/upload_media", %{"file" => image, "description" => desc}) |> json_response(403) From f9d622d25a744f58fbaf8370ad4435597bb15bf0 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Thu, 19 Mar 2020 15:08:49 +0100 Subject: [PATCH 108/581] WIP --- lib/pleroma/web/activity_pub/transmogrifier.ex | 15 --------------- .../activity_pub_controller_test.exs | 18 ++++++++++++++---- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 9cd3de705..db848f657 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -202,21 +202,6 @@ def fix_context(object) do |> Map.put("conversation", context) end - def fix_attachments(%{"attachment" => attachment} = object) when is_list(attachment) do - attachments = - Enum.map(attachment, fn data -> - media_type = data["mediaType"] || data["mimeType"] - href = data["url"] || data["href"] - url = [%{"type" => "Link", "mediaType" => media_type, "href" => href}] - - data - |> Map.put("mediaType", media_type) - |> Map.put("url", url) - end) - - Map.put(object, "attachment", attachments) - end - def fix_attachments(%{"attachment" => attachment} = object) when is_map(attachment) do object |> Map.put("attachment", [attachment]) diff --git a/test/web/activity_pub/activity_pub_controller_test.exs b/test/web/activity_pub/activity_pub_controller_test.exs index 2bd494a37..01c955c0a 100644 --- a/test/web/activity_pub/activity_pub_controller_test.exs +++ b/test/web/activity_pub/activity_pub_controller_test.exs @@ -1250,7 +1250,9 @@ test "POST /api/ap/upload_media", %{conn: conn} do assert object["name"] == desc assert object["type"] == "Document" assert object["actor"] == user.ap_id - assert [%{"href" => object_href}] = object["url"] + assert [%{"href" => object_href, "mediaType" => object_mediatype}] = object["url"] + assert is_binary(object_href) + assert object_mediatype == "image/jpeg" activity_request = %{ "@context" => "https://www.w3.org/ns/activitystreams", @@ -1274,11 +1276,19 @@ test "POST /api/ap/upload_media", %{conn: conn} do assert activity_response["object"] assert activity_response["actor"] == user.ap_id - assert %Object{data: %{"attachment" => [attachment]}} = Object.normalize(activity_response["object"]) + assert %Object{data: %{"attachment" => [attachment]}} = + Object.normalize(activity_response["object"]) + assert attachment["type"] == "Document" assert attachment["name"] == desc - assert [%{"href" => attachment_href}] = attachment["url"] - assert attachment_href == object_href + + assert [ + %{ + "href" => ^object_href, + "type" => "Link", + "mediaType" => ^object_mediatype + } + ] = attachment["url"] # Fails if unauthenticated conn From 7d275970ab191af539acbc0baec3bc1d0a2558e1 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 19 Mar 2020 10:08:11 -0500 Subject: [PATCH 109/581] Add emoji reactions to features in nodeinfo --- lib/pleroma/web/nodeinfo/nodeinfo_controller.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex index 18eb41333..c653a80c3 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex @@ -74,7 +74,8 @@ def raw_nodeinfo do end, if Config.get([:instance, :safe_dm_mentions]) do "safe_dm_mentions" - end + end, + "pleroma_emoji_reactions" ] |> Enum.filter(& &1) From 9b9d67bbec537df6f7c5729e81da6deeaf896bd9 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 19 Mar 2020 18:16:12 +0100 Subject: [PATCH 110/581] Fix linting. --- .../web/activity_pub/object_validators/create_validator.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/object_validators/create_validator.ex b/lib/pleroma/web/activity_pub/object_validators/create_validator.ex index bd90f7250..9e480c4ed 100644 --- a/lib/pleroma/web/activity_pub/object_validators/create_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/create_validator.ex @@ -5,8 +5,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateNoteValidator do use Ecto.Schema - alias Pleroma.Web.ActivityPub.ObjectValidators.Types alias Pleroma.Web.ActivityPub.ObjectValidators.NoteValidator + alias Pleroma.Web.ActivityPub.ObjectValidators.Types import Ecto.Changeset From c1fd4f665335ba67336bd1b2fab2d9df5e247e08 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Thu, 19 Mar 2020 19:10:03 +0100 Subject: [PATCH 111/581] transmogrifier.ex: rework fix_attachment for better IR --- .../web/activity_pub/transmogrifier.ex | 45 +++++++++++++++++++ test/web/activity_pub/transmogrifier_test.exs | 30 +++---------- 2 files changed, 50 insertions(+), 25 deletions(-) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index db848f657..df5ca0239 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -202,6 +202,51 @@ def fix_context(object) do |> Map.put("conversation", context) end + defp add_if_present(map, _key, nil), do: map + + defp add_if_present(map, key, value) do + Map.put(map, key, value) + end + + def fix_attachments(%{"attachment" => attachment} = object) when is_list(attachment) do + attachments = + Enum.map(attachment, fn data -> + url = + cond do + is_list(data["url"]) -> List.first(data["url"]) + is_map(data["url"]) -> data["url"] + true -> nil + end + + media_type = + cond do + is_map(url) && is_binary(url["mediaType"]) -> url["mediaType"] + is_binary(data["mediaType"]) -> data["mediaType"] + is_binary(data["mimeType"]) -> data["mimeType"] + true -> nil + end + + href = + cond do + is_map(url) && is_binary(url["href"]) -> url["href"] + is_binary(data["url"]) -> data["url"] + is_binary(data["href"]) -> data["href"] + end + + attachment_url = + %{"href" => href} + |> add_if_present("mediaType", media_type) + |> add_if_present("type", Map.get(url || %{}, "type")) + + %{"url" => [attachment_url]} + |> add_if_present("mediaType", media_type) + |> add_if_present("type", data["type"]) + |> add_if_present("name", data["name"]) + end) + + Map.put(object, "attachment", attachments) + end + def fix_attachments(%{"attachment" => attachment} = object) when is_map(attachment) do object |> Map.put("attachment", [attachment]) diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index efbca82f6..242d933e7 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -1228,19 +1228,13 @@ test "it remaps video URLs as attachments if necessary" do attachment = %{ "type" => "Link", "mediaType" => "video/mp4", - "href" => - "https://peertube.moe/static/webseed/df5f464b-be8d-46fb-ad81-2d4c2d1630e3-480.mp4", - "mimeType" => "video/mp4", - "size" => 5_015_880, "url" => [ %{ "href" => "https://peertube.moe/static/webseed/df5f464b-be8d-46fb-ad81-2d4c2d1630e3-480.mp4", - "mediaType" => "video/mp4", - "type" => "Link" + "mediaType" => "video/mp4" } - ], - "width" => 480 + ] } assert object.data["url"] == @@ -2067,11 +2061,7 @@ test "returns modified object when attachment is map" do %{ "mediaType" => "video/mp4", "url" => [ - %{ - "href" => "https://peertube.moe/stat-480.mp4", - "mediaType" => "video/mp4", - "type" => "Link" - } + %{"href" => "https://peertube.moe/stat-480.mp4", "mediaType" => "video/mp4"} ] } ] @@ -2089,23 +2079,13 @@ test "returns modified object when attachment is list" do %{ "mediaType" => "video/mp4", "url" => [ - %{ - "href" => "https://pe.er/stat-480.mp4", - "mediaType" => "video/mp4", - "type" => "Link" - } + %{"href" => "https://pe.er/stat-480.mp4", "mediaType" => "video/mp4"} ] }, %{ - "href" => "https://pe.er/stat-480.mp4", "mediaType" => "video/mp4", - "mimeType" => "video/mp4", "url" => [ - %{ - "href" => "https://pe.er/stat-480.mp4", - "mediaType" => "video/mp4", - "type" => "Link" - } + %{"href" => "https://pe.er/stat-480.mp4", "mediaType" => "video/mp4"} ] } ] From 6c1232b486dcad5a644b4292697d08ebe3000cb3 Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 20 Mar 2020 15:00:28 +0100 Subject: [PATCH 112/581] NotificationController: Fix test. --- .../mastodon_api/controllers/notification_controller_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/web/mastodon_api/controllers/notification_controller_test.exs b/test/web/mastodon_api/controllers/notification_controller_test.exs index e407b8297..adbb78da6 100644 --- a/test/web/mastodon_api/controllers/notification_controller_test.exs +++ b/test/web/mastodon_api/controllers/notification_controller_test.exs @@ -310,7 +310,7 @@ test "filters notifications using include_types" do {:ok, mention_activity} = CommonAPI.post(other_user, %{"status" => "hey @#{user.nickname}"}) {:ok, create_activity} = CommonAPI.post(user, %{"status" => "hey"}) - {:ok, favorite_activity, _} = CommonAPI.favorite(create_activity.id, other_user) + {:ok, favorite_activity} = CommonAPI.favorite(other_user, create_activity.id) {:ok, reblog_activity, _} = CommonAPI.repeat(create_activity.id, other_user) {:ok, _, _, follow_activity} = CommonAPI.follow(other_user, user) From 7f9b5284fa7dd1d9100de730a6fe0c93739d1b30 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 20 Mar 2020 20:58:47 +0300 Subject: [PATCH 113/581] updating clear_config --- test/http/adapter_helper/gun_test.exs | 4 +--- test/http/adapter_helper/hackney_test.exs | 5 +---- test/http/connection_test.exs | 2 +- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/test/http/adapter_helper/gun_test.exs b/test/http/adapter_helper/gun_test.exs index 18025b986..2e961826e 100644 --- a/test/http/adapter_helper/gun_test.exs +++ b/test/http/adapter_helper/gun_test.exs @@ -28,9 +28,7 @@ defp gun_mock do end describe "options/1" do - clear_config([:http, :adapter]) do - Config.put([:http, :adapter], a: 1, b: 2) - end + setup do: clear_config([:http, :adapter], a: 1, b: 2) test "https url with default port" do uri = URI.parse("https://example.com") diff --git a/test/http/adapter_helper/hackney_test.exs b/test/http/adapter_helper/hackney_test.exs index 5fda075f6..3f7e708e0 100644 --- a/test/http/adapter_helper/hackney_test.exs +++ b/test/http/adapter_helper/hackney_test.exs @@ -6,7 +6,6 @@ defmodule Pleroma.HTTP.AdapterHelper.HackneyTest do use ExUnit.Case, async: true use Pleroma.Tests.Helpers - alias Pleroma.Config alias Pleroma.HTTP.AdapterHelper.Hackney setup_all do @@ -15,9 +14,7 @@ defmodule Pleroma.HTTP.AdapterHelper.HackneyTest do end describe "options/2" do - clear_config([:http, :adapter]) do - Config.put([:http, :adapter], a: 1, b: 2) - end + setup do: clear_config([:http, :adapter], a: 1, b: 2) test "add proxy and opts from config", %{uri: uri} do opts = Hackney.options([proxy: "localhost:8123"], uri) diff --git a/test/http/connection_test.exs b/test/http/connection_test.exs index 0f62eddd2..5cc78ad5b 100644 --- a/test/http/connection_test.exs +++ b/test/http/connection_test.exs @@ -82,7 +82,7 @@ test "with nil" do end describe "options/3" do - clear_config([:http, :proxy_url]) + setup do: clear_config([:http, :proxy_url]) test "without proxy_url in config" do Config.delete([:http, :proxy_url]) From c2e415143b1dfe5d89eff06fbce6840c445aa5fa Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Sun, 22 Mar 2020 21:51:44 +0300 Subject: [PATCH 114/581] WIP: preloading of user relations for timeline/statuses rendering (performance improvement). --- lib/pleroma/user.ex | 6 +- lib/pleroma/user_relationship.ex | 44 ++++++++++++ .../web/mastodon_api/views/account_view.ex | 69 ++++++++++++++++--- .../web/mastodon_api/views/status_view.ex | 60 ++++++++++++++-- 4 files changed, 160 insertions(+), 19 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 12c2ad815..daaa6d86b 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1642,8 +1642,12 @@ def all_superusers do |> Repo.all() end + def muting_reblogs?(%User{} = user, %User{} = target) do + UserRelationship.reblog_mute_exists?(user, target) + end + def showing_reblogs?(%User{} = user, %User{} = target) do - not UserRelationship.reblog_mute_exists?(user, target) + not muting_reblogs?(user, target) end @doc """ diff --git a/lib/pleroma/user_relationship.ex b/lib/pleroma/user_relationship.ex index 393947942..167a3919c 100644 --- a/lib/pleroma/user_relationship.ex +++ b/lib/pleroma/user_relationship.ex @@ -8,6 +8,7 @@ defmodule Pleroma.UserRelationship do import Ecto.Changeset import Ecto.Query + alias FlakeId.Ecto.CompatType alias Pleroma.Repo alias Pleroma.User alias Pleroma.UserRelationship @@ -34,6 +35,10 @@ def unquote(:"#{relationship_type}_exists?")(source, target), do: exists?(unquote(relationship_type), source, target) end + def user_relationship_types, do: Keyword.keys(user_relationship_mappings()) + + def user_relationship_mappings, do: UserRelationshipTypeEnum.__enum_map__() + def changeset(%UserRelationship{} = user_relationship, params \\ %{}) do user_relationship |> cast(params, [:relationship_type, :source_id, :target_id]) @@ -72,6 +77,45 @@ def delete(relationship_type, %User{} = source, %User{} = target) do end end + def dictionary( + source_users, + target_users, + source_to_target_rel_types \\ nil, + target_to_source_rel_types \\ nil + ) + when is_list(source_users) and is_list(target_users) do + get_bin_ids = fn user -> + with {:ok, bin_id} <- CompatType.dump(user.id), do: bin_id + end + + source_user_ids = Enum.map(source_users, &get_bin_ids.(&1)) + target_user_ids = Enum.map(target_users, &get_bin_ids.(&1)) + + get_rel_type_codes = fn rel_type -> user_relationship_mappings()[rel_type] end + + source_to_target_rel_types = + Enum.map(source_to_target_rel_types || user_relationship_types(), &get_rel_type_codes.(&1)) + + target_to_source_rel_types = + Enum.map(target_to_source_rel_types || user_relationship_types(), &get_rel_type_codes.(&1)) + + __MODULE__ + |> where( + fragment( + "(source_id = ANY(?) AND target_id = ANY(?) AND relationship_type = ANY(?)) OR \ + (source_id = ANY(?) AND target_id = ANY(?) AND relationship_type = ANY(?))", + ^source_user_ids, + ^target_user_ids, + ^source_to_target_rel_types, + ^target_user_ids, + ^source_user_ids, + ^target_to_source_rel_types + ) + ) + |> select([ur], [ur.relationship_type, ur.source_id, ur.target_id]) + |> Repo.all() + end + defp validate_not_self_relationship(%Ecto.Changeset{} = changeset) do changeset |> validate_change(:target_id, fn _, target_id -> diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 4ebce73b4..15a579278 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -10,6 +10,19 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do alias Pleroma.Web.MastodonAPI.AccountView alias Pleroma.Web.MediaProxy + def test_rel(user_relationships, rel_type, source, target, func) do + cond do + is_nil(source) or is_nil(target) -> + false + + user_relationships -> + [rel_type, source.id, target.id] in user_relationships + + true -> + func.(source, target) + end + end + def render("index.json", %{users: users} = opts) do users |> render_many(AccountView, "show.json", opts) @@ -35,21 +48,50 @@ def render("relationship.json", %{user: nil, target: _target}) do %{} end - def render("relationship.json", %{user: %User{} = user, target: %User{} = target}) do - follow_state = User.get_follow_state(user, target) + def render( + "relationship.json", + %{user: %User{} = reading_user, target: %User{} = target} = opts + ) do + user_relationships = Map.get(opts, :user_relationships) + follow_state = User.get_follow_state(reading_user, target) + + # TODO: add a note on adjusting StatusView.user_relationships_opt/1 re: preloading of user relations %{ id: to_string(target.id), following: follow_state == "accept", - followed_by: User.following?(target, user), - blocking: User.blocks_user?(user, target), - blocked_by: User.blocks_user?(target, user), - muting: User.mutes?(user, target), - muting_notifications: User.muted_notifications?(user, target), - subscribing: User.subscribed_to?(user, target), + followed_by: User.following?(target, reading_user), + blocking: + test_rel(user_relationships, :block, reading_user, target, &User.blocks_user?(&1, &2)), + blocked_by: + test_rel(user_relationships, :block, target, reading_user, &User.blocks_user?(&1, &2)), + muting: test_rel(user_relationships, :mute, reading_user, target, &User.mutes?(&1, &2)), + muting_notifications: + test_rel( + user_relationships, + :notification_mute, + reading_user, + target, + &User.muted_notifications?(&1, &2) + ), + subscribing: + test_rel( + user_relationships, + :inverse_subscription, + target, + reading_user, + &User.subscribed_to?(&2, &1) + ), requested: follow_state == "pending", - domain_blocking: User.blocks_domain?(user, target), - showing_reblogs: User.showing_reblogs?(user, target), + domain_blocking: User.blocks_domain?(reading_user, target), + showing_reblogs: + not test_rel( + user_relationships, + :reblog_mute, + reading_user, + target, + &User.muting_reblogs?(&1, &2) + ), endorsed: false } end @@ -93,7 +135,12 @@ defp do_render("show.json", %{user: user} = opts) do } end) - relationship = render("relationship.json", %{user: opts[:for], target: user}) + relationship = + render("relationship.json", %{ + user: opts[:for], + target: user, + user_relationships: opts[:user_relationships] + }) %{ id: to_string(user.id), diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index f7469cdff..e0c368ec9 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -13,6 +13,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do alias Pleroma.Object alias Pleroma.Repo alias Pleroma.User + alias Pleroma.UserRelationship alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.MastodonAPI.AccountView @@ -70,11 +71,34 @@ defp reblogged?(activity, user) do present?(user && user.ap_id in (object.data["announcements"] || [])) end - def render("index.json", opts) do - replied_to_activities = get_replied_to_activities(opts.activities) - opts = Map.put(opts, :replied_to_activities, replied_to_activities) + defp user_relationships_opt(opts) do + reading_user = opts[:for] - safe_render_many(opts.activities, StatusView, "show.json", opts) + if reading_user do + activities = opts[:activities] + actors = Enum.map(activities, fn a -> get_user(a.data["actor"]) end) + + UserRelationship.dictionary( + [reading_user], + actors, + [:block, :mute, :notification_mute, :reblog_mute], + [:block, :inverse_subscription] + ) + else + [] + end + end + + def render("index.json", opts) do + activities = opts.activities + replied_to_activities = get_replied_to_activities(activities) + + opts = + opts + |> Map.put(:replied_to_activities, replied_to_activities) + |> Map.put(:user_relationships, user_relationships_opt(opts)) + + safe_render_many(activities, StatusView, "show.json", opts) end def render( @@ -107,7 +131,12 @@ def render( id: to_string(activity.id), uri: activity_object.data["id"], url: activity_object.data["id"], - account: AccountView.render("show.json", %{user: user, for: opts[:for]}), + account: + AccountView.render("show.json", %{ + user: user, + for: opts[:for], + user_relationships: opts[:user_relationships] + }), in_reply_to_id: nil, in_reply_to_account_id: nil, reblog: reblogged, @@ -253,11 +282,28 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} _ -> [] end + user_relationships_opt = opts[:user_relationships] + + muted = + thread_muted? || + Pleroma.Web.MastodonAPI.AccountView.test_rel( + user_relationships_opt, + :mute, + opts[:for], + user, + fn for_user, user -> User.mutes?(for_user, user) end + ) + %{ id: to_string(activity.id), uri: object.data["id"], url: url, - account: AccountView.render("show.json", %{user: user, for: opts[:for]}), + account: + AccountView.render("show.json", %{ + user: user, + for: opts[:for], + user_relationships: user_relationships_opt + }), in_reply_to_id: reply_to && to_string(reply_to.id), in_reply_to_account_id: reply_to_user && to_string(reply_to_user.id), reblog: nil, @@ -270,7 +316,7 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} reblogged: reblogged?(activity, opts[:for]), favourited: present?(favorited), bookmarked: present?(bookmarked), - muted: thread_muted? || User.mutes?(opts[:for], user), + muted: muted, pinned: pinned?(activity, user), sensitive: sensitive, spoiler_text: summary, From a6ee6784bc74b311d454112c427f41b1fdec6ce0 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 28 Feb 2020 11:16:40 +0300 Subject: [PATCH 115/581] creating trusted app from adminFE & mix task --- CHANGELOG.md | 2 + docs/API/admin_api.md | 101 ++++++++++ docs/administration/CLI_tasks/oauth_app.md | 16 ++ lib/mix/tasks/pleroma/app.ex | 49 +++++ .../web/admin_api/admin_api_controller.ex | 79 ++++++++ .../controllers/account_controller.ex | 1 + .../web/mastodon_api/views/app_view.ex | 15 ++ lib/pleroma/web/oauth/app.ex | 82 +++++++- lib/pleroma/web/router.ex | 5 + lib/pleroma/web/twitter_api/twitter_api.ex | 3 +- .../20200227122417_add_trusted_to_apps.exs | 9 + test/support/factory.ex | 2 +- test/tasks/app_test.exs | 65 ++++++ .../admin_api/admin_api_controller_test.exs | 185 ++++++++++++++++++ .../controllers/account_controller_test.exs | 67 +++++++ 15 files changed, 678 insertions(+), 3 deletions(-) create mode 100644 docs/administration/CLI_tasks/oauth_app.md create mode 100644 lib/mix/tasks/pleroma/app.ex create mode 100644 priv/repo/migrations/20200227122417_add_trusted_to_apps.exs create mode 100644 test/tasks/app_test.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index 15a073c64..a1271cbca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -99,6 +99,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Add an option `authorized_fetch_mode` to require HTTP signatures for AP fetches. - ActivityPub: support for `replies` collection (output for outgoing federation & fetching on incoming federation). - Mix task to refresh counter cache (`mix pleroma.refresh_counter_cache`) +- Mix task to create trusted OAuth App.
API Changes @@ -145,6 +146,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - ActivityPub: `[:activitypub, :note_replies_output_limit]` setting sets the number of note self-replies to output on outgoing federation. - Admin API: `GET /api/pleroma/admin/stats` to get status count by visibility scope - Admin API: `GET /api/pleroma/admin/statuses` - list all statuses (accepts `godmode` and `local_only`) +- Admin API: endpoints for create/update/delete OAuth Apps.
### Fixed diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index 47afdfba5..4d12698ec 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -983,3 +983,104 @@ Loads json generated from `config/descriptions.exs`. } } ``` + +## `GET /api/pleroma/admin/oauth_app` + +### List OAuth app + +- Params: + - *optional* `name` + - *optional* `client_id` + - *optional* `page` + - *optional* `page_size` + - *optional* `trusted` + +- Response: + +```json +{ + "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": 17, + "page_size": 50 +} +``` + + +## `POST /api/pleroma/admin/oauth_app` + +### Create OAuth App + +- Params: + - `name` + - `redirect_uris` + - `scopes` + - *optional* `website` + - *optional* `trusted` + +- Response: + +```json +{ + "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 +} +``` + +- On failure: +```json +{ + "redirect_uris": "can't be blank", + "name": "can't be blank" +} +``` + +## `PATCH /api/pleroma/admin/oauth_app/:id` + +### Update OAuth App + +- Params: + - *optional* `name` + - *optional* `redirect_uris` + - *optional* `scopes` + - *optional* `website` + - *optional* `trusted` + +- Response: + +```json +{ + "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 +} +``` + +## `DELETE /api/pleroma/admin/oauth_app/:id` + +### Delete OAuth App + +- Params: None + +- Response: + - On success: `204`, empty response + - On failure: + - 400 Bad Request `"Invalid parameters"` when `status` is missing \ No newline at end of file diff --git a/docs/administration/CLI_tasks/oauth_app.md b/docs/administration/CLI_tasks/oauth_app.md new file mode 100644 index 000000000..4d6bfc25a --- /dev/null +++ b/docs/administration/CLI_tasks/oauth_app.md @@ -0,0 +1,16 @@ +# Creating trusted OAuth App + +{! backend/administration/CLI_tasks/general_cli_task_info.include !} + +## Create trusted OAuth App. + +Optional params: + * `-s SCOPES` - scopes for app, e.g. `read,write,follow,push`. + +```sh tab="OTP" + ./bin/pleroma_ctl app create -n APP_NAME -r REDIRECT_URI +``` + +```sh tab="From Source" +mix pleroma.app create -n APP_NAME -r REDIRECT_URI +``` \ No newline at end of file diff --git a/lib/mix/tasks/pleroma/app.ex b/lib/mix/tasks/pleroma/app.ex new file mode 100644 index 000000000..463e2449f --- /dev/null +++ b/lib/mix/tasks/pleroma/app.ex @@ -0,0 +1,49 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Mix.Tasks.Pleroma.App do + @moduledoc File.read!("docs/administration/CLI_tasks/oauth_app.md") + use Mix.Task + + import Mix.Pleroma + + @shortdoc "Creates trusted OAuth App" + + def run(["create" | options]) do + start_pleroma() + + {opts, _} = + OptionParser.parse!(options, + strict: [name: :string, redirect_uri: :string, scopes: :string], + aliases: [n: :name, r: :redirect_uri, s: :scopes] + ) + + scopes = + if opts[:scopes] do + String.split(opts[:scopes], ",") + else + ["read", "write", "follow", "push"] + end + + params = %{ + client_name: opts[:name], + redirect_uris: opts[:redirect_uri], + trusted: true, + scopes: scopes + } + + with {:ok, app} <- Pleroma.Web.OAuth.App.create(params) do + shell_info("#{app.client_name} successfully created:") + shell_info("App client_id: " <> app.client_id) + shell_info("App client_secret: " <> app.client_secret) + else + {:error, changeset} -> + shell_error("Creating failed:") + + Enum.each(Pleroma.Web.OAuth.App.errors(changeset), fn {key, error} -> + shell_error("#{key}: #{error}") + end) + end + end +end diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index 175260bc2..b03fa7169 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -27,7 +27,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do alias Pleroma.Web.AdminAPI.Search alias Pleroma.Web.CommonAPI alias Pleroma.Web.Endpoint + alias Pleroma.Web.MastodonAPI.AppView alias Pleroma.Web.MastodonAPI.StatusView + alias Pleroma.Web.OAuth.App alias Pleroma.Web.Router require Logger @@ -978,6 +980,83 @@ 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/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 6dbf11ac9..5f8aa2e3e 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -92,6 +92,7 @@ def create( |> Map.put("fullname", params["fullname"] || nickname) |> Map.put("bio", params["bio"] || "") |> Map.put("confirm", params["password"]) + |> Map.put("trusted_app", app.trusted) with :ok <- validate_email_param(params), {:ok, user} <- TwitterAPI.register_user(params, need_confirmation: true), diff --git a/lib/pleroma/web/mastodon_api/views/app_view.ex b/lib/pleroma/web/mastodon_api/views/app_view.ex index d934e2107..36071cd25 100644 --- a/lib/pleroma/web/mastodon_api/views/app_view.ex +++ b/lib/pleroma/web/mastodon_api/views/app_view.ex @@ -7,6 +7,21 @@ defmodule Pleroma.Web.MastodonAPI.AppView do alias Pleroma.Web.OAuth.App + def render("index.json", %{apps: apps, count: count, page_size: page_size, admin: true}) do + %{ + apps: render_many(apps, Pleroma.Web.MastodonAPI.AppView, "show.json", %{admin: true}), + count: count, + page_size: page_size + } + end + + def render("show.json", %{admin: true, app: %App{} = app} = assigns) do + "show.json" + |> render(Map.delete(assigns, :admin)) + |> Map.put(:trusted, app.trusted) + |> Map.put(:id, app.id) + end + def render("show.json", %{app: %App{} = app}) do %{ id: app.id |> to_string, diff --git a/lib/pleroma/web/oauth/app.ex b/lib/pleroma/web/oauth/app.ex index 01ed326f4..6a6d5f2e2 100644 --- a/lib/pleroma/web/oauth/app.ex +++ b/lib/pleroma/web/oauth/app.ex @@ -5,6 +5,7 @@ defmodule Pleroma.Web.OAuth.App do use Ecto.Schema import Ecto.Changeset + import Ecto.Query alias Pleroma.Repo @type t :: %__MODULE__{} @@ -16,14 +17,24 @@ defmodule Pleroma.Web.OAuth.App do field(:website, :string) field(:client_id, :string) field(:client_secret, :string) + field(:trusted, :boolean, default: false) + + has_many(:oauth_authorizations, Pleroma.Web.OAuth.Authorization, on_delete: :delete_all) + has_many(:oauth_tokens, Pleroma.Web.OAuth.Token, on_delete: :delete_all) timestamps() end + @spec changeset(App.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() def register_changeset(struct, params \\ %{}) do changeset = struct - |> cast(params, [:client_name, :redirect_uris, :scopes, :website]) + |> changeset(params) |> validate_required([:client_name, :redirect_uris, :scopes]) if changeset.valid? do @@ -41,6 +52,21 @@ def register_changeset(struct, params \\ %{}) do end end + @spec create(map()) :: {:ok, App.t()} | {:error, Ecto.Changeset.t()} + def create(params) do + with changeset <- __MODULE__.register_changeset(%__MODULE__{}, params) do + Repo.insert(changeset) + end + 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) + end + end + @doc """ Gets app by attrs or create new with attrs. And updates the scopes if need. @@ -65,4 +91,58 @@ defp update_scopes(%__MODULE__{} = app, scopes) do |> change(%{scopes: scopes}) |> Repo.update() end + + @spec search(map()) :: {:ok, [App.t()], non_neg_integer()} + def search(params) do + query = from(a in __MODULE__) + + query = + if params[:client_name] do + from(a in query, where: a.client_name == ^params[:client_name]) + else + query + end + + query = + if params[:client_id] do + from(a in query, where: a.client_id == ^params[:client_id]) + else + query + end + + query = + if Map.has_key?(params, :trusted) do + from(a in query, where: a.trusted == ^params[:trusted]) + else + query + end + + query = + from(u in query, + limit: ^params[:page_size], + offset: ^((params[:page] - 1) * params[:page_size]) + ) + + count = Repo.aggregate(__MODULE__, :count, :id) + + {:ok, Repo.all(query), count} + end + + @spec destroy(pos_integer()) :: {:ok, App.t()} | {:error, Ecto.Changeset.t()} + def destroy(id) do + with %__MODULE__{} = app <- Repo.get(__MODULE__, id) do + Repo.delete(app) + end + end + + @spec errors(Ecto.Changeset.t()) :: map() + def errors(changeset) do + Enum.reduce(changeset.errors, %{}, fn + {:client_name, {error, _}}, acc -> + Map.put(acc, :name, error) + + {key, {error, _}}, acc -> + Map.put(acc, key, error) + end) + end end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 3f36f6c1a..c37ef59a0 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -203,6 +203,11 @@ 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) end scope "/api/pleroma/emoji", Pleroma.Web.PleromaAPI do diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index f9c0994da..7a1ba6936 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -13,6 +13,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do def register_user(params, opts \\ []) do token = params["token"] + trusted_app? = params["trusted_app"] params = %{ nickname: params["nickname"], @@ -29,7 +30,7 @@ def register_user(params, opts \\ []) do captcha_enabled = Pleroma.Config.get([Pleroma.Captcha, :enabled]) # true if captcha is disabled or enabled and valid, false otherwise captcha_ok = - if not captcha_enabled do + if trusted_app? || not captcha_enabled do :ok else Pleroma.Captcha.validate( diff --git a/priv/repo/migrations/20200227122417_add_trusted_to_apps.exs b/priv/repo/migrations/20200227122417_add_trusted_to_apps.exs new file mode 100644 index 000000000..4e2a62af0 --- /dev/null +++ b/priv/repo/migrations/20200227122417_add_trusted_to_apps.exs @@ -0,0 +1,9 @@ +defmodule Pleroma.Repo.Migrations.AddTrustedToApps do + use Ecto.Migration + + def change do + alter table(:apps) do + add(:trusted, :boolean, default: false) + end + end +end diff --git a/test/support/factory.ex b/test/support/factory.ex index af639b6cd..f0b797fd4 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -294,7 +294,7 @@ def follow_activity_factory do def oauth_app_factory do %Pleroma.Web.OAuth.App{ - client_name: "Some client", + client_name: sequence(:client_name, &"Some client #{&1}"), redirect_uris: "https://example.com/callback", scopes: ["read", "write", "follow", "push", "admin"], website: "https://example.com", diff --git a/test/tasks/app_test.exs b/test/tasks/app_test.exs new file mode 100644 index 000000000..b8f03566d --- /dev/null +++ b/test/tasks/app_test.exs @@ -0,0 +1,65 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Mix.Tasks.Pleroma.AppTest do + use Pleroma.DataCase, async: true + + setup_all do + Mix.shell(Mix.Shell.Process) + + on_exit(fn -> + Mix.shell(Mix.Shell.IO) + end) + end + + describe "creates new app" do + test "with default scopes" do + name = "Some name" + redirect = "https://example.com" + Mix.Tasks.Pleroma.App.run(["create", "-n", name, "-r", redirect]) + + assert_app(name, redirect, ["read", "write", "follow", "push"]) + end + + test "with custom scopes" do + name = "Another name" + redirect = "https://example.com" + + Mix.Tasks.Pleroma.App.run([ + "create", + "-n", + name, + "-r", + redirect, + "-s", + "read,write,follow,push,admin" + ]) + + assert_app(name, redirect, ["read", "write", "follow", "push", "admin"]) + end + end + + test "with errors" do + Mix.Tasks.Pleroma.App.run(["create"]) + {:mix_shell, :error, ["Creating failed:"]} + {:mix_shell, :error, ["name: can't be blank"]} + {:mix_shell, :error, ["redirect_uris: can't be blank"]} + end + + defp assert_app(name, redirect, scopes) do + app = Repo.get_by(Pleroma.Web.OAuth.App, client_name: name) + + assert_received {:mix_shell, :info, [message]} + assert message == "#{name} successfully created:" + + assert_received {:mix_shell, :info, [message]} + assert message == "App client_id: #{app.client_id}" + + assert_received {:mix_shell, :info, [message]} + assert message == "App client_secret: #{app.client_secret}" + + assert app.scopes == scopes + assert app.redirect_uris == redirect + end +end diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index 0a902585d..d77e8d1d2 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -3623,6 +3623,191 @@ 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 = Pleroma.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 = Pleroma.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/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index a9fa0ce48..f770232df 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -942,6 +942,73 @@ test "returns forbidden if token is invalid", %{conn: conn, valid_params: valid_ res = post(conn, "/api/v1/accounts", valid_params) assert json_response(res, 403) == %{"error" => "Invalid credentials"} end + + test "registration from trusted app" do + clear_config([Pleroma.Captcha, :enabled], true) + app = insert(:oauth_app, trusted: true, scopes: ["read", "write", "follow", "push"]) + + conn = + build_conn() + |> post("/oauth/token", %{ + "grant_type" => "client_credentials", + "client_id" => app.client_id, + "client_secret" => app.client_secret + }) + + assert %{"access_token" => token, "token_type" => "Bearer"} = json_response(conn, 200) + + response = + build_conn() + |> Plug.Conn.put_req_header("authorization", "Bearer " <> token) + |> post("/api/v1/accounts", %{ + nickname: "nickanme", + agreement: true, + email: "email@example.com", + fullname: "Lain", + username: "Lain", + password: "some_password", + confirm: "some_password" + }) + |> json_response(200) + + assert %{ + "access_token" => access_token, + "created_at" => _, + "scope" => ["read", "write", "follow", "push"], + "token_type" => "Bearer" + } = response + + response = + build_conn() + |> Plug.Conn.put_req_header("authorization", "Bearer " <> access_token) + |> get("/api/v1/accounts/verify_credentials") + |> json_response(200) + + assert %{ + "acct" => "Lain", + "bot" => false, + "display_name" => "Lain", + "follow_requests_count" => 0, + "followers_count" => 0, + "following_count" => 0, + "locked" => false, + "note" => "", + "source" => %{ + "fields" => [], + "note" => "", + "pleroma" => %{ + "actor_type" => "Person", + "discoverable" => false, + "no_rich_text" => false, + "show_role" => true + }, + "privacy" => "public", + "sensitive" => false + }, + "statuses_count" => 0, + "username" => "Lain" + } = response + end end describe "create account by app / rate limit" do From 3c78e5f3275494b3dc4546e65f19eb3a3c97033a Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Mon, 23 Mar 2020 12:01:11 +0300 Subject: [PATCH 116/581] Preloading of follow relations for timeline/statuses rendering (performance improvement). Refactoring. --- lib/pleroma/following_relationship.ex | 26 +++++++ lib/pleroma/user.ex | 7 ++ lib/pleroma/user_relationship.ex | 13 ++++ .../web/mastodon_api/views/account_view.ex | 75 ++++++++++++++----- .../web/mastodon_api/views/status_view.ex | 46 +++++++----- 5 files changed, 130 insertions(+), 37 deletions(-) diff --git a/lib/pleroma/following_relationship.ex b/lib/pleroma/following_relationship.ex index a6d281151..dd1696136 100644 --- a/lib/pleroma/following_relationship.ex +++ b/lib/pleroma/following_relationship.ex @@ -129,4 +129,30 @@ def move_following(origin, target) do move_following(origin, target) end end + + def all_between_user_sets( + source_users, + target_users + ) + when is_list(source_users) and is_list(target_users) do + get_bin_ids = fn user -> + with {:ok, bin_id} <- CompatType.dump(user.id), do: bin_id + end + + source_user_ids = Enum.map(source_users, &get_bin_ids.(&1)) + target_user_ids = Enum.map(target_users, &get_bin_ids.(&1)) + + __MODULE__ + |> where( + fragment( + "(follower_id = ANY(?) AND following_id = ANY(?)) OR \ + (follower_id = ANY(?) AND following_id = ANY(?))", + ^source_user_ids, + ^target_user_ids, + ^target_user_ids, + ^source_user_ids + ) + ) + |> Repo.all() + end end diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index daaa6d86b..eb72755a0 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -674,7 +674,14 @@ def unfollow(%User{} = follower, %User{} = followed) do def get_follow_state(%User{} = follower, %User{} = following) do following_relationship = FollowingRelationship.get(follower, following) + get_follow_state(follower, following, following_relationship) + end + def get_follow_state( + %User{} = follower, + %User{} = following, + following_relationship + ) do case {following_relationship, following.local} do {nil, false} -> case Utils.fetch_latest_follow(follower, following) do diff --git a/lib/pleroma/user_relationship.ex b/lib/pleroma/user_relationship.ex index 167a3919c..9423e3a42 100644 --- a/lib/pleroma/user_relationship.ex +++ b/lib/pleroma/user_relationship.ex @@ -116,6 +116,19 @@ def dictionary( |> Repo.all() end + def exists?(dictionary, rel_type, source, target, func) do + cond do + is_nil(source) or is_nil(target) -> + false + + dictionary -> + [rel_type, source.id, target.id] in dictionary + + true -> + func.(source, target) + end + end + defp validate_not_self_relationship(%Ecto.Changeset{} = changeset) do changeset |> validate_change(:target_id, fn _, target_id -> diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 15a579278..2fe46158b 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -6,21 +6,15 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do use Pleroma.Web, :view alias Pleroma.User + alias Pleroma.UserRelationship alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.MastodonAPI.AccountView alias Pleroma.Web.MediaProxy - def test_rel(user_relationships, rel_type, source, target, func) do - cond do - is_nil(source) or is_nil(target) -> - false - - user_relationships -> - [rel_type, source.id, target.id] in user_relationships - - true -> - func.(source, target) - end + defp find_following_rel(following_relationships, follower, following) do + Enum.find(following_relationships, fn + fr -> fr.follower_id == follower.id and fr.following_id == following.id + end) end def render("index.json", %{users: users} = opts) do @@ -53,21 +47,61 @@ def render( %{user: %User{} = reading_user, target: %User{} = target} = opts ) do user_relationships = Map.get(opts, :user_relationships) + following_relationships = opts[:following_relationships] - follow_state = User.get_follow_state(reading_user, target) + follow_state = + if following_relationships do + user_to_target_following_relation = + find_following_rel(following_relationships, reading_user, target) + + User.get_follow_state(reading_user, target, user_to_target_following_relation) + else + User.get_follow_state(reading_user, target) + end + + followed_by = + if following_relationships do + with %{state: "accept"} <- + find_following_rel(following_relationships, target, reading_user) do + true + else + _ -> false + end + else + User.following?(target, reading_user) + end # TODO: add a note on adjusting StatusView.user_relationships_opt/1 re: preloading of user relations %{ id: to_string(target.id), following: follow_state == "accept", - followed_by: User.following?(target, reading_user), + followed_by: followed_by, blocking: - test_rel(user_relationships, :block, reading_user, target, &User.blocks_user?(&1, &2)), + UserRelationship.exists?( + user_relationships, + :block, + reading_user, + target, + &User.blocks_user?(&1, &2) + ), blocked_by: - test_rel(user_relationships, :block, target, reading_user, &User.blocks_user?(&1, &2)), - muting: test_rel(user_relationships, :mute, reading_user, target, &User.mutes?(&1, &2)), + UserRelationship.exists?( + user_relationships, + :block, + target, + reading_user, + &User.blocks_user?(&1, &2) + ), + muting: + UserRelationship.exists?( + user_relationships, + :mute, + reading_user, + target, + &User.mutes?(&1, &2) + ), muting_notifications: - test_rel( + UserRelationship.exists?( user_relationships, :notification_mute, reading_user, @@ -75,7 +109,7 @@ def render( &User.muted_notifications?(&1, &2) ), subscribing: - test_rel( + UserRelationship.exists?( user_relationships, :inverse_subscription, target, @@ -85,7 +119,7 @@ def render( requested: follow_state == "pending", domain_blocking: User.blocks_domain?(reading_user, target), showing_reblogs: - not test_rel( + not UserRelationship.exists?( user_relationships, :reblog_mute, reading_user, @@ -139,7 +173,8 @@ defp do_render("show.json", %{user: user} = opts) do render("relationship.json", %{ user: opts[:for], target: user, - user_relationships: opts[:user_relationships] + user_relationships: opts[:user_relationships], + following_relationships: opts[:following_relationships] }) %{ diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index e0c368ec9..55a5513f9 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -9,6 +9,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do alias Pleroma.Activity alias Pleroma.ActivityExpiration + alias Pleroma.FollowingRelationship alias Pleroma.HTML alias Pleroma.Object alias Pleroma.Repo @@ -71,22 +72,31 @@ defp reblogged?(activity, user) do present?(user && user.ap_id in (object.data["announcements"] || [])) end - defp user_relationships_opt(opts) do + defp relationships_opts(opts) do reading_user = opts[:for] - if reading_user do - activities = opts[:activities] - actors = Enum.map(activities, fn a -> get_user(a.data["actor"]) end) + {user_relationships, following_relationships} = + if reading_user do + activities = opts[:activities] + actors = Enum.map(activities, fn a -> get_user(a.data["actor"]) end) - UserRelationship.dictionary( - [reading_user], - actors, - [:block, :mute, :notification_mute, :reblog_mute], - [:block, :inverse_subscription] - ) - else - [] - end + user_relationships = + UserRelationship.dictionary( + [reading_user], + actors, + [:block, :mute, :notification_mute, :reblog_mute], + [:block, :inverse_subscription] + ) + + following_relationships = + FollowingRelationship.all_between_user_sets([reading_user], actors) + + {user_relationships, following_relationships} + else + {[], []} + end + + %{user_relationships: user_relationships, following_relationships: following_relationships} end def render("index.json", opts) do @@ -96,7 +106,7 @@ def render("index.json", opts) do opts = opts |> Map.put(:replied_to_activities, replied_to_activities) - |> Map.put(:user_relationships, user_relationships_opt(opts)) + |> Map.merge(relationships_opts(opts)) safe_render_many(activities, StatusView, "show.json", opts) end @@ -135,7 +145,8 @@ def render( AccountView.render("show.json", %{ user: user, for: opts[:for], - user_relationships: opts[:user_relationships] + user_relationships: opts[:user_relationships], + following_relationships: opts[:following_relationships] }), in_reply_to_id: nil, in_reply_to_account_id: nil, @@ -286,7 +297,7 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} muted = thread_muted? || - Pleroma.Web.MastodonAPI.AccountView.test_rel( + UserRelationship.exists?( user_relationships_opt, :mute, opts[:for], @@ -302,7 +313,8 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} AccountView.render("show.json", %{ user: user, for: opts[:for], - user_relationships: user_relationships_opt + user_relationships: user_relationships_opt, + following_relationships: opts[:following_relationships] }), in_reply_to_id: reply_to && to_string(reply_to.id), in_reply_to_account_id: reply_to_user && to_string(reply_to_user.id), From eec1fcaf55bdcbc2d3aed4eaf044bb8ef6c4effa Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 23 Mar 2020 15:58:55 +0100 Subject: [PATCH 117/581] Home timeline tests: Add failing test for relationships --- .../controllers/timeline_controller_test.exs | 57 +++++++++++++++++-- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/test/web/mastodon_api/controllers/timeline_controller_test.exs b/test/web/mastodon_api/controllers/timeline_controller_test.exs index 6fedb4223..47849fc48 100644 --- a/test/web/mastodon_api/controllers/timeline_controller_test.exs +++ b/test/web/mastodon_api/controllers/timeline_controller_test.exs @@ -21,9 +21,12 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do setup do: oauth_access(["read:statuses"]) test "the home timeline", %{user: user, conn: conn} do - following = insert(:user) + following = insert(:user, nickname: "followed") + third_user = insert(:user, nickname: "repeated") - {:ok, _activity} = CommonAPI.post(following, %{"status" => "test"}) + {:ok, _activity} = CommonAPI.post(following, %{"status" => "post"}) + {:ok, activity} = CommonAPI.post(third_user, %{"status" => "repeated post"}) + {:ok, _, _} = CommonAPI.repeat(activity.id, following) ret_conn = get(conn, "/api/v1/timelines/home") @@ -31,9 +34,55 @@ test "the home timeline", %{user: user, conn: conn} do {:ok, _user} = User.follow(user, following) - conn = get(conn, "/api/v1/timelines/home") + ret_conn = get(conn, "/api/v1/timelines/home") - assert [%{"content" => "test"}] = json_response(conn, :ok) + assert [ + %{ + "reblog" => %{ + "content" => "repeated post", + "account" => %{ + "pleroma" => %{ + "relationship" => %{"following" => false, "followed_by" => false} + } + } + }, + "account" => %{"pleroma" => %{"relationship" => %{"following" => true}}} + }, + %{ + "content" => "post", + "account" => %{ + "acct" => "followed", + "pleroma" => %{"relationship" => %{"following" => true}} + } + } + ] = json_response(ret_conn, :ok) + + {:ok, _user} = User.follow(third_user, user) + + ret_conn = get(conn, "/api/v1/timelines/home") + + assert [ + %{ + "reblog" => %{ + "content" => "repeated post", + "account" => %{ + "acct" => "repeated", + "pleroma" => %{ + # This part does not match correctly + "relationship" => %{"following" => false, "followed_by" => true} + } + } + }, + "account" => %{"pleroma" => %{"relationship" => %{"following" => true}}} + }, + %{ + "content" => "post", + "account" => %{ + "acct" => "followed", + "pleroma" => %{"relationship" => %{"following" => true}} + } + } + ] = json_response(ret_conn, :ok) end test "the home timeline when the direct messages are excluded", %{user: user, conn: conn} do From 3bd2829e5c125f961b7508bf40ef534a21070562 Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 23 Mar 2020 18:56:01 +0100 Subject: [PATCH 118/581] Benchmarks: Add timeline benchmark --- benchmarks/load_testing/generator.ex | 3 +- .../mix/tasks/pleroma/benchmarks/timelines.ex | 76 +++++++++++++++++++ lib/pleroma/web/controller_helper.ex | 7 +- 3 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 benchmarks/mix/tasks/pleroma/benchmarks/timelines.ex diff --git a/benchmarks/load_testing/generator.ex b/benchmarks/load_testing/generator.ex index 3f88fefd7..17e89c13c 100644 --- a/benchmarks/load_testing/generator.ex +++ b/benchmarks/load_testing/generator.ex @@ -22,9 +22,10 @@ def generate_like_activities(user, posts) do def generate_users(opts) do IO.puts("Starting generating #{opts[:users_max]} users...") - {time, _} = :timer.tc(fn -> do_generate_users(opts) end) + {time, users} = :timer.tc(fn -> do_generate_users(opts) end) IO.puts("Inserting users take #{to_sec(time)} sec.\n") + users end defp do_generate_users(opts) do diff --git a/benchmarks/mix/tasks/pleroma/benchmarks/timelines.ex b/benchmarks/mix/tasks/pleroma/benchmarks/timelines.ex new file mode 100644 index 000000000..dc6f3d3fc --- /dev/null +++ b/benchmarks/mix/tasks/pleroma/benchmarks/timelines.ex @@ -0,0 +1,76 @@ +defmodule Mix.Tasks.Pleroma.Benchmarks.Timelines do + use Mix.Task + alias Pleroma.Repo + alias Pleroma.LoadTesting.Generator + + alias Pleroma.Web.CommonAPI + + def run(_args) do + Mix.Pleroma.start_pleroma() + + # Cleaning tables + clean_tables() + + [{:ok, user} | users] = Generator.generate_users(users_max: 1000) + + # Let the user make 100 posts + + 1..100 + |> Enum.each(fn i -> CommonAPI.post(user, %{"status" => to_string(i)}) end) + + # Let 10 random users post + posts = + users + |> Enum.take_random(10) + |> Enum.map(fn {:ok, random_user} -> + {:ok, activity} = CommonAPI.post(random_user, %{"status" => "."}) + activity + end) + + # let our user repeat them + posts + |> Enum.each(fn activity -> + CommonAPI.repeat(activity.id, user) + end) + + Benchee.run( + %{ + "user timeline, no followers" => fn reading_user -> + conn = + Phoenix.ConnTest.build_conn() + |> Plug.Conn.assign(:user, reading_user) + |> Plug.Conn.assign(:skip_link_headers, true) + + Pleroma.Web.MastodonAPI.AccountController.statuses(conn, %{"id" => user.id}) + end + }, + inputs: %{"user" => user, "no user" => nil}, + time: 60 + ) + + users + |> Enum.each(fn {:ok, follower} -> Pleroma.User.follow(follower, user) end) + + Benchee.run( + %{ + "user timeline, all following" => fn reading_user -> + conn = + Phoenix.ConnTest.build_conn() + |> Plug.Conn.assign(:user, reading_user) + |> Plug.Conn.assign(:skip_link_headers, true) + + Pleroma.Web.MastodonAPI.AccountController.statuses(conn, %{"id" => user.id}) + end + }, + inputs: %{"user" => user, "no user" => nil}, + time: 60 + ) + end + + defp clean_tables do + IO.puts("Deleting old data...\n") + Ecto.Adapters.SQL.query!(Repo, "TRUNCATE users CASCADE;") + Ecto.Adapters.SQL.query!(Repo, "TRUNCATE activities CASCADE;") + Ecto.Adapters.SQL.query!(Repo, "TRUNCATE objects CASCADE;") + end +end diff --git a/lib/pleroma/web/controller_helper.ex b/lib/pleroma/web/controller_helper.ex index ad293cda9..b49523ec3 100644 --- a/lib/pleroma/web/controller_helper.ex +++ b/lib/pleroma/web/controller_helper.ex @@ -34,7 +34,12 @@ defp param_to_integer(val, default) when is_binary(val) do defp param_to_integer(_, default), do: default - def add_link_headers(conn, activities, extra_params \\ %{}) do + def add_link_headers(conn, activities, extra_params \\ %{}) + + def add_link_headers(%{assigns: %{skip_link_headers: true}} = conn, _activities, _extra_params), + do: conn + + def add_link_headers(conn, activities, extra_params) do case List.last(activities) do %{id: max_id} -> params = From d1a9716a988fe9f670033ad46cc9637038fbd1e8 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 24 Mar 2020 17:38:18 +0400 Subject: [PATCH 119/581] Fix activity deletion --- lib/pleroma/web/activity_pub/activity_pub.ex | 10 ++++++++++ test/web/activity_pub/activity_pub_test.exs | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 30e282840..974231925 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -583,6 +583,16 @@ defp do_delete(%Object{data: %{"id" => id, "actor" => actor}} = object, options) end end + defp do_delete(%Object{data: %{"type" => "Tombstone", "id" => ap_id}}, _) do + activity = + ap_id + |> Activity.Queries.by_object_id() + |> Activity.Queries.by_type("Delete") + |> Repo.one() + + {:ok, activity} + end + @spec block(User.t(), User.t(), String.t() | nil, boolean()) :: {:ok, Activity.t()} | {:error, any()} def block(blocker, blocked, activity_id \\ nil, local \\ true) do diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index a43dd34f0..049b14498 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -1425,6 +1425,12 @@ test "it creates a delete activity and deletes the original object" do assert Repo.get(Object, object.id).data["type"] == "Tombstone" end + test "it doesn't fail when an activity was already deleted" do + {:ok, delete} = insert(:note_activity) |> Object.normalize() |> ActivityPub.delete() + + assert {:ok, ^delete} = delete |> Object.normalize() |> ActivityPub.delete() + end + test "decrements user note count only for public activities" do user = insert(:user, note_count: 10) From 4a2538967caf5b0f9970cc5f973c16ea5d776aa3 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 24 Mar 2020 20:18:27 +0400 Subject: [PATCH 120/581] Support pagination in conversations --- CHANGELOG.md | 3 +++ lib/pleroma/web/activity_pub/activity_pub.ex | 2 +- .../controllers/pleroma_api_controller.ex | 10 +++++----- .../controllers/pleroma_api_controller_test.exs | 17 +++++++++++++++++ 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15a073c64..905364d7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Mastodon API: Support for `include_types` in `/api/v1/notifications`. +### Fixed +- Support pagination in conversations API + ## [2.0.0] - 2019-03-08 ### Security - Mastodon API: Fix being able to request enourmous amount of statuses in timelines leading to DoS. Now limited to 40 per request. diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 30e282840..351d1bdb8 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -696,7 +696,7 @@ def move(%User{} = origin, %User{} = target, local \\ true) do end end - defp fetch_activities_for_context_query(context, opts) do + def fetch_activities_for_context_query(context, opts) do public = [Constants.as_public()] recipients = diff --git a/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex b/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex index dae7f0f2f..edb071baa 100644 --- a/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex @@ -110,12 +110,11 @@ def conversation(%{assigns: %{user: user}} = conn, %{"id" => participation_id}) end def conversation_statuses( - %{assigns: %{user: user}} = conn, + %{assigns: %{user: %{id: user_id} = user}} = conn, %{"id" => participation_id} = params ) do - with %Participation{} = participation <- - Participation.get(participation_id, preload: [:conversation]), - true <- user.id == participation.user_id do + with %Participation{user_id: ^user_id} = participation <- + Participation.get(participation_id, preload: [:conversation]) do params = params |> Map.put("blocking_user", user) @@ -124,7 +123,8 @@ def conversation_statuses( activities = participation.conversation.ap_id - |> ActivityPub.fetch_activities_for_context(params) + |> ActivityPub.fetch_activities_for_context_query(params) + |> Pleroma.Pagination.fetch_paginated(Map.put(params, "total", false)) |> Enum.reverse() conn diff --git a/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs b/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs index 32250f06f..8bf7eb3be 100644 --- a/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs +++ b/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs @@ -169,6 +169,23 @@ test "/api/v1/pleroma/conversations/:id/statuses" do id_one = activity.id id_two = activity_two.id assert [%{"id" => ^id_one}, %{"id" => ^id_two}] = result + + {:ok, %{id: id_three}} = + CommonAPI.post(other_user, %{ + "status" => "Bye!", + "in_reply_to_status_id" => activity.id, + "in_reply_to_conversation_id" => participation.id + }) + + assert [%{"id" => ^id_two}, %{"id" => ^id_three}] = + conn + |> get("/api/v1/pleroma/conversations/#{participation.id}/statuses?limit=2") + |> json_response(:ok) + + assert [%{"id" => ^id_three}] = + conn + |> get("/api/v1/pleroma/conversations/#{participation.id}/statuses?min_id=#{id_two}") + |> json_response(:ok) end test "PATCH /api/v1/pleroma/conversations/:id" do From 74560e888e5e3e4dc2fa5b4fec4cf3986a1d1a55 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 24 Mar 2020 18:20:58 +0000 Subject: [PATCH 121/581] Apply suggestion to lib/pleroma/web/activity_pub/object_validators/create_validator.ex --- .../web/activity_pub/object_validators/create_validator.ex | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/object_validators/create_validator.ex b/lib/pleroma/web/activity_pub/object_validators/create_validator.ex index 9e480c4ed..872a12c48 100644 --- a/lib/pleroma/web/activity_pub/object_validators/create_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/create_validator.ex @@ -25,7 +25,6 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateNoteValidator do end def cast_data(data) do - %__MODULE__{} - |> cast(data, __schema__(:fields)) + cast(%__MODULE__{}, data, __schema__(:fields)) end end From aaf00f1ff59fc279758f5fa5ceaf758d683bd216 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 24 Mar 2020 18:24:09 +0000 Subject: [PATCH 122/581] Apply suggestion to lib/pleroma/web/activity_pub/pipeline.ex --- lib/pleroma/web/activity_pub/pipeline.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/pipeline.ex b/lib/pleroma/web/activity_pub/pipeline.ex index cb3571917..25f29bf63 100644 --- a/lib/pleroma/web/activity_pub/pipeline.ex +++ b/lib/pleroma/web/activity_pub/pipeline.ex @@ -35,7 +35,7 @@ defp maybe_federate(activity, meta) do {:ok, :not_federated} end else - _e -> {:error, "local not set in meta"} + _e -> {:error, :badarg} end end end From f31688246470273cc35588d0f1c2187edc6084c7 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Tue, 24 Mar 2020 18:37:53 +0000 Subject: [PATCH 123/581] Apply suggestion to lib/pleroma/web/activity_pub/activity_pub.ex --- lib/pleroma/web/activity_pub/activity_pub.ex | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index d9f30e629..dd4b04185 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -150,7 +150,6 @@ def insert(map, local \\ true, fake \\ false, bypass_actor_check \\ false) when {_, true} <- {:remote_limit_error, check_remote_limit(map)}, {:ok, map} <- MRF.filter(map), {recipients, _, _} = get_recipients(map), - # ??? {:fake, false, map, recipients} <- {:fake, fake, map, recipients}, {:containment, :ok} <- {:containment, Containment.contain_child(map)}, {:ok, map, object} <- insert_full_object(map) do From 13cbb9f6ada8dcb15bb7ed12be4d88a18c5db7f7 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Tue, 24 Mar 2020 22:14:26 +0300 Subject: [PATCH 124/581] Implemented preloading of relationships with parent activities' actors for statuses/timeline rendering. Applied preloading for notifications rendering. Fixed announces rendering issue (preloading-related). --- lib/pleroma/activity/queries.ex | 7 ++ .../web/mastodon_api/views/account_view.ex | 15 ++- .../mastodon_api/views/notification_view.ex | 98 +++++++++++++++---- .../web/mastodon_api/views/status_view.ex | 85 +++++++++------- .../controllers/timeline_controller_test.exs | 1 - 5 files changed, 138 insertions(+), 68 deletions(-) diff --git a/lib/pleroma/activity/queries.ex b/lib/pleroma/activity/queries.ex index 04593b9fb..a34c20343 100644 --- a/lib/pleroma/activity/queries.ex +++ b/lib/pleroma/activity/queries.ex @@ -35,6 +35,13 @@ def by_author(query \\ Activity, %User{ap_id: ap_id}) do from(a in query, where: a.actor == ^ap_id) end + def find_by_object_ap_id(activities, object_ap_id) do + Enum.find( + activities, + &(object_ap_id in [is_map(&1.data["object"]) && &1.data["object"]["id"], &1.data["object"]]) + ) + end + @spec by_object_id(query, String.t() | [String.t()]) :: query def by_object_id(query \\ Activity, object_id) diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 2fe46158b..89bea9957 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -46,8 +46,8 @@ def render( "relationship.json", %{user: %User{} = reading_user, target: %User{} = target} = opts ) do - user_relationships = Map.get(opts, :user_relationships) - following_relationships = opts[:following_relationships] + user_relationships = get_in(opts, [:relationships, :user_relationships]) + following_relationships = get_in(opts, [:relationships, :following_relationships]) follow_state = if following_relationships do @@ -61,17 +61,15 @@ def render( followed_by = if following_relationships do - with %{state: "accept"} <- - find_following_rel(following_relationships, target, reading_user) do - true - else + case find_following_rel(following_relationships, target, reading_user) do + %{state: "accept"} -> true _ -> false end else User.following?(target, reading_user) end - # TODO: add a note on adjusting StatusView.user_relationships_opt/1 re: preloading of user relations + # NOTE: adjust StatusView.relationships_opts/2 if adding new relation-related flags %{ id: to_string(target.id), following: follow_state == "accept", @@ -173,8 +171,7 @@ defp do_render("show.json", %{user: user} = opts) do render("relationship.json", %{ user: opts[:for], target: user, - user_relationships: opts[:user_relationships], - following_relationships: opts[:following_relationships] + relationships: opts[:relationships] }) %{ diff --git a/lib/pleroma/web/mastodon_api/views/notification_view.ex b/lib/pleroma/web/mastodon_api/views/notification_view.ex index 33145c484..e9c618496 100644 --- a/lib/pleroma/web/mastodon_api/views/notification_view.ex +++ b/lib/pleroma/web/mastodon_api/views/notification_view.ex @@ -13,19 +13,68 @@ defmodule Pleroma.Web.MastodonAPI.NotificationView do alias Pleroma.Web.MastodonAPI.NotificationView alias Pleroma.Web.MastodonAPI.StatusView - def render("index.json", %{notifications: notifications, for: user}) do - safe_render_many(notifications, NotificationView, "show.json", %{for: user}) + def render("index.json", %{notifications: notifications, for: reading_user}) do + activities = Enum.map(notifications, & &1.activity) + + parent_activities = + activities + |> Enum.filter( + &(Activity.mastodon_notification_type(&1) in [ + "favourite", + "reblog", + "pleroma:emoji_reaction" + ]) + ) + |> Enum.map(& &1.data["object"]) + |> Activity.create_by_object_ap_id() + |> Activity.with_preloaded_object(:left) + |> Pleroma.Repo.all() + + move_activities_targets = + activities + |> Enum.filter(&(Activity.mastodon_notification_type(&1) == "move")) + |> Enum.map(&User.get_cached_by_ap_id(&1.data["target"])) + + actors = + activities + |> Enum.map(fn a -> User.get_cached_by_ap_id(a.data["actor"]) end) + |> Enum.filter(& &1) + |> Kernel.++(move_activities_targets) + + opts = %{ + for: reading_user, + parent_activities: parent_activities, + relationships: StatusView.relationships_opts(reading_user, actors) + } + + safe_render_many(notifications, NotificationView, "show.json", opts) end - def render("show.json", %{ - notification: %Notification{activity: activity} = notification, - for: user - }) do + def render( + "show.json", + %{ + notification: %Notification{activity: activity} = notification, + for: reading_user + } = opts + ) do actor = User.get_cached_by_ap_id(activity.data["actor"]) - parent_activity = Activity.get_create_by_object_ap_id(activity.data["object"]) + + parent_activity_fn = fn -> + if opts[:parent_activities] do + Activity.Queries.find_by_object_ap_id(opts[:parent_activities], activity.data["object"]) + else + Activity.get_create_by_object_ap_id(activity.data["object"]) + end + end + mastodon_type = Activity.mastodon_notification_type(activity) - with %{id: _} = account <- AccountView.render("show.json", %{user: actor, for: user}) do + with %{id: _} = account <- + AccountView.render("show.json", %{ + user: actor, + for: reading_user, + relationships: opts[:relationships] + }) do response = %{ id: to_string(notification.id), type: mastodon_type, @@ -36,24 +85,28 @@ def render("show.json", %{ } } + relationships_opts = %{relationships: opts[:relationships]} + case mastodon_type do "mention" -> - put_status(response, activity, user) + put_status(response, activity, reading_user, relationships_opts) "favourite" -> - put_status(response, parent_activity, user) + put_status(response, parent_activity_fn.(), reading_user, relationships_opts) "reblog" -> - put_status(response, parent_activity, user) + put_status(response, parent_activity_fn.(), reading_user, relationships_opts) "move" -> - put_target(response, activity, user) + put_target(response, activity, reading_user, relationships_opts) "follow" -> response "pleroma:emoji_reaction" -> - put_status(response, parent_activity, user) |> put_emoji(activity) + response + |> put_status(parent_activity_fn.(), reading_user, relationships_opts) + |> put_emoji(activity) _ -> nil @@ -64,16 +117,21 @@ def render("show.json", %{ end defp put_emoji(response, activity) do - response - |> Map.put(:emoji, activity.data["content"]) + Map.put(response, :emoji, activity.data["content"]) end - defp put_status(response, activity, user) do - Map.put(response, :status, StatusView.render("show.json", %{activity: activity, for: user})) + defp put_status(response, activity, reading_user, opts) do + status_render_opts = Map.merge(opts, %{activity: activity, for: reading_user}) + status_render = StatusView.render("show.json", status_render_opts) + + Map.put(response, :status, status_render) end - defp put_target(response, activity, user) do - target = User.get_cached_by_ap_id(activity.data["target"]) - Map.put(response, :target, AccountView.render("show.json", %{user: target, for: user})) + defp put_target(response, activity, reading_user, opts) do + target_user = User.get_cached_by_ap_id(activity.data["target"]) + target_render_opts = Map.merge(opts, %{user: target_user, for: reading_user}) + target_render = AccountView.render("show.json", target_render_opts) + + Map.put(response, :target, target_render) end end diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 55a5513f9..0ef65b352 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -72,41 +72,46 @@ defp reblogged?(activity, user) do present?(user && user.ap_id in (object.data["announcements"] || [])) end - defp relationships_opts(opts) do - reading_user = opts[:for] + def relationships_opts(_reading_user = nil, _actors) do + %{user_relationships: [], following_relationships: []} + end - {user_relationships, following_relationships} = - if reading_user do - activities = opts[:activities] - actors = Enum.map(activities, fn a -> get_user(a.data["actor"]) end) + def relationships_opts(reading_user, actors) do + user_relationships = + UserRelationship.dictionary( + [reading_user], + actors, + [:block, :mute, :notification_mute, :reblog_mute], + [:block, :inverse_subscription] + ) - user_relationships = - UserRelationship.dictionary( - [reading_user], - actors, - [:block, :mute, :notification_mute, :reblog_mute], - [:block, :inverse_subscription] - ) - - following_relationships = - FollowingRelationship.all_between_user_sets([reading_user], actors) - - {user_relationships, following_relationships} - else - {[], []} - end + following_relationships = FollowingRelationship.all_between_user_sets([reading_user], actors) %{user_relationships: user_relationships, following_relationships: following_relationships} end def render("index.json", opts) do - activities = opts.activities + # To do: check AdminAPIControllerTest on the reasons behind nil activities in the list + activities = Enum.filter(opts.activities, & &1) replied_to_activities = get_replied_to_activities(activities) + parent_activities = + activities + |> Enum.filter(&(&1.data["type"] == "Announce" && &1.data["object"])) + |> Enum.map(&Object.normalize(&1).data["id"]) + |> Activity.create_by_object_ap_id() + |> Activity.with_preloaded_object(:left) + |> Activity.with_preloaded_bookmark(opts[:for]) + |> Activity.with_set_thread_muted_field(opts[:for]) + |> Repo.all() + + actors = Enum.map(activities ++ parent_activities, &get_user(&1.data["actor"])) + opts = opts |> Map.put(:replied_to_activities, replied_to_activities) - |> Map.merge(relationships_opts(opts)) + |> Map.put(:parent_activities, parent_activities) + |> Map.put(:relationships, relationships_opts(opts[:for], actors)) safe_render_many(activities, StatusView, "show.json", opts) end @@ -119,17 +124,25 @@ def render( created_at = Utils.to_masto_date(activity.data["published"]) activity_object = Object.normalize(activity) - reblogged_activity = - Activity.create_by_object_ap_id(activity_object.data["id"]) - |> Activity.with_preloaded_bookmark(opts[:for]) - |> Activity.with_set_thread_muted_field(opts[:for]) - |> Repo.one() + reblogged_parent_activity = + if opts[:parent_activities] do + Activity.Queries.find_by_object_ap_id( + opts[:parent_activities], + activity_object.data["id"] + ) + else + Activity.create_by_object_ap_id(activity_object.data["id"]) + |> Activity.with_preloaded_bookmark(opts[:for]) + |> Activity.with_set_thread_muted_field(opts[:for]) + |> Repo.one() + end - reblogged = render("show.json", Map.put(opts, :activity, reblogged_activity)) + reblog_rendering_opts = Map.put(opts, :activity, reblogged_parent_activity) + reblogged = render("show.json", reblog_rendering_opts) favorited = opts[:for] && opts[:for].ap_id in (activity_object.data["likes"] || []) - bookmarked = Activity.get_bookmark(reblogged_activity, opts[:for]) != nil + bookmarked = Activity.get_bookmark(reblogged_parent_activity, opts[:for]) != nil mentions = activity.recipients @@ -145,8 +158,7 @@ def render( AccountView.render("show.json", %{ user: user, for: opts[:for], - user_relationships: opts[:user_relationships], - following_relationships: opts[:following_relationships] + relationships: opts[:relationships] }), in_reply_to_id: nil, in_reply_to_account_id: nil, @@ -156,7 +168,7 @@ def render( reblogs_count: 0, replies_count: 0, favourites_count: 0, - reblogged: reblogged?(reblogged_activity, opts[:for]), + reblogged: reblogged?(reblogged_parent_activity, opts[:for]), favourited: present?(favorited), bookmarked: present?(bookmarked), muted: false, @@ -293,12 +305,10 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} _ -> [] end - user_relationships_opt = opts[:user_relationships] - muted = thread_muted? || UserRelationship.exists?( - user_relationships_opt, + get_in(opts, [:relationships, :user_relationships]), :mute, opts[:for], user, @@ -313,8 +323,7 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} AccountView.render("show.json", %{ user: user, for: opts[:for], - user_relationships: user_relationships_opt, - following_relationships: opts[:following_relationships] + relationships: opts[:relationships] }), in_reply_to_id: reply_to && to_string(reply_to.id), in_reply_to_account_id: reply_to_user && to_string(reply_to_user.id), diff --git a/test/web/mastodon_api/controllers/timeline_controller_test.exs b/test/web/mastodon_api/controllers/timeline_controller_test.exs index 47849fc48..97b1c3e66 100644 --- a/test/web/mastodon_api/controllers/timeline_controller_test.exs +++ b/test/web/mastodon_api/controllers/timeline_controller_test.exs @@ -68,7 +68,6 @@ test "the home timeline", %{user: user, conn: conn} do "account" => %{ "acct" => "repeated", "pleroma" => %{ - # This part does not match correctly "relationship" => %{"following" => false, "followed_by" => true} } } From 64165d1df95bc3a22260dafa4584471427685864 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Tue, 24 Mar 2020 20:21:27 +0100 Subject: [PATCH 125/581] node_info_test.exs: Add test on the default feature list --- test/web/node_info_test.exs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/test/web/node_info_test.exs b/test/web/node_info_test.exs index ee10ad5db..e8922a8ee 100644 --- a/test/web/node_info_test.exs +++ b/test/web/node_info_test.exs @@ -128,6 +128,27 @@ test "it shows if federation is enabled/disabled", %{conn: conn} do end end + test "it shows default features flags", %{conn: conn} do + response = + conn + |> get("/nodeinfo/2.1.json") + |> json_response(:ok) + + assert response["metadata"]["features"] -- + [ + "pleroma_api", + "mastodon_api", + "mastodon_api_streaming", + "polls", + "pleroma_explicit_addressing", + "shareable_emoji_packs", + "multifetch", + "chat", + "relay", + "pleroma_emoji_reactions" + ] == [] + end + test "it shows MRF transparency data if enabled", %{conn: conn} do config = Pleroma.Config.get([:instance, :rewrite_policy]) Pleroma.Config.put([:instance, :rewrite_policy], [Pleroma.Web.ActivityPub.MRF.SimplePolicy]) From 03a18cf037d7a9b4ba84ff456b434d65e3290965 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Tue, 24 Mar 2020 20:39:19 +0100 Subject: [PATCH 126/581] node_info_test: Bump default features list --- test/web/node_info_test.exs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/web/node_info_test.exs b/test/web/node_info_test.exs index 01a67afd7..e5eebced1 100644 --- a/test/web/node_info_test.exs +++ b/test/web/node_info_test.exs @@ -145,7 +145,8 @@ test "it shows default features flags", %{conn: conn} do "multifetch", "chat", "relay", - "pleroma_emoji_reactions" + "pleroma_emoji_reactions", + "pleroma:api/v1/notifications:include_types_filter" ] == [] end From e743c2232970e321c833604b232520587ad8e402 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Wed, 25 Mar 2020 09:04:00 +0300 Subject: [PATCH 127/581] Fixed incorrect usage of "relations" as a short form of "relationships". --- config/description.exs | 2 +- lib/pleroma/notification.ex | 6 +++--- lib/pleroma/user.ex | 20 +++++++++---------- lib/pleroma/web/activity_pub/activity_pub.ex | 8 ++++---- .../controllers/account_controller.ex | 10 +++++++--- lib/pleroma/web/streamer/worker.ex | 2 +- test/user_test.exs | 6 +++--- 7 files changed, 29 insertions(+), 25 deletions(-) diff --git a/config/description.exs b/config/description.exs index 732c76734..68fa8b03b 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2442,7 +2442,7 @@ %{ key: :relations_actions, type: [:tuple, {:list, :tuple}], - description: "For actions on relations with all users (follow, unfollow)", + description: "For actions on relationships with all users (follow, unfollow)", suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]] }, %{ diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 104368fd1..bc691dce3 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -39,11 +39,11 @@ def changeset(%Notification{} = notification, attrs) do end defp for_user_query_ap_id_opts(user, opts) do - ap_id_relations = + ap_id_relationships = [:block] ++ if opts[@include_muted_option], do: [], else: [:notification_mute] - preloaded_ap_ids = User.outgoing_relations_ap_ids(user, ap_id_relations) + preloaded_ap_ids = User.outgoing_relationships_ap_ids(user, ap_id_relationships) exclude_blocked_opts = Map.merge(%{blocked_users_ap_ids: preloaded_ap_ids[:block]}, opts) @@ -370,7 +370,7 @@ def exclude_relation_restricting_ap_ids(ap_ids, %Activity{} = activity) do relation_restricted_ap_ids = activity |> Activity.user_actor() - |> User.incoming_relations_ungrouped_ap_ids([ + |> User.incoming_relationships_ungrouped_ap_ids([ :block, :notification_mute ]) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 05efc74d4..4919c8e58 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1222,15 +1222,15 @@ def subscribed_to?(%User{} = user, %{ap_id: ap_id}) do end @doc """ - Returns map of outgoing (blocked, muted etc.) relations' user AP IDs by relation type. - E.g. `outgoing_relations_ap_ids(user, [:block])` -> `%{block: ["https://some.site/users/userapid"]}` + Returns map of outgoing (blocked, muted etc.) relationships' user AP IDs by relation type. + E.g. `outgoing_relationships_ap_ids(user, [:block])` -> `%{block: ["https://some.site/users/userapid"]}` """ - @spec outgoing_relations_ap_ids(User.t(), list(atom())) :: %{atom() => list(String.t())} - def outgoing_relations_ap_ids(_user, []), do: %{} + @spec outgoing_relationships_ap_ids(User.t(), list(atom())) :: %{atom() => list(String.t())} + def outgoing_relationships_ap_ids(_user, []), do: %{} - def outgoing_relations_ap_ids(nil, _relationship_types), do: %{} + def outgoing_relationships_ap_ids(nil, _relationship_types), do: %{} - def outgoing_relations_ap_ids(%User{} = user, relationship_types) + def outgoing_relationships_ap_ids(%User{} = user, relationship_types) when is_list(relationship_types) do db_result = user @@ -1249,13 +1249,13 @@ def outgoing_relations_ap_ids(%User{} = user, relationship_types) ) end - def incoming_relations_ungrouped_ap_ids(user, relationship_types, ap_ids \\ nil) + def incoming_relationships_ungrouped_ap_ids(user, relationship_types, ap_ids \\ nil) - def incoming_relations_ungrouped_ap_ids(_user, [], _ap_ids), do: [] + def incoming_relationships_ungrouped_ap_ids(_user, [], _ap_ids), do: [] - def incoming_relations_ungrouped_ap_ids(nil, _relationship_types, _ap_ids), do: [] + def incoming_relationships_ungrouped_ap_ids(nil, _relationship_types, _ap_ids), do: [] - def incoming_relations_ungrouped_ap_ids(%User{} = user, relationship_types, ap_ids) + def incoming_relationships_ungrouped_ap_ids(%User{} = user, relationship_types, ap_ids) when is_list(relationship_types) do user |> assoc(:incoming_relationships) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index d9f74b6a4..60e74758f 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1230,17 +1230,17 @@ defp maybe_order(query, _), do: query defp fetch_activities_query_ap_ids_ops(opts) do source_user = opts["muting_user"] - ap_id_relations = if source_user, do: [:mute, :reblog_mute], else: [] + ap_id_relationships = if source_user, do: [:mute, :reblog_mute], else: [] - ap_id_relations = - ap_id_relations ++ + ap_id_relationships = + ap_id_relationships ++ if opts["blocking_user"] && opts["blocking_user"] == source_user do [:block] else [] end - preloaded_ap_ids = User.outgoing_relations_ap_ids(source_user, ap_id_relations) + preloaded_ap_ids = User.outgoing_relationships_ap_ids(source_user, ap_id_relationships) restrict_blocked_opts = Map.merge(%{"blocked_users_ap_ids" => preloaded_ap_ids[:block]}, opts) restrict_muted_opts = Map.merge(%{"muted_users_ap_ids" => preloaded_ap_ids[:mute]}, opts) diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 88c997b9f..9d83a9fc1 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -63,11 +63,15 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do when action != :create ) - @relations [:follow, :unfollow] + @relationship_actions [:follow, :unfollow] @needs_account ~W(followers following lists follow unfollow mute unmute block unblock)a - plug(RateLimiter, [name: :relations_id_action, params: ["id", "uri"]] when action in @relations) - plug(RateLimiter, [name: :relations_actions] when action in @relations) + plug( + RateLimiter, + [name: :relation_id_action, params: ["id", "uri"]] when action in @relationship_actions + ) + + plug(RateLimiter, [name: :relations_actions] when action in @relationship_actions) plug(RateLimiter, [name: :app_account_creation] when action == :create) plug(:assign_account_by_id when action in @needs_account) diff --git a/lib/pleroma/web/streamer/worker.ex b/lib/pleroma/web/streamer/worker.ex index 29f992a67..abfed21c8 100644 --- a/lib/pleroma/web/streamer/worker.ex +++ b/lib/pleroma/web/streamer/worker.ex @@ -130,7 +130,7 @@ defp do_stream(%{topic: topic, item: item}) do defp should_send?(%User{} = user, %Activity{} = item) do %{block: blocked_ap_ids, mute: muted_ap_ids, reblog_mute: reblog_muted_ap_ids} = - User.outgoing_relations_ap_ids(user, [:block, :mute, :reblog_mute]) + User.outgoing_relationships_ap_ids(user, [:block, :mute, :reblog_mute]) recipient_blocks = MapSet.new(blocked_ap_ids ++ muted_ap_ids) recipients = MapSet.new(item.recipients) diff --git a/test/user_test.exs b/test/user_test.exs index b07fed42b..f3d044a80 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -86,7 +86,7 @@ test "returns invisible actor" do {:ok, user: insert(:user)} end - test "outgoing_relations_ap_ids/1", %{user: user} do + test "outgoing_relationships_ap_ids/1", %{user: user} do rel_types = [:block, :mute, :notification_mute, :reblog_mute, :inverse_subscription] ap_ids_by_rel = @@ -124,10 +124,10 @@ test "outgoing_relations_ap_ids/1", %{user: user} do assert ap_ids_by_rel[:inverse_subscription] == Enum.sort(Enum.map(User.subscriber_users(user), & &1.ap_id)) - outgoing_relations_ap_ids = User.outgoing_relations_ap_ids(user, rel_types) + outgoing_relationships_ap_ids = User.outgoing_relationships_ap_ids(user, rel_types) assert ap_ids_by_rel == - Enum.into(outgoing_relations_ap_ids, %{}, fn {k, v} -> {k, Enum.sort(v)} end) + Enum.into(outgoing_relationships_ap_ids, %{}, fn {k, v} -> {k, Enum.sort(v)} end) end end From 3fa3d45dbecafb06fb7eb4f0260f610d4225e0a7 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Wed, 25 Mar 2020 13:05:00 +0300 Subject: [PATCH 128/581] [#1364] Minor improvements / comments. Further fixes of incorrect usage of "relations" as a short form of "relationships". --- lib/pleroma/activity.ex | 1 + lib/pleroma/notification.ex | 12 +++++++----- lib/pleroma/thread_mute.ex | 7 ++++--- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex index bbaa561a7..5a8329e69 100644 --- a/lib/pleroma/activity.ex +++ b/lib/pleroma/activity.ex @@ -95,6 +95,7 @@ def with_preloaded_object(query, join_type \\ :inner) do |> preload([activity, object: object], object: object) end + # Note: applies to fake activities (ActivityPub.Utils.get_notified_from_object/1 etc.) def user_actor(%Activity{actor: nil}), do: nil def user_actor(%Activity{} = activity) do diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 63e3e9be9..04ee510b9 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -322,6 +322,8 @@ def create_notification(%Activity{} = activity, %User{} = user, do_send \\ true) @doc """ Returns a tuple with 2 elements: {enabled notification receivers, currently disabled receivers (blocking / [thread] muting)} + + NOTE: might be called for FAKE Activities, see ActivityPub.Utils.get_notified_from_object/1 """ def get_notified_from_activity(activity, local_only \\ true) @@ -338,7 +340,7 @@ def get_notified_from_activity(%Activity{data: %{"type" => type}} = activity, lo # Since even subscribers and followers can mute / thread-mute, filtering all above AP IDs notification_enabled_ap_ids = potential_receiver_ap_ids - |> exclude_relation_restricting_ap_ids(activity) + |> exclude_relationship_restricted_ap_ids(activity) |> exclude_thread_muter_ap_ids(activity) potential_receivers = @@ -355,10 +357,10 @@ def get_notified_from_activity(%Activity{data: %{"type" => type}} = activity, lo def get_notified_from_activity(_, _local_only), do: {[], []} @doc "Filters out AP IDs of users basing on their relationships with activity actor user" - def exclude_relation_restricting_ap_ids([], _activity), do: [] + def exclude_relationship_restricted_ap_ids([], _activity), do: [] - def exclude_relation_restricting_ap_ids(ap_ids, %Activity{} = activity) do - relation_restricted_ap_ids = + def exclude_relationship_restricted_ap_ids(ap_ids, %Activity{} = activity) do + relationship_restricted_ap_ids = activity |> Activity.user_actor() |> User.incoming_relationships_ungrouped_ap_ids([ @@ -366,7 +368,7 @@ def exclude_relation_restricting_ap_ids(ap_ids, %Activity{} = activity) do :notification_mute ]) - Enum.uniq(ap_ids) -- relation_restricted_ap_ids + Enum.uniq(ap_ids) -- relationship_restricted_ap_ids end @doc "Filters out AP IDs of users who mute activity thread" diff --git a/lib/pleroma/thread_mute.ex b/lib/pleroma/thread_mute.ex index 2b4cf02cf..a7ea13891 100644 --- a/lib/pleroma/thread_mute.ex +++ b/lib/pleroma/thread_mute.ex @@ -41,15 +41,16 @@ def muters_query(context) do def muter_ap_ids(context, ap_ids \\ nil) - def muter_ap_ids(context, ap_ids) when context not in [nil, ""] do + # Note: applies to fake activities (ActivityPub.Utils.get_notified_from_object/1 etc.) + def muter_ap_ids(context, _ap_ids) when is_nil(context), do: [] + + def muter_ap_ids(context, ap_ids) do context |> muters_query() |> maybe_filter_on_ap_id(ap_ids) |> Repo.all() end - def muter_ap_ids(_context, _ap_ids), do: [] - defp maybe_filter_on_ap_id(query, ap_ids) when is_list(ap_ids) do where(query, [tm, u], u.ap_id in ^ap_ids) end From be5e2c4dbba63831ea6a0617556e686969b5080f Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Wed, 25 Mar 2020 17:01:45 +0300 Subject: [PATCH 129/581] Applied relationships preloading to GET /api/v1/accounts/relationships. Refactoring (User.binary_id/1). --- lib/pleroma/conversation/participation.ex | 11 ++++------- lib/pleroma/following_relationship.ex | 8 ++------ lib/pleroma/thread_mute.ex | 4 ++-- lib/pleroma/user.ex | 15 +++++++++++++++ lib/pleroma/user_relationship.ex | 9 ++------- .../web/mastodon_api/views/account_view.ex | 6 +++++- 6 files changed, 30 insertions(+), 23 deletions(-) diff --git a/lib/pleroma/conversation/participation.ex b/lib/pleroma/conversation/participation.ex index 693825cf5..215265fc9 100644 --- a/lib/pleroma/conversation/participation.ex +++ b/lib/pleroma/conversation/participation.ex @@ -129,21 +129,18 @@ def for_user(user, params \\ %{}) do end def restrict_recipients(query, user, %{"recipients" => user_ids}) do - user_ids = + user_binary_ids = [user.id | user_ids] |> Enum.uniq() - |> Enum.reduce([], fn user_id, acc -> - {:ok, user_id} = FlakeId.Ecto.CompatType.dump(user_id) - [user_id | acc] - end) + |> User.binary_id() conversation_subquery = __MODULE__ |> group_by([p], p.conversation_id) |> having( [p], - count(p.user_id) == ^length(user_ids) and - fragment("array_agg(?) @> ?", p.user_id, ^user_ids) + count(p.user_id) == ^length(user_binary_ids) and + fragment("array_agg(?) @> ?", p.user_id, ^user_binary_ids) ) |> select([p], %{id: p.conversation_id}) diff --git a/lib/pleroma/following_relationship.ex b/lib/pleroma/following_relationship.ex index dd1696136..624bddfe4 100644 --- a/lib/pleroma/following_relationship.ex +++ b/lib/pleroma/following_relationship.ex @@ -135,12 +135,8 @@ def all_between_user_sets( target_users ) when is_list(source_users) and is_list(target_users) do - get_bin_ids = fn user -> - with {:ok, bin_id} <- CompatType.dump(user.id), do: bin_id - end - - source_user_ids = Enum.map(source_users, &get_bin_ids.(&1)) - target_user_ids = Enum.map(target_users, &get_bin_ids.(&1)) + source_user_ids = User.binary_id(source_users) + target_user_ids = User.binary_id(target_users) __MODULE__ |> where( diff --git a/lib/pleroma/thread_mute.ex b/lib/pleroma/thread_mute.ex index cc815430a..f657758aa 100644 --- a/lib/pleroma/thread_mute.ex +++ b/lib/pleroma/thread_mute.ex @@ -24,10 +24,10 @@ def changeset(mute, params \\ %{}) do end def query(user_id, context) do - {:ok, user_id} = FlakeId.Ecto.CompatType.dump(user_id) + user_binary_id = User.binary_id(user_id) ThreadMute - |> Ecto.Query.where(user_id: ^user_id) + |> Ecto.Query.where(user_id: ^user_binary_id) |> Ecto.Query.where(context: ^context) end diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index f74e43cce..699256a3b 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -218,6 +218,21 @@ def unquote(:"#{outgoing_relation_target}_ap_ids")(user, restrict_deactivated? \ end end + @doc "Dumps id to SQL-compatible format" + def binary_id(source_id) when is_binary(source_id) do + with {:ok, dumped_id} <- FlakeId.Ecto.CompatType.dump(source_id) do + dumped_id + else + _ -> source_id + end + end + + def binary_id(source_ids) when is_list(source_ids) do + Enum.map(source_ids, &binary_id/1) + end + + def binary_id(%User{} = user), do: binary_id(user.id) + @doc "Returns status account" @spec account_status(User.t()) :: account_status() def account_status(%User{deactivated: true}), do: :deactivated diff --git a/lib/pleroma/user_relationship.ex b/lib/pleroma/user_relationship.ex index 9423e3a42..519d2998d 100644 --- a/lib/pleroma/user_relationship.ex +++ b/lib/pleroma/user_relationship.ex @@ -8,7 +8,6 @@ defmodule Pleroma.UserRelationship do import Ecto.Changeset import Ecto.Query - alias FlakeId.Ecto.CompatType alias Pleroma.Repo alias Pleroma.User alias Pleroma.UserRelationship @@ -84,12 +83,8 @@ def dictionary( target_to_source_rel_types \\ nil ) when is_list(source_users) and is_list(target_users) do - get_bin_ids = fn user -> - with {:ok, bin_id} <- CompatType.dump(user.id), do: bin_id - end - - source_user_ids = Enum.map(source_users, &get_bin_ids.(&1)) - target_user_ids = Enum.map(target_users, &get_bin_ids.(&1)) + source_user_ids = User.binary_id(source_users) + target_user_ids = User.binary_id(target_users) get_rel_type_codes = fn rel_type -> user_relationship_mappings()[rel_type] end diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 702d9e658..6b2eca1f3 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -9,6 +9,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do alias Pleroma.UserRelationship alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.MastodonAPI.AccountView + alias Pleroma.Web.MastodonAPI.StatusView alias Pleroma.Web.MediaProxy defp find_following_rel(following_relationships, follower, following) do @@ -129,7 +130,10 @@ def render( end def render("relationships.json", %{user: user, targets: targets}) do - render_many(targets, AccountView, "relationship.json", user: user, as: :target) + relationships_opts = StatusView.relationships_opts(user, targets) + opts = %{as: :target, user: user, relationships: relationships_opts} + + render_many(targets, AccountView, "relationship.json", opts) end defp do_render("show.json", %{user: user} = opts) do From 9081a071eecd0eeb4b67008754555e9c9d73eae7 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 25 Mar 2020 18:46:17 +0400 Subject: [PATCH 130/581] Add a test for accounts/update_credentials --- .../account_controller/update_credentials_test.exs | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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 51cebe567..b693c1a47 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 @@ -118,6 +118,18 @@ test "updates the user's hide_followers status", %{conn: conn} do assert user_data["pleroma"]["hide_followers"] == true end + test "updates the user's discoverable status", %{conn: conn} do + assert %{"source" => %{"pleroma" => %{"discoverable" => true}}} = + conn + |> patch("/api/v1/accounts/update_credentials", %{discoverable: "true"}) + |> json_response(:ok) + + assert %{"source" => %{"pleroma" => %{"discoverable" => false}}} = + conn + |> patch("/api/v1/accounts/update_credentials", %{discoverable: "false"}) + |> json_response(:ok) + end + test "updates the user's hide_followers_count and hide_follows_count", %{conn: conn} do conn = patch(conn, "/api/v1/accounts/update_credentials", %{ From c8475cd5c63af18471864fe57504999ddd09e496 Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 25 Mar 2020 15:48:15 +0000 Subject: [PATCH 131/581] Apply suggestion to benchmarks/load_testing/generator.ex --- benchmarks/load_testing/generator.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/load_testing/generator.ex b/benchmarks/load_testing/generator.ex index 17e89c13c..e4673757c 100644 --- a/benchmarks/load_testing/generator.ex +++ b/benchmarks/load_testing/generator.ex @@ -24,7 +24,7 @@ def generate_users(opts) do IO.puts("Starting generating #{opts[:users_max]} users...") {time, users} = :timer.tc(fn -> do_generate_users(opts) end) - IO.puts("Inserting users take #{to_sec(time)} sec.\n") + IO.puts("Inserting users took #{to_sec(time)} sec.\n") users end From 460e41585c2cd3f137c0f80173da60167fb318bf Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Wed, 25 Mar 2020 20:33:34 +0300 Subject: [PATCH 132/581] Further preloading (more endpoints), refactoring, tests. --- lib/pleroma/following_relationship.ex | 6 + lib/pleroma/user.ex | 5 +- lib/pleroma/user_relationship.ex | 20 ++++ .../web/mastodon_api/views/account_view.ex | 36 +++--- .../mastodon_api/views/notification_view.ex | 42 ++++--- .../web/mastodon_api/views/status_view.ex | 29 ++--- .../mastodon_api/views/account_view_test.exs | 109 ++++++++++-------- .../views/notification_view_test.exs | 42 +++---- .../mastodon_api/views/status_view_test.exs | 15 ++- 9 files changed, 179 insertions(+), 125 deletions(-) diff --git a/lib/pleroma/following_relationship.ex b/lib/pleroma/following_relationship.ex index 624bddfe4..a9538ea4e 100644 --- a/lib/pleroma/following_relationship.ex +++ b/lib/pleroma/following_relationship.ex @@ -151,4 +151,10 @@ def all_between_user_sets( ) |> Repo.all() end + + def find(following_relationships, follower, following) do + Enum.find(following_relationships, fn + fr -> fr.follower_id == follower.id and fr.following_id == following.id + end) + end end diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 699256a3b..8ccb9242d 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -218,7 +218,10 @@ def unquote(:"#{outgoing_relation_target}_ap_ids")(user, restrict_deactivated? \ end end - @doc "Dumps id to SQL-compatible format" + @doc """ + Dumps Flake Id to SQL-compatible format (16-byte UUID). + E.g. "9pQtDGXuq4p3VlcJEm" -> <<0, 0, 1, 110, 179, 218, 42, 92, 213, 41, 44, 227, 95, 213, 0, 0>> + """ def binary_id(source_id) when is_binary(source_id) do with {:ok, dumped_id} <- FlakeId.Ecto.CompatType.dump(source_id) do dumped_id diff --git a/lib/pleroma/user_relationship.ex b/lib/pleroma/user_relationship.ex index 519d2998d..011cf6822 100644 --- a/lib/pleroma/user_relationship.ex +++ b/lib/pleroma/user_relationship.ex @@ -8,6 +8,7 @@ defmodule Pleroma.UserRelationship do import Ecto.Changeset import Ecto.Query + alias Pleroma.FollowingRelationship alias Pleroma.Repo alias Pleroma.User alias Pleroma.UserRelationship @@ -124,6 +125,25 @@ def exists?(dictionary, rel_type, source, target, func) do end end + @doc ":relationships option for StatusView / AccountView / NotificationView" + def view_relationships_option(nil = _reading_user, _actors) do + %{user_relationships: [], following_relationships: []} + end + + def view_relationships_option(%User{} = reading_user, actors) do + user_relationships = + UserRelationship.dictionary( + [reading_user], + actors, + [:block, :mute, :notification_mute, :reblog_mute], + [:block, :inverse_subscription] + ) + + following_relationships = FollowingRelationship.all_between_user_sets([reading_user], actors) + + %{user_relationships: user_relationships, following_relationships: following_relationships} + end + defp validate_not_self_relationship(%Ecto.Changeset{} = changeset) do changeset |> validate_change(:target_id, fn _, target_id -> diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 6b2eca1f3..2cdfac7af 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -5,20 +5,23 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do use Pleroma.Web, :view + alias Pleroma.FollowingRelationship alias Pleroma.User alias Pleroma.UserRelationship alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.MastodonAPI.AccountView - alias Pleroma.Web.MastodonAPI.StatusView alias Pleroma.Web.MediaProxy - defp find_following_rel(following_relationships, follower, following) do - Enum.find(following_relationships, fn - fr -> fr.follower_id == follower.id and fr.following_id == following.id - end) - end - def render("index.json", %{users: users} = opts) do + relationships_opt = + if Map.has_key?(opts, :relationships) do + opts[:relationships] + else + UserRelationship.view_relationships_option(opts[:for], users) + end + + opts = Map.put(opts, :relationships, relationships_opt) + users |> render_many(AccountView, "show.json", opts) |> Enum.filter(&Enum.any?/1) @@ -53,7 +56,7 @@ def render( follow_state = if following_relationships do user_to_target_following_relation = - find_following_rel(following_relationships, reading_user, target) + FollowingRelationship.find(following_relationships, reading_user, target) User.get_follow_state(reading_user, target, user_to_target_following_relation) else @@ -62,7 +65,7 @@ def render( followed_by = if following_relationships do - case find_following_rel(following_relationships, target, reading_user) do + case FollowingRelationship.find(following_relationships, target, reading_user) do %{state: "accept"} -> true _ -> false end @@ -70,7 +73,7 @@ def render( User.following?(target, reading_user) end - # NOTE: adjust StatusView.relationships_opts/2 if adding new relation-related flags + # NOTE: adjust UserRelationship.view_relationships_option/2 on new relation-related flags %{ id: to_string(target.id), following: follow_state == "accept", @@ -129,11 +132,16 @@ def render( } end - def render("relationships.json", %{user: user, targets: targets}) do - relationships_opts = StatusView.relationships_opts(user, targets) - opts = %{as: :target, user: user, relationships: relationships_opts} + def render("relationships.json", %{user: user, targets: targets} = opts) do + relationships_opt = + if Map.has_key?(opts, :relationships) do + opts[:relationships] + else + UserRelationship.view_relationships_option(user, targets) + end - render_many(targets, AccountView, "relationship.json", opts) + render_opts = %{as: :target, user: user, relationships: relationships_opt} + render_many(targets, AccountView, "relationship.json", render_opts) end defp do_render("show.json", %{user: user} = opts) do diff --git a/lib/pleroma/web/mastodon_api/views/notification_view.ex b/lib/pleroma/web/mastodon_api/views/notification_view.ex index e9c618496..db434271c 100644 --- a/lib/pleroma/web/mastodon_api/views/notification_view.ex +++ b/lib/pleroma/web/mastodon_api/views/notification_view.ex @@ -8,12 +8,13 @@ defmodule Pleroma.Web.MastodonAPI.NotificationView do alias Pleroma.Activity alias Pleroma.Notification alias Pleroma.User + alias Pleroma.UserRelationship alias Pleroma.Web.CommonAPI alias Pleroma.Web.MastodonAPI.AccountView alias Pleroma.Web.MastodonAPI.NotificationView alias Pleroma.Web.MastodonAPI.StatusView - def render("index.json", %{notifications: notifications, for: reading_user}) do + def render("index.json", %{notifications: notifications, for: reading_user} = opts) do activities = Enum.map(notifications, & &1.activity) parent_activities = @@ -30,21 +31,28 @@ def render("index.json", %{notifications: notifications, for: reading_user}) do |> Activity.with_preloaded_object(:left) |> Pleroma.Repo.all() - move_activities_targets = - activities - |> Enum.filter(&(Activity.mastodon_notification_type(&1) == "move")) - |> Enum.map(&User.get_cached_by_ap_id(&1.data["target"])) + relationships_opt = + if Map.has_key?(opts, :relationships) do + opts[:relationships] + else + move_activities_targets = + activities + |> Enum.filter(&(Activity.mastodon_notification_type(&1) == "move")) + |> Enum.map(&User.get_cached_by_ap_id(&1.data["target"])) - actors = - activities - |> Enum.map(fn a -> User.get_cached_by_ap_id(a.data["actor"]) end) - |> Enum.filter(& &1) - |> Kernel.++(move_activities_targets) + actors = + activities + |> Enum.map(fn a -> User.get_cached_by_ap_id(a.data["actor"]) end) + |> Enum.filter(& &1) + |> Kernel.++(move_activities_targets) + + UserRelationship.view_relationships_option(reading_user, actors) + end opts = %{ for: reading_user, parent_activities: parent_activities, - relationships: StatusView.relationships_opts(reading_user, actors) + relationships: relationships_opt } safe_render_many(notifications, NotificationView, "show.json", opts) @@ -85,27 +93,27 @@ def render( } } - relationships_opts = %{relationships: opts[:relationships]} + relationships_opt = %{relationships: opts[:relationships]} case mastodon_type do "mention" -> - put_status(response, activity, reading_user, relationships_opts) + put_status(response, activity, reading_user, relationships_opt) "favourite" -> - put_status(response, parent_activity_fn.(), reading_user, relationships_opts) + put_status(response, parent_activity_fn.(), reading_user, relationships_opt) "reblog" -> - put_status(response, parent_activity_fn.(), reading_user, relationships_opts) + put_status(response, parent_activity_fn.(), reading_user, relationships_opt) "move" -> - put_target(response, activity, reading_user, relationships_opts) + put_target(response, activity, reading_user, relationships_opt) "follow" -> response "pleroma:emoji_reaction" -> response - |> put_status(parent_activity_fn.(), reading_user, relationships_opts) + |> put_status(parent_activity_fn.(), reading_user, relationships_opt) |> put_emoji(activity) _ -> diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 0ef65b352..7b1cb7bf8 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -9,7 +9,6 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do alias Pleroma.Activity alias Pleroma.ActivityExpiration - alias Pleroma.FollowingRelationship alias Pleroma.HTML alias Pleroma.Object alias Pleroma.Repo @@ -72,24 +71,6 @@ defp reblogged?(activity, user) do present?(user && user.ap_id in (object.data["announcements"] || [])) end - def relationships_opts(_reading_user = nil, _actors) do - %{user_relationships: [], following_relationships: []} - end - - def relationships_opts(reading_user, actors) do - user_relationships = - UserRelationship.dictionary( - [reading_user], - actors, - [:block, :mute, :notification_mute, :reblog_mute], - [:block, :inverse_subscription] - ) - - following_relationships = FollowingRelationship.all_between_user_sets([reading_user], actors) - - %{user_relationships: user_relationships, following_relationships: following_relationships} - end - def render("index.json", opts) do # To do: check AdminAPIControllerTest on the reasons behind nil activities in the list activities = Enum.filter(opts.activities, & &1) @@ -105,13 +86,19 @@ def render("index.json", opts) do |> Activity.with_set_thread_muted_field(opts[:for]) |> Repo.all() - actors = Enum.map(activities ++ parent_activities, &get_user(&1.data["actor"])) + relationships_opt = + if Map.has_key?(opts, :relationships) do + opts[:relationships] + else + actors = Enum.map(activities ++ parent_activities, &get_user(&1.data["actor"])) + UserRelationship.view_relationships_option(opts[:for], actors) + end opts = opts |> Map.put(:replied_to_activities, replied_to_activities) |> Map.put(:parent_activities, parent_activities) - |> Map.put(:relationships, relationships_opts(opts[:for], actors)) + |> Map.put(:relationships, relationships_opt) safe_render_many(activities, StatusView, "show.json", opts) end diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index 983886c6b..ede62903f 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -4,8 +4,11 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do use Pleroma.DataCase + import Pleroma.Factory + alias Pleroma.User + alias Pleroma.UserRelationship alias Pleroma.Web.CommonAPI alias Pleroma.Web.MastodonAPI.AccountView @@ -182,6 +185,29 @@ test "Represent a smaller mention" do end describe "relationship" do + defp test_relationship_rendering(user, other_user, expected_result) do + opts = %{user: user, target: other_user} + assert expected_result == AccountView.render("relationship.json", opts) + + relationships_opt = UserRelationship.view_relationships_option(user, [other_user]) + opts = Map.put(opts, :relationships, relationships_opt) + assert expected_result == AccountView.render("relationship.json", opts) + end + + @blank_response %{ + following: false, + followed_by: false, + blocking: false, + blocked_by: false, + muting: false, + muting_notifications: false, + subscribing: false, + requested: false, + domain_blocking: false, + showing_reblogs: true, + endorsed: false + } + test "represent a relationship for the following and followed user" do user = insert(:user) other_user = insert(:user) @@ -192,23 +218,21 @@ test "represent a relationship for the following and followed user" do {:ok, _user_relationships} = User.mute(user, other_user, true) {:ok, _reblog_mute} = CommonAPI.hide_reblogs(user, other_user) - expected = %{ - id: to_string(other_user.id), - following: true, - followed_by: true, - blocking: false, - blocked_by: false, - muting: true, - muting_notifications: true, - subscribing: true, - requested: false, - domain_blocking: false, - showing_reblogs: false, - endorsed: false - } + expected = + Map.merge( + @blank_response, + %{ + following: true, + followed_by: true, + muting: true, + muting_notifications: true, + subscribing: true, + showing_reblogs: false, + id: to_string(other_user.id) + } + ) - assert expected == - AccountView.render("relationship.json", %{user: user, target: other_user}) + test_relationship_rendering(user, other_user, expected) end test "represent a relationship for the blocking and blocked user" do @@ -220,23 +244,13 @@ test "represent a relationship for the blocking and blocked user" do {:ok, _user_relationship} = User.block(user, other_user) {:ok, _user_relationship} = User.block(other_user, user) - expected = %{ - id: to_string(other_user.id), - following: false, - followed_by: false, - blocking: true, - blocked_by: true, - muting: false, - muting_notifications: false, - subscribing: false, - requested: false, - domain_blocking: false, - showing_reblogs: true, - endorsed: false - } + expected = + Map.merge( + @blank_response, + %{following: false, blocking: true, blocked_by: true, id: to_string(other_user.id)} + ) - assert expected == - AccountView.render("relationship.json", %{user: user, target: other_user}) + test_relationship_rendering(user, other_user, expected) end test "represent a relationship for the user blocking a domain" do @@ -245,8 +259,13 @@ test "represent a relationship for the user blocking a domain" do {:ok, user} = User.block_domain(user, "bad.site") - assert %{domain_blocking: true, blocking: false} = - AccountView.render("relationship.json", %{user: user, target: other_user}) + expected = + Map.merge( + @blank_response, + %{domain_blocking: true, blocking: false, id: to_string(other_user.id)} + ) + + test_relationship_rendering(user, other_user, expected) end test "represent a relationship for the user with a pending follow request" do @@ -257,23 +276,13 @@ test "represent a relationship for the user with a pending follow request" do user = User.get_cached_by_id(user.id) other_user = User.get_cached_by_id(other_user.id) - expected = %{ - id: to_string(other_user.id), - following: false, - followed_by: false, - blocking: false, - blocked_by: false, - muting: false, - muting_notifications: false, - subscribing: false, - requested: true, - domain_blocking: false, - showing_reblogs: true, - endorsed: false - } + expected = + Map.merge( + @blank_response, + %{requested: true, following: false, id: to_string(other_user.id)} + ) - assert expected == - AccountView.render("relationship.json", %{user: user, target: other_user}) + test_relationship_rendering(user, other_user, expected) end end diff --git a/test/web/mastodon_api/views/notification_view_test.exs b/test/web/mastodon_api/views/notification_view_test.exs index d04c3022f..7965af00a 100644 --- a/test/web/mastodon_api/views/notification_view_test.exs +++ b/test/web/mastodon_api/views/notification_view_test.exs @@ -16,6 +16,21 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do alias Pleroma.Web.MastodonAPI.StatusView import Pleroma.Factory + defp test_notifications_rendering(notifications, user, expected_result) do + result = NotificationView.render("index.json", %{notifications: notifications, for: user}) + + assert expected_result == result + + result = + NotificationView.render("index.json", %{ + notifications: notifications, + for: user, + relationships: nil + }) + + assert expected_result == result + end + test "Mention notification" do user = insert(:user) mentioned_user = insert(:user) @@ -32,10 +47,7 @@ test "Mention notification" do created_at: Utils.to_masto_date(notification.inserted_at) } - result = - NotificationView.render("index.json", %{notifications: [notification], for: mentioned_user}) - - assert [expected] == result + test_notifications_rendering([notification], mentioned_user, [expected]) end test "Favourite notification" do @@ -55,9 +67,7 @@ test "Favourite notification" do created_at: Utils.to_masto_date(notification.inserted_at) } - result = NotificationView.render("index.json", %{notifications: [notification], for: user}) - - assert [expected] == result + test_notifications_rendering([notification], user, [expected]) end test "Reblog notification" do @@ -77,9 +87,7 @@ test "Reblog notification" do created_at: Utils.to_masto_date(notification.inserted_at) } - result = NotificationView.render("index.json", %{notifications: [notification], for: user}) - - assert [expected] == result + test_notifications_rendering([notification], user, [expected]) end test "Follow notification" do @@ -96,16 +104,12 @@ test "Follow notification" do created_at: Utils.to_masto_date(notification.inserted_at) } - result = - NotificationView.render("index.json", %{notifications: [notification], for: followed}) - - assert [expected] == result + test_notifications_rendering([notification], followed, [expected]) User.perform(:delete, follower) notification = Notification |> Repo.one() |> Repo.preload(:activity) - assert [] == - NotificationView.render("index.json", %{notifications: [notification], for: followed}) + test_notifications_rendering([notification], followed, []) end test "Move notification" do @@ -131,8 +135,7 @@ test "Move notification" do created_at: Utils.to_masto_date(notification.inserted_at) } - assert [expected] == - NotificationView.render("index.json", %{notifications: [notification], for: follower}) + test_notifications_rendering([notification], follower, [expected]) end test "EmojiReact notification" do @@ -158,7 +161,6 @@ test "EmojiReact notification" do created_at: Utils.to_masto_date(notification.inserted_at) } - assert expected == - NotificationView.render("show.json", %{notification: notification, for: user}) + test_notifications_rendering([notification], user, [expected]) end end diff --git a/test/web/mastodon_api/views/status_view_test.exs b/test/web/mastodon_api/views/status_view_test.exs index 191895c6f..9191730cd 100644 --- a/test/web/mastodon_api/views/status_view_test.exs +++ b/test/web/mastodon_api/views/status_view_test.exs @@ -12,10 +12,12 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do alias Pleroma.Object alias Pleroma.Repo alias Pleroma.User + alias Pleroma.UserRelationship alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.MastodonAPI.AccountView alias Pleroma.Web.MastodonAPI.StatusView + import Pleroma.Factory import Tesla.Mock @@ -212,12 +214,21 @@ test "tells if the message is muted for some reason" do {:ok, _user_relationships} = User.mute(user, other_user) {:ok, activity} = CommonAPI.post(other_user, %{"status" => "test"}) - status = StatusView.render("show.json", %{activity: activity}) + relationships_opt = UserRelationship.view_relationships_option(user, [other_user]) + + opts = %{activity: activity} + status = StatusView.render("show.json", opts) assert status.muted == false - status = StatusView.render("show.json", %{activity: activity, for: user}) + status = StatusView.render("show.json", Map.put(opts, :relationships, relationships_opt)) + assert status.muted == false + for_opts = %{activity: activity, for: user} + status = StatusView.render("show.json", for_opts) + assert status.muted == true + + status = StatusView.render("show.json", Map.put(for_opts, :relationships, relationships_opt)) assert status.muted == true end From 4cf1007a7d478a54a759d018dd7ce958a45f3977 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 26 Mar 2020 15:16:54 +0100 Subject: [PATCH 133/581] ActivityPub: Small refactor. --- lib/pleroma/web/activity_pub/activity_pub.ex | 23 ++++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index dd4b04185..35c2eb133 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -129,18 +129,17 @@ def increase_poll_votes_if_vote(_create_data), do: :noop # TODO rewrite in with style @spec persist(map(), keyword()) :: {:ok, Activity.t() | Object.t()} def persist(object, meta) do - local = Keyword.fetch!(meta, :local) - {recipients, _, _} = get_recipients(object) - - {:ok, activity} = - Repo.insert(%Activity{ - data: object, - local: local, - recipients: recipients, - actor: object["actor"] - }) - - {:ok, activity, meta} + with local <- Keyword.fetch!(meta, :local), + {recipients, _, _} <- get_recipients(object), + {:ok, activity} <- + Repo.insert(%Activity{ + data: object, + local: local, + recipients: recipients, + actor: object["actor"] + }) do + {:ok, activity, meta} + end end def insert(map, local \\ true, fake \\ false, bypass_actor_check \\ false) when is_map(map) do From d7aa0b645b0da48af830f252ae80458afc965281 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 26 Mar 2020 14:23:19 +0000 Subject: [PATCH 134/581] Apply suggestion to lib/pleroma/web/activity_pub/object_validator.ex --- lib/pleroma/web/activity_pub/object_validator.ex | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index cff924047..9b2889e92 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -26,8 +26,7 @@ def validate(%{"type" => "Like"} = object, meta) do def stringify_keys(object) do object - |> Enum.map(fn {key, val} -> {to_string(key), val} end) - |> Enum.into(%{}) + |> Map.new(fn {key, val} -> {to_string(key), val} end) end def fetch_actor_and_object(object) do From eaacc648392e6544cd3a3b77bde266e34cebf634 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 26 Mar 2020 15:33:10 +0100 Subject: [PATCH 135/581] Refactors. --- lib/pleroma/web/activity_pub/activity_pub.ex | 3 +-- .../activity_pub/object_validators/common_validations.ex | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 35c2eb133..55f4de693 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -125,8 +125,6 @@ def increase_poll_votes_if_vote(%{ def increase_poll_votes_if_vote(_create_data), do: :noop - @spec insert(map(), boolean(), boolean(), boolean()) :: {:ok, Activity.t()} | {:error, any()} - # TODO rewrite in with style @spec persist(map(), keyword()) :: {:ok, Activity.t() | Object.t()} def persist(object, meta) do with local <- Keyword.fetch!(meta, :local), @@ -142,6 +140,7 @@ def persist(object, meta) do end end + @spec insert(map(), boolean(), boolean(), boolean()) :: {:ok, Activity.t()} | {:error, any()} def insert(map, local \\ true, fake \\ false, bypass_actor_check \\ false) when is_map(map) do with nil <- Activity.normalize(map), map <- lazy_put_activity_defaults(map, fake), diff --git a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex index db0e2072d..26a57f02b 100644 --- a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex +++ b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex @@ -21,11 +21,11 @@ def validate_actor_presence(cng, field_name \\ :actor) do def validate_object_presence(cng, field_name \\ :object) do cng - |> validate_change(field_name, fn field_name, actor -> - if Object.get_cached_by_ap_id(actor) do + |> validate_change(field_name, fn field_name, object -> + if Object.get_cached_by_ap_id(object) do [] else - [{field_name, "can't find user"}] + [{field_name, "can't find object"}] end end) end From 0adaab8e753b0ec22feccfc03d301073327a6d31 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 26 Mar 2020 15:37:42 +0100 Subject: [PATCH 136/581] Bump copyright dates. --- COPYING | 4 ++-- lib/pleroma/web/activity_pub/object_validator.ex | 2 +- .../web/activity_pub/object_validators/common_validations.ex | 2 +- .../web/activity_pub/object_validators/create_validator.ex | 2 +- .../web/activity_pub/object_validators/like_validator.ex | 2 +- .../web/activity_pub/object_validators/note_validator.ex | 2 +- lib/pleroma/web/activity_pub/pipeline.ex | 2 +- priv/repo/migrations/20190408123347_create_conversations.exs | 2 +- .../activity_pub/object_validators/note_validator_test.exs | 2 +- test/web/activity_pub/pipeline_test.exs | 2 +- test/web/activity_pub/side_effects_test.exs | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/COPYING b/COPYING index 0aede0fba..3140c8038 100644 --- a/COPYING +++ b/COPYING @@ -1,4 +1,4 @@ -Unless otherwise stated this repository is copyright © 2017-2019 +Unless otherwise stated this repository is copyright © 2017-2020 Pleroma Authors , and is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as AGPL-3. @@ -23,7 +23,7 @@ priv/static/images/pleroma-fox-tan-shy.png --- -The following files are copyright © 2017-2019 Pleroma Authors +The following files are copyright © 2017-2020 Pleroma Authors , and are distributed under the Creative Commons Attribution-ShareAlike 4.0 International license, you should have received a copy of the license file as CC-BY-SA-4.0. diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index 9b2889e92..dc4bce059 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex index 26a57f02b..b479c3918 100644 --- a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex +++ b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations do diff --git a/lib/pleroma/web/activity_pub/object_validators/create_validator.ex b/lib/pleroma/web/activity_pub/object_validators/create_validator.ex index 872a12c48..908381981 100644 --- a/lib/pleroma/web/activity_pub/object_validators/create_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/create_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateNoteValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/like_validator.ex b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex index ccbc7d071..2c1d38b06 100644 --- a/lib/pleroma/web/activity_pub/object_validators/like_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/note_validator.ex b/lib/pleroma/web/activity_pub/object_validators/note_validator.ex index eea15ce1c..fc65f1b7c 100644 --- a/lib/pleroma/web/activity_pub/object_validators/note_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/note_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.NoteValidator do diff --git a/lib/pleroma/web/activity_pub/pipeline.ex b/lib/pleroma/web/activity_pub/pipeline.ex index 25f29bf63..eed53cd34 100644 --- a/lib/pleroma/web/activity_pub/pipeline.ex +++ b/lib/pleroma/web/activity_pub/pipeline.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.Pipeline do diff --git a/priv/repo/migrations/20190408123347_create_conversations.exs b/priv/repo/migrations/20190408123347_create_conversations.exs index d75459e82..3eaa6136c 100644 --- a/priv/repo/migrations/20190408123347_create_conversations.exs +++ b/priv/repo/migrations/20190408123347_create_conversations.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Repo.Migrations.CreateConversations do diff --git a/test/web/activity_pub/object_validators/note_validator_test.exs b/test/web/activity_pub/object_validators/note_validator_test.exs index 2bcd75e25..30c481ffb 100644 --- a/test/web/activity_pub/object_validators/note_validator_test.exs +++ b/test/web/activity_pub/object_validators/note_validator_test.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.NoteValidatorTest do diff --git a/test/web/activity_pub/pipeline_test.exs b/test/web/activity_pub/pipeline_test.exs index 318d306af..f3c437498 100644 --- a/test/web/activity_pub/pipeline_test.exs +++ b/test/web/activity_pub/pipeline_test.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.PipelineTest do diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index ef91954ae..b67bd14b3 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors +# Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.SideEffectsTest do From 0c60c0a76a2fcc8d13992b51704c21a35da10a0b Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 26 Mar 2020 15:44:14 +0100 Subject: [PATCH 137/581] Validators: Use correct type for IDs. --- .../web/activity_pub/object_validators/create_validator.ex | 2 +- .../web/activity_pub/object_validators/like_validator.ex | 2 +- .../web/activity_pub/object_validators/note_validator.ex | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/activity_pub/object_validators/create_validator.ex b/lib/pleroma/web/activity_pub/object_validators/create_validator.ex index 908381981..926804ce7 100644 --- a/lib/pleroma/web/activity_pub/object_validators/create_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/create_validator.ex @@ -13,7 +13,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateNoteValidator do @primary_key false embedded_schema do - field(:id, :string, primary_key: true) + field(:id, Types.ObjectID, primary_key: true) field(:actor, Types.ObjectID) field(:type, :string) field(:to, {:array, :string}) diff --git a/lib/pleroma/web/activity_pub/object_validators/like_validator.ex b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex index 2c1d38b06..49546ceaa 100644 --- a/lib/pleroma/web/activity_pub/object_validators/like_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex @@ -14,7 +14,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator do @primary_key false embedded_schema do - field(:id, :string, primary_key: true) + field(:id, Types.ObjectID, primary_key: true) field(:type, :string) field(:object, Types.ObjectID) field(:actor, Types.ObjectID) diff --git a/lib/pleroma/web/activity_pub/object_validators/note_validator.ex b/lib/pleroma/web/activity_pub/object_validators/note_validator.ex index fc65f1b7c..c95b622e4 100644 --- a/lib/pleroma/web/activity_pub/object_validators/note_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/note_validator.ex @@ -12,7 +12,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.NoteValidator do @primary_key false embedded_schema do - field(:id, :string, primary_key: true) + field(:id, Types.ObjectID, primary_key: true) field(:to, {:array, :string}, default: []) field(:cc, {:array, :string}, default: []) field(:bto, {:array, :string}, default: []) From 69fc1dd69ff9d63af1785bb0701576cb5cde51f2 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 26 Mar 2020 14:45:28 +0000 Subject: [PATCH 138/581] Apply suggestion to lib/pleroma/web/activity_pub/pipeline.ex --- lib/pleroma/web/activity_pub/pipeline.ex | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/pleroma/web/activity_pub/pipeline.ex b/lib/pleroma/web/activity_pub/pipeline.ex index 25f29bf63..0068d60be 100644 --- a/lib/pleroma/web/activity_pub/pipeline.ex +++ b/lib/pleroma/web/activity_pub/pipeline.ex @@ -22,6 +22,7 @@ def common_pipeline(object, meta) do {_, {:ok, _}} <- {:federation, maybe_federate(activity, meta)} do {:ok, activity, meta} else + {:mrf_object, {:reject, _}} -> {:ok, nil, meta} e -> {:error, e} end end From 6b793d3f8336fcba5cac596f9e76d0274633f98d Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Thu, 26 Mar 2020 21:54:01 +0300 Subject: [PATCH 139/581] Ensured no auxiliary computations (actors list preparation etc.) related to relationships preloading if no user is present (for statuses / accounts / relationships rendering). --- .../web/mastodon_api/views/account_view.ex | 26 +++++++++++----- .../mastodon_api/views/notification_view.ex | 31 +++++++++++-------- .../web/mastodon_api/views/status_view.ex | 16 +++++++--- 3 files changed, 47 insertions(+), 26 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 2cdfac7af..0efcabc01 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -14,10 +14,15 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do def render("index.json", %{users: users} = opts) do relationships_opt = - if Map.has_key?(opts, :relationships) do - opts[:relationships] - else - UserRelationship.view_relationships_option(opts[:for], users) + cond do + Map.has_key?(opts, :relationships) -> + opts[:relationships] + + is_nil(opts[:for]) -> + UserRelationship.view_relationships_option(nil, []) + + true -> + UserRelationship.view_relationships_option(opts[:for], users) end opts = Map.put(opts, :relationships, relationships_opt) @@ -134,10 +139,15 @@ def render( def render("relationships.json", %{user: user, targets: targets} = opts) do relationships_opt = - if Map.has_key?(opts, :relationships) do - opts[:relationships] - else - UserRelationship.view_relationships_option(user, targets) + cond do + Map.has_key?(opts, :relationships) -> + opts[:relationships] + + is_nil(opts[:for]) -> + UserRelationship.view_relationships_option(nil, []) + + true -> + UserRelationship.view_relationships_option(user, targets) end render_opts = %{as: :target, user: user, relationships: relationships_opt} diff --git a/lib/pleroma/web/mastodon_api/views/notification_view.ex b/lib/pleroma/web/mastodon_api/views/notification_view.ex index db434271c..a809080fd 100644 --- a/lib/pleroma/web/mastodon_api/views/notification_view.ex +++ b/lib/pleroma/web/mastodon_api/views/notification_view.ex @@ -32,21 +32,26 @@ def render("index.json", %{notifications: notifications, for: reading_user} = op |> Pleroma.Repo.all() relationships_opt = - if Map.has_key?(opts, :relationships) do - opts[:relationships] - else - move_activities_targets = - activities - |> Enum.filter(&(Activity.mastodon_notification_type(&1) == "move")) - |> Enum.map(&User.get_cached_by_ap_id(&1.data["target"])) + cond do + Map.has_key?(opts, :relationships) -> + opts[:relationships] - actors = - activities - |> Enum.map(fn a -> User.get_cached_by_ap_id(a.data["actor"]) end) - |> Enum.filter(& &1) - |> Kernel.++(move_activities_targets) + is_nil(opts[:for]) -> + UserRelationship.view_relationships_option(nil, []) - UserRelationship.view_relationships_option(reading_user, actors) + true -> + move_activities_targets = + activities + |> Enum.filter(&(Activity.mastodon_notification_type(&1) == "move")) + |> Enum.map(&User.get_cached_by_ap_id(&1.data["target"])) + + actors = + activities + |> Enum.map(fn a -> User.get_cached_by_ap_id(a.data["actor"]) end) + |> Enum.filter(& &1) + |> Kernel.++(move_activities_targets) + + UserRelationship.view_relationships_option(reading_user, actors) end opts = %{ diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 7b1cb7bf8..d36b9ee5c 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -87,11 +87,17 @@ def render("index.json", opts) do |> Repo.all() relationships_opt = - if Map.has_key?(opts, :relationships) do - opts[:relationships] - else - actors = Enum.map(activities ++ parent_activities, &get_user(&1.data["actor"])) - UserRelationship.view_relationships_option(opts[:for], actors) + cond do + Map.has_key?(opts, :relationships) -> + opts[:relationships] + + is_nil(opts[:for]) -> + UserRelationship.view_relationships_option(nil, []) + + true -> + actors = Enum.map(activities ++ parent_activities, &get_user(&1.data["actor"])) + + UserRelationship.view_relationships_option(opts[:for], actors) end opts = From dfbc05d4965a04a82d4c4c5b8842f4117757f30e Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Fri, 27 Mar 2020 08:01:03 +0300 Subject: [PATCH 140/581] Misc refactoring / tweaks (`ThreadMute.exists?/2`). --- lib/pleroma/thread_mute.ex | 4 ++-- lib/pleroma/web/common_api/common_api.ex | 2 +- .../web/mastodon_api/views/notification_view.ex | 12 ++++++------ lib/pleroma/web/mastodon_api/views/status_view.ex | 7 ++++--- test/web/mastodon_api/views/account_view_test.exs | 2 +- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/lib/pleroma/thread_mute.ex b/lib/pleroma/thread_mute.ex index 5768e7711..be01d541d 100644 --- a/lib/pleroma/thread_mute.ex +++ b/lib/pleroma/thread_mute.ex @@ -68,8 +68,8 @@ def remove_mute(user_id, context) do |> Repo.delete_all() end - def check_muted(user_id, context) do + def exists?(user_id, context) do query(user_id, context) - |> Repo.all() + |> Repo.exists?() end end diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index 091011c6b..2646b9f7b 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -358,7 +358,7 @@ def remove_mute(user, activity) do def thread_muted?(%{id: nil} = _user, _activity), do: false def thread_muted?(user, activity) do - ThreadMute.check_muted(user.id, activity.data["context"]) != [] + ThreadMute.exists?(user.id, activity.data["context"]) end def report(user, %{"account_id" => account_id} = data) do diff --git a/lib/pleroma/web/mastodon_api/views/notification_view.ex b/lib/pleroma/web/mastodon_api/views/notification_view.ex index a809080fd..89f5734ff 100644 --- a/lib/pleroma/web/mastodon_api/views/notification_view.ex +++ b/lib/pleroma/web/mastodon_api/views/notification_view.ex @@ -98,27 +98,27 @@ def render( } } - relationships_opt = %{relationships: opts[:relationships]} + render_opts = %{relationships: opts[:relationships]} case mastodon_type do "mention" -> - put_status(response, activity, reading_user, relationships_opt) + put_status(response, activity, reading_user, render_opts) "favourite" -> - put_status(response, parent_activity_fn.(), reading_user, relationships_opt) + put_status(response, parent_activity_fn.(), reading_user, render_opts) "reblog" -> - put_status(response, parent_activity_fn.(), reading_user, relationships_opt) + put_status(response, parent_activity_fn.(), reading_user, render_opts) "move" -> - put_target(response, activity, reading_user, relationships_opt) + put_target(response, activity, reading_user, render_opts) "follow" -> response "pleroma:emoji_reaction" -> response - |> put_status(parent_activity_fn.(), reading_user, relationships_opt) + |> put_status(parent_activity_fn.(), reading_user, render_opts) |> put_emoji(activity) _ -> diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index d36b9ee5c..440eef4ba 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -228,9 +228,10 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} end thread_muted? = - case activity.thread_muted? do - thread_muted? when is_boolean(thread_muted?) -> thread_muted? - nil -> (opts[:for] && CommonAPI.thread_muted?(opts[:for], activity)) || false + cond do + is_nil(opts[:for]) -> false + is_boolean(activity.thread_muted?) -> activity.thread_muted? + true -> CommonAPI.thread_muted?(opts[:for], activity) end attachment_data = object.data["attachment"] || [] diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index ede62903f..0d1c3ecb3 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -186,7 +186,7 @@ test "Represent a smaller mention" do describe "relationship" do defp test_relationship_rendering(user, other_user, expected_result) do - opts = %{user: user, target: other_user} + opts = %{user: user, target: other_user, relationships: nil} assert expected_result == AccountView.render("relationship.json", opts) relationships_opt = UserRelationship.view_relationships_option(user, [other_user]) From be9d18461a5ed6bd835e2eba8d3b54ba61fc51fb Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Sat, 28 Mar 2020 18:49:03 +0300 Subject: [PATCH 141/581] FollowingRelationship storage & performance optimizations (state turned `ecto_enum`-driven integer, reorganized indices etc.). --- lib/pleroma/ecto_enums.ex | 6 +++ lib/pleroma/following_relationship.ex | 43 ++++++++++++++++--- lib/pleroma/user.ex | 18 +++++--- lib/pleroma/user/query.ex | 6 +-- lib/pleroma/web/activity_pub/mrf.ex | 2 +- .../web/activity_pub/transmogrifier.ex | 13 +++--- lib/pleroma/web/common_api/common_api.ex | 4 +- .../web/mastodon_api/views/account_view.ex | 6 +-- ...llowing_relationships_state_to_integer.exs | 29 +++++++++++++ ...owing_relationships_following_id_index.exs | 11 +++++ test/following_relationship_test.exs | 8 ++-- test/tasks/user_test.exs | 2 +- test/user_test.exs | 9 ++-- test/web/activity_pub/transmogrifier_test.exs | 2 +- test/web/common_api/common_api_test.exs | 4 +- .../follow_request_controller_test.exs | 4 +- test/web/streamer/streamer_test.exs | 6 +-- 17 files changed, 128 insertions(+), 45 deletions(-) create mode 100644 priv/repo/migrations/20200328124805_change_following_relationships_state_to_integer.exs create mode 100644 priv/repo/migrations/20200328130139_add_following_relationships_following_id_index.exs diff --git a/lib/pleroma/ecto_enums.ex b/lib/pleroma/ecto_enums.ex index d9b601223..b98ac4ba1 100644 --- a/lib/pleroma/ecto_enums.ex +++ b/lib/pleroma/ecto_enums.ex @@ -11,3 +11,9 @@ notification_mute: 4, inverse_subscription: 5 ) + +defenum(FollowingRelationshipStateEnum, + follow_pending: 1, + follow_accept: 2, + follow_reject: 3 +) diff --git a/lib/pleroma/following_relationship.ex b/lib/pleroma/following_relationship.ex index a9538ea4e..a28da8bec 100644 --- a/lib/pleroma/following_relationship.ex +++ b/lib/pleroma/following_relationship.ex @@ -13,7 +13,7 @@ defmodule Pleroma.FollowingRelationship do alias Pleroma.User schema "following_relationships" do - field(:state, :string, default: "accept") + field(:state, FollowingRelationshipStateEnum, default: :follow_pending) belongs_to(:follower, User, type: CompatType) belongs_to(:following, User, type: CompatType) @@ -27,6 +27,19 @@ def changeset(%__MODULE__{} = following_relationship, attrs) do |> put_assoc(:follower, attrs.follower) |> put_assoc(:following, attrs.following) |> validate_required([:state, :follower, :following]) + |> unique_constraint(:follower_id, + name: :following_relationships_follower_id_following_id_index + ) + |> validate_not_self_relationship() + end + + def state_to_enum(state) when is_binary(state) do + case state do + "pending" -> :follow_pending + "accept" -> :follow_accept + "reject" -> :follow_reject + _ -> raise "State is not convertible to FollowingRelationshipStateEnum: #{state}" + end end def get(%User{} = follower, %User{} = following) do @@ -35,7 +48,7 @@ def get(%User{} = follower, %User{} = following) do |> Repo.one() end - def update(follower, following, "reject"), do: unfollow(follower, following) + def update(follower, following, :follow_reject), do: unfollow(follower, following) def update(%User{} = follower, %User{} = following, state) do case get(follower, following) do @@ -50,7 +63,7 @@ def update(%User{} = follower, %User{} = following, state) do end end - def follow(%User{} = follower, %User{} = following, state \\ "accept") do + def follow(%User{} = follower, %User{} = following, state \\ :follow_accept) do %__MODULE__{} |> changeset(%{follower: follower, following: following, state: state}) |> Repo.insert(on_conflict: :nothing) @@ -80,7 +93,7 @@ def following_count(%User{} = user) do def get_follow_requests(%User{id: id}) do __MODULE__ |> join(:inner, [r], f in assoc(r, :follower)) - |> where([r], r.state == "pending") + |> where([r], r.state == ^:follow_pending) |> where([r], r.following_id == ^id) |> select([r, f], f) |> Repo.all() @@ -88,7 +101,7 @@ def get_follow_requests(%User{id: id}) do def following?(%User{id: follower_id}, %User{id: followed_id}) do __MODULE__ - |> where(follower_id: ^follower_id, following_id: ^followed_id, state: "accept") + |> where(follower_id: ^follower_id, following_id: ^followed_id, state: ^:follow_accept) |> Repo.exists?() end @@ -97,7 +110,7 @@ def following(%User{} = user) do __MODULE__ |> join(:inner, [r], u in User, on: r.following_id == u.id) |> where([r], r.follower_id == ^user.id) - |> where([r], r.state == "accept") + |> where([r], r.state == ^:follow_accept) |> select([r, u], u.follower_address) |> Repo.all() @@ -157,4 +170,22 @@ def find(following_relationships, follower, following) do fr -> fr.follower_id == follower.id and fr.following_id == following.id end) end + + defp validate_not_self_relationship(%Ecto.Changeset{} = changeset) do + changeset + |> validate_change(:following_id, fn _, following_id -> + if following_id == get_field(changeset, :follower_id) do + [target_id: "can't be equal to follower_id"] + else + [] + end + end) + |> validate_change(:follower_id, fn _, follower_id -> + if follower_id == get_field(changeset, :following_id) do + [source_id: "can't be equal to following_id"] + else + [] + end + end) + end end diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index d9aa54057..6ffb82045 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -697,7 +697,7 @@ def needs_update?(_), do: true @spec maybe_direct_follow(User.t(), User.t()) :: {:ok, User.t()} | {:error, String.t()} def maybe_direct_follow(%User{} = follower, %User{local: true, locked: true} = followed) do - follow(follower, followed, "pending") + follow(follower, followed, :follow_pending) end def maybe_direct_follow(%User{} = follower, %User{local: true} = followed) do @@ -717,14 +717,14 @@ def maybe_direct_follow(%User{} = follower, %User{} = followed) do def follow_all(follower, followeds) do followeds |> Enum.reject(fn followed -> blocks?(follower, followed) || blocks?(followed, follower) end) - |> Enum.each(&follow(follower, &1, "accept")) + |> Enum.each(&follow(follower, &1, :follow_accept)) set_cache(follower) end defdelegate following(user), to: FollowingRelationship - def follow(%User{} = follower, %User{} = followed, state \\ "accept") do + def follow(%User{} = follower, %User{} = followed, state \\ :follow_accept) do deny_follow_blocked = Pleroma.Config.get([:user, :deny_follow_blocked]) cond do @@ -751,7 +751,7 @@ def unfollow(%User{ap_id: ap_id}, %User{ap_id: ap_id}) do def unfollow(%User{} = follower, %User{} = followed) do case get_follow_state(follower, followed) do - state when state in ["accept", "pending"] -> + state when state in [:follow_pending, :follow_accept] -> FollowingRelationship.unfollow(follower, followed) {:ok, followed} = update_follower_count(followed) @@ -769,6 +769,7 @@ def unfollow(%User{} = follower, %User{} = followed) do defdelegate following?(follower, followed), to: FollowingRelationship + @doc "Returns follow state as FollowingRelationshipStateEnum value" def get_follow_state(%User{} = follower, %User{} = following) do following_relationship = FollowingRelationship.get(follower, following) get_follow_state(follower, following, following_relationship) @@ -782,8 +783,11 @@ def get_follow_state( case {following_relationship, following.local} do {nil, false} -> case Utils.fetch_latest_follow(follower, following) do - %{data: %{"state" => state}} when state in ["pending", "accept"] -> state - _ -> nil + %Activity{data: %{"state" => state}} when state in ["pending", "accept"] -> + FollowingRelationship.state_to_enum(state) + + _ -> + nil end {%{state: state}, _} -> @@ -1282,7 +1286,7 @@ def blocks?(nil, _), do: false def blocks?(%User{} = user, %User{} = target) do blocks_user?(user, target) || - (!User.following?(user, target) && blocks_domain?(user, target)) + (blocks_domain?(user, target) and not User.following?(user, target)) end def blocks_user?(%User{} = user, %User{} = target) do diff --git a/lib/pleroma/user/query.ex b/lib/pleroma/user/query.ex index 884e33039..ec88088cf 100644 --- a/lib/pleroma/user/query.ex +++ b/lib/pleroma/user/query.ex @@ -148,7 +148,7 @@ defp compose_query({:followers, %User{id: id}}, query) do as: :relationships, on: r.following_id == ^id and r.follower_id == u.id ) - |> where([relationships: r], r.state == "accept") + |> where([relationships: r], r.state == ^:follow_accept) end defp compose_query({:friends, %User{id: id}}, query) do @@ -158,7 +158,7 @@ defp compose_query({:friends, %User{id: id}}, query) do as: :relationships, on: r.following_id == u.id and r.follower_id == ^id ) - |> where([relationships: r], r.state == "accept") + |> where([relationships: r], r.state == ^:follow_accept) end defp compose_query({:recipients_from_activity, to}, query) do @@ -173,7 +173,7 @@ defp compose_query({:recipients_from_activity, to}, query) do ) |> where( [u, following: f, relationships: r], - u.ap_id in ^to or (f.follower_address in ^to and r.state == "accept") + u.ap_id in ^to or (f.follower_address in ^to and r.state == ^:follow_accept) ) |> distinct(true) end diff --git a/lib/pleroma/web/activity_pub/mrf.ex b/lib/pleroma/web/activity_pub/mrf.ex index a0b3af432..f54647945 100644 --- a/lib/pleroma/web/activity_pub/mrf.ex +++ b/lib/pleroma/web/activity_pub/mrf.ex @@ -33,7 +33,7 @@ def subdomains_regex(domains) when is_list(domains) do @spec subdomain_match?([Regex.t()], String.t()) :: boolean() def subdomain_match?(domains, host) do - Enum.any?(domains, fn domain -> Regex.match?(domain, host) end) + !!Enum.find(domains, fn domain -> Regex.match?(domain, host) end) end @callback describe() :: {:ok | :error, Map.t()} diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index d6549a932..37e485741 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -490,7 +490,8 @@ def handle_incoming( {_, {:ok, follower}} <- {:follow, User.follow(follower, followed)}, {_, {:ok, _}} <- {:follow_state_update, Utils.update_follow_state_for_all(activity, "accept")}, - {:ok, _relationship} <- FollowingRelationship.update(follower, followed, "accept") do + {:ok, _relationship} <- + FollowingRelationship.update(follower, followed, :follow_accept) do ActivityPub.accept(%{ to: [follower.ap_id], actor: followed, @@ -500,7 +501,7 @@ def handle_incoming( else {:user_blocked, true} -> {:ok, _} = Utils.update_follow_state_for_all(activity, "reject") - {:ok, _relationship} = FollowingRelationship.update(follower, followed, "reject") + {:ok, _relationship} = FollowingRelationship.update(follower, followed, :follow_reject) ActivityPub.reject(%{ to: [follower.ap_id], @@ -511,7 +512,7 @@ def handle_incoming( {:follow, {:error, _}} -> {:ok, _} = Utils.update_follow_state_for_all(activity, "reject") - {:ok, _relationship} = FollowingRelationship.update(follower, followed, "reject") + {:ok, _relationship} = FollowingRelationship.update(follower, followed, :follow_reject) ActivityPub.reject(%{ to: [follower.ap_id], @@ -521,7 +522,7 @@ def handle_incoming( }) {:user_locked, true} -> - {:ok, _relationship} = FollowingRelationship.update(follower, followed, "pending") + {:ok, _relationship} = FollowingRelationship.update(follower, followed, :follow_pending) :noop end @@ -541,7 +542,7 @@ def handle_incoming( {:ok, follow_activity} <- get_follow_activity(follow_object, followed), {:ok, follow_activity} <- Utils.update_follow_state_for_all(follow_activity, "accept"), %User{local: true} = follower <- User.get_cached_by_ap_id(follow_activity.data["actor"]), - {:ok, _relationship} <- FollowingRelationship.update(follower, followed, "accept") do + {:ok, _relationship} <- FollowingRelationship.update(follower, followed, :follow_accept) do ActivityPub.accept(%{ to: follow_activity.data["to"], type: "Accept", @@ -564,7 +565,7 @@ def handle_incoming( {:ok, follow_activity} <- get_follow_activity(follow_object, followed), {:ok, follow_activity} <- Utils.update_follow_state_for_all(follow_activity, "reject"), %User{local: true} = follower <- User.get_cached_by_ap_id(follow_activity.data["actor"]), - {:ok, _relationship} <- FollowingRelationship.update(follower, followed, "reject"), + {:ok, _relationship} <- FollowingRelationship.update(follower, followed, :follow_reject), {:ok, activity} <- ActivityPub.reject(%{ to: follow_activity.data["to"], diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index 2646b9f7b..d530da42c 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -42,7 +42,7 @@ def accept_follow_request(follower, followed) do with {:ok, follower} <- User.follow(follower, followed), %Activity{} = follow_activity <- Utils.fetch_latest_follow(follower, followed), {:ok, follow_activity} <- Utils.update_follow_state_for_all(follow_activity, "accept"), - {:ok, _relationship} <- FollowingRelationship.update(follower, followed, "accept"), + {:ok, _relationship} <- FollowingRelationship.update(follower, followed, :follow_accept), {:ok, _activity} <- ActivityPub.accept(%{ to: [follower.ap_id], @@ -57,7 +57,7 @@ def accept_follow_request(follower, followed) do def reject_follow_request(follower, followed) do with %Activity{} = follow_activity <- Utils.fetch_latest_follow(follower, followed), {:ok, follow_activity} <- Utils.update_follow_state_for_all(follow_activity, "reject"), - {:ok, _relationship} <- FollowingRelationship.update(follower, followed, "reject"), + {:ok, _relationship} <- FollowingRelationship.update(follower, followed, :follow_reject), {:ok, _activity} <- ActivityPub.reject(%{ to: [follower.ap_id], diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 0efcabc01..f2dc2a9bd 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -71,7 +71,7 @@ def render( followed_by = if following_relationships do case FollowingRelationship.find(following_relationships, target, reading_user) do - %{state: "accept"} -> true + %{state: :follow_accept} -> true _ -> false end else @@ -81,7 +81,7 @@ def render( # NOTE: adjust UserRelationship.view_relationships_option/2 on new relation-related flags %{ id: to_string(target.id), - following: follow_state == "accept", + following: follow_state == :follow_accept, followed_by: followed_by, blocking: UserRelationship.exists?( @@ -123,7 +123,7 @@ def render( reading_user, &User.subscribed_to?(&2, &1) ), - requested: follow_state == "pending", + requested: follow_state == :follow_pending, domain_blocking: User.blocks_domain?(reading_user, target), showing_reblogs: not UserRelationship.exists?( diff --git a/priv/repo/migrations/20200328124805_change_following_relationships_state_to_integer.exs b/priv/repo/migrations/20200328124805_change_following_relationships_state_to_integer.exs new file mode 100644 index 000000000..d5a431c00 --- /dev/null +++ b/priv/repo/migrations/20200328124805_change_following_relationships_state_to_integer.exs @@ -0,0 +1,29 @@ +defmodule Pleroma.Repo.Migrations.ChangeFollowingRelationshipsStateToInteger do + use Ecto.Migration + + @alter_apps_scopes "ALTER TABLE following_relationships ALTER COLUMN state" + + def up do + execute(""" + #{@alter_apps_scopes} TYPE integer USING + CASE + WHEN state = 'pending' THEN 1 + WHEN state = 'accept' THEN 2 + WHEN state = 'reject' THEN 3 + ELSE 0 + END; + """) + end + + def down do + execute(""" + #{@alter_apps_scopes} TYPE varchar(255) USING + CASE + WHEN state = 1 THEN 'pending' + WHEN state = 2 THEN 'accept' + WHEN state = 3 THEN 'reject' + ELSE '' + END; + """) + end +end diff --git a/priv/repo/migrations/20200328130139_add_following_relationships_following_id_index.exs b/priv/repo/migrations/20200328130139_add_following_relationships_following_id_index.exs new file mode 100644 index 000000000..4c9faf48f --- /dev/null +++ b/priv/repo/migrations/20200328130139_add_following_relationships_following_id_index.exs @@ -0,0 +1,11 @@ +defmodule Pleroma.Repo.Migrations.AddFollowingRelationshipsFollowingIdIndex do + use Ecto.Migration + + # [:follower_index] index is useless because of [:follower_id, :following_id] index + # [:following_id] index makes sense because of user's followers-targeted queries + def change do + drop_if_exists(index(:following_relationships, [:follower_id])) + + create_if_not_exists(drop_if_exists(index(:following_relationships, [:following_id]))) + end +end diff --git a/test/following_relationship_test.exs b/test/following_relationship_test.exs index 865bb3838..17a468abb 100644 --- a/test/following_relationship_test.exs +++ b/test/following_relationship_test.exs @@ -15,28 +15,28 @@ defmodule Pleroma.FollowingRelationshipTest do test "returns following addresses without internal.fetch" do user = insert(:user) fetch_actor = InternalFetchActor.get_actor() - FollowingRelationship.follow(fetch_actor, user, "accept") + FollowingRelationship.follow(fetch_actor, user, :follow_accept) assert FollowingRelationship.following(fetch_actor) == [user.follower_address] end test "returns following addresses without relay" do user = insert(:user) relay_actor = Relay.get_actor() - FollowingRelationship.follow(relay_actor, user, "accept") + FollowingRelationship.follow(relay_actor, user, :follow_accept) assert FollowingRelationship.following(relay_actor) == [user.follower_address] end test "returns following addresses without remote user" do user = insert(:user) actor = insert(:user, local: false) - FollowingRelationship.follow(actor, user, "accept") + FollowingRelationship.follow(actor, user, :follow_accept) assert FollowingRelationship.following(actor) == [user.follower_address] end test "returns following addresses with local user" do user = insert(:user) actor = insert(:user, local: true) - FollowingRelationship.follow(actor, user, "accept") + FollowingRelationship.follow(actor, user, :follow_accept) assert FollowingRelationship.following(actor) == [ actor.follower_address, diff --git a/test/tasks/user_test.exs b/test/tasks/user_test.exs index b45f37263..8df835b56 100644 --- a/test/tasks/user_test.exs +++ b/test/tasks/user_test.exs @@ -140,7 +140,7 @@ test "no user to toggle" do test "user is unsubscribed" do followed = insert(:user) user = insert(:user) - User.follow(user, followed, "accept") + User.follow(user, followed, :follow_accept) Mix.Tasks.Pleroma.User.run(["unsubscribe", user.nickname]) diff --git a/test/user_test.exs b/test/user_test.exs index 8055ebd08..e7dfc5980 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -194,7 +194,8 @@ test "doesn't return already accepted or duplicate follow requests" do CommonAPI.follow(pending_follower, locked) CommonAPI.follow(pending_follower, locked) CommonAPI.follow(accepted_follower, locked) - Pleroma.FollowingRelationship.update(accepted_follower, locked, "accept") + + Pleroma.FollowingRelationship.update(accepted_follower, locked, :follow_accept) assert [^pending_follower] = User.get_follow_requests(locked) end @@ -319,7 +320,7 @@ test "unfollow with syncronizes external user" do following_address: "http://localhost:4001/users/fuser2/following" }) - {:ok, user} = User.follow(user, followed, "accept") + {:ok, user} = User.follow(user, followed, :follow_accept) {:ok, user, _activity} = User.unfollow(user, followed) @@ -332,7 +333,7 @@ test "unfollow takes a user and another user" do followed = insert(:user) user = insert(:user) - {:ok, user} = User.follow(user, followed, "accept") + {:ok, user} = User.follow(user, followed, :follow_accept) assert User.following(user) == [user.follower_address, followed.follower_address] @@ -353,7 +354,7 @@ test "unfollow doesn't unfollow yourself" do test "test if a user is following another user" do followed = insert(:user) user = insert(:user) - User.follow(user, followed, "accept") + User.follow(user, followed, :follow_accept) assert User.following?(user, followed) refute User.following?(followed, user) diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index b2cabbd30..b998f0d78 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -1622,7 +1622,7 @@ test "it upgrades a user to activitypub" do }) user_two = insert(:user) - Pleroma.FollowingRelationship.follow(user_two, user, "accept") + Pleroma.FollowingRelationship.follow(user_two, user, :follow_accept) {:ok, activity} = CommonAPI.post(user, %{"status" => "test"}) {:ok, unrelated_activity} = CommonAPI.post(user_two, %{"status" => "test"}) diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 0da0bd2e2..e53a7cedd 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -562,7 +562,7 @@ test "cancels a pending follow for a local user" do assert {:ok, follower, followed, %{id: activity_id, data: %{"state" => "pending"}}} = CommonAPI.follow(follower, followed) - assert User.get_follow_state(follower, followed) == "pending" + assert User.get_follow_state(follower, followed) == :follow_pending assert {:ok, follower} = CommonAPI.unfollow(follower, followed) assert User.get_follow_state(follower, followed) == nil @@ -584,7 +584,7 @@ test "cancels a pending follow for a remote user" do assert {:ok, follower, followed, %{id: activity_id, data: %{"state" => "pending"}}} = CommonAPI.follow(follower, followed) - assert User.get_follow_state(follower, followed) == "pending" + assert User.get_follow_state(follower, followed) == :follow_pending assert {:ok, follower} = CommonAPI.unfollow(follower, followed) assert User.get_follow_state(follower, followed) == nil diff --git a/test/web/mastodon_api/controllers/follow_request_controller_test.exs b/test/web/mastodon_api/controllers/follow_request_controller_test.exs index dd848821a..d8dbe4800 100644 --- a/test/web/mastodon_api/controllers/follow_request_controller_test.exs +++ b/test/web/mastodon_api/controllers/follow_request_controller_test.exs @@ -21,7 +21,7 @@ test "/api/v1/follow_requests works", %{user: user, conn: conn} do other_user = insert(:user) {:ok, _activity} = ActivityPub.follow(other_user, user) - {:ok, other_user} = User.follow(other_user, user, "pending") + {:ok, other_user} = User.follow(other_user, user, :follow_pending) assert User.following?(other_user, user) == false @@ -35,7 +35,7 @@ test "/api/v1/follow_requests/:id/authorize works", %{user: user, conn: conn} do other_user = insert(:user) {:ok, _activity} = ActivityPub.follow(other_user, user) - {:ok, other_user} = User.follow(other_user, user, "pending") + {:ok, other_user} = User.follow(other_user, user, :follow_pending) user = User.get_cached_by_id(user.id) other_user = User.get_cached_by_id(other_user.id) diff --git a/test/web/streamer/streamer_test.exs b/test/web/streamer/streamer_test.exs index a5d6e8ecf..ad8ce030b 100644 --- a/test/web/streamer/streamer_test.exs +++ b/test/web/streamer/streamer_test.exs @@ -197,7 +197,7 @@ test "it doesn't send to user if recipients invalid and thread containment is en Pleroma.Config.put([:instance, :skip_thread_containment], false) author = insert(:user) user = insert(:user) - User.follow(user, author, "accept") + User.follow(user, author, :follow_accept) activity = insert(:note_activity, @@ -220,7 +220,7 @@ test "it sends message if recipients invalid and thread containment is disabled" Pleroma.Config.put([:instance, :skip_thread_containment], true) author = insert(:user) user = insert(:user) - User.follow(user, author, "accept") + User.follow(user, author, :follow_accept) activity = insert(:note_activity, @@ -243,7 +243,7 @@ test "it sends message if recipients invalid and thread containment is enabled b Pleroma.Config.put([:instance, :skip_thread_containment], false) author = insert(:user) user = insert(:user, skip_thread_containment: true) - User.follow(user, author, "accept") + User.follow(user, author, :follow_accept) activity = insert(:note_activity, From eb9744cadea7191b088ddaadfbd5fa4d4fd45090 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 14 Jan 2020 14:42:30 +0300 Subject: [PATCH 142/581] activities generation tasks --- benchmarks/load_testing/activities.ex | 515 ++++++++++++++ benchmarks/load_testing/fetcher.ex | 709 ++++++++++++------- benchmarks/load_testing/generator.ex | 410 ----------- benchmarks/load_testing/helper.ex | 10 +- benchmarks/load_testing/users.ex | 161 +++++ benchmarks/mix/tasks/pleroma/load_testing.ex | 136 +--- config/benchmark.exs | 2 +- lib/pleroma/application.ex | 2 +- 8 files changed, 1184 insertions(+), 761 deletions(-) create mode 100644 benchmarks/load_testing/activities.ex delete mode 100644 benchmarks/load_testing/generator.ex create mode 100644 benchmarks/load_testing/users.ex diff --git a/benchmarks/load_testing/activities.ex b/benchmarks/load_testing/activities.ex new file mode 100644 index 000000000..db0e5a66f --- /dev/null +++ b/benchmarks/load_testing/activities.ex @@ -0,0 +1,515 @@ +defmodule Pleroma.LoadTesting.Activities do + @moduledoc """ + Module for generating different activities. + """ + import Ecto.Query + import Pleroma.LoadTesting.Helper, only: [to_sec: 1] + + alias Ecto.UUID + alias Pleroma.Constants + alias Pleroma.LoadTesting.Users + alias Pleroma.Repo + alias Pleroma.Web.CommonAPI + + require Constants + + @defaults [ + iterations: 170, + friends_used: 20, + non_friends_used: 20 + ] + + @max_concurrency 30 + + @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) + + @spec generate(User.t(), keyword()) :: :ok + def generate(user, opts \\ []) do + {:ok, _} = + Agent.start_link(fn -> %{} end, + name: :benchmark_state + ) + + opts = Keyword.merge(@defaults, opts) + + friends = + user + |> Users.get_users(limit: opts[:friends_used], local: :local, friends?: true) + |> Enum.shuffle() + + non_friends = + user + |> Users.get_users(limit: opts[:non_friends_used], local: :local, friends?: false) + |> Enum.shuffle() + + task_data = + for visibility <- @visibility, + type <- @types, + group <- @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) + end + + private_long_thread = fn -> + generate_long_thread("private", user, friends_thread, non_friends_thread, opts) + end + + iterations = opts[:iterations] + + {time, _} = + :timer.tc(fn -> + Enum.each( + 1..iterations, + fn + 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(user, friends, non_friends, Enum.shuffle(task_data), opts) + end + ) + end) + + IO.puts("Generating iterations activities take #{to_sec(time)} sec.\n") + :ok + end + + defp generate_long_thread(visibility, user, friends, non_friends, _opts) do + group = + if visibility == "public", + do: "friends", + else: "user" + + tasks = get_reply_tasks(visibility, group) |> Stream.cycle() |> Enum.take(50) + + {:ok, activity} = + CommonAPI.post(user, %{ + "status" => "Start of #{visibility} long thread", + "visibility" => visibility + }) + + Agent.update(:benchmark_state, fn state -> + key = + if visibility == "public", + do: :public_thread, + else: :private_thread + + 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) + IO.puts("Generating #{visibility} long thread ended\n") + end + + defp insert_replies_for_long_thread(tasks, visibility, user, friends, non_friends, 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} -> + insert_reply(user, List.delete(data, "@" <> user.nickname), id, visibility) + end) + end + + defp generate_activities(user, friends, non_friends, task_data, opts) do + Task.async_stream( + task_data, + fn {visibility, type, group} -> + insert_activity(type, visibility, group, user, friends, non_friends, opts) + end, + max_concurrency: @max_concurrency, + timeout: 30_000 + ) + |> Stream.run() + end + + defp insert_activity("simple", visibility, group, user, friends, non_friends, _opts) do + {:ok, _activity} = + group + |> get_actor(user, friends, non_friends) + |> CommonAPI.post(%{"status" => "Simple 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 + }) + end + + defp insert_activity("mentions", visibility, group, user, friends, non_friends, _opts) do + user_mentions = + get_random_mentions(friends, Enum.random(0..3)) ++ + get_random_mentions(non_friends, Enum.random(0..3)) + + 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 + }) + 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(", ") + + 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 + }) + end + + defp insert_activity("attachment", visibility, group, user, friends, non_friends, _opts) do + actor = get_actor(group, user, friends, non_friends) + + obj_data = %{ + "actor" => actor.ap_id, + "name" => "4467-11.jpg", + "type" => "Document", + "url" => [ + %{ + "href" => + "#{Pleroma.Web.base_url()}/media/b1b873552422a07bf53af01f3c231c841db4dfc42c35efde681abaf0f2a4eab7.jpg", + "mediaType" => "image/jpeg", + "type" => "Link" + } + ] + } + + object = Repo.insert!(%Pleroma.Object{data: obj_data}) + + {:ok, _activity} = + CommonAPI.post(actor, %{ + "status" => "Post with attachment", + "visibility" => visibility, + "media_ids" => [object.id] + }) + 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}) + end + + defp insert_activity("like", visibility, group, user, friends, non_friends, opts) do + actor = get_actor(group, user, friends, non_friends) + + with activity_id when not is_nil(activity_id) <- get_random_create_activity_id(), + {:ok, _activity, _object} <- CommonAPI.favorite(activity_id, actor) do + :ok + else + {:error, _} -> + insert_activity("like", visibility, group, user, friends, non_friends, opts) + + nil -> + Process.sleep(15) + insert_activity("like", visibility, group, user, friends, non_friends, opts) + end + end + + defp insert_activity("reblog", visibility, group, user, friends, non_friends, opts) do + actor = get_actor(group, user, friends, non_friends) + + with activity_id when not is_nil(activity_id) <- get_random_create_activity_id(), + {:ok, _activity, _object} <- CommonAPI.repeat(activity_id, actor) do + :ok + else + {:error, _} -> + insert_activity("reblog", visibility, group, user, friends, non_friends, opts) + + nil -> + Process.sleep(15) + insert_activity("reblog", visibility, group, user, friends, non_friends, 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" => "unlisted"}) + + 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) + tasks = get_reply_tasks("direct", group) + + list = + case group do + "non_friends" -> + Enum.take(non_friends, 3) + + _ -> + Enum.take(friends, 3) + end + + data = Enum.map(list, &("@" <> &1.nickname)) + + {:ok, activity} = + CommonAPI.post(actor, %{ + "status" => Enum.join(data, ", ") <> "simple status", + "visibility" => "direct" + }) + + acc = {activity.id, ["@" <> user.nickname | data] ++ ["reply to status"]} + insert_direct_replies(tasks, user, list, acc) + end + + defp insert_activity("remote", _, "user", _, _, _, _), do: :ok + + 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) + + 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) + 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 other_data(actor) 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()}" + + activity_data = %{ + "actor" => actor.ap_id, + "context" => context_id, + "id" => activity_id, + "published" => datetime, + "type" => "Create", + "directMessage" => false + } + + object_data = %{ + "actor" => actor.ap_id, + "attachment" => [], + "attributedTo" => actor.ap_id, + "bcc" => [], + "bto" => [], + "content" => "Remote post", + "context" => context_id, + "conversation" => context_id, + "emoji" => %{}, + "id" => object_id, + "published" => datetime, + "sensitive" => false, + "summary" => "", + "tag" => [], + "to" => ["https://www.w3.org/ns/activitystreams#Public"], + "type" => "Note" + } + + {activity_data, object_data} + end + + defp prepare_activity_data(actor, "public", _mention) do + obj_data = %{ + "cc" => [actor.follower_address], + "to" => [Constants.as_public()] + } + + act_data = %{ + "cc" => [actor.follower_address], + "to" => [Constants.as_public()] + } + + {act_data, obj_data} + end + + defp prepare_activity_data(actor, "private", _mention) do + obj_data = %{ + "cc" => [], + "to" => [actor.follower_address] + } + + act_data = %{ + "cc" => [], + "to" => [actor.follower_address] + } + + {act_data, obj_data} + end + + defp prepare_activity_data(actor, "unlisted", _mention) do + obj_data = %{ + "cc" => [Constants.as_public()], + "to" => [actor.follower_address] + } + + act_data = %{ + "cc" => [Constants.as_public()], + "to" => [actor.follower_address] + } + + {act_data, obj_data} + end + + defp prepare_activity_data(_actor, "direct", mention) do + %{host: mentioned_host} = URI.parse(mention.ap_id) + + obj_data = %{ + "cc" => [], + "content" => + "@#{ + mention.nickname + } direct message", + "tag" => [ + %{ + "href" => mention.ap_id, + "name" => "@#{mention.nickname}@#{mentioned_host}", + "type" => "Mention" + } + ], + "to" => [mention.ap_id] + } + + act_data = %{ + "cc" => [], + "directMessage" => true, + "to" => [mention.ap_id] + } + + {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(visibility, "user") when visibility in ["unlisted", "private"], + do: ~w(friend user friend) + + defp get_reply_tasks(visibility, "friends") when visibility in ["unlisted", "private"], + do: ~w(user friend user) + + defp get_reply_tasks(visibility, "non_friends") when visibility in ["unlisted", "private"], + do: [] + + 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 insert_replies(tasks, visibility, user, friends, non_friends, acc) do + Enum.reduce(tasks, acc, fn + "friend", {id, data} -> + friend = Enum.random(friends) + insert_reply(friend, 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) + 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"] -> + 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 + + defp insert_reply(actor, data, activity_id, visibility) do + {:ok, reply} = + CommonAPI.post(actor, %{ + "status" => Enum.join(data, ", "), + "visibility" => visibility, + "in_reply_to_status_id" => activity_id + }) + + {reply.id, ["@" <> actor.nickname | data]} + end + + defp get_random_mentions(_users, count) when count == 0, do: [] + + defp get_random_mentions(users, count) do + users + |> Enum.shuffle() + |> Enum.take(count) + |> Enum.map(&"@#{&1.nickname}") + end + + defp get_random_create_activity_id do + Repo.one( + from(a in Pleroma.Activity, + where: fragment("(?)->>'type' = ?", a.data, ^"Create"), + order_by: fragment("RANDOM()"), + limit: 1, + select: a.id + ) + ) + end +end diff --git a/benchmarks/load_testing/fetcher.ex b/benchmarks/load_testing/fetcher.ex index a45a71d4a..bd65ac84f 100644 --- a/benchmarks/load_testing/fetcher.ex +++ b/benchmarks/load_testing/fetcher.ex @@ -1,260 +1,489 @@ defmodule Pleroma.LoadTesting.Fetcher do - use Pleroma.LoadTesting.Helper + alias Pleroma.Activity + alias Pleroma.Pagination + alias Pleroma.Repo + alias Pleroma.User + alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.MastodonAPI.MastodonAPI + alias Pleroma.Web.MastodonAPI.StatusView - def fetch_user(user) do - Benchee.run(%{ - "By id" => fn -> Repo.get_by(User, id: user.id) end, - "By ap_id" => fn -> Repo.get_by(User, ap_id: user.ap_id) end, - "By email" => fn -> Repo.get_by(User, email: user.email) end, - "By nickname" => fn -> Repo.get_by(User, nickname: user.nickname) end - }) + @spec run_benchmarks(User.t()) :: any() + def run_benchmarks(user) do + fetch_user(user) + fetch_timelines(user) + render_views(user) end - def query_timelines(user) do - home_timeline_params = %{ - "count" => 20, - "with_muted" => true, - "type" => ["Create", "Announce"], + defp formatters do + [ + Benchee.Formatters.Console + ] + end + + defp fetch_user(user) do + Benchee.run( + %{ + "By id" => fn -> Repo.get_by(User, id: user.id) end, + "By ap_id" => fn -> Repo.get_by(User, ap_id: user.ap_id) end, + "By email" => fn -> Repo.get_by(User, email: user.email) end, + "By nickname" => fn -> Repo.get_by(User, nickname: user.nickname) end + }, + formatters: formatters() + ) + end + + defp fetch_timelines(user) do + fetch_home_timeline(user) + fetch_direct_timeline(user) + fetch_public_timeline(user) + fetch_public_timeline(user, :local) + fetch_public_timeline(user, :tag) + fetch_notifications(user) + fetch_favourites(user) + fetch_long_thread(user) + end + + defp render_views(user) do + render_timelines(user) + render_long_thread(user) + end + + defp opts_for_home_timeline(user) do + %{ "blocking_user" => user, + "count" => "20", "muting_user" => user, + "type" => ["Create", "Announce"], + "user" => user, + "with_muted" => "true" + } + end + + defp fetch_home_timeline(user) do + opts = opts_for_home_timeline(user) + + recipients = [user.ap_id | User.following(user)] + + first_page_last = + ActivityPub.fetch_activities(recipients, opts) |> Enum.reverse() |> List.last() + + second_page_last = + ActivityPub.fetch_activities(recipients, Map.put(opts, "max_id", first_page_last.id)) + |> Enum.reverse() + |> List.last() + + third_page_last = + ActivityPub.fetch_activities(recipients, Map.put(opts, "max_id", second_page_last.id)) + |> Enum.reverse() + |> List.last() + + forth_page_last = + ActivityPub.fetch_activities(recipients, Map.put(opts, "max_id", third_page_last.id)) + |> Enum.reverse() + |> List.last() + + Benchee.run( + %{ + "home timeline" => fn opts -> ActivityPub.fetch_activities(recipients, opts) end + }, + inputs: %{ + "1 page" => opts, + "2 page" => Map.put(opts, "max_id", first_page_last.id), + "3 page" => Map.put(opts, "max_id", second_page_last.id), + "4 page" => Map.put(opts, "max_id", third_page_last.id), + "5 page" => Map.put(opts, "max_id", forth_page_last.id), + "1 page only media" => Map.put(opts, "only_media", "true"), + "2 page only media" => + Map.put(opts, "max_id", first_page_last.id) |> Map.put("only_media", "true"), + "3 page only media" => + Map.put(opts, "max_id", second_page_last.id) |> Map.put("only_media", "true"), + "4 page only media" => + Map.put(opts, "max_id", third_page_last.id) |> Map.put("only_media", "true"), + "5 page only media" => + Map.put(opts, "max_id", forth_page_last.id) |> Map.put("only_media", "true") + }, + formatters: formatters() + ) + end + + defp opts_for_direct_timeline(user) do + %{ + :visibility => "direct", + "blocking_user" => user, + "count" => "20", + "type" => "Create", + "user" => user, + "with_muted" => "true" + } + end + + defp fetch_direct_timeline(user) do + recipients = [user.ap_id] + + opts = opts_for_direct_timeline(user) + + first_page_last = + recipients + |> ActivityPub.fetch_activities_query(opts) + |> Pagination.fetch_paginated(opts) + |> List.last() + + opts2 = Map.put(opts, "max_id", first_page_last.id) + + second_page_last = + recipients + |> ActivityPub.fetch_activities_query(opts2) + |> Pagination.fetch_paginated(opts2) + |> List.last() + + opts3 = Map.put(opts, "max_id", second_page_last.id) + + third_page_last = + recipients + |> ActivityPub.fetch_activities_query(opts3) + |> Pagination.fetch_paginated(opts3) + |> List.last() + + opts4 = Map.put(opts, "max_id", third_page_last.id) + + forth_page_last = + recipients + |> ActivityPub.fetch_activities_query(opts4) + |> Pagination.fetch_paginated(opts4) + |> List.last() + + Benchee.run( + %{ + "direct timeline" => fn opts -> + ActivityPub.fetch_activities_query(recipients, opts) |> Pagination.fetch_paginated(opts) + end + }, + inputs: %{ + "1 page" => opts, + "2 page" => opts2, + "3 page" => opts3, + "4 page" => opts4, + "5 page" => Map.put(opts4, "max_id", forth_page_last.id) + }, + formatters: formatters() + ) + end + + defp opts_for_public_timeline(user) do + %{ + "type" => ["Create", "Announce"], + "local_only" => false, + "blocking_user" => user, + "muting_user" => user + } + end + + defp opts_for_public_timeline(user, :local) do + %{ + "type" => ["Create", "Announce"], + "local_only" => true, + "blocking_user" => user, + "muting_user" => user + } + end + + defp opts_for_public_timeline(user, :tag) do + %{ + "blocking_user" => user, + "count" => "20", + "local_only" => nil, + "muting_user" => user, + "tag" => ["tag"], + "tag_all" => [], + "tag_reject" => [], + "type" => "Create", + "user" => user, + "with_muted" => "true" + } + end + + defp fetch_public_timeline(user) do + opts = opts_for_public_timeline(user) + + fetch_public_timeline(opts, "public timeline") + end + + defp fetch_public_timeline(user, :local) do + opts = opts_for_public_timeline(user, :local) + + fetch_public_timeline(opts, "public timeline only local") + end + + defp fetch_public_timeline(user, :tag) do + opts = opts_for_public_timeline(user, :tag) + + fetch_public_timeline(opts, "hashtag timeline") + end + + defp fetch_public_timeline(user, :only_media) do + opts = opts_for_public_timeline(user) |> Map.put("only_media", "true") + + fetch_public_timeline(opts, "public timeline only media") + end + + defp fetch_public_timeline(opts, title) when is_binary(title) do + first_page_last = ActivityPub.fetch_public_activities(opts) |> List.last() + + second_page_last = + ActivityPub.fetch_public_activities(Map.put(opts, "max_id", first_page_last.id)) + |> List.last() + + third_page_last = + ActivityPub.fetch_public_activities(Map.put(opts, "max_id", second_page_last.id)) + |> List.last() + + forth_page_last = + ActivityPub.fetch_public_activities(Map.put(opts, "max_id", third_page_last.id)) + |> List.last() + + Benchee.run( + %{ + title => fn opts -> + ActivityPub.fetch_public_activities(opts) + end + }, + inputs: %{ + "1 page" => opts, + "2 page" => Map.put(opts, "max_id", first_page_last.id), + "3 page" => Map.put(opts, "max_id", second_page_last.id), + "4 page" => Map.put(opts, "max_id", third_page_last.id), + "5 page" => Map.put(opts, "max_id", forth_page_last.id) + }, + formatters: formatters() + ) + end + + defp opts_for_notifications do + %{"count" => "20", "with_muted" => "true"} + end + + defp fetch_notifications(user) do + opts = opts_for_notifications() + + first_page_last = MastodonAPI.get_notifications(user, opts) |> List.last() + + second_page_last = + MastodonAPI.get_notifications(user, Map.put(opts, "max_id", first_page_last.id)) + |> List.last() + + third_page_last = + MastodonAPI.get_notifications(user, Map.put(opts, "max_id", second_page_last.id)) + |> List.last() + + forth_page_last = + MastodonAPI.get_notifications(user, Map.put(opts, "max_id", third_page_last.id)) + |> List.last() + + Benchee.run( + %{ + "Notifications" => fn opts -> + MastodonAPI.get_notifications(user, opts) + end + }, + inputs: %{ + "1 page" => opts, + "2 page" => Map.put(opts, "max_id", first_page_last.id), + "3 page" => Map.put(opts, "max_id", second_page_last.id), + "4 page" => Map.put(opts, "max_id", third_page_last.id), + "5 page" => Map.put(opts, "max_id", forth_page_last.id) + }, + formatters: formatters() + ) + end + + defp fetch_favourites(user) do + first_page_last = ActivityPub.fetch_favourites(user) |> List.last() + + second_page_last = + ActivityPub.fetch_favourites(user, %{"max_id" => first_page_last.id}) |> List.last() + + third_page_last = + ActivityPub.fetch_favourites(user, %{"max_id" => second_page_last.id}) |> List.last() + + forth_page_last = + ActivityPub.fetch_favourites(user, %{"max_id" => third_page_last.id}) |> List.last() + + Benchee.run( + %{ + "Favourites" => fn opts -> + ActivityPub.fetch_favourites(user, opts) + end + }, + inputs: %{ + "1 page" => %{}, + "2 page" => %{"max_id" => first_page_last.id}, + "3 page" => %{"max_id" => second_page_last.id}, + "4 page" => %{"max_id" => third_page_last.id}, + "5 page" => %{"max_id" => forth_page_last.id} + }, + formatters: formatters() + ) + end + + defp opts_for_long_thread(user) do + %{ + "blocking_user" => user, "user" => user } + end - mastodon_public_timeline_params = %{ - "count" => 20, - "local_only" => true, - "only_media" => "false", - "type" => ["Create", "Announce"], - "with_muted" => "true", - "blocking_user" => user, - "muting_user" => user - } + defp fetch_long_thread(user) do + %{public_thread: public, private_thread: private} = + Agent.get(:benchmark_state, fn state -> state end) - mastodon_federated_timeline_params = %{ - "count" => 20, - "only_media" => "false", - "type" => ["Create", "Announce"], - "with_muted" => "true", - "blocking_user" => user, - "muting_user" => user - } + opts = opts_for_long_thread(user) - following = User.following(user) + private_input = {private.data["context"], Map.put(opts, "exclude_id", private.id)} - Benchee.run(%{ - "User home timeline" => fn -> - Pleroma.Web.ActivityPub.ActivityPub.fetch_activities( - following, - home_timeline_params - ) - end, - "User mastodon public timeline" => fn -> - Pleroma.Web.ActivityPub.ActivityPub.fetch_public_activities( - mastodon_public_timeline_params - ) - end, - "User mastodon federated public timeline" => fn -> - Pleroma.Web.ActivityPub.ActivityPub.fetch_public_activities( - mastodon_federated_timeline_params - ) - end - }) + public_input = {public.data["context"], Map.put(opts, "exclude_id", public.id)} - home_activities = - Pleroma.Web.ActivityPub.ActivityPub.fetch_activities( - following, - home_timeline_params + Benchee.run( + %{ + "fetch context" => fn {context, opts} -> + ActivityPub.fetch_activities_for_context(context, opts) + end + }, + inputs: %{ + "Private long thread" => private_input, + "Public long thread" => public_input + }, + formatters: formatters() + ) + end + + defp render_timelines(user) do + opts = opts_for_home_timeline(user) + + recipients = [user.ap_id | User.following(user)] + + home_activities = ActivityPub.fetch_activities(recipients, opts) |> Enum.reverse() + + recipients = [user.ap_id] + + opts = opts_for_direct_timeline(user) + + direct_activities = + recipients + |> ActivityPub.fetch_activities_query(opts) + |> Pagination.fetch_paginated(opts) + + opts = opts_for_public_timeline(user) + + public_activities = ActivityPub.fetch_public_activities(opts) + + opts = opts_for_public_timeline(user, :tag) + + tag_activities = ActivityPub.fetch_public_activities(opts) + + opts = opts_for_notifications() + + notifications = MastodonAPI.get_notifications(user, opts) + + favourites = ActivityPub.fetch_favourites(user) + + Benchee.run( + %{ + "Rendering home timeline" => fn -> + StatusView.render("index.json", %{ + activities: home_activities, + for: user, + as: :activity + }) + end, + "Rendering direct timeline" => fn -> + StatusView.render("index.json", %{ + activities: direct_activities, + for: user, + as: :activity + }) + end, + "Rendering public timeline" => fn -> + StatusView.render("index.json", %{ + activities: public_activities, + for: user, + as: :activity + }) + end, + "Rendering tag timeline" => fn -> + StatusView.render("index.json", %{ + activities: tag_activities, + for: user, + as: :activity + }) + end, + "Rendering notifications" => fn -> + Pleroma.Web.MastodonAPI.NotificationView.render("index.json", %{ + notifications: notifications, + for: user + }) + end, + "Rendering favourites timeline" => fn -> + StatusView.render("index.json", %{ + activities: favourites, + for: user, + as: :activity + }) + end + }, + formatters: formatters() + ) + end + + defp render_long_thread(user) do + %{public_thread: public, private_thread: private} = + Agent.get(:benchmark_state, fn state -> state end) + + opts = %{for: user} + public_activity = Activity.get_by_id_with_object(public.id) + private_activity = Activity.get_by_id_with_object(private.id) + + Benchee.run( + %{ + "render" => fn opts -> + StatusView.render("show.json", opts) + end + }, + inputs: %{ + "Public root" => Map.put(opts, :activity, public_activity), + "Private root" => Map.put(opts, :activity, private_activity) + }, + formatters: formatters() + ) + + fetch_opts = opts_for_long_thread(user) + + public_context = + ActivityPub.fetch_activities_for_context( + public.data["context"], + Map.put(fetch_opts, "exclude_id", public.id) ) - public_activities = - Pleroma.Web.ActivityPub.ActivityPub.fetch_public_activities(mastodon_public_timeline_params) - - public_federated_activities = - Pleroma.Web.ActivityPub.ActivityPub.fetch_public_activities( - mastodon_federated_timeline_params + private_context = + ActivityPub.fetch_activities_for_context( + private.data["context"], + Map.put(fetch_opts, "exclude_id", private.id) ) - Benchee.run(%{ - "Rendering home timeline" => fn -> - Pleroma.Web.MastodonAPI.StatusView.render("index.json", %{ - activities: home_activities, - for: user, - as: :activity - }) - end, - "Rendering public timeline" => fn -> - Pleroma.Web.MastodonAPI.StatusView.render("index.json", %{ - activities: public_activities, - for: user, - as: :activity - }) - end, - "Rendering public federated timeline" => fn -> - Pleroma.Web.MastodonAPI.StatusView.render("index.json", %{ - activities: public_federated_activities, - for: user, - as: :activity - }) - end, - "Rendering favorites timeline" => fn -> - conn = Phoenix.ConnTest.build_conn(:get, "http://localhost:4001/api/v1/favourites", nil) - Pleroma.Web.MastodonAPI.StatusController.favourites( - %Plug.Conn{conn | - assigns: %{user: user}, - query_params: %{"limit" => "0"}, - body_params: %{}, - cookies: %{}, - params: %{}, - path_params: %{}, - private: %{ - Pleroma.Web.Router => {[], %{}}, - phoenix_router: Pleroma.Web.Router, - phoenix_action: :favourites, - phoenix_controller: Pleroma.Web.MastodonAPI.StatusController, - phoenix_endpoint: Pleroma.Web.Endpoint, - phoenix_format: "json", - phoenix_layout: {Pleroma.Web.LayoutView, "app.html"}, - phoenix_recycled: true, - - phoenix_view: Pleroma.Web.MastodonAPI.StatusView, - plug_session: %{"user_id" => user.id}, - plug_session_fetch: :done, - plug_session_info: :write, - plug_skip_csrf_protection: true - } - }, - %{}) - end, - }) - end - - def query_notifications(user) do - without_muted_params = %{"count" => "20", "with_muted" => "false"} - with_muted_params = %{"count" => "20", "with_muted" => "true"} - - Benchee.run(%{ - "Notifications without muted" => fn -> - Pleroma.Web.MastodonAPI.MastodonAPI.get_notifications(user, without_muted_params) - end, - "Notifications with muted" => fn -> - Pleroma.Web.MastodonAPI.MastodonAPI.get_notifications(user, with_muted_params) - end - }) - - without_muted_notifications = - Pleroma.Web.MastodonAPI.MastodonAPI.get_notifications(user, without_muted_params) - - with_muted_notifications = - Pleroma.Web.MastodonAPI.MastodonAPI.get_notifications(user, with_muted_params) - - Benchee.run(%{ - "Render notifications without muted" => fn -> - Pleroma.Web.MastodonAPI.NotificationView.render("index.json", %{ - notifications: without_muted_notifications, - for: user - }) - end, - "Render notifications with muted" => fn -> - Pleroma.Web.MastodonAPI.NotificationView.render("index.json", %{ - notifications: with_muted_notifications, - for: user - }) - end - }) - end - - def query_dms(user) do - params = %{ - "count" => "20", - "with_muted" => "true", - "type" => "Create", - "blocking_user" => user, - "user" => user, - visibility: "direct" - } - - Benchee.run(%{ - "Direct messages with muted" => fn -> - Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_query([user.ap_id], params) - |> Pleroma.Pagination.fetch_paginated(params) - end, - "Direct messages without muted" => fn -> - Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_query([user.ap_id], params) - |> Pleroma.Pagination.fetch_paginated(Map.put(params, "with_muted", false)) - end - }) - - dms_with_muted = - Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_query([user.ap_id], params) - |> Pleroma.Pagination.fetch_paginated(params) - - dms_without_muted = - Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_query([user.ap_id], params) - |> Pleroma.Pagination.fetch_paginated(Map.put(params, "with_muted", false)) - - Benchee.run(%{ - "Rendering dms with muted" => fn -> - Pleroma.Web.MastodonAPI.StatusView.render("index.json", %{ - activities: dms_with_muted, - for: user, - as: :activity - }) - end, - "Rendering dms without muted" => fn -> - Pleroma.Web.MastodonAPI.StatusView.render("index.json", %{ - activities: dms_without_muted, - for: user, - as: :activity - }) - end - }) - end - - def query_long_thread(user, activity) do - Benchee.run(%{ - "Fetch main post" => fn -> - Pleroma.Activity.get_by_id_with_object(activity.id) - end, - "Fetch context of main post" => fn -> - Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_for_context( - activity.data["context"], - %{ - "blocking_user" => user, - "user" => user, - "exclude_id" => activity.id - } - ) - end - }) - - activity = Pleroma.Activity.get_by_id_with_object(activity.id) - - context = - Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_for_context( - activity.data["context"], - %{ - "blocking_user" => user, - "user" => user, - "exclude_id" => activity.id + Benchee.run( + %{ + "render" => fn opts -> + StatusView.render("context.json", opts) + end + }, + inputs: %{ + "Public context" => %{user: user, activity: public_activity, activities: public_context}, + "Private context" => %{ + user: user, + activity: private_activity, + activities: private_context } - ) - - Benchee.run(%{ - "Render status" => fn -> - Pleroma.Web.MastodonAPI.StatusView.render("show.json", %{ - activity: activity, - for: user - }) - end, - "Render context" => fn -> - Pleroma.Web.MastodonAPI.StatusView.render( - "index.json", - for: user, - activities: context, - as: :activity - ) - |> Enum.reverse() - end - }) + }, + formatters: formatters() + ) end end diff --git a/benchmarks/load_testing/generator.ex b/benchmarks/load_testing/generator.ex deleted file mode 100644 index e4673757c..000000000 --- a/benchmarks/load_testing/generator.ex +++ /dev/null @@ -1,410 +0,0 @@ -defmodule Pleroma.LoadTesting.Generator do - use Pleroma.LoadTesting.Helper - alias Pleroma.Web.CommonAPI - - def generate_like_activities(user, posts) do - count_likes = Kernel.trunc(length(posts) / 4) - IO.puts("Starting generating #{count_likes} like activities...") - - {time, _} = - :timer.tc(fn -> - Task.async_stream( - Enum.take_random(posts, count_likes), - fn post -> {:ok, _, _} = CommonAPI.favorite(post.id, user) end, - max_concurrency: 10, - timeout: 30_000 - ) - |> Stream.run() - end) - - IO.puts("Inserting like activities take #{to_sec(time)} sec.\n") - end - - def generate_users(opts) do - IO.puts("Starting generating #{opts[:users_max]} users...") - {time, users} = :timer.tc(fn -> do_generate_users(opts) end) - - IO.puts("Inserting users took #{to_sec(time)} sec.\n") - users - end - - defp do_generate_users(opts) do - max = Keyword.get(opts, :users_max) - - Task.async_stream( - 1..max, - &generate_user_data(&1), - max_concurrency: 10, - timeout: 30_000 - ) - |> Enum.to_list() - end - - defp generate_user_data(i) do - remote = Enum.random([true, false]) - - user = %User{ - name: "Test テスト User #{i}", - email: "user#{i}@example.com", - nickname: "nick#{i}", - password_hash: - "$pbkdf2-sha512$160000$bU.OSFI7H/yqWb5DPEqyjw$uKp/2rmXw12QqnRRTqTtuk2DTwZfF8VR4MYW2xMeIlqPR/UX1nT1CEKVUx2CowFMZ5JON8aDvURrZpJjSgqXrg", - bio: "Tester Number #{i}", - local: remote - } - - user_urls = - if remote do - base_url = - Enum.random(["https://domain1.com", "https://domain2.com", "https://domain3.com"]) - - ap_id = "#{base_url}/users/#{user.nickname}" - - %{ - ap_id: ap_id, - follower_address: ap_id <> "/followers", - following_address: ap_id <> "/following" - } - else - %{ - ap_id: User.ap_id(user), - follower_address: User.ap_followers(user), - following_address: User.ap_following(user) - } - end - - user = Map.merge(user, user_urls) - - Repo.insert!(user) - end - - def generate_activities(user, users) do - do_generate_activities(user, users) - end - - defp do_generate_activities(user, users) do - IO.puts("Starting generating 20000 common activities...") - - {time, _} = - :timer.tc(fn -> - Task.async_stream( - 1..20_000, - fn _ -> - do_generate_activity([user | users]) - end, - max_concurrency: 10, - timeout: 30_000 - ) - |> Stream.run() - end) - - IO.puts("Inserting common activities take #{to_sec(time)} sec.\n") - - IO.puts("Starting generating 20000 activities with mentions...") - - {time, _} = - :timer.tc(fn -> - Task.async_stream( - 1..20_000, - fn _ -> - do_generate_activity_with_mention(user, users) - end, - max_concurrency: 10, - timeout: 30_000 - ) - |> Stream.run() - end) - - IO.puts("Inserting activities with menthions take #{to_sec(time)} sec.\n") - - IO.puts("Starting generating 10000 activities with threads...") - - {time, _} = - :timer.tc(fn -> - Task.async_stream( - 1..10_000, - fn _ -> - do_generate_threads([user | users]) - end, - max_concurrency: 10, - timeout: 30_000 - ) - |> Stream.run() - end) - - IO.puts("Inserting activities with threads take #{to_sec(time)} sec.\n") - end - - defp do_generate_activity(users) do - post = %{ - "status" => "Some status without mention with random user" - } - - CommonAPI.post(Enum.random(users), post) - end - - def generate_power_intervals(opts \\ []) do - count = Keyword.get(opts, :count, 20) - power = Keyword.get(opts, :power, 2) - IO.puts("Generating #{count} intervals for a power #{power} series...") - counts = Enum.map(1..count, fn n -> :math.pow(n, power) end) - sum = Enum.sum(counts) - - densities = - Enum.map(counts, fn c -> - c / sum - end) - - densities - |> Enum.reduce(0, fn density, acc -> - if acc == 0 do - [{0, density}] - else - [{_, lower} | _] = acc - [{lower, lower + density} | acc] - end - end) - |> Enum.reverse() - end - - def generate_tagged_activities(opts \\ []) do - tag_count = Keyword.get(opts, :tag_count, 20) - users = Keyword.get(opts, :users, Repo.all(User)) - activity_count = Keyword.get(opts, :count, 200_000) - - intervals = generate_power_intervals(count: tag_count) - - IO.puts( - "Generating #{activity_count} activities using #{tag_count} different tags of format `tag_n`, starting at tag_0" - ) - - Enum.each(1..activity_count, fn _ -> - random = :rand.uniform() - i = Enum.find_index(intervals, fn {lower, upper} -> lower <= random && upper > random end) - CommonAPI.post(Enum.random(users), %{"status" => "a post with the tag #tag_#{i}"}) - end) - end - - defp do_generate_activity_with_mention(user, users) do - mentions_cnt = Enum.random([2, 3, 4, 5]) - with_user = Enum.random([true, false]) - users = Enum.shuffle(users) - mentions_users = Enum.take(users, mentions_cnt) - mentions_users = if with_user, do: [user | mentions_users], else: mentions_users - - mentions_str = - Enum.map(mentions_users, fn user -> "@" <> user.nickname end) |> Enum.join(", ") - - post = %{ - "status" => mentions_str <> "some status with mentions random users" - } - - CommonAPI.post(Enum.random(users), post) - end - - defp do_generate_threads(users) do - thread_length = Enum.random([2, 3, 4, 5]) - actor = Enum.random(users) - - post = %{ - "status" => "Start of the thread" - } - - {:ok, activity} = CommonAPI.post(actor, post) - - Enum.each(1..thread_length, fn _ -> - user = Enum.random(users) - - post = %{ - "status" => "@#{actor.nickname} reply to thread", - "in_reply_to_status_id" => activity.id - } - - CommonAPI.post(user, post) - end) - end - - def generate_remote_activities(user, users) do - do_generate_remote_activities(user, users) - end - - defp do_generate_remote_activities(user, users) do - IO.puts("Starting generating 10000 remote activities...") - - {time, _} = - :timer.tc(fn -> - Task.async_stream( - 1..10_000, - fn i -> - do_generate_remote_activity(i, user, users) - end, - max_concurrency: 10, - timeout: 30_000 - ) - |> Stream.run() - end) - - IO.puts("Inserting remote activities take #{to_sec(time)} sec.\n") - end - - defp do_generate_remote_activity(i, user, users) do - actor = Enum.random(users) - %{host: host} = URI.parse(actor.ap_id) - date = Date.utc_today() - datetime = DateTime.utc_now() - - map = %{ - "actor" => actor.ap_id, - "cc" => [actor.follower_address, user.ap_id], - "context" => "tag:mastodon.example.org,#{date}:objectId=#{i}:objectType=Conversation", - "id" => actor.ap_id <> "/statuses/#{i}/activity", - "object" => %{ - "actor" => actor.ap_id, - "atomUri" => actor.ap_id <> "/statuses/#{i}", - "attachment" => [], - "attributedTo" => actor.ap_id, - "bcc" => [], - "bto" => [], - "cc" => [actor.follower_address, user.ap_id], - "content" => - "

- user.ap_id <> - "\" class=\"u-url mention\">@" <> user.nickname <> "

", - "context" => "tag:mastodon.example.org,#{date}:objectId=#{i}:objectType=Conversation", - "conversation" => - "tag:mastodon.example.org,#{date}:objectId=#{i}:objectType=Conversation", - "emoji" => %{}, - "id" => actor.ap_id <> "/statuses/#{i}", - "inReplyTo" => nil, - "inReplyToAtomUri" => nil, - "published" => datetime, - "sensitive" => true, - "summary" => "cw", - "tag" => [ - %{ - "href" => user.ap_id, - "name" => "@#{user.nickname}@#{host}", - "type" => "Mention" - } - ], - "to" => ["https://www.w3.org/ns/activitystreams#Public"], - "type" => "Note", - "url" => "http://#{host}/@#{actor.nickname}/#{i}" - }, - "published" => datetime, - "to" => ["https://www.w3.org/ns/activitystreams#Public"], - "type" => "Create" - } - - Pleroma.Web.ActivityPub.ActivityPub.insert(map, false) - end - - def generate_dms(user, users, opts) do - IO.puts("Starting generating #{opts[:dms_max]} DMs") - {time, _} = :timer.tc(fn -> do_generate_dms(user, users, opts) end) - IO.puts("Inserting dms take #{to_sec(time)} sec.\n") - end - - defp do_generate_dms(user, users, opts) do - Task.async_stream( - 1..opts[:dms_max], - fn _ -> - do_generate_dm(user, users) - end, - max_concurrency: 10, - timeout: 30_000 - ) - |> Stream.run() - end - - defp do_generate_dm(user, users) do - post = %{ - "status" => "@#{user.nickname} some direct message", - "visibility" => "direct" - } - - CommonAPI.post(Enum.random(users), post) - end - - def generate_long_thread(user, users, opts) do - IO.puts("Starting generating long thread with #{opts[:thread_length]} replies") - {time, activity} = :timer.tc(fn -> do_generate_long_thread(user, users, opts) end) - IO.puts("Inserting long thread replies take #{to_sec(time)} sec.\n") - {:ok, activity} - end - - defp do_generate_long_thread(user, users, opts) do - {:ok, %{id: id} = activity} = CommonAPI.post(user, %{"status" => "Start of long thread"}) - - Task.async_stream( - 1..opts[:thread_length], - fn _ -> do_generate_thread(users, id) end, - max_concurrency: 10, - timeout: 30_000 - ) - |> Stream.run() - - activity - end - - defp do_generate_thread(users, activity_id) do - CommonAPI.post(Enum.random(users), %{ - "status" => "reply to main post", - "in_reply_to_status_id" => activity_id - }) - end - - def generate_non_visible_message(user, users) do - IO.puts("Starting generating 1000 non visible posts") - - {time, _} = - :timer.tc(fn -> - do_generate_non_visible_posts(user, users) - end) - - IO.puts("Inserting non visible posts take #{to_sec(time)} sec.\n") - end - - defp do_generate_non_visible_posts(user, users) do - [not_friend | users] = users - - make_friends(user, users) - - Task.async_stream(1..1000, fn _ -> do_generate_non_visible_post(not_friend, users) end, - max_concurrency: 10, - timeout: 30_000 - ) - |> Stream.run() - end - - defp make_friends(_user, []), do: nil - - defp make_friends(user, [friend | users]) do - {:ok, _} = User.follow(user, friend) - {:ok, _} = User.follow(friend, user) - make_friends(user, users) - end - - defp do_generate_non_visible_post(not_friend, users) do - post = %{ - "status" => "some non visible post", - "visibility" => "private" - } - - {:ok, activity} = CommonAPI.post(not_friend, post) - - thread_length = Enum.random([2, 3, 4, 5]) - - Enum.each(1..thread_length, fn _ -> - user = Enum.random(users) - - post = %{ - "status" => "@#{not_friend.nickname} reply to non visible post", - "in_reply_to_status_id" => activity.id, - "visibility" => "private" - } - - CommonAPI.post(user, post) - end) - end -end diff --git a/benchmarks/load_testing/helper.ex b/benchmarks/load_testing/helper.ex index 47b25c65f..23bbb1cec 100644 --- a/benchmarks/load_testing/helper.ex +++ b/benchmarks/load_testing/helper.ex @@ -1,11 +1,3 @@ defmodule Pleroma.LoadTesting.Helper do - defmacro __using__(_) do - quote do - import Ecto.Query - alias Pleroma.Repo - alias Pleroma.User - - defp to_sec(microseconds), do: microseconds / 1_000_000 - end - end + def to_sec(microseconds), do: microseconds / 1_000_000 end diff --git a/benchmarks/load_testing/users.ex b/benchmarks/load_testing/users.ex new file mode 100644 index 000000000..951b30d91 --- /dev/null +++ b/benchmarks/load_testing/users.ex @@ -0,0 +1,161 @@ +defmodule Pleroma.LoadTesting.Users do + @moduledoc """ + Module for generating users with friends. + """ + import Ecto.Query + import Pleroma.LoadTesting.Helper, only: [to_sec: 1] + + alias Pleroma.Repo + alias Pleroma.User + alias Pleroma.User.Query + + @defaults [ + users: 20_000, + friends: 100 + ] + + @max_concurrency 30 + + @spec generate(keyword()) :: User.t() + def generate(opts \\ []) do + opts = Keyword.merge(@defaults, opts) + + IO.puts("Starting generating #{opts[:users]} users...") + + {time, _} = :timer.tc(fn -> generate_users(opts[:users]) end) + + IO.puts("Generating users take #{to_sec(time)} sec.\n") + + main_user = + Repo.one(from(u in User, where: u.local == true, order_by: fragment("RANDOM()"), limit: 1)) + + IO.puts("Starting making friends for #{opts[:friends]} users...") + {time, _} = :timer.tc(fn -> make_friends(main_user, opts[:friends]) end) + + IO.puts("Making friends take #{to_sec(time)} sec.\n") + + Repo.get(User, main_user.id) + end + + defp generate_users(max) do + Task.async_stream( + 1..max, + &generate_user(&1), + max_concurrency: @max_concurrency, + timeout: 30_000 + ) + |> Stream.run() + end + + defp generate_user(i) do + remote = Enum.random([true, false]) + + %User{ + name: "Test テスト User #{i}", + email: "user#{i}@example.com", + nickname: "nick#{i}", + password_hash: Comeonin.Pbkdf2.hashpwsalt("test"), + bio: "Tester Number #{i}", + local: !remote + } + |> user_urls() + |> Repo.insert!() + end + + defp user_urls(%{local: true} = user) do + urls = %{ + ap_id: User.ap_id(user), + follower_address: User.ap_followers(user), + following_address: User.ap_following(user) + } + + Map.merge(user, urls) + end + + defp user_urls(%{local: false} = user) do + base_domain = Enum.random(["domain1.com", "domain2.com", "domain3.com"]) + + ap_id = "https://#{base_domain}/users/#{user.nickname}" + + urls = %{ + ap_id: ap_id, + follower_address: ap_id <> "/followers", + following_address: ap_id <> "/following" + } + + Map.merge(user, urls) + end + + defp make_friends(main_user, max) when is_integer(max) do + number_of_users = + (max / 2) + |> Kernel.trunc() + + main_user + |> get_users(%{limit: number_of_users, local: :local}) + |> run_stream(main_user) + + main_user + |> get_users(%{limit: number_of_users, local: :external}) + |> run_stream(main_user) + end + + defp make_friends(%User{} = main_user, %User{} = user) do + {:ok, _} = User.follow(main_user, user) + {:ok, _} = User.follow(user, main_user) + end + + @spec get_users(User.t(), keyword()) :: [User.t()] + def get_users(user, opts) do + criteria = %{limit: opts[:limit]} + + criteria = + if opts[:local] do + Map.put(criteria, opts[:local], true) + else + criteria + end + + criteria = + if opts[:friends?] do + Map.put(criteria, :friends, user) + else + criteria + end + + query = + criteria + |> Query.build() + |> random_without_user(user) + + query = + if opts[:friends?] == false do + friends_ids = + %{friends: user} + |> Query.build() + |> Repo.all() + |> Enum.map(& &1.id) + + from(u in query, where: u.id not in ^friends_ids) + else + query + end + + Repo.all(query) + end + + defp random_without_user(query, user) do + from(u in query, + where: u.id != ^user.id, + order_by: fragment("RANDOM()") + ) + end + + defp run_stream(users, main_user) do + Task.async_stream(users, &make_friends(main_user, &1), + max_concurrency: @max_concurrency, + timeout: 30_000 + ) + |> Stream.run() + end +end diff --git a/benchmarks/mix/tasks/pleroma/load_testing.ex b/benchmarks/mix/tasks/pleroma/load_testing.ex index 0a751adac..262300990 100644 --- a/benchmarks/mix/tasks/pleroma/load_testing.ex +++ b/benchmarks/mix/tasks/pleroma/load_testing.ex @@ -1,114 +1,55 @@ defmodule Mix.Tasks.Pleroma.LoadTesting do use Mix.Task - use Pleroma.LoadTesting.Helper - import Mix.Pleroma - import Pleroma.LoadTesting.Generator - import Pleroma.LoadTesting.Fetcher + import Ecto.Query + + alias Ecto.Adapters.SQL + alias Pleroma.Repo + alias Pleroma.User @shortdoc "Factory for generation data" @moduledoc """ Generates data like: - local/remote users - - local/remote activities with notifications - - direct messages - - long thread - - non visible posts + - local/remote activities with differrent visibility: + - simple activiities + - with emoji + - with mentions + - hellthreads + - with attachments + - with tags + - likes + - reblogs + - simple threads + - long threads ## Generate data - MIX_ENV=benchmark mix pleroma.load_testing --users 20000 --dms 20000 --thread_length 2000 - MIX_ENV=benchmark mix pleroma.load_testing -u 20000 -d 20000 -t 2000 + MIX_ENV=benchmark mix pleroma.load_testing --users 20000 --friends 1000 --iterations 170 --friends_used 20 --non_friends_used 20 + MIX_ENV=benchmark mix pleroma.load_testing -u 20000 -f 1000 -i 170 -fu 20 -nfu 20 Options: - `--users NUMBER` - number of users to generate. Defaults to: 20000. Alias: `-u` - - `--dms NUMBER` - number of direct messages to generate. Defaults to: 20000. Alias `-d` - - `--thread_length` - number of messages in thread. Defaults to: 2000. ALias `-t` + - `--friends NUMBER` - number of friends for main user. Defaults to: 1000. Alias: `-f` + - `--iterations NUMBER` - number of iterations to generate activities. For each iteration in database is inserted about 120+ activities with different visibility, actors and types.Defaults to: 170. Alias: `-i` + - `--friends_used NUMBER` - number of main user friends used in activity generation. Defaults to: 20. Alias: `-fu` + - `--non_friends_used NUMBER` - number of non friends used in activity generation. Defaults to: 20. Alias: `-nfu` """ - @aliases [u: :users, d: :dms, t: :thread_length] + @aliases [u: :users, f: :friends, i: :iterations, fu: :friends_used, nfu: :non_friends_used] @switches [ users: :integer, - dms: :integer, - thread_length: :integer + friends: :integer, + iterations: :integer, + friends_used: :integer, + non_friends_used: :integer ] - @users_default 20_000 - @dms_default 1_000 - @thread_length_default 2_000 def run(args) do - start_pleroma() - Pleroma.Config.put([:instance, :skip_thread_containment], true) + Mix.Pleroma.start_pleroma() + clean_tables() {opts, _} = OptionParser.parse!(args, strict: @switches, aliases: @aliases) - users_max = Keyword.get(opts, :users, @users_default) - dms_max = Keyword.get(opts, :dms, @dms_default) - thread_length = Keyword.get(opts, :thread_length, @thread_length_default) - - clean_tables() - - opts = - Keyword.put(opts, :users_max, users_max) - |> Keyword.put(:dms_max, dms_max) - |> Keyword.put(:thread_length, thread_length) - - generate_users(opts) - - # main user for queries - IO.puts("Fetching local main user...") - - {time, user} = - :timer.tc(fn -> - Repo.one( - from(u in User, where: u.local == true, order_by: fragment("RANDOM()"), limit: 1) - ) - end) - - IO.puts("Fetching main user take #{to_sec(time)} sec.\n") - - IO.puts("Fetching local users...") - - {time, users} = - :timer.tc(fn -> - Repo.all( - from(u in User, - where: u.id != ^user.id, - where: u.local == true, - order_by: fragment("RANDOM()"), - limit: 10 - ) - ) - end) - - IO.puts("Fetching local users take #{to_sec(time)} sec.\n") - - IO.puts("Fetching remote users...") - - {time, remote_users} = - :timer.tc(fn -> - Repo.all( - from(u in User, - where: u.id != ^user.id, - where: u.local == false, - order_by: fragment("RANDOM()"), - limit: 10 - ) - ) - end) - - IO.puts("Fetching remote users take #{to_sec(time)} sec.\n") - - generate_activities(user, users) - - generate_remote_activities(user, remote_users) - - generate_like_activities( - user, Pleroma.Repo.all(Pleroma.Activity.Queries.by_type("Create")) - ) - - generate_dms(user, users, opts) - - {:ok, activity} = generate_long_thread(user, users, opts) - - generate_non_visible_message(user, users) + user = Pleroma.LoadTesting.Users.generate(opts) + Pleroma.LoadTesting.Activities.generate(user, opts) IO.puts("Users in DB: #{Repo.aggregate(from(u in User), :count, :id)}") @@ -120,19 +61,14 @@ def run(args) do "Notifications in DB: #{Repo.aggregate(from(n in Pleroma.Notification), :count, :id)}" ) - fetch_user(user) - query_timelines(user) - query_notifications(user) - query_dms(user) - query_long_thread(user, activity) - Pleroma.Config.put([:instance, :skip_thread_containment], false) - query_timelines(user) + Pleroma.LoadTesting.Fetcher.run_benchmarks(user) end defp clean_tables do IO.puts("Deleting old data...\n") - Ecto.Adapters.SQL.query!(Repo, "TRUNCATE users CASCADE;") - Ecto.Adapters.SQL.query!(Repo, "TRUNCATE activities CASCADE;") - Ecto.Adapters.SQL.query!(Repo, "TRUNCATE objects CASCADE;") + SQL.query!(Repo, "TRUNCATE users CASCADE;") + SQL.query!(Repo, "TRUNCATE activities CASCADE;") + SQL.query!(Repo, "TRUNCATE objects CASCADE;") + SQL.query!(Repo, "TRUNCATE oban_jobs CASCADE;") end end diff --git a/config/benchmark.exs b/config/benchmark.exs index ff59395cf..e867253eb 100644 --- a/config/benchmark.exs +++ b/config/benchmark.exs @@ -39,7 +39,7 @@ adapter: Ecto.Adapters.Postgres, username: "postgres", password: "postgres", - database: "pleroma_test", + database: "pleroma_benchmark", hostname: System.get_env("DB_HOST") || "localhost", pool_size: 10 diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 33f1705df..51850abb5 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -157,7 +157,7 @@ defp build_cachex(type, opts), defp chat_enabled?, do: Pleroma.Config.get([:chat, :enabled]) - defp streamer_child(:test), do: [] + defp streamer_child(env) when env in [:test, :benchmark], do: [] defp streamer_child(_) do [Pleroma.Web.Streamer.supervisor()] From 1f29ecdcd7ecdc4ad8d6bc8fc4c34efbc9b7fe1d Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 18 Feb 2020 12:19:10 +0300 Subject: [PATCH 143/581] sync with develop --- benchmarks/load_testing/activities.ex | 42 +++++++++++++ benchmarks/load_testing/helper.ex | 11 ++++ benchmarks/load_testing/users.ex | 61 +++++++++++-------- .../mix/tasks/pleroma/benchmarks/tags.ex | 24 +++----- benchmarks/mix/tasks/pleroma/load_testing.ex | 10 +-- lib/mix/pleroma.ex | 1 + 6 files changed, 99 insertions(+), 50 deletions(-) diff --git a/benchmarks/load_testing/activities.ex b/benchmarks/load_testing/activities.ex index db0e5a66f..121d5c500 100644 --- a/benchmarks/load_testing/activities.ex +++ b/benchmarks/load_testing/activities.ex @@ -85,6 +85,48 @@ def generate(user, opts \\ []) do :ok end + def generate_power_intervals(opts \\ []) do + count = Keyword.get(opts, :count, 20) + power = Keyword.get(opts, :power, 2) + IO.puts("Generating #{count} intervals for a power #{power} series...") + counts = Enum.map(1..count, fn n -> :math.pow(n, power) end) + sum = Enum.sum(counts) + + densities = + Enum.map(counts, fn c -> + c / sum + end) + + densities + |> Enum.reduce(0, fn density, acc -> + if acc == 0 do + [{0, density}] + else + [{_, lower} | _] = acc + [{lower, lower + density} | acc] + end + end) + |> Enum.reverse() + end + + def generate_tagged_activities(opts \\ []) do + tag_count = Keyword.get(opts, :tag_count, 20) + users = Keyword.get(opts, :users, Repo.all(Pleroma.User)) + activity_count = Keyword.get(opts, :count, 200_000) + + intervals = generate_power_intervals(count: tag_count) + + IO.puts( + "Generating #{activity_count} activities using #{tag_count} different tags of format `tag_n`, starting at tag_0" + ) + + Enum.each(1..activity_count, fn _ -> + random = :rand.uniform() + i = Enum.find_index(intervals, fn {lower, upper} -> lower <= random && upper > random end) + CommonAPI.post(Enum.random(users), %{"status" => "a post with the tag #tag_#{i}"}) + end) + end + defp generate_long_thread(visibility, user, friends, non_friends, _opts) do group = if visibility == "public", diff --git a/benchmarks/load_testing/helper.ex b/benchmarks/load_testing/helper.ex index 23bbb1cec..cab60acb4 100644 --- a/benchmarks/load_testing/helper.ex +++ b/benchmarks/load_testing/helper.ex @@ -1,3 +1,14 @@ defmodule Pleroma.LoadTesting.Helper do + alias Ecto.Adapters.SQL + alias Pleroma.Repo + def to_sec(microseconds), do: microseconds / 1_000_000 + + def clean_tables do + IO.puts("Deleting old data...\n") + SQL.query!(Repo, "TRUNCATE users CASCADE;") + SQL.query!(Repo, "TRUNCATE activities CASCADE;") + SQL.query!(Repo, "TRUNCATE objects CASCADE;") + SQL.query!(Repo, "TRUNCATE oban_jobs CASCADE;") + end end diff --git a/benchmarks/load_testing/users.ex b/benchmarks/load_testing/users.ex index 951b30d91..bc31dc08b 100644 --- a/benchmarks/load_testing/users.ex +++ b/benchmarks/load_testing/users.ex @@ -20,31 +20,31 @@ defmodule Pleroma.LoadTesting.Users do def generate(opts \\ []) do opts = Keyword.merge(@defaults, opts) - IO.puts("Starting generating #{opts[:users]} users...") - - {time, _} = :timer.tc(fn -> generate_users(opts[:users]) end) - - IO.puts("Generating users take #{to_sec(time)} sec.\n") + generate_users(opts[:users]) main_user = Repo.one(from(u in User, where: u.local == true, order_by: fragment("RANDOM()"), limit: 1)) - IO.puts("Starting making friends for #{opts[:friends]} users...") - {time, _} = :timer.tc(fn -> make_friends(main_user, opts[:friends]) end) - - IO.puts("Making friends take #{to_sec(time)} sec.\n") + make_friends(main_user, opts[:friends]) Repo.get(User, main_user.id) end - defp generate_users(max) do - Task.async_stream( - 1..max, - &generate_user(&1), - max_concurrency: @max_concurrency, - timeout: 30_000 - ) - |> Stream.run() + def generate_users(max) do + IO.puts("Starting generating #{opts[:users]} users...") + + {time, _} = + :timer.tc(fn -> + Task.async_stream( + 1..max, + &generate_user(&1), + max_concurrency: @max_concurrency, + timeout: 30_000 + ) + |> Stream.run() + end) + + IO.puts("Generating users take #{to_sec(time)} sec.\n") end defp generate_user(i) do @@ -86,18 +86,25 @@ defp user_urls(%{local: false} = user) do Map.merge(user, urls) end - defp make_friends(main_user, max) when is_integer(max) do - number_of_users = - (max / 2) - |> Kernel.trunc() + def make_friends(main_user, max) when is_integer(max) do + IO.puts("Starting making friends for #{opts[:friends]} users...") - main_user - |> get_users(%{limit: number_of_users, local: :local}) - |> run_stream(main_user) + {time, _} = + :timer.tc(fn -> + number_of_users = + (max / 2) + |> Kernel.trunc() - main_user - |> get_users(%{limit: number_of_users, local: :external}) - |> run_stream(main_user) + main_user + |> get_users(%{limit: number_of_users, local: :local}) + |> run_stream(main_user) + + main_user + |> get_users(%{limit: number_of_users, local: :external}) + |> run_stream(main_user) + end) + + IO.puts("Making friends take #{to_sec(time)} sec.\n") end defp make_friends(%User{} = main_user, %User{} = user) do diff --git a/benchmarks/mix/tasks/pleroma/benchmarks/tags.ex b/benchmarks/mix/tasks/pleroma/benchmarks/tags.ex index fd1506907..657403202 100644 --- a/benchmarks/mix/tasks/pleroma/benchmarks/tags.ex +++ b/benchmarks/mix/tasks/pleroma/benchmarks/tags.ex @@ -1,9 +1,12 @@ defmodule Mix.Tasks.Pleroma.Benchmarks.Tags do use Mix.Task - alias Pleroma.Repo - alias Pleroma.LoadTesting.Generator + + import Pleroma.LoadTesting.Helper, only: [clean_tables: 0] import Ecto.Query + alias Pleroma.Repo + alias Pleroma.Web.MastodonAPI.TimelineController + def run(_args) do Mix.Pleroma.start_pleroma() activities_count = Repo.aggregate(from(a in Pleroma.Activity), :count, :id) @@ -11,8 +14,8 @@ def run(_args) do if activities_count == 0 do IO.puts("Did not find any activities, cleaning and generating") clean_tables() - Generator.generate_users(users_max: 10) - Generator.generate_tagged_activities() + Pleroma.LoadTesting.Users.generate_users(10) + Pleroma.LoadTesting.Activities.generate_tagged_activities() else IO.puts("Found #{activities_count} activities, won't generate new ones") end @@ -34,7 +37,7 @@ def run(_args) do Benchee.run( %{ "Hashtag fetching, any" => fn tags -> - Pleroma.Web.MastodonAPI.TimelineController.hashtag_fetching( + TimelineController.hashtag_fetching( %{ "any" => tags }, @@ -44,7 +47,7 @@ def run(_args) do end, # Will always return zero results because no overlapping hashtags are generated. "Hashtag fetching, all" => fn tags -> - Pleroma.Web.MastodonAPI.TimelineController.hashtag_fetching( + TimelineController.hashtag_fetching( %{ "all" => tags }, @@ -64,7 +67,7 @@ def run(_args) do Benchee.run( %{ "Hashtag fetching" => fn tag -> - Pleroma.Web.MastodonAPI.TimelineController.hashtag_fetching( + TimelineController.hashtag_fetching( %{ "tag" => tag }, @@ -77,11 +80,4 @@ def run(_args) do time: 5 ) end - - defp clean_tables do - IO.puts("Deleting old data...\n") - Ecto.Adapters.SQL.query!(Repo, "TRUNCATE users CASCADE;") - Ecto.Adapters.SQL.query!(Repo, "TRUNCATE activities CASCADE;") - Ecto.Adapters.SQL.query!(Repo, "TRUNCATE objects CASCADE;") - end end diff --git a/benchmarks/mix/tasks/pleroma/load_testing.ex b/benchmarks/mix/tasks/pleroma/load_testing.ex index 262300990..72b225f09 100644 --- a/benchmarks/mix/tasks/pleroma/load_testing.ex +++ b/benchmarks/mix/tasks/pleroma/load_testing.ex @@ -1,8 +1,8 @@ defmodule Mix.Tasks.Pleroma.LoadTesting do use Mix.Task import Ecto.Query + import Pleroma.LoadTesting.Helper, only: [clean_tables: 0] - alias Ecto.Adapters.SQL alias Pleroma.Repo alias Pleroma.User @@ -63,12 +63,4 @@ def run(args) do Pleroma.LoadTesting.Fetcher.run_benchmarks(user) end - - defp clean_tables do - IO.puts("Deleting old data...\n") - SQL.query!(Repo, "TRUNCATE users CASCADE;") - SQL.query!(Repo, "TRUNCATE activities CASCADE;") - SQL.query!(Repo, "TRUNCATE objects CASCADE;") - SQL.query!(Repo, "TRUNCATE oban_jobs CASCADE;") - end end diff --git a/lib/mix/pleroma.ex b/lib/mix/pleroma.ex index 3ad6edbfb..4dfcc32e7 100644 --- a/lib/mix/pleroma.ex +++ b/lib/mix/pleroma.ex @@ -5,6 +5,7 @@ defmodule Mix.Pleroma do @doc "Common functions to be reused in mix tasks" def start_pleroma do + Mix.Task.run("app.start") Application.put_env(:phoenix, :serve_endpoints, false, persistent: true) if Pleroma.Config.get(:env) != :test do From 56503c385e8412a1189748bcf3fdfd4090be9f56 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 17 Mar 2020 13:47:13 +0300 Subject: [PATCH 144/581] fix --- benchmarks/load_testing/activities.ex | 4 ++-- benchmarks/load_testing/users.ex | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/benchmarks/load_testing/activities.ex b/benchmarks/load_testing/activities.ex index 121d5c500..24c6b5531 100644 --- a/benchmarks/load_testing/activities.ex +++ b/benchmarks/load_testing/activities.ex @@ -19,7 +19,7 @@ defmodule Pleroma.LoadTesting.Activities do non_friends_used: 20 ] - @max_concurrency 30 + @max_concurrency 10 @visibility ~w(public private direct unlisted) @types ~w(simple emoji mentions hell_thread attachment tag like reblog simple_thread remote) @@ -81,7 +81,7 @@ def generate(user, opts \\ []) do ) end) - IO.puts("Generating iterations activities take #{to_sec(time)} sec.\n") + IO.puts("Generating iterations of activities take #{to_sec(time)} sec.\n") :ok end diff --git a/benchmarks/load_testing/users.ex b/benchmarks/load_testing/users.ex index bc31dc08b..b73ac8651 100644 --- a/benchmarks/load_testing/users.ex +++ b/benchmarks/load_testing/users.ex @@ -14,7 +14,7 @@ defmodule Pleroma.LoadTesting.Users do friends: 100 ] - @max_concurrency 30 + @max_concurrency 10 @spec generate(keyword()) :: User.t() def generate(opts \\ []) do @@ -31,7 +31,7 @@ def generate(opts \\ []) do end def generate_users(max) do - IO.puts("Starting generating #{opts[:users]} users...") + IO.puts("Starting generating #{max} users...") {time, _} = :timer.tc(fn -> @@ -87,7 +87,7 @@ defp user_urls(%{local: false} = user) do end def make_friends(main_user, max) when is_integer(max) do - IO.puts("Starting making friends for #{opts[:friends]} users...") + IO.puts("Starting making friends for #{max} users...") {time, _} = :timer.tc(fn -> @@ -107,7 +107,7 @@ def make_friends(main_user, max) when is_integer(max) do IO.puts("Making friends take #{to_sec(time)} sec.\n") end - defp make_friends(%User{} = main_user, %User{} = user) do + def make_friends(%User{} = main_user, %User{} = user) do {:ok, _} = User.follow(main_user, user) {:ok, _} = User.follow(user, main_user) end From 96e279655763fedcb701e59c500023a70568c4c6 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Mon, 30 Mar 2020 11:59:14 +0300 Subject: [PATCH 145/581] use in timelines benchmark new user generator --- benchmarks/load_testing/activities.ex | 2 +- benchmarks/load_testing/users.ex | 9 ++++---- .../mix/tasks/pleroma/benchmarks/timelines.ex | 22 +++++++------------ 3 files changed, 14 insertions(+), 19 deletions(-) diff --git a/benchmarks/load_testing/activities.ex b/benchmarks/load_testing/activities.ex index 24c6b5531..23ee2b987 100644 --- a/benchmarks/load_testing/activities.ex +++ b/benchmarks/load_testing/activities.ex @@ -81,7 +81,7 @@ def generate(user, opts \\ []) do ) end) - IO.puts("Generating iterations of activities take #{to_sec(time)} sec.\n") + IO.puts("Generating iterations of activities took #{to_sec(time)} sec.\n") :ok end diff --git a/benchmarks/load_testing/users.ex b/benchmarks/load_testing/users.ex index b73ac8651..1a8c6e22f 100644 --- a/benchmarks/load_testing/users.ex +++ b/benchmarks/load_testing/users.ex @@ -33,7 +33,7 @@ def generate(opts \\ []) do def generate_users(max) do IO.puts("Starting generating #{max} users...") - {time, _} = + {time, users} = :timer.tc(fn -> Task.async_stream( 1..max, @@ -41,10 +41,11 @@ def generate_users(max) do max_concurrency: @max_concurrency, timeout: 30_000 ) - |> Stream.run() + |> Enum.to_list() end) - IO.puts("Generating users take #{to_sec(time)} sec.\n") + IO.puts("Generating users took #{to_sec(time)} sec.\n") + users end defp generate_user(i) do @@ -104,7 +105,7 @@ def make_friends(main_user, max) when is_integer(max) do |> run_stream(main_user) end) - IO.puts("Making friends take #{to_sec(time)} sec.\n") + IO.puts("Making friends took #{to_sec(time)} sec.\n") end def make_friends(%User{} = main_user, %User{} = user) do diff --git a/benchmarks/mix/tasks/pleroma/benchmarks/timelines.ex b/benchmarks/mix/tasks/pleroma/benchmarks/timelines.ex index dc6f3d3fc..9b7ac6111 100644 --- a/benchmarks/mix/tasks/pleroma/benchmarks/timelines.ex +++ b/benchmarks/mix/tasks/pleroma/benchmarks/timelines.ex @@ -1,9 +1,10 @@ defmodule Mix.Tasks.Pleroma.Benchmarks.Timelines do use Mix.Task - alias Pleroma.Repo - alias Pleroma.LoadTesting.Generator + + import Pleroma.LoadTesting.Helper, only: [clean_tables: 0] alias Pleroma.Web.CommonAPI + alias Plug.Conn def run(_args) do Mix.Pleroma.start_pleroma() @@ -11,7 +12,7 @@ def run(_args) do # Cleaning tables clean_tables() - [{:ok, user} | users] = Generator.generate_users(users_max: 1000) + [{:ok, user} | users] = Pleroma.LoadTesting.Users.generate_users(1000) # Let the user make 100 posts @@ -38,8 +39,8 @@ def run(_args) do "user timeline, no followers" => fn reading_user -> conn = Phoenix.ConnTest.build_conn() - |> Plug.Conn.assign(:user, reading_user) - |> Plug.Conn.assign(:skip_link_headers, true) + |> Conn.assign(:user, reading_user) + |> Conn.assign(:skip_link_headers, true) Pleroma.Web.MastodonAPI.AccountController.statuses(conn, %{"id" => user.id}) end @@ -56,8 +57,8 @@ def run(_args) do "user timeline, all following" => fn reading_user -> conn = Phoenix.ConnTest.build_conn() - |> Plug.Conn.assign(:user, reading_user) - |> Plug.Conn.assign(:skip_link_headers, true) + |> Conn.assign(:user, reading_user) + |> Conn.assign(:skip_link_headers, true) Pleroma.Web.MastodonAPI.AccountController.statuses(conn, %{"id" => user.id}) end @@ -66,11 +67,4 @@ def run(_args) do time: 60 ) end - - defp clean_tables do - IO.puts("Deleting old data...\n") - Ecto.Adapters.SQL.query!(Repo, "TRUNCATE users CASCADE;") - Ecto.Adapters.SQL.query!(Repo, "TRUNCATE activities CASCADE;") - Ecto.Adapters.SQL.query!(Repo, "TRUNCATE objects CASCADE;") - end end From 2afc7a9112fc11bc51abc2b65aea03d6d5045695 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Mon, 30 Mar 2020 12:16:45 +0300 Subject: [PATCH 146/581] changelog fix --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f393ea8eb..52e6c33f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added - NodeInfo: `pleroma:api/v1/notifications:include_types_filter` to the `features` list. - Configuration: `:restrict_unauthenticated` setting, restrict access for unauthenticated users to timelines (public and federate), user profiles and statuses. +- New HTTP adapter [gun](https://github.com/ninenines/gun). Gun adapter requires minimum OTP version of 22.2 otherwise Pleroma won’t start. For hackney OTP update is not required.
API Changes - Mastodon API: Support for `include_types` in `/api/v1/notifications`. @@ -97,7 +98,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - User settings: Add _This account is a_ option. - A new users admin digest email - OAuth: admin scopes support (relevant setting: `[:auth, :enforce_oauth_admin_scope_usage]`). -- New HTTP adapter [gun](https://github.com/ninenines/gun). Gun adapter requires minimum OTP version of 22.2 otherwise Pleroma won’t start. For hackney OTP update is not required. - Add an option `authorized_fetch_mode` to require HTTP signatures for AP fetches. - ActivityPub: support for `replies` collection (output for outgoing federation & fetching on incoming federation). - Mix task to refresh counter cache (`mix pleroma.refresh_counter_cache`) From 1fcdcb12a717fa3dbd54a5c3778bd216df6449ad Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Mon, 30 Mar 2020 12:47:12 +0300 Subject: [PATCH 147/581] updating gun with bug fix https://github.com/ninenines/gun/issues/222 --- lib/pleroma/pool/connections.ex | 31 +++++++++++-------------------- mix.exs | 2 +- mix.lock | 2 +- 3 files changed, 13 insertions(+), 22 deletions(-) diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index 91102faf7..4d4ba913c 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -167,29 +167,20 @@ defp sort_conns({_, c1}, {_, c2}) do c1.crf <= c2.crf and c1.last_reference <= c2.last_reference end - defp find_conn_from_gun_info(conns, pid) do - # TODO: temp fix for gun MatchError https://github.com/ninenines/gun/issues/222 - # TODO: REMOVE LATER - try do - %{origin_host: host, origin_scheme: scheme, origin_port: port} = Gun.info(pid) - - host = - case :inet.ntoa(host) do - {:error, :einval} -> host - ip -> ip - end - - key = "#{scheme}:#{host}:#{port}" - find_conn(conns, pid, key) - rescue - MatcheError -> find_conn(conns, pid) - end - end - @impl true def handle_info({:gun_up, conn_pid, _protocol}, state) do + %{origin_host: host, origin_scheme: scheme, origin_port: port} = Gun.info(conn_pid) + + host = + case :inet.ntoa(host) do + {:error, :einval} -> host + ip -> ip + end + + key = "#{scheme}:#{host}:#{port}" + state = - with {key, conn} <- find_conn_from_gun_info(state.conns, conn_pid), + with {key, conn} <- find_conn(state.conns, conn_pid, key), {true, key} <- {Process.alive?(conn_pid), key} do put_in(state.conns[key], %{ conn diff --git a/mix.exs b/mix.exs index 77d043d37..87c025d89 100644 --- a/mix.exs +++ b/mix.exs @@ -127,7 +127,7 @@ defp deps do {:castore, "~> 0.1"}, {:cowlib, "~> 2.8", override: true}, {:gun, - github: "ninenines/gun", ref: "bd6425ab87428cf4c95f4d23e0a48fd065fbd714", override: true}, + github: "ninenines/gun", ref: "e1a69b36b180a574c0ac314ced9613fdd52312cc", override: true}, {:jason, "~> 1.0"}, {:mogrify, "~> 0.6.1"}, {:ex_aws, "~> 2.1"}, diff --git a/mix.lock b/mix.lock index b791dccc4..6cca578d6 100644 --- a/mix.lock +++ b/mix.lock @@ -47,7 +47,7 @@ "gen_stage": {:hex, :gen_stage, "0.14.3", "d0c66f1c87faa301c1a85a809a3ee9097a4264b2edf7644bf5c123237ef732bf", [:mix], [], "hexpm"}, "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", "bd6425ab87428cf4c95f4d23e0a48fd065fbd714", [ref: "bd6425ab87428cf4c95f4d23e0a48fd065fbd714"]}, + "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"}, "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"}, From b607ae1a1c0ef6557094ec0fb10ba2d19d621f7f Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Mon, 30 Mar 2020 13:50:00 +0300 Subject: [PATCH 148/581] removing grouped reports admin api endpoint --- lib/pleroma/web/activity_pub/utils.ex | 96 --------- .../web/admin_api/admin_api_controller.ex | 8 - .../web/admin_api/views/report_view.ex | 28 +-- lib/pleroma/web/router.ex | 1 - .../admin_api/admin_api_controller_test.exs | 203 ------------------ 5 files changed, 1 insertion(+), 335 deletions(-) diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index c65bbed67..2d685ecc0 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -795,102 +795,6 @@ def get_reports(params, page, page_size) do ActivityPub.fetch_activities([], params, :offset) end - def parse_report_group(activity) do - reports = get_reports_by_status_id(activity["id"]) - max_date = Enum.max_by(reports, &NaiveDateTime.from_iso8601!(&1.data["published"])) - actors = Enum.map(reports, & &1.user_actor) - [%{data: %{"object" => [account_id | _]}} | _] = reports - - account = - AccountView.render("show.json", %{ - user: User.get_by_ap_id(account_id) - }) - - status = get_status_data(activity) - - %{ - date: max_date.data["published"], - account: account, - status: status, - actors: Enum.uniq(actors), - reports: reports - } - end - - defp get_status_data(status) do - case status["deleted"] do - true -> - %{ - "id" => status["id"], - "deleted" => true - } - - _ -> - Activity.get_by_ap_id(status["id"]) - end - end - - def get_reports_by_status_id(ap_id) do - from(a in Activity, - where: fragment("(?)->>'type' = 'Flag'", a.data), - where: fragment("(?)->'object' @> ?", a.data, ^[%{id: ap_id}]), - or_where: fragment("(?)->'object' @> ?", a.data, ^[ap_id]) - ) - |> Activity.with_preloaded_user_actor() - |> Repo.all() - end - - @spec get_reports_grouped_by_status([String.t()]) :: %{ - required(:groups) => [ - %{ - required(:date) => String.t(), - required(:account) => %{}, - required(:status) => %{}, - required(:actors) => [%User{}], - required(:reports) => [%Activity{}] - } - ] - } - def get_reports_grouped_by_status(activity_ids) do - parsed_groups = - activity_ids - |> Enum.map(fn id -> - id - |> build_flag_object() - |> parse_report_group() - end) - - %{ - groups: parsed_groups - } - end - - @spec get_reported_activities() :: [ - %{ - required(:activity) => String.t(), - required(:date) => String.t() - } - ] - def get_reported_activities do - reported_activities_query = - from(a in Activity, - where: fragment("(?)->>'type' = 'Flag'", a.data), - select: %{ - activity: fragment("jsonb_array_elements((? #- '{object,0}')->'object')", a.data) - }, - group_by: fragment("activity") - ) - - from(a in subquery(reported_activities_query), - distinct: true, - select: %{ - id: fragment("COALESCE(?->>'id'::text, ? #>> '{}')", a.activity, a.activity) - } - ) - |> Repo.all() - |> Enum.map(& &1.id) - end - def update_report_state(%Activity{} = activity, state) when state in @strip_status_report_states do {:ok, stripped_activity} = strip_report_status_data(activity) diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index 0368df1e9..ca5439920 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -715,14 +715,6 @@ def list_reports(conn, params) do |> render("index.json", %{reports: reports}) end - def list_grouped_reports(conn, _params) do - statuses = Utils.get_reported_activities() - - conn - |> put_view(ReportView) - |> render("index_grouped.json", Utils.get_reports_grouped_by_status(statuses)) - end - def report_show(conn, %{"id" => id}) do with %Activity{} = report <- Activity.get_by_id(id) do conn diff --git a/lib/pleroma/web/admin_api/views/report_view.ex b/lib/pleroma/web/admin_api/views/report_view.ex index fc8733ce8..ca0bcebc7 100644 --- a/lib/pleroma/web/admin_api/views/report_view.ex +++ b/lib/pleroma/web/admin_api/views/report_view.ex @@ -4,7 +4,7 @@ defmodule Pleroma.Web.AdminAPI.ReportView do use Pleroma.Web, :view - alias Pleroma.Activity + alias Pleroma.HTML alias Pleroma.User alias Pleroma.Web.AdminAPI.Report @@ -44,32 +44,6 @@ def render("show.json", %{report: report, user: user, account: account, statuses } end - def render("index_grouped.json", %{groups: groups}) do - reports = - Enum.map(groups, fn group -> - status = - case group.status do - %Activity{} = activity -> StatusView.render("show.json", %{activity: activity}) - _ -> group.status - end - - %{ - date: group[:date], - account: group[:account], - status: Map.put_new(status, "deleted", false), - actors: Enum.map(group[:actors], &merge_account_views/1), - reports: - group[:reports] - |> Enum.map(&Report.extract_report_info(&1)) - |> Enum.map(&render(__MODULE__, "show.json", &1)) - } - end) - - %{ - reports: reports - } - end - def render("index_notes.json", %{notes: notes}) when is_list(notes) do Enum.map(notes, &render(__MODULE__, "show_note.json", &1)) end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index a22f744c1..5a0902739 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -186,7 +186,6 @@ defmodule Pleroma.Web.Router do patch("/users/resend_confirmation_email", AdminAPIController, :resend_confirmation_email) get("/reports", AdminAPIController, :list_reports) - get("/grouped_reports", AdminAPIController, :list_grouped_reports) get("/reports/:id", AdminAPIController, :report_show) patch("/reports", AdminAPIController, :reports_update) post("/reports/:id/notes", AdminAPIController, :report_notes_create) diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index c9e228cc8..ea0c92502 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -21,7 +21,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do alias Pleroma.UserInviteToken alias Pleroma.Web.ActivityPub.Relay alias Pleroma.Web.CommonAPI - alias Pleroma.Web.MastodonAPI.StatusView alias Pleroma.Web.MediaProxy setup_all do @@ -1586,208 +1585,6 @@ test "returns 403 when requested by anonymous" do end end - describe "GET /api/pleroma/admin/grouped_reports" do - setup do - [reporter, target_user] = insert_pair(:user) - - date1 = (DateTime.to_unix(DateTime.utc_now()) + 1000) |> DateTime.from_unix!() - date2 = (DateTime.to_unix(DateTime.utc_now()) + 2000) |> DateTime.from_unix!() - date3 = (DateTime.to_unix(DateTime.utc_now()) + 3000) |> DateTime.from_unix!() - - first_status = - insert(:note_activity, user: target_user, data_attrs: %{"published" => date1}) - - second_status = - insert(:note_activity, user: target_user, data_attrs: %{"published" => date2}) - - third_status = - insert(:note_activity, user: target_user, data_attrs: %{"published" => date3}) - - {:ok, first_report} = - CommonAPI.report(reporter, %{ - "account_id" => target_user.id, - "status_ids" => [first_status.id, second_status.id, third_status.id] - }) - - {:ok, second_report} = - CommonAPI.report(reporter, %{ - "account_id" => target_user.id, - "status_ids" => [first_status.id, second_status.id] - }) - - {:ok, third_report} = - CommonAPI.report(reporter, %{ - "account_id" => target_user.id, - "status_ids" => [first_status.id] - }) - - %{ - first_status: Activity.get_by_ap_id_with_object(first_status.data["id"]), - second_status: Activity.get_by_ap_id_with_object(second_status.data["id"]), - third_status: Activity.get_by_ap_id_with_object(third_status.data["id"]), - first_report: first_report, - first_status_reports: [first_report, second_report, third_report], - second_status_reports: [first_report, second_report], - third_status_reports: [first_report], - target_user: target_user, - reporter: reporter - } - end - - test "returns reports grouped by status", %{ - conn: conn, - first_status: first_status, - second_status: second_status, - third_status: third_status, - first_status_reports: first_status_reports, - second_status_reports: second_status_reports, - third_status_reports: third_status_reports, - target_user: target_user, - reporter: reporter - } do - response = - conn - |> get("/api/pleroma/admin/grouped_reports") - |> json_response(:ok) - - assert length(response["reports"]) == 3 - - first_group = Enum.find(response["reports"], &(&1["status"]["id"] == first_status.id)) - - second_group = Enum.find(response["reports"], &(&1["status"]["id"] == second_status.id)) - - third_group = Enum.find(response["reports"], &(&1["status"]["id"] == third_status.id)) - - assert length(first_group["reports"]) == 3 - assert length(second_group["reports"]) == 2 - assert length(third_group["reports"]) == 1 - - assert first_group["date"] == - Enum.max_by(first_status_reports, fn act -> - NaiveDateTime.from_iso8601!(act.data["published"]) - end).data["published"] - - assert first_group["status"] == - Map.put( - stringify_keys(StatusView.render("show.json", %{activity: first_status})), - "deleted", - false - ) - - assert(first_group["account"]["id"] == target_user.id) - - assert length(first_group["actors"]) == 1 - assert hd(first_group["actors"])["id"] == reporter.id - - assert Enum.map(first_group["reports"], & &1["id"]) -- - Enum.map(first_status_reports, & &1.id) == [] - - assert second_group["date"] == - Enum.max_by(second_status_reports, fn act -> - NaiveDateTime.from_iso8601!(act.data["published"]) - end).data["published"] - - assert second_group["status"] == - Map.put( - stringify_keys(StatusView.render("show.json", %{activity: second_status})), - "deleted", - false - ) - - assert second_group["account"]["id"] == target_user.id - - assert length(second_group["actors"]) == 1 - assert hd(second_group["actors"])["id"] == reporter.id - - assert Enum.map(second_group["reports"], & &1["id"]) -- - Enum.map(second_status_reports, & &1.id) == [] - - assert third_group["date"] == - Enum.max_by(third_status_reports, fn act -> - NaiveDateTime.from_iso8601!(act.data["published"]) - end).data["published"] - - assert third_group["status"] == - Map.put( - stringify_keys(StatusView.render("show.json", %{activity: third_status})), - "deleted", - false - ) - - assert third_group["account"]["id"] == target_user.id - - assert length(third_group["actors"]) == 1 - assert hd(third_group["actors"])["id"] == reporter.id - - assert Enum.map(third_group["reports"], & &1["id"]) -- - Enum.map(third_status_reports, & &1.id) == [] - end - - test "reopened report renders status data", %{ - conn: conn, - first_report: first_report, - first_status: first_status - } do - {:ok, _} = CommonAPI.update_report_state(first_report.id, "resolved") - - response = - conn - |> get("/api/pleroma/admin/grouped_reports") - |> json_response(:ok) - - first_group = Enum.find(response["reports"], &(&1["status"]["id"] == first_status.id)) - - assert first_group["status"] == - Map.put( - stringify_keys(StatusView.render("show.json", %{activity: first_status})), - "deleted", - false - ) - end - - test "reopened report does not render status data if status has been deleted", %{ - conn: conn, - first_report: first_report, - first_status: first_status, - target_user: target_user - } do - {:ok, _} = CommonAPI.update_report_state(first_report.id, "resolved") - {:ok, _} = CommonAPI.delete(first_status.id, target_user) - - refute Activity.get_by_ap_id(first_status.id) - - response = - conn - |> get("/api/pleroma/admin/grouped_reports") - |> json_response(:ok) - - assert Enum.find(response["reports"], &(&1["status"]["deleted"] == true))["status"][ - "deleted" - ] == true - - assert length(Enum.filter(response["reports"], &(&1["status"]["deleted"] == false))) == 2 - end - - test "account not empty if status was deleted", %{ - conn: conn, - first_report: first_report, - first_status: first_status, - target_user: target_user - } do - {:ok, _} = CommonAPI.update_report_state(first_report.id, "resolved") - {:ok, _} = CommonAPI.delete(first_status.id, target_user) - - refute Activity.get_by_ap_id(first_status.id) - - response = - conn - |> get("/api/pleroma/admin/grouped_reports") - |> json_response(:ok) - - assert Enum.find(response["reports"], &(&1["status"]["deleted"] == true))["account"] - end - end - describe "PUT /api/pleroma/admin/statuses/:id" do setup do activity = insert(:note_activity) From 9c94b6a327118d8c7ea21355d6c378ef31c54321 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Mon, 30 Mar 2020 19:08:37 +0300 Subject: [PATCH 149/581] [#2332] Misc. fixes per code change requests. --- lib/pleroma/web/activity_pub/mrf.ex | 2 +- ...328130139_add_following_relationships_following_id_index.exs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/mrf.ex b/lib/pleroma/web/activity_pub/mrf.ex index f54647945..a0b3af432 100644 --- a/lib/pleroma/web/activity_pub/mrf.ex +++ b/lib/pleroma/web/activity_pub/mrf.ex @@ -33,7 +33,7 @@ def subdomains_regex(domains) when is_list(domains) do @spec subdomain_match?([Regex.t()], String.t()) :: boolean() def subdomain_match?(domains, host) do - !!Enum.find(domains, fn domain -> Regex.match?(domain, host) end) + Enum.any?(domains, fn domain -> Regex.match?(domain, host) end) end @callback describe() :: {:ok | :error, Map.t()} diff --git a/priv/repo/migrations/20200328130139_add_following_relationships_following_id_index.exs b/priv/repo/migrations/20200328130139_add_following_relationships_following_id_index.exs index 4c9faf48f..884832f84 100644 --- a/priv/repo/migrations/20200328130139_add_following_relationships_following_id_index.exs +++ b/priv/repo/migrations/20200328130139_add_following_relationships_following_id_index.exs @@ -6,6 +6,6 @@ defmodule Pleroma.Repo.Migrations.AddFollowingRelationshipsFollowingIdIndex do def change do drop_if_exists(index(:following_relationships, [:follower_id])) - create_if_not_exists(drop_if_exists(index(:following_relationships, [:following_id]))) + create_if_not_exists(index(:following_relationships, [:following_id])) end end From ea9c57b26ed463622e4489736fcddb8fca1b3341 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Tue, 31 Mar 2020 09:21:42 +0300 Subject: [PATCH 150/581] [#2332] Misc. improvements per code change requests. --- lib/pleroma/ecto_enums.ex | 4 +- lib/pleroma/following_relationship.ex | 42 +++++++++++-------- lib/pleroma/user.ex | 2 +- lib/pleroma/user_relationship.ex | 33 +++++++++------ ...llowing_relationships_state_to_integer.exs | 6 +-- 5 files changed, 52 insertions(+), 35 deletions(-) diff --git a/lib/pleroma/ecto_enums.ex b/lib/pleroma/ecto_enums.ex index b98ac4ba1..6fc47620c 100644 --- a/lib/pleroma/ecto_enums.ex +++ b/lib/pleroma/ecto_enums.ex @@ -4,7 +4,7 @@ import EctoEnum -defenum(UserRelationshipTypeEnum, +defenum(Pleroma.UserRelationship.Type, block: 1, mute: 2, reblog_mute: 3, @@ -12,7 +12,7 @@ inverse_subscription: 5 ) -defenum(FollowingRelationshipStateEnum, +defenum(Pleroma.FollowingRelationship.State, follow_pending: 1, follow_accept: 2, follow_reject: 3 diff --git a/lib/pleroma/following_relationship.ex b/lib/pleroma/following_relationship.ex index a28da8bec..9ccf40495 100644 --- a/lib/pleroma/following_relationship.ex +++ b/lib/pleroma/following_relationship.ex @@ -8,12 +8,13 @@ defmodule Pleroma.FollowingRelationship do import Ecto.Changeset import Ecto.Query + alias Ecto.Changeset alias FlakeId.Ecto.CompatType alias Pleroma.Repo alias Pleroma.User schema "following_relationships" do - field(:state, FollowingRelationshipStateEnum, default: :follow_pending) + field(:state, Pleroma.FollowingRelationship.State, default: :follow_pending) belongs_to(:follower, User, type: CompatType) belongs_to(:following, User, type: CompatType) @@ -33,13 +34,12 @@ def changeset(%__MODULE__{} = following_relationship, attrs) do |> validate_not_self_relationship() end - def state_to_enum(state) when is_binary(state) do - case state do - "pending" -> :follow_pending - "accept" -> :follow_accept - "reject" -> :follow_reject - _ -> raise "State is not convertible to FollowingRelationshipStateEnum: #{state}" - end + def state_to_enum(state) when state in ["pending", "accept", "reject"] do + String.to_existing_atom("follow_#{state}") + end + + def state_to_enum(state) do + raise "State is not convertible to Pleroma.FollowingRelationship.State: #{state}" end def get(%User{} = follower, %User{} = following) do @@ -171,16 +171,14 @@ def find(following_relationships, follower, following) do end) end - defp validate_not_self_relationship(%Ecto.Changeset{} = changeset) do + defp validate_not_self_relationship(%Changeset{} = changeset) do changeset - |> validate_change(:following_id, fn _, following_id -> - if following_id == get_field(changeset, :follower_id) do - [target_id: "can't be equal to follower_id"] - else - [] - end - end) - |> validate_change(:follower_id, fn _, follower_id -> + |> validate_follower_id_following_id_inequality() + |> validate_following_id_follower_id_inequality() + end + + defp validate_follower_id_following_id_inequality(%Changeset{} = changeset) do + validate_change(changeset, :follower_id, fn _, follower_id -> if follower_id == get_field(changeset, :following_id) do [source_id: "can't be equal to following_id"] else @@ -188,4 +186,14 @@ defp validate_not_self_relationship(%Ecto.Changeset{} = changeset) do end end) end + + defp validate_following_id_follower_id_inequality(%Changeset{} = changeset) do + validate_change(changeset, :following_id, fn _, following_id -> + if following_id == get_field(changeset, :follower_id) do + [target_id: "can't be equal to follower_id"] + else + [] + end + end) + end end diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 6ffb82045..4f3abd7d5 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -769,7 +769,7 @@ def unfollow(%User{} = follower, %User{} = followed) do defdelegate following?(follower, followed), to: FollowingRelationship - @doc "Returns follow state as FollowingRelationshipStateEnum value" + @doc "Returns follow state as Pleroma.FollowingRelationship.State value" def get_follow_state(%User{} = follower, %User{} = following) do following_relationship = FollowingRelationship.get(follower, following) get_follow_state(follower, following, following_relationship) diff --git a/lib/pleroma/user_relationship.ex b/lib/pleroma/user_relationship.ex index 18a5eec72..ad0d303b1 100644 --- a/lib/pleroma/user_relationship.ex +++ b/lib/pleroma/user_relationship.ex @@ -8,6 +8,7 @@ defmodule Pleroma.UserRelationship do import Ecto.Changeset import Ecto.Query + alias Ecto.Changeset alias Pleroma.FollowingRelationship alias Pleroma.Repo alias Pleroma.User @@ -16,12 +17,12 @@ defmodule Pleroma.UserRelationship do schema "user_relationships" do belongs_to(:source, User, type: FlakeId.Ecto.CompatType) belongs_to(:target, User, type: FlakeId.Ecto.CompatType) - field(:relationship_type, UserRelationshipTypeEnum) + field(:relationship_type, Pleroma.UserRelationship.Type) timestamps(updated_at: false) end - for relationship_type <- Keyword.keys(UserRelationshipTypeEnum.__enum_map__()) do + for relationship_type <- Keyword.keys(Pleroma.UserRelationship.Type.__enum_map__()) do # `def create_block/2`, `def create_mute/2`, `def create_reblog_mute/2`, # `def create_notification_mute/2`, `def create_inverse_subscription/2` def unquote(:"create_#{relationship_type}")(source, target), @@ -40,7 +41,7 @@ def unquote(:"#{relationship_type}_exists?")(source, target), def user_relationship_types, do: Keyword.keys(user_relationship_mappings()) - def user_relationship_mappings, do: UserRelationshipTypeEnum.__enum_map__() + def user_relationship_mappings, do: Pleroma.UserRelationship.Type.__enum_map__() def changeset(%UserRelationship{} = user_relationship, params \\ %{}) do user_relationship @@ -147,16 +148,14 @@ def view_relationships_option(%User{} = reading_user, actors) do %{user_relationships: user_relationships, following_relationships: following_relationships} end - defp validate_not_self_relationship(%Ecto.Changeset{} = changeset) do + defp validate_not_self_relationship(%Changeset{} = changeset) do changeset - |> validate_change(:target_id, fn _, target_id -> - if target_id == get_field(changeset, :source_id) do - [target_id: "can't be equal to source_id"] - else - [] - end - end) - |> validate_change(:source_id, fn _, source_id -> + |> validate_source_id_target_id_inequality() + |> validate_target_id_source_id_inequality() + end + + defp validate_source_id_target_id_inequality(%Changeset{} = changeset) do + validate_change(changeset, :source_id, fn _, source_id -> if source_id == get_field(changeset, :target_id) do [source_id: "can't be equal to target_id"] else @@ -164,4 +163,14 @@ defp validate_not_self_relationship(%Ecto.Changeset{} = changeset) do end end) end + + defp validate_target_id_source_id_inequality(%Changeset{} = changeset) do + validate_change(changeset, :target_id, fn _, target_id -> + if target_id == get_field(changeset, :source_id) do + [target_id: "can't be equal to source_id"] + else + [] + end + end) + end end diff --git a/priv/repo/migrations/20200328124805_change_following_relationships_state_to_integer.exs b/priv/repo/migrations/20200328124805_change_following_relationships_state_to_integer.exs index d5a431c00..2b0820f3f 100644 --- a/priv/repo/migrations/20200328124805_change_following_relationships_state_to_integer.exs +++ b/priv/repo/migrations/20200328124805_change_following_relationships_state_to_integer.exs @@ -1,11 +1,11 @@ defmodule Pleroma.Repo.Migrations.ChangeFollowingRelationshipsStateToInteger do use Ecto.Migration - @alter_apps_scopes "ALTER TABLE following_relationships ALTER COLUMN state" + @alter_following_relationship_state "ALTER TABLE following_relationships ALTER COLUMN state" def up do execute(""" - #{@alter_apps_scopes} TYPE integer USING + #{@alter_following_relationship_state} TYPE integer USING CASE WHEN state = 'pending' THEN 1 WHEN state = 'accept' THEN 2 @@ -17,7 +17,7 @@ def up do def down do execute(""" - #{@alter_apps_scopes} TYPE varchar(255) USING + #{@alter_following_relationship_state} TYPE varchar(255) USING CASE WHEN state = 1 THEN 'pending' WHEN state = 2 THEN 'accept' From f6835333be745cd411b5d2571c304fc7a16d645e Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 31 Mar 2020 12:55:25 +0000 Subject: [PATCH 151/581] Apply suggestion to lib/pleroma/web/activity_pub/transmogrifier.ex --- lib/pleroma/web/activity_pub/transmogrifier.ex | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index dbb14e9aa..23148b2a0 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -615,8 +615,7 @@ def handle_incoming(%{"type" => "Like"} = data, _options) do with {_, {:ok, cast_data_sym}} <- {:casting_data, data |> LikeValidator.cast_data() |> Ecto.Changeset.apply_action(:insert)}, - {_, cast_data} <- - {:stringify_keys, ObjectValidator.stringify_keys(cast_data_sym |> Map.from_struct())}, + cast_data = ObjectValidator.stringify_keys(Map.from_struct(cast_data_sym)), :ok <- ObjectValidator.fetch_actor_and_object(cast_data), {_, {:ok, cast_data}} <- {:maybe_add_context, maybe_add_context_from_object(cast_data)}, {_, {:ok, cast_data}} <- From d191b0942f64a32a2bf450318fac85981aa17c83 Mon Sep 17 00:00:00 2001 From: kPherox Date: Tue, 31 Mar 2020 22:48:42 +0900 Subject: [PATCH 152/581] Remove no longer used function --- lib/pleroma/user.ex | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index d9aa54057..6644d6b66 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1983,17 +1983,6 @@ def fields(%{fields: nil}), do: [] def fields(%{fields: fields}), do: fields - def sanitized_fields(%User{} = user) do - user - |> User.fields() - |> Enum.map(fn %{"name" => name, "value" => value} -> - %{ - "name" => name, - "value" => Pleroma.HTML.filter_tags(value, Pleroma.HTML.Scrubber.LinksOnly) - } - end) - end - def validate_fields(changeset, remote? \\ false) do limit_name = if remote?, do: :max_remote_account_fields, else: :max_account_fields limit = Pleroma.Config.get([:instance, limit_name], 0) From 643f15e77b7cdaaf2c22a876c98e5680edc32dc3 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 31 Mar 2020 16:11:38 +0200 Subject: [PATCH 153/581] Validators: ObjectID is an http uri. --- .../object_validators/types/object.ex | 16 ++++++-- .../types/object_id_test.exs | 38 +++++++++++++++++++ 2 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 test/web/activity_pub/object_validators/types/object_id_test.exs diff --git a/lib/pleroma/web/activity_pub/object_validators/types/object.ex b/lib/pleroma/web/activity_pub/object_validators/types/object.ex index 92fc13ba8..8e70effe4 100644 --- a/lib/pleroma/web/activity_pub/object_validators/types/object.ex +++ b/lib/pleroma/web/activity_pub/object_validators/types/object.ex @@ -4,12 +4,20 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.Types.ObjectID do def type, do: :string def cast(object) when is_binary(object) do - {:ok, object} + with %URI{ + scheme: scheme, + host: host + } + when scheme in ["https", "http"] and not is_nil(host) <- + URI.parse(object) do + {:ok, object} + else + _ -> + :error + end end - def cast(%{"id" => object}) when is_binary(object) do - {:ok, object} - end + def cast(%{"id" => object}), do: cast(object) def cast(_) do :error diff --git a/test/web/activity_pub/object_validators/types/object_id_test.exs b/test/web/activity_pub/object_validators/types/object_id_test.exs new file mode 100644 index 000000000..f4c5ed1dc --- /dev/null +++ b/test/web/activity_pub/object_validators/types/object_id_test.exs @@ -0,0 +1,38 @@ +defmodule Pleroma.Web.ObjectValidators.Types.ObjectIDTest do + alias Pleroma.Web.ActivityPub.ObjectValidators.Types.ObjectID + use Pleroma.DataCase + + @uris [ + "http://lain.com/users/lain", + "http://lain.com", + "https://lain.com/object/1" + ] + + @non_uris [ + "https://", + "rin" + ] + + test "it rejects integers" do + assert :error == ObjectID.cast(1) + end + + test "it accepts http uris" do + Enum.each(@uris, fn uri -> + assert {:ok, uri} == ObjectID.cast(uri) + end) + end + + test "it accepts an object with a nested uri id" do + Enum.each(@uris, fn uri -> + assert {:ok, uri} == ObjectID.cast(%{"id" => uri}) + end) + end + + test "it rejects non-uri strings" do + Enum.each(@non_uris, fn non_uri -> + assert :error == ObjectID.cast(non_uri) + assert :error == ObjectID.cast(%{"id" => non_uri}) + end) + end +end From df5f89c0d6d8d385434d5d8a51719fa41631d7b2 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 31 Mar 2020 18:22:25 +0300 Subject: [PATCH 154/581] test for default features and changelog entry --- CHANGELOG.md | 1 + test/web/node_info_test.exs | 92 +++++++++++++++++++------------------ 2 files changed, 49 insertions(+), 44 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 350e03894..747d84d48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added - NodeInfo: `pleroma:api/v1/notifications:include_types_filter` to the `features` list. +- NodeInfo: `pleroma_emoji_reactions` to the `features` list. - Configuration: `:restrict_unauthenticated` setting, restrict access for unauthenticated users to timelines (public and federate), user profiles and statuses.
API Changes diff --git a/test/web/node_info_test.exs b/test/web/node_info_test.exs index e5eebced1..9bcc07b37 100644 --- a/test/web/node_info_test.exs +++ b/test/web/node_info_test.exs @@ -7,6 +7,8 @@ defmodule Pleroma.Web.NodeInfoTest do import Pleroma.Factory + alias Pleroma.Config + setup do: clear_config([:mrf_simple]) setup do: clear_config(:instance) @@ -47,7 +49,7 @@ test "nodeinfo shows restricted nicknames", %{conn: conn} do assert result = json_response(conn, 200) - assert Pleroma.Config.get([Pleroma.User, :restricted_nicknames]) == + assert Config.get([Pleroma.User, :restricted_nicknames]) == result["metadata"]["restrictedNicknames"] end @@ -65,10 +67,10 @@ test "returns software.repository field in nodeinfo 2.1", %{conn: conn} do end test "returns fieldsLimits field", %{conn: conn} do - Pleroma.Config.put([:instance, :max_account_fields], 10) - Pleroma.Config.put([:instance, :max_remote_account_fields], 15) - Pleroma.Config.put([:instance, :account_field_name_length], 255) - Pleroma.Config.put([:instance, :account_field_value_length], 2048) + Config.put([:instance, :max_account_fields], 10) + Config.put([:instance, :max_remote_account_fields], 15) + Config.put([:instance, :account_field_name_length], 255) + Config.put([:instance, :account_field_value_length], 2048) response = conn @@ -82,8 +84,8 @@ test "returns fieldsLimits field", %{conn: conn} do end test "it returns the safe_dm_mentions feature if enabled", %{conn: conn} do - option = Pleroma.Config.get([:instance, :safe_dm_mentions]) - Pleroma.Config.put([:instance, :safe_dm_mentions], true) + option = Config.get([:instance, :safe_dm_mentions]) + Config.put([:instance, :safe_dm_mentions], true) response = conn @@ -92,7 +94,7 @@ test "it returns the safe_dm_mentions feature if enabled", %{conn: conn} do assert "safe_dm_mentions" in response["metadata"]["features"] - Pleroma.Config.put([:instance, :safe_dm_mentions], false) + Config.put([:instance, :safe_dm_mentions], false) response = conn @@ -101,14 +103,14 @@ test "it returns the safe_dm_mentions feature if enabled", %{conn: conn} do refute "safe_dm_mentions" in response["metadata"]["features"] - Pleroma.Config.put([:instance, :safe_dm_mentions], option) + Config.put([:instance, :safe_dm_mentions], option) end describe "`metadata/federation/enabled`" do setup do: clear_config([:instance, :federating]) test "it shows if federation is enabled/disabled", %{conn: conn} do - Pleroma.Config.put([:instance, :federating], true) + Config.put([:instance, :federating], true) response = conn @@ -117,7 +119,7 @@ test "it shows if federation is enabled/disabled", %{conn: conn} do assert response["metadata"]["federation"]["enabled"] == true - Pleroma.Config.put([:instance, :federating], false) + Config.put([:instance, :federating], false) response = conn @@ -134,31 +136,33 @@ test "it shows default features flags", %{conn: conn} do |> get("/nodeinfo/2.1.json") |> json_response(:ok) - assert response["metadata"]["features"] -- - [ - "pleroma_api", - "mastodon_api", - "mastodon_api_streaming", - "polls", - "pleroma_explicit_addressing", - "shareable_emoji_packs", - "multifetch", - "chat", - "relay", - "pleroma_emoji_reactions", - "pleroma:api/v1/notifications:include_types_filter" - ] == [] + default_features = [ + "pleroma_api", + "mastodon_api", + "mastodon_api_streaming", + "polls", + "pleroma_explicit_addressing", + "shareable_emoji_packs", + "multifetch", + "pleroma_emoji_reactions", + "pleroma:api/v1/notifications:include_types_filter" + ] + + assert MapSet.subset?( + MapSet.new(default_features), + MapSet.new(response["metadata"]["features"]) + ) end test "it shows MRF transparency data if enabled", %{conn: conn} do - config = Pleroma.Config.get([:instance, :rewrite_policy]) - Pleroma.Config.put([:instance, :rewrite_policy], [Pleroma.Web.ActivityPub.MRF.SimplePolicy]) + config = Config.get([:instance, :rewrite_policy]) + Config.put([:instance, :rewrite_policy], [Pleroma.Web.ActivityPub.MRF.SimplePolicy]) - option = Pleroma.Config.get([:instance, :mrf_transparency]) - Pleroma.Config.put([:instance, :mrf_transparency], true) + option = Config.get([:instance, :mrf_transparency]) + Config.put([:instance, :mrf_transparency], true) simple_config = %{"reject" => ["example.com"]} - Pleroma.Config.put(:mrf_simple, simple_config) + Config.put(:mrf_simple, simple_config) response = conn @@ -167,25 +171,25 @@ test "it shows MRF transparency data if enabled", %{conn: conn} do assert response["metadata"]["federation"]["mrf_simple"] == simple_config - Pleroma.Config.put([:instance, :rewrite_policy], config) - Pleroma.Config.put([:instance, :mrf_transparency], option) - Pleroma.Config.put(:mrf_simple, %{}) + Config.put([:instance, :rewrite_policy], config) + Config.put([:instance, :mrf_transparency], option) + Config.put(:mrf_simple, %{}) end test "it performs exclusions from MRF transparency data if configured", %{conn: conn} do - config = Pleroma.Config.get([:instance, :rewrite_policy]) - Pleroma.Config.put([:instance, :rewrite_policy], [Pleroma.Web.ActivityPub.MRF.SimplePolicy]) + config = Config.get([:instance, :rewrite_policy]) + Config.put([:instance, :rewrite_policy], [Pleroma.Web.ActivityPub.MRF.SimplePolicy]) - option = Pleroma.Config.get([:instance, :mrf_transparency]) - Pleroma.Config.put([:instance, :mrf_transparency], true) + option = Config.get([:instance, :mrf_transparency]) + Config.put([:instance, :mrf_transparency], true) - exclusions = Pleroma.Config.get([:instance, :mrf_transparency_exclusions]) - Pleroma.Config.put([:instance, :mrf_transparency_exclusions], ["other.site"]) + exclusions = Config.get([:instance, :mrf_transparency_exclusions]) + Config.put([:instance, :mrf_transparency_exclusions], ["other.site"]) simple_config = %{"reject" => ["example.com", "other.site"]} expected_config = %{"reject" => ["example.com"]} - Pleroma.Config.put(:mrf_simple, simple_config) + Config.put(:mrf_simple, simple_config) response = conn @@ -195,9 +199,9 @@ test "it performs exclusions from MRF transparency data if configured", %{conn: assert response["metadata"]["federation"]["mrf_simple"] == expected_config assert response["metadata"]["federation"]["exclusions"] == true - Pleroma.Config.put([:instance, :rewrite_policy], config) - Pleroma.Config.put([:instance, :mrf_transparency], option) - Pleroma.Config.put([:instance, :mrf_transparency_exclusions], exclusions) - Pleroma.Config.put(:mrf_simple, %{}) + Config.put([:instance, :rewrite_policy], config) + Config.put([:instance, :mrf_transparency], option) + Config.put([:instance, :mrf_transparency_exclusions], exclusions) + Config.put(:mrf_simple, %{}) end end From 7af0959a07ebd5f8242704658ccb770d86fdb4c6 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 31 Mar 2020 18:30:19 +0300 Subject: [PATCH 155/581] updating docs --- docs/API/pleroma_api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/API/pleroma_api.md b/docs/API/pleroma_api.md index 12e63ef9f..90c43c356 100644 --- a/docs/API/pleroma_api.md +++ b/docs/API/pleroma_api.md @@ -431,7 +431,7 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa # Emoji Reactions -Emoji reactions work a lot like favourites do. They make it possible to react to a post with a single emoji character. +Emoji reactions work a lot like favourites do. They make it possible to react to a post with a single emoji character. To detect the presence of this feature, you can check `pleroma_emoji_reactions` entry in the features list of nodeinfo. ## `PUT /api/v1/pleroma/statuses/:id/reactions/:emoji` ### React to a post with a unicode emoji From aebec1bac9831da2bed5ee571225d92dc99a5d59 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 31 Mar 2020 17:47:34 +0200 Subject: [PATCH 156/581] Validator Test: Small refactor. --- .../object_validators/types/object_id_test.exs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/test/web/activity_pub/object_validators/types/object_id_test.exs b/test/web/activity_pub/object_validators/types/object_id_test.exs index f4c5ed1dc..834213182 100644 --- a/test/web/activity_pub/object_validators/types/object_id_test.exs +++ b/test/web/activity_pub/object_validators/types/object_id_test.exs @@ -10,13 +10,12 @@ defmodule Pleroma.Web.ObjectValidators.Types.ObjectIDTest do @non_uris [ "https://", - "rin" + "rin", + 1, + :x, + %{"1" => 2} ] - test "it rejects integers" do - assert :error == ObjectID.cast(1) - end - test "it accepts http uris" do Enum.each(@uris, fn uri -> assert {:ok, uri} == ObjectID.cast(uri) From 057438a657eaadb963e006b84b890ae4f8441808 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 31 Mar 2020 17:56:05 +0200 Subject: [PATCH 157/581] CommonAPI: DRY up a bit. --- lib/pleroma/web/common_api/common_api.ex | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index f882f9fcb..74adcca55 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -112,8 +112,22 @@ def unrepeat(id_or_ap_id, user) do end end - @spec favorite(User.t(), binary()) :: {:ok, Activity.t()} | {:error, any()} + @spec favorite(User.t(), binary()) :: {:ok, Activity.t() | :already_liked} | {:error, any()} def favorite(%User{} = user, id) do + case favorite_helper(user, id) do + {:ok, _} = res -> + res + + {:error, :not_found} = res -> + res + + {:error, e} -> + Logger.error("Could not favorite #{id}. Error: #{inspect(e, pretty: true)}") + {:error, dgettext("errors", "Could not favorite")} + end + end + + def favorite_helper(user, id) do with {_, %Activity{object: object}} <- {:find_object, Activity.get_by_id_with_object(id)}, {_, {:ok, like_object, meta}} <- {:build_object, Builder.like(user, object)}, {_, {:ok, %Activity{} = activity, _meta}} <- @@ -138,13 +152,11 @@ def favorite(%User{} = user, id) do if {:object, {"already liked by this actor", []}} in changeset.errors do {:ok, :already_liked} else - Logger.error("Could not favorite #{id}. Error: #{inspect(e, pretty: true)}") - {:error, dgettext("errors", "Could not favorite"), e} + {:error, e} end e -> - Logger.error("Could not favorite #{id}. Error: #{inspect(e, pretty: true)}") - {:error, dgettext("errors", "Could not favorite"), e} + {:error, e} end end From 0be1fa0a8695df87a8b22279b885956943e33796 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 31 Mar 2020 17:00:48 +0000 Subject: [PATCH 158/581] Apply suggestion to lib/pleroma/web/activity_pub/transmogrifier.ex --- lib/pleroma/web/activity_pub/transmogrifier.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 23148b2a0..fb41ec8e9 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -1291,6 +1291,6 @@ defp maybe_add_recipients_from_object(%{"object" => object} = data) do end defp maybe_add_recipients_from_object(_) do - {:error, "No referenced object"} + {:error, :no_object} end end From 288f2b5a7c728959d43205a97d5225b34b5b8161 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 31 Mar 2020 17:00:55 +0000 Subject: [PATCH 159/581] Apply suggestion to lib/pleroma/web/activity_pub/transmogrifier.ex --- lib/pleroma/web/activity_pub/transmogrifier.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index fb41ec8e9..a3529f09b 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -1267,7 +1267,7 @@ defp maybe_add_context_from_object(%{"object" => object} = data) when is_binary( end defp maybe_add_context_from_object(_) do - {:error, "No referenced object"} + {:error, :no_context} end defp maybe_add_recipients_from_object(%{"object" => object} = data) do From ecac57732a063c1ad01aeb5aa4eb9853b6f904e9 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 31 Mar 2020 19:16:45 +0200 Subject: [PATCH 160/581] Transmogrifier: Only add context if it really is onne. --- lib/pleroma/web/activity_pub/transmogrifier.ex | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index a3529f09b..f82142979 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -1255,14 +1255,11 @@ defp maybe_add_context_from_object(%{"context" => context} = data) when is_binar do: {:ok, data} defp maybe_add_context_from_object(%{"object" => object} = data) when is_binary(object) do - if object = Object.normalize(object) do - data = - data - |> Map.put("context", object.data["context"]) - - {:ok, data} + with %{data: %{"context" => context}} when is_binary(context) <- Object.normalize(object) do + {:ok, Map.put(data, "context", context)} else - {:error, "No context on referenced object"} + _ -> + {:error, :no_context} end end From 1b323ce1c668c6a26617a05dcc12ee255c764e88 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 31 Mar 2020 17:28:18 +0000 Subject: [PATCH 161/581] Apply suggestion to lib/pleroma/web/activity_pub/transmogrifier.ex --- .../web/activity_pub/transmogrifier.ex | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index f82142979..a18ece6e7 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -1267,24 +1267,19 @@ defp maybe_add_context_from_object(_) do {:error, :no_context} end - defp maybe_add_recipients_from_object(%{"object" => object} = data) do - to = data["to"] || [] - cc = data["cc"] || [] + defp maybe_add_recipients_from_object(%{"to" => [_ | _], "cc" => [_ | _]} = data), do: {:ok, data} - if to == [] && cc == [] do - if object = Object.normalize(object) do + defp maybe_add_recipients_from_object(%{"object" => object} = data) do + case Object.normalize(object) do + %{data: {"actor" => actor}} -> data = data - |> Map.put("to", [object.data["actor"]]) - |> Map.put("cc", cc) + |> Map.put("to", [actor]) + |> Map.put("cc", data["cc"] || []) {:ok, data} - else - {:error, "No actor on referenced object"} - end - else - {:ok, data} - end + nil -> {:error, :no_object} + _ -> {:error, :no_actor} end defp maybe_add_recipients_from_object(_) do From c982093cc2f538e8ef9dde365e163a944c6cb6d0 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 31 Mar 2020 19:33:41 +0200 Subject: [PATCH 162/581] Transmogrifier: Fix BAD code by RINPATCH --- lib/pleroma/web/activity_pub/transmogrifier.ex | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index a18ece6e7..a4b385cd5 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -1267,19 +1267,25 @@ defp maybe_add_context_from_object(_) do {:error, :no_context} end - defp maybe_add_recipients_from_object(%{"to" => [_ | _], "cc" => [_ | _]} = data), do: {:ok, data} + defp maybe_add_recipients_from_object(%{"to" => [_ | _], "cc" => [_ | _]} = data), + do: {:ok, data} defp maybe_add_recipients_from_object(%{"object" => object} = data) do case Object.normalize(object) do - %{data: {"actor" => actor}} -> + %{data: %{"actor" => actor}} -> data = data |> Map.put("to", [actor]) |> Map.put("cc", data["cc"] || []) {:ok, data} - nil -> {:error, :no_object} - _ -> {:error, :no_actor} + + nil -> + {:error, :no_object} + + _ -> + {:error, :no_actor} + end end defp maybe_add_recipients_from_object(_) do From dbf9d719f98770056ac906b3087e7ed501cd64e6 Mon Sep 17 00:00:00 2001 From: kPherox Date: Wed, 1 Apr 2020 00:05:13 +0900 Subject: [PATCH 163/581] split test for update profile fields --- .../update_credentials_test.exs | 98 ++++++++++--------- 1 file changed, 53 insertions(+), 45 deletions(-) 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 b693c1a47..8687d7995 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 @@ -273,7 +273,7 @@ test "updates profile emojos", %{user: user, conn: conn} do test "update fields", %{conn: conn} do fields = [ %{"name" => "foo", "value" => ""}, - %{"name" => "link", "value" => "cofe.io"} + %{"name" => "link.io", "value" => "cofe.io"} ] account_data = @@ -283,7 +283,10 @@ test "update fields", %{conn: conn} do assert account_data["fields"] == [ %{"name" => "foo", "value" => "bar"}, - %{"name" => "link", "value" => ~S(cofe.io)} + %{ + "name" => "link.io", + "value" => ~S(cofe.io) + } ] assert account_data["source"]["fields"] == [ @@ -291,14 +294,16 @@ test "update fields", %{conn: conn} do "name" => "foo", "value" => "" }, - %{"name" => "link", "value" => "cofe.io"} + %{"name" => "link.io", "value" => "cofe.io"} ] + end + test "update fields by urlencoded", %{conn: conn} do fields = [ "fields_attributes[1][name]=link", - "fields_attributes[1][value]=cofe.io", - "fields_attributes[0][name]=foo", + "fields_attributes[1][value]=http://cofe.io", + "fields_attributes[0][name]=foo", "fields_attributes[0][value]=bar" ] |> Enum.join("&") @@ -310,51 +315,20 @@ test "update fields", %{conn: conn} do |> json_response(200) assert account["fields"] == [ - %{"name" => "foo", "value" => "bar"}, - %{"name" => "link", "value" => ~S(cofe.io)} + %{"name" => "foo", "value" => "bar"}, + %{ + "name" => "link", + "value" => ~S(http://cofe.io) + } ] assert account["source"]["fields"] == [ - %{ - "name" => "foo", - "value" => "bar" - }, - %{"name" => "link", "value" => "cofe.io"} + %{"name" => "foo", "value" => "bar"}, + %{"name" => "link", "value" => "http://cofe.io"} ] + end - name_limit = Pleroma.Config.get([:instance, :account_field_name_length]) - value_limit = Pleroma.Config.get([:instance, :account_field_value_length]) - - long_value = Enum.map(0..value_limit, fn _ -> "x" end) |> Enum.join() - - fields = [%{"name" => "foo", "value" => long_value}] - - assert %{"error" => "Invalid request"} == - conn - |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) - |> json_response(403) - - long_name = Enum.map(0..name_limit, fn _ -> "x" end) |> Enum.join() - - fields = [%{"name" => long_name, "value" => "bar"}] - - assert %{"error" => "Invalid request"} == - conn - |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) - |> json_response(403) - - Pleroma.Config.put([:instance, :max_account_fields], 1) - - fields = [ - %{"name" => "foo", "value" => "bar"}, - %{"name" => "link", "value" => "cofe.io"} - ] - - assert %{"error" => "Invalid request"} == - conn - |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) - |> json_response(403) - + test "update fields with empty name", %{conn: conn} do fields = [ %{"name" => "foo", "value" => ""}, %{"name" => "", "value" => "bar"} @@ -369,5 +343,39 @@ test "update fields", %{conn: conn} do %{"name" => "foo", "value" => ""} ] end + + test "update fields when invalid request", %{conn: conn} do + name_limit = Pleroma.Config.get([:instance, :account_field_name_length]) + value_limit = Pleroma.Config.get([:instance, :account_field_value_length]) + + long_name = Enum.map(0..name_limit, fn _ -> "x" end) |> Enum.join() + long_value = Enum.map(0..value_limit, fn _ -> "x" end) |> Enum.join() + + fields = [%{"name" => "foo", "value" => long_value}] + + assert %{"error" => "Invalid request"} == + conn + |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) + |> json_response(403) + + fields = [%{"name" => long_name, "value" => "bar"}] + + assert %{"error" => "Invalid request"} == + conn + |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) + |> json_response(403) + + Pleroma.Config.put([:instance, :max_account_fields], 1) + + fields = [ + %{"name" => "foo", "value" => "bar"}, + %{"name" => "link", "value" => "cofe.io"} + ] + + assert %{"error" => "Invalid request"} == + conn + |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) + |> json_response(403) + end end end From 7408f003a663c5f634cabad963c0446ba54810bf Mon Sep 17 00:00:00 2001 From: kPherox Date: Tue, 31 Mar 2020 11:13:53 +0000 Subject: [PATCH 164/581] Use `Pleroma.Formatter.linkify` instead of `AutoLinker.link` --- lib/pleroma/user.ex | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 6644d6b66..c29935871 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -16,6 +16,7 @@ defmodule Pleroma.User do alias Pleroma.Conversation.Participation alias Pleroma.Delivery alias Pleroma.FollowingRelationship + alias Pleroma.Formatter alias Pleroma.HTML alias Pleroma.Keys alias Pleroma.Notification @@ -456,7 +457,7 @@ defp put_fields(changeset) do fields = raw_fields - |> Enum.map(fn f -> Map.update!(f, "value", &AutoLinker.link(&1)) end) + |> Enum.map(fn f -> Map.update!(f, "value", &parse_fields(&1)) end) changeset |> put_change(:raw_fields, raw_fields) @@ -466,6 +467,12 @@ defp put_fields(changeset) do end end + defp parse_fields(value) do + value + |> Formatter.linkify(mentions_format: :full) + |> elem(0) + end + defp put_change_if_present(changeset, map_field, value_function) do if value = get_change(changeset, map_field) do with {:ok, new_value} <- value_function.(value) do From 219d3aaa2d1fd2474a88ec40d7e6938741e7fc4b Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 31 Mar 2020 13:05:16 -0500 Subject: [PATCH 165/581] Update AdminFE build in preparation for Pleroma 2.0.2 --- .../{app.c836e084.css => app.85534e14.css} | 0 ...f.650c8e81.css => chunk-0d8f.d85f5a29.css} | 2 +- ...a.3936457d.css => chunk-136a.f1130f8e.css} | 2 +- priv/static/adminfe/chunk-13e9.98eaadba.css | 1 + priv/static/adminfe/chunk-2b9c.feb61a2b.css | 1 + priv/static/adminfe/chunk-46cf.a43e9415.css | 1 - ...f.d45db7be.css => chunk-46ef.145de4f9.css} | 2 +- priv/static/adminfe/chunk-4e7d.7aace723.css | 1 - priv/static/adminfe/chunk-87b3.2affd602.css | 1 - priv/static/adminfe/chunk-87b3.3c6ede9c.css | 1 + ...f.cba3ae06.css => chunk-88c9.184084df.css} | 2 +- ...7.4d39576f.css => chunk-cf57.26596375.css} | 2 +- priv/static/adminfe/index.html | 2 +- priv/static/adminfe/static/js/app.d2c3c6b3.js | Bin 181998 -> 0 bytes .../adminfe/static/js/app.d2c3c6b3.js.map | Bin 403968 -> 0 bytes priv/static/adminfe/static/js/app.d898cc2b.js | Bin 0 -> 185128 bytes .../adminfe/static/js/app.d898cc2b.js.map | Bin 0 -> 410154 bytes ...d8f.a85e3222.js => chunk-0d8f.6d50ff86.js} | Bin 33538 -> 33538 bytes ...3222.js.map => chunk-0d8f.6d50ff86.js.map} | Bin 116201 -> 116201 bytes ...36a.142aa42a.js => chunk-136a.c4719e3e.js} | Bin 19553 -> 19553 bytes ...a42a.js.map => chunk-136a.c4719e3e.js.map} | Bin 69090 -> 69090 bytes .../adminfe/static/js/chunk-13e9.79da1569.js | Bin 0 -> 9528 bytes .../static/js/chunk-13e9.79da1569.js.map | Bin 0 -> 40125 bytes .../adminfe/static/js/chunk-2b9c.cf321c74.js | Bin 0 -> 28194 bytes .../static/js/chunk-2b9c.cf321c74.js.map | Bin 0 -> 95810 bytes .../adminfe/static/js/chunk-46cf.3bd3567a.js | Bin 9526 -> 0 bytes .../static/js/chunk-46cf.3bd3567a.js.map | Bin 40123 -> 0 bytes ...6ef.215af110.js => chunk-46ef.671cac7d.js} | Bin 7765 -> 7765 bytes ...f110.js.map => chunk-46ef.671cac7d.js.map} | Bin 26170 -> 26170 bytes .../adminfe/static/js/chunk-4e7d.a40ad735.js | Bin 23331 -> 0 bytes .../static/js/chunk-4e7d.a40ad735.js.map | Bin 80396 -> 0 bytes ...7b3.4704cadf.js => chunk-87b3.3c11ef09.js} | Bin 103161 -> 103449 bytes .../static/js/chunk-87b3.3c11ef09.js.map | Bin 0 -> 358904 bytes .../static/js/chunk-87b3.4704cadf.js.map | Bin 358274 -> 0 bytes .../adminfe/static/js/chunk-88c9.e3583744.js | Bin 0 -> 24234 bytes .../static/js/chunk-88c9.e3583744.js.map | Bin 0 -> 92387 bytes .../adminfe/static/js/chunk-cf57.3e45f57f.js | Bin 0 -> 29728 bytes .../static/js/chunk-cf57.3e45f57f.js.map | Bin 0 -> 89855 bytes .../adminfe/static/js/chunk-cf57.42b96339.js | Bin 29100 -> 0 bytes .../static/js/chunk-cf57.42b96339.js.map | Bin 88026 -> 0 bytes .../adminfe/static/js/chunk-e5cf.501d7902.js | Bin 24234 -> 0 bytes .../static/js/chunk-e5cf.501d7902.js.map | Bin 92386 -> 0 bytes .../adminfe/static/js/runtime.cb26bbd1.js | Bin 0 -> 3969 bytes ...a19e5d1.js.map => runtime.cb26bbd1.js.map} | Bin 16759 -> 16759 bytes .../adminfe/static/js/runtime.fa19e5d1.js | Bin 3969 -> 0 bytes 45 files changed, 9 insertions(+), 9 deletions(-) rename priv/static/adminfe/{app.c836e084.css => app.85534e14.css} (100%) rename priv/static/adminfe/{chunk-0d8f.650c8e81.css => chunk-0d8f.d85f5a29.css} (96%) rename priv/static/adminfe/{chunk-136a.3936457d.css => chunk-136a.f1130f8e.css} (98%) create mode 100644 priv/static/adminfe/chunk-13e9.98eaadba.css create mode 100644 priv/static/adminfe/chunk-2b9c.feb61a2b.css delete mode 100644 priv/static/adminfe/chunk-46cf.a43e9415.css rename priv/static/adminfe/{chunk-46ef.d45db7be.css => chunk-46ef.145de4f9.css} (92%) delete mode 100644 priv/static/adminfe/chunk-4e7d.7aace723.css delete mode 100644 priv/static/adminfe/chunk-87b3.2affd602.css create mode 100644 priv/static/adminfe/chunk-87b3.3c6ede9c.css rename priv/static/adminfe/{chunk-e5cf.cba3ae06.css => chunk-88c9.184084df.css} (92%) rename priv/static/adminfe/{chunk-cf57.4d39576f.css => chunk-cf57.26596375.css} (74%) delete mode 100644 priv/static/adminfe/static/js/app.d2c3c6b3.js delete mode 100644 priv/static/adminfe/static/js/app.d2c3c6b3.js.map create mode 100644 priv/static/adminfe/static/js/app.d898cc2b.js create mode 100644 priv/static/adminfe/static/js/app.d898cc2b.js.map rename priv/static/adminfe/static/js/{chunk-0d8f.a85e3222.js => chunk-0d8f.6d50ff86.js} (99%) rename priv/static/adminfe/static/js/{chunk-0d8f.a85e3222.js.map => chunk-0d8f.6d50ff86.js.map} (99%) rename priv/static/adminfe/static/js/{chunk-136a.142aa42a.js => chunk-136a.c4719e3e.js} (99%) rename priv/static/adminfe/static/js/{chunk-136a.142aa42a.js.map => chunk-136a.c4719e3e.js.map} (99%) create mode 100644 priv/static/adminfe/static/js/chunk-13e9.79da1569.js create mode 100644 priv/static/adminfe/static/js/chunk-13e9.79da1569.js.map create mode 100644 priv/static/adminfe/static/js/chunk-2b9c.cf321c74.js create mode 100644 priv/static/adminfe/static/js/chunk-2b9c.cf321c74.js.map delete mode 100644 priv/static/adminfe/static/js/chunk-46cf.3bd3567a.js delete mode 100644 priv/static/adminfe/static/js/chunk-46cf.3bd3567a.js.map rename priv/static/adminfe/static/js/{chunk-46ef.215af110.js => chunk-46ef.671cac7d.js} (99%) rename priv/static/adminfe/static/js/{chunk-46ef.215af110.js.map => chunk-46ef.671cac7d.js.map} (98%) delete mode 100644 priv/static/adminfe/static/js/chunk-4e7d.a40ad735.js delete mode 100644 priv/static/adminfe/static/js/chunk-4e7d.a40ad735.js.map rename priv/static/adminfe/static/js/{chunk-87b3.4704cadf.js => chunk-87b3.3c11ef09.js} (60%) create mode 100644 priv/static/adminfe/static/js/chunk-87b3.3c11ef09.js.map delete mode 100644 priv/static/adminfe/static/js/chunk-87b3.4704cadf.js.map create mode 100644 priv/static/adminfe/static/js/chunk-88c9.e3583744.js create mode 100644 priv/static/adminfe/static/js/chunk-88c9.e3583744.js.map create mode 100644 priv/static/adminfe/static/js/chunk-cf57.3e45f57f.js create mode 100644 priv/static/adminfe/static/js/chunk-cf57.3e45f57f.js.map delete mode 100644 priv/static/adminfe/static/js/chunk-cf57.42b96339.js delete mode 100644 priv/static/adminfe/static/js/chunk-cf57.42b96339.js.map delete mode 100644 priv/static/adminfe/static/js/chunk-e5cf.501d7902.js delete mode 100644 priv/static/adminfe/static/js/chunk-e5cf.501d7902.js.map create mode 100644 priv/static/adminfe/static/js/runtime.cb26bbd1.js rename priv/static/adminfe/static/js/{runtime.fa19e5d1.js.map => runtime.cb26bbd1.js.map} (93%) delete mode 100644 priv/static/adminfe/static/js/runtime.fa19e5d1.js diff --git a/priv/static/adminfe/app.c836e084.css b/priv/static/adminfe/app.85534e14.css similarity index 100% rename from priv/static/adminfe/app.c836e084.css rename to priv/static/adminfe/app.85534e14.css diff --git a/priv/static/adminfe/chunk-0d8f.650c8e81.css b/priv/static/adminfe/chunk-0d8f.d85f5a29.css similarity index 96% rename from priv/static/adminfe/chunk-0d8f.650c8e81.css rename to priv/static/adminfe/chunk-0d8f.d85f5a29.css index 0b2a3f669..931620872 100644 --- a/priv/static/adminfe/chunk-0d8f.650c8e81.css +++ b/priv/static/adminfe/chunk-0d8f.d85f5a29.css @@ -1 +1 @@ -.select-field[data-v-29abde8c]{width:350px}@media only screen and (max-width:480px){.select-field[data-v-29abde8c]{width:100%;margin-bottom:5px}}@media only screen and (max-width:801px) and (min-width:481px){.select-field[data-v-29abde8c]{width:50%}}.actions-button[data-v-3850612b]{text-align:left;width:350px;padding:10px}.actions-button-container[data-v-3850612b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-dropdown[data-v-3850612b]{float:right}.el-icon-edit[data-v-3850612b]{margin-right:5px}.tag-container[data-v-3850612b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.tag-text[data-v-3850612b]{padding-right:20px}.no-hover[data-v-3850612b]:hover{color:#606266;background-color:#fff;cursor:auto}.el-dialog__body{padding:20px}.create-account-form-item{margin-bottom:20px}.create-account-form-item-without-margin{margin-bottom:0}@media only screen and (max-width:480px){.create-user-dialog{width:85%}.create-account-form-item{margin-bottom:20px}.el-dialog__body{padding:20px}}.moderate-user-button{text-align:left;width:200px;padding:10px}.moderate-user-button-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.actions-button{text-align:left;width:350px;padding:10px}.actions-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0 15px 10px}.active-tag{color:#409eff;font-weight:700}.active-tag .el-icon-check{color:#409eff;float:right;margin:7px 0 0 15px}.el-dropdown-link:hover{cursor:pointer;color:#409eff}.create-account>.el-icon-plus{margin-right:5px}.password-reset-token{margin:0 0 14px}.password-reset-token-dialog{width:50%}.reset-password-link{text-decoration:underline}.users-container h1{margin:22px 0 0 15px}.users-container .pagination{margin:25px 0;text-align:center}.users-container .search{width:350px;float:right}.users-container .filter-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:22px 15px 15px}.users-container .user-count{color:grey;font-size:28px}@media only screen and (max-width:480px){.password-reset-token-dialog{width:85%}.users-container h1{margin:7px 10px 15px}.users-container .actions-button{width:100%}.users-container .actions-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 10px 7px}.users-container .el-icon-arrow-down{font-size:12px}.users-container .search{width:100%}.users-container .filter-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:82px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 10px}.users-container .el-tag{width:30px;display:inline-block;margin-bottom:4px;font-weight:700}.users-container .el-tag.el-tag--danger,.users-container .el-tag.el-tag--success{padding-left:8px}} \ No newline at end of file +.select-field[data-v-29abde8c]{width:350px}@media only screen and (max-width:480px){.select-field[data-v-29abde8c]{width:100%;margin-bottom:5px}}@media only screen and (max-width:801px) and (min-width:481px){.select-field[data-v-29abde8c]{width:50%}}.actions-button[data-v-3850612b]{text-align:left;width:350px;padding:10px}.actions-button-container[data-v-3850612b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-dropdown[data-v-3850612b]{float:right}.el-icon-edit[data-v-3850612b]{margin-right:5px}.tag-container[data-v-3850612b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.tag-text[data-v-3850612b]{padding-right:20px}.no-hover[data-v-3850612b]:hover{color:#606266;background-color:#fff;cursor:auto}.el-dialog__body{padding:20px}.create-account-form-item{margin-bottom:20px}.create-account-form-item-without-margin{margin-bottom:0}@media only screen and (max-width:480px){.create-user-dialog{width:85%}.create-account-form-item{margin-bottom:20px}.el-dialog__body{padding:20px}}.moderate-user-button{text-align:left;width:200px;padding:10px}.moderate-user-button-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.actions-button{text-align:left;width:350px;padding:10px}.actions-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0 15px 10px}.active-tag{color:#409eff;font-weight:700}.active-tag .el-icon-check{color:#409eff;float:right;margin:7px 0 0 15px}.el-dropdown-link:hover{cursor:pointer;color:#409eff}.create-account>.el-icon-plus{margin-right:5px}.password-reset-token{margin:0 0 14px}.password-reset-token-dialog{width:50%}.reset-password-link{text-decoration:underline}.users-container h1{margin:10px 0 0 15px}.users-container .pagination{margin:25px 0;text-align:center}.users-container .search{width:350px;float:right}.users-container .filter-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:22px 15px 15px}.users-container .user-count{color:grey;font-size:28px}@media only screen and (max-width:480px){.password-reset-token-dialog{width:85%}.users-container h1{margin:7px 10px 15px}.users-container .actions-button{width:100%}.users-container .actions-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 10px 7px}.users-container .el-icon-arrow-down{font-size:12px}.users-container .search{width:100%}.users-container .filter-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:82px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 10px}.users-container .el-tag{width:30px;display:inline-block;margin-bottom:4px;font-weight:700}.users-container .el-tag.el-tag--danger,.users-container .el-tag.el-tag--success{padding-left:8px}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-136a.3936457d.css b/priv/static/adminfe/chunk-136a.f1130f8e.css similarity index 98% rename from priv/static/adminfe/chunk-136a.3936457d.css rename to priv/static/adminfe/chunk-136a.f1130f8e.css index 2857a9d6e..f492b37d0 100644 --- a/priv/static/adminfe/chunk-136a.3936457d.css +++ b/priv/static/adminfe/chunk-136a.f1130f8e.css @@ -1 +1 @@ -.copy-popover{width:330px}.emoji-buttons{place-self:center;min-width:200px}.emoji-container-grid{display:grid;grid-template-columns:75px auto auto 200px;grid-column-gap:15px;margin-bottom:10px}.emoji-preview-img{max-width:100%;place-self:center}.emoji-info{place-self:center}.copy-pack-container{place-self:center stretch}.copy-pack-select{width:100%}.remote-emoji-container-grid{display:grid;grid-template-columns:75px auto auto 160px;grid-column-gap:15px;margin-bottom:10px}@media only screen and (max-width:480px){.emoji-container-flex{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border:1px solid #dcdfe6;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;padding:15px;margin:0 15px 15px 0}.emoji-info,.emoji-preview-img{margin-bottom:10px}.emoji-buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;width:100%}.emoji-buttons button{padding:10px 5px;width:47%}}@media only screen and (max-width:801px) and (min-width:481px){.emoji-container-grid{grid-column-gap:10px}.emoji-buttons .el-button+.el-button{margin-left:5px}.remote-emoji-container-grid{grid-column-gap:10px}}.add-new-emoji{height:36px;font-size:14px;font-weight:700;color:#606266}.text{line-height:20px;margin-right:15px}.upload-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.upload-button{margin-left:10px}.upload-file-url{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media only screen and (max-width:480px){.new-emoji-uploader-form label.el-form-item__label{padding:0}}.download-archive{width:250px}.download-pack-button-container{width:265px}.download-pack-button-container .el-link,.download-pack-button-container .el-link span,.download-pack-button-container .el-link span .download-archive{width:inherit}.download-shared-pack{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:10px}.download-shared-pack-button{margin-left:10px}.el-collapse-item__content{padding-bottom:0}.el-collapse-item__header{height:36px;font-size:14px;font-weight:700;color:#606266}.emoji-pack-card{margin-top:5px}.emoji-pack-metadata .el-form-item{margin-bottom:10px}.has-background .el-collapse-item__header{background:#f6f6f6}.no-background .el-collapse-item__header{background:#fff}.pack-button-container{margin:0 0 18px 120px}.save-pack-button-container{margin-bottom:8px;width:265px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media only screen and (max-width:480px){.delete-pack-button{width:45%}.download-pack-button-container{width:100%}.download-shared-pack{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.download-shared-pack-button{margin-left:0;margin-top:10px;padding:10px}.pack-button-container{width:100%;margin:0 0 22px}.remote-pack-metadata .el-form-item__content{line-height:24px;margin-top:4px}.save-pack-button{width:54%}.save-pack-button-container{margin-bottom:8px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.save-pack-button-container button{padding:10px 5px}.save-pack-button-container .el-button+.el-button{margin-left:3px}}.emoji-packs-header-button-container{margin:0 0 22px 15px}.create-pack,.emoji-packs-header-button-container{display:-webkit-box;display:-ms-flexbox;display:flex}.create-pack{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.create-pack-button{margin-left:10px}.emoji-packs-form{margin:0 30px}.emoji-packs-header{margin:22px 0 20px 15px}.import-pack-button{margin-left:10px}.line{width:100%;height:0;border:1px solid #eee;margin-bottom:22px}@media only screen and (min-width:1824px){.emoji-packs{max-width:1824px;margin:auto}}@media only screen and (max-width:480px){.create-pack{height:82px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.create-pack-button{margin-left:0}.divider{margin:15px 0}.el-message{min-width:80%}.el-message-box{width:80%}.emoji-packs-form{margin:0 7px}.emoji-packs-form label{padding-right:8px}.emoji-packs-form .el-form-item{margin-bottom:15px}.emoji-packs-header{margin:15px}.emoji-packs-header-button-container{height:82px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.emoji-packs-header-button-container .el-button+.el-button{margin:7px 0 0}.emoji-packs-header-button-container .el-button+.el-button,.reload-emoji-button{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}} \ No newline at end of file +.copy-popover{width:330px}.emoji-buttons{place-self:center;min-width:200px}.emoji-container-grid{display:grid;grid-template-columns:75px auto auto 200px;grid-column-gap:15px;margin-bottom:10px}.emoji-preview-img{max-width:100%;place-self:center}.emoji-info{place-self:center}.copy-pack-container{place-self:center stretch}.copy-pack-select{width:100%}.remote-emoji-container-grid{display:grid;grid-template-columns:75px auto auto 160px;grid-column-gap:15px;margin-bottom:10px}@media only screen and (max-width:480px){.emoji-container-flex{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border:1px solid #dcdfe6;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;padding:15px;margin:0 15px 15px 0}.emoji-info,.emoji-preview-img{margin-bottom:10px}.emoji-buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;width:100%}.emoji-buttons button{padding:10px 5px;width:47%}}@media only screen and (max-width:801px) and (min-width:481px){.emoji-container-grid{grid-column-gap:10px}.emoji-buttons .el-button+.el-button{margin-left:5px}.remote-emoji-container-grid{grid-column-gap:10px}}.add-new-emoji{height:36px;font-size:14px;font-weight:700;color:#606266}.text{line-height:20px;margin-right:15px}.upload-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.upload-button{margin-left:10px}.upload-file-url{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media only screen and (max-width:480px){.new-emoji-uploader-form label.el-form-item__label{padding:0}}.download-archive{width:250px}.download-pack-button-container{width:265px}.download-pack-button-container .el-link,.download-pack-button-container .el-link span,.download-pack-button-container .el-link span .download-archive{width:inherit}.download-shared-pack{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:10px}.download-shared-pack-button{margin-left:10px}.el-collapse-item__content{padding-bottom:0}.el-collapse-item__header{height:36px;font-size:14px;font-weight:700;color:#606266}.emoji-pack-card{margin-top:5px}.emoji-pack-metadata .el-form-item{margin-bottom:10px}.has-background .el-collapse-item__header{background:#f6f6f6}.no-background .el-collapse-item__header{background:#fff}.pack-button-container{margin:0 0 18px 120px}.save-pack-button-container{margin-bottom:8px;width:265px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media only screen and (max-width:480px){.delete-pack-button{width:45%}.download-pack-button-container{width:100%}.download-shared-pack{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.download-shared-pack-button{margin-left:0;margin-top:10px;padding:10px}.pack-button-container{width:100%;margin:0 0 22px}.remote-pack-metadata .el-form-item__content{line-height:24px;margin-top:4px}.save-pack-button{width:54%}.save-pack-button-container{margin-bottom:8px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.save-pack-button-container button{padding:10px 5px}.save-pack-button-container .el-button+.el-button{margin-left:3px}}.emoji-packs-header-button-container{margin:0 0 22px 15px}.create-pack,.emoji-packs-header-button-container{display:-webkit-box;display:-ms-flexbox;display:flex}.create-pack{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.create-pack-button{margin-left:10px}.emoji-packs-form{margin:0 30px}.emoji-packs-header{margin:10px 0 20px 15px}.import-pack-button{margin-left:10px}.line{width:100%;height:0;border:1px solid #eee;margin-bottom:22px}@media only screen and (min-width:1824px){.emoji-packs{max-width:1824px;margin:auto}}@media only screen and (max-width:480px){.create-pack{height:82px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.create-pack-button{margin-left:0}.divider{margin:15px 0}.el-message{min-width:80%}.el-message-box{width:80%}.emoji-packs-form{margin:0 7px}.emoji-packs-form label{padding-right:8px}.emoji-packs-form .el-form-item{margin-bottom:15px}.emoji-packs-header{margin:15px}.emoji-packs-header-button-container{height:82px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.emoji-packs-header-button-container .el-button+.el-button{margin:7px 0 0}.emoji-packs-header-button-container .el-button+.el-button,.reload-emoji-button{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-13e9.98eaadba.css b/priv/static/adminfe/chunk-13e9.98eaadba.css new file mode 100644 index 000000000..9f377eee2 --- /dev/null +++ b/priv/static/adminfe/chunk-13e9.98eaadba.css @@ -0,0 +1 @@ +.moderation-log-container[data-v-5d520014]{margin:0 15px}h1[data-v-5d520014]{margin:10px 0 20px}.el-timeline[data-v-5d520014]{margin:25px 45px 0 0;padding:0}.moderation-log-date-panel[data-v-5d520014]{width:350px}.moderation-log-nav-container[data-v-5d520014]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.moderation-log-search[data-v-5d520014]{width:350px}.moderation-log-user-select[data-v-5d520014]{margin:0 0 20px;width:350px}.search-container[data-v-5d520014]{text-align:right}.pagination[data-v-5d520014]{text-align:center}@media only screen and (max-width:480px){.moderation-log-date-panel[data-v-5d520014]{width:100%}.moderation-log-user-select[data-v-5d520014]{margin:0 0 10px;width:55%}.moderation-log-search[data-v-5d520014]{width:40%}}@media only screen and (max-width:801px) and (min-width:481px){.moderation-log-date-panel[data-v-5d520014]{width:55%}.moderation-log-user-select[data-v-5d520014]{margin:0 0 10px;width:55%}.moderation-log-search[data-v-5d520014]{width:40%}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-2b9c.feb61a2b.css b/priv/static/adminfe/chunk-2b9c.feb61a2b.css new file mode 100644 index 000000000..f54eca1f5 --- /dev/null +++ b/priv/static/adminfe/chunk-2b9c.feb61a2b.css @@ -0,0 +1 @@ +.status-card{margin-bottom:10px}.status-card .account{text-decoration:underline;line-height:26px;font-size:13px}.status-card .image{width:20%}.status-card .image img{width:100%}.status-card .show-more-button{margin-left:5px}.status-card .status-account{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.status-card .status-avatar-img{display:inline-block;width:15px;height:15px;margin-right:5px}.status-card .status-account-name{display:inline-block;margin:0;height:22px}.status-card .status-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.status-card .status-checkbox{margin-right:7px}.status-card .status-content{font-size:15px;line-height:26px}.status-card .status-deleted{font-style:italic;margin-top:3px}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.status-card .status-without-content{font-style:italic}@media only screen and (max-width:480px){.el-message{min-width:80%}.el-message-box{width:80%}.status-card .el-card__header{padding:10px 17px}.status-card .el-tag{margin:3px 4px 3px 0}.status-card .status-account-container{margin-bottom:5px}.status-card .status-actions-button{margin:3px 0}.status-card .status-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.moderate-user-button{text-align:left;width:200px;padding:10px}.moderate-user-button-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media (max-width:800px){.security-settings-modal .el-dialog{width:90%}}.security-settings-modal .el-alert .el-alert__description{word-break:break-word;font-size:1em}.security-settings-modal .form-text{display:block;margin-top:.25rem;color:#909399}.avatar-name-container[data-v-77412d30],header[data-v-77412d30]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}header[data-v-77412d30]{margin:22px 0;padding-left:15px}header h1[data-v-77412d30]{margin:0 0 0 10px}table[data-v-77412d30]{margin:10px 0 0 15px}table .name-col[data-v-77412d30]{width:150px}.el-table--border[data-v-77412d30]:after,.el-table--group[data-v-77412d30]:after,.el-table[data-v-77412d30]:before{background-color:transparent}.poll ul[data-v-77412d30]{list-style-type:none;padding:0;width:30%}.image[data-v-77412d30]{width:20%}.image img[data-v-77412d30]{width:100%}.no-statuses[data-v-77412d30]{margin-left:28px;color:#606266}.recent-statuses-container[data-v-77412d30]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:67%}.recent-statuses-header[data-v-77412d30]{margin-top:10px}.statuses[data-v-77412d30]{padding:0 20px 0 0}.show-private[data-v-77412d30]{width:200px;text-align:left;line-height:67px;margin-right:20px}.show-private-statuses[data-v-77412d30]{margin-left:28px;margin-bottom:20px}.recent-statuses[data-v-77412d30]{margin-left:28px}.user-page-header[data-v-77412d30]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 20px}.user-page-header h1[data-v-77412d30]{display:inline}.user-profile-card[data-v-77412d30]{margin:0 20px;width:30%;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.user-profile-container[data-v-77412d30]{display:-webkit-box;display:-ms-flexbox;display:flex}.user-profile-table[data-v-77412d30]{margin:0}.user-profile-tag[data-v-77412d30]{margin:0 4px 4px 0}@media only screen and (max-width:480px){.avatar-name-container[data-v-77412d30]{margin-bottom:10px}.recent-statuses[data-v-77412d30]{margin:20px 10px 15px}.recent-statuses-container[data-v-77412d30]{width:100%;margin:0 10px}.show-private-statuses[data-v-77412d30]{margin:0 10px 20px}.user-page-header[data-v-77412d30]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:0;margin:7px 0 15px 10px}.user-profile-card[data-v-77412d30]{margin:0 10px;width:95%}.user-profile-card td[data-v-77412d30]{width:80px}.user-profile-container[data-v-77412d30]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}@media only screen and (max-width:801px) and (min-width:481px){.avatar-name-container[data-v-77412d30]{margin-bottom:20px}.recent-statuses[data-v-77412d30]{margin:20px 10px 15px 0}.recent-statuses-container[data-v-77412d30]{width:97%;margin:0 20px}.show-private-statuses[data-v-77412d30]{margin:0 10px 20px 0}.user-page-header[data-v-77412d30]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:0;margin:7px 0 20px 20px}.user-profile-card[data-v-77412d30]{margin:0 20px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.user-profile-container[data-v-77412d30]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-46cf.a43e9415.css b/priv/static/adminfe/chunk-46cf.a43e9415.css deleted file mode 100644 index aa7160528..000000000 --- a/priv/static/adminfe/chunk-46cf.a43e9415.css +++ /dev/null @@ -1 +0,0 @@ -.moderation-log-container[data-v-5798cff5]{margin:0 15px}h1[data-v-5798cff5]{margin:22px 0 20px}.el-timeline[data-v-5798cff5]{margin:25px 45px 0 0;padding:0}.moderation-log-date-panel[data-v-5798cff5]{width:350px}.moderation-log-nav-container[data-v-5798cff5]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.moderation-log-search[data-v-5798cff5]{width:350px}.moderation-log-user-select[data-v-5798cff5]{margin:0 0 20px;width:350px}.search-container[data-v-5798cff5]{text-align:right}.pagination[data-v-5798cff5]{text-align:center}@media only screen and (max-width:480px){.moderation-log-date-panel[data-v-5798cff5]{width:100%}.moderation-log-user-select[data-v-5798cff5]{margin:0 0 10px;width:55%}.moderation-log-search[data-v-5798cff5]{width:40%}}@media only screen and (max-width:801px) and (min-width:481px){.moderation-log-date-panel[data-v-5798cff5]{width:55%}.moderation-log-user-select[data-v-5798cff5]{margin:0 0 10px;width:55%}.moderation-log-search[data-v-5798cff5]{width:40%}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-46ef.d45db7be.css b/priv/static/adminfe/chunk-46ef.145de4f9.css similarity index 92% rename from priv/static/adminfe/chunk-46ef.d45db7be.css rename to priv/static/adminfe/chunk-46ef.145de4f9.css index d6cc7d182..deb5249ac 100644 --- a/priv/static/adminfe/chunk-46ef.d45db7be.css +++ b/priv/static/adminfe/chunk-46ef.145de4f9.css @@ -1 +1 @@ -.invites-container .actions-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:20px 15px 15px}.invites-container .create-invite-token{text-align:left;width:350px;padding:10px}.invites-container .create-new-token-dialog{width:40%}.invites-container .el-dialog__body{padding:5px 20px 0}.invites-container h1{margin:22px 0 0 15px}.invites-container .icon{margin-right:5px}.invites-container .invite-token-table{width:100%;margin:0 15px}.invites-container .invite-via-email{text-align:left;width:350px;padding:10px}.invites-container .invite-via-email-dialog{width:50%}.invites-container .info{color:#666;font-size:13px;line-height:22px;margin:0 0 10px}@media only screen and (max-width:480px){.invites-container .actions-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:82px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px 10px 7px}.invites-container .cell{padding:0}.invites-container .create-invite-token{width:100%}.invites-container .create-new-token-dialog{width:85%}.invites-container .el-date-editor{width:150px}.invites-container .el-dialog__body{padding:5px 15px 0}.invites-container h1{margin:7px 10px 15px}.invites-container .invite-token-table{width:100%;margin:0 5px;font-size:12px;font-weight:500}.invites-container .invite-via-email{width:100%;margin:10px 0 0}.invites-container .invite-via-email-dialog{width:85%}.invites-container .info{margin:0 0 10px 5px}.invites-container th .cell{padding:0}.create-invite-token,.invite-via-email{width:100%}} \ No newline at end of file +.invites-container .actions-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:20px 15px 15px}.invites-container .create-invite-token{text-align:left;width:350px;padding:10px}.invites-container .create-new-token-dialog{width:40%}.invites-container .el-dialog__body{padding:5px 20px 0}.invites-container h1{margin:10px 0 0 15px}.invites-container .icon{margin-right:5px}.invites-container .invite-token-table{width:100%;margin:0 15px}.invites-container .invite-via-email{text-align:left;width:350px;padding:10px}.invites-container .invite-via-email-dialog{width:50%}.invites-container .info{color:#666;font-size:13px;line-height:22px;margin:0 0 10px}@media only screen and (max-width:480px){.invites-container .actions-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:82px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px 10px 7px}.invites-container .cell{padding:0}.invites-container .create-invite-token{width:100%}.invites-container .create-new-token-dialog{width:85%}.invites-container .el-date-editor{width:150px}.invites-container .el-dialog__body{padding:5px 15px 0}.invites-container h1{margin:7px 10px 15px}.invites-container .invite-token-table{width:100%;margin:0 5px;font-size:12px;font-weight:500}.invites-container .invite-via-email{width:100%;margin:10px 0 0}.invites-container .invite-via-email-dialog{width:85%}.invites-container .info{margin:0 0 10px 5px}.invites-container th .cell{padding:0}.create-invite-token,.invite-via-email{width:100%}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-4e7d.7aace723.css b/priv/static/adminfe/chunk-4e7d.7aace723.css deleted file mode 100644 index 9a35b64a0..000000000 --- a/priv/static/adminfe/chunk-4e7d.7aace723.css +++ /dev/null @@ -1 +0,0 @@ -.status-card{margin-bottom:10px}.status-card .account{text-decoration:underline;line-height:26px;font-size:13px}.status-card .image{width:20%}.status-card .image img{width:100%}.status-card .show-more-button{margin-left:5px}.status-card .status-account{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.status-card .status-avatar-img{display:inline-block;width:15px;height:15px;margin-right:5px}.status-card .status-account-name{display:inline-block;margin:0;height:22px}.status-card .status-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.status-card .status-checkbox{margin-right:7px}.status-card .status-content{font-size:15px;line-height:26px}.status-card .status-deleted{font-style:italic;margin-top:3px}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.status-card .status-without-content{font-style:italic}@media only screen and (max-width:480px){.el-message{min-width:80%}.el-message-box{width:80%}.status-card .el-card__header{padding:10px 17px}.status-card .el-tag{margin:3px 4px 3px 0}.status-card .status-account-container{margin-bottom:5px}.status-card .status-actions-button{margin:3px 0}.status-card .status-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.moderate-user-button{text-align:left;width:200px;padding:10px}.moderate-user-button-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.avatar-name-container[data-v-68790c38],header[data-v-68790c38]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}header[data-v-68790c38]{margin:22px 0;padding-left:15px}header h1[data-v-68790c38]{margin:0 0 0 10px}table[data-v-68790c38]{margin:10px 0 0 15px}table .name-col[data-v-68790c38]{width:150px}.el-table--border[data-v-68790c38]:after,.el-table--group[data-v-68790c38]:after,.el-table[data-v-68790c38]:before{background-color:transparent}.poll ul[data-v-68790c38]{list-style-type:none;padding:0;width:30%}.image[data-v-68790c38]{width:20%}.image img[data-v-68790c38]{width:100%}.no-statuses[data-v-68790c38]{margin-left:28px;color:#606266}.recent-statuses-container[data-v-68790c38]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:67%}.recent-statuses-header[data-v-68790c38]{margin-top:10px}.statuses[data-v-68790c38]{padding:0 20px 0 0}.show-private[data-v-68790c38]{width:200px;text-align:left;line-height:67px;margin-right:20px}.show-private-statuses[data-v-68790c38]{margin-left:28px;margin-bottom:20px}.recent-statuses[data-v-68790c38]{margin-left:28px}.user-page-header[data-v-68790c38]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 20px}.user-page-header h1[data-v-68790c38]{display:inline}.user-profile-card[data-v-68790c38]{margin:0 20px;width:30%;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.user-profile-container[data-v-68790c38]{display:-webkit-box;display:-ms-flexbox;display:flex}.user-profile-table[data-v-68790c38]{margin:0}.user-profile-tag[data-v-68790c38]{margin:0 4px 4px 0}@media only screen and (max-width:480px){.avatar-name-container[data-v-68790c38]{margin-bottom:10px}.recent-statuses[data-v-68790c38]{margin:20px 10px 15px}.recent-statuses-container[data-v-68790c38]{width:100%;margin:0 10px}.show-private-statuses[data-v-68790c38]{margin:0 10px 20px}.user-page-header[data-v-68790c38]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:0;margin:7px 0 15px 10px}.user-profile-card[data-v-68790c38]{margin:0 10px;width:95%}.user-profile-card td[data-v-68790c38]{width:80px}.user-profile-container[data-v-68790c38]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}@media only screen and (max-width:801px) and (min-width:481px){.avatar-name-container[data-v-68790c38]{margin-bottom:20px}.recent-statuses[data-v-68790c38]{margin:20px 10px 15px 0}.recent-statuses-container[data-v-68790c38]{width:97%;margin:0 20px}.show-private-statuses[data-v-68790c38]{margin:0 10px 20px 0}.user-page-header[data-v-68790c38]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:0;margin:7px 0 20px 20px}.user-profile-card[data-v-68790c38]{margin:0 20px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.user-profile-container[data-v-68790c38]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-87b3.2affd602.css b/priv/static/adminfe/chunk-87b3.2affd602.css deleted file mode 100644 index c4fa46d3e..000000000 --- a/priv/static/adminfe/chunk-87b3.2affd602.css +++ /dev/null @@ -1 +0,0 @@ -a{text-decoration:underline}.center-label label{text-align:center}.center-label label span{float:left}.code{background-color:rgba(173,190,214,.48);border-radius:3px;font-family:monospace;padding:0 3px}.delete-setting-button{margin-left:5px}.description>p{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700;line-height:20px;margin:0 0 14px}.description>p code{display:inline;padding:2px 3px;font-size:14px}.description-container{overflow-wrap:break-word;margin-bottom:0}.divider{margin:0 0 18px}.divider.thick-line{height:2px}.editable-keyword-container{width:100%}.el-form-item .rate-limit{margin-right:0}.el-input-group__prepend{padding-left:10px;padding-right:10px}.esshd-list{margin:0}.expl,.expl>p{color:#666;font-size:13px;line-height:22px;margin:5px 0 0;overflow-wrap:break-word;overflow:hidden;text-overflow:ellipsis}.expl>p code,.expl code{display:inline;line-height:22px;font-size:13px;padding:2px 3px}.follow-relay{width:350px;margin-right:7px}.form-container{margin-bottom:80px}.grouped-settings-header{margin:0 0 14px}.highlight{background-color:#e6e6e6}.icons-button-container{width:100%;margin-bottom:10px}.icons-button-desc{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;margin-left:5px}.icon-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:95%}.icon-values-container{display:-webkit-box;display:-ms-flexbox;display:flex;margin:0 10px 10px 0}.icon-key-input{width:30%;margin-right:8px}.icon-minus-button{width:36px;height:36px}.icon-value-input{width:70%;margin-left:8px}.icons-container,.input-container{display:-webkit-box;display:-ms-flexbox;display:flex}.input-container{-webkit-box-align:start;-ms-flex-align:start;align-items:start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.input-container .el-form-item{margin-right:30px;width:100%}.input-container .el-select,.keyword-container{width:100%}label{overflow:hidden;text-overflow:ellipsis}.label-font{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700}.limit-button-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.limit-expl{margin-left:10px}.limit-input{width:47%;margin:0 0 5px 1%}.line{width:100%;height:0;border:1px solid #eee;margin-bottom:18px}.mascot{margin-bottom:15px}.mascot-container{width:100%}.mascot-input{margin-bottom:7px}.mascot-name-container{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:7px}.mascot-name-input{margin-right:10px}.multiple-select-container{width:100%}.name-input{width:30%;margin-right:8px}.pattern-input{width:20%;margin-right:8px}.proxy-url-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:10px;width:100%}.proxy-url-host-input{width:35%;margin-right:8px}.proxy-url-value-input{width:35%;margin-left:8px;margin-right:10px}.prune-options{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.prune-options .el-radio{margin-top:11px}.rate-limit .el-form-item__content{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.rate-limit-container,.rate-limit-content{width:100%}.rate-limit-label{float:right}.rate-limit-label-container{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700;height:36px;width:100%;margin-right:10px}.relays-container{margin:0 15px}.replacement-input{width:80%;margin-left:8px;margin-right:10px}.scale-input{width:47%;margin:0 1% 5px 0}.setting-input{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:10px}.settings-container{max-width:1824px;margin:auto}.settings-container .el-tabs{margin-top:20px}.settings-delete-button{margin-left:5px}.settings-docs-button{width:163px;text-align:left;padding:10px}.settings-header{margin:0}.settings-header-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:22px 30px 15px 15px}.settings-reboot-button{width:145px;text-align:left;padding:10px;margin-right:5px}.single-input{margin-right:10px}.socks5-checkbox{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700;margin-left:10px}.socks5-checkbox-container{width:40%;height:36px;margin-right:5px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ssl-tls-opts{margin:36px 0 0}.submit-button{float:right;margin:0 30px 22px 0}.submit-button-container{width:100%;position:fixed;bottom:0;right:0;z-index:10000}.switch-input{height:36px}.text{line-height:20px;margin-right:15px}.upload-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.value-input{width:70%;margin-left:8px;margin-right:10px}@media only screen and (min-width:1824px){.submit-button-container{max-width:1637px;margin-left:auto;margin-right:auto;right:auto}}@media only screen and (max-width:480px){.crontab,.crontab label{width:100%}.delete-setting-button{margin:4px 0 0 5px;height:28px}.delete-setting-button-container{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.description>p{line-height:18px;margin:0 5px 7px 0}.description>p code{display:inline;line-height:18px;padding:2px 3px;font-size:14px}.divider{margin:0 0 10px}.divider .thick-line{height:2px}.follow-relay{width:70%;margin-right:5px}.follow-relay input{width:100%}.follow-relay-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.input{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.input-container{width:100%}.input-container .el-form-item:first-child{margin:0;padding:0 15px 10px 0}.input-container .el-form-item.crontab-container:first-child{margin:0;padding:0}.input-container .el-form-item:first-child .mascot-form-item,.input-container .el-form-item:first-child .rate-limit{padding:0}.input-container .settings-delete-button{margin-top:4px;float:right}.input-row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.limit-input{width:45%}.proxy-url-input{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-bottom:0}.proxy-url-host-input{width:100%;margin-bottom:5px}.proxy-url-value-input{width:100%;margin-left:0}.prune-options{height:80px}.prune-options,.rate-limit .el-form-item__content{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.rate-limit-label{float:left}.scale-input{width:45%}.setting-label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.settings-header{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;display:inline-block;margin:0}.settings-header-container{margin:15px}.nav-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px}.settings-menu{width:163px}.socks5-checkbox-container{width:100%}.submit-button{margin:0 15px 22px 0}.el-input__inner{padding:0 5px}.el-form-item__label:not(.no-top-margin){padding-left:3px;padding-right:10px;line-height:22px;margin-top:7px}.el-message{min-width:80%}.el-select__tags{overflow:hidden}.expl,.expl>p{line-height:16px}.icon-key-input{width:40%;margin-right:4px}.icon-minus-button{width:28px;height:28px;margin-top:4px}.icon-values-container{margin:0 7px 7px 0}.icon-value-input{width:60%;margin-left:4px}.icons-button-container{line-height:24px}.line{margin-bottom:10px}.mascot-container{margin-bottom:5px}.name-input{width:40%;margin-right:5px}p.expl{line-height:20px}.pattern-input{width:40%;margin-right:4px}.relays-container{margin:0 10px}.replacement-input{width:60%;margin-left:4px;margin-right:5px}.value-input{width:60%;margin-left:5px;margin-right:8px}}@media only screen and (max-width:801px) and (min-width:481px){.delete-setting-button{margin:4px 0 0 10px;height:28px}.delete-setting-button-container{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.description>p{line-height:18px;margin:0 15px 10px 0}.icon-minus-button{width:28px;height:28px;margin-top:4px}.input{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.input-container .el-form-item__label span{margin-left:10px}.input-row,.nav-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.nav-container{height:36px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px 30px 15px 15px}.rate-limit-label-container{width:250px}.settings-delete-button{float:right}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-87b3.3c6ede9c.css b/priv/static/adminfe/chunk-87b3.3c6ede9c.css new file mode 100644 index 000000000..f0e6bf4ee --- /dev/null +++ b/priv/static/adminfe/chunk-87b3.3c6ede9c.css @@ -0,0 +1 @@ +a{text-decoration:underline}.center-label label{text-align:center}.center-label label span{float:left}.code{background-color:rgba(173,190,214,.48);border-radius:3px;font-family:monospace;padding:0 3px}.delete-setting-button{margin-left:5px}.description>p{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700;line-height:20px;margin:0 0 14px}.description>p code{display:inline;padding:2px 3px;font-size:14px}.description-container{overflow-wrap:break-word;margin-bottom:0}.divider{margin:0 0 18px}.divider.thick-line{height:2px}.editable-keyword-container{width:100%}.el-form-item .rate-limit{margin-right:0}.el-input-group__prepend{padding-left:10px;padding-right:10px}.esshd-list{margin:0}.expl,.expl>p{color:#666;font-size:13px;line-height:22px;margin:5px 0 0;overflow-wrap:break-word;overflow:hidden;text-overflow:ellipsis}.expl>p code,.expl code{display:inline;line-height:22px;font-size:13px;padding:2px 3px}.follow-relay{width:350px;margin-right:7px}.form-container{margin-bottom:80px}.grouped-settings-header{margin:0 0 14px}.highlight{background-color:#e6e6e6}.icons-button-container{width:100%;margin-bottom:10px}.icons-button-desc{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;margin-left:5px}.icon-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:95%}.icon-values-container{display:-webkit-box;display:-ms-flexbox;display:flex;margin:0 10px 10px 0}.icon-key-input{width:30%;margin-right:8px}.icon-minus-button{width:36px;height:36px}.icon-value-input{width:70%;margin-left:8px}.icons-container,.input-container{display:-webkit-box;display:-ms-flexbox;display:flex}.input-container{-webkit-box-align:start;-ms-flex-align:start;align-items:start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.input-container .el-form-item{margin-right:30px;width:100%}.input-container .el-select,.keyword-container{width:100%}label{overflow:hidden;text-overflow:ellipsis}.label-font{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700}.limit-button-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.limit-expl{margin-left:10px}.limit-input{width:47%;margin:0 0 5px 1%}.line{width:100%;height:0;border:1px solid #eee;margin-bottom:18px}.mascot{margin-bottom:15px}.mascot-container{width:100%}.mascot-input{margin-bottom:7px}.mascot-name-container{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:7px}.mascot-name-input{margin-right:10px}.multiple-select-container{width:100%}.name-input{width:30%;margin-right:8px}.pattern-input{width:20%;margin-right:8px}.proxy-url-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:10px;width:100%}.proxy-url-host-input{width:35%;margin-right:8px}.proxy-url-value-input{width:35%;margin-left:8px;margin-right:10px}.prune-options{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.prune-options .el-radio{margin-top:11px}.rate-limit .el-form-item__content{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.rate-limit-container,.rate-limit-content{width:100%}.rate-limit-label{float:right}.rate-limit-label-container{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700;height:36px;width:100%;margin-right:10px}.relays-container{margin:0 15px}.replacement-input{width:80%;margin-left:8px;margin-right:10px}.scale-input{width:47%;margin:0 1% 5px 0}.setting-input{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:10px}.settings-container{max-width:1824px;margin:auto}.settings-container .el-tabs{margin-top:20px}.settings-delete-button{margin-left:5px}.settings-docs-button{width:163px;text-align:left;padding:10px}.settings-header{margin:0}.header-sidebar-opened{max-width:1585px}.header-sidebar-closed{max-width:1728px}.settings-header-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:22px 30px 15px 15px}.settings-reboot-button{width:145px;text-align:left;padding:10px;margin-right:5px}.single-input{margin-right:10px}.socks5-checkbox{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700;margin-left:10px}.socks5-checkbox-container{width:40%;height:36px;margin-right:5px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ssl-tls-opts{margin:36px 0 0}.submit-button{float:right;margin:0 30px 22px 0}.submit-button-container{width:100%;position:fixed;bottom:0;right:0;z-index:10000}.switch-input{height:36px}.text{line-height:20px;margin-right:15px}.upload-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.value-input{width:70%;margin-left:8px;margin-right:10px}@media only screen and (min-width:1824px){.sidebar-closed{max-width:1586px}.sidebar-opened{max-width:1442px}.submit-button-container{width:100%;max-width:inherit;margin-left:auto;margin-right:auto;right:auto}}@media only screen and (max-width:480px){.crontab,.crontab label{width:100%}.delete-setting-button{margin:4px 0 0 5px;height:28px}.delete-setting-button-container{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.description>p{line-height:18px;margin:0 5px 7px 0}.description>p code{display:inline;line-height:18px;padding:2px 3px;font-size:14px}.divider{margin:0 0 10px}.divider .thick-line{height:2px}.follow-relay{width:70%;margin-right:5px}.follow-relay input{width:100%}.follow-relay-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.input{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.input-container{width:100%}.input-container .el-form-item:first-child{margin:0;padding:0 15px 10px 0}.input-container .el-form-item.crontab-container:first-child{margin:0;padding:0}.input-container .el-form-item:first-child .mascot-form-item,.input-container .el-form-item:first-child .rate-limit{padding:0}.input-container .settings-delete-button{margin-top:4px;float:right}.input-row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.limit-input{width:45%}.proxy-url-input{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-bottom:0}.proxy-url-host-input{width:100%;margin-bottom:5px}.proxy-url-value-input{width:100%;margin-left:0}.prune-options{height:80px}.prune-options,.rate-limit .el-form-item__content{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.rate-limit-label{float:left}.scale-input{width:45%}.setting-label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.settings-header{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;display:inline-block;margin:0}.settings-header-container{margin:10px 15px 15px}.nav-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px}.settings-menu{width:163px}.socks5-checkbox-container{width:100%}.submit-button{margin:0 15px 22px 0}.el-input__inner{padding:0 5px}.el-form-item__label:not(.no-top-margin){padding-left:3px;padding-right:10px;line-height:22px;margin-top:7px}.el-message{min-width:80%}.el-select__tags{overflow:hidden}.expl,.expl>p{line-height:16px}.icon-key-input{width:40%;margin-right:4px}.icon-minus-button{width:28px;height:28px;margin-top:4px}.icon-values-container{margin:0 7px 7px 0}.icon-value-input{width:60%;margin-left:4px}.icons-button-container{line-height:24px}.line{margin-bottom:10px}.mascot-container{margin-bottom:5px}.name-input{width:40%;margin-right:5px}p.expl{line-height:20px}.pattern-input{width:40%;margin-right:4px}.relays-container{margin:0 10px}.replacement-input{width:60%;margin-left:4px;margin-right:5px}.value-input{width:60%;margin-left:5px;margin-right:8px}}@media only screen and (max-width:818px) and (min-width:481px){.delete-setting-button{margin:4px 0 0 10px;height:28px}.delete-setting-button-container{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.description>p{line-height:18px;margin:0 15px 10px 0}.icon-minus-button{width:28px;height:28px;margin-top:4px}.input{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.input-container .el-form-item__label span{margin-left:10px}.input-row,.nav-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.nav-container{height:36px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px 30px 15px 15px}.rate-limit-label-container{width:250px}.settings-delete-button{float:right}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-e5cf.cba3ae06.css b/priv/static/adminfe/chunk-88c9.184084df.css similarity index 92% rename from priv/static/adminfe/chunk-e5cf.cba3ae06.css rename to priv/static/adminfe/chunk-88c9.184084df.css index a74b42d14..f3299f33b 100644 --- a/priv/static/adminfe/chunk-e5cf.cba3ae06.css +++ b/priv/static/adminfe/chunk-88c9.184084df.css @@ -1 +1 @@ -a{text-decoration:underline}.note-header{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;height:40px}.note-actor{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.note-actor-name{margin:0;height:22px}.note-avatar-img{width:15px;height:15px;margin-right:5px}.note-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.note-card{margin-bottom:15px}.note-content{font-size:15px}.note-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media only screen and (max-width:480px){.el-card__header{padding:10px 17px}.note-header{height:80px}.note-actor-container{margin-bottom:5px}.note-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.status-card{margin-bottom:10px}.status-card .account{text-decoration:underline;line-height:26px;font-size:13px}.status-card .image{width:20%}.status-card .image img{width:100%}.status-card .show-more-button{margin-left:5px}.status-card .status-account{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.status-card .status-avatar-img{display:inline-block;width:15px;height:15px;margin-right:5px}.status-card .status-account-name{display:inline-block;margin:0;height:22px}.status-card .status-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.status-card .status-checkbox{margin-right:7px}.status-card .status-content{font-size:15px;line-height:26px}.status-card .status-deleted{font-style:italic;margin-top:3px}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.status-card .status-without-content{font-style:italic}@media only screen and (max-width:480px){.el-message{min-width:80%}.el-message-box{width:80%}.status-card .el-card__header{padding:10px 17px}.status-card .el-tag{margin:3px 4px 3px 0}.status-card .status-account-container{margin-bottom:5px}.status-card .status-actions-button{margin:3px 0}.status-card .status-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.account{text-decoration:underline}.avatar-img{vertical-align:bottom;width:15px;height:15px;margin-left:5px}.divider{margin:15px 0}.el-card__body{padding:17px}.el-card__header{background-color:#fafafa;padding:10px 20px}.el-collapse{border-bottom:none}.el-collapse-item__header{height:46px;font-size:14px}.el-collapse-item__content{padding-bottom:7px}.el-icon-arrow-right{margin-right:6px}.el-icon-close{padding:10px 5px 10px 10px;cursor:pointer}h4{margin:0;height:17px}.report .header-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;height:40px}.id{color:grey;margin-top:6px}.line{width:100%;height:0;border:.5px solid #ebeef5;margin:15px 0}.new-note p{font-size:14px;font-weight:500;height:17px;margin:13px 0 7px}.note{-webkit-box-shadow:0 2px 5px 0 rgba(0,0,0,.1);box-shadow:0 2px 5px 0 rgba(0,0,0,.1);margin-bottom:10px}.no-notes{font-style:italic;color:grey}.report-row-key{font-weight:500;font-size:14px}.report-title{margin:0}.report-note-form{margin:15px 0 0}.report-post-note{margin:5px 0 0;text-align:right}.reports-pagination{margin:25px 0;text-align:center}.reports-timeline{margin:30px 45px 45px 19px;padding:0}.statuses{margin-top:15px}.submit-button{display:block;margin:7px 0 17px auto}.timestamp{margin:0;font-style:italic;color:grey}@media only screen and (max-width:480px){.report .header-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;height:auto}.report .id{margin:6px 0 0}.report .report-actions-button,.report .report-tag{margin:3px 0 6px}.report .title-container{margin-bottom:7px}.reports-timeline{margin:20px 10px}.reports-timeline .el-timeline-item__wrapper{padding-left:20px}}.select-field[data-v-ecc36f5a]{width:350px}@media only screen and (max-width:480px){.select-field[data-v-ecc36f5a]{width:100%;margin-bottom:5px}}@media only screen and (max-width:801px) and (min-width:481px){.select-field[data-v-ecc36f5a]{width:50%}}.reports-container .reports-filter-container[data-v-34fb34a2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin:22px 15px;padding-bottom:0}.reports-container h1[data-v-34fb34a2]{margin:22px 0 0 15px}.reports-container .no-reports-message[data-v-34fb34a2]{color:grey;margin-left:19px}.reports-container .report-count[data-v-34fb34a2]{color:grey;font-size:28px}@media only screen and (max-width:480px){.reports-container h1[data-v-34fb34a2]{margin:7px 10px 15px}.reports-container .reports-filter-container[data-v-34fb34a2]{margin:0 10px}} \ No newline at end of file +a{text-decoration:underline}.note-header{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;height:40px}.note-actor{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.note-actor-name{margin:0;height:22px}.note-avatar-img{width:15px;height:15px;margin-right:5px}.note-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.note-card{margin-bottom:15px}.note-content{font-size:15px}.note-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media only screen and (max-width:480px){.el-card__header{padding:10px 17px}.note-header{height:80px}.note-actor-container{margin-bottom:5px}.note-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.status-card{margin-bottom:10px}.status-card .account{text-decoration:underline;line-height:26px;font-size:13px}.status-card .image{width:20%}.status-card .image img{width:100%}.status-card .show-more-button{margin-left:5px}.status-card .status-account{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.status-card .status-avatar-img{display:inline-block;width:15px;height:15px;margin-right:5px}.status-card .status-account-name{display:inline-block;margin:0;height:22px}.status-card .status-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.status-card .status-checkbox{margin-right:7px}.status-card .status-content{font-size:15px;line-height:26px}.status-card .status-deleted{font-style:italic;margin-top:3px}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.status-card .status-without-content{font-style:italic}@media only screen and (max-width:480px){.el-message{min-width:80%}.el-message-box{width:80%}.status-card .el-card__header{padding:10px 17px}.status-card .el-tag{margin:3px 4px 3px 0}.status-card .status-account-container{margin-bottom:5px}.status-card .status-actions-button{margin:3px 0}.status-card .status-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.account{text-decoration:underline}.avatar-img{vertical-align:bottom;width:15px;height:15px;margin-left:5px}.divider{margin:15px 0}.el-card__body{padding:17px}.el-card__header{background-color:#fafafa;padding:10px 20px}.el-collapse{border-bottom:none}.el-collapse-item__header{height:46px;font-size:14px}.el-collapse-item__content{padding-bottom:7px}.el-icon-arrow-right{margin-right:6px}.el-icon-close{padding:10px 5px 10px 10px;cursor:pointer}h4{margin:0;height:17px}.report .header-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;height:40px}.id{color:grey;margin-top:6px}.line{width:100%;height:0;border:.5px solid #ebeef5;margin:15px 0}.new-note p{font-size:14px;font-weight:500;height:17px;margin:13px 0 7px}.note{-webkit-box-shadow:0 2px 5px 0 rgba(0,0,0,.1);box-shadow:0 2px 5px 0 rgba(0,0,0,.1);margin-bottom:10px}.no-notes{font-style:italic;color:grey}.report-row-key{font-weight:500;font-size:14px}.report-title{margin:0}.report-note-form{margin:15px 0 0}.report-post-note{margin:5px 0 0;text-align:right}.reports-pagination{margin:25px 0;text-align:center}.reports-timeline{margin:30px 45px 45px 19px;padding:0}.statuses{margin-top:15px}.submit-button{display:block;margin:7px 0 17px auto}.timestamp{margin:0;font-style:italic;color:grey}@media only screen and (max-width:480px){.report .header-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;height:auto}.report .id{margin:6px 0 0}.report .report-actions-button,.report .report-tag{margin:3px 0 6px}.report .title-container{margin-bottom:7px}.reports-timeline{margin:20px 10px}.reports-timeline .el-timeline-item__wrapper{padding-left:20px}}.select-field[data-v-ecc36f5a]{width:350px}@media only screen and (max-width:480px){.select-field[data-v-ecc36f5a]{width:100%;margin-bottom:5px}}@media only screen and (max-width:801px) and (min-width:481px){.select-field[data-v-ecc36f5a]{width:50%}}.reports-container .reports-filter-container[data-v-0a3cd0a0]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin:22px 15px;padding-bottom:0}.reports-container h1[data-v-0a3cd0a0]{margin:10px 0 0 15px}.reports-container .no-reports-message[data-v-0a3cd0a0]{color:grey;margin-left:19px}.reports-container .report-count[data-v-0a3cd0a0]{color:grey;font-size:28px}@media only screen and (max-width:480px){.reports-container h1[data-v-0a3cd0a0]{margin:7px 10px 15px}.reports-container .reports-filter-container[data-v-0a3cd0a0]{margin:0 10px}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-cf57.4d39576f.css b/priv/static/adminfe/chunk-cf57.26596375.css similarity index 74% rename from priv/static/adminfe/chunk-cf57.4d39576f.css rename to priv/static/adminfe/chunk-cf57.26596375.css index 1190aca24..9f72b88c1 100644 --- a/priv/static/adminfe/chunk-cf57.4d39576f.css +++ b/priv/static/adminfe/chunk-cf57.26596375.css @@ -1 +1 @@ -.actions-button[data-v-3850612b]{text-align:left;width:350px;padding:10px}.actions-button-container[data-v-3850612b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-dropdown[data-v-3850612b]{float:right}.el-icon-edit[data-v-3850612b]{margin-right:5px}.tag-container[data-v-3850612b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.tag-text[data-v-3850612b]{padding-right:20px}.no-hover[data-v-3850612b]:hover{color:#606266;background-color:#fff;cursor:auto}.status-card{margin-bottom:10px}.status-card .account{text-decoration:underline;line-height:26px;font-size:13px}.status-card .image{width:20%}.status-card .image img{width:100%}.status-card .show-more-button{margin-left:5px}.status-card .status-account{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.status-card .status-avatar-img{display:inline-block;width:15px;height:15px;margin-right:5px}.status-card .status-account-name{display:inline-block;margin:0;height:22px}.status-card .status-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.status-card .status-checkbox{margin-right:7px}.status-card .status-content{font-size:15px;line-height:26px}.status-card .status-deleted{font-style:italic;margin-top:3px}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.status-card .status-without-content{font-style:italic}@media only screen and (max-width:480px){.el-message{min-width:80%}.el-message-box{width:80%}.status-card .el-card__header{padding:10px 17px}.status-card .el-tag{margin:3px 4px 3px 0}.status-card .status-account-container{margin-bottom:5px}.status-card .status-actions-button{margin:3px 0}.status-card .status-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.statuses-container{padding:0 15px}.statuses-container .status-container{margin:0 0 10px}.checkbox-container{margin-bottom:15px}.filter-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:22px 0 15px}.select-instance{width:350px}.statuses-pagination{padding:15px 0;text-align:center}h1{margin:22px 0 0}@media only screen and (max-width:480px){.checkbox-container{margin-bottom:10px}.filter-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:10px 0}.select-field{width:100%;margin-bottom:5px}.select-instance{width:100%}} \ No newline at end of file +.actions-button[data-v-3850612b]{text-align:left;width:350px;padding:10px}.actions-button-container[data-v-3850612b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-dropdown[data-v-3850612b]{float:right}.el-icon-edit[data-v-3850612b]{margin-right:5px}.tag-container[data-v-3850612b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.tag-text[data-v-3850612b]{padding-right:20px}.no-hover[data-v-3850612b]:hover{color:#606266;background-color:#fff;cursor:auto}.status-card{margin-bottom:10px}.status-card .account{text-decoration:underline;line-height:26px;font-size:13px}.status-card .image{width:20%}.status-card .image img{width:100%}.status-card .show-more-button{margin-left:5px}.status-card .status-account{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.status-card .status-avatar-img{display:inline-block;width:15px;height:15px;margin-right:5px}.status-card .status-account-name{display:inline-block;margin:0;height:22px}.status-card .status-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.status-card .status-checkbox{margin-right:7px}.status-card .status-content{font-size:15px;line-height:26px}.status-card .status-deleted{font-style:italic;margin-top:3px}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.status-card .status-without-content{font-style:italic}@media only screen and (max-width:480px){.el-message{min-width:80%}.el-message-box{width:80%}.status-card .el-card__header{padding:10px 17px}.status-card .el-tag{margin:3px 4px 3px 0}.status-card .status-account-container{margin-bottom:5px}.status-card .status-actions-button{margin:3px 0}.status-card .status-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.statuses-container{padding:0 15px}.statuses-container h1{margin:10px 0 15px}.statuses-container .status-container{margin:0 0 10px}.checkbox-container{margin-bottom:15px}.filter-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:22px 0 15px}.select-instance{width:350px}.statuses-pagination{padding:15px 0;text-align:center}@media only screen and (max-width:480px){.checkbox-container{margin-bottom:10px}.filter-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:10px 0}.select-field{width:100%;margin-bottom:5px}.select-instance{width:100%}} \ No newline at end of file diff --git a/priv/static/adminfe/index.html b/priv/static/adminfe/index.html index 717b0f32d..3651c1cf0 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.d2c3c6b3.js b/priv/static/adminfe/static/js/app.d2c3c6b3.js deleted file mode 100644 index c527207ddf4fb46c151e1e7160107d1e89753585..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181998 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

%88?sk~un(C#3wDekwFwO~&02?+~Z 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 gH-=At9y`TP63M@lIn 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 z zw^ixBMlW8oQhrB((#u^k8B0;xi#bL|-KV%MXW(l0LFUdi7g{V>xo#}eeJBTHO_vbN zJ*7=ke=B}eeEc>(A)&j3Q%B?@3@X>ZxJvFL-z|A-ntoFTlL+kl_HJEy7R)D>*H79` ztRjwxZI0NsI9kM_4|OrkWeWhl`jZ3Knc~6&u^)kR%1;rHt zrEuwH!WOX{x#3xL{QtsPn^d4R<;b=XFx z9XUR_H2D6C1_eLEc)DtUeqZ6L_-N-qU4=8HWsm?Bh{fd{3d;;hF05kHf)M4ebxnPbB#jcx#l{T%4`bgP zs}Pw5nG8x5eilUtC24_|BTpsK8$7qyR{#OG+^Y}`QK5R$84%`eSGSZ}KH|6y7IZdA z_6o|Zf*Wk+ge?V&vR4#$hG^Dn39n1`H{m6~&>P*KJp@dcK_3cFIV}g8!=>=0Zo{A< z8bk2L@Z0Ae_JW4FJQ?c zxIum+Zys1wz>nvaMzMWJFrcgQbt>HVYuT2kO}LQo)SC9(qw@InFW;1r?P_@PE`xmH z&XhgfDxB~u4WcC=>#VK>o`K~z&Sy8Ldu-EoR6KSs<~3=rnfl(NpTk938O@jN#(C1C zg|a(C%m`%*o~L2sIOh6w!yIIqhdIBe^eKL*YvfAXknb2oSTF;4O(4y{AZ%(RlH@Wr z%I-hwI~?%4%|hSNV(Nt=(T?Yz#v^NB8jtXhUHQ!@M`Wc)k!W-J0E}tOu1$%}am~Vz z=gCskj1g7kB)%9d>YO$o}fb5j^f>$o6G?;gH%c zy3-@OlWTlurit%{8bME?)ixtPywASRm6>D#l(@U?;#R7GpX|6&7=)9@7PVDyx|m)4 zGvl^QuE#WW*0asGGOtox+EFE{xn)1O?H9u%r@(QgDG5c~n8A20GZ<_p4Ml@zqAX%S zn?={_Z=|YEh{Lp}>H}PK@YRv%_6@s=q)cZ>XI)(MjSDEbcE<1M{5Ek%XL;i4@QFJ*U(R8iq@8>XDh_mt@`upb z_&&(xu>`lpYmu>#mLzm_taXH*)aP4CGShMjc+y+7u!5aZjo8W=lk4##av?Y1EvIL7 zm^^8zov=X-GepZiV7QTN)fvDjH~(_E&&&MkDMk}lRDKsnR8M__!N%g}R_s>IDz~iX zt~xwf_v_@VYkr+PMps5u*`c^6JJI*6AdpF%2;xqsP;8E4-BRE2ou;ZWW98ZMXJ(Q6 zV$%gN@>W>Nda(NogT|UM5LpHi{ah)eMp~hPi-V@I3kY4+WUa|Rig*1yTov-&#s_S? zsP)~2A>8jxYF${_#ATQyc0xXRqJk>5iLUv4$IA05-dS-WAvqJh!#mH|(?+|0?d6xoJPiXb z1C(UBJoBu_2juaHOl#&|M9w_xliF3^zZmoQCQ6QXhR$ZanY^=yzVbT^ui0vZ&j)dk z6K{C%Ma+SipYG?aSq`AUql^RoxN-UQ0~6?TD&kkn^Bv)9bfqEu@}BXtaV8VTZ@6kZ zhJW5#&umJ=7r*Y{_;-A|b?wi2`*Oo>V~SqqBiAkWwU`JaSUuuE0DsC4Ce%-#{f}Xh zbHWn$$O9_4U*HhT(9EBg@7WIxJeUttAqNp9W*a=1-yKOUyRTtQh7=kbX2v{E#n`Nq!@bPFUyXkMA{ zCf)t>KT9yvIs5gWCAcd_{<8!GF@R|)9vFG6D=a16Pobv%7*(*2r1j@|SDzQ0a(oR1 zV=?v#?`nsOx`cZRA6zF3&K~@%5_=uH_}~DiOm$tZJK?O*3WUE$_BMemOF4N5SwC~X3|mlL;+~rew16C^2M;il z|6!p@%X}j`q}*n|sEpsJl+I zJIcNucj|d8d=1TXtBJ7CGD%r}qFC^8fS8S$=eVVt_>!ZAD|I&En2~cXA>OvNkws%> z|6CXxy^+v`M5!BYU(H2S9wsx?c|HBP3xOqLzgB8xGc>|y6fqq1Gry_8ZB_z-UwSg3 zlXUQ@ae9*1WXocJ=bm_3cavt8;a=QK@Lib&Ke*u2$mo`C(kGa*+X^EIUI=f-Mq$Z+ z8ut8^!ch&3av3p(gh)N^+-P%|c&P>G3(?2IBLIny)N~}1Up3~Vr;@M#z zC^=H}!vg@&y~J-`nXcU;KtXTccV!}9h&PM7cR*E-F7qxz`$DsPhtGmX$?7OZjVG>! z0DqUHi>MXBNdY{`XG>lf#I7OQ{ENRBQ*1QMzr4JZ25k`320#A0WS88#Et)m@@rK3c zo!u@M^@|7;FT~HrZe5sG@Q#88SGRHB*VovXxaO*#wT5`49%z^?+WM*s4AvN(l!Z$O zc)DqUuvtud6Sw?y43rm|$YawVWx!s?JAJ*~#Jk*@pu78bz!!0#(N8*vZ%Esx!5%g# zLSi*09?q-%WC!up@KM?X&-u~a7X|IkA%F=ur_N}$J>3au?nan&=6Ax)e(w#;t`T%| z+GvfiZ=<5Gb2xAqAHIOqQ!d4G7F?C+8OAAh2C`>~wp~#|>=k zEiA_ULj}r~vmQLzUE4`ZFj7h};P>yZ7r20bM1M{3pUR>g> zB>WC0#j6RIduqwP_>%1;oSIbigrF`)YI^HGxbYB^u0}a`blRc1%#8D^ilaa8$qFqj z#%N*aez@wVbR1(YVSV9l*l*lMgz1FXaa`vtxlYO(APZaftnEW)L!7#=I*W^n%n1~f zJs9~dq1U8%W9Ltf)+`bE)D98sSy}QJld4=t#n`S-__U0$LB?&ygfi&MZ&h+jaPPqv zMX0GA8ZhJ0mVr6s*U4lRbp{Nr!kYCOmCYZ?jl>buNByLoC?OG>oIEjG)SgU`sMOLS z)u?i>i%_`bGt-nv%HwPOel!$#Pq^=yaR25zXeOlz3{|#F#$yNsxtkh|B*P^}{qXXA z%)J2gUP%R7MLWD)e5(lQ-Vd6=g00cdZd1+V@Lgfe(0@}1dgr^M7yYa+=$=lJXkp6t@kmMX&#U4W?2s8vY6JQes!M!U8+<)91FX%Ig<8uRK>=9MH@?+rSp zV-z|}1UT-R5$+O~%yrEi$5Q18N?I|bf|0H|M&avUi%sNzzHFvHj>Xa52t>s<5qlUUHlwQ|NZfUU&QH+ii6wh9NPV0oy+T%{K!d2NnpuHi5(HR8wRy1 zK>=E!DpBK80jzu+_ubXL5k`Hq1R{^M3{C$;12@Zjqpt5|Ju`Zu&Xpp?A=W}uru37s zmg^s6{B~tyJ(N<6OSY;@7n=>%cT&_Ax@{Pfc=N+96~OA(%$4iJY)~pG|2|rfL(u}v zrVF>4c>WVFm0VRF)6zvh+dXWj z!XurjW{PZQV3jS$3vQ+?#f$#nB``{b+&V~jAFrFC*N)fh@|Qg>QK7hT!x;R%yyh>S zCen;fOIo;eTjW%~Y(BHY%K}F`;{5QKnuLx+M|Ss(&Mis3GUJ1`gK4d_cZ!dsuGNY^ zw}or{#mSdEW?0k4awzyUG|%1f$pyt|%kIWy>%iYWCf_VzRYXO!%yeTCci^vSQ<^G};Gm+(<| z?u8Z63(tYoQi#02k|o_#&1(1OZ_=`;%e%Pa&YTwyWcOp#FU0n{`tJI;iy-h|*~n5XGtiQN8%Z@$(SB`h%B@5!E1P6g*vW+?M)#8|Ir; z+g|zPp1=HH2KIa<+O_PAWZOUe`Xm`bkR^SedlF`8#l_76-80RT^}wtfCd|%kdzDSU zBQ3`Ar_NwexW|G~{Or zLHFp_X_si0DuhP_jG47sbitwk5`jFH>sw|YS4rQ^2YsNFY<{D>|Q{=1G-ud&^5 zjP8a>`x2;foM?>CcEIO?{{WA=fdkeH0g)3;t^yV};#nP@p@eZ)R|^u$3hOWNmmieM zhg+W&p?xphy6Rr#JxmLXw!)$y=Ce3!Q3#IM#?T)ahWHrLPcQ3kM{_5YnN_T+%sc+T zcTG|Yt`@FdOe!R)hNNc?uofO;vz}Pwm_^`!eSZ3tyT%5M&t#NITOz^4jVg{n0`06| z*Eg<0X+)(Rf-c4A+iu89Vs@I33w$o;3pOJn>&ZH7#*cG*+~?}9O0>7*QJekU<$x;d zv%I@#+N=_Ge1eESM>)ff140f0)FP<-aI3vkZGwCFK~T7tEILq?Ajl@_JY2!K$L(a* zC07QxrHENyA&y{#c4TpJpQwK8@kE9=-CZ=&j-t3&9~OhC1WQWWx4LyNgHxjQ&vy2U z)u#OI4*PVUxLLl^xT6%kOsktwe0agR39!XMA;|AP)0@j*8@hmv+Ad#nkxmqWGT83o z!Zm^Q2EVG8UjpkNErGD(@MNgHPsYq z?`AC#maQ$d@fsO8!yyyZDRV$%$-B9WeVw%8s|{Ny6lnixv{G8}qqJI)n!|WiYegkt zLgP&aj_=x@kbZZP5vsTd{F${N+WI+00Tu!n<36}8>Erc8Dwhlnem2uqR5vbs^*Q-9 z91Dixhj=CSbzqUWn?wd=FW$8ur+tWbK&nKxA+;BO=T502`wypNfJomOl6&!$G0j7q z!mmgO0{_nSe`)cs1cRAUv7c&dCR_BX;4Q!alLq%F^AQ>cnQYq|ug(i^w>RFV)rGv~ zNH(!(JdV}}9$tzI9dOR>+42MvYj5a%K@JazdHSGuB*<@Fqh_otzKQ1NUVc9Cv&64T zn*d+tXQi7qh!ycPV$EgP5T@gr1AcOPQLL$w0OhJPJYP9e(PVCbeC8)OW^pCwqZATY zi}#;xmM)AS4L_oy5Wa~x<2d~)goKE$&}0c&4y<1`ZZk>#Se4)!zQr_EOKscukap1e0)468{$$T>-+U(fpuq$&$;skAekmw67 z?&D4aY9q186=S>#RwsYXIh#VIqg#`@cpwd_zi!eihP!y!MGaQLFiF_znVZt)_wDph|fY`*V z{IHveI8N??6Vr3#`Ok!pP^nF7 z@ktD-;0vVJR{4qxf7FGWUPo@_9`|&#ltU6BLSor6KUQ?y0hYcuC6K8Eyf7&U%=rJ0 zyEkoWD_Qn_zlvkOx)F36jUdi_o*S_SA!IDefHB5*zX6OjAc;wc;ra6S_s^`gv;<=6 z)BBu#ZgjNKnyRvLuB@yq{h=BBv~tY;9$jKK=74lPGNEzr&tKoyEa+N!L!$-HU13wc zeIZj~{L7GCF`I5UgbezmAC$vlp2Wa;ISS5-&mJQH5d|2N{&=FC6H}t5drO@B_XJ?~ zY19+1N9nOv*l48#%pEj)yJmU297&@;BEKEi=GGqrNY$z3CUL97EG$|!wE z4B#_DaLo5|P8g;A^itF%WiDkYGbaHZrG!`X;4)=CsV@uxBWfaAa-h~<*}j3s!cN+( z(Ac{;DV(G@h6#uXu8s7f>4H-d16mEPz}miI64FVos1}r6VLk|CopVWbSet|l2$L=G zS*VKYK-zvZBD$hhixKS0w1s)4+Uhy$FtKJ?BKq#D$$YQKF~SI5XX$E_ z<2M$@M1AokV-oSaB=n&z@hjvS?P)EXkC%<Y}mzi&oGoyzUPf(<^XC$QK^46vvij$&-2}xnr*}Bj0gtI_GgBOIFn5c$;^#=>WHXO z%G}1_5n@?nkC=SU7Y)zAj8P)2Ie>OC?5$zSm1LFyAaQ>V`&lBrSK4f|4KPP{`IVKf zw@(#eFlPGON`pvr$2=KwO5WNDJJ2)ufzgFI>NxX zOOy)43%5ywA6kbCfK7r{8mG`!o`Ai-p8D~_YbolHv3DKti)PprP?^a01$CQVf?5u25?=J#>^w7;V6w+EZHXMzgh zHodV87SXundnS@;>q2Xg%f)uiL1AOlFC&Xd--(gwxFDTJb|;(DX}Qz{`832UJu4^Y zp!>i<$Fwy9WUALI7ZbKO{iL zctb@VakagcLW3fYtedSlZ?YX&jbuFHQ{_ezJ~JL+4M2mN&pO_uAA0h1oJY=*73T%~ zA0^;NtIiCy)R_UHJk`sV#n)&CW*Bb1i5dR;b}QVst|-#frZ)3&SJZHkl0F#KY z1sL_kacw(bZ98Gb!q=4HAM(nr)S!H5EwUeJMT(!tny`R$t@tHhm{W)@djI=PTR0NI zlHcJ|mVbW_=~2t;XZ+Q+8O%JNBvmeY`4R_UoF)zK71n<)<($y{*^~W zCa}QX2%nGn%lG|c;x{_;1{{ex)|Uo0s9IL|d^P+0SNPhrcSlr_YC4OD@<*Fx)l0-9 z^~J+JtI-0PNfBMLe|!Fsc=byk;gK8QshPEGQ@k1#IY&wTmmJIMl%s>0`rV}*@d%|L zx<)h%t@{cisaYmVh4JW!rsz<90+7v;TYjipTG!{Jh0n`RKW}RwJ&R%TeU<$cb7H)< zN)P`Kc5Tv8vLlQ?-q|q(7TL+SZSBaib?p=P8wmplwUII|^w+OKklChF**!O6%wP1H zp*xE}F0r@4i(=rs>+Ql)kFy-fp|1(q=_Ix#Q?6Mv1*yJ0ms#9Ij}tt5dHvCmLz$M7 zKDgjPDd{;C%+jV8sbr1&=jnhSVtE@$I&5mE5Dx}T^cM z-N|wv!QqS!ub!X!Z1$zVT38JTK8@7}1KL!cB|T_oI85e~cS{4}X7_M50CaZpbC0XIeoDF}Bn$GG6XHBts&W1nA z&6(l)pwztKN5+OfCYy@NHlu^_rUJFFA-C>=bkFAxhlwX3Q5(VdXFp7XmQA{Ug7$87 z^k2t$Bg#M7{4EqZc)I$6mjZvwl;-~7WpMC99O>~Kyu}%_-bMK<>6KCbKi_u z&7AMNPViz7E^GZ=I6t1NgnK$WZi=l?yGH-N#n$-IvtajFYfM zLiYzrrLb#>vImKgm$C;**&RyilpY=B~F3{RIrF< z;b+U3dfYS&C1<=i_E&SBVnZJZ|5&qS!8y zvi5+euS+L<)|E|Xm?#yy*Sb?zxd$xOd~$5KbQMP+=Zbu?U7NnSh!r2peIi1!4o^u) zJq+uzVSb@p^pb(ULyVk=;%{aYdUNFJxPU8;F2QU3?T+S_~6r zd*`m>$p6&Pj`gXzpK~mmfIJ#{iww-JR+D|`0_Yj{41g4h|F0QbS%X7Ey)-zUm*Uny z8{o?ERyg3$uux03{DhOPYNN4GNS$(!vPVh}h`&pGBaSXX()NRG=G$Y^w#ZwM0g{f= z)l)t2Bn`8~8?1KG`5@)cJ$rKMDGb9Dwzg1UVBTz^D!b*&9%=2 ze@vc)Zdm0@*FH>W6YA;dK4-wYyctN7bR$`pjv1$oWKBATEm{WTBz;h3o}S#RxC3O| zNX=?N7*$he?uq&#^@MkdV(D|!WeVad1qLaITlZG7nJ~m8l%i$|ljG}j`+u5#SWn5E z5Tk{ezO9cdk=BN0tAzM}ivzV%M2`mFBI>jK@24TInhZ}G;-%s7!eyG6invNs&N&lR z4G}lZ&zXvlMHnoqh+&?4HRr8|!YhACZIsEkcJ=VW`YG#7xqlLJ3Zm(A8e*;abucpx zvEK9rR5vDT%}Ro((~wm!t%ltBO6>brt8v)BYRR}vU(Dl}PyrpYb3w*5SlY`btVq>* zyly^oK?RaN8+4x{LW6{)d|qVpp~=#olveXc57A|D=VH@g^9{}Cn}oc~R6T-?v_bl< z#_Y9)Yj-l(+&WSOR;I`Dx!(hwM^7BO=^}JmB*1y72Iy>vl}-F_L!9L{U&MV^C~THA zHKg5={2(e6N}1*chW9|gBncnnsKTsP;}!gH!V0U!u2wd$V@t981#~zP+_c6$nVN=M`kP?RZ6YG;n?p4Q4H@ z>lhvqx``+7Zdd6tQrmr5I%btaJC~_Dux$5jb|IMP*ec^5qigq*vtMQ!eZ?i2E`Up! z3Yn+p-V3gyb8MRLMaH8`?N!YTT*Zv`0E4QkE zs#&pbBtS+MWSTrOVy2#jpVF)zRnnrYO7=<_ox3SDkL@z{mCg)P6r~0;cL~Kf^s%j< zzV(n`y60$0h7jG#pz3Q~O#Q+R490*1-V6to=QqijxjecD$@n)NaJY-U)SYTFI(|f2 zn(JT=acvgqyJm*FOVpN+Z8OQbc=Hp{5P2IBZ}I02I>S;Q9SRr7Y~c9HH}FgnUm#>C;!s#*eF55xh<03#`nHh>L&oh6#&)tqf;98 zM9i1r8l?e`b?(hM+o>BdGmgEtA^Y!}uwwmn5 z;7pZE*y$jg6F26qrXOIxjp5?no}Z?^Oa-;7$?dVt_E{a1id!wh5ahP<5@(FiBZdiB zJnQ^c)jiZT@`Mlj zFXE4ri{k?Hhp-uR?p(PMH)Jc-HmRyy#b?&t3OrMQJcQc9F*?RIH(^|Jwkhw~xG9>i zQE??pqHt-%yM|-ED;e1@CoOZ;nbYW{D^N^yn|~z(YsM*u>(4UGr8!1c(ZsD&yX?8} z@Qd~Yq%I7B*T`&Ek=bqI1q6$oUL8XzG5kdD1vd*%t`MCGjJ2- z`7?SlmcmbIjBqa3DyG01+(O5bv?}U( zMUes+fis3asWi^u!~;XioHIt>3>6%zOS2JIIcM;$Zdu#vVV_(^Lw?d+<1fdoxsIrE zLBRTSY*mh|Q2!|A3_3nO^YB0U?H2w|c8#KY!J6BN-1t@gZe~Qdi#Jw}5#Q5@gYN{- zgLSce9+UouGI)qbN)$_1h;7qLpAt^+)^6~H(OEP=854OfyTt}}#xX}iOPhoSLir;K z?5KgSAwFvju)C8*rJd-fH*jYV98x^Ub{pC#9|Gj}@tw&mRl$6bqi;J|Po2Ad6NP~6 z77TJnzuh>YVHVmoG|V4_9L9b)z^ka?-EurV(l<@Ua>PQS9iJJsL&0d2ILG>s=i3y) zkLs3rl|4k12tl{kV-6oUWv#)-<_^_03H}_30DIWrW{x7N^q5JTg}5Y23XGqY?9cDA z4UM^t7!$-sONZtu1Kl}!0G{M->Vs)GaK@ZlmC=QfiaLyh! z(g&NkMf-s{yz0?*2zYJi;910C`VztTsD9Pl;w|4v8Ve+46j^3^eK$h&Qf;3GM zea{lkcFo2%=MJ9_&a(MnK)+}F{N{*Ig@9feUB(|C1a$OIG>)g}hr69WZobQ6Oo9r+ zjZ@5NkZ@G)C3l!Vzf6P-OeL6BVh3}y9L$_c&UTT)auLcB zo6%u`49Yo^F!N))Tw6FYW0R18_*)xWLFH?loH2@9Q)h|QT*12e^t&5>gBBT^%Do6d z4cWExCM!4S0nRmXYdVN8{fFN{3*e7tCe8qmhz#EnCVv=$I zi!}#ogf&@}F}T7u$wBO!7=bj~#pqnIS3^?^E=AFS3l;Y!-GOL616R%r*Smsi7{Uuy zBXY3G4lwCk?Upo~c9!_2F|3+4jbWC41a}OM>m+xdU{mbIDLZK4A*u|RVUq6#(3#f* z#L+bmcq6*tugv{Cb@g$IDb=UE5nr<2*B5+Ar~r&bm;NkLE{3`gItZ%U?dTDslV*2<|PD9>U&Y3kf=0gvT>-{_R1s94R^ z`)FVDmm!gf#E4F3;qDE8fl}33l?9;~)6ef3*S^S*d{4sf4n_FB`66sR48s!Zu92%ZDAxN7tK%Fmls4xa?2bg@i^x~J?NOm_Ypr>d_ z@@2*MT#(ogyL_EFUkpGfm*4N0s^ra4w!_G$7FOW*BklR;;@5)&h9ko552O%b&dK&8<{wvNjhB8m#3rszQl_Zm)i%!@IgiN!8!I^rVf`- zeMhk|>LF-CR0s=>!Z$T~=A*l~&JT5?8-RXlpQ!?+{9@~75ypXdg1is;bO zh)+zUG?a_*iRYA!vZOFBK^1APyg!U93@{)3RrumqQ1v~C-#IRfe9Xx6_NN(0Myyf1 zZV}nenyPN+?Ux{Wj;mStf*LM{D=)a!;j(}$Y`&3FLlBL@OQ^m4tKti)Rg0%@+X#-& zOJawRq^DdXy^pe`1En4qTDhb(JCCP1iF;V_{EKqV|*Rj@sPjBN(Y! z;WktJ;3hrz%O1s~_%*^bO%2Fvuiv9%el;3jduSwHm186E6tfc*9s%B7atDL(qo3UJ zL-Ytic8&&T%tOA^AGQw(y-LnGN7`8K;svKpo{{ zV`m+s#El_I~~g6l&65hKwH_?vn6GyT|N1BH&5?!pDPky=u?q3 z3UR`$9VQrH(2P>%-pF>m;9T^=nIU~YGlWY&GsHUM48a(*sG9DjHa2${%#{j`sQ)~h zZ@}hZIX-C9!@!Rn7=9mj@j}cuh!gi~hjAJ#qaR(!u04$4I+?n6W)}7AWWHJCi8$ zrVyR73%g-$KRle6D?W`I7Buc!!`XK&x@I;|_Ja~bFasQ;0ALA#-y!;g9Dh}LJZM!E zGylfq=UAG2Bg744Z(32q&VP=++k)M`gftQ!UEqdvbS$R5`NRHl?8T6SB?##!g3yo%I3NAUgtfjKLt|BS8dk# zi~X%HWW7ARstXVR29@Ol6mnm@dNWRrJrDKh=}GESUo4qy00GQcEGfvyr7cXt=S4ZF zLO>xq^mG$&N4~zUJH-Wd%0-)TrhK$VYEBGo%g2*+s!2oH- z^eI(5;V&#Lv9fnu4N#O<;uWSE$~32;yTnc&IK1%1yM>2DK*KI2Dd!Q}3@tD0*~H1G zWh*pK5Z*5MyF_<|TI2@2b$s#!fw&mx{xw{4*ed_?3pJCV)nC*E4S_|S;$29jjC6+fcm`FYIuM0 zm*FDe8J#FR*BtBBz+ZY^$#1=#5Q|66zJm1?SYA_|RC5p;7gt@43&r(?#VSD&(rlym z?fMJUC}q?rgJ_L5FHoM7fKy)dThqShDBwE)S7Ig0)5xNFd5!honiQ$AKFX_mBkL>N zu@%A{T8r{HkFkRe_kCW;1P}N>QOmdF{5y?D<~l@U|MNtNyT;K3^En)c!oHlXWwXv@ zN`{=C7nRI=icARGf4RzU!pG068vMgIliI;a!b}_Gn72`$b4krpe>ja(Cu=OQ;x;{}XMEc^4zXB-}EEDEI;pW?w zO3Ti#&RG0C_zkv1Zb**cP|P5j1fA=)bj+2&9r0Hl>43j;b86X$uONBEocuZNUUMYh z$5Rw6-7M_sCl2-^Uu$#IBP1&>BK+M4d@8P@z75H@g`4j|vbKT-zHY?7r8kBzl~dTx zclIm8RJf~xvmDI|tmtOuSvZ;)e3SND(ERWMn$I1(C6|Uhy$T3!8A&8k zpun@4Zvw<3hXTO{_L-+SE%EiwdHoRuL~Ud9(9)2<83oQ$n@(M%SvOa7V~D}NA)|sL zfT}5|`WL43(>H}wnb+u!8hsB12XoCd_7e?tQtJ^dg$?)V3XBM0r>R1NfK&{S=N4m5 z*-{vtLXSCRCG>($b6^{?%?`%luH;{oRa|9GSz8-@O@NrrsJ(fhVea9tIc2G`Yna&& z0ahpN!z+fN!YCe*Ppn}A6b5+5-;8|GZQ;3E8IIlBH}eDlc;W=gO-QaJbHgZ%|&!G<(ebfg1Orr91v+++TC$ zRZp{S>U3jhnk%o0gZx-|jZL{uSd|eH)aZMt$!ce2e$JCi^MVL&X@JyA0sxA3S$GDH zJkpyMSUqb7jds<1n?@UWY$U1{i7y2qkjwlnNLaWlT_NI2o6jZ8qDPN4+EU_|Um*Tv z-Fm)>eKGfd<11;S<0aQzyS)~_7}NYC`ik9z`fRZM0D-v&JuU>NZoZv9+uC%wWK}gc z8jq(L#G^Et{k*!;&53n8fh}^W%W`T*83UTsNq-2!A%BH#Swq6 zJ)rcp4Dqkc>?$De5#k>LPVWPb@A#VuR&-mq`BxGD2Iuz);#VB;Rj`;NK1)AUK()Z} zTnX_H{56}x-@k(R@(YN+T(dp~$%g;PT;Z_Nv!}vXV3k_A0`}RN$Cxf2A%Dm%<9hxY zg9j*_>kBvEj(j`7Dbq@FifMNvwxk$eNWV-~1_|E3OI7+4kYDkr?gJbXm?5WzL|71y zGInt>2zMpTCIz}2@$1tL1gV`auPt;xJQPmv%y`;RUz85V#_U1+Gml(w(?B8)q zh`kL1obfkj{hPwgw_|_%4;?<1WpcbHwBZZOku-0P57%$QjIHl4PuL-Ym6G8T>hGV?R6Ba$ z;Adtw#2cGqt!r=&(N9azAT~}EZ5Yq?wS*Sk?pq$eMXlItS;t3L#>g6fk1`0RK35Ng zfiAMbK(q^dSk) z)}2T6J0Y_sq^EF*W}(>8!$M#EAikYTZhN5v>3K^0tY#&CN(_#*vW2BG`DSt`UtKoG z<&k14ER~tI$X3dH?KM(yHN6JI>d%@-0gWr_;og#2b?}nsp`)egdQ>{L#WU8<LmCS3+^1fEht1<&dPfVx&=8Ne z6>V;0=N9Cv_3i6ekuG?4-*Z8Bbld<~SXT7plb!X@P6n(`aC}5s4#=^DzU_SVUKu&} zK7Bm8fKn{iv2Dr_UjU{#NqoI>Y4IJ7b?}IbGC4(*`6`hqKk;Q`Ys1Caiq`Y>@`S&7 zZEiU5D&+3(rz`7LONOMrQ*ODd?=1HcJGr-|wKz3zw##!d90Ydg=>8)J;V9vESB8??6dgFFz}dbGHF)a$UuWnVv2m_!C|`uG!i1O}2uAbE%Z% ztIY>h1z1U?%ty7;N742pZ>>pUs+HWUI*7LK@oS9>?4gcsYkl7UBB^{qmglkEd333J zV-%CQ;0L_Z(Oa~A%C2P8_bk>XK7(AQ>a{v+mcO?Go%0O4hsA#IbY=g>Hm$vmC-%2f zw?rAs4dE~Vpx9oOrp$Iia_$uO+U%nR@9vq4Z36;UWns zcN*A9)Wq@v!A88wWnsKW{f5ZZ=B#EDOv8i7bXr|^WA9b*+GmIwT>ME4%_6N^VA9LtjB0wv6MA`_*Yj`SK z>?OoH18xg6&doBBQkg$Xv2+_-MYqyTs7#27HS~3~Rs@yHv=j#ST_fX0uaVeVrh=qa39$OU*9g;MfoDkaZDyGF5g#gkkgTsh)@$b6H) z^N`HE@6I)UWzRYIza7uy|30_O^AM^=@(f~25*mibl5JxM1*KL$bt4I2?{RB&# z64L++q06ap^3$}Q8!#A3{{1n$dQ0pQVA}MSC%Gn=ttIeZtZyWBig2} zgzxA*G>2?i6SRjKaiy_+uWYr}L!xRTpwo9na!?R}o zCA4@huci}yIW|!zsj>L_6ZdFmB~e_S!R|Da<+e+x-0bXn@bsP-WA_o!cj1 zVXYiEgx{-4)$p}nNh){VdS&zm}a9%J;-yuz-7 zl&*a))zpf9^kdEJg{m+J`#m2?m|~x_&H<<${W4!NdI;aphP`0*k_?cg?JSmLGuie9 zlV65wXS$OGD0FVw7WEr|EaXn#?+UHmMfH9pA0800;&8HfCm5jh^zPV4a^zhcl5v$X zp+=ubI=6kQFMeWOcZ&KeTs!fZ7&54KY}8vCm6yNtwp zGEKTsDc(0rQI5aM0CRafw-h=Mi*syr`&M|$T{-O637(;jrOO~fX!*slY;&}8#Kg?H6wIkr68i=$#aTtg{)ec zON2HzLS~njTA}|`rWUqn&27=1>DQ3JwDE#PqNJxR(qAoP-r+ETV3jzbN{nCkoS`QI zHAo(rB^WE%r42t)W!Z@&L${2fM2sZY!xmVO=OlNWq$@~nm#l-Lhki<-4}`NglMMv~#z`fipg6)? zeyi|Ci*6wM-;u~RMP)=fpRaW;y}A|8xY^;1JWlteh?23--zT8uOhCO}QN($N&v+)c zi3_NX;mjp8>~mY@VEhgFW(ca5y`ldOXC(3G5W6Y$HZtB@>N}EED@n~#F8*RVS%=DA zL16DZ?4`2-mz%)H5?jtC*7j}_YMshL5@X`8ny@*r9k3t)x(yz+NT02HD6YMa2_FDdVMv~wFvBM2E zNDMIZ#L|M3KNUjqDRS82a*ZVDZkDVba>{+W7Hrotg1s-Jsz*%3RA`?d{<+}LoeL+7 zDbYR^TkY)69yMI4A&utRGZ6a}f;~6-^r!@TVHArF9PB=)wxP+?8vj|SDI~}D({joI zIC@e_`(_m_t-J|7hfRWcdNOFlp{ois@*=sZRs6XsCs$L~MC){` z{G1S!()1D`AhuUt5P~6Y>B~Zp?LHcMHM@c{v9TZo*+k&4#EIUMRmBt_WjCgntV{uD z;%&J5+<7QSKsl|(o{(PRn9gu?YBm#KAJ~H&{}TJaIN%Jm;!&e=x|-annqw(lNp5%L zF1*>-f8;LwOQS}^X7Jb_tn{QE2mcHSS5o%~8Yr^dBNzoWwIp8mH{=>3&B_T!z)6<7Rq;%rUiB7T+naxGykyRpxH+sSOsFxk7B#ivs)|vDx<|T;aDj!$~j` zY6P5VwyHZLKl936cPh2{IhNz*T6T00>Qwypv_jodN`U-s>$}b*^V)i^HOI-6 zUs$S95&#;+R3`?ox2;dCHy@I)PcDPXMpeu_3jW$kv!!e_SnM|TGWNY#NTsi3)4bJY z*gcsobSsHz9>mR(n3ncB^w>`{2>!P*hI?pvrXN~$y!n~sZ2C9nX|frdCza9=Wr~@8 zy8gp9bX1+A2&2gdH0rH*&~j9LhNUhy(-l~X(hO|QKjkY|<5dR#jNPSS@v;hwsON^W zctMRTU06>7GiAP$QSL7VQQwo^)@9HBk#X78=JAS|UT&-wdF*O)7MF~;mlQTr>~bDT zz1p;cVL6#*^IV=3VrYTXt4&T$(+Dm%D~XjulQ0gsEU8_%;wY156vHN24<2c`JxyCufqZ%7WsILL{I-w*9XhBri0 znO(_1^o#|VR=}<{V-Z(pA&}QoKRZ!*GZ=`Q;9NZ?W3|mkep!7pGZ0}-ubA#wFc3c3 zEEtG^3z0UXEj190&GdX#(!8-C&3!oZWohmi4`p40o2#)8v$44n3nh8%U}KZ=8EfjTu}S?5e$n57k8Wdg zlCB8tjm>eoT5#_+HVGYQkc~}32MUlT4>~^;kl$ygRyR3p-V@lep{tRF@drCKXtlIk zQru3(AzpgXObuIMzgyT7XPBIuscd86(oTgs(Z!J&biUI^Ijklyn5oNF61D{s(zY=y z+U5b=NHaQQBIFJnUVtCDSkE-dM|((5|ptS#AY;n+4#MeIxxa z;IC-o_SW2f35{{EaB}7XS`94wWZG0~r8Q7;5Y<~nb9?uyfZjeQpw*WIbj^iO`dCnB zB|cmz-Ec2a%MGBn5zS??&Mk3HjlXIs8z7pr);jc>HLaf|gM}OAqD|W%2sI^ zk}T=4foWg!8K^@cGsdv(L0rpHf~0#xCOvu>95DuNW$fAuSrUD=V#}q~=yzX-4REI8E(_ z4dI6I&`)nGF%QR9_4`|@lr-4-9Og*-8_p0r&M+NoS7(QJBF+enJqC9ZxJkaf*!rHo zrec*J7nPlf3+s7IYejYCZt1lrY(3se&k<|ps1r8dLxA8$_Myouh9{T?G3t1$l&q@P z$rk1N?7P6YA?tS#Ufu}ci*DNgBiNSk@ipK+;^PZr7FN0VTO1L5Jl?wT{PD@wEIu>N z)2$J|=q8*twuKEbAjVtR5Pt0dET_f5}WZ`FyK&t?P@et%ePq8^Qr>znf)ydtGYgs;%g1Ya=A>s=SScDHCeyi@$R^ zQ`A%s3+l@Y_(WBPv6Rj?TVG4inatVQmJ5vNbi4I=YWPYU@wNSkzUu}S@z_%08?iPx zfEZi;Y1e^@=DYkumdFa7?MLMWzPSURFZ0c9z__ES;IL?;i$?Wm_VJ%t1#ST0BR-HOPB>MAAOD zMABaPYBdOfO%}wYYDzctk}e2Kxs$X{G=Rq5usj@MQ@5cDWzY&xlg+cxh3uKhs4W({ zonzgNyOQ7)li<~@F!gZ6JkZ`!c^$ML%{+$fZ02zv)Mn5O_Y0bVlD?G0q>cRQyGN0!3hbws4Q($Z=iUJ4Bl=!( zOQZ`MsiTW96sdmp=9tV*+SAx$O}eEBP%gC-9WQ2}j@!LN!$Qnf;{ecmVzC#n^_hqA zGni~lMZf}&UAJ3WU1TKVkdOXS=yTd8hgSTw#?XW%4bfV%g~Ri3cWI|`k%X|zFe^4@ z3;uq_rTF`$b}=kfZf96pJpCJRgXaaQPiqlf_XQ{bZYK!PX!M6I1x;HE=F zx5!MIdA!U_Hw9+O`B$Hm*Bzq8Y=cYRn0W5FO?At8iQefg3)zoYO+LBsUI`eNJ8UAo zAJy7EgRQrZ?+qkwJn#do_zbq*zKUyx&RY92)}}bIpyk@u+pBS{p>fpOD{-A)vZ6MI zdV8Aq*lX=;+hr)5V&kf}C#fGIQEQJ=KSm%%Y zN-C_kKil!9EAGfd8jvy8PSj}Uhb?Ot!g+jchXYn)U%}JyHq25dT0mb#x(3!A^vGI( zH3y&aCQgIzKJ{ajvg25+O)95)#fyJ|KY#J5ziF5)Kt_SuPaNh$j05r>R&DZ`)!ca1 zvA_B>R676Vr+yh_V2IP9}eIC8dV9wyo5XUGiPB4EZ*=CDsZ zdQec;e#Ay3=XI%JD1G`m7)Z3rpOng9`Se-o$fQ2+C^E{ni!Zv?WX#m?wz*kND^SxX zqd_bQTeNl+t4A&Lc>&S|uU~tFUKUdgUHU=I_O=_zP|2YE?XVh=1&|-fD!9nL2?oHu z&ZP!ke&{2qyfFTTMFR^?0&*Bgk4d3TV*A^ZcwmfRxA>I{W`CP?ck`!v+pN3uD;LcE zHn}GTUT>S+6Moqas!M(_5B&u5(~2SvukTCyHjql1ZKs;Xb)%c@n>c85RwRX`WHkx+ z>00jfWjqE-?$={&w*y0O%}9FK&N7lp0VA>(;x4&BbMCr&!d+xtiW233z(?wPJ8Eoy z9y3jl*r>f^aZ38F!goAle;Qn}5qt7QBOcg-uw6^9`Egnt?Nq`wp}SdJb|0l%@f$tc z=4)lXsQ^wkvkR~ny!Ap{RJ^^I+1GxTO(5NGjFrzYXjxriJU3cpNEAC^l%301z&9!9}o$TWm6ps6e16p?V$&$Uf)PK z_Bq=u>NT;Ky-P%t3J24q=Et8~%hjhXBaWiI9aBS&?~Mt+(^K19AB|ICap>J4Ck`am zYY?PFUSe23tRMln1i4bzBEt@Y&Qx5BkGoAc#Cf zW>w%HX>D$5538N$!Cx0&0h9DSz}&5Io7ZQt+Cr0b)E3w~lC0uYYzIYZ9}UAt$NHoi zPQqyL0o@MbDo^?5A=aX4@m!C^t~l2tbfqkJ?P}B!LF^v&1Lnc7;G6hIVIL^w7T796n%w?OFhyIp7Cwf3*V;5b*@5&h{W3&%~a?hA;5aaDpp#74_8&A+BMZ7~$Vajo%!?290PNMFKG5FVC6|rvj z1mO~cd#7KkF(=h>yP{K&UFi#euk{40!u?u;ErClZjmO<-x?y*(Q;s!l=~~{uMn`{v zPCLC=B}mG^zjJM7^;;vc z$rEW?jKL!z6APklpW7i9uE?2TB|0Nl5M9~hGZPX_(L<_LbRKkMN53RCHc<5|J15OG zOt!Joa457;oL<8$F6M-h&z@tKvpBsreiEs`A*7784;Q zizr6Pb)(IGY@xbIoK_v)eiNi$#vSwrW@5{=_`Zv4_sX>R_JbAXu=PXKfY@DbYw~T8 z)WpV8ht5dN*`_DU@J2#JsxlqlvGO237 zoO1;Gx=jS7rSAit)}LdBL6Y9X42RKhVb70(h%Ylk*ken|igji$`_ik^pUI~HTtff% zY??iZ2Fa1>iD7cA4X#by(4N;FAU+O2C`&#_`B{=&Iu{&jx(f))xL}lEH_haE+OL%s z6(Tv>ZjMMM200?L6-Bu}dgF+UC`nyiCi68q(F~`vCb9JS4kH&LW6B(515F@V%>>aKkrO~cK^`9zBMf< z>!pT|ZQm?LNBe~6L;7Qf;tgzCbPmRS*I-n7M=U(BL1lhhcD`o8bIVquCeN|*O`5L2 z%EWtT3ma|}_kLL^WZQRH+RU}WkP1M8FI(hCR&}`{1`5pk{2G4+#;}&=xhl`@&^?K6 z(sO6tS$YuC^>LL}jo~SogJsWTqh-zqg zo|+!DgXnW=KD)j11o63aYF5G0we_!C(;_vi>3Y~LRY}+K-BJ!+H7zH7%?T@MDe3(H z5xNtGR;Z}2L%14F=w7TfD+cz|Xn^Uis(6xCpHib)gb0HVs=UZm7;a_NR zlv%X)*y32>kFLs~1Fc(}^(M}y>#8t^E^hIZBC>f}bfsE+3!#FwUv@_^v!(i~x0&9< zkRYPJkk_nC-Ip0sn*-I^s`OQlCB8E;WS{b!CZJdR)#D}H_MYv6J2V{(OMmks_KoAZ zrH$hRm*6?!n@9Sg?x+IADx)vLRTHb;{mcJI=!8Y(W4MA!Rh*CeWMs*7k39G2VpY{oqqFlSoA2bGODzxM(hAfFT4+$tG z>G!)cM}quQy=!$JZ9m`MoeS7@I7X^%manr4mReD(pN>JB(5HFWcLeba#RVJ5!x{YmNAo_|p z%)O&}=3lT7MBnY~3*qRq&ZUfwY#OZ^e|Qfdx9nuy7dC$`yur&_glKM1e6{c)&FYxr zZSW#EEy&vQ$PA3!3JBY^@PlD3+0>>~YfV0LT`Si#p(%Du#pJ*EK=2ouy2zV)4`Bu{I>;Yv1#bzoZRA!Im~?an-VMXlX6l(Kabj|LF@( zqV02D5dYai*N!rNbfqJ+6np~@JHGX9-ui{D@)N0{{q7o2(SBQ@d8+?eXmYQ_1#k?g z?-KNPu3Z-Wh;%*cYWqeVuNq0?l#bb<%cf2-piXk%l_|5j1Qt& zg8V@8M7w1KNZ4oBky}CMcZqfsNQ97Kl+G7PBc)4EBv3y&XG51KM5pJTWiCjg z!JYtPvPWATi+$}Fb=vDc)LG%IVDNG%^;u2Uzb!PW$-sF${w}Swx4LVeNp4oPjbDSP zfgGOguVQNoppq&>bE`2$xES}g@1Q_!^GX}1LZZVzO-|=#3>uW7cBX~lWS7WOaac$4 zOTw_!bxfiLUG7xSi~1Bz##g_tjHWqON$OQGQ+m3IYqsB_dkw6-iM@cK+EcE8tyAha z=?w?kilN*iUTbDAP?1sCQd8Q&sv%edXWl?BCYwp*nd)R@#?@x6O1towg`c1x3s`Xi zc745!eFfGo{yEfKPgbQW0Z1R@qmX3%P|v;{V9i5&1Gq#;XZRh)NUwb@B=O;X{lH+E z8Qz`WW-$zh5vFPWZ_AP40~-T{&}`otF9Jg~F0$c%)al3PCav9-KxL8sHy(e+s(a08 z@{?s5fXPk%^|{8Ce7V3<@?Ph&;M*}Kw4$IAK(q=;{d%ggB_6*t{TY1`ZrND0sn56t z$W7)P{NbV#k-a$7F{#;h3h4~Sy?1rwR1}d&SA%}l_}&*H$sp1D#2wYhrF+0TSNtWi z!Lq%-l^JWCx>H-?ZK^J*fM`$QZ3e!HH$hiIT=I$CnQ};(LFn_#U zR57zI=R^?M8!8_SP_&M$Kkk0|VIAj&t!U~K+$Aq)69OSG1`>9bG)%N-ex%?_GLz&I!Q>wJ2&t=i%Za{Po101`NWIt6Pc#d2&DOn-f$9 zyWYj@axoD_D=yh3hz=lugKBUUu9EM;8d>IKcAT_399>E|>UHxA+LyczIQv(Y5JX*H zYhD%b^5(DjP9LoBs`x}4pSdCEl>9v%=RSvH?I|3G7c>jwffcp00LQh%aWr)}U@Q&O zi-&|^P9MRM{?SNj3y|qGoCkPU#IA`mdP(RW^8j|Mol?gJN7qg@hxzpA;kj=_9es23 z$EChG%3k!(?3u5k_>Hi5EV}w~isxi||E4Bb5>SUet1t#Iy-Tijp-jg-f*)}vO2`Tv$AXrP1Z@*1-1XTQ+ zkLmvV|Fkh_#%1CbDGyV>AJeJA{Z|Qf-Gop^zuUm9<>#38(wSBz&&9Q)UYx!9Z@{*w zvJ4$6@4o~cy(`wyUgO*I!{qB`h#g#-rbv8C#Qwm9a6sA}Z0_gsbT_cgb9<<;G9ok} zbx1d*W>{uG!nWnq3@E$G{eFxa%srBGcz18YH;XOstjB~<>dxjX#dbF2XQ^|ZZioGX zCs&FkM_tZ?qrncY4}n9y(7AUDv;T1B+SUEI-l<;SJ6B$keWh2|w3ToHWYig5v67(2 zRr6H#htea-@tT6x!6`Gb&h`Y+?hb_<;X|tcAMM>6Xggus7v<>%H;y$1yWiA~`@9_; zCk8ylBtH&9!NuGuF$!}HLoR7|?7kmesJ{tUw4#M|93n=MMrX%*(q;s7*Nek%UVD94BK0_R47}?TY)-_JzxARw!ADfOR$H0RzM^ z@ok>zrfXpJaAW70q%)?}3@%dnDzGb$x0&dWb#9&x-QVbF^PmkvjX@atzVLbWULQ!I zFFT-2OAyjMziy zaWD0)1O#r8kYFEZ|6~R($Gd_Wf~bJS%AFB=d&Bm>oc7Es*$KNcPXY`!_i0reIs2NK z5wP5}NrE-ci4v{oi%-3~rc+UIEv6FvcxW8Vw9+W&aU1bGIi&o{%#HPmU26mg5j}S# zIt{y}>Y)s`v)1w{18qbU;^sSJZTNxt>93U&jikG3f0!WXlNPlp8E@x-@;rRCCsW*{ zEHT{4LWJ4a&P*`^`~g9>=1T$X4NKLrnF=RR@VG+=iuQIa0Lvz2J7R&&Xa+mnwmY-k z4Ga+A>5TgfL}8}yB0yp_{SaJGCVz~v{M{ov`cDpwK^*$9{E+(YR5)n02S%(Dq34(3 z^z_=bk@j6W0VQE!J88FSp%hoPWX*!J?mD4>R@6Y4p~ZS~XgJ)h8(ucU;Y%I8#LL@? zf{9{=q?Y|ON!d|B&POkBZiDI_FWd$3t#!QfjHHoBYMcU;o=`5PAi7bFmwp`4XR`Ol zQA7^Rk{8H*H%?d%@RARhpA}G|K@;8lEzEJ^yEu7@1^~9`hQC04Kuu2m{OBP&+#X{n z`J`(*Sxo@@iA^3$iD{thfyUdvG-0y22C4Q41)|CW_VMqViC~$4n}c|UqB3zHFx_0; zY*@fLBG!jWdWvXf!oQi2Xhi;VucXMYQhEdW9%LT$})d8iTu zAoFLy?O7a-tm)(-95`iLxh}jlzqzl(V-x1Tz!Ebw958gd=7R%*G0wGn6OYv^@AojGS)QbU;H8XV`rpDrG!vUEoyo?6nPtw+fN2SKeO~jZLQ@C;kWK9XWdZLYN1_g;2Z}FdOoL&=-yU&cAmgs zPxwa`KiO!$przf@Kb*dCWEU@wjIocB7kXO)Xkt5C{sK*wv=y=RA$(ET&t?H2dX`L4 z@Q)Zl3D4mF;W_*>jQUH%F!?%ELBU52Qv&gQqaVH-U(0N0rr)I@*9j)Sq#>WEd8DvA z4GPo4$8&8j27kXLJ&DeetJa#W?zTUhmN%a%axd55>rTc+TX4=5o$XBBIu$3VBQ0U% z^DyJnw%v<%LM6wp_SPf9KhM6|)M)HRi+_cXe#IWb1saWcu>10~=7Lq`3X*>lPYmNr zyJAV$@6rkwnz;|%xeg!7QNeGrjerxm6fi>mP#yUclJ!y^Fm9Uvs`D%6ud$-Qur^$a zpPIK}PiNoZ-OVnCq3BD!gUE5mT^xbmveD)~wN9YrRmcv{N4_yQ`5n%N?cDNIBjsV* zGIMA%C25YVeK)Cl+F^`S&)u%Wa9Ekc@MTLdbizk%g6KxQy-$xmvW_Ah1_m%Hebkz= z!lOo=8c8v-prsr7Bph#(1D2&g9R8~25QH8WX*t&6O8M6WI&=|I=TB`o?3M6ycDfb+ zdtkSjRoaJ&v8Yv}V$@?&LIccZMUjh53*V;an|I+kH$HDZ6q5I@ z0zRg;v2!&RC$sV~iis9Eg7wx0#NaB6Xb7crN&*2lcdmdI3^+JT<`T^Np1{+N(pj@| zslJ-SSVdQ8sZ)ch?P&8rD*_bsD&7YB-%MqYE3S7B6^evMRBM1s9CrCi)XxtCsLu!B zFRq)d&SEEj#|Rj4D@sS3VHj0|7Z|$63QB zV|nA&vNI-e%^BC+wU+j~W3)%f*cgwX#D!BXqsf!E;XRi6oSeUOR48bA>1A7Zi}ufG zA7rm4Vy5JiiNGMUmM?vucXk)AE;#gyVZdc@(ltESPis$NgZE||e)1T+*h10M8OrRJ zu-2*m(g+{L-k#}As_*&`#ZHmkhJ_zf31o|@GMs$pk*lL2@gKDLuL=x~1AA)z{dN2$ zBwCqL>?H&NBqC#rZXEG_GTkz_`@~+j_Q^2iT%1#LePqikCzH88La}YMyoyFRe*DgK z36T|39Ui|UXNl3iKYo|hcw;sJh$~qDZ#^;HlWr<03H+I!+f(sRwAnYE`+Z+7vq3C z3Os$KH%$5RIH0TuZMlXI7Q$n9xR$V!h`C8h3XnzDHVgqe#{nknub;kJn1h+ z3F)SzTBp2Fi7^%8at~OzE2CJs;Obkn-)6kq!AH5}GrexE5q*HU<$*(d=c&y;PR$;p z+ff#_Pn>Khe(qS9GW=XYMQ69!cMyI9e2Dt-z8?|$-9Feio$kMFjop7nUca@qM-%|? zo#-U7=%RaJA)fsTVnl1~GZbmd0dx5>1jE_CLY;ykk78cSd*u8bdws>CoO`QY+d!2c zkow(X*L{2bO*J?b7z&SblzyU~)Lj5AxNEgNlv9z<3fKhW_G*H-(1}4Dny(MY5uE zX=pxG(Mfe~SygQ=y3v-cbNt{KS6mn9*z6ah8D}1nc&h$=VZ_)qa#O|zY2)TJE-^P_bku7YoCvVCT*1}(jlC5bAlYu z9<9shC*i%g!VMXtO)h?a~a>RUqHY~B}n-frzBGyO{FG;W${o%Y=ra*ih zqNFd23}qI0H;q^tq@%FD7$#IdeTi@_W-vT-f$1&?4kT+d`WYqgl+YTrQ!8nX;7&lSd4rh-S z=gQIcDs0F*KG_*q8l?f+woTD{h85XID)bvP%ANuMu`PXOoKmyoIY#erAXYywtkX+_ z1921_!($QXm8CtC;J;0E1Bp@#iL00#X9B!-2tZ9&Tzfbe*evhMQ=!0Vcz*#g2umBViBo{7BB*-2%>%qmDt++ zXQlCmtdsv~gSw{L=c|-DS7wpTk^UXH&q;y+N80_Elczwbv&kC<_3uTg*F~yvpT171 zf3HEoTOyBtu z->Eq(8jC_5=oAI{*~5bCSomyXz3`ce%=l;Yq_1$YwdpM(*T&jDp=~oEw)^ax%_`+e zC`;QQ6jZ+!zQgD%={?yE-!Wz4JMRU!)k{9kgzwhRF@0s``%GkoJ5N4H!Q zM)0^nanEAoIasCu9l{0l7g{q=p~Ua2P!vL({YAyN=SW~PO8x~CuAE}KbKa}|C=7ZH z_t)Ab$6M$G^Gw){x)6HTsvO{qiX|zDk#md6&jmrbAnIuNq=j7tX(eu}IM4P5RR7vr z2^Y>IAVHqKL}wD;`PqxM^Arxt1?2YB2X&d60N4P}oA$eaG9!(UiWFf+6qUNswXXT3x!XR$|E0DYJ_O@Jl{p#kk zUj=4g`%K+DMx~Aexo^;;s0M4aKS%i)7x|L{xn{ORz?=eHd^%SkfGDQ8Q~fRb;KC=R-dow~ths7gVPcbi zy`XaPF=&%+-lmGoUohLgSw&oiR&?6?96jY3pjhWi_iUo1-A zpjFsqjw-Vy)oKJk!^QedS|DR>`UKgBvG0#-OaOipFVSQ8+y+x2CbMf(WB4Mp4@d5< zZaM&PYx0{~toHH%V(;qI55ccB;#`WKQ!XYpOvZmsegV4}Jx3O2Ydc3t6_Vdtz}8if zXq=yzqx~k|Tb1nUT%^3Q0>zs?ShVnQK`#)4F%;=`9Yp4k%TDLQ9qbZP2KN^lH~y8X zS$Lr!gauU`1j7}4CPSHZe)Lc=6M}M*4CNUI1th;yGDQ}h55}v~@MVI6qAV1bQ}zjj?XT1ZOYQ^|Psy|3 z5BubEZ6+a?Hp}=<)?=>hL)Y{pU=0in>UV!yK&y^%$@%%Fll6Op?oq#9uHcUnmk)C= zq-q7mIZz=$*IZt4soE3hj597(B#dz?C7{NLROt#}wQRb=EU<<_*zO3M)#vaw2n;zil{9=YWFpiR~(b4t!llvm; zTRB;I5eTNa5rJcbN}0jHBEVc^5nYN!0>@;R!SXQkf>yKBg6SbW977iPKwKd{aHf)K zmPQG@DOL(a_)s?)$35cX&@Ze;o~QN`N{{--Fj@*PHK~1xOvWXcU8Ika4n&K4kTrW681rXOlfd!$a z{ncscABK+n`tOj~>V9Dyt@k45-p$EL7yX<{D-^@*>6})7FXbm#|TxH^rk88nx zu?0AcUmPGtEaED(EJgKAX^BQqS*Bwp(FO!a0SE!P)?_d4Tw~0T&-rj33YuYJ%R^2| zz$j?id}O?mvlFjatLhFK1gHg!ptjNJ5#zS*4Ca7-IeyqN!;A~2{v zW(;#?^)wFIj^rD`_g@{3mlc*Jox;!lf8b#wE}Y#8X$= z>O2It|B-ztZLBwKuzdYUl=JZgBuQA|biyD+S7f5V?!tf8a@&`TRR+|z4fwE(kQfIOIzN+1w%fTh9C5E{b8h|X;n5c`a2Y|<{ z{;`s)A{vAy5Z2?H@LRL0)C4G8X;STNH# zG8P-Sd@v1mM&)22 zo&+tCy*y~i?>uP9Z@9_ioca7bW{KZbh*@IKgoz+4TxpE<5#N8!BbHqJoJTCV(npVJ zf#fseF$SceZvl%wXEWk+moXJS%Q054#~FhHv^p^+=0k+ixRd7SWw-_@Ki(H1k}nk^yJ2N*}Pn$j=N$|7j@WXGS700*MR_`k99+dFA`R zC{zig;KE1)8Rwx&`k#j?38U$7DF&Pc8-XYfHqt~MY}EY_Y*fp6u#wgAr@=;Eo(CKC zI+HPD2Y$m2`OlJNP-VeZLmHs`Bp=Cjhvq?}m_joJ*NrBAXE8$}El)y*>N^h^asgpX zQCn3WXR7M^$WGGKUhUzVg7*;lorwmN_A`mwR)5OQGG-a1C1!iKN{WxNXg39%> z)MLh|KwA`m2_ZXUYhiGCypShf@^~Q^NR0UH1zbE{_-L+kCzS7=RsA#FBU+w4a9yS6En@hYO+DlW3vZ z&Z335bD~6MHlG9w^==3jLWd{8LIOokf`$4d3l>7JJXSbXVDU+;khhBn2%tDu8V&X~ zXYH>Xjx@JDqYB7qT|Kou7{j^o0V%ohfzfj7L(_BXgRU!BANdW!Mle6}PILPMqUQGJ zL?ZZ(6*JUJW`D%lu&`-Yff!_6w~_moED&;^TOhY$CTD_WVO~_YYt1o6xX09-ddWT@Po0Sy-WuEr!fyMB6_6o(+rEhP-ww^GLp;)1wpr$ z)gLVftw4{t84~?672tu3@RBHAFhl@9Uo_*z%n*ff8+7U=gH-MxzYSw*>NR5|FLkLk z(#Kh&dMW!2arl`#g9|@x%z}(D8(PGf%j^;N=k`ca_{boE&fFlG2rOCtQro#jqSGZN zNywPnBoREbNuV{eNg(xmW|L?WZ_tnjC(mut&E`{^WD=MeB{1~VD$&H;Dg}I+S$cgX zi}1x0vt%7+cIm%yB};hBEt6#ReJfdfKDSIR$tJP&X}oVGOR?c6wn+_Uwndc)Ahf{K7q*0KDlKv^CSzA*(cuk7nvvV;u7=ZYW@Z5Bo)Dj1=~`vIE9}DlT`Rw zc%jfj;iq9h6kBR{5airA6<-p;<|a%t`GR#~q;u;8o-^yDkzkb#x}xz2O3)Ontk!GR zNq{W1P9kJxk&1DWaQ_AK6io8F%v16!%j{rj;@iCv)$_R%l9QV%6NlGK6$o8oswBB{ zQzgrhnJNt_vsK_bw^h88*(wG5=f>*nHDg7KPmPseUv8}~zX0&#yo(B6Za#^!2LEdk zFBI#7e~p*JZ)1FMS?0r8h%ui?N!91(ih0K~<_eDh*~{I_d?FgUasgKh6GHCI{}ozJ8y-=JEac=4*a zVlFf{S8GcWFEor`u5R@Bk-1`-`^j8N@|RDhG#|Q~sh#3dc~vl)eijs#v~%DLyBciFZ3X7>K`J&SfE{KQm^F zYHQw5b=CjA|A0zu9S|s%LZYP9WT(rZBn@H<* zhK{Y|=`i5{O%nk(Vfx;{I=m7-KeM9Gq>JIHKb7!{Z2dd3-ExZi3Kf>rz>ZXViA8>B zq$4b0HVT$=ajFwbX0L8n8R}f0dsQ@|; zlv#$*Tia)3%YneDejo`Rxl-43MT0g14U%Qza7!=n`%P%wwj2`lvSATbfVy}Fi-EOv z=V3n=Va+Hx&k@lj?d9KDW0pa$1P z6tc)846*Pdd{ql5WN9MYdLIh4^z$YZlK!F&wDbf>Vzd*xaa>@;BfFEG*EmOE4Y&=3 zzR^3|l2hQtdor}teE9`Lp4sNrQoKerKi+-6jKBR5#wa37Oz>>{t&%>E#Mx*UCH=-# zi`V*d3=bR#JD(Ax6JTP+$M3CrB{GT@&e6OALl~MTFoRC1gPX zY@y(*v8J!VFGJ+}jw&Q8jg?llRX9HIjfj+oks)%4w!|h~#qbkad1vh*TjhJeR?4Q` zpuIcM7gDf={xjcAcfrjZ|H1Tz0|qm89rKF7EuPc|5hx8HBKXGWsh@i*B=n=|J)KrgvMmo37!e?F;UPPKj28}`B%ej zZR`4&K_;K4)~Oa@HaDqzqp=l^+}nPO2eD0&{}=W2%f!2fh>Uj(7NDiDfF>F?Z;pLc zpdJ1AVq{g-E`e7q(zOyOsH6VoK1V6sEuP&6T~D2^10x}HT_mO2E}Yss4g?+5o_Fld zU8nWD^v8nIr?t-Qx{b^;COMzdpkLzNz3&u0q|D_xDjb>jMk!;4Oij1Bs|Q5zqI~GB z%;9@Q_^5Y)P}$I!q5QInSULdYs}t!W5a|L%Fc-d{6?7oqoJiwvcf?;Qz!iuFkq+z# zsy&_31a#wgXlJ94ksxQa!*L+ob>IH7q#0Pp5=uWsGX#$}nsUhD^X&=W@oGzLC-;uA zmQI9%8-LFDl!x0Cede3?x%=L&Dvy~heAT7`s!m&?-D#t4kW6FdwR{sqzrZPHfm7~Y z;FM4}p`nvpXe4(JN}wO+ci5wF)?w7UbNv#Kd6{XOdG~&2*zmvMSW@?#8}8^VQ|IqF z(GNaI$?v7hE;vcQoL{^6Juq6T1GQ8eiHF<0V+g&q`w(FDBmCN0RsOVj8yMBULF+b6 z%nvy9dGkJCt?;ZzWxxXtc6s`YaNu_Lk}N)YY$#idzZ>yb8GO+}#wlJ?c@p0oiUB%~ zwIk9>dHJ|@1S7Bq<-sY>iCmJ+gwlJksU7OHOZ`+eCn%F2G^$3lYnzh@_4^|B7WcHD zC;8D|WFcECxQ35f(J^*AV516en;0;F^SC>J&H!_kkPge=Q9}M}J}J15H|*|13@ed-VsmxQ&;xojqfzg~)E)hyRIFjxnV5rQhQoJUnV8M`_pMgInci>QvFlToe}h309K&irr02^OtpAT2 z6xKf*lp=ZjMvxQ^$bVA#|9={#ULVx?umAszsrQC4opEC3?{OwlD6X@Z6F8*6Os81B zr~kYrlnO_L2ci6!KdSIZ8p!@x_<1zHYd<-lGi8=4nQ;N0aDIt2uyNUWxVQ*^eeZq4 zYuOP0)Qea1589n;zt}e^>{N9&A~~gJIx7|B&lzh!@cj5{$M!%R)yo#!-y7;&0ae1$ zI9UiqlUk`RO61CmwA*r2xv=8l?dua-Y3VSw&1ht;?_8nn8HUA^qq?PZU&d=#N*s$} zD4AQP4Z7G@-5nowXAKYp(8Q-Qo$$(@JGTmnXeumUC3^F-_mMoWP^(z zoJ6hTo}UYLY5?q*^Zq%~3cQvC$wL%H{GH_6y15|ieu7-AC>n}LTKvqJGJ>{YA=BKr<)AFllD8}W<X~izNGNk*+L2tSt2tBn+ku@YaB`}sm%cE0ia-$2O9MQw0@HYuM@UdL=$d9qaFoc^{LN< zb%&$wV1QpYdcO6|cC6vGqVSGZeR9g;JR>}^Y}rz5t;{Hb$h{kCWhxxt_3LbwffiQt zp@udObzl&$uB2l+pw-)W0_u1$+w3bbCA!%>~eRwb-|V1YhUu? zi1)%!3hOB?=;GqzugXdFWbL^6 zad^!u*XK7^C#ToR`DA)Jnf~KH{@;HL#uw*T(+_(WSA*&4-u?LaeDvY>)%p0tKmTz( z>-~9rbas06=he+*IvAg>9$%f`UUPkI@BQ;1|Mx#9;rna*zWAlz`EzuB^y~C$^+^l% z{>S5+!RVK@GdsHa;LU#c-ybHYw+j&cU;pQylMg^N;NAbw-;?vnpBKM=|MMSz_=B74 z)5Rx$-drE`xEG$!2B)|2`JKO0`cV2%E>&vwPyPx`3Mc-`{|cal@Ba5c|M|~__#*X)zZgCtxOx$YW-uQ zy7r;ER{B_9Kl!r`2!B>Tmey*2mP;QuYBlbZt5rVyxK{p?j!OD>ZT-)(zf=9VR^sW$ zwLdE~S=O)qpS8xvMx{J!)IYA(%6+@4oUHThny_B`Sg!r~u`a-~Pd?D(THV^Le<)Wz z)@#5(w;$APX~X)hd;m7U5^&WI8$7Q4x&E<6n|x3yHU2E~q_qA)&+92f9$>clUzr3=l8E%!W6nec2(E=(F2ggG)RIH z9u$FrtN|cQp}HDf!|JMLRdwS}} z!7LcoejJoqt#YN_I)UoTjV3>9EIiazX_uST_CdAAqP5z6K+vd_q%K4-2B2C$)=kY< zr)r~7SYtF>u}T{n5;z@)s;TO&mY}Z#w#bCN2EEdyW?9uFYtn~!`hVS54=M&ps>SotE|If@QcN0R9LjSW>sS`pp$B&#jNPK#KKma%$p?y&Fs?( zgV~P*mZM&-wE|u{;8j2SOuYf+CA4fdp?oF`5=9mraMS@lmbSz0=Woj>K&WJ|wA$4K zGOO7(Z-6kyX{mY@)He*-EEg=G0cErLHRu9dfSQ)*+i}2lVSb7DMW+*fu>KXwD@J?O z66;LE3Jpt;8kLzEH^0vK&!*fyZlviUGD$Yt2J^Sn|G?j^PW`O}QO)Ty?f93q}f)@;9Xe%qzjJ9p09 z89zIRkd|&=9Qf zg-QY&6yErJ72(uMz>+QzdS6ly9PlL_p;|$DcA7~SZr^P5JLM`g1_Or$KnhjyVyFk! z5`Mwd839@^HzAX9r3?EkccmTF=mnZ3UQ z(XTptQ>qEV6MAL0iN#f0yB%?I_6A%MmLdL#Y^kEMw4`R)*S?yd&CnYZ3>?U!ZnK1Z ztku}GbPq43I$NcSIHY^(vNvjQ?(j>4!JceR0t3+MiQu&9G%rh-G@Csbt=fhU)7xy) zKAS!}4%UxoLTn)Jk)-V^JRBU>*t%e?Tir!Kb& zmADJ?3+VMZYpDPc$p<_){A#LQAJ~~I+gBrW6K3Cm-AIz5varkBbqO?dGLy*K-HoPD zMr)~JFf;g~{gBkCH)`VI;*YE@y&#IktC3w^C;W)r_)|@}RcVGFp$e;_Zfr&AMjVaa zhN#>0qwLq;=vxi! zHW0cWqO>a!4%23f@}2(dyN$z~SO+#jm=jQDsLf&4FjquueKlew=AMgKsf{dB9ef z+RxrOKbt=u4Wu-LPk)-XPMf0JTIVy2)E4RsEKI5_Dko&!s?U)IvN|z|jO%sLx!JXC zSOvCM8zmoc(-9kON$W*R3Pot;D6F*V)Y@0fAZMV@Aoe;|jQWyTs8^9C*5gfN7Yr_G zVy;%(a|w=ClTrC-p|K;I>M#xrwr&Y_++qK>c-ANZbrS(DMPQn8FVVnP3f_1E$vf%z75>wA^?JCC%DA zYgC82vJOq^hQW|=jpofdx<359g+#8+GY}h{j;|wf5_Np;bCH!S+VFZ#H(g0|@q6Yi zBJjCrm8z&RKD3NG=_?LaiMh0z)tj(o*rrGbTD6`k`|64ABKDmDotwB;*SA;G-~%0w_Xdxs{O-Hc!G5WPp0K{z z$?+gI8x8M=fo9I5Kc39ySIn*Y+>wu{mK$B&EJ08^H3V7H3^c^!d^j01`_MB*@ABW- z`QxL(1(PRdt=)ynS)@>_+i&%o{l?i@AGx}BVLqkms5gFa0Wil)ft+Xxaexdh8XTjoBmb?ZH zxmr=D;PSQZsD$er;fx0X>kUf>Wvh+mfqcZ@ByCCF^9p7NGQEPM7*W>jTcw&+M<;>D ztGb*4xLmOzD%IA=bObD(Do%QA#H!RL)SPY)p@3%Se`Scv|K7mvt?&%%%Kq4Mo}j1I zS|b_F_~d9U&ud38Ve4C(T9=?F!4!|2m)yBQHp~-sxiumrzM% zFV-qTW2Gyru8KZtz<}=>?o)aLjTJD6Vo~jA64FKVh2=PqG<y z1dbMeYE=OuA5pD360|HI18VN*ociNS$DHJ4V&>|igX-96$!$bn2wYbbDM2$wVPd`` zJe@pjv_P^D%s5qoTNOM$_NCgWLN$1+q<(j`6uxYDV#2c3@z7|k6w0Z0+ar4AXQd^C zSdS_oY+%mZ0*MqPPK@S>X|#+QjTn7GP+S8qkI^DV0mR7PK#g)I)asZe z^0g;j#idRdo%oN|5M>s>a;sGnjtHUo-xN#c1E_auj!b6VGL$>U!4yjb!bNgaF@gju zS{JP~<+gU{n8Jil%ZRrTNxXpzTCOl{#jX@$P*4o3j6)L2 zszJuA5C)?*9}Et<3sHuv=Kq(;0u9-21^`gt%Pfk<^@kgYAS?6*gt%7uBP*BPVS56= z>e?F};~lnvY@IY6(V(0tS}9v2_7an-*GCYGbAdW*kM9tm2;WkXh@`5RLyS#qI2wsw zTX16Scv~wP7!Pbh?k)A-f;re%R;*1J1D`I7R;}Bj;d*4z6lCK6#$qAsD^P7sW;zZ* z=h4`h#2l-}B*m`8Vzp`xkU}7YIvgVL{zl;a;yzf|OjMk%B?DKa%hUWqGXpvlB872+NOBFbZ2ZmmM%{PWH>dW02QwYUgV}sQ>ch%p2QPdz zwUYq&l2QWo)?h7i-9kw+v7rJUDD01QjmF^LAux0o`7!aGK!6o^m4Ekg+~PDRCQEau z9zKURQ&sKz4I4(<2%OdjBzlkQ6>GFY@Pj}~w^O|Zk=E;%{rN2w$k;{H;8j|NPfq0s zpKX8z_&PcGU^3eD>|VT0NNxze-QkI1F!Ul`(7%7*_!t);+jZs#Py5jlE<~?VoR0bTAt&G z>-x-oD5Sy~h3~dTWIz}Uwj|Znz*Z}Axq)_ze^wgHXn$FVhCrzjW6i0LrrU2<*IOlqNJrzkur*DkgQ8<&d8 zF2clJPGA&01qOk3 z=im5S?VMoOHn89%K`twU_P z4$lF9&8~(u%^26a^dk^iC3uL|#;lk!nLwJCQnRq9DFxIkP7-)eTbMhn9X)lFkt0i& z@oHw-=({ih4G2eQlpskwRpwgLifXUqx7ig)#Mrm^b*tP$P}{(y|OK| zQzcL#6N33N^q~NmN8MHr!bBhTztZMOcw!UFuqU#t%rC@M{D|chg}gBkWR;T?D#~K( z)ElzR$-?xn>Y#J0av&uH#|6BA&S`}Hk0FNrg62>orqm|m0i{MQVRUF9+6IbP*Q&-B z(A!}hR-cDTGh^@B-X!j0PxwR7PUeGIEYxm_i?RRJu4!DMf+GP|h`lHdCrhzQ6&x^1 zbhP*(f6cyCE*z6nfBcs60;fdtP`#SDUX(gPZEaXOWWS=j5$v#ZL(MjPYj;nWYom49 z7vsrQ(mmkK`c)+XM%l5nY5=ZH%Q6fASGgXr4=ovcmNlRgw>;%$!skH~U?X(|j|g~` z4T?!Fd}$HdU-zN8Eq_sR+;BuqSeL{6!(CKke1S@_Cj1Ue5kIL z&649B`2vg}rhix|o;L5W|Ia-05D{t4t`850fIFoCO1=gC#A0eQPDa-|0E zuK*0`ke14c39HqYi7m9_rNUh8ieutks$Z5NStqHJDG}+CKHU;F8?sm}Cln#j!#UAx z(850)pK2{-8_}UyV_jhThnG{=Tq||?X25{b48y`&`mCHV;F-Uu?UmXs@-oO)GAV)e zO#&j2*u+_I=&jbe2&hWF3dx?V64N5?%qGH3#Mo^}HhlOpVKHNWgW^_W7q3s1@OD$W z0TKf;qXVV4B$Wd)d1{RlX;!GmcHjxR)juLg?T9Sn1rlu1`L7lgPUSS0NWW+P1o7`1rhA&Dki zECO*^|9%+)F;|(qV5U&vk!xdh@Ytlb>VqWst@qDBWyrxbZU|(m#=^v$ zY&B^bIxq%Dz#e4bB$omJceL*ZxNNJWYY84Xn7T~|OLWRy(NH2()?h7E^1+0GBUDlp zWb>_u${6Q*sMuwO9x+)sQyXLerBcmo7DBVOKO2s@2>YN%8cSFRT;5VsK+i9@PUhEU zk4o<&cYowtO2`!tf*u&S3Oj7DsgO0{!)X_~?1)5asCG^Ahuey}htIf!D(qYIJCfI- zU#6#BDIE~mM>afkX}KdzRa>Stg10Km!Fj7ET)@19D|5uLZRpHm8w}0&8oNr{9TN5r zgN#vXrm`Z_5xHXf@;GZdLN|3~aaj|(1%DC`gwX?sH_^dvpdvvB&O#t^>!|m}r`fpr z2IWCa_*qqmOjdWy17R#mL84IDgEwQ?>yP0An40FCr`Lok829=U%Wx$~D-f$g9)wQ2 zBtH;mck&Y>4y7g~I&vSwm8pzp!eE3QF%7j~Qs(Sepa51xCH(%PR$vCldZfQ-?Uqu< z#tF|5q99o6N(J79%+vbUiFYuTh>%!8Uu?xB7VA$pumb2;)Y`3fdMq9O9Ic=}oD3X9 z3FGQ(4LYwu@AYN}_b0vSI^SVhekxtMQc1P(Zy>ly@2Jg%qf#k&p01WpNi(fPNi4X> zNUAjwRxA$RG&@-Pq(z`YE z08nk?9MqV((T_>Hbe>NR;SrLa=z;`aPJtBdsh37d0N$~hLy96&5h>Da*CHhrYDxjC zi%5wG$|D7KsMO<^MatDS<6yav+1~ApbVdf^P+ly7N%G*C1{{eDbr!QO#5WZmM|h*_ zw@fFs<8bJ3ny`hQj0=ZgCqR*vO;i5D0;RJwlxuAPE@GWfr*s-T2;yU^iK5E_b`*{k zFwE3}p$LUYnjeagG;jbzV<3mjv~`7|U~?$W^oD?8rTH%3wqo`2u_#>7{~B0u|$^$G8Mn#GRCQAR|EQ`{d9v z3=Odj9M{ycBMgPzEl<}AcDJzsTeEC;vqQt~{#prHIxbu3)P(H2I{>J*hEnyQ-EC2V zu)D)Nl^_mc+1`9K>H#U*6w55Hxr+iJ^_RpzB7+r!NS-|p@{#Kwf{wK&5g5_Wz|XKc*G!?=ODU>wW6ii^5Z-$h~fBx9X!gh9$l%*tZd z$>~I69JHc-JKReZBVNs=sslKIIiUeJySuOs(rmP)aBVc@pGT|2h=cO=$+;<;iOghi zOF&|(Vn7Cxg?WrY;?~C!*Z7!-RIx!sYzzYMDuA=eU4=PJ9)PR}*$HC5%m8l7-UBa+ z2+9Vw`D#?GR{!pE|0Xn6)U(+<8P2Xu`n}Nsd7vEo+Z^(&H|`Iv^$rK;k_+$X*$519;hn@z z_z(AsV3rSi^Zvo+wvN}&-rc!#XPbZ9=gxWUgforv`#<(I1i`)`HS|0`bE%BC+XlK^wZT*b2t~)JKxY}aI2ZO7A=wB7OX>xP+A5X4NWC) z8|Y$iDn*={WDN$5{Bcmhg0gqJ7I=WVwpWc z8FiK6rLZXhNrW#&?w$(Ay#%6Qa=f2@C`Ya~<|34lIN z`qDu|rtVAcG!g!KBO?q(kzbeI8j@T7k#>ruoGv`cW$C(;6=!oUt~-;FRpTGthq-gK z?u2D&jty#_98KF@Jw_9nG^HH*2Ut#vXzk7OXnL&C6wl?T_7CeD%ybMsmR<$AJtBN~ zxzA54`s7efcCI5K@sE5?IYQ+IL!;0Rkj&OrHay^#Lym(>bH~Z!CnHR|yQQ=`g+2VQ zj{)7;{JQ1rShTj2f|nPzmS?s+1npV*4>;kwmT4YmyRBL+Oa0jy$N^ z;(j_v%C?j1Klep-w2?8K(BBEH;dbm=@C<#AzOfsKGhhJ%2z*4zj<$1QUTA%aQ!{nV z1u{|S0F}gi?c#jmJapZ$02;@uv8(Ea1ioL^oeDL%ZAJP}OuO4WuuExbgw?AMzLIBa z#v^r&hkwV_Xv`EE;QX5$%g}(}(Tz1kzu5ZJ(E5{i32YqM1xpp~>p%|!P4@jVNd`^4 zftp=lV^!S6%t7}f=q3*OGcqLwSj$F77CPu+HjDd!Rv0%~| z)GS(yHNsI!v``GEPNj-1PX#**^j5k3M$Agb!`&;-=0m^a7^8x*=G!6J>oUY;L9v>$ zFc`mXab%nn3Kh`<&efh)PS&3O`n(K5A_Z1m=h4#1ziG9G8w|q?HuwCD=ZGN`Co%pRdmE2^Fh&DLvrXxv<<)AY9fe0zpCWgCEYJL?2yH0%5J+rk2;$q?e@_Ez`aQdVCe-q04clXMT z`^W3lNJ?H!4N@R4WoyW$f##LVCr=AhpzCL(z(6A{T^wapg5qQmOWi9a0+wc^E1V>^ z*d5Xk^_5FD)SYsbVEiydh>A2IBTXguE5nJd8qE>Lp)Qx9gq&E#QbWfQSlrXZ;5DpN z|4s|(TPs0xA08~JYg@@7vz+}1naCa>X{}H^aBEf?!{8QcZ8l+DFmeTjuvrm^cKq3H zp;DBRp{Ygaj-Kpz16fz}X6#Fq?r&UHAKep{j@*1Xx!Q0!rLHOi zUjaI?WfR9@@$?CEMsf1!pXS}t`D!4L(gU;Z;XP}^mcmDb8~F{KcApoh!jAzoNPUJ= zAA}g>Hnjjj^NJKr7_Bb*0;RAft*RKfad1~e5M0dCbPAGfXx*_SL4606h%c>CL*hm# zrgKAd-DFM0@;l_(VbKIb6(njR77bNiibM=c4VN<-<@Age$Q<46E@wrE49mF-cO`%g z=FCA#{)ZSl^AT~HlNSOPl(oy~F?dqw6A@;hu~sSdDEirK-k?ve<3Nbwue7h=t1f4* zk*qcopaLYIC=)}QNqk?k;jhJ|IZL6gq&*-u_4UBF(kTaeyU+{4uH#@FtU_g5F^Mx{mG+WQmy`l;y}aW>jT^lm3SPM-WKk#_)q&$#fi{2#Eg$e@9DcgYZN? zBxg*4W=GJLs~KUQ@KVT~9iXl_X$$4+W=WWVzBUoXR_0$N@xoKI?RK+%g8EIW9Q%tV z_BRSM%eiE?V7!tst+Q|8!z+LqPVs3|RY;~r_9&);T#gJ*>DRDTo;B+_493kMLckMU zVjS`VF|Q5)XkhbqvYOmWFgt%$5$P1fa;({>Og(oI^ zZJ}U#<`jd;3neNwa*;?UK@c$loZQi6rUE5^FZtE(^k8JVuZ=%GvaDS3`I@{B%0Wl` z`A018+F2FWOV8t973w}V{9IBOP3|dQrp~%RJj(V0a5%ht6L^^wIJQ4P^5Go z)|Ak!2$&2ftZsZ5;ll?Pu>{;5n?UEQy%%h-B3%T zq+eT&*StT^`#<|^4a5KJvsaVL1MsqeW~znm8bZ6&@lqu`a3!joaWZ@4ts0ymGL#iP*^{&fa2Q zdky7GXj9?1WH&G(ZipJ14&0wjqI@~L8cOJp=gOc_cXH^Uh+@zPEGg>(gD+fP2(yp~ zB36l-ub$cc@+ZOm(0(~Fqh}Q2BeiG1ZQdkZ`C~R6=Www@{24u3-iG=IaFQ+H^I{Q9 z1!pN8D63wq-M_nN(Xf67rv^7y9f>KiQz?tG&d6uvkNN%D<}4;}M%~~Sf?KGDr$KT| zS>HjqnQSP8S_JD&`6}e7m|O+{d?6$wbgPsLu(f)!pj&dIO0SgNtfyx2DPclJ9Zz*z zAw#sUu(dVS&=F;RCD3pPkPBxHkSwMB9lE&sFC~F~U3S*SWwT3W$ zshd<|4W;A*JZoTS8d@L|#V7@^T+IYd3+6Rr+<^SjBV4)e;cB5Ci_L14_^V^DLLrcl zqC`TPkq#%7z_y008*=rHi^o(S&ZqCfgPuy=6-kJBTZs+lwL~a(Gy>fP*>6o4KpE(C ztc$EH@Pd}E&X^ZeA?4jBL0$l0sV3HW_{L?JVd2%al3z6eOdb5uhBq1K^kU&PTqhs^ z0<+KsI+IZ@&l+G`H&&vt$nVJyfZ_}Xs1?CdL!^%FE`rCVlRBg60fpTDG(j1&p}`XO zN%2UQkc#ju3r~O{8PB8}trHfdBZY*Ygnv%T_Jhup#s?N?B@)tZH@S~?*Q}j@QTAt* z@oS_kV*opin;XJb8&@kW?Wh^UV(uv-2Ufu!9jjA7H*KXQH}6=gSuWZ?X=^enS_P3l5H{LBbP3Jdeq>6_SuBdJAhE%xc8Z}v=1-ly!Ak}}3dL9ftcuoK*de1E4Dm&d z9}xgSGWeRl&^rX~q@m>#kqR@6PD-wDp(z_um>;a1NBAHGCf~5kq%MOW>Ko~Bu{i`T zsl|;WMg+8HIvQR*2@s)CY?N`q4sjInmiWRElv?!wb+uXNiX%3smR(c_yJp?0tOFZF zBG?*o?2;j+E!%B0etC%2OaRfE*r8$q`l=OVXjMgBwoRf6!h@>9!>KBI<(QOcNeizb zjjV~zGdNd~19U?NyDT`w%G1BDKoM>6Q2Ge+oZc}XP?puNj<8wEdqe4~1cm8>&DkN? z!t5k~R7<Nb z6J~+!TORRMt6w)yoTZi88eqXPMATqa6G|Gk`0`YSHAIMj9vfMR(s3Ms zvE8m+r)5!G3H(w|niG79Khj%-XWy>Yosg%e#zC;+_|=+K zPxvME%YQ=mJk(EBld1?#TV0erRvdmH0Y(992YG=7WW1t%+Lq9-Km!N*fDPK+Er@<- zhzERNl)$DA)gF_4g%;rk?^(fvI%=J9n(KJizxG2 zJBSh3pIjfsxf%-9M%O{{mA%Xils^nc`C_|D3q$YVSL1M;PS_XOc5T<`VlYvj?NfW3 z2NxLe#2yneq$}fm0>8z+gBY!M+DHU6?bHjs>yRVQL<|knP|=Jj=C>$Mh&7c`E6$BP zJgi~KL&xU77G!o_5pTMfc2(MaMXP|8q6cDAO4vr{<_{b|dLjak$qF4XUC}Bd zqwKnLVT;0AfVaj)K>WqPa9*Q0u^k6RDTj&MFBU*BDDxZYVO}*8XeN(+V9kf;29R4D z%AsKKw3axez(=PE35ZYCAx?yw@Cu-|N70b@!4pXmXKY*`k4)#03l9~_7{N_p&(I49 zfY1QESVWq+vppeR(WLEgd4#0V=%H!6Iv%SQrl?t5jOQRpeJkVCw>n^%xYYX%M2-sj zf`8O0ZDVP{=C{ymX=tVy2Ibl4#}X_hop{`N?bI#24rw$Tf4auBSJA6!+#Ar#=DpMt z5g1I7+p;c;!`;Fmh+2BU4kx+i#C|m{^Fajjq)P|^{@@?CxFEOMZ1MIL5qs+W$)6tL z^atcGC66?ek%(L#EdJ`|XkD4%A2`hPjK7WSN|!=Ers0!gW7-&k-e3%%UM59=a3x3X z(e6>$Qb@l3*K_=`ud^+#>;w6LS=U;(6sP^~nb9ChOz8?+#1+xBcmI|`1{~f#p?!obJ zZ;;g1XsDs|g-R+f)g&bR%^gHf`(HeY9>HIst70{Ax(m~)JF4N5)7vDfI2Ab<%RBXC zhLVS+Tm&o{UHOXzsvrf1|CPEt<7k^O1k9q5yy0>#%gsRYn$%7^PauPdALiE7^=Jx0 zV1wzpF~z62@Zw4rixb013U3IRbCEPg8)sikeYFEG8d)AOs!$UH42PSt3aRHIb@FM6 z8xv`k`c0^slPshx;^jm+#^U7iOkUtXr-aHEJc;#fghLfhL@0&{0zn zFUUZ-669GZzC$(zUKR2KR7a=QDZ*($q6Z!Z$`ABDm1c(n&v+Y@-r1<=$|2HaMDtWq zxK>{X@~5;_u*&FAcOz6TW9D(LXjlF_<&aq(3qL%crFGKfqG@F=00%x%GB~s`@ILa* zE{7%WhJD9=fazF)QrY6yYKuFe$Zn%Oi5PN@<2VY{cpu|cQpxe1FfX>gWgl7aO&R)R zR^r^yDF*Oh-vGg~_^F~(9!kBWSN{htbYH&wEb@?cW^zi&7h|p$e9_iFb@hY~EaFfX zUzz$+-bd#$ET_%;hX^;e66S4HlpSb3BgW-<0F61)kHO_DS%fvhlY*&f2$l$szNw+* zQH5_x+OSDdXy7xjgX|D98aGRo$VJ5=gb$cpRb5i2UinL9tDq~SG!2`5XreM7jq|<2 zS*Qsbn4K`0wWcsaZA2)1c{i-Ep^8simH3>`6bIgxzbq^aFt*e{20$VJ=uVz1Em?%j za2qDZITKR3bfH$EGz{XHw`r>bt)!3Mcyd)P3*E!Vp+s?X+-me7dea#sHMA{)Xi*r1 zprh84jYq^B7S4h&s-j7DCB4>0FOXC(0zXi#NW<&dmfTg0iCv~Q66m5KUWW|$dW#ay zK`sM5U|6=V+>f;b+p?l6t-aEZl!zf1oH{z(uC7s8RY#77m8?;kmd-|tPe7&z_-(sf z?iu=40yoVP-(l=f0zHCF`QJ5N{i$YRB--(Ie2VoFtIz{otuF#dG9S>_?|JzSN}wZr zArB{O?*xj)ucicw&@D?KvV$Q6CArsXm+{TFPM|;ZAA94sC{lr2bRFL1rngN&r{TLO zn~Y0)Xo>j*Ka5RUh1!XFsa{qN z0<}cK!b0j~eDaN4Z~C~Uz=N}~ zQYGQ__MePPNA`N**&0JEl)j>yKY+eugemVaQg5&<(YVAT!TsEk)e~2BuMIISQjt=ozy%14p9UOsCpwI4@!TM1a z0z#LhAK60wi#Nz~YrqNhpmN9==_EB1dyicN^RN>fiulG~GmHO91!Xs&Ca4TiX*EyO zi>9Z;5QGbLZU=jic%(w@HlSWv-<2*4Lm?~&kl399nKU+C0K*Orzew>QzLxHdf&xv@ zRF{nlp9BvN=#2O5zy`=RFiyd>3X-jaXaIrlq?41N1)D;oyOpU-J!P2_q-NNTa*g37 zK+7|XSJ;d2in^dw5uGE6KLn)GF4fkqTLt&RD$_#mS3rnV9HuNgz<lA<(Cx^|#ccw)Gks(zKD+N(Ylvfgwj`& zvLonAv`yAs4T+=tW@rN`!QmqArIwzBg{#CG#0nD81Lr#ULZDrFe3kZz)vom*XXQ?Y z4?peU3C=on(``%hmDvdg*Uwut-3>h}vrz$g`)h+ySODfZ-FtUW4n@}zO2FJ|IZ)L; z%$tlOO4tR^vhLtvOywpkmw?0?`>0*kwFcahZ8Z@`Fn02%BovhUi&T=_0Yy5otdA=0 zP;kUgM*~?3x@@GwxkMXLD6>Iq$S_v;xE03=qgXS0-xq`UkUkcchzQ54dc(jTb|tNMRK#u*g$Sy1#c*3 zS_XfsgTKKeU`|(gq*VEu`R1ALY%rg5U*I|iLM(m}6K;sK6Z@O8@?Y#$aeKG&&LgE1 zUXXh*-0Ar6;luL7dU-N^u+5b}-EFI&@?`NH%XyGg&MV7RZwOeWI4$!#-nlcqb7y@1 z!8`ut&YgMw`|?jc$=lc5dQh%z>0%;IEhq&Rej$6>{=@FafYk+1ypj}NEDfNFvtD_K z^(}qkL+Eb7k@0YGi8Kt${wOS9b*$WesKyr8sta0RNdMV8R;pXpv5g6_BRZ7rU)8u8 z|CUDCt>cF1Zt-YK2a}pxl`Sr?*&?vU5rXb6CuAt8XeL%ipK5mEbE3B`>vt>kyG6h2 zpz&$0n}g4DOOv&e+UiLVYgqfl_G!(S#uko(#+FL-#1LrnTpm`6UezEIoB`|V@3PHY zbG8-I{B+VrpIuBRy~?1^cO+Eyd|b6``qe$}@@0<5Z;!}=;{RO^(p5*i#Afg}v; zq79ZuOP(Vf0ilTsCHk&;F^nzI3NY4B%qMQsh6-3^QHp=jFTy|~WQHg?Hp5_|rED2Q z#||e=asV$wGRg=$(DgFyXWK&rtN}H=W-3GiURVt+)hd{885u8+y$dI>MF&-S&2u1x z+_rs^T;(XM@XblN+GP%+$Q8(5&^-ukqb3~C9V0?rspE8sweB0Fgu>TkORd@teH6Qz z&DENrcG$YxQ#&)yf8fr>U)0#HdBkXtnPSan%~C+aTxXNbS=&}fRp*9zZ)Z3(PNvyv+BT|dZ2zcwN_S1Z@X_FsN>%aFw7tno@g_6hUN z7M+W5>b8q*p8DbV5lBWd28-ZJv20R9o8K2j(51`6+LhY}nilUYU4{e>r><;{qG%@u z5UF4bL(r*BQgEcyWV>6`t0fFntCbvaHb`qW!siU(^2aA?%erE0+rq-5dN*9#cugVF zz!GRi%;`SD@~#>`G4N7o4Q}}|^fJtJzvjP3)((#Wp}C5t+ab!SrpaDRh60;hK~^JVsPV(_*lS? zHoyMN(w`<5{Fw^2RAA5S&katE(T9umwC7bgIKQ1&Z_*#x<5cB&{U~B8hl%ak-zsP9M6dHzm;7Z6NGb!oLvIJ4H&3&N!l$>q=_ zP;W(8&_o4wMT9E04&+7WNT%JoL{$C?kwa#r)6q5j@$ju0cca3G3D?n^HAQsUH3R;` z`yu&2BjS;@q)c-P!3PO&(u&-NE{@O2L5av$r@1R|)Sa%JR8JA=Cx;3LP!m6e-Vme+ zm=Xa94KSvz`C&*Ri~gOc1kpqFp*J>K*vr4FSUCgM91TzRL)kMLs;Ylia|PzSOEnK) ztr%Z09#Xv(qOukcr9lAH%zDTGP)d`%vUd#tp`6(XFbBZy`*i@k*M_34`ly8X`i*PH_LdfvOgHkx8(uO^ppu$Op*&c({N z#Suh8)E!fsxl4!$0mlJVz^m@{4($qgrV7Y)TPJ8^+;QSHR6_bISwxg|Fk+Ug=!zD) z!3ZJghg>4HSg7Ykx1Qfws1&2qF%dAwfny}@+dncf1XvW49)Qdw5;Ev@)>TE8DWUYh~& zcyJnt-D-S;YCWAVYV`tmNm@%tbCHl8Mp1S?>aT9I(v_QXtmqAk_7$~VC1i(Ld{Q@D za-u?!K4NY-N{H!mC6jLZzz3`Q!_f|v450iQvhqpDBk|0CSPfJ|d#KE~P($|(@k{qA zDU%-iolHXV2LePkiro^j%k3XJtfibqMpjxbo=C!oWa@LIjI$Hm@<&Wisr6)U;77qK z!SW|{38-sVEMiHB*H41@^<)~0QE9=HnT4_kbxRW+p%bV?I*M+{(@7uuKBJzlq2cB0 z*b@X!O^X@HE2GFBF@jDVrwtHD{iOpS=EhoGJ7&g`UU?$>iAz!pnY#ME!E1v!)J9Ys zMChOyI3(&y9={C%P}O?BozYp{Tm z8Usa(W>IzSR1ZJYiEJs*rfUe95|HW2b*no{;Ug$u*abX@gunjc9)jc=8d$j14V=-F zsD=+EU+PvDzd{Z}%iyr#fRp=?0`6>L0TId~t#Z`EfgvhRN*F80*+P6`79Q3q2k>pk z1K)O4oT9)iJ>gvtuZ2=3qoc)fXWv&Z8iWrSFj>feHu|o}IdsK05dx>LpaIefSVI!L zu`5ZBiGOnIBLmgU(AFQ3>+?wpzY zVEV||ikI<*hpg;_`skxvS^t1H-eskacRxMJmyU)<_V(ng#>u5yALeUJ4v)xh9OwGD zHUG`Gb2ZXe7-xNS8^3x#Ut`igKBNn~jytRM>Bq-@Sk`B;H|^!7aoB!4KgeKjn1kT6 zPk-p%5^p&;>i7YN5P8$hH3A4-fMg8ax`#OZ&&8(X2lm z48~b6wa&m_1rlID988Y#6{>GPe3&2R@gQq_bN|+Hu55oYJ=C=4!=LlUapd{mn~H z@)ZbKXN4br{QVCKg|pn^UY&gU{e0o1pKJNq!;795PO0T~E zn^$tBrj2^Joo+ z5VGtKc3X`%pivGvkD(~hWY&v-zb<>c>lBi z{MT}z&xTKOqj8#J?){g00Fbd0kgEBkSKkf$IqbUK-C-Z`_|8;>XRWFI3iaZ5VcAQj|owdC)eGyD=vYCkCVF}Ueq2sP#h)5*hRV856}I#*!1O^0`Vaz*@EkBJ}^X-Q#Qt+0|8-f4_q&;(Q^@)F6uH34~kEisbMm>~qXIX~=fA-|i zKXrn>*0Cagkd|XI*{$gq8=cm!atbk^yn6*}q;+$PxqVetG)jx&P#dkjZZIt=n78fqaBH6M?fiDGIX}@$K@kPT z;ObMoym`!fuy>LT(7ItV1{)>T&RE$~82=cz(pG|OpAY+=*sl-9GhQ;iKb;)HD9YPQ zD-(e@OA2A@exo+n>+iEZcgBI7e4yua;1zO9o6g{^mun?az5P})Mu+Z=P+gLgQzUO~ zr|_i3)7blqXmxr#o(~TP+i7>#;t2AKYrwEQEh5>9_j|m| z+rEua_Lsk?-JP+$d^{bmJUNnbGArM^w?7<7=-oLJR!OiGsUZV1%0AZLY zl2;}7P7W{34~Dbv*^h$@{4T$V4Fui3KSEg>&%LB?CHH27(SG?}|MSo99egjUJN?ZK zXm(@kX>UHC&UT)XXsR^ZJ5K4(o^9Q}N0l6^Wqc z(f00S^679e^CjQ-@vPLh2keGBW2_$D8qcO<_O@FzAlt>hvwB?SbiX%Ee?|=W|Cp)%C&|Y}Cy+AfBmIGQKQsE2?zp?7MPja!%B1S}= z+90v^a6j2x)tjk|0zv$Z7l4I`Q*Wa(clI=$z_1b&yL&;HjwW*anj{S+a%$jF3+3-^AJ2!Q z*>-qJ#Zc{Og5bP4`E)Rj3g$+v+dH1C$F$=8-fVCU9X734_D*fopa=A3kH`H?ec2z( z`v<~_`npWGeJh!3tgYmzH|-tH^!Y&hz8YxI7dutm_CB_1RFKc)2cKNIVeU46YHD4Q z+$&Gm+~0o;-pl23q2Fg)ln!SRyJrzy@x%RM8MEy zSTs$Vad(n9`*bSj0*^SJj&_nCZTF6b+nmrwMel9*_6Ut{W5W%mCb93a!0*2Kba7hG zeiXVm9H4ce%WSX~Q8_pm^k@!M8|wVWrXkN}@r=Ln@I(b{72+=nj9ChBzV+dGg>ROxW4(1S@YRsf5QyI>y)IK1tWP*jN|3v!4sP zyf-eCJWo29z`On-vf<*TkFMq9gEXw;*%}cMx@W3hEy#%guKK)q>FP(4GqwCjBCD1a&(Uu&}l4cX$+w^dy3-4T)X=hIx( zp_kB;e_8G-0DAqC8(DYh&Re-uSt;FSKSI~~SglApSN%Xz>}tx*q1{x*Z%KTL)zJYa z>0Dmyr$s$eb}hbe;NLnH8AN$~s<>e25pkIEUT@wj zlktD3rfyrUZ|Ez%)OC$K!y!8!> zd}I;rM!`jeAga+}5bPu9HqZNC2?g;14heLm!AIj0$n~alLqbZA?x99(CFqp6vQZ&W z8?yy>9muVKZ&HaN7gR9av+Kt57{O_*Rb4}&j zw*K$=pzqp`3vWKP&u3@V8Nc-L>_^_!YL)qgU0Lg2c-5mi5!LQfF6Jqau1i;PwEWA^ zM+4o?mPi&BcM6I<#U!VL6E>=ER@)snC!g4(b%gZ`FWB>_#i0q5w>0TfE^T3-K6Tw1 zbyEB&PHth-eJk4e3ih~_6gM{Bg9VzC9*{23g68gRXXxyyS%1|J&7~Cw9#1G853^ds zYG<5!667|bDEjO}mr{I0JLZv0J=9)kq>@+UmFjN_dlqXUJ~nu072QaQD%r9l$5r*0 zP}6NJ;9IAoUwi*I?%llpYwusn)Ja?URmy1ulJ2aIbF--T2sG;{rYIkCT4 z=+L&IQRSj@GpAd9lu6CmDwVXLVP#54uyIf#6#K~ODJxagMe;g@sna;@>6ix{B4|3Y4e7FeOALJB`i$xdleEK-^ zV@mTDdY&edDcpwg?UQz%YkPWhza$a@uZ+$?Au=RA?j+)oWz>8JYgRURZV;K>h@L`K zpFch#=C?6B?)TxlQ68&g@7SG%J4rKnOUWvgh3UGm+8hYU@UL$ z6{u*jGhZy1-#1PFe!(gk<>e@5<=W&Vkh`qDu_ZYTT?%~=a$Z@E=22L!SI#gp2f@b! zxZ*eMzdfm}a%BOhe3K3A(FAHV;8-Wg@%t^9~aJRd`7oi4oMmFv8dhope$+6T;Q6T*|AGW#^AcmGn0bgNJgu3mtrEcB9^7H0v>U zYz|8IM;t!-p8CXCBsI1-Dv@IPV7!wY4)^v(I`yCgK6cs;lr5IQZ{KC<15*LBfk+Mr z?7@fR;)3x^=f8H6DdCU#V6)n(>Hl9fKloJA_LrL|42usa2yK1X_JD=bqBof7&0%A2@}NW`os{>V!If6l+dpAe1=V!KvQNG~nph z9!lQc=zJClgLXbJs`+7=rc~ zC9pLxm)I(Ei*ccT+Xb_O!C=lI#2M%3>;#7j{8wg_IraM@Mq{cOtt)Yr{n6y%PI7<= zHW*`aY4ps%%CV$C24>2|jvB3Cre%g2fsbFI8zGpUdxWq?gZ+7U(m$T!BHT%iCPUqX z5uTdWHWXHsrrrPa0odX=eYrlPf_HUx$2ef5#Uxh`Q}4n3-ezTsyi@(t?U@Uxv^m}9 zwB25RdVF|)c~Xmznwbe6NZE%Tmg`66vuxTf8@C)Vvw6loGu9qw6Gpd!fRc#d95xGx z4=Wgvv(KF{v)CPH>yGEDy~7#Gv76NvKk?e-3;>rcPyIPggtZ2{Rx{_&>!ho`a@|>Z zBx6bEM0R+Cd#-YSGSc$@XU$%7&}xObu0R?52n?IK$;6bH2mpAt?2@G$K#%sbmYgRB+#zU1>^$&Qj$^cM#wt}x91nI#HtH*wIc3{L|H4eSh0Y%m^}Z= zE~9HJ^z*#WhYO^TTL3f`m)^RK8oX*alk#=+nUC(u*-XuY2(6R6-NbqM9H zGu$_s11czhID1k9EtD6HG)(_3wYqo0#XKC~=T~}YzUZ;aM4%jBc5ptY{x1Q(#KyDs ztIV_9l&EM?DZFICQj7j5Kg(YPD~yv`YXLOOv?Y*otUixJjJbds?`yq5XMU0u=*r>2 zj5bD2S4j4oIo2`@?%9?eGQIqxMT8oXHXP5gywcg+h#twHdRXUX(XDn!x)N_F^mVr7 zo^9%5g{gPWTtT`8A^#s-{TFr(q4k?;ffODPYS8T>WvrK8c|M$vNPWLQNLZmg^ur|6 zJL4?~$-MVqCiiFRB~I^)h}md2)y<}L7R(;c$T;ZDxX_6}z8fzDIQ+(k@&=bpd39Hq zbgbVir)Co{zd6SVg4sjXlTIwUDJlCz$xq5m)x}T(`n_#={X^V?`#DUgkW^BH1-N1e zz+iP8D8$s$i#bA{$>*OZ8&4lUD?L5rzrAP4(}QO_PlxV%GDL+c#xjME#Tf`&@f*wv$qF`x$1Fp4_K9mmb1v07O%nhlyyjx(I5 zv(+KtOHACMwR!7L9_QR$23i7=h%E|Fx;x|p!j-?tsmaZltVakimR-dfIlz*CJE?{^ zCti(MXye63L>}Yw%M*->w6|eaaCJClyJtnHz_HDZ0if<>MVuLlMVESybzC_hH|!*^ zcaK$LLQYUP6^NMj2b|{x*P2yb?p;~bfN<@ z5UbZak0p_kKQ>{Q&qhV8&3-wAfn>tw^lEHB%eHhMO3F_hy~XUJl+`+-Zn6e}Kll|u z0fewU-d>5^h<^*Kbv_7A!W``OlInPUGXL<1F-Yl^9sLKj1Wx4YZxK zX!bUX_j~{9=l|{h@Wt={;dA*DemKqhWqX{?&w+_H_#5Pja;CM>F+S~E##+QHbd(d9|Y4x33WDjjm zWIwG=;2hagD*gRpM=2M{Rbv@~Q#5i4Xq|BTcJk$4{?ix#^haO(!M~-apa1Fqxh(6L z%C8>}rjOb8NbpV0fCZfTX)yZ>&B7!(q4tnK_2eNA@!-ll;6)7_EvJ&^>ZI!TqC%`Z zEzgecyKqs*Wz>GoNbLAzu5Z2>FCz*p zaZRmSa1g>hs1a_H;754O6mH9jeV0O>It2v!nVK?GU^G+@JSJ!@tcF9#TLoa8+sS+Gxds^g@ZliY*g_P@Z-6ReI`F%p$ckFu8kU5&q&_`$~DbIGrL& z$q778ryGc3@X*SbqhBPmYTDjz?aaNH$>*j9qqlzjHkqu(nyJLOI8yk+SOacx zTi8#gXu!@dNC>YePsa#5$M?m#@{e)wZ*H7b5N7348X9WMCC92(F`lE5PF}-gZddPW z{)R2*7wHlO=$+%_sp?m6T)(CZWjL7RxZ5DVCC`YL`A6v5s|z)mN=A?uzO=!Gsk{*) zMwg0J&U%eAcq&#`xDYB}FN<%+VTi7}nXnFB2lK;G?WV3v&NjKDOTk_^VYm~%T)0xu zFATJmp;~!3CRBa-=G7}Spc@SyP^VH|#=MK7%z+nKGid{jx@HmKdkCAW0}^jH317pC zxEuktk-Rvt<5oLRiA;&w>t~JQ$w93oS$@k%A^VNRGJrbU+}gKL|!$(Oj}Y zU_UDiCI^72<>)}v;(M3;BjXzZyhYma$K@Fr$sA%6W{i&Vdo8pq!&TnL4&79uCTWal z%IUTX1Z)`iI4uq+xg8rA9T%qMU1u#;O%H?3CZBb~RF@YZD~?MMyR}&@>O?DhErR1T zYUn5kJqKqEWw& zMjMae`^k7$Y5SYrFx^KH>D+cpFR5)5h%T1m?c{}}x$>+cUIgjZK^4o+k#sJ^7f&QGheZse81l)*scPEkM6nfRSD{79T9m=m;7>bk`t{BKr$6~$W%L9N{c>yl zb)#TmwO1nnOF3?^uMG>o|DD4^_p4&z&KPO5(x|X4CNE`JJ=bEbEAWM|#+wz+r4x3Ap&`TL!-bRrq)fB3gQ{mH+Ei+uUN|BpZW z_y6vTKl)?0)-l+B{%3#Un2Oz??p#RT&ZY=;rvv+dNkW(Or_TPT|Lu!E_?@5q&%g7< z@BTku{+qw!=g3=>a;9sYH_XWS zWyoON^vWR=8&b#IEXW2K&M3z|ihbw2UDd6dtTLZ|u!5 zVic`QtWH{w>EXkW%lmQ=ep}_KH2$vJ{aws3$Z(EVErod-IIPuH4a0>n-EME z%TPdPzeI63V1MCrnv2+9Ac zcA6ua5qGCdsrwFWyeoPaBn$I3-#)Rp^uL6ScZ!*@@kr5)X|;Cz=KLF_QZm4kO9nbw zWxe~-3XcbNb3V6`l6n{p;+9YzOC@iUK1@zZ_i+$%kb(|AmG5-M{YU50lS=26?G|4l zmA0aj7oYISG=SV~H+HK(@t$;_7o>SnMxz!)D`Jg=)|If#k?ab$ zOv!j+Z@QUUAj}I)lhxPsOOTv7C=7=10wm2X-?fm(MB-SX7yIB3|5i%eQ(X>lWoZXS zg4B`v2Ip#OwQBo$uk%{&;Z&L3r)u_E5X@J-+$-Yll!71=@2HkhpHAfdQ3>g%U&GtI zQg*W8X}R||pFZ2#Sa>>0*^+WzVNF|pry|L<%7~ql`5agX`OkN^YTwF1=vP2kC`X+0 z&{4ks%aewupP-Dy$bnqEDM)-$8tx<3-WWA7fx|7W#DyI)D0Ehm&oVf{>Hn3JRX0 zhy2x4WJOsIX6Kd0lS^m|I@P_g^Tu#?4JY!m9Hg`btxKhC`+Fis@9_>tG5CrD<;aS#l6Ht3H}3~ z5wEi3t+PnVMR;?KeBW8Mu<;62b+Fx;mmQOc8j7%tqr!KsH;yBnJzM-80>ST8B+R^> z|J8*CdM&$9Dur;V7%1a>mI`s=#WIp;<_Aj^^hTwUN~o6Kc@A7y=^My&sw7|gxh7EP^CRF6gO#`SBkSPe(UH`)v{XN`(hr7@hSzU=|M)>#o<5<{ zY6B~{OLMZ-ZH83ol7}=A6kACgJzQ15XnK?9?R1d4X2=vxHX<@+kAzGeCv$O)B}>j7 z?Wrxa(vl0ME?ky+c$q8Vv~@pbDVI9&{EHNfWtXp};27X!1Lqr}E}TU|7wxjVFycfy zUK>Y)+g>)*qG7s1t*~u_LSS#6BS$S~kRl2R0nKts2=!3YW0SJK&CE2DT)aa2#4KHw zBk<*1rz#CIF$LRU*3-r0Ry|{#Z}J*yh0Qh}4oR|3&wuTc);4;aFeA%v3s5?2!4s?w zFpG5?MIKkoK$MaVoC1^?_iAW(v@i4*YXi`4a8^pmb<=^uWCjIsC?7c-S;M2w{S=0$ z@I+O^Sv*d!ap)=<6G5&BVGEcJ(#Il5S;~|E3i!)|3$Qs5rOxRDl5!5|*@5LJ_ZAeP zA|e-02%Zj*d^meGZtZP@VQ>+ZHp2!{v?UePohccbUo@{}s`34zcA0u=Y(ZNvM{`21 zkwL~M#o{)zy1B|J7-?xlY)TLT63vY?RvX*Bi3CwB-0$pV}?M2|L8z@X9#~c6zvq$;u8V#EnT( zKN*C$GMj+DEw;C_P3rvo;P^ga*Te0Pd*fdn_IBB#+j6Rh%)OGmhH85_oAK&TjyKjr zzP!y2s1R-+jS+GoMRg_bEL4jVj6vWxgL)2cag3p~&y-|nI(u$w#fmA4w4a^P9`wds z)_FCX>V+iM=H8fMnWJ89*H!_PP4aTGII?OxXEqQ6t}SYOIJwWu*|WSOuNsLU8!X2Z zRb>$>#>?uayCr%V&W-r3zx%3%-r(JU8Evi%&X1>c2@JL|y0H zyX&qzFmobx>2R}v9hzUEX)X0>-bf7_9673xS5$J&oTZ{AX)1?KIzr~uIrpyJ84zuo z{G|i)Nx0D4_QG~(#yxfIj*IX>M2>zZFQK`>|lO+ayfT|!_R}bzt5`da>Hq<@NH>8&#?1)%0 zvk>SMvB^1cPKOI4$-)9ejz^E-dWZmZq&sVJD%_+s4JR+0e^%W_T$=adjTds7k2Vc; z)->HnTd8GZkIsP_9hpvUZ@ys3xQkGU55Q# z<)E+*IX6jeCETY21xT^hr6^#VU)BphQ@6|t%FRY{#IXFiEtkO}yEq$htlEo7B3E}cJ=k8zb_SQn5;M_%=`$1o#dv&WJ|QuGF#Uj& z^D)CH2!`iq2$>r3Dktz5vn%Q?OX^1Y%8D4JKE-P+UV+%qX{NRuG!b9yPbZ@hVWmWZ zGo*&;j>Yh}5F(ML86AyLz1#_i%C41t(=4t9hw2XZ;*EMoGu>-CL@`thykLxA@1A zQ-@^1pPhQmZQ}BplT~|&i9?$1J$uH9Y9bl##LZ&|M=hL9&Se>?s*|#|_%Prx1~pQ@ zsexj@(zW7I!A;6fr*8^UcV>3MX_}*fd6v6{HK!S-ZpPfR%o~|5PpI~uzj|P{ofedJ zBidTeWU64A2QoLr%U;jAjO{EfBE7rS>Gf{B1|@|tGm)c_#mUh?citx2_!-%*X!C|y zazXMDjmK%c7no%Te za-D`nq((q47w>fKUYl7fb1+imy&?uy)P^H_&+9Om06>vhDFPOZk9^~z6bPD7P7+2eX3rR!1;>G6@9Sgpv{6P-~2yb$@aQ(DFIo-*<Nvj4$p5l+NMuIX`W= zY13>=pM_!P(qP0JbvcV)Hr)A7&hwYJn_We}$?>a(9r%=r>k~7(=gw`lh(#NkbB|2JP#swx?OowkfX#@=67wgf1lW)6)dzWO!WmrE+NWChNiCYj`6gy zN8AElDa>MWIvBe@oX#|Js%ODk-QmNXLY(@{mqbvZ+kNBFP62B%!!yyS`O9j@luDRP`<@!FKu2KRH z@n7|s!t>R-TuG`<9Hks_6sTf3`W%rDueup95693t#p%aQ7iRsD+%Y1CuohZ6dzMDX zC3P*Ho5Ry$XJU;SFYV`cq5J$w#PI`I>zZ(lSZ=Mw3kkOY`MA%i zN-lpylzmTdWcS+MQb5|L zcismiEHn~WS*!R4ibl8CjJEv4SQmcKb29Jdb6lXOw$+>6>Rzke?ws~kd|21u(F?qm zsRH%Vc6)F_*i>_O;;$NX@k;!3BCoH+7p13%_3oUBnE47<;-`pzbsYvFfL2stnQAex zv&bg$SGY%e1ryiom1kRSj9jwCd-L4)LfA^CdO?{F z?VhEVssD10juec>Z`+u@ZCOOzr$e6v|3?_Z)jhSFGS<$Qy44ds-x-1X(p7 zlS=uA>1)H|+eW#S@WHuvH{9Q~vBSLuxh_1d{Ao!2qoxHDwh}IUm~yeW9@y6{a$HBF zkBQFu!}tpWBj20HFJd?OBA!Wy09W~^%P4YRS2oA@?2Qp+e>rmSNYD{ij?4x($QbK` zn47%^HpzU?@5!u0*;QO9@`J3oyzf^jQM0YU1ahmw?QaWN-KrRp2zYf~2A;o;FCHsW zCCgIi?UR9)BLNf>WjYW%18km$SxMK$!Y=a;x1;rw${klZzn!BO^bYB87Bax}H#&^Z zjz1u_F`WJbF5k>qCFu-Z*-+v88tf@t^&8mV-No#2k9gkA~T6>>)yO zQV#NKq4dA7E;=+E-arU)oX><7WU%Qagri}AnVHaUMCE3#6T|7*vx`s4hGj;`fLS7o zTpI@^E}dSKkwRq6R>R{f6&L5avU6uQnaPTISubAWG<{thjnq+oqN}iFy;66v%k$gE zBg5Qj4=~&?ZYAE7M&q*h8i%0LmnUWwvq;{;c1Qz*?`_-R?d{?r2W4@DLG<;s@x2T{ z_rsmmj~56$y!So0vPgK=3$QBbPb2x5Cz}Br&Se%5bjXu9J&xc&{Op6|!;j z%y~uB&s}={l18aNyeT5?gM7;{P5{<7Ij>O2ERmqWEO(cM9Lk~D63h>Ehjr@B^pH!w zZ|k(TCqBxUafjGbcL?sLp1@cf(G^gy8+niOo>3XOi_f@iKHkuKf3o+u%!u!c{mH|n z6EvF}#_LHxx1o*j#iUb+mfb$Z4yOZw`;vVwVT=6bVq&yGGaL`)O-k{zj59~cqVKqn zoVF$BcHxOm7br@g{o|0NV%t`8nF8#wNojLV863GNT9{5CBtP_VQPRkOx5ixb7jxh7 zLTzlrSyD6EE(K(o6hz`D=&jU)S$gTO{anaZ)_OZ+l7G7OD*F}qbT){jmUe+(J(P~E z$9lt}bPWAX)Ab{?AyeNbAEWf%2;0i;eDXmpaVwIsR}fU}0KLC815Do0*d8ZHN@uBG zM1|SRER70}cn)2v5Zue8Hw(q`>*)~7O3bH8qJ^2{fzW6Q+pDYS&wYn0r_|C0NqZYeC zLC*TiuvElH${-if@zel9B&GozOVtUar4?NQ&3EnMt9uQw!NbS^eOITDrErB6%bm!I zOSa6d7hx5xWN_--15e`I9V&AX>vm&AMDakv@`9 zUcmHl9&bo3IN$} zYK6l-hjkG;TOrG5`y6)I5$E&$Va3`0!)J$dabM7Lf+^9x4 z7jqeoBRBbmnCvIPYf@>>L(e)pU;E9UFgYs(WUpcxBbm;A|B^tV)L%k?q8?)RbY~1M zZle&|$_VK&HQX;Fji?U0VHdKzC}H-|wG2sKr?%f%B{Gvj_=!X97j9`R8U_x!P-!;a z!Py<#0779)@4IoyU`Kn4JhWS)yhn00Zt{-@}2CmxtKDwB=H_WyG#QO-htB7Mrb-^ zciqnvtLW6zgfz}B5$5z8=;=L1Tp11^@E<~GEZ>021pf#00flk)Y ztCQ1?0Bd!31SovK7r)E@@DGSXa7)LV?ng&QnyAl%+o@ya>;>Wt4+p*EAN1P2ZolCQ zy?~9bgK#;pQzR@?!~d6)$?;)_?_%hGrAqY%e&hcNbIbJ`0!+36YN~c-W)m(^j`%dZ zw&8TQ$=6|H9u7wR6?t=3fN{y1b1us)I5|xDg#8&FID#XBuVS>SHvMra{8b3LFh}1| z2Pq4wBMs5dA7rhsHOkGhZ>NytEPn@K^m+~2d{AOT!|k&caO}I*VC`e z$FI-ZxD);t>*7JPGCo?7cK|#o{e$%is}euE?v=SO*6AyANoASaz_GY?Nlo}Rti&e} zLY-nss_NldyXHwnIioZ*)?_`@R0g%oT&*wG*PRnb)JG9od>n~U0-`2jM50NcEy3(F znBwX$juQ&`jHTS1ipPw}#x>b=hy0||8=S*T*KjkDRrtS4IG5ROa2>H@eux%&Tg9A| z!5dgyQrv-p4S_-ew>esb;Yd;8)ry?iip+2&1B#tP2nN_!T*eT_uoW@W3y0BDVq|%q zyTKo!O&v(1Mc~$ArkB*`{lW1G2C-f?%#9CfHDjH_aS%?RQNsT(6hJkVKb+`B7o%~Y zOf)rH091(u#5`&8#rg@IKmyPVoAvuf7(Z?@YWN5L1?PEjuEFkX533Agm}ZdDqT$7 zNLdNRfP34JsYU|uaNvQ$_BPkKq@CN1UkC9LB`+wJ<= z#iG)|lt1_f{{_yvrrQrUKHSWtPuk;KI{iwwci5`b7xnxph6oeN;B58EXc zao*FB^UuOn=lK83sh@QL@;$n)3sBr_CAdyq-E8HHtD53DG5_zKgFdAE8#2!Rzumat zPd+!ozlDcUOk>h2<9hE;4NIEwF~UB~3+OP*tL=D3Qg33bB~gyWaSsXRGJj=B9W*lT zNCA|0(@0fA2!2f6WOs>+R<%bx+;$PdJYJOCxZ z59xtU=>%X3ti*VoRgOWg(>>R1x{)wid*>JzcgCZ%-&-+BQxP%r0$DaV1n#Mw4}rNF zW^q$`y8iezPc+CL5{mZbr1SiqCaBX1dLoCv>q0oUeZO%N;sS~l?>zGkoq46ad77Ds zsWC<#Tx{2u)nkRj!5vocT49R!Tmg$n1eM_c_+CNFh}#M*=>!|uD^eU1@kGjt#DQ75 zapMLq5lbnu6GG{bCxjFcNaxg&X((nJ<(q5vB{$5O1{Ugx0MUN<2oRYLQ6Lwf#@3{E z@RW(>me53JQ;Kp?jY8_pX)Ndd8I7rcG#8tJqxso|EtDJr!%yr8 zj|HvxO%A5N3lxDfVVD7YO?bOK!`%gL=5VTw(A(YNxdfEx`m;IunAuVkJVkkCVSyr` zT;M@&U+5>R0i+?g8ZeY3Y+kfe_?jCEBBSuVCKe*`lO;#W5Fs|@3>6_CTXEgIR2zGt zFH}@fyKGirba5`E^kJ>5$3K3bCL1C2)SCdNcnh!JLkdG9%2?`7eD%leI*ihz&INCc z$fYMW2P3gjPQI++v01!q2gAl-Ag6C)xHhOi*96XM{fq=VC%W+f=g<1 zdF@*zgGGFQV}$w8wM8DW@oRyySH%UJz?2>x0!%NXfn>D~03e4JL_2F@YKrgk}uN zNn}71ohC?StLFB3l*g#YeI5(qFT-bP9ESI-Gl=B$&b#s@uC;m?`5HF;-b?Y&Ft^Aj zBhAu~p}%l9uIp`F74Gpghr zOz%ptRuEFwKKnK=S}V0D!w^d8x0NClt!9Fd0s}apbJ#rcc|y&`$HzlF$$By95_ezw z>txA=kHzDr@P8+maB}|^+XjzPkD=h9t+_}ISwLVzON=2Pq^n1-?hokv<*rgaMMv;U5nayJhvuNB( zjyB%8oWtUh$~8q?W&~F6I2)@uyhe~&PI)_iD}uDZ6i@LSVdOm-uEcN&@1s70-5@Z( zKST0Al%2)o9}NA_=FJ$r@)^SV>3{FIX-iel*pcY^BL=gotcFK^!rE$I=)kA zyEsA0uElY$85eSh19jb~SS2Kwf@Dc{D+pPu=qGB<-R(Ig{B?3qc0V^0uCUk!$!i}p z2i#2d+{qQDnm%q)TJ@&@4BzKKJe0-qE?))lV0?J<=H!WI)J;Gv3Zg%jCJ+SP?HKHpXE{jsd z(|*Z)6`Nn$$&9R(`dQT>KeJ*|2>hIj{{pLsxRPa57dzg~nGJZNc#Q}cN%Au{Bc6Qz zr#|SV%mfK|`Q&psbQT*#%6EVj)e;0*(eF%fZ^s=^&oLqd9~tkD=Dlg6lrP{*PyI-k z!HvD=o&Xxn^?R;C9PrEiIrnLcAsk`6{4;eV<@QqcJ|#Ga=niIZ`ze>qsYJ9kbrf)L zQ;m4P2Q!_-zC0O68ShlHwzej)fZ zD`!CnH>ny-7!N)pT_zy9T#;5OBJkgsFu#f!^(Y2PgA=UKPVzZe1MOminWM z(yi^?jc<0gZXMj-+Sq&aaBG)aMBWqC+VGj1!TWZ4%RxcyEWnam-lhnC>PmA9madO_ zuc;sCRnR4zSSZ|#M!246-&B8d@3-R8wyG8af$ENfBKs(Xz*MikuJZw7TntfiE#uif zC6P6{sujb1Q>UcvrjQ~?yJIRb_F-NLB@#ORA;n2mgU->KdI((-cyLH1#Enru0C(20bVJv+-oMAUR#(KuwpB zC8m}8n6z|l&LibR?Pp;4EO+_>Mo2R@i6QkG6djB%;H9)6MP1=QQJ0XVsFnMe6m@OR zqv*Ewb3R3V0i)>gITp-oP!iz_z8^g3be}CqOeqilHdF`%4M4Iqm7D`D{xRtqFq%i& zEp|MSp3f(5s*sVm|FREbSRbBM3rkd<$BWf?v@5oucK983?IEd)>iSN)Ro`jGb4=tQb|U*&OTo zs@LjVyIr_g7i#n$1++s+r2Qnki@^#pp&NsFABs2q#m=d@}S;M&P;J zLG1{hLORcug%5F&lyeynV3fnr>Pt*tq`7C7apQNw^TK3$enuUMfYpWin?6Es40sVw zr^E8=gjO9G&t!7SrUd5M+|-65EBlg^0O(9#j=ERPe(B&<6j^AVXVm@$CU;C+;}Z%F zr}sZ1?F}`iXB8`lyNSuO{unct*Xj#Z{vx4)P%g{#69%N934D!>77lG6TLxTAIYKP! zR6)O%Sy7iBm2@gjuB1zkN`^%{S2$!veZ6^3P<#4RTD&3Sl0GlCQyq6*9rVS2G^QAN{_=-^`979!fBntB`PaYxtN-&i|I5Gn|Ni#RfAjDD>WBZ~fBNwo@_ec>E^rkR0D7jP7f3Fv|<1^KDe5-Os&BaW(BYP+Fn24Iya z^8n8B7a&`(L)yNd zLv#RfF~iuj<_eO!%tQ_%;6@ol?O6zsXF58CDAqwIR)l9J67SDVQ(Pn0B}x+6k~=>< zM@62z`?|YZdj}8iKib=RxQpdc;5x2Gq^ne@7|ElDk%J6eT*KB+E#VT8om)^#Na=QF zI_^G_mXbg)=MC`~yKfm+4_%cer&zZk!%hb?^d@0&#b}7!ETGDODuJc;DUOO^S}w_R-*Ef4(IC$u3S$}ssF4

S-yc7*K1a$^Q&#uC!N!Q(vM|DOh}Cph-sba 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 At^fc4 diff --git a/priv/static/adminfe/static/js/app.d898cc2b.js b/priv/static/adminfe/static/js/app.d898cc2b.js new file mode 100644 index 0000000000000000000000000000000000000000..9d60db06b8d453dac55ccddd3d021d42175b15df GIT binary patch literal 185128 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

jD6s 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ℜM&joT@kCQKrZGf-gswXcJZaSu{nA0(9RRv$U_3 zTVr7aS~Z)tXJFVgFGEC@E2iHd?9ZgR%r-lMN6=qK*bN9{sv;QnTFBh|L?fIEhb0*% zXhI(IwjGrcjfjn9{%2i32b|hgY#VITEJJc9>#e`hlKY%DJNG&zJ36{?mlm2{dz$CA z=s8e+@!>b=RC4^WInqf02j6lES28jar2XK)IaRDkOPS91W~a@A$}j3)HN7u?F}pGH zO3s>X@1wcJU#3Jf8#B7Bg}XcaWt1wGtT-4snST8+jUzN9Ka%jfjj;aiTeG7u6?f`{ zpmuzM28}!501=#K>v@^#S_uhYeDLmE?(kADTV5{)sbUh-=<$tP)tXkcX|em2_yOaI z4hRtvdCSD)&3jwp@x#e(%kM@r{=QAqI)sbQT&h@D;6F;O9|`3|2?*aPgZui7W#m zoF7^ZBwqVT!I+I*5vlx}B1f4!`X`zC3aDe)$K4nZ7zY*f!t-3C)r`l1;5}dd~?lTK6;8rext1$4E@qRQ$bi6#@0 zbORIp*ghHZiLsQXvJpPHTi)jY6jQ!!E}5epk5wPV53HW^FRsEDcl2bR+b3~ew?=jnFOpMBJjn23 zjM`+p-ONYOOXThrKFTieII+v#xYwzsx*ycvY0q5%zqDCmnc0`1&ccLn5-UX++FwE25|JSTqy=bU(Fv$MY2jE$xd)K`V0{^RagbS zB%H>9l2!EJimsnxrDI4>DtVc2TjBlRw)#6&8V0ZZVk;LlnLILJXu^(FL@o2=+mmnA zT9{!UI)~_w`hKr{#b5NyED07-N2h!?zbQgifryugDEBZ-A$O+qezdBKCy(&6C3BXi zF1ld&F64u=a#cpD0lFB*x6-)ih9i7>euNK~euNL*tG4xRY-sL+edw=kcPv3vDU~2g z`m(Qj+fWC1Jq`3If%nAVjNdU+L+&}Q~w=Sau zS4B4SZ;XG=CCO{SaUgxuh<5Ba_UMQ0*d3d{h2Pk>L~)tFkhIv!-f=NNjcl=3SZb^hnM6ZRi5&!Tx?#Sn#fP{+CxK7F z?~trt3mAJfbauIljMfPP$;N8g(IRHhQ;8qS#?!=XSDNqGFd?{BIT;<2NuEDyOQ8;MpHo)(% z6NA@ifVq>R9mvt)>eO6-Znmls_+NvrX9p8_?xxF$3#cIA9L5A>{v*sHW`c`F2y_+{ z;)jygwi3SaTP1SvY#OSF8o*3jTo_=_4Pq{uY-N)d zR+{I>_cLsS^tAbT0XYhuwL4DK#Tyv#RNS>#Svx>_QM|lI`X7zg)?8nN(%H zV=uTnv>D}o9wUdB$CWJ#8J|w{ZTB*b0fXo2|}m4}?&O5C*= zgjGU@pq@8{%x6MU1?{D1#t*{#9Z`dQ_+b>R+Y&qan@rdsZ`Le6=$=K9giZEuPTdap zA&cVI0KesIUI|;qi^Lrc_^S+1 z#6JVypi5+ih;&SPRDy0T^H)G|2~rAoXZ)2#`pDn89H~2%XW(^EzX0;=4Iqz^t9>w-Q?=6>L#tc z(1xN+)!~qib1=)XqMMmz;b88EyRsexX4xt8nh75Pa}T5UHCnDXbUDt*`aTYBI9HA2 zx4a4F=VdTY1DGGe1n>EqgIVGDnxJm}HJG2VRA{7TPN-yW9eu?hi*D;&j?dw}7J3$| z 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 adeO6AmhXr=_a5B&@$OxG9j!A7rvC$uV~I8Z literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-88c9.e3583744.js.map b/priv/static/adminfe/static/js/chunk-88c9.e3583744.js.map new file mode 100644 index 0000000000000000000000000000000000000000..20e503d0c633b4e7eda94948db6a3f78d548fc31 GIT binary patch literal 92387 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 literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-cf57.3e45f57f.js b/priv/static/adminfe/static/js/chunk-cf57.3e45f57f.js new file mode 100644 index 0000000000000000000000000000000000000000..2b4fd918f45d545b6ff3ab7f795810df2c9a5ae2 GIT binary patch literal 29728 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

sk|UiM-x(gS+*xuxr`@1!XWV6<-bJY7n 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 P2lwv%f?|gBrt|*+`MzuY diff --git a/priv/static/adminfe/static/js/chunk-cf57.42b96339.js.map b/priv/static/adminfe/static/js/chunk-cf57.42b96339.js.map deleted file mode 100644 index 7471835b947c8cf23abd8484aa4f9b9e239cb3f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88026 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 R+tCj{ZQa3V&^nV~`ajqih{^x} diff --git a/priv/static/adminfe/static/js/chunk-e5cf.501d7902.js.map b/priv/static/adminfe/static/js/chunk-e5cf.501d7902.js.map deleted file mode 100644 index 60676bfe719200acd489a5411c786e4e973f27b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92386 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 Oyz2LpYg^Z@efj?>pmQSt diff --git a/priv/static/adminfe/static/js/runtime.cb26bbd1.js b/priv/static/adminfe/static/js/runtime.cb26bbd1.js new file mode 100644 index 0000000000000000000000000000000000000000..7180cc6e341ee1fa248750bafa195086b5fd0b4a GIT binary patch literal 3969 zcmai1TW{kw7JlDf;cx*%gc(NiO}>mUm=5M)2ko}l>AtMjC}`?%q#1>DDXM8|`@i?l zx+YDgKoFDS?K`*coO7cpEnRMO0QA(3M>^0rGdB25*pX$DnMCixJrnp7?OBdL(>=?Q zkQK>pzs=qlUV#4WvTZh*P??xrwrAB&?#JVTAFDD8`~+{H*RM&q^_SaGu1A9Yc=!U+ z@uM})xW^;#Oq4%9=%1`Pf_0BvilPVvvvfQTU}yJ05LpmO(2z6Vu&(ngJS*~0_ z1G=@~Dyv88ihzsbv3Lv=%g^T>;=nDJPF|dJ;sVo%Prp&^of<{zR$ZcYde3Zf6Ec}Z zTlvPd`=sCJ6($mg(r&|>B&l`+br9h8h+Zs?6fciOE+Npjw=ALz5)&9+;t5m^ZmA)| z<*NAPbiqeXw$d)YhfR24)sva>%I}0Q-e|cBECQs>MSjfT_oK0{-1<9R;y)#)e4|;h zxrtb_xH(-et-`<`x@z6EXPIOD*r4`!;Wf~GyBH2hi^RKyp zKN^ouL}r!#dK;!IMK%#@rqOIEhSP-_PUlM)Zk{W37;Ij}huLttlIy`Vn!#{7J*?$m zRjNfin6BcbU%gzR4kSo4JdDsg@ADFZPG-$q?s<5}8$uhmAP z`67k6>hG!bN76K0E1358#A*#s@HTjA1(TUvLJFw97Eh{{(--$&EkL5xJY3CF)$OlM zLDnk}B0Y%iduieANej zkYUKHJ@x0`IcM`jrj^e=4hHV^X zS-ORygjVR6na9$TL%+jocbeJ#g>DBIB({D?VfOBXcxInc+WhEH0fNg+*b-bqDyME& zgbD6*kEvV|O+#k5mgBMDxMSen+GvT);TI_$KqK@9!(7m~iH|X~y>Pj_`%>PK$!i=5 zk$_09=PgI7^+C)ReqM9rY8j3(@0T z)f@@4#cCGM`+FLWjMu4%7R&ygh9jk#O(Pli`x}m&!5ouCj9goDBvP+BM6$=-aO6@# zyjsU-$4p_i7q((sE*jGD3~lj*q>{k3G$bn+?Oes zF1tuZhQJ{8oQE-ueDIcFaxF1v$)^55k)vOYcm(!BxPK$mH^>08j(An`k7cS0eaRda zxq+gWYe@ZO@^lnpbyTx0dVVWhrwvT}!O7#^kS16NtEp)tE=VHL6y`p*S~lwxrg~cO z1oDJCL{|+qwFdWfu*T~QzfS=FOJpg-)7~mry80@_a1-DVQ%zG^r=W5TZ9(nV*a^&ewCPO(}5n>$OPlD|Kt5j{UL97mo(sN<_t8tI`!9~!qAmpf$kVV?TM;z>f);a2v*f&v^gu^# zY5q*wx81e3o*E+r|Ce8Bp95mDR3UOy<*VXDeZC^R+K` zQ{g!YL5cWMOjE}sXrveqGLi}j&N%7gb#|3f2Y`X-_?{KmWz_jaog?LnO2+DZR*xck zCbc)fMLRgK?t-4VKr3)^yypU!J)_8Y`wq?d@#EI%ItqqAI;D1Q)9AInPd<~>t9H>; zx>pGRlmvzGwIC@l?vVu@e~L~;phxXuSr*TO3MfVt^I>%EI;zgKLSwu&BQ~f6v;s_J iM{H231lNK}-m{1K<rkL|_{>xb{2CK#3^>TRNl?~Y>vsd$*>l3Ndj|bPxhttt!KxVvZ-gjY} zV5z*|oX5v}M404=?TdS3N;p#(7^CrGJR=gQwCF;78Rx$9sIs#vQTgBEW&{Lg6>aMqrE4+~`jVphu0HXE4MY8u- g#R;Q8w<2x)+v)lJ_hFc8g+1-2ai`d7K8xr5F9H^VjsO4v diff --git a/priv/static/adminfe/static/js/runtime.fa19e5d1.js b/priv/static/adminfe/static/js/runtime.fa19e5d1.js deleted file mode 100644 index b905e42e19aa329c594697f783983b87151c7707..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3969 zcmai1ZExc?68?U_!r=ji2s4ai$(CPMSZo*j;TG++xb1zpoKetxiL|SbE=4s>ZU6TU z^=faEEs$7z=gc#lXJ&3xt+^|V4kSMI?THRF^o$LDV|HQ*Co0qT;f@&iL_1QzXTBqO z7Lqc%-)-|Zik4D8xO|(>W|(K{KHri0p6{m9k{;?R4}1qsz|CkDZvEkQQs{}nKkh$E z?&!f9XWa8a(wtR4KIxyVIY{fCDQ9IF7-I2s8pwOQ%MASB<^(aF3J`T$_SfT*R(YXZ zfCId>($!W^SR(;theP=sFjAaO_aFx>IS=|mXHZuX4f5$XtUptOO2e$n*uCBno85$j zXVI3was4{(*LlE9=0MwRc#~!Iy#WjYSRUcCg%+dLp)9xz^zAK)Fp-%G6s=$ffCEcf zk>$AoK0BV_lB2D)D<0)0Jd^sW$2|Ch63QE`P=N&jad(h!Q~CSBSXXWRnJ)7~*|FGY zQf_V{(oJrT=W`F3^qU&gUB8z&GPV_N_uPnjp+TnQ(*$1UV^PUq&{-2Vz7m@SN5AiMl6ZzFnjKO4#~<&|2E~y8 z8Dxma#}DrPW&eNqzrMTdUtxomi;%D6Dni#Fp?DoHlLe?Tj5lbZ1zV_f8js^GY)B*v zu}}AMSl{A@gb3G4&d2dot>u-xojfhTXwH-p%WyuNBh+&K()!i{i0@gM1`%PX6xh8e<4*bZMB#G)x*Ttu=O}7NEG68ufIlsbdy^9$U1s{B+`ANbjQ` z{MG<{4~G@{Ve@|** z5t9*LCp|~1^`0dQ-)}i`wTy&{LetYsQvdzH5$5(lFsn09SS69Y-$tA_^C5 zaij-2n;%Lbp8BUeeN_7NZD?l^J@ z47*yVVB|q=AMub(xa6F(o+Ce3=nUy0(B2sB@X-v;>07PG)@4a}DVhDbeKSGv@+0?Y z3WUqSlYt??Nj>L*PXiykMG#yoa9Xr!2QYB-s~!)6z2NTOaPwftiV8(g0g z2T5+g@VRlR-%KGUA!J7_+rrE5l^f8&M;08t+#A$63nDEwZOj=+B$~^_`&Q3p17K{V z6;B{n++l`nu*)^5&x17_r|4rQ;g$lwigL-k@mHJHr98KY=1U|Et7?agh_c2p? znoayHGELC|FRs%`PN)8ljyH{)yy0Ee3D+`bpy8=we;fb?Px%$m9YKH|t4oKzM!Z#C zg4Xj!psK-e1X<#t{_~c=%?W=ijYAun!Np?)`c?H^qG?{b9G>#%xwuyWX0B3lmV2M+kf2M{c}>8+H&~=WCP$D Y|NYPRSy#nT#iF%bh=_i!=p#G)3G0m)X8-^I From f6dc33615bb6a27cd0a963bb8a610bb30bd6d619 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 31 Mar 2020 14:29:43 -0500 Subject: [PATCH 166/581] Add imagemagick to Docker image to fix broken mogrify plugin --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 4f7f12716..b21f86fcd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,7 +33,7 @@ ARG DATA=/var/lib/pleroma RUN echo "http://nl.alpinelinux.org/alpine/latest-stable/community" >> /etc/apk/repositories &&\ apk update &&\ - apk add ncurses postgresql-client &&\ + apk add imagemagick ncurses postgresql-client &&\ adduser --system --shell /bin/false --home ${HOME} pleroma &&\ mkdir -p ${DATA}/uploads &&\ mkdir -p ${DATA}/static &&\ From 2553400a662de7170dd56ee0950a6c1bb1513e45 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Sun, 29 Mar 2020 22:01:49 +0200 Subject: [PATCH 167/581] Initial failing test statement against funkwhale channels --- .../mastodon_api/views/account_view_test.exs | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index 0d1c3ecb3..8d00e3c21 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -5,13 +5,19 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do use Pleroma.DataCase - import Pleroma.Factory - alias Pleroma.User alias Pleroma.UserRelationship alias Pleroma.Web.CommonAPI alias Pleroma.Web.MastodonAPI.AccountView + import Pleroma.Factory + import Tesla.Mock + + setup do + mock(fn env -> apply(HttpRequestMock, :request, [env]) end) + :ok + end + test "Represent a user account" do source_data = %{ "tag" => [ @@ -164,6 +170,17 @@ test "Represent a Service(bot) account" do assert expected == AccountView.render("show.json", %{user: user}) end + test "Represent a Funkwhale channel" do + {:ok, user} = + User.get_or_fetch_by_ap_id( + "https://channels.tests.funkwhale.audio/federation/actors/compositions" + ) + + assert represented = AccountView.render("show.json", %{user: user}) + assert represented.acct == "compositions@channels.tests.funkwhale.audio" + assert represented.url == "https://channels.tests.funkwhale.audio/channels/compositions" + end + test "Represent a deactivated user for an admin" do admin = insert(:user, is_admin: true) deactivated_user = insert(:user, deactivated: true) From b30fb1f3bbf8fb8e49cc5276225dc09771c79477 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Sun, 29 Mar 2020 22:30:50 +0200 Subject: [PATCH 168/581] User: Fix use of source_data in profile_url/1 --- lib/pleroma/user.ex | 5 +++-- test/web/mastodon_api/views/account_view_test.exs | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index d9aa54057..ca0bfca11 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -305,7 +305,8 @@ def banner_url(user, options \\ []) do end end - def profile_url(%User{source_data: %{"url" => url}}), do: url + def profile_url(%User{uri: url}) when url != nil, do: url + def profile_url(%User{source_data: %{"url" => url}}) when is_binary(url), do: url def profile_url(%User{ap_id: ap_id}), do: ap_id def profile_url(_), do: nil @@ -314,7 +315,7 @@ def ap_id(%User{nickname: nickname}), do: "#{Web.base_url()}/users/#{nickname}" def ap_followers(%User{follower_address: fa}) when is_binary(fa), do: fa def ap_followers(%User{} = user), do: "#{ap_id(user)}/followers" - @spec ap_following(User.t()) :: Sring.t() + @spec ap_following(User.t()) :: String.t() def ap_following(%User{following_address: fa}) when is_binary(fa), do: fa def ap_following(%User{} = user), do: "#{ap_id(user)}/following" diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index 8d00e3c21..ef3f3eff1 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -178,7 +178,9 @@ test "Represent a Funkwhale channel" do assert represented = AccountView.render("show.json", %{user: user}) assert represented.acct == "compositions@channels.tests.funkwhale.audio" - assert represented.url == "https://channels.tests.funkwhale.audio/channels/compositions" + # assert represented.url == "https://channels.tests.funkwhale.audio/channels/compositions" + assert represented.url == + "https://channels.tests.funkwhale.audio/federation/actors/compositions" end test "Represent a deactivated user for an admin" do From 185520d1b4d3fdf8ecde7814faec92bbb531ce59 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Mon, 30 Mar 2020 02:01:09 +0200 Subject: [PATCH 169/581] Provide known-good user.uri, remove User.profile_url/1 --- lib/pleroma/user.ex | 5 ----- lib/pleroma/web/activity_pub/activity_pub.ex | 13 +++++++++++++ lib/pleroma/web/mastodon_api/views/account_view.ex | 4 ++-- lib/pleroma/web/metadata/opengraph.ex | 2 +- .../static_fe/static_fe/_user_card.html.eex | 2 +- .../templates/static_fe/static_fe/profile.html.eex | 2 +- test/web/mastodon_api/views/account_view_test.exs | 4 +--- 7 files changed, 19 insertions(+), 13 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index ca0bfca11..ff828aa17 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -305,11 +305,6 @@ def banner_url(user, options \\ []) do end end - def profile_url(%User{uri: url}) when url != nil, do: url - def profile_url(%User{source_data: %{"url" => url}}) when is_binary(url), do: url - def profile_url(%User{ap_id: ap_id}), do: ap_id - def profile_url(_), do: nil - def ap_id(%User{nickname: nickname}), do: "#{Web.base_url()}/users/#{nickname}" def ap_followers(%User{follower_address: fa}) when is_binary(fa), do: fa diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 9c0f5d771..53b6ad654 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1379,6 +1379,18 @@ def upload(file, opts \\ []) do end end + @spec get_actor_url(any()) :: binary() | nil + defp get_actor_url(url) when is_binary(url), do: url + defp get_actor_url(%{"href" => href}) when is_binary(href), do: href + + defp get_actor_url(url) when is_list(url) do + url + |> List.first() + |> get_actor_url() + end + + defp get_actor_url(_url), do: nil + defp object_to_user_data(data) do avatar = data["icon"]["url"] && @@ -1408,6 +1420,7 @@ defp object_to_user_data(data) do user_data = %{ ap_id: data["id"], + uri: get_actor_url(data["url"]), ap_enabled: true, source_data: data, banner: banner, diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 0efcabc01..c482bba64 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -43,7 +43,7 @@ def render("mention.json", %{user: user}) do id: to_string(user.id), acct: user.nickname, username: username_from_nickname(user.nickname), - url: User.profile_url(user) + url: user.uri || user.ap_id } end @@ -207,7 +207,7 @@ defp do_render("show.json", %{user: user} = opts) do following_count: following_count, statuses_count: user.note_count, note: user.bio || "", - url: User.profile_url(user), + url: user.uri || user.ap_id, avatar: image, avatar_static: image, header: header, diff --git a/lib/pleroma/web/metadata/opengraph.ex b/lib/pleroma/web/metadata/opengraph.ex index 21446ac77..68c871e71 100644 --- a/lib/pleroma/web/metadata/opengraph.ex +++ b/lib/pleroma/web/metadata/opengraph.ex @@ -68,7 +68,7 @@ def build_tags(%{user: user}) do property: "og:title", content: Utils.user_name_string(user) ], []}, - {:meta, [property: "og:url", content: User.profile_url(user)], []}, + {:meta, [property: "og:url", content: user.uri || user.ap_id], []}, {:meta, [property: "og:description", content: truncated_bio], []}, {:meta, [property: "og:type", content: "website"], []}, {:meta, [property: "og:image", content: Utils.attachment_url(User.avatar_url(user))], []}, diff --git a/lib/pleroma/web/templates/static_fe/static_fe/_user_card.html.eex b/lib/pleroma/web/templates/static_fe/static_fe/_user_card.html.eex index c7789f9ac..2a7582d45 100644 --- a/lib/pleroma/web/templates/static_fe/static_fe/_user_card.html.eex +++ b/lib/pleroma/web/templates/static_fe/static_fe/_user_card.html.eex @@ -1,5 +1,5 @@

- +
diff --git a/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex b/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex index 94063c92d..e7d2aecad 100644 --- a/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex +++ b/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex @@ -8,7 +8,7 @@ <%= raw Formatter.emojify(@user.name, emoji_for_user(@user)) %> | - <%= link "@#{@user.nickname}@#{Endpoint.host()}", to: User.profile_url(@user) %> + <%= link "@#{@user.nickname}@#{Endpoint.host()}", to: (@user.uri || @user.ap_id) %>

<%= raw @user.bio %>

diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index ef3f3eff1..8d00e3c21 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -178,9 +178,7 @@ test "Represent a Funkwhale channel" do assert represented = AccountView.render("show.json", %{user: user}) assert represented.acct == "compositions@channels.tests.funkwhale.audio" - # assert represented.url == "https://channels.tests.funkwhale.audio/channels/compositions" - assert represented.url == - "https://channels.tests.funkwhale.audio/federation/actors/compositions" + assert represented.url == "https://channels.tests.funkwhale.audio/channels/compositions" end test "Represent a deactivated user for an admin" do From d3cd3b96bff4c8ba205d4699eb8cf9d1b6fd5a7d Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 31 Mar 2020 17:28:41 -0500 Subject: [PATCH 170/581] Remove problematic --cache-from argument --- .gitlab-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1b7c03ebb..e4bd8d282 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -288,7 +288,7 @@ docker: - export CI_VCS_REF=$CI_COMMIT_SHORT_SHA allow_failure: true script: - - docker build --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST . + - docker build --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST . - docker push $IMAGE_TAG - docker push $IMAGE_TAG_SLUG - docker push $IMAGE_TAG_LATEST @@ -306,7 +306,7 @@ docker-stable: before_script: *before-docker allow_failure: true script: - - docker build --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST_STABLE . + - docker build --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST_STABLE . - docker push $IMAGE_TAG - docker push $IMAGE_TAG_SLUG - docker push $IMAGE_TAG_LATEST_STABLE @@ -324,7 +324,7 @@ docker-release: before_script: *before-docker allow_failure: true script: - - docker build --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG . + - docker build --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG . - docker push $IMAGE_TAG - docker push $IMAGE_TAG_SLUG tags: From c2715ed77269bea1eb70d0d5e4b00e7d86eed854 Mon Sep 17 00:00:00 2001 From: jp Date: Tue, 31 Mar 2020 21:31:23 -0400 Subject: [PATCH 171/581] add imagemagick and update inherited container to alpine:3.11 --- .gitlab-ci.yml | 7 ++++--- Dockerfile | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e4bd8d282..6785c05f9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -288,7 +288,7 @@ docker: - export CI_VCS_REF=$CI_COMMIT_SHORT_SHA allow_failure: true script: - - docker build --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST . + - docker build --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST . - docker push $IMAGE_TAG - docker push $IMAGE_TAG_SLUG - docker push $IMAGE_TAG_LATEST @@ -296,6 +296,7 @@ docker: - dind only: - develop@pleroma/pleroma + - /^ops/.*$/@jp/pleroma docker-stable: stage: docker @@ -306,7 +307,7 @@ docker-stable: before_script: *before-docker allow_failure: true script: - - docker build --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST_STABLE . + - docker build --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST_STABLE . - docker push $IMAGE_TAG - docker push $IMAGE_TAG_SLUG - docker push $IMAGE_TAG_LATEST_STABLE @@ -324,7 +325,7 @@ docker-release: before_script: *before-docker allow_failure: true script: - - docker build --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG . + - docker build --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG . - docker push $IMAGE_TAG - docker push $IMAGE_TAG_SLUG tags: diff --git a/Dockerfile b/Dockerfile index b21f86fcd..29931a5e3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,7 @@ RUN apk add git gcc g++ musl-dev make &&\ mkdir release &&\ mix release --path release -FROM alpine:3.9 +FROM alpine:3.11 ARG BUILD_DATE ARG VCS_REF From bcaaba4660c7f2f31756bbd64ed93fcd8e0b1d85 Mon Sep 17 00:00:00 2001 From: jp Date: Tue, 31 Mar 2020 22:16:36 -0400 Subject: [PATCH 172/581] remove testing `only:` in docker build --- .gitlab-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6785c05f9..1b7c03ebb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -296,7 +296,6 @@ docker: - dind only: - develop@pleroma/pleroma - - /^ops/.*$/@jp/pleroma docker-stable: stage: docker From 94ddbe4098e167f9537d168261a6cc76fa17508b Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 1 Apr 2020 09:55:05 +0300 Subject: [PATCH 173/581] restrict remote users from indexing --- lib/pleroma/web/metadata.ex | 7 +++++- lib/pleroma/web/metadata/restrict_indexing.ex | 25 +++++++++++++++++++ test/web/metadata/metadata_test.exs | 25 +++++++++++++++++++ test/web/metadata/restrict_indexing_test.exs | 21 ++++++++++++++++ 4 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 lib/pleroma/web/metadata/restrict_indexing.ex create mode 100644 test/web/metadata/metadata_test.exs create mode 100644 test/web/metadata/restrict_indexing_test.exs diff --git a/lib/pleroma/web/metadata.ex b/lib/pleroma/web/metadata.ex index c9aac27dc..a9f70c43e 100644 --- a/lib/pleroma/web/metadata.ex +++ b/lib/pleroma/web/metadata.ex @@ -6,7 +6,12 @@ defmodule Pleroma.Web.Metadata do alias Phoenix.HTML def build_tags(params) do - Enum.reduce(Pleroma.Config.get([__MODULE__, :providers], []), "", fn parser, acc -> + providers = [ + Pleroma.Web.Metadata.Providers.RestrictIndexing + | Pleroma.Config.get([__MODULE__, :providers], []) + ] + + Enum.reduce(providers, "", fn parser, acc -> rendered_html = params |> parser.build_tags() diff --git a/lib/pleroma/web/metadata/restrict_indexing.ex b/lib/pleroma/web/metadata/restrict_indexing.ex new file mode 100644 index 000000000..f15607896 --- /dev/null +++ b/lib/pleroma/web/metadata/restrict_indexing.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.Metadata.Providers.RestrictIndexing do + @behaviour Pleroma.Web.Metadata.Providers.Provider + + @moduledoc """ + Restricts indexing of remote users. + """ + + @impl true + def build_tags(%{user: %{local: false}}) do + [ + {:meta, + [ + name: "robots", + content: "noindex, noarchive" + ], []} + ] + end + + @impl true + def build_tags(%{user: %{local: true}}), do: [] +end diff --git a/test/web/metadata/metadata_test.exs b/test/web/metadata/metadata_test.exs new file mode 100644 index 000000000..3f8b29e58 --- /dev/null +++ b/test/web/metadata/metadata_test.exs @@ -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.MetadataTest do + use Pleroma.DataCase, async: true + + import Pleroma.Factory + + describe "restrict indexing remote users" do + test "for remote user" do + user = insert(:user, local: false) + + assert Pleroma.Web.Metadata.build_tags(%{user: user}) =~ + "" + end + + test "for local user" do + user = insert(:user) + + refute Pleroma.Web.Metadata.build_tags(%{user: user}) =~ + "" + end + end +end diff --git a/test/web/metadata/restrict_indexing_test.exs b/test/web/metadata/restrict_indexing_test.exs new file mode 100644 index 000000000..aad0bac42 --- /dev/null +++ b/test/web/metadata/restrict_indexing_test.exs @@ -0,0 +1,21 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.Metadata.Providers.RestrictIndexingTest do + use ExUnit.Case, async: true + + describe "build_tags/1" do + test "for remote user" do + assert Pleroma.Web.Metadata.Providers.RestrictIndexing.build_tags(%{ + user: %Pleroma.User{local: false} + }) == [{:meta, [name: "robots", content: "noindex, noarchive"], []}] + end + + test "for local user" do + assert Pleroma.Web.Metadata.Providers.RestrictIndexing.build_tags(%{ + user: %Pleroma.User{local: true} + }) == [] + end + end +end From 037b49c415060b4c7ad5a570da80857b4d2c43f1 Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 1 Apr 2020 16:10:17 +0200 Subject: [PATCH 174/581] Validators: Correct ObjectID filename --- .../object_validators/types/{object.ex => object_id.ex} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename lib/pleroma/web/activity_pub/object_validators/types/{object.ex => object_id.ex} (100%) diff --git a/lib/pleroma/web/activity_pub/object_validators/types/object.ex b/lib/pleroma/web/activity_pub/object_validators/types/object_id.ex similarity index 100% rename from lib/pleroma/web/activity_pub/object_validators/types/object.ex rename to lib/pleroma/web/activity_pub/object_validators/types/object_id.ex From 2f2bd7fe72f474b7177c751a2dc3af716622ba91 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Wed, 1 Apr 2020 19:49:09 +0300 Subject: [PATCH 175/581] Ability to control the output of account/pleroma/relationship in statuses in order to improve the rendering performance. See `[:extensions, output_relationships_in_statuses_by_default]` setting and `with_relationships` param. --- CHANGELOG.md | 3 +- benchmarks/load_testing/fetcher.ex | 21 +++++++--- config/config.exs | 2 + config/description.exs | 16 ++++++++ lib/mix/tasks/pleroma/benchmark.ex | 3 +- lib/pleroma/user_relationship.ex | 18 +++++++-- .../web/admin_api/admin_api_controller.ex | 6 +-- .../web/admin_api/views/report_view.ex | 7 +++- lib/pleroma/web/common_api/activity_draft.ex | 2 +- lib/pleroma/web/controller_helper.ex | 24 +++++++++-- .../controllers/account_controller.ex | 15 ++++++- .../controllers/notification_controller.ex | 8 +++- .../controllers/search_controller.ex | 24 ++++++++--- .../controllers/status_controller.ex | 26 +++++++++--- .../controllers/timeline_controller.ex | 40 +++++++++++++++---- .../web/mastodon_api/views/account_view.ex | 15 ++++--- .../mastodon_api/views/notification_view.ex | 30 ++++++++------ .../web/mastodon_api/views/status_view.ex | 11 +++-- .../controllers/account_controller.ex | 9 ++++- .../controllers/pleroma_api_controller.ex | 17 ++++++-- .../20190414125034_migrate_old_bookmarks.exs | 1 - .../20190711042021_create_safe_jsonb_set.exs | 1 - .../notification_controller_test.exs | 20 ++++++++++ .../controllers/status_controller_test.exs | 6 ++- .../controllers/timeline_controller_test.exs | 29 ++++++++++++-- 25 files changed, 278 insertions(+), 76 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 350e03894..a391bf1fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added - NodeInfo: `pleroma:api/v1/notifications:include_types_filter` to the `features` list. - Configuration: `:restrict_unauthenticated` setting, restrict access for unauthenticated users to timelines (public and federate), user profiles and statuses. +- Configuration: `:extensions/:output_relationships_in_statuses_by_default` option (if `false`, disables the output of account/pleroma/relationship for statuses and notifications by default, breaking the compatibility with older PleromaFE versions).
API Changes - Mastodon API: Support for `include_types` in `/api/v1/notifications`. @@ -20,7 +21,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [2.0.0] - 2019-03-08 ### Security -- Mastodon API: Fix being able to request enourmous amount of statuses in timelines leading to DoS. Now limited to 40 per request. +- Mastodon API: Fix being able to request enormous amount of statuses in timelines leading to DoS. Now limited to 40 per request. ### Removed - **Breaking**: Removed 1.0+ deprecated configurations `Pleroma.Upload, :strip_exif` and `:instance, :dedupe_media` diff --git a/benchmarks/load_testing/fetcher.ex b/benchmarks/load_testing/fetcher.ex index bd65ac84f..786929ace 100644 --- a/benchmarks/load_testing/fetcher.ex +++ b/benchmarks/load_testing/fetcher.ex @@ -386,47 +386,56 @@ defp render_timelines(user) do favourites = ActivityPub.fetch_favourites(user) + output_relationships = + !!Pleroma.Config.get([:extensions, :output_relationships_in_statuses_by_default]) + Benchee.run( %{ "Rendering home timeline" => fn -> StatusView.render("index.json", %{ activities: home_activities, for: user, - as: :activity + as: :activity, + skip_relationships: !output_relationships }) end, "Rendering direct timeline" => fn -> StatusView.render("index.json", %{ activities: direct_activities, for: user, - as: :activity + as: :activity, + skip_relationships: !output_relationships }) end, "Rendering public timeline" => fn -> StatusView.render("index.json", %{ activities: public_activities, for: user, - as: :activity + as: :activity, + skip_relationships: !output_relationships }) end, "Rendering tag timeline" => fn -> StatusView.render("index.json", %{ activities: tag_activities, for: user, - as: :activity + as: :activity, + skip_relationships: !output_relationships }) end, "Rendering notifications" => fn -> Pleroma.Web.MastodonAPI.NotificationView.render("index.json", %{ notifications: notifications, - for: user + for: user, + skip_relationships: !output_relationships }) end, "Rendering favourites timeline" => fn -> StatusView.render("index.json", %{ activities: favourites, for: user, - as: :activity + as: :activity, + skip_relationships: !output_relationships }) end }, diff --git a/config/config.exs b/config/config.exs index 2ab939107..73bf658fe 100644 --- a/config/config.exs +++ b/config/config.exs @@ -262,6 +262,8 @@ extended_nickname_format: true, cleanup_attachments: false +config :pleroma, :extensions, output_relationships_in_statuses_by_default: true + config :pleroma, :feed, post_title: %{ max_length: 100, diff --git a/config/description.exs b/config/description.exs index 9612adba7..d127f8f20 100644 --- a/config/description.exs +++ b/config/description.exs @@ -121,6 +121,22 @@ } ] }, + %{ + group: :pleroma, + key: :extensions, + type: :group, + description: "Pleroma-specific extensions", + children: [ + %{ + key: :output_relationships_in_statuses_by_default, + type: :beeolean, + description: + "If `true`, outputs account/pleroma/relationship map for each rendered status / notification (for all clients). " <> + "If `false`, outputs the above only if `with_relationships` param is tru-ish " <> + "(that breaks compatibility with older PleromaFE versions which do not send this param but expect the output)." + } + ] + }, %{ group: :pleroma, key: Pleroma.Uploaders.Local, diff --git a/lib/mix/tasks/pleroma/benchmark.ex b/lib/mix/tasks/pleroma/benchmark.ex index a4885b70c..b2bbe40ac 100644 --- a/lib/mix/tasks/pleroma/benchmark.ex +++ b/lib/mix/tasks/pleroma/benchmark.ex @@ -67,7 +67,8 @@ def run(["render_timeline", nickname | _] = args) do Pleroma.Web.MastodonAPI.StatusView.render("index.json", %{ activities: activities, for: user, - as: :activity + as: :activity, + skip_relationships: true }) end }, diff --git a/lib/pleroma/user_relationship.ex b/lib/pleroma/user_relationship.ex index 18a5eec72..d42dc250e 100644 --- a/lib/pleroma/user_relationship.ex +++ b/lib/pleroma/user_relationship.ex @@ -129,17 +129,27 @@ def exists?(dictionary, rel_type, source, target, func) do end @doc ":relationships option for StatusView / AccountView / NotificationView" - def view_relationships_option(nil = _reading_user, _actors) do + def view_relationships_option(reading_user, actors, opts \\ []) + + def view_relationships_option(nil = _reading_user, _actors, _opts) do %{user_relationships: [], following_relationships: []} end - def view_relationships_option(%User{} = reading_user, actors) do + def view_relationships_option(%User{} = reading_user, actors, opts) do + {source_to_target_rel_types, target_to_source_rel_types} = + if opts[:source_mutes_only] do + # This option is used for rendering statuses (FE needs `muted` flag for each one anyways) + {[:mute], []} + else + {[:block, :mute, :notification_mute, :reblog_mute], [:block, :inverse_subscription]} + end + user_relationships = UserRelationship.dictionary( [reading_user], actors, - [:block, :mute, :notification_mute, :reblog_mute], - [:block, :inverse_subscription] + source_to_target_rel_types, + target_to_source_rel_types ) following_relationships = FollowingRelationship.all_between_user_sets([reading_user], actors) diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index ca5439920..747d97f80 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -258,7 +258,7 @@ def list_instance_statuses(conn, %{"instance" => instance} = params) do conn |> put_view(Pleroma.Web.AdminAPI.StatusView) - |> render("index.json", %{activities: activities, as: :activity}) + |> render("index.json", %{activities: activities, as: :activity, skip_relationships: false}) end def list_user_statuses(conn, %{"nickname" => nickname} = params) do @@ -277,7 +277,7 @@ def list_user_statuses(conn, %{"nickname" => nickname} = params) do conn |> put_view(StatusView) - |> render("index.json", %{activities: activities, as: :activity}) + |> render("index.json", %{activities: activities, as: :activity, skip_relationships: false}) else _ -> {:error, :not_found} end @@ -801,7 +801,7 @@ def list_statuses(%{assigns: %{user: _admin}} = conn, params) do conn |> put_view(Pleroma.Web.AdminAPI.StatusView) - |> render("index.json", %{activities: activities, as: :activity}) + |> render("index.json", %{activities: activities, as: :activity, skip_relationships: false}) end def status_update(%{assigns: %{user: admin}} = conn, %{"id" => id} = params) do diff --git a/lib/pleroma/web/admin_api/views/report_view.ex b/lib/pleroma/web/admin_api/views/report_view.ex index ca0bcebc7..d50969b2a 100644 --- a/lib/pleroma/web/admin_api/views/report_view.ex +++ b/lib/pleroma/web/admin_api/views/report_view.ex @@ -38,7 +38,12 @@ def render("show.json", %{report: report, user: user, account: account, statuses actor: merge_account_views(user), content: content, created_at: created_at, - statuses: StatusView.render("index.json", %{activities: statuses, as: :activity}), + statuses: + StatusView.render("index.json", %{ + activities: statuses, + as: :activity, + skip_relationships: false + }), state: report.data["state"], notes: render(__MODULE__, "index_notes.json", %{notes: report.report_notes}) } diff --git a/lib/pleroma/web/common_api/activity_draft.ex b/lib/pleroma/web/common_api/activity_draft.ex index c4356f93b..c1cd15bb2 100644 --- a/lib/pleroma/web/common_api/activity_draft.ex +++ b/lib/pleroma/web/common_api/activity_draft.ex @@ -187,7 +187,7 @@ defp object(draft) do end defp preview?(draft) do - preview? = Pleroma.Web.ControllerHelper.truthy_param?(draft.params["preview"]) || false + preview? = Pleroma.Web.ControllerHelper.truthy_param?(draft.params["preview"]) %__MODULE__{draft | preview?: preview?} end diff --git a/lib/pleroma/web/controller_helper.ex b/lib/pleroma/web/controller_helper.ex index b49523ec3..4780081b2 100644 --- a/lib/pleroma/web/controller_helper.ex +++ b/lib/pleroma/web/controller_helper.ex @@ -5,10 +5,18 @@ defmodule Pleroma.Web.ControllerHelper do use Pleroma.Web, :controller - # As in MastoAPI, per https://api.rubyonrails.org/classes/ActiveModel/Type/Boolean.html + alias Pleroma.Config + + # As in Mastodon API, per https://api.rubyonrails.org/classes/ActiveModel/Type/Boolean.html @falsy_param_values [false, 0, "0", "f", "F", "false", "False", "FALSE", "off", "OFF"] - def truthy_param?(blank_value) when blank_value in [nil, ""], do: nil - def truthy_param?(value), do: value not in @falsy_param_values + + def explicitly_falsy_param?(value), do: value in @falsy_param_values + + # Note: `nil` and `""` are considered falsy values in Pleroma + def falsy_param?(value), + do: explicitly_falsy_param?(value) or value in [nil, ""] + + def truthy_param?(value), do: not falsy_param?(value) def json_response(conn, status, json) do conn @@ -96,4 +104,14 @@ def try_render(conn, _, _) do def put_if_exist(map, _key, nil), do: map def put_if_exist(map, key, value), do: Map.put(map, key, value) + + @doc "Whether to skip rendering `[:account][:pleroma][:relationship]`for statuses/notifications" + def skip_relationships?(params) do + if Config.get([:extensions, :output_relationships_in_statuses_by_default]) do + false + else + # BREAKING: older PleromaFE versions do not send this param but _do_ expect relationships. + not truthy_param?(params["with_relationships"]) + end + end end diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 21bc3d5a5..7da1a11f6 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -6,7 +6,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do use Pleroma.Web, :controller import Pleroma.Web.ControllerHelper, - only: [add_link_headers: 2, truthy_param?: 1, assign_account_by_id: 2, json_response: 3] + only: [ + add_link_headers: 2, + truthy_param?: 1, + assign_account_by_id: 2, + json_response: 3, + skip_relationships?: 1 + ] alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.Plugs.RateLimiter @@ -237,7 +243,12 @@ def statuses(%{assigns: %{user: reading_user}} = conn, params) do conn |> add_link_headers(activities) |> put_view(StatusView) - |> render("index.json", activities: activities, for: reading_user, as: :activity) + |> render("index.json", + activities: activities, + for: reading_user, + as: :activity, + skip_relationships: skip_relationships?(params) + ) else _e -> render_error(conn, :not_found, "Can't find user") end diff --git a/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex b/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex index 0c9218454..c7e808253 100644 --- a/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex @@ -5,7 +5,7 @@ defmodule Pleroma.Web.MastodonAPI.NotificationController do use Pleroma.Web, :controller - import Pleroma.Web.ControllerHelper, only: [add_link_headers: 2] + import Pleroma.Web.ControllerHelper, only: [add_link_headers: 2, skip_relationships?: 1] alias Pleroma.Notification alias Pleroma.Plugs.OAuthScopesPlug @@ -45,7 +45,11 @@ def index(%{assigns: %{user: user}} = conn, params) do conn |> add_link_headers(notifications) - |> render("index.json", notifications: notifications, for: user) + |> render("index.json", + notifications: notifications, + for: user, + skip_relationships: skip_relationships?(params) + ) end # GET /api/v1/notifications/:id diff --git a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex index fcab4ef63..c258742dd 100644 --- a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex @@ -5,13 +5,14 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do use Pleroma.Web, :controller + import Pleroma.Web.ControllerHelper, only: [fetch_integer_param: 2, skip_relationships?: 1] + alias Pleroma.Activity alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.Plugs.RateLimiter alias Pleroma.Repo alias Pleroma.User alias Pleroma.Web - alias Pleroma.Web.ControllerHelper alias Pleroma.Web.MastodonAPI.AccountView alias Pleroma.Web.MastodonAPI.StatusView @@ -66,10 +67,11 @@ defp do_search(version, %{assigns: %{user: user}} = conn, %{"q" => query} = para defp search_options(params, user) do [ + skip_relationships: skip_relationships?(params), resolve: params["resolve"] == "true", following: params["following"] == "true", - limit: ControllerHelper.fetch_integer_param(params, "limit"), - offset: ControllerHelper.fetch_integer_param(params, "offset"), + limit: fetch_integer_param(params, "limit"), + offset: fetch_integer_param(params, "offset"), type: params["type"], author: get_author(params), for_user: user @@ -79,12 +81,24 @@ defp search_options(params, user) do defp resource_search(_, "accounts", query, options) do accounts = with_fallback(fn -> User.search(query, options) end) - AccountView.render("index.json", users: accounts, for: options[:for_user], as: :user) + + AccountView.render("index.json", + users: accounts, + for: options[:for_user], + as: :user, + skip_relationships: false + ) end defp resource_search(_, "statuses", query, options) do statuses = with_fallback(fn -> Activity.search(options[:for_user], query, options) end) - StatusView.render("index.json", activities: statuses, for: options[:for_user], as: :activity) + + StatusView.render("index.json", + activities: statuses, + for: options[:for_user], + as: :activity, + skip_relationships: options[:skip_relationships] + ) end defp resource_search(:v2, "hashtags", query, _options) do diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex index 37afe6949..eb3d90aeb 100644 --- a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex @@ -5,7 +5,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do use Pleroma.Web, :controller - import Pleroma.Web.ControllerHelper, only: [try_render: 3, add_link_headers: 2] + import Pleroma.Web.ControllerHelper, + only: [try_render: 3, add_link_headers: 2, skip_relationships?: 1] require Ecto.Query @@ -101,7 +102,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do `ids` query param is required """ - def index(%{assigns: %{user: user}} = conn, %{"ids" => ids}) do + def index(%{assigns: %{user: user}} = conn, %{"ids" => ids} = params) do limit = 100 activities = @@ -110,7 +111,12 @@ def index(%{assigns: %{user: user}} = conn, %{"ids" => ids}) do |> Activity.all_by_ids_with_object() |> Enum.filter(&Visibility.visible_for_user?(&1, user)) - render(conn, "index.json", activities: activities, for: user, as: :activity) + render(conn, "index.json", + activities: activities, + for: user, + as: :activity, + skip_relationships: skip_relationships?(params) + ) end @doc """ @@ -360,7 +366,12 @@ def favourites(%{assigns: %{user: user}} = conn, params) do conn |> add_link_headers(activities) - |> render("index.json", activities: activities, for: user, as: :activity) + |> render("index.json", + activities: activities, + for: user, + as: :activity, + skip_relationships: skip_relationships?(params) + ) end @doc "GET /api/v1/bookmarks" @@ -378,6 +389,11 @@ def bookmarks(%{assigns: %{user: user}} = conn, params) do conn |> add_link_headers(bookmarks) - |> render("index.json", %{activities: activities, for: user, as: :activity}) + |> render("index.json", + activities: activities, + for: user, + as: :activity, + skip_relationships: skip_relationships?(params) + ) end end diff --git a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex index 91f41416d..b3c58005e 100644 --- a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex @@ -6,7 +6,7 @@ defmodule Pleroma.Web.MastodonAPI.TimelineController do use Pleroma.Web, :controller import Pleroma.Web.ControllerHelper, - only: [add_link_headers: 2, add_link_headers: 3, truthy_param?: 1] + only: [add_link_headers: 2, add_link_headers: 3, truthy_param?: 1, skip_relationships?: 1] alias Pleroma.Pagination alias Pleroma.Plugs.OAuthScopesPlug @@ -14,9 +14,8 @@ defmodule Pleroma.Web.MastodonAPI.TimelineController do alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub - # TODO: Replace with a macro when there is a Phoenix release with + # TODO: Replace with a macro when there is a Phoenix release with the following commit in it: # https://github.com/phoenixframework/phoenix/commit/2e8c63c01fec4dde5467dbbbf9705ff9e780735e - # in it plug(RateLimiter, [name: :timeline, bucket_name: :direct_timeline] when action == :direct) plug(RateLimiter, [name: :timeline, bucket_name: :public_timeline] when action == :public) @@ -49,7 +48,12 @@ def home(%{assigns: %{user: user}} = conn, params) do conn |> add_link_headers(activities) - |> render("index.json", activities: activities, for: user, as: :activity) + |> render("index.json", + activities: activities, + for: user, + as: :activity, + skip_relationships: skip_relationships?(params) + ) end # GET /api/v1/timelines/direct @@ -68,7 +72,12 @@ def direct(%{assigns: %{user: user}} = conn, params) do conn |> add_link_headers(activities) - |> render("index.json", activities: activities, for: user, as: :activity) + |> render("index.json", + activities: activities, + for: user, + as: :activity, + skip_relationships: skip_relationships?(params) + ) end # GET /api/v1/timelines/public @@ -95,7 +104,12 @@ def public(%{assigns: %{user: user}} = conn, params) do conn |> add_link_headers(activities, %{"local" => local_only}) - |> render("index.json", activities: activities, for: user, as: :activity) + |> render("index.json", + activities: activities, + for: user, + as: :activity, + skip_relationships: skip_relationships?(params) + ) else render_error(conn, :unauthorized, "authorization required for timeline view") end @@ -140,7 +154,12 @@ def hashtag(%{assigns: %{user: user}} = conn, params) do conn |> add_link_headers(activities, %{"local" => local_only}) - |> render("index.json", activities: activities, for: user, as: :activity) + |> render("index.json", + activities: activities, + for: user, + as: :activity, + skip_relationships: skip_relationships?(params) + ) end # GET /api/v1/timelines/list/:list_id @@ -164,7 +183,12 @@ def list(%{assigns: %{user: user}} = conn, %{"list_id" => id} = params) do |> ActivityPub.fetch_activities_bounded(following, params) |> Enum.reverse() - render(conn, "index.json", activities: activities, for: user, as: :activity) + render(conn, "index.json", + activities: activities, + for: user, + as: :activity, + skip_relationships: skip_relationships?(params) + ) else _e -> render_error(conn, :forbidden, "Error.") end diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index c482bba64..b20a00a89 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -13,6 +13,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do alias Pleroma.Web.MediaProxy def render("index.json", %{users: users} = opts) do + # Note: :skip_relationships option is currently intentionally not supported for accounts relationships_opt = cond do Map.has_key?(opts, :relationships) -> @@ -190,11 +191,15 @@ defp do_render("show.json", %{user: user} = opts) do end) relationship = - render("relationship.json", %{ - user: opts[:for], - target: user, - relationships: opts[:relationships] - }) + if opts[:skip_relationships] do + %{} + else + render("relationship.json", %{ + user: opts[:for], + target: user, + relationships: opts[:relationships] + }) + end %{ id: to_string(user.id), diff --git a/lib/pleroma/web/mastodon_api/views/notification_view.ex b/lib/pleroma/web/mastodon_api/views/notification_view.ex index 89f5734ff..78d187f9a 100644 --- a/lib/pleroma/web/mastodon_api/views/notification_view.ex +++ b/lib/pleroma/web/mastodon_api/views/notification_view.ex @@ -51,14 +51,15 @@ def render("index.json", %{notifications: notifications, for: reading_user} = op |> Enum.filter(& &1) |> Kernel.++(move_activities_targets) - UserRelationship.view_relationships_option(reading_user, actors) + UserRelationship.view_relationships_option(reading_user, actors, + source_mutes_only: opts[:skip_relationships] + ) end - opts = %{ - for: reading_user, - parent_activities: parent_activities, - relationships: relationships_opt - } + opts = + opts + |> Map.put(:parent_activities, parent_activities) + |> Map.put(:relationships, relationships_opt) safe_render_many(notifications, NotificationView, "show.json", opts) end @@ -82,12 +83,16 @@ def render( mastodon_type = Activity.mastodon_notification_type(activity) + render_opts = %{ + relationships: opts[:relationships], + skip_relationships: opts[:skip_relationships] + } + with %{id: _} = account <- - AccountView.render("show.json", %{ - user: actor, - for: reading_user, - relationships: opts[:relationships] - }) do + AccountView.render( + "show.json", + Map.merge(render_opts, %{user: actor, for: reading_user}) + ) do response = %{ id: to_string(notification.id), type: mastodon_type, @@ -98,8 +103,6 @@ def render( } } - render_opts = %{relationships: opts[:relationships]} - case mastodon_type do "mention" -> put_status(response, activity, reading_user, render_opts) @@ -111,6 +114,7 @@ def render( put_status(response, parent_activity_fn.(), reading_user, render_opts) "move" -> + # Note: :skip_relationships option being applied to _account_ rendering (here) put_target(response, activity, reading_user, render_opts) "follow" -> diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 82326986c..9cbd31878 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -97,7 +97,9 @@ def render("index.json", opts) do true -> actors = Enum.map(activities ++ parent_activities, &get_user(&1.data["actor"])) - UserRelationship.view_relationships_option(opts[:for], actors) + UserRelationship.view_relationships_option(opts[:for], actors, + source_mutes_only: opts[:skip_relationships] + ) end opts = @@ -151,7 +153,8 @@ def render( AccountView.render("show.json", %{ user: user, for: opts[:for], - relationships: opts[:relationships] + relationships: opts[:relationships], + skip_relationships: opts[:skip_relationships] }), in_reply_to_id: nil, in_reply_to_account_id: nil, @@ -299,6 +302,7 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} _ -> [] end + # Status muted state (would do 1 request per status unless user mutes are preloaded) muted = thread_muted? || UserRelationship.exists?( @@ -317,7 +321,8 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} AccountView.render("show.json", %{ user: user, for: opts[:for], - relationships: opts[:relationships] + relationships: opts[:relationships], + skip_relationships: opts[:skip_relationships] }), in_reply_to_id: reply_to && to_string(reply_to.id), in_reply_to_account_id: reply_to_user && to_string(reply_to_user.id), diff --git a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex index dcba67d03..9d0b3b1e4 100644 --- a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex @@ -6,7 +6,7 @@ defmodule Pleroma.Web.PleromaAPI.AccountController do use Pleroma.Web, :controller import Pleroma.Web.ControllerHelper, - only: [json_response: 3, add_link_headers: 2, assign_account_by_id: 2] + only: [json_response: 3, add_link_headers: 2, assign_account_by_id: 2, skip_relationships?: 1] alias Ecto.Changeset alias Pleroma.Plugs.OAuthScopesPlug @@ -139,7 +139,12 @@ def favourites(%{assigns: %{user: for_user, account: user}} = conn, params) do conn |> add_link_headers(activities) |> put_view(StatusView) - |> render("index.json", activities: activities, for: for_user, as: :activity) + |> render("index.json", + activities: activities, + for: for_user, + as: :activity, + skip_relationships: skip_relationships?(params) + ) end @doc "POST /api/v1/pleroma/accounts/:id/subscribe" diff --git a/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex b/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex index dae7f0f2f..83983b576 100644 --- a/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex @@ -5,7 +5,7 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIController do use Pleroma.Web, :controller - import Pleroma.Web.ControllerHelper, only: [add_link_headers: 2] + import Pleroma.Web.ControllerHelper, only: [add_link_headers: 2, skip_relationships?: 1] alias Pleroma.Activity alias Pleroma.Conversation.Participation @@ -130,7 +130,12 @@ def conversation_statuses( conn |> add_link_headers(activities) |> put_view(StatusView) - |> render("index.json", %{activities: activities, for: user, as: :activity}) + |> render("index.json", + activities: activities, + for: user, + as: :activity, + skip_relationships: skip_relationships?(params) + ) else _error -> conn @@ -184,13 +189,17 @@ def read_notification(%{assigns: %{user: user}} = conn, %{"id" => notification_i end end - def read_notification(%{assigns: %{user: user}} = conn, %{"max_id" => max_id}) do + def read_notification(%{assigns: %{user: user}} = conn, %{"max_id" => max_id} = params) do with notifications <- Notification.set_read_up_to(user, max_id) do notifications = Enum.take(notifications, 80) conn |> put_view(NotificationView) - |> render("index.json", %{notifications: notifications, for: user}) + |> render("index.json", + notifications: notifications, + for: user, + skip_relationships: skip_relationships?(params) + ) end end end diff --git a/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs b/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs index c618ea381..b6f0ac66b 100644 --- a/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs +++ b/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs @@ -3,7 +3,6 @@ defmodule Pleroma.Repo.Migrations.MigrateOldBookmarks do import Ecto.Query alias Pleroma.Activity alias Pleroma.Bookmark - alias Pleroma.User alias Pleroma.Repo def up do diff --git a/priv/repo/migrations/20190711042021_create_safe_jsonb_set.exs b/priv/repo/migrations/20190711042021_create_safe_jsonb_set.exs index 2f336a5e8..43d616705 100644 --- a/priv/repo/migrations/20190711042021_create_safe_jsonb_set.exs +++ b/priv/repo/migrations/20190711042021_create_safe_jsonb_set.exs @@ -1,6 +1,5 @@ defmodule Pleroma.Repo.Migrations.CreateSafeJsonbSet do use Ecto.Migration - alias Pleroma.User def change do execute(""" diff --git a/test/web/mastodon_api/controllers/notification_controller_test.exs b/test/web/mastodon_api/controllers/notification_controller_test.exs index 7a0011646..42a311f99 100644 --- a/test/web/mastodon_api/controllers/notification_controller_test.exs +++ b/test/web/mastodon_api/controllers/notification_controller_test.exs @@ -12,6 +12,26 @@ defmodule Pleroma.Web.MastodonAPI.NotificationControllerTest do import Pleroma.Factory + test "does NOT render account/pleroma/relationship if this is disabled by default" do + clear_config([:extensions, :output_relationships_in_statuses_by_default], false) + + %{user: user, conn: conn} = oauth_access(["read:notifications"]) + other_user = insert(:user) + + {:ok, activity} = CommonAPI.post(other_user, %{"status" => "hi @#{user.nickname}"}) + {:ok, [_notification]} = Notification.create_notifications(activity) + + response = + conn + |> assign(:user, user) + |> get("/api/v1/notifications") + |> json_response(200) + + assert Enum.all?(response, fn n -> + get_in(n, ["account", "pleroma", "relationship"]) == %{} + end) + end + test "list of notifications" do %{user: user, conn: conn} = oauth_access(["read:notifications"]) other_user = insert(:user) diff --git a/test/web/mastodon_api/controllers/status_controller_test.exs b/test/web/mastodon_api/controllers/status_controller_test.exs index d59974d50..6b126217a 100644 --- a/test/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/web/mastodon_api/controllers/status_controller_test.exs @@ -1043,6 +1043,8 @@ test "replaces missing description with an empty string", %{conn: conn, user: us end test "bookmarks" do + bookmarks_uri = "/api/v1/bookmarks?with_relationships=true" + %{conn: conn} = oauth_access(["write:bookmarks", "read:bookmarks"]) author = insert(:user) @@ -1064,7 +1066,7 @@ test "bookmarks" do assert json_response(response2, 200)["bookmarked"] == true - bookmarks = get(conn, "/api/v1/bookmarks") + bookmarks = get(conn, bookmarks_uri) assert [json_response(response2, 200), json_response(response1, 200)] == json_response(bookmarks, 200) @@ -1073,7 +1075,7 @@ test "bookmarks" do assert json_response(response1, 200)["bookmarked"] == false - bookmarks = get(conn, "/api/v1/bookmarks") + bookmarks = get(conn, bookmarks_uri) assert [json_response(response2, 200)] == json_response(bookmarks, 200) end diff --git a/test/web/mastodon_api/controllers/timeline_controller_test.exs b/test/web/mastodon_api/controllers/timeline_controller_test.exs index 97b1c3e66..06efdc901 100644 --- a/test/web/mastodon_api/controllers/timeline_controller_test.exs +++ b/test/web/mastodon_api/controllers/timeline_controller_test.exs @@ -20,7 +20,30 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do describe "home" do setup do: oauth_access(["read:statuses"]) + test "does NOT render account/pleroma/relationship if this is disabled by default", %{ + user: user, + conn: conn + } do + clear_config([:extensions, :output_relationships_in_statuses_by_default], false) + + other_user = insert(:user) + + {:ok, _} = CommonAPI.post(other_user, %{"status" => "hi @#{user.nickname}"}) + + response = + conn + |> assign(:user, user) + |> get("/api/v1/timelines/home") + |> json_response(200) + + assert Enum.all?(response, fn n -> + get_in(n, ["account", "pleroma", "relationship"]) == %{} + end) + end + test "the home timeline", %{user: user, conn: conn} do + uri = "/api/v1/timelines/home?with_relationships=true" + following = insert(:user, nickname: "followed") third_user = insert(:user, nickname: "repeated") @@ -28,13 +51,13 @@ test "the home timeline", %{user: user, conn: conn} do {:ok, activity} = CommonAPI.post(third_user, %{"status" => "repeated post"}) {:ok, _, _} = CommonAPI.repeat(activity.id, following) - ret_conn = get(conn, "/api/v1/timelines/home") + ret_conn = get(conn, uri) assert Enum.empty?(json_response(ret_conn, :ok)) {:ok, _user} = User.follow(user, following) - ret_conn = get(conn, "/api/v1/timelines/home") + ret_conn = get(conn, uri) assert [ %{ @@ -59,7 +82,7 @@ test "the home timeline", %{user: user, conn: conn} do {:ok, _user} = User.follow(third_user, user) - ret_conn = get(conn, "/api/v1/timelines/home") + ret_conn = get(conn, uri) assert [ %{ From 2d64500a9dee8bc53c988719bde1c1f4f41575b7 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 1 Apr 2020 20:26:33 +0300 Subject: [PATCH 176/581] error improvement for email_invite endpoint --- docs/API/admin_api.md | 13 +++++++ .../web/admin_api/admin_api_controller.ex | 17 ++++++-- .../admin_api/admin_api_controller_test.exs | 39 ++++++++++++++++++- 3 files changed, 64 insertions(+), 5 deletions(-) diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index edcf73e14..179d8c451 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -392,6 +392,19 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret - `email` - `name`, optional +- Response: + - On success: `204`, empty response + - On failure: + - 400 Bad Request, JSON: + + ```json + [ + { + `error` // error message + } + ] + ``` + ## `GET /api/pleroma/admin/users/:nickname/password_reset` ### Get a password reset token for a given nickname diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index ca5439920..7b442f6e1 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -576,9 +576,8 @@ def relay_unfollow(%{assigns: %{user: admin}} = conn, %{"relay_url" => target}) @doc "Sends registration invite via email" def email_invite(%{assigns: %{user: user}} = conn, %{"email" => email} = params) do - with true <- - Config.get([:instance, :invites_enabled]) && - !Config.get([:instance, :registrations_open]), + 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( @@ -589,6 +588,18 @@ def email_invite(%{assigns: %{user: user}} = conn, %{"email" => email} = params) ), {:ok, _} <- Pleroma.Emails.Mailer.deliver(email) do json_response(conn, :no_content, "") + else + {:registrations_open, _} -> + errors( + conn, + {:error, "To send invites you need set `registrations_open` option to false."} + ) + + {:invites_enabled, _} -> + errors( + conn, + {:error, "To send invites you need set `invites_enabled` option to true."} + ) end end diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index ea0c92502..32fe69d19 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -625,6 +625,39 @@ test "it returns 403 if requested by a non-admin" do 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 @@ -637,7 +670,8 @@ test "it returns 500 if `invites_enabled` is not enabled", %{conn: conn} do conn = post(conn, "/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD") - assert json_response(conn, :internal_server_error) + assert json_response(conn, :bad_request) == + "To send invites you need set `invites_enabled` option to true." end test "it returns 500 if `registrations_open` is enabled", %{conn: conn} do @@ -646,7 +680,8 @@ test "it returns 500 if `registrations_open` is enabled", %{conn: conn} do conn = post(conn, "/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD") - assert json_response(conn, :internal_server_error) + assert json_response(conn, :bad_request) == + "To send invites you need set `registrations_open` option to false." end end From 23219e6fb3163bfac07fb5fb1b2602dcd27e47c2 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 1 Apr 2020 23:00:59 +0400 Subject: [PATCH 177/581] Add OpenAPI --- lib/pleroma/web/api_spec.ex | 30 ++++++ .../web/api_spec/operations/app_operation.ex | 94 +++++++++++++++++++ .../api_spec/schemas/app_create_request.ex | 33 +++++++ .../api_spec/schemas/app_create_response.ex | 33 +++++++ .../controllers/app_controller.ex | 9 +- lib/pleroma/web/oauth/scopes.ex | 7 +- lib/pleroma/web/router.ex | 11 +++ mix.exs | 3 +- mix.lock | 1 + test/web/api_spec/app_operation_test.exs | 45 +++++++++ .../controllers/account_controller_test.exs | 4 +- .../controllers/app_controller_test.exs | 4 +- 12 files changed, 266 insertions(+), 8 deletions(-) create mode 100644 lib/pleroma/web/api_spec.ex create mode 100644 lib/pleroma/web/api_spec/operations/app_operation.ex create mode 100644 lib/pleroma/web/api_spec/schemas/app_create_request.ex create mode 100644 lib/pleroma/web/api_spec/schemas/app_create_response.ex create mode 100644 test/web/api_spec/app_operation_test.exs diff --git a/lib/pleroma/web/api_spec.ex b/lib/pleroma/web/api_spec.ex new file mode 100644 index 000000000..22f76d4bf --- /dev/null +++ b/lib/pleroma/web/api_spec.ex @@ -0,0 +1,30 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec do + alias OpenApiSpex.OpenApi + alias Pleroma.Web.Endpoint + alias Pleroma.Web.Router + + @behaviour OpenApi + + @impl OpenApi + def spec do + %OpenApi{ + servers: [ + # Populate the Server info from a phoenix endpoint + OpenApiSpex.Server.from_endpoint(Endpoint) + ], + info: %OpenApiSpex.Info{ + title: "Pleroma", + description: Application.spec(:pleroma, :description) |> to_string(), + version: Application.spec(:pleroma, :vsn) |> to_string() + }, + # populate the paths from a phoenix router + paths: OpenApiSpex.Paths.from_router(Router) + } + # discover request/response schemas from path specs + |> OpenApiSpex.resolve_schema_modules() + end +end diff --git a/lib/pleroma/web/api_spec/operations/app_operation.ex b/lib/pleroma/web/api_spec/operations/app_operation.ex new file mode 100644 index 000000000..2a4958acf --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/app_operation.ex @@ -0,0 +1,94 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.AppOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.AppCreateRequest + alias Pleroma.Web.ApiSpec.Schemas.AppCreateResponse + + @spec open_api_operation(atom) :: Operation.t() + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + @spec create_operation() :: Operation.t() + def create_operation do + %Operation{ + tags: ["apps"], + summary: "Create an application", + description: "Create a new application to obtain OAuth2 credentials", + operationId: "AppController.create", + requestBody: + Operation.request_body("Parameters", "application/json", AppCreateRequest, required: true), + responses: %{ + 200 => Operation.response("App", "application/json", AppCreateResponse), + 422 => + Operation.response( + "Unprocessable Entity", + "application/json", + %Schema{ + type: :object, + description: + "If a required parameter is missing or improperly formatted, the request will fail.", + properties: %{ + error: %Schema{type: :string} + }, + example: %{ + "error" => "Validation failed: Redirect URI must be an absolute URI." + } + } + ) + } + } + end + + def verify_credentials_operation do + %Operation{ + tags: ["apps"], + summary: "Verify your app works", + description: "Confirm that the app's OAuth2 credentials work.", + operationId: "AppController.verify_credentials", + parameters: [ + Operation.parameter(:authorization, :header, :string, "Bearer ", required: true) + ], + responses: %{ + 200 => + Operation.response("App", "application/json", %Schema{ + type: :object, + description: + "If the Authorization header was provided with a valid token, you should see your app returned as an Application entity.", + properties: %{ + name: %Schema{type: :string}, + vapid_key: %Schema{type: :string}, + website: %Schema{type: :string, nullable: true} + }, + example: %{ + "name" => "My App", + "vapid_key" => + "BCk-QqERU0q-CfYZjcuB6lnyyOYfJ2AifKqfeGIm7Z-HiTU5T9eTG5GxVA0_OH5mMlI4UkkDTpaZwozy0TzdZ2M=", + "website" => "https://myapp.com/" + } + }), + 422 => + Operation.response( + "Unauthorized", + "application/json", + %Schema{ + type: :object, + description: + "If the Authorization header contains an invalid token, is malformed, or is not present, an error will be returned indicating an authorization failure.", + properties: %{ + error: %Schema{type: :string} + }, + example: %{ + "error" => "The access token is invalid." + } + } + ) + } + } + end +end diff --git a/lib/pleroma/web/api_spec/schemas/app_create_request.ex b/lib/pleroma/web/api_spec/schemas/app_create_request.ex new file mode 100644 index 000000000..8a83abef3 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/app_create_request.ex @@ -0,0 +1,33 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.AppCreateRequest do + alias OpenApiSpex.Schema + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "AppCreateRequest", + description: "POST body for creating an app", + type: :object, + properties: %{ + client_name: %Schema{type: :string, description: "A name for your application."}, + 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." + }, + scopes: %Schema{ + type: :string, + description: "Space separated list of scopes. If none is provided, defaults to `read`." + }, + website: %Schema{type: :string, description: "A URL to the homepage of your app"} + }, + required: [:client_name, :redirect_uris], + example: %{ + "client_name" => "My App", + "redirect_uris" => "https://myapp.com/auth/callback", + "website" => "https://myapp.com/" + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/app_create_response.ex b/lib/pleroma/web/api_spec/schemas/app_create_response.ex new file mode 100644 index 000000000..f290fb031 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/app_create_response.ex @@ -0,0 +1,33 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.AppCreateResponse do + alias OpenApiSpex.Schema + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "AppCreateResponse", + description: "Response schema for an app", + type: :object, + properties: %{ + id: %Schema{type: :string}, + name: %Schema{type: :string}, + client_id: %Schema{type: :string}, + client_secret: %Schema{type: :string}, + redirect_uri: %Schema{type: :string}, + vapid_key: %Schema{type: :string}, + website: %Schema{type: :string, nullable: true} + }, + example: %{ + "id" => "123", + "name" => "My App", + "client_id" => "TWhM-tNSuncnqN7DBJmoyeLnk6K3iJJ71KKXxgL1hPM", + "client_secret" => "ZEaFUFmF0umgBX1qKJDjaU99Q31lDkOU8NutzTOoliw", + "vapid_key" => + "BCk-QqERU0q-CfYZjcuB6lnyyOYfJ2AifKqfeGIm7Z-HiTU5T9eTG5GxVA0_OH5mMlI4UkkDTpaZwozy0TzdZ2M=", + "website" => "https://myapp.com/" + } + }) +end diff --git a/lib/pleroma/web/mastodon_api/controllers/app_controller.ex b/lib/pleroma/web/mastodon_api/controllers/app_controller.ex index 5e2871f18..005c60444 100644 --- a/lib/pleroma/web/mastodon_api/controllers/app_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/app_controller.ex @@ -14,17 +14,20 @@ defmodule Pleroma.Web.MastodonAPI.AppController do action_fallback(Pleroma.Web.MastodonAPI.FallbackController) plug(OAuthScopesPlug, %{scopes: ["read"]} when action == :verify_credentials) + plug(OpenApiSpex.Plug.CastAndValidate) @local_mastodon_name "Mastodon-Local" + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.AppOperation + @doc "POST /api/v1/apps" - def create(conn, params) do + def create(%{body_params: params} = conn, _params) do scopes = Scopes.fetch_scopes(params, ["read"]) app_attrs = params - |> Map.drop(["scope", "scopes"]) - |> Map.put("scopes", scopes) + |> Map.take([:client_name, :redirect_uris, :website]) + |> Map.put(:scopes, scopes) with cs <- App.register_changeset(%App{}, app_attrs), false <- cs.changes[:client_name] == @local_mastodon_name, diff --git a/lib/pleroma/web/oauth/scopes.ex b/lib/pleroma/web/oauth/scopes.ex index 8ecf901f3..1023f16d4 100644 --- a/lib/pleroma/web/oauth/scopes.ex +++ b/lib/pleroma/web/oauth/scopes.ex @@ -15,7 +15,12 @@ defmodule Pleroma.Web.OAuth.Scopes do Note: `scopes` is used by Mastodon — supporting it but sticking to OAuth's standard `scope` wherever we control it """ - @spec fetch_scopes(map(), list()) :: list() + @spec fetch_scopes(map() | struct(), list()) :: list() + + def fetch_scopes(%Pleroma.Web.ApiSpec.Schemas.AppCreateRequest{scopes: scopes}, default) do + parse_scopes(scopes, default) + end + def fetch_scopes(params, default) do parse_scopes(params["scope"] || params["scopes"], default) end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 5a0902739..3ecd59cd1 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -29,6 +29,7 @@ defmodule Pleroma.Web.Router do plug(Pleroma.Plugs.SetUserSessionIdPlug) plug(Pleroma.Plugs.EnsureUserKeyPlug) plug(Pleroma.Plugs.IdempotencyPlug) + plug(OpenApiSpex.Plug.PutApiSpec, module: Pleroma.Web.ApiSpec) end pipeline :authenticated_api do @@ -44,6 +45,7 @@ defmodule Pleroma.Web.Router do plug(Pleroma.Plugs.SetUserSessionIdPlug) plug(Pleroma.Plugs.EnsureAuthenticatedPlug) plug(Pleroma.Plugs.IdempotencyPlug) + plug(OpenApiSpex.Plug.PutApiSpec, module: Pleroma.Web.ApiSpec) end pipeline :admin_api do @@ -61,6 +63,7 @@ defmodule Pleroma.Web.Router do plug(Pleroma.Plugs.EnsureAuthenticatedPlug) plug(Pleroma.Plugs.UserIsAdminPlug) plug(Pleroma.Plugs.IdempotencyPlug) + plug(OpenApiSpex.Plug.PutApiSpec, module: Pleroma.Web.ApiSpec) end pipeline :mastodon_html do @@ -94,10 +97,12 @@ defmodule Pleroma.Web.Router do pipeline :config do plug(:accepts, ["json", "xml"]) + plug(OpenApiSpex.Plug.PutApiSpec, module: Pleroma.Web.ApiSpec) end pipeline :pleroma_api do plug(:accepts, ["html", "json"]) + plug(OpenApiSpex.Plug.PutApiSpec, module: Pleroma.Web.ApiSpec) end pipeline :mailbox_preview do @@ -500,6 +505,12 @@ defmodule Pleroma.Web.Router do ) end + scope "/api" do + pipe_through(:api) + + get("/openapi", OpenApiSpex.Plug.RenderSpec, []) + end + scope "/api", Pleroma.Web, as: :authenticated_twitter_api do pipe_through(:authenticated_api) diff --git a/mix.exs b/mix.exs index 890979f8b..ebd4a5ea6 100644 --- a/mix.exs +++ b/mix.exs @@ -171,7 +171,8 @@ defp deps do git: "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"}, {:mox, "~> 0.5", only: :test}, - {:restarter, path: "./restarter"} + {:restarter, path: "./restarter"}, + {:open_api_spex, "~> 3.6"} ] ++ oauth_deps() end diff --git a/mix.lock b/mix.lock index 62e14924a..fd26ca01b 100644 --- a/mix.lock +++ b/mix.lock @@ -72,6 +72,7 @@ "nimble_parsec": {:hex, :nimble_parsec, "0.5.3", "def21c10a9ed70ce22754fdeea0810dafd53c2db3219a0cd54cf5526377af1c6", [:mix], [], "hexpm", "589b5af56f4afca65217a1f3eb3fee7e79b09c40c742fddc1c312b3ac0b3399f"}, "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, "oban": {:hex, :oban, "0.12.1", "695e9490c6e0edfca616d80639528e448bd29b3bff7b7dd10a56c79b00a5d7fb", [:mix], [{:ecto_sql, "~> 3.1", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c1d58d69b8b5a86e7167abbb8cc92764a66f25f12f6172052595067fc6a30a17"}, + "open_api_spex": {:hex, :open_api_spex, "3.6.0", "64205aba9f2607f71b08fd43e3351b9c5e9898ec5ef49fc0ae35890da502ade9", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.1", [hex: :poison, repo: "hexpm", optional: true]}], "hexpm", "126ba3473966277132079cb1d5bf1e3df9e36fe2acd00166e75fd125cecb59c5"}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "0.12.4", "8dd29ed783f2e12195d7e0a4640effc0a7c37e6537da491f1db01839eee6d053", [:mix], [], "hexpm", "595d09db74cb093b1903381c9de423276a931a2480a46a1a5dc7f932a2a6375b"}, "phoenix": {:hex, :phoenix, "1.4.13", "67271ad69b51f3719354604f4a3f968f83aa61c19199343656c9caee057ff3b8", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ab765a0feddb81fc62e2116c827b5f068df85159c162bee760745276ad7ddc1b"}, diff --git a/test/web/api_spec/app_operation_test.exs b/test/web/api_spec/app_operation_test.exs new file mode 100644 index 000000000..5b96abb44 --- /dev/null +++ b/test/web/api_spec/app_operation_test.exs @@ -0,0 +1,45 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.AppOperationTest do + use Pleroma.Web.ConnCase, async: true + + alias Pleroma.Web.ApiSpec + alias Pleroma.Web.ApiSpec.Schemas.AppCreateRequest + alias Pleroma.Web.ApiSpec.Schemas.AppCreateResponse + + import OpenApiSpex.TestAssertions + import Pleroma.Factory + + test "AppCreateRequest example matches schema" do + api_spec = ApiSpec.spec() + schema = AppCreateRequest.schema() + assert_schema(schema.example, "AppCreateRequest", api_spec) + end + + test "AppCreateResponse example matches schema" do + api_spec = ApiSpec.spec() + schema = AppCreateResponse.schema() + assert_schema(schema.example, "AppCreateResponse", api_spec) + end + + test "AppController produces a AppCreateResponse", %{conn: conn} do + api_spec = ApiSpec.spec() + app_attrs = build(:oauth_app) + + json = + conn + |> put_req_header("content-type", "application/json") + |> post( + "/api/v1/apps", + Jason.encode!(%{ + client_name: app_attrs.client_name, + redirect_uris: app_attrs.redirect_uris + }) + ) + |> json_response(200) + + assert_schema(json, "AppCreateResponse", api_spec) + end +end diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index a9fa0ce48..a450a732c 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -794,7 +794,9 @@ test "blocking / unblocking a user" do test "Account registration via Application", %{conn: conn} do conn = - post(conn, "/api/v1/apps", %{ + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/apps", %{ client_name: "client_name", redirect_uris: "urn:ietf:wg:oauth:2.0:oob", scopes: "read, write, follow" diff --git a/test/web/mastodon_api/controllers/app_controller_test.exs b/test/web/mastodon_api/controllers/app_controller_test.exs index 77d234d67..e7b11d14e 100644 --- a/test/web/mastodon_api/controllers/app_controller_test.exs +++ b/test/web/mastodon_api/controllers/app_controller_test.exs @@ -16,8 +16,7 @@ test "apps/verify_credentials", %{conn: conn} do conn = conn - |> assign(:user, token.user) - |> assign(:token, token) + |> put_req_header("authorization", "Bearer #{token.token}") |> get("/api/v1/apps/verify_credentials") app = Repo.preload(token, :app).app @@ -37,6 +36,7 @@ test "creates an oauth app", %{conn: conn} do conn = conn + |> put_req_header("content-type", "application/json") |> assign(:user, user) |> post("/api/v1/apps", %{ client_name: app_attrs.client_name, From 591f7015d91b383dae1ee29576d13c0fad65cad6 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Thu, 2 Apr 2020 09:34:11 +0300 Subject: [PATCH 178/581] update Oban package --- mix.exs | 2 +- mix.lock | 6 +++--- .../20200402063221_update_oban_jobs_table.exs | 11 +++++++++++ 3 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 priv/repo/migrations/20200402063221_update_oban_jobs_table.exs diff --git a/mix.exs b/mix.exs index 87c025d89..375bc67c1 100644 --- a/mix.exs +++ b/mix.exs @@ -108,7 +108,7 @@ defp deps do {:ecto_enum, "~> 1.4"}, {:ecto_sql, "~> 3.3.2"}, {:postgrex, ">= 0.13.5"}, - {:oban, "~> 0.12.1"}, + {:oban, "~> 1.2"}, {:gettext, "~> 0.15"}, {:comeonin, "~> 4.1.1"}, {:pbkdf2_elixir, "~> 0.12.3"}, diff --git a/mix.lock b/mix.lock index 6cca578d6..50be45a4d 100644 --- a/mix.lock +++ b/mix.lock @@ -26,7 +26,7 @@ "decimal": {:hex, :decimal, "1.8.1", "a4ef3f5f3428bdbc0d35374029ffcf4ede8533536fa79896dd450168d9acdf3c", [:mix], [], "hexpm", "3cb154b00225ac687f6cbd4acc4b7960027c757a5152b369923ead9ddbca7aec"}, "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, "earmark": {:hex, :earmark, "1.4.3", "364ca2e9710f6bff494117dbbd53880d84bebb692dafc3a78eb50aa3183f2bfd", [:mix], [], "hexpm", "8cf8a291ebf1c7b9539e3cddb19e9cef066c2441b1640f13c34c1d3cfc825fec"}, - "ecto": {:hex, :ecto, "3.3.3", "0830bf3aebcbf3d8c1a1811cd581773b6866886c012f52c0f027031fa96a0b53", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "12e368e3c2a2938d7776defaabdae40e82900fc4d8d66120ec1e01dfd8b93c3a"}, + "ecto": {:hex, :ecto, "3.4.0", "a7a83ab8359bf816ce729e5e65981ce25b9fc5adfc89c2ea3980f4fed0bfd7c1", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "5eed18252f5b5bbadec56a24112b531343507dbe046273133176b12190ce19cc"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, "ecto_sql": {:hex, :ecto_sql, "3.3.4", "aa18af12eb875fbcda2f75e608b3bd534ebf020fc4f6448e4672fcdcbb081244", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4 or ~> 3.3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5eccbdbf92e3c6f213007a82d5dbba4cd9bb659d1a21331f89f408e4c0efd7a8"}, "esshd": {:hex, :esshd, "0.1.1", "d4dd4c46698093a40a56afecce8a46e246eb35463c457c246dacba2e056f31b5", [:mix], [], "hexpm", "d73e341e3009d390aa36387dc8862860bf9f874c94d9fd92ade2926376f49981"}, @@ -55,7 +55,7 @@ "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"}, "inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm", "64a2d30189704ae41ca7dbdd587f5291db5d1dda1414e0774c29ffc81088c1bc"}, - "jason": {:hex, :jason, "1.1.2", "b03dedea67a99223a2eaf9f1264ce37154564de899fd3d8b9a21b1a6fd64afe7", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fdf843bca858203ae1de16da2ee206f53416bbda5dc8c9e78f43243de4bc3afe"}, + "jason": {:hex, :jason, "1.2.0", "10043418c42d2493d0ee212d3fddd25d7ffe484380afad769a0a38795938e448", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "116747dbe057794c3a3e4e143b7c8390b29f634e16c78a7f59ba75bfa6852e7f"}, "joken": {:hex, :joken, "2.2.0", "2daa1b12be05184aff7b5ace1d43ca1f81345962285fff3f88db74927c954d3a", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "b4f92e30388206f869dd25d1af628a1d99d7586e5cf0672f64d4df84c4d2f5e9"}, "jose": {:hex, :jose, "1.10.1", "16d8e460dae7203c6d1efa3f277e25b5af8b659febfc2f2eb4bacf87f128b80a", [:mix, :rebar3], [], "hexpm", "3c7ddc8a9394b92891db7c2771da94bf819834a1a4c92e30857b7d582e2f8257"}, "jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"}, @@ -73,7 +73,7 @@ "myhtmlex": {:git, "https://git.pleroma.social/pleroma/myhtmlex.git", "ad0097e2f61d4953bfef20fb6abddf23b87111e6", [ref: "ad0097e2f61d4953bfef20fb6abddf23b87111e6", submodules: true]}, "nimble_parsec": {:hex, :nimble_parsec, "0.5.3", "def21c10a9ed70ce22754fdeea0810dafd53c2db3219a0cd54cf5526377af1c6", [:mix], [], "hexpm", "589b5af56f4afca65217a1f3eb3fee7e79b09c40c742fddc1c312b3ac0b3399f"}, "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, - "oban": {:hex, :oban, "0.12.1", "695e9490c6e0edfca616d80639528e448bd29b3bff7b7dd10a56c79b00a5d7fb", [:mix], [{:ecto_sql, "~> 3.1", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c1d58d69b8b5a86e7167abbb8cc92764a66f25f12f6172052595067fc6a30a17"}, + "oban": {:hex, :oban, "1.2.0", "7cca94d341be43d220571e28f69131c4afc21095b25257397f50973d3fc59b07", [:mix], [{:ecto_sql, "~> 3.1", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ba5f8b3f7d76967b3e23cf8014f6a13e4ccb33431e4808f036709a7f822362ee"}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "0.12.4", "8dd29ed783f2e12195d7e0a4640effc0a7c37e6537da491f1db01839eee6d053", [:mix], [], "hexpm", "595d09db74cb093b1903381c9de423276a931a2480a46a1a5dc7f932a2a6375b"}, "phoenix": {:hex, :phoenix, "1.4.13", "67271ad69b51f3719354604f4a3f968f83aa61c19199343656c9caee057ff3b8", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ab765a0feddb81fc62e2116c827b5f068df85159c162bee760745276ad7ddc1b"}, diff --git a/priv/repo/migrations/20200402063221_update_oban_jobs_table.exs b/priv/repo/migrations/20200402063221_update_oban_jobs_table.exs new file mode 100644 index 000000000..c8ee12192 --- /dev/null +++ b/priv/repo/migrations/20200402063221_update_oban_jobs_table.exs @@ -0,0 +1,11 @@ +defmodule Pleroma.Repo.Migrations.UpdateObanJobsTable do + use Ecto.Migration + + def up do + Oban.Migrations.up() + end + + def down do + Oban.Migrations.down(version: 1) + end +end From 0aa24a150bbb153f55ca92dfb595385b4fe3839c Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Thu, 2 Apr 2020 17:33:23 +0400 Subject: [PATCH 179/581] Add oAuth --- lib/pleroma/web/api_spec.ex | 16 +++++++++++++++- .../web/api_spec/operations/app_operation.ex | 6 ++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/api_spec.ex b/lib/pleroma/web/api_spec.ex index 22f76d4bf..41e48a085 100644 --- a/lib/pleroma/web/api_spec.ex +++ b/lib/pleroma/web/api_spec.ex @@ -22,7 +22,21 @@ def spec do version: Application.spec(:pleroma, :vsn) |> to_string() }, # populate the paths from a phoenix router - paths: OpenApiSpex.Paths.from_router(Router) + paths: OpenApiSpex.Paths.from_router(Router), + components: %OpenApiSpex.Components{ + securitySchemes: %{ + "oAuth" => %OpenApiSpex.SecurityScheme{ + type: "oauth2", + flows: %OpenApiSpex.OAuthFlows{ + password: %OpenApiSpex.OAuthFlow{ + authorizationUrl: "/oauth/authorize", + tokenUrl: "/oauth/token", + scopes: %{"read" => "read"} + } + } + } + } + } } # discover request/response schemas from path specs |> OpenApiSpex.resolve_schema_modules() diff --git a/lib/pleroma/web/api_spec/operations/app_operation.ex b/lib/pleroma/web/api_spec/operations/app_operation.ex index 2a4958acf..41d56693a 100644 --- a/lib/pleroma/web/api_spec/operations/app_operation.ex +++ b/lib/pleroma/web/api_spec/operations/app_operation.ex @@ -51,8 +51,10 @@ def verify_credentials_operation do summary: "Verify your app works", description: "Confirm that the app's OAuth2 credentials work.", operationId: "AppController.verify_credentials", - parameters: [ - Operation.parameter(:authorization, :header, :string, "Bearer ", required: true) + security: [ + %{ + "oAuth" => ["read"] + } ], responses: %{ 200 => From aa78325117c879ecb7ec76383c239078275adbd9 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Thu, 2 Apr 2020 19:23:30 +0300 Subject: [PATCH 180/581] [#2323] Fixed a typo causing /accounts/relationships to render default relationships. Improved the tests. --- lib/pleroma/web/mastodon_api/views/account_view.ex | 8 +++++--- .../web/mastodon_api/views/notification_view.ex | 2 +- lib/pleroma/web/mastodon_api/views/status_view.ex | 10 ++++++---- test/web/mastodon_api/views/account_view_test.exs | 3 +++ 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index c482bba64..99e62f580 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -13,16 +13,18 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do alias Pleroma.Web.MediaProxy def render("index.json", %{users: users} = opts) do + reading_user = opts[:for] + relationships_opt = cond do Map.has_key?(opts, :relationships) -> opts[:relationships] - is_nil(opts[:for]) -> + is_nil(reading_user) -> UserRelationship.view_relationships_option(nil, []) true -> - UserRelationship.view_relationships_option(opts[:for], users) + UserRelationship.view_relationships_option(reading_user, users) end opts = Map.put(opts, :relationships, relationships_opt) @@ -143,7 +145,7 @@ def render("relationships.json", %{user: user, targets: targets} = opts) do Map.has_key?(opts, :relationships) -> opts[:relationships] - is_nil(opts[:for]) -> + is_nil(user) -> UserRelationship.view_relationships_option(nil, []) true -> diff --git a/lib/pleroma/web/mastodon_api/views/notification_view.ex b/lib/pleroma/web/mastodon_api/views/notification_view.ex index 89f5734ff..ae87d4701 100644 --- a/lib/pleroma/web/mastodon_api/views/notification_view.ex +++ b/lib/pleroma/web/mastodon_api/views/notification_view.ex @@ -36,7 +36,7 @@ def render("index.json", %{notifications: notifications, for: reading_user} = op Map.has_key?(opts, :relationships) -> opts[:relationships] - is_nil(opts[:for]) -> + is_nil(reading_user) -> UserRelationship.view_relationships_option(nil, []) true -> diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 82326986c..cea76e735 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -72,6 +72,8 @@ defp reblogged?(activity, user) do end def render("index.json", opts) do + reading_user = opts[:for] + # To do: check AdminAPIControllerTest on the reasons behind nil activities in the list activities = Enum.filter(opts.activities, & &1) replied_to_activities = get_replied_to_activities(activities) @@ -82,8 +84,8 @@ def render("index.json", opts) do |> Enum.map(&Object.normalize(&1).data["id"]) |> Activity.create_by_object_ap_id() |> Activity.with_preloaded_object(:left) - |> Activity.with_preloaded_bookmark(opts[:for]) - |> Activity.with_set_thread_muted_field(opts[:for]) + |> Activity.with_preloaded_bookmark(reading_user) + |> Activity.with_set_thread_muted_field(reading_user) |> Repo.all() relationships_opt = @@ -91,13 +93,13 @@ def render("index.json", opts) do Map.has_key?(opts, :relationships) -> opts[:relationships] - is_nil(opts[:for]) -> + is_nil(reading_user) -> UserRelationship.view_relationships_option(nil, []) true -> actors = Enum.map(activities ++ parent_activities, &get_user(&1.data["actor"])) - UserRelationship.view_relationships_option(opts[:for], actors) + UserRelationship.view_relationships_option(reading_user, actors) end opts = diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index 8d00e3c21..4435f69ff 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -209,6 +209,9 @@ defp test_relationship_rendering(user, other_user, expected_result) do relationships_opt = UserRelationship.view_relationships_option(user, [other_user]) opts = Map.put(opts, :relationships, relationships_opt) assert expected_result == AccountView.render("relationship.json", opts) + + assert [expected_result] == + AccountView.render("relationships.json", %{user: user, targets: [other_user]}) end @blank_response %{ From 8a0ffaa9ead2574707cb45c014cb421ff31f7a03 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Thu, 2 Apr 2020 23:01:29 +0400 Subject: [PATCH 181/581] Fix formatting in documentation --- docs/API/differences_in_mastoapi_responses.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index dc8f54d2a..1059155cf 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -164,6 +164,7 @@ Additional parameters can be added to the JSON body/Form data: - `actor_type` - the type of this account. ### Pleroma Settings Store + Pleroma has mechanism that allows frontends to save blobs of json for each user on the backend. This can be used to save frontend-specific settings for a user that the backend does not need to know about. The parameter should have a form of `{frontend_name: {...}}`, with `frontend_name` identifying your type of client, e.g. `pleroma_fe`. It will overwrite everything under this property, but will not overwrite other frontend's settings. @@ -172,17 +173,20 @@ This information is returned in the `verify_credentials` endpoint. ## Authentication -*Pleroma supports refreshing tokens. +*Pleroma supports refreshing tokens.* `POST /oauth/token` -Post here request with grant_type=refresh_token to obtain new access token. Returns an access token. + +Post here request with `grant_type=refresh_token` to obtain new access token. Returns an access token. ## Account Registration + `POST /api/v1/accounts` Has theses additional parameters (which are the same as in Pleroma-API): - * `fullname`: optional - * `bio`: optional - * `captcha_solution`: optional, contains provider-specific captcha solution, - * `captcha_token`: optional, contains provider-specific captcha token - * `token`: invite token required when the registerations aren't public. + +- `fullname`: optional +- `bio`: optional +- `captcha_solution`: optional, contains provider-specific captcha solution, +- `captcha_token`: optional, contains provider-specific captcha token +- `token`: invite token required when the registrations aren't public. From fc81e5a49c34224e07e85f490a30f92db0835d45 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Mon, 6 Apr 2020 10:20:44 +0300 Subject: [PATCH 182/581] Enforcement of OAuth scopes check for authenticated API endpoints, :skip_plug plug to mark a plug explicitly skipped (disabled). --- lib/pleroma/plugs/auth_expected_plug.ex | 13 +++++++ lib/pleroma/plugs/oauth_scopes_plug.ex | 3 ++ lib/pleroma/plugs/plug_helper.ex | 38 +++++++++++++++++++ lib/pleroma/web/masto_fe_controller.ex | 2 +- .../controllers/account_controller.ex | 9 ++++- .../controllers/mastodon_api_controller.ex | 18 +++++++-- .../controllers/suggestion_controller.ex | 9 +++-- lib/pleroma/web/oauth/oauth_controller.ex | 2 + .../controllers/pleroma_api_controller.ex | 2 +- lib/pleroma/web/router.ex | 3 +- .../web/twitter_api/twitter_api_controller.ex | 2 + lib/pleroma/web/web.ex | 23 +++++++++++ .../suggestion_controller_test.exs | 26 ------------- .../pleroma_api_controller_test.exs | 2 +- 14 files changed, 113 insertions(+), 39 deletions(-) create mode 100644 lib/pleroma/plugs/auth_expected_plug.ex create mode 100644 lib/pleroma/plugs/plug_helper.ex diff --git a/lib/pleroma/plugs/auth_expected_plug.ex b/lib/pleroma/plugs/auth_expected_plug.ex new file mode 100644 index 000000000..9e4a4bec8 --- /dev/null +++ b/lib/pleroma/plugs/auth_expected_plug.ex @@ -0,0 +1,13 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Plugs.AuthExpectedPlug do + import Plug.Conn + + def init(options), do: options + + def call(conn, _) do + put_private(conn, :auth_expected, true) + end +end diff --git a/lib/pleroma/plugs/oauth_scopes_plug.ex b/lib/pleroma/plugs/oauth_scopes_plug.ex index 38df074ad..b09e1bb4d 100644 --- a/lib/pleroma/plugs/oauth_scopes_plug.ex +++ b/lib/pleroma/plugs/oauth_scopes_plug.ex @@ -8,12 +8,15 @@ defmodule Pleroma.Plugs.OAuthScopesPlug do alias Pleroma.Config alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug + alias Pleroma.Plugs.PlugHelper @behaviour Plug def init(%{scopes: _} = options), do: options def call(%Plug.Conn{assigns: assigns} = conn, %{scopes: scopes} = options) do + conn = PlugHelper.append_to_called_plugs(conn, __MODULE__) + op = options[:op] || :| token = assigns[:token] diff --git a/lib/pleroma/plugs/plug_helper.ex b/lib/pleroma/plugs/plug_helper.ex new file mode 100644 index 000000000..4f83e9414 --- /dev/null +++ b/lib/pleroma/plugs/plug_helper.ex @@ -0,0 +1,38 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Plugs.PlugHelper do + @moduledoc "Pleroma Plug helper" + + def append_to_called_plugs(conn, plug_module) do + append_to_private_list(conn, :called_plugs, plug_module) + end + + def append_to_skipped_plugs(conn, plug_module) do + append_to_private_list(conn, :skipped_plugs, plug_module) + end + + def plug_called?(conn, plug_module) do + contained_in_private_list?(conn, :called_plugs, plug_module) + end + + def plug_skipped?(conn, plug_module) do + contained_in_private_list?(conn, :skipped_plugs, plug_module) + end + + def plug_called_or_skipped?(conn, plug_module) do + plug_called?(conn, plug_module) || plug_skipped?(conn, plug_module) + end + + defp append_to_private_list(conn, private_variable, value) do + list = conn.private[private_variable] || [] + modified_list = Enum.uniq(list ++ [value]) + Plug.Conn.put_private(conn, private_variable, modified_list) + end + + defp contained_in_private_list?(conn, private_variable, value) do + list = conn.private[private_variable] || [] + value in list + end +end diff --git a/lib/pleroma/web/masto_fe_controller.ex b/lib/pleroma/web/masto_fe_controller.ex index 43649ad26..557cde328 100644 --- a/lib/pleroma/web/masto_fe_controller.ex +++ b/lib/pleroma/web/masto_fe_controller.ex @@ -17,7 +17,7 @@ defmodule Pleroma.Web.MastoFEController do when action == :index ) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug when action != :index) + plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug when action not in [:index, :manifest]) @doc "GET /web/*path" def index(%{assigns: %{user: user, token: token}} = conn, _params) diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 21bc3d5a5..bd6853d12 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -15,10 +15,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do alias Pleroma.Web.CommonAPI alias Pleroma.Web.MastodonAPI.ListView alias Pleroma.Web.MastodonAPI.MastodonAPI + alias Pleroma.Web.MastodonAPI.MastodonAPIController alias Pleroma.Web.MastodonAPI.StatusView alias Pleroma.Web.OAuth.Token alias Pleroma.Web.TwitterAPI.TwitterAPI + plug(:skip_plug, OAuthScopesPlug when action == :identity_proofs) + plug( OAuthScopesPlug, %{fallback: :proceed_unauthenticated, scopes: ["read:accounts"]} @@ -369,6 +372,8 @@ def blocks(%{assigns: %{user: user}} = conn, _) do end @doc "GET /api/v1/endorsements" - def endorsements(conn, params), - do: Pleroma.Web.MastodonAPI.MastodonAPIController.empty_array(conn, params) + def endorsements(conn, params), do: MastodonAPIController.empty_array(conn, params) + + @doc "GET /api/v1/identity_proofs" + def identity_proofs(conn, params), do: MastodonAPIController.empty_array(conn, params) end diff --git a/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex index 14075307d..ac8c18f24 100644 --- a/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex @@ -3,21 +3,31 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do + @moduledoc """ + Contains stubs for unimplemented Mastodon API endpoints. + + Note: instead of routing directly to this controller's action, + it's preferable to define an action in relevant (non-generic) controller, + set up OAuth rules for it and call this controller's function from it. + """ + use Pleroma.Web, :controller require Logger + plug(:skip_plug, Pleroma.Plugs.OAuthScopesPlug when action in [:empty_array, :empty_object]) + + plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) + action_fallback(Pleroma.Web.MastodonAPI.FallbackController) - # Stubs for unimplemented mastodon api - # def empty_array(conn, _) do - Logger.debug("Unimplemented, returning an empty array") + Logger.debug("Unimplemented, returning an empty array (list)") json(conn, []) end def empty_object(conn, _) do - Logger.debug("Unimplemented, returning an empty object") + Logger.debug("Unimplemented, returning an empty object (map)") json(conn, %{}) end end diff --git a/lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex b/lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex index 0cdc7bd8d..c93a43969 100644 --- a/lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex @@ -5,10 +5,13 @@ defmodule Pleroma.Web.MastodonAPI.SuggestionController do use Pleroma.Web, :controller + alias Pleroma.Plugs.OAuthScopesPlug + require Logger + plug(OAuthScopesPlug, %{scopes: ["read"]} when action == :index) + @doc "GET /api/v1/suggestions" - def index(conn, _) do - json(conn, []) - end + def index(conn, params), + do: Pleroma.Web.MastodonAPI.MastodonAPIController.empty_array(conn, params) end diff --git a/lib/pleroma/web/oauth/oauth_controller.ex b/lib/pleroma/web/oauth/oauth_controller.ex index 46688db7e..0121cd661 100644 --- a/lib/pleroma/web/oauth/oauth_controller.ex +++ b/lib/pleroma/web/oauth/oauth_controller.ex @@ -27,6 +27,8 @@ defmodule Pleroma.Web.OAuth.OAuthController do plug(:fetch_flash) plug(RateLimiter, [name: :authentication] when action == :create_authorization) + plug(:skip_plug, Pleroma.Plugs.OAuthScopesPlug) + action_fallback(Pleroma.Web.OAuth.FallbackController) @oob_token_redirect_uri "urn:ietf:wg:oauth:2.0:oob" diff --git a/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex b/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex index dae7f0f2f..75f61b675 100644 --- a/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex @@ -34,7 +34,7 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIController do plug( OAuthScopesPlug, - %{scopes: ["write:conversations"]} when action == :update_conversation + %{scopes: ["write:conversations"]} when action in [:update_conversation, :read_conversations] ) plug(OAuthScopesPlug, %{scopes: ["write:notifications"]} when action == :read_notification) diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 5a0902739..3d57073d0 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -34,6 +34,7 @@ defmodule Pleroma.Web.Router do pipeline :authenticated_api do plug(:accepts, ["json"]) plug(:fetch_session) + plug(Pleroma.Plugs.AuthExpectedPlug) plug(Pleroma.Plugs.OAuthPlug) plug(Pleroma.Plugs.BasicAuthDecoderPlug) plug(Pleroma.Plugs.UserFetcherPlug) @@ -333,7 +334,7 @@ defmodule Pleroma.Web.Router do get("/accounts/relationships", AccountController, :relationships) get("/accounts/:id/lists", AccountController, :lists) - get("/accounts/:id/identity_proofs", MastodonAPIController, :empty_array) + get("/accounts/:id/identity_proofs", AccountController, :identity_proofs) get("/follow_requests", FollowRequestController, :index) get("/blocks", AccountController, :blocks) diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index 0229aea97..31adc2817 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -15,6 +15,8 @@ defmodule Pleroma.Web.TwitterAPI.Controller do plug(OAuthScopesPlug, %{scopes: ["write:notifications"]} when action == :notifications_read) + plug(:skip_plug, OAuthScopesPlug when action in [:oauth_tokens, :revoke_token]) + plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) action_fallback(:errors) diff --git a/lib/pleroma/web/web.ex b/lib/pleroma/web/web.ex index cf3ac1287..1af29ce78 100644 --- a/lib/pleroma/web/web.ex +++ b/lib/pleroma/web/web.ex @@ -29,11 +29,34 @@ def controller do import Pleroma.Web.Router.Helpers import Pleroma.Web.TranslationHelpers + alias Pleroma.Plugs.PlugHelper + plug(:set_put_layout) defp set_put_layout(conn, _) do put_layout(conn, Pleroma.Config.get(:app_layout, "app.html")) end + + # Marks a plug as intentionally skipped + # (states that the plug is not called for a good reason, not by a mistake) + defp skip_plug(conn, plug_module) do + PlugHelper.append_to_skipped_plugs(conn, plug_module) + end + + # Here we can apply before-action hooks (e.g. verify whether auth checks were preformed) + defp action(conn, params) do + if conn.private[:auth_expected] && + not PlugHelper.plug_called_or_skipped?(conn, Pleroma.Plugs.OAuthScopesPlug) do + conn + |> render_error( + :forbidden, + "Security violation: OAuth scopes check was neither handled nor explicitly skipped." + ) + |> halt() + else + super(conn, params) + end + end end end diff --git a/test/web/mastodon_api/controllers/suggestion_controller_test.exs b/test/web/mastodon_api/controllers/suggestion_controller_test.exs index c697a39f8..8d0e70db8 100644 --- a/test/web/mastodon_api/controllers/suggestion_controller_test.exs +++ b/test/web/mastodon_api/controllers/suggestion_controller_test.exs @@ -7,34 +7,8 @@ defmodule Pleroma.Web.MastodonAPI.SuggestionControllerTest do alias Pleroma.Config - import Pleroma.Factory - import Tesla.Mock - setup do: oauth_access(["read"]) - setup %{user: user} do - other_user = insert(:user) - host = Config.get([Pleroma.Web.Endpoint, :url, :host]) - url500 = "http://test500?#{host}&#{user.nickname}" - url200 = "http://test200?#{host}&#{user.nickname}" - - mock(fn - %{method: :get, url: ^url500} -> - %Tesla.Env{status: 500, body: "bad request"} - - %{method: :get, url: ^url200} -> - %Tesla.Env{ - status: 200, - body: - ~s([{"acct":"yj455","avatar":"https://social.heldscal.la/avatar/201.jpeg","avatar_static":"https://social.heldscal.la/avatar/s/201.jpeg"}, {"acct":"#{ - other_user.ap_id - }","avatar":"https://social.heldscal.la/avatar/202.jpeg","avatar_static":"https://social.heldscal.la/avatar/s/202.jpeg"}]) - } - end) - - [other_user: other_user] - end - test "returns empty result", %{conn: conn} do res = conn diff --git a/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs b/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs index 32250f06f..8f0cbe9b2 100644 --- a/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs +++ b/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs @@ -203,7 +203,7 @@ test "PATCH /api/v1/pleroma/conversations/:id" do test "POST /api/v1/pleroma/conversations/read" do user = insert(:user) - %{user: other_user, conn: conn} = oauth_access(["write:notifications"]) + %{user: other_user, conn: conn} = oauth_access(["write:conversations"]) {:ok, _activity} = CommonAPI.post(user, %{"status" => "Hi @#{other_user.nickname}", "visibility" => "direct"}) From b59ac37b2c09d5dc80b59bd3a2aea36989bee713 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Mon, 6 Apr 2020 10:45:25 +0300 Subject: [PATCH 183/581] tests for emoji mix task --- coveralls.json | 6 + docs/administration/CLI_tasks/emoji.md | 4 +- lib/mix/tasks/pleroma/emoji.ex | 90 ++++--- test/fixtures/emoji/packs/blank.png.zip | Bin 0 -> 284 bytes .../emoji/packs/default-manifest.json | 10 + test/fixtures/emoji/packs/finmoji.json | 3 + test/fixtures/emoji/packs/manifest.json | 10 + test/tasks/emoji_test.exs | 226 ++++++++++++++++++ 8 files changed, 311 insertions(+), 38 deletions(-) create mode 100644 coveralls.json create mode 100644 test/fixtures/emoji/packs/blank.png.zip create mode 100644 test/fixtures/emoji/packs/default-manifest.json create mode 100644 test/fixtures/emoji/packs/finmoji.json create mode 100644 test/fixtures/emoji/packs/manifest.json create mode 100644 test/tasks/emoji_test.exs diff --git a/coveralls.json b/coveralls.json new file mode 100644 index 000000000..75e845ade --- /dev/null +++ b/coveralls.json @@ -0,0 +1,6 @@ +{ + "skip_files": [ + "test/support", + "lib/mix/tasks/pleroma/benchmark.ex" + ] +} \ No newline at end of file diff --git a/docs/administration/CLI_tasks/emoji.md b/docs/administration/CLI_tasks/emoji.md index efec8222c..3d524a52b 100644 --- a/docs/administration/CLI_tasks/emoji.md +++ b/docs/administration/CLI_tasks/emoji.md @@ -39,8 +39,8 @@ mix pleroma.emoji get-packs [option ...] mix pleroma.emoji gen-pack PACK-URL ``` -Currently, only .zip archives are recognized as remote pack files and packs are therefore assumed to be zip archives. This command is intended to run interactively and will first ask you some basic questions about the pack, then download the remote file and generate an SHA256 checksum for it, then generate an emoji file list for you. +Currently, only .zip archives are recognized as remote pack files and packs are therefore assumed to be zip archives. This command is intended to run interactively and will first ask you some basic questions about the pack, then download the remote file and generate an SHA256 checksum for it, then generate an emoji file list for you. - The manifest entry will either be written to a newly created `index.json` file or appended to the existing one, *replacing* the old pack with the same name if it was in the file previously. + The manifest entry will either be written to a newly created `pack_name.json` file (pack name is asked in questions) or appended to the existing one, *replacing* the old pack with the same name if it was in the file previously. The file list will be written to the file specified previously, *replacing* that file. You _should_ check that the file list doesn't contain anything you don't need in the pack, that is, anything that is not an emoji (the whole pack is downloaded, but only emoji files are extracted). diff --git a/lib/mix/tasks/pleroma/emoji.ex b/lib/mix/tasks/pleroma/emoji.ex index 429d763c7..cdffa88b2 100644 --- a/lib/mix/tasks/pleroma/emoji.ex +++ b/lib/mix/tasks/pleroma/emoji.ex @@ -14,8 +14,8 @@ def run(["ls-packs" | args]) do {options, [], []} = parse_global_opts(args) - manifest = - fetch_manifest(if options[:manifest], do: options[:manifest], else: default_manifest()) + url_or_path = options[:manifest] || default_manifest() + manifest = fetch_manifest(url_or_path) Enum.each(manifest, fn {name, info} -> to_print = [ @@ -40,9 +40,9 @@ def run(["get-packs" | args]) do {options, pack_names, []} = parse_global_opts(args) - manifest_url = if options[:manifest], do: options[:manifest], else: default_manifest() + url_or_path = options[:manifest] || default_manifest() - manifest = fetch_manifest(manifest_url) + manifest = fetch_manifest(url_or_path) for pack_name <- pack_names do if Map.has_key?(manifest, pack_name) do @@ -75,7 +75,10 @@ def run(["get-packs" | args]) do end # The url specified in files should be in the same directory - files_url = Path.join(Path.dirname(manifest_url), pack["files"]) + files_url = + url_or_path + |> Path.dirname() + |> Path.join(pack["files"]) IO.puts( IO.ANSI.format([ @@ -133,38 +136,51 @@ def run(["get-packs" | args]) do end end - def run(["gen-pack", src]) do + def run(["gen-pack" | args]) do start_pleroma() - proposed_name = Path.basename(src) |> Path.rootname() - name = String.trim(IO.gets("Pack name [#{proposed_name}]: ")) - # If there's no name, use the default one - name = if String.length(name) > 0, do: name, else: proposed_name - - license = String.trim(IO.gets("License: ")) - homepage = String.trim(IO.gets("Homepage: ")) - description = String.trim(IO.gets("Description: ")) - - proposed_files_name = "#{name}.json" - files_name = String.trim(IO.gets("Save file list to [#{proposed_files_name}]: ")) - files_name = if String.length(files_name) > 0, do: files_name, else: proposed_files_name - - default_exts = [".png", ".gif"] - default_exts_str = Enum.join(default_exts, " ") - - exts = - String.trim( - IO.gets("Emoji file extensions (separated with spaces) [#{default_exts_str}]: ") + {opts, [src], []} = + OptionParser.parse( + args, + strict: [ + name: :string, + license: :string, + homepage: :string, + description: :string, + files: :string, + extensions: :string + ] ) + proposed_name = Path.basename(src) |> Path.rootname() + name = get_option(opts, :name, "Pack name:", proposed_name) + license = get_option(opts, :license, "License:") + homepage = get_option(opts, :homepage, "Homepage:") + description = get_option(opts, :description, "Description:") + + proposed_files_name = "#{name}_files.json" + files_name = get_option(opts, :files, "Save file list to:", proposed_files_name) + + default_exts = [".png", ".gif"] + + custom_exts = + get_option( + opts, + :extensions, + "Emoji file extensions (separated with spaces):", + Enum.join(default_exts, " ") + ) + |> String.split(" ", trim: true) + exts = - if String.length(exts) > 0 do - String.split(exts, " ") - |> Enum.filter(fn e -> e |> String.trim() |> String.length() > 0 end) - else + if MapSet.equal?(MapSet.new(default_exts), MapSet.new(custom_exts)) do default_exts + else + custom_exts end + IO.puts("Using #{Enum.join(exts, " ")} extensions") + IO.puts("Downloading the pack and generating SHA256") binary_archive = Tesla.get!(client(), src).body @@ -194,14 +210,16 @@ def run(["gen-pack", src]) do IO.puts(""" #{files_name} has been created and contains the list of all found emojis in the pack. - Please review the files in the remove those not needed. + Please review the files in the pack and remove those not needed. """) - if File.exists?("index.json") do - existing_data = File.read!("index.json") |> Jason.decode!() + pack_file = "#{name}.json" + + if File.exists?(pack_file) do + existing_data = File.read!(pack_file) |> Jason.decode!() File.write!( - "index.json", + pack_file, Jason.encode!( Map.merge( existing_data, @@ -211,11 +229,11 @@ def run(["gen-pack", src]) do ) ) - IO.puts("index.json file has been update with the #{name} pack") + IO.puts("#{pack_file} has been updated with the #{name} pack") else - File.write!("index.json", Jason.encode!(pack_json, pretty: true)) + File.write!(pack_file, Jason.encode!(pack_json, pretty: true)) - IO.puts("index.json has been created with the #{name} pack") + IO.puts("#{pack_file} has been created with the #{name} pack") end end diff --git a/test/fixtures/emoji/packs/blank.png.zip b/test/fixtures/emoji/packs/blank.png.zip new file mode 100644 index 0000000000000000000000000000000000000000..651daf1271fb95ca1404142441360eed4fbdd45d GIT binary patch literal 284 zcmWIWW@Zs#-~d9a?B)OlD2NBroD2#KNjZsm*?I+e>7gOK4D5#d?QteR45CXbxEUB( zzA`c}0JSqPyyp2({QT*pM@b0@559gW;AFbQt8j)xMIvtZu_cU}%O)x8Phe}?bTVDH z!G_ac{P+Z}V^3I*39acCcBz`h#Jl4TUzUMEfr)`Z-T9eS0!uDmzIr}&Zm^RuLx49s yM|^mrXavv>kfQ>;8JR?w5e`O{134H5mNbG`L_0sgo0Scufe{G9f%JM1hXDXq!$&v( literal 0 HcmV?d00001 diff --git a/test/fixtures/emoji/packs/default-manifest.json b/test/fixtures/emoji/packs/default-manifest.json new file mode 100644 index 000000000..c8433808d --- /dev/null +++ b/test/fixtures/emoji/packs/default-manifest.json @@ -0,0 +1,10 @@ +{ + "finmoji": { + "license": "CC BY-NC-ND 4.0", + "homepage": "https://finland.fi/emoji/", + "description": "Finland is the first country in the world to publish its own set of country themed emojis. The Finland emoji collection contains 56 tongue-in-cheek emotions, which were created to explain some hard-to-describe Finnish emotions, Finnish words and customs.", + "src": "https://finland.fi/wp-content/uploads/2017/06/finland-emojis.zip", + "src_sha256": "384025A1AC6314473863A11AC7AB38A12C01B851A3F82359B89B4D4211D3291D", + "files": "finmoji.json" + } +} \ No newline at end of file diff --git a/test/fixtures/emoji/packs/finmoji.json b/test/fixtures/emoji/packs/finmoji.json new file mode 100644 index 000000000..279770998 --- /dev/null +++ b/test/fixtures/emoji/packs/finmoji.json @@ -0,0 +1,3 @@ +{ + "blank": "blank.png" +} \ No newline at end of file diff --git a/test/fixtures/emoji/packs/manifest.json b/test/fixtures/emoji/packs/manifest.json new file mode 100644 index 000000000..2d51a459b --- /dev/null +++ b/test/fixtures/emoji/packs/manifest.json @@ -0,0 +1,10 @@ +{ + "blobs.gg": { + "src_sha256": "3a12f3a181678d5b3584a62095411b0d60a335118135910d879920f8ade5a57f", + "src": "https://git.pleroma.social/pleroma/emoji-index/raw/master/packs/blobs_gg.zip", + "license": "Apache 2.0", + "homepage": "https://blobs.gg", + "files": "blobs_gg.json", + "description": "Blob Emoji from blobs.gg repacked as apng" + } +} \ No newline at end of file diff --git a/test/tasks/emoji_test.exs b/test/tasks/emoji_test.exs new file mode 100644 index 000000000..f2930652a --- /dev/null +++ b/test/tasks/emoji_test.exs @@ -0,0 +1,226 @@ +defmodule Mix.Tasks.Pleroma.EmojiTest do + use ExUnit.Case, async: true + + import ExUnit.CaptureIO + import Tesla.Mock + + alias Mix.Tasks.Pleroma.Emoji + + describe "ls-packs" do + test "with default manifest as url" do + mock(fn + %{ + method: :get, + url: "https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json" + } -> + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/emoji/packs/default-manifest.json") + } + end) + + capture_io(fn -> Emoji.run(["ls-packs"]) end) =~ + "https://finland.fi/wp-content/uploads/2017/06/finland-emojis.zip" + end + + test "with passed manifest as file" do + capture_io(fn -> + Emoji.run(["ls-packs", "-m", "test/fixtures/emoji/packs/manifest.json"]) + end) =~ "https://git.pleroma.social/pleroma/emoji-index/raw/master/packs/blobs_gg.zip" + end + end + + describe "get-packs" do + test "download pack from default manifest" do + mock(fn + %{ + method: :get, + url: "https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json" + } -> + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/emoji/packs/default-manifest.json") + } + + %{ + method: :get, + url: "https://finland.fi/wp-content/uploads/2017/06/finland-emojis.zip" + } -> + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/emoji/packs/blank.png.zip") + } + + %{ + method: :get, + url: "https://git.pleroma.social/pleroma/emoji-index/raw/master/finmoji.json" + } -> + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/emoji/packs/finmoji.json") + } + end) + + assert capture_io(fn -> Emoji.run(["get-packs", "finmoji"]) end) =~ "Writing pack.json for" + + emoji_path = + Path.join( + Pleroma.Config.get!([:instance, :static_dir]), + "emoji" + ) + + assert File.exists?(Path.join([emoji_path, "finmoji", "pack.json"])) + on_exit(fn -> File.rm_rf!("test/instance_static/emoji/finmoji") end) + end + + test "pack not found" do + mock(fn + %{ + method: :get, + url: "https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json" + } -> + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/emoji/packs/default-manifest.json") + } + end) + + assert capture_io(fn -> Emoji.run(["get-packs", "not_found"]) end) =~ + "No pack named \"not_found\" found" + end + + test "raise on bad sha256" do + mock(fn + %{ + method: :get, + url: "https://git.pleroma.social/pleroma/emoji-index/raw/master/packs/blobs_gg.zip" + } -> + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/emoji/packs/blank.png.zip") + } + end) + + assert_raise RuntimeError, ~r/^Bad SHA256 for blobs.gg/, fn -> + capture_io(fn -> + Emoji.run(["get-packs", "blobs.gg", "-m", "test/fixtures/emoji/packs/manifest.json"]) + end) + end + end + end + + describe "gen-pack" do + setup do + url = "https://finland.fi/wp-content/uploads/2017/06/finland-emojis.zip" + + mock(fn %{ + method: :get, + url: ^url + } -> + %Tesla.Env{status: 200, body: File.read!("test/fixtures/emoji/packs/blank.png.zip")} + end) + + {:ok, url: url} + end + + test "with default extensions", %{url: url} do + name = "pack1" + pack_json = "#{name}.json" + files_json = "#{name}_file.json" + refute File.exists?(pack_json) + refute File.exists?(files_json) + + captured = + capture_io(fn -> + Emoji.run([ + "gen-pack", + url, + "--name", + name, + "--license", + "license", + "--homepage", + "homepage", + "--description", + "description", + "--files", + files_json, + "--extensions", + ".png .gif" + ]) + end) + + assert captured =~ "#{pack_json} has been created with the pack1 pack" + assert captured =~ "Using .png .gif extensions" + + assert File.exists?(pack_json) + assert File.exists?(files_json) + + on_exit(fn -> + File.rm_rf!(pack_json) + File.rm_rf!(files_json) + end) + end + + test "with custom extensions and update existing files", %{url: url} do + name = "pack2" + pack_json = "#{name}.json" + files_json = "#{name}_file.json" + refute File.exists?(pack_json) + refute File.exists?(files_json) + + captured = + capture_io(fn -> + Emoji.run([ + "gen-pack", + url, + "--name", + name, + "--license", + "license", + "--homepage", + "homepage", + "--description", + "description", + "--files", + files_json, + "--extensions", + " .png .gif .jpeg " + ]) + end) + + assert captured =~ "#{pack_json} has been created with the pack2 pack" + assert captured =~ "Using .png .gif .jpeg extensions" + + assert File.exists?(pack_json) + assert File.exists?(files_json) + + captured = + capture_io(fn -> + Emoji.run([ + "gen-pack", + url, + "--name", + name, + "--license", + "license", + "--homepage", + "homepage", + "--description", + "description", + "--files", + files_json, + "--extensions", + " .png .gif .jpeg " + ]) + end) + + assert captured =~ "#{pack_json} has been updated with the pack2 pack" + + on_exit(fn -> + File.rm_rf!(pack_json) + File.rm_rf!(files_json) + end) + end + end +end From a43e05591639132ce121d2e14258944a53004438 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Mon, 6 Apr 2020 14:27:20 +0300 Subject: [PATCH 184/581] using another fn for file deletion --- test/tasks/emoji_test.exs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/tasks/emoji_test.exs b/test/tasks/emoji_test.exs index f2930652a..f5de3ef0e 100644 --- a/test/tasks/emoji_test.exs +++ b/test/tasks/emoji_test.exs @@ -157,8 +157,8 @@ test "with default extensions", %{url: url} do assert File.exists?(files_json) on_exit(fn -> - File.rm_rf!(pack_json) - File.rm_rf!(files_json) + File.rm!(pack_json) + File.rm!(files_json) end) end @@ -218,8 +218,8 @@ test "with custom extensions and update existing files", %{url: url} do assert captured =~ "#{pack_json} has been updated with the pack2 pack" on_exit(fn -> - File.rm_rf!(pack_json) - File.rm_rf!(files_json) + File.rm!(pack_json) + File.rm!(files_json) end) end end From e67cde0ed6b55450b5f309f9ed86f7f8e2a1e73f Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 6 Apr 2020 13:46:34 +0200 Subject: [PATCH 185/581] Transmogrifier: Refactoring / Renaming. --- lib/pleroma/web/activity_pub/transmogrifier.ex | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index a4b385cd5..455f51fe0 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -617,9 +617,9 @@ def handle_incoming(%{"type" => "Like"} = data, _options) do data |> LikeValidator.cast_data() |> Ecto.Changeset.apply_action(:insert)}, cast_data = ObjectValidator.stringify_keys(Map.from_struct(cast_data_sym)), :ok <- ObjectValidator.fetch_actor_and_object(cast_data), - {_, {:ok, cast_data}} <- {:maybe_add_context, maybe_add_context_from_object(cast_data)}, + {_, {:ok, cast_data}} <- {:ensure_context_presence, ensure_context_presence(cast_data)}, {_, {:ok, cast_data}} <- - {:maybe_add_recipients, maybe_add_recipients_from_object(cast_data)}, + {:ensure_recipients_presence, ensure_recipients_presence(cast_data)}, {_, {:ok, activity, _meta}} <- {:common_pipeline, Pipeline.common_pipeline(cast_data, local: false)} do {:ok, activity} @@ -1251,10 +1251,10 @@ def maybe_fix_user_url(data), do: data def maybe_fix_user_object(data), do: maybe_fix_user_url(data) - defp maybe_add_context_from_object(%{"context" => context} = data) when is_binary(context), + defp ensure_context_presence(%{"context" => context} = data) when is_binary(context), do: {:ok, data} - defp maybe_add_context_from_object(%{"object" => object} = data) when is_binary(object) do + defp ensure_context_presence(%{"object" => object} = data) when is_binary(object) do with %{data: %{"context" => context}} when is_binary(context) <- Object.normalize(object) do {:ok, Map.put(data, "context", context)} else @@ -1263,14 +1263,14 @@ defp maybe_add_context_from_object(%{"object" => object} = data) when is_binary( end end - defp maybe_add_context_from_object(_) do + defp ensure_context_presence(_) do {:error, :no_context} end - defp maybe_add_recipients_from_object(%{"to" => [_ | _], "cc" => [_ | _]} = data), + defp ensure_recipients_presence(%{"to" => [_ | _], "cc" => [_ | _]} = data), do: {:ok, data} - defp maybe_add_recipients_from_object(%{"object" => object} = data) do + defp ensure_recipients_presence(%{"object" => object} = data) do case Object.normalize(object) do %{data: %{"actor" => actor}} -> data = @@ -1288,7 +1288,7 @@ defp maybe_add_recipients_from_object(%{"object" => object} = data) do end end - defp maybe_add_recipients_from_object(_) do + defp ensure_recipients_presence(_) do {:error, :no_object} end end From 772bc258cde11b3203ad9420f69321ccd56db91a Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 6 Apr 2020 13:53:24 +0200 Subject: [PATCH 186/581] ObjectID Validator: Refactor. --- .../object_validators/types/object_id.ex | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/pleroma/web/activity_pub/object_validators/types/object_id.ex b/lib/pleroma/web/activity_pub/object_validators/types/object_id.ex index 8e70effe4..ee10be0b0 100644 --- a/lib/pleroma/web/activity_pub/object_validators/types/object_id.ex +++ b/lib/pleroma/web/activity_pub/object_validators/types/object_id.ex @@ -4,14 +4,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.Types.ObjectID do def type, do: :string def cast(object) when is_binary(object) do - with %URI{ - scheme: scheme, - host: host - } - when scheme in ["https", "http"] and not is_nil(host) <- - URI.parse(object) do - {:ok, object} - else + # Host has to be present and scheme has to be an http scheme (for now) + case URI.parse(object) do + %URI{host: nil} -> + :error + + %URI{scheme: scheme} when scheme in ["https", "http"] -> + {:ok, object} + _ -> :error end From 03eebabe8e5b2e3f96f6ffe51a6f063a42f6a5d2 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Fri, 3 Apr 2020 22:52:25 +0400 Subject: [PATCH 187/581] Add Pleroma.Web.ApiSpec.Helpers --- lib/pleroma/web/api_spec/helpers.ex | 27 +++++++++++++++++++ .../web/api_spec/operations/app_operation.ex | 4 +-- 2 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 lib/pleroma/web/api_spec/helpers.ex diff --git a/lib/pleroma/web/api_spec/helpers.ex b/lib/pleroma/web/api_spec/helpers.ex new file mode 100644 index 000000000..35cf4c0d8 --- /dev/null +++ b/lib/pleroma/web/api_spec/helpers.ex @@ -0,0 +1,27 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Helpers do + def request_body(description, schema_ref, opts \\ []) do + media_types = ["application/json", "multipart/form-data"] + + content = + media_types + |> Enum.map(fn type -> + {type, + %OpenApiSpex.MediaType{ + schema: schema_ref, + example: opts[:example], + examples: opts[:examples] + }} + end) + |> Enum.into(%{}) + + %OpenApiSpex.RequestBody{ + description: description, + content: content, + required: opts[:required] || false + } + end +end diff --git a/lib/pleroma/web/api_spec/operations/app_operation.ex b/lib/pleroma/web/api_spec/operations/app_operation.ex index 41d56693a..26d8dbd42 100644 --- a/lib/pleroma/web/api_spec/operations/app_operation.ex +++ b/lib/pleroma/web/api_spec/operations/app_operation.ex @@ -5,6 +5,7 @@ defmodule Pleroma.Web.ApiSpec.AppOperation do alias OpenApiSpex.Operation alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Helpers alias Pleroma.Web.ApiSpec.Schemas.AppCreateRequest alias Pleroma.Web.ApiSpec.Schemas.AppCreateResponse @@ -21,8 +22,7 @@ def create_operation do summary: "Create an application", description: "Create a new application to obtain OAuth2 credentials", operationId: "AppController.create", - requestBody: - Operation.request_body("Parameters", "application/json", AppCreateRequest, required: true), + requestBody: Helpers.request_body("Parameters", AppCreateRequest, required: true), responses: %{ 200 => Operation.response("App", "application/json", AppCreateResponse), 422 => From 06471940e0cb917bb362cbcb9d872ab1336a04cf Mon Sep 17 00:00:00 2001 From: kPherox Date: Tue, 7 Apr 2020 08:44:53 +0000 Subject: [PATCH 188/581] Apply suggestion to test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs --- .../controllers/account_controller/update_credentials_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8687d7995..d78fbc5a1 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 @@ -298,7 +298,7 @@ test "update fields", %{conn: conn} do ] end - test "update fields by urlencoded", %{conn: conn} do + test "update fields via x-www-form-urlencoded", %{conn: conn} do fields = [ "fields_attributes[1][name]=link", From 1a4875adfa8fa8f65f1db7b4ec3cf868b7e3dee7 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Tue, 7 Apr 2020 21:52:32 +0300 Subject: [PATCH 189/581] [#1559] Support for "follow_request" notifications (configurable). (Not currently supported by PleromaFE, thus disabled by default). --- CHANGELOG.md | 1 + config/config.exs | 2 + config/description.exs | 14 ++++ lib/pleroma/activity.ex | 36 +++++++-- lib/pleroma/notification.ex | 11 ++- lib/pleroma/user.ex | 2 + .../mastodon_api/views/notification_view.ex | 3 + lib/pleroma/web/push/impl.ex | 76 ++++++++++++------- lib/pleroma/web/push/subscription.ex | 8 ++ 9 files changed, 117 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b6e5d807c..b3b63ac54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - NodeInfo: `pleroma_emoji_reactions` to the `features` list. - Configuration: `:restrict_unauthenticated` setting, restrict access for unauthenticated users to timelines (public and federate), user profiles and statuses. - New HTTP adapter [gun](https://github.com/ninenines/gun). Gun adapter requires minimum OTP version of 22.2 otherwise Pleroma won’t start. For hackney OTP update is not required. +- Notifications: Added `follow_request` notification type (configurable, see `[:notifications, :enable_follow_request_notifications]` setting).
API Changes - Mastodon API: Support for `include_types` in `/api/v1/notifications`. diff --git a/config/config.exs b/config/config.exs index 232a91bf1..d40c2240b 100644 --- a/config/config.exs +++ b/config/config.exs @@ -559,6 +559,8 @@ inactivity_threshold: 7 } +config :pleroma, :notifications, enable_follow_request_notifications: false + config :pleroma, :oauth2, token_expires_in: 600, issue_new_refresh_token: true, diff --git a/config/description.exs b/config/description.exs index 642f1a3ce..b1938912c 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2267,6 +2267,20 @@ } ] }, + %{ + group: :pleroma, + key: :notifications, + type: :group, + description: "Notification settings", + children: [ + %{ + key: :enable_follow_request_notifications, + type: :boolean, + description: + "Enables notifications on new follow requests (causes issues with older PleromaFE versions)." + } + ] + }, %{ group: :pleroma, key: Pleroma.Emails.UserEmail, diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex index 5a8329e69..3803d8e50 100644 --- a/lib/pleroma/activity.ex +++ b/lib/pleroma/activity.ex @@ -27,17 +27,13 @@ defmodule Pleroma.Activity do # https://github.com/tootsuite/mastodon/blob/master/app/models/notification.rb#L19 @mastodon_notification_types %{ "Create" => "mention", - "Follow" => "follow", + "Follow" => ["follow", "follow_request"], "Announce" => "reblog", "Like" => "favourite", "Move" => "move", "EmojiReact" => "pleroma:emoji_reaction" } - @mastodon_to_ap_notification_types for {k, v} <- @mastodon_notification_types, - into: %{}, - do: {v, k} - schema "activities" do field(:data, :map) field(:local, :boolean, default: true) @@ -291,15 +287,41 @@ defp purge_web_resp_cache(%Activity{} = activity) do defp purge_web_resp_cache(nil), do: nil - for {ap_type, type} <- @mastodon_notification_types do + def follow_accepted?( + %Activity{data: %{"type" => "Follow", "object" => followed_ap_id}} = activity + ) do + with %User{} = follower <- Activity.user_actor(activity), + %User{} = followed <- User.get_cached_by_ap_id(followed_ap_id) do + Pleroma.FollowingRelationship.following?(follower, followed) + else + _ -> false + end + end + + def follow_accepted?(_), do: false + + for {ap_type, type} <- @mastodon_notification_types, not is_list(type) do def mastodon_notification_type(%Activity{data: %{"type" => unquote(ap_type)}}), do: unquote(type) end + def mastodon_notification_type(%Activity{data: %{"type" => "Follow"}} = activity) do + if follow_accepted?(activity) do + "follow" + else + "follow_request" + end + end + def mastodon_notification_type(%Activity{}), do: nil def from_mastodon_notification_type(type) do - Map.get(@mastodon_to_ap_notification_types, type) + with {k, _v} <- + Enum.find(@mastodon_notification_types, fn {_k, v} -> + v == type or (is_list(v) and type in v) + end) do + k + end end def all_by_actor_and_id(actor, status_ids \\ []) diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 04ee510b9..73e19bf97 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -284,8 +284,17 @@ def create_notifications(%Activity{data: %{"to" => _, "type" => "Create"}} = act end end + def create_notifications(%Activity{data: %{"type" => "Follow"}} = activity) do + if Pleroma.Config.get([:notifications, :enable_follow_request_notifications]) || + Activity.follow_accepted?(activity) do + do_create_notifications(activity) + else + {:ok, []} + end + end + def create_notifications(%Activity{data: %{"type" => type}} = activity) - when type in ["Like", "Announce", "Follow", "Move", "EmojiReact"] do + when type in ["Like", "Announce", "Move", "EmojiReact"] do do_create_notifications(activity) end diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 71c8c3a4e..ac2594417 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -699,6 +699,8 @@ def needs_update?(%User{local: false} = user) do def needs_update?(_), do: true @spec maybe_direct_follow(User.t(), User.t()) :: {:ok, User.t()} | {:error, String.t()} + + # "Locked" (self-locked) users demand explicit authorization of follow requests def maybe_direct_follow(%User{} = follower, %User{local: true, locked: true} = followed) do follow(follower, followed, "pending") end diff --git a/lib/pleroma/web/mastodon_api/views/notification_view.ex b/lib/pleroma/web/mastodon_api/views/notification_view.ex index ae87d4701..feed47129 100644 --- a/lib/pleroma/web/mastodon_api/views/notification_view.ex +++ b/lib/pleroma/web/mastodon_api/views/notification_view.ex @@ -116,6 +116,9 @@ def render( "follow" -> response + "follow_request" -> + response + "pleroma:emoji_reaction" -> response |> put_status(parent_activity_fn.(), reading_user, render_opts) diff --git a/lib/pleroma/web/push/impl.ex b/lib/pleroma/web/push/impl.ex index afa510f08..89d45b2e1 100644 --- a/lib/pleroma/web/push/impl.ex +++ b/lib/pleroma/web/push/impl.ex @@ -16,6 +16,8 @@ defmodule Pleroma.Web.Push.Impl do require Logger import Ecto.Query + defdelegate mastodon_notification_type(activity), to: Activity + @types ["Create", "Follow", "Announce", "Like", "Move"] @doc "Performs sending notifications for user subscriptions" @@ -24,32 +26,32 @@ def perform( %{ activity: %{data: %{"type" => activity_type}} = activity, user: %User{id: user_id} - } = notif + } = notification ) when activity_type in @types do - actor = User.get_cached_by_ap_id(notif.activity.data["actor"]) + actor = User.get_cached_by_ap_id(notification.activity.data["actor"]) - type = Activity.mastodon_notification_type(notif.activity) + mastodon_type = mastodon_notification_type(notification.activity) gcm_api_key = Application.get_env(:web_push_encryption, :gcm_api_key) avatar_url = User.avatar_url(actor) object = Object.normalize(activity) user = User.get_cached_by_id(user_id) direct_conversation_id = Activity.direct_conversation_id(activity, user) - for subscription <- fetch_subsriptions(user_id), - get_in(subscription.data, ["alerts", type]) do + for subscription <- fetch_subscriptions(user_id), + Subscription.enabled?(subscription, mastodon_type) do %{ access_token: subscription.token.token, - notification_id: notif.id, - notification_type: type, + notification_id: notification.id, + notification_type: mastodon_type, icon: avatar_url, preferred_locale: "en", pleroma: %{ - activity_id: notif.activity.id, + activity_id: notification.activity.id, direct_conversation_id: direct_conversation_id } } - |> Map.merge(build_content(notif, actor, object)) + |> Map.merge(build_content(notification, actor, object, mastodon_type)) |> Jason.encode!() |> push_message(build_sub(subscription), gcm_api_key, subscription) end @@ -82,7 +84,7 @@ def push_message(body, sub, api_key, subscription) do end @doc "Gets user subscriptions" - def fetch_subsriptions(user_id) do + def fetch_subscriptions(user_id) do Subscription |> where(user_id: ^user_id) |> preload(:token) @@ -99,28 +101,36 @@ def build_sub(subscription) do } end + def build_content(notification, actor, object, mastodon_type \\ nil) + def build_content( %{ activity: %{data: %{"directMessage" => true}}, user: %{notification_settings: %{privacy_option: true}} }, actor, - _ + _object, + _mastodon_type ) do %{title: "New Direct Message", body: "@#{actor.nickname}"} end - def build_content(notif, actor, object) do + def build_content(notification, actor, object, mastodon_type) do + mastodon_type = mastodon_type || mastodon_notification_type(notification.activity) + %{ - title: format_title(notif), - body: format_body(notif, actor, object) + title: format_title(notification, mastodon_type), + body: format_body(notification, actor, object, mastodon_type) } end + def format_body(activity, actor, object, mastodon_type \\ nil) + def format_body( %{activity: %{data: %{"type" => "Create"}}}, actor, - %{data: %{"content" => content}} + %{data: %{"content" => content}}, + _mastodon_type ) do "@#{actor.nickname}: #{Utils.scrub_html_and_truncate(content, 80)}" end @@ -128,33 +138,43 @@ def format_body( def format_body( %{activity: %{data: %{"type" => "Announce"}}}, actor, - %{data: %{"content" => content}} + %{data: %{"content" => content}}, + _mastodon_type ) do "@#{actor.nickname} repeated: #{Utils.scrub_html_and_truncate(content, 80)}" end def format_body( - %{activity: %{data: %{"type" => type}}}, + %{activity: %{data: %{"type" => type}}} = notification, actor, - _object + _object, + mastodon_type ) when type in ["Follow", "Like"] do - case type do - "Follow" -> "@#{actor.nickname} has followed you" - "Like" -> "@#{actor.nickname} has favorited your post" + mastodon_type = mastodon_type || mastodon_notification_type(notification.activity) + + case {type, mastodon_type} do + {"Follow", "follow"} -> "@#{actor.nickname} has followed you" + {"Follow", "follow_request"} -> "@#{actor.nickname} has requested to follow you" + {"Like", _} -> "@#{actor.nickname} has favorited your post" end end - def format_title(%{activity: %{data: %{"directMessage" => true}}}) do + def format_title(activity, mastodon_type \\ nil) + + def format_title(%{activity: %{data: %{"directMessage" => true}}}, _mastodon_type) do "New Direct Message" end - def format_title(%{activity: %{data: %{"type" => type}}}) do - case type do - "Create" -> "New Mention" - "Follow" -> "New Follower" - "Announce" -> "New Repeat" - "Like" -> "New Favorite" + def format_title(%{activity: %{data: %{"type" => type}}} = notification, mastodon_type) do + mastodon_type = mastodon_type || mastodon_notification_type(notification.activity) + + case {type, mastodon_type} do + {"Create", _} -> "New Mention" + {"Follow", "follow"} -> "New Follower" + {"Follow", "follow_request"} -> "New Follow Request" + {"Announce", _} -> "New Repeat" + {"Like", _} -> "New Favorite" end end end diff --git a/lib/pleroma/web/push/subscription.ex b/lib/pleroma/web/push/subscription.ex index 5c448d6c9..b99b0c5fb 100644 --- a/lib/pleroma/web/push/subscription.ex +++ b/lib/pleroma/web/push/subscription.ex @@ -32,6 +32,14 @@ defp alerts(%{"data" => %{"alerts" => alerts}}) do %{"alerts" => alerts} end + def enabled?(subscription, "follow_request") do + enabled?(subscription, "follow") + end + + def enabled?(subscription, alert_type) do + get_in(subscription.data, ["alerts", alert_type]) + end + def create( %User{} = user, %Token{} = token, From 5739c498c029914c446656244cdd213a3e358fec Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 8 Apr 2020 18:46:01 +0300 Subject: [PATCH 190/581] fix for gun connections pool --- CHANGELOG.md | 3 +++ lib/pleroma/gun/conn.ex | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b6e5d807c..92d1abc4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Mastodon API: Support for `include_types` in `/api/v1/notifications`.
+### Fixed +- Gun connections pool `max_connections` option. + ## [2.0.0] - 2019-03-08 ### Security - Mastodon API: Fix being able to request enourmous amount of statuses in timelines leading to DoS. Now limited to 40 per request. diff --git a/lib/pleroma/gun/conn.ex b/lib/pleroma/gun/conn.ex index 20823a765..cd25a2e74 100644 --- a/lib/pleroma/gun/conn.ex +++ b/lib/pleroma/gun/conn.ex @@ -49,8 +49,10 @@ def open(%URI{} = uri, name, opts) do key = "#{uri.scheme}:#{uri.host}:#{uri.port}" + max_connections = pool_opts[:max_connections] || 250 + conn_pid = - if Connections.count(name) < opts[:max_connection] do + if Connections.count(name) < max_connections do do_open(uri, opts) else close_least_used_and_do_open(name, uri, opts) From f35c28bf070014dfba4b988bfc47fbf93baef81f Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Wed, 8 Apr 2020 21:26:22 +0300 Subject: [PATCH 191/581] [#1559] Added / fixed tests for follow / follow_request notifications. --- test/notification_test.exs | 80 +++++++++++++++++++++++++++++++++----- 1 file changed, 70 insertions(+), 10 deletions(-) diff --git a/test/notification_test.exs b/test/notification_test.exs index 837a9dacd..0877aaaaf 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -11,8 +11,10 @@ defmodule Pleroma.NotificationTest do alias Pleroma.Notification alias Pleroma.Tests.ObanHelpers alias Pleroma.User + alias Pleroma.FollowingRelationship alias Pleroma.Web.ActivityPub.Transmogrifier alias Pleroma.Web.CommonAPI + alias Pleroma.Web.MastodonAPI.NotificationView alias Pleroma.Web.Push alias Pleroma.Web.Streamer @@ -272,16 +274,6 @@ test "it doesn't create a notification for user if he is the activity author" do refute Notification.create_notification(activity, author) end - test "it doesn't create a notification for follow-unfollow-follow chains" do - user = insert(:user) - followed_user = insert(:user) - {:ok, _, _, activity} = CommonAPI.follow(user, followed_user) - Notification.create_notification(activity, followed_user) - CommonAPI.unfollow(user, followed_user) - {:ok, _, _, activity_dupe} = CommonAPI.follow(user, followed_user) - refute Notification.create_notification(activity_dupe, followed_user) - end - test "it doesn't create duplicate notifications for follow+subscribed users" do user = insert(:user) subscriber = insert(:user) @@ -304,6 +296,74 @@ test "it doesn't create subscription notifications if the recipient cannot see t end end + describe "follow / follow_request notifications" do + test "it creates `follow` notification for approved Follow activity" do + user = insert(:user) + followed_user = insert(:user, locked: false) + + {:ok, _, _, _activity} = CommonAPI.follow(user, followed_user) + assert FollowingRelationship.following?(user, followed_user) + assert [notification] = Notification.for_user(followed_user) + + assert %{type: "follow"} = + NotificationView.render("show.json", %{ + notification: notification, + for: followed_user + }) + end + + test "if `follow_request` notifications are enabled, " <> + "it creates `follow_request` notification for pending Follow activity" do + clear_config([:notifications, :enable_follow_request_notifications], true) + user = insert(:user) + followed_user = insert(:user, locked: true) + + {:ok, _, _, _activity} = CommonAPI.follow(user, followed_user) + refute FollowingRelationship.following?(user, followed_user) + assert [notification] = Notification.for_user(followed_user) + + render_opts = %{notification: notification, for: followed_user} + assert %{type: "follow_request"} = NotificationView.render("show.json", render_opts) + + # After request is accepted, the same notification is rendered with type "follow": + assert {:ok, _} = CommonAPI.accept_follow_request(user, followed_user) + + notification_id = notification.id + assert [%{id: ^notification_id}] = Notification.for_user(followed_user) + assert %{type: "follow"} = NotificationView.render("show.json", render_opts) + end + + test "if `follow_request` notifications are disabled, " <> + "it does NOT create `follow*` notification for pending Follow activity" do + clear_config([:notifications, :enable_follow_request_notifications], false) + user = insert(:user) + followed_user = insert(:user, locked: true) + + {:ok, _, _, _activity} = CommonAPI.follow(user, followed_user) + refute FollowingRelationship.following?(user, followed_user) + assert [] = Notification.for_user(followed_user) + + # After request is accepted, no new notifications are generated: + assert {:ok, _} = CommonAPI.accept_follow_request(user, followed_user) + assert [] = Notification.for_user(followed_user) + end + + test "it doesn't create a notification for follow-unfollow-follow chains" do + user = insert(:user) + followed_user = insert(:user, locked: false) + + {:ok, _, _, _activity} = CommonAPI.follow(user, followed_user) + assert FollowingRelationship.following?(user, followed_user) + assert [notification] = Notification.for_user(followed_user) + + CommonAPI.unfollow(user, followed_user) + {:ok, _, _, _activity_dupe} = CommonAPI.follow(user, followed_user) + + notification_id = notification.id + assert [%{id: ^notification_id}] = Notification.for_user(followed_user) + end + end + describe "get notification" do test "it gets a notification that belongs to the user" do user = insert(:user) From 3965772b261e78669441a5bf3a597f1a69f78a7f Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Wed, 8 Apr 2020 21:33:37 +0300 Subject: [PATCH 192/581] [#1559] Minor change (analysis). --- test/notification_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/notification_test.exs b/test/notification_test.exs index 0877aaaaf..a7f53e319 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -8,10 +8,10 @@ defmodule Pleroma.NotificationTest do import Pleroma.Factory import Mock + alias Pleroma.FollowingRelationship alias Pleroma.Notification alias Pleroma.Tests.ObanHelpers alias Pleroma.User - alias Pleroma.FollowingRelationship alias Pleroma.Web.ActivityPub.Transmogrifier alias Pleroma.Web.CommonAPI alias Pleroma.Web.MastodonAPI.NotificationView From d067eaa7b3bb76e7fc5ae019d6e00510b657171d Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 8 Apr 2020 22:58:31 +0300 Subject: [PATCH 193/581] formatter.ex: Use Phoenix.HTML for mention/hashtag generation Unlike concatenating strings, this makes sure everything is escaped. Tests had to be changed because Phoenix.HTML runs attributes through Enum.sort before generation for whatever reason. --- lib/pleroma/formatter.ex | 26 ++++++++++++++++--- test/formatter_test.exs | 24 +++++++---------- test/user_test.exs | 2 +- test/web/common_api/common_api_utils_test.exs | 6 ++--- .../update_credentials_test.exs | 4 +-- .../notification_controller_test.exs | 4 +-- test/web/twitter_api/twitter_api_test.exs | 2 +- 7 files changed, 41 insertions(+), 27 deletions(-) diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index e2a658cb3..c44e7fc8b 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -35,9 +35,19 @@ def mention_handler("@" <> nickname, buffer, opts, acc) do nickname_text = get_nickname_text(nickname, opts) link = - ~s(
@#{ - nickname_text - }) + Phoenix.HTML.Tag.content_tag( + :span, + Phoenix.HTML.Tag.content_tag( + :a, + ["@", Phoenix.HTML.Tag.content_tag(:span, nickname_text)], + "data-user": id, + class: "u-url mention", + href: ap_id, + rel: "ugc" + ), + class: "h-card" + ) + |> Phoenix.HTML.safe_to_string() {link, %{acc | mentions: MapSet.put(acc.mentions, {"@" <> nickname, user})}} @@ -49,7 +59,15 @@ def mention_handler("@" <> nickname, buffer, opts, acc) do def hashtag_handler("#" <> tag = tag_text, _buffer, _opts, acc) do tag = String.downcase(tag) url = "#{Pleroma.Web.base_url()}/tag/#{tag}" - link = ~s(#{tag_text}) + + link = + Phoenix.HTML.Tag.content_tag(:a, tag_text, + class: "hashtag", + "data-tag": tag, + href: url, + rel: "tag ugc" + ) + |> Phoenix.HTML.safe_to_string() {link, %{acc | tags: MapSet.put(acc.tags, {tag_text, tag})}} end diff --git a/test/formatter_test.exs b/test/formatter_test.exs index cf8441cf6..93fd8eab7 100644 --- a/test/formatter_test.exs +++ b/test/formatter_test.exs @@ -150,13 +150,13 @@ test "gives a replacement for user links, using local nicknames in user links te assert length(mentions) == 3 expected_text = - ~s(@gsimg According to @gsimg According to @archa_eme_, that is @daggsy. Also hello @archa_eme_, that is @daggsy. Also hello @archaeme) + }" href="#{archaeme_remote.ap_id}" rel="ugc">@archaeme) assert expected_text == text end @@ -171,7 +171,7 @@ test "gives a replacement for user links when the user is using Osada" do assert length(mentions) == 1 expected_text = - ~s(@mike test) @@ -187,7 +187,7 @@ test "gives a replacement for single-character local nicknames" do assert length(mentions) == 1 expected_text = - ~s(@o hi) + ~s(@o hi) assert expected_text == text end @@ -209,17 +209,13 @@ test "given the 'safe_mention' option, it will only mention people in the beginn assert mentions == [{"@#{user.nickname}", user}, {"@#{other_user.nickname}", other_user}] assert expected_text == - ~s(@#{user.nickname} @#{user.nickname} @#{ - other_user.nickname - } hey dudes i hate @#{other_user.nickname} hey dudes i hate @#{ - third_user.nickname - }) + }" href="#{third_user.ap_id}" rel="ugc">@#{third_user.nickname}) end test "given the 'safe_mention' option, it will still work without any mention" do diff --git a/test/user_test.exs b/test/user_test.exs index 0479f294d..d39787f35 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -1404,7 +1404,7 @@ test "preserves hosts in user links text" do bio = "A.k.a. @nick@domain.com" expected_text = - ~s(A.k.a. @nick@domain.com) diff --git a/test/web/common_api/common_api_utils_test.exs b/test/web/common_api/common_api_utils_test.exs index d383d1714..98cf02d49 100644 --- a/test/web/common_api/common_api_utils_test.exs +++ b/test/web/common_api/common_api_utils_test.exs @@ -159,11 +159,11 @@ test "works for text/markdown with mentions" do {output, _, _} = Utils.format_input(text, "text/markdown") assert output == - ~s(

hello world

another @user__test and @user__test and @user__test google.com paragraph

) + }" href="http://foo.com/user__test" rel="ugc">@user__test google.com paragraph

) end end 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 d78fbc5a1..2d256f63c 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 @@ -82,9 +82,9 @@ test "updates the user's bio", %{conn: conn} do assert user_data = json_response(conn, 200) assert user_data["note"] == - ~s(I drink #cofe with #cofe with @#{user2.nickname}

suya..) + }" href="#{user2.ap_id}" rel="ugc">@#{user2.nickname}


suya..) end test "updates the user's locking status", %{conn: conn} do diff --git a/test/web/mastodon_api/controllers/notification_controller_test.exs b/test/web/mastodon_api/controllers/notification_controller_test.exs index 344eabb4a..6f1fab069 100644 --- a/test/web/mastodon_api/controllers/notification_controller_test.exs +++ b/test/web/mastodon_api/controllers/notification_controller_test.exs @@ -26,7 +26,7 @@ test "list of notifications" do |> get("/api/v1/notifications") expected_response = - "hi @#{user.nickname}" @@ -45,7 +45,7 @@ test "getting a single notification" do conn = get(conn, "/api/v1/notifications/#{notification.id}") expected_response = - "hi @#{user.nickname}" diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index 92f9aa0f5..f6e13b661 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -109,7 +109,7 @@ test "it registers a new user and parses mentions in the bio" do {:ok, user2} = TwitterAPI.register_user(data2) expected_text = - ~s(@john test) From c401b00c7885823744183dbd077db9239585d20d Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Thu, 9 Apr 2020 04:36:39 +0200 Subject: [PATCH 194/581] ObjectValidators.Types.ObjectID: Fix when URI.parse returns %URL{host: ""} --- .../object_validators/types/object_id.ex | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/lib/pleroma/web/activity_pub/object_validators/types/object_id.ex b/lib/pleroma/web/activity_pub/object_validators/types/object_id.ex index ee10be0b0..f6e749b33 100644 --- a/lib/pleroma/web/activity_pub/object_validators/types/object_id.ex +++ b/lib/pleroma/web/activity_pub/object_validators/types/object_id.ex @@ -6,14 +6,10 @@ def type, do: :string def cast(object) when is_binary(object) do # Host has to be present and scheme has to be an http scheme (for now) case URI.parse(object) do - %URI{host: nil} -> - :error - - %URI{scheme: scheme} when scheme in ["https", "http"] -> - {:ok, object} - - _ -> - :error + %URI{host: nil} -> :error + %URI{host: ""} -> :error + %URI{scheme: scheme} when scheme in ["https", "http"] -> {:ok, object} + _ -> :error end end From 73134e248a031613151df87fdd406580d16dc6b9 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 9 Apr 2020 08:03:21 +0300 Subject: [PATCH 195/581] no changelog entry - bug fixed only in develop --- CHANGELOG.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 92d1abc4e..b6e5d807c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,9 +20,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Mastodon API: Support for `include_types` in `/api/v1/notifications`.
-### Fixed -- Gun connections pool `max_connections` option. - ## [2.0.0] - 2019-03-08 ### Security - Mastodon API: Fix being able to request enourmous amount of statuses in timelines leading to DoS. Now limited to 40 per request. From c8bfbf511eeca2045267ad4792c35648625788cf Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 9 Apr 2020 10:17:24 +0000 Subject: [PATCH 196/581] Apply suggestion to docs/API/admin_api.md --- docs/API/admin_api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index 179d8c451..b3cf89818 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -400,7 +400,7 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret ```json [ { - `error` // error message + "error": "Appropriate error message here" } ] ``` From 4c60fdcbb1ab06183b8e300cbbb84d70ecd3e25b Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 9 Apr 2020 10:17:31 +0000 Subject: [PATCH 197/581] Apply suggestion to lib/pleroma/web/admin_api/admin_api_controller.ex --- lib/pleroma/web/admin_api/admin_api_controller.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index 7b442f6e1..a66db68f3 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -592,7 +592,7 @@ def email_invite(%{assigns: %{user: user}} = conn, %{"email" => email} = params) {:registrations_open, _} -> errors( conn, - {:error, "To send invites you need set `registrations_open` option to false."} + {:error, "To send invites you need to set the `registrations_open` option to false."} ) {:invites_enabled, _} -> From 1cf0d5ab0d579ee4a1a779c308fedb0ab8ec3884 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 9 Apr 2020 10:17:36 +0000 Subject: [PATCH 198/581] Apply suggestion to lib/pleroma/web/admin_api/admin_api_controller.ex --- lib/pleroma/web/admin_api/admin_api_controller.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index a66db68f3..09959b3bf 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -598,7 +598,7 @@ def email_invite(%{assigns: %{user: user}} = conn, %{"email" => email} = params) {:invites_enabled, _} -> errors( conn, - {:error, "To send invites you need set `invites_enabled` option to true."} + {:error, "To send invites you need set to set the `invites_enabled` option to true."} ) end end From 365c34a7a96a9cbd5acb30eb6eedf195eeaff131 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 9 Apr 2020 10:17:44 +0000 Subject: [PATCH 199/581] Apply suggestion to test/web/admin_api/admin_api_controller_test.exs --- test/web/admin_api/admin_api_controller_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index 32fe69d19..afd894269 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -671,7 +671,7 @@ test "it returns 500 if `invites_enabled` is not enabled", %{conn: conn} do conn = post(conn, "/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD") assert json_response(conn, :bad_request) == - "To send invites you need set `invites_enabled` option to true." + "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 From 9795ff5b016e74c0e7b94ac2ea28023208d1f8ee Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 9 Apr 2020 10:17:50 +0000 Subject: [PATCH 200/581] Apply suggestion to test/web/admin_api/admin_api_controller_test.exs --- test/web/admin_api/admin_api_controller_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index afd894269..e8d11b88c 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -681,7 +681,7 @@ test "it returns 500 if `registrations_open` is enabled", %{conn: conn} do conn = post(conn, "/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD") assert json_response(conn, :bad_request) == - "To send invites you need set `registrations_open` option to false." + "To send invites you need to set the `registrations_open` option to false." end end From f20a19de853e8834f7774ee0098a14213bc7427f Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 9 Apr 2020 13:28:54 +0300 Subject: [PATCH 201/581] typo fix --- lib/pleroma/web/admin_api/admin_api_controller.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index 09959b3bf..fdbd24acb 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -598,7 +598,7 @@ def email_invite(%{assigns: %{user: user}} = conn, %{"email" => email} = params) {:invites_enabled, _} -> errors( conn, - {:error, "To send invites you need set to set the `invites_enabled` option to true."} + {:error, "To send invites you need to set the `invites_enabled` option to true."} ) end end From ac672a9d6bfdd3cba7692f80a883bd38b0b09a57 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Thu, 9 Apr 2020 15:13:37 +0300 Subject: [PATCH 202/581] [#1559] Addressed code review requests. --- lib/pleroma/activity.ex | 8 +++--- .../mastodon_api/views/notification_view.ex | 9 +++---- lib/pleroma/web/push/impl.ex | 25 ++++++++++--------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex index 3803d8e50..6213d0eb7 100644 --- a/lib/pleroma/activity.ex +++ b/lib/pleroma/activity.ex @@ -300,6 +300,8 @@ def follow_accepted?( def follow_accepted?(_), do: false + @spec mastodon_notification_type(Activity.t()) :: String.t() | nil + for {ap_type, type} <- @mastodon_notification_types, not is_list(type) do def mastodon_notification_type(%Activity{data: %{"type" => unquote(ap_type)}}), do: unquote(type) @@ -315,11 +317,11 @@ def mastodon_notification_type(%Activity{data: %{"type" => "Follow"}} = activity def mastodon_notification_type(%Activity{}), do: nil + @spec from_mastodon_notification_type(String.t()) :: String.t() | nil + @doc "Converts Mastodon notification type to AR activity type" def from_mastodon_notification_type(type) do with {k, _v} <- - Enum.find(@mastodon_notification_types, fn {_k, v} -> - v == type or (is_list(v) and type in v) - end) do + Enum.find(@mastodon_notification_types, fn {_k, v} -> type in List.wrap(v) end) do k end end diff --git a/lib/pleroma/web/mastodon_api/views/notification_view.ex b/lib/pleroma/web/mastodon_api/views/notification_view.ex index feed47129..7001fd7b9 100644 --- a/lib/pleroma/web/mastodon_api/views/notification_view.ex +++ b/lib/pleroma/web/mastodon_api/views/notification_view.ex @@ -113,17 +113,14 @@ def render( "move" -> put_target(response, activity, reading_user, render_opts) - "follow" -> - response - - "follow_request" -> - response - "pleroma:emoji_reaction" -> response |> put_status(parent_activity_fn.(), reading_user, render_opts) |> put_emoji(activity) + type when type in ["follow", "follow_request"] -> + response + _ -> nil end diff --git a/lib/pleroma/web/push/impl.ex b/lib/pleroma/web/push/impl.ex index 89d45b2e1..f1740a6e0 100644 --- a/lib/pleroma/web/push/impl.ex +++ b/lib/pleroma/web/push/impl.ex @@ -153,10 +153,10 @@ def format_body( when type in ["Follow", "Like"] do mastodon_type = mastodon_type || mastodon_notification_type(notification.activity) - case {type, mastodon_type} do - {"Follow", "follow"} -> "@#{actor.nickname} has followed you" - {"Follow", "follow_request"} -> "@#{actor.nickname} has requested to follow you" - {"Like", _} -> "@#{actor.nickname} has favorited your post" + case mastodon_type do + "follow" -> "@#{actor.nickname} has followed you" + "follow_request" -> "@#{actor.nickname} has requested to follow you" + "favourite" -> "@#{actor.nickname} has favorited your post" end end @@ -166,15 +166,16 @@ def format_title(%{activity: %{data: %{"directMessage" => true}}}, _mastodon_typ "New Direct Message" end - def format_title(%{activity: %{data: %{"type" => type}}} = notification, mastodon_type) do - mastodon_type = mastodon_type || mastodon_notification_type(notification.activity) + def format_title(%{activity: activity}, mastodon_type) do + mastodon_type = mastodon_type || mastodon_notification_type(activity) - case {type, mastodon_type} do - {"Create", _} -> "New Mention" - {"Follow", "follow"} -> "New Follower" - {"Follow", "follow_request"} -> "New Follow Request" - {"Announce", _} -> "New Repeat" - {"Like", _} -> "New Favorite" + case mastodon_type do + "mention" -> "New Mention" + "follow" -> "New Follower" + "follow_request" -> "New Follow Request" + "reblog" -> "New Repeat" + "favourite" -> "New Favorite" + type -> "New #{String.capitalize(type || "event")}" end end end From d37a102933dbfbb0996546b4d148bbe36fbd4220 Mon Sep 17 00:00:00 2001 From: kPherox Date: Thu, 9 Apr 2020 21:16:29 +0900 Subject: [PATCH 203/581] Fix OTP_VERSION file in docker --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 29931a5e3..c2f3ad98c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,6 +12,8 @@ RUN apk add git gcc g++ musl-dev make &&\ mkdir release &&\ mix release --path release +RUN echo "${OTP_VERSION}" > release/OTP_VERSION + FROM alpine:3.11 ARG BUILD_DATE From d545b883eb3c5b79b89a49ccaf9256c31b401145 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Thu, 9 Apr 2020 17:08:43 +0400 Subject: [PATCH 204/581] Add `/api/v1/notifications/:id/dismiss` endpoint --- .../controllers/notification_controller.ex | 3 ++- lib/pleroma/web/router.ex | 4 +++- .../notification_controller_test.exs | 18 +++++++++++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex b/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex index 0c9218454..a6b4096ec 100644 --- a/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex @@ -66,7 +66,8 @@ def clear(%{assigns: %{user: user}} = conn, _params) do json(conn, %{}) end - # POST /api/v1/notifications/dismiss + # POST /api/v1/notifications/:id/dismiss + # POST /api/v1/notifications/dismiss (deprecated) def dismiss(%{assigns: %{user: user}} = conn, %{"id" => id} = _params) do with {:ok, _notif} <- Notification.dismiss(user, id) do json(conn, %{}) diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 3ecd59cd1..5f5ec1c81 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -352,9 +352,11 @@ defmodule Pleroma.Web.Router do get("/notifications", NotificationController, :index) get("/notifications/:id", NotificationController, :show) + post("/notifications/:id/dismiss", NotificationController, :dismiss) post("/notifications/clear", NotificationController, :clear) - post("/notifications/dismiss", NotificationController, :dismiss) delete("/notifications/destroy_multiple", NotificationController, :destroy_multiple) + # Deprecated: was removed in Mastodon v3, use `/notifications/:id/dismiss` instead + post("/notifications/dismiss", NotificationController, :dismiss) get("/scheduled_statuses", ScheduledActivityController, :index) get("/scheduled_statuses/:id", ScheduledActivityController, :show) diff --git a/test/web/mastodon_api/controllers/notification_controller_test.exs b/test/web/mastodon_api/controllers/notification_controller_test.exs index 6f1fab069..1557937d8 100644 --- a/test/web/mastodon_api/controllers/notification_controller_test.exs +++ b/test/web/mastodon_api/controllers/notification_controller_test.exs @@ -53,7 +53,7 @@ test "getting a single notification" do assert response == expected_response end - test "dismissing a single notification" do + test "dismissing a single notification (deprecated endpoint)" do %{user: user, conn: conn} = oauth_access(["write:notifications"]) other_user = insert(:user) @@ -69,6 +69,22 @@ test "dismissing a single notification" do assert %{} = json_response(conn, 200) end + test "dismissing a single notification" do + %{user: user, conn: conn} = oauth_access(["write:notifications"]) + other_user = insert(:user) + + {:ok, activity} = CommonAPI.post(other_user, %{"status" => "hi @#{user.nickname}"}) + + {:ok, [notification]} = Notification.create_notifications(activity) + + conn = + conn + |> assign(:user, user) + |> post("/api/v1/notifications/#{notification.id}/dismiss") + + assert %{} = json_response(conn, 200) + end + test "clearing all notifications" do %{user: user, conn: conn} = oauth_access(["write:notifications", "read:notifications"]) other_user = insert(:user) From 0e8f6d24b87812664d3bb021d17f120686cf2401 Mon Sep 17 00:00:00 2001 From: kPherox Date: Fri, 10 Apr 2020 00:19:09 +0900 Subject: [PATCH 205/581] Create OTP_VERSION file by `mix release` --- Dockerfile | 2 -- mix.exs | 11 ++++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index c2f3ad98c..29931a5e3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,8 +12,6 @@ RUN apk add git gcc g++ musl-dev make &&\ mkdir release &&\ mix release --path release -RUN echo "${OTP_VERSION}" > release/OTP_VERSION - FROM alpine:3.11 ARG BUILD_DATE diff --git a/mix.exs b/mix.exs index 3e4c7cbd8..ad2029518 100644 --- a/mix.exs +++ b/mix.exs @@ -37,12 +37,21 @@ def project do pleroma: [ include_executables_for: [:unix], applications: [ex_syslogger: :load, syslog: :load], - steps: [:assemble, ©_files/1, ©_nginx_config/1] + steps: [:assemble, &put_files/1, ©_files/1, ©_nginx_config/1] ] ] ] end + def put_files(%{path: target_path} = release) do + File.write!( + Path.join([target_path, "OTP_VERSION"]), + Pleroma.OTPVersion.version() + ) + + release + end + def copy_files(%{path: target_path} = release) do File.cp_r!("./rel/files", target_path) release From c826d5195f1746449eb369e86a730f14de9fa267 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Thu, 9 Apr 2020 23:36:17 +0400 Subject: [PATCH 206/581] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b6e5d807c..2f5d8f612 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
API Changes - Mastodon API: Support for `include_types` in `/api/v1/notifications`. +- Mastodon API: Added `/api/v1/notifications/:id/dismiss` endpoint.
## [2.0.0] - 2019-03-08 From 781ac28859596fce5f2fd24ffe1cdf24caaaa2fc Mon Sep 17 00:00:00 2001 From: rinpatch Date: Sun, 15 Mar 2020 17:26:58 +0300 Subject: [PATCH 207/581] changelog.md: add 2.0.1 entry --- CHANGELOG.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f5d8f612..15f0463b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,9 +3,19 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## [unreleased] +## [2.0.1] - 2020-03-15 +### Fixed +- 500 errors when no `Accept` header is present if Static-FE is enabled +- Instance panel not being updated immediately due to wrong `Cache-Control` headers +- Statuses posted with BBCode/Markdown having unncessary newlines in Pleroma-FE +- OTP: Fix some settings not being migrated to in-database config properly +- No `Cache-Control` headers on attachment/media proxy requests +- Character limit enforcement being off by 1 +- Mastodon Streaming API: hashtag timelines not working + ### Changed -- **Breaking:** BBCode and Markdown formatters will no longer return any `\n` and only use `
` for newlines +- BBCode and Markdown formatters will no longer return any `\n` and only use `
` for newlines +- Mastodon API: Allow registration without email if email verification is not enabled ### Removed - **Breaking:** removed `with_move` parameter from notifications timeline. From 2a08f44b026bae611064b6ac459e7df16e4a36f9 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Mon, 16 Mar 2020 00:50:03 +0300 Subject: [PATCH 208/581] CHANGELOG.md: Add upgrade notes for 2.0.1 --- CHANGELOG.md | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15f0463b2..8c976228c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,21 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## [unreleased] +### Removed +- **Breaking:** removed `with_move` parameter from notifications timeline. + +### Added +- NodeInfo: `pleroma:api/v1/notifications:include_types_filter` to the `features` list. +- NodeInfo: `pleroma_emoji_reactions` to the `features` list. +- Configuration: `:restrict_unauthenticated` setting, restrict access for unauthenticated users to timelines (public and federate), user profiles and statuses. +- New HTTP adapter [gun](https://github.com/ninenines/gun). Gun adapter requires minimum OTP version of 22.2 otherwise Pleroma won’t start. For hackney OTP update is not required. +
+ API Changes +- Mastodon API: Support for `include_types` in `/api/v1/notifications`. +- Mastodon API: Added `/api/v1/notifications/:id/dismiss` endpoint. +
+ ## [2.0.1] - 2020-03-15 ### Fixed - 500 errors when no `Accept` header is present if Static-FE is enabled @@ -17,19 +32,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - BBCode and Markdown formatters will no longer return any `\n` and only use `
` for newlines - Mastodon API: Allow registration without email if email verification is not enabled -### Removed -- **Breaking:** removed `with_move` parameter from notifications timeline. +### Upgrade notes +#### Nginx only +1. Remove `proxy_ignore_headers Cache-Control;` and `proxy_hide_header Cache-Control;` from your config. -### Added -- NodeInfo: `pleroma:api/v1/notifications:include_types_filter` to the `features` list. -- NodeInfo: `pleroma_emoji_reactions` to the `features` list. -- Configuration: `:restrict_unauthenticated` setting, restrict access for unauthenticated users to timelines (public and federate), user profiles and statuses. -- New HTTP adapter [gun](https://github.com/ninenines/gun). Gun adapter requires minimum OTP version of 22.2 otherwise Pleroma won’t start. For hackney OTP update is not required. -
- API Changes -- Mastodon API: Support for `include_types` in `/api/v1/notifications`. -- Mastodon API: Added `/api/v1/notifications/:id/dismiss` endpoint. -
+#### Everyone +1. Run database migrations (inside Pleroma directory): + - OTP: `./bin/pleroma_ctl migrate` + - From Source: `mix ecto.migrate` +2. Restart Pleroma ## [2.0.0] - 2019-03-08 ### Security From 7306d2d06942f7912fd42809b1feb9ac43089012 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Tue, 31 Mar 2020 13:59:26 +0300 Subject: [PATCH 209/581] CHANGELOG.md: Add 2.0.2 entry --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c976228c..6942ad0bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Mastodon API: Added `/api/v1/notifications/:id/dismiss` endpoint.

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 delta 78 zcmaFa&Hl2ReM2!LvvHcyv5$372xBxiF*#*3WwQ)XCZ_^1FtarH fSp*0%Wi~lAIWjhrkCq&h>HH>>-^miQ>HPT+&(0jO delta 73 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 literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-2b9c.cf321c74.js b/priv/static/adminfe/static/js/chunk-2b9c.cf321c74.js new file mode 100644 index 0000000000000000000000000000000000000000..f06da02689e1b032bdc69066f1b2b402f65f48cb GIT binary patch literal 28194 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 a`0#bl{1@F^|8#R>-GB4|WmRy_j{grC5!n_1 literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-2b9c.cf321c74.js.map b/priv/static/adminfe/static/js/chunk-2b9c.cf321c74.js.map new file mode 100644 index 0000000000000000000000000000000000000000..1ec750dd1ae7f39f7a2465b71d64335349c8f690 GIT binary patch literal 95810 zcmeIbiFO-DvNrfCXpMhMY7*Q;Qxe;18w4qdTC9cI=%xp!2o!-LR-p={NL`;Z4>3DWZaC?8{7Z6aULI! zqGoq{b#--RH61rs&yx5&U7e&TzSfeQ9ytqh7+^B{||NxGU0TJa~Y6UEH}(F1^Q z^oOlUFHTqc!#}KqJSWqOBjc%3%A2y>_Mu>E4~qfSj2sKLyIx-K{u}%Z#p94kKUv8c5vu zZTZF^>Wd9)_)630CxfKXOw&gEDH})4tTF0M+R32NO46*+8%9vy#%Y?bL&Y_V)sqU0 z?OzgnKshwq8Gm$rrERd21dy88lkFTLmT;q(#YZDTJjLPlP@12 zW}$oO!x44cv{7oy8&r_~pIwY%p+`|%11oxxl6K-aYivABnU-kKZtz#5@qTaTWv%|S zvH$$#i`Q@Vb{o%M?7n@r*H~*bAnQg$hZ#WnI7!Aarw)+gbhaEThfs5zj37U16T(4N z5SL&svAd{$=WN{0h)Ixn6w_vxDs7HuporL~; zmuAB;;g!M+(qAh1ay&dq80r3SG7t!`e&#bGllNx$C?1f>9gZ80l5yNFNhMu&@o0)*6dJ9((Ec2O=xZ_pCu766M(|TG*+98wjx&v>U_?3J4Tf2ALM^0|CVUg-T#_+wz9XE` z*VCv?^t2{2{@_y@@+6^6`zg};9h5fh(YKK&KAXK^N^rl6`w6vVb<+R-1=!@bX-I3Naqk3wN!CfT-h-;(SCnOA`g4bP(9gzzImj^V4}^Ske;&Ua}{EykZ9&y=0JdWn!4NamkIw{W8fK~)u;TQW7{W#n-%$%1iofg_;%_U)IL~@O+*1v0b}&{jnJgb< zu>LkXakG0o{Dj{mn<_Kh4N&Mz!*Q0%u=TfJk+MrbrUYJ7&TFAAtm($DDE8Jr)T#Je zItxihJVFwiv%ciDel;(z&u+%bYDE2-{;Zr*$Hf;}7y46eUAixqTkW2ks@%see!ZRxgUASsZCD(5R+tT^ZgjTBru@i7^QC{bWwr5TGPVk-$AN>Degwls^rY@2Cy zB78@IiDiB4zJ!l)W@{*&mdFzk!ig2aNy6BkB&N!VG<;%PJrV6V8G|WOmcDFp{2)JU zWt9q8F`ZalVy79oRu9?&rENj9X;fTUZMO`}ws5d*+1JKM-HWuVm>;&Z(Ac&#c0?{6 zE0m7V*s(Nrgrtr|vLi4$4#q__l8)4&FVhx}#w)9dMV04HNU$Pc7aa+iVGDoR`c^Wh z!i7`Ig;P=IQ>)HhDbckhy5#Y#taiHwT30aaTJ*Zo)w{NpsrJHuG zczUAjJ*(+Gfzh)tc&fUx+OxFu1ofUpooBu)t9>hhzDS^NCD0dI`j(cy$h>c5-WOW> zmX^KDYzYKHwRwRAt6@81ZDQ;;V2+ada^FUN+UbT@|P`caUY8`##S0*k?7b;G?ng@ zS{>!tBZ63#m{g>ZT4|&rjnqmb74%YzUiy)BFa2mRN(IXlo&I91rRCd|uwP=dQY(>E z6ehI_lgbF2+ToSs9xJPvReqj^Ai)xmv0F|lmN%JPV~=e;EX` zo=J2ig}%&cTXrc_;;*fCDIGAo^vsj_;T1BUlXkT!`oUi|S-3y3+@DC>6WjJg#*WFQ zvx532aneHk zOh6G5(J09{_VO?pBf^RmD6W%cOid>m*Qjr2!?&Xmf^QLb#}qLRYFlQ378Y>AT%G6M zNqP_u(u8KND901iq=ywQ{20eH39L`XW5h>ZYSbz2#aV0tHB49!;gFMrBZvC6Gs!Z{ z%_X+hBo_2?Nm+-32;aGYR#T&IGLL#0V{MK@Nuyzpx&-}s!J%9HKn&>JFq64<+?p_r z5ig@iZ6by8G22HJ5x=tG!{igken!zajo&0_H;eid)62YXS!(eDj0jQn*=@u$y46#{ z55NS>v^fHVR<#L)slXZ*Z*NF#wuXH~HaRSt3=q3~{O0*HB!fYjP&Q$UCZV%dgPQ?3 zMt7XF+bmuLA=t2|o|Fa%r=7(wsE?}X()f}U90 zY)ISr;5otxf3F$16^W9$Jx7pcOdgX~#e#l}2Dsu$81Y99&BV&EBNN21JtIf|A!syF-nk^YPzKg4y8^vowtq zw~{lY5GT~gG2{kff*N8rVLpz-#Z`*qVTBG6fe~#MxUqfX{86n|Ti(Y%wdFnhQ|Et| zUj+#dmr?HGWO=ezuU(!jr})!;@o4!`eYn?oQD1&a)z5cob<}^s{~qwalwJogNtIcs7N9;4w8xU^_dU{f_@#+W~o?@daqq zjF-!AZQ18sXm=TmsMWeVX!9Y z8#}C71d6yug1;*j?(GPf=SW8m^}f}7&KBkDiD;hJ-l+6`VK%(x zgCq^_E<@j1FbMTGuZZ7m5&edgS!Za`hTvcf84SSMjwFdC+-Kx=Szp+=o$qiMkgjqr7<^*QXg^jY+5CykVD->X zVyK|^O8OkosEOq};Dk5a@UN12LCqX;iWVnL6Qk)j0F6kWJ|gN~>@!8uKNQMRy;ke* zLG6+MN<{E0!vyQeNVAmh?Mlxj1nboL`EH8~#f<(*t^y5zOU&7ey4o313upy#2O|I( z-6F=+-*Uv~sTuAH33qp;L(u?vz9+*W&|2CNgs2;Kcckbc=c@Hqa`u?0uKdBULAYpE zowM2^Fq=lyXxg2+H%QfL_qA)I#J&BEJyNBos>7B~urq`xtN=AM+M!V#wiW}G#{_C( zs+7;?lrnMaT57a8X9G~9tyfdkh;_cN3?f!sJp8qwQuoPX0!y+{=n2Fn{)aW=UWrPX z3S_1?S*4bYO5Fn^5f;cX($g5gUNapSwa<5?U#Qy6p3D9*UU(nC>n{AMmuZI5@>fld3^c&QjtCc ztThpOov{*{bOa?yJfU&4E?V-KM#+700qV7n52gPQN_81)8NK>4^#*c&9@S1CLe1(m zSnOB1iNz0MHw9ZUQ}@KdhgCX&YyOdq6P(5Oa2A;+fFcblsj|1+rv?ek9-JQhcuDnM zNj;U$^m=;$Pjjt<+B>TDUaF0Y&57i@L=u&U6Ld@!no=Q~R-ylJIoUyt4*5VG_A~IC zX?j~AN!mDOQj$kR%YbVPwZ_@BR)!CkQD(39=^-JOaixh?nr|9MGsh<$LQPhFf(pGR zCe;Wy$>8E4|1vD4fmHS7DKI#rUQ?&x5PGAt$-7b!GN!?oRIFaRzgKJw?$};!X^%*F zM!bDqyYCacAWGCBevtZGd+?R^$k#&?uL<-)Z8bpZY5miaeUyk`eJOuZ{FW>OoS>1e0K&YR5p|2+`ZPi(sld~sxrRPq#r<|TW87V3*;6N7qVpsh_GAK(s zGBYOW9D4rZu&(K#%(x?aL`p)PchzTldu`)aBE8(gsgA3{)vMLPcQ1r><_~YBPu@blHsd?Wz^JoT2m20 zz=)5((IMlK6Mq0-=HXsld}Owtsm`SY zhONUz9gY&!>&a9G(<<^gYn$SU5;NPo1Id#Hi+G_9Nws!14KIiy-P5KwQ1YWucgU-4 z_&_+dO@`M$CSYyySo;TL&{ROgio}#B*(h%zT00jbQZ`MWBboc$DH5W(z{Je$-cY|T z5tjBXSRm3|Q9S%87aUL<8rg(6zgK!AqARB+q}oD6Q566&h3`u}g(7l+LpvMikB`{$ z*v>K)=cR|*LWuKxeCE!0HJ^ujY%NBjgvwVAGr}HFZ+y&MOBI;dJ>2Q@{7M6p9mSHU zp5%I(uL9@?VCeY{`*5~*kzz?HZFocM5sU+Lw5DD@TNz)sI8*Au*pcROCp(*F@lfLY z(HAk3hwZDGsZ?w}7NiI>C72l3eeAJnDX(p8dVGfEq6-N3nJIw`h_xcEIX)T;sCRf6 z^q*W8gUxGVAOZNxoOUU4;_$AkWfVIJ22y`0N<2cUP*~aqA6 zkON~14u5={pL8K9*6e9U-9(MZx`|rNC)Xv`thL8?e6FoOHf%%7Lv!#o%X@-WP?i1YfI1kf?_BVNM4C)amt z=aNUeT)danFOnH3afK;QG$@D29(f*P<`j9l?3fd*jh%c9E<&-XBv7!qC{QWBDZ#`3 zF-Bs-RjkwC*ccj6c)qVD7mXO#Dep{(uZ!s{2~JowI1%gI9y+Qg2qkoiWjh7Ad^I4u6xdL9^Lzrcx{wVJJ6{NWc4xY++)fVB7 zSIq;q2!y{_Sq{R9?!-0gqx@;Kkt3%DkKOXcwc1176V@Vd%gcJH9$eo-dkB{!aZS-* zQ$$m+EJvao;rUWu(VDKzG03SF@0T6nk<3j#${$)-feTLv^kiw|9!)y1Ta+s23(@M5 z78**~-Ya(5+dBV%Q!P8>9*HMU6?Df6PsG(-rzJ(qj(4%Ojd0V+J{Cr41M41T5;_A9 zHZ1~E(HA`ZrRju}xqrw-?;Ub__6h`Iu~D{9z2cb$?Gmh`o-l#*g?1-ln#d^w+4i)& z^r$|-65<7>3v18sA+dh(c>VdM?v0c!i=_1zztUr%@8 zl(465#Z*%lz0YaUyIv#K+g0UF+K-Lx4F|HAu`ZgmcDRgXs7JIFFsfm{>H2D1Ni4im*m|92FJLc8i1c+MS5YBJ@$OZR)qI*^|1i^9CnFCXAXTQ_Lf;6Rux6nHW3l~E z1Vu>7{@Z*7Vy9POzt%s5M9!ct2Utk40%fHT<3NOp4%~gm4Yl91h){uShjd#~7fux` zV3H$BW>{q9H5frUB*mU`NXgn9+R@FFh?d2*`;68-Ld$BY>}Z$OX4xP?J7`ENq130W z)!2z96*|W(JuGH&NQ8H+TpVJnO#RdI+9!^e%-Ueug$aF}-*q4xC%jWr2EU3Q=@$!OQU@*INCJ6|db&)p5wj$++EL;0@h^-WAyd@b)Fldn`8??asiCG0FOV7cp zt)2Y(yH?zK!-M-Jb$kd6SY6a}tMDZ5lE7(l$U7KLg+v8*?+whHK&jo897Ib2_;UEn zgi8VLV?LJn?X^cmO}MJZ5tGzBjl|wc*qN>gQ?pgU1{oL>1m%fSCMJJK9UKAZ93Ljk zhskbcc|g6PxK8O*E-{Vs9xE2uq@LfHqdW#|vPO5`l8PmDEOL;Jd3vEhVO#9(1PZ)& zr>;kfna_j2^HxV_GNDs<>VT@vc@<6Zejch@lHc^xHFDYzMKnE6MMFnrd9U<#Aalm@aoT+I=XEVgZB=CVEGE2dhSo zqGChod(pY3peWU zVR)P(O~~Zr6xYVSVMduexn%dQ3?JGok7-5B{iWWRktYxvMuli;zrC9?ebj;~Gzoj6 zGBV=}%oUm!Jb-_)qXt!Z(&bLF_T*G%9U_l)yK+hpliek@*>CTD5HiJo0I~Tk@*D5j zwB5<^9P2dXjW8wH>qSD#OC#OOi(|@m80E{XRj4whCH(I_`6Kb4EQEj8?fEWMeHu=6 zC~<6};YGR1OJPe-zlgjBGTsS|WlpY@PbHgw?VMx#952FVi zdTk+k)~=w3=VVvWbMc4KL+Y`y5J4MP5ENLC{{DQb)&9VJz4O8E(dg^2nHP1{t+^Cv z$#saLJ;v~qn04baM>B#Vo8gH(4ly%4YWW+$idI(p*6^)tCmo3K^AM0KAK!C+@@gzL zO;r5!m2uS2eq#1Wu|4PUAg!CB3fySoh#U;yj4c-L)s4Uia&Jc)QcR$}#cfQ2njo&O z8Soeyhx}{cu{0Hr(oRk~RDzW!5mF0-;I(D}cM2YiG-zx-q2Ou4n(-AeRQ1hFh{}js zZMPJ}GNN|JC<8R4< z1w${IN<4ZA>(xV^|5Hc1XSj=EW@am!aN2^ zXmhlqJyvSnAMKbPNeosi0G&JkU!!vcZ!*w1o(6b2H~C+ubDnWmZyENWZ|np#`3qwJ z(91<*03@_c92lXyw>T8eg{xWEZ34{fs&>e*wpQ5Kuzg6Qs0=Jj| zdhzoOiHRdLjQ&T_tw#v%P_Q#?;*TD1k`Zszk${~I1ETo1OctV z){u|uBii4BdB)ns0Zzw(HB)ND0FlTLvCj6Bcud5PL$vo@BH z0@%-iBMgBoKwka01mpv{dH|_5w0y@u_U2O#-oFCxFFugF^aEGLfs*^eF6kD$br{P- z(q>K<*b}%y7SvyJ%_}q6AYW0J)MD)ex&_yX%ruE`H(o+Dm>-D=&=&%~pZ`Sg`W;0wqfH@(#Qz(n`^Xl%<% zH~t(D`e=f0#EFgE4qFbjPoQIlbs6@%zi4gw+f>#MHiS#h1FSw<-1h=q)E=twMIU|?%c(V>T;!9>e(_{2( z4$1hd8jqJEk_;{dj39}DbRZ=!?;w%NeB8~r_^Yqj;Wi>399p{3loUYk=nk8c70VCz?LD(~8{ zm3(`IMw(=!@t205ncltX&BBN93ms!)&egzfBo0!~j*S>c7V7@_WlElQ9X>idUDch3 z`KYMQdh=0H`0-&_6!#bN6Ls7AFyHDa-Z<_|2Hon$@%`pX^W@IPdh_n4T)wZ5B;!(N zzO)=~B`3HHf1FitPk!ZOJnUDFZdCuVva)Lb=RZibN>_?k@l0k_pCPTvGo-8Z3@Ki; zr3bap&h+|JRf_40xu@w*KjG%*YIS|Rx<0)g?!-3r@Lrd;l&%I3l+J8gA1n32@b&7b zQ}bZy4rW9*A579ExU}WzBu-el^O3+qxkpq6zBsc{dF6O)a&x%`>ltk6e9w~yq}!V%s#s7isO8^23=+|gbr zEN?qj=_$u5Zf?&2Js#T{ajz-`P>Swg7P1hynXw(+rKTZmw`ZU(+9?@Eq!6!$B#JY zAqdQf8A!RwJjM6T-{ z!PTQ1%lZl?($3fp;tqVI@;k2E%nvPkd)d9+>I3-ww`D62eKAv!#%nF^^#b?EDY%f) zW4T)DyX+QoBV8%JUs~t)YFjsNqmKVZC#n)F<(1=-mp(~rgsu6fJW-6rfVm$4g)8BpN=58@6D0vyuqT@zA%@Yjh*kE6UA26+)M`=ahP>x&M z(BLIcVGT@r0V3lEB1mIP6dvdpeLuQ!IGj}Q;!6b&KMyNV#|oK>3OyH#HnnjBdHd*S zP|^RG-V+sQV}z@wPL)7GldN*kBdW?lQ-(37*K0{9_;FR1Y~vV19O^Pd3;nZDnfoX8 z(K4FLEDd$OD&FEI|Ek>7G^25=KwrKZN{HZKNy-{Q56tL+jEecFR!@@5`xW#18PzeK zGwuw}V8UHNFALAY^TR*GftTNpTgjwvo9A|Bqsv8Hh2vrCLQQv8G}{J|Mgz#XO5li5 zA5Z&C|JCQgSIo2AH*ZhT!pwtnbi>mur(wQ!6W1-!+e;-ippjFAzYuM~*rnr8Pv|$j zbAOjxE9qQBRse#HC=@J!F(1iE>yIRM4nfkJ#&Za`4`?I?I>{-6Js z13qH{K`1LE!V`` za`UPg*9wGW$8DOI^01uXAt>}o@^T7;ve6$i3NS=zeyX-OhJO9_5y*(ggQypvK;Ckx zoA9-Jxx6hkuOJ*Jyw~Bclt(&gHsds%S0sW`z>ujuco9Te^msi@)#g$S4|0Ia*OHD5 zHOKt6Ax0ak$qA;FtjVyV^o{vWliW<5EARti$hYH{KSfC6=46Z)7Z32FBRv!LeAtS5 z?~*hj7wPw=9hUw8f%tq)1yx8K5iIYrVED-Wfa+}{ z+S8lFGFvBTntgk@i5EDJqh{Btbmi7}-<=^mMDq4ZK0xa4`T4zmhr1_ddlMe?e4CH@) zI~p7fG+6yvqn68sg1;lGxzN(ZadeE%B~klTT12oh_$HoHjdwZrH5^}j%NRaCH!NZL z)2|Yw|L;H~1otEQ4qn2|;(t@P=tsy!VvrI%+CGl)PA>v36iRzwLu#7IAwi^uj$}9h zm5hlnNgSQp)}aef>>wsN{Ng8)4X`Q#Wju;k(fOj@(G5meP)5i@f8qDYe&R=uRLx7M zR6c*MT#0W?uch9+UHKhd!$dfKT+PG!an&^R<0`o3P#_+$d}2bP?UZZOgh@v8F5KuaQSzG}D>;CMVX8G>zvSF(<7 zob=*PsCGI@v*hH0pblUFEdz-*@zFeDG}xR&AxU*0@NwNngr47@MbUp0(XIT~e^p9S zDI!3o7=dNH+MOk^&MREZ2d(I1NbX1D3qR*)b`jB{gq8P5w70-QOVfNRkxq{LNtV+I zmb-AnFf-tCs0l`6NO0FwO%qAYVFGA>0quOL!To6pYEU;iYRdc4;<4BiwAu^$(mwp6 ziZKfGczBgw=3ZEi2KKXf(9Sx)3^C-vH>rHCU_D*Zwk!84zx#dv$5n3JD$I|z^GN58 z=p|*ZKajB`HHXfzE8)|pdU_s>2fS$Gsxjp>!?EoE`sm;Dm@7k59dAXqr%CpC#*$H*9JS&go=Gr7_*j4xG5jT`o3xrcEoU1eR4s>2`%nV?>b&vi)6Qv29m& zhQnSQ4VI0{Y9refQF0zAvFyfw$zB%#yf{9^nr2CTT?D5!a09#oZ{BUf6br2y#ce(V1GElwj;C`r5A&y-G|`XiOwUe zeEE&g@_LjtJGX8=jPd7fen@5;YSxjqr6Lhwmw{kY1q+60g=3u+3dj&i0p&W>L#sp- zc+$QzY&mTe{BvWw;bEl$Yno=2rgI$7$Y=2}6vYxetilC|S{2dIke0! zYB`6p;T!rP@yB88Bjoi#E%)63W82Baibfo7d0mVBc4feozOdG(^?dHyG>-HU!o)_1 zc|kDB!V2COVBxeTW6U`bG^uQ?t*sgOhG5h8d=ZpoFi2ltLwI`XtAvmk!(+d7lQUtSNP=pD z#PS{u@E6XV8$N&Jt$Y}IdJk^$C-31yi8Q@g;VpbO`5R;H&$ON&VJAkf5)E3FTm9%$ z^*m{19k`EcYokv(mf5LqFnu*PY6VjS8Q4uqrJ`W&ul=8YiO4*3j|Q_L5*ey~xVGs{JvT2e(gHR=>u`%SY!KBwKeh{>y0Sv&=z_z!d`+Qd#4cb?P=8tZa zF2Af`voB#AY}|E#BqRL>`#W`0h8T@vR9zR30(0Z<>GDH*8pCE2iO6=@9=`<^x&Xlj z@i@Ayzj%#J7Wfbt(>+YQu?>kFRdc(Pz-2Ld=C2iaVLIj1mF`jysw-RWaUPtRj9jtm^BqE;yidc{Tn1}QWyrQdD@4I!kS%LH zY+4hVwq|!chJ&YD1ibCGhC^=o#O^GRNFhY7u|hCNqlKQhi|e@>EL3(nB(1Lnh$c*k zLcGfEN*S6dR7lvC9+@dJ$ezz8JLCrEqT@~vLHLnEU>GpxW zP2Xsm@F(>oT}icl&c;2BFzxmZGEP{$$AIANcxHnnJN&OSyoT5?2s&j)>(^`rp;6t> zT;64;GmnSEKgzfoj&LuSVqb~FxpJQFdLh!UWH(=GXTEj&k2jsP#Epr?AG@-hJCV2e zif^vEJARg56aUF&c<0i{6p~j;xq1xkiGIKgLlG73!*5tCfRaR4ma7ty844XK$yd9<6ILhGE&G>D#DGTIW!XW zM3c9iMM$mF+76f3Idp>}^;mQMaTR&S3H}iWI?voM8tWuxW)Cl!l9kFfK~p4XwnD_y zf3}HOq`MPLe(ujxjxnLalp{<>H{7za@KzBFw-3wYxVH9H{ zcCpYqY`+-A*#2iLggXvq9zb&S{BuZX#~8fQQ%I&QtQ&iK9{AKt9yM?2k<`Y@2(len z9V%-I6%8akvr~Ft2-;z4bL)Ich}9#vj6C}HVyA+vRsheavP~y^JeJtgJK}gW$7>s{OLJy5JBO;C`pK228g%?8NTg&$PkIbVIg0S~ic{o^Us%hoblG<3sG<#57>4oXB)VrfU|K8sP>@svg zge~u#^O;Fl(#q`uGN_ie@O4Nk6A{kP;9L)PrfHOwQbD}}bzz1vwSbP$HwH}>8Noy^ z-^R8{$-xh!OMyn>SPx-EwP|<~pydtHu?jON+h&X>$%lIY3nzIHcSp$*7~hz)dbHgAI4&}`5`ro+Q z7S8H?G4F*h-a!{90()quObX_R&TRIe$L7VrnqAtOIhj+|m{;K{!T*s0Dedl{Pr|(w z3hIbM;+@#3{A@O2njO6}j^%j1wHa~cFGis&BS9hj*%m6dfivIOkELrtWyDXPd-)K} zd*-VzjB2bC^M2-m9d5;+XCF)Umr@TRC;vcoUlO>n?nLy+1BGV1i_bt2{{@OV*2F)P2J4>Fx0o8H2auv{wY1CSw0*BqL~FSs1mbVm z8A#m$ID6Npr!%^hleYqp)^OCqL|$BYDJ(Y2y5@F=a$l8AYD8IX|E9*e{5?s!iYQx? z!hM@K7N)oRaD2vWeJjLM766#5%fX`+n2fF%n9>Hg(3iEqk*s_ZrU%Xq*skxZtt6$W*eiavsR)1u44ly z*8>jtpG0dJ3sa6tNKpf8#Y7+tNZrP{{zD!Z?aO3<)#@>}T;iO>c60)YmwCsg=CsjO zM#YS6J&!3(&?#{$IB3y*MYOMyFP=jG0tS_z%(l2TX$(&EfEz0_q9!N!J?|ntH6cA3(}lwi#`p(`(qO3(eoI5Gxo*^67E!V$$wFO}FkUYZRHW zBvVr*&DaCuvzV-qj)z$`#3>dJRKSesK!^=w*8LS!DP5F?ZVh9xK_|B>i260->T#T% z$FWEy;30FtbxR8}84zoDcoN|W3T8ow7Jfcct`KM>!q9TcT&WoD;$k<0mvS=?(%fcQ zPMhO`z59wT70KgJ2A5*!`BIfls1E&~OcmhTz2(C}?}9eKf>q%j^UZru0<*=ube&on zF${sJ5sCYj4coa(rEV&Tey}lQlbJJ%#mZslv>VyijX`jL^ClLs{0A)9{8OA0$G|(++jDX<}Ig-~PtCX&)N4I6q{U6Le ze=JY2YS3gwwU*=zwV)KJhW?}d&nSOhQ)ki)7;|day|s1HFge?Rz5I&L<~>ekG-nO+ zhGeUFYHADxiz%KA;>>_hWv6Q0eYW$&xDuNnpcYm-ACGUZaXiKZe4In$Yz?badDCY^ zk_WZ0Qei>wdM7wY3i+K(COkq1HtyctT;FKjS^Hjm%LnAG&N{qNgjRCKLbvgIXEo-k zHsxqWN!{E@44(=*TI5a^6>kR*sr>R28o5nfZYvq@G5d3mXB^!y!o{XqGH!HmgZ|EQ zOv5mpg5`6Z%23fE#%s>7{C%~)J}i(^kZ*alelY-;Hv`;H7C6sj@6b2L-yvn!a+T+OGb2|iu(=fHMO1v|gBiK{i@uhTtGrl$&Q%TYws&-u z??;ww)bTbX=SIP+M!svji;+Y3Z^1&XaxbWOZ=mEj_00vVry~2&2vJx}9gc8q&&p~< zH_PK3+tbwyFG9cpFv)x}v@C~iy+no6!HZ45!noSHl$_!E@m`o?p%pW`xG0?fzB=7} zlCRc1x7CW7J=`xv)gHgR)5%xsUD#^H%zh-*>ciJTYyHSpD`uuzt$kX5lW#3`)ry%J z-I@v{j}M=3<*Q`_+gc&h=7c;}1|K~9^xlVdX)6Rd$8@lPY zou^~$O0?Q=+_n|M9NeW(6-KM$XMTmgtq|rYN4k42z*5(OV@H^So0F-9wf+!yV7dxJ z+d`P53L5RVpxds3oOLEpVGc;8$6Z|MCHkNg%~R|s-iO2h7_S7^(k)N(Y0IjT$9quvL< zLR^htNQi&w(gX)L9Vp7N_!cvp=(bdCa_7;0zFMLG_lo+nMTcC>>mcz zJWVTRwvVN?7g2OK-&*_FwpPqcRKA<77cj_Hil8lV=AtB1+1R{%j*gnE<~Ui*9H=Qf zUf+f0`qc)`nuVEa34U!&a!ol)5awvNOAaT#al*aEEd^CSz4XmF=U5&UGbal0U9ge9gD*pY_B2~-ygsBdv&{I zQ3`Xkhb4QvsA^GayY3a{4Et5wC94DN?$fb9Znibkwif2Aj%_}FcgJtd=~$4{QM>VJ zYxLNw&~Zj1%uyY?v$yUKh8?G4VUDWI!B)>#jE)=7!yKjI{ioO9o#j}^(GccbR3mj{ z*2jmw8g(eg@+!#WTd5(+x4WI!UOR~sWtgM(W9MDlXD;p&qia}5E5aN#5yzv%cXDab zOx6DQ(^G#q<{S&Hkm+*r08dqmcYgTc7mt!tr^R884!7Ccy6--my5Tm+>1qr6JK3*Z z3tiVjm_wI9fFs8r`u;H1?K&EQ9F^eK&f1~hf)ihuqdny1Xx|_4y3Q31bJW=FpCx{m z>N;Z==BOe*sXtuxQF4kH=BWAUwFi*A)!eQ#KS54U2m9Bx^H*Mlo*U`I9Hk*0-N6uS zTj)6&!W>n>CuhC)eg!v5g*mDklMmR2)LtB~`Te2qj9QqZ z7Gi7Zl|MB1(`sLp=GWTump*lrV>?SB)8>Q#Ro;)*-U6;wkiL_5n4`^ihJ%NG1=n_v zGf>S#cB7A*TTRlNSLGITT0h3p|vy&a5h3gZCrGHyTv({BZW+x z69QDJPxdYV*R|uM9^{N7TyG?H?cVB=KWK1{Z70lBdQRW9d_QjF)G^FaA>Qln_!Iw8 zhTG<(`L*mdI)z1 zC%!NTvkMygE?z!IueWSXKUz72IV#o5Pg@6m1vtSMV{LtJsrRm!XCW4{ZB7VO4bj{2 zy02TQb7I0A9S}a;UCS}p4G3Wl1V`kzemSrC7`t#_kdvu%@iKnvk5QR(F2WpDk`K?$ ze(_qszF6ak6>_vkz1#TY6OqNvE{0heOMCI@Y|C%M#nQqYb?NqAv~yIrX-t^YtB$nJ z?q%YSof+j=S_+w3>GIAye@2n@T$M0O^=o(d7++Q)GdEg=IhU$+m+KFGla*aMr7vWu z19$$an`7~%Kb^_m-0_2SnPysAi}^MyfIDedn`(;>U(0UU6`Y>k!Qo4QJq|Rv%1==t$RMkl4o%)WZRqoCZxnk21Rd2zMAf2uffl{jhfyb3uZYnLF+p3aJ4Q6YQgHG;ZNlQxw6LsVS}buw;2B zIl-e)MMx_{T$4Lm#zCBqw-r4>kZ#_@#Z#5N@pw4Cb#$X14RCvPwvUg5i{SCx#KO}Yx-Z6gfODh02VxF}!D zNxPBi`dFM}z|_~{_+XPgdkP~Fyc=h`RwiTI9(={q=Gb*6n{sJ?DgEc?{MC#B zNVK1Mmn=#Zy_vQ|GBXsLZX3X(2A<}L(9?L3CRuV8TkXR}bN^Px@+%l|KN)v5y`ju| z3^TZTaU73^;|#}^O*?Ysp?yQHgbF_AlEZ!buMgdro_<98I_MKx~c&I6=XWp2C*s!=dKVNz|}+)lxGBi=vD-uU~oH0+$5y z%o;iYNA89tlCSvWBzwsvTHzZJaCJOPoX72gK9${lY-AuO&JXCU6-i;4F3n5|z09-~ zVN5;8veP*~M$gSx`6LMtD1TSi<6gBN4<?h@i2CFqzJ55>hcH;mn zKZ{=swm)0Z%)EzJdBDo=>js@Fq%FeBd5|YFWNSz!W4KTH&Oh#%rQ8833m*PugjhZj*F#mM*md)I3&J+K@P~`95PP@=umiF zTPu$JL5Z!Mc8%{m=G2E8+%;~h+iTFxleJUs@t@%@(PcG7XK6IVYY*cFO_jyEFa(|| zq}g~lfY(y;jeav=4H@<(LO!3Dg|c``Ga9fhWARa${^Zc1klJavHT#1$82rPO`cpbd&7tnESPa{85 zgU%JDTvlf4*puE(ak_KQX7hn>^Q?*Yg0?(#vdp`*bMI*P$aAEZvpLH>HC^J}_|B2Q zTjBe7OAQkh7S|N+Bl3~@p5!PV(@}q%D_4FA$d{5FGG)0U*~CA-+57hL+6h0fJdjmI_qf5@OwIy@^YldJJ z4!tY7is(kw{fAD^hdr4!6ACQ!`MRizn!yIJWh~Tv8}$+|B|33QQO&^Hoj>j zSFBngDCf_K#T@NQKh2DpY~bj^*l7rB!RrplEc{vU z&l5a4I93jOhbBSlm>Uzrl3De(L*Nc+w_w!>m^K;9hD&3|Je^~lpSRIZ~U^x zJmeIg)_^ymw;9@d_02;Y>Va4rVQ*5@o=g_hyB(6R`lJ9M?sGJ&GWMcGT-1n`LI@?r z$_r{(-(S1&K+`O;47^3SJC*-YRnJl`{eV0K){u+y1nR+LH>u$94 zFn2FW1n@AVgE`Zml9(=ypNq($aF)9xm1Vr@zb^qUdap_dhUHqI3n?LW&;h!mN7Y@a zu`xlS1y^T5ne9_n!7DH34p9>}wpC|c*laF`&OaDKpvqT66fGAOl(zu{_Y#UsxE(*Ru)s9Yj9i&AlBV{X zvcmJyuL~I0Wk6w_;+yiob<*6j#+PY?vcl?@w^lKqQkZ3lKbI96{r~#BFv|*aGQ$-A zQ@LS7{a>9O7Bbw9l8#-l7_R&u%#hFk_=^I!tO1-8Yrpc8JOAgfbNM2){vB{ES0I-c zdLH@T!LJg>S0=$8NOoKTi|VaD1j57>?6h{_Idy)R5R#-Ty10aIi)k>_@!k$zL9icA zk2)r@0%1pH+V+%Rwa_6AV;SZ7DNZ9IFrBR5BNp*MkNt}pJqW#+67kCtfE9rJ^fZPBb09G371EH} zOVGAF1a(USq06}DzZK)2KYQDMZUF&o*5{$PSbbE#yAZsB(!2yng0KLi#;@{OT%QT&{d`O%92_(-ua_a2@hDbr6_!MK;k zw$loD-IQ#*F3aM-OXRAv8B${dbcKKfk2XVa3c*0C5w2~vDULveGt%(`Iw zD>^qkN}4e>7z#sb>=-%U=qaYHT+D@F{=Z!WKX{cepejP+{Gwh#A8A0)msBkHCf(0VZ)pS!JwQlr(4HUaO~{y7Z&0;w za0GC_NKn*-G;sB6J^myiFK!2=AHD`sxGfr+sCC&{>f>t<~nS1yK=N;=Vx^9YtJ8&(7kzb~Ua{0R@w+LaVd{ZD)e3@CR?O_iwv$^Tks!X2fumAd}V06~Iw6B>9EJj@{JwzxF1m zJCv&v4{kxN9{k&Hmf2Hy6-LHiV^96^rOH6+OeZj|lyQY0_qA{C6r@~nkM2y7GcJ&y zX3OW1G;zZ5T!_bxj1;PP%M%7(;Nd4oZtCNjK8JB-yHtRHginxNf5gYjEWiDB!24!| z@n;(IXSGl7t6tSO>i~8WJGvZ==F8aA{A5;UvGnhY5iN;$Dh_o_GrU32dpFEtI%`O! z%+@_zbKjc4D&4}8mz@QZVo?I@mQJ|OsA_{xu-#s+tXakA7l*RVB>I>3OF zhA_36OSc@xD_$FwRfq3C@%RB7)Q8EZxK%Kpfd@}d^}!?Pk32lIG4VWZxe_aw{`4c9 zyg0;vs?VQScXum~A8+^j;ZscI3$41M=rtrt821yv1QK|Fv6`Bbb1)I6f-r%3fq(En zc!Rw158s%c>7(mx(G7bK00f_DCyq0ez_!LpFB-IwOy4N12bE;5!8#wjyJ8=&Fh}T2 z|K~?xT5)qY#*z@W`Bw0_PduilPyQv?(WiYNW@F1f4sn7QQk8;qc-`oZrZOe|(>?Y9 z0P}bc1{wE!kInVo>oCkPFLZc2lnu&Cn!M&?9z&9*mDkE&Q^CIJV&8uXUgEGXK&fIH zcDl9h0w{SNrh1HLjl0SzeXzp5_2gcD@sbpIeOYG~_WYF9Jnh=oCKM0z-VD7)#Ys8d z(5$Ec)nm+z_l$CI?6!r^q9=L6%tJ!?DiU@yt@|2e7*VN|>st`&19PbI`Pz$Dd2J{pZQ5FAN`1u_K6?A+t@DU|9@1@*x zZ(*SixuV$c_Q@2tPrb-HFgXf1T%j_h>h!zO$aBhjs)h_pW!;F|8g{B_A08q{$0#Y} zz)ug+UwPcb)yel>x5>t!ZJ^jEUYyo231l zJz>IgrbXT|v0SBv-!Fa4BzM(2t=CoQ)dI|R#^{FCQE$>t1_;)r*{ZxmfSXLFF!t}) z4o=gb%3nL62-K{{O0NIpkA1LY-bYOSmN!4B!S5MajsEGUaePv(uCG_W&LaqaoV>r$ zeJyYR%+@Xc5LPE?#ns`Us+$3~H3nODiGl7M#K{o5chFp(fJG}DnB;x#6mhCNpwrtF zc}VsAZRy^652Y&HOdMq_J$;tnyiSJ?81f44$l-*_IPAtu3pPS+2f6Jrf~T74orcPv^9VRChgdM`alJo-L8|&gC|&;0 zuhrVAOtMv{FzUIO5&~V$EU&=A4BL%q`g2Cd&m^#HrH&`ir>hoLI;@1o3-P$LJU7iX30m=Y_w z9<|)-5#Wk?mG8gjF3l;rs=*>`jN$>kb3WBzm1q^_92j`7$B(^!l=SMdta2S4a*RowzhkVAKVxy(f9I*LDYLht;ouPn4^aPbFAtk}Z!#8n$ye5tI8sQej%`f7e}JI4O1 zG(8`VTjcL$Z!phxGpCgSuH>Sl)$>iEoa<5wHaFJJ^#A5HGK)GAx+i?WF+4a4 zC393+mS?aQ(8SeI@h&b!Z)U^sgPO-AFN2(`sHg08eD+s-qnlxf|Z3YzI`IZ z?=Meb@j?pEr^ZfeKWdHhLwbtK98xnU)u)|xr`_pxySv#b&ilIaG2E2yoHx7JJp?pb zZ9&-MlQd$axxjS(m;xQY;&yCgI^V$jr`*GR>cCFI$EJlmB^-_R+R}hn5P0?o${!6X zEAB^~y^1&qK!NLA3et*)`Ssp_@KhJJz&opG+I8HF!rsyz>~XbhobGGt#(W$K zyF(C}Ev4Bffp!spb@Z93Ha5$@G@_Y{%leWwVKr;g$_XomSg)WkjHG@o30;H4a*F&A zr^ZaLAgL@g`o&}|($lt$7ZAo$nJF_Oir86wr6s309l;5LpP^}UI_$+cJudL@r(?=h zXnC#x#wT_=G?d{6#p@Zog*cT95H857T;1us@*|fEFe`vwG4lU2xfMnj7i3sieLByA zSmXk1E4J~M;GB);EyyxkZ#u7Rkp;M9>-=%u(6<9TEcs?=p*}h@=C&X|XTqA!;~BBT z1-O1i{c7eX>EGw;@o5o&m zh@GiXKL?Y=vY;DNP?$P7|DvqUe0b*xvUextk}(^ZdN4iM`^@JaD4dFOfI2JlqGWPt zFMkT19G}7o>EPV9J6S#%$VM;ksF*z)_t^#;^uwI*qsU63iG%zhY}xQz$Q7G%#VhvpTO+J=N8++pM-hfsa z>Ge=w#1x8;SC~u+d+*}_?FtkvqNDyRxr!!;MaNP9k;}<-IRPG_!R(fNyIsDF$MZ>= z?Zk@BO`LSS$uEVn81xu%Oizd2v`nWCB;Cj0VEeOAimyQY+-Yv9W19BRZg4*`^SQ!4 z7A^-MsXJC`|Fv-eZkZ|EGv zeHLTdUWODv%&-NsD6X|y*Mey@raUgpM_WUxdGGLlIP15o=@rArJC@5RW-!;M`Py)0 zI5p?+u60lwM-(+ooLdSpy@5|-2|!2CKyX4bLr>bD2U7fg?}uE+6nT&syL3ZTUtzoM6N0>)|lFv3=vl G@BcqRY}NJv literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-46cf.3bd3567a.js b/priv/static/adminfe/static/js/chunk-46cf.3bd3567a.js deleted file mode 100644 index 0795a46b64e5251f4a1bd0ac4b50f77c0103c8e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9526 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 diff --git a/priv/static/adminfe/static/js/chunk-46ef.215af110.js b/priv/static/adminfe/static/js/chunk-46ef.671cac7d.js similarity index 99% rename from priv/static/adminfe/static/js/chunk-46ef.215af110.js rename to priv/static/adminfe/static/js/chunk-46ef.671cac7d.js index db11c7488fc38c4593d070fae4e33c020e9caf9b..805cdea13fb17f2bb8e378d39781dd66816f6f97 100644 GIT binary patch delta 23 ecmca=bJb>pn;gHHxnXi*vU!SLRpn;gH9p=n~8p`n3ZRvyfWa1qd@@ OIWRY6H8ZnvV8{hTtrJrK diff --git a/priv/static/adminfe/static/js/chunk-4e7d.a40ad735.js b/priv/static/adminfe/static/js/chunk-4e7d.a40ad735.js deleted file mode 100644 index ef2379ed9bbec1a154999a4a3ed175a51e681c19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23331 zcmd^HeRJD3lmGudh01%Tk94MFyGfJO8Bfn|Y2F+=cI+n2Wjr(qOSC9bB_a7Op1BWk zpYT4({T2%lph!7#nznQEbf&Gm02YhI?qadKVEZCYqwJ!0Ax_6ZIDA=T>3F>X_WAS2 zPo3U)QViN3KYHO{k`B8M#pB5P_K4y}&<|ft(a;K`*%Vqd*3hhR#hc|@@P8_lB~Zs7Acx;Z`I5bDWbKTBnzTA?bq?OyI_^1Dfe|oDT1Sq%!thHWXiA5>lof}sSqPQ3bG90wMX9E8_vM4g~6%>$-~T9`Y!AD6JZqPPg|&>%27#Lb_V_XLyKLx#U91$ZCHlm_mBE8EBN*5 zd9>tpI)1*scX}>D*^YZbr=9xF(#RMU>qL?-*P+y5E}+jli5S87_yVAlLL_IslkoFr z`IPNRt5Eu06_KCOQ?xr|nnppKdj3cJ8i)Y43lcy|7Kd92?7|w^#JoEW`l74bZ&l|g zp3e3RV6uX|OXjf~W~l^XpyTc$>2fm$1ybganIaF@n6@4_`9*vU!yaeMNpN*SlXg0vI-mU2nQ>N=w#b$STAU^VX0VUh39^r0 zpgT*~ZamuSu9DiWGC|!)nP3m2=7<3(uTz2b>w*4F6zAC9cnT}_Q6DDS7JGgkT)a`o z%d}g|hm`?+IaXAJ-1&$ani;b9f`^ndAoyJ9cno$2ay5`GRs`h`#wpwlh{pRCE z3ANI(EhSkISnq`soE@WXNaEnFd8Tg@Q#8*eV;pT_O;h5Wv$AtDm#lS(E8?aRwHd zMnxVS+CFrzFXWnca+(C_PrP!~r8YpR3#rV^q8c=tZ2+I7O{yIRc{IC*>KN+aY+lvG zKsjUpnQfUL-R@Z|oxem%&D}h^=nili|SGPqQ^2938i*3SR)d8ZrI!@Uuh>0`sODl?_Z@!j0H$n#e;;v0d%=tnc?FkI~ zr4LmYA0+{OEPg1i)}-=GXAVuRFu+l=P#G6VyI(oqR@T>Xc&p8&8GDIH`*QFzW`Uzd z$1@wS|NZa(p$&lg)9L-m|DnDc-$qdLED?7xNKvXf^@3;=r$lMVj|TUlffF^+C0Q@6 zuhE=>@nf&*vX1VS8IDkDMlyN&_|Nh`k;HP2Z$Ref&lU2SyS(4ztu=`Qc^fsY{5Eos zWMPmTjmIJngW@i;r36CtuJBp=B=Twu*D6lWvf8m^Hrkj-g@aX7i+O!#c^=D@Qu6LU zow$@DPlJSK{1Z7DD35PpRz^Y%AfLqX)teVuOu`WU;1^lTB=Ab>Om$~;wYkF6C`kL{ z)6e)8vzzGPs%$0mmt2m8+zz=9J^YvriP0>XOy#YYhGuL_(BDZpx?!7zH7|LV>}Y@PeqM8hN&zn zbf6jv?l@01vTiKJ$egSQJFq{-;{nzp$$#VM^=L`ma-S$_#@E(3qI;UMO-}3rl-LlP zzO6N!#)e$yFs|J<(#-Ds7jz=c4h>6`_vaqsWWe>m!1Bq*0@6v6_}-%@kAGSTA3X8Y z-<_v9E}i7y!uFj|SZiG^y*Hf*@2TuX;w+dXay{=sO0rxc*ya8BU}Ngsz?veRWr#D` z+dTFxm`=$RcXDB)0G+n7gA&sy;7%^Apicest#<}fp*y)SnWEF_huue}lS~A50kmzwi|CA-b8fZ(+T)kUhs@Q}f}2Y~Nc>#A z{Eas~)XcO18oj^q1AHEk7V6O!00rb06d`!3kT>ldGN~%(xcZD zhv-$50Fj{i{78II%_8B^7Laxie?gDyV9JVusMg^x+{uLn6Li`hO=Curc7q9ba$#ya z_FjA_JDDAEVf|BJ+6#im22=l(F}bjqxc4yHLlOnd0!^_N+6s)87GCdWWhcEl7nYK0 zoUU%;!p@jdtsNFd68c*-(P*@US^x=A{9(f4FN$tN{kP7qS&0>Z7vRDsH0n4^e&=b6 z?nFzU1LIK^H3`V$&GRiDqNT$E)DA4a+~sD&egiloaXddeo+Zx4sedg`Qw*@5vW zi<)#UJc!{`5nioxC7@4>JUZOs=DuE}1>j8be##G6{`wIkw*ZotcxM}d2_WxlVX*)N zGm}7B-|bg9+pE5YF(wP9y?D5L{D3j(y(j?#lHSWlghP<^Dvg!R{~tVVq2#GJj8)%fEjg8JGuGek8czO=XxhCfQ*_v z+G68+u8mp=7}Dq$oANg`dZw&9KVlOz9O}7C0P*M1<_ep{p=OQ+(1Er;e!;e9 zs1Gy?AXRxWjafj3T2(B7w&&&6vt=etZ;u72L#3ZeZZ?OC0VHG`4>m5|s^&ynMhl?1 zi}8bNZq{>K0By|6Y4R&KYYSol#MH_A3qD*D&D0Wr@FV=Gch@Uw^hiss1(4JRFA5gR zk(OEuAf5+rheteG^V|YR_co?e=J`nLo&^xklMj;DJ<>e408)v)(-q$DkyZ%{AbEYX z^p=g=sOXM}%fD^x?lUn2U>R^=46vh!cfYJ0vC@n*?<{~Y4zlzaW7OzMKuY^|y0^>Q zn(BSC0AlUl`H+u{RI}Csh&fBe3WA0(Oli_p4%-h`Ll%DpU~(N81MDc`;AH0t7cRn~ zIamV5K^N(~HSfvt5-Ys|Fb)eNI?j(HK10UFS119*q9>zGb|c5KdrI4~A`jT5Q2@s1 z!1NSmR8A6{TwU^En`;TS0Mef1{k3k^+EW4wvRl7Be9LEGq3xCh5Sy2me`3uoG@C7e zB=~V~{F7o)p(WS?NP@*uz#J^J1X}ibreaSitXSzS`eqC%X8Z*KGmBs_V-~ zhddf*;Z;rucb1Z47sSIHCyU-eJ!9{3`bf<#^*zG^ z=oH!6>+9LIuV4X5cdQ(W>zFN+BmmQ}ZDG{q`oS@u@iNgJEQI!9JA2M&uhf>r0wUI$SK0uSfa?MCR5GeGzEjv-m zO?=k=PV};N;1?Y;Bo!B}ojlL-wzn0eX(n4|C`D@_q&GqC@}IEmOWr>b>W~AZ1Y5Ef zBG$L=?e1+Kz1}%_v-j@g+1}9`D73uQNu=Oo@#!}0A%9e?o9WwSiixX0R4c+Uw|+_q z{VbV^^%&7x9pPC|0gt0~kD@9FcTzb?Ex6Jgm{GAEH`+syn%dY~pQ1tyV5*0!ftzQ# zh?WnK=}y-}-+}ct>a2|3PqF6?U zh$jUYRrqmnC{((BDiFd|wIXp6%d0g3#!>WgYm(;(|5Gsz7o*W;7)Glpndv1z6-+bN zpC?PI)0{@C?Lv57NKsp;u>mw33QiT3C~-QA^HJN|$VKZ4^&iDV|F{TJNo605i%UTY zC2BvzjQtwqDZ~TZ&=@u+QX)}+R1}U)xE-h?2}R;UVQv6{G z`I$mbTj96uEU3Bz4QxhPiNj+RIe%e`{$%fq-0jU}tqJY50nr$Z9dgQf(sl=DQSU6vM*%WdAMj6icelH}-Fp6fZ8V}fNa$FUXmLFR^He=^ z1s4me7{$QALfA!(Ab0d|x=|@&u1XOpsLusSrW7$VrHDC|BE~jx!~D8;DIyYTT)SnG zK}cDseb!0iraB@`vuffz5Em$!Bv6t;ZOYQbqWWi9Emo~i(KyRdcXtaywavBkV?&{o zMyy9r`VmVWAllYAzg~P(mXdYTu!+?I)p)jMYc}COpBPoeq>@ui9sCm12B(sE&gBG+ z#OYq1A7vxtOX+-$QSw#p@QWd3lAiaoDFg!sdiAg9|?xh)&UXexV z$I9aDG+dK-5-8GZMRSJfGlg=R#z~&ct&l5Ire(sks+-PAOA>5Bic^Gw(j1*LZYYS; zvhn{_kg*MpgJl$UUT$2Sb~YvJX2naB>KN2sqaCw+*LzFG%2Yo&6%62cJfZ`YSX|a% zX@2XfWYxjg3{`oo1w*6OHORnUMLa-ov>C6q3aXw@sTYcst9oHjf4NBcp2BPpFC^4l zL-?PiY|pMc4CPF5RZRuK;Q982%1V%tW?k0E3**|&uLd$+%uLmHy@0Ybg$8G(q@=oA zvjsBMit;M%u*pNVB4<6)hGI?3Q!gfm*WX8V3=$h~o4Ej&t-+~s@aD>qVqe#E(lUyw z_89fuIH6Thd@(|Gi08*Jk_cWUUHZ{QX{&53{NODwcbv*z3>UQ{ul#W=j2<2!jZ&3x zgFnD!_X2sa3sq37rtD&k158>q(Y#EvzBBgBNyXa|7m#+uwzs=G{I zQx}p#&8K1y_4$g`*57eWihE_T+lo4n?^Yl*dO~NH$q~|ZmUon^y1WdcsJz2KC~XN1 z^PlSz9RV$8omG!-yuQ_Mw7y)uz4`JIbt#LpQg1vtg%Wt*QCVw^)!Hb0+f|qIl+5)F z70SoG-_~mS=WS}!in$W(Z(p(|<7?JzhR%`XhDA@(BrfQl_BU^INyk?#+m2m$-81%1 zSF0^#mDuM$RQ{1`mA-;-7u8(zW9rIG>7}EjSjGHPy>@FT#u*CE@)L4wQa2hr3!KK{;snf@t0_uE zG7Upu3#L`oH2tUZG&9DeER{yGPF$K=>0muGIka1!KF?q;5jv~Ukjv6(tKITR@pk#5 zSf{WkB~i^MnG{tS_AvJBhU~hNVA5G5)1RhCsV@3ZG@L*35Et8`7|P6v78`6{#4R2I z&>Zr0zxWW0#|X7fk<9_V^3^_`i|*H6{yKax9}VE(@w}JNojEV}e`&(5BF;K$y~PO> z^|1_k#+o|cD?kd?U4>0&a7TCO4qmY1G(j%4jEAduDS{FWYhkWfd>mRmQoQDGAK+DX z@yS2oKhBq^XTkmWnbn_LN_b^oJTK(OuoPas~&bY zpf8K`h%F-DQBP;1pXYH?Zqq=i9dLp*B@Cr7bk(T1$mn zI@9j1-eFoC(Y*!wuf8Qg=WTi+C6%4X2}>yx7FY-M>oZ}E zF+^_=XZb%!?J z#eAQr2piziQfQREr=C9}&kfC-x$c!*rMcOX=%?uRnJ0Z~WQy-bDPld6Ei2D`d@Mrh zhVqJd*RA?5TCtW#9G#1-ZG%mz}+DWUo2_DkC&DYmc*e94Z zRQ;%!PXi}mcozxj&z{pp^u8z`?g{R4$sD^IoXnfyk{wmH|5=P$X!)EZHO}oKi?{L+ zsX~jz*P+x(d1c>!ub9Z4SsdHJFLDHY(?N3MPI3$D!}*U_1x*MsORLkzkn|%^s$vY&QN{QEzVT> z#^m@!1q6w!3rP^$K9^TjEDJG94cVnYq$4d0ie z+?1g5ewC$c)EZ0i-^RKE^?~&5ia#J_C5DBVRZh5wGM1gcnm<~})j>r_8XVBY)e`r4 z`p(!1<-MgiDJG{y2t}ocz#m}X-B=f5szyQI!bELyg{(!`d?y9>W4*S9&VAxf*?}Ov z`qu1kKzSeDZ=_dW&-nV>e*xEL&gzAIu*RscKA`QV=k9X3?cv;r%Qu zDVBO)hpQnzYEJ-%e3f6nBOMXf(h>Ul1><6}2sSqnm$`}CPo1a#w!HlBts`d*-n+KCVBx5B_b^|07TkQP+3jCet~DBr zN5goSrE5<|?RXMppmcXK8n;KMLna`;b+ldv#jClWMcFi6ONQks}8{y5a|qsS&Cikjl19c82g z1oy=xIf*i=KZ(;gdl9AS>1fj4O``s&^L!i+kwcKDS=`2Fe-yQoVFzDXH%am5n=~6u zsCo(;pudbV{*D#WD+2p-GVFzEuSY$G-j}>ge-a$PAlL-z#bk7p^i2bl@v}vN^7F-9 z-e5Ex3d-#y9YL(XWPxEAeye1+1O=}W^t$Y2L z+y$kQy*Jaie?)%`Tas3z4|XFd%CZUlh2GLHh&Cb?r2vgT%@g{E@`)+^=)9@AGmbix z4!PN%aV-$ ze!~<`p)Z4KOVOQ^@hAifb14K~w;IYi?{bH}WOPjcCb!a;Tqa zGtJJS#-lVN11f1?j4ZDasv0)5nQthCJ{DW@5WAHxA0TF-d+Ey1X3@7bsTBQRJR}jL z_^pEveIYOH#&Oo%yq_{5228Wpf&Itp>&1DuBEXnBy}y4U4hYcFwU!y7*dzMOk3P_*VYn?DvxrJU`3FK2$IaO zg}-clE16^A!m;JTv8eO0Rp*|R=-CoI8er7cdOZWJCm8lDdOb1qo;CHJ2(xE}*%Ly0 zme8Jvr)R~}7iI5TP45egzJ<{j68n~xzM$T>sPl}Ywl=U57>EQ0RssW|WngI;h|C98 z<^!Q+U}+hM&<0j$JTgZsX>}k(@RwoEz=~ub_zo<-rnsefC^Qc(%|lV4p(S7_=neZ- z^}zgP+8SD{hl2IcVm*$kJff_v@t3JF7IpHH;3e7h3%OPp3} zC6bE5q*h^4>0wjbz48pSww77t=lK{CED;$G_$kHmCX>D}vwb0t^HIdQrL12ai?`x0 zgJ9M-iLRv3msxGgE`&<_wbd@f0J96vJ((X~A@e!yR9m7S{AH7c`%}yPskA+{ZBM1| zm|i$9sNWWb?Nd%fxF=S)XVq~UPqjZWKTN%IQKxgOP8VH+BY&B4_|X+K`O8brM07~b zRC+p#X^b$%J|nfp&=~*blQ9n-^-oAM2?P4OH<|DptR-`7Oxj3oFlW?qm~A0AMulZ| zgs;EH*m24;o4!oUE*oRhbadWqC}}sh?%uh#-nw=7(wR}(LMWi!%qEyvT{cUyk&Lt{ zQ6@JVE5xhDh^~_0k77h+q;#C_oIe_3Qax;u{C7r}xkqG3I_DyX*N%^(Dfdi7WW!Cl zpG^mc95~s}CK8*X0uPgRJ01#n)NV!NB;ydv{bYi9Zk%OYC(XzdG2x%oNs+VBoAEfF zG$MAXX+L3nBpzU40Z)XeIFOX2`|&VMC@6y39LGrdNk+ZZB&I2TV>+22qVYlkEQlt= zS!@9{O%Sa$8XhGR@-_OkGtDxDm&CeS#Fl<8DeH3V>>I=hQvvP1S{m(=`SObx@p_IO zjYoZQaP;Rn$0qOtagDd5OaeM_d&<;C9J`jgWqn2tw?K2DnI=XeT>WT*%+RXC5BTh!`mfDR!rid;7p6%*h~OQIHYOe9Hn{%r#+O9x>v6NrR|jWZKQ6}~n^k$4q@vWLVz$=W5|6J9qdO2zssS$l&h>HAet zNi8qe7LqCM^k~Ra2*gMujU-e3c(ON)5b~oIzrm`;g!oRDSf`L%-N=~&Q<|~sf^MSR zNY6N;N~IBu6Ko~vbwquCGHmsyZPr&wegjHgC7muc1{w3;Zi1=h2va;2VmmoO3gHEr zlbtc-CgPkL%QoRijseD1$d#h-2q%o;Pq5Z??dF4ey}sJnY1Gf3)>j`iMh`BYHddcd z;`@4|-oU?g{JXV7DSQ0APoEDs^GW?-ef3@aQGN9}|Bj>-)jQ`JkLoD6`i3)K)_1A! z9u+2-)JQ|WpYk{T`*?L9MV_qocIuC*_!BAqct-KP)d4lsSbd6GyY%A))p{wlex6@z z53TQ^?tc9(ReC3tUKJ`mXD;l5j=lOGm{mWd;w>ruc1H2WYO=%7pVYfMR31N>+Fxc= z*kc+RM8l9PjI_e9Gb%h-{jkIQeF+Yrfkyq%D;a?-Bm;T)&72agFNrrl6Dm*ZnN$-2FNF(HGnCqoS7U(P+*t+qR|I#z zev(ILYo~GYh)O^=p~XrXDJpC0?kb3B4;!m{4`1I${rdXO>LX-+KnnicVqnp2t`7B~ zv^}(mVp8BCCq05>>d2;=_bKI6cqkQ)SOrf{9>rYv2{GsFGztxj`UGO)1!L5xATaypEtPiSKLBZSa5Cx$<_+m(#BiPe+TPian|cn zfzcP3lJ^Ujd(Y*5^+K{%WNZHf}-4+Jk22b797SS8A+ z0F`^ZdKk@dp%S?fmQtEU^ST<7F*diIN|ThC@~z!w15tV=_>~n8XzPP9CaBKmsiVM65_md6JCs76O4aFnQ;H*^ET<^sU4)Dx(}8B% z(3&msS-G0zfM(9pP3~K@cE|L=bA`F`ML_Cpqp%t4_R4N zO^My39XKKK*W#mLtu&BfNlkOM<|_f52N-&~(-r5hB$H}MDQ&nX-bgwdEz3T}S1v|K zsy$(!z#i=9*(!DV;PZIN1Fi*lsYIv)WYms@UgBHtp<*E&R8D2s_xSvhuEQA3DLE}g zfIGo@f!Z7!4F+T!9tMNQSH|G>)i7vqmoX70@GvU)v}EFsG4*K_iYP*CVAHI?M~ z=ZUxH(N@}knw&8X!h0b0LUR4^Q2OhR4(^c@pZID%TduxhEh1NRg=l>J;hD#^jfcuM zv^&zF!xd1ulnK+%bVxh^Slo!tcgd}!k1sq@v&W9qt$^#$k>1XNZ0GS(5tWn^IEnw}UnO@BpmkGr{UXSSBj7j2B5 z&xn>gjeT+_$+i&J6{KEwc%^S#GFO;dqCpNcF*CA`sc0hKH&#pz`#Qx(PI5`ucqD zC&RP5JPbXTKIoQ^z;nI3rsIpat2yDms`Z|KkRyo24@`v-JW17olMGY3(qXC_dCueF z2KR0+83y=76in|^fA$opdBYjkQ-bI817md(kLe>(qh}^S1Y~_d-5~u6R1>4;_s1JF zb!gDU75~uu7xI3j!(H?)G&m9lQD&@6qSS16^=6|n-Z|nS0_Gt^gqJTPNlCa*EJ%-5 z@9sA0nN)bd<-Lx;FVBLRwlQ{U)KA*n0433+ns|YK=o6AKpXI5ME8vy=V^hm9`#V)c zSk8xKBvcNeJoQggf=dZ1$G1H7QeYmL`dZxiD@b!096Xitsx8AEubKyJ83=!|vNQ;Wvu|1B;(E?6`S9Wx9Qd?r!w5&*EJeQ(8%^;M!Zy58=8&1z&qQ$-X%@fnB(elNy? zT%*2@)!GM*^M@NxPu>ZF`)J|xo!SgyHz+DAnm1noqMdsXB03o+mNyVhZPfew3}bG| z4FU6lOCs<=7J2?gCNu=;;x+h-Bw1A$>~n#Kk}r+2o4*~tj`pCZqz&Pc%mxoCJ@v%MbGQUQUz0b zn$99%O$f-6ZOlA;#0sG+qX_ztFt^@FjJ_+v2Xrj2JV1~MkdFwt7;9~;W~5(FSn-C` z5NRQ;7L9%pp7$VfOWCqhyzGGCr_ z)+-NjLdGXhmi;=G-h4r-A0fPCzTcH*2CtcDW}Yk0eU({rFv$_>LI$jmwDd_vz|KPa z$`g(|S@%RzVgnH!i|h9ot-CoLmDONg`T**zsn9MW8!COwI-NkE-0H=97T)@MVF_=S z*j>H5(>QxdItR*TuA6^=KgzG055+@$=DN8k1mi6sbVRd=2)KNZzIFTY9nl1sO5HAt zNWe(SQ|b2-$XZvohpq`FL{CvIzNa9lWLf0hOQ+2(Qxm@Q(uq}D-r}JNYf8GmG%`CH z_@O)+=z^#{6V?>^1gi3b6~P4ez?q&|&g0c+I5iMG#ga31%dl!vQh!Zfp`>p}!%iC_ zY+fdhlq0eh>r)~YE3mv}21zhz(ZI%_1t&5!OS^;zOLA)`zo@Jgr*GJt&fbd30;}^z zZfThWUJ_b8f5%Jm7a~#xcKQZB4wglup-k|5LU1oeKWk(Tz&_-|jeorM2yYov9hk%< zGfyMy9LnyQP&RuML|@^wu~!B3P**^b-FipHU9YQcC>JpNhyZX`)qTeLj8nJ7H0|~U zkp@xkAcY)U@~ zZV=Y8dhMwhqWrl)HFvl(4Mw5ti^F6_ofIs>vGjvk2J!uZ63V7&OaQ8S$#f1^;b8H_4K)x_H?Ez^CD{MRRbWky}w zf@TkN0V?@LIx#dh*qKNRq^Lc!F@qOz*jH>edcO##NekB0os$?lG9qG^lPD+MI$sfx&SEbuQ-7ZDLCNOshZDp$ZO@Ob_4EkTA2 zaKkJC61-&h{1+{&f@7`PX5`E#WLdWtAnI@Zt?8C?lBi+kOW5%uy z!2d`0Xg`x(q$J7Z_83qfs{M!K6LheyT;&zAn@>KE9#Yes zEJOwBG)*|)Q$0{ud5JvEz0pC5>*j7=^lCOa)2~Gi%z1q|a@OaQ<9XfL53*QuMJZyUttL6nRfdcnC>xtRu!@ivR0@|-eT&2#V z^@LpCle_PvbMW1!dQ7yyDn$kE?r1ZL2b8zC8%Gcmv~@HFJVs^&{w46ZITMc(`zBIL zaPp)t=Web`Q+dhtL$2$nQi@7?=vP%osljF`#FIm+Z;Z z^gAUHQtFt^33uO;aNn%uuq!yrbukgdeuyP9CNaA?AmB|M*ud<_$9H9u1EL6U#1uu? z!=F5kJVC&w9pL+vkq{mND$;L0$cYPOG7Q0pGPg>a`6jKR>;Ke8s4Iq zPGn^e4qB*agL|qT&EU~_31Pa8kW!@6n~Sxx(g@9schpR|&b{%DnqgkmPXEWKT4DGY zs2UIYJyo0j&r&tdnd`_H7Beuu0s8xy(|oApveSH$*lmpbUOsr=pOXF~EXMnO_#fK$ z1M?!&$#48Y$kJ^5p-gQ2+0uWJ;<28)zw&6G!txL5ci!Vq zqki{2`8^F&BLYH!#0x>mg!JHw5LcBjp9Io07R!^YO>!)Ibxdb4YsBH4eH^Je`<3C8 z1gY7rJp{#j_48j5b-~KSK2B3z%&ZWzD9Mk=Ld^QFO#6n+_n(7>d-c(;6s7)!K)tKq znh8q%|9n^&_y;q1eYE{DM{9w5xeqR zQWo32$>*-7G#bP~7b*eyKOvT4V3lEVDDWTPV1_K@Y)H3)0;F{Kg}x7QS^l*toKZG# zLy5F7l+~!ak@R#Rjs$o6SNeIutw4fGGS}-1GD3_`_;bi$uMYCjCx6E^aiU=yvCw6l z$2(UM*_S4B?9f@qY%!3<<(iI|0elP!9GqQ|bOAd4hF53y5$&i?BIXJ2;>W6qa7g#p z>(T^bd!+NXMCWsuM&PR79>5Tz!FCECSQVUwFZr_( zbU!=LCVYp7tSC8rLt8<8LbSaYx)kX2(JimtX*BLU#^?t4&5rA1KoP|CWr*=*;`$)- zT#v2wSOsA(#I7}QQA{m{^+Y-i+)j5*fQU6uMw%_=o{k(*@~-K8$VuGH?HlF6pOo~Y z-zMe(Ewdp5p55rkA7;F1#ye!%CMv{Z#MvV(ZxWlsG4jHc6rLNH1qC2)!tDbzv*o2L zUx?HXCNM@k*v!)>YC{|>qmR#u759m|emgPoNt&KJD#=pVvE?EtBfBxA zm$75vV@nIN=st*fB7Ej;HQTH>ShQ*wZk<2A= z-N4CCA7ZEt$>5N81QFb^N>AnTgCSCx54-3{QT*i>G&qc^A>H~U*EC1hmJ?pbQ%RLi zKtK!4s6(NCFEQs0sb9UV{hr?i7pJ1sn{;*;XBh=Q(_O?27tr5wKG58AIR)^$lX5;l zkUk#y6k$=Ycg2o?n$M!~NmObZP5ccMROLZ8n^5Ez@i!%C<p0jT>l5vp^LcmiG!czU4t7xHe1(MaG}<4W%W1u?8bB@`^xG^ zx^_-)`rkf~i{|Ox{;Cu>xb{iP0pVR;CkN*Cu>aR*ig=<&qXi2GG3fO`CZ!1l)j zdO_ge+P1;5CIwcJj;92Wad53qSMmeKryHwOs(Et#;9BM28h#Pd8-%?i^Plv(1?9gz zaO1}BH-2B;C_fD8QGf|mLwyUyH5Yh(X44!$z3!7od+S8kwA%X^gpRf(1I z3`og45TrH2*8JlQsAsI?y1e3W<0FZD2BtqqnNQR@y|AGe^EcmXXD*%-;y(Gx&1Nw! zD0vyuqT@zA4NMp|*jM4_Eh?u`TIs~F2YUQr8ybAmQ&auaRYh#;9ywM{}}6u3bZl8Ra2)*prBt?Ip~!P<)A6U z7}L8eq!avl21~Yih?iqfml;~H&q8IkPqNW6n#(*58DAAQe3I)ecQvhO(k{@KuZ9vL zICzq>Mqq&%T{T!SAJytnl6k*kzKO6p!P^|&5uUFq&%*l}e0S$)=;aUMb}}8<=DD5u z=yDNP;c(PGSJ#~t-L}EF*#vT~5;$Vi$J0JzzuH68%;P63H)d#I=D|6*=4qDGFkicg z>lWyZn#ooQis^GZBcF>?HW|L6a*AbIf6jIW~~-7I$?OX<)8Y~=@k=JVB2!-Z@7 z9+1#sS-3dsN-TyfE#HS2D^8^`;8$j8R0~|PObg5)#9K#4qsbqIyKV4__}k%bO&D+C zRlfbU5@vc*SwOos{uu4zx1#uZ=oYSrUR2GvRv;wXZ_|54+$|@#QWrK!qntvgZ1l(U z0t``_pQ$a5p>Rnw=uQH zQ+6^nBWU`t-;GuC{+pfRRIcM4IK%>o6tCnDNd1(b%z3#vDdxJ4VuxXP?nC#uj(lLs!ooD7M#d55QZdqbqL5&E;6f8g8|nIVqo#XI*Li&Tutu80^Gd~0O>urX z9C=!`kU0)V`#FWS?wUqK-VZoVa-R6VP5g8)q|g!}n6zGT9P0isMJVdG-w%cdLwO;i z@=-%ntA&D}=(2P?Z9B;-(Cy06WHi74qxz3pZB72?KOnev7#%__C>jw@*6_xJK4p8H z{@B9R_VF%9IYyK78P#!xmk$5w~RnnFcGG}k%)8=R#cn1CjnZ@w(lv@U^->nOm1Wd zSO{)?zeXiXV3f-4%P313XEoaOIjrRY2-E6C!{#%yXd|j~#x`x3t5o}7%5#Nar5>WD z!-o;(!t-Rk0D2Y@t7Tb*`6&8&!h^Tch*puSez!O`L+@l^^l46#%5WX?;*oqg>y^ z=oWLlyXk`jH%zz#oe=q`KKeE7A)q4o=<6m7yBLPON70_BC^g`t7{=-dN0z?QURxLw)Y9G_LzxrK4mruSH@{rD)` zu55famWI0QTXAn>H(rCNMMFbq4za3x$C- zdXc#@?MsDzlG2JRWLc$Y)OKY!8pb|Td7GS9sU(9=NbtI5 z3G-^+$U{mB4^T(sqLpup2WAq@wIerw}kjJsK@Qn@0WVV8}Eo z;#+qNQ6X?&+Z0DUlMD%p06`A-sqks3G_P6(u2nWw9~5u0ShHR%Wi8u`Hqf)rRaWZl z3aKUINGqq^5NIUA&~nOLsTl5JSEs=X#T-=zq}j?|PFtaTiH{)HQ&LXt#bJ6Iu7v)t5Y zKUn?QWg0_Z85Apr##yN-=QoT)aDekJ7O;GS2{bvZCAJn2Qm&B|?qg>7gP`AG&w)|l zL@bep$J}QapXktlSyCSX#~*TJhElq!9^IBb_r4>CM3X%P;y=ol%_KQ%E>y{IKHpAW zQ|HnQ82H~J8g_SmgEUO^E*YxcRc_zqWJYr-#Z#|kC|FMMq!VWbgep5z>+Z3iC$>6E z3y@e^>3lr?c#Y#eCLkfN3Dymk5^a?#@A`~L@}QPhDvTIuWP!n-+a5A!4~f}mQMPBp zgblt$$Yks8oqOx8TX(;evE>gmTE#978yb*d>O5#t!rK92LjrcUM;Q_&)iiFwbgs{B zk~r~gf)ie6Kdk4dpfR)?LjT9+eHu6mZu}KeNyfVNPYl#11B?|eVi%*R{BzAR!Ddek zR*UVXnP85G*q95VJTvV~aCVKjOdEx4SOjw@*V1)zN5UkYi_3vF{-n9Jx3h@TTm)n| z?e{t9;F=LGcG3|v%AvmpL(I7jhPK_BZt$r!n{@UAXh_VAcKQ&K!G<1JPcl-ckcfR6 z4te{Puxlx|WoeKMlPcs=#Sm?RNOpDHpJGOVJtt|lMxhk!PB~5;i^KXiYro3l|!vCqWdPL(aSKib;2 zX4eh~U;_ZBek|XtRSd8NTeosnbeZK`VP{t;x4-3XH|hOXlKW-m{aLo1tL#~p)9n(& z&Q%JGViBv()nC@6bCs8~=UmkQZ%44p@OEBGHnPapb?fEVw%;7O%NlR4^524;>7~Db zU}2y%ju=E^blsRb9ApRAYHJZ4D@9NKWG%ySa0~!UG7mkFg0$ z`|$1_j$T^f9>%spn1kI^RH6H1f`O;2(6JT592}&j3gflO&who0tq|rYM|ykD!BW?P zV@H^S9VXPm`e1}J5w60>wh-p1f<}+p&}~;i2Gay8%mJyC{P^v@uM&r;Z6U~MsWNPw z{py=Q%V|QGqbdv=9~yh^_yotms%$lr7%aWq5oYx_FHhK5ahI#hTXH5 zXv?D1b~J=Js!Q2}{x5!oxEjHc5dYGf(_WZk@hxVyV763kdh5ZXe6?2BRx4!MoDdJ? z*t_?WV;`F1SdbIEr_+V0>a@tYb} zqp7V{%rt8D{L%ZMnx|>S%+8^-_B@L2}g;=eXfR%WQ=($LP`8YfjTAC1zz`4hqperTnU93?qd`tbv3|4P@GEp2i^Ci` z+6ETio4oR^y3@8Og*j?r$=)uiTE29gd4)NnK@}&Fw4>d9GV%M(j%M1{!hF@S+fU!# z@>_E{7UXo*Z=7w7A9@wK&S``>s$;kIHvG=8>vSy4QI*->>ide(bsc(`qcprbdj;NE zj&&UkVa|Cq(t*szUb#s}}Ek_uVs(l4GaEVUBjU*_(zxd^mR9 zZIIK`79Qd3~|&RTwxA z66UA}i5{iCLl`&@66UBbMK61A{1%)pg*obT>nA6^E)AT|4RchN`tLJe4g;r4VU9Yr z=ZEXQJq(;v3v<*%Y~6h6cg=&eI#8wgwf^*lPaWl0V<}|XoDiVO`@#Afz_ki8aPkgw zwE6C6c;Bz!+75DtsG&sk$6J{zs$8X#IIBx9J zG0agR-W}}t6aR5mJygA0&tAbOEXtf?n=fSAoB-fNy-EN43||)7#Cel2M?GTymy28l z=MjUPREJBy-hSzic~jTNhB+$XwY7V`S5KX?ggNR>?nH0zc{HTXn}j*)P2!u8FZI-U zlQ2ic*LnN)iQj?~Uzmg01@(RBFP_5cEnCwMRt{l~O7-GwYu~ScLGbxRTi?6ce_PD6 z5DVEhCj_dF=*?uq*R9kIV!|Bl5PrF{o@21<5W*Y?j>vC6JFWW|yKrETlj-2%Mf}F^ zqcS(R2y;|Pe);+2nb!jL#hQUwAxACh?dF+JL>4>07-nfK?fKcsmfwbprG+^I@UV77m43@W|U)TDP(G;i(7B~8AaB2Rl+RQuieo@d|8FeTyGWTT&UJv zY~1%r%(qzq+-axUQeXW3RqRjRILB5C zGu8Sh(a%0Brq24q9Od1c@k?KMytMdVup=0}nDg{jIt@8e1i{Z4faNb@Pe_z{W z`&#ll!t6~&<~SSF#irT)Y~J3c90UGdBbWVCrJI>@oN{{{@^@C1?_~OV^46tu*<9!Q zBl14v+i^?WXWkZ1ci-_1eZToPyVY<=IK}}md!1qF-O6%`j<1-Jd)*8y@BX#^hz77& z+2uQts91`mTms*^%{T;C@hW^*^|F#tt3?Ob+^*mNE!mpb=wq83Fi`MXiHq`Os3gxu zH*WO~M`w-!nlR&LJA1?$eSUB)py@>H<>jWc#SMR5?6B^~`+SUXA1vo{D}n^4)fBlK zpK#lpy~3^J`a&GUnT45N*@Y6o&0UOVZ{Zg=mhzyL=>)q?FS({1n@DNjsr%1Q`CAhMkZ3S}6`sA_^)#9cak7mDnkDZi%)0Y+ z64Uj4Y0b71TgiM~%ZNPQ2jq=yH#ujMq}WS>P}s2g;xmIi9B2fQ^|Y z*qq>*3-)Meg}$petpgY5U87pir?PvSjSS>sh5Z(;l_M$e8y86dZ_`$UA@V6!kx%(z zd2YVS2g86s`5n0)_o{<AyTjCVcq$i!sHCsqzop=)N+Z9>Pdh{t%tQ=I-xF&O<*`QwoI3Y)(mb0^Qa%=>SIclZ9b>!pXn@;G#woq* zl??H2)5F(Kf5uRcM9`FH##C#x4lE{|viQRnx_!aZ$e?-3Wo0Hso%UD66mqws^ZgCx z_?ve@x*UjG<-Pg2Yts8Pa-?@!IBQ{R7I-zjNVwE7@e?9EG{taoJQ;Nm$V~l_&}-vKe3HbcP0TTg5Rg&0eSM}G^5YR@K8PRb`&)C3$1WY0 zo0q08)mym2zqJix*MuUZ!mdPqB_#Aa+#3D2L@UIT zQXThns5V(TPBVQbJ2<-Ob{4{)*&(y==fOWsaJSghUjO1V=HS|Jgahw7ASk1Jh8{9e ze~g`co|WVWhY&4wzyEz-1Svbd$TypL7ed$tv@0#D{h<$>EJ6;}jDj~oV5zv5gTmYP zK>+hYh#0I{?ZG0ux$ImmnLMa>2`b-cO94V$TWVHi6f}cJOCf}kV!)%MpoaDRwHpug zEbw+QASkP}>Y|OkCKVGOv$9h{td>TOyYIGqg+}?Nt=|amZDnlfZZv%XC0|^ZSc(Yv zD>X%Wy0=2!8kWhT3tj6PG~}E2S<2`{9z(bb~tY^Q0FX zEO!+!wf_B@|1bvqcG|1hmFkWzq=eLA5I`67tGX*SHYP~4&?`X)*X%k<@H~yVD%W2gMe zRuE7fO?gWhMKxpY+F(YZ6@D4QA4%jEHHcA(g=w0avyx#R(h+%!R-l^DQD~fen&Akq za8%SmnMBWjc@X_t^rBdP1yBkGUeeQ>veG}X5O5JBEq;(p;5s_GwtHP=>{c|2LNCR$ zz}o!6MZtb7w+!{gTcd@x9NR8oK+$eKhkjkaxGDn*>lA+|51f(amNhU<&8;8{j~CU5 zkiXtq#bQcfmL>jNR%rD9%k#o4D=f$iQ~Xcmh7I+9adue97RhR z4}mao>oTofc!RpsD-21}jeA_e_dMj)wZFHWR}k#SphpKLvI1dyX4>|YU$ww6n3g5b zmr-8H3IuSr%MQ%Rl0LeKQV8rzVZyW z05IKb&?gpg4z?p}^dKC?l!#xJ04!|z>1mAi)YE<;4QTZfv@I`KU6(-UDqgd|or5>r zqZYXZ1h84(x8Pz0LZvl04?nD0>M~?pY1RQM+b;SKK1gj7`B$zGX*TK)L_+3J+uvia zWr5J|*9z3!xIDx-5(TDv_)1?T{K9 z#4iLSxYw~Udma~bZ(Fj}I~Ic|L5k04^2E?w3xin~#086k8}21dpBi+9AvLy-T&(vr z?}RO{l8W!tKCkEo>&u=~8jNTiT&}lW zksp`6f3(kHlE;tWFR}5#TtI$AuenHeobH@I8iEhQ7M_gwXa<||g2c{f)Q_Vf&Si?C z>8UY#H%4An*L01nYqFF!?-0>w(8OeyXn^;Hns(>HXDSPj<-k@6<^(v8Aw6|asQ+v_ zIK;CZ27^l}U(ds&>$d4>oPeSG2nF%D;5LcVjv+L_OYT4+`7-P>yl*Tv^a}&|;NiD^UCBD89 zJlj(ei+hC4#Yt-SyRKGTXvb@}{I#Qo7uu7p+j#CsBtgiE*FXa<$#2P}x+cA%GH-88 zC-jiZ3)Vfxg4EC}W;BTNy zzsBCb?aIpYC*sUV1}H%;tDh@?lch-V3yB|F(fGew6DWgnb>rc6sMQbu_M2t)6drk! z{#O`~N3&EJNS)~f#-%c@kpB{$2tZ~)>>?U?}IU3EE z@u&I8tjuER-{)gm67f_V>X>GD%Buf%l;MG(A1YMJY~91F740d!(se9(*;z0t7A3%M z>4f`)sy6uq+l|%Ax@CNFgn||_Hq){~BKh#^%eNQc*_ZfPo0QuAKovhR7A zx43ezaoJq&`5nUy^WcuRL)oCLq{%~R=4~@+T6wMfH5Kd=P4+pr;9(v6pqnbDVW(T` zE`XBPo~nmnQh{7J>@ezZm$4 zlAGs`?z*S#U_-7b-q$)a#Z^=DMU^KUuJ|anPu1ynvzh0V_wp1umdb_^w{`4PlQuOd zAfxx&707{K5~IKJR*|cdw_dl&CWK<23UgY+LLi^P6RB$c>||J9uvjNtR8z{UyLx4+ zp|4n-P9i+ONB@??3OP3iRQaQT${*2{D?edWvMbAf!)X2J-sWNJUNrCBq7o1#FA(WV zH};~3nm#a-e|I6=-)7$l3STZNYjnv+8_2@``#w=*-zr+>X(G#2TKHYyZ6dnH;cH*; z0FPnTN&QnB-J~5?ae~>N(UqW$J4x0Ug>6B z52Y&lB|5!rk7293%&_T%&oGYHGwg)&a zIZ~CUoM!Frw4yAE7PdPp2{G>Q#(SDl$eukZmx3k;woF>ng z@I8J5oCD7DA)(T(;TUG)b$1B|N#=$j^3QK!>q&b^{1URg`21%x;vYItSV3Cz4Os7h^uz-wCLYLy@PFu1b~97`JYVx|Q< zC$@v!4qge)G}AlmmERa1?Dv;l?+Da#y+4CNs`?`+UH+7y)!La%vQ=j=>Z!OA0$t85 zufWm_+l^_wbVBDmg7kwgjP5X-Q5 zEy3TmBd)+(Lv~#*hAH8#t8L5tQS4ooSrVJz=+*M9a)v3BtE*AVR*xBR)USN|Et@o_ zXc&}5*u-P-^v?NAhgG6g=xWjNUX34ngDB}YBo2EO9de9OD*imqT#W%f?YIUJ++Wg) z90zcq7S(-#x!!fIch=KxVfVyKw%Z@kxsZ|L(RbV-B%J|k4t}P!WZ3FY+i`k*1!1~Y z+#IGyr?lJ7U9I$$9nkBjV|j*t(8ppSKkqomRi82bo*R*q%eINy9I7uHCvsE<*5c0A zmkxIP5ee<9#<*`eNnjN#88>;G5{qJ4-4xFrFg6EtNzQWJr}QX!PA4y6ZLYVrzUP2;`n zHRjoF=2RPEvpipCxg@_!!RGqfx#Pb@oy@WW3Ek6_qu92!*fh}%&&q(!A<%aX@k!Ovse$)u+YN6n#%WlLDUjbkKJa-6Txyyq!xB%C^i!FF`vtw{| zbQsQG`nY;t6(dOpUFXe$*NV4)oZEIn`p0w$3^nOWRr9-d2CxYCeXW(w*~W z+pC9wMyo9dd)|tAj5HUR&hKlc^BTP2)JCTB4e$xvIRR03W+L3!3hX3&Y+A@u!qI52 zEe(hTfoG4P{8@ss;(pZGtB9?`#L!#{(u${lCHh=A27*1a&SRK%-+-?)tkH!;icZrO z3+_c;*YgCM+X!olhR3#)7LJ z**M*o)Q!bB6q-X2nJuN+CxNydesT1fsWvvtzciwmi_7|wHeog0AYaj=mhScdA*>i; zy@bLrlKQ12bOjR2MdgP$HD-DVNoAqY&n9abOWQW1fH0QIOqml=#8%8pJvqhc2u=|E z3|*VkVK2_RL4b#mj2vO0_5ohQg%wvtQ6 zC}QSG)?l+F?{B7XDh>|mtjvp&$tj=wu~lM9;Yek0(9<0ioepKAmv^?r9;W$dgAMv& z4g^tTrO?EF{?w*zLU%#RWS#*DnAT`8o?=Ik1!N;a^sbkg`|F7sIq#BYxY?bzV8^v+ zJjRWUCphOQdo8hkPx~CrQBbNc?Suy{OLg+Pjas{={WCUrm}Xd|F?d$ZDBNAeI&go~ zF~@gs^sAeswZf6O2W6phoX@eXDOdDNqD*&YO%6iLgd6bbV?HRhA`=O}Hcy<;+;5~4 zzXzv5%O;JNH6cgW-T)ddKCeh*1qY@DJ|3u{cIZGa{l(TUdv4As&fNLjWsNIk+`6G` zc@)YlTfBj5zs2X+Xk$-2*&EU-BfTE#iQ9IQS2 zr1%QN&z+SZHU>g5Y9v9{#V+$LTCh z8skzN1KDNa?d(a>-- z#KjNK=-6~0XMp9oc3B3ux#*LJw!n2VVqr0lrsOmce+KL3oaU}($(?WFyk!nLm2;Uw g4Z%R(Vr`zazV`d-wRAMahSOK0QFd+n+O<#rAN|0hga7~l diff --git a/priv/static/adminfe/static/js/chunk-87b3.4704cadf.js b/priv/static/adminfe/static/js/chunk-87b3.3c11ef09.js similarity index 60% rename from priv/static/adminfe/static/js/chunk-87b3.4704cadf.js rename to priv/static/adminfe/static/js/chunk-87b3.3c11ef09.js index 9766fd7d28215a87e7382ea6b4fb406c1037af6c..3899ff190c68e24bba56309177c54dbba6c4da26 100644 GIT binary patch delta 390 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

+## [2.0.2] - 2020-03-31 +### Fixed +- Blocked/muted users still generating push notifications +- Input textbox for bio ignoring newlines +- OTP: Inability to use PostgreSQL databases with SSL +- `user delete_activities` breaking when trying to delete already deleted posts + +### Added +- Admin API: `PATCH /api/pleroma/admin/users/:nickname/update_credentials` + ## [2.0.1] - 2020-03-15 +### Security +- Static-FE: Fix remote posts not being sanitized + ### Fixed - 500 errors when no `Accept` header is present if Static-FE is enabled - Instance panel not being updated immediately due to wrong `Cache-Control` headers From 0b8f9a66aefdf4c9e2b7c1fa931e19cd724b6b4b Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 2 Apr 2020 23:37:14 +0300 Subject: [PATCH 210/581] CHANGELOG.md: add entries for funkwhale-related changes --- CHANGELOG.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6942ad0bf..8eed9cf7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,14 +19,16 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [2.0.2] - 2020-03-31 +### Added +- Support for Funkwhale's `Audio` activity +- Admin API: `PATCH /api/pleroma/admin/users/:nickname/update_credentials` + ### Fixed - Blocked/muted users still generating push notifications - Input textbox for bio ignoring newlines - OTP: Inability to use PostgreSQL databases with SSL - `user delete_activities` breaking when trying to delete already deleted posts - -### Added -- Admin API: `PATCH /api/pleroma/admin/users/:nickname/update_credentials` +- Incorrect URL for Funkwhale channels ## [2.0.1] - 2020-03-15 ### Security From adeb82e4966a505e9ac65743e6336db27558e38f Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 8 Apr 2020 00:38:48 +0300 Subject: [PATCH 211/581] CHANGELOG.md: add 2.0.2 update notes --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8eed9cf7d..408b932b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - `user delete_activities` breaking when trying to delete already deleted posts - Incorrect URL for Funkwhale channels +### Upgrade notes +1. Restart Pleroma + ## [2.0.1] - 2020-03-15 ### Security - Static-FE: Fix remote posts not being sanitized From 9abf13abe05f3f53bdf21d4d97242e571b1767c6 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 8 Apr 2020 00:39:55 +0300 Subject: [PATCH 212/581] CHANGELOG.md: update 2.0.2 release date --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 408b932b8..bac69ad6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Mastodon API: Added `/api/v1/notifications/:id/dismiss` endpoint. -## [2.0.2] - 2020-03-31 +## [2.0.2] - 2020-04-08 ### Added - Support for Funkwhale's `Audio` activity - Admin API: `PATCH /api/pleroma/admin/users/:nickname/update_credentials` From c2aad36aa86694d4131adb2ed47441beca2ab2e8 Mon Sep 17 00:00:00 2001 From: kPherox Date: Thu, 9 Apr 2020 23:19:41 +0000 Subject: [PATCH 213/581] Rename function --- mix.exs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index ad2029518..a1fcde564 100644 --- a/mix.exs +++ b/mix.exs @@ -37,13 +37,13 @@ def project do pleroma: [ include_executables_for: [:unix], applications: [ex_syslogger: :load, syslog: :load], - steps: [:assemble, &put_files/1, ©_files/1, ©_nginx_config/1] + steps: [:assemble, &put_otp_version/1, ©_files/1, ©_nginx_config/1] ] ] ] end - def put_files(%{path: target_path} = release) do + def put_otp_version(%{path: target_path} = release) do File.write!( Path.join([target_path, "OTP_VERSION"]), Pleroma.OTPVersion.version() From 5628984df4809888746ea005decf3856ca929858 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Wed, 1 Apr 2020 01:50:53 +0200 Subject: [PATCH 214/581] User: remove source_data use for follower_address and following_address --- lib/pleroma/user.ex | 91 ++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 46 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 71c8c3a4e..d030c7314 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -306,6 +306,7 @@ def banner_url(user, options \\ []) do end end + # Should probably be renamed or removed def ap_id(%User{nickname: nickname}), do: "#{Web.base_url()}/users/#{nickname}" def ap_followers(%User{follower_address: fa}) when is_binary(fa), do: fa @@ -339,6 +340,13 @@ defp truncate_if_exists(params, key, max_length) do end end + defp fix_follower_address(%{follower_address: _, following_address: _} = params), do: params + + defp fix_follower_address(%{nickname: nickname} = params), + do: Map.put(params, :follower_address, ap_followers(%User{nickname: nickname})) + + defp fix_follower_address(params), do: params + def remote_user_creation(params) do bio_limit = Pleroma.Config.get([:instance, :user_bio_length], 5000) name_limit = Pleroma.Config.get([:instance, :user_name_length], 100) @@ -348,53 +356,44 @@ def remote_user_creation(params) do |> truncate_if_exists(:name, name_limit) |> truncate_if_exists(:bio, bio_limit) |> truncate_fields_param() + |> fix_follower_address() - changeset = - %User{local: false} - |> cast( - params, - [ - :bio, - :name, - :ap_id, - :nickname, - :avatar, - :ap_enabled, - :source_data, - :banner, - :locked, - :magic_key, - :uri, - :hide_followers, - :hide_follows, - :hide_followers_count, - :hide_follows_count, - :follower_count, - :fields, - :following_count, - :discoverable, - :invisible, - :actor_type, - :also_known_as - ] - ) - |> validate_required([:name, :ap_id]) - |> unique_constraint(:nickname) - |> validate_format(:nickname, @email_regex) - |> validate_length(:bio, max: bio_limit) - |> validate_length(:name, max: name_limit) - |> validate_fields(true) - - case params[:source_data] do - %{"followers" => followers, "following" => following} -> - changeset - |> put_change(:follower_address, followers) - |> put_change(:following_address, following) - - _ -> - followers = ap_followers(%User{nickname: get_field(changeset, :nickname)}) - put_change(changeset, :follower_address, followers) - end + %User{local: false} + |> cast( + params, + [ + :bio, + :name, + :ap_id, + :nickname, + :avatar, + :ap_enabled, + :source_data, + :banner, + :locked, + :magic_key, + :uri, + :follower_address, + :following_address, + :hide_followers, + :hide_follows, + :hide_followers_count, + :hide_follows_count, + :follower_count, + :fields, + :following_count, + :discoverable, + :invisible, + :actor_type, + :also_known_as + ] + ) + |> validate_required([:name, :ap_id]) + |> unique_constraint(:nickname) + |> validate_format(:nickname, @email_regex) + |> validate_length(:bio, max: bio_limit) + |> validate_length(:name, max: name_limit) + |> validate_fields(true) end def update_changeset(struct, params \\ %{}) do From 19eedb3d0424abb235eec1a51457ed0bf3a0e95d Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Wed, 1 Apr 2020 06:58:48 +0200 Subject: [PATCH 215/581] User: Move public_key from source_data to own field --- lib/pleroma/user.ex | 9 ++++++--- lib/pleroma/web/activity_pub/activity_pub.ex | 4 +++- .../20200401030751_users_add_public_key.exs | 17 +++++++++++++++++ test/signature_test.exs | 13 ++++--------- 4 files changed, 30 insertions(+), 13 deletions(-) create mode 100644 priv/repo/migrations/20200401030751_users_add_public_key.exs diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index d030c7314..0adea42ec 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -82,6 +82,7 @@ defmodule Pleroma.User do field(:password, :string, virtual: true) field(:password_confirmation, :string, virtual: true) field(:keys, :string) + field(:public_key, :string) field(:ap_id, :string) field(:avatar, :map) field(:local, :boolean, default: true) @@ -366,6 +367,7 @@ def remote_user_creation(params) do :name, :ap_id, :nickname, + :public_key, :avatar, :ap_enabled, :source_data, @@ -407,6 +409,7 @@ def update_changeset(struct, params \\ %{}) do :bio, :name, :avatar, + :public_key, :locked, :no_rich_text, :default_scope, @@ -503,6 +506,7 @@ def upgrade_changeset(struct, params \\ %{}, remote? \\ false) do :name, :follower_address, :following_address, + :public_key, :avatar, :last_refreshed_at, :ap_enabled, @@ -1616,8 +1620,7 @@ defp create_service_actor(uri, nickname) do |> set_cache() end - # AP style - def public_key(%{source_data: %{"publicKey" => %{"publicKeyPem" => public_key_pem}}}) do + def public_key(%{public_key: public_key_pem}) when is_binary(public_key_pem) do key = public_key_pem |> :public_key.pem_decode() @@ -1627,7 +1630,7 @@ def public_key(%{source_data: %{"publicKey" => %{"publicKeyPem" => public_key_pe {:ok, key} end - def public_key(_), do: {:error, "not found key"} + def public_key(_), do: {:error, "key not found"} def get_public_key_for_ap_id(ap_id) do with {:ok, %User{} = user} <- get_or_fetch_by_ap_id(ap_id), diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 19286fd01..0e4a9d842 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1432,6 +1432,7 @@ defp object_to_user_data(data) do discoverable = data["discoverable"] || false invisible = data["invisible"] || false actor_type = data["type"] || "Person" + public_key = data["publicKey"]["publicKeyPem"] user_data = %{ ap_id: data["id"], @@ -1449,7 +1450,8 @@ defp object_to_user_data(data) do following_address: data["following"], bio: data["summary"], actor_type: actor_type, - also_known_as: Map.get(data, "alsoKnownAs", []) + also_known_as: Map.get(data, "alsoKnownAs", []), + public_key: public_key } # nickname can be nil because of virtual actors diff --git a/priv/repo/migrations/20200401030751_users_add_public_key.exs b/priv/repo/migrations/20200401030751_users_add_public_key.exs new file mode 100644 index 000000000..04e5ad1e2 --- /dev/null +++ b/priv/repo/migrations/20200401030751_users_add_public_key.exs @@ -0,0 +1,17 @@ +defmodule Pleroma.Repo.Migrations.UsersAddPublicKey do + use Ecto.Migration + + def up do + alter table(:users) do + add_if_not_exists(:public_key, :text) + end + + execute("UPDATE users SET public_key = source_data->'publicKey'->>'publicKeyPem'") + end + + def down do + alter table(:users) do + remove_if_exists(:public_key, :text) + end + end +end diff --git a/test/signature_test.exs b/test/signature_test.exs index 04736d8b9..d5a2a62c4 100644 --- a/test/signature_test.exs +++ b/test/signature_test.exs @@ -19,12 +19,7 @@ defmodule Pleroma.SignatureTest do @private_key "-----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAKCAQEA48qb4v6kqigZutO9Ot0wkp27GIF2LiVaADgxQORZozZR63jH\nTaoOrS3Xhngbgc8SSOhfXET3omzeCLqaLNfXnZ8OXmuhJfJSU6mPUvmZ9QdT332j\nfN/g3iWGhYMf/M9ftCKh96nvFVO/tMruzS9xx7tkrfJjehdxh/3LlJMMImPtwcD7\nkFXwyt1qZTAU6Si4oQAJxRDQXHp1ttLl3Ob829VM7IKkrVmY8TD+JSlV0jtVJPj6\n1J19ytKTx/7UaucYvb9HIiBpkuiy5n/irDqKLVf5QEdZoNCdojOZlKJmTLqHhzKP\n3E9TxsUjhrf4/EqegNc/j982RvOxeu4i40zMQwIDAQABAoIBAQDH5DXjfh21i7b4\ncXJuw0cqget617CDUhemdakTDs9yH+rHPZd3mbGDWuT0hVVuFe4vuGpmJ8c+61X0\nRvugOlBlavxK8xvYlsqTzAmPgKUPljyNtEzQ+gz0I+3mH2jkin2rL3D+SksZZgKm\nfiYMPIQWB2WUF04gB46DDb2mRVuymGHyBOQjIx3WC0KW2mzfoFUFRlZEF+Nt8Ilw\nT+g/u0aZ1IWoszbsVFOEdghgZET0HEarum0B2Je/ozcPYtwmU10iBANGMKdLqaP/\nj954BPunrUf6gmlnLZKIKklJj0advx0NA+cL79+zeVB3zexRYSA5o9q0WPhiuTwR\n/aedWHnBAoGBAP0sDWBAM1Y4TRAf8ZI9PcztwLyHPzfEIqzbObJJnx1icUMt7BWi\n+/RMOnhrlPGE1kMhOqSxvXYN3u+eSmWTqai2sSH5Hdw2EqnrISSTnwNUPINX7fHH\njEkgmXQ6ixE48SuBZnb4w1EjdB/BA6/sjL+FNhggOc87tizLTkMXmMtTAoGBAOZV\n+wPuAMBDBXmbmxCuDIjoVmgSlgeRunB1SA8RCPAFAiUo3+/zEgzW2Oz8kgI+xVwM\n33XkLKrWG1Orhpp6Hm57MjIc5MG+zF4/YRDpE/KNG9qU1tiz0UD5hOpIU9pP4bR/\ngxgPxZzvbk4h5BfHWLpjlk8UUpgk6uxqfti48c1RAoGBALBOKDZ6HwYRCSGMjUcg\n3NPEUi84JD8qmFc2B7Tv7h2he2ykIz9iFAGpwCIyETQsJKX1Ewi0OlNnD3RhEEAy\nl7jFGQ+mkzPSeCbadmcpYlgIJmf1KN/x7fDTAepeBpCEzfZVE80QKbxsaybd3Dp8\nCfwpwWUFtBxr4c7J+gNhAGe/AoGAPn8ZyqkrPv9wXtyfqFjxQbx4pWhVmNwrkBPi\nZ2Qh3q4dNOPwTvTO8vjghvzIyR8rAZzkjOJKVFgftgYWUZfM5gE7T2mTkBYq8W+U\n8LetF+S9qAM2gDnaDx0kuUTCq7t87DKk6URuQ/SbI0wCzYjjRD99KxvChVGPBHKo\n1DjqMuECgYEAgJGNm7/lJCS2wk81whfy/ttKGsEIkyhPFYQmdGzSYC5aDc2gp1R3\nxtOkYEvdjfaLfDGEa4UX8CHHF+w3t9u8hBtcdhMH6GYb9iv6z0VBTt4A/11HUR49\n3Z7TQ18Iyh3jAUCzFV9IJlLIExq5Y7P4B3ojWFBN607sDCt8BMPbDYs=\n-----END RSA PRIVATE KEY-----" - @public_key %{ - "id" => "https://mastodon.social/users/lambadalambda#main-key", - "owner" => "https://mastodon.social/users/lambadalambda", - "publicKeyPem" => - "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw0P/Tq4gb4G/QVuMGbJo\nC/AfMNcv+m7NfrlOwkVzcU47jgESuYI4UtJayissCdBycHUnfVUd9qol+eznSODz\nCJhfJloqEIC+aSnuEPGA0POtWad6DU0E6/Ho5zQn5WAWUwbRQqowbrsm/GHo2+3v\neR5jGenwA6sYhINg/c3QQbksyV0uJ20Umyx88w8+TJuv53twOfmyDWuYNoQ3y5cc\nHKOZcLHxYOhvwg3PFaGfFHMFiNmF40dTXt9K96r7sbzc44iLD+VphbMPJEjkMuf8\nPGEFOBzy8pm3wJZw2v32RNW2VESwMYyqDzwHXGSq1a73cS7hEnc79gXlELsK04L9\nQQIDAQAB\n-----END PUBLIC KEY-----\n" - } + @public_key "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw0P/Tq4gb4G/QVuMGbJo\nC/AfMNcv+m7NfrlOwkVzcU47jgESuYI4UtJayissCdBycHUnfVUd9qol+eznSODz\nCJhfJloqEIC+aSnuEPGA0POtWad6DU0E6/Ho5zQn5WAWUwbRQqowbrsm/GHo2+3v\neR5jGenwA6sYhINg/c3QQbksyV0uJ20Umyx88w8+TJuv53twOfmyDWuYNoQ3y5cc\nHKOZcLHxYOhvwg3PFaGfFHMFiNmF40dTXt9K96r7sbzc44iLD+VphbMPJEjkMuf8\nPGEFOBzy8pm3wJZw2v32RNW2VESwMYyqDzwHXGSq1a73cS7hEnc79gXlELsK04L9\nQQIDAQAB\n-----END PUBLIC KEY-----\n" @rsa_public_key { :RSAPublicKey, @@ -42,7 +37,7 @@ defp make_fake_conn(key_id), test "it returns key" do expected_result = {:ok, @rsa_public_key} - user = insert(:user, source_data: %{"publicKey" => @public_key}) + user = insert(:user, public_key: @public_key) assert Signature.fetch_public_key(make_fake_conn(user.ap_id)) == expected_result end @@ -53,8 +48,8 @@ test "it returns error when not found user" do end) =~ "[error] Could not decode user" end - test "it returns error if public key is empty" do - user = insert(:user, source_data: %{"publicKey" => %{}}) + test "it returns error if public key is nil" do + user = insert(:user, public_key: nil) assert Signature.fetch_public_key(make_fake_conn(user.ap_id)) == {:error, :error} end From b6bed1a284ce07359642e0a884d2476ca387439d Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Thu, 9 Apr 2020 13:01:35 +0200 Subject: [PATCH 216/581] Types.URI: New --- lib/pleroma/user.ex | 3 ++- .../object_validators/note_validator.ex | 1 + .../object_validators/types/object_id.ex | 12 +++-------- .../object_validators/types/uri.ex | 20 +++++++++++++++++++ 4 files changed, 26 insertions(+), 10 deletions(-) create mode 100644 lib/pleroma/web/activity_pub/object_validators/types/uri.ex diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 0adea42ec..027386a22 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -28,6 +28,7 @@ defmodule Pleroma.User do alias Pleroma.UserRelationship alias Pleroma.Web alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.ActivityPub.ObjectValidators.Types alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI.Utils, as: CommonUtils @@ -113,7 +114,7 @@ defmodule Pleroma.User do field(:show_role, :boolean, default: true) field(:settings, :map, default: nil) field(:magic_key, :string, default: nil) - field(:uri, :string, default: nil) + field(:uri, Types.Uri, default: nil) field(:hide_followers_count, :boolean, default: false) field(:hide_follows_count, :boolean, default: false) field(:hide_followers, :boolean, default: false) diff --git a/lib/pleroma/web/activity_pub/object_validators/note_validator.ex b/lib/pleroma/web/activity_pub/object_validators/note_validator.ex index c95b622e4..462a5620a 100644 --- a/lib/pleroma/web/activity_pub/object_validators/note_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/note_validator.ex @@ -35,6 +35,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.NoteValidator do field(:like_count, :integer, default: 0) field(:announcement_count, :integer, default: 0) field(:inRepyTo, :string) + field(:uri, Types.Uri) field(:likes, {:array, :string}, default: []) field(:announcements, {:array, :string}, default: []) diff --git a/lib/pleroma/web/activity_pub/object_validators/types/object_id.ex b/lib/pleroma/web/activity_pub/object_validators/types/object_id.ex index f6e749b33..f71f76370 100644 --- a/lib/pleroma/web/activity_pub/object_validators/types/object_id.ex +++ b/lib/pleroma/web/activity_pub/object_validators/types/object_id.ex @@ -15,15 +15,9 @@ def cast(object) when is_binary(object) do def cast(%{"id" => object}), do: cast(object) - def cast(_) do - :error - end + def cast(_), do: :error - def dump(data) do - {:ok, data} - end + def dump(data), do: {:ok, data} - def load(data) do - {:ok, data} - end + def load(data), do: {:ok, data} end diff --git a/lib/pleroma/web/activity_pub/object_validators/types/uri.ex b/lib/pleroma/web/activity_pub/object_validators/types/uri.ex new file mode 100644 index 000000000..24845bcc0 --- /dev/null +++ b/lib/pleroma/web/activity_pub/object_validators/types/uri.ex @@ -0,0 +1,20 @@ +defmodule Pleroma.Web.ActivityPub.ObjectValidators.Types.Uri do + use Ecto.Type + + def type, do: :string + + def cast(uri) when is_binary(uri) do + case URI.parse(uri) do + %URI{host: nil} -> :error + %URI{host: ""} -> :error + %URI{scheme: scheme} when scheme in ["https", "http"] -> {:ok, uri} + _ -> :error + end + end + + def cast(_), do: :error + + def dump(data), do: {:ok, data} + + def load(data), do: {:ok, data} +end From 369c03834c5f2638080ff515055723e6c1c716bf Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Wed, 1 Apr 2020 07:15:38 +0200 Subject: [PATCH 217/581] formatter: Use user.uri instead of user.source_data.uri --- lib/pleroma/formatter.ex | 7 ++----- test/formatter_test.exs | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index c44e7fc8b..02a93a8dc 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -31,7 +31,7 @@ def escape_mention_handler("@" <> nickname = mention, buffer, _, _) do def mention_handler("@" <> nickname, buffer, opts, acc) do case User.get_cached_by_nickname(nickname) do %User{id: id} = user -> - ap_id = get_ap_id(user) + user_url = user.uri || user.ap_id nickname_text = get_nickname_text(nickname, opts) link = @@ -42,7 +42,7 @@ def mention_handler("@" <> nickname, buffer, opts, acc) do ["@", Phoenix.HTML.Tag.content_tag(:span, nickname_text)], "data-user": id, class: "u-url mention", - href: ap_id, + href: user_url, rel: "ugc" ), class: "h-card" @@ -146,9 +146,6 @@ def truncate(text, max_length \\ 200, omission \\ "...") do end end - defp get_ap_id(%User{source_data: %{"url" => url}}) when is_binary(url), do: url - defp get_ap_id(%User{ap_id: ap_id}), do: ap_id - defp get_nickname_text(nickname, %{mentions_format: :full}), do: User.full_nickname(nickname) defp get_nickname_text(nickname, _), do: User.local_nickname(nickname) end diff --git a/test/formatter_test.exs b/test/formatter_test.exs index 93fd8eab7..bef5a2c28 100644 --- a/test/formatter_test.exs +++ b/test/formatter_test.exs @@ -140,7 +140,7 @@ test "gives a replacement for user links, using local nicknames in user links te archaeme = insert(:user, nickname: "archa_eme_", - source_data: %{"url" => "https://archeme/@archa_eme_"} + uri: "https://archeme/@archa_eme_" ) archaeme_remote = insert(:user, %{nickname: "archaeme@archae.me"}) From 62656ab259cec1a8585abecf45096b283fa4c60a Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Wed, 1 Apr 2020 07:47:07 +0200 Subject: [PATCH 218/581] User: Move inbox & shared_inbox to own fields --- lib/pleroma/user.ex | 8 +++ lib/pleroma/web/activity_pub/activity_pub.ex | 19 ++++++- lib/pleroma/web/activity_pub/publisher.ex | 13 +++-- .../20200401072456_users_add_inboxes.exs | 20 +++++++ test/web/activity_pub/publisher_test.exs | 52 ++++++------------- test/web/federator_test.exs | 4 +- 6 files changed, 70 insertions(+), 46 deletions(-) create mode 100644 priv/repo/migrations/20200401072456_users_add_inboxes.exs diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 027386a22..7d8f3a76b 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -134,6 +134,8 @@ defmodule Pleroma.User do field(:skip_thread_containment, :boolean, default: false) field(:actor_type, :string, default: "Person") field(:also_known_as, {:array, :string}, default: []) + field(:inbox, :string) + field(:shared_inbox, :string) embeds_one( :notification_settings, @@ -367,6 +369,8 @@ def remote_user_creation(params) do :bio, :name, :ap_id, + :inbox, + :shared_inbox, :nickname, :public_key, :avatar, @@ -411,6 +415,8 @@ def update_changeset(struct, params \\ %{}) do :name, :avatar, :public_key, + :inbox, + :shared_inbox, :locked, :no_rich_text, :default_scope, @@ -508,6 +514,8 @@ def upgrade_changeset(struct, params \\ %{}, remote? \\ false) do :follower_address, :following_address, :public_key, + :inbox, + :shared_inbox, :avatar, :last_refreshed_at, :ap_enabled, diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 0e4a9d842..f0bbecc9b 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1432,7 +1432,20 @@ defp object_to_user_data(data) do discoverable = data["discoverable"] || false invisible = data["invisible"] || false actor_type = data["type"] || "Person" - public_key = data["publicKey"]["publicKeyPem"] + + public_key = + if is_map(data["publicKey"]) && is_binary(data["publicKey"]["publicKeyPem"]) do + data["publicKey"]["publicKeyPem"] + else + nil + end + + shared_inbox = + if is_map(data["endpoints"]) && is_binary(data["endpoints"]["sharedInbox"]) do + data["endpoints"]["sharedInbox"] + else + nil + end user_data = %{ ap_id: data["id"], @@ -1451,7 +1464,9 @@ defp object_to_user_data(data) do bio: data["summary"], actor_type: actor_type, also_known_as: Map.get(data, "alsoKnownAs", []), - public_key: public_key + public_key: public_key, + inbox: data["inbox"], + shared_inbox: shared_inbox } # nickname can be nil because of virtual actors diff --git a/lib/pleroma/web/activity_pub/publisher.ex b/lib/pleroma/web/activity_pub/publisher.ex index 6c558e7f0..b70cbd043 100644 --- a/lib/pleroma/web/activity_pub/publisher.ex +++ b/lib/pleroma/web/activity_pub/publisher.ex @@ -141,8 +141,8 @@ defp get_cc_ap_ids(ap_id, recipients) do |> Enum.map(& &1.ap_id) end - defp maybe_use_sharedinbox(%User{source_data: data}), - do: (is_map(data["endpoints"]) && Map.get(data["endpoints"], "sharedInbox")) || data["inbox"] + defp maybe_use_sharedinbox(%User{shared_inbox: nil, inbox: inbox}), do: inbox + defp maybe_use_sharedinbox(%User{shared_inbox: shared_inbox}), do: shared_inbox @doc """ Determine a user inbox to use based on heuristics. These heuristics @@ -157,7 +157,7 @@ defp maybe_use_sharedinbox(%User{source_data: data}), """ def determine_inbox( %Activity{data: activity_data}, - %User{source_data: data} = user + %User{inbox: inbox} = user ) do to = activity_data["to"] || [] cc = activity_data["cc"] || [] @@ -174,7 +174,7 @@ def determine_inbox( maybe_use_sharedinbox(user) true -> - data["inbox"] + inbox end end @@ -192,14 +192,13 @@ def publish(%User{} = actor, %{data: %{"bcc" => bcc}} = activity) inboxes = recipients |> Enum.filter(&User.ap_enabled?/1) - |> Enum.map(fn %{source_data: data} -> data["inbox"] end) + |> Enum.map(fn actor -> actor.inbox end) |> Enum.filter(fn inbox -> should_federate?(inbox, public) end) |> Instances.filter_reachable() Repo.checkout(fn -> Enum.each(inboxes, fn {inbox, unreachable_since} -> - %User{ap_id: ap_id} = - Enum.find(recipients, fn %{source_data: data} -> data["inbox"] == inbox end) + %User{ap_id: ap_id} = Enum.find(recipients, fn actor -> actor.inbox == inbox end) # Get all the recipients on the same host and add them to cc. Otherwise, a remote # instance would only accept a first message for the first recipient and ignore the rest. diff --git a/priv/repo/migrations/20200401072456_users_add_inboxes.exs b/priv/repo/migrations/20200401072456_users_add_inboxes.exs new file mode 100644 index 000000000..0947f0ab2 --- /dev/null +++ b/priv/repo/migrations/20200401072456_users_add_inboxes.exs @@ -0,0 +1,20 @@ +defmodule Pleroma.Repo.Migrations.UsersAddInboxes do + use Ecto.Migration + + def up do + alter table(:users) do + add_if_not_exists(:inbox, :text) + add_if_not_exists(:shared_inbox, :text) + end + + execute("UPDATE users SET inbox = source_data->>'inbox'") + execute("UPDATE users SET shared_inbox = source_data->'endpoints'->>'sharedInbox'") + end + + def down do + alter table(:users) do + remove_if_exists(:inbox, :text) + remove_if_exists(:shared_inbox, :text) + end + end +end diff --git a/test/web/activity_pub/publisher_test.exs b/test/web/activity_pub/publisher_test.exs index 801da03c1..c2bc38d52 100644 --- a/test/web/activity_pub/publisher_test.exs +++ b/test/web/activity_pub/publisher_test.exs @@ -48,10 +48,7 @@ test "it returns links" do describe "determine_inbox/2" do test "it returns sharedInbox for messages involving as:Public in to" do - user = - insert(:user, %{ - source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}} - }) + user = insert(:user, %{shared_inbox: "http://example.com/inbox"}) activity = %Activity{ data: %{"to" => [@as_public], "cc" => [user.follower_address]} @@ -61,10 +58,7 @@ test "it returns sharedInbox for messages involving as:Public in to" do end test "it returns sharedInbox for messages involving as:Public in cc" do - user = - insert(:user, %{ - source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}} - }) + user = insert(:user, %{shared_inbox: "http://example.com/inbox"}) activity = %Activity{ data: %{"cc" => [@as_public], "to" => [user.follower_address]} @@ -74,11 +68,7 @@ test "it returns sharedInbox for messages involving as:Public in cc" do end test "it returns sharedInbox for messages involving multiple recipients in to" do - user = - insert(:user, %{ - source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}} - }) - + user = insert(:user, %{shared_inbox: "http://example.com/inbox"}) user_two = insert(:user) user_three = insert(:user) @@ -90,11 +80,7 @@ test "it returns sharedInbox for messages involving multiple recipients in to" d end test "it returns sharedInbox for messages involving multiple recipients in cc" do - user = - insert(:user, %{ - source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}} - }) - + user = insert(:user, %{shared_inbox: "http://example.com/inbox"}) user_two = insert(:user) user_three = insert(:user) @@ -107,12 +93,10 @@ test "it returns sharedInbox for messages involving multiple recipients in cc" d test "it returns sharedInbox for messages involving multiple recipients in total" do user = - insert(:user, - source_data: %{ - "inbox" => "http://example.com/personal-inbox", - "endpoints" => %{"sharedInbox" => "http://example.com/inbox"} - } - ) + insert(:user, %{ + shared_inbox: "http://example.com/inbox", + inbox: "http://example.com/personal-inbox" + }) user_two = insert(:user) @@ -125,12 +109,10 @@ test "it returns sharedInbox for messages involving multiple recipients in total test "it returns inbox for messages involving single recipients in total" do user = - insert(:user, - source_data: %{ - "inbox" => "http://example.com/personal-inbox", - "endpoints" => %{"sharedInbox" => "http://example.com/inbox"} - } - ) + insert(:user, %{ + shared_inbox: "http://example.com/inbox", + inbox: "http://example.com/personal-inbox" + }) activity = %Activity{ data: %{"to" => [user.ap_id], "cc" => []} @@ -258,11 +240,11 @@ test "it returns inbox for messages involving single recipients in total" do [:passthrough], [] do follower = - insert(:user, + insert(:user, %{ local: false, - source_data: %{"inbox" => "https://domain.com/users/nick1/inbox"}, + inbox: "https://domain.com/users/nick1/inbox", ap_enabled: true - ) + }) actor = insert(:user, follower_address: follower.ap_id) user = insert(:user) @@ -295,14 +277,14 @@ test "it returns inbox for messages involving single recipients in total" do fetcher = insert(:user, local: false, - source_data: %{"inbox" => "https://domain.com/users/nick1/inbox"}, + inbox: "https://domain.com/users/nick1/inbox", ap_enabled: true ) another_fetcher = insert(:user, local: false, - source_data: %{"inbox" => "https://domain2.com/users/nick1/inbox"}, + inbox: "https://domain2.com/users/nick1/inbox", ap_enabled: true ) diff --git a/test/web/federator_test.exs b/test/web/federator_test.exs index da844c24c..59e53bb03 100644 --- a/test/web/federator_test.exs +++ b/test/web/federator_test.exs @@ -78,7 +78,7 @@ test "it federates only to reachable instances via AP" do local: false, nickname: "nick1@domain.com", ap_id: "https://domain.com/users/nick1", - source_data: %{"inbox" => inbox1}, + inbox: inbox1, ap_enabled: true }) @@ -86,7 +86,7 @@ test "it federates only to reachable instances via AP" do local: false, nickname: "nick2@domain2.com", ap_id: "https://domain2.com/users/nick2", - source_data: %{"inbox" => inbox2}, + inbox: inbox2, ap_enabled: true }) From 9172d719ccbf84d55236007d329fc880db69fe42 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Fri, 3 Apr 2020 13:03:32 +0200 Subject: [PATCH 219/581] profile emojis in User.emoji instead of source_data --- lib/pleroma/emoji/formatter.ex | 14 ++------ lib/pleroma/user.ex | 27 +++++++++----- lib/pleroma/web/activity_pub/activity_pub.ex | 9 +++++ .../web/activity_pub/transmogrifier.ex | 2 +- .../web/activity_pub/views/user_view.ex | 2 +- lib/pleroma/web/common_api/common_api.ex | 20 ----------- lib/pleroma/web/common_api/utils.ex | 17 +-------- .../controllers/account_controller.ex | 6 +--- .../web/mastodon_api/views/account_view.ex | 10 +++--- .../controllers/account_controller.ex | 15 +++----- lib/pleroma/web/static_fe/static_fe_view.ex | 9 ----- .../static_fe/static_fe/_user_card.html.eex | 2 +- .../static_fe/static_fe/profile.html.eex | 2 +- .../20200406100225_users_add_emoji.exs | 35 +++++++++++++++++++ test/emoji/formatter_test.exs | 24 ++++--------- test/web/activity_pub/transmogrifier_test.exs | 14 ++++++++ .../web/activity_pub/views/user_view_test.exs | 2 +- test/web/common_api/common_api_test.exs | 12 ------- test/web/common_api/common_api_utils_test.exs | 23 ------------ .../mastodon_api/views/account_view_test.exs | 16 ++------- 20 files changed, 103 insertions(+), 158 deletions(-) create mode 100644 priv/repo/migrations/20200406100225_users_add_emoji.exs diff --git a/lib/pleroma/emoji/formatter.ex b/lib/pleroma/emoji/formatter.ex index 59ff2cac3..dc45b8a38 100644 --- a/lib/pleroma/emoji/formatter.ex +++ b/lib/pleroma/emoji/formatter.ex @@ -38,22 +38,14 @@ def demojify(text) do def demojify(text, nil), do: text - @doc "Outputs a list of the emoji-shortcodes in a text" - def get_emoji(text) when is_binary(text) do - Enum.filter(Emoji.get_all(), fn {emoji, %Emoji{}} -> - String.contains?(text, ":#{emoji}:") - end) - end - - def get_emoji(_), do: [] - @doc "Outputs a list of the emoji-Maps in a text" def get_emoji_map(text) when is_binary(text) do - get_emoji(text) + Emoji.get_all() + |> Enum.filter(fn {emoji, %Emoji{}} -> String.contains?(text, ":#{emoji}:") end) |> Enum.reduce(%{}, fn {name, %Emoji{file: file}}, acc -> Map.put(acc, name, "#{Pleroma.Web.Endpoint.static_url()}#{file}") end) end - def get_emoji_map(_), do: [] + def get_emoji_map(_), do: %{} end diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 7d8f3a76b..cd3551e11 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -15,6 +15,7 @@ defmodule Pleroma.User do alias Pleroma.Config alias Pleroma.Conversation.Participation alias Pleroma.Delivery + alias Pleroma.Emoji alias Pleroma.FollowingRelationship alias Pleroma.Formatter alias Pleroma.HTML @@ -124,7 +125,7 @@ defmodule Pleroma.User do field(:pinned_activities, {:array, :string}, default: []) field(:email_notifications, :map, default: %{"digest" => false}) field(:mascot, :map, default: nil) - field(:emoji, {:array, :map}, default: []) + field(:emoji, :map, default: %{}) field(:pleroma_settings_store, :map, default: %{}) field(:fields, {:array, :map}, default: []) field(:raw_fields, {:array, :map}, default: []) @@ -368,6 +369,7 @@ def remote_user_creation(params) do [ :bio, :name, + :emoji, :ap_id, :inbox, :shared_inbox, @@ -413,6 +415,7 @@ def update_changeset(struct, params \\ %{}) do [ :bio, :name, + :emoji, :avatar, :public_key, :inbox, @@ -443,6 +446,7 @@ def update_changeset(struct, params \\ %{}) do |> validate_length(:bio, max: bio_limit) |> validate_length(:name, min: 1, max: name_limit) |> put_fields() + |> put_emoji() |> put_change_if_present(:bio, &{:ok, parse_bio(&1, struct)}) |> put_change_if_present(:avatar, &put_upload(&1, :avatar)) |> put_change_if_present(:banner, &put_upload(&1, :banner)) @@ -478,6 +482,18 @@ defp parse_fields(value) do |> elem(0) end + defp put_emoji(changeset) do + bio = get_change(changeset, :bio) + name = get_change(changeset, :name) + + if bio || name do + emoji = Map.merge(Emoji.Formatter.get_emoji_map(bio), Emoji.Formatter.get_emoji_map(name)) + put_change(changeset, :emoji, emoji) + else + changeset + end + end + defp put_change_if_present(changeset, map_field, value_function) do if value = get_change(changeset, map_field) do with {:ok, new_value} <- value_function.(value) do @@ -511,6 +527,7 @@ def upgrade_changeset(struct, params \\ %{}, remote? \\ false) do [ :bio, :name, + :emoji, :follower_address, :following_address, :public_key, @@ -618,7 +635,7 @@ def register_changeset(struct, params \\ %{}, opts \\ []) do struct |> confirmation_changeset(need_confirmation: need_confirmation?) - |> cast(params, [:bio, :email, :name, :nickname, :password, :password_confirmation]) + |> cast(params, [:bio, :email, :name, :nickname, :password, :password_confirmation, :emoji]) |> validate_required([:name, :nickname, :password, :password_confirmation]) |> validate_confirmation(:password) |> unique_constraint(:email) @@ -1969,12 +1986,6 @@ def update_background(user, background) do |> update_and_set_cache() end - def update_source_data(user, source_data) do - user - |> cast(%{source_data: source_data}, [:source_data]) - |> update_and_set_cache() - end - def roles(%{is_moderator: is_moderator, is_admin: is_admin}) do %{ admin: is_admin, diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index f0bbecc9b..63502b484 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1427,6 +1427,14 @@ defp object_to_user_data(data) do |> Enum.filter(fn %{"type" => t} -> t == "PropertyValue" end) |> Enum.map(fn fields -> Map.take(fields, ["name", "value"]) end) + emojis = + data + |> Map.get("tag", []) + |> Enum.filter(fn %{"type" => t} -> t == "Emoji" end) + |> Enum.reduce(%{}, fn %{"icon" => %{"url" => url}, "name" => name}, acc -> + Map.put(acc, String.trim(name, ":"), url) + end) + locked = data["manuallyApprovesFollowers"] || false data = Transmogrifier.maybe_fix_user_object(data) discoverable = data["discoverable"] || false @@ -1454,6 +1462,7 @@ defp object_to_user_data(data) do source_data: data, banner: banner, fields: fields, + emoji: emojis, locked: locked, discoverable: discoverable, invisible: invisible, diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 0a8ad62ad..3d4070fd5 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -1129,7 +1129,7 @@ defp build_mention_tag(%{ap_id: ap_id, nickname: nickname} = _) do def take_emoji_tags(%User{emoji: emoji}) do emoji - |> Enum.flat_map(&Map.to_list/1) + |> Map.to_list() |> Enum.map(&build_emoji_tag/1) end diff --git a/lib/pleroma/web/activity_pub/views/user_view.ex b/lib/pleroma/web/activity_pub/views/user_view.ex index bc21ac6c7..d3d79dd5e 100644 --- a/lib/pleroma/web/activity_pub/views/user_view.ex +++ b/lib/pleroma/web/activity_pub/views/user_view.ex @@ -103,7 +103,7 @@ def render("user.json", %{user: user}) do }, "endpoints" => endpoints, "attachment" => fields, - "tag" => (user.source_data["tag"] || []) ++ emoji_tags, + "tag" => emoji_tags, "discoverable" => user.discoverable } |> Map.merge(maybe_make_image(&User.avatar_url/2, "icon", user)) diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index 636cf3301..952a8d8cb 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -332,26 +332,6 @@ defp maybe_create_activity_expiration({:ok, activity}, %NaiveDateTime{} = expire defp maybe_create_activity_expiration(result, _), do: result - # Updates the emojis for a user based on their profile - def update(user) do - emoji = emoji_from_profile(user) - source_data = Map.put(user.source_data, "tag", emoji) - - user = - case User.update_source_data(user, source_data) do - {:ok, user} -> user - _ -> user - end - - ActivityPub.update(%{ - local: true, - to: [Pleroma.Constants.as_public(), user.follower_address], - cc: [], - actor: user.ap_id, - object: Pleroma.Web.ActivityPub.UserView.render("user.json", %{user: user}) - }) - end - def pin(id_or_ap_id, %{ap_id: user_ap_id} = user) do with %Activity{ actor: ^user_ap_id, diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 635e7cd38..7eec5aa09 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -10,7 +10,6 @@ defmodule Pleroma.Web.CommonAPI.Utils do alias Pleroma.Activity alias Pleroma.Config alias Pleroma.Conversation.Participation - alias Pleroma.Emoji alias Pleroma.Formatter alias Pleroma.Object alias Pleroma.Plugs.AuthenticationPlug @@ -18,7 +17,6 @@ defmodule Pleroma.Web.CommonAPI.Utils do alias Pleroma.User alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Visibility - alias Pleroma.Web.Endpoint alias Pleroma.Web.MediaProxy require Logger @@ -175,7 +173,7 @@ def make_poll_data(%{"poll" => %{"options" => options, "expires_in" => expires_i "replies" => %{"type" => "Collection", "totalItems" => 0} } - {note, Map.merge(emoji, Emoji.Formatter.get_emoji_map(option))} + {note, Map.merge(emoji, Pleroma.Emoji.Formatter.get_emoji_map(option))} end) end_time = @@ -431,19 +429,6 @@ def confirm_current_password(user, password) do end end - def emoji_from_profile(%User{bio: bio, name: name}) do - [bio, name] - |> Enum.map(&Emoji.Formatter.get_emoji/1) - |> Enum.concat() - |> Enum.map(fn {shortcode, %Emoji{file: path}} -> - %{ - "type" => "Emoji", - "icon" => %{"type" => "Image", "url" => "#{Endpoint.url()}#{path}"}, - "name" => ":#{shortcode}:" - } - end) - end - def maybe_notify_to_recipients( recipients, %Activity{data: %{"to" => to, "type" => _type}} = _activity diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 21bc3d5a5..3fcaa6be6 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -140,9 +140,7 @@ def verify_credentials(%{assigns: %{user: user}} = conn, _) do end @doc "PATCH /api/v1/accounts/update_credentials" - def update_credentials(%{assigns: %{user: original_user}} = conn, params) do - user = original_user - + def update_credentials(%{assigns: %{user: user}} = conn, params) do user_params = [ :no_rich_text, @@ -178,8 +176,6 @@ def update_credentials(%{assigns: %{user: original_user}} = conn, params) do changeset = User.update_changeset(user, user_params) with {:ok, user} <- User.update_and_set_cache(changeset) do - if original_user != user, do: CommonAPI.update(user) - render(conn, "show.json", user: user, for: user, with_pleroma_settings: true) else _e -> render_error(conn, :forbidden, "Invalid request") diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 99e62f580..966032b69 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -180,13 +180,11 @@ defp do_render("show.json", %{user: user} = opts) do bot = user.actor_type in ["Application", "Service"] emojis = - (user.source_data["tag"] || []) - |> Enum.filter(fn %{"type" => t} -> t == "Emoji" end) - |> Enum.map(fn %{"icon" => %{"url" => url}, "name" => name} -> + Enum.map(user.emoji, fn {shortcode, url} -> %{ - "shortcode" => String.trim(name, ":"), - "url" => MediaProxy.url(url), - "static_url" => MediaProxy.url(url), + "shortcode" => shortcode, + "url" => url, + "static_url" => url, "visible_in_picker" => false } end) diff --git a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex index dcba67d03..ed4fdfdba 100644 --- a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex @@ -13,7 +13,6 @@ defmodule Pleroma.Web.PleromaAPI.AccountController do alias Pleroma.Plugs.RateLimiter alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub - alias Pleroma.Web.CommonAPI alias Pleroma.Web.MastodonAPI.StatusView require Pleroma.Constants @@ -58,38 +57,32 @@ def confirmation_resend(conn, params) do @doc "PATCH /api/v1/pleroma/accounts/update_avatar" def update_avatar(%{assigns: %{user: user}} = conn, %{"img" => ""}) do - {:ok, user} = + {:ok, _user} = user |> Changeset.change(%{avatar: nil}) |> User.update_and_set_cache() - CommonAPI.update(user) - json(conn, %{url: nil}) end def update_avatar(%{assigns: %{user: user}} = conn, params) do {:ok, %{data: data}} = ActivityPub.upload(params, type: :avatar) - {:ok, user} = user |> Changeset.change(%{avatar: data}) |> User.update_and_set_cache() + {:ok, _user} = user |> Changeset.change(%{avatar: data}) |> User.update_and_set_cache() %{"url" => [%{"href" => href} | _]} = data - CommonAPI.update(user) - json(conn, %{url: href}) end @doc "PATCH /api/v1/pleroma/accounts/update_banner" def update_banner(%{assigns: %{user: user}} = conn, %{"banner" => ""}) do - with {:ok, user} <- User.update_banner(user, %{}) do - CommonAPI.update(user) + with {:ok, _user} <- User.update_banner(user, %{}) do json(conn, %{url: nil}) end end def update_banner(%{assigns: %{user: user}} = conn, params) do with {:ok, object} <- ActivityPub.upload(%{"img" => params["banner"]}, type: :banner), - {:ok, user} <- User.update_banner(user, object.data) do - CommonAPI.update(user) + {:ok, _user} <- User.update_banner(user, object.data) do %{"url" => [%{"href" => href} | _]} = object.data json(conn, %{url: href}) diff --git a/lib/pleroma/web/static_fe/static_fe_view.ex b/lib/pleroma/web/static_fe/static_fe_view.ex index 66d87620c..b3d1d1ec8 100644 --- a/lib/pleroma/web/static_fe/static_fe_view.ex +++ b/lib/pleroma/web/static_fe/static_fe_view.ex @@ -18,15 +18,6 @@ defmodule Pleroma.Web.StaticFE.StaticFEView do @media_types ["image", "audio", "video"] - def 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 - def fetch_media_type(%{"mediaType" => mediaType}) do Utils.fetch_media_type(@media_types, mediaType) end diff --git a/lib/pleroma/web/templates/static_fe/static_fe/_user_card.html.eex b/lib/pleroma/web/templates/static_fe/static_fe/_user_card.html.eex index 2a7582d45..56f3a1524 100644 --- a/lib/pleroma/web/templates/static_fe/static_fe/_user_card.html.eex +++ b/lib/pleroma/web/templates/static_fe/static_fe/_user_card.html.eex @@ -4,7 +4,7 @@ - <%= raw (@user.name |> Formatter.emojify(emoji_for_user(@user))) %> + <%= raw Formatter.emojify(@user.name, @user.emoji) %> <%= @user.nickname %> diff --git a/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex b/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex index e7d2aecad..3191bf450 100644 --- a/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex +++ b/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex @@ -7,7 +7,7 @@ - <%= raw Formatter.emojify(@user.name, emoji_for_user(@user)) %> | + <%= raw Formatter.emojify(@user.name, @user.emoji) %> | <%= link "@#{@user.nickname}@#{Endpoint.host()}", to: (@user.uri || @user.ap_id) %>

<%= raw @user.bio %>

diff --git a/priv/repo/migrations/20200406100225_users_add_emoji.exs b/priv/repo/migrations/20200406100225_users_add_emoji.exs new file mode 100644 index 000000000..d0254c170 --- /dev/null +++ b/priv/repo/migrations/20200406100225_users_add_emoji.exs @@ -0,0 +1,35 @@ +defmodule Pleroma.Repo.Migrations.UsersPopulateEmoji do + use Ecto.Migration + + import Ecto.Query + + alias Pleroma.User + alias Pleroma.Repo + + def up do + execute("ALTER TABLE users ALTER COLUMN emoji SET DEFAULT '{}'::jsonb") + execute("UPDATE users SET emoji = DEFAULT WHERE emoji = '[]'::jsonb") + + from(u in User) + |> select([u], struct(u, [:id, :ap_id, :source_data])) + |> Repo.stream() + |> Enum.each(fn user -> + emoji = + user.source_data + |> Map.get("tag", []) + |> Enum.filter(fn %{"type" => t} -> t == "Emoji" end) + |> Enum.reduce(%{}, fn %{"icon" => %{"url" => url}, "name" => name}, acc -> + Map.put(acc, String.trim(name, ":"), url) + end) + + user + |> Ecto.Changeset.cast(%{emoji: emoji}, [:emoji]) + |> Repo.update() + end) + end + + def down do + execute("ALTER TABLE users ALTER COLUMN emoji SET DEFAULT '[]'::jsonb") + execute("UPDATE users SET emoji = DEFAULT WHERE emoji = '{}'::jsonb") + end +end diff --git a/test/emoji/formatter_test.exs b/test/emoji/formatter_test.exs index 3bfee9420..12af6cd8b 100644 --- a/test/emoji/formatter_test.exs +++ b/test/emoji/formatter_test.exs @@ -3,7 +3,6 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Emoji.FormatterTest do - alias Pleroma.Emoji alias Pleroma.Emoji.Formatter use Pleroma.DataCase @@ -32,30 +31,19 @@ test "it does not add XSS emoji" do end end - describe "get_emoji" do + describe "get_emoji_map" do test "it returns the emoji used in the text" do - text = "I love :firefox:" - - assert Formatter.get_emoji(text) == [ - {"firefox", - %Emoji{ - code: "firefox", - file: "/emoji/Firefox.gif", - tags: ["Gif", "Fun"], - safe_code: "firefox", - safe_file: "/emoji/Firefox.gif" - }} - ] + assert Formatter.get_emoji_map("I love :firefox:") == %{ + "firefox" => "http://localhost:4001/emoji/Firefox.gif" + } end test "it returns a nice empty result when no emojis are present" do - text = "I love moominamma" - assert Formatter.get_emoji(text) == [] + assert Formatter.get_emoji_map("I love moominamma") == %{} end test "it doesn't die when text is absent" do - text = nil - assert Formatter.get_emoji(text) == [] + assert Formatter.get_emoji_map(nil) == %{} end end end diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 6dfd823f7..d7f11d1d7 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -2182,4 +2182,18 @@ test "sets `replies` collection with a limited number of self-replies" do Transmogrifier.set_replies(object.data)["replies"] end end + + test "take_emoji_tags/1" do + user = insert(:user, %{emoji: %{"firefox" => "https://example.org/firefox.png"}}) + + assert Transmogrifier.take_emoji_tags(user) == [ + %{ + "icon" => %{"type" => "Image", "url" => "https://example.org/firefox.png"}, + "id" => "https://example.org/firefox.png", + "name" => ":firefox:", + "type" => "Emoji", + "updated" => "1970-01-01T00:00:00Z" + } + ] + end end diff --git a/test/web/activity_pub/views/user_view_test.exs b/test/web/activity_pub/views/user_view_test.exs index ecb2dc386..20578161b 100644 --- a/test/web/activity_pub/views/user_view_test.exs +++ b/test/web/activity_pub/views/user_view_test.exs @@ -38,7 +38,7 @@ test "Renders profile fields" do end test "Renders with emoji tags" do - user = insert(:user, emoji: [%{"bib" => "/test"}]) + user = insert(:user, emoji: %{"bib" => "/test"}) assert %{ "tag" => [ diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index f46ad0272..5e78c5758 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -97,18 +97,6 @@ test "it adds emoji in the object" do assert Object.normalize(activity).data["emoji"]["firefox"] end - test "it adds emoji when updating profiles" do - user = insert(:user, %{name: ":firefox:"}) - - {:ok, activity} = CommonAPI.update(user) - user = User.get_cached_by_ap_id(user.ap_id) - [firefox] = user.source_data["tag"] - - assert firefox["name"] == ":firefox:" - - assert Pleroma.Constants.as_public() in activity.recipients - end - describe "posting" do test "it supports explicit addressing" do user = insert(:user) diff --git a/test/web/common_api/common_api_utils_test.exs b/test/web/common_api/common_api_utils_test.exs index 98cf02d49..b21445fe9 100644 --- a/test/web/common_api/common_api_utils_test.exs +++ b/test/web/common_api/common_api_utils_test.exs @@ -7,7 +7,6 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do alias Pleroma.Object alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI.Utils - alias Pleroma.Web.Endpoint use Pleroma.DataCase import ExUnit.CaptureLog @@ -42,28 +41,6 @@ test "correct password given" do end end - test "parses emoji from name and bio" do - {:ok, user} = UserBuilder.insert(%{name: ":blank:", bio: ":firefox:"}) - - expected = [ - %{ - "type" => "Emoji", - "icon" => %{"type" => "Image", "url" => "#{Endpoint.url()}/emoji/Firefox.gif"}, - "name" => ":firefox:" - }, - %{ - "type" => "Emoji", - "icon" => %{ - "type" => "Image", - "url" => "#{Endpoint.url()}/emoji/blank.png" - }, - "name" => ":blank:" - } - ] - - assert expected == Utils.emoji_from_profile(user) - end - describe "format_input/3" do test "works for bare text/plain" do text = "hello world!" diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index 4435f69ff..85fa4f6a2 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -19,16 +19,6 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do end test "Represent a user account" do - source_data = %{ - "tag" => [ - %{ - "type" => "Emoji", - "icon" => %{"url" => "/file.png"}, - "name" => ":karjalanpiirakka:" - } - ] - } - background_image = %{ "url" => [%{"href" => "https://example.com/images/asuka_hospital.png"}] } @@ -37,13 +27,13 @@ test "Represent a user account" do insert(:user, %{ follower_count: 3, note_count: 5, - source_data: source_data, background: background_image, nickname: "shp@shitposter.club", name: ":karjalanpiirakka: shp", bio: "valid html. a
b
c
d
f", - inserted_at: ~N[2017-08-15 15:47:06.597036] + inserted_at: ~N[2017-08-15 15:47:06.597036], + emoji: %{"karjalanpiirakka" => "/file.png"} }) expected = %{ @@ -117,7 +107,6 @@ test "Represent a Service(bot) account" do insert(:user, %{ follower_count: 3, note_count: 5, - source_data: %{}, actor_type: "Service", nickname: "shp@shitposter.club", inserted_at: ~N[2017-08-15 15:47:06.597036] @@ -311,7 +300,6 @@ test "represent an embedded relationship" do insert(:user, %{ follower_count: 0, note_count: 5, - source_data: %{}, actor_type: "Service", nickname: "shp@shitposter.club", inserted_at: ~N[2017-08-15 15:47:06.597036] From 3420dec494203b46d37ddc17f7e1235dc908a5b3 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Mon, 6 Apr 2020 10:44:48 +0200 Subject: [PATCH 220/581] Remove User.fields/1 --- lib/pleroma/user.ex | 19 +------------------ .../web/activity_pub/views/user_view.ex | 5 +---- test/web/activity_pub/transmogrifier_test.exs | 8 ++++---- 3 files changed, 6 insertions(+), 26 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index cd3551e11..79e9b2c86 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1993,21 +1993,6 @@ def roles(%{is_moderator: is_moderator, is_admin: is_admin}) do } end - # ``fields`` is an array of mastodon profile field, containing ``{"name": "…", "value": "…"}``. - # For example: [{"name": "Pronoun", "value": "she/her"}, …] - def fields(%{fields: nil, source_data: %{"attachment" => attachment}}) do - limit = Pleroma.Config.get([:instance, :max_remote_account_fields], 0) - - attachment - |> Enum.filter(fn %{"type" => t} -> t == "PropertyValue" end) - |> Enum.map(fn fields -> Map.take(fields, ["name", "value"]) end) - |> Enum.take(limit) - end - - def fields(%{fields: nil}), do: [] - - def fields(%{fields: fields}), do: fields - def validate_fields(changeset, remote? \\ false) do limit_name = if remote?, do: :max_remote_account_fields, else: :max_account_fields limit = Pleroma.Config.get([:instance, limit_name], 0) @@ -2195,9 +2180,7 @@ def sanitize_html(%User{} = user) do # - display name def sanitize_html(%User{} = user, filter) do fields = - user - |> User.fields() - |> Enum.map(fn %{"name" => name, "value" => value} -> + Enum.map(user.fields, fn %{"name" => name, "value" => value} -> %{ "name" => name, "value" => HTML.filter_tags(value, Pleroma.HTML.Scrubber.LinksOnly) diff --git a/lib/pleroma/web/activity_pub/views/user_view.ex b/lib/pleroma/web/activity_pub/views/user_view.ex index d3d79dd5e..34590b16d 100644 --- a/lib/pleroma/web/activity_pub/views/user_view.ex +++ b/lib/pleroma/web/activity_pub/views/user_view.ex @@ -79,10 +79,7 @@ def render("user.json", %{user: user}) do emoji_tags = Transmogrifier.take_emoji_tags(user) - fields = - user - |> User.fields() - |> Enum.map(&Map.put(&1, "type", "PropertyValue")) + fields = Enum.map(user.fields, &Map.put(&1, "type", "PropertyValue")) %{ "id" => user.ap_id, diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index d7f11d1d7..8ddc75669 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -746,7 +746,7 @@ test "it works with custom profile fields" do user = User.get_cached_by_ap_id(activity.actor) - assert User.fields(user) == [ + assert user.fields == [ %{"name" => "foo", "value" => "bar"}, %{"name" => "foo1", "value" => "bar1"} ] @@ -767,7 +767,7 @@ test "it works with custom profile fields" do user = User.get_cached_by_ap_id(user.ap_id) - assert User.fields(user) == [ + assert user.fields == [ %{"name" => "foo", "value" => "updated"}, %{"name" => "foo1", "value" => "updated"} ] @@ -785,7 +785,7 @@ test "it works with custom profile fields" do user = User.get_cached_by_ap_id(user.ap_id) - assert User.fields(user) == [ + assert user.fields == [ %{"name" => "foo", "value" => "updated"}, %{"name" => "foo1", "value" => "updated"} ] @@ -796,7 +796,7 @@ test "it works with custom profile fields" do user = User.get_cached_by_ap_id(user.ap_id) - assert User.fields(user) == [] + assert user.fields == [] end test "it works for incoming update activities which lock the account" do From e89078ac2a27bb0a833c982dbb5eef63ddea3cc0 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Mon, 6 Apr 2020 10:59:35 +0200 Subject: [PATCH 221/581] User: remove source_data --- lib/pleroma/user.ex | 3 --- lib/pleroma/web/activity_pub/activity_pub.ex | 1 - .../20200406105422_users_remove_source_data.exs | 15 +++++++++++++++ test/user_test.exs | 2 +- test/web/activity_pub/activity_pub_test.exs | 1 - 5 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 priv/repo/migrations/20200406105422_users_remove_source_data.exs diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 79e9b2c86..d05dfb480 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -97,7 +97,6 @@ defmodule Pleroma.User do field(:last_digest_emailed_at, :naive_datetime) field(:banner, :map, default: %{}) field(:background, :map, default: %{}) - field(:source_data, :map, default: %{}) field(:note_count, :integer, default: 0) field(:follower_count, :integer, default: 0) field(:following_count, :integer, default: 0) @@ -377,7 +376,6 @@ def remote_user_creation(params) do :public_key, :avatar, :ap_enabled, - :source_data, :banner, :locked, :magic_key, @@ -536,7 +534,6 @@ def upgrade_changeset(struct, params \\ %{}, remote? \\ false) do :avatar, :last_refreshed_at, :ap_enabled, - :source_data, :banner, :locked, :magic_key, diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 63502b484..9b832f4cb 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1459,7 +1459,6 @@ defp object_to_user_data(data) do ap_id: data["id"], uri: get_actor_url(data["url"]), ap_enabled: true, - source_data: data, banner: banner, fields: fields, emoji: emojis, diff --git a/priv/repo/migrations/20200406105422_users_remove_source_data.exs b/priv/repo/migrations/20200406105422_users_remove_source_data.exs new file mode 100644 index 000000000..9812d480f --- /dev/null +++ b/priv/repo/migrations/20200406105422_users_remove_source_data.exs @@ -0,0 +1,15 @@ +defmodule Pleroma.Repo.Migrations.UsersRemoveSourceData do + use Ecto.Migration + + def up do + alter table(:users) do + remove_if_exists(:source_data, :map) + end + end + + def down do + alter table(:users) do + add_if_not_exists(:source_data, :map, default: %{}) + end + end +end diff --git a/test/user_test.exs b/test/user_test.exs index d39787f35..d35005353 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -581,7 +581,7 @@ test "updates an existing user, if stale" do {:ok, user} = User.get_or_fetch_by_ap_id("http://mastodon.example.org/users/admin") - assert user.source_data["endpoints"] + assert user.inbox refute user.last_refreshed_at == orig_user.last_refreshed_at end diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index 17e7b97de..6410df49b 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -180,7 +180,6 @@ test "it returns a user" do {:ok, user} = ActivityPub.make_user_from_ap_id(user_id) assert user.ap_id == user_id assert user.nickname == "admin@mastodon.example.org" - assert user.source_data assert user.ap_enabled assert user.follower_address == "http://mastodon.example.org/users/admin/followers" end From 6ff8812ea3403a2f4a31206a96a58fad93fff51f Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 10 Apr 2020 11:37:02 -0500 Subject: [PATCH 222/581] Add a section for changelog entries that pertain to the next patch release. This will make it easier to keep changelogs synced between develop and stable branches. --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd5d5f800..36897503a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixed - Support pagination in conversations API +## [unreleased-patch] + ## [2.0.2] - 2020-04-08 ### Added - Support for Funkwhale's `Audio` activity From ad92cef844d4f4211a65fd37b08f8bd8abea8dda Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Fri, 10 Apr 2020 21:27:50 +0300 Subject: [PATCH 223/581] fix Oban migration --- .../repo/migrations/20200402063221_update_oban_jobs_table.exs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/priv/repo/migrations/20200402063221_update_oban_jobs_table.exs b/priv/repo/migrations/20200402063221_update_oban_jobs_table.exs index c8ee12192..e7ff04008 100644 --- a/priv/repo/migrations/20200402063221_update_oban_jobs_table.exs +++ b/priv/repo/migrations/20200402063221_update_oban_jobs_table.exs @@ -2,10 +2,10 @@ defmodule Pleroma.Repo.Migrations.UpdateObanJobsTable do use Ecto.Migration def up do - Oban.Migrations.up() + Oban.Migrations.up(version: 8) end def down do - Oban.Migrations.down(version: 1) + Oban.Migrations.down(version: 7) end end From 88b16fdfb7b40877aecae5d45f6f3a1c54362f13 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Sat, 11 Apr 2020 16:01:09 +0300 Subject: [PATCH 224/581] [#1364] Disabled notifications on activities from blocked domains. --- CHANGELOG.md | 1 + lib/pleroma/notification.ex | 20 +++++++++++++------- test/notification_test.exs | 15 +++++++++++++++ 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36897503a..22d0645fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixed - Support pagination in conversations API +- Filtering of push notifications on activities from blocked domains ## [unreleased-patch] diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 04ee510b9..02363ddb0 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -321,10 +321,11 @@ def create_notification(%Activity{} = activity, %User{} = user, do_send \\ true) @doc """ Returns a tuple with 2 elements: - {enabled notification receivers, currently disabled receivers (blocking / [thread] muting)} + {notification-enabled receivers, currently disabled receivers (blocking / [thread] muting)} NOTE: might be called for FAKE Activities, see ActivityPub.Utils.get_notified_from_object/1 """ + @spec get_notified_from_activity(Activity.t(), boolean()) :: {list(User.t()), list(User.t())} def get_notified_from_activity(activity, local_only \\ true) def get_notified_from_activity(%Activity{data: %{"type" => type}} = activity, local_only) @@ -337,17 +338,22 @@ def get_notified_from_activity(%Activity{data: %{"type" => type}} = activity, lo |> Utils.maybe_notify_followers(activity) |> Enum.uniq() - # Since even subscribers and followers can mute / thread-mute, filtering all above AP IDs - notification_enabled_ap_ids = - potential_receiver_ap_ids - |> exclude_relationship_restricted_ap_ids(activity) - |> exclude_thread_muter_ap_ids(activity) - potential_receivers = potential_receiver_ap_ids |> Enum.uniq() |> User.get_users_from_set(local_only) + activity_actor_domain = activity.actor && URI.parse(activity.actor).host + + notification_enabled_ap_ids = + for u <- potential_receivers, activity_actor_domain not in u.domain_blocks, do: u.ap_id + + # Since even subscribers and followers can mute / thread-mute, filtering all above AP IDs + notification_enabled_ap_ids = + notification_enabled_ap_ids + |> exclude_relationship_restricted_ap_ids(activity) + |> exclude_thread_muter_ap_ids(activity) + notification_enabled_users = Enum.filter(potential_receivers, fn u -> u.ap_id in notification_enabled_ap_ids end) diff --git a/test/notification_test.exs b/test/notification_test.exs index 837a9dacd..caa941934 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -609,6 +609,21 @@ test "it returns thread-muting recipient in disabled recipients list" do assert [other_user] == disabled_receivers refute other_user in enabled_receivers end + + test "it returns domain-blocking recipient in disabled recipients list" do + blocked_domain = "blocked.domain" + user = insert(:user, %{ap_id: "https://#{blocked_domain}/@actor"}) + other_user = insert(:user) + + {:ok, other_user} = User.block_domain(other_user, blocked_domain) + + {:ok, activity} = CommonAPI.post(user, %{"status" => "hey @#{other_user.nickname}!"}) + + {enabled_receivers, disabled_receivers} = Notification.get_notified_from_activity(activity) + + assert [] == enabled_receivers + assert [other_user] == disabled_receivers + end end describe "notification lifecycle" do From c077ad0b3305e74f5b8d1b9bf38d4f480d76c1a6 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Sat, 11 Apr 2020 21:44:52 +0300 Subject: [PATCH 225/581] Remove User.upgrade_changeset in favor of remote_user_creation The two changesets had the same purpose, yet some changes were updated in one, but not the other (`uri`, for example). Also makes `Transmogrifier.upgrade_user_from_ap_id` be called from `ActivityPub.make_user_from_ap_id` only when the user is actually not AP enabled yet. I did not bother rewriting tests that used `User.insert_or_update` to use the changeset instead because they seemed to just test the implementation, rather than behavior. --- lib/pleroma/user.ex | 60 ++--------------- lib/pleroma/web/activity_pub/activity_pub.ex | 15 ++++- .../web/activity_pub/transmogrifier.ex | 14 ++-- test/user_test.exs | 64 ++----------------- .../web/activity_pub/views/user_view_test.exs | 2 +- 5 files changed, 31 insertions(+), 124 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 71c8c3a4e..fab405233 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -339,18 +339,20 @@ defp truncate_if_exists(params, key, max_length) do end end - def remote_user_creation(params) do + def remote_user_changeset(struct \\ %User{local: false}, params) do bio_limit = Pleroma.Config.get([:instance, :user_bio_length], 5000) name_limit = Pleroma.Config.get([:instance, :user_name_length], 100) params = params + |> Map.put(:name, blank?(params[:name]) || params[:nickname]) + |> Map.put_new(:last_refreshed_at, NaiveDateTime.utc_now()) |> truncate_if_exists(:name, name_limit) |> truncate_if_exists(:bio, bio_limit) |> truncate_fields_param() changeset = - %User{local: false} + struct |> cast( params, [ @@ -375,7 +377,8 @@ def remote_user_creation(params) do :discoverable, :invisible, :actor_type, - :also_known_as + :also_known_as, + :last_refreshed_at ] ) |> validate_required([:name, :ap_id]) @@ -488,49 +491,6 @@ defp put_upload(value, type) do end end - def upgrade_changeset(struct, params \\ %{}, remote? \\ false) do - bio_limit = Pleroma.Config.get([:instance, :user_bio_length], 5000) - name_limit = Pleroma.Config.get([:instance, :user_name_length], 100) - - params = Map.put(params, :last_refreshed_at, NaiveDateTime.utc_now()) - - params = if remote?, do: truncate_fields_param(params), else: params - - struct - |> cast( - params, - [ - :bio, - :name, - :follower_address, - :following_address, - :avatar, - :last_refreshed_at, - :ap_enabled, - :source_data, - :banner, - :locked, - :magic_key, - :follower_count, - :following_count, - :hide_follows, - :fields, - :hide_followers, - :allow_following_move, - :discoverable, - :hide_followers_count, - :hide_follows_count, - :actor_type, - :also_known_as - ] - ) - |> unique_constraint(:nickname) - |> validate_format(:nickname, local_nickname_regex()) - |> validate_length(:bio, max: bio_limit) - |> validate_length(:name, max: name_limit) - |> validate_fields(remote?) - end - def update_as_admin_changeset(struct, params) do struct |> update_changeset(params) @@ -1642,14 +1602,6 @@ def get_public_key_for_ap_id(ap_id) do defp blank?(""), do: nil defp blank?(n), do: n - def insert_or_update_user(data) do - data - |> Map.put(:name, blank?(data[:name]) || data[:nickname]) - |> remote_user_creation() - |> Repo.insert(on_conflict: {:replace_all_except, [:id]}, conflict_target: :nickname) - |> set_cache() - end - def ap_enabled?(%User{local: true}), do: true def ap_enabled?(%User{ap_enabled: ap_enabled}), do: ap_enabled def ap_enabled?(_), do: false diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 86b105b7f..2602b966b 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1551,11 +1551,22 @@ def fetch_and_prepare_user_from_ap_id(ap_id) do end def make_user_from_ap_id(ap_id) do - if _user = User.get_cached_by_ap_id(ap_id) do + user = User.get_cached_by_ap_id(ap_id) + + if user && !User.ap_enabled?(user) do Transmogrifier.upgrade_user_from_ap_id(ap_id) else with {:ok, data} <- fetch_and_prepare_user_from_ap_id(ap_id) do - User.insert_or_update_user(data) + if user do + user + |> User.remote_user_changeset(data) + |> User.update_and_set_cache() + else + data + |> User.remote_user_changeset() + |> Repo.insert() + |> User.set_cache() + end else e -> {:error, e} end diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index f9951cc5d..18fd56bed 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -710,7 +710,7 @@ def handle_incoming( {:ok, new_user_data} = ActivityPub.user_data_from_user_object(object) actor - |> User.upgrade_changeset(new_user_data, true) + |> User.remote_user_changeset(new_user_data) |> User.update_and_set_cache() ActivityPub.update(%{ @@ -1253,12 +1253,8 @@ def perform(:user_upgrade, user) do def upgrade_user_from_ap_id(ap_id) do with %User{local: false} = user <- User.get_cached_by_ap_id(ap_id), {:ok, data} <- ActivityPub.fetch_and_prepare_user_from_ap_id(ap_id), - already_ap <- User.ap_enabled?(user), - {:ok, user} <- upgrade_user(user, data) do - if not already_ap do - TransmogrifierWorker.enqueue("user_upgrade", %{"user_id" => user.id}) - end - + {:ok, user} <- update_user(user, data) do + TransmogrifierWorker.enqueue("user_upgrade", %{"user_id" => user.id}) {:ok, user} else %User{} = user -> {:ok, user} @@ -1266,9 +1262,9 @@ def upgrade_user_from_ap_id(ap_id) do end end - defp upgrade_user(user, data) do + defp update_user(user, data) do user - |> User.upgrade_changeset(data, true) + |> User.remote_user_changeset(data) |> User.update_and_set_cache() end diff --git a/test/user_test.exs b/test/user_test.exs index d39787f35..5c24955c2 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -609,7 +609,7 @@ test "returns an ap_followers link for a user" do ) <> "/followers" end - describe "remote user creation changeset" do + describe "remote user changeset" do @valid_remote %{ bio: "hello", name: "Someone", @@ -621,28 +621,28 @@ test "returns an ap_followers link for a user" do setup do: clear_config([:instance, :user_name_length]) test "it confirms validity" do - cs = User.remote_user_creation(@valid_remote) + cs = User.remote_user_changeset(@valid_remote) assert cs.valid? end test "it sets the follower_adress" do - cs = User.remote_user_creation(@valid_remote) + cs = User.remote_user_changeset(@valid_remote) # remote users get a fake local follower address assert cs.changes.follower_address == User.ap_followers(%User{nickname: @valid_remote[:nickname]}) end test "it enforces the fqn format for nicknames" do - cs = User.remote_user_creation(%{@valid_remote | nickname: "bla"}) + cs = User.remote_user_changeset(%{@valid_remote | nickname: "bla"}) assert Ecto.Changeset.get_field(cs, :local) == false assert cs.changes.avatar refute cs.valid? end test "it has required fields" do - [:name, :ap_id] + [:ap_id] |> Enum.each(fn field -> - cs = User.remote_user_creation(Map.delete(@valid_remote, field)) + cs = User.remote_user_changeset(Map.delete(@valid_remote, field)) refute cs.valid? end) end @@ -1198,58 +1198,6 @@ test "get_public_key_for_ap_id fetches a user that's not in the db" do assert {:ok, _key} = User.get_public_key_for_ap_id("http://mastodon.example.org/users/admin") end - describe "insert or update a user from given data" do - test "with normal data" do - user = insert(:user, %{nickname: "nick@name.de"}) - data = %{ap_id: user.ap_id <> "xxx", name: user.name, nickname: user.nickname} - - assert {:ok, %User{}} = User.insert_or_update_user(data) - end - - test "with overly long fields" do - current_max_length = Pleroma.Config.get([:instance, :account_field_value_length], 255) - user = insert(:user, nickname: "nickname@supergood.domain") - - data = %{ - ap_id: user.ap_id, - name: user.name, - nickname: user.nickname, - fields: [ - %{"name" => "myfield", "value" => String.duplicate("h", current_max_length + 1)} - ] - } - - assert {:ok, %User{}} = User.insert_or_update_user(data) - end - - test "with an overly long bio" do - current_max_length = Pleroma.Config.get([:instance, :user_bio_length], 5000) - user = insert(:user, nickname: "nickname@supergood.domain") - - data = %{ - ap_id: user.ap_id, - name: user.name, - nickname: user.nickname, - bio: String.duplicate("h", current_max_length + 1) - } - - assert {:ok, %User{}} = User.insert_or_update_user(data) - end - - test "with an overly long display name" do - current_max_length = Pleroma.Config.get([:instance, :user_name_length], 100) - user = insert(:user, nickname: "nickname@supergood.domain") - - data = %{ - ap_id: user.ap_id, - name: String.duplicate("h", current_max_length + 1), - nickname: user.nickname - } - - assert {:ok, %User{}} = User.insert_or_update_user(data) - end - end - describe "per-user rich-text filtering" do test "html_filter_policy returns default policies, when rich-text is enabled" do user = insert(:user) diff --git a/test/web/activity_pub/views/user_view_test.exs b/test/web/activity_pub/views/user_view_test.exs index ecb2dc386..514fd97b8 100644 --- a/test/web/activity_pub/views/user_view_test.exs +++ b/test/web/activity_pub/views/user_view_test.exs @@ -29,7 +29,7 @@ test "Renders profile fields" do {:ok, user} = insert(:user) - |> User.upgrade_changeset(%{fields: fields}) + |> User.update_changeset(%{fields: fields}) |> User.update_and_set_cache() assert %{ From 2ba754ffe11b98305e0c0607fec7ca4d510aa67f Mon Sep 17 00:00:00 2001 From: rinpatch Date: Sun, 12 Apr 2020 18:49:31 +0300 Subject: [PATCH 226/581] Fix mix tasks failing on OTP releases No idea why this was even added. Closes #1678 --- lib/mix/pleroma.ex | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/mix/pleroma.ex b/lib/mix/pleroma.ex index 4dfcc32e7..3ad6edbfb 100644 --- a/lib/mix/pleroma.ex +++ b/lib/mix/pleroma.ex @@ -5,7 +5,6 @@ defmodule Mix.Pleroma do @doc "Common functions to be reused in mix tasks" def start_pleroma do - Mix.Task.run("app.start") Application.put_env(:phoenix, :serve_endpoints, false, persistent: true) if Pleroma.Config.get(:env) != :test do From c556efb761a3e7fc2beb4540d6f58dbfe8e4abfe Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Sun, 12 Apr 2020 21:53:03 +0300 Subject: [PATCH 227/581] [#1364] Enabled notifications on followed domain-blocked users' activities. --- lib/pleroma/following_relationship.ex | 35 +++++++++++++-- lib/pleroma/notification.ex | 61 +++++++++++++++++++++------ test/notification_test.exs | 35 +++++++++++++-- 3 files changed, 111 insertions(+), 20 deletions(-) diff --git a/lib/pleroma/following_relationship.ex b/lib/pleroma/following_relationship.ex index a9538ea4e..11e06c5cc 100644 --- a/lib/pleroma/following_relationship.ex +++ b/lib/pleroma/following_relationship.ex @@ -69,6 +69,29 @@ def follower_count(%User{} = user) do |> Repo.aggregate(:count, :id) end + def followers_query(%User{} = user) do + __MODULE__ + |> join(:inner, [r], u in User, on: r.follower_id == u.id) + |> where([r], r.following_id == ^user.id) + |> where([r], r.state == "accept") + end + + def followers_ap_ids(%User{} = user, from_ap_ids \\ nil) do + query = + user + |> followers_query() + |> select([r, u], u.ap_id) + + query = + if from_ap_ids do + where(query, [r, u], u.ap_id in ^from_ap_ids) + else + query + end + + Repo.all(query) + end + def following_count(%User{id: nil}), do: 0 def following_count(%User{} = user) do @@ -92,12 +115,16 @@ def following?(%User{id: follower_id}, %User{id: followed_id}) do |> Repo.exists?() end + def following_query(%User{} = user) do + __MODULE__ + |> join(:inner, [r], u in User, on: r.following_id == u.id) + |> where([r], r.follower_id == ^user.id) + |> where([r], r.state == "accept") + end + def following(%User{} = user) do following = - __MODULE__ - |> join(:inner, [r], u in User, on: r.following_id == u.id) - |> where([r], r.follower_id == ^user.id) - |> where([r], r.state == "accept") + following_query(user) |> select([r, u], u.follower_address) |> Repo.all() diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 02363ddb0..da05ff2e4 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -6,6 +6,7 @@ defmodule Pleroma.Notification do use Ecto.Schema alias Pleroma.Activity + alias Pleroma.FollowingRelationship alias Pleroma.Notification alias Pleroma.Object alias Pleroma.Pagination @@ -81,6 +82,7 @@ def for_user_query(user, opts \\ %{}) do |> exclude_visibility(opts) end + # Excludes blocked users and non-followed domain-blocked users defp exclude_blocked(query, user, opts) do blocked_ap_ids = opts[:blocked_users_ap_ids] || User.blocked_users_ap_ids(user) @@ -88,7 +90,16 @@ defp exclude_blocked(query, user, opts) do |> where([n, a], a.actor not in ^blocked_ap_ids) |> where( [n, a], - fragment("substring(? from '.*://([^/]*)')", a.actor) not in ^user.domain_blocks + fragment( + # "NOT (actor's domain in domain_blocks) OR (actor is in followed AP IDs)" + "NOT (substring(? from '.*://([^/]*)') = ANY(?)) OR \ + ? = ANY(SELECT ap_id FROM users AS u INNER JOIN following_relationships AS fr \ + ON u.id = fr.following_id WHERE fr.follower_id = ? AND fr.state = 'accept')", + a.actor, + ^user.domain_blocks, + a.actor, + ^User.binary_id(user.id) + ) ) end @@ -338,19 +349,11 @@ def get_notified_from_activity(%Activity{data: %{"type" => type}} = activity, lo |> Utils.maybe_notify_followers(activity) |> Enum.uniq() - potential_receivers = + potential_receivers = User.get_users_from_set(potential_receiver_ap_ids, local_only) + + notification_enabled_ap_ids = potential_receiver_ap_ids - |> Enum.uniq() - |> User.get_users_from_set(local_only) - - activity_actor_domain = activity.actor && URI.parse(activity.actor).host - - notification_enabled_ap_ids = - for u <- potential_receivers, activity_actor_domain not in u.domain_blocks, do: u.ap_id - - # Since even subscribers and followers can mute / thread-mute, filtering all above AP IDs - notification_enabled_ap_ids = - notification_enabled_ap_ids + |> exclude_domain_blocker_ap_ids(activity, potential_receivers) |> exclude_relationship_restricted_ap_ids(activity) |> exclude_thread_muter_ap_ids(activity) @@ -362,6 +365,38 @@ def get_notified_from_activity(%Activity{data: %{"type" => type}} = activity, lo def get_notified_from_activity(_, _local_only), do: {[], []} + @doc "Filters out AP IDs of users who domain-block and not follow activity actor" + def exclude_domain_blocker_ap_ids(ap_ids, activity, preloaded_users \\ []) + + def exclude_domain_blocker_ap_ids([], _activity, _preloaded_users), do: [] + + def exclude_domain_blocker_ap_ids(ap_ids, %Activity{} = activity, preloaded_users) do + activity_actor_domain = activity.actor && URI.parse(activity.actor).host + + users = + ap_ids + |> Enum.map(fn ap_id -> + Enum.find(preloaded_users, &(&1.ap_id == ap_id)) || + User.get_cached_by_ap_id(ap_id) + end) + |> Enum.filter(& &1) + + domain_blocker_ap_ids = for u <- users, activity_actor_domain in u.domain_blocks, do: u.ap_id + + domain_blocker_follower_ap_ids = + if Enum.any?(domain_blocker_ap_ids) do + activity + |> Activity.user_actor() + |> FollowingRelationship.followers_ap_ids(domain_blocker_ap_ids) + else + [] + end + + ap_ids + |> Kernel.--(domain_blocker_ap_ids) + |> Kernel.++(domain_blocker_follower_ap_ids) + end + @doc "Filters out AP IDs of users basing on their relationships with activity actor user" def exclude_relationship_restricted_ap_ids([], _activity), do: [] diff --git a/test/notification_test.exs b/test/notification_test.exs index caa941934..4e5559bb1 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -610,7 +610,7 @@ test "it returns thread-muting recipient in disabled recipients list" do refute other_user in enabled_receivers end - test "it returns domain-blocking recipient in disabled recipients list" do + test "it returns non-following domain-blocking recipient in disabled recipients list" do blocked_domain = "blocked.domain" user = insert(:user, %{ap_id: "https://#{blocked_domain}/@actor"}) other_user = insert(:user) @@ -624,6 +624,22 @@ test "it returns domain-blocking recipient in disabled recipients list" do assert [] == enabled_receivers assert [other_user] == disabled_receivers end + + test "it returns following domain-blocking recipient in enabled recipients list" do + blocked_domain = "blocked.domain" + user = insert(:user, %{ap_id: "https://#{blocked_domain}/@actor"}) + other_user = insert(:user) + + {:ok, other_user} = User.block_domain(other_user, blocked_domain) + {:ok, other_user} = User.follow(other_user, user) + + {:ok, activity} = CommonAPI.post(user, %{"status" => "hey @#{other_user.nickname}!"}) + + {enabled_receivers, disabled_receivers} = Notification.get_notified_from_activity(activity) + + assert [other_user] == enabled_receivers + assert [] == disabled_receivers + end end describe "notification lifecycle" do @@ -886,7 +902,7 @@ test "it doesn't return notifications for blocked user" do assert Notification.for_user(user) == [] end - test "it doesn't return notifications for blocked domain" do + test "it doesn't return notifications for domain-blocked non-followed user" do user = insert(:user) blocked = insert(:user, ap_id: "http://some-domain.com") {:ok, user} = User.block_domain(user, "some-domain.com") @@ -896,6 +912,18 @@ test "it doesn't return notifications for blocked domain" do assert Notification.for_user(user) == [] end + test "it returns notifications for domain-blocked but followed user" do + user = insert(:user) + blocked = insert(:user, ap_id: "http://some-domain.com") + + {:ok, user} = User.block_domain(user, "some-domain.com") + {:ok, _} = User.follow(user, blocked) + + {:ok, _activity} = CommonAPI.post(blocked, %{"status" => "hey @#{user.nickname}"}) + + assert length(Notification.for_user(user)) == 1 + end + test "it doesn't return notifications for muted thread" do user = insert(:user) another_user = insert(:user) @@ -926,7 +954,8 @@ test "it doesn't return notifications from a blocked user when with_muted is set assert Enum.empty?(Notification.for_user(user, %{with_muted: true})) end - test "it doesn't return notifications from a domain-blocked user when with_muted is set" do + test "when with_muted is set, " <> + "it doesn't return notifications from a domain-blocked non-followed user" do user = insert(:user) blocked = insert(:user, ap_id: "http://some-domain.com") {:ok, user} = User.block_domain(user, "some-domain.com") From ed894802d5dfe60072b9445cb28e7b474a9f393b Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 12 Apr 2020 18:46:47 -0500 Subject: [PATCH 228/581] Expand MRF SimplePolicy docs --- docs/configuration/mrf.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/configuration/mrf.md b/docs/configuration/mrf.md index c3957c255..9f13c3d18 100644 --- a/docs/configuration/mrf.md +++ b/docs/configuration/mrf.md @@ -41,11 +41,14 @@ config :pleroma, :instance, Once `SimplePolicy` is enabled, you can configure various groups in the `:mrf_simple` config object. These groups are: -* `media_removal`: Servers in this group will have media stripped from incoming messages. -* `media_nsfw`: Servers in this group will have the #nsfw tag and sensitive setting injected into incoming messages which contain media. * `reject`: Servers in this group will have their messages rejected. -* `federated_timeline_removal`: Servers in this group will have their messages unlisted from the public timelines by flipping the `to` and `cc` fields. +* `accept`: If not empty, only messages from these instances will be accepted (whitelist federation). +* `media_nsfw`: Servers in this group will have the #nsfw tag and sensitive setting injected into incoming messages which contain media. +* `media_removal`: Servers in this group will have media stripped from incoming messages. +* `avatar_removal`: Avatars from these servers will be stripped from incoming messages. +* `banner_removal`: Banner images from these servers will be stripped from incoming messages. * `report_removal`: Servers in this group will have their reports (flags) rejected. +* `federated_timeline_removal`: Servers in this group will have their messages unlisted from the public timelines by flipping the `to` and `cc` fields. Servers should be configured as lists. From 9a3c74b244bce6097a8c6da99692bfc9973e1ec8 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 12 Apr 2020 20:26:35 -0500 Subject: [PATCH 229/581] Always accept deletions through SimplePolicy --- .../web/activity_pub/mrf/simple_policy.ex | 3 +++ .../activity_pub/mrf/simple_policy_test.exs | 23 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index 4edc007fd..b23f263f5 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -148,6 +148,9 @@ defp check_banner_removal(%{host: actor_host} = _actor_info, %{"image" => _image defp check_banner_removal(_actor_info, object), do: {:ok, object} + @impl true + def filter(%{"type" => "Delete"} = object), do: {:ok, object} + @impl true def filter(%{"actor" => actor} = object) do actor_info = URI.parse(actor) diff --git a/test/web/activity_pub/mrf/simple_policy_test.exs b/test/web/activity_pub/mrf/simple_policy_test.exs index 91c24c2d9..eaa595706 100644 --- a/test/web/activity_pub/mrf/simple_policy_test.exs +++ b/test/web/activity_pub/mrf/simple_policy_test.exs @@ -258,6 +258,14 @@ test "actor has a matching host" do assert SimplePolicy.filter(remote_user) == {:reject, nil} end + + test "always accept deletions" do + Config.put([:mrf_simple, :reject], ["remote.instance"]) + + deletion_message = build_remote_deletion_message() + + assert SimplePolicy.filter(deletion_message) == {:ok, deletion_message} + end end describe "when :accept" do @@ -308,6 +316,14 @@ test "actor has a matching host" do assert SimplePolicy.filter(remote_user) == {:ok, remote_user} end + + test "always accept deletions" do + Config.put([:mrf_simple, :accept], ["non.matching.remote"]) + + deletion_message = build_remote_deletion_message() + + assert SimplePolicy.filter(deletion_message) == {:ok, deletion_message} + end end describe "when :avatar_removal" do @@ -408,4 +424,11 @@ defp build_remote_user do "type" => "Person" } end + + defp build_remote_deletion_message do + %{ + "type" => "Delete", + "actor" => "https://remote.instance/users/bob" + } + end end From c5c09fc61b7b6e591e9de23028e5caea8f26b996 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Mon, 13 Apr 2020 06:53:45 +0300 Subject: [PATCH 230/581] fix mediaType of object --- .../web/activity_pub/transmogrifier.ex | 21 +++++++++++++++---- test/fixtures/tesla_mock/bittube-video.json | 1 + test/fixtures/tesla_mock/hanimated.json | 1 + test/support/http_request_mock.ex | 16 ++++++++++++++ test/web/activity_pub/transmogrifier_test.exs | 9 ++++++++ 5 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 test/fixtures/tesla_mock/bittube-video.json create mode 100644 test/fixtures/tesla_mock/hanimated.json diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 39feae285..17e3c203a 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -35,6 +35,7 @@ def fix_object(object, options \\ []) do |> fix_actor |> fix_url |> fix_attachments + |> fix_media_type |> fix_context |> fix_in_reply_to(options) |> fix_emoji @@ -357,6 +358,12 @@ def fix_type(%{"inReplyTo" => reply_id, "name" => _} = object, options) def fix_type(object, _), do: object + defp fix_media_type(%{"mediaType" => _} = object) do + Map.put(object, "mediaType", "text/html") + end + + defp fix_media_type(object), do: object + defp mastodon_follow_hack(%{"id" => id, "actor" => follower_id}, followed) do with true <- id =~ "follows", %User{local: true} = follower <- User.get_cached_by_ap_id(follower_id), @@ -1207,18 +1214,24 @@ def add_attributed_to(object) do def prepare_attachments(object) do attachments = - (object["attachment"] || []) + object + |> Map.get("attachment", []) |> Enum.map(fn data -> [%{"mediaType" => media_type, "href" => href} | _] = data["url"] - %{"url" => href, "mediaType" => media_type, "name" => data["name"], "type" => "Document"} + + %{ + "url" => href, + "mediaType" => media_type, + "name" => data["name"], + "type" => "Document" + } end) Map.put(object, "attachment", attachments) end def strip_internal_fields(object) do - object - |> Map.drop(Pleroma.Constants.object_internal_fields()) + Map.drop(object, Pleroma.Constants.object_internal_fields()) end defp strip_internal_tags(%{"tag" => tags} = object) do diff --git a/test/fixtures/tesla_mock/bittube-video.json b/test/fixtures/tesla_mock/bittube-video.json new file mode 100644 index 000000000..be839862f --- /dev/null +++ b/test/fixtures/tesla_mock/bittube-video.json @@ -0,0 +1 @@ +{"type":"Video","id":"https://bittube.video/videos/watch/2aad7dfb-5c75-4ee6-a9ed-08436af0558b","name":"Implications of 5G Rollout Simply Explained","duration":"PT428S","uuid":"2aad7dfb-5c75-4ee6-a9ed-08436af0558b","tag":[{"type":"Hashtag","name":"5g"},{"type":"Hashtag","name":"big brother"},{"type":"Hashtag","name":"facial recognition"},{"type":"Hashtag","name":"smart device"}],"category":{"identifier":"15","name":"Science & Technology"},"language":{"identifier":"en","name":"English"},"views":5,"sensitive":false,"waitTranscoding":true,"state":1,"commentsEnabled":true,"downloadEnabled":true,"published":"2020-04-12T11:55:44.805Z","originallyPublishedAt":null,"updated":"2020-04-13T02:01:24.279Z","mediaType":"text/markdown","content":null,"support":null,"subtitleLanguage":[],"icon":{"type":"Image","url":"https://bittube.video/static/thumbnails/2aad7dfb-5c75-4ee6-a9ed-08436af0558b.jpg","mediaType":"image/jpeg","width":223,"height":122},"url":[{"type":"Link","mediaType":"text/html","href":"https://bittube.video/videos/watch/2aad7dfb-5c75-4ee6-a9ed-08436af0558b"},{"type":"Link","mediaType":"video/mp4","href":"https://bittube.video/static/webseed/2aad7dfb-5c75-4ee6-a9ed-08436af0558b-240.mp4","height":240,"size":17158094,"fps":30},{"type":"Link","mediaType":"application/x-bittorrent","href":"https://bittube.video/static/torrents/2aad7dfb-5c75-4ee6-a9ed-08436af0558b-240.torrent","height":240},{"type":"Link","mediaType":"application/x-bittorrent;x-scheme-handler/magnet","href":"magnet:?xs=https%3A%2F%2Fbittube.video%2Fstatic%2Ftorrents%2F2aad7dfb-5c75-4ee6-a9ed-08436af0558b-240.torrent&xt=urn:btih:16c8f60d788a29e7ff195de44b4a1558b41dc6c3&dn=Implications+of+5G+Rollout+Simply+Explained&tr=wss%3A%2F%2Fbittube.video%3A443%2Ftracker%2Fsocket&tr=https%3A%2F%2Fbittube.video%2Ftracker%2Fannounce&ws=https%3A%2F%2Fbittube.video%2Fstatic%2Fwebseed%2F2aad7dfb-5c75-4ee6-a9ed-08436af0558b-240.mp4","height":240},{"type":"Link","mediaType":"video/mp4","href":"https://bittube.video/static/webseed/2aad7dfb-5c75-4ee6-a9ed-08436af0558b-0.mp4","height":0,"size":5215186,"fps":0},{"type":"Link","mediaType":"application/x-bittorrent","href":"https://bittube.video/static/torrents/2aad7dfb-5c75-4ee6-a9ed-08436af0558b-0.torrent","height":0},{"type":"Link","mediaType":"application/x-bittorrent;x-scheme-handler/magnet","href":"magnet:?xs=https%3A%2F%2Fbittube.video%2Fstatic%2Ftorrents%2F2aad7dfb-5c75-4ee6-a9ed-08436af0558b-0.torrent&xt=urn:btih:8a043b09291f2947423ce96d1cd0e977662d6de8&dn=Implications+of+5G+Rollout+Simply+Explained&tr=wss%3A%2F%2Fbittube.video%3A443%2Ftracker%2Fsocket&tr=https%3A%2F%2Fbittube.video%2Ftracker%2Fannounce&ws=https%3A%2F%2Fbittube.video%2Fstatic%2Fwebseed%2F2aad7dfb-5c75-4ee6-a9ed-08436af0558b-0.mp4","height":0},{"type":"Link","mediaType":"video/mp4","href":"https://bittube.video/static/webseed/2aad7dfb-5c75-4ee6-a9ed-08436af0558b-360.mp4","height":360,"size":22813140,"fps":30},{"type":"Link","mediaType":"application/x-bittorrent","href":"https://bittube.video/static/torrents/2aad7dfb-5c75-4ee6-a9ed-08436af0558b-360.torrent","height":360},{"type":"Link","mediaType":"application/x-bittorrent;x-scheme-handler/magnet","href":"magnet:?xs=https%3A%2F%2Fbittube.video%2Fstatic%2Ftorrents%2F2aad7dfb-5c75-4ee6-a9ed-08436af0558b-360.torrent&xt=urn:btih:d121f7493998d4204b3d33d00da7fea1c9a42484&dn=Implications+of+5G+Rollout+Simply+Explained&tr=wss%3A%2F%2Fbittube.video%3A443%2Ftracker%2Fsocket&tr=https%3A%2F%2Fbittube.video%2Ftracker%2Fannounce&ws=https%3A%2F%2Fbittube.video%2Fstatic%2Fwebseed%2F2aad7dfb-5c75-4ee6-a9ed-08436af0558b-360.mp4","height":360}],"likes":"https://bittube.video/videos/watch/2aad7dfb-5c75-4ee6-a9ed-08436af0558b/likes","dislikes":"https://bittube.video/videos/watch/2aad7dfb-5c75-4ee6-a9ed-08436af0558b/dislikes","shares":"https://bittube.video/videos/watch/2aad7dfb-5c75-4ee6-a9ed-08436af0558b/announces","comments":"https://bittube.video/videos/watch/2aad7dfb-5c75-4ee6-a9ed-08436af0558b/comments","attributedTo":[{"type":"Person","id":"https://bittube.video/accounts/hanimated.moh"},{"type":"Group","id":"https://bittube.video/video-channels/hanimated.moh_channel"}],"to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://bittube.video/accounts/hanimated.moh/followers"],"@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"RsaSignature2017":"https://w3id.org/security#RsaSignature2017","pt":"https://joinpeertube.org/ns#","sc":"http://schema.org#","Hashtag":"as:Hashtag","uuid":"sc:identifier","category":"sc:category","licence":"sc:license","subtitleLanguage":"sc:subtitleLanguage","sensitive":"as:sensitive","language":"sc:inLanguage","expires":"sc:expires","CacheFile":"pt:CacheFile","Infohash":"pt:Infohash","originallyPublishedAt":"sc:datePublished","views":{"@type":"sc:Number","@id":"pt:views"},"state":{"@type":"sc:Number","@id":"pt:state"},"size":{"@type":"sc:Number","@id":"pt:size"},"fps":{"@type":"sc:Number","@id":"pt:fps"},"startTimestamp":{"@type":"sc:Number","@id":"pt:startTimestamp"},"stopTimestamp":{"@type":"sc:Number","@id":"pt:stopTimestamp"},"position":{"@type":"sc:Number","@id":"pt:position"},"commentsEnabled":{"@type":"sc:Boolean","@id":"pt:commentsEnabled"},"downloadEnabled":{"@type":"sc:Boolean","@id":"pt:downloadEnabled"},"waitTranscoding":{"@type":"sc:Boolean","@id":"pt:waitTranscoding"},"support":{"@type":"sc:Text","@id":"pt:support"}},{"likes":{"@id":"as:likes","@type":"@id"},"dislikes":{"@id":"as:dislikes","@type":"@id"},"playlists":{"@id":"pt:playlists","@type":"@id"},"shares":{"@id":"as:shares","@type":"@id"},"comments":{"@id":"as:comments","@type":"@id"}}]} diff --git a/test/fixtures/tesla_mock/hanimated.json b/test/fixtures/tesla_mock/hanimated.json new file mode 100644 index 000000000..564deebd9 --- /dev/null +++ b/test/fixtures/tesla_mock/hanimated.json @@ -0,0 +1 @@ +{"type":"Person","id":"https://bittube.video/accounts/hanimated.moh","following":"https://bittube.video/accounts/hanimated.moh/following","followers":"https://bittube.video/accounts/hanimated.moh/followers","playlists":"https://bittube.video/accounts/hanimated.moh/playlists","inbox":"https://bittube.video/accounts/hanimated.moh/inbox","outbox":"https://bittube.video/accounts/hanimated.moh/outbox","preferredUsername":"hanimated.moh","url":"https://bittube.video/accounts/hanimated.moh","name":"Nosat","endpoints":{"sharedInbox":"https://bittube.video/inbox"},"publicKey":{"id":"https://bittube.video/accounts/hanimated.moh#main-key","owner":"https://bittube.video/accounts/hanimated.moh","publicKeyPem":"-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwuoQT+4uyAboQcf/okCM\nFqUS/LuqFc2888OSKZFAz00Op/dyOB/pkr1+QLxbl8ZGiUWhmnmhNwmmd3tbhSsC\nvLv9Mz/YaWQPYLfRS/s/7iIxdniC4lo/YgicOrzcvetHmk1feOg5vb5/yc+bgUSm\nOk+L4azqXP9GmZyofzvufT65bUmzQRFXP19eL55YZWvZDaC81QAfRXsqtCqbehtF\nQNOjGhnl6a7Kfe8KprRDPV/3WvvFjftnNO2qenIIOFLLeznkQ0ELP6lyb9pvv/1C\n2/GRh2BwmgVlCTw1kTxLSdj80BFX5P8AudSiIx079lVkhamEhzsNLkMpQFqWAAlg\nrQIDAQAB\n-----END PUBLIC KEY-----"},"icon":{"type":"Image","mediaType":"image/jpeg","url":"https://bittube.video/lazy-static/avatars/84b8acc3-e48b-4642-a9f4-360a4499579b.jpg"},"@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"RsaSignature2017":"https://w3id.org/security#RsaSignature2017","pt":"https://joinpeertube.org/ns#","sc":"http://schema.org#","Hashtag":"as:Hashtag","uuid":"sc:identifier","category":"sc:category","licence":"sc:license","subtitleLanguage":"sc:subtitleLanguage","sensitive":"as:sensitive","language":"sc:inLanguage","expires":"sc:expires","CacheFile":"pt:CacheFile","Infohash":"pt:Infohash","originallyPublishedAt":"sc:datePublished","views":{"@type":"sc:Number","@id":"pt:views"},"state":{"@type":"sc:Number","@id":"pt:state"},"size":{"@type":"sc:Number","@id":"pt:size"},"fps":{"@type":"sc:Number","@id":"pt:fps"},"startTimestamp":{"@type":"sc:Number","@id":"pt:startTimestamp"},"stopTimestamp":{"@type":"sc:Number","@id":"pt:stopTimestamp"},"position":{"@type":"sc:Number","@id":"pt:position"},"commentsEnabled":{"@type":"sc:Boolean","@id":"pt:commentsEnabled"},"downloadEnabled":{"@type":"sc:Boolean","@id":"pt:downloadEnabled"},"waitTranscoding":{"@type":"sc:Boolean","@id":"pt:waitTranscoding"},"support":{"@type":"sc:Text","@id":"pt:support"}},{"likes":{"@id":"as:likes","@type":"@id"},"dislikes":{"@id":"as:dislikes","@type":"@id"},"playlists":{"@id":"pt:playlists","@type":"@id"},"shares":{"@id":"as:shares","@type":"@id"},"comments":{"@id":"as:comments","@type":"@id"}}],"summary":null} diff --git a/test/support/http_request_mock.ex b/test/support/http_request_mock.ex index 20cb2b3d1..54dde0432 100644 --- a/test/support/http_request_mock.ex +++ b/test/support/http_request_mock.ex @@ -308,6 +308,22 @@ def get("https://peertube.moe/videos/watch/df5f464b-be8d-46fb-ad81-2d4c2d1630e3" }} end + def get("https://bittube.video/accounts/hanimated.moh", _, _, _) do + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/hanimated.json") + }} + end + + def get("https://bittube.video/videos/watch/2aad7dfb-5c75-4ee6-a9ed-08436af0558b", _, _, _) do + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/bittube-video.json") + }} + end + def get("https://mobilizon.org/events/252d5816-00a3-4a89-a66f-15bf65c33e39", _, _, [ {"accept", "application/activity+json"} ]) do diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 2332029e5..de9663fa9 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -1221,6 +1221,15 @@ test "it rejects activities without a valid ID" do :error = Transmogrifier.handle_incoming(data) end + test "it remaps mediaType of object" do + {:ok, object} = + Fetcher.fetch_object_from_id( + "https://bittube.video/videos/watch/2aad7dfb-5c75-4ee6-a9ed-08436af0558b" + ) + + assert object.data["mediaType"] == "text/html" + end + test "it remaps video URLs as attachments if necessary" do {:ok, object} = Fetcher.fetch_object_from_id( From a050f3e015a6c5c8d38d535692d4da7a6b1e9c60 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 10 Apr 2020 14:42:52 +0300 Subject: [PATCH 231/581] fix for logger configuration through admin-fe --- lib/pleroma/config/transfer_task.ex | 104 +++++++++++------- .../admin_api/admin_api_controller_test.exs | 17 ++- 2 files changed, 71 insertions(+), 50 deletions(-) diff --git a/lib/pleroma/config/transfer_task.ex b/lib/pleroma/config/transfer_task.ex index 936bc9ab1..3871e1cbb 100644 --- a/lib/pleroma/config/transfer_task.ex +++ b/lib/pleroma/config/transfer_task.ex @@ -54,10 +54,19 @@ def load_and_update_env(deleted_settings \\ [], restart_pleroma? \\ true) do [:pleroma, nil, :prometheus] end + {logger, other} = + (Repo.all(ConfigDB) ++ deleted_settings) + |> Enum.map(&transform_and_merge/1) + |> Enum.split_with(fn {group, _, _, _} -> group in [:logger, :quack] end) + + logger + |> Enum.sort() + |> Enum.each(&configure/1) + started_applications = Application.started_applications() - (Repo.all(ConfigDB) ++ deleted_settings) - |> Enum.map(&merge_and_update/1) + other + |> Enum.map(&update/1) |> Enum.uniq() |> Enum.reject(&(&1 in reject_restart)) |> maybe_set_pleroma_last() @@ -81,51 +90,66 @@ defp maybe_set_pleroma_last(apps) do end end - defp group_for_restart(:logger, key, _, merged_value) do - # change logger configuration in runtime, without restart - if Keyword.keyword?(merged_value) and - key not in [:compile_time_application, :backends, :compile_time_purge_matching] do - Logger.configure_backend(key, merged_value) - else - Logger.configure([{key, merged_value}]) - end + defp transform_and_merge(%{group: group, key: key, value: value} = setting) do + group = ConfigDB.from_string(group) + key = ConfigDB.from_string(key) + value = ConfigDB.from_binary(value) - nil + default = Config.Holder.default_config(group, key) + + merged = + cond do + Ecto.get_meta(setting, :state) == :deleted -> default + can_be_merged?(default, value) -> ConfigDB.merge_group(group, key, default, value) + true -> value + end + + {group, key, value, merged} end - defp group_for_restart(group, _, _, _) when group != :pleroma, do: group - - defp group_for_restart(group, key, value, _) do - if pleroma_need_restart?(group, key, value), do: group + # change logger configuration in runtime, without restart + defp configure({:quack, key, _, merged}) do + Logger.configure_backend(Quack.Logger, [{key, merged}]) + :ok = update_env(:quack, key, merged) end - defp merge_and_update(setting) do + defp configure({_, :backends, _, merged}) do + # removing current backends + Enum.each(Application.get_env(:logger, :backends), &Logger.remove_backend/1) + + Enum.each(merged, &Logger.add_backend/1) + + :ok = update_env(:logger, :backends, merged) + end + + defp configure({group, key, _, merged}) do + merged = + if key == :console do + put_in(merged[:format], merged[:format] <> "\n") + else + merged + end + + backend = + if key == :ex_syslogger, + do: {ExSyslogger, :ex_syslogger}, + else: key + + Logger.configure_backend(backend, merged) + :ok = update_env(:logger, group, merged) + end + + defp update({group, key, value, merged}) do try do - key = ConfigDB.from_string(setting.key) - group = ConfigDB.from_string(setting.group) + :ok = update_env(group, key, merged) - default = Config.Holder.default_config(group, key) - value = ConfigDB.from_binary(setting.value) - - merged_value = - cond do - Ecto.get_meta(setting, :state) == :deleted -> default - can_be_merged?(default, value) -> ConfigDB.merge_group(group, key, default, value) - true -> value - end - - :ok = update_env(group, key, merged_value) - - group_for_restart(group, key, value, merged_value) + if group != :pleroma or pleroma_need_restart?(group, key, value), do: group rescue error -> error_msg = - "updating env causes error, group: " <> - inspect(setting.group) <> - " key: " <> - inspect(setting.key) <> - " value: " <> - inspect(ConfigDB.from_binary(setting.value)) <> " error: " <> inspect(error) + "updating env causes error, group: #{inspect(group)}, key: #{inspect(key)}, value: #{ + inspect(value) + } error: #{inspect(error)}" Logger.warn(error_msg) @@ -133,6 +157,9 @@ defp merge_and_update(setting) do end end + defp update_env(group, key, nil), do: Application.delete_env(group, key) + defp update_env(group, key, value), do: Application.put_env(group, key, value) + @spec pleroma_need_restart?(atom(), atom(), any()) :: boolean() def pleroma_need_restart?(group, key, value) do group_and_key_need_reboot?(group, key) or group_and_subkey_need_reboot?(group, key, value) @@ -150,9 +177,6 @@ defp group_and_subkey_need_reboot?(group, key, value) do end) end - defp update_env(group, key, nil), do: Application.delete_env(group, key) - defp update_env(group, key, value), do: Application.put_env(group, key, value) - defp restart(_, :pleroma, env), do: Restarter.Pleroma.restart_after_boot(env) defp restart(started_applications, app, _) do diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index f02f6ae7a..60ec895f5 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -2273,13 +2273,17 @@ test "saving full setting if value is in full_key_update list", %{conn: conn} do value: :erlang.term_to_binary([]) ) + Pleroma.Config.TransferTask.load_and_update_env([], false) + + assert Application.get_env(:logger, :backends) == [] + conn = post(conn, "/api/pleroma/admin/config", %{ configs: [ %{ group: config.group, key: config.key, - value: [":console", %{"tuple" => ["ExSyslogger", ":ex_syslogger"]}] + value: [":console"] } ] }) @@ -2290,8 +2294,7 @@ test "saving full setting if value is in full_key_update list", %{conn: conn} do "group" => ":logger", "key" => ":backends", "value" => [ - ":console", - %{"tuple" => ["ExSyslogger", ":ex_syslogger"]} + ":console" ], "db" => [":backends"] } @@ -2299,14 +2302,8 @@ test "saving full setting if value is in full_key_update list", %{conn: conn} do } assert Application.get_env(:logger, :backends) == [ - :console, - {ExSyslogger, :ex_syslogger} + :console ] - - capture_log(fn -> - require Logger - Logger.warn("Ooops...") - end) =~ "Ooops..." end test "saving full setting if value is not keyword", %{conn: conn} do From de34c4ee6b0487941bfcf02a48b45a578ae329af Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Mon, 13 Apr 2020 08:59:06 +0300 Subject: [PATCH 232/581] changelog entry --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36897503a..e29be28d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Support pagination in conversations API ## [unreleased-patch] +### Fixed +- Logger configuration through AdminFE ## [2.0.2] - 2020-04-08 ### Added From dc2637c18880160286f50505b1140a58fdfdf7d1 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Mon, 13 Apr 2020 09:16:35 +0300 Subject: [PATCH 233/581] [#2342] Removed changelog entry for temporary configuration option. --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b41502a27..7d9b10b28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - NodeInfo: `pleroma:api/v1/notifications:include_types_filter` to the `features` list. - Configuration: `:restrict_unauthenticated` setting, restrict access for unauthenticated users to timelines (public and federate), user profiles and statuses. - New HTTP adapter [gun](https://github.com/ninenines/gun). Gun adapter requires minimum OTP version of 22.2 otherwise Pleroma won’t start. For hackney OTP update is not required. -- Configuration: `:extensions/:output_relationships_in_statuses_by_default` option (if `false`, disables the output of account/pleroma/relationship for statuses and notifications by default, breaking the compatibility with older PleromaFE versions).
API Changes - Mastodon API: Support for `include_types` in `/api/v1/notifications`. From 99b0bc198921099816a5f809f11a7579b3993274 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Mon, 13 Apr 2020 13:24:31 +0300 Subject: [PATCH 234/581] [#1364] Resolved merge conflicts with `develop`. Refactoring. --- lib/pleroma/following_relationship.ex | 34 +++++++++++++++++++++++++-- lib/pleroma/notification.ex | 14 +---------- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/lib/pleroma/following_relationship.ex b/lib/pleroma/following_relationship.ex index 219a64352..3a3082e72 100644 --- a/lib/pleroma/following_relationship.ex +++ b/lib/pleroma/following_relationship.ex @@ -10,11 +10,12 @@ defmodule Pleroma.FollowingRelationship do alias Ecto.Changeset alias FlakeId.Ecto.CompatType + alias Pleroma.FollowingRelationship.State alias Pleroma.Repo alias Pleroma.User schema "following_relationships" do - field(:state, Pleroma.FollowingRelationship.State, default: :follow_pending) + field(:state, State, default: :follow_pending) belongs_to(:follower, User, type: CompatType) belongs_to(:following, User, type: CompatType) @@ -22,6 +23,11 @@ defmodule Pleroma.FollowingRelationship do timestamps() end + @doc "Returns underlying integer code for state atom" + def state_int_code(state_atom), do: State.__enum_map__() |> Keyword.fetch!(state_atom) + + def accept_state_code, do: state_int_code(:follow_accept) + def changeset(%__MODULE__{} = following_relationship, attrs) do following_relationship |> cast(attrs, [:state]) @@ -86,7 +92,7 @@ def followers_query(%User{} = user) do __MODULE__ |> join(:inner, [r], u in User, on: r.follower_id == u.id) |> where([r], r.following_id == ^user.id) - |> where([r], r.state == "accept") + |> where([r], r.state == ^:follow_accept) end def followers_ap_ids(%User{} = user, from_ap_ids \\ nil) do @@ -198,6 +204,30 @@ def find(following_relationships, follower, following) do end) end + @doc """ + For a query with joined activity, + keeps rows where activity's actor is followed by user -or- is NOT domain-blocked by user. + """ + def keep_following_or_not_domain_blocked(query, user) do + where( + query, + [_, activity], + fragment( + # "(actor's domain NOT in domain_blocks) OR (actor IS in followed AP IDs)" + """ + NOT (substring(? from '.*://([^/]*)') = ANY(?)) OR + ? = ANY(SELECT ap_id FROM users AS u INNER JOIN following_relationships AS fr + ON u.id = fr.following_id WHERE fr.follower_id = ? AND fr.state = ?) + """, + activity.actor, + ^user.domain_blocks, + activity.actor, + ^User.binary_id(user.id), + ^accept_state_code() + ) + ) + end + defp validate_not_self_relationship(%Changeset{} = changeset) do changeset |> validate_follower_id_following_id_inequality() diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index da05ff2e4..b76dd176c 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -88,19 +88,7 @@ defp exclude_blocked(query, user, opts) do query |> where([n, a], a.actor not in ^blocked_ap_ids) - |> where( - [n, a], - fragment( - # "NOT (actor's domain in domain_blocks) OR (actor is in followed AP IDs)" - "NOT (substring(? from '.*://([^/]*)') = ANY(?)) OR \ - ? = ANY(SELECT ap_id FROM users AS u INNER JOIN following_relationships AS fr \ - ON u.id = fr.following_id WHERE fr.follower_id = ? AND fr.state = 'accept')", - a.actor, - ^user.domain_blocks, - a.actor, - ^User.binary_id(user.id) - ) - ) + |> FollowingRelationship.keep_following_or_not_domain_blocked(user) end defp exclude_notification_muted(query, _, %{@include_muted_option => true}) do From 5c76afb06c731557b537f928296e0b5c259f8d5e Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Mon, 13 Apr 2020 15:38:50 +0300 Subject: [PATCH 235/581] [#2342] Removed description.exs entry for temporary configuration option. --- config/description.exs | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/config/description.exs b/config/description.exs index 1b450db58..642f1a3ce 100644 --- a/config/description.exs +++ b/config/description.exs @@ -121,22 +121,6 @@ } ] }, - %{ - group: :pleroma, - key: :extensions, - type: :group, - description: "Pleroma-specific extensions", - children: [ - %{ - key: :output_relationships_in_statuses_by_default, - type: :beeolean, - description: - "If `true`, outputs account/pleroma/relationship map for each rendered status / notification (for all clients). " <> - "If `false`, outputs the above only if `with_relationships` param is tru-ish " <> - "(that breaks compatibility with older PleromaFE versions which do not send this param but expect the output)." - } - ] - }, %{ group: :pleroma, key: Pleroma.Uploaders.Local, From b08ded6c2f5ee29c6efc8c67cfc2ce0a679f0c77 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Fri, 3 Apr 2020 22:45:08 +0400 Subject: [PATCH 236/581] Add spec for AccountController.create --- .../api_spec/operations/account_operation.ex | 68 ++++++ lib/pleroma/web/api_spec/render_error.ex | 27 +++ .../schemas/account_create_request.ex | 56 +++++ .../schemas/account_create_response.ex | 29 +++ .../controllers/account_controller.ex | 36 +-- lib/pleroma/web/twitter_api/twitter_api.ex | 102 ++++---- test/web/api_spec/account_operation_test.exs | 48 ++++ .../controllers/account_controller_test.exs | 30 ++- test/web/twitter_api/twitter_api_test.exs | 222 +++++++++--------- 9 files changed, 426 insertions(+), 192 deletions(-) create mode 100644 lib/pleroma/web/api_spec/operations/account_operation.ex create mode 100644 lib/pleroma/web/api_spec/render_error.ex create mode 100644 lib/pleroma/web/api_spec/schemas/account_create_request.ex create mode 100644 lib/pleroma/web/api_spec/schemas/account_create_response.ex create mode 100644 test/web/api_spec/account_operation_test.exs diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex new file mode 100644 index 000000000..9085f1af1 --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -0,0 +1,68 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.AccountOperation do + alias OpenApiSpex.Operation + alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest + alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse + alias Pleroma.Web.ApiSpec.Helpers + + @spec open_api_operation(atom) :: Operation.t() + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + @spec create_operation() :: Operation.t() + def create_operation do + %Operation{ + tags: ["accounts"], + summary: "Register an account", + description: + "Creates a user and account records. Returns an account access token for the app that initiated the request. The app should save this token for later, and should wait for the user to confirm their account by clicking a link in their email inbox.", + operationId: "AccountController.create", + requestBody: Helpers.request_body("Parameters", AccountCreateRequest, required: true), + responses: %{ + 200 => Operation.response("Account", "application/json", AccountCreateResponse) + } + } + end + + def verify_credentials_operation do + :ok + end + + def update_credentials_operation do + :ok + end + + def relationships_operation do + :ok + end + + def show_operation do + :ok + end + + def statuses_operation do + :ok + end + + def followers_operation do + :ok + end + + def following_operation, do: :ok + def lists_operation, do: :ok + def follow_operation, do: :ok + def unfollow_operation, do: :ok + def mute_operation, do: :ok + def unmute_operation, do: :ok + def block_operation, do: :ok + def unblock_operation, do: :ok + def follows_operation, do: :ok + def mutes_operation, do: :ok + def blocks_operation, do: :ok + def endorsements_operation, do: :ok +end diff --git a/lib/pleroma/web/api_spec/render_error.ex b/lib/pleroma/web/api_spec/render_error.ex new file mode 100644 index 000000000..e063d115b --- /dev/null +++ b/lib/pleroma/web/api_spec/render_error.ex @@ -0,0 +1,27 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.RenderError do + @behaviour Plug + + alias Plug.Conn + alias OpenApiSpex.Plug.JsonRenderError + + @impl Plug + def init(opts), do: opts + + @impl Plug + + def call(%{private: %{open_api_spex: %{operation_id: "AccountController.create"}}} = conn, _) do + conn + |> Conn.put_status(:bad_request) + |> Phoenix.Controller.json(%{"error" => "Missing parameters"}) + end + + def call(conn, reason) do + opts = JsonRenderError.init(reason) + + JsonRenderError.call(conn, opts) + end +end diff --git a/lib/pleroma/web/api_spec/schemas/account_create_request.ex b/lib/pleroma/web/api_spec/schemas/account_create_request.ex new file mode 100644 index 000000000..398e2d613 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/account_create_request.ex @@ -0,0 +1,56 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest do + alias OpenApiSpex.Schema + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "AccountCreateRequest", + description: "POST body for creating an account", + type: :object, + properties: %{ + reason: %Schema{ + type: :string, + description: + "Text that will be reviewed by moderators if registrations require manual approval" + }, + username: %Schema{type: :string, description: "The desired username for the account"}, + email: %Schema{ + type: :string, + description: + "The email address to be used for login. Required when `account_activation_required` is enabled.", + format: :email + }, + password: %Schema{type: :string, description: "The password to be used for login"}, + agreement: %Schema{ + type: :boolean, + description: + "Whether the user agrees to the local rules, terms, and policies. These should be presented to the user in order to allow them to consent before setting this parameter to TRUE." + }, + locale: %Schema{ + type: :string, + description: "The language of the confirmation email that will be sent" + }, + # Pleroma-specific properties: + fullname: %Schema{type: :string, description: "Full name"}, + bio: %Schema{type: :string, description: "Bio", default: ""}, + captcha_solution: %Schema{type: :string, description: "Provider-specific captcha solution"}, + captcha_token: %Schema{type: :string, description: "Provider-specific captcha token"}, + captcha_answer_data: %Schema{type: :string, description: "Provider-specific captcha data"}, + token: %Schema{ + type: :string, + description: "Invite token required when the registrations aren't public" + } + }, + required: [:username, :password, :agreement], + example: %{ + "username" => "cofe", + "email" => "cofe@example.com", + "password" => "secret", + "agreement" => "true", + "bio" => "☕️" + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/account_create_response.ex b/lib/pleroma/web/api_spec/schemas/account_create_response.ex new file mode 100644 index 000000000..f41a034c0 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/account_create_response.ex @@ -0,0 +1,29 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse do + alias OpenApiSpex.Schema + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "AccountCreateResponse", + description: "Response schema for an account", + type: :object, + properties: %{ + token_type: %Schema{type: :string}, + access_token: %Schema{type: :string}, + scope: %Schema{type: :array, items: %Schema{type: :string}}, + created_at: %Schema{type: :integer} + }, + example: %{ + "JSON" => %{ + "access_token" => "i9hAVVzGld86Pl5JtLtizKoXVvtTlSCJvwaugCxvZzk", + "created_at" => 1_585_918_714, + "scope" => ["read", "write", "follow", "push"], + "token_type" => "Bearer" + } + } + }) +end diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 7da1a11f6..eb082daf8 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -80,27 +80,33 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do plug(RateLimiter, [name: :app_account_creation] when action == :create) plug(:assign_account_by_id when action in @needs_account) + plug( + OpenApiSpex.Plug.CastAndValidate, + [render_error: Pleroma.Web.ApiSpec.RenderError] when action == :create + ) + action_fallback(Pleroma.Web.MastodonAPI.FallbackController) + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.AccountOperation + @doc "POST /api/v1/accounts" - def create( - %{assigns: %{app: app}} = conn, - %{"username" => nickname, "password" => _, "agreement" => true} = params - ) do + def create(%{assigns: %{app: app}, body_params: params} = conn, _params) do params = params |> Map.take([ - "email", - "captcha_solution", - "captcha_token", - "captcha_answer_data", - "token", - "password" + :email, + :bio, + :captcha_solution, + :captcha_token, + :captcha_answer_data, + :token, + :password, + :fullname ]) - |> Map.put("nickname", nickname) - |> Map.put("fullname", params["fullname"] || nickname) - |> Map.put("bio", params["bio"] || "") - |> Map.put("confirm", params["password"]) + |> Map.put(:nickname, params.username) + |> Map.put(:fullname, params.fullname || params.username) + |> Map.put(:bio, params.bio || "") + |> Map.put(:confirm, params.password) with :ok <- validate_email_param(params), {:ok, user} <- TwitterAPI.register_user(params, need_confirmation: true), @@ -124,7 +130,7 @@ def create(conn, _) do render_error(conn, :forbidden, "Invalid credentials") end - defp validate_email_param(%{"email" => _}), do: :ok + defp validate_email_param(%{:email => email}) when not is_nil(email), do: :ok defp validate_email_param(_) do case Pleroma.Config.get([:instance, :account_activation_required]) do diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index f9c0994da..37be48b5a 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -12,72 +12,56 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do require Pleroma.Constants def register_user(params, opts \\ []) do - token = params["token"] + params = + params + |> Map.take([ + :nickname, + :password, + :captcha_solution, + :captcha_token, + :captcha_answer_data, + :token, + :email + ]) + |> Map.put(:bio, User.parse_bio(params[:bio] || "")) + |> Map.put(:name, params.fullname) + |> Map.put(:password_confirmation, params[:confirm]) - params = %{ - nickname: params["nickname"], - name: params["fullname"], - bio: User.parse_bio(params["bio"]), - email: params["email"], - password: params["password"], - password_confirmation: params["confirm"], - captcha_solution: params["captcha_solution"], - captcha_token: params["captcha_token"], - captcha_answer_data: params["captcha_answer_data"] - } + case validate_captcha(params) do + :ok -> + if Pleroma.Config.get([:instance, :registrations_open]) do + create_user(params, opts) + else + create_user_with_invite(params, opts) + end - captcha_enabled = Pleroma.Config.get([Pleroma.Captcha, :enabled]) - # true if captcha is disabled or enabled and valid, false otherwise - captcha_ok = - if not captcha_enabled do - :ok - else - Pleroma.Captcha.validate( - params[:captcha_token], - params[:captcha_solution], - params[:captcha_answer_data] - ) - end - - # Captcha invalid - if captcha_ok != :ok do - {:error, error} = captcha_ok - # I have no idea how this error handling works - {:error, %{error: Jason.encode!(%{captcha: [error]})}} - else - registration_process( - params, - %{ - registrations_open: Pleroma.Config.get([:instance, :registrations_open]), - token: token - }, - opts - ) + {:error, error} -> + # I have no idea how this error handling works + {:error, %{error: Jason.encode!(%{captcha: [error]})}} end end - defp registration_process(params, %{registrations_open: true}, opts) do - create_user(params, opts) + defp validate_captcha(params) do + if Pleroma.Config.get([Pleroma.Captcha, :enabled]) do + Pleroma.Captcha.validate( + params.captcha_token, + params.captcha_solution, + params.captcha_answer_data + ) + else + :ok + end end - defp registration_process(params, %{token: token}, opts) do - invite = - unless is_nil(token) do - Repo.get_by(UserInviteToken, %{token: token}) - end - - valid_invite? = invite && UserInviteToken.valid_invite?(invite) - - case invite do - nil -> - {:error, "Invalid token"} - - invite when valid_invite? -> - UserInviteToken.update_usage!(invite) - create_user(params, opts) - - _ -> - {:error, "Expired token"} + defp create_user_with_invite(params, opts) do + with %{token: token} when is_binary(token) <- params, + %UserInviteToken{} = invite <- Repo.get_by(UserInviteToken, %{token: token}), + true <- UserInviteToken.valid_invite?(invite) do + UserInviteToken.update_usage!(invite) + create_user(params, opts) + else + nil -> {:error, "Invalid token"} + _ -> {:error, "Expired token"} end end diff --git a/test/web/api_spec/account_operation_test.exs b/test/web/api_spec/account_operation_test.exs new file mode 100644 index 000000000..4f8d04698 --- /dev/null +++ b/test/web/api_spec/account_operation_test.exs @@ -0,0 +1,48 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.AccountOperationTest do + use Pleroma.Web.ConnCase, async: true + + alias Pleroma.Web.ApiSpec + alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest + alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse + + import OpenApiSpex.TestAssertions + import Pleroma.Factory + + test "AccountCreateRequest example matches schema" do + api_spec = ApiSpec.spec() + schema = AccountCreateRequest.schema() + assert_schema(schema.example, "AccountCreateRequest", api_spec) + end + + test "AccountCreateResponse example matches schema" do + api_spec = ApiSpec.spec() + schema = AccountCreateResponse.schema() + assert_schema(schema.example, "AccountCreateResponse", api_spec) + end + + test "AccountController produces a AccountCreateResponse", %{conn: conn} do + api_spec = ApiSpec.spec() + app_token = insert(:oauth_token, user: nil) + + json = + conn + |> put_req_header("authorization", "Bearer " <> app_token.token) + |> put_req_header("content-type", "application/json") + |> post( + "/api/v1/accounts", + %{ + username: "foo", + email: "bar@example.org", + password: "qwerty", + agreement: true + } + ) + |> json_response(200) + + assert_schema(json, "AccountCreateResponse", api_spec) + end +end diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index a450a732c..6fe46af3c 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -830,6 +830,7 @@ test "Account registration via Application", %{conn: conn} do conn = build_conn() + |> put_req_header("content-type", "multipart/form-data") |> put_req_header("authorization", "Bearer " <> token) |> post("/api/v1/accounts", %{ username: "lain", @@ -858,11 +859,12 @@ test "returns error when user already registred", %{conn: conn, valid_params: va _user = insert(:user, email: "lain@example.org") app_token = insert(:oauth_token, user: nil) - conn = + res = conn |> put_req_header("authorization", "Bearer " <> app_token.token) + |> put_req_header("content-type", "application/json") + |> post("/api/v1/accounts", valid_params) - res = post(conn, "/api/v1/accounts", valid_params) assert json_response(res, 400) == %{"error" => "{\"email\":[\"has already been taken\"]}"} end @@ -872,7 +874,10 @@ test "returns bad_request if missing required params", %{ } do app_token = insert(:oauth_token, user: nil) - conn = put_req_header(conn, "authorization", "Bearer " <> app_token.token) + conn = + conn + |> put_req_header("authorization", "Bearer " <> app_token.token) + |> put_req_header("content-type", "application/json") res = post(conn, "/api/v1/accounts", valid_params) assert json_response(res, 200) @@ -897,7 +902,11 @@ test "returns bad_request if missing email params when :account_activation_requi Pleroma.Config.put([:instance, :account_activation_required], true) app_token = insert(:oauth_token, user: nil) - conn = put_req_header(conn, "authorization", "Bearer " <> app_token.token) + + conn = + conn + |> put_req_header("authorization", "Bearer " <> app_token.token) + |> put_req_header("content-type", "application/json") res = conn @@ -920,6 +929,7 @@ test "allow registration without an email", %{conn: conn, valid_params: valid_pa res = conn + |> put_req_header("content-type", "application/json") |> Map.put(:remote_ip, {127, 0, 0, 7}) |> post("/api/v1/accounts", Map.delete(valid_params, :email)) @@ -932,6 +942,7 @@ test "allow registration with an empty email", %{conn: conn, valid_params: valid res = conn + |> put_req_header("content-type", "application/json") |> Map.put(:remote_ip, {127, 0, 0, 8}) |> post("/api/v1/accounts", Map.put(valid_params, :email, "")) @@ -939,9 +950,12 @@ test "allow registration with an empty email", %{conn: conn, valid_params: valid end test "returns forbidden if token is invalid", %{conn: conn, valid_params: valid_params} do - conn = put_req_header(conn, "authorization", "Bearer " <> "invalid-token") + res = + conn + |> put_req_header("authorization", "Bearer " <> "invalid-token") + |> put_req_header("content-type", "multipart/form-data") + |> post("/api/v1/accounts", valid_params) - res = post(conn, "/api/v1/accounts", valid_params) assert json_response(res, 403) == %{"error" => "Invalid credentials"} end end @@ -956,10 +970,12 @@ test "respects rate limit setting", %{conn: conn} do conn |> put_req_header("authorization", "Bearer " <> app_token.token) |> Map.put(:remote_ip, {15, 15, 15, 15}) + |> put_req_header("content-type", "multipart/form-data") for i <- 1..2 do conn = - post(conn, "/api/v1/accounts", %{ + conn + |> post("/api/v1/accounts", %{ username: "#{i}lain", email: "#{i}lain@example.org", password: "PlzDontHackLain", diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index f6e13b661..7926a0757 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -18,11 +18,11 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do test "it registers a new user and returns the user." do data = %{ - "nickname" => "lain", - "email" => "lain@wired.jp", - "fullname" => "lain iwakura", - "password" => "bear", - "confirm" => "bear" + :nickname => "lain", + :email => "lain@wired.jp", + :fullname => "lain iwakura", + :password => "bear", + :confirm => "bear" } {:ok, user} = TwitterAPI.register_user(data) @@ -35,12 +35,12 @@ test "it registers a new user and returns the user." do test "it registers a new user with empty string in bio and returns the user." do data = %{ - "nickname" => "lain", - "email" => "lain@wired.jp", - "fullname" => "lain iwakura", - "bio" => "", - "password" => "bear", - "confirm" => "bear" + :nickname => "lain", + :email => "lain@wired.jp", + :fullname => "lain iwakura", + :bio => "", + :password => "bear", + :confirm => "bear" } {:ok, user} = TwitterAPI.register_user(data) @@ -60,12 +60,12 @@ test "it sends confirmation email if :account_activation_required is specified i end data = %{ - "nickname" => "lain", - "email" => "lain@wired.jp", - "fullname" => "lain iwakura", - "bio" => "", - "password" => "bear", - "confirm" => "bear" + :nickname => "lain", + :email => "lain@wired.jp", + :fullname => "lain iwakura", + :bio => "", + :password => "bear", + :confirm => "bear" } {:ok, user} = TwitterAPI.register_user(data) @@ -87,23 +87,23 @@ test "it sends confirmation email if :account_activation_required is specified i test "it registers a new user and parses mentions in the bio" do data1 = %{ - "nickname" => "john", - "email" => "john@gmail.com", - "fullname" => "John Doe", - "bio" => "test", - "password" => "bear", - "confirm" => "bear" + :nickname => "john", + :email => "john@gmail.com", + :fullname => "John Doe", + :bio => "test", + :password => "bear", + :confirm => "bear" } {:ok, user1} = TwitterAPI.register_user(data1) data2 = %{ - "nickname" => "lain", - "email" => "lain@wired.jp", - "fullname" => "lain iwakura", - "bio" => "@john test", - "password" => "bear", - "confirm" => "bear" + :nickname => "lain", + :email => "lain@wired.jp", + :fullname => "lain iwakura", + :bio => "@john test", + :password => "bear", + :confirm => "bear" } {:ok, user2} = TwitterAPI.register_user(data2) @@ -123,13 +123,13 @@ test "returns user on success" do {:ok, invite} = UserInviteToken.create_invite() data = %{ - "nickname" => "vinny", - "email" => "pasta@pizza.vs", - "fullname" => "Vinny Vinesauce", - "bio" => "streamer", - "password" => "hiptofbees", - "confirm" => "hiptofbees", - "token" => invite.token + :nickname => "vinny", + :email => "pasta@pizza.vs", + :fullname => "Vinny Vinesauce", + :bio => "streamer", + :password => "hiptofbees", + :confirm => "hiptofbees", + :token => invite.token } {:ok, user} = TwitterAPI.register_user(data) @@ -145,13 +145,13 @@ test "returns user on success" do test "returns error on invalid token" do data = %{ - "nickname" => "GrimReaper", - "email" => "death@reapers.afterlife", - "fullname" => "Reaper Grim", - "bio" => "Your time has come", - "password" => "scythe", - "confirm" => "scythe", - "token" => "DudeLetMeInImAFairy" + :nickname => "GrimReaper", + :email => "death@reapers.afterlife", + :fullname => "Reaper Grim", + :bio => "Your time has come", + :password => "scythe", + :confirm => "scythe", + :token => "DudeLetMeInImAFairy" } {:error, msg} = TwitterAPI.register_user(data) @@ -165,13 +165,13 @@ test "returns error on expired token" do UserInviteToken.update_invite!(invite, used: true) data = %{ - "nickname" => "GrimReaper", - "email" => "death@reapers.afterlife", - "fullname" => "Reaper Grim", - "bio" => "Your time has come", - "password" => "scythe", - "confirm" => "scythe", - "token" => invite.token + :nickname => "GrimReaper", + :email => "death@reapers.afterlife", + :fullname => "Reaper Grim", + :bio => "Your time has come", + :password => "scythe", + :confirm => "scythe", + :token => invite.token } {:error, msg} = TwitterAPI.register_user(data) @@ -186,16 +186,16 @@ test "returns error on expired token" do setup do data = %{ - "nickname" => "vinny", - "email" => "pasta@pizza.vs", - "fullname" => "Vinny Vinesauce", - "bio" => "streamer", - "password" => "hiptofbees", - "confirm" => "hiptofbees" + :nickname => "vinny", + :email => "pasta@pizza.vs", + :fullname => "Vinny Vinesauce", + :bio => "streamer", + :password => "hiptofbees", + :confirm => "hiptofbees" } check_fn = fn invite -> - data = Map.put(data, "token", invite.token) + data = Map.put(data, :token, invite.token) {:ok, user} = TwitterAPI.register_user(data) fetched_user = User.get_cached_by_nickname("vinny") @@ -250,13 +250,13 @@ test "returns user on success, after him registration fails" do UserInviteToken.update_invite!(invite, uses: 99) data = %{ - "nickname" => "vinny", - "email" => "pasta@pizza.vs", - "fullname" => "Vinny Vinesauce", - "bio" => "streamer", - "password" => "hiptofbees", - "confirm" => "hiptofbees", - "token" => invite.token + :nickname => "vinny", + :email => "pasta@pizza.vs", + :fullname => "Vinny Vinesauce", + :bio => "streamer", + :password => "hiptofbees", + :confirm => "hiptofbees", + :token => invite.token } {:ok, user} = TwitterAPI.register_user(data) @@ -269,13 +269,13 @@ test "returns user on success, after him registration fails" do AccountView.render("show.json", %{user: fetched_user}) data = %{ - "nickname" => "GrimReaper", - "email" => "death@reapers.afterlife", - "fullname" => "Reaper Grim", - "bio" => "Your time has come", - "password" => "scythe", - "confirm" => "scythe", - "token" => invite.token + :nickname => "GrimReaper", + :email => "death@reapers.afterlife", + :fullname => "Reaper Grim", + :bio => "Your time has come", + :password => "scythe", + :confirm => "scythe", + :token => invite.token } {:error, msg} = TwitterAPI.register_user(data) @@ -292,13 +292,13 @@ test "returns user on success" do {:ok, invite} = UserInviteToken.create_invite(%{expires_at: Date.utc_today(), max_use: 100}) data = %{ - "nickname" => "vinny", - "email" => "pasta@pizza.vs", - "fullname" => "Vinny Vinesauce", - "bio" => "streamer", - "password" => "hiptofbees", - "confirm" => "hiptofbees", - "token" => invite.token + :nickname => "vinny", + :email => "pasta@pizza.vs", + :fullname => "Vinny Vinesauce", + :bio => "streamer", + :password => "hiptofbees", + :confirm => "hiptofbees", + :token => invite.token } {:ok, user} = TwitterAPI.register_user(data) @@ -317,13 +317,13 @@ test "error after max uses" do UserInviteToken.update_invite!(invite, uses: 99) data = %{ - "nickname" => "vinny", - "email" => "pasta@pizza.vs", - "fullname" => "Vinny Vinesauce", - "bio" => "streamer", - "password" => "hiptofbees", - "confirm" => "hiptofbees", - "token" => invite.token + :nickname => "vinny", + :email => "pasta@pizza.vs", + :fullname => "Vinny Vinesauce", + :bio => "streamer", + :password => "hiptofbees", + :confirm => "hiptofbees", + :token => invite.token } {:ok, user} = TwitterAPI.register_user(data) @@ -335,13 +335,13 @@ test "error after max uses" do AccountView.render("show.json", %{user: fetched_user}) data = %{ - "nickname" => "GrimReaper", - "email" => "death@reapers.afterlife", - "fullname" => "Reaper Grim", - "bio" => "Your time has come", - "password" => "scythe", - "confirm" => "scythe", - "token" => invite.token + :nickname => "GrimReaper", + :email => "death@reapers.afterlife", + :fullname => "Reaper Grim", + :bio => "Your time has come", + :password => "scythe", + :confirm => "scythe", + :token => invite.token } {:error, msg} = TwitterAPI.register_user(data) @@ -355,13 +355,13 @@ test "returns error on overdue date" do UserInviteToken.create_invite(%{expires_at: Date.add(Date.utc_today(), -1), max_use: 100}) data = %{ - "nickname" => "GrimReaper", - "email" => "death@reapers.afterlife", - "fullname" => "Reaper Grim", - "bio" => "Your time has come", - "password" => "scythe", - "confirm" => "scythe", - "token" => invite.token + :nickname => "GrimReaper", + :email => "death@reapers.afterlife", + :fullname => "Reaper Grim", + :bio => "Your time has come", + :password => "scythe", + :confirm => "scythe", + :token => invite.token } {:error, msg} = TwitterAPI.register_user(data) @@ -377,13 +377,13 @@ test "returns error on with overdue date and after max" do UserInviteToken.update_invite!(invite, uses: 100) data = %{ - "nickname" => "GrimReaper", - "email" => "death@reapers.afterlife", - "fullname" => "Reaper Grim", - "bio" => "Your time has come", - "password" => "scythe", - "confirm" => "scythe", - "token" => invite.token + :nickname => "GrimReaper", + :email => "death@reapers.afterlife", + :fullname => "Reaper Grim", + :bio => "Your time has come", + :password => "scythe", + :confirm => "scythe", + :token => invite.token } {:error, msg} = TwitterAPI.register_user(data) @@ -395,11 +395,11 @@ test "returns error on with overdue date and after max" do test "it returns the error on registration problems" do data = %{ - "nickname" => "lain", - "email" => "lain@wired.jp", - "fullname" => "lain iwakura", - "bio" => "close the world.", - "password" => "bear" + :nickname => "lain", + :email => "lain@wired.jp", + :fullname => "lain iwakura", + :bio => "close the world.", + :password => "bear" } {:error, error_object} = TwitterAPI.register_user(data) From f80116125f928de36c93627bbdf5f6578396f53b Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Mon, 6 Apr 2020 00:15:37 +0400 Subject: [PATCH 237/581] Add spec for AccountController.verify_credentials --- lib/pleroma/web/api_spec.ex | 2 +- .../api_spec/operations/account_operation.ex | 14 +- .../web/api_spec/operations/app_operation.ex | 6 +- lib/pleroma/web/api_spec/render_error.ex | 2 +- lib/pleroma/web/api_spec/schemas/account.ex | 181 ++++++++++++++++++ .../web/api_spec/schemas/account_emoji.ex | 31 +++ .../web/api_spec/schemas/account_field.ex | 28 +++ test/web/api_spec/account_operation_test.exs | 7 + 8 files changed, 262 insertions(+), 9 deletions(-) create mode 100644 lib/pleroma/web/api_spec/schemas/account.ex create mode 100644 lib/pleroma/web/api_spec/schemas/account_emoji.ex create mode 100644 lib/pleroma/web/api_spec/schemas/account_field.ex diff --git a/lib/pleroma/web/api_spec.ex b/lib/pleroma/web/api_spec.ex index 41e48a085..c85fe30d1 100644 --- a/lib/pleroma/web/api_spec.ex +++ b/lib/pleroma/web/api_spec.ex @@ -31,7 +31,7 @@ def spec do password: %OpenApiSpex.OAuthFlow{ authorizationUrl: "/oauth/authorize", tokenUrl: "/oauth/token", - scopes: %{"read" => "read"} + scopes: %{"read" => "read", "write" => "write"} } } } diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 9085f1af1..3d2270c29 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -4,9 +4,10 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do alias OpenApiSpex.Operation + alias Pleroma.Web.ApiSpec.Helpers + alias Pleroma.Web.ApiSpec.Schemas.Account alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse - alias Pleroma.Web.ApiSpec.Helpers @spec open_api_operation(atom) :: Operation.t() def open_api_operation(action) do @@ -30,7 +31,16 @@ def create_operation do end def verify_credentials_operation do - :ok + %Operation{ + tags: ["accounts"], + description: "Test to make sure that the user token works.", + summary: "Verify account credentials", + operationId: "AccountController.verify_credentials", + security: [%{"oAuth" => ["read:accounts"]}], + responses: %{ + 200 => Operation.response("Account", "application/json", Account) + } + } end def update_credentials_operation do diff --git a/lib/pleroma/web/api_spec/operations/app_operation.ex b/lib/pleroma/web/api_spec/operations/app_operation.ex index 26d8dbd42..935215c64 100644 --- a/lib/pleroma/web/api_spec/operations/app_operation.ex +++ b/lib/pleroma/web/api_spec/operations/app_operation.ex @@ -51,11 +51,7 @@ def verify_credentials_operation do summary: "Verify your app works", description: "Confirm that the app's OAuth2 credentials work.", operationId: "AppController.verify_credentials", - security: [ - %{ - "oAuth" => ["read"] - } - ], + security: [%{"oAuth" => ["read"]}], responses: %{ 200 => Operation.response("App", "application/json", %Schema{ diff --git a/lib/pleroma/web/api_spec/render_error.ex b/lib/pleroma/web/api_spec/render_error.ex index e063d115b..9184c43b6 100644 --- a/lib/pleroma/web/api_spec/render_error.ex +++ b/lib/pleroma/web/api_spec/render_error.ex @@ -5,8 +5,8 @@ defmodule Pleroma.Web.ApiSpec.RenderError do @behaviour Plug - alias Plug.Conn alias OpenApiSpex.Plug.JsonRenderError + alias Plug.Conn @impl Plug def init(opts), do: opts diff --git a/lib/pleroma/web/api_spec/schemas/account.ex b/lib/pleroma/web/api_spec/schemas/account.ex new file mode 100644 index 000000000..59c4ac4a4 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/account.ex @@ -0,0 +1,181 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.Account do + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.AccountEmoji + alias Pleroma.Web.ApiSpec.Schemas.AccountField + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "Account", + description: "Response schema for an account", + type: :object, + properties: %{ + acct: %Schema{type: :string}, + avatar_static: %Schema{type: :string}, + avatar: %Schema{type: :string}, + bot: %Schema{type: :boolean}, + created_at: %Schema{type: :string, format: "date-time"}, + display_name: %Schema{type: :string}, + emojis: %Schema{type: :array, items: AccountEmoji}, + fields: %Schema{type: :array, items: AccountField}, + follow_requests_count: %Schema{type: :integer}, + followers_count: %Schema{type: :integer}, + following_count: %Schema{type: :integer}, + header_static: %Schema{type: :string}, + header: %Schema{type: :string}, + id: %Schema{type: :string}, + locked: %Schema{type: :boolean}, + note: %Schema{type: :string}, + statuses_count: %Schema{type: :integer}, + url: %Schema{type: :string}, + username: %Schema{type: :string}, + pleroma: %Schema{ + type: :object, + properties: %{ + allow_following_move: %Schema{type: :boolean}, + background_image: %Schema{type: :boolean, nullable: true}, + chat_token: %Schema{type: :string}, + confirmation_pending: %Schema{type: :boolean}, + hide_favorites: %Schema{type: :boolean}, + hide_followers_count: %Schema{type: :boolean}, + hide_followers: %Schema{type: :boolean}, + hide_follows_count: %Schema{type: :boolean}, + hide_follows: %Schema{type: :boolean}, + is_admin: %Schema{type: :boolean}, + is_moderator: %Schema{type: :boolean}, + skip_thread_containment: %Schema{type: :boolean}, + tags: %Schema{type: :array, items: %Schema{type: :string}}, + unread_conversation_count: %Schema{type: :integer}, + notification_settings: %Schema{ + type: :object, + properties: %{ + followers: %Schema{type: :boolean}, + follows: %Schema{type: :boolean}, + non_followers: %Schema{type: :boolean}, + non_follows: %Schema{type: :boolean}, + privacy_option: %Schema{type: :boolean} + } + }, + relationship: %Schema{ + type: :object, + properties: %{ + blocked_by: %Schema{type: :boolean}, + blocking: %Schema{type: :boolean}, + domain_blocking: %Schema{type: :boolean}, + endorsed: %Schema{type: :boolean}, + followed_by: %Schema{type: :boolean}, + following: %Schema{type: :boolean}, + id: %Schema{type: :string}, + muting: %Schema{type: :boolean}, + muting_notifications: %Schema{type: :boolean}, + requested: %Schema{type: :boolean}, + showing_reblogs: %Schema{type: :boolean}, + subscribing: %Schema{type: :boolean} + } + }, + settings_store: %Schema{ + type: :object + } + } + }, + source: %Schema{ + type: :object, + properties: %{ + fields: %Schema{type: :array, items: AccountField}, + note: %Schema{type: :string}, + privacy: %Schema{type: :string}, + sensitive: %Schema{type: :boolean}, + pleroma: %Schema{ + type: :object, + properties: %{ + actor_type: %Schema{type: :string}, + discoverable: %Schema{type: :boolean}, + no_rich_text: %Schema{type: :boolean}, + show_role: %Schema{type: :boolean} + } + } + } + } + }, + example: %{ + "JSON" => %{ + "acct" => "foobar", + "avatar" => "https://mypleroma.com/images/avi.png", + "avatar_static" => "https://mypleroma.com/images/avi.png", + "bot" => false, + "created_at" => "2020-03-24T13:05:58.000Z", + "display_name" => "foobar", + "emojis" => [], + "fields" => [], + "follow_requests_count" => 0, + "followers_count" => 0, + "following_count" => 1, + "header" => "https://mypleroma.com/images/banner.png", + "header_static" => "https://mypleroma.com/images/banner.png", + "id" => "9tKi3esbG7OQgZ2920", + "locked" => false, + "note" => "cofe", + "pleroma" => %{ + "allow_following_move" => true, + "background_image" => nil, + "confirmation_pending" => true, + "hide_favorites" => true, + "hide_followers" => false, + "hide_followers_count" => false, + "hide_follows" => false, + "hide_follows_count" => false, + "is_admin" => false, + "is_moderator" => false, + "skip_thread_containment" => false, + "chat_token" => + "SFMyNTY.g3QAAAACZAAEZGF0YW0AAAASOXRLaTNlc2JHN09RZ1oyOTIwZAAGc2lnbmVkbgYARNplS3EB.Mb_Iaqew2bN1I1o79B_iP7encmVCpTKC4OtHZRxdjKc", + "unread_conversation_count" => 0, + "tags" => [], + "notification_settings" => %{ + "followers" => true, + "follows" => true, + "non_followers" => true, + "non_follows" => true, + "privacy_option" => false + }, + "relationship" => %{ + "blocked_by" => false, + "blocking" => false, + "domain_blocking" => false, + "endorsed" => false, + "followed_by" => false, + "following" => false, + "id" => "9tKi3esbG7OQgZ2920", + "muting" => false, + "muting_notifications" => false, + "requested" => false, + "showing_reblogs" => true, + "subscribing" => false + }, + "settings_store" => %{ + "pleroma-fe" => %{} + } + }, + "source" => %{ + "fields" => [], + "note" => "foobar", + "pleroma" => %{ + "actor_type" => "Person", + "discoverable" => false, + "no_rich_text" => false, + "show_role" => true + }, + "privacy" => "public", + "sensitive" => false + }, + "statuses_count" => 0, + "url" => "https://mypleroma.com/users/foobar", + "username" => "foobar" + } + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/account_emoji.ex b/lib/pleroma/web/api_spec/schemas/account_emoji.ex new file mode 100644 index 000000000..403b13b15 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/account_emoji.ex @@ -0,0 +1,31 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.AccountEmoji do + alias OpenApiSpex.Schema + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "AccountEmoji", + description: "Response schema for account custom fields", + type: :object, + properties: %{ + shortcode: %Schema{type: :string}, + url: %Schema{type: :string}, + static_url: %Schema{type: :string}, + visible_in_picker: %Schema{type: :boolean} + }, + example: %{ + "JSON" => %{ + "shortcode" => "fatyoshi", + "url" => + "https://files.mastodon.social/custom_emojis/images/000/023/920/original/e57ecb623faa0dc9.png", + "static_url" => + "https://files.mastodon.social/custom_emojis/images/000/023/920/static/e57ecb623faa0dc9.png", + "visible_in_picker" => true + } + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/account_field.ex b/lib/pleroma/web/api_spec/schemas/account_field.ex new file mode 100644 index 000000000..8906d812d --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/account_field.ex @@ -0,0 +1,28 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.AccountField do + alias OpenApiSpex.Schema + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "AccountField", + description: "Response schema for account custom fields", + type: :object, + properties: %{ + name: %Schema{type: :string}, + value: %Schema{type: :string}, + verified_at: %Schema{type: :string, format: "date-time", nullable: true} + }, + example: %{ + "JSON" => %{ + "name" => "Website", + "value" => + "https://pleroma.com", + "verified_at" => "2019-08-29T04:14:55.571+00:00" + } + } + }) +end diff --git a/test/web/api_spec/account_operation_test.exs b/test/web/api_spec/account_operation_test.exs index 4f8d04698..37501b8cc 100644 --- a/test/web/api_spec/account_operation_test.exs +++ b/test/web/api_spec/account_operation_test.exs @@ -6,12 +6,19 @@ defmodule Pleroma.Web.ApiSpec.AccountOperationTest do use Pleroma.Web.ConnCase, async: true alias Pleroma.Web.ApiSpec + alias Pleroma.Web.ApiSpec.Schemas.Account alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse import OpenApiSpex.TestAssertions import Pleroma.Factory + test "Account example matches schema" do + api_spec = ApiSpec.spec() + schema = Account.schema() + assert_schema(schema.example, "Account", api_spec) + end + test "AccountCreateRequest example matches schema" do api_spec = ApiSpec.spec() schema = AccountCreateRequest.schema() From 260cbddc943e53a85762e56852de65d2b900cc04 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 7 Apr 2020 14:53:12 +0400 Subject: [PATCH 238/581] Add spec for AccountController.update_credentials --- lib/pleroma/web/api_spec/helpers.ex | 2 +- .../api_spec/operations/account_operation.ex | 14 +- .../schemas/account_field_attribute.ex | 26 ++++ .../account_update_credentials_request.ex | 123 ++++++++++++++++++ .../controllers/account_controller.ex | 41 ++++-- test/support/conn_case.ex | 5 + test/web/api_spec/account_operation_test.exs | 32 +++++ .../update_credentials_test.exs | 2 + 8 files changed, 229 insertions(+), 16 deletions(-) create mode 100644 lib/pleroma/web/api_spec/schemas/account_field_attribute.ex create mode 100644 lib/pleroma/web/api_spec/schemas/account_update_credentials_request.ex diff --git a/lib/pleroma/web/api_spec/helpers.ex b/lib/pleroma/web/api_spec/helpers.ex index 35cf4c0d8..7348dcbee 100644 --- a/lib/pleroma/web/api_spec/helpers.ex +++ b/lib/pleroma/web/api_spec/helpers.ex @@ -4,7 +4,7 @@ defmodule Pleroma.Web.ApiSpec.Helpers do def request_body(description, schema_ref, opts \\ []) do - media_types = ["application/json", "multipart/form-data"] + media_types = ["application/json", "multipart/form-data", "application/x-www-form-urlencoded"] content = media_types diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 3d2270c29..d7b56cc2b 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -8,6 +8,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do alias Pleroma.Web.ApiSpec.Schemas.Account alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse + alias Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest @spec open_api_operation(atom) :: Operation.t() def open_api_operation(action) do @@ -44,7 +45,18 @@ def verify_credentials_operation do end def update_credentials_operation do - :ok + %Operation{ + tags: ["accounts"], + summary: "Update account credentials", + description: "Update the user's display and preferences.", + operationId: "AccountController.update_credentials", + security: [%{"oAuth" => ["write:accounts"]}], + requestBody: + Helpers.request_body("Parameters", AccountUpdateCredentialsRequest, required: true), + responses: %{ + 200 => Operation.response("Account", "application/json", Account) + } + } end def relationships_operation do diff --git a/lib/pleroma/web/api_spec/schemas/account_field_attribute.ex b/lib/pleroma/web/api_spec/schemas/account_field_attribute.ex new file mode 100644 index 000000000..fbbdf95f5 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/account_field_attribute.ex @@ -0,0 +1,26 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.AccountAttributeField do + alias OpenApiSpex.Schema + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "AccountAttributeField", + description: "Request schema for account custom fields", + type: :object, + properties: %{ + name: %Schema{type: :string}, + value: %Schema{type: :string} + }, + required: [:name, :value], + example: %{ + "JSON" => %{ + "name" => "Website", + "value" => "https://pleroma.com" + } + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/account_update_credentials_request.ex b/lib/pleroma/web/api_spec/schemas/account_update_credentials_request.ex new file mode 100644 index 000000000..a50bce5ed --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/account_update_credentials_request.ex @@ -0,0 +1,123 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest do + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.AccountAttributeField + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "AccountUpdateCredentialsRequest", + description: "POST body for creating an account", + type: :object, + properties: %{ + bot: %Schema{ + type: :boolean, + description: "Whether the account has a bot flag." + }, + display_name: %Schema{ + type: :string, + description: "The display name to use for the profile." + }, + note: %Schema{type: :string, description: "The account bio."}, + avatar: %Schema{ + type: :string, + description: "Avatar image encoded using multipart/form-data", + format: :binary + }, + header: %Schema{ + type: :string, + description: "Header image encoded using multipart/form-data", + format: :binary + }, + locked: %Schema{ + type: :boolean, + description: "Whether manual approval of follow requests is required." + }, + fields_attributes: %Schema{ + oneOf: [%Schema{type: :array, items: AccountAttributeField}, %Schema{type: :object}] + }, + # NOTE: `source` field is not supported + # + # source: %Schema{ + # type: :object, + # properties: %{ + # privacy: %Schema{type: :string}, + # sensitive: %Schema{type: :boolean}, + # language: %Schema{type: :string} + # } + # }, + + # Pleroma-specific fields + no_rich_text: %Schema{ + type: :boolean, + description: "html tags are stripped from all statuses requested from the API" + }, + hide_followers: %Schema{type: :boolean, description: "user's followers will be hidden"}, + hide_follows: %Schema{type: :boolean, description: "user's follows will be hidden"}, + hide_followers_count: %Schema{ + type: :boolean, + description: "user's follower count will be hidden" + }, + hide_follows_count: %Schema{ + type: :boolean, + description: "user's follow count will be hidden" + }, + hide_favorites: %Schema{ + type: :boolean, + description: "user's favorites timeline will be hidden" + }, + show_role: %Schema{ + type: :boolean, + description: "user's role (e.g admin, moderator) will be exposed to anyone in the + API" + }, + default_scope: %Schema{ + type: :string, + description: "The scope returned under privacy key in Source subentity" + }, + pleroma_settings_store: %Schema{ + type: :object, + description: "Opaque user settings to be saved on the backend." + }, + skip_thread_containment: %Schema{ + type: :boolean, + description: "Skip filtering out broken threads" + }, + allow_following_move: %Schema{ + type: :boolean, + description: "Allows automatically follow moved following accounts" + }, + pleroma_background_image: %Schema{ + type: :string, + description: "Sets the background image of the user.", + format: :binary + }, + discoverable: %Schema{ + type: :boolean, + description: "Discovery of this account in search results and other services is allowed." + }, + actor_type: %Schema{type: :string, description: "the type of this account."} + }, + example: %{ + bot: false, + display_name: "cofe", + note: "foobar", + fields_attributes: [%{name: "foo", value: "bar"}], + no_rich_text: false, + hide_followers: true, + hide_follows: false, + hide_followers_count: false, + hide_follows_count: false, + hide_favorites: false, + show_role: false, + default_scope: "private", + pleroma_settings_store: %{"pleroma-fe" => %{"key" => "val"}}, + skip_thread_containment: false, + allow_following_move: false, + discoverable: false, + actor_type: "Person" + } + }) +end diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index eb082daf8..9c986b3b2 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -82,7 +82,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do plug( OpenApiSpex.Plug.CastAndValidate, - [render_error: Pleroma.Web.ApiSpec.RenderError] when action == :create + [render_error: Pleroma.Web.ApiSpec.RenderError] + when action in [:create, :verify_credentials, :update_credentials] ) action_fallback(Pleroma.Web.MastodonAPI.FallbackController) @@ -152,9 +153,15 @@ def verify_credentials(%{assigns: %{user: user}} = conn, _) do end @doc "PATCH /api/v1/accounts/update_credentials" - def update_credentials(%{assigns: %{user: original_user}} = conn, params) do + def update_credentials(%{assigns: %{user: original_user}, body_params: params} = conn, _params) do user = original_user + params = + params + |> Map.from_struct() + |> Enum.filter(fn {_, value} -> not is_nil(value) end) + |> Enum.into(%{}) + user_params = [ :no_rich_text, @@ -170,22 +177,22 @@ def update_credentials(%{assigns: %{user: original_user}} = conn, params) do :discoverable ] |> Enum.reduce(%{}, fn key, acc -> - add_if_present(acc, params, to_string(key), key, &{:ok, truthy_param?(&1)}) + add_if_present(acc, params, key, key, &{:ok, truthy_param?(&1)}) end) - |> add_if_present(params, "display_name", :name) - |> add_if_present(params, "note", :bio) - |> add_if_present(params, "avatar", :avatar) - |> add_if_present(params, "header", :banner) - |> add_if_present(params, "pleroma_background_image", :background) + |> add_if_present(params, :display_name, :name) + |> add_if_present(params, :note, :bio) + |> add_if_present(params, :avatar, :avatar) + |> add_if_present(params, :header, :banner) + |> add_if_present(params, :pleroma_background_image, :background) |> add_if_present( params, - "fields_attributes", + :fields_attributes, :raw_fields, &{:ok, normalize_fields_attributes(&1)} ) - |> add_if_present(params, "pleroma_settings_store", :pleroma_settings_store) - |> add_if_present(params, "default_scope", :default_scope) - |> add_if_present(params, "actor_type", :actor_type) + |> add_if_present(params, :pleroma_settings_store, :pleroma_settings_store) + |> add_if_present(params, :default_scope, :default_scope) + |> add_if_present(params, :actor_type, :actor_type) changeset = User.update_changeset(user, user_params) @@ -200,7 +207,7 @@ def update_credentials(%{assigns: %{user: original_user}} = conn, params) do defp add_if_present(map, params, params_field, map_field, value_function \\ &{:ok, &1}) do with true <- Map.has_key?(params, params_field), - {:ok, new_value} <- value_function.(params[params_field]) do + {:ok, new_value} <- value_function.(Map.get(params, params_field)) do Map.put(map, map_field, new_value) else _ -> map @@ -211,7 +218,13 @@ defp normalize_fields_attributes(fields) do if Enum.all?(fields, &is_tuple/1) do Enum.map(fields, fn {_, v} -> v end) else - fields + Enum.map(fields, fn + %Pleroma.Web.ApiSpec.Schemas.AccountAttributeField{} = field -> + %{"name" => field.name, "value" => field.value} + + field -> + field + end) end end diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex index 064874201..36ce372c2 100644 --- a/test/support/conn_case.ex +++ b/test/support/conn_case.ex @@ -51,6 +51,11 @@ defp oauth_access(scopes, opts \\ []) do %{user: user, token: token, conn: conn} end + defp request_content_type(%{conn: conn}) do + conn = put_req_header(conn, "content-type", "multipart/form-data") + [conn: conn] + end + defp ensure_federating_or_authenticated(conn, url, user) do initial_setting = Config.get([:instance, :federating]) on_exit(fn -> Config.put([:instance, :federating], initial_setting) end) diff --git a/test/web/api_spec/account_operation_test.exs b/test/web/api_spec/account_operation_test.exs index 37501b8cc..a54059074 100644 --- a/test/web/api_spec/account_operation_test.exs +++ b/test/web/api_spec/account_operation_test.exs @@ -9,6 +9,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperationTest do alias Pleroma.Web.ApiSpec.Schemas.Account alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse + alias Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest import OpenApiSpex.TestAssertions import Pleroma.Factory @@ -31,6 +32,12 @@ test "AccountCreateResponse example matches schema" do assert_schema(schema.example, "AccountCreateResponse", api_spec) end + test "AccountUpdateCredentialsRequest example matches schema" do + api_spec = ApiSpec.spec() + schema = AccountUpdateCredentialsRequest.schema() + assert_schema(schema.example, "AccountUpdateCredentialsRequest", api_spec) + end + test "AccountController produces a AccountCreateResponse", %{conn: conn} do api_spec = ApiSpec.spec() app_token = insert(:oauth_token, user: nil) @@ -52,4 +59,29 @@ test "AccountController produces a AccountCreateResponse", %{conn: conn} do assert_schema(json, "AccountCreateResponse", api_spec) end + + test "AccountUpdateCredentialsRequest produces an Account", %{conn: conn} do + api_spec = ApiSpec.spec() + token = insert(:oauth_token, scopes: ["read", "write"]) + + json = + conn + |> put_req_header("authorization", "Bearer " <> token.token) + |> put_req_header("content-type", "application/json") + |> patch( + "/api/v1/accounts/update_credentials", + %{ + hide_followers_count: "true", + hide_follows_count: "true", + skip_thread_containment: "true", + hide_follows: "true", + pleroma_settings_store: %{"pleroma-fe" => %{"key" => "val"}}, + note: "foobar", + fields_attributes: [%{name: "foo", value: "bar"}] + } + ) + |> json_response(200) + + assert_schema(json, "Account", api_spec) + end end 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 2d256f63c..0e890a980 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 @@ -14,6 +14,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do describe "updating credentials" do setup do: oauth_access(["write:accounts"]) + setup :request_content_type test "sets user settings in a generic way", %{conn: conn} do res_conn = @@ -237,6 +238,7 @@ test "requires 'write:accounts' permission" do for token <- [token1, token2] do conn = build_conn() + |> put_req_header("content-type", "multipart/form-data") |> put_req_header("authorization", "Bearer #{token.token}") |> patch("/api/v1/accounts/update_credentials", %{}) From ab400b2ddb205271b0a2680c45db18844f59a27d Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 7 Apr 2020 16:18:23 +0400 Subject: [PATCH 239/581] Add specs for ActorType and VisibilityScope --- lib/pleroma/web/api_spec/schemas/account.ex | 6 ++++-- .../schemas/account_update_credentials_request.ex | 9 ++++----- lib/pleroma/web/api_spec/schemas/actor_type.ex | 13 +++++++++++++ .../web/api_spec/schemas/visibility_scope.ex | 14 ++++++++++++++ .../account_controller/update_credentials_test.exs | 4 ++-- 5 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 lib/pleroma/web/api_spec/schemas/actor_type.ex create mode 100644 lib/pleroma/web/api_spec/schemas/visibility_scope.ex diff --git a/lib/pleroma/web/api_spec/schemas/account.ex b/lib/pleroma/web/api_spec/schemas/account.ex index 59c4ac4a4..beb093182 100644 --- a/lib/pleroma/web/api_spec/schemas/account.ex +++ b/lib/pleroma/web/api_spec/schemas/account.ex @@ -6,6 +6,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do alias OpenApiSpex.Schema alias Pleroma.Web.ApiSpec.Schemas.AccountEmoji alias Pleroma.Web.ApiSpec.Schemas.AccountField + alias Pleroma.Web.ApiSpec.Schemas.ActorType + alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope require OpenApiSpex @@ -87,12 +89,12 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do properties: %{ fields: %Schema{type: :array, items: AccountField}, note: %Schema{type: :string}, - privacy: %Schema{type: :string}, + privacy: VisibilityScope, sensitive: %Schema{type: :boolean}, pleroma: %Schema{ type: :object, properties: %{ - actor_type: %Schema{type: :string}, + actor_type: ActorType, discoverable: %Schema{type: :boolean}, no_rich_text: %Schema{type: :boolean}, show_role: %Schema{type: :boolean} diff --git a/lib/pleroma/web/api_spec/schemas/account_update_credentials_request.ex b/lib/pleroma/web/api_spec/schemas/account_update_credentials_request.ex index a50bce5ed..6ab48193e 100644 --- a/lib/pleroma/web/api_spec/schemas/account_update_credentials_request.ex +++ b/lib/pleroma/web/api_spec/schemas/account_update_credentials_request.ex @@ -5,6 +5,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest do alias OpenApiSpex.Schema alias Pleroma.Web.ApiSpec.Schemas.AccountAttributeField + alias Pleroma.Web.ApiSpec.Schemas.ActorType + alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope require OpenApiSpex OpenApiSpex.schema(%{ @@ -73,10 +75,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest do description: "user's role (e.g admin, moderator) will be exposed to anyone in the API" }, - default_scope: %Schema{ - type: :string, - description: "The scope returned under privacy key in Source subentity" - }, + default_scope: VisibilityScope, pleroma_settings_store: %Schema{ type: :object, description: "Opaque user settings to be saved on the backend." @@ -98,7 +97,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest do type: :boolean, description: "Discovery of this account in search results and other services is allowed." }, - actor_type: %Schema{type: :string, description: "the type of this account."} + actor_type: ActorType }, example: %{ bot: false, diff --git a/lib/pleroma/web/api_spec/schemas/actor_type.ex b/lib/pleroma/web/api_spec/schemas/actor_type.ex new file mode 100644 index 000000000..ac9b46678 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/actor_type.ex @@ -0,0 +1,13 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.ActorType do + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "ActorType", + type: :string, + enum: ["Application", "Group", "Organization", "Person", "Service"] + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/visibility_scope.ex b/lib/pleroma/web/api_spec/schemas/visibility_scope.ex new file mode 100644 index 000000000..8c81a4d73 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/visibility_scope.ex @@ -0,0 +1,14 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.VisibilityScope do + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "VisibilityScope", + description: "Status visibility", + type: :string, + enum: ["public", "unlisted", "private", "direct"] + }) +end 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 0e890a980..a3356c12f 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 @@ -106,10 +106,10 @@ test "updates the user's allow_following_move", %{user: user, conn: conn} do end test "updates the user's default scope", %{conn: conn} do - conn = patch(conn, "/api/v1/accounts/update_credentials", %{default_scope: "cofe"}) + conn = patch(conn, "/api/v1/accounts/update_credentials", %{default_scope: "unlisted"}) assert user_data = json_response(conn, 200) - assert user_data["source"]["privacy"] == "cofe" + assert user_data["source"]["privacy"] == "unlisted" end test "updates the user's hide_followers status", %{conn: conn} do From d7d6a83233f24b80005b4f49a8697535620e4b83 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 7 Apr 2020 18:29:05 +0400 Subject: [PATCH 240/581] Add spec for AccountController.relationships --- .../api_spec/operations/account_operation.ex | 24 +++++++- .../schemas/account_relationship_response.ex | 43 +++++++++++++++ .../schemas/account_relationships_response.ex | 55 +++++++++++++++++++ .../controllers/account_controller.ex | 4 +- test/web/api_spec/account_operation_test.exs | 24 ++++++++ .../controllers/account_controller_test.exs | 14 +++-- 6 files changed, 156 insertions(+), 8 deletions(-) create mode 100644 lib/pleroma/web/api_spec/schemas/account_relationship_response.ex create mode 100644 lib/pleroma/web/api_spec/schemas/account_relationships_response.ex diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index d7b56cc2b..352f66e9d 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -4,10 +4,12 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do alias OpenApiSpex.Operation + alias OpenApiSpex.Schema alias Pleroma.Web.ApiSpec.Helpers alias Pleroma.Web.ApiSpec.Schemas.Account alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse + alias Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse alias Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest @spec open_api_operation(atom) :: Operation.t() @@ -60,7 +62,27 @@ def update_credentials_operation do end def relationships_operation do - :ok + %Operation{ + tags: ["accounts"], + summary: "Check relationships to other accounts", + operationId: "AccountController.relationships", + description: "Find out whether a given account is followed, blocked, muted, etc.", + security: [%{"oAuth" => ["read:follows"]}], + parameters: [ + Operation.parameter( + :id, + :query, + %Schema{ + oneOf: [%Schema{type: :array, items: %Schema{type: :string}}, %Schema{type: :string}] + }, + "Account IDs", + example: "123" + ) + ], + responses: %{ + 200 => Operation.response("Account", "application/json", AccountRelationshipsResponse) + } + } end def show_operation do diff --git a/lib/pleroma/web/api_spec/schemas/account_relationship_response.ex b/lib/pleroma/web/api_spec/schemas/account_relationship_response.ex new file mode 100644 index 000000000..9974b946b --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/account_relationship_response.ex @@ -0,0 +1,43 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationshipResponse do + alias OpenApiSpex.Schema + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "AccountRelationshipResponse", + description: "Response schema for an account relationship", + type: :object, + properties: %{ + id: %Schema{type: :string}, + following: %Schema{type: :boolean}, + showing_reblogs: %Schema{type: :boolean}, + followed_by: %Schema{type: :boolean}, + blocking: %Schema{type: :boolean}, + blocked_by: %Schema{type: :boolean}, + muting: %Schema{type: :boolean}, + muting_notifications: %Schema{type: :boolean}, + requested: %Schema{type: :boolean}, + domain_blocking: %Schema{type: :boolean}, + endorsed: %Schema{type: :boolean} + }, + example: %{ + "JSON" => %{ + "id" => "1", + "following" => true, + "showing_reblogs" => true, + "followed_by" => true, + "blocking" => false, + "blocked_by" => false, + "muting" => false, + "muting_notifications" => false, + "requested" => false, + "domain_blocking" => false, + "endorsed" => false + } + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/account_relationships_response.ex b/lib/pleroma/web/api_spec/schemas/account_relationships_response.ex new file mode 100644 index 000000000..2ca632310 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/account_relationships_response.ex @@ -0,0 +1,55 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse do + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "AccountRelationshipsResponse", + description: "Response schema for account relationships", + type: :array, + items: Pleroma.Web.ApiSpec.Schemas.AccountRelationshipResponse, + example: [ + %{ + "id" => "1", + "following" => true, + "showing_reblogs" => true, + "followed_by" => true, + "blocking" => false, + "blocked_by" => true, + "muting" => false, + "muting_notifications" => false, + "requested" => false, + "domain_blocking" => false, + "endorsed" => true + }, + %{ + "id" => "2", + "following" => true, + "showing_reblogs" => true, + "followed_by" => true, + "blocking" => false, + "blocked_by" => true, + "muting" => true, + "muting_notifications" => false, + "requested" => true, + "domain_blocking" => false, + "endorsed" => false + }, + %{ + "id" => "3", + "following" => true, + "showing_reblogs" => true, + "followed_by" => true, + "blocking" => true, + "blocked_by" => false, + "muting" => true, + "muting_notifications" => false, + "requested" => false, + "domain_blocking" => true, + "endorsed" => false + } + ] + }) +end diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 9c986b3b2..1652e3a1b 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -83,7 +83,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do plug( OpenApiSpex.Plug.CastAndValidate, [render_error: Pleroma.Web.ApiSpec.RenderError] - when action in [:create, :verify_credentials, :update_credentials] + when action in [:create, :verify_credentials, :update_credentials, :relationships] ) action_fallback(Pleroma.Web.MastodonAPI.FallbackController) @@ -229,7 +229,7 @@ defp normalize_fields_attributes(fields) do end @doc "GET /api/v1/accounts/relationships" - def relationships(%{assigns: %{user: user}} = conn, %{"id" => id}) do + def relationships(%{assigns: %{user: user}} = conn, %{id: id}) do targets = User.get_all_by_ids(List.wrap(id)) render(conn, "relationships.json", user: user, targets: targets) diff --git a/test/web/api_spec/account_operation_test.exs b/test/web/api_spec/account_operation_test.exs index a54059074..58a38d8af 100644 --- a/test/web/api_spec/account_operation_test.exs +++ b/test/web/api_spec/account_operation_test.exs @@ -9,6 +9,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperationTest do alias Pleroma.Web.ApiSpec.Schemas.Account alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse + alias Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse alias Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest import OpenApiSpex.TestAssertions @@ -84,4 +85,27 @@ test "AccountUpdateCredentialsRequest produces an Account", %{conn: conn} do assert_schema(json, "Account", api_spec) end + + test "AccountRelationshipsResponse example matches schema" do + api_spec = ApiSpec.spec() + schema = AccountRelationshipsResponse.schema() + assert_schema(schema.example, "AccountRelationshipsResponse", api_spec) + end + + test "/api/v1/accounts/relationships produces AccountRelationshipsResponse", %{ + conn: conn + } do + token = insert(:oauth_token, scopes: ["read", "write"]) + other_user = insert(:user) + {:ok, _user} = Pleroma.User.follow(token.user, other_user) + api_spec = ApiSpec.spec() + + assert [relationship] = + conn + |> put_req_header("authorization", "Bearer " <> token.token) + |> get("/api/v1/accounts/relationships?id=#{other_user.id}") + |> json_response(:ok) + + assert_schema([relationship], "AccountRelationshipsResponse", api_spec) + end end diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 6fe46af3c..060a7c1cd 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -1062,14 +1062,18 @@ test "locked accounts" do setup do: oauth_access(["read:follows"]) test "returns the relationships for the current user", %{user: user, conn: conn} do - other_user = insert(:user) + %{id: other_user_id} = other_user = insert(:user) {:ok, _user} = User.follow(user, other_user) - conn = get(conn, "/api/v1/accounts/relationships", %{"id" => [other_user.id]}) + assert [%{"id" => ^other_user_id}] = + conn + |> get("/api/v1/accounts/relationships?id=#{other_user.id}") + |> json_response(200) - assert [relationship] = json_response(conn, 200) - - assert to_string(other_user.id) == relationship["id"] + assert [%{"id" => ^other_user_id}] = + conn + |> get("/api/v1/accounts/relationships?id[]=#{other_user.id}") + |> json_response(200) end test "returns an empty list on a bad request", %{conn: conn} do From 278b3fa0ad0ca58a9e5549e98d24944bbe0bf766 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 7 Apr 2020 18:53:12 +0400 Subject: [PATCH 241/581] Add spec for AccountController.show --- .../web/api_spec/operations/account_operation.ex | 16 +++++++++++++++- .../controllers/account_controller.ex | 4 ++-- test/web/api_spec/account_operation_test.exs | 16 +++++++++++++++- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 352f66e9d..5b1b2eb4c 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -86,7 +86,21 @@ def relationships_operation do end def show_operation do - :ok + %Operation{ + tags: ["accounts"], + summary: "Account", + operationId: "AccountController.show", + description: "View information about a profile.", + parameters: [ + Operation.parameter(:id, :path, :string, "Account ID or nickname", + example: "123", + required: true + ) + ], + responses: %{ + 200 => Operation.response("Account", "application/json", Account) + } + } end def statuses_operation do diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 1652e3a1b..67375f31c 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -83,7 +83,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do plug( OpenApiSpex.Plug.CastAndValidate, [render_error: Pleroma.Web.ApiSpec.RenderError] - when action in [:create, :verify_credentials, :update_credentials, :relationships] + when action in [:create, :verify_credentials, :update_credentials, :relationships, :show] ) action_fallback(Pleroma.Web.MastodonAPI.FallbackController) @@ -239,7 +239,7 @@ def relationships(%{assigns: %{user: user}} = conn, %{id: id}) do def relationships(%{assigns: %{user: _user}} = conn, _), do: json(conn, []) @doc "GET /api/v1/accounts/:id" - def show(%{assigns: %{user: for_user}} = conn, %{"id" => nickname_or_id}) do + def show(%{assigns: %{user: for_user}} = conn, %{id: nickname_or_id}) do with %User{} = user <- User.get_cached_by_nickname_or_id(nickname_or_id, for: for_user), true <- User.visible_for?(user, for_user) do render(conn, "show.json", user: user, for: for_user) diff --git a/test/web/api_spec/account_operation_test.exs b/test/web/api_spec/account_operation_test.exs index 58a38d8af..6cc08ee0e 100644 --- a/test/web/api_spec/account_operation_test.exs +++ b/test/web/api_spec/account_operation_test.exs @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.AccountOperationTest do - use Pleroma.Web.ConnCase, async: true + use Pleroma.Web.ConnCase alias Pleroma.Web.ApiSpec alias Pleroma.Web.ApiSpec.Schemas.Account @@ -108,4 +108,18 @@ test "/api/v1/accounts/relationships produces AccountRelationshipsResponse", %{ assert_schema([relationship], "AccountRelationshipsResponse", api_spec) end + + test "/api/v1/accounts/:id produces Account", %{ + conn: conn + } do + user = insert(:user) + api_spec = ApiSpec.spec() + + assert resp = + conn + |> get("/api/v1/accounts/#{user.id}") + |> json_response(:ok) + + assert_schema(resp, "Account", api_spec) + end end From 03124c96cc192ef8c4893738a0cee552c6984da6 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 8 Apr 2020 22:33:25 +0400 Subject: [PATCH 242/581] Add spec for AccountController.statuses --- lib/pleroma/web/activity_pub/activity_pub.ex | 11 +- lib/pleroma/web/api_spec.ex | 8 + .../api_spec/operations/account_operation.ex | 45 +++- .../account_update_credentials_request.ex | 5 +- .../web/api_spec/schemas/boolean_like.ex | 36 +++ lib/pleroma/web/api_spec/schemas/poll.ex | 35 +++ lib/pleroma/web/api_spec/schemas/status.ex | 227 ++++++++++++++++++ .../web/api_spec/schemas/statuses_response.ex | 13 + .../controllers/account_controller.ex | 17 +- .../web/mastodon_api/views/status_view.ex | 8 +- mix.exs | 4 +- mix.lock | 4 +- test/web/api_spec/account_operation_test.exs | 16 ++ .../controllers/account_controller_test.exs | 60 +++-- 14 files changed, 444 insertions(+), 45 deletions(-) create mode 100644 lib/pleroma/web/api_spec/schemas/boolean_like.ex create mode 100644 lib/pleroma/web/api_spec/schemas/poll.ex create mode 100644 lib/pleroma/web/api_spec/schemas/status.ex create mode 100644 lib/pleroma/web/api_spec/schemas/statuses_response.ex diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 86b105b7f..1909ce097 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -853,7 +853,7 @@ defp exclude_visibility(query, %{"exclude_visibilities" => visibility}) end defp exclude_visibility(query, %{"exclude_visibilities" => visibility}) - when visibility not in @valid_visibilities do + when visibility not in [nil | @valid_visibilities] do Logger.error("Could not exclude visibility to #{visibility}") query end @@ -1060,7 +1060,7 @@ defp restrict_media(_query, %{"only_media" => _val, "skip_preload" => true}) do raise "Can't use the child object without preloading!" end - defp restrict_media(query, %{"only_media" => val}) when val == "true" or val == "1" do + defp restrict_media(query, %{"only_media" => val}) when val in [true, "true", "1"] do from( [_activity, object] in query, where: fragment("not (?)->'attachment' = (?)", object.data, ^[]) @@ -1069,7 +1069,7 @@ defp restrict_media(query, %{"only_media" => val}) when val == "true" or val == defp restrict_media(query, _), do: query - defp restrict_replies(query, %{"exclude_replies" => val}) when val == "true" or val == "1" do + defp restrict_replies(query, %{"exclude_replies" => val}) when val in [true, "true", "1"] do from( [_activity, object] in query, where: fragment("?->>'inReplyTo' is null", object.data) @@ -1078,7 +1078,7 @@ defp restrict_replies(query, %{"exclude_replies" => val}) when val == "true" or defp restrict_replies(query, _), do: query - defp restrict_reblogs(query, %{"exclude_reblogs" => val}) when val == "true" or val == "1" do + defp restrict_reblogs(query, %{"exclude_reblogs" => val}) when val in [true, "true", "1"] do from(activity in query, where: fragment("?->>'type' != 'Announce'", activity.data)) end @@ -1157,7 +1157,8 @@ defp restrict_unlisted(query) do ) end - defp restrict_pinned(query, %{"pinned" => "true", "pinned_activity_ids" => ids}) do + defp restrict_pinned(query, %{"pinned" => pinned, "pinned_activity_ids" => ids}) + when pinned in [true, "true", "1"] do from(activity in query, where: activity.id in ^ids) end diff --git a/lib/pleroma/web/api_spec.ex b/lib/pleroma/web/api_spec.ex index c85fe30d1..d11e776d0 100644 --- a/lib/pleroma/web/api_spec.ex +++ b/lib/pleroma/web/api_spec.ex @@ -4,6 +4,7 @@ defmodule Pleroma.Web.ApiSpec do alias OpenApiSpex.OpenApi + alias OpenApiSpex.Operation alias Pleroma.Web.Endpoint alias Pleroma.Web.Router @@ -24,6 +25,13 @@ def spec do # populate the paths from a phoenix router paths: OpenApiSpex.Paths.from_router(Router), components: %OpenApiSpex.Components{ + parameters: %{ + "accountIdOrNickname" => + Operation.parameter(:id, :path, :string, "Account ID or nickname", + example: "123", + required: true + ) + }, securitySchemes: %{ "oAuth" => %OpenApiSpex.SecurityScheme{ type: "oauth2", diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 5b1b2eb4c..09e6d24ed 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -4,6 +4,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do alias OpenApiSpex.Operation + alias OpenApiSpex.Reference alias OpenApiSpex.Schema alias Pleroma.Web.ApiSpec.Helpers alias Pleroma.Web.ApiSpec.Schemas.Account @@ -11,6 +12,9 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse alias Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse alias Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest + alias Pleroma.Web.ApiSpec.Schemas.BooleanLike + alias Pleroma.Web.ApiSpec.Schemas.StatusesResponse + alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope @spec open_api_operation(atom) :: Operation.t() def open_api_operation(action) do @@ -91,12 +95,7 @@ def show_operation do summary: "Account", operationId: "AccountController.show", description: "View information about a profile.", - parameters: [ - Operation.parameter(:id, :path, :string, "Account ID or nickname", - example: "123", - required: true - ) - ], + parameters: [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}], responses: %{ 200 => Operation.response("Account", "application/json", Account) } @@ -104,7 +103,39 @@ def show_operation do end def statuses_operation do - :ok + %Operation{ + tags: ["accounts"], + summary: "Statuses", + operationId: "AccountController.statuses", + description: + "Statuses posted to the given account. Public (for public statuses only), or user token + `read:statuses` (for private statuses the user is authorized to see)", + parameters: [ + %Reference{"$ref": "#/components/parameters/accountIdOrNickname"}, + Operation.parameter(:pinned, :query, BooleanLike, "Pinned"), + Operation.parameter(:tagged, :query, :string, "With tag"), + Operation.parameter(:only_media, :query, BooleanLike, "Only meadia"), + Operation.parameter(:with_muted, :query, BooleanLike, "With muted"), + Operation.parameter(:exclude_reblogs, :query, BooleanLike, "Exclude reblobs"), + Operation.parameter( + :exclude_visibilities, + :query, + %Schema{type: :array, items: VisibilityScope}, + "Exclude visibilities" + ), + Operation.parameter(:max_id, :query, :string, "Max ID"), + Operation.parameter(:min_id, :query, :string, "Mix ID"), + Operation.parameter(:since_id, :query, :string, "Since ID"), + Operation.parameter( + :limit, + :query, + %Schema{type: :integer, default: 20, maximum: 40}, + "Limit" + ) + ], + responses: %{ + 200 => Operation.response("Statuses", "application/json", StatusesResponse) + } + } end def followers_operation do diff --git a/lib/pleroma/web/api_spec/schemas/account_update_credentials_request.ex b/lib/pleroma/web/api_spec/schemas/account_update_credentials_request.ex index 6ab48193e..35220c78a 100644 --- a/lib/pleroma/web/api_spec/schemas/account_update_credentials_request.ex +++ b/lib/pleroma/web/api_spec/schemas/account_update_credentials_request.ex @@ -38,7 +38,10 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest do description: "Whether manual approval of follow requests is required." }, fields_attributes: %Schema{ - oneOf: [%Schema{type: :array, items: AccountAttributeField}, %Schema{type: :object}] + oneOf: [ + %Schema{type: :array, items: AccountAttributeField}, + %Schema{type: :object, additionalProperties: %Schema{type: AccountAttributeField}} + ] }, # NOTE: `source` field is not supported # diff --git a/lib/pleroma/web/api_spec/schemas/boolean_like.ex b/lib/pleroma/web/api_spec/schemas/boolean_like.ex new file mode 100644 index 000000000..f3bfb74da --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/boolean_like.ex @@ -0,0 +1,36 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.BooleanLike do + alias OpenApiSpex.Schema + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "BooleanLike", + description: """ + The following values will be treated as `false`: + - false + - 0 + - "0", + - "f", + - "F", + - "false", + - "FALSE", + - "off", + - "OFF" + + All other non-null values will be treated as `true` + """, + anyOf: [ + %Schema{type: :boolean}, + %Schema{type: :string}, + %Schema{type: :integer} + ] + }) + + def after_cast(value, _schmea) do + {:ok, Pleroma.Web.ControllerHelper.truthy_param?(value)} + end +end diff --git a/lib/pleroma/web/api_spec/schemas/poll.ex b/lib/pleroma/web/api_spec/schemas/poll.ex new file mode 100644 index 000000000..2a9975f85 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/poll.ex @@ -0,0 +1,35 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.Poll do + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.AccountEmoji + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "Poll", + description: "Response schema for account custom fields", + type: :object, + properties: %{ + id: %Schema{type: :string}, + expires_at: %Schema{type: :string, format: "date-time"}, + expired: %Schema{type: :boolean}, + multiple: %Schema{type: :boolean}, + votes_count: %Schema{type: :integer}, + voted: %Schema{type: :boolean}, + emojis: %Schema{type: :array, items: AccountEmoji}, + options: %Schema{ + type: :array, + items: %Schema{ + type: :object, + properties: %{ + title: %Schema{type: :string}, + votes_count: %Schema{type: :integer} + } + } + } + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/status.ex b/lib/pleroma/web/api_spec/schemas/status.ex new file mode 100644 index 000000000..486c3a0fe --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/status.ex @@ -0,0 +1,227 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.Status do + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.Account + alias Pleroma.Web.ApiSpec.Schemas.AccountEmoji + alias Pleroma.Web.ApiSpec.Schemas.Poll + alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "Status", + description: "Response schema for a status", + type: :object, + properties: %{ + account: Account, + application: %Schema{ + type: :object, + properties: %{ + name: %Schema{type: :string}, + website: %Schema{type: :string, nullable: true} + } + }, + bookmarked: %Schema{type: :boolean}, + card: %Schema{ + type: :object, + nullable: true, + properties: %{ + type: %Schema{type: :string}, + provider_name: %Schema{type: :string}, + provider_url: %Schema{type: :string}, + url: %Schema{type: :string}, + image: %Schema{type: :string}, + title: %Schema{type: :string}, + description: %Schema{type: :string} + } + }, + content: %Schema{type: :string}, + created_at: %Schema{type: :string, format: "date-time"}, + emojis: %Schema{type: :array, items: AccountEmoji}, + favourited: %Schema{type: :boolean}, + favourites_count: %Schema{type: :integer}, + id: %Schema{type: :string}, + in_reply_to_account_id: %Schema{type: :string, nullable: true}, + in_reply_to_id: %Schema{type: :string, nullable: true}, + language: %Schema{type: :string, nullable: true}, + media_attachments: %Schema{ + type: :array, + items: %Schema{ + type: :object, + properties: %{ + id: %Schema{type: :string}, + url: %Schema{type: :string}, + remote_url: %Schema{type: :string}, + preview_url: %Schema{type: :string}, + text_url: %Schema{type: :string}, + description: %Schema{type: :string}, + type: %Schema{type: :string, enum: ["image", "video", "audio", "unknown"]}, + pleroma: %Schema{ + type: :object, + properties: %{mime_type: %Schema{type: :string}} + } + } + } + }, + mentions: %Schema{ + type: :array, + items: %Schema{ + type: :object, + properties: %{ + id: %Schema{type: :string}, + acct: %Schema{type: :string}, + username: %Schema{type: :string}, + url: %Schema{type: :string} + } + } + }, + muted: %Schema{type: :boolean}, + pinned: %Schema{type: :boolean}, + pleroma: %Schema{ + type: :object, + properties: %{ + content: %Schema{type: :object, additionalProperties: %Schema{type: :string}}, + conversation_id: %Schema{type: :integer}, + direct_conversation_id: %Schema{type: :string, nullable: true}, + emoji_reactions: %Schema{ + type: :array, + items: %Schema{ + type: :object, + properties: %{ + name: %Schema{type: :string}, + count: %Schema{type: :integer}, + me: %Schema{type: :boolean} + } + } + }, + expires_at: %Schema{type: :string, format: "date-time", nullable: true}, + in_reply_to_account_acct: %Schema{type: :string, nullable: true}, + local: %Schema{type: :boolean}, + spoiler_text: %Schema{type: :object, additionalProperties: %Schema{type: :string}}, + thread_muted: %Schema{type: :boolean} + } + }, + poll: %Schema{type: Poll, nullable: true}, + reblog: %Schema{ + allOf: [%OpenApiSpex.Reference{"$ref": "#/components/schemas/Status"}], + nullable: true + }, + reblogged: %Schema{type: :boolean}, + reblogs_count: %Schema{type: :integer}, + replies_count: %Schema{type: :integer}, + sensitive: %Schema{type: :boolean}, + spoiler_text: %Schema{type: :string}, + tags: %Schema{ + type: :array, + items: %Schema{ + type: :object, + properties: %{ + name: %Schema{type: :string}, + url: %Schema{type: :string} + } + } + }, + uri: %Schema{type: :string}, + url: %Schema{type: :string}, + visibility: VisibilityScope + }, + example: %{ + "JSON" => %{ + "account" => %{ + "acct" => "nick6", + "avatar" => "http://localhost:4001/images/avi.png", + "avatar_static" => "http://localhost:4001/images/avi.png", + "bot" => false, + "created_at" => "2020-04-07T19:48:51.000Z", + "display_name" => "Test テスト User 6", + "emojis" => [], + "fields" => [], + "followers_count" => 1, + "following_count" => 0, + "header" => "http://localhost:4001/images/banner.png", + "header_static" => "http://localhost:4001/images/banner.png", + "id" => "9toJCsKN7SmSf3aj5c", + "locked" => false, + "note" => "Tester Number 6", + "pleroma" => %{ + "background_image" => nil, + "confirmation_pending" => false, + "hide_favorites" => true, + "hide_followers" => false, + "hide_followers_count" => false, + "hide_follows" => false, + "hide_follows_count" => false, + "is_admin" => false, + "is_moderator" => false, + "relationship" => %{ + "blocked_by" => false, + "blocking" => false, + "domain_blocking" => false, + "endorsed" => false, + "followed_by" => false, + "following" => true, + "id" => "9toJCsKN7SmSf3aj5c", + "muting" => false, + "muting_notifications" => false, + "requested" => false, + "showing_reblogs" => true, + "subscribing" => false + }, + "skip_thread_containment" => false, + "tags" => [] + }, + "source" => %{ + "fields" => [], + "note" => "Tester Number 6", + "pleroma" => %{"actor_type" => "Person", "discoverable" => false}, + "sensitive" => false + }, + "statuses_count" => 1, + "url" => "http://localhost:4001/users/nick6", + "username" => "nick6" + }, + "application" => %{"name" => "Web", "website" => nil}, + "bookmarked" => false, + "card" => nil, + "content" => "foobar", + "created_at" => "2020-04-07T19:48:51.000Z", + "emojis" => [], + "favourited" => false, + "favourites_count" => 0, + "id" => "9toJCu5YZW7O7gfvH6", + "in_reply_to_account_id" => nil, + "in_reply_to_id" => nil, + "language" => nil, + "media_attachments" => [], + "mentions" => [], + "muted" => false, + "pinned" => false, + "pleroma" => %{ + "content" => %{"text/plain" => "foobar"}, + "conversation_id" => 345_972, + "direct_conversation_id" => nil, + "emoji_reactions" => [], + "expires_at" => nil, + "in_reply_to_account_acct" => nil, + "local" => true, + "spoiler_text" => %{"text/plain" => ""}, + "thread_muted" => false + }, + "poll" => nil, + "reblog" => nil, + "reblogged" => false, + "reblogs_count" => 0, + "replies_count" => 0, + "sensitive" => false, + "spoiler_text" => "", + "tags" => [], + "uri" => "http://localhost:4001/objects/0f5dad44-0e9e-4610-b377-a2631e499190", + "url" => "http://localhost:4001/notice/9toJCu5YZW7O7gfvH6", + "visibility" => "private" + } + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/statuses_response.ex b/lib/pleroma/web/api_spec/schemas/statuses_response.ex new file mode 100644 index 000000000..fb7c7e0aa --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/statuses_response.ex @@ -0,0 +1,13 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.StatusesResponse do + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "StatusesResponse", + type: :array, + items: Pleroma.Web.ApiSpec.Schemas.Status + }) +end diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 67375f31c..208df5698 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -83,7 +83,14 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do plug( OpenApiSpex.Plug.CastAndValidate, [render_error: Pleroma.Web.ApiSpec.RenderError] - when action in [:create, :verify_credentials, :update_credentials, :relationships, :show] + when action in [ + :create, + :verify_credentials, + :update_credentials, + :relationships, + :show, + :statuses + ] ) action_fallback(Pleroma.Web.MastodonAPI.FallbackController) @@ -250,12 +257,14 @@ def show(%{assigns: %{user: for_user}} = conn, %{id: nickname_or_id}) do @doc "GET /api/v1/accounts/:id/statuses" def statuses(%{assigns: %{user: reading_user}} = conn, params) do - with %User{} = user <- User.get_cached_by_nickname_or_id(params["id"], for: reading_user), + with %User{} = user <- User.get_cached_by_nickname_or_id(params.id, for: reading_user), true <- User.visible_for?(user, reading_user) do params = params - |> Map.put("tag", params["tagged"]) - |> Map.delete("godmode") + |> Map.delete(:tagged) + |> Enum.filter(&(not is_nil(&1))) + |> Map.new(fn {key, value} -> {to_string(key), value} end) + |> Map.put("tag", params[:tagged]) activities = ActivityPub.fetch_user_activities(user, reading_user, params) diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index b5850e1ae..ba40fd63e 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -521,11 +521,9 @@ def render_content(object), do: object.data["content"] || "" """ @spec build_tags(list(any())) :: list(map()) def build_tags(object_tags) when is_list(object_tags) do - object_tags = for tag when is_binary(tag) <- object_tags, do: tag - - Enum.reduce(object_tags, [], fn tag, tags -> - tags ++ [%{name: tag, url: "/tag/#{URI.encode(tag)}"}] - end) + object_tags + |> Enum.filter(&is_binary/1) + |> Enum.map(&%{name: &1, url: "/tag/#{URI.encode(&1)}"}) end def build_tags(_), do: [] diff --git a/mix.exs b/mix.exs index c781995e0..ec69d70c0 100644 --- a/mix.exs +++ b/mix.exs @@ -189,7 +189,9 @@ defp deps do ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"}, {:mox, "~> 0.5", only: :test}, {:restarter, path: "./restarter"}, - {:open_api_spex, "~> 3.6"} + {:open_api_spex, + git: "https://git.pleroma.social/pleroma/elixir-libraries/open_api_spex.git", + ref: "b862ebd78de0df95875cf46feb6e9607130dc2a8"} ] ++ oauth_deps() end diff --git a/mix.lock b/mix.lock index ba4e3ac44..779be4f87 100644 --- a/mix.lock +++ b/mix.lock @@ -74,7 +74,7 @@ "nimble_parsec": {:hex, :nimble_parsec, "0.5.3", "def21c10a9ed70ce22754fdeea0810dafd53c2db3219a0cd54cf5526377af1c6", [:mix], [], "hexpm", "589b5af56f4afca65217a1f3eb3fee7e79b09c40c742fddc1c312b3ac0b3399f"}, "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, "oban": {:hex, :oban, "1.2.0", "7cca94d341be43d220571e28f69131c4afc21095b25257397f50973d3fc59b07", [:mix], [{:ecto_sql, "~> 3.1", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ba5f8b3f7d76967b3e23cf8014f6a13e4ccb33431e4808f036709a7f822362ee"}, - "open_api_spex": {:hex, :open_api_spex, "3.6.0", "64205aba9f2607f71b08fd43e3351b9c5e9898ec5ef49fc0ae35890da502ade9", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.1", [hex: :poison, repo: "hexpm", optional: true]}], "hexpm", "126ba3473966277132079cb1d5bf1e3df9e36fe2acd00166e75fd125cecb59c5"}, + "open_api_spex": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/open_api_spex.git", "b862ebd78de0df95875cf46feb6e9607130dc2a8", [ref: "b862ebd78de0df95875cf46feb6e9607130dc2a8"]}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "0.12.4", "8dd29ed783f2e12195d7e0a4640effc0a7c37e6537da491f1db01839eee6d053", [:mix], [], "hexpm", "595d09db74cb093b1903381c9de423276a931a2480a46a1a5dc7f932a2a6375b"}, "phoenix": {:hex, :phoenix, "1.4.13", "67271ad69b51f3719354604f4a3f968f83aa61c19199343656c9caee057ff3b8", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ab765a0feddb81fc62e2116c827b5f068df85159c162bee760745276ad7ddc1b"}, @@ -82,7 +82,7 @@ "phoenix_html": {:hex, :phoenix_html, "2.14.0", "d8c6bc28acc8e65f8ea0080ee05aa13d912c8758699283b8d3427b655aabe284", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "b0bb30eda478a06dbfbe96728061a93833db3861a49ccb516f839ecb08493fbb"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "1.1.2", "496c303bdf1b2e98a9d26e89af5bba3ab487ba3a3735f74bf1f4064d2a845a3e", [:mix], [], "hexpm", "1f13f9f0f3e769a667a6b6828d29dec37497a082d195cc52dbef401a9b69bf38"}, "phoenix_swoosh": {:hex, :phoenix_swoosh, "0.2.0", "a7e0b32077cd6d2323ae15198839b05d9caddfa20663fd85787479e81f89520e", [:mix], [{:phoenix, "~> 1.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.2", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 0.1", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "ebf1bfa7b3c1c850c04929afe02e2e0d7ab135e0706332c865de03e761676b1f"}, - "plug": {:hex, :plug, "1.9.0", "8d7c4e26962283ff9f8f3347bd73838e2413fbc38b7bb5467d5924f68f3a5a4a", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "9902eda2c52ada2a096434682e99a2493f5d06a94d6ac6bcfff9805f952350f1"}, + "plug": {:hex, :plug, "1.10.0", "6508295cbeb4c654860845fb95260737e4a8838d34d115ad76cd487584e2fc4d", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "422a9727e667be1bf5ab1de03be6fa0ad67b775b2d84ed908f3264415ef29d4a"}, "plug_cowboy": {:hex, :plug_cowboy, "2.1.2", "8b0addb5908c5238fac38e442e81b6fcd32788eaa03246b4d55d147c47c5805e", [:mix], [{:cowboy, "~> 2.5", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "7d722581ce865a237e14da6d946f92704101740a256bd13ec91e63c0b122fc70"}, "plug_crypto": {:hex, :plug_crypto, "1.1.2", "bdd187572cc26dbd95b87136290425f2b580a116d3fb1f564216918c9730d227", [:mix], [], "hexpm", "6b8b608f895b6ffcfad49c37c7883e8df98ae19c6a28113b02aa1e9c5b22d6b5"}, "plug_static_index_html": {:hex, :plug_static_index_html, "1.0.0", "840123d4d3975585133485ea86af73cb2600afd7f2a976f9f5fd8b3808e636a0", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "79fd4fcf34d110605c26560cbae8f23c603ec4158c08298bd4360fdea90bb5cf"}, diff --git a/test/web/api_spec/account_operation_test.exs b/test/web/api_spec/account_operation_test.exs index 6cc08ee0e..892ade71c 100644 --- a/test/web/api_spec/account_operation_test.exs +++ b/test/web/api_spec/account_operation_test.exs @@ -122,4 +122,20 @@ test "/api/v1/accounts/:id produces Account", %{ assert_schema(resp, "Account", api_spec) end + + test "/api/v1/accounts/:id/statuses produces StatusesResponse", %{ + conn: conn + } do + user = insert(:user) + Pleroma.Web.CommonAPI.post(user, %{"status" => "foobar"}) + + api_spec = ApiSpec.spec() + + assert resp = + conn + |> get("/api/v1/accounts/#{user.id}/statuses") + |> json_response(:ok) + + assert_schema(resp, "StatusesResponse", api_spec) + end end diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 060a7c1cd..969256fa4 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -10,9 +10,11 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.InternalFetchActor + alias Pleroma.Web.ApiSpec alias Pleroma.Web.CommonAPI alias Pleroma.Web.OAuth.Token + import OpenApiSpex.TestAssertions import Pleroma.Factory describe "account fetching" do @@ -245,22 +247,23 @@ test "respects blocks", %{user: user_one, conn: conn} do {:ok, activity} = CommonAPI.post(user_two, %{"status" => "User one sux0rz"}) {:ok, repeat, _} = CommonAPI.repeat(activity.id, user_three) - resp = get(conn, "/api/v1/accounts/#{user_two.id}/statuses") - - assert [%{"id" => id}] = json_response(resp, 200) + assert resp = get(conn, "/api/v1/accounts/#{user_two.id}/statuses") |> json_response(200) + assert [%{"id" => id}] = resp + assert_schema(resp, "StatusesResponse", ApiSpec.spec()) assert id == activity.id # Even a blocked user will deliver the full user timeline, there would be # no point in looking at a blocked users timeline otherwise - resp = get(conn, "/api/v1/accounts/#{user_two.id}/statuses") - - assert [%{"id" => id}] = json_response(resp, 200) + assert resp = get(conn, "/api/v1/accounts/#{user_two.id}/statuses") |> json_response(200) + assert [%{"id" => id}] = resp assert id == activity.id + assert_schema(resp, "StatusesResponse", ApiSpec.spec()) # Third user's timeline includes the repeat when viewed by unauthenticated user - resp = get(build_conn(), "/api/v1/accounts/#{user_three.id}/statuses") - assert [%{"id" => id}] = json_response(resp, 200) + resp = get(build_conn(), "/api/v1/accounts/#{user_three.id}/statuses") |> json_response(200) + assert [%{"id" => id}] = resp assert id == repeat.id + assert_schema(resp, "StatusesResponse", ApiSpec.spec()) # When viewing a third user's timeline, the blocked users' statuses will NOT be shown resp = get(conn, "/api/v1/accounts/#{user_three.id}/statuses") @@ -286,30 +289,34 @@ test "gets users statuses", %{conn: conn} do {:ok, private_activity} = CommonAPI.post(user_one, %{"status" => "private", "visibility" => "private"}) - resp = get(conn, "/api/v1/accounts/#{user_one.id}/statuses") - - assert [%{"id" => id}] = json_response(resp, 200) + resp = get(conn, "/api/v1/accounts/#{user_one.id}/statuses") |> json_response(200) + assert [%{"id" => id}] = resp assert id == to_string(activity.id) + assert_schema(resp, "StatusesResponse", ApiSpec.spec()) resp = conn |> assign(:user, user_two) |> assign(:token, insert(:oauth_token, user: user_two, scopes: ["read:statuses"])) |> get("/api/v1/accounts/#{user_one.id}/statuses") + |> json_response(200) - assert [%{"id" => id_one}, %{"id" => id_two}] = json_response(resp, 200) + assert [%{"id" => id_one}, %{"id" => id_two}] = resp assert id_one == to_string(direct_activity.id) assert id_two == to_string(activity.id) + assert_schema(resp, "StatusesResponse", ApiSpec.spec()) resp = conn |> assign(:user, user_three) |> assign(:token, insert(:oauth_token, user: user_three, scopes: ["read:statuses"])) |> get("/api/v1/accounts/#{user_one.id}/statuses") + |> json_response(200) - assert [%{"id" => id_one}, %{"id" => id_two}] = json_response(resp, 200) + assert [%{"id" => id_one}, %{"id" => id_two}] = resp assert id_one == to_string(private_activity.id) assert id_two == to_string(activity.id) + assert_schema(resp, "StatusesResponse", ApiSpec.spec()) end test "unimplemented pinned statuses feature", %{conn: conn} do @@ -335,40 +342,45 @@ test "gets an users media", %{conn: conn} do {:ok, image_post} = CommonAPI.post(user, %{"status" => "cofe", "media_ids" => [media_id]}) - conn = get(conn, "/api/v1/accounts/#{user.id}/statuses", %{"only_media" => "true"}) + conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?only_media=true") assert [%{"id" => id}] = json_response(conn, 200) assert id == to_string(image_post.id) + assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) - conn = get(build_conn(), "/api/v1/accounts/#{user.id}/statuses", %{"only_media" => "1"}) + conn = get(build_conn(), "/api/v1/accounts/#{user.id}/statuses?only_media=1") assert [%{"id" => id}] = json_response(conn, 200) assert id == to_string(image_post.id) + assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) end test "gets a user's statuses without reblogs", %{user: user, conn: conn} do {:ok, post} = CommonAPI.post(user, %{"status" => "HI!!!"}) {:ok, _, _} = CommonAPI.repeat(post.id, user) - conn = get(conn, "/api/v1/accounts/#{user.id}/statuses", %{"exclude_reblogs" => "true"}) + conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?exclude_reblogs=true") assert [%{"id" => id}] = json_response(conn, 200) assert id == to_string(post.id) + assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) - conn = get(conn, "/api/v1/accounts/#{user.id}/statuses", %{"exclude_reblogs" => "1"}) + conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?exclude_reblogs=1") assert [%{"id" => id}] = json_response(conn, 200) assert id == to_string(post.id) + assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) end test "filters user's statuses by a hashtag", %{user: user, conn: conn} do {:ok, post} = CommonAPI.post(user, %{"status" => "#hashtag"}) {:ok, _post} = CommonAPI.post(user, %{"status" => "hashtag"}) - conn = get(conn, "/api/v1/accounts/#{user.id}/statuses", %{"tagged" => "hashtag"}) + conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?tagged=hashtag") assert [%{"id" => id}] = json_response(conn, 200) assert id == to_string(post.id) + assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) end test "the user views their own timelines and excludes direct messages", %{ @@ -378,11 +390,11 @@ test "the user views their own timelines and excludes direct messages", %{ {:ok, public_activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "public"}) {:ok, _direct_activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "direct"}) - conn = - get(conn, "/api/v1/accounts/#{user.id}/statuses", %{"exclude_visibilities" => ["direct"]}) + conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?exclude_visibilities[]=direct") assert [%{"id" => id}] = json_response(conn, 200) assert id == to_string(public_activity.id) + assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) end end @@ -420,9 +432,11 @@ test "if user is authenticated", %{local: local, remote: remote} do res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses") assert length(json_response(res_conn, 200)) == 1 + assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") assert length(json_response(res_conn, 200)) == 1 + assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) end end @@ -441,6 +455,7 @@ test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} d res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") assert length(json_response(res_conn, 200)) == 1 + assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) end test "if user is authenticated", %{local: local, remote: remote} do @@ -448,9 +463,11 @@ test "if user is authenticated", %{local: local, remote: remote} do res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses") assert length(json_response(res_conn, 200)) == 1 + assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") assert length(json_response(res_conn, 200)) == 1 + assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) end end @@ -463,6 +480,7 @@ test "if user is authenticated", %{local: local, remote: remote} do test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses") assert length(json_response(res_conn, 200)) == 1 + assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") @@ -476,9 +494,11 @@ test "if user is authenticated", %{local: local, remote: remote} do res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses") assert length(json_response(res_conn, 200)) == 1 + assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") assert length(json_response(res_conn, 200)) == 1 + assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) end end From bd6e2b300f82e66afb121c2339c3cbbfb0b1a446 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 8 Apr 2020 23:16:20 +0400 Subject: [PATCH 243/581] Add spec for AccountController.followers --- .../api_spec/operations/account_operation.ex | 19 ++++++++++++++++++- .../web/api_spec/schemas/accounts_response.ex | 13 +++++++++++++ .../controllers/account_controller.ex | 8 +++++++- .../controllers/account_controller_test.exs | 4 ++++ 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 lib/pleroma/web/api_spec/schemas/accounts_response.ex diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 09e6d24ed..070c74758 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -11,6 +11,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse alias Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse + alias Pleroma.Web.ApiSpec.Schemas.AccountsResponse alias Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest alias Pleroma.Web.ApiSpec.Schemas.BooleanLike alias Pleroma.Web.ApiSpec.Schemas.StatusesResponse @@ -139,7 +140,23 @@ def statuses_operation do end def followers_operation do - :ok + %Operation{ + tags: ["accounts"], + summary: "Followers", + operationId: "AccountController.followers", + security: [%{"oAuth" => ["read:accounts"]}], + description: + "Accounts which follow the given account, if network is not hidden by the account owner.", + parameters: [ + %Reference{"$ref": "#/components/parameters/accountIdOrNickname"}, + Operation.parameter(:max_id, :query, :string, "Max ID"), + Operation.parameter(:since_id, :query, :string, "Since ID"), + Operation.parameter(:limit, :query, :integer, "Limit") + ], + responses: %{ + 200 => Operation.response("Accounts", "application/json", AccountsResponse) + } + } end def following_operation, do: :ok diff --git a/lib/pleroma/web/api_spec/schemas/accounts_response.ex b/lib/pleroma/web/api_spec/schemas/accounts_response.ex new file mode 100644 index 000000000..b714f59e7 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/accounts_response.ex @@ -0,0 +1,13 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.AccountsResponse do + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "AccountsResponse", + type: :array, + items: Pleroma.Web.ApiSpec.Schemas.Account + }) +end diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 208df5698..1ffccdd1d 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -89,7 +89,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do :update_credentials, :relationships, :show, - :statuses + :statuses, + :followers ] ) @@ -284,6 +285,11 @@ def statuses(%{assigns: %{user: reading_user}} = conn, params) do @doc "GET /api/v1/accounts/:id/followers" def followers(%{assigns: %{user: for_user, account: user}} = conn, params) do + params = + params + |> Enum.map(fn {key, value} -> {to_string(key), value} end) + |> Enum.into(%{}) + followers = cond do for_user && user.id == for_user.id -> MastodonAPI.get_followers(user, params) diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 969256fa4..79b3adc69 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -513,6 +513,7 @@ test "getting followers", %{user: user, conn: conn} do assert [%{"id" => id}] = json_response(conn, 200) assert id == to_string(user.id) + assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec()) end test "getting followers, hide_followers", %{user: user, conn: conn} do @@ -536,6 +537,7 @@ test "getting followers, hide_followers, same user requesting" do |> get("/api/v1/accounts/#{other_user.id}/followers") refute [] == json_response(conn, 200) + assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec()) end test "getting followers, pagination", %{user: user, conn: conn} do @@ -551,6 +553,7 @@ test "getting followers, pagination", %{user: user, conn: conn} do assert [%{"id" => id3}, %{"id" => id2}] = json_response(res_conn, 200) assert id3 == follower3.id assert id2 == follower2.id + assert_schema(json_response(res_conn, 200), "AccountsResponse", ApiSpec.spec()) res_conn = get(conn, "/api/v1/accounts/#{user.id}/followers?max_id=#{follower3.id}") @@ -566,6 +569,7 @@ test "getting followers, pagination", %{user: user, conn: conn} do assert [link_header] = get_resp_header(res_conn, "link") assert link_header =~ ~r/min_id=#{follower2.id}/ assert link_header =~ ~r/max_id=#{follower2.id}/ + assert_schema(json_response(res_conn, 200), "AccountsResponse", ApiSpec.spec()) end end From e105cc12b67e44eb4e19293b850731f300999a4f Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 8 Apr 2020 23:38:07 +0400 Subject: [PATCH 244/581] Add spec for AccountController.following --- .../api_spec/operations/account_operation.ex | 35 +++++++++++++++++-- .../controllers/account_controller.ex | 8 ++++- .../controllers/account_controller_test.exs | 5 +++ 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 070c74758..456d08a45 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -150,8 +150,40 @@ def followers_operation do parameters: [ %Reference{"$ref": "#/components/parameters/accountIdOrNickname"}, Operation.parameter(:max_id, :query, :string, "Max ID"), + Operation.parameter(:min_id, :query, :string, "Mix ID"), Operation.parameter(:since_id, :query, :string, "Since ID"), - Operation.parameter(:limit, :query, :integer, "Limit") + Operation.parameter( + :limit, + :query, + %Schema{type: :integer, default: 20, maximum: 40}, + "Limit" + ) + ], + responses: %{ + 200 => Operation.response("Accounts", "application/json", AccountsResponse) + } + } + end + + def following_operation do + %Operation{ + tags: ["accounts"], + summary: "Following", + operationId: "AccountController.following", + security: [%{"oAuth" => ["read:accounts"]}], + description: + "Accounts which the given account is following, if network is not hidden by the account owner.", + parameters: [ + %Reference{"$ref": "#/components/parameters/accountIdOrNickname"}, + Operation.parameter(:max_id, :query, :string, "Max ID"), + Operation.parameter(:min_id, :query, :string, "Mix ID"), + Operation.parameter(:since_id, :query, :string, "Since ID"), + Operation.parameter( + :limit, + :query, + %Schema{type: :integer, default: 20, maximum: 40}, + "Limit" + ) ], responses: %{ 200 => Operation.response("Accounts", "application/json", AccountsResponse) @@ -159,7 +191,6 @@ def followers_operation do } end - def following_operation, do: :ok def lists_operation, do: :ok def follow_operation, do: :ok def unfollow_operation, do: :ok diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 1ffccdd1d..e74180662 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -90,7 +90,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do :relationships, :show, :statuses, - :followers + :followers, + :following ] ) @@ -304,6 +305,11 @@ def followers(%{assigns: %{user: for_user, account: user}} = conn, params) do @doc "GET /api/v1/accounts/:id/following" def following(%{assigns: %{user: for_user, account: user}} = conn, params) do + params = + params + |> Enum.map(fn {key, value} -> {to_string(key), value} end) + |> Enum.into(%{}) + followers = cond do for_user && user.id == for_user.id -> MastodonAPI.get_friends(user, params) diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 79b3adc69..341c9b015 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -584,6 +584,7 @@ test "getting following", %{user: user, conn: conn} do assert [%{"id" => id}] = json_response(conn, 200) assert id == to_string(other_user.id) + assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec()) end test "getting following, hide_follows, other user requesting" do @@ -598,6 +599,7 @@ test "getting following, hide_follows, other user requesting" do |> get("/api/v1/accounts/#{user.id}/following") assert [] == json_response(conn, 200) + assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec()) end test "getting following, hide_follows, same user requesting" do @@ -627,12 +629,14 @@ test "getting following, pagination", %{user: user, conn: conn} do assert [%{"id" => id3}, %{"id" => id2}] = json_response(res_conn, 200) assert id3 == following3.id assert id2 == following2.id + assert_schema(json_response(res_conn, 200), "AccountsResponse", ApiSpec.spec()) res_conn = get(conn, "/api/v1/accounts/#{user.id}/following?max_id=#{following3.id}") assert [%{"id" => id2}, %{"id" => id1}] = json_response(res_conn, 200) assert id2 == following2.id assert id1 == following1.id + assert_schema(json_response(res_conn, 200), "AccountsResponse", ApiSpec.spec()) res_conn = get(conn, "/api/v1/accounts/#{user.id}/following?limit=1&max_id=#{following3.id}") @@ -643,6 +647,7 @@ test "getting following, pagination", %{user: user, conn: conn} do assert [link_header] = get_resp_header(res_conn, "link") assert link_header =~ ~r/min_id=#{following2.id}/ assert link_header =~ ~r/max_id=#{following2.id}/ + assert_schema(json_response(res_conn, 200), "AccountsResponse", ApiSpec.spec()) end end From 1b680a98ae15035215fa8489f825af72532340c4 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 8 Apr 2020 23:51:46 +0400 Subject: [PATCH 245/581] Add spec for AccountController.lists --- .../api_spec/operations/account_operation.ex | 18 ++++++++++++- lib/pleroma/web/api_spec/schemas/list.ex | 25 +++++++++++++++++++ .../web/api_spec/schemas/lists_response.ex | 16 ++++++++++++ .../controllers/account_controller.ex | 3 ++- .../controllers/account_controller_test.exs | 1 + 5 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 lib/pleroma/web/api_spec/schemas/list.ex create mode 100644 lib/pleroma/web/api_spec/schemas/lists_response.ex diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 456d08a45..ad10f4ec9 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -14,6 +14,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do alias Pleroma.Web.ApiSpec.Schemas.AccountsResponse alias Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest alias Pleroma.Web.ApiSpec.Schemas.BooleanLike + alias Pleroma.Web.ApiSpec.Schemas.ListsResponse alias Pleroma.Web.ApiSpec.Schemas.StatusesResponse alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope @@ -191,7 +192,22 @@ def following_operation do } end - def lists_operation, do: :ok + def lists_operation do + %Operation{ + tags: ["accounts"], + summary: "Lists containing this account", + operationId: "AccountController.lists", + security: [%{"oAuth" => ["read:lists"]}], + description: "User lists that you have added this account to.", + parameters: [ + %Reference{"$ref": "#/components/parameters/accountIdOrNickname"} + ], + responses: %{ + 200 => Operation.response("Lists", "application/json", ListsResponse) + } + } + end + def follow_operation, do: :ok def unfollow_operation, do: :ok def mute_operation, do: :ok diff --git a/lib/pleroma/web/api_spec/schemas/list.ex b/lib/pleroma/web/api_spec/schemas/list.ex new file mode 100644 index 000000000..30fa7db93 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/list.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.ApiSpec.Schemas.List do + alias OpenApiSpex.Schema + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "List", + description: "Response schema for a list", + type: :object, + properties: %{ + id: %Schema{type: :string}, + title: %Schema{type: :string} + }, + example: %{ + "JSON" => %{ + "id" => "123", + "title" => "my list" + } + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/lists_response.ex b/lib/pleroma/web/api_spec/schemas/lists_response.ex new file mode 100644 index 000000000..132454579 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/lists_response.ex @@ -0,0 +1,16 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.ListsResponse do + alias Pleroma.Web.ApiSpec.Schemas.List + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "ListsResponse", + description: "Response schema for lists", + type: :array, + items: List + }) +end diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index e74180662..2c5cd8cde 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -91,7 +91,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do :show, :statuses, :followers, - :following + :following, + :lists ] ) diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 341c9b015..706eea5d9 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -1051,6 +1051,7 @@ test "returns lists to which the account belongs" do |> json_response(200) assert res == [%{"id" => to_string(list.id), "title" => "Test List"}] + assert_schema(res, "ListsResponse", ApiSpec.spec()) end end From 854780c72bc90a55d7005a05861d45771c5aeadf Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Thu, 9 Apr 2020 15:25:24 +0400 Subject: [PATCH 246/581] Add spec for AccountController.follow --- lib/pleroma/web/api_spec.ex | 2 +- .../api_spec/operations/account_operation.ex | 28 +++++++++++---- ...ip_response.ex => account_relationship.ex} | 36 ++++++++++--------- .../schemas/account_relationships_response.ex | 5 ++- .../controllers/account_controller.ex | 7 ++-- .../controllers/account_controller_test.exs | 1 + 6 files changed, 51 insertions(+), 28 deletions(-) rename lib/pleroma/web/api_spec/schemas/{account_relationship_response.ex => account_relationship.ex} (71%) diff --git a/lib/pleroma/web/api_spec.ex b/lib/pleroma/web/api_spec.ex index d11e776d0..b3c1e3ea2 100644 --- a/lib/pleroma/web/api_spec.ex +++ b/lib/pleroma/web/api_spec.ex @@ -39,7 +39,7 @@ def spec do password: %OpenApiSpex.OAuthFlow{ authorizationUrl: "/oauth/authorize", tokenUrl: "/oauth/token", - scopes: %{"read" => "read", "write" => "write"} + scopes: %{"read" => "read", "write" => "write", "follow" => "follow"} } } } diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index ad10f4ec9..a76141f7a 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -10,6 +10,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do alias Pleroma.Web.ApiSpec.Schemas.Account alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse + alias Pleroma.Web.ApiSpec.Schemas.AccountRelationship alias Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse alias Pleroma.Web.ApiSpec.Schemas.AccountsResponse alias Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest @@ -186,9 +187,7 @@ def following_operation do "Limit" ) ], - responses: %{ - 200 => Operation.response("Accounts", "application/json", AccountsResponse) - } + responses: %{200 => Operation.response("Accounts", "application/json", AccountsResponse)} } end @@ -199,16 +198,33 @@ def lists_operation do operationId: "AccountController.lists", security: [%{"oAuth" => ["read:lists"]}], description: "User lists that you have added this account to.", + parameters: [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}], + responses: %{200 => Operation.response("Lists", "application/json", ListsResponse)} + } + end + + def follow_operation do + %Operation{ + tags: ["accounts"], + summary: "Follow", + operationId: "AccountController.follow", + security: [%{"oAuth" => ["follow", "write:follows"]}], + description: "Follow the given account", parameters: [ - %Reference{"$ref": "#/components/parameters/accountIdOrNickname"} + %Reference{"$ref": "#/components/parameters/accountIdOrNickname"}, + Operation.parameter( + :reblogs, + :query, + BooleanLike, + "Receive this account's reblogs in home timeline? Defaults to true." + ) ], responses: %{ - 200 => Operation.response("Lists", "application/json", ListsResponse) + 200 => Operation.response("Relationship", "application/json", AccountRelationship) } } end - def follow_operation, do: :ok def unfollow_operation, do: :ok def mute_operation, do: :ok def unmute_operation, do: :ok diff --git a/lib/pleroma/web/api_spec/schemas/account_relationship_response.ex b/lib/pleroma/web/api_spec/schemas/account_relationship.ex similarity index 71% rename from lib/pleroma/web/api_spec/schemas/account_relationship_response.ex rename to lib/pleroma/web/api_spec/schemas/account_relationship.ex index 9974b946b..7db3b49bb 100644 --- a/lib/pleroma/web/api_spec/schemas/account_relationship_response.ex +++ b/lib/pleroma/web/api_spec/schemas/account_relationship.ex @@ -2,41 +2,43 @@ # Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationshipResponse do +defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationship do alias OpenApiSpex.Schema require OpenApiSpex OpenApiSpex.schema(%{ - title: "AccountRelationshipResponse", - description: "Response schema for an account relationship", + title: "AccountRelationship", + description: "Response schema for relationship", type: :object, properties: %{ - id: %Schema{type: :string}, - following: %Schema{type: :boolean}, - showing_reblogs: %Schema{type: :boolean}, - followed_by: %Schema{type: :boolean}, - blocking: %Schema{type: :boolean}, blocked_by: %Schema{type: :boolean}, + blocking: %Schema{type: :boolean}, + domain_blocking: %Schema{type: :boolean}, + endorsed: %Schema{type: :boolean}, + followed_by: %Schema{type: :boolean}, + following: %Schema{type: :boolean}, + id: %Schema{type: :string}, muting: %Schema{type: :boolean}, muting_notifications: %Schema{type: :boolean}, requested: %Schema{type: :boolean}, - domain_blocking: %Schema{type: :boolean}, - endorsed: %Schema{type: :boolean} + showing_reblogs: %Schema{type: :boolean}, + subscribing: %Schema{type: :boolean} }, example: %{ "JSON" => %{ - "id" => "1", - "following" => true, - "showing_reblogs" => true, - "followed_by" => true, - "blocking" => false, "blocked_by" => false, + "blocking" => false, + "domain_blocking" => false, + "endorsed" => false, + "followed_by" => false, + "following" => false, + "id" => "9tKi3esbG7OQgZ2920", "muting" => false, "muting_notifications" => false, "requested" => false, - "domain_blocking" => false, - "endorsed" => false + "showing_reblogs" => true, + "subscribing" => false } } }) diff --git a/lib/pleroma/web/api_spec/schemas/account_relationships_response.ex b/lib/pleroma/web/api_spec/schemas/account_relationships_response.ex index 2ca632310..960e14db1 100644 --- a/lib/pleroma/web/api_spec/schemas/account_relationships_response.ex +++ b/lib/pleroma/web/api_spec/schemas/account_relationships_response.ex @@ -9,7 +9,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse do title: "AccountRelationshipsResponse", description: "Response schema for account relationships", type: :array, - items: Pleroma.Web.ApiSpec.Schemas.AccountRelationshipResponse, + items: Pleroma.Web.ApiSpec.Schemas.AccountRelationship, example: [ %{ "id" => "1", @@ -22,6 +22,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse do "muting_notifications" => false, "requested" => false, "domain_blocking" => false, + "subscribing" => false, "endorsed" => true }, %{ @@ -35,6 +36,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse do "muting_notifications" => false, "requested" => true, "domain_blocking" => false, + "subscribing" => false, "endorsed" => false }, %{ @@ -48,6 +50,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse do "muting_notifications" => false, "requested" => false, "domain_blocking" => true, + "subscribing" => true, "endorsed" => false } ] diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 2c5cd8cde..d2ad65ef3 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -92,7 +92,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do :statuses, :followers, :following, - :lists + :lists, + :follow ] ) @@ -337,8 +338,8 @@ def follow(%{assigns: %{user: %{id: id}, account: %{id: id}}}, _params) do {:error, :not_found} end - def follow(%{assigns: %{user: follower, account: followed}} = conn, _params) do - with {:ok, follower} <- MastodonAPI.follow(follower, followed, conn.params) do + def follow(%{assigns: %{user: follower, account: followed}} = conn, params) do + with {:ok, follower} <- MastodonAPI.follow(follower, followed, params) do render(conn, "relationship.json", user: follower, target: followed) else {:error, message} -> json_response(conn, :forbidden, %{error: message}) diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 706eea5d9..7a3d58600 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -669,6 +669,7 @@ test "following / unfollowing a user", %{conn: conn} do assert %{"id" => id} = json_response(conn, 200) assert id == to_string(other_user.id) + assert_schema(json_response(conn, 200), "AccountRelationship", ApiSpec.spec()) end test "cancelling follow request", %{conn: conn} do From aa958a6dda7cdcf12e9cd9232e7c6be421610317 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Thu, 9 Apr 2020 17:57:21 +0400 Subject: [PATCH 247/581] Add spec for AccountController.unfollow --- .../web/api_spec/operations/account_operation.ex | 15 ++++++++++++++- .../controllers/account_controller.ex | 3 ++- .../controllers/account_controller_test.exs | 16 ++++++++++++---- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index a76141f7a..8925ebefd 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -225,7 +225,20 @@ def follow_operation do } end - def unfollow_operation, do: :ok + def unfollow_operation do + %Operation{ + tags: ["accounts"], + summary: "Unfollow", + operationId: "AccountController.unfollow", + security: [%{"oAuth" => ["follow", "write:follows"]}], + description: "Unfollow the given account", + parameters: [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}], + responses: %{ + 200 => Operation.response("Relationship", "application/json", AccountRelationship) + } + } + end + def mute_operation, do: :ok def unmute_operation, do: :ok def block_operation, do: :ok diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index d2ad65ef3..1ecce2928 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -93,7 +93,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do :followers, :following, :lists, - :follow + :follow, + :unfollow ] ) diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 7a3d58600..d56e7fb4a 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -660,10 +660,12 @@ test "following / unfollowing a user", %{conn: conn} do ret_conn = post(conn, "/api/v1/accounts/#{other_user.id}/follow") assert %{"id" => _id, "following" => true} = json_response(ret_conn, 200) + assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) ret_conn = post(conn, "/api/v1/accounts/#{other_user.id}/unfollow") assert %{"id" => _id, "following" => false} = json_response(ret_conn, 200) + assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) conn = post(conn, "/api/v1/follows", %{"uri" => other_user.nickname}) @@ -675,11 +677,15 @@ test "following / unfollowing a user", %{conn: conn} do test "cancelling follow request", %{conn: conn} do %{id: other_user_id} = insert(:user, %{locked: true}) - assert %{"id" => ^other_user_id, "following" => false, "requested" => true} = - conn |> post("/api/v1/accounts/#{other_user_id}/follow") |> json_response(:ok) + resp = conn |> post("/api/v1/accounts/#{other_user_id}/follow") |> json_response(:ok) - assert %{"id" => ^other_user_id, "following" => false, "requested" => false} = - conn |> post("/api/v1/accounts/#{other_user_id}/unfollow") |> json_response(:ok) + assert %{"id" => ^other_user_id, "following" => false, "requested" => true} = resp + assert_schema(resp, "AccountRelationship", ApiSpec.spec()) + + resp = conn |> post("/api/v1/accounts/#{other_user_id}/unfollow") |> json_response(:ok) + + assert %{"id" => ^other_user_id, "following" => false, "requested" => false} = resp + assert_schema(resp, "AccountRelationship", ApiSpec.spec()) end test "following without reblogs" do @@ -690,6 +696,7 @@ test "following without reblogs" do ret_conn = post(conn, "/api/v1/accounts/#{followed.id}/follow?reblogs=false") assert %{"showing_reblogs" => false} = json_response(ret_conn, 200) + assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) {:ok, activity} = CommonAPI.post(other_user, %{"status" => "hey"}) {:ok, reblog, _} = CommonAPI.repeat(activity.id, followed) @@ -701,6 +708,7 @@ test "following without reblogs" do ret_conn = post(conn, "/api/v1/accounts/#{followed.id}/follow?reblogs=true") assert %{"showing_reblogs" => true} = json_response(ret_conn, 200) + assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) conn = get(conn, "/api/v1/timelines/home") From e4195d4a684908d58482f9c865375a080e7b78bc Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Thu, 9 Apr 2020 18:28:14 +0400 Subject: [PATCH 248/581] Add specs for AccountController.mute and AccountController.unmute --- .../api_spec/operations/account_operation.ex | 41 ++++++++++++++++++- .../api_spec/schemas/account_mute_request.ex | 24 +++++++++++ .../controllers/account_controller.ex | 10 ++--- .../controllers/account_controller_test.exs | 13 +++++- 4 files changed, 79 insertions(+), 9 deletions(-) create mode 100644 lib/pleroma/web/api_spec/schemas/account_mute_request.ex diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 8925ebefd..62ae2eead 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -10,6 +10,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do alias Pleroma.Web.ApiSpec.Schemas.Account alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse + alias Pleroma.Web.ApiSpec.Schemas.AccountMuteRequest alias Pleroma.Web.ApiSpec.Schemas.AccountRelationship alias Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse alias Pleroma.Web.ApiSpec.Schemas.AccountsResponse @@ -239,8 +240,44 @@ def unfollow_operation do } end - def mute_operation, do: :ok - def unmute_operation, do: :ok + def mute_operation do + %Operation{ + tags: ["accounts"], + summary: "Mute", + operationId: "AccountController.mute", + security: [%{"oAuth" => ["follow", "write:mutes"]}], + requestBody: Helpers.request_body("Parameters", AccountMuteRequest), + description: + "Mute the given account. Clients should filter statuses and notifications from this account, if received (e.g. due to a boost in the Home timeline).", + parameters: [ + %Reference{"$ref": "#/components/parameters/accountIdOrNickname"}, + Operation.parameter( + :notifications, + :query, + %Schema{allOf: [BooleanLike], default: true}, + "Mute notifications in addition to statuses? Defaults to `true`." + ) + ], + responses: %{ + 200 => Operation.response("Relationship", "application/json", AccountRelationship) + } + } + end + + def unmute_operation do + %Operation{ + tags: ["accounts"], + summary: "Unmute", + operationId: "AccountController.unmute", + security: [%{"oAuth" => ["follow", "write:mutes"]}], + description: "Unmute the given account.", + parameters: [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}], + responses: %{ + 200 => Operation.response("Relationship", "application/json", AccountRelationship) + } + } + end + def block_operation, do: :ok def unblock_operation, do: :ok def follows_operation, do: :ok diff --git a/lib/pleroma/web/api_spec/schemas/account_mute_request.ex b/lib/pleroma/web/api_spec/schemas/account_mute_request.ex new file mode 100644 index 000000000..a61f6d04c --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/account_mute_request.ex @@ -0,0 +1,24 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.AccountMuteRequest do + alias OpenApiSpex.Schema + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "AccountMuteRequest", + description: "POST body for muting an account", + type: :object, + properties: %{ + notifications: %Schema{ + type: :boolean, + description: "Mute notifications in addition to statuses? Defaults to true.", + default: true + } + }, + example: %{ + "notifications" => true + } + }) +end diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 1ecce2928..9aba2e094 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -94,7 +94,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do :following, :lists, :follow, - :unfollow + :unfollow, + :mute, + :unmute ] ) @@ -359,10 +361,8 @@ def unfollow(%{assigns: %{user: follower, account: followed}} = conn, _params) d end @doc "POST /api/v1/accounts/:id/mute" - def mute(%{assigns: %{user: muter, account: muted}} = conn, params) do - notifications? = params |> Map.get("notifications", true) |> truthy_param?() - - with {:ok, _user_relationships} <- User.mute(muter, muted, notifications?) do + def mute(%{assigns: %{user: muter, account: muted}, body_params: params} = conn, _params) do + with {:ok, _user_relationships} <- User.mute(muter, muted, params.notifications) do render(conn, "relationship.json", user: muter, target: muted) else {:error, message} -> json_response(conn, :forbidden, %{error: message}) diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index d56e7fb4a..91d4685cb 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -751,32 +751,41 @@ test "following / unfollowing errors", %{user: user, conn: conn} do test "with notifications", %{conn: conn} do other_user = insert(:user) - ret_conn = post(conn, "/api/v1/accounts/#{other_user.id}/mute") + ret_conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/accounts/#{other_user.id}/mute") response = json_response(ret_conn, 200) assert %{"id" => _id, "muting" => true, "muting_notifications" => true} = response + assert_schema(response, "AccountRelationship", ApiSpec.spec()) conn = post(conn, "/api/v1/accounts/#{other_user.id}/unmute") response = json_response(conn, 200) assert %{"id" => _id, "muting" => false, "muting_notifications" => false} = response + assert_schema(response, "AccountRelationship", ApiSpec.spec()) end test "without notifications", %{conn: conn} do other_user = insert(:user) ret_conn = - post(conn, "/api/v1/accounts/#{other_user.id}/mute", %{"notifications" => "false"}) + conn + |> put_req_header("content-type", "multipart/form-data") + |> post("/api/v1/accounts/#{other_user.id}/mute", %{"notifications" => "false"}) response = json_response(ret_conn, 200) assert %{"id" => _id, "muting" => true, "muting_notifications" => false} = response + assert_schema(response, "AccountRelationship", ApiSpec.spec()) conn = post(conn, "/api/v1/accounts/#{other_user.id}/unmute") response = json_response(conn, 200) assert %{"id" => _id, "muting" => false, "muting_notifications" => false} = response + assert_schema(response, "AccountRelationship", ApiSpec.spec()) end end From 68a979b8243b9a5b685df2c13388a93b9ede1900 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Thu, 9 Apr 2020 18:41:18 +0400 Subject: [PATCH 249/581] Add specs for AccountController.block and AccountController.unblock --- .../api_spec/operations/account_operation.ex | 31 +++++++++++++++++-- .../controllers/account_controller.ex | 4 ++- .../controllers/account_controller_test.exs | 2 ++ 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 62ae2eead..73fbe8785 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -278,8 +278,35 @@ def unmute_operation do } end - def block_operation, do: :ok - def unblock_operation, do: :ok + def block_operation do + %Operation{ + tags: ["accounts"], + summary: "Block", + operationId: "AccountController.block", + security: [%{"oAuth" => ["follow", "write:blocks"]}], + description: + "Block the given account. Clients should filter statuses from this account if received (e.g. due to a boost in the Home timeline)", + parameters: [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}], + responses: %{ + 200 => Operation.response("Relationship", "application/json", AccountRelationship) + } + } + end + + def unblock_operation do + %Operation{ + tags: ["accounts"], + summary: "Unblock", + operationId: "AccountController.unblock", + security: [%{"oAuth" => ["follow", "write:blocks"]}], + description: "Unblock the given account.", + parameters: [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}], + responses: %{ + 200 => Operation.response("Relationship", "application/json", AccountRelationship) + } + } + end + def follows_operation, do: :ok def mutes_operation, do: :ok def blocks_operation, do: :ok diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 9aba2e094..c1f70f32c 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -96,7 +96,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do :follow, :unfollow, :mute, - :unmute + :unmute, + :block, + :unblock ] ) diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 91d4685cb..f71b54ade 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -819,10 +819,12 @@ test "blocking / unblocking a user" do ret_conn = post(conn, "/api/v1/accounts/#{other_user.id}/block") assert %{"id" => _id, "blocking" => true} = json_response(ret_conn, 200) + assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) conn = post(conn, "/api/v1/accounts/#{other_user.id}/unblock") assert %{"id" => _id, "blocking" => false} = json_response(conn, 200) + assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) end describe "create account by app" do From ab185d3ea47deb38128dc501acdf27c47c542de2 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Thu, 9 Apr 2020 20:12:09 +0400 Subject: [PATCH 250/581] Add spec for AccountController.follows --- .../api_spec/operations/account_operation.ex | 15 +++++++++++++- .../schemas/account_follows_request.ex | 18 +++++++++++++++++ .../controllers/account_controller.ex | 5 +++-- .../controllers/account_controller_test.exs | 20 +++++++++++++++---- 4 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 lib/pleroma/web/api_spec/schemas/account_follows_request.ex diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 73fbe8785..9fef7ece1 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -10,6 +10,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do alias Pleroma.Web.ApiSpec.Schemas.Account alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse + alias Pleroma.Web.ApiSpec.Schemas.AccountFollowsRequest alias Pleroma.Web.ApiSpec.Schemas.AccountMuteRequest alias Pleroma.Web.ApiSpec.Schemas.AccountRelationship alias Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse @@ -307,7 +308,19 @@ def unblock_operation do } end - def follows_operation, do: :ok + def follows_operation do + %Operation{ + tags: ["accounts"], + summary: "Follows", + operationId: "AccountController.follows", + security: [%{"oAuth" => ["follow", "write:follows"]}], + requestBody: Helpers.request_body("Parameters", AccountFollowsRequest, required: true), + responses: %{ + 200 => Operation.response("Account", "application/json", Account) + } + } + end + def mutes_operation, do: :ok def blocks_operation, do: :ok def endorsements_operation, do: :ok diff --git a/lib/pleroma/web/api_spec/schemas/account_follows_request.ex b/lib/pleroma/web/api_spec/schemas/account_follows_request.ex new file mode 100644 index 000000000..4fbe615d6 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/account_follows_request.ex @@ -0,0 +1,18 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.AccountFollowsRequest do + alias OpenApiSpex.Schema + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "AccountFollowsRequest", + description: "POST body for muting an account", + type: :object, + properties: %{ + uri: %Schema{type: :string} + }, + required: [:uri] + }) +end diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index c1f70f32c..4340b9c84 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -98,7 +98,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do :mute, :unmute, :block, - :unblock + :unblock, + :follows ] ) @@ -401,7 +402,7 @@ def unblock(%{assigns: %{user: blocker, account: blocked}} = conn, _params) do end @doc "POST /api/v1/follows" - def follows(%{assigns: %{user: follower}} = conn, %{"uri" => uri}) do + def follows(%{assigns: %{user: follower}, body_params: %{uri: uri}} = conn, _) do with {_, %User{} = followed} <- {:followed, User.get_cached_by_nickname(uri)}, {_, true} <- {:followed, follower.id != followed.id}, {:ok, follower, followed, _} <- CommonAPI.follow(follower, followed) do diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index f71b54ade..fa2091c5e 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -667,11 +667,14 @@ test "following / unfollowing a user", %{conn: conn} do assert %{"id" => _id, "following" => false} = json_response(ret_conn, 200) assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) - conn = post(conn, "/api/v1/follows", %{"uri" => other_user.nickname}) + conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/follows", %{"uri" => other_user.nickname}) assert %{"id" => id} = json_response(conn, 200) assert id == to_string(other_user.id) - assert_schema(json_response(conn, 200), "AccountRelationship", ApiSpec.spec()) + assert_schema(json_response(conn, 200), "Account", ApiSpec.spec()) end test "cancelling follow request", %{conn: conn} do @@ -728,7 +731,12 @@ test "following / unfollowing errors", %{user: user, conn: conn} do # self follow via uri user = User.get_cached_by_id(user.id) - conn_res = post(conn, "/api/v1/follows", %{"uri" => user.nickname}) + + conn_res = + conn + |> put_req_header("content-type", "multipart/form-data") + |> post("/api/v1/follows", %{"uri" => user.nickname}) + assert %{"error" => "Record not found"} = json_response(conn_res, 404) # follow non existing user @@ -736,7 +744,11 @@ test "following / unfollowing errors", %{user: user, conn: conn} do assert %{"error" => "Record not found"} = json_response(conn_res, 404) # follow non existing user via uri - conn_res = post(conn, "/api/v1/follows", %{"uri" => "doesntexist"}) + conn_res = + conn + |> put_req_header("content-type", "multipart/form-data") + |> post("/api/v1/follows", %{"uri" => "doesntexist"}) + assert %{"error" => "Record not found"} = json_response(conn_res, 404) # unfollow non existing user From 7e0b42d99f3eb9520bc29cc29c06512c55183482 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Thu, 9 Apr 2020 20:34:21 +0400 Subject: [PATCH 251/581] Add specs for AccountController.mutes, AccountController.blocks, AccountController.mutes, AccountController.endorsements --- .../api_spec/operations/account_operation.ex | 41 +++++++++++++++++-- .../controllers/account_controller.ex | 23 +---------- .../controllers/account_controller_test.exs | 2 + 3 files changed, 41 insertions(+), 25 deletions(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 9fef7ece1..9749c3b60 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -321,7 +321,42 @@ def follows_operation do } end - def mutes_operation, do: :ok - def blocks_operation, do: :ok - def endorsements_operation, do: :ok + def mutes_operation do + %Operation{ + tags: ["accounts"], + summary: "Muted accounts", + operationId: "AccountController.mutes", + description: "Accounts the user has muted.", + security: [%{"oAuth" => ["follow", "read:mutes"]}], + responses: %{ + 200 => Operation.response("Accounts", "application/json", AccountsResponse) + } + } + end + + def blocks_operation do + %Operation{ + tags: ["accounts"], + summary: "Blocked users", + operationId: "AccountController.blocks", + description: "View your blocks. See also accounts/:id/{block,unblock}", + security: [%{"oAuth" => ["read:blocks"]}], + responses: %{ + 200 => Operation.response("Accounts", "application/json", AccountsResponse) + } + } + end + + def endorsements_operation do + %Operation{ + tags: ["accounts"], + summary: "Endorsements", + operationId: "AccountController.endorsements", + description: "Not implemented", + security: [%{"oAuth" => ["read:accounts"]}], + responses: %{ + 200 => Operation.response("Empry array", "application/json", %Schema{type: :array}) + } + } + end end diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 4340b9c84..f72c91c51 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -80,28 +80,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do plug(RateLimiter, [name: :app_account_creation] when action == :create) plug(:assign_account_by_id when action in @needs_account) - plug( - OpenApiSpex.Plug.CastAndValidate, - [render_error: Pleroma.Web.ApiSpec.RenderError] - when action in [ - :create, - :verify_credentials, - :update_credentials, - :relationships, - :show, - :statuses, - :followers, - :following, - :lists, - :follow, - :unfollow, - :mute, - :unmute, - :block, - :unblock, - :follows - ] - ) + plug(OpenApiSpex.Plug.CastAndValidate, render_error: Pleroma.Web.ApiSpec.RenderError) action_fallback(Pleroma.Web.MastodonAPI.FallbackController) diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index fa2091c5e..86136f7e4 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -1155,6 +1155,7 @@ test "getting a list of mutes" do other_user_id = to_string(other_user.id) assert [%{"id" => ^other_user_id}] = json_response(conn, 200) + assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec()) end test "getting a list of blocks" do @@ -1170,5 +1171,6 @@ test "getting a list of blocks" do other_user_id = to_string(other_user.id) assert [%{"id" => ^other_user_id}] = json_response(conn, 200) + assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec()) end end From c28aaf9d82a781508eba886bd455767a110d1b7c Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Mon, 13 Apr 2020 21:21:04 +0400 Subject: [PATCH 252/581] Add OpenAPI spec for CustomEmojiController --- .../operations/custom_emoji_operation.ex | 25 +++++++++++ .../web/api_spec/schemas/custom_emoji.ex | 30 +++++++++++++ .../schemas/custom_emojis_response.ex | 42 +++++++++++++++++++ .../controllers/custom_emoji_controller.ex | 4 ++ .../custom_emoji_controller_test.exs | 27 ++++++++++-- 5 files changed, 124 insertions(+), 4 deletions(-) create mode 100644 lib/pleroma/web/api_spec/operations/custom_emoji_operation.ex create mode 100644 lib/pleroma/web/api_spec/schemas/custom_emoji.ex create mode 100644 lib/pleroma/web/api_spec/schemas/custom_emojis_response.ex diff --git a/lib/pleroma/web/api_spec/operations/custom_emoji_operation.ex b/lib/pleroma/web/api_spec/operations/custom_emoji_operation.ex new file mode 100644 index 000000000..cf2215823 --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/custom_emoji_operation.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.ApiSpec.CustomEmojiOperation do + alias OpenApiSpex.Operation + alias Pleroma.Web.ApiSpec.Schemas.CustomEmojisResponse + + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + def index_operation do + %Operation{ + tags: ["custom_emojis"], + summary: "List custom custom emojis", + description: "Returns custom emojis that are available on the server.", + operationId: "CustomEmojiController.index", + responses: %{ + 200 => Operation.response("Custom Emojis", "application/json", CustomEmojisResponse) + } + } + end +end diff --git a/lib/pleroma/web/api_spec/schemas/custom_emoji.ex b/lib/pleroma/web/api_spec/schemas/custom_emoji.ex new file mode 100644 index 000000000..5531b2081 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/custom_emoji.ex @@ -0,0 +1,30 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.CustomEmoji do + alias OpenApiSpex.Schema + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "CustomEmoji", + description: "Response schema for an CustomEmoji", + type: :object, + properties: %{ + shortcode: %Schema{type: :string}, + url: %Schema{type: :string}, + static_url: %Schema{type: :string}, + visible_in_picker: %Schema{type: :boolean}, + category: %Schema{type: :string}, + tags: %Schema{type: :array} + }, + example: %{ + "shortcode" => "aaaa", + "url" => "https://files.mastodon.social/custom_emojis/images/000/007/118/original/aaaa.png", + "static_url" => + "https://files.mastodon.social/custom_emojis/images/000/007/118/static/aaaa.png", + "visible_in_picker" => true + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/custom_emojis_response.ex b/lib/pleroma/web/api_spec/schemas/custom_emojis_response.ex new file mode 100644 index 000000000..01582a63d --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/custom_emojis_response.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.ApiSpec.Schemas.CustomEmojisResponse do + alias Pleroma.Web.ApiSpec.Schemas.CustomEmoji + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "CustomEmojisResponse", + description: "Response schema for custom emojis", + type: :array, + items: CustomEmoji, + example: [ + %{ + "category" => "Fun", + "shortcode" => "blank", + "static_url" => "https://lain.com/emoji/blank.png", + "tags" => ["Fun"], + "url" => "https://lain.com/emoji/blank.png", + "visible_in_picker" => true + }, + %{ + "category" => "Gif,Fun", + "shortcode" => "firefox", + "static_url" => "https://lain.com/emoji/Firefox.gif", + "tags" => ["Gif", "Fun"], + "url" => "https://lain.com/emoji/Firefox.gif", + "visible_in_picker" => true + }, + %{ + "category" => "pack:mixed", + "shortcode" => "sadcat", + "static_url" => "https://lain.com/emoji/mixed/sadcat.png", + "tags" => ["pack:mixed"], + "url" => "https://lain.com/emoji/mixed/sadcat.png", + "visible_in_picker" => true + } + ] + }) +end diff --git a/lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex b/lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex index d82de1db5..3bfebef8b 100644 --- a/lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex @@ -5,6 +5,10 @@ defmodule Pleroma.Web.MastodonAPI.CustomEmojiController do use Pleroma.Web, :controller + plug(OpenApiSpex.Plug.CastAndValidate) + + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.CustomEmojiOperation + def index(conn, _params) do render(conn, "index.json", custom_emojis: Pleroma.Emoji.get_all()) end diff --git a/test/web/mastodon_api/controllers/custom_emoji_controller_test.exs b/test/web/mastodon_api/controllers/custom_emoji_controller_test.exs index 6567a0667..0b2ffa470 100644 --- a/test/web/mastodon_api/controllers/custom_emoji_controller_test.exs +++ b/test/web/mastodon_api/controllers/custom_emoji_controller_test.exs @@ -4,13 +4,18 @@ defmodule Pleroma.Web.MastodonAPI.CustomEmojiControllerTest do use Pleroma.Web.ConnCase, async: true + alias Pleroma.Web.ApiSpec + alias Pleroma.Web.ApiSpec.Schemas.CustomEmoji + alias Pleroma.Web.ApiSpec.Schemas.CustomEmojisResponse + import OpenApiSpex.TestAssertions test "with tags", %{conn: conn} do - [emoji | _body] = - conn - |> get("/api/v1/custom_emojis") - |> json_response(200) + assert resp = + conn + |> get("/api/v1/custom_emojis") + |> json_response(200) + assert [emoji | _body] = resp assert Map.has_key?(emoji, "shortcode") assert Map.has_key?(emoji, "static_url") assert Map.has_key?(emoji, "tags") @@ -18,5 +23,19 @@ test "with tags", %{conn: conn} do assert Map.has_key?(emoji, "category") assert Map.has_key?(emoji, "url") assert Map.has_key?(emoji, "visible_in_picker") + assert_schema(resp, "CustomEmojisResponse", ApiSpec.spec()) + assert_schema(emoji, "CustomEmoji", ApiSpec.spec()) + end + + test "CustomEmoji example matches schema" do + api_spec = ApiSpec.spec() + schema = CustomEmoji.schema() + assert_schema(schema.example, "CustomEmoji", api_spec) + end + + test "CustomEmojisResponse example matches schema" do + api_spec = ApiSpec.spec() + schema = CustomEmojisResponse.schema() + assert_schema(schema.example, "CustomEmojisResponse", api_spec) end end From 4dca712e90a81a1a754608eb4f8e22dae99eb755 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Mon, 13 Apr 2020 22:44:52 +0400 Subject: [PATCH 253/581] Add OpenAPI spec for DomainBlockController --- lib/pleroma/web/api_spec.ex | 2 +- .../operations/domain_block_operation.ex | 64 +++++++++++++++++++ .../api_spec/schemas/domain_block_request.ex | 20 ++++++ .../schemas/domain_blocks_response.ex | 16 +++++ .../controllers/domain_block_controller.ex | 7 +- .../domain_block_controller_test.exs | 20 +++++- 6 files changed, 124 insertions(+), 5 deletions(-) create mode 100644 lib/pleroma/web/api_spec/operations/domain_block_operation.ex create mode 100644 lib/pleroma/web/api_spec/schemas/domain_block_request.ex create mode 100644 lib/pleroma/web/api_spec/schemas/domain_blocks_response.ex diff --git a/lib/pleroma/web/api_spec.ex b/lib/pleroma/web/api_spec.ex index 41e48a085..3890489e3 100644 --- a/lib/pleroma/web/api_spec.ex +++ b/lib/pleroma/web/api_spec.ex @@ -31,7 +31,7 @@ def spec do password: %OpenApiSpex.OAuthFlow{ authorizationUrl: "/oauth/authorize", tokenUrl: "/oauth/token", - scopes: %{"read" => "read"} + scopes: %{"read" => "read", "write" => "write", "follow" => "follow"} } } } diff --git a/lib/pleroma/web/api_spec/operations/domain_block_operation.ex b/lib/pleroma/web/api_spec/operations/domain_block_operation.ex new file mode 100644 index 000000000..dd14837c3 --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/domain_block_operation.ex @@ -0,0 +1,64 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.DomainBlockOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Helpers + alias Pleroma.Web.ApiSpec.Schemas.DomainBlockRequest + alias Pleroma.Web.ApiSpec.Schemas.DomainBlocksResponse + + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + def index_operation do + %Operation{ + tags: ["domain_blocks"], + summary: "Fetch domain blocks", + description: "View domains the user has blocked.", + security: [%{"oAuth" => ["follow", "read:blocks"]}], + operationId: "DomainBlockController.index", + responses: %{ + 200 => Operation.response("Domain blocks", "application/json", DomainBlocksResponse) + } + } + end + + def create_operation do + %Operation{ + tags: ["domain_blocks"], + summary: "Block a domain", + description: """ + Block a domain to: + + - hide all public posts from it + - hide all notifications from it + - remove all followers from it + - prevent following new users from it (but does not remove existing follows) + """, + operationId: "DomainBlockController.create", + requestBody: Helpers.request_body("Parameters", DomainBlockRequest, required: true), + security: [%{"oAuth" => ["follow", "write:blocks"]}], + responses: %{ + 200 => Operation.response("Empty object", "application/json", %Schema{type: :object}) + } + } + end + + def delete_operation do + %Operation{ + tags: ["domain_blocks"], + summary: "Unblock a domain", + description: "Remove a domain block, if it exists in the user's array of blocked domains.", + operationId: "DomainBlockController.delete", + requestBody: Helpers.request_body("Parameters", DomainBlockRequest, required: true), + security: [%{"oAuth" => ["follow", "write:blocks"]}], + responses: %{ + 200 => Operation.response("Empty object", "application/json", %Schema{type: :object}) + } + } + end +end diff --git a/lib/pleroma/web/api_spec/schemas/domain_block_request.ex b/lib/pleroma/web/api_spec/schemas/domain_block_request.ex new file mode 100644 index 000000000..ee9238361 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/domain_block_request.ex @@ -0,0 +1,20 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.DomainBlockRequest do + alias OpenApiSpex.Schema + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "DomainBlockRequest", + type: :object, + properties: %{ + domain: %Schema{type: :string} + }, + required: [:domain], + example: %{ + "domain" => "facebook.com" + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/domain_blocks_response.ex b/lib/pleroma/web/api_spec/schemas/domain_blocks_response.ex new file mode 100644 index 000000000..d895aca4e --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/domain_blocks_response.ex @@ -0,0 +1,16 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.DomainBlocksResponse do + require OpenApiSpex + alias OpenApiSpex.Schema + + OpenApiSpex.schema(%{ + title: "DomainBlocksResponse", + description: "Response schema for domain blocks", + type: :array, + items: %Schema{type: :string}, + example: ["google.com", "facebook.com"] + }) +end diff --git a/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex b/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex index e4156cbe6..84de79413 100644 --- a/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex @@ -8,6 +8,9 @@ defmodule Pleroma.Web.MastodonAPI.DomainBlockController do alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.User + plug(OpenApiSpex.Plug.CastAndValidate) + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.DomainBlockOperation + plug( OAuthScopesPlug, %{scopes: ["follow", "read:blocks"]} when action == :index @@ -26,13 +29,13 @@ def index(%{assigns: %{user: user}} = conn, _) do end @doc "POST /api/v1/domain_blocks" - def create(%{assigns: %{user: blocker}} = conn, %{"domain" => domain}) do + def create(%{assigns: %{user: blocker}, body_params: %{domain: domain}} = conn, _params) do User.block_domain(blocker, domain) json(conn, %{}) end @doc "DELETE /api/v1/domain_blocks" - def delete(%{assigns: %{user: blocker}} = conn, %{"domain" => domain}) do + def delete(%{assigns: %{user: blocker}, body_params: %{domain: domain}} = conn, _params) do User.unblock_domain(blocker, domain) json(conn, %{}) end diff --git a/test/web/mastodon_api/controllers/domain_block_controller_test.exs b/test/web/mastodon_api/controllers/domain_block_controller_test.exs index 8d24b3b88..d66190c90 100644 --- a/test/web/mastodon_api/controllers/domain_block_controller_test.exs +++ b/test/web/mastodon_api/controllers/domain_block_controller_test.exs @@ -6,20 +6,29 @@ defmodule Pleroma.Web.MastodonAPI.DomainBlockControllerTest do use Pleroma.Web.ConnCase alias Pleroma.User + alias Pleroma.Web.ApiSpec + alias Pleroma.Web.ApiSpec.Schemas.DomainBlocksResponse import Pleroma.Factory + import OpenApiSpex.TestAssertions test "blocking / unblocking a domain" do %{user: user, conn: conn} = oauth_access(["write:blocks"]) other_user = insert(:user, %{ap_id: "https://dogwhistle.zone/@pundit"}) - ret_conn = post(conn, "/api/v1/domain_blocks", %{"domain" => "dogwhistle.zone"}) + ret_conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/domain_blocks", %{"domain" => "dogwhistle.zone"}) assert %{} = json_response(ret_conn, 200) user = User.get_cached_by_ap_id(user.ap_id) assert User.blocks?(user, other_user) - ret_conn = delete(conn, "/api/v1/domain_blocks", %{"domain" => "dogwhistle.zone"}) + ret_conn = + conn + |> put_req_header("content-type", "application/json") + |> delete("/api/v1/domain_blocks", %{"domain" => "dogwhistle.zone"}) assert %{} = json_response(ret_conn, 200) user = User.get_cached_by_ap_id(user.ap_id) @@ -41,5 +50,12 @@ test "getting a list of domain blocks" do assert "bad.site" in domain_blocks assert "even.worse.site" in domain_blocks + assert_schema(domain_blocks, "DomainBlocksResponse", ApiSpec.spec()) + end + + test "DomainBlocksResponse example matches schema" do + api_spec = ApiSpec.spec() + schema = DomainBlocksResponse.schema() + assert_schema(schema.example, "DomainBlocksResponse", api_spec) end end From f3725b8fc4506e4bb400878214b9886ed954590f Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Mon, 13 Apr 2020 17:04:43 -0500 Subject: [PATCH 254/581] Fix spelling --- lib/pleroma/pool/connections.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex index 4d4ba913c..acafe1bea 100644 --- a/lib/pleroma/pool/connections.ex +++ b/lib/pleroma/pool/connections.ex @@ -243,7 +243,7 @@ def handle_info({:gun_down, conn_pid, _protocol, _reason, _killed}, state) do @impl true def handle_info({:DOWN, _ref, :process, conn_pid, reason}, state) do - Logger.debug("received DOWM message for #{inspect(conn_pid)} reason -> #{inspect(reason)}") + Logger.debug("received DOWN message for #{inspect(conn_pid)} reason -> #{inspect(reason)}") state = with {key, conn} <- find_conn(state.conns, conn_pid) do From c4e7ed660c0c561d7b014664ca393d39dc7ee29a Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Tue, 14 Apr 2020 08:43:47 +0300 Subject: [PATCH 255/581] fix logger message --- lib/pleroma/plugs/mapped_signature_to_identity_plug.ex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/plugs/mapped_signature_to_identity_plug.ex b/lib/pleroma/plugs/mapped_signature_to_identity_plug.ex index 4f124ed4d..84b7c5d83 100644 --- a/lib/pleroma/plugs/mapped_signature_to_identity_plug.ex +++ b/lib/pleroma/plugs/mapped_signature_to_identity_plug.ex @@ -42,13 +42,13 @@ def call(%{assigns: %{valid_signature: true}, params: %{"actor" => actor}} = con else {:user_match, false} -> Logger.debug("Failed to map identity from signature (payload actor mismatch)") - Logger.debug("key_id=#{key_id_from_conn(conn)}, actor=#{actor}") + Logger.debug("key_id=#{inspect(key_id_from_conn(conn))}, actor=#{inspect(actor)}") assign(conn, :valid_signature, false) # remove me once testsuite uses mapped capabilities instead of what we do now {:user, nil} -> Logger.debug("Failed to map identity from signature (lookup failure)") - Logger.debug("key_id=#{key_id_from_conn(conn)}, actor=#{actor}") + Logger.debug("key_id=#{inspect(key_id_from_conn(conn))}, actor=#{actor}") conn end end @@ -60,7 +60,7 @@ def call(%{assigns: %{valid_signature: true}} = conn, _opts) do else _ -> Logger.debug("Failed to map identity from signature (no payload actor mismatch)") - Logger.debug("key_id=#{key_id_from_conn(conn)}") + Logger.debug("key_id=#{inspect(key_id_from_conn(conn))}") assign(conn, :valid_signature, false) end end From d8b12ffd5909a2698cce50d81b69f00b8893d41b Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 14 Apr 2020 15:06:09 +0200 Subject: [PATCH 256/581] Marker update migration: Don't try to update virtual field. --- priv/repo/migrations/20200210050658_update_markers.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/priv/repo/migrations/20200210050658_update_markers.exs b/priv/repo/migrations/20200210050658_update_markers.exs index b280e156c..db7a355ec 100644 --- a/priv/repo/migrations/20200210050658_update_markers.exs +++ b/priv/repo/migrations/20200210050658_update_markers.exs @@ -32,7 +32,7 @@ defp update_markers do end) Repo.insert_all("markers", markers_attrs, - on_conflict: {:replace, [:last_read_id, :unread_count]}, + on_conflict: {:replace, [:last_read_id]}, conflict_target: [:user_id, :timeline] ) end From 7c060432fcac294269742ac3f452beb3f9a2fdab Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 14 Apr 2020 16:31:30 +0000 Subject: [PATCH 257/581] Revert "Merge branch 'marker-update-fix' into 'develop'" This reverts merge request !2380 --- priv/repo/migrations/20200210050658_update_markers.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/priv/repo/migrations/20200210050658_update_markers.exs b/priv/repo/migrations/20200210050658_update_markers.exs index db7a355ec..b280e156c 100644 --- a/priv/repo/migrations/20200210050658_update_markers.exs +++ b/priv/repo/migrations/20200210050658_update_markers.exs @@ -32,7 +32,7 @@ defp update_markers do end) Repo.insert_all("markers", markers_attrs, - on_conflict: {:replace, [:last_read_id]}, + on_conflict: {:replace, [:last_read_id, :unread_count]}, conflict_target: [:user_id, :timeline] ) end From 4576520461e2e3a1c78133aaf31cb742a2a1a689 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 14 Apr 2020 16:32:22 +0000 Subject: [PATCH 258/581] Revert "Merge branch 'issue/1276' into 'develop'" This reverts merge request !1877 --- CHANGELOG.md | 1 - docs/API/differences_in_mastoapi_responses.md | 17 ++----- lib/pleroma/marker.ex | 45 +---------------- lib/pleroma/notification.ex | 47 +++++------------ .../web/mastodon_api/views/marker_view.ex | 5 +- mix.lock | 50 +++++++++---------- .../20200210050658_update_markers.exs | 39 --------------- test/marker_test.exs | 29 +---------- test/notification_test.exs | 13 ----- .../controllers/marker_controller_test.exs | 10 ++-- .../mastodon_api/views/marker_view_test.exs | 8 ++- 11 files changed, 51 insertions(+), 213 deletions(-) delete mode 100644 priv/repo/migrations/20200210050658_update_markers.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f7fc1802..56b235f6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -123,7 +123,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Mastodon API: `pleroma.thread_muted` to the Status entity - Mastodon API: Mark the direct conversation as read for the author when they send a new direct message - Mastodon API, streaming: Add `pleroma.direct_conversation_id` to the `conversation` stream event payload. -- Mastodon API: Add `pleroma.unread_count` to the Marker entity - Admin API: Render whole status in grouped reports - Mastodon API: User timelines will now respect blocks, unless you are getting the user timeline of somebody you blocked (which would be empty otherwise). - Mastodon API: Favoriting / Repeating a post multiple times will now return the identical response every time. Before, executing that action twice would return an error ("already favorited") on the second try. diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index 0a7520f9e..1059155cf 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -185,15 +185,8 @@ Post here request with `grant_type=refresh_token` to obtain new access token. Re Has theses additional parameters (which are the same as in Pleroma-API): - `fullname`: optional - `bio`: optional - `captcha_solution`: optional, contains provider-specific captcha solution, - `captcha_token`: optional, contains provider-specific captcha token - `token`: invite token required when the registrations aren't public. - - -## Markers - -Has these additional fields under the `pleroma` object: - -- `unread_count`: contains number unread notifications +- `fullname`: optional +- `bio`: optional +- `captcha_solution`: optional, contains provider-specific captcha solution, +- `captcha_token`: optional, contains provider-specific captcha token +- `token`: invite token required when the registrations aren't public. diff --git a/lib/pleroma/marker.ex b/lib/pleroma/marker.ex index 4d82860f5..443927392 100644 --- a/lib/pleroma/marker.ex +++ b/lib/pleroma/marker.ex @@ -9,34 +9,24 @@ defmodule Pleroma.Marker do import Ecto.Query alias Ecto.Multi - alias Pleroma.Notification alias Pleroma.Repo alias Pleroma.User - alias __MODULE__ @timelines ["notifications"] - @type t :: %__MODULE__{} schema "markers" do field(:last_read_id, :string, default: "") field(:timeline, :string, default: "") field(:lock_version, :integer, default: 0) - field(:unread_count, :integer, default: 0, virtual: true) belongs_to(:user, User, type: FlakeId.Ecto.CompatType) timestamps() end - @doc "Gets markers by user and timeline." - @spec get_markers(User.t(), list(String)) :: list(t()) def get_markers(user, timelines \\ []) do - user - |> get_query(timelines) - |> unread_count_query() - |> Repo.all() + Repo.all(get_query(user, timelines)) end - @spec upsert(User.t(), map()) :: {:ok | :error, any()} def upsert(%User{} = user, attrs) do attrs |> Map.take(@timelines) @@ -55,27 +45,6 @@ def upsert(%User{} = user, attrs) do |> Repo.transaction() end - @spec multi_set_last_read_id(Multi.t(), User.t(), String.t()) :: Multi.t() - def multi_set_last_read_id(multi, %User{} = user, "notifications") do - multi - |> Multi.run(:counters, fn _repo, _changes -> - {:ok, %{last_read_id: Repo.one(Notification.last_read_query(user))}} - end) - |> Multi.insert( - :marker, - fn %{counters: attrs} -> - %Marker{timeline: "notifications", user_id: user.id} - |> struct(attrs) - |> Ecto.Changeset.change() - end, - returning: true, - on_conflict: {:replace, [:last_read_id]}, - conflict_target: [:user_id, :timeline] - ) - end - - def multi_set_last_read_id(multi, _, _), do: multi - defp get_marker(user, timeline) do case Repo.find_resource(get_query(user, timeline)) do {:ok, marker} -> %__MODULE__{marker | user: user} @@ -102,16 +71,4 @@ defp get_query(user, timelines) do |> by_user_id(user.id) |> by_timeline(timelines) end - - defp unread_count_query(query) do - from( - q in query, - left_join: n in "notifications", - on: n.user_id == q.user_id and n.seen == false, - group_by: [:id], - select_merge: %{ - unread_count: fragment("count(?)", n.id) - } - ) - end end diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 3084bac3b..04ee510b9 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -5,9 +5,7 @@ defmodule Pleroma.Notification do use Ecto.Schema - alias Ecto.Multi alias Pleroma.Activity - alias Pleroma.Marker alias Pleroma.Notification alias Pleroma.Object alias Pleroma.Pagination @@ -40,17 +38,6 @@ def changeset(%Notification{} = notification, attrs) do |> cast(attrs, [:seen]) end - @spec last_read_query(User.t()) :: Ecto.Queryable.t() - def last_read_query(user) do - from(q in Pleroma.Notification, - where: q.user_id == ^user.id, - where: q.seen == true, - select: type(q.id, :string), - limit: 1, - order_by: [desc: :id] - ) - end - defp for_user_query_ap_id_opts(user, opts) do ap_id_relationships = [:block] ++ @@ -199,23 +186,25 @@ def for_user_since(user, date) do |> Repo.all() end - def set_read_up_to(%{id: user_id} = user, id) do + def set_read_up_to(%{id: user_id} = _user, id) do query = from( n in Notification, where: n.user_id == ^user_id, where: n.id <= ^id, where: n.seen == false, + update: [ + set: [ + seen: true, + updated_at: ^NaiveDateTime.utc_now() + ] + ], # Ideally we would preload object and activities here # but Ecto does not support preloads in update_all select: n.id ) - {:ok, %{ids: {_, notification_ids}}} = - Multi.new() - |> Multi.update_all(:ids, query, set: [seen: true, updated_at: NaiveDateTime.utc_now()]) - |> Marker.multi_set_last_read_id(user, "notifications") - |> Repo.transaction() + {_, notification_ids} = Repo.update_all(query, []) Notification |> where([n], n.id in ^notification_ids) @@ -232,18 +221,11 @@ def set_read_up_to(%{id: user_id} = user, id) do |> Repo.all() end - @spec read_one(User.t(), String.t()) :: - {:ok, Notification.t()} | {:error, Ecto.Changeset.t()} | nil def read_one(%User{} = user, notification_id) do with {:ok, %Notification{} = notification} <- get(user, notification_id) do - Multi.new() - |> Multi.update(:update, changeset(notification, %{seen: true})) - |> Marker.multi_set_last_read_id(user, "notifications") - |> Repo.transaction() - |> case do - {:ok, %{update: notification}} -> {:ok, notification} - {:error, :update, changeset, _} -> {:error, changeset} - end + notification + |> changeset(%{seen: true}) + |> Repo.update() end end @@ -325,11 +307,8 @@ defp do_create_notifications(%Activity{} = activity) do # TODO move to sql, too. def create_notification(%Activity{} = activity, %User{} = user, do_send \\ true) do unless skip?(activity, user) do - {:ok, %{notification: notification}} = - Multi.new() - |> Multi.insert(:notification, %Notification{user_id: user.id, activity: activity}) - |> Marker.multi_set_last_read_id(user, "notifications") - |> Repo.transaction() + notification = %Notification{user_id: user.id, activity: activity} + {:ok, notification} = Repo.insert(notification) if do_send do Streamer.stream(["user", "user:notification"], notification) diff --git a/lib/pleroma/web/mastodon_api/views/marker_view.ex b/lib/pleroma/web/mastodon_api/views/marker_view.ex index 415dae93b..985368fe5 100644 --- a/lib/pleroma/web/mastodon_api/views/marker_view.ex +++ b/lib/pleroma/web/mastodon_api/views/marker_view.ex @@ -10,10 +10,7 @@ def render("markers.json", %{markers: markers}) do Map.put_new(acc, m.timeline, %{ last_read_id: m.last_read_id, version: m.lock_version, - updated_at: NaiveDateTime.to_iso8601(m.updated_at), - pleroma: %{ - unread_count: m.unread_count - } + updated_at: NaiveDateTime.to_iso8601(m.updated_at) }) end) end diff --git a/mix.lock b/mix.lock index 23467bbb4..ba4e3ac44 100644 --- a/mix.lock +++ b/mix.lock @@ -2,8 +2,8 @@ "accept": {:hex, :accept, "0.3.5", "b33b127abca7cc948bbe6caa4c263369abf1347cfa9d8e699c6d214660f10cd1", [:rebar3], [], "hexpm", "11b18c220bcc2eab63b5470c038ef10eb6783bcb1fcdb11aa4137defa5ac1bb8"}, "auto_linker": {:git, "https://git.pleroma.social/pleroma/auto_linker.git", "95e8188490e97505c56636c1379ffdf036c1fdde", [ref: "95e8188490e97505c56636c1379ffdf036c1fdde"]}, "base62": {:hex, :base62, "1.2.1", "4866763e08555a7b3917064e9eef9194c41667276c51b59de2bc42c6ea65f806", [:mix], [{:custom_base, "~> 0.2.1", [hex: :custom_base, repo: "hexpm", optional: false]}], "hexpm", "3b29948de2013d3f93aa898c884a9dff847e7aec75d9d6d8c1dc4c61c2716c42"}, - "base64url": {:hex, :base64url, "0.0.1", "36a90125f5948e3afd7be97662a1504b934dd5dac78451ca6e9abf85a10286be", [:rebar], [], "hexpm", "fab09b20e3f5db886725544cbcf875b8e73ec93363954eb8a1a9ed834aa8c1f9"}, - "bbcode": {:hex, :bbcode, "0.1.1", "0023e2c7814119b2e620b7add67182e3f6019f92bfec9a22da7e99821aceba70", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "5a981b98ac7d366a9b6bf40eac389aaf4d6e623c631e6b6f8a6b571efaafd338"}, + "base64url": {:hex, :base64url, "0.0.1", "36a90125f5948e3afd7be97662a1504b934dd5dac78451ca6e9abf85a10286be", [:rebar], [], "hexpm"}, + "bbcode": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/bbcode.git", "f2d267675e9a7e1ad1ea9beb4cc23382762b66c2", [ref: "v0.2.0"]}, "bbcode_pleroma": {:hex, :bbcode_pleroma, "0.2.0", "d36f5bca6e2f62261c45be30fa9b92725c0655ad45c99025cb1c3e28e25803ef", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "19851074419a5fedb4ef49e1f01b30df504bb5dbb6d6adfc135238063bebd1c3"}, "benchee": {:hex, :benchee, "1.0.1", "66b211f9bfd84bd97e6d1beaddf8fc2312aaabe192f776e8931cb0c16f53a521", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}], "hexpm", "3ad58ae787e9c7c94dd7ceda3b587ec2c64604563e049b2a0e8baafae832addb"}, "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"}, @@ -19,47 +19,47 @@ "cowboy": {:hex, :cowboy, "2.7.0", "91ed100138a764355f43316b1d23d7ff6bdb0de4ea618cb5d8677c93a7a2f115", [:rebar3], [{:cowlib, "~> 2.8.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.7.1", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "04fd8c6a39edc6aaa9c26123009200fc61f92a3a94f3178c527b70b767c6e605"}, "cowlib": {:hex, :cowlib, "2.8.0", "fd0ff1787db84ac415b8211573e9a30a3ebe71b5cbff7f720089972b2319c8a4", [:rebar3], [], "hexpm", "79f954a7021b302186a950a32869dbc185523d99d3e44ce430cd1f3289f41ed4"}, "credo": {:hex, :credo, "1.1.5", "caec7a3cadd2e58609d7ee25b3931b129e739e070539ad1a0cd7efeeb47014f4", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "d0bbd3222607ccaaac5c0340f7f525c627ae4d7aee6c8c8c108922620c5b6446"}, - "crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "48e513299cd28b12c77266c0ed5b1c844368e5c1823724994ae84834f43d6bbe"}, + "crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"}, "crypt": {:git, "https://github.com/msantos/crypt", "1f2b58927ab57e72910191a7ebaeff984382a1d3", [ref: "1f2b58927ab57e72910191a7ebaeff984382a1d3"]}, "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, "db_connection": {:hex, :db_connection, "2.2.1", "caee17725495f5129cb7faebde001dc4406796f12a62b8949f4ac69315080566", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm", "2b02ece62d9f983fcd40954e443b7d9e6589664380e5546b2b9b523cd0fb59e1"}, "decimal": {:hex, :decimal, "1.8.1", "a4ef3f5f3428bdbc0d35374029ffcf4ede8533536fa79896dd450168d9acdf3c", [:mix], [], "hexpm", "3cb154b00225ac687f6cbd4acc4b7960027c757a5152b369923ead9ddbca7aec"}, "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, - "earmark": {:hex, :earmark, "1.4.2", "3aa0bd23bc4c61cf2f1e5d752d1bb470560a6f8539974f767a38923bb20e1d7f", [:mix], [], "hexpm", "5e8806285d8a3a8999bd38e4a73c58d28534c856bc38c44818e5ba85bbda16fb"}, - "ecto": {:hex, :ecto, "3.4.2", "6890af71025769bd27ef62b1ed1925cfe23f7f0460bcb3041da4b705215ff23e", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3959b8a83e086202a4bd86b4b5e6e71f9f1840813de14a57d502d3fc2ef7132"}, + "earmark": {:hex, :earmark, "1.4.3", "364ca2e9710f6bff494117dbbd53880d84bebb692dafc3a78eb50aa3183f2bfd", [:mix], [], "hexpm", "8cf8a291ebf1c7b9539e3cddb19e9cef066c2441b1640f13c34c1d3cfc825fec"}, + "ecto": {:hex, :ecto, "3.4.0", "a7a83ab8359bf816ce729e5e65981ce25b9fc5adfc89c2ea3980f4fed0bfd7c1", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "5eed18252f5b5bbadec56a24112b531343507dbe046273133176b12190ce19cc"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, "ecto_sql": {:hex, :ecto_sql, "3.3.4", "aa18af12eb875fbcda2f75e608b3bd534ebf020fc4f6448e4672fcdcbb081244", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4 or ~> 3.3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5eccbdbf92e3c6f213007a82d5dbba4cd9bb659d1a21331f89f408e4c0efd7a8"}, - "esshd": {:hex, :esshd, "0.1.0", "6f93a2062adb43637edad0ea7357db2702a4b80dd9683482fe00f5134e97f4c1", [:mix], [], "hexpm", "98d0f3c6f4b8a0333170df770c6fe772b3d04564fb514c1a09504cf5ab2f48a5"}, + "esshd": {:hex, :esshd, "0.1.1", "d4dd4c46698093a40a56afecce8a46e246eb35463c457c246dacba2e056f31b5", [:mix], [], "hexpm", "d73e341e3009d390aa36387dc8862860bf9f874c94d9fd92ade2926376f49981"}, "eternal": {:hex, :eternal, "1.2.1", "d5b6b2499ba876c57be2581b5b999ee9bdf861c647401066d3eeed111d096bc4", [:mix], [], "hexpm", "b14f1dc204321429479c569cfbe8fb287541184ed040956c8862cb7a677b8406"}, "ex2ms": {:hex, :ex2ms, "1.5.0", "19e27f9212be9a96093fed8cdfbef0a2b56c21237196d26760f11dfcfae58e97", [:mix], [], "hexpm"}, "ex_aws": {:hex, :ex_aws, "2.1.1", "1e4de2106cfbf4e837de41be41cd15813eabc722315e388f0d6bb3732cec47cd", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "1.6.3 or 1.6.5 or 1.7.1 or 1.8.6 or ~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8", [hex: :jsx, repo: "hexpm", optional: true]}, {:poison, ">= 1.2.0", [hex: :poison, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "06b6fde12b33bb6d65d5d3493e903ba5a56d57a72350c15285a4298338089e10"}, "ex_aws_s3": {:hex, :ex_aws_s3, "2.0.2", "c0258bbdfea55de4f98f0b2f0ca61fe402cc696f573815134beb1866e778f47b", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "0569f5b211b1a3b12b705fe2a9d0e237eb1360b9d76298028df2346cad13097a"}, "ex_const": {:hex, :ex_const, "0.2.4", "d06e540c9d834865b012a17407761455efa71d0ce91e5831e86881b9c9d82448", [:mix], [], "hexpm", "96fd346610cc992b8f896ed26a98be82ac4efb065a0578f334a32d60a3ba9767"}, - "ex_doc": {:hex, :ex_doc, "0.21.2", "caca5bc28ed7b3bdc0b662f8afe2bee1eedb5c3cf7b322feeeb7c6ebbde089d6", [:mix], [{:earmark, "~> 1.3.3 or ~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "f1155337ae17ff7a1255217b4c1ceefcd1860b7ceb1a1874031e7a861b052e39"}, + "ex_doc": {:hex, :ex_doc, "0.21.3", "857ec876b35a587c5d9148a2512e952e24c24345552259464b98bfbb883c7b42", [:mix], [{:earmark, "~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "0db1ee8d1547ab4877c5b5dffc6604ef9454e189928d5ba8967d4a58a801f161"}, "ex_machina": {:hex, :ex_machina, "2.3.0", "92a5ad0a8b10ea6314b876a99c8c9e3f25f4dde71a2a835845b136b9adaf199a", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "b84f6af156264530b312a8ab98ac6088f6b77ae5fe2058305c81434aa01fbaf9"}, "ex_syslogger": {:hex, :ex_syslogger, "1.5.0", "bc936ee3fd13d9e592cb4c3a1e8a55fccd33b05e3aa7b185f211f3ed263ff8f0", [:mix], [{:poison, ">= 1.5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:syslog, "~> 1.0.5", [hex: :syslog, repo: "hexpm", optional: false]}], "hexpm", "f3b4b184dcdd5f356b7c26c6cd72ab0918ba9dfb4061ccfaf519e562942af87b"}, "excoveralls": {:hex, :excoveralls, "0.12.2", "a513defac45c59e310ac42fcf2b8ae96f1f85746410f30b1ff2b710a4b6cd44b", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "151c476331d49b45601ffc45f43cb3a8beb396b02a34e3777fea0ad34ae57d89"}, - "fast_html": {:hex, :fast_html, "1.0.1", "5bc7df4dc4607ec2c314c16414e4111d79a209956c4f5df96602d194c61197f9", [:make, :mix], [], "hexpm", "18e627dd62051a375ef94b197f41e8027c3e8eef0180ab8f81e0543b3dc6900a"}, - "fast_sanitize": {:hex, :fast_sanitize, "0.1.6", "60a5ae96879956dea409a91a77f5dd2994c24cc10f80eefd8f9892ee4c0c7b25", [:mix], [{:fast_html, "~> 1.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "b73f50f0cb522dd0331ea8e8c90b408de42c50f37641219d6364f0e3e7efd22c"}, + "fast_html": {:hex, :fast_html, "1.0.3", "2cc0d4b68496266a1530e0c852cafeaede0bd10cfdee26fda50dc696c203162f", [:make, :mix], [], "hexpm", "ab3d782b639d3c4655fbaec0f9d032c91f8cab8dd791ac7469c2381bc7c32f85"}, + "fast_sanitize": {:hex, :fast_sanitize, "0.1.7", "2a7cd8734c88a2de6de55022104f8a3b87f1fdbe8bbf131d9049764b53d50d0d", [:mix], [{:fast_html, "~> 1.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f39fe8ea08fbac17487c30bf09b7d9f3e12472e51fb07a88ffeb8fd17da8ab67"}, "flake_id": {:hex, :flake_id, "0.1.0", "7716b086d2e405d09b647121a166498a0d93d1a623bead243e1f74216079ccb3", [:mix], [{:base62, "~> 1.2", [hex: :base62, repo: "hexpm", optional: false]}, {:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "31fc8090fde1acd267c07c36ea7365b8604055f897d3a53dd967658c691bd827"}, - "floki": {:hex, :floki, "0.26.0", "4df88977e2e357c6720e1b650f613444bfb48c5acfc6a0c646ab007d08ad13bf", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "e7b66ce7feef5518a9cd9fc7b52dd62a64028bd9cb6d6ad282a0f0fc90a4ae52"}, + "floki": {:hex, :floki, "0.25.0", "b1c9ddf5f32a3a90b43b76f3386ca054325dc2478af020e87b5111c19f2284ac", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "631f4e627c46d5ecd347df5a2accdaf0621c77c3693c5b75a8ad58e84c61f242"}, "gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm", "29bd14a88030980849c7ed2447b8db6d6c9278a28b11a44cafe41b791205440f"}, - "gen_stage": {:hex, :gen_stage, "0.14.3", "d0c66f1c87faa301c1a85a809a3ee9097a4264b2edf7644bf5c123237ef732bf", [:mix], [], "hexpm", "8453e2289d94c3199396eb517d65d6715ef26bcae0ee83eb5ff7a84445458d76"}, - "gen_state_machine": {:hex, :gen_state_machine, "2.0.5", "9ac15ec6e66acac994cc442dcc2c6f9796cf380ec4b08267223014be1c728a95", [:mix], [], "hexpm", "5cacd405e72b2609a7e1f891bddb80c53d0b3b7b0036d1648e7382ca108c41c8"}, - "gettext": {:hex, :gettext, "0.17.1", "8baab33482df4907b3eae22f719da492cee3981a26e649b9c2be1c0192616962", [:mix], [], "hexpm", "f7d97341e536f95b96eef2988d6d4230f7262cf239cda0e2e63123ee0b717222"}, + "gen_stage": {:hex, :gen_stage, "0.14.3", "d0c66f1c87faa301c1a85a809a3ee9097a4264b2edf7644bf5c123237ef732bf", [:mix], [], "hexpm"}, + "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"}, "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.1", "2ce5bf6e535cd0ab02e905ba8c276580bab80052c5c549f53ddea52d72e81f33", [:mix], [{:hackney, "~> 1.15 and >= 1.15.2", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "89149056039084024a284cd703b2d1900d584958dba432132cb21ef35aed7487"}, + "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"}, "inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm", "64a2d30189704ae41ca7dbdd587f5291db5d1dda1414e0774c29ffc81088c1bc"}, "jason": {:hex, :jason, "1.2.0", "10043418c42d2493d0ee212d3fddd25d7ffe484380afad769a0a38795938e448", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "116747dbe057794c3a3e4e143b7c8390b29f634e16c78a7f59ba75bfa6852e7f"}, - "joken": {:hex, :joken, "2.1.0", "bf21a73105d82649f617c5e59a7f8919aa47013d2519ebcc39d998d8d12adda9", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "eb02df7d5526df13063397e051b926b7006d5986d66f399eefc474f560cdad6a"}, - "jose": {:hex, :jose, "1.9.0", "4167c5f6d06ffaebffd15cdb8da61a108445ef5e85ab8f5a7ad926fdf3ada154", [:mix, :rebar3], [{:base64url, "~> 0.0.1", [hex: :base64url, repo: "hexpm", optional: false]}], "hexpm", "6429c4fee52b2dda7861ee19a4f09c8c1ffa213bee3a1ec187828fde95d447ed"}, + "joken": {:hex, :joken, "2.2.0", "2daa1b12be05184aff7b5ace1d43ca1f81345962285fff3f88db74927c954d3a", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "b4f92e30388206f869dd25d1af628a1d99d7586e5cf0672f64d4df84c4d2f5e9"}, + "jose": {:hex, :jose, "1.10.1", "16d8e460dae7203c6d1efa3f277e25b5af8b659febfc2f2eb4bacf87f128b80a", [:mix, :rebar3], [], "hexpm", "3c7ddc8a9394b92891db7c2771da94bf819834a1a4c92e30857b7d582e2f8257"}, "jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"}, - "libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm", "1feaf05ee886815ad047cad7ede17d6910710986148ae09cf73eee2989717b81"}, + "libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm"}, "makeup": {:hex, :makeup, "1.0.0", "671df94cf5a594b739ce03b0d0316aa64312cee2574b6a44becb83cd90fb05dc", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "a10c6eb62cca416019663129699769f0c2ccf39428b3bb3c0cb38c718a0c186d"}, "makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "d4b316c7222a85bbaa2fd7c6e90e37e953257ad196dc229505137c5e505e9eff"}, "meck": {:hex, :meck, "0.8.13", "ffedb39f99b0b99703b8601c6f17c7f76313ee12de6b646e671e3188401f7866", [:rebar3], [], "hexpm", "d34f013c156db51ad57cc556891b9720e6a1c1df5fe2e15af999c84d6cebeb1a"}, @@ -71,37 +71,35 @@ "mogrify": {:hex, :mogrify, "0.6.1", "de1b527514f2d95a7bbe9642eb556061afb337e220cf97adbf3a4e6438ed70af", [:mix], [], "hexpm", "3bc928d817974fa10cc11e6c89b9a9361e37e96dbbf3d868c41094ec05745dcd"}, "mox": {:hex, :mox, "0.5.1", "f86bb36026aac1e6f924a4b6d024b05e9adbed5c63e8daa069bd66fb3292165b", [:mix], [], "hexpm", "052346cf322311c49a0f22789f3698eea030eec09b8c47367f0686ef2634ae14"}, "myhtmlex": {:git, "https://git.pleroma.social/pleroma/myhtmlex.git", "ad0097e2f61d4953bfef20fb6abddf23b87111e6", [ref: "ad0097e2f61d4953bfef20fb6abddf23b87111e6", submodules: true]}, - "nimble_parsec": {:hex, :nimble_parsec, "0.5.1", "c90796ecee0289dbb5ad16d3ad06f957b0cd1199769641c961cfe0b97db190e0", [:mix], [], "hexpm", "00e3ebdc821fb3a36957320d49e8f4bfa310d73ea31c90e5f925dc75e030da8f"}, + "nimble_parsec": {:hex, :nimble_parsec, "0.5.3", "def21c10a9ed70ce22754fdeea0810dafd53c2db3219a0cd54cf5526377af1c6", [:mix], [], "hexpm", "589b5af56f4afca65217a1f3eb3fee7e79b09c40c742fddc1c312b3ac0b3399f"}, "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, "oban": {:hex, :oban, "1.2.0", "7cca94d341be43d220571e28f69131c4afc21095b25257397f50973d3fc59b07", [:mix], [{:ecto_sql, "~> 3.1", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ba5f8b3f7d76967b3e23cf8014f6a13e4ccb33431e4808f036709a7f822362ee"}, "open_api_spex": {:hex, :open_api_spex, "3.6.0", "64205aba9f2607f71b08fd43e3351b9c5e9898ec5ef49fc0ae35890da502ade9", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.1", [hex: :poison, repo: "hexpm", optional: true]}], "hexpm", "126ba3473966277132079cb1d5bf1e3df9e36fe2acd00166e75fd125cecb59c5"}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "0.12.4", "8dd29ed783f2e12195d7e0a4640effc0a7c37e6537da491f1db01839eee6d053", [:mix], [], "hexpm", "595d09db74cb093b1903381c9de423276a931a2480a46a1a5dc7f932a2a6375b"}, - "phoenix": {:hex, :phoenix, "1.4.10", "619e4a545505f562cd294df52294372d012823f4fd9d34a6657a8b242898c255", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "256ad7a140efadc3f0290470369da5bd3de985ec7c706eba07c2641b228974be"}, - "phoenix_ecto": {:hex, :phoenix_ecto, "4.0.0", "c43117a136e7399ea04ecaac73f8f23ee0ffe3e07acfcb8062fe5f4c9f0f6531", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "fe15d9fee5b82f5e64800502011ffe530650d42e1710ae9b14bc4c9be38bf303"}, - "phoenix_html": {:hex, :phoenix_html, "2.13.3", "850e292ff6e204257f5f9c4c54a8cb1f6fbc16ed53d360c2b780a3d0ba333867", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "8b01b3d6d39731ab18aa548d928b5796166d2500755f553725cfe967bafba7d9"}, + "phoenix": {:hex, :phoenix, "1.4.13", "67271ad69b51f3719354604f4a3f968f83aa61c19199343656c9caee057ff3b8", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ab765a0feddb81fc62e2116c827b5f068df85159c162bee760745276ad7ddc1b"}, + "phoenix_ecto": {:hex, :phoenix_ecto, "4.1.0", "a044d0756d0464c5a541b4a0bf4bcaf89bffcaf92468862408290682c73ae50d", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "c5e666a341ff104d0399d8f0e4ff094559b2fde13a5985d4cb5023b2c2ac558b"}, + "phoenix_html": {:hex, :phoenix_html, "2.14.0", "d8c6bc28acc8e65f8ea0080ee05aa13d912c8758699283b8d3427b655aabe284", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "b0bb30eda478a06dbfbe96728061a93833db3861a49ccb516f839ecb08493fbb"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "1.1.2", "496c303bdf1b2e98a9d26e89af5bba3ab487ba3a3735f74bf1f4064d2a845a3e", [:mix], [], "hexpm", "1f13f9f0f3e769a667a6b6828d29dec37497a082d195cc52dbef401a9b69bf38"}, "phoenix_swoosh": {:hex, :phoenix_swoosh, "0.2.0", "a7e0b32077cd6d2323ae15198839b05d9caddfa20663fd85787479e81f89520e", [:mix], [{:phoenix, "~> 1.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.2", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 0.1", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "ebf1bfa7b3c1c850c04929afe02e2e0d7ab135e0706332c865de03e761676b1f"}, "plug": {:hex, :plug, "1.9.0", "8d7c4e26962283ff9f8f3347bd73838e2413fbc38b7bb5467d5924f68f3a5a4a", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "9902eda2c52ada2a096434682e99a2493f5d06a94d6ac6bcfff9805f952350f1"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.1.0", "b75768153c3a8a9e8039d4b25bb9b14efbc58e9c4a6e6a270abff1cd30cbe320", [:mix], [{:cowboy, "~> 2.5", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "6cd8ddd1bd1fbfa54d3fc61d4719c2057dae67615395d58d40437a919a46f132"}, - "plug_crypto": {:hex, :plug_crypto, "1.0.0", "18e49317d3fa343f24620ed22795ec29d4a5e602d52d1513ccea0b07d8ea7d4d", [:mix], [], "hexpm", "73c1682f0e414cfb5d9b95c8e8cd6ffcfdae699e3b05e1db744e58b7be857759"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.1.2", "8b0addb5908c5238fac38e442e81b6fcd32788eaa03246b4d55d147c47c5805e", [:mix], [{:cowboy, "~> 2.5", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "7d722581ce865a237e14da6d946f92704101740a256bd13ec91e63c0b122fc70"}, + "plug_crypto": {:hex, :plug_crypto, "1.1.2", "bdd187572cc26dbd95b87136290425f2b580a116d3fb1f564216918c9730d227", [:mix], [], "hexpm", "6b8b608f895b6ffcfad49c37c7883e8df98ae19c6a28113b02aa1e9c5b22d6b5"}, "plug_static_index_html": {:hex, :plug_static_index_html, "1.0.0", "840123d4d3975585133485ea86af73cb2600afd7f2a976f9f5fd8b3808e636a0", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "79fd4fcf34d110605c26560cbae8f23c603ec4158c08298bd4360fdea90bb5cf"}, "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, "postgrex": {:hex, :postgrex, "0.15.3", "5806baa8a19a68c4d07c7a624ccdb9b57e89cbc573f1b98099e3741214746ae4", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "4737ce62a31747b4c63c12b20c62307e51bb4fcd730ca0c32c280991e0606c90"}, - "prometheus": {:hex, :prometheus, "4.4.1", "1e96073b3ed7788053768fea779cbc896ddc3bdd9ba60687f2ad50b252ac87d6", [:mix, :rebar3], [], "hexpm", "d39f2ce1f3f29f3bf04f915aa3cf9c7cd4d2cee2f975e05f526e06cae9b7c902"}, + "prometheus": {:hex, :prometheus, "4.5.0", "8f4a2246fe0beb50af0f77c5e0a5bb78fe575c34a9655d7f8bc743aad1c6bf76", [:mix, :rebar3], [], "hexpm", "679b5215480fff612b8351f45c839d995a07ce403e42ff02f1c6b20960d41a4e"}, "prometheus_ecto": {:hex, :prometheus_ecto, "1.4.3", "3dd4da1812b8e0dbee81ea58bb3b62ed7588f2eae0c9e97e434c46807ff82311", [:mix], [{:ecto, "~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "8d66289f77f913b37eda81fd287340c17e61a447549deb28efc254532b2bed82"}, "prometheus_ex": {:hex, :prometheus_ex, "3.0.5", "fa58cfd983487fc5ead331e9a3e0aa622c67232b3ec71710ced122c4c453a02f", [:mix], [{:prometheus, "~> 4.0", [hex: :prometheus, repo: "hexpm", optional: false]}], "hexpm", "9fd13404a48437e044b288b41f76e64acd9735fb8b0e3809f494811dfa66d0fb"}, "prometheus_phoenix": {:hex, :prometheus_phoenix, "1.3.0", "c4b527e0b3a9ef1af26bdcfbfad3998f37795b9185d475ca610fe4388fdd3bb5", [:mix], [{:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.3 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "c4d1404ac4e9d3d963da601db2a7d8ea31194f0017057fabf0cfb9bf5a6c8c75"}, "prometheus_plugs": {:hex, :prometheus_plugs, "1.1.5", "25933d48f8af3a5941dd7b621c889749894d8a1082a6ff7c67cc99dec26377c5", [:mix], [{:accept, "~> 0.1", [hex: :accept, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}, {:prometheus_process_collector, "~> 1.1", [hex: :prometheus_process_collector, repo: "hexpm", optional: true]}], "hexpm", "0273a6483ccb936d79ca19b0ab629aef0dba958697c94782bb728b920dfc6a79"}, "quack": {:hex, :quack, "0.1.1", "cca7b4da1a233757fdb44b3334fce80c94785b3ad5a602053b7a002b5a8967bf", [:mix], [{:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: false]}, {:tesla, "~> 1.2.0", [hex: :tesla, repo: "hexpm", optional: false]}], "hexpm", "d736bfa7444112eb840027bb887832a0e403a4a3437f48028c3b29a2dbbd2543"}, - "quantum": {:hex, :quantum, "2.3.4", "72a0e8855e2adc101459eac8454787cb74ab4169de6ca50f670e72142d4960e9", [:mix], [{:calendar, "~> 0.17", [hex: :calendar, repo: "hexpm", optional: true]}, {:crontab, "~> 1.1", [hex: :crontab, repo: "hexpm", optional: false]}, {:gen_stage, "~> 0.12", [hex: :gen_stage, repo: "hexpm", optional: false]}, {:swarm, "~> 3.3", [hex: :swarm, repo: "hexpm", optional: false]}, {:timex, "~> 3.1", [hex: :timex, repo: "hexpm", optional: true]}], "hexpm", "6de553ba9ac0668d3728b699d5065543f3e40c854154017461ee8c09038752da"}, "ranch": {:hex, :ranch, "1.7.1", "6b1fab51b49196860b733a49c07604465a47bdb78aa10c1c16a3d199f7f8c881", [:rebar3], [], "hexpm", "451d8527787df716d99dc36162fca05934915db0b6141bbdac2ea8d3c7afc7d7"}, "recon": {:hex, :recon, "2.5.0", "2f7fcbec2c35034bade2f9717f77059dc54eb4e929a3049ca7ba6775c0bd66cd", [:mix, :rebar3], [], "hexpm", "72f3840fedd94f06315c523f6cecf5b4827233bed7ae3fe135b2a0ebeab5e196"}, "remote_ip": {:git, "https://git.pleroma.social/pleroma/remote_ip.git", "825dc00aaba5a1b7c4202a532b696b595dd3bcb3", [ref: "825dc00aaba5a1b7c4202a532b696b595dd3bcb3"]}, "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"}, - "swarm": {:hex, :swarm, "3.4.0", "64f8b30055d74640d2186c66354b33b999438692a91be275bb89cdc7e401f448", [:mix], [{:gen_state_machine, "~> 2.0", [hex: :gen_state_machine, repo: "hexpm", optional: false]}, {:libring, "~> 1.0", [hex: :libring, repo: "hexpm", optional: false]}], "hexpm", "94884f84783fc1ba027aba8fe8a7dae4aad78c98e9f9c76667ec3471585c08c6"}, "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.0.6", "995970c9aa7feb380ac493302138e308d6e04fd57da95b439a6df5bb3bf75076", [:rebar3], [], "hexpm", "769ddfabd0d2a16f3f9c17eb7509951e0ca4f68363fb26f2ee51a8ec4a49881a"}, diff --git a/priv/repo/migrations/20200210050658_update_markers.exs b/priv/repo/migrations/20200210050658_update_markers.exs deleted file mode 100644 index b280e156c..000000000 --- a/priv/repo/migrations/20200210050658_update_markers.exs +++ /dev/null @@ -1,39 +0,0 @@ -defmodule Pleroma.Repo.Migrations.UpdateMarkers do - use Ecto.Migration - import Ecto.Query - alias Pleroma.Repo - - def up do - update_markers() - end - - def down do - :ok - end - - defp update_markers do - now = NaiveDateTime.utc_now() - - markers_attrs = - from(q in "notifications", - select: %{ - timeline: "notifications", - user_id: q.user_id, - last_read_id: - type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) - }, - group_by: [q.user_id] - ) - |> Repo.all() - |> Enum.map(fn attrs -> - attrs - |> Map.put_new(:inserted_at, now) - |> Map.put_new(:updated_at, now) - end) - - Repo.insert_all("markers", markers_attrs, - on_conflict: {:replace, [:last_read_id, :unread_count]}, - conflict_target: [:user_id, :timeline] - ) - end -end diff --git a/test/marker_test.exs b/test/marker_test.exs index 5b6d0b4a4..c80ae16b6 100644 --- a/test/marker_test.exs +++ b/test/marker_test.exs @@ -8,39 +8,12 @@ defmodule Pleroma.MarkerTest do import Pleroma.Factory - describe "multi_set_unread_count/3" do - test "returns multi" do - user = insert(:user) - - assert %Ecto.Multi{ - operations: [marker: {:run, _}, counters: {:run, _}] - } = - Marker.multi_set_last_read_id( - Ecto.Multi.new(), - user, - "notifications" - ) - end - - test "return empty multi" do - user = insert(:user) - multi = Ecto.Multi.new() - assert Marker.multi_set_last_read_id(multi, user, "home") == multi - end - end - describe "get_markers/2" do test "returns user markers" do user = insert(:user) marker = insert(:marker, user: user) - insert(:notification, user: user) - insert(:notification, user: user) insert(:marker, timeline: "home", user: user) - - assert Marker.get_markers( - user, - ["notifications"] - ) == [%Marker{refresh_record(marker) | unread_count: 2}] + assert Marker.get_markers(user, ["notifications"]) == [refresh_record(marker)] end end diff --git a/test/notification_test.exs b/test/notification_test.exs index f78a47af6..837a9dacd 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -45,9 +45,6 @@ test "notifies someone when they are directly addressed" do assert notified_ids == [other_user.id, third_user.id] assert notification.activity_id == activity.id assert other_notification.activity_id == activity.id - - assert [%Pleroma.Marker{unread_count: 2}] = - Pleroma.Marker.get_markers(other_user, ["notifications"]) end test "it creates a notification for subscribed users" do @@ -413,16 +410,6 @@ test "it sets all notifications as read up to a specified notification ID" do assert n1.seen == true assert n2.seen == true assert n3.seen == false - - assert %Pleroma.Marker{} = - m = - Pleroma.Repo.get_by( - Pleroma.Marker, - user_id: other_user.id, - timeline: "notifications" - ) - - assert m.last_read_id == to_string(n2.id) end end diff --git a/test/web/mastodon_api/controllers/marker_controller_test.exs b/test/web/mastodon_api/controllers/marker_controller_test.exs index 7280abd10..919f295bd 100644 --- a/test/web/mastodon_api/controllers/marker_controller_test.exs +++ b/test/web/mastodon_api/controllers/marker_controller_test.exs @@ -11,7 +11,6 @@ defmodule Pleroma.Web.MastodonAPI.MarkerControllerTest do test "gets markers with correct scopes", %{conn: conn} do user = insert(:user) token = insert(:oauth_token, user: user, scopes: ["read:statuses"]) - insert_list(7, :notification, user: user) {:ok, %{"notifications" => marker}} = Pleroma.Marker.upsert( @@ -30,8 +29,7 @@ test "gets markers with correct scopes", %{conn: conn} do "notifications" => %{ "last_read_id" => "69420", "updated_at" => NaiveDateTime.to_iso8601(marker.updated_at), - "version" => 0, - "pleroma" => %{"unread_count" => 7} + "version" => 0 } } end @@ -72,8 +70,7 @@ test "creates a marker with correct scopes", %{conn: conn} do "notifications" => %{ "last_read_id" => "69420", "updated_at" => _, - "version" => 0, - "pleroma" => %{"unread_count" => 0} + "version" => 0 } } = response end @@ -102,8 +99,7 @@ test "updates exist marker", %{conn: conn} do "notifications" => %{ "last_read_id" => "69888", "updated_at" => NaiveDateTime.to_iso8601(marker.updated_at), - "version" => 0, - "pleroma" => %{"unread_count" => 0} + "version" => 0 } } end diff --git a/test/web/mastodon_api/views/marker_view_test.exs b/test/web/mastodon_api/views/marker_view_test.exs index 48a0a6d33..893cf8857 100644 --- a/test/web/mastodon_api/views/marker_view_test.exs +++ b/test/web/mastodon_api/views/marker_view_test.exs @@ -8,21 +8,19 @@ defmodule Pleroma.Web.MastodonAPI.MarkerViewTest do import Pleroma.Factory test "returns markers" do - marker1 = insert(:marker, timeline: "notifications", last_read_id: "17", unread_count: 5) + marker1 = insert(:marker, timeline: "notifications", last_read_id: "17") marker2 = insert(:marker, timeline: "home", last_read_id: "42") assert MarkerView.render("markers.json", %{markers: [marker1, marker2]}) == %{ "home" => %{ last_read_id: "42", updated_at: NaiveDateTime.to_iso8601(marker2.updated_at), - version: 0, - pleroma: %{unread_count: 0} + version: 0 }, "notifications" => %{ last_read_id: "17", updated_at: NaiveDateTime.to_iso8601(marker1.updated_at), - version: 0, - pleroma: %{unread_count: 5} + version: 0 } } end From 3bf78f2be7c151cd64ed954570dbf8592e836f56 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 14 Apr 2020 11:43:53 -0500 Subject: [PATCH 259/581] Fix Oban not receiving :ok from RichMediaHelper job --- lib/pleroma/web/rich_media/helpers.ex | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/rich_media/helpers.ex b/lib/pleroma/web/rich_media/helpers.ex index 0314535d2..9d3d7f978 100644 --- a/lib/pleroma/web/rich_media/helpers.ex +++ b/lib/pleroma/web/rich_media/helpers.ex @@ -64,5 +64,8 @@ def fetch_data_for_activity(%Activity{data: %{"type" => "Create"}} = activity) d def fetch_data_for_activity(_), do: %{} - def perform(:fetch, %Activity{} = activity), do: fetch_data_for_activity(activity) + def perform(:fetch, %Activity{} = activity) do + fetch_data_for_activity(activity) + :ok + end end From f7e623c11c4b6f4f323a4317e9489092be73f9cd Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Tue, 14 Apr 2020 20:19:08 +0300 Subject: [PATCH 260/581] [#1364] Resolved merge conflicts with `develop`. --- lib/pleroma/notification.ex | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index f517282f7..b76dd176c 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -7,7 +7,6 @@ defmodule Pleroma.Notification do alias Pleroma.Activity alias Pleroma.FollowingRelationship - alias Pleroma.Marker alias Pleroma.Notification alias Pleroma.Object alias Pleroma.Pagination From cc4ff19e34fae2c4ba944e235861b6cb800b7c86 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 15 Apr 2020 00:49:21 +0300 Subject: [PATCH 261/581] openapi: add application/x-www-form-urlencoded to body types Closes #1683 --- lib/pleroma/web/api_spec/helpers.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/helpers.ex b/lib/pleroma/web/api_spec/helpers.ex index 35cf4c0d8..7348dcbee 100644 --- a/lib/pleroma/web/api_spec/helpers.ex +++ b/lib/pleroma/web/api_spec/helpers.ex @@ -4,7 +4,7 @@ defmodule Pleroma.Web.ApiSpec.Helpers do def request_body(description, schema_ref, opts \\ []) do - media_types = ["application/json", "multipart/form-data"] + media_types = ["application/json", "multipart/form-data", "application/x-www-form-urlencoded"] content = media_types From 6bc76df287d7f4beb35c3a55b784b07ce9d833ff Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 15 Apr 2020 12:05:22 +0200 Subject: [PATCH 262/581] Uploads: Sandbox them in the CSP. --- lib/pleroma/plugs/uploaded_media.ex | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/pleroma/plugs/uploaded_media.ex b/lib/pleroma/plugs/uploaded_media.ex index 36ff024a7..94147e0c4 100644 --- a/lib/pleroma/plugs/uploaded_media.ex +++ b/lib/pleroma/plugs/uploaded_media.ex @@ -41,6 +41,7 @@ def call(%{request_path: <<"/", @path, "/", file::binary>>} = conn, opts) do conn -> conn end + |> merge_resp_headers([{"content-security-policy", "sandbox"}]) config = Pleroma.Config.get(Pleroma.Upload) From d3e876aeeebfcdd2821ef8310bd60b785e6df560 Mon Sep 17 00:00:00 2001 From: minibikini Date: Wed, 15 Apr 2020 10:26:44 +0000 Subject: [PATCH 263/581] Apply suggestion to lib/pleroma/web/api_spec/operations/account_operation.ex --- lib/pleroma/web/api_spec/operations/account_operation.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 9749c3b60..7ead44197 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -120,7 +120,8 @@ def statuses_operation do Operation.parameter(:tagged, :query, :string, "With tag"), Operation.parameter(:only_media, :query, BooleanLike, "Only meadia"), Operation.parameter(:with_muted, :query, BooleanLike, "With muted"), - Operation.parameter(:exclude_reblogs, :query, BooleanLike, "Exclude reblobs"), + Operation.parameter(:exclude_reblogs, :query, BooleanLike, "Exclude reblogs"), + Operation.parameter( :exclude_visibilities, :query, From a7feca1604fe7f22d10c0fd3284f14eae8609852 Mon Sep 17 00:00:00 2001 From: minibikini Date: Wed, 15 Apr 2020 10:26:53 +0000 Subject: [PATCH 264/581] Apply suggestion to lib/pleroma/web/api_spec/operations/account_operation.ex --- lib/pleroma/web/api_spec/operations/account_operation.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 7ead44197..1c726a612 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -119,7 +119,7 @@ def statuses_operation do Operation.parameter(:pinned, :query, BooleanLike, "Pinned"), Operation.parameter(:tagged, :query, :string, "With tag"), Operation.parameter(:only_media, :query, BooleanLike, "Only meadia"), - Operation.parameter(:with_muted, :query, BooleanLike, "With muted"), + Operation.parameter(:with_muted, :query, BooleanLike, "Include statuses from muted acccounts."), Operation.parameter(:exclude_reblogs, :query, BooleanLike, "Exclude reblogs"), Operation.parameter( From a794ba655f5a0a8b5512ad718601e5a03b9aebef Mon Sep 17 00:00:00 2001 From: minibikini Date: Wed, 15 Apr 2020 10:27:01 +0000 Subject: [PATCH 265/581] Apply suggestion to lib/pleroma/web/api_spec/operations/account_operation.ex --- lib/pleroma/web/api_spec/operations/account_operation.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 1c726a612..6ce2cfe25 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -118,7 +118,7 @@ def statuses_operation do %Reference{"$ref": "#/components/parameters/accountIdOrNickname"}, Operation.parameter(:pinned, :query, BooleanLike, "Pinned"), Operation.parameter(:tagged, :query, :string, "With tag"), - Operation.parameter(:only_media, :query, BooleanLike, "Only meadia"), + Operation.parameter(:only_media, :query, BooleanLike, "Include only statuses with media attached"), Operation.parameter(:with_muted, :query, BooleanLike, "Include statuses from muted acccounts."), Operation.parameter(:exclude_reblogs, :query, BooleanLike, "Exclude reblogs"), From bfa26b09370ee049f8d70c4112709f2666c590d1 Mon Sep 17 00:00:00 2001 From: minibikini Date: Wed, 15 Apr 2020 10:30:19 +0000 Subject: [PATCH 266/581] Apply suggestion to lib/pleroma/web/api_spec/operations/account_operation.ex --- lib/pleroma/web/api_spec/operations/account_operation.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 6ce2cfe25..7d4f7586d 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -129,7 +129,7 @@ def statuses_operation do "Exclude visibilities" ), Operation.parameter(:max_id, :query, :string, "Max ID"), - Operation.parameter(:min_id, :query, :string, "Mix ID"), + Operation.parameter(:min_id, :query, :string, "Return the oldest statuses newer than this id. "), Operation.parameter(:since_id, :query, :string, "Since ID"), Operation.parameter( :limit, From a45bd91d4e79ed354ab3903b195cf74e4327d4d0 Mon Sep 17 00:00:00 2001 From: minibikini Date: Wed, 15 Apr 2020 10:48:32 +0000 Subject: [PATCH 267/581] Apply suggestion to lib/pleroma/web/api_spec/operations/account_operation.ex --- lib/pleroma/web/api_spec/operations/account_operation.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 7d4f7586d..31dfbb098 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -116,7 +116,7 @@ def statuses_operation do "Statuses posted to the given account. Public (for public statuses only), or user token + `read:statuses` (for private statuses the user is authorized to see)", parameters: [ %Reference{"$ref": "#/components/parameters/accountIdOrNickname"}, - Operation.parameter(:pinned, :query, BooleanLike, "Pinned"), + Operation.parameter(:pinned, :query, BooleanLike, "Include only pinned statuses"), Operation.parameter(:tagged, :query, :string, "With tag"), Operation.parameter(:only_media, :query, BooleanLike, "Include only statuses with media attached"), Operation.parameter(:with_muted, :query, BooleanLike, "Include statuses from muted acccounts."), From 81a4c15816bf4fbe3e70ba1d34adff5dfaee1cbc Mon Sep 17 00:00:00 2001 From: minibikini Date: Wed, 15 Apr 2020 10:48:52 +0000 Subject: [PATCH 268/581] Apply suggestion to lib/pleroma/web/api_spec/operations/account_operation.ex --- lib/pleroma/web/api_spec/operations/account_operation.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 31dfbb098..dee28d1aa 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -128,7 +128,7 @@ def statuses_operation do %Schema{type: :array, items: VisibilityScope}, "Exclude visibilities" ), - Operation.parameter(:max_id, :query, :string, "Max ID"), + Operation.parameter(:max_id, :query, :string, "Return statuses older than this id"), Operation.parameter(:min_id, :query, :string, "Return the oldest statuses newer than this id. "), Operation.parameter(:since_id, :query, :string, "Since ID"), Operation.parameter( From 5a2e45a2189514662f46a293f764682daba7b52d Mon Sep 17 00:00:00 2001 From: minibikini Date: Wed, 15 Apr 2020 11:29:10 +0000 Subject: [PATCH 269/581] Apply suggestion to lib/pleroma/web/api_spec/operations/account_operation.ex --- lib/pleroma/web/api_spec/operations/account_operation.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index dee28d1aa..92622e2ff 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -130,7 +130,7 @@ def statuses_operation do ), Operation.parameter(:max_id, :query, :string, "Return statuses older than this id"), Operation.parameter(:min_id, :query, :string, "Return the oldest statuses newer than this id. "), - Operation.parameter(:since_id, :query, :string, "Since ID"), + Operation.parameter(:since_id, :query, :string, "Return the newest statuses newer than this id. "), Operation.parameter( :limit, :query, From 8ed162b65538ee3cb5b125587fd65657b36ca143 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 15 Apr 2020 15:39:32 +0400 Subject: [PATCH 270/581] Fix formatting --- .../api_spec/operations/account_operation.ex | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 92622e2ff..6c9de51bb 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -118,19 +118,38 @@ def statuses_operation do %Reference{"$ref": "#/components/parameters/accountIdOrNickname"}, Operation.parameter(:pinned, :query, BooleanLike, "Include only pinned statuses"), Operation.parameter(:tagged, :query, :string, "With tag"), - Operation.parameter(:only_media, :query, BooleanLike, "Include only statuses with media attached"), - Operation.parameter(:with_muted, :query, BooleanLike, "Include statuses from muted acccounts."), + Operation.parameter( + :only_media, + :query, + BooleanLike, + "Include only statuses with media attached" + ), + Operation.parameter( + :with_muted, + :query, + BooleanLike, + "Include statuses from muted acccounts." + ), Operation.parameter(:exclude_reblogs, :query, BooleanLike, "Exclude reblogs"), - Operation.parameter( :exclude_visibilities, :query, %Schema{type: :array, items: VisibilityScope}, "Exclude visibilities" ), - Operation.parameter(:max_id, :query, :string, "Return statuses older than this id"), - Operation.parameter(:min_id, :query, :string, "Return the oldest statuses newer than this id. "), - Operation.parameter(:since_id, :query, :string, "Return the newest statuses newer than this id. "), + Operation.parameter(:max_id, :query, :string, "Return statuses older than this ID"), + Operation.parameter( + :min_id, + :query, + :string, + "Return the oldest statuses newer than this ID" + ), + Operation.parameter( + :since_id, + :query, + :string, + "Return the newest statuses newer than this ID" + ), Operation.parameter( :limit, :query, From 22bde21c4f1a84a1fbe733070e8926366a3c01dc Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 15 Apr 2020 15:27:34 +0300 Subject: [PATCH 271/581] remote_ip plug adds remote_ip_found flag --- .../plugs/rate_limiter/rate_limiter.ex | 17 ++-------- lib/pleroma/plugs/remote_ip.ex | 7 ++--- mix.exs | 2 +- mix.lock | 2 +- test/plugs/rate_limiter_test.exs | 31 ++++++++++++------- 5 files changed, 27 insertions(+), 32 deletions(-) diff --git a/lib/pleroma/plugs/rate_limiter/rate_limiter.ex b/lib/pleroma/plugs/rate_limiter/rate_limiter.ex index 1529da717..c51e2c634 100644 --- a/lib/pleroma/plugs/rate_limiter/rate_limiter.ex +++ b/lib/pleroma/plugs/rate_limiter/rate_limiter.ex @@ -110,20 +110,9 @@ defp handle(conn, action_settings) do end def disabled?(conn) do - localhost_or_socket = - case Config.get([Pleroma.Web.Endpoint, :http, :ip]) do - {127, 0, 0, 1} -> true - {0, 0, 0, 0, 0, 0, 0, 1} -> true - {:local, _} -> true - _ -> false - end - - remote_ip_not_found = - if Map.has_key?(conn.assigns, :remote_ip_found), - do: !conn.assigns.remote_ip_found, - else: false - - localhost_or_socket and remote_ip_not_found + if Map.has_key?(conn.assigns, :remote_ip_found), + do: !conn.assigns.remote_ip_found, + else: false end @inspect_bucket_not_found {:error, :not_found} diff --git a/lib/pleroma/plugs/remote_ip.ex b/lib/pleroma/plugs/remote_ip.ex index 0ac9050d0..2eca4f8f6 100644 --- a/lib/pleroma/plugs/remote_ip.ex +++ b/lib/pleroma/plugs/remote_ip.ex @@ -7,8 +7,6 @@ defmodule Pleroma.Plugs.RemoteIp do This is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration. """ - import Plug.Conn - @behaviour Plug @headers ~w[ @@ -28,12 +26,11 @@ defmodule Pleroma.Plugs.RemoteIp do def init(_), do: nil - def call(%{remote_ip: original_remote_ip} = conn, _) do + def call(conn, _) do config = Pleroma.Config.get(__MODULE__, []) if Keyword.get(config, :enabled, false) do - %{remote_ip: new_remote_ip} = conn = RemoteIp.call(conn, remote_ip_opts(config)) - assign(conn, :remote_ip_found, original_remote_ip != new_remote_ip) + RemoteIp.call(conn, remote_ip_opts(config)) else conn end diff --git a/mix.exs b/mix.exs index c781995e0..c5e5fd432 100644 --- a/mix.exs +++ b/mix.exs @@ -183,7 +183,7 @@ defp deps do {:flake_id, "~> 0.1.0"}, {:remote_ip, git: "https://git.pleroma.social/pleroma/remote_ip.git", - ref: "825dc00aaba5a1b7c4202a532b696b595dd3bcb3"}, + ref: "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8"}, {:captcha, git: "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"}, diff --git a/mix.lock b/mix.lock index ba4e3ac44..2b9c54548 100644 --- a/mix.lock +++ b/mix.lock @@ -97,7 +97,7 @@ "quack": {:hex, :quack, "0.1.1", "cca7b4da1a233757fdb44b3334fce80c94785b3ad5a602053b7a002b5a8967bf", [:mix], [{:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: false]}, {:tesla, "~> 1.2.0", [hex: :tesla, repo: "hexpm", optional: false]}], "hexpm", "d736bfa7444112eb840027bb887832a0e403a4a3437f48028c3b29a2dbbd2543"}, "ranch": {:hex, :ranch, "1.7.1", "6b1fab51b49196860b733a49c07604465a47bdb78aa10c1c16a3d199f7f8c881", [:rebar3], [], "hexpm", "451d8527787df716d99dc36162fca05934915db0b6141bbdac2ea8d3c7afc7d7"}, "recon": {:hex, :recon, "2.5.0", "2f7fcbec2c35034bade2f9717f77059dc54eb4e929a3049ca7ba6775c0bd66cd", [:mix, :rebar3], [], "hexpm", "72f3840fedd94f06315c523f6cecf5b4827233bed7ae3fe135b2a0ebeab5e196"}, - "remote_ip": {:git, "https://git.pleroma.social/pleroma/remote_ip.git", "825dc00aaba5a1b7c4202a532b696b595dd3bcb3", [ref: "825dc00aaba5a1b7c4202a532b696b595dd3bcb3"]}, + "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"}, "sweet_xml": {:hex, :sweet_xml, "0.6.6", "fc3e91ec5dd7c787b6195757fbcf0abc670cee1e4172687b45183032221b66b8", [:mix], [], "hexpm", "2e1ec458f892ffa81f9f8386e3f35a1af6db7a7a37748a64478f13163a1f3573"}, diff --git a/test/plugs/rate_limiter_test.exs b/test/plugs/rate_limiter_test.exs index 0ce9f3a0a..4d3d694f4 100644 --- a/test/plugs/rate_limiter_test.exs +++ b/test/plugs/rate_limiter_test.exs @@ -5,8 +5,10 @@ defmodule Pleroma.Plugs.RateLimiterTest do use Pleroma.Web.ConnCase + alias Phoenix.ConnTest alias Pleroma.Config alias Pleroma.Plugs.RateLimiter + alias Plug.Conn import Pleroma.Factory import Pleroma.Tests.Helpers, only: [clear_config: 1, clear_config: 2] @@ -36,8 +38,15 @@ test "config is required for plug to work" do end test "it is disabled if it remote ip plug is enabled but no remote ip is found" do - Config.put([Pleroma.Web.Endpoint, :http, :ip], {127, 0, 0, 1}) - assert RateLimiter.disabled?(Plug.Conn.assign(build_conn(), :remote_ip_found, false)) + assert RateLimiter.disabled?(Conn.assign(build_conn(), :remote_ip_found, false)) + end + + test "it is enabled if remote ip found" do + refute RateLimiter.disabled?(Conn.assign(build_conn(), :remote_ip_found, true)) + end + + test "it is enabled if remote_ip_found flag doesn't exist" do + refute RateLimiter.disabled?(build_conn()) end test "it restricts based on config values" do @@ -58,7 +67,7 @@ test "it restricts based on config values" do end conn = RateLimiter.call(conn, plug_opts) - assert %{"error" => "Throttled"} = Phoenix.ConnTest.json_response(conn, :too_many_requests) + assert %{"error" => "Throttled"} = ConnTest.json_response(conn, :too_many_requests) assert conn.halted Process.sleep(50) @@ -68,7 +77,7 @@ test "it restricts based on config values" do conn = RateLimiter.call(conn, plug_opts) assert {1, 4} = RateLimiter.inspect_bucket(conn, limiter_name, plug_opts) - refute conn.status == Plug.Conn.Status.code(:too_many_requests) + refute conn.status == Conn.Status.code(:too_many_requests) refute conn.resp_body refute conn.halted end @@ -98,7 +107,7 @@ test "`params` option allows different queries to be tracked independently" do plug_opts = RateLimiter.init(name: limiter_name, params: ["id"]) conn = build_conn(:get, "/?id=1") - conn = Plug.Conn.fetch_query_params(conn) + conn = Conn.fetch_query_params(conn) conn_2 = build_conn(:get, "/?id=2") RateLimiter.call(conn, plug_opts) @@ -119,7 +128,7 @@ test "it supports combination of options modifying bucket name" do id = "100" conn = build_conn(:get, "/?id=#{id}") - conn = Plug.Conn.fetch_query_params(conn) + conn = Conn.fetch_query_params(conn) conn_2 = build_conn(:get, "/?id=#{101}") RateLimiter.call(conn, plug_opts) @@ -147,13 +156,13 @@ test "are restricted based on remote IP" do conn = RateLimiter.call(conn, plug_opts) - assert %{"error" => "Throttled"} = Phoenix.ConnTest.json_response(conn, :too_many_requests) + assert %{"error" => "Throttled"} = ConnTest.json_response(conn, :too_many_requests) assert conn.halted conn_2 = RateLimiter.call(conn_2, plug_opts) assert {1, 4} = RateLimiter.inspect_bucket(conn_2, limiter_name, plug_opts) - refute conn_2.status == Plug.Conn.Status.code(:too_many_requests) + refute conn_2.status == Conn.Status.code(:too_many_requests) refute conn_2.resp_body refute conn_2.halted end @@ -187,7 +196,7 @@ test "can have limits separate from unauthenticated connections" do conn = RateLimiter.call(conn, plug_opts) - assert %{"error" => "Throttled"} = Phoenix.ConnTest.json_response(conn, :too_many_requests) + assert %{"error" => "Throttled"} = ConnTest.json_response(conn, :too_many_requests) assert conn.halted end @@ -210,12 +219,12 @@ test "different users are counted independently" do end conn = RateLimiter.call(conn, plug_opts) - assert %{"error" => "Throttled"} = Phoenix.ConnTest.json_response(conn, :too_many_requests) + assert %{"error" => "Throttled"} = ConnTest.json_response(conn, :too_many_requests) assert conn.halted conn_2 = RateLimiter.call(conn_2, plug_opts) assert {1, 4} = RateLimiter.inspect_bucket(conn_2, limiter_name, plug_opts) - refute conn_2.status == Plug.Conn.Status.code(:too_many_requests) + refute conn_2.status == Conn.Status.code(:too_many_requests) refute conn_2.resp_body refute conn_2.halted end From 0e647ff55aa3128f45cd9df79b8af06da57c009e Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 15 Apr 2020 16:45:45 +0400 Subject: [PATCH 272/581] Abstract pagination params in OpenAPI spec --- lib/pleroma/web/api_spec/helpers.ex | 22 ++++ .../api_spec/operations/account_operation.ex | 108 ++++++------------ 2 files changed, 57 insertions(+), 73 deletions(-) diff --git a/lib/pleroma/web/api_spec/helpers.ex b/lib/pleroma/web/api_spec/helpers.ex index 7348dcbee..ce40fb9e8 100644 --- a/lib/pleroma/web/api_spec/helpers.ex +++ b/lib/pleroma/web/api_spec/helpers.ex @@ -3,6 +3,9 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Helpers do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + def request_body(description, schema_ref, opts \\ []) do media_types = ["application/json", "multipart/form-data", "application/x-www-form-urlencoded"] @@ -24,4 +27,23 @@ def request_body(description, schema_ref, opts \\ []) do required: opts[:required] || false } end + + def pagination_params do + [ + Operation.parameter(:max_id, :query, :string, "Return items older than this ID"), + Operation.parameter(:min_id, :query, :string, "Return the oldest items newer than this ID"), + Operation.parameter( + :since_id, + :query, + :string, + "Return the newest items newer than this ID" + ), + Operation.parameter( + :limit, + :query, + %Schema{type: :integer, default: 20, maximum: 40}, + "Limit" + ) + ] + end end diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 6c9de51bb..fe44a917a 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -6,7 +6,6 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do alias OpenApiSpex.Operation alias OpenApiSpex.Reference alias OpenApiSpex.Schema - alias Pleroma.Web.ApiSpec.Helpers alias Pleroma.Web.ApiSpec.Schemas.Account alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse @@ -21,6 +20,8 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do alias Pleroma.Web.ApiSpec.Schemas.StatusesResponse alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope + import Pleroma.Web.ApiSpec.Helpers + @spec open_api_operation(atom) :: Operation.t() def open_api_operation(action) do operation = String.to_existing_atom("#{action}_operation") @@ -35,7 +36,7 @@ def create_operation do description: "Creates a user and account records. Returns an account access token for the app that initiated the request. The app should save this token for later, and should wait for the user to confirm their account by clicking a link in their email inbox.", operationId: "AccountController.create", - requestBody: Helpers.request_body("Parameters", AccountCreateRequest, required: true), + requestBody: request_body("Parameters", AccountCreateRequest, required: true), responses: %{ 200 => Operation.response("Account", "application/json", AccountCreateResponse) } @@ -62,8 +63,7 @@ def update_credentials_operation do description: "Update the user's display and preferences.", operationId: "AccountController.update_credentials", security: [%{"oAuth" => ["write:accounts"]}], - requestBody: - Helpers.request_body("Parameters", AccountUpdateCredentialsRequest, required: true), + requestBody: request_body("Parameters", AccountUpdateCredentialsRequest, required: true), responses: %{ 200 => Operation.response("Account", "application/json", Account) } @@ -114,49 +114,31 @@ def statuses_operation do operationId: "AccountController.statuses", description: "Statuses posted to the given account. Public (for public statuses only), or user token + `read:statuses` (for private statuses the user is authorized to see)", - parameters: [ - %Reference{"$ref": "#/components/parameters/accountIdOrNickname"}, - Operation.parameter(:pinned, :query, BooleanLike, "Include only pinned statuses"), - Operation.parameter(:tagged, :query, :string, "With tag"), - Operation.parameter( - :only_media, - :query, - BooleanLike, - "Include only statuses with media attached" - ), - Operation.parameter( - :with_muted, - :query, - BooleanLike, - "Include statuses from muted acccounts." - ), - Operation.parameter(:exclude_reblogs, :query, BooleanLike, "Exclude reblogs"), - Operation.parameter( - :exclude_visibilities, - :query, - %Schema{type: :array, items: VisibilityScope}, - "Exclude visibilities" - ), - Operation.parameter(:max_id, :query, :string, "Return statuses older than this ID"), - Operation.parameter( - :min_id, - :query, - :string, - "Return the oldest statuses newer than this ID" - ), - Operation.parameter( - :since_id, - :query, - :string, - "Return the newest statuses newer than this ID" - ), - Operation.parameter( - :limit, - :query, - %Schema{type: :integer, default: 20, maximum: 40}, - "Limit" - ) - ], + parameters: + [ + %Reference{"$ref": "#/components/parameters/accountIdOrNickname"}, + Operation.parameter(:pinned, :query, BooleanLike, "Include only pinned statuses"), + Operation.parameter(:tagged, :query, :string, "With tag"), + Operation.parameter( + :only_media, + :query, + BooleanLike, + "Include only statuses with media attached" + ), + Operation.parameter( + :with_muted, + :query, + BooleanLike, + "Include statuses from muted acccounts." + ), + Operation.parameter(:exclude_reblogs, :query, BooleanLike, "Exclude reblogs"), + Operation.parameter( + :exclude_visibilities, + :query, + %Schema{type: :array, items: VisibilityScope}, + "Exclude visibilities" + ) + ] ++ pagination_params(), responses: %{ 200 => Operation.response("Statuses", "application/json", StatusesResponse) } @@ -171,18 +153,8 @@ def followers_operation do security: [%{"oAuth" => ["read:accounts"]}], description: "Accounts which follow the given account, if network is not hidden by the account owner.", - parameters: [ - %Reference{"$ref": "#/components/parameters/accountIdOrNickname"}, - Operation.parameter(:max_id, :query, :string, "Max ID"), - Operation.parameter(:min_id, :query, :string, "Mix ID"), - Operation.parameter(:since_id, :query, :string, "Since ID"), - Operation.parameter( - :limit, - :query, - %Schema{type: :integer, default: 20, maximum: 40}, - "Limit" - ) - ], + parameters: + [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}] ++ pagination_params(), responses: %{ 200 => Operation.response("Accounts", "application/json", AccountsResponse) } @@ -197,18 +169,8 @@ def following_operation do security: [%{"oAuth" => ["read:accounts"]}], description: "Accounts which the given account is following, if network is not hidden by the account owner.", - parameters: [ - %Reference{"$ref": "#/components/parameters/accountIdOrNickname"}, - Operation.parameter(:max_id, :query, :string, "Max ID"), - Operation.parameter(:min_id, :query, :string, "Mix ID"), - Operation.parameter(:since_id, :query, :string, "Since ID"), - Operation.parameter( - :limit, - :query, - %Schema{type: :integer, default: 20, maximum: 40}, - "Limit" - ) - ], + parameters: + [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}] ++ pagination_params(), responses: %{200 => Operation.response("Accounts", "application/json", AccountsResponse)} } end @@ -267,7 +229,7 @@ def mute_operation do summary: "Mute", operationId: "AccountController.mute", security: [%{"oAuth" => ["follow", "write:mutes"]}], - requestBody: Helpers.request_body("Parameters", AccountMuteRequest), + requestBody: request_body("Parameters", AccountMuteRequest), description: "Mute the given account. Clients should filter statuses and notifications from this account, if received (e.g. due to a boost in the Home timeline).", parameters: [ @@ -334,7 +296,7 @@ def follows_operation do summary: "Follows", operationId: "AccountController.follows", security: [%{"oAuth" => ["follow", "write:follows"]}], - requestBody: Helpers.request_body("Parameters", AccountFollowsRequest, required: true), + requestBody: request_body("Parameters", AccountFollowsRequest, required: true), responses: %{ 200 => Operation.response("Account", "application/json", Account) } From 16f4787bf7e4849192d999eb2177ca7e1a34fbc9 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 15 Apr 2020 16:51:37 +0400 Subject: [PATCH 273/581] Add a TODO note --- lib/pleroma/web/activity_pub/activity_pub.ex | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 1909ce097..5926a6cad 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1157,6 +1157,8 @@ defp restrict_unlisted(query) do ) end + # TODO: when all endpoints migrated to OpenAPI compare `pinned` with `true` (boolean) only, + # the same for `restrict_media/2`, `restrict_replies/2`, 'restrict_reblogs/2' and `restrict_muted/2` defp restrict_pinned(query, %{"pinned" => pinned, "pinned_activity_ids" => ids}) when pinned in [true, "true", "1"] do from(activity in query, where: activity.id in ^ids) From 65f04b7806e342ed8967e5fa760e1509a776036e Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 15 Apr 2020 17:16:32 +0400 Subject: [PATCH 274/581] Fix credo warning --- lib/pleroma/web/activity_pub/activity_pub.ex | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 5926a6cad..fa913a2aa 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1158,7 +1158,9 @@ defp restrict_unlisted(query) do end # TODO: when all endpoints migrated to OpenAPI compare `pinned` with `true` (boolean) only, - # the same for `restrict_media/2`, `restrict_replies/2`, 'restrict_reblogs/2' and `restrict_muted/2` + # the same for `restrict_media/2`, `restrict_replies/2`, 'restrict_reblogs/2' + # and `restrict_muted/2` + defp restrict_pinned(query, %{"pinned" => pinned, "pinned_activity_ids" => ids}) when pinned in [true, "true", "1"] do from(activity in query, where: activity.id in ^ids) From aa0a4a1e78655024e992f9c677efed45593ab7b8 Mon Sep 17 00:00:00 2001 From: Ilja Date: Wed, 15 Apr 2020 19:03:27 +0200 Subject: [PATCH 275/581] small fix in the rewrite_policy example --- docs/configuration/mrf.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration/mrf.md b/docs/configuration/mrf.md index c3957c255..287416b2a 100644 --- a/docs/configuration/mrf.md +++ b/docs/configuration/mrf.md @@ -113,7 +113,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.RewritePolicy do @impl true def describe do - {:ok, %{mrf_sample: %{content: "new message content"}}}` + {:ok, %{mrf_sample: %{content: "new message content"}}} end end ``` From bde1189c349dc114aca2e9310dda840a1007825f Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Wed, 15 Apr 2020 21:19:16 +0300 Subject: [PATCH 276/581] [#2349] Made :skip_plug/2 prevent plug from being executed even if explicitly called. Refactoring. Tests. --- lib/pleroma/plugs/auth_expected_plug.ex | 4 ++ lib/pleroma/plugs/oauth_scopes_plug.ex | 6 +-- lib/pleroma/tests/oauth_test_controller.ex | 31 +++++++++++++ lib/pleroma/web/router.ex | 11 +++++ lib/pleroma/web/web.ex | 32 +++++++++++-- test/plugs/oauth_scopes_plug_test.exs | 13 ++++++ test/web/auth/oauth_test_controller_test.exs | 49 ++++++++++++++++++++ 7 files changed, 140 insertions(+), 6 deletions(-) create mode 100644 lib/pleroma/tests/oauth_test_controller.ex create mode 100644 test/web/auth/oauth_test_controller_test.exs diff --git a/lib/pleroma/plugs/auth_expected_plug.ex b/lib/pleroma/plugs/auth_expected_plug.ex index 9e4a4bec8..f79597dc3 100644 --- a/lib/pleroma/plugs/auth_expected_plug.ex +++ b/lib/pleroma/plugs/auth_expected_plug.ex @@ -10,4 +10,8 @@ def init(options), do: options def call(conn, _) do put_private(conn, :auth_expected, true) end + + def auth_expected?(conn) do + conn.private[:auth_expected] + end end diff --git a/lib/pleroma/plugs/oauth_scopes_plug.ex b/lib/pleroma/plugs/oauth_scopes_plug.ex index b09e1bb4d..66f48c28c 100644 --- a/lib/pleroma/plugs/oauth_scopes_plug.ex +++ b/lib/pleroma/plugs/oauth_scopes_plug.ex @@ -10,13 +10,13 @@ defmodule Pleroma.Plugs.OAuthScopesPlug do alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug alias Pleroma.Plugs.PlugHelper + use Pleroma.Web, :plug + @behaviour Plug def init(%{scopes: _} = options), do: options - def call(%Plug.Conn{assigns: assigns} = conn, %{scopes: scopes} = options) do - conn = PlugHelper.append_to_called_plugs(conn, __MODULE__) - + def perform(%Plug.Conn{assigns: assigns} = conn, %{scopes: scopes} = options) do op = options[:op] || :| token = assigns[:token] diff --git a/lib/pleroma/tests/oauth_test_controller.ex b/lib/pleroma/tests/oauth_test_controller.ex new file mode 100644 index 000000000..58d517f78 --- /dev/null +++ b/lib/pleroma/tests/oauth_test_controller.ex @@ -0,0 +1,31 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +# A test controller reachable only in :test env. +# Serves to test OAuth scopes check skipping / enforcement. +defmodule Pleroma.Tests.OAuthTestController do + @moduledoc false + + use Pleroma.Web, :controller + + alias Pleroma.Plugs.OAuthScopesPlug + + plug(:skip_plug, OAuthScopesPlug when action == :skipped_oauth) + + plug(OAuthScopesPlug, %{scopes: ["read"]} when action != :missed_oauth) + + def skipped_oauth(conn, _params) do + noop(conn) + end + + def performed_oauth(conn, _params) do + noop(conn) + end + + def missed_oauth(conn, _params) do + noop(conn) + end + + defp noop(conn), do: json(conn, %{}) +end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 8d13cd6c9..c85ad9f8b 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -672,6 +672,17 @@ defmodule Pleroma.Web.Router do end end + # Test-only routes needed to test action dispatching and plug chain execution + if Pleroma.Config.get(:env) == :test do + scope "/test/authenticated_api", Pleroma.Tests do + pipe_through(:authenticated_api) + + for action <- [:skipped_oauth, :performed_oauth, :missed_oauth] do + get("/#{action}", OAuthTestController, action) + end + end + end + scope "/", Pleroma.Web.MongooseIM do get("/user_exists", MongooseIMController, :user_exists) get("/check_password", MongooseIMController, :check_password) diff --git a/lib/pleroma/web/web.ex b/lib/pleroma/web/web.ex index 1af29ce78..ae7c94640 100644 --- a/lib/pleroma/web/web.ex +++ b/lib/pleroma/web/web.ex @@ -37,15 +37,21 @@ defp set_put_layout(conn, _) do put_layout(conn, Pleroma.Config.get(:app_layout, "app.html")) end - # Marks a plug as intentionally skipped - # (states that the plug is not called for a good reason, not by a mistake) + # Marks a plug intentionally skipped and blocks its execution if it's present in plugs chain defp skip_plug(conn, plug_module) do + try do + plug_module.ensure_skippable() + rescue + UndefinedFunctionError -> + raise "#{plug_module} is not skippable. Append `use Pleroma.Web, :plug` to its code." + end + PlugHelper.append_to_skipped_plugs(conn, plug_module) end # Here we can apply before-action hooks (e.g. verify whether auth checks were preformed) defp action(conn, params) do - if conn.private[:auth_expected] && + if Pleroma.Plugs.AuthExpectedPlug.auth_expected?(conn) && not PlugHelper.plug_called_or_skipped?(conn, Pleroma.Plugs.OAuthScopesPlug) do conn |> render_error( @@ -119,6 +125,26 @@ def channel do end end + def plug do + quote do + alias Pleroma.Plugs.PlugHelper + + def ensure_skippable, do: :noop + + @impl Plug + @doc "If marked as skipped, returns `conn`, and calls `perform/2` otherwise." + def call(%Plug.Conn{} = conn, options) do + if PlugHelper.plug_skipped?(conn, __MODULE__) do + conn + else + conn + |> PlugHelper.append_to_called_plugs(__MODULE__) + |> perform(options) + end + end + end + end + @doc """ When used, dispatch to the appropriate controller/view/etc. """ diff --git a/test/plugs/oauth_scopes_plug_test.exs b/test/plugs/oauth_scopes_plug_test.exs index e79ecf263..abab7abb0 100644 --- a/test/plugs/oauth_scopes_plug_test.exs +++ b/test/plugs/oauth_scopes_plug_test.exs @@ -7,6 +7,7 @@ defmodule Pleroma.Plugs.OAuthScopesPlugTest do alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug alias Pleroma.Plugs.OAuthScopesPlug + alias Pleroma.Plugs.PlugHelper alias Pleroma.Repo import Mock @@ -16,6 +17,18 @@ defmodule Pleroma.Plugs.OAuthScopesPlugTest do :ok end + test "is not performed if marked as skipped", %{conn: conn} do + with_mock OAuthScopesPlug, [:passthrough], perform: &passthrough([&1, &2]) do + conn = + conn + |> PlugHelper.append_to_skipped_plugs(OAuthScopesPlug) + |> OAuthScopesPlug.call(%{scopes: ["random_scope"]}) + + refute called(OAuthScopesPlug.perform(:_, :_)) + refute conn.halted + end + end + test "if `token.scopes` fulfills specified 'any of' conditions, " <> "proceeds with no op", %{conn: conn} do diff --git a/test/web/auth/oauth_test_controller_test.exs b/test/web/auth/oauth_test_controller_test.exs new file mode 100644 index 000000000..a2f6009ac --- /dev/null +++ b/test/web/auth/oauth_test_controller_test.exs @@ -0,0 +1,49 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Tests.OAuthTestControllerTest do + use Pleroma.Web.ConnCase + + import Pleroma.Factory + + setup %{conn: conn} do + user = insert(:user) + conn = assign(conn, :user, user) + %{conn: conn, user: user} + end + + test "missed_oauth", %{conn: conn} do + res = + conn + |> get("/test/authenticated_api/missed_oauth") + |> json_response(403) + + assert res == + %{ + "error" => + "Security violation: OAuth scopes check was neither handled nor explicitly skipped." + } + end + + test "skipped_oauth", %{conn: conn} do + conn + |> assign(:token, nil) + |> get("/test/authenticated_api/skipped_oauth") + |> json_response(200) + end + + test "performed_oauth", %{user: user} do + %{conn: good_token_conn} = oauth_access(["read"], user: user) + + good_token_conn + |> get("/test/authenticated_api/performed_oauth") + |> json_response(200) + + %{conn: bad_token_conn} = oauth_access(["follow"], user: user) + + bad_token_conn + |> get("/test/authenticated_api/performed_oauth") + |> json_response(403) + end +end From 4b3b1fec4e57bd07ac75700bf34cd188ce43b545 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 15 Apr 2020 21:19:43 +0300 Subject: [PATCH 277/581] added an endpoint for getting unread notification count --- CHANGELOG.md | 1 + docs/API/differences_in_mastoapi_responses.md | 17 +++++-- lib/pleroma/marker.ex | 45 ++++++++++++++++- lib/pleroma/notification.ex | 47 ++++++++++++----- .../web/mastodon_api/views/marker_view.ex | 5 +- mix.lock | 50 ++++++++++--------- .../20200415181818_update_markers.exs | 40 +++++++++++++++ test/marker_test.exs | 29 ++++++++++- test/notification_test.exs | 13 +++++ .../controllers/marker_controller_test.exs | 10 ++-- .../mastodon_api/views/marker_view_test.exs | 8 +-- 11 files changed, 214 insertions(+), 51 deletions(-) create mode 100644 priv/repo/migrations/20200415181818_update_markers.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index 56b235f6d..3f7fc1802 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -123,6 +123,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Mastodon API: `pleroma.thread_muted` to the Status entity - Mastodon API: Mark the direct conversation as read for the author when they send a new direct message - Mastodon API, streaming: Add `pleroma.direct_conversation_id` to the `conversation` stream event payload. +- Mastodon API: Add `pleroma.unread_count` to the Marker entity - Admin API: Render whole status in grouped reports - Mastodon API: User timelines will now respect blocks, unless you are getting the user timeline of somebody you blocked (which would be empty otherwise). - Mastodon API: Favoriting / Repeating a post multiple times will now return the identical response every time. Before, executing that action twice would return an error ("already favorited") on the second try. diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index 1059155cf..0a7520f9e 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -185,8 +185,15 @@ Post here request with `grant_type=refresh_token` to obtain new access token. Re Has theses additional parameters (which are the same as in Pleroma-API): -- `fullname`: optional -- `bio`: optional -- `captcha_solution`: optional, contains provider-specific captcha solution, -- `captcha_token`: optional, contains provider-specific captcha token -- `token`: invite token required when the registrations aren't public. + `fullname`: optional + `bio`: optional + `captcha_solution`: optional, contains provider-specific captcha solution, + `captcha_token`: optional, contains provider-specific captcha token + `token`: invite token required when the registrations aren't public. + + +## Markers + +Has these additional fields under the `pleroma` object: + +- `unread_count`: contains number unread notifications diff --git a/lib/pleroma/marker.ex b/lib/pleroma/marker.ex index 443927392..4d82860f5 100644 --- a/lib/pleroma/marker.ex +++ b/lib/pleroma/marker.ex @@ -9,24 +9,34 @@ defmodule Pleroma.Marker do import Ecto.Query alias Ecto.Multi + alias Pleroma.Notification alias Pleroma.Repo alias Pleroma.User + alias __MODULE__ @timelines ["notifications"] + @type t :: %__MODULE__{} schema "markers" do field(:last_read_id, :string, default: "") field(:timeline, :string, default: "") field(:lock_version, :integer, default: 0) + field(:unread_count, :integer, default: 0, virtual: true) belongs_to(:user, User, type: FlakeId.Ecto.CompatType) timestamps() end + @doc "Gets markers by user and timeline." + @spec get_markers(User.t(), list(String)) :: list(t()) def get_markers(user, timelines \\ []) do - Repo.all(get_query(user, timelines)) + user + |> get_query(timelines) + |> unread_count_query() + |> Repo.all() end + @spec upsert(User.t(), map()) :: {:ok | :error, any()} def upsert(%User{} = user, attrs) do attrs |> Map.take(@timelines) @@ -45,6 +55,27 @@ def upsert(%User{} = user, attrs) do |> Repo.transaction() end + @spec multi_set_last_read_id(Multi.t(), User.t(), String.t()) :: Multi.t() + def multi_set_last_read_id(multi, %User{} = user, "notifications") do + multi + |> Multi.run(:counters, fn _repo, _changes -> + {:ok, %{last_read_id: Repo.one(Notification.last_read_query(user))}} + end) + |> Multi.insert( + :marker, + fn %{counters: attrs} -> + %Marker{timeline: "notifications", user_id: user.id} + |> struct(attrs) + |> Ecto.Changeset.change() + end, + returning: true, + on_conflict: {:replace, [:last_read_id]}, + conflict_target: [:user_id, :timeline] + ) + end + + def multi_set_last_read_id(multi, _, _), do: multi + defp get_marker(user, timeline) do case Repo.find_resource(get_query(user, timeline)) do {:ok, marker} -> %__MODULE__{marker | user: user} @@ -71,4 +102,16 @@ defp get_query(user, timelines) do |> by_user_id(user.id) |> by_timeline(timelines) end + + defp unread_count_query(query) do + from( + q in query, + left_join: n in "notifications", + on: n.user_id == q.user_id and n.seen == false, + group_by: [:id], + select_merge: %{ + unread_count: fragment("count(?)", n.id) + } + ) + end end diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 04ee510b9..3084bac3b 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -5,7 +5,9 @@ defmodule Pleroma.Notification do use Ecto.Schema + alias Ecto.Multi alias Pleroma.Activity + alias Pleroma.Marker alias Pleroma.Notification alias Pleroma.Object alias Pleroma.Pagination @@ -38,6 +40,17 @@ def changeset(%Notification{} = notification, attrs) do |> cast(attrs, [:seen]) end + @spec last_read_query(User.t()) :: Ecto.Queryable.t() + def last_read_query(user) do + from(q in Pleroma.Notification, + where: q.user_id == ^user.id, + where: q.seen == true, + select: type(q.id, :string), + limit: 1, + order_by: [desc: :id] + ) + end + defp for_user_query_ap_id_opts(user, opts) do ap_id_relationships = [:block] ++ @@ -186,25 +199,23 @@ def for_user_since(user, date) do |> Repo.all() end - def set_read_up_to(%{id: user_id} = _user, id) do + def set_read_up_to(%{id: user_id} = user, id) do query = from( n in Notification, where: n.user_id == ^user_id, where: n.id <= ^id, where: n.seen == false, - update: [ - set: [ - seen: true, - updated_at: ^NaiveDateTime.utc_now() - ] - ], # Ideally we would preload object and activities here # but Ecto does not support preloads in update_all select: n.id ) - {_, notification_ids} = Repo.update_all(query, []) + {:ok, %{ids: {_, notification_ids}}} = + Multi.new() + |> Multi.update_all(:ids, query, set: [seen: true, updated_at: NaiveDateTime.utc_now()]) + |> Marker.multi_set_last_read_id(user, "notifications") + |> Repo.transaction() Notification |> where([n], n.id in ^notification_ids) @@ -221,11 +232,18 @@ def set_read_up_to(%{id: user_id} = _user, id) do |> Repo.all() end + @spec read_one(User.t(), String.t()) :: + {:ok, Notification.t()} | {:error, Ecto.Changeset.t()} | nil def read_one(%User{} = user, notification_id) do with {:ok, %Notification{} = notification} <- get(user, notification_id) do - notification - |> changeset(%{seen: true}) - |> Repo.update() + Multi.new() + |> Multi.update(:update, changeset(notification, %{seen: true})) + |> Marker.multi_set_last_read_id(user, "notifications") + |> Repo.transaction() + |> case do + {:ok, %{update: notification}} -> {:ok, notification} + {:error, :update, changeset, _} -> {:error, changeset} + end end end @@ -307,8 +325,11 @@ defp do_create_notifications(%Activity{} = activity) do # TODO move to sql, too. def create_notification(%Activity{} = activity, %User{} = user, do_send \\ true) do unless skip?(activity, user) do - notification = %Notification{user_id: user.id, activity: activity} - {:ok, notification} = Repo.insert(notification) + {:ok, %{notification: notification}} = + Multi.new() + |> Multi.insert(:notification, %Notification{user_id: user.id, activity: activity}) + |> Marker.multi_set_last_read_id(user, "notifications") + |> Repo.transaction() if do_send do Streamer.stream(["user", "user:notification"], notification) diff --git a/lib/pleroma/web/mastodon_api/views/marker_view.ex b/lib/pleroma/web/mastodon_api/views/marker_view.ex index 985368fe5..415dae93b 100644 --- a/lib/pleroma/web/mastodon_api/views/marker_view.ex +++ b/lib/pleroma/web/mastodon_api/views/marker_view.ex @@ -10,7 +10,10 @@ def render("markers.json", %{markers: markers}) do Map.put_new(acc, m.timeline, %{ last_read_id: m.last_read_id, version: m.lock_version, - updated_at: NaiveDateTime.to_iso8601(m.updated_at) + updated_at: NaiveDateTime.to_iso8601(m.updated_at), + pleroma: %{ + unread_count: m.unread_count + } }) end) end diff --git a/mix.lock b/mix.lock index 2b9c54548..38adc45e3 100644 --- a/mix.lock +++ b/mix.lock @@ -2,8 +2,8 @@ "accept": {:hex, :accept, "0.3.5", "b33b127abca7cc948bbe6caa4c263369abf1347cfa9d8e699c6d214660f10cd1", [:rebar3], [], "hexpm", "11b18c220bcc2eab63b5470c038ef10eb6783bcb1fcdb11aa4137defa5ac1bb8"}, "auto_linker": {:git, "https://git.pleroma.social/pleroma/auto_linker.git", "95e8188490e97505c56636c1379ffdf036c1fdde", [ref: "95e8188490e97505c56636c1379ffdf036c1fdde"]}, "base62": {:hex, :base62, "1.2.1", "4866763e08555a7b3917064e9eef9194c41667276c51b59de2bc42c6ea65f806", [:mix], [{:custom_base, "~> 0.2.1", [hex: :custom_base, repo: "hexpm", optional: false]}], "hexpm", "3b29948de2013d3f93aa898c884a9dff847e7aec75d9d6d8c1dc4c61c2716c42"}, - "base64url": {:hex, :base64url, "0.0.1", "36a90125f5948e3afd7be97662a1504b934dd5dac78451ca6e9abf85a10286be", [:rebar], [], "hexpm"}, - "bbcode": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/bbcode.git", "f2d267675e9a7e1ad1ea9beb4cc23382762b66c2", [ref: "v0.2.0"]}, + "base64url": {:hex, :base64url, "0.0.1", "36a90125f5948e3afd7be97662a1504b934dd5dac78451ca6e9abf85a10286be", [:rebar], [], "hexpm", "fab09b20e3f5db886725544cbcf875b8e73ec93363954eb8a1a9ed834aa8c1f9"}, + "bbcode": {:hex, :bbcode, "0.1.1", "0023e2c7814119b2e620b7add67182e3f6019f92bfec9a22da7e99821aceba70", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "5a981b98ac7d366a9b6bf40eac389aaf4d6e623c631e6b6f8a6b571efaafd338"}, "bbcode_pleroma": {:hex, :bbcode_pleroma, "0.2.0", "d36f5bca6e2f62261c45be30fa9b92725c0655ad45c99025cb1c3e28e25803ef", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "19851074419a5fedb4ef49e1f01b30df504bb5dbb6d6adfc135238063bebd1c3"}, "benchee": {:hex, :benchee, "1.0.1", "66b211f9bfd84bd97e6d1beaddf8fc2312aaabe192f776e8931cb0c16f53a521", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}], "hexpm", "3ad58ae787e9c7c94dd7ceda3b587ec2c64604563e049b2a0e8baafae832addb"}, "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"}, @@ -19,47 +19,47 @@ "cowboy": {:hex, :cowboy, "2.7.0", "91ed100138a764355f43316b1d23d7ff6bdb0de4ea618cb5d8677c93a7a2f115", [:rebar3], [{:cowlib, "~> 2.8.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.7.1", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "04fd8c6a39edc6aaa9c26123009200fc61f92a3a94f3178c527b70b767c6e605"}, "cowlib": {:hex, :cowlib, "2.8.0", "fd0ff1787db84ac415b8211573e9a30a3ebe71b5cbff7f720089972b2319c8a4", [:rebar3], [], "hexpm", "79f954a7021b302186a950a32869dbc185523d99d3e44ce430cd1f3289f41ed4"}, "credo": {:hex, :credo, "1.1.5", "caec7a3cadd2e58609d7ee25b3931b129e739e070539ad1a0cd7efeeb47014f4", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "d0bbd3222607ccaaac5c0340f7f525c627ae4d7aee6c8c8c108922620c5b6446"}, - "crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"}, + "crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "48e513299cd28b12c77266c0ed5b1c844368e5c1823724994ae84834f43d6bbe"}, "crypt": {:git, "https://github.com/msantos/crypt", "1f2b58927ab57e72910191a7ebaeff984382a1d3", [ref: "1f2b58927ab57e72910191a7ebaeff984382a1d3"]}, "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, "db_connection": {:hex, :db_connection, "2.2.1", "caee17725495f5129cb7faebde001dc4406796f12a62b8949f4ac69315080566", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm", "2b02ece62d9f983fcd40954e443b7d9e6589664380e5546b2b9b523cd0fb59e1"}, "decimal": {:hex, :decimal, "1.8.1", "a4ef3f5f3428bdbc0d35374029ffcf4ede8533536fa79896dd450168d9acdf3c", [:mix], [], "hexpm", "3cb154b00225ac687f6cbd4acc4b7960027c757a5152b369923ead9ddbca7aec"}, "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, - "earmark": {:hex, :earmark, "1.4.3", "364ca2e9710f6bff494117dbbd53880d84bebb692dafc3a78eb50aa3183f2bfd", [:mix], [], "hexpm", "8cf8a291ebf1c7b9539e3cddb19e9cef066c2441b1640f13c34c1d3cfc825fec"}, - "ecto": {:hex, :ecto, "3.4.0", "a7a83ab8359bf816ce729e5e65981ce25b9fc5adfc89c2ea3980f4fed0bfd7c1", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "5eed18252f5b5bbadec56a24112b531343507dbe046273133176b12190ce19cc"}, + "earmark": {:hex, :earmark, "1.4.2", "3aa0bd23bc4c61cf2f1e5d752d1bb470560a6f8539974f767a38923bb20e1d7f", [:mix], [], "hexpm", "5e8806285d8a3a8999bd38e4a73c58d28534c856bc38c44818e5ba85bbda16fb"}, + "ecto": {:hex, :ecto, "3.4.2", "6890af71025769bd27ef62b1ed1925cfe23f7f0460bcb3041da4b705215ff23e", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3959b8a83e086202a4bd86b4b5e6e71f9f1840813de14a57d502d3fc2ef7132"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, "ecto_sql": {:hex, :ecto_sql, "3.3.4", "aa18af12eb875fbcda2f75e608b3bd534ebf020fc4f6448e4672fcdcbb081244", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4 or ~> 3.3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5eccbdbf92e3c6f213007a82d5dbba4cd9bb659d1a21331f89f408e4c0efd7a8"}, - "esshd": {:hex, :esshd, "0.1.1", "d4dd4c46698093a40a56afecce8a46e246eb35463c457c246dacba2e056f31b5", [:mix], [], "hexpm", "d73e341e3009d390aa36387dc8862860bf9f874c94d9fd92ade2926376f49981"}, + "esshd": {:hex, :esshd, "0.1.0", "6f93a2062adb43637edad0ea7357db2702a4b80dd9683482fe00f5134e97f4c1", [:mix], [], "hexpm", "98d0f3c6f4b8a0333170df770c6fe772b3d04564fb514c1a09504cf5ab2f48a5"}, "eternal": {:hex, :eternal, "1.2.1", "d5b6b2499ba876c57be2581b5b999ee9bdf861c647401066d3eeed111d096bc4", [:mix], [], "hexpm", "b14f1dc204321429479c569cfbe8fb287541184ed040956c8862cb7a677b8406"}, "ex2ms": {:hex, :ex2ms, "1.5.0", "19e27f9212be9a96093fed8cdfbef0a2b56c21237196d26760f11dfcfae58e97", [:mix], [], "hexpm"}, "ex_aws": {:hex, :ex_aws, "2.1.1", "1e4de2106cfbf4e837de41be41cd15813eabc722315e388f0d6bb3732cec47cd", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "1.6.3 or 1.6.5 or 1.7.1 or 1.8.6 or ~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8", [hex: :jsx, repo: "hexpm", optional: true]}, {:poison, ">= 1.2.0", [hex: :poison, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "06b6fde12b33bb6d65d5d3493e903ba5a56d57a72350c15285a4298338089e10"}, "ex_aws_s3": {:hex, :ex_aws_s3, "2.0.2", "c0258bbdfea55de4f98f0b2f0ca61fe402cc696f573815134beb1866e778f47b", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "0569f5b211b1a3b12b705fe2a9d0e237eb1360b9d76298028df2346cad13097a"}, "ex_const": {:hex, :ex_const, "0.2.4", "d06e540c9d834865b012a17407761455efa71d0ce91e5831e86881b9c9d82448", [:mix], [], "hexpm", "96fd346610cc992b8f896ed26a98be82ac4efb065a0578f334a32d60a3ba9767"}, - "ex_doc": {:hex, :ex_doc, "0.21.3", "857ec876b35a587c5d9148a2512e952e24c24345552259464b98bfbb883c7b42", [:mix], [{:earmark, "~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "0db1ee8d1547ab4877c5b5dffc6604ef9454e189928d5ba8967d4a58a801f161"}, + "ex_doc": {:hex, :ex_doc, "0.21.2", "caca5bc28ed7b3bdc0b662f8afe2bee1eedb5c3cf7b322feeeb7c6ebbde089d6", [:mix], [{:earmark, "~> 1.3.3 or ~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "f1155337ae17ff7a1255217b4c1ceefcd1860b7ceb1a1874031e7a861b052e39"}, "ex_machina": {:hex, :ex_machina, "2.3.0", "92a5ad0a8b10ea6314b876a99c8c9e3f25f4dde71a2a835845b136b9adaf199a", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "b84f6af156264530b312a8ab98ac6088f6b77ae5fe2058305c81434aa01fbaf9"}, "ex_syslogger": {:hex, :ex_syslogger, "1.5.0", "bc936ee3fd13d9e592cb4c3a1e8a55fccd33b05e3aa7b185f211f3ed263ff8f0", [:mix], [{:poison, ">= 1.5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:syslog, "~> 1.0.5", [hex: :syslog, repo: "hexpm", optional: false]}], "hexpm", "f3b4b184dcdd5f356b7c26c6cd72ab0918ba9dfb4061ccfaf519e562942af87b"}, "excoveralls": {:hex, :excoveralls, "0.12.2", "a513defac45c59e310ac42fcf2b8ae96f1f85746410f30b1ff2b710a4b6cd44b", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "151c476331d49b45601ffc45f43cb3a8beb396b02a34e3777fea0ad34ae57d89"}, - "fast_html": {:hex, :fast_html, "1.0.3", "2cc0d4b68496266a1530e0c852cafeaede0bd10cfdee26fda50dc696c203162f", [:make, :mix], [], "hexpm", "ab3d782b639d3c4655fbaec0f9d032c91f8cab8dd791ac7469c2381bc7c32f85"}, - "fast_sanitize": {:hex, :fast_sanitize, "0.1.7", "2a7cd8734c88a2de6de55022104f8a3b87f1fdbe8bbf131d9049764b53d50d0d", [:mix], [{:fast_html, "~> 1.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f39fe8ea08fbac17487c30bf09b7d9f3e12472e51fb07a88ffeb8fd17da8ab67"}, + "fast_html": {:hex, :fast_html, "1.0.1", "5bc7df4dc4607ec2c314c16414e4111d79a209956c4f5df96602d194c61197f9", [:make, :mix], [], "hexpm", "18e627dd62051a375ef94b197f41e8027c3e8eef0180ab8f81e0543b3dc6900a"}, + "fast_sanitize": {:hex, :fast_sanitize, "0.1.6", "60a5ae96879956dea409a91a77f5dd2994c24cc10f80eefd8f9892ee4c0c7b25", [:mix], [{:fast_html, "~> 1.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "b73f50f0cb522dd0331ea8e8c90b408de42c50f37641219d6364f0e3e7efd22c"}, "flake_id": {:hex, :flake_id, "0.1.0", "7716b086d2e405d09b647121a166498a0d93d1a623bead243e1f74216079ccb3", [:mix], [{:base62, "~> 1.2", [hex: :base62, repo: "hexpm", optional: false]}, {:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "31fc8090fde1acd267c07c36ea7365b8604055f897d3a53dd967658c691bd827"}, - "floki": {:hex, :floki, "0.25.0", "b1c9ddf5f32a3a90b43b76f3386ca054325dc2478af020e87b5111c19f2284ac", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "631f4e627c46d5ecd347df5a2accdaf0621c77c3693c5b75a8ad58e84c61f242"}, + "floki": {:hex, :floki, "0.26.0", "4df88977e2e357c6720e1b650f613444bfb48c5acfc6a0c646ab007d08ad13bf", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "e7b66ce7feef5518a9cd9fc7b52dd62a64028bd9cb6d6ad282a0f0fc90a4ae52"}, "gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm", "29bd14a88030980849c7ed2447b8db6d6c9278a28b11a44cafe41b791205440f"}, - "gen_stage": {:hex, :gen_stage, "0.14.3", "d0c66f1c87faa301c1a85a809a3ee9097a4264b2edf7644bf5c123237ef732bf", [:mix], [], "hexpm"}, - "gen_state_machine": {:hex, :gen_state_machine, "2.0.5", "9ac15ec6e66acac994cc442dcc2c6f9796cf380ec4b08267223014be1c728a95", [:mix], [], "hexpm"}, - "gettext": {:hex, :gettext, "0.17.4", "f13088e1ec10ce01665cf25f5ff779e7df3f2dc71b37084976cf89d1aa124d5c", [:mix], [], "hexpm", "3c75b5ea8288e2ee7ea503ff9e30dfe4d07ad3c054576a6e60040e79a801e14d"}, + "gen_stage": {:hex, :gen_stage, "0.14.3", "d0c66f1c87faa301c1a85a809a3ee9097a4264b2edf7644bf5c123237ef732bf", [:mix], [], "hexpm", "8453e2289d94c3199396eb517d65d6715ef26bcae0ee83eb5ff7a84445458d76"}, + "gen_state_machine": {:hex, :gen_state_machine, "2.0.5", "9ac15ec6e66acac994cc442dcc2c6f9796cf380ec4b08267223014be1c728a95", [:mix], [], "hexpm", "5cacd405e72b2609a7e1f891bddb80c53d0b3b7b0036d1648e7382ca108c41c8"}, + "gettext": {:hex, :gettext, "0.17.1", "8baab33482df4907b3eae22f719da492cee3981a26e649b9c2be1c0192616962", [:mix], [], "hexpm", "f7d97341e536f95b96eef2988d6d4230f7262cf239cda0e2e63123ee0b717222"}, "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"}, "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"}, + "httpoison": {:hex, :httpoison, "1.6.1", "2ce5bf6e535cd0ab02e905ba8c276580bab80052c5c549f53ddea52d72e81f33", [:mix], [{:hackney, "~> 1.15 and >= 1.15.2", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "89149056039084024a284cd703b2d1900d584958dba432132cb21ef35aed7487"}, "idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "4bdd305eb64e18b0273864920695cb18d7a2021f31a11b9c5fbcd9a253f936e2"}, "inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm", "64a2d30189704ae41ca7dbdd587f5291db5d1dda1414e0774c29ffc81088c1bc"}, "jason": {:hex, :jason, "1.2.0", "10043418c42d2493d0ee212d3fddd25d7ffe484380afad769a0a38795938e448", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "116747dbe057794c3a3e4e143b7c8390b29f634e16c78a7f59ba75bfa6852e7f"}, - "joken": {:hex, :joken, "2.2.0", "2daa1b12be05184aff7b5ace1d43ca1f81345962285fff3f88db74927c954d3a", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "b4f92e30388206f869dd25d1af628a1d99d7586e5cf0672f64d4df84c4d2f5e9"}, - "jose": {:hex, :jose, "1.10.1", "16d8e460dae7203c6d1efa3f277e25b5af8b659febfc2f2eb4bacf87f128b80a", [:mix, :rebar3], [], "hexpm", "3c7ddc8a9394b92891db7c2771da94bf819834a1a4c92e30857b7d582e2f8257"}, + "joken": {:hex, :joken, "2.1.0", "bf21a73105d82649f617c5e59a7f8919aa47013d2519ebcc39d998d8d12adda9", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "eb02df7d5526df13063397e051b926b7006d5986d66f399eefc474f560cdad6a"}, + "jose": {:hex, :jose, "1.9.0", "4167c5f6d06ffaebffd15cdb8da61a108445ef5e85ab8f5a7ad926fdf3ada154", [:mix, :rebar3], [{:base64url, "~> 0.0.1", [hex: :base64url, repo: "hexpm", optional: false]}], "hexpm", "6429c4fee52b2dda7861ee19a4f09c8c1ffa213bee3a1ec187828fde95d447ed"}, "jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"}, - "libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm"}, + "libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm", "1feaf05ee886815ad047cad7ede17d6910710986148ae09cf73eee2989717b81"}, "makeup": {:hex, :makeup, "1.0.0", "671df94cf5a594b739ce03b0d0316aa64312cee2574b6a44becb83cd90fb05dc", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "a10c6eb62cca416019663129699769f0c2ccf39428b3bb3c0cb38c718a0c186d"}, "makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "d4b316c7222a85bbaa2fd7c6e90e37e953257ad196dc229505137c5e505e9eff"}, "meck": {:hex, :meck, "0.8.13", "ffedb39f99b0b99703b8601c6f17c7f76313ee12de6b646e671e3188401f7866", [:rebar3], [], "hexpm", "d34f013c156db51ad57cc556891b9720e6a1c1df5fe2e15af999c84d6cebeb1a"}, @@ -71,35 +71,37 @@ "mogrify": {:hex, :mogrify, "0.6.1", "de1b527514f2d95a7bbe9642eb556061afb337e220cf97adbf3a4e6438ed70af", [:mix], [], "hexpm", "3bc928d817974fa10cc11e6c89b9a9361e37e96dbbf3d868c41094ec05745dcd"}, "mox": {:hex, :mox, "0.5.1", "f86bb36026aac1e6f924a4b6d024b05e9adbed5c63e8daa069bd66fb3292165b", [:mix], [], "hexpm", "052346cf322311c49a0f22789f3698eea030eec09b8c47367f0686ef2634ae14"}, "myhtmlex": {:git, "https://git.pleroma.social/pleroma/myhtmlex.git", "ad0097e2f61d4953bfef20fb6abddf23b87111e6", [ref: "ad0097e2f61d4953bfef20fb6abddf23b87111e6", submodules: true]}, - "nimble_parsec": {:hex, :nimble_parsec, "0.5.3", "def21c10a9ed70ce22754fdeea0810dafd53c2db3219a0cd54cf5526377af1c6", [:mix], [], "hexpm", "589b5af56f4afca65217a1f3eb3fee7e79b09c40c742fddc1c312b3ac0b3399f"}, + "nimble_parsec": {:hex, :nimble_parsec, "0.5.1", "c90796ecee0289dbb5ad16d3ad06f957b0cd1199769641c961cfe0b97db190e0", [:mix], [], "hexpm", "00e3ebdc821fb3a36957320d49e8f4bfa310d73ea31c90e5f925dc75e030da8f"}, "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, "oban": {:hex, :oban, "1.2.0", "7cca94d341be43d220571e28f69131c4afc21095b25257397f50973d3fc59b07", [:mix], [{:ecto_sql, "~> 3.1", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ba5f8b3f7d76967b3e23cf8014f6a13e4ccb33431e4808f036709a7f822362ee"}, "open_api_spex": {:hex, :open_api_spex, "3.6.0", "64205aba9f2607f71b08fd43e3351b9c5e9898ec5ef49fc0ae35890da502ade9", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.1", [hex: :poison, repo: "hexpm", optional: true]}], "hexpm", "126ba3473966277132079cb1d5bf1e3df9e36fe2acd00166e75fd125cecb59c5"}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "0.12.4", "8dd29ed783f2e12195d7e0a4640effc0a7c37e6537da491f1db01839eee6d053", [:mix], [], "hexpm", "595d09db74cb093b1903381c9de423276a931a2480a46a1a5dc7f932a2a6375b"}, - "phoenix": {:hex, :phoenix, "1.4.13", "67271ad69b51f3719354604f4a3f968f83aa61c19199343656c9caee057ff3b8", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ab765a0feddb81fc62e2116c827b5f068df85159c162bee760745276ad7ddc1b"}, - "phoenix_ecto": {:hex, :phoenix_ecto, "4.1.0", "a044d0756d0464c5a541b4a0bf4bcaf89bffcaf92468862408290682c73ae50d", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "c5e666a341ff104d0399d8f0e4ff094559b2fde13a5985d4cb5023b2c2ac558b"}, - "phoenix_html": {:hex, :phoenix_html, "2.14.0", "d8c6bc28acc8e65f8ea0080ee05aa13d912c8758699283b8d3427b655aabe284", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "b0bb30eda478a06dbfbe96728061a93833db3861a49ccb516f839ecb08493fbb"}, + "phoenix": {:hex, :phoenix, "1.4.10", "619e4a545505f562cd294df52294372d012823f4fd9d34a6657a8b242898c255", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "256ad7a140efadc3f0290470369da5bd3de985ec7c706eba07c2641b228974be"}, + "phoenix_ecto": {:hex, :phoenix_ecto, "4.0.0", "c43117a136e7399ea04ecaac73f8f23ee0ffe3e07acfcb8062fe5f4c9f0f6531", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "fe15d9fee5b82f5e64800502011ffe530650d42e1710ae9b14bc4c9be38bf303"}, + "phoenix_html": {:hex, :phoenix_html, "2.13.3", "850e292ff6e204257f5f9c4c54a8cb1f6fbc16ed53d360c2b780a3d0ba333867", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "8b01b3d6d39731ab18aa548d928b5796166d2500755f553725cfe967bafba7d9"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "1.1.2", "496c303bdf1b2e98a9d26e89af5bba3ab487ba3a3735f74bf1f4064d2a845a3e", [:mix], [], "hexpm", "1f13f9f0f3e769a667a6b6828d29dec37497a082d195cc52dbef401a9b69bf38"}, "phoenix_swoosh": {:hex, :phoenix_swoosh, "0.2.0", "a7e0b32077cd6d2323ae15198839b05d9caddfa20663fd85787479e81f89520e", [:mix], [{:phoenix, "~> 1.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.2", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 0.1", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "ebf1bfa7b3c1c850c04929afe02e2e0d7ab135e0706332c865de03e761676b1f"}, "plug": {:hex, :plug, "1.9.0", "8d7c4e26962283ff9f8f3347bd73838e2413fbc38b7bb5467d5924f68f3a5a4a", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "9902eda2c52ada2a096434682e99a2493f5d06a94d6ac6bcfff9805f952350f1"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.1.2", "8b0addb5908c5238fac38e442e81b6fcd32788eaa03246b4d55d147c47c5805e", [:mix], [{:cowboy, "~> 2.5", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "7d722581ce865a237e14da6d946f92704101740a256bd13ec91e63c0b122fc70"}, - "plug_crypto": {:hex, :plug_crypto, "1.1.2", "bdd187572cc26dbd95b87136290425f2b580a116d3fb1f564216918c9730d227", [:mix], [], "hexpm", "6b8b608f895b6ffcfad49c37c7883e8df98ae19c6a28113b02aa1e9c5b22d6b5"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.1.0", "b75768153c3a8a9e8039d4b25bb9b14efbc58e9c4a6e6a270abff1cd30cbe320", [:mix], [{:cowboy, "~> 2.5", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "6cd8ddd1bd1fbfa54d3fc61d4719c2057dae67615395d58d40437a919a46f132"}, + "plug_crypto": {:hex, :plug_crypto, "1.0.0", "18e49317d3fa343f24620ed22795ec29d4a5e602d52d1513ccea0b07d8ea7d4d", [:mix], [], "hexpm", "73c1682f0e414cfb5d9b95c8e8cd6ffcfdae699e3b05e1db744e58b7be857759"}, "plug_static_index_html": {:hex, :plug_static_index_html, "1.0.0", "840123d4d3975585133485ea86af73cb2600afd7f2a976f9f5fd8b3808e636a0", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "79fd4fcf34d110605c26560cbae8f23c603ec4158c08298bd4360fdea90bb5cf"}, "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, "postgrex": {:hex, :postgrex, "0.15.3", "5806baa8a19a68c4d07c7a624ccdb9b57e89cbc573f1b98099e3741214746ae4", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "4737ce62a31747b4c63c12b20c62307e51bb4fcd730ca0c32c280991e0606c90"}, - "prometheus": {:hex, :prometheus, "4.5.0", "8f4a2246fe0beb50af0f77c5e0a5bb78fe575c34a9655d7f8bc743aad1c6bf76", [:mix, :rebar3], [], "hexpm", "679b5215480fff612b8351f45c839d995a07ce403e42ff02f1c6b20960d41a4e"}, + "prometheus": {:hex, :prometheus, "4.4.1", "1e96073b3ed7788053768fea779cbc896ddc3bdd9ba60687f2ad50b252ac87d6", [:mix, :rebar3], [], "hexpm", "d39f2ce1f3f29f3bf04f915aa3cf9c7cd4d2cee2f975e05f526e06cae9b7c902"}, "prometheus_ecto": {:hex, :prometheus_ecto, "1.4.3", "3dd4da1812b8e0dbee81ea58bb3b62ed7588f2eae0c9e97e434c46807ff82311", [:mix], [{:ecto, "~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "8d66289f77f913b37eda81fd287340c17e61a447549deb28efc254532b2bed82"}, "prometheus_ex": {:hex, :prometheus_ex, "3.0.5", "fa58cfd983487fc5ead331e9a3e0aa622c67232b3ec71710ced122c4c453a02f", [:mix], [{:prometheus, "~> 4.0", [hex: :prometheus, repo: "hexpm", optional: false]}], "hexpm", "9fd13404a48437e044b288b41f76e64acd9735fb8b0e3809f494811dfa66d0fb"}, "prometheus_phoenix": {:hex, :prometheus_phoenix, "1.3.0", "c4b527e0b3a9ef1af26bdcfbfad3998f37795b9185d475ca610fe4388fdd3bb5", [:mix], [{:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.3 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "c4d1404ac4e9d3d963da601db2a7d8ea31194f0017057fabf0cfb9bf5a6c8c75"}, "prometheus_plugs": {:hex, :prometheus_plugs, "1.1.5", "25933d48f8af3a5941dd7b621c889749894d8a1082a6ff7c67cc99dec26377c5", [:mix], [{:accept, "~> 0.1", [hex: :accept, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}, {:prometheus_process_collector, "~> 1.1", [hex: :prometheus_process_collector, repo: "hexpm", optional: true]}], "hexpm", "0273a6483ccb936d79ca19b0ab629aef0dba958697c94782bb728b920dfc6a79"}, "quack": {:hex, :quack, "0.1.1", "cca7b4da1a233757fdb44b3334fce80c94785b3ad5a602053b7a002b5a8967bf", [:mix], [{:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: false]}, {:tesla, "~> 1.2.0", [hex: :tesla, repo: "hexpm", optional: false]}], "hexpm", "d736bfa7444112eb840027bb887832a0e403a4a3437f48028c3b29a2dbbd2543"}, + "quantum": {:hex, :quantum, "2.3.4", "72a0e8855e2adc101459eac8454787cb74ab4169de6ca50f670e72142d4960e9", [:mix], [{:calendar, "~> 0.17", [hex: :calendar, repo: "hexpm", optional: true]}, {:crontab, "~> 1.1", [hex: :crontab, repo: "hexpm", optional: false]}, {:gen_stage, "~> 0.12", [hex: :gen_stage, repo: "hexpm", optional: false]}, {:swarm, "~> 3.3", [hex: :swarm, repo: "hexpm", optional: false]}, {:timex, "~> 3.1", [hex: :timex, repo: "hexpm", optional: true]}], "hexpm", "6de553ba9ac0668d3728b699d5065543f3e40c854154017461ee8c09038752da"}, "ranch": {:hex, :ranch, "1.7.1", "6b1fab51b49196860b733a49c07604465a47bdb78aa10c1c16a3d199f7f8c881", [:rebar3], [], "hexpm", "451d8527787df716d99dc36162fca05934915db0b6141bbdac2ea8d3c7afc7d7"}, "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"}, + "swarm": {:hex, :swarm, "3.4.0", "64f8b30055d74640d2186c66354b33b999438692a91be275bb89cdc7e401f448", [:mix], [{:gen_state_machine, "~> 2.0", [hex: :gen_state_machine, repo: "hexpm", optional: false]}, {:libring, "~> 1.0", [hex: :libring, repo: "hexpm", optional: false]}], "hexpm", "94884f84783fc1ba027aba8fe8a7dae4aad78c98e9f9c76667ec3471585c08c6"}, "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.0.6", "995970c9aa7feb380ac493302138e308d6e04fd57da95b439a6df5bb3bf75076", [:rebar3], [], "hexpm", "769ddfabd0d2a16f3f9c17eb7509951e0ca4f68363fb26f2ee51a8ec4a49881a"}, diff --git a/priv/repo/migrations/20200415181818_update_markers.exs b/priv/repo/migrations/20200415181818_update_markers.exs new file mode 100644 index 000000000..976363565 --- /dev/null +++ b/priv/repo/migrations/20200415181818_update_markers.exs @@ -0,0 +1,40 @@ +defmodule Pleroma.Repo.Migrations.UpdateMarkers do + use Ecto.Migration + import Ecto.Query + alias Pleroma.Repo + + def up do + update_markers() + end + + def down do + :ok + end + + defp update_markers do + now = NaiveDateTime.utc_now() + + markers_attrs = + from(q in "notifications", + select: %{ + timeline: "notifications", + user_id: q.user_id, + last_read_id: + type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) + }, + group_by: [q.user_id] + ) + |> Repo.all() + |> Enum.map(fn %{last_read_id: last_read_id} = attrs -> + attrs + |> Map.put(:last_read_id, last_read_id || "") + |> Map.put_new(:inserted_at, now) + |> Map.put_new(:updated_at, now) + end) + + Repo.insert_all("markers", markers_attrs, + on_conflict: {:replace, [:last_read_id]}, + conflict_target: [:user_id, :timeline] + ) + end +end diff --git a/test/marker_test.exs b/test/marker_test.exs index c80ae16b6..5b6d0b4a4 100644 --- a/test/marker_test.exs +++ b/test/marker_test.exs @@ -8,12 +8,39 @@ defmodule Pleroma.MarkerTest do import Pleroma.Factory + describe "multi_set_unread_count/3" do + test "returns multi" do + user = insert(:user) + + assert %Ecto.Multi{ + operations: [marker: {:run, _}, counters: {:run, _}] + } = + Marker.multi_set_last_read_id( + Ecto.Multi.new(), + user, + "notifications" + ) + end + + test "return empty multi" do + user = insert(:user) + multi = Ecto.Multi.new() + assert Marker.multi_set_last_read_id(multi, user, "home") == multi + end + end + describe "get_markers/2" do test "returns user markers" do user = insert(:user) marker = insert(:marker, user: user) + insert(:notification, user: user) + insert(:notification, user: user) insert(:marker, timeline: "home", user: user) - assert Marker.get_markers(user, ["notifications"]) == [refresh_record(marker)] + + assert Marker.get_markers( + user, + ["notifications"] + ) == [%Marker{refresh_record(marker) | unread_count: 2}] end end diff --git a/test/notification_test.exs b/test/notification_test.exs index 837a9dacd..f78a47af6 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -45,6 +45,9 @@ test "notifies someone when they are directly addressed" do assert notified_ids == [other_user.id, third_user.id] assert notification.activity_id == activity.id assert other_notification.activity_id == activity.id + + assert [%Pleroma.Marker{unread_count: 2}] = + Pleroma.Marker.get_markers(other_user, ["notifications"]) end test "it creates a notification for subscribed users" do @@ -410,6 +413,16 @@ test "it sets all notifications as read up to a specified notification ID" do assert n1.seen == true assert n2.seen == true assert n3.seen == false + + assert %Pleroma.Marker{} = + m = + Pleroma.Repo.get_by( + Pleroma.Marker, + user_id: other_user.id, + timeline: "notifications" + ) + + assert m.last_read_id == to_string(n2.id) end end diff --git a/test/web/mastodon_api/controllers/marker_controller_test.exs b/test/web/mastodon_api/controllers/marker_controller_test.exs index 919f295bd..7280abd10 100644 --- a/test/web/mastodon_api/controllers/marker_controller_test.exs +++ b/test/web/mastodon_api/controllers/marker_controller_test.exs @@ -11,6 +11,7 @@ defmodule Pleroma.Web.MastodonAPI.MarkerControllerTest do test "gets markers with correct scopes", %{conn: conn} do user = insert(:user) token = insert(:oauth_token, user: user, scopes: ["read:statuses"]) + insert_list(7, :notification, user: user) {:ok, %{"notifications" => marker}} = Pleroma.Marker.upsert( @@ -29,7 +30,8 @@ test "gets markers with correct scopes", %{conn: conn} do "notifications" => %{ "last_read_id" => "69420", "updated_at" => NaiveDateTime.to_iso8601(marker.updated_at), - "version" => 0 + "version" => 0, + "pleroma" => %{"unread_count" => 7} } } end @@ -70,7 +72,8 @@ test "creates a marker with correct scopes", %{conn: conn} do "notifications" => %{ "last_read_id" => "69420", "updated_at" => _, - "version" => 0 + "version" => 0, + "pleroma" => %{"unread_count" => 0} } } = response end @@ -99,7 +102,8 @@ test "updates exist marker", %{conn: conn} do "notifications" => %{ "last_read_id" => "69888", "updated_at" => NaiveDateTime.to_iso8601(marker.updated_at), - "version" => 0 + "version" => 0, + "pleroma" => %{"unread_count" => 0} } } end diff --git a/test/web/mastodon_api/views/marker_view_test.exs b/test/web/mastodon_api/views/marker_view_test.exs index 893cf8857..48a0a6d33 100644 --- a/test/web/mastodon_api/views/marker_view_test.exs +++ b/test/web/mastodon_api/views/marker_view_test.exs @@ -8,19 +8,21 @@ defmodule Pleroma.Web.MastodonAPI.MarkerViewTest do import Pleroma.Factory test "returns markers" do - marker1 = insert(:marker, timeline: "notifications", last_read_id: "17") + marker1 = insert(:marker, timeline: "notifications", last_read_id: "17", unread_count: 5) marker2 = insert(:marker, timeline: "home", last_read_id: "42") assert MarkerView.render("markers.json", %{markers: [marker1, marker2]}) == %{ "home" => %{ last_read_id: "42", updated_at: NaiveDateTime.to_iso8601(marker2.updated_at), - version: 0 + version: 0, + pleroma: %{unread_count: 0} }, "notifications" => %{ last_read_id: "17", updated_at: NaiveDateTime.to_iso8601(marker1.updated_at), - version: 0 + version: 0, + pleroma: %{unread_count: 5} } } end From cf4ebba77471f188ce7da45df0b9ea76dbe31916 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 15 Apr 2020 22:59:25 +0400 Subject: [PATCH 278/581] Cleanup SubscriptionController --- .../controllers/subscription_controller.ex | 34 ++++++++++--------- ...scription_view.ex => subscription_view.ex} | 4 +-- .../subscription_controller_test.exs | 13 ++++--- ...ew_test.exs => subscription_view_test.exs} | 6 ++-- 4 files changed, 31 insertions(+), 26 deletions(-) rename lib/pleroma/web/mastodon_api/views/{push_subscription_view.ex => subscription_view.ex} (77%) rename test/web/mastodon_api/views/{push_subscription_view_test.exs => subscription_view_test.exs} (72%) diff --git a/lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex b/lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex index 11df6fc4a..4647c1f96 100644 --- a/lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex @@ -6,25 +6,22 @@ defmodule Pleroma.Web.MastodonAPI.SubscriptionController do @moduledoc "The module represents functions to manage user subscriptions." use Pleroma.Web, :controller - alias Pleroma.Web.MastodonAPI.PushSubscriptionView, as: View alias Pleroma.Web.Push alias Pleroma.Web.Push.Subscription action_fallback(:errors) plug(Pleroma.Plugs.OAuthScopesPlug, %{scopes: ["push"]}) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) + plug(:restrict_push_enabled) # Creates PushSubscription # POST /api/v1/push/subscription # def create(%{assigns: %{user: user, token: token}} = conn, params) do - with true <- Push.enabled(), - {:ok, _} <- Subscription.delete_if_exists(user, token), + with {:ok, _} <- Subscription.delete_if_exists(user, token), {:ok, subscription} <- Subscription.create(user, token, params) do - view = View.render("push_subscription.json", subscription: subscription) - json(conn, view) + render(conn, "show.json", subscription: subscription) end end @@ -32,10 +29,8 @@ def create(%{assigns: %{user: user, token: token}} = conn, params) do # GET /api/v1/push/subscription # def get(%{assigns: %{user: user, token: token}} = conn, _params) do - with true <- Push.enabled(), - {:ok, subscription} <- Subscription.get(user, token) do - view = View.render("push_subscription.json", subscription: subscription) - json(conn, view) + with {:ok, subscription} <- Subscription.get(user, token) do + render(conn, "show.json", subscription: subscription) end end @@ -43,10 +38,8 @@ def get(%{assigns: %{user: user, token: token}} = conn, _params) do # PUT /api/v1/push/subscription # def update(%{assigns: %{user: user, token: token}} = conn, params) do - with true <- Push.enabled(), - {:ok, subscription} <- Subscription.update(user, token, params) do - view = View.render("push_subscription.json", subscription: subscription) - json(conn, view) + with {:ok, subscription} <- Subscription.update(user, token, params) do + render(conn, "show.json", subscription: subscription) end end @@ -54,11 +47,20 @@ def update(%{assigns: %{user: user, token: token}} = conn, params) do # DELETE /api/v1/push/subscription # def delete(%{assigns: %{user: user, token: token}} = conn, _params) do - with true <- Push.enabled(), - {:ok, _response} <- Subscription.delete(user, token), + with {:ok, _response} <- Subscription.delete(user, token), do: json(conn, %{}) end + defp restrict_push_enabled(conn, _) do + if Push.enabled() do + conn + else + conn + |> render_error(:forbidden, "Web push subscription is disabled on this Pleroma instance") + |> halt() + end + end + # fallback action # def errors(conn, {:error, :not_found}) do diff --git a/lib/pleroma/web/mastodon_api/views/push_subscription_view.ex b/lib/pleroma/web/mastodon_api/views/subscription_view.ex similarity index 77% rename from lib/pleroma/web/mastodon_api/views/push_subscription_view.ex rename to lib/pleroma/web/mastodon_api/views/subscription_view.ex index d32cef6e2..7c67cc924 100644 --- a/lib/pleroma/web/mastodon_api/views/push_subscription_view.ex +++ b/lib/pleroma/web/mastodon_api/views/subscription_view.ex @@ -2,11 +2,11 @@ # Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.Web.MastodonAPI.PushSubscriptionView do +defmodule Pleroma.Web.MastodonAPI.SubscriptionView do use Pleroma.Web, :view alias Pleroma.Web.Push - def render("push_subscription.json", %{subscription: subscription}) do + def render("show.json", %{subscription: subscription}) do %{ id: to_string(subscription.id), endpoint: subscription.endpoint, diff --git a/test/web/mastodon_api/controllers/subscription_controller_test.exs b/test/web/mastodon_api/controllers/subscription_controller_test.exs index 987158a74..5682498c0 100644 --- a/test/web/mastodon_api/controllers/subscription_controller_test.exs +++ b/test/web/mastodon_api/controllers/subscription_controller_test.exs @@ -35,7 +35,10 @@ defmacro assert_error_when_disable_push(do: yield) do quote do vapid_details = Application.get_env(:web_push_encryption, :vapid_details, []) Application.put_env(:web_push_encryption, :vapid_details, []) - assert "Something went wrong" == unquote(yield) + + assert %{"error" => "Web push subscription is disabled on this Pleroma instance"} == + unquote(yield) + Application.put_env(:web_push_encryption, :vapid_details, vapid_details) end end @@ -45,7 +48,7 @@ test "returns error when push disabled ", %{conn: conn} do assert_error_when_disable_push do conn |> post("/api/v1/push/subscription", %{}) - |> json_response(500) + |> json_response(403) end end @@ -74,7 +77,7 @@ test "returns error when push disabled ", %{conn: conn} do assert_error_when_disable_push do conn |> get("/api/v1/push/subscription", %{}) - |> json_response(500) + |> json_response(403) end end @@ -127,7 +130,7 @@ test "returns error when push disabled ", %{conn: conn} do assert_error_when_disable_push do conn |> put("/api/v1/push/subscription", %{data: %{"alerts" => %{"mention" => false}}}) - |> json_response(500) + |> json_response(403) end end @@ -155,7 +158,7 @@ test "returns error when push disabled ", %{conn: conn} do assert_error_when_disable_push do conn |> delete("/api/v1/push/subscription", %{}) - |> json_response(500) + |> json_response(403) end end diff --git a/test/web/mastodon_api/views/push_subscription_view_test.exs b/test/web/mastodon_api/views/subscription_view_test.exs similarity index 72% rename from test/web/mastodon_api/views/push_subscription_view_test.exs rename to test/web/mastodon_api/views/subscription_view_test.exs index 10c6082a5..981524c0e 100644 --- a/test/web/mastodon_api/views/push_subscription_view_test.exs +++ b/test/web/mastodon_api/views/subscription_view_test.exs @@ -2,10 +2,10 @@ # Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.Web.MastodonAPI.PushSubscriptionViewTest do +defmodule Pleroma.Web.MastodonAPI.SubscriptionViewTest do use Pleroma.DataCase import Pleroma.Factory - alias Pleroma.Web.MastodonAPI.PushSubscriptionView, as: View + alias Pleroma.Web.MastodonAPI.SubscriptionView, as: View alias Pleroma.Web.Push test "Represent a subscription" do @@ -18,6 +18,6 @@ test "Represent a subscription" do server_key: Keyword.get(Push.vapid_config(), :public_key) } - assert expected == View.render("push_subscription.json", %{subscription: subscription}) + assert expected == View.render("show.json", %{subscription: subscription}) end end From 72ef6cc4f2f601e26ba84c16ad2c91bd72867629 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Mon, 13 Apr 2020 14:07:23 +0300 Subject: [PATCH 279/581] added need_reboot endpoint to admin api --- CHANGELOG.md | 6 ++++ docs/API/admin_api.md | 21 ++++++++--- .../web/admin_api/admin_api_controller.ex | 35 +++++++------------ lib/pleroma/web/router.ex | 1 + .../admin_api/admin_api_controller_test.exs | 18 ++++++++-- 5 files changed, 52 insertions(+), 29 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56b235f6d..804d3aa91 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixed - Logger configuration through AdminFE +### Added +
+ API Changes +- Admin API: `GET /api/pleroma/admin/need_reboot`. +
+ ## [2.0.2] - 2020-04-08 ### Added - Support for Funkwhale's `Audio` activity diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index 57fb6bc6a..0ba88470a 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -786,6 +786,8 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret ### Restarts pleroma application +**Only works when configuration from database is enabled.** + - Params: none - Response: - On failure: @@ -795,11 +797,24 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret {} ``` +## `GET /api/pleroma/admin/need_reboot` + +### Returns the flag whether the pleroma should be restarted + +- Params: none +- Response: + - `need_reboot` - boolean +```json +{ + "need_reboot": false +} +``` + ## `GET /api/pleroma/admin/config` ### Get list of merged default settings with saved in database. -*If `need_reboot` flag exists in response, instance must be restarted, so reboot time settings can take effect.* +*If `need_reboot` is `true`, instance must be restarted, so reboot time settings can take effect.* **Only works when configuration from database is enabled.** @@ -821,13 +836,12 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret "need_reboot": true } ``` - need_reboot - *optional*, if were changed reboot time settings. ## `POST /api/pleroma/admin/config` ### Update config settings -*If `need_reboot` flag exists in response, instance must be restarted, so reboot time settings can take effect.* +*If `need_reboot` is `true`, instance must be restarted, so reboot time settings can take effect.* **Only works when configuration from database is enabled.** @@ -971,7 +985,6 @@ config :quack, "need_reboot": true } ``` -need_reboot - *optional*, if were changed reboot time settings. ## ` GET /api/pleroma/admin/config/descriptions` diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index 831c3bd02..8de7d70a3 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -914,16 +914,7 @@ def config_show(conn, _params) do end) |> List.flatten() - response = %{configs: merged} - - response = - if Restarter.Pleroma.need_reboot?() do - Map.put(response, :need_reboot, true) - else - response - end - - json(conn, response) + json(conn, %{configs: merged, need_reboot: Restarter.Pleroma.need_reboot?()}) end end @@ -950,28 +941,22 @@ def config_update(conn, %{"configs" => configs}) do Config.TransferTask.load_and_update_env(deleted, false) - need_reboot? = - Restarter.Pleroma.need_reboot?() || - Enum.any?(updated, fn config -> + if !Restarter.Pleroma.need_reboot?() do + changed_reboot_settings? = + (updated ++ deleted) + |> Enum.any?(fn config -> group = ConfigDB.from_string(config.group) key = ConfigDB.from_string(config.key) value = ConfigDB.from_binary(config.value) Config.TransferTask.pleroma_need_restart?(group, key, value) end) - response = %{configs: updated} - - response = - if need_reboot? do - Restarter.Pleroma.need_reboot() - Map.put(response, :need_reboot, need_reboot?) - else - response - end + if changed_reboot_settings?, do: Restarter.Pleroma.need_reboot() + end conn |> put_view(ConfigView) - |> render("index.json", response) + |> render("index.json", %{configs: updated, need_reboot: Restarter.Pleroma.need_reboot?()}) end end @@ -983,6 +968,10 @@ def restart(conn, _params) do end end + def need_reboot(conn, _params) do + json(conn, %{need_reboot: Restarter.Pleroma.need_reboot?()}) + end + defp configurable_from_database(conn) do if Config.get(:configurable_from_database) do :ok diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 5f5ec1c81..fd94913a1 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -203,6 +203,7 @@ defmodule Pleroma.Web.Router do get("/config", AdminAPIController, :config_show) post("/config", AdminAPIController, :config_update) get("/config/descriptions", AdminAPIController, :config_descriptions) + get("/need_reboot", AdminAPIController, :need_reboot) get("/restart", AdminAPIController, :restart) get("/moderation_log", AdminAPIController, :list_log) diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index 60ec895f5..158966365 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -2110,7 +2110,7 @@ test "saving config which need pleroma reboot", %{conn: conn} do |> get("/api/pleroma/admin/config") |> json_response(200) - refute Map.has_key?(configs, "need_reboot") + assert configs["need_reboot"] == false end test "update setting which need reboot, don't change reboot flag until reboot", %{conn: conn} do @@ -2166,7 +2166,7 @@ test "update setting which need reboot, don't change reboot flag until reboot", |> get("/api/pleroma/admin/config") |> json_response(200) - refute Map.has_key?(configs, "need_reboot") + assert configs["need_reboot"] == false end test "saving config with nested merge", %{conn: conn} do @@ -2861,6 +2861,20 @@ test "pleroma restarts", %{conn: conn} do end end + test "need_reboot flag", %{conn: conn} do + assert conn + |> get("/api/pleroma/admin/need_reboot") + |> json_response(200) == %{"need_reboot" => false} + + Restarter.Pleroma.need_reboot() + + assert conn + |> get("/api/pleroma/admin/need_reboot") + |> json_response(200) == %{"need_reboot" => true} + + on_exit(fn -> Restarter.Pleroma.refresh() end) + end + describe "GET /api/pleroma/admin/statuses" do test "returns all public and unlisted statuses", %{conn: conn, admin: admin} do blocked = insert(:user) From 77ee64b9930bf6b439f87112fa35e302f5125aa2 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 16 Apr 2020 17:54:57 +0300 Subject: [PATCH 280/581] user: remove blank? --- lib/pleroma/user.ex | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index fab405233..753b0c686 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -343,9 +343,15 @@ def remote_user_changeset(struct \\ %User{local: false}, params) do bio_limit = Pleroma.Config.get([:instance, :user_bio_length], 5000) name_limit = Pleroma.Config.get([:instance, :user_name_length], 100) + name = + case params[:name] do + name when is_binary(name) and byte_size(name) > 0 -> name + _ -> params[:nickname] + end + params = params - |> Map.put(:name, blank?(params[:name]) || params[:nickname]) + |> Map.put(:name, name) |> Map.put_new(:last_refreshed_at, NaiveDateTime.utc_now()) |> truncate_if_exists(:name, name_limit) |> truncate_if_exists(:bio, bio_limit) @@ -1599,9 +1605,6 @@ def get_public_key_for_ap_id(ap_id) do end end - defp blank?(""), do: nil - defp blank?(n), do: n - def ap_enabled?(%User{local: true}), do: true def ap_enabled?(%User{ap_enabled: ap_enabled}), do: ap_enabled def ap_enabled?(_), do: false From 4d330d9df13b7ff5d24fdd8b4eec1e111fa51297 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 16 Apr 2020 18:05:36 +0300 Subject: [PATCH 281/581] fix for use of published from different entities --- lib/pleroma/web/feed/feed_view.ex | 9 +++------ .../web/templates/feed/feed/_activity.atom.eex | 8 ++++---- .../web/templates/feed/feed/_activity.rss.eex | 8 ++++---- .../templates/feed/feed/_tag_activity.atom.eex | 16 ++++++++-------- .../templates/feed/feed/_tag_activity.xml.eex | 15 +++++++-------- test/web/feed/tag_controller_test.exs | 4 ++-- 6 files changed, 28 insertions(+), 32 deletions(-) diff --git a/lib/pleroma/web/feed/feed_view.ex b/lib/pleroma/web/feed/feed_view.ex index e18adaea8..1ae03e7e2 100644 --- a/lib/pleroma/web/feed/feed_view.ex +++ b/lib/pleroma/web/feed/feed_view.ex @@ -23,7 +23,7 @@ def pub_date(date) when is_binary(date) do def pub_date(%DateTime{} = date), do: Timex.format!(date, "{RFC822}") def prepare_activity(activity, opts \\ []) do - object = activity_object(activity) + object = Object.normalize(activity) actor = if opts[:actor] do @@ -33,7 +33,6 @@ def prepare_activity(activity, opts \\ []) do %{ activity: activity, data: Map.get(object, :data), - object: object, actor: actor } end @@ -68,9 +67,7 @@ def logo(user) do def last_activity(activities), do: List.last(activities) - def activity_object(activity), do: Object.normalize(activity) - - def activity_title(%{data: %{"content" => content}}, opts \\ %{}) do + def activity_title(%{"content" => content}, opts \\ %{}) do content |> Pleroma.Web.Metadata.Utils.scrub_html() |> Pleroma.Emoji.Formatter.demojify() @@ -78,7 +75,7 @@ def activity_title(%{data: %{"content" => content}}, opts \\ %{}) do |> escape() end - def activity_content(%{data: %{"content" => content}}) do + def activity_content(%{"content" => content}) do content |> String.replace(~r/[\n\r]/, "") |> escape() diff --git a/lib/pleroma/web/templates/feed/feed/_activity.atom.eex b/lib/pleroma/web/templates/feed/feed/_activity.atom.eex index ac8a75009..78350f2aa 100644 --- a/lib/pleroma/web/templates/feed/feed/_activity.atom.eex +++ b/lib/pleroma/web/templates/feed/feed/_activity.atom.eex @@ -2,10 +2,10 @@ http://activitystrea.ms/schema/1.0/note http://activitystrea.ms/schema/1.0/post <%= @data["id"] %> - <%= activity_title(@object, Keyword.get(@feed_config, :post_title, %{})) %> - <%= activity_content(@object) %> - <%= @data["published"] %> - <%= @data["published"] %> + <%= activity_title(@data, Keyword.get(@feed_config, :post_title, %{})) %> + <%= activity_content(@data) %> + <%= @activity.data["published"] %> + <%= @activity.data["published"] %> <%= activity_context(@activity) %> diff --git a/lib/pleroma/web/templates/feed/feed/_activity.rss.eex b/lib/pleroma/web/templates/feed/feed/_activity.rss.eex index a4dbed638..a304a16af 100644 --- a/lib/pleroma/web/templates/feed/feed/_activity.rss.eex +++ b/lib/pleroma/web/templates/feed/feed/_activity.rss.eex @@ -2,10 +2,10 @@ http://activitystrea.ms/schema/1.0/note http://activitystrea.ms/schema/1.0/post <%= @data["id"] %> - <%= activity_title(@object, Keyword.get(@feed_config, :post_title, %{})) %> - <%= activity_content(@object) %> - <%= @data["published"] %> - <%= @data["published"] %> + <%= activity_title(@data, Keyword.get(@feed_config, :post_title, %{})) %> + <%= activity_content(@data) %> + <%= @activity.data["published"] %> + <%= @activity.data["published"] %> <%= activity_context(@activity) %> diff --git a/lib/pleroma/web/templates/feed/feed/_tag_activity.atom.eex b/lib/pleroma/web/templates/feed/feed/_tag_activity.atom.eex index da4fa6d6c..cf5874a91 100644 --- a/lib/pleroma/web/templates/feed/feed/_tag_activity.atom.eex +++ b/lib/pleroma/web/templates/feed/feed/_tag_activity.atom.eex @@ -1,12 +1,12 @@ http://activitystrea.ms/schema/1.0/note http://activitystrea.ms/schema/1.0/post - + <%= render @view_module, "_tag_author.atom", assigns %> - + <%= @data["id"] %> - <%= activity_title(@object, Keyword.get(@feed_config, :post_title, %{})) %> - <%= activity_content(@object) %> + <%= activity_title(@data, Keyword.get(@feed_config, :post_title, %{})) %> + <%= activity_content(@data) %> <%= if @activity.local do %> @@ -15,8 +15,8 @@ <% end %> - <%= @data["published"] %> - <%= @data["published"] %> + <%= @activity.data["published"] %> + <%= @activity.data["published"] %> <%= activity_context(@activity) %> @@ -26,7 +26,7 @@ <%= if @data["summary"] do %> <%= @data["summary"] %> <% end %> - + <%= for id <- @activity.recipients do %> <%= if id == Pleroma.Constants.as_public() do %> <% end %> <% end %> - + <%= for tag <- @data["tag"] || [] do %> <% end %> diff --git a/lib/pleroma/web/templates/feed/feed/_tag_activity.xml.eex b/lib/pleroma/web/templates/feed/feed/_tag_activity.xml.eex index 295574df1..2334e24a2 100644 --- a/lib/pleroma/web/templates/feed/feed/_tag_activity.xml.eex +++ b/lib/pleroma/web/templates/feed/feed/_tag_activity.xml.eex @@ -1,15 +1,14 @@ - <%= activity_title(@object, Keyword.get(@feed_config, :post_title, %{})) %> - - + <%= activity_title(@data, Keyword.get(@feed_config, :post_title, %{})) %> + + <%= activity_context(@activity) %> <%= activity_context(@activity) %> - <%= pub_date(@data["published"]) %> - - <%= activity_content(@object) %> + <%= pub_date(@activity.data["published"]) %> + + <%= activity_content(@data) %> <%= for attachment <- @data["attachment"] || [] do %> <% end %> - - + diff --git a/test/web/feed/tag_controller_test.exs b/test/web/feed/tag_controller_test.exs index e863df86b..d95aac108 100644 --- a/test/web/feed/tag_controller_test.exs +++ b/test/web/feed/tag_controller_test.exs @@ -150,8 +150,8 @@ test "gets a feed (RSS)", %{conn: conn} do obj2 = Object.normalize(activity2) assert xpath(xml, ~x"//channel/item/description/text()"sl) == [ - HtmlEntities.decode(FeedView.activity_content(obj2)), - HtmlEntities.decode(FeedView.activity_content(obj1)) + HtmlEntities.decode(FeedView.activity_content(obj2.data)), + HtmlEntities.decode(FeedView.activity_content(obj1.data)) ] response = From 304ea09f4c9902a1f96f30541e6c5d253527dd47 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 17 Apr 2020 08:42:48 +0300 Subject: [PATCH 282/581] fix for logger configuration --- lib/pleroma/config/transfer_task.ex | 9 ++++++-- test/config/transfer_task_test.exs | 32 +++++++++++------------------ 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/lib/pleroma/config/transfer_task.ex b/lib/pleroma/config/transfer_task.ex index 3871e1cbb..f4722f99d 100644 --- a/lib/pleroma/config/transfer_task.ex +++ b/lib/pleroma/config/transfer_task.ex @@ -122,7 +122,7 @@ defp configure({_, :backends, _, merged}) do :ok = update_env(:logger, :backends, merged) end - defp configure({group, key, _, merged}) do + defp configure({_, key, _, merged}) when key in [:console, :ex_syslogger] do merged = if key == :console do put_in(merged[:format], merged[:format] <> "\n") @@ -136,7 +136,12 @@ defp configure({group, key, _, merged}) do else: key Logger.configure_backend(backend, merged) - :ok = update_env(:logger, group, merged) + :ok = update_env(:logger, key, merged) + end + + defp configure({_, key, _, merged}) do + Logger.configure([{key, merged}]) + :ok = update_env(:logger, key, merged) end defp update({group, key, value, merged}) do diff --git a/test/config/transfer_task_test.exs b/test/config/transfer_task_test.exs index 0265a6156..00db0b686 100644 --- a/test/config/transfer_task_test.exs +++ b/test/config/transfer_task_test.exs @@ -16,6 +16,7 @@ test "transfer config values from db to env" do refute Application.get_env(:pleroma, :test_key) refute Application.get_env(:idna, :test_key) refute Application.get_env(:quack, :test_key) + initial = Application.get_env(:logger, :level) ConfigDB.create(%{ group: ":pleroma", @@ -35,16 +36,20 @@ test "transfer config values from db to env" do value: [:test_value1, :test_value2] }) + ConfigDB.create(%{group: ":logger", key: ":level", value: :debug}) + TransferTask.start_link([]) assert Application.get_env(:pleroma, :test_key) == [live: 2, com: 3] assert Application.get_env(:idna, :test_key) == [live: 15, com: 35] assert Application.get_env(:quack, :test_key) == [:test_value1, :test_value2] + assert Application.get_env(:logger, :level) == :debug on_exit(fn -> Application.delete_env(:pleroma, :test_key) Application.delete_env(:idna, :test_key) Application.delete_env(:quack, :test_key) + Application.put_env(:logger, :level, initial) end) end @@ -78,8 +83,8 @@ test "transfer config values for 1 group and some keys" do end test "transfer config values with full subkey update" do - emoji = Application.get_env(:pleroma, :emoji) - assets = Application.get_env(:pleroma, :assets) + clear_config(:emoji) + clear_config(:assets) ConfigDB.create(%{ group: ":pleroma", @@ -99,11 +104,6 @@ test "transfer config values with full subkey update" do assert emoji_env[:groups] == [a: 1, b: 2] assets_env = Application.get_env(:pleroma, :assets) assert assets_env[:mascots] == [a: 1, b: 2] - - on_exit(fn -> - Application.put_env(:pleroma, :emoji, emoji) - Application.put_env(:pleroma, :assets, assets) - end) end describe "pleroma restart" do @@ -112,8 +112,7 @@ test "transfer config values with full subkey update" do end test "don't restart if no reboot time settings were changed" do - emoji = Application.get_env(:pleroma, :emoji) - on_exit(fn -> Application.put_env(:pleroma, :emoji, emoji) end) + clear_config(:emoji) ConfigDB.create(%{ group: ":pleroma", @@ -128,8 +127,7 @@ test "don't restart if no reboot time settings were changed" do end test "on reboot time key" do - chat = Application.get_env(:pleroma, :chat) - on_exit(fn -> Application.put_env(:pleroma, :chat, chat) end) + clear_config(:chat) ConfigDB.create(%{ group: ":pleroma", @@ -141,8 +139,7 @@ test "on reboot time key" do end test "on reboot time subkey" do - captcha = Application.get_env(:pleroma, Pleroma.Captcha) - on_exit(fn -> Application.put_env(:pleroma, Pleroma.Captcha, captcha) end) + clear_config(Pleroma.Captcha) ConfigDB.create(%{ group: ":pleroma", @@ -154,13 +151,8 @@ test "on reboot time subkey" do end test "don't restart pleroma on reboot time key and subkey if there is false flag" do - chat = Application.get_env(:pleroma, :chat) - captcha = Application.get_env(:pleroma, Pleroma.Captcha) - - on_exit(fn -> - Application.put_env(:pleroma, :chat, chat) - Application.put_env(:pleroma, Pleroma.Captcha, captcha) - end) + clear_config(:chat) + clear_config(Pleroma.Captcha) ConfigDB.create(%{ group: ":pleroma", From 4d22b100b777b59e79180d5d3ea8615db940b1fc Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 17 Apr 2020 12:33:11 +0300 Subject: [PATCH 283/581] move changelogs entries to unreleased section --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce6737408..2239a5288 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,10 +12,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - NodeInfo: `pleroma_emoji_reactions` to the `features` list. - Configuration: `:restrict_unauthenticated` setting, restrict access for unauthenticated users to timelines (public and federate), user profiles and statuses. - New HTTP adapter [gun](https://github.com/ninenines/gun). Gun adapter requires minimum OTP version of 22.2 otherwise Pleroma won’t start. For hackney OTP update is not required. +- Mix task to create trusted OAuth App.
API Changes - Mastodon API: Support for `include_types` in `/api/v1/notifications`. - Mastodon API: Added `/api/v1/notifications/:id/dismiss` endpoint. +- Admin API: endpoints for create/update/delete OAuth Apps.
### Fixed @@ -155,7 +157,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Add an option `authorized_fetch_mode` to require HTTP signatures for AP fetches. - ActivityPub: support for `replies` collection (output for outgoing federation & fetching on incoming federation). - Mix task to refresh counter cache (`mix pleroma.refresh_counter_cache`) -- Mix task to create trusted OAuth App.
API Changes @@ -202,7 +203,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - ActivityPub: `[:activitypub, :note_replies_output_limit]` setting sets the number of note self-replies to output on outgoing federation. - Admin API: `GET /api/pleroma/admin/stats` to get status count by visibility scope - Admin API: `GET /api/pleroma/admin/statuses` - list all statuses (accepts `godmode` and `local_only`) -- Admin API: endpoints for create/update/delete OAuth Apps.
### Fixed From 6cda360fea8a42168b5835ef903cf3bf89c8151a Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 16 Apr 2020 10:36:37 +0300 Subject: [PATCH 284/581] don't restart postgrex --- lib/pleroma/config/loader.ex | 2 +- lib/pleroma/config/transfer_task.ex | 20 +++++++++++--------- test/config/transfer_task_test.exs | 9 +++++++++ test/fixtures/config/temp.secret.exs | 2 ++ test/tasks/config_test.exs | 3 ++- 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/lib/pleroma/config/loader.ex b/lib/pleroma/config/loader.ex index 6ca6550bd..0f3ecf1ed 100644 --- a/lib/pleroma/config/loader.ex +++ b/lib/pleroma/config/loader.ex @@ -47,7 +47,7 @@ defp filter(configs) do @spec filter_group(atom(), keyword()) :: keyword() def filter_group(group, configs) do Enum.reject(configs[group], fn {key, _v} -> - key in @reject_keys or (group == :phoenix and key == :serve_endpoints) + key in @reject_keys or (group == :phoenix and key == :serve_endpoints) or group == :postgrex end) end end diff --git a/lib/pleroma/config/transfer_task.ex b/lib/pleroma/config/transfer_task.ex index f4722f99d..c02b70e96 100644 --- a/lib/pleroma/config/transfer_task.ex +++ b/lib/pleroma/config/transfer_task.ex @@ -46,14 +46,6 @@ def load_and_update_env(deleted_settings \\ [], restart_pleroma? \\ true) do with {_, true} <- {:configurable, Config.get(:configurable_from_database)} do # We need to restart applications for loaded settings take effect - # TODO: some problem with prometheus after restart! - reject_restart = - if restart_pleroma? do - [nil, :prometheus] - else - [:pleroma, nil, :prometheus] - end - {logger, other} = (Repo.all(ConfigDB) ++ deleted_settings) |> Enum.map(&transform_and_merge/1) @@ -65,10 +57,20 @@ def load_and_update_env(deleted_settings \\ [], restart_pleroma? \\ true) do started_applications = Application.started_applications() + # TODO: some problem with prometheus after restart! + reject = [nil, :prometheus, :postgrex] + + reject = + if restart_pleroma? do + reject + else + [:pleroma | reject] + end + other |> Enum.map(&update/1) |> Enum.uniq() - |> Enum.reject(&(&1 in reject_restart)) + |> Enum.reject(&(&1 in reject)) |> maybe_set_pleroma_last() |> Enum.each(&restart(started_applications, &1, Config.get(:env))) diff --git a/test/config/transfer_task_test.exs b/test/config/transfer_task_test.exs index 00db0b686..473899d1d 100644 --- a/test/config/transfer_task_test.exs +++ b/test/config/transfer_task_test.exs @@ -16,6 +16,7 @@ test "transfer config values from db to env" do refute Application.get_env(:pleroma, :test_key) refute Application.get_env(:idna, :test_key) refute Application.get_env(:quack, :test_key) + refute Application.get_env(:postgrex, :test_key) initial = Application.get_env(:logger, :level) ConfigDB.create(%{ @@ -36,6 +37,12 @@ test "transfer config values from db to env" do value: [:test_value1, :test_value2] }) + ConfigDB.create(%{ + group: ":postgrex", + key: ":test_key", + value: :value + }) + ConfigDB.create(%{group: ":logger", key: ":level", value: :debug}) TransferTask.start_link([]) @@ -44,11 +51,13 @@ test "transfer config values from db to env" do assert Application.get_env(:idna, :test_key) == [live: 15, com: 35] assert Application.get_env(:quack, :test_key) == [:test_value1, :test_value2] assert Application.get_env(:logger, :level) == :debug + assert Application.get_env(:postgrex, :test_key) == :value on_exit(fn -> Application.delete_env(:pleroma, :test_key) Application.delete_env(:idna, :test_key) Application.delete_env(:quack, :test_key) + Application.delete_env(:postgrex, :test_key) Application.put_env(:logger, :level, initial) end) end diff --git a/test/fixtures/config/temp.secret.exs b/test/fixtures/config/temp.secret.exs index f4686c101..dc950ca30 100644 --- a/test/fixtures/config/temp.secret.exs +++ b/test/fixtures/config/temp.secret.exs @@ -7,3 +7,5 @@ config :quack, level: :info config :pleroma, Pleroma.Repo, pool: Ecto.Adapters.SQL.Sandbox + +config :postgrex, :json_library, Poison diff --git a/test/tasks/config_test.exs b/test/tasks/config_test.exs index 3dee4f082..04bc947a9 100644 --- a/test/tasks/config_test.exs +++ b/test/tasks/config_test.exs @@ -38,7 +38,7 @@ test "error if file with custom settings doesn't exist" do on_exit(fn -> Application.put_env(:quack, :level, initial) end) end - test "settings are migrated to db" do + test "filtered settings are migrated to db" do assert Repo.all(ConfigDB) == [] Mix.Tasks.Pleroma.Config.migrate_to_db("test/fixtures/config/temp.secret.exs") @@ -47,6 +47,7 @@ test "settings are migrated to db" do config2 = ConfigDB.get_by_params(%{group: ":pleroma", key: ":second_setting"}) config3 = ConfigDB.get_by_params(%{group: ":quack", key: ":level"}) refute ConfigDB.get_by_params(%{group: ":pleroma", key: "Pleroma.Repo"}) + refute ConfigDB.get_by_params(%{group: ":postgrex", key: ":json_library"}) assert ConfigDB.from_binary(config1.value) == [key: "value", key2: [Repo]] assert ConfigDB.from_binary(config2.value) == [key: "value2", key2: ["Activity"]] From 46f051048fb1afb02fe81b872ae9f595f2c5f2c1 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Fri, 17 Apr 2020 14:32:15 +0200 Subject: [PATCH 285/581] migrations/20200406100225_users_add_emoji: Fix tag to Emoji filtering --- lib/pleroma/web/activity_pub/activity_pub.ex | 2 +- priv/repo/migrations/20200406100225_users_add_emoji.exs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 35af0f7dc..d403405a0 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1430,7 +1430,7 @@ defp object_to_user_data(data) do emojis = data |> Map.get("tag", []) - |> Enum.filter(fn %{"type" => t} -> t == "Emoji" end) + |> Enum.filter(fn data -> data["type"] == "Emoji" and data["icon"] end) |> Enum.reduce(%{}, fn %{"icon" => %{"url" => url}, "name" => name}, acc -> Map.put(acc, String.trim(name, ":"), url) end) diff --git a/priv/repo/migrations/20200406100225_users_add_emoji.exs b/priv/repo/migrations/20200406100225_users_add_emoji.exs index d0254c170..9f57abb5c 100644 --- a/priv/repo/migrations/20200406100225_users_add_emoji.exs +++ b/priv/repo/migrations/20200406100225_users_add_emoji.exs @@ -17,7 +17,7 @@ def up do emoji = user.source_data |> Map.get("tag", []) - |> Enum.filter(fn %{"type" => t} -> t == "Emoji" end) + |> Enum.filter(fn data -> data["type"] == "Emoji" and data["icon"] end) |> Enum.reduce(%{}, fn %{"icon" => %{"url" => url}, "name" => name}, acc -> Map.put(acc, String.trim(name, ":"), url) end) From 26d9c83316fe5d8a3bf1f8fadae727788a92a725 Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 17 Apr 2020 15:50:15 +0200 Subject: [PATCH 286/581] SideEffects: Test for notification creation. --- lib/pleroma/web/activity_pub/side_effects.ex | 2 ++ test/web/activity_pub/side_effects_test.exs | 12 ++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 666a4e310..6a8f1af96 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -17,7 +17,9 @@ def handle(object, meta \\ []) def handle(%{data: %{"type" => "Like"}} = object, meta) do liked_object = Object.get_by_ap_id(object.data["object"]) Utils.add_like_to_object(object, liked_object) + Notification.create_notifications(object) + {:ok, object, meta} end diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index b67bd14b3..0b6b55156 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -5,7 +5,9 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do use Pleroma.DataCase + alias Pleroma.Notification alias Pleroma.Object + alias Pleroma.Repo alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Builder alias Pleroma.Web.ActivityPub.SideEffects @@ -15,13 +17,14 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do describe "like objects" do setup do + poster = insert(:user) user = insert(:user) - {:ok, post} = CommonAPI.post(user, %{"status" => "hey"}) + {:ok, post} = CommonAPI.post(poster, %{"status" => "hey"}) {:ok, like_data, _meta} = Builder.like(user, post.object) {:ok, like, _meta} = ActivityPub.persist(like_data, local: true) - %{like: like, user: user} + %{like: like, user: user, poster: poster} end test "add the like to the original object", %{like: like, user: user} do @@ -30,5 +33,10 @@ test "add the like to the original object", %{like: like, user: user} do assert object.data["like_count"] == 1 assert user.ap_id in object.data["likes"] end + + test "creates a notification", %{like: like, poster: poster} do + {:ok, like, _} = SideEffects.handle(like) + assert Repo.get_by(Notification, user_id: poster.id, activity_id: like.id) + end end end From 163341857a726e8d74b6ddcd1230579e4c36a1b5 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Fri, 17 Apr 2020 19:27:22 +0400 Subject: [PATCH 287/581] Improve OpenAPI errors --- lib/pleroma/web/api_spec/render_error.ex | 220 +++++++++++++++++- .../controllers/account_controller_test.exs | 11 +- 2 files changed, 222 insertions(+), 9 deletions(-) diff --git a/lib/pleroma/web/api_spec/render_error.ex b/lib/pleroma/web/api_spec/render_error.ex index 9184c43b6..b5877ca9c 100644 --- a/lib/pleroma/web/api_spec/render_error.ex +++ b/lib/pleroma/web/api_spec/render_error.ex @@ -5,23 +5,227 @@ defmodule Pleroma.Web.ApiSpec.RenderError do @behaviour Plug - alias OpenApiSpex.Plug.JsonRenderError - alias Plug.Conn + import Plug.Conn, only: [put_status: 2] + import Phoenix.Controller, only: [json: 2] + import Pleroma.Web.Gettext @impl Plug def init(opts), do: opts @impl Plug - def call(%{private: %{open_api_spex: %{operation_id: "AccountController.create"}}} = conn, _) do + def call(conn, errors) do + errors = + Enum.map(errors, fn + %{name: nil} = err -> + %OpenApiSpex.Cast.Error{err | name: List.last(err.path)} + + err -> + err + end) + conn - |> Conn.put_status(:bad_request) - |> Phoenix.Controller.json(%{"error" => "Missing parameters"}) + |> put_status(:bad_request) + |> json(%{ + error: errors |> Enum.map(&message/1) |> Enum.join(" "), + errors: errors |> Enum.map(&render_error/1) + }) end - def call(conn, reason) do - opts = JsonRenderError.init(reason) + defp render_error(error) do + pointer = OpenApiSpex.path_to_string(error) - JsonRenderError.call(conn, opts) + %{ + title: "Invalid value", + source: %{ + pointer: pointer + }, + message: OpenApiSpex.Cast.Error.message(error) + } + end + + defp message(%{reason: :invalid_schema_type, type: type, name: name}) do + gettext("%{name} - Invalid schema.type. Got: %{type}.", + name: name, + type: inspect(type) + ) + end + + defp message(%{reason: :null_value, name: name} = error) do + case error.type do + nil -> + gettext("%{name} - null value.", name: name) + + type -> + gettext("%{name} - null value where %{type} expected.", + name: name, + type: type + ) + end + end + + defp message(%{reason: :all_of, meta: %{invalid_schema: invalid_schema}}) do + gettext( + "Failed to cast value as %{invalid_schema}. Value must be castable using `allOf` schemas listed.", + invalid_schema: invalid_schema + ) + end + + defp message(%{reason: :any_of, meta: %{failed_schemas: failed_schemas}}) do + gettext("Failed to cast value using any of: %{failed_schemas}.", + failed_schemas: failed_schemas + ) + end + + defp message(%{reason: :one_of, meta: %{failed_schemas: failed_schemas}}) do + gettext("Failed to cast value to one of: %{failed_schemas}.", failed_schemas: failed_schemas) + end + + defp message(%{reason: :min_length, length: length, name: name}) do + gettext("%{name} - String length is smaller than minLength: %{length}.", + name: name, + length: length + ) + end + + defp message(%{reason: :max_length, length: length, name: name}) do + gettext("%{name} - String length is larger than maxLength: %{length}.", + name: name, + length: length + ) + end + + defp message(%{reason: :unique_items, name: name}) do + gettext("%{name} - Array items must be unique.", name: name) + end + + defp message(%{reason: :min_items, length: min, value: array, name: name}) do + gettext("%{name} - Array length %{length} is smaller than minItems: %{min}.", + name: name, + length: length(array), + min: min + ) + end + + defp message(%{reason: :max_items, length: max, value: array, name: name}) do + gettext("%{name} - Array length %{length} is larger than maxItems: %{}.", + name: name, + length: length(array), + max: max + ) + end + + defp message(%{reason: :multiple_of, length: multiple, value: count, name: name}) do + gettext("%{name} - %{count} is not a multiple of %{multiple}.", + name: name, + count: count, + multiple: multiple + ) + end + + defp message(%{reason: :exclusive_max, length: max, value: value, name: name}) + when value >= max do + gettext("%{name} - %{value} is larger than exclusive maximum %{max}.", + name: name, + value: value, + max: max + ) + end + + defp message(%{reason: :maximum, length: max, value: value, name: name}) + when value > max do + gettext("%{name} - %{value} is larger than inclusive maximum %{max}.", + name: name, + value: value, + max: max + ) + end + + defp message(%{reason: :exclusive_multiple, length: min, value: value, name: name}) + when value <= min do + gettext("%{name} - %{value} is smaller than exclusive minimum %{min}.", + name: name, + value: value, + min: min + ) + end + + defp message(%{reason: :minimum, length: min, value: value, name: name}) + when value < min do + gettext("%{name} - %{value} is smaller than inclusive minimum %{min}.", + name: name, + value: value, + min: min + ) + end + + defp message(%{reason: :invalid_type, type: type, value: value, name: name}) do + gettext("%{name} - Invalid %{type}. Got: %{value}.", + name: name, + value: OpenApiSpex.TermType.type(value), + type: type + ) + end + + defp message(%{reason: :invalid_format, format: format, name: name}) do + gettext("%{name} - Invalid format. Expected %{format}.", name: name, format: inspect(format)) + end + + defp message(%{reason: :invalid_enum, name: name}) do + gettext("%{name} - Invalid value for enum.", name: name) + end + + defp message(%{reason: :polymorphic_failed, type: polymorphic_type}) do + gettext("Failed to cast to any schema in %{polymorphic_type}", + polymorphic_type: polymorphic_type + ) + end + + defp message(%{reason: :unexpected_field, name: name}) do + gettext("Unexpected field: %{name}.", name: safe_string(name)) + end + + defp message(%{reason: :no_value_for_discriminator, name: field}) do + gettext("Value used as discriminator for `%{field}` matches no schemas.", name: field) + end + + defp message(%{reason: :invalid_discriminator_value, name: field}) do + gettext("No value provided for required discriminator `%{field}`.", name: field) + end + + defp message(%{reason: :unknown_schema, name: name}) do + gettext("Unknown schema: %{name}.", name: name) + end + + defp message(%{reason: :missing_field, name: name}) do + gettext("Missing field: %{name}.", name: name) + end + + defp message(%{reason: :missing_header, name: name}) do + gettext("Missing header: %{name}.", name: name) + end + + defp message(%{reason: :invalid_header, name: name}) do + gettext("Invalid value for header: %{name}.", name: name) + end + + defp message(%{reason: :max_properties, meta: meta}) do + gettext( + "Object property count %{property_count} is greater than maxProperties: %{max_properties}.", + property_count: meta.property_count, + max_properties: meta.max_properties + ) + end + + defp message(%{reason: :min_properties, meta: meta}) do + gettext( + "Object property count %{property_count} is less than minProperties: %{min_properties}", + property_count: meta.property_count, + min_properties: meta.min_properties + ) + end + + defp safe_string(string) do + to_string(string) |> String.slice(0..39) end end diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 86136f7e4..133d7f642 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -952,7 +952,16 @@ test "returns bad_request if missing required params", %{ |> post("/api/v1/accounts", Map.delete(valid_params, attr)) |> json_response(400) - assert res == %{"error" => "Missing parameters"} + assert res == %{ + "error" => "Missing field: #{attr}.", + "errors" => [ + %{ + "message" => "Missing field: #{attr}", + "source" => %{"pointer" => "/#{attr}"}, + "title" => "Invalid value" + } + ] + } end) end From 66f55106bda23e0cfb01cb63f7397f4383518963 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Fri, 17 Apr 2020 21:21:10 +0300 Subject: [PATCH 288/581] [#1682] Fixed Basic Auth permissions issue by disabling OAuth scopes checks when password is provided. Refactored plugs skipping functionality. --- CHANGELOG.md | 1 + lib/pleroma/plugs/authentication_plug.ex | 6 ++- .../plugs/legacy_authentication_plug.ex | 3 ++ lib/pleroma/plugs/plug_helper.ex | 24 +++++----- lib/pleroma/web/web.ex | 28 ++++++++--- test/plugs/authentication_plug_test.exs | 7 ++- .../plugs/legacy_authentication_plug_test.exs | 6 ++- test/plugs/oauth_scopes_plug_test.exs | 3 +- test/web/auth/basic_auth_test.exs | 46 +++++++++++++++++++ 9 files changed, 101 insertions(+), 23 deletions(-) create mode 100644 test/web/auth/basic_auth_test.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index 2239a5288..53a3d7fcf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [unreleased-patch] ### Fixed - Logger configuration through AdminFE +- HTTP Basic Authentication permissions issue ### Added
diff --git a/lib/pleroma/plugs/authentication_plug.ex b/lib/pleroma/plugs/authentication_plug.ex index 089028d77..0061c69dc 100644 --- a/lib/pleroma/plugs/authentication_plug.ex +++ b/lib/pleroma/plugs/authentication_plug.ex @@ -4,8 +4,11 @@ defmodule Pleroma.Plugs.AuthenticationPlug do alias Comeonin.Pbkdf2 - import Plug.Conn + alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.User + + import Plug.Conn + require Logger def init(options), do: options @@ -37,6 +40,7 @@ def call( if Pbkdf2.checkpw(password, password_hash) do conn |> assign(:user, auth_user) + |> OAuthScopesPlug.skip_plug() else conn end diff --git a/lib/pleroma/plugs/legacy_authentication_plug.ex b/lib/pleroma/plugs/legacy_authentication_plug.ex index 5c5c36c56..d346e01a6 100644 --- a/lib/pleroma/plugs/legacy_authentication_plug.ex +++ b/lib/pleroma/plugs/legacy_authentication_plug.ex @@ -4,6 +4,8 @@ defmodule Pleroma.Plugs.LegacyAuthenticationPlug do import Plug.Conn + + alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.User def init(options) do @@ -27,6 +29,7 @@ def call( conn |> assign(:auth_user, user) |> assign(:user, user) + |> OAuthScopesPlug.skip_plug() else _ -> conn diff --git a/lib/pleroma/plugs/plug_helper.ex b/lib/pleroma/plugs/plug_helper.ex index 4f83e9414..9c67be8ef 100644 --- a/lib/pleroma/plugs/plug_helper.ex +++ b/lib/pleroma/plugs/plug_helper.ex @@ -5,30 +5,32 @@ defmodule Pleroma.Plugs.PlugHelper do @moduledoc "Pleroma Plug helper" - def append_to_called_plugs(conn, plug_module) do - append_to_private_list(conn, :called_plugs, plug_module) - end + @called_plugs_list_id :called_plugs + def called_plugs_list_id, do: @called_plugs_list_id - def append_to_skipped_plugs(conn, plug_module) do - append_to_private_list(conn, :skipped_plugs, plug_module) - end + @skipped_plugs_list_id :skipped_plugs + def skipped_plugs_list_id, do: @skipped_plugs_list_id + @doc "Returns `true` if specified plug was called." def plug_called?(conn, plug_module) do - contained_in_private_list?(conn, :called_plugs, plug_module) + contained_in_private_list?(conn, @called_plugs_list_id, plug_module) end + @doc "Returns `true` if specified plug was explicitly marked as skipped." def plug_skipped?(conn, plug_module) do - contained_in_private_list?(conn, :skipped_plugs, plug_module) + contained_in_private_list?(conn, @skipped_plugs_list_id, plug_module) end + @doc "Returns `true` if specified plug was either called or explicitly marked as skipped." def plug_called_or_skipped?(conn, plug_module) do plug_called?(conn, plug_module) || plug_skipped?(conn, plug_module) end - defp append_to_private_list(conn, private_variable, value) do - list = conn.private[private_variable] || [] + # Appends plug to known list (skipped, called). Intended to be used from within plug code only. + def append_to_private_list(conn, list_id, value) do + list = conn.private[list_id] || [] modified_list = Enum.uniq(list ++ [value]) - Plug.Conn.put_private(conn, private_variable, modified_list) + Plug.Conn.put_private(conn, list_id, modified_list) end defp contained_in_private_list?(conn, private_variable, value) do diff --git a/lib/pleroma/web/web.ex b/lib/pleroma/web/web.ex index ae7c94640..bf48ce26c 100644 --- a/lib/pleroma/web/web.ex +++ b/lib/pleroma/web/web.ex @@ -40,17 +40,22 @@ defp set_put_layout(conn, _) do # Marks a plug intentionally skipped and blocks its execution if it's present in plugs chain defp skip_plug(conn, plug_module) do try do - plug_module.ensure_skippable() + plug_module.skip_plug(conn) rescue UndefinedFunctionError -> raise "#{plug_module} is not skippable. Append `use Pleroma.Web, :plug` to its code." end - - PlugHelper.append_to_skipped_plugs(conn, plug_module) end - # Here we can apply before-action hooks (e.g. verify whether auth checks were preformed) + # Executed just before actual controller action, invokes before-action hooks (callbacks) defp action(conn, params) do + with %Plug.Conn{halted: false} <- maybe_halt_on_missing_oauth_scopes_check(conn) do + super(conn, params) + end + end + + # Halts if authenticated API action neither performs nor explicitly skips OAuth scopes check + defp maybe_halt_on_missing_oauth_scopes_check(conn) do if Pleroma.Plugs.AuthExpectedPlug.auth_expected?(conn) && not PlugHelper.plug_called_or_skipped?(conn, Pleroma.Plugs.OAuthScopesPlug) do conn @@ -60,7 +65,7 @@ defp action(conn, params) do ) |> halt() else - super(conn, params) + conn end end end @@ -129,7 +134,16 @@ def plug do quote do alias Pleroma.Plugs.PlugHelper - def ensure_skippable, do: :noop + @doc """ + Marks a plug intentionally skipped and blocks its execution if it's present in plugs chain. + """ + def skip_plug(conn) do + PlugHelper.append_to_private_list( + conn, + PlugHelper.skipped_plugs_list_id(), + __MODULE__ + ) + end @impl Plug @doc "If marked as skipped, returns `conn`, and calls `perform/2` otherwise." @@ -138,7 +152,7 @@ def call(%Plug.Conn{} = conn, options) do conn else conn - |> PlugHelper.append_to_called_plugs(__MODULE__) + |> PlugHelper.append_to_private_list(PlugHelper.called_plugs_list_id(), __MODULE__) |> perform(options) end end diff --git a/test/plugs/authentication_plug_test.exs b/test/plugs/authentication_plug_test.exs index ae2f3f8ec..646bda9d3 100644 --- a/test/plugs/authentication_plug_test.exs +++ b/test/plugs/authentication_plug_test.exs @@ -6,6 +6,8 @@ defmodule Pleroma.Plugs.AuthenticationPlugTest do use Pleroma.Web.ConnCase, async: true alias Pleroma.Plugs.AuthenticationPlug + alias Pleroma.Plugs.OAuthScopesPlug + alias Pleroma.Plugs.PlugHelper alias Pleroma.User import ExUnit.CaptureLog @@ -36,13 +38,16 @@ test "it does nothing if a user is assigned", %{conn: conn} do assert ret_conn == conn end - test "with a correct password in the credentials, it assigns the auth_user", %{conn: conn} do + test "with a correct password in the credentials, " <> + "it assigns the auth_user and marks OAuthScopesPlug as skipped", + %{conn: conn} do conn = conn |> assign(:auth_credentials, %{password: "guy"}) |> AuthenticationPlug.call(%{}) assert conn.assigns.user == conn.assigns.auth_user + assert PlugHelper.plug_skipped?(conn, OAuthScopesPlug) end test "with a wrong password in the credentials, it does nothing", %{conn: conn} do diff --git a/test/plugs/legacy_authentication_plug_test.exs b/test/plugs/legacy_authentication_plug_test.exs index 7559de7d3..3b8c07627 100644 --- a/test/plugs/legacy_authentication_plug_test.exs +++ b/test/plugs/legacy_authentication_plug_test.exs @@ -8,6 +8,8 @@ defmodule Pleroma.Plugs.LegacyAuthenticationPlugTest do import Pleroma.Factory alias Pleroma.Plugs.LegacyAuthenticationPlug + alias Pleroma.Plugs.OAuthScopesPlug + alias Pleroma.Plugs.PlugHelper alias Pleroma.User setup do @@ -36,7 +38,8 @@ test "it does nothing if a user is assigned", %{conn: conn, user: user} do end @tag :skip_on_mac - test "it authenticates the auth_user if present and password is correct and resets the password", + test "if `auth_user` is present and password is correct, " <> + "it authenticates the user, resets the password, marks OAuthScopesPlug as skipped", %{ conn: conn, user: user @@ -49,6 +52,7 @@ test "it authenticates the auth_user if present and password is correct and rese conn = LegacyAuthenticationPlug.call(conn, %{}) assert conn.assigns.user.id == user.id + assert PlugHelper.plug_skipped?(conn, OAuthScopesPlug) end @tag :skip_on_mac diff --git a/test/plugs/oauth_scopes_plug_test.exs b/test/plugs/oauth_scopes_plug_test.exs index abab7abb0..edbc94227 100644 --- a/test/plugs/oauth_scopes_plug_test.exs +++ b/test/plugs/oauth_scopes_plug_test.exs @@ -7,7 +7,6 @@ defmodule Pleroma.Plugs.OAuthScopesPlugTest do alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug alias Pleroma.Plugs.OAuthScopesPlug - alias Pleroma.Plugs.PlugHelper alias Pleroma.Repo import Mock @@ -21,7 +20,7 @@ test "is not performed if marked as skipped", %{conn: conn} do with_mock OAuthScopesPlug, [:passthrough], perform: &passthrough([&1, &2]) do conn = conn - |> PlugHelper.append_to_skipped_plugs(OAuthScopesPlug) + |> OAuthScopesPlug.skip_plug() |> OAuthScopesPlug.call(%{scopes: ["random_scope"]}) refute called(OAuthScopesPlug.perform(:_, :_)) diff --git a/test/web/auth/basic_auth_test.exs b/test/web/auth/basic_auth_test.exs new file mode 100644 index 000000000..64f8a6863 --- /dev/null +++ b/test/web/auth/basic_auth_test.exs @@ -0,0 +1,46 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.Auth.BasicAuthTest do + use Pleroma.Web.ConnCase + + import Pleroma.Factory + + test "with HTTP Basic Auth used, grants access to OAuth scope-restricted endpoints", %{ + conn: conn + } do + user = insert(:user) + assert Comeonin.Pbkdf2.checkpw("test", user.password_hash) + + basic_auth_contents = + (URI.encode_www_form(user.nickname) <> ":" <> URI.encode_www_form("test")) + |> Base.encode64() + + # Succeeds with HTTP Basic Auth + response = + conn + |> put_req_header("authorization", "Basic " <> basic_auth_contents) + |> get("/api/v1/accounts/verify_credentials") + |> json_response(200) + + user_nickname = user.nickname + assert %{"username" => ^user_nickname} = response + + # Succeeds with a properly scoped OAuth token + valid_token = insert(:oauth_token, scopes: ["read:accounts"]) + + conn + |> put_req_header("authorization", "Bearer #{valid_token.token}") + |> get("/api/v1/accounts/verify_credentials") + |> json_response(200) + + # Fails with a wrong-scoped OAuth token (proof of restriction) + invalid_token = insert(:oauth_token, scopes: ["read:something"]) + + conn + |> put_req_header("authorization", "Bearer #{invalid_token.token}") + |> get("/api/v1/accounts/verify_credentials") + |> json_response(403) + end +end From 24e0db6310851783375549e1e68c661c237261a5 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 17 Apr 2020 13:22:25 -0500 Subject: [PATCH 289/581] pleroma-fe bundle: update to ac9985aedbc2ed53121eec06a95013186c4eefd4 --- priv/static/font/fontello.1575660578688.eot | Bin 24628 -> 0 bytes priv/static/font/fontello.1575660578688.svg | 126 --------------- priv/static/font/fontello.1575660578688.ttf | Bin 24460 -> 0 bytes priv/static/font/fontello.1575660578688.woff | Bin 14832 -> 0 bytes priv/static/font/fontello.1575660578688.woff2 | Bin 12664 -> 0 bytes priv/static/font/fontello.1575662648966.eot | Bin 24628 -> 0 bytes priv/static/font/fontello.1575662648966.svg | 126 --------------- priv/static/font/fontello.1575662648966.ttf | Bin 24460 -> 0 bytes priv/static/font/fontello.1575662648966.woff | Bin 14832 -> 0 bytes priv/static/font/fontello.1575662648966.woff2 | Bin 12628 -> 0 bytes priv/static/fontello.1575660578688.css | 146 ------------------ priv/static/fontello.1575662648966.css | 146 ------------------ priv/static/index.html | 2 +- .../static/font/fontello.1583594169021.woff2 | Bin 11564 -> 0 bytes ...4169021.eot => fontello.1587147224637.eot} | Bin 22444 -> 22444 bytes ...4169021.svg => fontello.1587147224637.svg} | 0 ...4169021.ttf => fontello.1587147224637.ttf} | Bin 22276 -> 22276 bytes ...69021.woff => fontello.1587147224637.woff} | Bin 13656 -> 13656 bytes .../static/font/fontello.1587147224637.woff2 | Bin 0 -> 11544 bytes ...4169021.css => fontello.1587147224637.css} | 12 +- .../static/js/app.5c94bdec79a7d0f3cfcb.js | Bin 1033661 -> 0 bytes .../static/js/app.5c94bdec79a7d0f3cfcb.js.map | Bin 1658468 -> 0 bytes .../static/js/app.def6476e8bc9b214218b.js | Bin 0 -> 1045614 bytes .../static/js/app.def6476e8bc9b214218b.js.map | Bin 0 -> 1658859 bytes priv/static/sw-pleroma.js | Bin 31329 -> 31329 bytes 25 files changed, 7 insertions(+), 551 deletions(-) delete mode 100644 priv/static/font/fontello.1575660578688.eot delete mode 100644 priv/static/font/fontello.1575660578688.svg delete mode 100644 priv/static/font/fontello.1575660578688.ttf delete mode 100644 priv/static/font/fontello.1575660578688.woff delete mode 100644 priv/static/font/fontello.1575660578688.woff2 delete mode 100644 priv/static/font/fontello.1575662648966.eot delete mode 100644 priv/static/font/fontello.1575662648966.svg delete mode 100644 priv/static/font/fontello.1575662648966.ttf delete mode 100644 priv/static/font/fontello.1575662648966.woff delete mode 100644 priv/static/font/fontello.1575662648966.woff2 delete mode 100644 priv/static/fontello.1575660578688.css delete mode 100644 priv/static/fontello.1575662648966.css delete mode 100644 priv/static/static/font/fontello.1583594169021.woff2 rename priv/static/static/font/{fontello.1583594169021.eot => fontello.1587147224637.eot} (98%) rename priv/static/static/font/{fontello.1583594169021.svg => fontello.1587147224637.svg} (100%) rename priv/static/static/font/{fontello.1583594169021.ttf => fontello.1587147224637.ttf} (99%) rename priv/static/static/font/{fontello.1583594169021.woff => fontello.1587147224637.woff} (98%) create mode 100644 priv/static/static/font/fontello.1587147224637.woff2 rename priv/static/static/{fontello.1583594169021.css => fontello.1587147224637.css} (89%) delete mode 100644 priv/static/static/js/app.5c94bdec79a7d0f3cfcb.js delete mode 100644 priv/static/static/js/app.5c94bdec79a7d0f3cfcb.js.map create mode 100644 priv/static/static/js/app.def6476e8bc9b214218b.js create mode 100644 priv/static/static/js/app.def6476e8bc9b214218b.js.map diff --git a/priv/static/font/fontello.1575660578688.eot b/priv/static/font/fontello.1575660578688.eot deleted file mode 100644 index 31a66127f4af543f01bdfddb026350b4da88f620..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24628 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 diff --git a/priv/static/font/fontello.1575660578688.svg b/priv/static/font/fontello.1575660578688.svg deleted file mode 100644 index 19fa56ba4..000000000 --- a/priv/static/font/fontello.1575660578688.svg +++ /dev/null @@ -1,126 +0,0 @@ - - - -Copyright (C) 2019 by original authors @ fontello.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/priv/static/font/fontello.1575660578688.ttf b/priv/static/font/fontello.1575660578688.ttf deleted file mode 100644 index 7e990495e49d0417a3d64fa9e02321b0d8e29a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24460 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 O`rCQwqYxBuwf`U8^R8$B diff --git a/priv/static/font/fontello.1575660578688.woff b/priv/static/font/fontello.1575660578688.woff deleted file mode 100644 index 239190cba188279cf239b56d11dd8efc50b065ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14832 zcmY+LV~}P&)UMmMZQHhOPTS_RJ#E{zZQC}cpSG=O>-775r%u&L)m=O5%38_Zsr*Ro zWVtI!NB{u?{S@w7AjJQk2GRd(|5yM2i=?W$2oMmk)(_?Vks47HxtF3UBg+p<{;@@W zq#?klx@Tf%#nQ~k6bOh7@Z<9{J`e|H z^~aax4+H{YNBXgeenbX20fu2|=i>3hn0{=RA6>2vf3Mp*nEdBg{A2&L0eL*zL#Egn zdHjsaf%jt*{U_ig_)>c#JF_3g_wya@KtLcf(>a91jt;+n`r&N;Vf{ZWq7@UMZEyvX(H$&T6*NoT+p=b4bs_lk`o!Zl+FgMMTvx-8`i7(;H{F=`e zW$)f*??ISAPK^1xg@s`=tJ@~_*f-08u4GZlr|npso9(CBGB!THj;4cQZj^3e*-7^x zh~`<-ILaE9V-7Ch5Tgy-IjjqCAb{vGPTCV8^0{E6UX7 zCapyRlZw*6iBI^luCA%c;B?gJS}Fqd#l?ow83T!nLF7kJvNC9?$@Fy8W?CxS^~Hxq z(%8d^i{a!)D6%qCsmbbe)Gb;nehtNBCej(BiHkL(5Jz~p;N-cDxXHeg`bw}=kix$C zc;M_o&UnknlWgVm$w~R!N(!Q%l=u2dX}5k#Rky-QeYZwROSdigvwIi9S3{J-{KK4q zI1vtzuBbcE*3^Dj%bGqo%ev-8`3S6=h|%9b>y$^iKMVC|O$mXbAdP2#2|@=0qauJl z|F9YjEB7S{G<;9#>|i=_SbA%t;bE(K2@2bR0BGSx6C%Crnw0z~G~Tn`yNI1#g9p>U zzfU>+e%;_QlEpWlIA$glxu49eOmCW@{7PJhy+}yTVjNjsrHHxYgFXwDpHlXr;`Jsr zi=5a2S4OHy{o95gCMHIr)KXh7hV)LLooVWGsw^?pTC6EQNzZ@ApmQMHqrT&Z!!y~y zTTpDy>SD>?NUn~hUMN+{ud-NbR{lmSP21f!IITIOG#IWxV%3d3Ixn@2YtcMu$=-TE z6=~ZDpi&{r+!IFgOkP1bIgEscn}nQ+zn?5aJ{tN6uU;?8)~J_lUHa%{^el7d7HlwZ zP;NaGA{>vs+`V)mHwf0zF#J-@X8jlBGs$O`wAE`Y)5SA-P!;O~qqvI@giwuVI}*zpK9sX|t9GO76ydI*9l> z+{zPomMUc#ayfscXNsud3zJF|lLIJK6F7qSMietq>oTkg9mc3TYmjyq4FxIzsr7m}_X zt|4SxW22oqu~LmuF~00BnyJxSy#yBNjE6ba8}0OIz{;AMj?%jmvD8G$!2kP77HSF4 zC(D&TbFE^;8Q96(Q=v>d_2z>f1dSUY#^3`$m~tcXr<+3L@cBoDrcr!Z`$%g#W2 z6w@IHLOfG&38<)+ejqU&I-F4ll&BVl5!4hp*5JJf)}S+XXnl9J*~+r2^ugZ@EeKl? zL*rP2j%o2DYnl! z9A3@-hI0qP*eC8gmDQ*aLGbUDRWXo(4MgVV+GZ!kIG&ASJo5l+XY15)#g7#!?oDYE`c(jb!x;1DGdiMq;Gh)Uz*&LXY zjxvYT-}PCr2zb1Q0MCaUFbbpdO87&Cy-@fUa3lKxPfFcFuOhmzYw^nms^SlwvVF0q za?9xcrVU)9x*L&62PZf(w$~CrI5qTw3M_W?c{UaMatMRbjZQm}QG|b_G;TwU)%!zZ z7|$t*cG$r_#o;SOMR}|Gg$k7bKXbISo19+o0U~y0fA1X^r})XPUlS~ncA%;96Dp!3frr_S&UbI+NmdG`PI zY%^*LF)zwaIhkx~I0P`-O`^1tpvF(%aK4lP2Ud0`FXT-ZETj=}1{S*NsyQo_& z(Z{MlMX%A^0{th`M)Rf!LG;H=>*ljK{RqFYE?L3`2!3Pv3}m|oFlG!9{j`R2!{stj z0(ng0K^QQH4XjNY-NOIA2KAZ3gJAxRMK*0zUw5|3G)=ERub1B{tey|5s;C7R+E-FF z8~=*M4E^j8p8gsjD*Y-ydy0QUWrTaQ2ugp85|;Z^U&5HxbW>n@1XGPiVYXAPOo_}Q%&ow%IzmuL{bVtEF!IK#X=Y2MprNxNWanJA9)8ozo@oxU_I@+Ce5A7#DCq6sR-vn!L zSY028ABwM(+Ljzs45|R89kF z@bTzkxjqzqQNIMflN9%j1{E#7Q@rzTCMbQ~d0p-{=H9lo7uFQf)BBnEDRUAg&j6!K7F>>`KWn8YW~GlJK#apWUWiw$Bt@ zEhzqtAads^!bP1OaS-2+cigV0sZgDWJb|aYt0v$#dsle10* zu`56IZ2aju^)JY4KNyEC7$O1FS3~Q%LXzZ>z~^9}%SAUvmws!*+?&6%l%^4Ebp>>? zm{eh&al(yJO%v!Ess#s{T_R1UckJ}Vx9@XksO@8Jj{bet{hVty{O%b*&Cn!iqgS#}itHq1P!GtbDf;Ao9uq56p-fd5DQO~%O?uET<%@eb@KP#rS(vM9Diy+X> zujFSS{s?PzIWhIjZuDKP9O~!0a+ezMC2ln*{gjevNAVSCNC$El_aKQ#8_=;#O1JL0 z)F@xGtkOK4!D`V|><#S8JE^TEm4NN6iYL()HFY&e8Ey88V7oFU;U^jriw&a?(g+o4 z_s4f>KQ+mGt#Gvltct^O1*i#ZXA%yEL`)T}Uo*#*PRX=NXZTpbhmv&}Awzz@4}kj) z2yvM{8R5UL9LsFWO}sV_gTR*nzwdT1Ve}e_J!hJsy*#`g>Z01@DLEf^t_|Ft3GKAp zeJi^Kjka4!T|H*r3S21({$x3B60RG*eIECxe~W_HSKRcJIeCN6<%; z_VKx3-AYEN}#gpDB$fs+2 z6saIY+r$R0x5^^Me}4@R|6PnRxph!xAQ01sbc5TNC+N6yc$Q`3^H@Wf$LD!ry?*P1 zMbLZ3=6_kDNS#;yZB0k$=QlLIC+T-^xIoP8b=qL}jPD@;ILtUH?omNHaZI->k0Hp; z(4tJo;^3-RQ4BNK4adm>b%#cUB`d^m9Ig*gO>`W)6@9PW?D_pry6wY)3{%+{6f{fG z6W~o01cHuf;7Sr3W0O^cy-QP6EFKX*b*#j)yRe0#MH;8xRAaXo!uf(2!ghrY zU<;9IVqGy~7U;gn)$^Il@y=IOb>Ns*iX(Za;IHhgsnOF6`SzQ+cNcS`@-r(UHLV%D zwF*;%hkG@j!JS|`x85wg>ZAa_mQ;9fm2evua805Q-Y&Q8AK0s?=qfF}E^zke11KwX z%Xpw1t`OK2E;*EQo~>GISB#j|8Ke8;;0x5Nwb|=<8+TY&JRK%h9@o>=-Pmf_Jr_~A zt_3h#<@OCbmp?1nZ&1-F_0#AcNBRU$prj?hh76Mp#3F^!^q-tcWQuH)#U`%@Cs|J& zvU00m3w0d507(a1SL0E2EW=6yBswzecIguJis=|TGeIGD?~41H}%hzfk| z2FtrKmV)eLZ_vr&a}nqagzrea)rM=!ZX>p6JObHCYbIxbO|wiOWWt$Q^GnE~zm!45 zN$!GG@`RGJnj- z8xw$JelKUN2#F#N4kYxDzD#Kv_#9m7hYNq~I~`KXCd3j)Ve!glM2#(>Q<)W;WT3<` z5bhOuON=OeUbUUf%?Mq>(aiOzDIX|WN!%{#yTjg>oes+-_FZS=vg%K{)#EC0`3C10 z=Na`4>6f?gs~mJb%}bu3h+sU!70&122_a93sS0Uob6GmcBij5Xp8q5=)td(A!+T9i z;>daUV@mXiWSB{FE#aNH(K;ppEpT6FW3|cDvJSeA%Gz>?De%1PAnPhiv*}r8&a7!}tS$0zs6rOME*X={A z11dB)Uw@bWz0sJ?&Xqu5neS5xW*wR|@EGs4h%ukvbEWl;j>^6Mn7pQ4>A#e-JVAJmCELOA>OJItl`8LssOEWQE|dcwmkq2UTgTwr zYrcSo+6iP0u_w4Ih0t|a{$+ir*0>L>+(e22+?~cks>#HwcCo#2WiMgDekrxR=ksDu9cgzj?I5@~JHLP2q6&d&d$_T(D zthZ0Vix7fLMXH(76dZRKFS?tZ(s1M05PVKvG%8H5;jFE)H$D&E%r8}yMsrI_NgRiW z5f*yCdEekaTf5oI@IKe@(YjrrUUJ@kTIp}aMS$yGNc&p(M?^4Mluo}6##5Yg;w6_@ zJM+vLZfd&3p~B~E-Sxuw6=2E1n>jVMs^@+wo1(MGy;Q}mH$|H@>K3aGk(MSi6&EXS zkJX2kBK{1cofPI33>aki;F>f{(i|DUTMCrz!4d$l0dG7%W4VPe{f6f0Ve=V80Nhv>WE}7=Jcg`$>^j= zWhrzWYBwKr#a`O4b9-`Y_k!^u;DZlQ5Iz@>+vEhWg6Q@4eYis0;~;7DjiCeSe)AWE zNQpVf2HpX;H5vOB6q%lGr&XpcIxCXV&P2x<@p&<{sdBl!&v6^WWxl%g78 zI?=BUE7NLQRZ^{TjY&p0A!~dxpg<#y-oYPI-nc%8?6q%#wg4jo+*myRq@3s>oJdl& zXh2*QD-_8y!)?k#{Ee2QQoF06M52am5IaqU$290PH<7x>9_BCCsEpZNli0zhOa}AOc<%wbYp6SSccdlvgFaLTly(<&szA zM7&G2$CnNB6b$NC=@h$Mp@yFfLmI$g){)2O%fJq!MH*2g%(_@$vQl9xNu*m-Y#A-K zD}oJ8QqU4XQyKU~`S}K9fg$1bcu@IDq%(oCMJt0f!hr))iypAZZA^>6=X=6=-F|?J z`E^?Ee4|M`%+B@^f(8|awCyaP;5ZS?WGWsI3Zk3{_C=LXWSJZi$S&L@bd820xd~%1 zs*YckFEbPhf!QdTXzL(lX?X#h=88b9hpejsCym>ahepi;Qt z9K>L}$78O?Qou2f!e|ZUTtsbSJ;=5~cacob6-|7Vt*^d;@KX0)1_a)Y-q7&_IO706 zjSl)shy^UQu9)S9NbVS6egba02%dCIiX+kBKj1a^ z_(1pG+crkP8NsiKq#t_3ihO%BKh$fx3aA#p;5&+U;hMk0VciO2&U0M}h zeLT{3VYREM^=LlN_#{E4Fm34RSIZvCF+S4#S@g1K7o{5htv0154_JZNCl4#`G*Mt8R4V zy6Y5I=MIvJgwt^fmghYJU}rNKOMaMIV&WbElj*%xW~ZDE=o-)oT|99-7|ia!dg2;h zg7e&4b~X!V5)?wBiVos}h!7-c5!I;kdA~xxLk0SLZ`UZ;zVo*h0ot6zMXCf+I_(P) zu4zyfBh=u^eoPD}r?4cKy~>)yL@EmBU?HT6%EMTZWf(^Pz1|!XlP<%zZ7UDH1-)-j z?=_-mGV?y)Z`S#w_Ypmt(z3m=hz+q%#7b2TjQs2N50hac|G4y(u}t+VP9e2R(H^r2DDEVgK*bUhLdhxri2AV({@S34oC3)-4)v@k~JV(4m*- zagW+%xGO3T?R)}T%Scf6zV@OI?mkR2tdS*D6JkR;~2*)9A0wvAq`@j}lpfYF5P^{BESu4YQY~#LA~>-;V0|SWk4~#kO1; zW*id*iAN1m!BXB~PK2^ut*1&WsTL~?lLsqD{0>irN4YbVWk!Ibay?vMwta3~X&(F}Bnn(VU7SWzO{_7-b8L915p#HV{fQbvmRsNk<%F582pO2}2x& zmAJ65>^(=UYxmM!O+I|WO{a&mB~D6?*0VQX#F*|SgS~7q^&KoRc zlPiWo-v?CNr;Jh#e`{tNeOrtM-Q!xxPEzUt){Sw*ughA*t=9ow`#hb}1r>%^UpE7e znTd{s-$6z8NMT>&VpiGI0`gd$P82$!wYU}|F?-Fk|0JWgxZ;#@WGpax z7Nimg5MPmlD;l1p%0UxW?l~yanY+Id@o&vR-HHv*tx3?%#&-!CLHAk%##n;KFxBv_ z%f8{R46VB2Rr>7LEZpqAClx#vOiTk6Hl2g>uL`8R%PJ>R=iCnScSvzdDZ}wY8=No< z;^$q8uo^zO9r_vG%k>T^|AuVW>6PDyppWkabB}Rwfin$#)b`7VYeEH;s|Lq>;y)`2d16;1CCf}TW~p;MDoN07NZj=T&F4eFZ7%N4{np# zp&$45oh|OTK~5C2Qix2VkYZO78sv{!|0k?FWaPDa=ruxaU=Zc2?DzdG*Y_&*bL|&R zt>MQatj}YKNmg+W=1xG{dDq_ALt55dK zoZgcBRX8DWd+nX4*h%7Si6{Da3h@x~)GmElPXCT4BMzKaz#AV>r@fuAh=-$pRl(@pfN@HVcUUV!-2g-a;nl1;nV-+vo0p3%O7M}QX;^29%XjHS zjNR17FK4E#TkpL^PO2}@H8j4DepbSxXa75WEy2Y;*Ol!f6^bSPRZ@;<&M8D06JK9O zo~vEx_qMg?nw?%>Ut33)`efI_oGZXx8!liX6+)8twL(I!<;$HF@zy)9N0R$4XWI`e zY1QsIjDLZOEh@|T)a@)Vs-(-%dnPh0{;!@eOYZc}DF4#Bct7ORQ_*D#ge0tgLXW5$~2oX~{mDrt9x4_eFiWZUd7LI#t&jW6I_m z2>(W86CNht>zo*M^^Fy;szUn=;+GJQZhD+sQe@vhqjA*k|3X2x_Rs_VBZ!E_{sISyoWYE`*__kjPvxN?4}W~HdvQ=&6BuG zcD;PDJiSpK4dY$wy*HXJ{hJJ`J|}VgM?;=(A9Yvtzs~JYlKQ@0DFvEsj74ceo4B4m z;IaKJxibU5uZsZ5%Xi;*CxEU!6T?{S{If=d2le(z^hc-%mICh)JW<;s((z)chUix0 zk>RrWcu5x+ntkXcm!N}VHdgZA`wsf=$DDref<7OZaR4vF@9hkg0#3q4J6^PZ2?N3p zt_eXG@ujp81S17X%5}4b9&2Es_bDIXk%fH@Un1*n-el}+P~coH#d6e_@J_NtvX>y< zL!%x+dW8!?ZwS2Zy!m%vsjV}|fL1{hRgbEPdPUTL3B*U?hmS~#TJ>tBG^EvZgW3>$ zarE3Q^dZ#9XqY$_YNQ9RWgAoZq~~(;qTB+i7A3S9r%EWT-#M2F?va*44^(SZFnE7! zuyTCh4jrePdyN~$LqxK@XvmPZ&RT7;YZv&(MgiiisJ z5oyqbG>=M0@q|(ss6`6lkkJ<&kj?YIn3K6P0M_t`fswXFh4b@DV?|08y+skFHf=pR zyn5~jx^HYt>iEd*{xj#!3#D*<)j2X5#Wla&yzMKt1mI+^p2ijBEpRxNO;Qsz=(&zd zq3~Fn+4Og3N;L{q{T{n0czin-!tcRwVq%f)1BatM)ut-{H*B0(I=#}bTn!o zcPop)KpK zg4+5FO``KBO;KFso7LkTvT>G6?<1v%W5)C5nBvnn$%JoXTV;Y!#SvkV?)aTKIMsBn^R#wIAn34#YJfzuQxSG13PMYk zXxy$->TRf*vd%0kS-4VOB7tNwERgKW6a$55k|2a&BHb!ChX)dh@uiJNE>TI!)C_lJ z@P}@wVspS=z%d+S-yC-MnUmAPXuZO7b;*>g>dORK6viS=x|a+j4&n zi}MYjnKL;G&R#%sP|A!L(X@lwyc>>P;P0Bd(p}vP3piAL`r4a*j5B3@0CdT( zl_V{+=E$ChcJ&CirjNM|Y)#p0H2f-u6oSs5(7!qfbO)`KTzburVAVR_m$AoHk!rUG zYAk*x_G&;Y)+JOG(tfdWO*`zHS&lAnlUDhruCMLhZd3niJcU9wzN{L3Lpi@;5Sn*6KI?HC6M%OV?p!YL%PL0=m*4 z6^<~}%fSw%@p`2Y2$PUZ;3o|77unXjFAX-d?CLzu8TDlUgdM9FG!Lg4W6&xVlo_+L1#cxmd;p_i!uBTB*D|Y1N%dLWs3?Tl(q@HL)UaL z8SF2{$eU?;={8c%L9h}Yv#45FUVt1p6{iGE2=42eeWl-nK+8YB(IWdsIj~x{S(Fp4vz8Ewfldce}XUOrQGbm5NdG*BWwOC zDJyMX7+>SwS!HWZ+&Yuv3Q)E|Qm(8!CbVa70jx1)GNKquXy;cS7sW_;R|j|{y*uq+ zoJoFZKT(!6rbK(UqazOUOCP131Xirf@6f8(zY(r+vOOJY@??iqEj%e$-b6=l-SF*j zV)N!qo(ZdkNhn<;BgA@2s{=ebf^Y5hAtxa$9?D54`g1HOjGdDVL3$xeZ^1^{So_o0IU0;yX3o`vO7{CB zw|y9JMT+ev7WCH|!yjbE<&k1lvpWI<`e)SDPdB4wIF@JvM|h$zgI&7x!g&W5-uUAJ zQl6tt<972->)<{dQw|+&k|DZiGdDPUMvB^oazD-qwmH`gzSWv$1=;5Mnuh8bzs5P- za1zrbcpSJMc7eb!C>+Rfl5j0orUDKc>2NC3cnUCPKOH+hJ{R0bxH-s!e@ zr;3L%?V?a-f=vzPs7_Vfxv;BK8%kj1G8s0IPePL=T}D~NTe42q`IAXnCW6is>M4OS zgvj1gOii}7fE~nCcVxjYTGmneh9F>9DGp(0dTd()_UKBhx5=Lf|B%u?0o51!^>(aZ z8Ub$F5_GGx*B0u_gf1?1+ED<5UT#L9+3vh~heji{CuXA(c?Bvq0jhDb#$_U~1@|g>`Mbz_x~-4h0To z3_0WOCnh<2@wH57OcagMEzIzV9m%EHf#%!J9ThwU>uN$Pjk;9Cnj0gq_B1E(wb?x` zlPWLprdql@MK~Y#a;#g)ac6JQwRtpVyGE7QA|aX=?p?=F1(5X&J?c)Ni77JkBOhD_ z%~yff?lR>jNP$IePN@8jnw@VU#nf3C_5xlV(WD~uXSLY-=nCeNq((d7EE}OCN87yj z@9F_%@019LC05LfL#ogxS_beEsd)whAcB5zAYW>qxdlV0pD`)9I0#CuF`I>}&$;9? zK5EPCDjAO|A8Gr<^O1o-A%Wb@BE*+UG$_ANiHSs!5w~B=;m}1omKnPY?U_wd7C}*w zmopCxp|s(#+W9XJcgJ)2S4`YQ>iWzxkyv?)KCrR@xP6YF7Gm>^aIiJ#)SK+>Z5&95 zG-chf&`vT|F}STa%LaC4_r|td!#vud>Np1RBbTEL%gV*4wc>KbGpV|9Ui{WZ|C`QMG z2s>`~2s$3Tn<4JTZc&OZt?w6tme%}IY_6M>VdjK5L$vG zl$;)$u2ValTA1zMl;)aIiv{m(^zeF|#xFmoC}(KA%kj<7 zY6_NEjilLuE-W^OvjxyH@oLUVm@GH?;)6WF>k$UzY;-onh7q-~<@opB3G%A(D$-f( z>kpO1^IYd`p)K-ABq+z5fco#nX{F6Doi%yvPanQUHuir2`M7&Y`vN<8k|$l*I*7d* z3Vr$2PSblAq)lnS5%1vku*b`R$db}hU4o6%Mq%E;`8&lD_X%zWWDHt}*1@vJ^3nEg zK}uzP^Kq9h>*}s7R&SK@iTZa!{#B zksSP6iRz{{HX~7tVqBK3BQS`pePAR;gRw6Xv1=>sY*?hK0Qaacy>0WJ=g2;fDi9|4 zw?s6n_98Z0%3&jULv`E%%BWzAc{u|fM_(KxQt;AdO43e#53oolQ~KuO5YxNi@*dRt zR<^ahn{OisSNu2d)l{>RmM`%lB!3OlE@ef9Hb`PImS>^Z1bnk7BA*g)vOaiE(;}{; zD9Ot`0I?2f1My2%g}2{WtSDyP#Hga!v|b4JpAxGzGKKKJ*}=R;B;=Uwt(M46 z+H^94j`tD@5edG+4UvkIR?>~yF=70IWXa|na{g}PrPA2_{?VQW8-e$J-MO5C)=e*o zsRpgQoZJ^VcOHVaCZA`&-4hObE*v;>;zwA**BDa{yE4{>#lP@vcX_f3CHtW?SG|;j z?6u+M)w>+jr+$LihEC0Gtqs^u2aFEeT1n~Be}rVP^h4YrSRMWmL9n|7T}b-m%Z4({ z=tzNr7Q`NxjzN3ovXu>FI0eDb`(pu52w(Q=zO*&h)qHAasYDg6Z!@hYZ_cz#8;)ue zdzDtvqGk8GtoH6W69ZycDAQ^*I!{TXtVfhZYeLI)iHf~D_ACd#pF7RK z?>c*#6N86^SSB1~+Kx~|z-(o!<$&mH6hVAUJ(fzMaMuol3nOyx^^OSk(Cf%G$?nn= z+h_1&IOp2PNF5}SCQh>winYH@z28U|z!Z522T;jK38mYHAPr&&@$va_cA~S3?IR@G z@-wTyHHzTXoy~N%9{pzvdbUPjpt=qkW@FQVnFj*1Jd$HV3gD@P& zc}ljjo#N1fC))EarHRAyXWnF_vXgx>3(6mF1kJ$IHk!}BO<{Gs2ERUhF~9F=p;r9p zuAamgzETa+O1yJh+M#}7I;_0O5wtM){pr(SlaBw9>;xS{6M*#Ut-r3;9A(+1C}Zb%lybOBM_yT74=cWom0?9sR} zy!#YFEMDuuLs>9AE@!f~QgZDEMT039|D0o{w*pkvx3t4^SBnl2GRx_0=EipOwE4@Y z8qu%!_xsz+uB92%#%v7P7gmZ-H2rzmO$Rr{fo*B)7;LJQa%fPz!-HqL6%rrI0!GqD zVph_*en2{fCzNquLySpF!pacUg`@jXg5}-p69*;QZANElJ2W})UxSro7&JNZoGZ{y zN9OHc!+&aEp9S}^Ml)+*-Thzl+dckpoHhQNU?Wt3nrk{Mb4{Xbzu7n%^p@kyzd3Z? z^AuwByjk*aSC8?tY6yMSs*?CPl(ytO=097C_3XWTJU4JeB>2pU`$DwEl@+w-2N+*q6lxjj&5OT$;QT zr(0{4mG%pYy6T*AV>v^U2z`z_533Paty?6YPIE-GCx1?dZ*?N$ec$^gAqVctepV&c zbk@s%4$wZ*S&v2Aw$ph%U&H(Tva!O15%&dR2_nJxlT!o)Bm*=Hi~?*6d=F9#3IRF} zCIc1#b`EX|(F$=1Nd&0@MFC|G=L}a5&j#-U-;Pj=$b?vlgo3n_}(1p7a400Kk@#0T{Ir(Og5lkfE3T)Dhum+Ce4z72^4yppjI+*sPO?}n6d?QAdx_%(74f)XvzaGf z!OBjx8Ri9b7!nQW(v(KBj#xgsj$jCov}*Su2&;)APognin&}+L8R+wNMF9V~{$fb< zPL*v(uS=c!mwN<5LDHf-(({5-zM>&1Y-wtzly+raMOvm)QC>J4Q_{szuvl?9)gcp2 zI5v5=>^x^8s5Mr*9ro_If5D~_Vaq+!gYz0ur*|;twz4EY&tcAR@{9gx-h4bo19pd1 z!E(BC)AEBK5tORBK15=;3dV>?xv1v1eNhAkPcbzs8S6te6twOz8^bC9*_@X8KwvCe zS>%G1l!Ev6MUUW>nR@ptUH#v}xe*`n)oeHm<3`%hHA0g_G1-(0EARUi|43+Aixs^4 zRp+v{CdyC{PU3Tej?TQtKLt11(AFr39sjQz$V-o4^`CjSQ?hW!B}Q7-(lnchSn|Gs zrfyZu5gZygk4@)g8i~BW7|PM_H6wJ;)-q4e+1R$ljN14N^veSV?EnLMfFWPLeo?+b6TSgezMKK+tD zgUGQ?fpaf`buXbeFMm`&ve5$(16`17ICRYg9NVx^i?&1U&Zum|MWl6%&3hR5oG3dx znCuGVZH&uHHsGeUa9{{PF!iibpca(<3dk}-RP8WJ{c5awswOSVKJ$rdGE_ygFjzA< z_URm2tf(Ax|LNsmSwT(0Wvnb<>V8EEn3Abeq3BZaw^>thFs$gg3M$piNUEz8#9SyHW z32M}T6&q-iqoQP+P(L-^@krIh?K@tzrg0Yy=<$g-r*A2@HV-8+ubUY+TK= z+W}h_@jW~XX_R24L{yGeo&Eoxlan!o)q$y1c1V!mm|HN0n=^u@iC)*F(F?O!u7$<9 z`>KM68>@ItSD{)w*|2pqJCoPa={YhF`uT+BAqt1Zs)OvDwhHt5{s=p-ve@*(FeRg@ z@$Z3D`!0fohGbi}M3Pj*Ra8oKbili`ik<3vecDnbyRu4YDj)VUAr;quc46q(j?maA zxdWtIH7$jfWD+2hgmg*`385q+DTII^Nf;sqy3j)p5Gk=Cij9b#%SHsTo}las*pTh$ zmWsQg&wJP#x_jzj{O@h`dd{WyUib9CenQrK7#XKlBW}^Etf|=+Q0z#h(3F}Zrqm7{ z0%r1e|)GB~mTX@}?G$(xj<2CRhcF5zBo2RGX2L%lw2tNOD@Ywj+fI zJ~VL`OjUth)@A-}-^?x#2ojb!2!ZG#Wfm`_bNaxkL6y zW-@)TPzjwB=#9b5sdmR)Iypm6Q2z>0QJAwdem^bXU4gYhk0XT&6PxI_FU;JWUq=93 zPJc{(;3IscZ%&{v+P+CL4a2}Pz$j=J=)#Q$CRrlIQHBphf2CTPsd}*FAKo}a6<3jb zyth&)Wm1%nA;`f1BmwYv2Y_eDvjF)9$9==)+vUEcoOd|z49MHBC-*$xy67UwXU?S` zNMp*}l6^zo)7n5zeP%`z_ zkqDj;ak$-o8ss@pSNriyI)4Lz0605oDQNaYS|&hRztmI<_(0qipo{%Exc)+U5kS1z zFb2XriGsJ~;q2r9UE~V@w*Tya|A-6(uXzc)exzHeO8|NQdY2j>lkBn_gUvOdz$sv( z(BZ70L*X3U2Zp?e%OwoBk)BTBFtJ4Mvl>hzZqnqhyvV)mpvL zv~0)q{2+{4al6y)^#{XbG@eXn^96(kl#O-t+XUah<^=%}A!0;=ND&z#M-+$>Q6XwX zgJ=;QqDKrMMi3K-8N>o&1+jtHK^!1XAkH8zAg&;8AnqU@Af6yzU=Z&d;*%qQZb}c@ zVnbJcLSJrTD0eZIdzi`s=JF9sI$=!`wxnWDFC4iPXDV=IBJM1~ldX7VJKi~mPu|0~ z5`|x7*C&73s^KYPN3V~U4Wf;|Ji68chyRdo4;lZDj%Tk7i!ecYbQF#Mvm2?0GEiC* zw#2?P1qg#RL|`*c3^`x~zB;3YkL93O_S<25@yTh?D!l-2&i0qgD{z+IS>cgu>^S1V z`#c(nQ&L~_k>FJT6Qr->4vHE)(JU6qR+_-X2;No|k!f29J|DNShAE&0d5t4bV2gEC zEQ5zDtvwkHd5D(H7-g?43NtO!FOtHhM$L7|CQ?7zuhW+MeUE%Nci~LM3-81y9Cqm{ zp+=;1iuqLqP~=7djxCVpB31hyTn~wF=z58GLyuG@Bhs zDB={@+I7unkmoX9R~m4TNvKNGaJeY$DKX-b1r<)>1J6aq8!Wjd^@jdSlfgB)_XWbd zIb`W*!b?3#9XhQ<`*qD*a>!igkgpch4D+ZBKv+D$C2L)*XLE$^P!4A_3IJ7hwBR4_ z>a?ePa}ER2+dLly2~%-+<+3%6U(7$ImG8Xhtv`2%mv^Sp^#n=B$WWMG^TE_cmX-ta zqp6G9+`C6j3waPQrJcx(Gidip`WS6Gxt1r{y{@W2$iNnt>&8U`r`*BpzHz08dJT zFNqLH5`>bxE&^Vw6118EhY@xAqUJYYI7TJPh|zGXdA{*>##@6PtX?Z|OWf4;ue6o+ zZL!1uEAzm1PPBhKGOf#z`7f{Q0WXHA_S3H+Kgt!-TAa6NE$F}C^%tjkD_gnewROV* z@EZLPZDL>j5E%|p-FMM zZa4-(C$El`hqG{FoQ@0dI?ZBJCM8rib&wZ}fLHOhCbzP4_fuZ8O{ME$w(PBSYe+?S8Fs85iCr`iHC3uBVmehq{zvPii==fI-=WAp!)Gay11o;5<7~{tb^AWkn3W{ zIIk(+9YN#Jv4%?vlhL#XvWATPx=uITYnaNQV^J2u^lf>)MNQ0Vl*ER42ec(BC^0W$ zy;r!oBRseYuSF|z7v2aI*lmVhZn5uIGqW_W(kem`BD-So!Z@uwiV$`?jxRfp_7YM; zIc9ek&I|e~$DVFbOIAyrby*|MU;U9c;Mgbzcfg6Irbi{^HKmK2&B(K2oL6MZ1tBMY zT(UU6`7K)2-OVgDFK;V{{}8?6(Y{lc^1-iVOKDM;wI80?V?=i9(tcSB#Q7b@iw<;6 zGsC;U1lL?>4Dy-7_h>T%I^7)db)3FNGbewbw}J{?+EemqpKi+H5jpqI*=7kbKp{0l ztU^FLAWj36x*=X6pdXN+0ZR=-qC&tpAV~w{rXg7&U>=a70V>Oost~XaNYj7>+mNmh zun+hQnq4-6u zo2RL={+=Qn(VZIJB6bissnELUzu}u*z21~sxH45AoV3SG=05 z&B>4<^-aLji{ax`Mk@PvGp150VO36+H6abdZGj00)fEhWOR8hsHJ-{aAuNg!Rq6s& zLRT)EqErPmjWfym8KHJV6#W9$Y~o zE}F|3mBt0Z!cr}hTsF8kIPgqV0+idwP*~aTgiemokFA7glL$iv+c`uC#<&Pk5!jM} z3kP@4;8`u(Vim1n#yhcR6FUrTB^WnV#f!Sm1zS>e`Wd7^AqD{EnnI=B=IVf}0xV>V z{Oj*ePRm?r9Ye0^r)H+}*Xh+XKqZ03Nv(*~8X*k;W>NuF(Pj)lwR5;UyTB#qP4 zZgx7h2@;eG)nrw}k^2BVG;mEV&PY$>S#^@+;;v*E79N6i8Y^XSztx56&%5lsMii&4 z?Oh;&$wgAT7|@0dChY2k-tZ*TcItGpRZT&PQDHfw9anVpjw7`6{b7li+iI%+*g$e5 z?Zdr^2=)EiP@P>BGG$NAotir9cj5`2XOke8J4rE7pZ5=J`bt)YzCml}MCo z@p$f9Yir?>zWDbhwXzGo{~#L8RKV|z#j=$!KLcCf2h?cg=){TqAn=o57ON1rnoO22 zYT)0Unv|D)|8Zkuz7GCCJf5pFejdWaVWY8r?6;=vSbe`#B$_wFqWubHN$EUa&~bNe zJQL|zldJfuzmP7>0Q?14XW8!Y@c8+G$0QapVVGPh4f?R}>`_1VO_YuabKbo&4;Ap+ z@skCpI1oa{FDiQDb&cB9R|MU$00Ebe=C+ab-Sx1^lQq4C{l#W#i+MN=+ui;={*VsGssO$#~k)dcSMCeF>nY(Gb9PSr#sF8KVnj)+6`bz^{m&+Lz*&!5uM#o zJ$JvkLJwe_jx^3e8e7#*cT-DFJU!K*76*71*ZkpRhu_j~j2wC@Oh=!m5Me;(olPZy z4N?X0vRSdfy7d38q9#EEA&Bd>tqGfKvqMwU#Pq6X#9Y%93a<_}i}iQ!Vp+}N<-Bf- zl4=Ha&`p4cWFQ^2J$q%2Gz*z{ThZ9-TfSnfhT{rdr$(vZ0DbG@nFl8GyHlk!!oUu& z)i%m|Pij+9IUR{2+8e5q zeXDxaPbzTS)X=Fr*jwan+s3XGbl9CzVv4w?+d<-5@TPlPnbJW=PTji$ZNKQq-dK*z zl?tkP;mL#pz8^LnKG%7<@E%xV^}=QbO-MX|3~k(C|0CjgCibnxZylKyI#Va=5@yvP z=*E?ew4f~&=1GeyqzH(Csj{ALY>FASo8kSz_uE}Qpufo_01qytowyf;4yur-!r$AW zH5^y93&{HAlK`ty#C`72^aZ4_hQ6d)8fMZAI#yjLCY;s5$d+?12eu19A=f-F% z2}9^5Cj0v3K0cT?hCFJ7pHLTtu<{Ur=XoejG-TJ$n=cYld8^6jD`z@(0WB@w_1JLh|LJcF?C`lU$>+9k`eDA0N2i*M5bL zQ7zMhP=l2S*)u2LyxSgHjU__hD<(#rR^@HbW`J2QhO_hS$I~@RuyYL6UUm~5r7IwU zV~2H)TPuZ-a$95##2dCo+=OL8}s?Y zb;TE})oeDS;RBf{(?Vq!(`;wUH8N@cT&8fpCK$iHI=y$&4FLbw*jrXK2*Fr;QZ zrkfqf)qUWFJQ{TUa$mX_{f?;&N$)Vf28$f5A4-Rk>GF5K`OZppeKckIC`L@{T5VDp zHlq1>LbJ;#);d5~iDLVZtrdM5a8WAyPv&!#iPm=>gWoqwF&si}Zju%(lScBabmz`$^(2st%)pgZXKUJ&Yl{Z-NL|TOji_6>XoLb zl3Q-AW3ykdPmIsD`Wi^4D@v!Nl~qx0_IfWwPvwJjINd}tC?$2l>91odT~*#|<(Zv% zw#qUW$B`$Bi`6a;-Qglsse~?$hwmbwwBpebX~kHwGePCwl1n3OLm55kBE-|8`nbVS!^>_xAn)_U`$)x9<;J?>1&Bb5a`h)mO!d?YiFh^2!7octEzpRI?-Q5WGWSDwXX4 z(%KV?zxpaMQ(7X^W2^NT*lfU>44AK_gV0`BP98WM++ZN7?`pN*5K7Wy+xv*ArUXg{ zagsnTJ7!9kWl{|4guEz{y1ilWNn0tYupQq)=$Dt1SI^a@t#D1cqt&_*n$lz)k49~e zKsyMNcv9K9s&r{0xkRIsMUf=iK8tHDB^UOqOQIkYVGsclAuz4dGuUO&s#|Y2K zaPO(6v2o){27@_dCD;i^2~#>NVRGq7wCm8L00fDULBL`)8U|=tUzT>3l1qRyv?1H38mgzSf!V!GNet<4L*_e|fO?yC^ z5?eVV6%^%O92jAEvv@|&kDkt{NzN_2xQgi0aUDU~X>z8W`7S`9kPFh~0)Zmn-4zo? zaCYP#KOG%gAudaDjwgCPUlw|VsbQ$}nnZ)eHCDX92&(~98bHfPWG4Oi07*nR&p8t( zs$&A}fse%5@#D;D8HP23nAY`=A*JV{j!wUUC_NoIw7P8f?qB!p21~1{^!Z?)zo<TgkaX_J&+vSf#!0?|ae+f}85XsfJuP{f_ z=`ccSh>I%$8mM^6qo20{dR2hRU%v&=$7f}=Wn~S#aWv%k_-H+5j*oZbbEU>AqMcApuoDpqAH{y) ziVWcQO9^fGW)+e65qGw*oOqf*_L-)NlmihTZ}uA}+WN+LO5nLHi3hmSlL zb)p4%^pHM}H_=bt!-t+X=pf&~;V~@eL{uTRO|RVs9#S7}vmS_OR?N^hlV^U{He z-rkvBTRF&9(`;STO$YO=CK>wavQU_87suVY82av%!cg(+zlyoT+~|~FHmz_^9sKKU zR3!O7nNHGb^jKHX8&2Vn+S?OKAS7>rzMt41{o74iNj}MRo1WL7OW|9%hQp(J-Qdvh zgR?yS{G?9LE-CS|`IRu2^ep*lL$W1XL;ZPS)HYf&+iB}8TUKI(;#8?&A6zb~kv$4; zz(0*oN#AftrC+Xkn5bP2D48)XihmXidpP)*YZ`AYsP?dJdDp;gHZ1((rf`YtkzrU% z{@dG4Fb@4g6~RP#V1t?it5!eLr&Eaw+eh8-ZfKTQbdZ~FzqrjE=nV7 z|DiO~Rc;|v;9BJdw^c_mmL8vMK#4Wop>8AP#y5B?Yk*ro~OQ0^t-R06au^$I8KlkVjc`U|aA!jw)QI!QRxP5}Hd zL_1NlpS^mGS8Ddc+n2;0VDFYHJjeDVczN8AS5}X09{W6RATyU{wtp);93Iu>p7Xwu zzJ7O%o%IRT@ye>i8e| z;~By4c!Ar{XtJ~0crBdO^bW5=9i3#=v8)W_%WKljqbZRbY}|T%@h!b4)TecD$&_WKvTkj!cqa#i#unVHikEvc&pRhAUZo)72}KrPT%njra|B4>N|L zhfcefjBiZoiSnZTL3CAKfnw*0Bs)!-C*_xD#DtfC0U)1{B)3e|Mc@<+a68s1l?;5V z#w=a`+mt{okLDZTsjc^Z>Q0UR$Eflhf*1<#_WSv&GwpBbUxiAv+b{KslFp&mzJXll zoG$&~o3X2;K*98v>EV#MkZ3*@HaqKQmrnXxF6C5v__Z!I%C71^Jbn>-Iqcn@sfd`% zP)_|wNNN^6CG6*Q`wjfE=UUS0d$!?P`MTwA)3?KYHs71xzSEuLzB9dTSDE%~=jN&9 zKRT@OetSw5HZ)#bZtet9muef513%pTZXlDFC~JD1$t}8{!9Gjpx69Wui@FZoE9ef` zT~oMA@NY3pyygX>F*NR1QNKybWgk{O%8D%R1uz6osqwsftNyo==)`dV6?O`;*E@ZG zjA>`SwuEK(rG-quT2W z2>l;jjM1L)ax1?8iB?IRs7^-Mw&BE)ZfRI$YHDSel%J5t^JN$&L+Oh;Yv`ium9Y75 z;BCM0CZx{27`AlX!@Q(HxHmyniS`q5G)TaTr5Rak=MAU<7h|=NBWa8?>~<__=fa3D;6%@>61-EdA2{&ik%hENA)7`tRZGBPns6 zc?DfDJ)2{43S^yNZ%k)FUZ<=VUN0^xm9!_PMGl`*nRc8$kB^GwiSqVez&$pwf+Qi2 zD=(kCCkABA$T4!MR7w(*JSBEERYLb09 zuab-crr|Jm^IGeH!ay^J=3OTURH~+@Pc0EAs8j0(*KygHXnrm_1I);<6nTPl2#=Vl zsZQ6>0e!3FpVy$%6!lAV&ZBR#f{x-}dc6{&UN7lrnX}nP>>a$;%YiQ7)-GT68xRky z3G$&inb+JJ)zl~vrMl)f|Ku2~F*+bc)1s-uqOZiVNnLkLKmMX)Czwu?E?yw?*P9~t%9;J&*t&A!9>yj(Wb$<7B#u4w<|VB7wwRT1p)&Orit@lIYNUJv{~5SdljfU}Q@FBM9XRV6I#z2~ zTi>yfMGqerrbvuM!>|-KuPI2B)H1-P%rGkm!{imyEw5zhT1WhSzSPeww%?b<;ET>4FQR*cAV>pyx!8gTh?}P2dE)Tn+2yymcMdg(` zK(&PLYU_aLP}xz@j>yW7*Y0mmPvVx{Bv|zIG25X?$gvQY@C8?Koil|R76=JSOAR`u ziWw*-hmPsByg>9VG1GGdIZjEi1FY-@7FVMR1bV(x%u<4wBshEsPVtnO7JFBt9Cbjj z-}H(Jwyxt$Y*wkd)D|KsE0j9`K*ijd3%)2fpDb!O_8rqu8^s18Sn6)i%^w+5@<;e> zHt+V~15V{LH$Vwv`Ck*Kux=?UxvZ1g4V57>FV-$O@qUP?OFL03f{M0FLau!QYuD!1 zo>tg~XwzDXro{WtwHI4P!T+=4M-L75fAX)M?VC2P>1Z+6n#xM@b5>-gr%J5qFI#z>(aX0mF!r74I*hub*vy!w(1hi+R6SF?9{AaF~Z>nMe-=6;OJ}g2*Z(XB_yyiN?uk;!TK}_RVo<4^PUv znPLg>=@%VWg+Dlo*>gXNhDmpXQTn&$hI&nWZcy4E)bcu0jgN z966B{ui%EEY*dQ#EN6snG~JeHJ?z|kN6*%jVBr2j{K4G0JEL|{TG zZiO(2jX^Z2q=gikB;=H=k^5(A<{Y`&5UQBY>CjnWqWXk|gV=(ny12eZl8am|3nx$b z6hFfK8^V`4{9)+ynrRB)_4!WtA& zMuLDcCX~(?D?zu7?&-2yikwOzAY(o~Yap&Jx}b0mOq+f)_8j+~KM2eQ7w?ElR|!TP zr)9HxQIp8z4YMHdowPS;_+V=7nr{|`7BswSYGpy~(~0LYwF+TVUQUV#$OTOh7z0bA zY>k985`3MB*4SpLri2N077g2diOgXj(!te`SprUAP{R2*6o&2N8;P`d@_|y zDN!gHJP^KRAS6?}x=y@O5;~tNDWs>~!=u1_q}PBh?;RNi?Alo})I!MvK%(`xC_9MA z+La2V90De^jSG#U0ol<;JK_5FTfSM&=9w(?!O97@9$Efanja*lh~-vh6_n^r+69%;yU(n# zK=<-JqD7u|Tczih2Z0@Lc3nE==DNGJa(DeYNq0@ncw&?W8YsuBzxl???bE~E&H35s z@&4Y(->H!@HN@ovM&hKL|WQSQhLf zBGPipl$r!l=B4TpycZ2g_zJVSL+;Bo#I&MH=nKzKU<~d$!}v^qLX;MhCtmnmhj_9c zM*RmG*tD^z!l2hjxyU55kMU3c&Ou23jh~$7zx=))hX3)z&tGO-96B|b_}O0u3om!L zkgsA+(KP;l4IMmiVCfY!n%^piC|Wyp-P&+ z+8YPm9mG#!aP#Ld==!N^grJwphwcJt9J;tDL>Rvv^un9yhT?3613VyI9jh2G9N$E| z+wslF%5ODSvzYgl3OZR89}roN*tL@q*ufn zC`9HN$xV~P)UAaN7OJ%CIUzUCje9LgGDK_nFDqB6C?`7AeERz%-(4iUuMfV{K@#WX z%1nDj4LYu`r4$j|I2uXk4Hco7=L7?ss}WMmqR*=0bbd%#%~Y%=UoQ^#)~oq!l=ORX zEAR;=IO`i@mOU#8vA-4-MZ4GlbFR7PdeB5YSH_-&Yh6CDh;ZeyYu74Rg$>-0p4Dn* zb4~=H0P5QafT2NM6hpT`ILMcd=-nq`vq1Awxpjs3;GF0sFSCrNwMd&$whd-7rD%ys za+9*d#*VYDhb>~`YOEc|%$V_(h%Qbss`W}B5?dCb4G_B&7L&VUC(#|(k$h{+?#!Yv zmA@z8g;6tMg0`U{g{8J-xW{xBVN4L?U5TwG!pURtussOeX3J{Tsv4041NLivxh;{> zVU>iXf)ENKtemiRckE9GZQQx=HF3UvgBWSEBm^(#YPq$-u-3pk}{ zRlJ^Rl}n%3A?8*3JRwlY>K7||1!R4m&!9%#k-lEo4jx5TS8-icVM+s@8V=Q?xMg0W zLGX*`yW5lF^{O%J7c)-!y>=W1u5FfZozzRJ>hKE6|4F@&C<*uaT*$=FS7`VkFgcn& zCH|@Duzt6VB;r!ugu*Z46rL=Bq?JmA@`*SeG!;N>ei}zY{sKI)ych#m0qm!$F4wfkwSz7HQu`Fbpxc zkXvJYCw|fPxGL>zOR;p%@{ z>n8xf-{;(4_6z?1_VFtFFnb-4A%Jd%^>SeECtx8v%`LgQj#yaqc7^i-?EO^Nd0NGtR1J>`@qin2{$Z5uSu!?lbD;* z(@HzL&OdEV8#mNh9^cM+QbM!2rCik1REEdRC#hy%pHP94&T(r*K&4K-R*fo^tI&ikFwh9X zCgP^~aoAR|Rcv)S@Zi@fQjJcL=3=cvRL!8u2d7M3%4t%n)at_tSB%|jBsGIM<(k=> zEz+pc`MR<~sr_1|^y#xj3MbToG+M1Ltw<=A_}ejSkz9mCX=Ogt8h!NU*pm7cwt88u z^3>u`C0vCGzn)Y?f4#z1x;Zg=5m5R2bpnXwrN~1HBn93@uYU&!A zEH;PB;|qi$EwQ$auAaVup~T48#MI2(!qO`E_mJt#RTPJ}MWq`J^v8g7;V_5%suHdt z>L_C9V%pxXV=mU#<6sO$0iAi6hcA8JFzvUs{z|XB7~wLUhg7pT04Rl`H0jl4DRyHV zUg(#ZcoG^CsvyoD)j_YU23)wNQa2~`W`<#^5#!XN9;PZT;bjp)O{r>{(xy-QGp{m_ z_n0mP7k1~m9%JJy18?R9{i;1cn;Ouc880*)y|k+Rs=??Dn2cv3oYLJH02P%30Fe5D zKQG-F0(&|l=*rst7&vyra`6DP8i$jZFf@-#_X*4U2iFC#g&Jb5E0V_I=C`MeL5qCmD^{ ze7{rO07;3m9e>~Z-X9NSRo$w))V=4P{haE|7-Ns$$rxt>qd$SkqFum~CpeV`hl=-C z&-P>7KJiF<^y<@2n&WXEwo&KB{+WP9;sksV`)?ba4s z$C_9(YHrjYkLjfz_8=44!oZ$edaREo?!%LJaSY$QXKhRO+C4u+Bbw{piP`amu~(jJ z$Nhg~Ozxhzd&yF+6y9cR&l2jb>4k%{r+(*&QQSYpm}BAK_^|~%_u_sASMA`;z0=SC zF!lw;lx4>Hw;Y-ppA5g?N&^-&!R#SCP`@RaxIcvZ+C#HTCoa5v<#pUYj{AR{nV%T{ zmpS#{Gq&Rd?oZ5)pIG3(>v|sd7jbXRjn7W~*FUJPVQeSfDg4F4{IR7M!+$%(*w7Df z|JcIf)WT0UH++S$J0-M##9q4r;B+&gZ_D5?bI*(~&9QPuwe&}@xwgz_4j&w6TB(Mk zj%qocaHgz06`$izFd6T=Pr#el76J#>6f$26)kXg}aM&d;w3XRT@{relGDo+&41|?Yzr1%Pq^9i)Su=>*5bC z{`BI{FBUH8m)w{9mm-(CFKxcmcWLs{y_fF4^w*bu`c~$xC$C&#Y?;|TPTM_x^6T`# z+kX8&j+rgm|CWHvOYH7n@sD62U~LkhsxTGM*0D|pb21kQzytj9F+U5iAPWKg!z{we zu!j|_l2x%Ns|FNmSd7J4ElaQ@OR+k(hSjqMz^f6Yu@Bu5TP_{M;+9JXVd!${AS_)j9Yhh!rGsc?xpZJZ*>dS1 z%33ZR*kiU_ItZ(mO9%FyEtd{p09!5{zy-EkI)D{yxpV+O*mCJ0PPAM)fHQ2lbO3wU za_ImbvE|YMjAF~B1GvSOO9!xwEtd}98(S_Nz&y5GI)H<0xpV*<*>dRsUb5xV0Ssl! zr31LimP-e)mMxbK;4fP)9l&I^TsnZ$Y`Js*yFszV19;AsGsOcK&n})W9>9He@l5dm z6|jrnDjuK*cJT+r1C+ro{-k(-M%cxl77tJhyZH0s0lHxq3&n#t(IxB=9iSz42{5Mv zRK+dna=#X8SEFPdpcIn>Y0or7j?k^so zQg-RDiwEeHUBW!+0Ohi`(1#AtFgR)PAZjLjz4Fh(e-}Oms6=xWu`;hJF@X<=;L5^0 zNA+~DG8mNPNJAp%;Yw^RSLu|@Y~m?8Wm~FwJDp5ahfU$Xdj`E}?{m-LH0Y%(E-UvQ z&vVat?lHZC9?z#g?RkGgPZKpD`nd9v_^j9l%=ZD}IkqL&+lKe*Ou(!Ln6Bva8dp?h zo~fcbj}C$~EOQal6+|}1BuN;-BVll3SG+YIYe}q+_zk(LA(2VCg(%OquUtbxC0-Lt zrrI*uaBGxr;4Rtq))rG#8aS%dI91_PT%{?z8jJ>oNO|OALCY_gm60u$`R=#FQEr)U zIloC$i)c!K;)IN*E7h#K$sYu%>cxBODMbEWXudDF5?oOpFzU3HZ2 zHs3)H)BR2wU5s}?g2lc04&X2VY_H0d`#pvv%CtG)ETz4v3Wh~F+`s|*Kq%!C|=bGnZ-~Ddv`G1(7=jV!3uKa)r z19mj$D^j!Y5I90F>&b13aY-Sx1{$ecnbo->sfu(|1D>l~P=Pd1ABKTCY(yp%X0Rt` z)+8b|W~eS;<4#aX0ae!WCf@3c$C`KvDF{tMHH7~w^pVVDH}JL^n@F-6k7B>I^Vo!Qy6Ha3H|z4K#HX}#PRns#!;`{S>4~8U5y|dw)NT4z zCl^GCJNeCKg>k{@ykJxY`2}T0{*lYL;Bs9sD$EP&QQ2jnnJj2x;T-re$(Spzip#=F zkRIjG>iXEN?AF|Hrb1xS9t9+|yI0`CP|unah)Uto0Fxzo9v}oc@mZ4iTsg`V5&w@e zQJlL5RDc;99NZpgDyt1vsd9NkqP>Z?XWA9juB!t9+&vx!oI^TdP*_W`q~paeD(f^K4D~a zMF}cgE?nOEU`)JV+cEaBLE~rKkXCf$u)_Y4udj{7IS1{rSC%uC`v(T_D8Vg0$D zsnNmBQ06xn0%w`J3a^A26_Ep2!lZd(QS%IooX3(xV2m(*`)zx6-L$o#K4t~{s%&D? z$(Wl12NGbY*nHItn?dYtidKMK2B(cB+fvCCqzcY9Mzq^hMobwr1_UUfNi}Zp4@{bH z1xV8pE)AyIBqnUwePXw;cWE!L)YLVz)s~R`tLz+9BD7MvhM9Otd^gRGd^Hhd!mObj$pd{(V#s;6-Fg$$s@bC$$_eMh% zEs9$S4RN{4r43ek4fUYz?2?sSRCX)Q7Efh`hdWifZCSb1s5;f)&^1jR8)Uh+vedNP z3s!3H0nC}B!mH3ga>TcSU=`r_iXaP$JPUJKkU@o#$V7>OHkqJsVT^9XVbCTUA!BIJ zjF%{U{ZWDXK4MhFe>r0uO>K#*!O3+HK?+h(Ung z40DrDfj4kXJJ-8^fA2ZX;JkR7$nb3K=M@3`Lva+oahs4|W~GC#b+ie7*{uuW z{$BoQ?|wsb=!y%l&Lj&b&`}aJo_0G5uNgtlv!?q3IN`Gpj5;0w1XvWi@}~Hr&-^^gHjm1Y^FqR16-j39ueLmtYqEf3`p5(k4mZ&O1uUKaLN`>F#0zh-M4 zZooeq%Gp z6cnDP3v&?vwbxu+@g{aNyA#am!|V+E6#Gx?s~I&x-{l<37}7br0JN4iw58a1=FDd8-pV(7<2`}!Mp!$J%d3$ zygC984vyxMpZm=7fAsVxKmOF|#~*q4Ll4}2Z0_jvMX}5K)+S65oRkkg}^R$Ot#AK}VQnz1gd<>Rm5w{W!RiXHmss1=245(Q8^#@|;cJM` zQ3Gm7JfQflPprI)nCCU`3Wx1?31qVsxhOc6ZNmwt3*X~wilY)2?rbTsLt2fC*h#Ys}m&MSC@uYL9l>V-wt++abGX3?P*%c z(~ia44TG=2+rX;nMFz2RS`^uZ$HlLUqp-X)Y$MyrzL@i6GlImb+yaEkz#xRvmhJg+ zs9S4fXec0VJ`0te>`(G(Q~b+|OJDh!T}=E9t9+uGOLxxRUAMVT4$ds#iN*U2^_#W+klZirM} zqP}31w{-J1P*oeG2oYK`1;sfjW9(3C2I3{5M!DLWO(jW$gP>bXP#dIrCd=P4EqS1$ zwX?H+M}5`*N^ah{Ir+b;>UT7BuFtd&NY#ZeY=~A3n2~kD`sS7l^AHxEztCnzgbfch*U;F-U*J=^@A+6;h`@mx8jwpe-57^^aSc|EKu+HlM%wB?6 z_&9qMPB#&=J_B4KXX^LaUqP!HWxH4p45e0P!C_?(2Jol(C-}$tHqyXsB8dh=6DxpTPps)1H|a4y%V`Mm_Di~sIyE}M3rnzO;og_Oyi=)kAh>( zfk#5A9ma);BeDeVjyPBZW3E%;kjk<+1@e>y^(e-Wi(|;eG32Xb$Z~NEc`w#3Z>#tX z-#j|HxeTCV{B?eT|7ZS1ek%?W4p{AWo4~>1au+-8@c%rc5%OKtHW!Ce>m$P{Pz0FGyinjG9W)J-7~ZS-eUy zRaoREiFX)c?U`^&QCn!JaC1h6zzMg{oS)Rw4JEt)MD6|--T*^Ut?)7dtRf)lMinGLsOv0N-GsD$EK zaxvn$8dKe35>uf26wM0?O9tyOvls~zHrt~Dpp$Jk!4}7 zN#}Mmo9yPH_H3NyNC0kW13*Mrn~=U)*q`*@!?Cgu;MIg(^YCOgNpR09A+T*20=5+Z z?i>y(CVye+8;gtISpMdma^F{Y0InAhMTjI1)7Y@-P*R1{R_2`(@GT#OnoTS%s*`azGXxlFNY?DUv4X(ykVX z%uJC-;6YMliROt{!sIhl)i0^Kgck~K+zW1)4}wP%F|-I-2$78uWTz^Kny9O$qR5)& zm4X-tgNtr>tqfW783O*eEZ|NMog(Z&0u@+*1Md;Epa=t#L^&uMPhpWr5mASb<)TY) z6FA@j6%@{H=?a1EoOu_!yx3`4*c!FmB# zE+|e}0bC*Cu(`OPEMS`0aI74At%{mzsFJM6PC^YV&8Y(@GL|6v1ktV0b5X~(iVAm2 z28NWeEJIRNmFu#mY5)?(hrKPqy(PM-T9#ml7@9{AiH*7e07=0=Orr5-U>deh@fer` z>^HX_bO>B27a(ON1=g%6dI4ielQoGuA}-m9RZC9IExEbj2*OsE0dnkxUo_zVAfKgS z16c5Ce!^eO!+`!mTM2l3We@RU!GT5NR*JZFx2%)P6`%&tK_;@`0gm7v|6x7C2LM32 z1;dc>Kyv6<4;CyKShECz00 zuGD}~8R5UM_FIKN zYab4x0#fVBFQ9|`96GCq)j*+`%sDHt--3?$Ba~6pJ>deB2`Ohu7a;=^69QOoXR_>+ zp>oC;fD8AUh^el&z&4YgP#U48Fe3GEM+(w{^r-~YsTI4B?6g!MlcEREB*R5ZPK2`+ zk_fgMSSQ#eeA62Ybw)Mp6G&B6?^8fNPW7PX)c9wEAwA}Q_j!Lz4+Z%PdMp{+cSJJ` z4JYpW9+Y570SCDPk*f&aci)W1eSX+a@wn*s1%nWWBsBpHKXkD;Ta!z|fd%&=z`lU6 z4Js&l1LqZB0`FD4HG!}VErg;lsdyKP%^i2H5bZtZ}5UpR3>F$stE&|K`F3gpf2W`5#y3X6)qZ5ppnHwA%9UC z({Q86T)7j-A;`nP6`HRskbdMK3#il{ew|<4A@Uo&D7Ws~xxwBd1peid8--bfm_%Ri z#;$cuYm(6lGXO{^L7gDmo`Sj`BEhSW{(^{>?M@)SCHzO&PgDTK;i0homhe!(Rf&eC z80K*V2vem%B)^!uCD+D7y8g26$5Fe#x6n-fOa59ss*7rcX1JV%X4`+nUrS`p(MT=7cSjO)V{p}6m%_1uv@bE_ct8PA=q4FMZ#W>PBw@VQ~~JL5}-5j7~GYi zU~3D^|C9|wI0Q;i{C3Mjty}q>PFX5^M{+@{SSv=C3(d>oj^G{3cLX<>4+UEvYV8_; z=#vV6DdEhUq`Q_2Yv16%R~5SBjoU+^hfJII-euc_4#dAFUPP=7R9|wrRWMakz=l;e z2KHYP4r9>xT_U(%Ed>=8u5Uu5NlihU5G5ea(VV+69cc9hW33@*TX2$*Q>*9#Yst#Q zK1AF5of3(AAQ0t)I%m5hQRf4DcN$&;|M@+p`=6?~p>U7T@I$zFM%t_Dg{BHVRaIYK z)jq=Sd50Jto&FRKtHN6lksj^|div*hw7#>Rr#sTT@S{0mbJ+Kj;xnLe4g222T64`w z$iTXk9|D|qR2%>SW6z){P?!x|9jp-SkWW{}8zXkGXC*|PSn&rThL|V@PT+EF2k#@_ zO(;z2ZHsxK6qx4Ig@;0&=7vy+KVS~?|KO_l$jyhIeDaXBrA*iVXhx{tUgI%VgVFz7 zcqka$h@IpQv=9FeGqHU?fAX~_grHaPtNTxO31y8z+aFKz^AE%?iH(@!-OS2W-Fjo+S~Ya&;+1R}Di^Pc9m65Y zC#!%CBJAR|o7!Nd#Vf|J%f)LpDTD4|q=-)kyimf_s`7B40-9B0ndwg$Zf_>&b0>Yl zaEn7%tw6XU0UQeYLS;Ue(~w*qKZ1_vr~exL!1J&63n+!#c7JO3&M)ucuegka-z;l{ z3R)frmshH)?DPap+3$79hQsB@L_$E>BqnBQy3raAdQ)y+u+2mL!td!9_*MM^+0X5I zcGt~c+6~(h{6)G4cqT$RxsWRnV$-<^CL8j+hZ~|X4=q&_=iRU=w0Q>*kI(B+SiuM8 zT@cxlvKtpg+RLCcZu9%yZVlQS#9hcA3I^Ohx6kX*T$;=2Fmy>pxLn4IM4uNNg!|$? z`v}$eTJ2JTo=lzLQ>TSj|Mz19!naYx|H6;3lhMmB3tg8_ZWZ^v`zC+8u!p~J;qpm@ z=JBVL{Pv@meGA)w*z{g@C-=R0vzrvh5}z1g4qek7+N>8UxULCDp`D9}E*(`lxiVxv z>qLmM(0%SbL+apA0~p+)&ohVS zn5U^}06QsZA2_YjIHd4kI4C@rBorRV#OVGz_Kofx-aWK^+f4(#J)62a*O!HYW$p1m zjn_|H4QU2&tY;9b6R&g*G=@&4g)((;bHIyu(qJm#JdI4=7P32 zF$J$-HxIYKv@SK-zOQq8V~+Pr^*uGogeW|;ySEVO8{(4FYb85tl-j1PLtDz$c(qtZ z((=0bzmssWojcyN>sE zVhkQKee8X!Ra8~k%}Og()NRndMsv`|%OXB6)K8DE_~$^JIOMAd#i4zz9K5ED93>=6 z;hzqx;_|Hh_wHZwfBkZzo)6!*o2P5Paz=OI^+<$oUuLa3{@&xA5BA5au!{3f z=Ro+KjW7lO{eyx-R0sa&-w5vhk8nqy!Qn2^X;&3^JRJg{#x)6!5M2nLa3;UR;A z)=McXvh9$jl1Pu>Cd(qqMgE_a42ByfFd*j&K(oaiMbU{QVPO^1T&i({e`L5ooE7sI zLKJ{0rY{sj0r2dr@anInunhE;VyX;=z-Z_UXFrC7(F1vh!Qq2LbEpD7JB(23n@rh# zf6cD^?GnMhKnhHKXWCX|aD82qZdIItYIp_uymBsNDyrle{m3Vag*eS zj_T`?S{zDOg-gSPoGp^H-6P9d8i9BhN7jhE+EVtSrJ;3|+btdIsHLPtL#~PdJbH!y zwo}(U?oDn%sH;eD?#S>u_{283J(|8#*S#*PiRu|3VO^M~sLJKlg;vxRd!?w#nXzl! z9vz*u)lQJqP{vE0koYUE<`%_~TiVZ_&6QV2;4=yMVcLlw3?M1_Jq3s81Wn_d|(xPL=pDcEwJb_}TlccwwG|GNu0u%?FpOAcFC$m^ZE+SD#2>Ll3L}a8* z$6EufNjnjX5#7PEK)4EC70MCCEtT5r%)oX?pq_KVXy|Y>^!so=d4rgzuJjX(AK=S6%7Y85#E;tLP5?lfAgWcW_$Y)qm+gNa$D=3TPJQlo$1sC=f60DhSVwe_04_z zZs)Cb<=%;*t^I8qG{Nz&rCKA`x9^VWkK8raV~-(@=DLs0{gwvzx&OePU2E5McdXX~ zVvDGo-XCjV3R{wO1*uqNMc-dXy+5L9fD7p&z?B2y-(#<;*=BZAjvTfyhSqW3S5z_s zKpsGl@+bKm(oEoc1f)GEtsoWId!sqXtQspAVAZ@@S^?rZK!9@F!r-|IJO(6F5Tt+; z62P;8Owk|u2S}|$8w&7HG7=>q@waZ>HQcv%=E%V#H}}-kC<%ADx78;aLYya(Pwc;~ zAV)k<{duiWo7{Ta{rB8^a-13;MPo}&Xo}k}j#fq2_lJT}>*k)ld(Q7#Q{m-4(WC79 zFQa!nkxUfc^h%0m-)+6EHWn${bxqq)jT@K@_|VDL)lzH|JDCgA!AaE{(`4^1Xja+iUXQMsr4IMWQX6Xr&Z5 z;zpz@m;6X3(qriUS|^e%l>40{n3=BXU?t&WfFs}NK9wQHF;ht5`5xA0OTtLp- zfx=U=SIR-g%^Yx;Zsdss`5rrGj=u(%k=<_9UxYL|gMXirNCYQ3LTDn%h&oo9l&?#A zZZU2h!M6u3xwU=-Gsx0j!6?{ha3qX@jbE25+SVQ{Yqc2^@_15MAaYRckRjYVMZ&@g z6>|EnKmr-`4{!O43DCP&g}2K{04cvgmCYEgtuYP@@BxX`-E>py`;>u_FSe8sZ<)xT|n+A9KSLYHW8E|Vvj)= zrF1)TBMefiQ?k`|VPnr|rnbMA_J9~}=^m*`_PuTXK&06Bqe1Vx|3q0iZqaAw=zQSa z(QDFvxOX+XhX=Wv5`K_R1j~t*K{Wo7_y%$@%kT|FW3HaQKM=7G@Jkit!h7crwpH8N zDpB5R3DWI8qElo9lHp}@Hmr->9s-HRqKm|)>=LRiBX8+dB*B$czdC3o`znOWp1SHg zzi36WYyL9R=8Q#Mf-~xix?;-jj``zVys1IVqWNDG`inUEH2rS^MKEH|C7@%J-Tz}qc0H-6>V0)IE;*?1371g1W3{W8NMRX!$`FR7>lXl6dnV4 z6g{9wVIdFb)oOBoLTr=*6QemFXB#?eV^tMMEei9nVha!ekYq6A1WW{?`);Ah4p%_n zViU=akZMCP8hT;;d)N33KF_ri%k;}1Uavqw|) zbH7_rD{4?|p?5eXS5OUlRnN#If8=M}`?E)chjuvaPkLwksscJ0JeU!#fK< z8h>s~8c%AH6Cp1+%{{W))G8|j^({{hqiXEA6&SrN?t_fXu%~m5azq}1Re~KLBNICX zEJIvWoTX?H;T<|DOhCej0<8xVLJ;g42T$z>HAk|mfUsIgq$G+Wh4R;FT+lSO3xtgb z=5T3H0g*Kblj@j19;bx%iUt`@bNFFmloHv3Kq0=pfiHzZQ*GT6(hbN)>*i#NAwM7( z75QborkVRY>vaC-^;Pe{*m|d`zOt#g)-ODKShmuZeB>kCj5RlpYRxsezNVA^pH=nn zh-|2@inI*xe{{$2lU~CC4iXDF4DXY}J0BU_4dT5jBjSiEZq9X+?OP2mvoHYs!jhN` zEDAp(GX{K01%IX>9ev`WjKCOB2HV==t!BJ7uE~|Q*IbRmbq= z5k|a`^f+J4zdUDi-gCv9^KSF>b>d?)G1>EWlk;|lCr1<0eLl!Hy;p!BcNuZ3wV)T0 zANBAFB6qpWSLC}`6vW1UhA=NS5bujlx`~Y>H4UypUEWnW7OPM6@FB>$4*=3&>pz+^4nQE zAeqhjZJi(M#djlqR>OKp#z3uybg>gXfR(m_cLYR+(0e`(o47)jCFMH-P?XLXz7I?BZ0Nb zQ5g|V^3(gG%XfTA@_Qx232Q}6R(I^nHAnr*8Mo=+QA%lz;&X&EKitmb)!1-=Rk8%W ztL$a?5(63Zw)EG*fppuFrVvy~i%~iBF;&xS%UBy>NZ1(MoC}BXMN^=x%>Mcil8rQY zFbBX4B-IV62L=*L7G1OmOHoy(Nuc<$*e$k08?|%B;PMsj4K18r3`*|Ga>+fof15|D zEcX_ER+4($D#^Bwb?$%U^rN?T2_0h(KlzaZ*_*D3M|0kbOv!$Cx$g9)J37)Hw^9Dn zlGv&&T|aZv!($!P_u>6rQfB&r9oL4gX%E489s-|^v+1JpZb3M~pk%Xf*OBk7n6(EJ zls;b)?c{~Tjhl#QLmE5Lt0=>Z5a7(Ju80H!UN^`z&f_Xcvm$xgn&3)ODDuck);6>O zB^(lV0G`)ph6X*rX|P((KN}5Sn;Lrl;8VgAhY8<_#hxb%1An5Qzg^N-ksX3GmLl2V zN_0oMHxVBGY}J&)(nMv&R0L32>3)^!O7|tIG%pl04~i)YRmDs3QMG-86Bb~nDqP$0 z24w>O)tpv*%a_c>R}D(IJR!6ww^rczY^5xsD#&|v+D7HI35eNDDv?w|h=`f63$Dvs z8}j=LulZ{Ix?j64^C@H08|NIMVBzi}|G>ksHXW+nlxz$5bvTdO;TW6dSkYOT^c!xZ94X$Ar>s5_M0{FsA~_G5%O@Lh z^v$L{9#0oOX^+OI?5`J^<7NK(SarNQ)SYVJezzwAL&UDj#n<_bSTJHnVy4qy9uIa1N(XBPKUGs3jRup#o&#Jszomc9?@#jhzx(hX#*($c z+C)`mQ~!eSTe0DI)KJAeC&EbAQee*7v4REU2hsPFK78rl!FC`G`xjrlX-iII4hjS! zbvw77e&@h3;erlo=!T%rdblncx_A_UPRW3(gY80koFpFw8Ztv*#+``8mHc6(NOoWV z$NX>7Key@E?MiQ)!}|?`fdOF}x59~PYzNd6)ztz2$gR6~Z5`OyRozkD(FUU^-B6dR zjg>|G(Lglf^^)y~1Xvh|CK6#O3K8Wp2|AJ##8N0po}?hYy|NvTxUS_kl_c<)aSa3| zQo6DTHnhN^GF9SMc1H*oq>Uos&eSCD&vmEMk8)v4IL58!SWGxrTUKwiSbT@I&faB)BHL6|EBtY>4>huRTfz2!j=|ophTp@e zj#gDx1Pqn+7r&v!<`?rMTpS)D{JcUbYhv{CA(K96K~fuK8UmZ~!3oYyd?QcTpX`YN zj&B6T*8|dN(W4oPTKN9+hEJ6p&ceS2rJ(ps@U!>7`-3m@9~FKf?s0|R{bR2#izi-0 z{-EFa?u?dp2odMIpA&vuXc^>_g}&l9)x}t(7dajYcskazzsZGL*9fWx@0L&%ayj8@ z6$d0PQzjQ7U!&qgx-C})B*7puDXW5f6dn;(X0WFLju8a7H0M?*dI;vPcyQAn+=&_@ zLw>a<0-3p%U(p<|KznG)P*wJ#uSP+^oaMt04z#zmtZTH9u{v5&<_r2@spGdnJnb$! z;14cP@@b@e0rc;M(d#y zW6LDzgctz-NaNeTdvZ(Z1hST`YBy4GTLJ>ob_Wm$ftHCpT%<%W!(}knEOWR7mqVC^ ze}uUlhHDI(HyElWhzN{Gk~WO+h%^F2Lz5s>cWmFbwZCukrfloFwQK5XW0e(QeAQzh zi5uT6Xdc`AhJqJG4mH>)(X6enLR5itS5*dp2w9otrh6pr77|uNLed;@E(eD+L?VJiN6SR7C-4tZQmd z*9sdf$@OCG3%WzF1ka0&lKUi*xznc`CD(^EhtTi>?yhUmB(An_pIm7XJ$;&&ophh} zXeV7?bi4J>*(aC&{zrflNRf_c`y)@>>FN3f0?o?=zVCY{zqWEkCh!4Z=t10*JGA(R zKKAcgG3jp9|6Dp@k5sC(FB@ni5%eiObM=tcqD;@9xpD=%L$QwTKXauZt;H{2;D8Oy z=&;+NPWTAQqgO85<1AnKg*_(SQ$LJh*V8+2FWrp;W7uVS7v3ZJ=pOCgC_cB}OYdGT z-P1UwvFyGyH~ap|WqWK|!^-=qOvmz-!pi&TYX5Cx{}=c38UB{=oT!N3l(tC^N`Eg; zDlaPks9Ne?Evd~p7oB-m#`S>fCHLn%&7ME;`n`YW%lY>Pnu32BdL;A>^Y_E)@T-x! z$mvL-EMMMJ{Ry|ntdbB+H_3A!ri}m|8lQD1Xk8G%K;Qvbc1^xu^ zkS_dK9Ahsy7VIa;iei7ax;OaMol==T?Lq>G-3GrT0v}(oOrL`FmC9faY_L?8@dmi? z?Dh(t-&rafu!|3t$`1V6(vzf0OY{puN7$!JWzM|ZQz{D#F|$%x#Ph~d8NY1CHzvHb??;TvBUFo*1D$Vl}7_pb5o1s zOH-3H`mwtYwk$18Thoj4v(}cCKUcOMr2}YTp=GhvVf-@SIDQ4t!udFQ9I|VU;Xa4sy}ulY z1Xa|}zVG?XIKY`XwHdL1Iv=a)++V`zvWqrV^75-z`nE3wF26Am6BNqwg z5Skj-xxwkH7Z*%34@W!@6dFLtBm}K8%p<&vm-7l;A!3nAIMtX%-11Zp_ONN8_(h=6*~BO-ie=I>SD^o_}s+QjBv zXwa!~YIb4iUUhM5>7J>nC3WiFsmA%~Y310|_~OJNabo_UGBba0{`itUIe*VwL3-J~_EKb?jKdbzIadnQL7JVKJFd-+AD*E*`QZ5RgHtY02_7#M zVWrutL8X%>+j#7*y} ztvtJBq<_@1w!g&OySC?*J^M!TnTmYf=-9M%>XwnbkQo2Z8rbT@MEpQSO--JS=2>sN z?;PIIJJ!>f=jpsPHr<#P($=Jv|N2l~O71&X$Bo|piT>TUjnu?zDo%}9`JthantX1w z!pe70sbh51I$LZsKAEq>qtcy~Z>IWYYWek{5et(zHEvNR;uxM-RA*2rOQq~s#TfGM zD)PKxbTpo4LnBk8qm6knZS`AuDKU--$-P4(c{$#bSK>XG{%D?$HRh#s9P_d!&&mgS zEUGEKoX)84pU8{#HF(}@ow810?6b{s0?XPpGB#8(zI${eK8o7ho)J`4(4tCjZp_Q+ zyxQAv4y?cije^^FPaGhQ_l)O-1Jijvf${TlePdotTQo^W@5D!`m7-I=O@Se8uRWn7GPO< zXYV#z7Ygy7(Y%Z9cH_>4yT-f+!+33wSb)F;rk!{9j#;P1th^gQYs`Do+lNQaN|Sw~ zwRzW6{6u5km)^c>Wc!}t!-^U_57^KB>9fq!d&|gKj|clV-jnw<5Rw9Qd(JxP zP3(l27#cZCmDArRK;6BxkVkHBZ|G*eF@w%=0fDJs$SRf7% z_vTsmIfNQ)YzU;9jh*!?4f(}} ziWtBY#M%N4jrmaeET^jpIMX$pJ}c5Sl0GZZwJd#BrfYfntU}j{^jVdzmFcq@U8~Y( zb-G5=EbnUg4JJ~Ji9|7gg^AF$1{0xc3=^Si9222yEha+O1SUe)Bql=F6edE~I!uJF zYtmMijpy}gtlv9k^%5*-)5dYluOXyrNayPt^7SB>G%$4lD0M@6iH~>0iC6v77QmOr zeBloI+O*YX&$AhAc>nv!6x& zR)mBq+jJ$*~(aOq?5i#d> zjhq)O(W*EvB*pU49%67BSS8+vH^#Ssw6KfU(+P;0HxxO!&^tC6&x^g|li)Ez?|22u zW1}F<_x2gbl)!c4TgE#o;&{UrtP2;=?frYor$r23WT>wpo{W!0IdM#^9e1Kj?yS3g187-g$Q8ql%WOYIC z(TqzEG1yg*D+%1)gsN51THL7jBiC5Gv@@7vW4^OAgWi>`86(;I-X*SV<%V?JY9gp@ z0oUysZ90pf?>8kL}hgU9W4?ozAy4tkhgL=%#c&+i(gvM96Xq4o53u=pjR<Xv(hxE%txF^DW@DJQ&Eg zpv^!!pTT7-L9HKfwYETJt-$G~G@)aDE5N!feU7osC~QZ8Q(-WDj@wUmpkP1QNo{&i zbu+c0!VtBg!Y*n9~dIV(=~olVl+m$V1r0 - - -Copyright (C) 2019 by original authors @ fontello.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/priv/static/font/fontello.1575662648966.ttf b/priv/static/font/fontello.1575662648966.ttf deleted file mode 100644 index ec67a3d00aafa0a7181035459a528ccc5a30fe99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24460 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 N-MsX12nx8`{~yr1tZD!N diff --git a/priv/static/font/fontello.1575662648966.woff b/priv/static/font/fontello.1575662648966.woff deleted file mode 100644 index feee99308142ce9baac531d51fa91f6e182f0c65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14832 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 C)+MI^ diff --git a/priv/static/fontello.1575660578688.css b/priv/static/fontello.1575660578688.css deleted file mode 100644 index f232f5600..000000000 --- a/priv/static/fontello.1575660578688.css +++ /dev/null @@ -1,146 +0,0 @@ -@font-face { - font-family: "Icons"; - src: url("./font/fontello.1575660578688.eot"); - src: url("./font/fontello.1575660578688.eot") format("embedded-opentype"), - url("./font/fontello.1575660578688.woff2") format("woff2"), - url("./font/fontello.1575660578688.woff") format("woff"), - url("./font/fontello.1575660578688.ttf") format("truetype"), - url("./font/fontello.1575660578688.svg") format("svg"); - font-weight: normal; - font-style: normal; -} - -[class^="icon-"]::before, -[class*=" icon-"]::before { - font-family: "Icons"; - font-style: normal; - font-weight: normal; - speak: none; - display: inline-block; - text-decoration: inherit; - width: 1em; - margin-right: .2em; - text-align: center; - font-variant: normal; - text-transform: none; - line-height: 1em; - margin-left: .2em; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.icon-cancel::before { content: "\e800"; } - -.icon-upload::before { content: "\e801"; } - -.icon-spin3::before { content: "\e832"; } - -.icon-reply::before { content: "\f112"; } - -.icon-star::before { content: "\e802"; } - -.icon-star-empty::before { content: "\e803"; } - -.icon-retweet::before { content: "\e804"; } - -.icon-eye-off::before { content: "\e805"; } - -.icon-binoculars::before { content: "\f1e5"; } - -.icon-cog::before { content: "\e807"; } - -.icon-user-plus::before { content: "\f234"; } - -.icon-menu::before { content: "\f0c9"; } - -.icon-logout::before { content: "\e808"; } - -.icon-down-open::before { content: "\e809"; } - -.icon-attach::before { content: "\e80a"; } - -.icon-link-ext::before { content: "\f08e"; } - -.icon-link-ext-alt::before { content: "\f08f"; } - -.icon-picture::before { content: "\e80b"; } - -.icon-video::before { content: "\e80c"; } - -.icon-right-open::before { content: "\e80d"; } - -.icon-left-open::before { content: "\e80e"; } - -.icon-up-open::before { content: "\e80f"; } - -.icon-comment-empty::before { content: "\f0e5"; } - -.icon-mail-alt::before { content: "\f0e0"; } - -.icon-lock::before { content: "\e811"; } - -.icon-lock-open-alt::before { content: "\f13e"; } - -.icon-globe::before { content: "\e812"; } - -.icon-brush::before { content: "\e813"; } - -.icon-search::before { content: "\e806"; } - -.icon-adjust::before { content: "\e816"; } - -.icon-thumbs-up-alt::before { content: "\f164"; } - -.icon-attention::before { content: "\e814"; } - -.icon-plus-squared::before { content: "\f0fe"; } - -.icon-plus::before { content: "\e815"; } - -.icon-edit::before { content: "\e817"; } - -.icon-play-circled::before { content: "\f144"; } - -.icon-pencil::before { content: "\e818"; } - -.icon-spin4::before { content: "\e834"; } - -.icon-verified::before { content: "\e81b"; } - -.icon-smile::before { content: "\f118"; } - -.icon-bell-alt::before { content: "\f0f3"; } - -.icon-wrench::before { content: "\e81a"; } - -.icon-pin::before { content: "\e819"; } - -.icon-ellipsis::before { content: "\f141"; } - -.icon-bell-ringing-o::before { content: "\e810"; } - -.icon-users::before { content: "\e81d"; } - -.icon-address-book::before { content: "\e81e"; } - -.icon-cog-alt::before { content: "\e81f"; } - -.icon-apple::before { content: "\f179"; } - -.icon-android::before { content: "\f17b"; } - -.icon-home-2::before { content: "\e821"; } - -.icon-hashtag::before { content: "\f292"; } - -.icon-quote-right::before { content: "\f10e"; } - -.icon-laptop::before { content: "\f109"; } - -.icon-chart-bar::before { content: "\e81c"; } - -.icon-zoom-in::before { content: "\e820"; } - -.icon-gauge::before { content: "\f0e4"; } - -.icon-paper-plane-empty::before { content: "\f1d9"; } diff --git a/priv/static/fontello.1575662648966.css b/priv/static/fontello.1575662648966.css deleted file mode 100644 index a47f73e3a..000000000 --- a/priv/static/fontello.1575662648966.css +++ /dev/null @@ -1,146 +0,0 @@ -@font-face { - font-family: "Icons"; - src: url("./font/fontello.1575662648966.eot"); - src: url("./font/fontello.1575662648966.eot") format("embedded-opentype"), - url("./font/fontello.1575662648966.woff2") format("woff2"), - url("./font/fontello.1575662648966.woff") format("woff"), - url("./font/fontello.1575662648966.ttf") format("truetype"), - url("./font/fontello.1575662648966.svg") format("svg"); - font-weight: normal; - font-style: normal; -} - -[class^="icon-"]::before, -[class*=" icon-"]::before { - font-family: "Icons"; - font-style: normal; - font-weight: normal; - speak: none; - display: inline-block; - text-decoration: inherit; - width: 1em; - margin-right: .2em; - text-align: center; - font-variant: normal; - text-transform: none; - line-height: 1em; - margin-left: .2em; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.icon-cancel::before { content: "\e800"; } - -.icon-upload::before { content: "\e801"; } - -.icon-spin3::before { content: "\e832"; } - -.icon-reply::before { content: "\f112"; } - -.icon-star::before { content: "\e802"; } - -.icon-star-empty::before { content: "\e803"; } - -.icon-retweet::before { content: "\e804"; } - -.icon-eye-off::before { content: "\e805"; } - -.icon-binoculars::before { content: "\f1e5"; } - -.icon-cog::before { content: "\e807"; } - -.icon-user-plus::before { content: "\f234"; } - -.icon-menu::before { content: "\f0c9"; } - -.icon-logout::before { content: "\e808"; } - -.icon-down-open::before { content: "\e809"; } - -.icon-attach::before { content: "\e80a"; } - -.icon-link-ext::before { content: "\f08e"; } - -.icon-link-ext-alt::before { content: "\f08f"; } - -.icon-picture::before { content: "\e80b"; } - -.icon-video::before { content: "\e80c"; } - -.icon-right-open::before { content: "\e80d"; } - -.icon-left-open::before { content: "\e80e"; } - -.icon-up-open::before { content: "\e80f"; } - -.icon-comment-empty::before { content: "\f0e5"; } - -.icon-mail-alt::before { content: "\f0e0"; } - -.icon-lock::before { content: "\e811"; } - -.icon-lock-open-alt::before { content: "\f13e"; } - -.icon-globe::before { content: "\e812"; } - -.icon-brush::before { content: "\e813"; } - -.icon-search::before { content: "\e806"; } - -.icon-adjust::before { content: "\e816"; } - -.icon-thumbs-up-alt::before { content: "\f164"; } - -.icon-attention::before { content: "\e814"; } - -.icon-plus-squared::before { content: "\f0fe"; } - -.icon-plus::before { content: "\e815"; } - -.icon-edit::before { content: "\e817"; } - -.icon-play-circled::before { content: "\f144"; } - -.icon-pencil::before { content: "\e818"; } - -.icon-spin4::before { content: "\e834"; } - -.icon-verified::before { content: "\e81b"; } - -.icon-smile::before { content: "\f118"; } - -.icon-bell-alt::before { content: "\f0f3"; } - -.icon-wrench::before { content: "\e81a"; } - -.icon-pin::before { content: "\e819"; } - -.icon-ellipsis::before { content: "\f141"; } - -.icon-bell-ringing-o::before { content: "\e810"; } - -.icon-users::before { content: "\e81d"; } - -.icon-address-book::before { content: "\e81e"; } - -.icon-cog-alt::before { content: "\e81f"; } - -.icon-apple::before { content: "\f179"; } - -.icon-android::before { content: "\f17b"; } - -.icon-home-2::before { content: "\e821"; } - -.icon-hashtag::before { content: "\f292"; } - -.icon-quote-right::before { content: "\f10e"; } - -.icon-laptop::before { content: "\f109"; } - -.icon-chart-bar::before { content: "\e81c"; } - -.icon-zoom-in::before { content: "\e820"; } - -.icon-gauge::before { content: "\f0e4"; } - -.icon-paper-plane-empty::before { content: "\f1d9"; } diff --git a/priv/static/index.html b/priv/static/index.html index 4304bdcbb..66c9b53de 100644 --- a/priv/static/index.html +++ b/priv/static/index.html @@ -1 +1 @@ -Pleroma
\ No newline at end of file +Pleroma
\ No newline at end of file diff --git a/priv/static/static/font/fontello.1583594169021.woff2 b/priv/static/static/font/fontello.1583594169021.woff2 deleted file mode 100644 index b963e948916730f18ba7386213855cc8f10c6b81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11564 zcmV+{Ez{C>Pew8T0RR9104*#44*&oF09OP604&r10RR9100000000000000000000 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 J^AVR9LI9nD79#)v delta 60 zcmZ3po^j23#tAko>D;a26CGZ#NX(a7v{{F-##u(Zl{-D2-{va=H}eYyAh^|;T?L~z JA8~mh1ORGH6lwqf diff --git a/priv/static/static/font/fontello.1583594169021.svg b/priv/static/static/font/fontello.1587147224637.svg similarity index 100% rename from priv/static/static/font/fontello.1583594169021.svg rename to priv/static/static/font/fontello.1587147224637.svg diff --git a/priv/static/static/font/fontello.1583594169021.ttf b/priv/static/static/font/fontello.1587147224637.ttf similarity index 99% rename from priv/static/static/font/fontello.1583594169021.ttf rename to priv/static/static/font/fontello.1587147224637.ttf index 5ed36e9aa80274d61f5859b1204103f88a826894..ec6f7f9b47ead3494c58b530b7582b99b1062fff 100644 GIT binary patch delta 51 zcmZo!$JnxtaY6%&BzH&F#+Djq8L>6`*W>wZzA|t#zhD4@Tl*Kq!RXC0E-!=t*o6{3 delta 51 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

#Q+1u7#+kOX?5ZfA%NRPB+(1qD&?5%2@# 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

Hn}@gtz!p)$p(0A?L9gXMn_0?; z>OHCHdCl}eW&lOe=+=Z#lM_ms@%Giwc>rTQMqv$J0TE;siM$^0jL}yVi)!beRJB^^ zRJ<6@JRkPw{2M_(0^s0C5U#bdrqXYK?v1?%@1tNSaithCGH)a!BMNK00(=<=XgDY+ zTYDTB-AWjU^a{90rV7nc@{y*k$e&&LrnQ^yecCpGPQ3lYWOjXrA@t6%-oHi{JMvpp zBZI>&BVqGo!pR<6CKnW$FdybhKf}VuwG#}uz#Jc+;N^!q!LeCHD|51hwXifC5fAf# zTRZv-WQnic(o!$N-vVok>9#{==bgMwcQvutu5ezzH&rCp&N_OIEw|*3A;V2QG{V3v z=NdPn9MbEM4+-_)RMi8VFVteP+)UMbXN|KugX-a^AGwl?i7P_m#XbMh&pZ-2=$$%A zKQb0;`wUl>P9{2&tgJ^UfKSIdh&F8)2AF)2m*Pz?Ca*B2I%D#H_22tF<72E-%0+Fs znQqVpl1n)wC-cL!h%E`a3YeivwqiqB6*VZaI=ZCD=>NFpOY&Ah_yt+ORf1SRL07tv zOsidjP$lO<{n&jBfSkq0?)-xsJBL=*r)f0jUUE)R6_V1dn2FFTS=rEP6d}Cz3m4Vn z%KFX%w?tk+>maj{U^a40y7uXVhO8$$V2%?G9wb9}Hem;ia!iEB4&ZtrEvUR@XBz6Ps$4OpV$$)pni=wbB3)FJ3UkSZO90K0rG;;Q1 zs1|7$Z-uG4v?%AJ4*aIt$zVAJVaX9YFhL`|V(QKP=rokCH+LH4OGr{$FrX6x2w$%0Niok3aqOni z1@$`hWZM}L0y4E?5uH7DIn-;UON0l>zT6TX^K85vW!~E@CJ}3|L18yae=PTAhhY$K z3SH(3^lME#u5oxptc7ec_Cp2~TWe1qnmrFFx57c62Za=Y8I0$|Va>+h=V1j>FD9)6 zVVwT%$+)hVmM&gD#TuuK+l(>(i_6ESPjXyB7jNO_!?`KKC}075y)tB?aRw1z65Uy$ zQG z(>5jp*l=qbRvGL#%#cRd*4g2=9z?e`JaJ6+q|RhN1qQ#4ne3|%!ekrhwXD-+UdlBs zM#z;n&n+=sA?JFwtuii8rIkLb9NZh+G|OGpe8s|brpo2I zUN)@?wsh72@R`Xp78=NrlE5%3MhHg5EjlA;g)c=?>VbS(0^tfhDvElCP(!$>WU_~p z#|)6>pa>TQjzC3!05wAGh_#GB3X@dFUS)rgwc*|wBvL|>iVYfOtu=#-A^;AYwbP&y zJ|yvl*-`GNykjx~{;G;eJcl)7S-d^CoEi60jg9zf$%~lHk{=UB9imTg3#V9eTs zmgAkBO)|s3DfjDSOkgE$j}*(2k?G96K4-MF4JT3C`he~o>p9Ywqn3MO>uUWZ~&qaPAC*G`7BGJ67i zMoJUum-!f{!r5hv=W%`BE*upnpXC zb=^RPV={lJwz5z2I2#X)D$9OC{q@FyHIyUBu8M)^h>QsdM?9xpb;SW5hB8)GZ7RuE zZ$&hus1B18#4Lc}1ab~MhytS8m@WvyQLAVk?+dmMGIO~tBzxc-tefE(9ge{_)*TrW zKx6TY5VZ2)W8nsdQpR5^ObzXhof9z@C}&>?RS%kLWJ!Q|;&l#+)DauQZNx4L;Sc%< zPp|cB=H+v;hbUTklPTm=7;5n0U{MS>^ngxqPDh@;D88lZi&Ll-UBM%yEE_9_$NB2< za^J?*X#H9fp8dzNcnZ2^lPYfl><+s9dU3HbFTBzLyB6&t_IP1Jd^Wox0wYo*|P4U`ZCSl2m8NFOyTny)zaT`kxmo{?CF&wW` zL*p?pW);2BWC?$1E06o(9W<+7(%i?68wkG!l^LN7hMGHi%=4*1E<;Mp8U)LI@c%3n z|EvitY$}7=?E9D;#T|!H&X&v>MorM$KsAPykm7wM_tK-#ok+=ut8*fmgH>HBX!=mQ z({5IE!taDcnTZ)D8cY-6$TD2>2szBVB9hk!Ff_=Bv;dTD$2v%P=sWQqu^rCgS05v! zREAYgvxU%-F6t~Ig=**i?Ct%N`HqbY+?K_deH6Ub(59Wwc0a#|NRmk)a<2fq`PkyT zi8K8DF1|MOzCO`ACc@Et8`5`u1PX6)siBSG0YdV@7L);mqgaO1@NG!rLVC8osR_Fj zXc>BBwF+9OzXMZ>m}a;lJ6lTtP}w1pffO+X?J8?vxRy&~iDUs`e1CHF$qYxmv&Z;P znPiMt7M3vs4w{?QR}OtZA8EQ)aOqdJ%9NX)>490OzM)l_vOaWG-rzv3)8-ScTM!89 zF0Stju@m7zF!#V3V@bsR_V%J}*BdXuX8xO}{!?7?$CX@>sM{h6xVUScF?18YXjV3D z*v?u9gfsRr$N!=cDcV$-9&n*O2z}JS`u3i1-IA0_}MrS${@)+We*)2r}Pc^K( zxkm8CZQ#JGYwA`LLAG(iQV*5Fz|7 z;V!}AB6QkYk=5L`1>CoDArKJKX|I$LU|?w3$qzd;qebO_t{eIy#N-eo!u3XY7kz3mF+L)mkr8Na`$YppR^Agm6SjU zD~IGr-(WEHA+ku07{Z#IFqVqmO9ajiEAPzXX+J@>LLZ)tIscl-#lg5}+YNzT?ZT0D zfuK1f{q7!2xBCm+$KAufbNLQ78UF>W$s^qUiI<362!gqT=P8QlG5>~!jalQDX?bKt zq0Zhha0vnlEAP$V{M;I|rY)cg}K@?#M>1b5^HlH}x?f&^S*No^d0S8{5%HvZj zg`vb=3(Y3DTb)~W4R@5=dF+=t5P`mKP>@nS88<4IL+v{HkI#>{4?f4@Qd~>vU;GOo zVILYC0+*gIN^z)KY)EgkyU`jIg(| zm`Jc(EBOj6DjRPtiY;jNEUB@j!oikYQpOY$M!lOzx#}Sfi9jq9)Fm{woo6TNx&GqP3OrjSljYz#8%tf+4^spIRrR7ZH9(k6R+j_Z%6JBzzNRq; z<(?LoE#&rGAWD(pQNx*M%puCM1>XNy8g<37f?RQmL)1NCI#@P8T+U|29A5RZRND{`#aF^;?u2@6C8Vv5 z^BlxOdLG+*nF8U8IpWa2SS}WDp8uFWXWWnZ^#Z@d&TM{vlRjeU1^rd_zD6u%xi}Pc z46!yBy+7dk`e#rPdtatR-G@j%>3xr9{PExwDzMI(SdbdAr#H<~TI`Lxwl~RAZS)Pw zTJ&aF8WeC%brchH)H}=4M^VIQ?=`rKi?#M;G9KetM{p`%=M?VAeNZ*ll~(R47V4c? zQto$O-Y?-amKqzi1}N;7O*=zWY15Xb6m!&$8i6)3(Ztc)GZ=+Yd`mUDM-1zYW-4b} zL$k3qT+BM0R~ngsG;L#*3OKo6ipCb&MX_9xjzvnT0Fe>AvlD2=>oJhRl^DUqMGFrT z$*x7(9@t}nb|?z^Ee;TlmuN=3ZvfVbowjy6?1Nb$^)a1B*ZV*?v{sBbw9%hSe+(F2 zhrt%$Xg2hj_B>;Y<;|kj# z%~Bz<%3(33dtw?c#16kD`zbi^k*1WWjD*Qt%cdYV%x(t+jsJN2L)iw|#GfDW&mEY~ z8#WGf^Bk@0#?AWxxY@fqcPO*qOSB^$%ZeQBZgGaWHLldA>8#%Bg8BxVsf{+)YN_8e{^&utJXe5N)N;Ud< zwW;faywRJ*8phhyv1)d_#=#(mD*3C-3@M+0^orBu7avB98zyZM({MkGo+-72QXHZ< zi+_2E6KdN*FlGGqw+QH?$bjSKhBF8r3}Z#&gy&|*3#jSL)-e?aUCa%~0g@HEBAoKDS|2e#SUAB*}p@ zT--F4nfSuIU?yKM1qUbu)&rvd9C1r6l;DLsZ+0Jf3f{3@aq~W+6sCQ7Kq`zULc8} zA|P=Nun2>160L95*eG&PI-&1|cNlyzgdE4jw|tYqb&UsW~r* zF*X@)ht=TwkAKV5@Mm%G{f~hHTsgluS(@SgXp+hOOO!|kWi~nO4o0w{+A|4d1*Gv% z5UP6PL!4}?NY_FA8dH+^2t^O%J3JfM07!(RI?O}Pi){fp*N028O%&~TeJtUxA}PA? z_jvRn?30TvY2l)O>v>}G-erTawl8b+)>6ApM4OPZI9n33Z3^>5@wr~4U6D`@d6Vva z7`eG-qbA7ZCJosFQX0Z)_EhF21#nAx;DRtslOoGM<1Af}SeBSrG-Tj{8boo!S_?U- zhHOX$8FeJbZ9Cve@nnMiNmE( zX#DiA(7z9tcC5o2Q5uWNc`0XIF{ax7`_ghue?RUqG!Bx8hTpEhNQ3(b_BZ=iL$lMN zVi%g&4976!oDhZ-S524>suK@ffq@_a61~9^Q>hFUY#gu=+?An>tXAlP_V^=~FxMY< zMOcrircV@6IfW!DIv2sDJjg^=rk+hhH1#hfrci3VUE&^r;468dhu`#1V0(SM3LBYJ zXOf-z;^T=LE;^-HE|>=qS~4W05zln9YxDVJjn1)oXzGeTG za#XvN^a!N8#GqM;+-53Uc1nnWxAe-Cg(vR1>+lp`s72WUd?ogPY{@tFwjzUL#QBhH zF~fm*Iq^hS?V+K)0qSzUBp|qowtOL&$!L9~pvhs<3>*1VDSng!5F)qx{MbSwL6z!Z z2SRwsUih!lZFe{~IEsq($|+XwG{=sR2xW!xSJ_jfnJ0H74=50^LRwlk8LXkN-(eK1 z_62m7kJUtmb8C>mxLdJo^A{XFVrksyz)D0n*)O(vqpdbXndencApv5iYH14%e^tt2 zK4f#2PjN`h2abNobWr0Ax&-JO65>w~)1DzA*rmT$Xi7kTH`(HIlMSM~+q)U~xNS2s-3P7Oh6>7M8{c;^OYV6QbrFETJ5){cIYeg6? zD=A;L`rR8 zj2cf4K__|*u>eVmxH1ur0In$75w(^vrL94S;Q|Z|w*tAj;5Jcu3XFVL`P>rZfOp)y zmf2)kcFLcYL(p4U%Q5#dmf=tyYbq)gajRhk?>^-xPM4e7qBZt&LuS@B=`c81yKU4@q$}iyI1L3u z9*Uj7=j8K{I%;gk_7!vVwPqq+B^M|bDK#`vTW1#o8?3aZ1$ciwgASv8l@cI+*^sl^ zk+cKH2Qv8;94*6nJ~THIq4TN)JGrDqy&3x(#ir2k@5xQ$WN89wE=W^5-7QwmRjoKCC)qTF&DBiey2jX9AO`Dvn%5ket!Gd3@unGB*(%wNIbbsXf> z+UO4aX$*NhA}gUF06^PLnUVb=;@IJGqZrZ&^%KMQJ!>E*H>W$;g{r0L@;{#%l--huGDaXgH9_i@D+0 zMFNWDFpY-_sW^F;1u9{=HwmetxJQSI1M1O{!yxPTg#nPwnyM|&wpa#5-!MdgP9ns#_DIBy)0U6Zzv4Rdm zZI>%jn=psCXMzxvr-vl8Y45B!!Rb1_W#+z|nw|O3kY=H1W8Dpoa|CHE0YQt6!)#Ze zBsSZ|fW85L)hXcpr8*BT(?4qj$uEbm>$X>oz=y`^Y^63&7nCkWfb=NaM9sxTqS5$= zBFSt-BsRrn-5Tr27Hxc`bg^#Pb*$b97dD;d&wS__VO%4Kqt}MWT5`DIp<4&HHRw{4 z2%O4K&f0`Qb;(7F%OJ9)8oN#$YGUM~xS_lc$QPt{d$1$v0=-qk(bx8-f#%J98SJCc zYi%FGuU!|8;6(E>{DQeZ?5nnWh6vr3V!q?%-GXSwtB@lu7pGG`GXUaMh4x-=E>4&k zeRX`{b!EBj9hwZDfszE@8k0z!yii!s5rNA#i-Tr`+KCV`vd)tO0iuD!2Azf{T{#Pd zzQ#n46(XST3@di>AE)oQBD(9C5D=$Vv2r&S?!RWzOjsLVn6b&>qJC$<(4%FEDSft1 zKCXF0d`P{{K5I!q#EZ7E9*1H??9X?(e{PP}$`O?6Uoo8$YpD0SZc1jiD>YjEj`P$t zZZ#in=pEp}v{hOwJB($9Z#|ZBT+Gej9e<^_+M~LC4?`jJc8dA|h`jUz(FD;;PH|6w z7_G2!VzrIS72VB+3-GYPNw6x=JleemL`Ogeoi$P~W^AhRsk+qAm@79m1r-Q42gX=% z-PH1?d2&4H5hz4vw7Ety*=ei`AM0}xRMX&KU$Nefxu@O=l{MzpXw}|uxsA4Ny(jgNHq zXPM3*lE5`*)X)X$*Ov5!L>b3F$|aL(dJ@skWb&s|IvhZ-tU20LaENFje|T#qSiG^f z$MN=l(t5fbt-}N(CgEu8s(x2&DNNDGL*T6IBv(E`kb^C>NN#hpd0Wh1-kuN``(&h7 zxaHWG))2<%jG)%1aT^Qe&EnK^+6Xa>QI4rbtX)7jS$o~JhQ63pfu&0X(~5`yv8Psc zMmJ83i7>3{ z`bG`|@XzFW_>J|?Y~oFFN&TxIpxQ-a{541QWf)vgFHN38~4PjvWRe6CiFk}kcH7l$n(xS z*z2KzxXk|k9F+v7*vrv&ztgI}Z*NNj#3^r&h$zv=pX1%|4L|Pmo8EWiy`J%9ANPzP zN%F#7q2^BWez9%4)v15Z+${FHWX4Jgr?Hu`zP^vwGH1Nr)85AlbVVhDTl%AW3AiCI zetFQreRV<-415rK6g}vTkqa+a+0+dXdN)1o0|d4k-Tf*|0H%w5>80dFlfkjxOGN`k zg@Fqca;GvnLHf*}kv|B`MGAK7$#8MrJ)IP&9(#(5CTDNjTdvt(TF3>jx0`7@#w%(f zq)qX3q}Sw7DZO#0?gACQ60%8H|75cI9`G~?K2vbs7s%q#{FRWJ0hQ1gIGYYD^3zkWp~$Ck-{bk*Q$rw6Vk{riWaPnHB3Am`;%R`6@^$yQ!04 zY1)a{TKp>c{fPC-Spz^8;3lDO(|zCY&gdjrK58FoZ`Zs@%0zO7OBthj9`i=JxU=;UJ+I7qX7zC} zCD|S`pk72_z>BU>Ch`C0?p?d%y3RY#uX0?;M4$Q`b zbwCtRs6y%j5~Q?N9NV$mlXSY@%vxF9Yo@i5v@Qv)I8L07S1WH|eh2Vvf0FtApJ(rV z_BnM5gycBWJ?XZHI%l7KeeSnC9ghy{`;s~vqwyV-r|-`PY3_WN%fQY%T^iQvad1c2 zH^d?)@dnkdu6r9*a?)2!l0k@fJy0PZS-E?*GQ%ViE|~efeQ_@n|NsPEIYf_LeaEZguiA3kvH94Y9v!?>F1t zcdPf9)H1XT-w&(z#P`m>->TkIW_|wsj0|gG_-Os*@$}e`d95plp`pzK#%Ws1?IiUc2x+zvJogWYVRVs+*GkSiA5F z5l^}V3CgJ2exvO|WTjkxT}h(EvXDx~^({8VzCRp}?k}Brt-M$}y;S1*(=e0_RxX|_u9_4CWK zRobq5TRNlq$=0i*_*%Wup5C)olM(>yVM?QAH*Yzrw?i5s{Lb4A^LE{OyB)$Kz11Xd zHLSPlbq~GKIBztmH^M%!>#bCE#+RryjO)$zAn-f1Th>+I*2-FIBW$7RM$458l)0ES zOAq~e0D*?FCDkuwwD+~QXV*I$u<9`>GJQx1|Cd0yO-*!&4i~LIiq;#l%>c2r%OlFv zbcd?%080)JuLZ3WTEE?$4chJ=C;F>?hoQu$1>@H9$Y_7*8!Ca34hjm1`kqK(BA7Bc4?^)nfu-tP%+W$( zm;@i)c%Y-zZEDfMuGZu0UBbYNoL zcYh=OFBhv9GzP`bSi)~?jOQ66z_{)5KJnI2xBkUPo87J5yO#c9!3=A+Wp2X@1yfRR zDg0sO?wAWr5Eqv&yzo-5yvufWlKwSW?iB1&A%y>~-&~R=+dh&c&kLi~1 zWp<-@nR%aX+7AAZC`vHaP{XB|&bv3SzO%vqDH0{iH8Go`6*&9-)pKn7My<4&J-Kv? zhjd%}zY6(UOo+}K`b#efP5Z0VLIIzaUVQm^Cl}C65M|FVXhvG?ZmxL!BE>0&gp*s{ z&6`%!NY9{8N@rw82xYuJ92~|P-8}k(S>F<=P>?gulXwiwLB?k5NGq z{5NLN@=-8yMm82d@hT8Xi{LYxZey^(74x|*!!c$ggcC9^^MMEyUwe*x|bUl|no3#0AGm7~pW8BSh4$muu?y2|$yFjR&S`VZB$- z4h7r#d)&-)v5b1KXI~8~IxLOx1n~!Xq3Wwu?(vQC1BA>-;-sn<^(3>Bcp9R=$7NZ` zO*P(Ht95PD3~5UFi`!o26~EAEFzxSm?#M}(H(2E+;c}qr$Ma9!oBjXs(%Yw{W#Cfy zN^mm=78ShA5$KEE=GjNc;o$pn_Sd&Z)q}84SomW7P4{B_k_)s$BkO{t#0fMz1HLQ9 z;*jR%7>5zTzh_3=!MR@_&YTu7;7RAK%jT14L!0*FtNY%ZzKweWuknJ^&30;z#brDZt>s(U(D>m))@-V_LqK_dT{&ppohzW z2j8HNZT@}fWiGp4f3!e-n(Yrpc88o@?q)x55cdu(CAp%H-i$JhbsMOrKQ#cV=#Pr< zOT; z*05_0IcU|MH5FoLW%#rV>>}M)hO0{T81``FGk}V)LDp*%lubqt(@{tv-DB1M;H|RP z?=IoGW?$F(%kodC<2CG2tJ57S%vAuUJd9e`TDA?C^^GKS!WY$UCB3gcHB*3XvtCCW zt8t^!$n-6_PPVBRV;dU6j9xo0Thn|ph0z|L+%>j`CW6y?7r0DiWmb2ukGt6=-e`D@ z_LBW54;pRo9rcNM1w&`8+a5E&y1h*quXQkd|4=^rg$;(Iq0%5NJVE_cOLp+hO$xpe zL!cI4P1<(NyVmr)CSssVIAWt3t~`tc{vLR^7^x zZ7zHfF~X(j+Z}C!@6VlBB`rOw*2pBXGXhkD^&#uF)B&mI4X8~ptlzEa9vIdkU>`0Y zMD2P*hV`8a4)dKfr}*irPbH(cqA5}cv1bAK1l>Zeb**^w<>224v$ika zEQfceEf=Jm@ZpB))e&aoi`C+4lNVh}^&*YNK(|4;De3)ejskY|O_1ttr+wj$T(i?t z?O&GoJHp!9jTIfa~GOoW#mw=wMncZY-`)H;p%jY=L6 z7YJ)}zBST}{YABEH!kNhA#=N$iFg~k{UvAMaR~Fr=~q*>Qn7ASOGUvWeF@dN3vCuo0FPPUO?|B(~*8R#P(=Fy&)nZ4+{nrW@r@S8hcn zgVr3-HYqT0*E04JW<^FWpyb{pU7&$vY7V1&4UzOkit~QBe6uE! zUiq~}(oj-pU>S@p(f>xdq{AtD2k}WMbYXGT*i#wm0uM_vE*8PHkwuFqN!L2_uhm^@ zT9Y{Y62z?XKpq-xPZ7_&us=5L$=dB;bKe_5pE}Fq?)|qd{pw&PJUQqNW{Tek^To)a zotEW_Sm~S{x%s|h)kQp@c!#JYE25?( z1$8nB6M&k6Vh)1Lioab*fxf2Fhx1czNRacmrH}AOX2j0 zzmui*3Olyk!A>ME#f2A8n0dI|xoQv2#G8&}>jh^{St>8%NU~?zj#X$cP7wmk+=n8j ztR$4*CZ;+ADfTlqv#k&|AS2fV_i%1eQ-6LzaJ^T$b=8`6I=szk3f@YF9zdwQ#0|Q3 z#{XokwK*jbzM)str}wHI^mXTin(18n8=RZlDU` zUc#l8yX|mDXMui^&gH4wswx>)l5KK3W*SDwWI>HBiM)$(IJHcf3VG&^PevV?gHFq8 z)jcWSi~yCofC>e?vpM)%)wA)PiLJj9iO`fJE!GG`d^krM;!v4xS83~jx}?GW`la!> zd#JdD=|~d}a=-gg5|jsMsc329TU@N;qf@L?}SbD=|Oh`>GJ`iNUcVuQuCi!f5#8kWo|U8 zQGctoILd;K}6tIZ=+X|WuAdMo|&$5-Eco!=(bh;wo@V@}< z@Lr`Twj7uq>$v_GAQja*s_l))mJy5m9Q+JLEWlNXhE*SviljjiE8#F9zU0H{oai%6 zG^LTRU1Mh!pvh%!XH)DS`aD+mdN~sDHkdQ6D5E5?Vq7~5ZITAa16LLW)(Di`Stgm` zUYm{X1}3=Y8RVgCba=I{^Y2T)duI6-|MJgo^UsBs&%6><_~H! ziE^ya5Y#6e$g&E^Jv2DP7KI!XPxV7FysPUWs?x%wbU8W}7NrLEOS`6=Uoa7bPNfm^ zLynBMJk9W?Wf@Xg!ix@Ja7=MF*mumK^sc%3)(-rpu{T6v*Y0zBnV6Q$oohFjt(Tj@ z=(4uS%PTwO*6!x$!P;-Hb}<;qdRdRuH#H1}06(6qogpy}vkQStU5_qyqhHLK3$Ip< z@B|suJs0(FVct`p4C{SIo)Y#{zAbsLEo1T)kqP#z@nJ9uL0TK;+R6gSWJVZT-Ofak zxg~3oB8P!Gy2s^y6M!J&PwHvtmeYBK-Iv!hpH389d{TZ>jZ`xP1m(i7X1CqFl3&;% zJCKV!-qLP0tIirvvBw%I7(;glD~w!s8M41a+>w)={x-%@87f< z7i*6u`y;$d<6EGLuOi^J0jL0KMqLH3heJ2=M4`;z;pSfMDkKxL$}t8~FcFDnXtHbI zFtuCA!6gANp#6LONuODIFm-Z2qM>Rc06KZrry$OmwQNr96Kd=K(5Co|{vq^SH-}X!U{D#bq~;n4?{etN>4s4c%z_}- z>khC+sw?Y2#9(*M)I39Tl&22!o~3wcFt8q5Ce?DKGvY2@#_+{km_m?VbbaN!%lbxU4zhGAFmfFF zLoy{!uHz**#d6zL6GW`~JYQwzb5vl_wiNDK)KB}&#G%870c5+|)%F^H`g=1 z2urB2T<=>SuA1P4MjHs`t<|kFOGE~g7~*=2yiHsmT5ILX*4a5iR%c%GE=y#0mKFpt ziX5V{ZG++nU0w{dG^e2`=NY~D-~$s-GwCtEE`uvThl=GPd7n~)lkNL# zI&q5pu!TcY6|R`EZ46WIs4mp4ksrt#Xd#*ERufE>v6aMBmt*^L(T2oi1A>YDy(AFIs9g8P=EmiXt`_)!I>sOauwq!vBJfYdhl# zw^up3hKR15d;fKVL)Mq}BzQk{V#G(qjA4a!&P73p??|hr)rixiPD9N3?{sIn@3-;P zl}1K&_|fTpsCkMj8js z3)~@QThQ`q_}0K0Yj4I6l+EA^H);xarQP#K{u+ofl=C(hT5(}@Tt#lE-^LaL<&Vr1MSJzGuL_x&z# zS9Q%Nwya>%;k1DNL4SX9M9t6FF{gxmA6RtQi9x z>NRUq5qUl7{GrCs)q&mEYSgh~u@P=ti*9Inpfg(GM4qb+gR-cSQnx#%vaIyY@p30l zH5LbONVnQk+t96)LSj$6iV(JwFdamPD0f2-tO!}DzJJ`e9cM@Df{ScbD@w~ z1l)U}0jHglbYFK@9d-9o!ch?9^ukDX-Aux7uCf~;O1E>x^2a4I4O|U_q(03@-B6Y{R6dSB+B33jx43IJLkU4+IGeMYsVfR zy0D~Ofp1bCVv^||^Zm`+WkQ%KzIU%G-B4dT%kGPZ&&vI2i1213WbB1+e1qXH)k4Ou zR(?4b^HWSS)}d3~p`C(5fO5j#*`B%DI}k6I+l_{WI1z6dBMBt($zZF=j+ zmK7o{!pMt)*jjODo-jeK0)Vx9$-~X@9zC;`dA8bj`E;A-=;*elV5ZWCr`S37tVJ9l zS8`*!KW1Y`6kG7PAQf}|N*$3n86%5OqGR3de@#e8u>ZdTDEw<LBOIuZ=_3oLYdfy-J=Pg+vhA zx`y-K1Emui&FyOVTn7WyovHC;QBRB9P2Ui{QTZy&msAUfO6~H#BR6x!?W;w1w|0D* zq3_g#(``>p??ME*mj|AjS>l8c?~0NKTU#VZO0A!d?QWg03qQ6GwS7)un-&q%h?-74 zHTOQodfLHSblid{-x`RSJm=684n$%}ir&wGuGk|uKj_<0oN0iWe2NLw6m8xPoGObD zVK&qg6U@f;82bdrD-}5BJEbC$)e_#2`p;H`Pu%c@RT99@O?}N4F@>CFxryy0>@b`3 zmp}|_e!+qQ5u6)j23F^Wz&jql=eg4!T+YP(T`<|Q-7?*hNl{~vZ7$qaAu>61{cfRh9Fr%! zNJ>cK(&Z@)=kYUCq13NAv}*ySS*pY-BF8fofy!txSHeVn6f@5Z1-}D2S@CSHE%$5G zu&JbwmSx>?FkXomB_hS|JdS3$Gon^opS#qtDu(MCn$cv$)Dei>&zn?)pqeUO4ZV{U zHiDQ%(N6#Cz5b+mSfUEoP^xiJ2ixCk7j#%HX=EZUW((-XYoJ;Kv_nvK5knm-gb{+(tOyv*~kDdIVB3)!& zsLK~$C1*9_!cA+0_9_HCgNn-3l*nZPe089u8Z5u@5XaSPxwF}fHFqir-{ijf|? zubM*5g6oVQ=cO`}Jgb&Q!F~%Nnm>m`cx(TU#ZPv|_7cvtkZCE8_zvzb1dQFWCD>IAVQ4V!CNgX2Sba_=-^5rZDR- z774L6{+hO^CgBB%9|Q_ZZ8!a3!yc5y=5(n4C4Ll1b)Mg69ZKZhu)m}QRhg9>V%-&C z$&?vBIVjWtsfD8mUc$}>mhb$)cBlzVe%S5n636FmES&VGS(|#E*xK}0b7^%ig{>?A zY74el9D~p#l~Jx8%c9vNL7Is57PD?nAZxZ|5g!?nbCMWDnmHlqH#@6zk+4Db{Di*x zmH=F};PsH5?GK;5UC)?UP3ps#qU*sH5b-YY@6*CsxOFop&sXhUv5J*hvrN<^`GGB% zgVx;IyC7{@kqQL#+5kE9W$4vT0}w;wUA)XUaPmq*G;+0on>%iz9+9On8xQIfw?+r= zk5yW3VJh}^w>ZTTli)-=m2?W-u<@2cxkN?74SvsDZf#nU9IVtpQSE{b&5LL%B7rCd zMV?I0=(N2gXAM=SI|Ks^3Csz%BStO}g!>6~J8f@T`4;t=dgW+t7=M}+gw%%xo?-Sw zs|KK3_#lq)UVpwnfBIGWn+0EA`MZ6!n(0gm~J1XXk1k%Oi7hW(!(+Pu8Cdz z7>tH@UB%-EP;iTrhJO!wi>rx^%K=71icr(tn%$aR-I2ip_H^l8UzH{>PP%OcXL~9f zhSw9?NvKxo<*F-VXbkk7FNLo_HckE_1gp@ee#3{~5n_P=dV5CU9B*3p-gT_Iq?dEA zIM!l`SLfqFxz!$)Gw>h0xF6nwL(uk zsMi+fBCM^x35CLPdlA`q2%n_tfj!2fYyal3Z#7l?tJ-6ZE@Uc8`ii)1VQuL@s#Vlo zKkY3-j@~Kz7FGeWvhTN~ur7$U>cPQ{!yGATeA&4IVRzAyfcl+DoJhr`Y38AJZ3nfLlH~B7cy@b}O zr2weHsL@c1%+bfXNy`tb4dFY@$Khz%NW#{}TP?}Jc*76669qOBN2F7T*|+hV)gi&_ zpn{Pd8?UgcIlSUbV7#Q8>PYXzdUOpgv@OeV4SF!uve?tYz8xveU&;QfK zsBA&Jyf#ToA#N$H(N4a(aC_(>04H5K_PZ|vwh22=x=QBPu8oSyA~jE|jaPX+N-%^b z?Dax>!q4iLq%=R8sHlfuZQ@dr=p@0SKa98B9b#CN32^CEhE=q$qnRtZQq+0n&=-pJJzIx$e zX;I-S2}4pwC^ScDIIAD&)f??k?tuo{&!xXFoPYjBf?fMD`V$eu?$avQFMNHe^mhAP z%%yfpC56*oQ!UjcDkZ282SsS6cND^AByW@#dp_xk4!({B$VsG3U~UBj<;N3!mj}{v zA*B{9zjXfm@*}h(1@h`HUaazcqM4M+OoF)RZPiPZHLBYal9_hO1_dsIa~;amS16Gg zIxY@X0mD)@8F8)id+D`I_LGaM@SqoDBznAF+l?n}Lz;AQpWB9s-siq2)L9~qm$<7m zkj_|JDBFj$0<$AwgFL(i1!;DqcvL5!Pz^dpmdyH4W`U?0C7g+wJ|9QxpG6@ulzewQ zxOm|_>DWu7v&7)mo}F3gpJh9+R>Z+y<5uVD*ToBKToR^(hm@Rd=bN*S+hFwuY>VX_ zL$b`)knIBzv}HNmP&8$;r+gn2j`6HE+AGV`%>Gp$2u1vhWz#T)}x{84Wr=RvRja*=xwB(!kC=JYK$v+gkGSu{)y+I^_Yt_jwHb0t zB2U^H-Md*UHL{wuGUF1}Bl@+RxY2Uu!CaeUnSNtW@_U0S!8_=jja9Dgn=K_)m)Q2~ zxWQcF9uS-8EX;p2M*K8N<{9+Zx!;aid!&_l1#zemH7&|JT+Xsr!evw+e9T2*-2P~x z_;2jlflSMRZmw7!j^60G&aHba@Gdb4N(tmuCDJUCYde&E0j^bYRYHf^!JYw0a#*4x zca;Tmnk~=IE*oX3c6i)58@gTVCti+A;~BS!aLbFXKW)8NkLyogam6NLSb@L`RvJqh zRdqU|xrnO64z#%1sv;iG=S4i8R}l~JZv_3{2YC{Z4=> zZ7KB`2YjJ*z!&b2rjy#C0dp8wF2d$$nES%Ig{ z_+oqD5;=MM>pji;hUX%2XG+gz8-Bks)628#TTFPLYezMJ|JwTy1tpH{ReDjc`p`fh zWhWo&w9b~MI`;@*67(fBB2LE`udEw55xf^$0c(HNg z&I?>eo87omjhpD33NDqEoyCM{7XTmKAB{raK^sbnsibP6u=W5*AqD659Vpv&O*r&ZKX?20erxT{+220r zypbf?>C(C1-#nKXycWXMGvVe|W9CY}UN}i$YlN60g3BG6-B3L(h!G-Da>=ZB`|D}I+P--y&NE?YTwUgxS!NVjC%+jU6uBofwdE(sf1kFkfgApwTs=UQd3Pm zUFL=SE}8P+2J=wjz!ZDLJGi8Za}m)nt&YwX84prm$eQes+vXyJ0VEN_UNB_Vk~bY< zU@+FFTQX|!BU!-SMKCfbOix2%rhwrs)CZwORjRFJI_e7IW<7?9*c7O4UfzM?RYHr; z2m`;8KEshsmSFfkoeU+`VI8vU|8{#SdFy(mI)W9qM)0V!m}KHT0=2c*<_|@RpS-&M zl6yQ_@QoWla(v^6(`T;%80p7b-3KeD>Lo-Fx$EHM0r$A`&r-n}r&3#olg#-8fX=Q2 z(xQW~1bPQ(j;lJBBt*I$*_Fh&F_3MF7l8fYWj9|jqHtV)utE1G#!_Vy3z@4Z|~8ikIWw8W1j6mb2+JrI!L;wF8IY+2lPE-sel}iJW-- zf!mz~q^td29Zp}BO%B<#29UH8e*mn~{Hxgp3NuH21NV{$EO2(~Qt7J?@8adIbKe@} zKD++1Zf!6L$o5QVnUAZpPZ_v#T$5YqT6CK8cd$^TGKByJbi{oDfkCZHURjKQBI{}PL(F-+KQ8j~#IEMyKxg1dp@&tP$_)QB@BNS@Q7(c3_1LB=+icN2cH?oC?1hitmJ1htO-xvcMepz}HN^5&3JMMT25w>j+ z-9AjX+&4tv`JPwns)f;qPQW2l@qSNC2FwmBM%CL&f68Tr;ezRKsX8)HMo|P9X62!i z6kRGCIiE-ib zVr|eSS8v;9%0?y`orITkU2=QN2z+YicSbh8U9f)*wu1Jpo5R;0%?Coq5$eIhiRV;j z+M1(Z=aQ1lnVXpJ zB~Le)@ zGkgV-xh@#0UU9q&jtrS?Efl&6B3m2E$5)O|gpbHXQ8z%KoKk1S#BmNU3NnCIjp~Rh zETBAj$ZtF0u~EYb@4OttFzhLMrI9O^^Tv?aLis;xaO^Su>SwyCKB#KCOBXpW*kcrWM*G<1!DQv zt_9x!24gFJG2g<2gn=_FTyRx_(3deHV{_}3_SNMXMFTnU)0m#aXgB?=zsz`q9yhKF zap@a-rS3{`GeTtu1n{sahuaja+MC&nmp2Eqam~Ig-X7+GeHu}cfb;ISKREmr>kIWA z5VXwL9nnyh>>x;9kzjazHdWojd3$uetGl_nydO+VE!sq`W3~pK#&6M2yzq%lFUeaC z-N3q&AbV+gMcbit=kcYf6c4#grO;+?B@_qu=j}V@oeP%JFx1=!$*~gy^m5-u!ibFaE&P`_$ZM`WxEO#a|FzYxzy`Jj$NsyK^f&UHoM@s_=ymBU|chcruvS zcdq~%=vLZ&PYrzbS)I_j^|(%G-+E#vv~NAMliRnS+X>$+KDrY=diLp^@NxSAR#_Rr z6?QWbvYfV5cptotsg*7VFrYB!#p=Epv72Uhz)FzT>UWH;E(JqKxy5}InzzU*8ZAp@ z$_RN%%+Ey|m80jP!BnT#CYP_vre!;0z-f?`TnE`2tz9K^`Esh?@@p9vFzvls$tiY* z$pzPTH7_IyZTNJ3Cu)Y@h2+nX>x>WJXAj;x_vpvN4m)XV0QV8mmhzIfjHGbW;6OJs zY?K)lkEoRym#D=|*<UU8z8oetp@A2x#XPanelS>PPkHz^3v8eE^WOZj;FR| z1CMXq3ho7Q#IsA&v*WYWopvMpEBz23umEmaq1;BUK9GCNstq9o`z?f9%UiX>+LGWB zAmbM7F*~zLIka9gK_$$Pn?%HqFTjkgMJ8^9765GjwezgwjDy+;Pe52z*4=IUIuobx z17vX+glC-|Ku4_r+6`;Y#vn3Zz(4e#)ezs-quPN|te)4wNYjY#pC+QZ@ zNJA^IZ&MI!Jcm;KDPZO|P~4wPZL|xIY`sYIq>=i6yB7ZQ>s9J? zlV*$-@hFd2=l)P$GpU>k$%Rmk&RSO2UiSfI=7%d>&)G5&UQMtrX2AkbKfzTig7|rh z<|8c{=gSN38w1F!ksEmE-S4FU# z^>C+5{@6cXCmTdp0Eq03hLuEG0YHo#h?2kBNv^N8s36&ieP%exbD%T9VM;uU>3x3J z4wU(dh`wS#r%*e)U4uD2e_nFLXlUX^Hl&ELZFEMf&3>oG*VJ>?I5f>B#TLz{p=a*{ zJ<6Wgg_z-SWMwg~qmoEiOlXr<7v!|s0tF#)jSer1)m9UxMnh9#YHNzngxu_#{?&)* zT%BxnsU;_ajyBNLtJ+{rr1C?`*Pw5hpwyJq|ci?m^#|J&;#E2*;b$Dtk;9oEQ8#FE)11i>&qe`gVvDX z$s+k{JVxn0DevZNmrUP^Neqn@kdq*;bK>K`JDjUvv+@MqdvjqaFS6w~Yhfu@DtBYP zyswfP-%<>COZN2@qQPZg?<`Xq;BE3G*E$C)jW?z)nIkEO)|wZs4#;yJboa{!lyUd+ zqmJ%Wi;k_ea1}%5^+1G`>y}ukSirRISDSOLT%>u!bCTV!u`o2j;Ud(7le5KEUjf#s zf-Kz4@$3)_6~eO^i_CS3J*4R;l9MoVa6~7#Pqk4m(Dyd1!oWR6>}WT%vlWJ>Sd&FX zvg2d|=KH!tUDm>7#Zd`wmcsU8*>hB=+3Xa4Ng&OFPr|?1P9-0)`Iy66YXJcH)i5iI zH{)id`v}ZZzt8B4OT2n2$7>-0Y-`m^g{b7&q`1t~FPxhT$rtxti?hlUBBHahUw#Y? z@U(cT`JjN-7^;A!b}_e%=URAM2$Z>x8^lrE@HsmED9EoOq$ZDJy@Xa6l?q8 zMST~~DGR93%q;SN|0wM+d!@nZL$$51N)DgvDy5D4wC~8!citTPge(LP`Mu0T4o~Q= z-;93pQ^x*7KJu1RHxcsTCyb^uEmgQA(?NE20G#k`=jN~YyrS4K5 zjnNYZ17tYNWJ`)J1zYhic~(vuhfd^&A(drMcTk2(srtqXQ{j@`>EjW&Jz_JzhVjcg zMWs@K1HW8Ii74_)Q?sh`hu=8s~z6(1!O6$b`Lb|oSBbAyAYtFW@GwGvp>2|+bHe5cfRpm7b+9Pc zx}Xq%DT)*inI9;GP7E#8eY#A(6*9>Af zTpoB4MT-MnT*s+D1TgO+f5~w#LsKfz)SukYW1O535SG%82H8D+8Vq@wNVU({!28qu zLe($zbqGoqK-236l437(y)hd)2$Q8{^RQvlk)H4&QC3u74qw@gr;V-^nQ7bj>?NNt z3^6CRp>d@8w)ltj!wUP?HYFY9mt7~NAExo6wmw;AEo;vN!FJ^h+AI!@+YRFA}esu z=S?dag4EekfWB_60C>OizX%M3%K-uq&P(Qs<+0PKx zVoRS@t#9z9|Q#_cz3!$mqK3;fmkVaA#5Q*Vc?0 zfWxV^b*h>7Q=|Ku$lD|Kf|6JXQzGsDnxCubAa?au^x^Q)yWx($?9mOs#4daCdVh=! zR}4(fPU~WRlz5+9bSKsJAjZb*jAn!0O?u&8zHkee_ZsK%>-SsTycXu`%lY*?PM7<6 zzrHE+-TKwW>{ME*YyRR>TX5{T<9XyeLBON=`k*0kZ)D$;-7*IRQBuEFG5;Vwlfkd$ zlQ8xCi@2Kh4}8jb`>=@C=Au5S5^A;bYN?ehXp<8dfi?lc^3~CO86MZ*Cwrb@nm>(z zr(bNbAr%*%)JC7%lbGaOL&X54wP%tcS>8z{6$#4)BqG`U7b>afHiLlECtFb_A|}%PjopUds{|~3SPwCpw#n|F zQSOR5mK@Vo$}!kT99b97S(1N!z5$R=H{l5Nr<-xr`h+P*%60ObErfo4vm@S~ZuYVD zDK|W8e!~2no-dyL-N9%x)$im$0TCxyr<-#{=1&14sc|*mI~ifq6EHr ziCwZTLb-f6v(lnekbSYTH5iTd-@}YIauys?Zd-$wQ`4Ltj)wO2>jZe$^T#2I(cDhG z(vaOK{oal5ucYMh>FWJ*bGJXeq}uSWm&zmUT|S(aS8%gVFP`}JwGD14g7!M*Jl5e|o7qULa5-+TmfAHDqk9f@izJL3{0>ns(hvo0t;o&(h;op2Ka)Q2_GXiW+t)g10^OjdQ;xt{_%Jve%bej=^A1Hq7nUwe{$O!E$t5)Y)hkW&2{l#F- zq)F>lN2WNESd|sPaGQX1F=eZsZkTXfosh|6*J8}|6V=MP3={Swz6@yL#`z8agk{xI z%51t(L-cFN{83f^J+oJNuNz^ftNV5=w=7H2I*A)Sqw45aew|bYY#=J8h^xr4Z5?OB zSydn)_2?X)f^)jwV)b`l{KkcEZ2z0peaunMEQR`&C-v1otd^56rJ%(sNEP_3KImhX=CcS`ObJpSd=A3y!x@y|M5OjOk2 z!6A=7IsO?hzJL7lr#~q)#M2)i|NQvlbYH@S7} ziyt0;#>-ER|H)TI{sVLN5}_O0vaqAhZwS#C_ov7Ic>EW|@n0POH3NNo{84fIH|)$O z1>=A3`0??lzKkETjL&HM`O_bEmX%NuKi4*XLc6~%j{oWD9~V!nhW~-4A1;U6lhz(_ z%MWEuJM{98$Dgo(KVm}+mw5J9oCDkR^ap%EDe=Cs3;m%zpg6@5p1#?)a0=vi8i$7<2yl(;v=n4wXc^2kp=k8$V`NHW4rWx)H3^ zfW+}X+HP{Lv8|os(|>O#38+yP*I-98W(Jzx&-fo;;1ce}bP%_MA^y?#?C$`WKMwFn zM<445EAyXq_0zf5G`YXa0RYP%0|*WV4EPBT5={J)K|60bx8Z2o-|oZoY=)0E$0Ph# z8{6Fj^zA8hUz0fgdyeU60+PRZ`Xim=@t**0TEx>o^|@A{^z=vn;}8EUuogP#Z5)nf ztnDvY!QVXn4+79nsxF^?pO%IJWoQV<{Mm890=<>^vB4EJcC?=zKQ<%^K&6djUwkWl z9zsBa_4=|L-2TdtCT%@ML;yHC{38RykG@94MY*raB5~4oPEY^+)90`Ly8M0 z%@+*W+LGYC!H^s7h>BN+i&!jv3kezS`UIYSPq2wgv;{T~T_ z3PY729e=Dpeh4~$#_9aKfX6yTRG3%p`++#z}oY^~;}aq`0;MN3KNhp+F)bboDbp^6z}EpELO%8@<81 ztdl06y8`!jxW|Er*9dTb#+Tm%?F__gXtA&f*IbEG7{VQ(Svw>60Z<9yid$;)VQKJ^ zt~I(enC3%!YoBmxE3oI}YqSQ?_YR)*?5 zT3#o$@2)zB=m3Qr1pWP_SOO!y2Q~P?@uzC_j!e^x4^j5sc=1d6`$#X%?21s982e|! zD%K5NHGyib`G%Ed7hPfOe=45-h^c)H83vglFc6bU>iLW%d``zdh~0jsb~>^kI6!ZF zGQHYtBm^v&l9nU55vzh|v7*QD29(4>cYjiDApYEgd!)7m(?CG7_IG_pcQX+horqSsy6Ir?5k){pg`#} zQ9hR{)2#j;PVf&t4VebGw?SI|hN~YNR9~XY&)_XuCI=4H;y6Uk1iXP{Ax$!@gjeLC zz)ChK{%H*{-=Z*s2m^tLR7AYi)31E1SZRukB|TM>G!;8lK$$A zHYhKQDZ#|~>Vwc&tp3M962nS(0^Wo0qgm?ZA3ufL9{*PW?*BagSgfozfe5#A&sB82L>2gFr=}AbhoBT1kD^ z{4h9s;hRe+{OJsu&HUS^Kk_*_QDB>)UkQ*6a!{{y7R<_C6oAq{iUPXi7=Vs>RRCvD z^D&};fr^e(Fji~7;dX*&ex@OR$eO-aY)vr3)cZhv+#k=Kr!s zVY7oeGoEa06D+vV-2iMhWP#Mag*MZGk(EA^W2715BG=~|NJn?LRYJFdw5@08y4$G3 zZ^EZ%)WU{UiuXF@Hl#sQ(+>B!)Nau4ZP<{tGc*GRst$~&PhbSsXHBK&N6{C^G)qa` zY&P0R17In&4AmtFY{n~PwZK#&^(PYJI-S+K(LUr|juUpG`n54JC&I=EFM{4=LMz}Y zrB_cjDp|>%8c$)(i)7|HM^5y_2m^wF6Qzs|4@VnZ(y+6kq}S%mb6rvlsvkFtQD*a|!N|zI0)&Qz$N#jr@u0uUwKNruNly91kzi5(CmA9Z zed8*zLAZ>F8)i?P?tuJvcXV7M0=(HaiTs)k;tG56cg6KfJZ`80(y#4SRB!IBqlO^f zAZg*R&GZYzqEegIBL(#b$B)J1K70D_)W-pXr7nKXb1Xb&{i~2>zYB5#QWj@ud3u^F zsideMVbg?iY?m>?V0GT83F}Ev_tVVnYH*e$|5V=wQK}(EJ?lFcmYi*h&De57|H=XB z_4^w;<$#+B%sxR1rIE>oB?!5neTQpQq_LHjDGdD3EDzW|%L7#}4*eeHkk}oV!fA3> zl7?(%VIZGN?Hi|j#tU2C63jxyLzMdN0Zk+*asKm0%t}as0c4CLeK^8o0w5rLoY1sH zs)n2eK~(VL3<`D%0GPO*(P#7c;RtqZ0As>dbTHj^#+iMLTmv#l$EX%7U4^%m z%>qidVh4t0PU`iqbA>=_mrQ0YHzyM8?OxE*OmYr<@A0Dv|+V3Wic8T4GRdz5g0O`Ot}fCioJSYz5xZ0 zMqp19d-@|xb+)$(r#Acicyypm`Xkg;v$1cA4fEmS#fvRbuV>B_o1n2A$y_*0;QmT-EC`Hl!|;Lg+!aQ4fhetV`UU zw58Ps|JCc|q)W59=jsg{-Tf|eL#;c)f*u`Kw~)cR#UOiA*aDplSAa=}`gJP)S^cA`7cms&6 z4wV&B&jvsV2AZOasuIBP2RDI5`#IcqW`=I}z=vvwm4}g}{;^uSwar9q` zt#Zs=&r>WJ4Q~?Autyzdc4Rj6kAS{eqEW$pLn{JE%Hh$+G}O5X+E%74D<|t$9H5H5 zqfaNS+MQtr{&mqCy7zYdt^1GO!He`YlXo)D5krgGgA4_G$=rOFY)eujv3H;7IlAiK zDFkL(GBNeQo;*7L;cD@}&%`4SM!-O#;$Lkz80pLoGM&s8i zQQqp6x&;|2z#;YuXtHL>A$4gonb~$Mjf_Hd2WP~^f?9lak1e1anE4-@E~ZNcVcoC` zT{hHK&Q7qYM%@Ob?;AS=2J#r}nn0(@f^+1bX@a)Te~@}N5_ zmN>Wl(Qr9J66h7ZM(>s5p58mt=;}@M65Z;KN5gyFV#$bdKz6iCZoKPH)zBP8bbx#{ zD3+kxC`O|K=lcJryDI4fpP^Cnupja}5O~1Rnoa69x7eI9_PC>EICb=@vBbVGi!q^Qu}ClORFt z1isC*=jOm8+)@}v3?kv#jl=$f+0kPoDxHR7M`Emt8G9goa@wqQuJs2f^=wLdR(IrF zofKw!Mc&2VtL@|r^K&%r=i34&g18wIrO`eg%xKBJmHK-{Um15hdOU<}Mo}#JX08Ts z0@nu0Rx-+{p4r;D=E*e^ze)$4^E=6NFgphBN(|iYPago0S8l%77+f)a$w?DM%kT_R zDfE}5rsG^KE*VAGANAn>5}~Pv6!Z-a+J{KpyD@*Q6Ol%cIKQM|@(&K}Iw1NxrP#K8 zn!8*?u!cowFQGCUYPGmE?xPaXU^WC2FzXQb%pXI@__&BmrRuV#4&Mxpn;T;kUfzpU zL{+KtO_f0w^=WgYusXSBE>X)|5Xa6t&(u(Y0KG>b)q%EsE@Z>shrgvC`QZ*cT@s}I>&Ju6n4b$7tAx zE}EcYw4fkr63&Q_s?W_QbajaEarE&BAXw}UdWSB@Sc^blCtWNpYC3Z&Nzny{O<~a_ zGdB`^c|7Wg3K%pV96iRnWFpk&jQV(aT0x%|UnVT~nn*~kK?*poCG?(ZHUv>>YL zP3N0$TWzkHo(mo;gjqDk8vU82bP?j6$FM?3p#b z(mbErgCv9J-ND_XUoLE4`H`*!{kKwo3E*Ee3|;~AD7o&Y1w$EKitCBQilRvNK_7rQ zE$&9VTIM6T{vJ);5VW{CA|;wLtvM7|s#?cd0tN(~j*LEDY&5@B(Cuki&De)b%SSJ zu{w5JD6?hK3uIdi3!%rs%2=Vi&4=QNWArE6R{Ur5DoEBb-4fN%Z_lgAU1swtNY%<6 z8mWcJqg5~F1iKL)0%OVN1(Iy{@6He%MFN>R6v%`@(Nd@vVaoh>iIwahJ$?X&LV;Q1 zyq65<(!&BVCK`IZWz!q>mMNoJc@!%PENXz2#vq){*mZ&8IT|34N$8o3Hpeal!@rF9 z3G|qktOX#7=2P>OnRhLWQ%POn18wfy7tRLFydJ&_)Jl7hJ_KPS0~L<)Y9!cA)&@zR z_h1JuIgMJzaWCDM83J=^=FyAH#*MY`;-rrGDViQ0zmO}>G%>Y{dRVPp&5w7JY2#Co z0V(>+Tw_}6M6EHXP*sBp{whaZXl$S@BX_Pc$BwJ-9B${nG1D7zwG9<~YzbDwDl7Ne zC4g3#J}F=yiP1!OTG=r~n*%BOuAFjFXqmS;1bq}1!hsumfVqM*eZZkdI(MLhZnqcy znw{P~dLT0ZntSpsip936y& zjLUh1skAWf2EU+N{!`e+?+xA5M2E?bY*|~lk7V}9_&T^ z5m8OsGi51pVeC*QT*-Y37-a_AU4MXDX`V4n)BnbGW6#2X;YWO$jli4ul*ECwFn^n$De42Ns$7(*LLQn^70~7od$;%$Zuk*(f5|b75tfBpH z;fkJx;lq#kH1Sm=q~6k#>?1}_k86tw&kwl|(tCvIb(Zxr z^v7?ep$B<)RjbC+3HIv9S4blYCL|MTWI8evQRbrtyzLjdyn^#G|FjWA$WL!}^tt;t z)IiK9siLC!k8WUTa(O2XE16reMegpdBqRAbjViG4 z+|hlB-I4qm+}xLgGa_?z$4Aqz$u1)&_v@&&ItAyWupMWC@j)pUad-wrNlK?bj5hfA z!q~7{qscLXw+`O!tL}#ZF?i#??qE=7^x*A|57-oT(mmbUQX^Ik54R0t0*}358)1O# z3iG|HKLvNTNr7X{yRqw@y9K`Lw-BSA;iWyLfBFjfm&~c%L2WNj_E5i7_WDO34Th4f zu{ruf_F;OL9O)LGuSNBX@1`Uzxq=Qz(*fxva=`u+~;$`!GVY>(emx?J(}ci z=l#+*Mtn>wmKr?M*O7<@5_CM0;6025bbD8}nf_KZe!q7(**%;hv!kMJX;x??7S-Ox z&VrGV^gXswIeu0>bc3r0_5m}f6Mt+_p4K_i^(TLR^!Oo&I4zK4k3M=>Qcwk%4rcZ4 zfW0Pbn!5!t+0*O$I!h#3mT-n(|ZCn{B z2Eon}gLu(HSnf}DXAjF|d$uEpLHk$A`yNo)-Pju;PpwgB?^%Jq9@08vO)* znvVS&oCAvY!R{gC*df)R4gg8Y_WOI-UU$Kl-k#5l$P5<#aGx_h;IY$Z%QStjWZw6N zM;{fx`qS+Fk> z&5OtbK}8np%L1=wuRMU@SAU|zhg(Fp>0wh3xlni)m|iqT*tv*<#dmt6 zT?o*Db{F@|lh2?0Gl&!@EaC-W;6Q(I(0%fe;a@mBz&y*-rQ8F9@<~NjB{FK1!=e*;b8E;r@dK9 z6#NTxsAy;I+z>YZ>OU3tCMCXe$S!mGXiyv!Z?0Zqo0?${w;&Ir+JP1`HlK6yjXr>! zZ|w~G#Y0h#U;QVYVB%y)pVDI$@u0ylvT&pZ*o~kEW-fyBg#r~uVqRf{)bSU4RnJd8 z$5xuc9pHcSXWs0`QP03Z--h(xNXfEcvD6&|`u1t0Z=XWnAc0ko!`tQTphPsZ`MzDU zNX>Zhr|n@5*A2dr;XOh3>Wcn_e53$}_u;7Bhrk?sII*C}8vL_@SZCju?OB zZq4Wh2>~Ix!OV(m@k1Sls6M8B3Pg0Vg&mw-i60TIAD?~)<1Pv&N2FCoMqj|V zV2>YJgwerhR-}(5Q<^b*F$a#z+-Pg^CQQ0`<9>G+)15^kw6*&E;oIGZ*jSexob}D` z55FzQ?#jwn0H+7L-2z6A5GBdsz(E-VnM}pj_lj?K@kzk6R|}I1A$+_vCdHZ_7T+Zl zrw0^6NBi)2GfO{8Yf}XWHK4jp8Hm*8(HB6j#2~0B6d^706m1O*EFABoPQL(pLsslF z+cJUF7FuDEFy{Fbk)- zHE?ZU7jO?DHE+p{{86!Vy|+JtW{c$!SrfP*^NFD~@1rz`WiP!Sc)kVA#ONCR`{bWZ zNaI>(lUu5wnqU11p?u+Em(A60GpOc$aAHU-qMvT_ebgtQ;Nk-`1%r$=qZS!Gl9YT9 zwGC4>Kq((3PpbZwfT!3z?2qyTIRlB}7_ zRHO~h;K-9KzoS1Tr8o}?IMIl^F>?B=KXal6NX2D00&dhy;7pgY;6^zEC2f7-x<=4^B}SQ& zCv8|VLOmDy=3e(9OwFaU=IeUA%`M_VaqCX@x)RjbT}0v_)xk{>(vT4jTf{X<9JNtv zu*CR|wh@@r<#Yy$BX**7wtBjs>^#1=t? z*dj)7V8N~Yuq10Wb&mo#A{8E(GOW}*(U#1daX|R%E=Oh3t$z+!Aexxg4bVGWl3vtff8L9S3Zhlg_h=J?$}BKj zI}tFNKqO8C;b5{mKAavBQNTqPwmyf^(?0bOToNLDu2l9Re-Tci_1jvAk240bx$MLK*NShK_mI)0 z$opc{!cb&u=b%5>ojIxiDz)IAkx@{AhMA3I6S}@xZkbTi7MueqRcz1A-SN>EbsgzI zNQkxiVHXihN7nYaVtZP@4HgDT;7ANyM+qp;_BMw|%8<0Tx(^b5?2k;16w0Win;@zJ zPJxq+iw+V-0+HnME++f2A{l@pVp=do-Rxg3g#fY6r=g4y@yv>W!@Tt5 z)(r&+uv>)S9X&<_Px_%x$Mi%z2bny}#j z=gBxepWyz6MPwP)X84M3SHsuPPYA|J))Rx*oTSyFvfi6aXZwPDQDF%m<<{=z=s^_b z-iHJ1j=|*v0cmIy`2oBxqzEj*hMk43)grdohb+S$qP|DK?^>s7&d#N{E}S}}hdW4R zLay|*%EbS6_u=8LSaj9K)Q`Cw{Pz)mIp#0I_5=e8!G|yqJAp5tQB$laRV-JDbOreE zTH5O&s*#y{F!M=nli=jMkiZ*#S;|SaAgl{>x9{nv=*!OAu_%m37-Plae)XpyPzdR| z-rHqOvU)8_@4voRK17JCNe+%9VDSV(1rKDYpBfbm3`YG`B>}Fxxr;t15r7O`y{m<8 zbyB-vz)=y zW|1*+x;mqSNa~J05?OU6>)XLlT}6`l6Rc+YqkZL|)T7AWW&uem&5ePz0J2+$`or{O zA&g-^m=?f<%dR;ggG4H1L6W1NyczUJOQA>C^VTXODi11UPZn1JPxiiFgCL{T(HmIv zg1lY&c8fGhrVak4**$P9`-&)sx?JA)4#@{J4>$xBG?%JHq@#cIR0Sj%oPbtAq+v89 zeO8Qm*gtnAJLjTv=mTIU>K9r1)cx2OE`GCh^AUAXw+BZ8cQj{|WJu%-R||sO6^iT! z1ZQmq)tQ;=FnWw~+m~!)wUD~&o9Km{x;1J9)7`+jCqmo915}TtyWWEcOVgT65I4+zoqXIFIqqZ535J*FjU8O681AJkHMgU?;LTySL+-9%8Z^VBHa~g}#9A9C72qQq%t+B5z%tI4naOu#|Rfm~K4 z2Fzmb5TkYMFC``)Zdg>EBY;>@RB%E+y|zyrSO%M4;pSf(bG8mn%lR?K$s!v#NEE-!^RJVn*{Y1$di1cqE^ zN_Vwry36ImeVDvF;=D2!JO3e6;yWXZ{E|Ni>M#ep@4syb0oIPXOC}m-{zWXfXov?W zfQQgG?}4U=zzNV@tGJOs&Am;o30KV`sOC^#`vkeP1qtFP)#r{3wNFh!0H?s83OACe zGut+%<5m6;1-R@U*t$;;nPPs>4BoRCK-o_vT9U>oyLcIAhjZ9*E-?bBnYh)5929u&RAG5 z!NVQo+N@1|sLKNoV5-Ittf<_~CMM_LV)9Jh&JB5GH$0(nv2X2r^oXYgE`>n31EHOL!L=MyEAH@~}&o9J7%ZuMraY zmIP=5T13h&%dfJR>?s1)KDY&xWRmIsn+caMG!Y!cm#{T(uJMXQAa zQ>4=AE)eOueu{&AH;ZEVi1ox1G69FXUQ@lCA*kz-uwCL@n!yvbxC6i3dV@=3Huh(e zon{C@L^9q>v?qFAtY1C^a+dpFr3 zMd-d{ocI>I+havs+H2e%$b#^m^g0LS(8#jZhPvalY9>)-Y8=e^A=_1g)OVPUGGA4A zM1f3HRhE4Oj18#nd_fie<@U?6w7GAaB<5gsNYFWQTW0h!NV5r zs-wTmi6dvEuWn@cM3({0*B<#v+!(TRlu!>*TUH|5OW@;Pq!ZMK+i4-SEsPh~~b9SiYy#I(x%8(P3BA^5${d97LFq8 zgvJykIRq3gmXeBen2Ln4hrE6bthlBRL- z=)#8_H<=kup-Kj6h-8a;o($QHA_PA!R*Rsl?l6 zQ>p~qKqAoH@D-UO(-}rKQK*=)z`R-L__96A+MS*6-bkfRD|gx`fxrZ`8o9fHZm1kI zuOlg!2y#32gUKEuO)#sNw=<9r!#bc;vCx2*`&d?scQdI9ZgybN{zs1`*;%X;onkEm zKr~s4_Q2+(XeJw~TdBYaN+n-ltvdwLKHZawmS`|QmE1lJXAri6=CVy+W{Y7Et}8^P z)HP{Ef=a^%b|4=rJQh?-aS$fJe3SNEEG5%5-X~`=X8`wY^ePokemh?hI7w^*vx#8` zb?e>zvVV7n$=(`3!9RNPR~EN~WpczNAf79MFN26-#ky0c@=;`}j3FJ<Y-gVl z{pze3n+ql|OE%CZQ9wolytn|i7=liXp#cTNqQGDgBB72J@#3SyTDydA=miR7f6LH) zDpT3fr#p&a@}1y{B2yYdKn+Z)e8%cYws0A2Q^Wb^md?oW{+T>L1jKv#q(AT^#F%l2D#Esg#Kioe z)J#ikj9;@0=~;dTJgia}i6y7IEQ7Inko7}}snl%#ah1Nvac0SjKzk!|F}~0G7=Yd> z<0DI13=w&T;g+PRh*Qa(AqWKdxS6z=S*L69n^K;M?z6}dxpb>c#pL#f0JuFRBXoeb z{Cl2w~9+gqNoM=h6D@Lbn_*Y- zoFhpX>AOor<-t{nBDLxD*Enc1D>V`+Z@OPzIa}uWM1wbfrz`{ZKpWzZ*rjt_XrE_O zzTbt2kxVzEVJyul?a883k%ZVF_pBfa!Yka?;7^p1Awd@Vi4vMPOZeXeE69-ELlaox zT}dWdg5Evm^&SK>e&R_zM3RE9R3b86SPjM9QzK%)M+dWusnZ$eLw#W!iUfHYhZq$t z!d`h6s886muJBlzVa)^X&pi#4=12Z2A7;K!4^=!XorT`wvbOEFPqMd{vv;$hFN9%yql24VEAn^QhwmVLD26I` zrP~PVBWq`S5JrDi%4^+d8Y0j_j+@Kq+@>)CQP5C{PIPS9LlEMyNIRI|&~q)&8$&p( zk?VG`15vZ!o|EzGdi{GaSeC#nL3E0A;5wsp1PK?-km?1wx$hBo0nI%ziw;Uo{dFo= z@2@@bTtzoCSLS7Wbs@i4$=NBKLT6%RrJ@(+z=~)cv06mp1k?1Vm2p&3V;I~EI#c|Y z+Q@Mxu4c3R!A^G|t0cRj+Z>3#=yT`bO^fUlfj1gBAkZ}0&u%|bQwg;nroU#yd3;!$ zE70n}?Xu@@vme&rjtEx>0egQJnbR=P2m}=4Au=0*7%D@}Oe~;RUm@jRhWvGwztiVm z{?l20OMmg7&hj_)7ys!j-_l?FM}it%Q1@Ewa*4~_tJ`?%SJ+$mK6=qM=Y-p6uayYFW5Tfdd&SKe z;_nd3G$}5Z2!WUc=sQb^zNYl*^p37$fNHAKJ-lDigqg>D=u4Zh4LxZl9$y-gv1&~j zugW@p3%9Ig8Iwp98^m^Udv^AxO#cDSdebqSI(;Aga>ZL#p)OH z%(H)w{xj|1B9$^=>%RLp1oUNg?r9d3`g<%jXA$f>L2 z`$vDdGsMcJ=cbTS%FQyII&Y}#1Hu=-^wKhdRh4*mI_z%k=%O0{gvDAGouvdH{a@SL zaAs;-?Ucp)0MMX>EJAjYgxIM)wT$4`yOV;do83JSYO~xW1%f{)$o24kIc9-@UU+VB z+@6WRLjtouHfUicc@pq@NKlI1q@0znuIbI1uO|NPuo^$EkX##$h2W({udc2Fh4ou$ z{pW9~uos zfMtXICYcm~Ibs0>*~C%L1is%V)^p6o$1RgQDW$iZF^QYT^dX_+qhC}f%-Jtas8zKL zlJ{GOmuGOg+2f|R??+*r;X*hYdc>>vHrVoLhVoF6q?!46IW6b6p z!v2P&&ms8VpN^0Il7ecJ5_-YmES?d>ODa8}hU_y2OBba0UK;Kk{Uv*E)eUz_%GpuG zi+tRGtL96J!3vG+-nR)jmx%_+6X5)Otb!_%`v@;(~4wd zt&`D^>`TVWK`$dNKw*}VYcO^fV-<)$<@>ko0f3l)JTKqEH$QB@OSONc%qFSPwwUJ`waX<{LmxsyjzP;KX zg8n?25d1ti`tO)o(aBRbZc4MQ<>@C~wFS1l$2m@S}LSwzd-Rfqv8o4Cedlamro21arkO3gwTn zNQ}aHy(ywkRYJh_FO4%~l#WWH5|EHnn64nH?pKJv=ki!_Gt6@hXpny%Qy|>Q037Fm zbKf$#;4ZLt8UImLaWt*zcifQr$AasDR>ax86P9YjMZ-nuA&_C39Cj+ zjd2OwB5z^lqbXPUs*vbyWJ`Z)RHc!tN+ANECQYM8Xks2}1QTP+fx$wG##F18 zKZ*h85>^4v8RApcb=JxlyTXb+Lh^Nbs(LLh+hb?f%*+}C9*dGzU&n4nFc!Xx>A4jT zJxScr(^e5dhERgu%FV#Yc47TogD1 z9TxFpNggPHb3z@cIUC-GDvZaoZOOU-MWcH&ZK}AINj`$FT)7G3Nxd=h90sI{@@)IA z!~`~DRrR>1k`>v0)5XSkp4DQRpTH(>>8Sp5QNAet`$PG@X0%3)Mrn~bq0AF8KNmaqWt-6#+b_?Hp#ek zF{MuNg1#rI)|Lz=hFysisx3)YlFr`#wwxzO-4?Hd8dN}7esT2w;JlYO6eyYVg{q0*T1M`-_N7=*0w4Yb6JiO?VleH^AO&vc&JAYf z!;=k|(h^+{`lqaw^*$pPSSpiibz0+t5-;=-gW?z4gVp^;vm+8R#7 zF#(M-W+KJLn>&~h++vk!heD3M8*yxwH{~&+QoXRui+%xENG73+~*JM3z!ya>a z9D6TX<~}TPcno5jmJyv|r4Dy*Ie!NsmD`e7ZDlPbwM85FaRs=gHM3|7& zx&1Y7Z?1P0xCbhgm*9Km{^R0?i7fTF zyN5`T5ol*3%1-TM^4~4Z_n~t3KS{E-(l*!O!gtNJF9#2N`}b>7IW_EaQmDs=lNy{>za;aDH6WL5uiYY zPf6gvaq75!5B}Z2meWe{ZBKhw__qV&Yf59+y?&(7V=Ay$MR>&%QPc%lvmVXn-nz2f z6!cr)TS{^(Z`N$Li z&2y@6V(a&xtpc|vK;Qt^0~osc(AqV<=tq&-*}&^oA1qCJ3`yZ0m^0u1jvKBa4}WlQNK%YFoE*aRm7tVdk&Y+J?jUDMv}pWc2@pzukYUB(M-PKB*=h%X@c=4)cq zIUe37hr)sz>;98L6=e(Ld$!v%*}Braf+p2Zi2R_OxX2eDI9e>Fcz0 zEjT;v?C#|Zy%=qzJ@lfrUJ$|BFzC&as%T3s!8H}Sy*mn`<#SMMzfM<96O0MW0q!(q zy07#edlzC&yScdiN7N%pcUJfATGX!ynK4?4s&9~%*TR!a6a2{Um<#>_N%%r_G&0-< z-RqjbG8?N`*?U0f54#>-I8DcO@lchPWw*3G%JrujuVn^C=rdhWnxA-U*H`Sz^?uTo z6|t3-F7nKd-a63t_Nw3X^zGWM60_G)TX~Mn*4FzL@8GfgzTFDNtc&~go{Lb$9VF^t z--x0E0QB#(HynQ2xzlgm75D0aqE+2TS49q_12flm?M+$M3k5BjCe?ykE9_1CkJDU4 zg)8TpM3mXqnZNVV5bv-w^k6WJM%GmFwnD7kiO=m*z)Bz{3Q3-QW}7skAaxruagjmn zh+Wjq;&7;r9d1iA&+6UeEd!zS?yAuVw9T18<%ANu$3z`n2Z}5$3peiiiqhOWkCt{R z5EzZXCeyD+A$mtV`S}QRB1(x~Qw53L1+hpqt%W-@^aR0s5J^18nF>gIoODY&?#Q$R zf@wn0*stfRu#_*0wle1D_>W*##f>-`9Qb+~Lj(CLMvd!KpC-*}V2+>f3#IEO(hyL8 zwP~mK?lg0z@BArXa}t8u&NdU+DG{)h%SY)Pj7u@V!NL2>V?pD2n>AZ^_X{mgsqWT`2Psx%Ejr|A3BsP0W#GU@b16CPww+CB8}1rHpLF!2^-YT@dfiv^nD=G;iq zN~=5s2xiU!m80nm(;sEV%|LjBZy-QNJVJ8|V#+_9IR!$*FqzPI3CG=&MnnjHd{uOn z!}vM>;^)Kbl7$gIgA!p7Rlh(a$_iM-P-F19P*j*7L5rHFrm2IM~o3`TF_%q}Z;D%L|U{4~g zM`WU%aeNf>L!t?^rE~9pW5Y^jgHo(o>wir#P5p0O zd-}@FSBig?IaD?z;tD6*9%1i$xB`w+EMU$=U_~NjTAU>b7DCWl3MHp z7uILN2Rl}bvbW#zE9l0hz{%!6mp(EJhW9zHuc>k{@SucE^@+0J?&YN@Sj-b^i!sf2 z8`;5%sc5(#AMm26Fu3>DmFG5<2*ZbaY%s0PS}1I@bN3lqzqovs2+MIu2qe?sYKicx z3@Sxg6Aln@!O0>eFx#e-2{VbUr?gilj4N6djarac_DzMt4NoL1X>+Y`;lNTn9^m#O z(MmxFZ8%)R=;34-c6vu!G2Chd)(@My;nM4B>F_sGgyrq8uV3R{DV4+0)RulFM57v2 z5zlaOBNvF?{#cQ`Dk+pH#ui7>F;{GghIJsV7ziOV%HC4NK~+G5QHAg>CAzLI*0$^J zZ`KCnnQ3U)nn7hoHlM|zFGI$s+h93$x}>y`du*alRSfUNMBBY0r)~YhGIZPzwy>xL zDt-!@6(6reM9-_tJGT`Lx6WrGEZ2A=MK~%O*0S^FOfXW$hRTM+6GD%XI8cg*H|b59 zDd>Z$VQgWfnk3uE@(`_1;!tmh8R}iGpR0_djMI8$mM}>Y=M;9DlFUTd6ShwNgEcha z@`XC4yY(^HpIs3m4o2NCB`&lmKLtb3R42u`s2JxO8Zy^W6z_N6+bv^8ZuM5xwAEF0eqe5`j~5rOFckzv1TH$B63b)fu+_xf zm=XJk3R)$tCXYp_E-r(-Jas(tS+dAPDmN>Y3HUbBqlxKZIujS@WYx6%V-DmaZQx$=7 z3OlhUW&CX@CT4h{A;Nt|ldJo8elF$B+Fss*G`(j-`0bN71dohJQJGNCno4x3TleBN zk#GLqz)WqYdaXzXmBN8>tYYKfZ!#@#;u2;i2{(qN=t6EU6mw~DO7~RK=mAy6@S`RY zfP#m{R=Ie;mhg_k{HscWyjBh?Mq--E+E{@T=C8;wrJCHE&+$~14|?S ztY2&_wOJ}M^ZfPosdO&prWPAN#TY+_22AgrW;i7-F_+way_g>pEaP}BEYvnOIsj4~Tvh|qS zq*73^D-PAAl0O;LsC>JKE%k~*A2Gl}t(q6Hf3gI2rBLq@MNv)Abvl{3wc-pdx#2oy zlXP07Pl`G=Cj3_!_qpv68WHePMPzqZYEV}q>R6QW`E-=xYJn)$C8ERrft4!EFKZ+g z`c-U~ZL5D|Rj@F=l!chSsH{Yo3+4WMq=iJpHoWc5x$$bo@2s`li{cT>L1iHEeBQ@{ zn#FzDX1bxYvOF$|g#AV#&ZfFb=9`xz=reQ`FL6<&Zn10gis~u3;>9606jve37{A$P z9b;Bax&!F?nj5v0QoDiZlGI5qD~Qa_SMCec4&`a~oGO!7(F5YTSYbVPlkAp5Wwxvo zQR;F`tKhi%J#)!v6V&+!H9XJfgQq)QjWRJqf(vc8CV56)+3f9w`M zH3+l`$mT@>LsZu@vz;X{Om>r^>u7m<{&Hc^Faf(p%rZp5Mz6cyuk3qLMlld0_B>Bi zuEe%+fUQ>db!in!L6Ai}__wL*3*8oFBuaizuIE=I?6diUY#F&n@~^1wD6C3gR=#V@fm7o2GRi*S6gZ>SwOsBh-lXBMVC-tPbh({R zm9n@~c{-%P6_=4{A`?-eH+ilw=+0qSSXxMk63z>K$9^-}88^$b(K#uS3fb@PzQFgp zyLZa?$eiSGfQ zYp749{LLJEv9bbT6a?k!SY?zYv-n zz6U+y?UzP5ZqeL>Q}}}pg-6~TTdXnmKCK;*aI9QoM)@*GchO(o#s^w#{(k241+yo%<;bY;A1iVFizw2~q~GkH%z_d}7G9H(gkutWxz%oJUFu_66i! zeY!v9dp=TI94E|vxV(PNHkaOFOCI)K|CZnWy|{spI{gQ+aK?i&D(2xUfK0{}SoUJV zQeT4FFu8x{Rs1nf>fvCAgtx)Z(Ti{z0G2|98rs;5QqRF*o*XMD^PABL+V(5|Yq2Ca zab57PM1Ifd-hZDS9V49n`TzLOa4g2(jB0;sY8bqD^|%>X+r~*bM5t*{K1NVK<14}I zQQyr-yV*b~F$6PPWA@tj#KM%BcyBP!M^zo9>x`%oncPW~7&<-@WznstAQ)g{!d2ihee?=a|`zn_{H{5 z`qvR(^K=aBPJfn7*32vKN9vTx&w1WX-8Bh^R7D>IUAD)L)UYAGb?+9`&Gzobi76v+ z%UIu-71V<5vl9KrxkT|wQs_=by9ngL-h6OSPPr{3aMl>22E@Gn1i|v75)!ANXI^kWdpWnE$RFPQQmU$uFFpP@N{cxcFLR%1-$! zt>@_F07DuKKXqlBn(!qo&R6xPOOh^eB~zU~p6d@ZG%;}cd+2}NLhRZt^apMt^KZW0 z|JsifmAwz6#Fvysihf=rgwS31mpOEy!Vx8!R97*T`s3(od?JVp-o!7C!0<1|34Ren z=kw)(JLU4)$n{ng(CLM%bBsnM!YxP8L8*B~<-0=O^fb%F z>reRL-8lqYYHtu63&|T1^*z24uMe%VF z6Y8G?UsrxG%YN~RZir3ZC*u*4;k)!J(R|VGIVZjBe z<$%@uBKW+LO^{3IA>(UgiaSM*&nr&o&Z}%EDgXY!Xm8V3qmcKMfP|1x1*FL|9#KQI zJUh=1<&~tKA;{n1wjQ$qiyjfWoBhn_qg2LzAoY;2i{b0?FNV?-&DP@=M#6X0sR_t7 z9-v42K25Bp%r^Fp>6YwmcN6oUJz@wcbe}g$py#0jKIJL{4wm{&{86sk`9GXY61e_3 zB+MKjsxg;8%u&4dF2jN5-aj9xy*3e#L>HKT?*}LHM+^|#>@7?|@cB^_;8+OB@&e&4 zb&q~cKBr_4yq!_#t#YNuR88r9MzB}u~3L1XVnsgUV3Im}60`6q*#8bO+sDucHO2H}3&TVdTYM>D24e?|DP7 zOtxQkJVN6WRTK|MIvMx|jnm{J+Tss*pbHJe!C`?PLM*SnzyE6T@2*8tGP}kkD!@8d z#@lZnHdfLYNgI5jOg+Q@;00WHmZ7wh$n>u$2;Py~Gy%+2eGm}JUM(32);xBRA}kS0 zva%F8ocbl9@32O(8M^0EC|{QkC{vZA>l((5LD6E^x81jXlV1(!(IXDh=2J~M3~TKv zbip3{(2oE*!dyZne-A+8M?sFj>kga9>Vc&48P3Y$OnlY+LS_cY(bFl1Ac~^Vd1TXE zVOnxJ%Vuz+hqxCnOo_IzH0c0l7?t-Oe8|ss2EoxbE24rHtv7fs_VDx_=NDcNiJOjR z>z(}7^a4%L zZvZ>Bppi}o$#m|ypF>YN0Ls$V z@Q^%=y-rngT#1(HziTYjzDZrqk_VVqDoL?WZT_O@d`TEgI=!d*un4RK4KS^SC?_UYVC4~ zSn}2NxK!Hx%b9D z!r(A=rCu)NcKVA~9-XGe`^8$^fM66s4CaJ5X1Y*_MzIUiDfb~g*t0^U?F)Lop3h6S zFdeNzaOMqz0t%fJbt$%4MK3atp3ax+Drw0JoIF-b@Ss7H@wdLQ=+Rc|TLrgN1nqSy zZ+ly_+PhOhJmbukOL}%1D4izySNz_aEb2IXg9^8= zS`(b?yJ)%63{lyfFDw@ji5W0Xi%^thfhal&se%(ZJt>ii`uA#iZMfirEc~!(cPJ>L zaI9yS;rHY%BGzh4N~2BJe{4r<5pgLeBL##& zTIr?3yvey~s%nPI0`YfLwu0-&f=WrH8V;VC$iY7^A+Lm`4dA^;fq5RL=Xiov0ZYaX z66@}R?mhDFf*7-U-+|2Qv0Z5_&`8b|*f;^}=%*)JER$s6n){YWHcQ=q=SPUe4J+vu zktK0xS%QCOjuMAfN#Pozk)_1bu!#4SkZyO*y-H5k->!BIlpc=1c)l#3w14qjCjlc& zB^nx4t%!mc>P!hIicTmSKJ=>)CgmFEn&;rlgEB7cU6Wp`EG|!*wE}Kjzs2r`cAE$) zLgbO-say`4+kmPEA8<%RfJ5?9xTc?sDP_G$JI>?W;Em2MKrk0ry(_`$Ni}M4^pgUQJnzQVXdHP0D`C0?h4%y_rsv~>+I5SOhi$z1X~E!adbChc zKIKIt5a2{KxA))LV!jp5H0-BMSa)oOp zNtnlo+%10%@_1F|X|)v`+DT(OrLo(<$^ymisoVnkQ%~lf&rz|KFlWO3<pArTZHK%>Jzx*=pzLj{vXJBY@QX2&}qSM3O1pPPtv=A~F`!k;7Q^A%z6f z8{5IoX;DeUcnfvUSe@=hACJzB>?Mzu-f1$2=dy1ov%AMU6yTJ(m`B} z*XQu`th{mqWL@)kJcwAQuA%oJA_Jo5>ee@xv6YAQAxBP70h0VwywBRAQ&cd6xT5WG z`CjScVs5yM^n?(q@HUdA(?0d0T;2TS1~|QR!kkF%F3xd%oSm=AXlfgz?~+y^w;8@& z0v@bYoG=u>YEa}bq9H4Ad9MTzF+T?q)3K6Z<4lrj3%&(G?^KwB zz6z2D4R1opb4os<7$sZiNujOd)hGht^^Cy0vhhN<<|EKs@D{7PYLylbkZyX$LAfZ` z+IB4*9uT%^u$F!rKs>(SnyC9Y0h#b$a|k?(nnG_d(i+?8q%pgS)bgE5n_v2y!jK7Yd_T=mf(*Axg(Q{ zk%=)3BokgL=oy9BV5A7pPL3%2)y%$ZkCH1ISI{gXCQ_Ts2=lXs;%@}+vDBcaux3No zB=%t*r&h|h5|_G^eLZ+bD!BxUZ?8Qh#<%?$-PI#FO3*^W3DSjOB4Ukq1DEnc{u`c- zpnp%VDeKV-3~kh#I0GIA1p3`6-)=*BIN1b#hvh8Ro&ANDMW$Oxy3vT%K=2&9D4wBm zzwC?F+sZ7uZQg@tb^C1nxe9Z)@=Q32Xzvy2)`qcdhqK$8yyJl2AlGb$>ZsEC`Vt@O2q0 zS1Y(uF_qS^>rCyDEJKg*9FbsTdUZf{Qsjv3@0uG7zI^&vuPj`&@)2#faMag()|;ef z@&0sVFz?V=Qf>G~Xagad-pMu`PA=IirbC}R@vMYwS_Uz9~!jD}3 ztqX|2$amPbJcAmlle(OZDAn!)jm3k8{G&epP}!peOb?Sn@3BdcY@1;N{r?@4IDwHx zu&V>nqfbN&^CMrAeSgu;Jzz?7Jtc}BZdB(VQL{Z8$a8ir{&YePnd0~r`9ONPdrB7> zUMM*-kKe;b&H!r**ABJ}kbB3o?*NQpm^%*zYUP-2VRRZ_xmaH}-voR26en$Lb5Cvn9?(WGNlk-x5 zY7%3r48$ftOn74faI5dCa49Dwx2?Y;HZKz^w-zjl<(!WRax<;e80&XQ7~Mru-j4X-EbHX zcx*40M>?a%o76%pB>a~4Q{0@Wa!-2MA)iHv1T;+Sfb$Ny#~0@PuAagKk*8E&wn#A)TAS)eo~UN zxPQm#wmU_O2>%qt&LyrSMH1a0Qk#ohaiWT*81}2K%p=67;WpqDnUON>DD-G$m=wLI z!+{+O6g-(qPTY}Np~5_QkTn@mhTXMx+whp{8wSqvBM?KeRz(!Vmoq|iG)RIS|6PR< zj5~EcJtcledg}al&f^dVH@n00n0f%@cr>390EFkDA(ILsx3X&(e2dtevbLq>)*FTb z`mnqr0iCEw_!Hm$6ze8DVvqMhO%aeIvr!sx0JJ6+uB&t=98Bbw4Dfz&CJT@gI@^iE zG^qkmZY42S>9(XWjpT!ch=ETHFQ!7fkL8b3gK`NimOv6$h3AQ53R&uSzQ;96nP^PNsWdN_2s#iM78TfI7f#u^qf@kMb z(rg$OMz3lK{^Y*myH@)uOD7YJtYDV#(DPib%T5(Zj7~`(iA>oL99G+lmXN7DG&R8n5)`$$z|(5;;;vApG$mxKx6YWPoiH>=#N{>p-r_)T=( zX4Qx+ND-hD0AJ&7PdaPpi=oB)fLubSu2ePvA-I|FW`zaIZBLqpb z!(iZn$S!9Pb#ENWNOQ(A^h7eyeE3?Yn)fF=W;*g3ovQ=+=~`thp2}YTx%H0D_+W>K zP*@l=!;*SxaEojbWFAwl#bh^eFcHV7ZlBeaZB$n02!AcRTI-i-hTq1XcYsglxGnBu z&7%QLbmZ%M$ks1!=E&jIm|u+XGc+DpX5?38PDIX4XkHtL*IT%KNwH;NJ5EWmqXBRo7nStdm4*%D1#hEyV?4h3j$gw%e+y+PAbX=WK$rZq0N z`#Yzz(OijZdWs2-`gN(Gk!w&NmVTGxy8mHE_@^Y{D;zx;>fow^h$@{ArI7!|UH|?B zASx*xm#PPp4lBc7zaTK?6pgV9W)>t=GVCZGdaFE})186*Vj70h21#WQ1S+XM$OX7$qiAqxIO9ID~3& zNi7Vsu3Q)Xl20T9WJ-U8)eC=+?fJzw(zl5d@ZsqYePG{d`%aJm#Y3e98q1pR!7@}~ zTHYxS_w+6?%uWmAt@1|p!Ba5|VcHO~OlpoJ(HpM#T&`5))CWe`&>M^vh+uyZe<-j8 zh8-9B5xEvJ^|53^7Jt|@!(c~mmXXF^nhE*qTyX{4yrRaBN+UUGy?*jgpPf$vl_`sPBp!9swjt;M`Sd2H(xM)%}vcF`*B2?9?2id1))bW z@cox&2a{Eo4&x850FTd4{tHRjN!ll*R|-{e5U_43Mz#nLpu(%dMk0LT-GlcZMJmjG51MumQ`P4TPD7mO=9Lpc=&Y}_K+|iuO&dFlWJ_N$qjMhT;L8Q)eD^ytu9eN(JDe(GS}wtNprA5 za|pJQ7)A1nCuR_Ntz{PmMy=c;z9lT;lCI={Kt>|uyqC1{Cm*;3ZbM_~0_;C(MBdXl z@lRjQu9h-MTRbLR;CxG@BCVVDha?i20aR{LkoNXe2nxtp6xfYEhS}Ihh@jYRo_s z6SiQYT5bx1umz{sG$=E2##4|cp8krxL|(r^M75~$Yht~@VZ>>m2_7VaH@=c;bU$=x zydfMsbi@aDsG(TD&;|}+)H}LGG_YpZm$6eA_bJ5^h|);yxW6+LNakoT8Bgx;AA^G` zVP7UtEfDy&*yK_^1RYQs>^z7IgW7@sxn{g+@;I;5HfYWAdQ-k9nXk#^4|q87i~5t{ z@%sq3z%>&@8)TFk^si8zgleK5^cOS4f3pw&8CRNT&?9`Ke~DDLu(0p%uy%B(WmV!u zygCZEap^jqrMJc3jx$A=zq`o5<8Jc`E|jb72gGHji!yn4pg&Dui}U;nh>gGVTH7NW zJ?^bsBpz^o$H`~>CD$I6#xaNfO}GsLh}Xs6QhjtSUzk72)$%aIV-$I_fAQUDglVer z>n~vikCZS}F7TMHG|woP)8kq|@1$%1cOWc|DO zCVGvEnc0$v=ISfnbv_f^JwnT7GiX^-S&+vBa zdKKmLY*hr9hVaP$<~xwwvg%&4$54(kM#_+P>dsfUdrn97AnY2dcBIHWKrv1f+Zn^jQ)b!INgXToaiu!qz$OT2e5p| zHF~f^W)r0FH^j=?Hy1Er20^!FJZ#W1ME)#SX;7~6C!ZT#b%4TjG8Z{WQjSlV3@6$0 zFWel^0`8#IEb!e$8)NXGz6d%EX39rP;uX9bu9(|v-Q#bjT0fvd0=OECzKe_^9_4+as4XVl0Elu?2xBC+N=r**V*>b_7+cmdMIOS##vn+6ZcO~w&Gj5dDYSZ+@yp%i6R^x*MUgL>E!1;@B6u+wX z%(Lpf$QP5j4Xj+`e8qCqzZFR&-6S&0RFtLM6DO5v{*_l%ZoTraaxb2$*=6O)npjq! zZkl8dO&etmVx#bm6a1apE_->U)Ddd`t+#qqueI$qR_kQXB5Zj_6CKd_8dzu2s2y$7 zxv!!jQWQzCgm{DAQ2G2TIjCBfo;qX#%m`Gy=n6ek7GGi&&?Cw#0e9`O)kZ_tl} zJ~SL4tfk35$ujGSr-PZM&GHhedl0yeN9QCy&~C$Kz{l( z+y*Z}c{pAD#RplRRfH*v32g;6F#*0IpH^MHhs>6QOR;QK`+rrggla5|Cj21cnEjm4 zLmWc!bag05mdK)E3W3Ke;HY({&AV6y!%$W?3Xp=8SW@9r!UTJF{yvs~&!~foDJf~@ zF6bf!Ky^%75mLW$gh-OTdQt8h4Lf!Q73`<$A5gkvW=udsnPJcrbb{=^M+O9fj_L&E zGBG$g!Sb8c%%->E;g)_nIVS+J*i-sjQ-NY^cF$2X=JouW^*G~`vUGbr@IRm?m;{9# znWR$s>KRRetF5QpaM*ff`_)$M*^f?~PUtF$`y>f^7WRerd(hM{| z{K92^_HP72e@OVus?0zT#Mex+U-@r|Isei)@hB{R0_Z$ihvISxMlW?_GuC`u@7gKf zJzS2~?(=WHs?-$d_C|1ds28;PT6+L(uRPLK`ML|4&j_fcxucRi@MX)m)99eQSZq%?)PPqLGRT_S=pAE9WPcOhvuHD_t6EuD}_E`LB<$^sp6({bL;yx+8z0zUE)~aUTI> zC!pM6AwN*n)acDj%m99fDlqRO3D*W6M-$%r<8M!qcf%ikXG~!*j>Z#wI+6CAi9RsR zGh%GBHv}^&bHr_VF{h1ul;p)*ejIX%hIyNg) ztZgf{@Q`y&3J|DYe*RH3-$VH};r|nKFzK^G0pSn_Np4<-l4f*a z&X6P5gTA231~d17e8vUMdYHL!(bc3b4w3UGAanOny#M%H+7|-klZJDgBl0WsIMe9j z<{kn>F2KOx61z(Lt?>`PqKm?o;;oM(9=;`wKsd6D`I`63sjDFw^-IJ~Io`#PXm67G=WBSe zpwLc-Zb$SiGVe#S`!Q=yU+ z9hvxPd)1(@&uPl{a=JN+p@4py3{}-6Fjb@LAO5z`;~QpsMeS**Ux9-H`dT*`^N6a~ zBqy$;zkW5!*UN(EbV4ZWhrjjyU>)baFBtpUw1n{lRi-if?eG$FCr@C5t>6vxxa#CP~&~L9gr~S?;|a|M6F2!WQIX)Q?SddLx?Uw_w)m zm=AJm3CJ)#4)X$(gt^71lG?x(rX_fmHvuejtl8xDP_KhGaz2=EX&S|(-rPg=3?qHR zTU}6ef9H?C0)}b4U~hCqn`^k1VnL*0DCKX1U z`3p8bD=7{qLS2YKOInnsm;r(1360N4*h${@nK)0@BLDE;mzb6Ssp$k|^559*;H%p6 z$e+(T`TE8F!>`5L-{CP%sK&hs$M;=u+#uZBVlZ~b#rV4HONvr0 z$BWEa!Bp&IRr$mX4W2{b9|LBjlfRl;l+8%XyBz1<)?bzGRQqE$^{1NC!%L|YRDYW80*0|jzxr9;BFqpz((lj9(L`V@>5)DRx^R3kiV4{VssmTg}1GP`GSE^s!D@?oi}b7W45 zs&;r?sOLHz8o?ZLN0Jgl119YWDt_7QaM9< zh{a{{rBd+^g3_{{Q^2h-6+L{t)69)oBOCWxsYYuDPd>oSHs&Ix1@2B+YiwsF(h?lS zMef(@EVKc9+EE>3vSKw13FggESl-haq_^^Ajmrprg3oC9=4vSp;fGKM3)x$y@sZ+^ zS{lEB+B`T?O z(v+f{<_O=6bbx1RW8%BE!DXYJS%xyv6s=J`=1;Ogp{RPX4|9d;hE`@1;Z1BG{bv0* z))+$L7H$VZl_Y$~)v4`Ch21P}<+LNwD2AL_87e0Ew$i_&vlcc>{V`k7IC$0|#;OGt%`&|4?2<)XXLD6v;XQEW8rOd8pq8gA=8$5p^ zdui@$VCx`h+1<74B)*dyLrEe&6EW+4q}~-Atd0GoWdo{~)Y_&WNoxqH>nb*74-6}M z)D7SXYeKJj%SD+;(3FANEE|3|@F)#gmKNjU(n9uMbcVfE7U zif;8BF89_P^mT1yT|9VXQ?UjQCMO8_00}2o=*)k(Jpxp``JB1HF@VH?1R3hLEooM=dtI`!CtkQw-k*z4p@$5>#OoZ>e-m236+vKx_PV;Erc z&h%IRG_}L5mu5`QHY5R)zJr!G+a=6eq~G8s5X^lV#MD>?3fY#ww8jY zpxE28W;=!OD?C6|?)N=j4YUhxM}~Aw6#`O{+)>Uc}G53qel_EwzDU% z>$`EDVlAd0gM`5jPzq-d2AH08s#89CK((sirr=6!ag}Ejk?=q=Ui)5$C<(lEN$wpP z^iHQ_ci)JSff0)?{CcwF3om3xFi)J~(KuvZ&n}jv%c2FLEZ{hRXhTa#L8a@)lwuVM z)=e?s#bl*ZbuC(ism97G4QzbBEUS#ZTp^|$2!nS@xUeW>l=I24EY{s|1jt=L0tOhK&O;TCd_vB^B_+vhP8fLNf5$5YaGny&1Ebn5UEyPQR@ca)W^DUfQ*+($yTm&aTTy% z6fm>st!qpyO-)sU?3IAUW;?6c^tA%xL_8BlobF>phG3kYfzHI}Gma_$e)o0Miu8j; zY1dxp8T=xGErt5*FeqN4q=|?(1PO)Hvuj!itEJ5ikFm6(RAh2_NB3Zm?B<8kO%Tsz zDof4}U2Vr|!q{W4T?S)C-8Y+2wN>{NI!TMw6mut+N`Kx~9td~!oo5PEu>b9|o+Vn7 z9^ScAhvgSkY^EJQQnZNstghAy<`CMJ0s;9sel7r;5Dsp~4)0<@)(>h-Bti-FB)M$P zj-oJ^F&<0X2Ns;OyPw@0GtWB^Qi6a(Usf(XUW^T zQSk0fz)BC`xIp4kp~b7A56URJp+r1S07@6qsx{>n#T3X9zc{s7DXEzmdmVA4TGO@go z4=M`>i_rYz-(8Wlq*5)7`3o!t`Cia_4UN=6CGDkW<267@Y+8ohX0s&=&?kopYI)v6 zOJYL>TGAV%CAEqoJD|pLKY^Z8#gq-yt0kLN>vmE?#2<&xDPF5WUJ25Y^{b6r%Z>(F zEEk|#acX4&(kUI_M?+ugs4^Q?6rH9k32qT?Hi7F(qj*+&;wVn3tK442*V&iNs1-CN z?G)*=BchVLibcmKEbobC!P`fhM%=>|C${TAd#r>Yv_7#ZA*>(%uI|CEM`Ee#J;|-6 zuIkhG2DtfC5$`q}foZt$^@S`!@OL^NF|?T`tG8bHfSIt%tYRr52v?Lt7f-or0pnn+ z-iBR;;mMn8OR)w}@k~q$u2+{4PfojfcFuEw?BfrSgYpuu5h>yF`L=sFHh2ZCP-Noc zs1@u;P|ahZ&Y%{y*mUp)otMz|WH#8_b2ME0c8Ih$e#J*08S)6v6ptOHS-67ctdy&=5H$!6^KrEz^*cnW8Mz|J#_E`zwCys?0l#qS}|3KueBSt)%T@rkN zcLbD0{tTHRmI6mh?_+{ld^Y|gH>1%q{lN~CvRcs5fy`sFYz*?|9J;?!SE`zN!v^}?iGZBmo{h)_1@ob2r5?Znw zQam^zCJvCzcr#_V@Qy&2z(qlB8}k*8Yna7@&d(Jf6Dz*47G(n3#-3uwl{MQ8$zYzu zJQdd0gZ}v1ZdQrd$x;psa>xUKL0Ypm60;R342PH^R6@_$w$ank7-Ed)S5X)k83rbM zoE{1m!?$cYUtsA1j6sPezLGl;>I-HpXM0a&Sl)~WySs1cQKe)hRRyv{^T0x6%M*$h z^{Szp$^U7M?BT(|zwaa~*plK}7On69y? z!DhgGut>cxcIi|Ve~x~k5VJu8=pju}6omBA$@Y~(V(*~d)AV^Xe~&|ox)oKNGMdr~ z_0BL4e7R8{w1ScLGjT|Tt3UlEU1hW==e#Hw?KJr7Ww{(nd{}o;`j1r?X)fq${ECGM z^*qdn&|g!hBZ;5HO9rSAAyo=`q$WywRun|e49Ca4G!A@)QuhJhHO zGZNdtJ9DF9iXX$G$s~GBq(%oy$aCVaY*8RYVN6U?6-tp;z`QZZyn}zROCdLNfqz)v z%f^4`ZRKLHAxQAwcviIiLpQ>q$(;F)rdf-OvpHam%yjIdfaA!GYqM48*(%lI;Fk671>%e4tjOi>!&$cjrgen2i z$3#aW5={>a`Of$eP|xUwdkA$EuXDYCNI;B{Qq1J^K_tSz1#6~Y$NV0hQn|SMHe0h! zoSzprsG3X^b7rAv!YCwzSTpd|GfX0co$L|0Y{a9)h(2^k5@8Kzyob2sk4^qt1(#rX zaU@K}1O?HbTX+d_LCL9*EvnZ`2uLr25D3o7tpyLmWFWU=1z-Y=FO)oHR(a@5UPYOB z0bz}B6_TOI6reJnvSKMv*w|`}rvQHurCCf7>V%zW9PbJFZ?4iuBt{;IRZ!$aDbs)2 zMN@P3dsX_ya|H#@iR)Wlwt2Ma1(ODa@Um9`SyG~Tu8L`k_4n*B$S+R~KDLNmR0A)OU!y!g zTAAX^C=?Une^zHF)O;e}vA5MGqWn0J*f=lcQI?}Q;_>w^3`?1;^g|2zRyWj@|L~v4 z0nwwGQ@~JAxHi?6Lq1xL`f}HnYdGN|jS)dqF-Be&TDXR7pR1cP2);MkX34m(I}e#V zwUGRSiy;20uBPBePsXDkdN>URRd&OkTd%wu`k7zr_0Z)3KT!VaEc5I(zD(Ab_Xa7!G*H*V&`dXKIM7ZQcD@{7c%W6()=7c zM>}gODj!7_P;x?oXvH-C-#)0JgzqowU(4xu@k@5RLFj9x!CjD-=fB9 zu+*$yQ;bW%jF@5;jy=pvx4*@z0CRqgwDg*y-+WE+pf57~t~QRd4%b$Ln{LlD)Y7o}sSPl06v?h<3^_2b2&M zN9bQ|P1($|Cm^m2CaWmz1!Sn9T)Ic!fX7Ihb}48NV1|*iTmequ9~if z`xY3I?h;=c&@~S;&6{SZI^)-;3LGuwVcKed~J=Kft zJrzzMMP5fbp9~-!>N@g1s=aK_=wrjz=1=WOm*BCQ$gT0_`)h|9=Q`d|}{)17#OremzFoHdPO7?I`(3Ia)~ z)-~>N?g&}drz~5SN}?I3i&N@ISYOy*OmUPyemkS!iheC9bT;;4@O;KWOK>aB38Cm! zH5`~j4B`M4g>>#ERH>nx8D44>Y=G4)AQ-evJ4PMQ2Rv?bhIDUpZ)p2c42A>9hQxvf zk9@+Em`qbF3EReRG&q!Y1Wxea~(X8hu$1OR4kPXgBnMIL`uaVzOT)U13MUe=^7+DD0 zzOV)Pk{TxRJwzpOZ)aakYJ^lJd@rCRrI3qD2lTWZ1|-&7U=!9mIR}_RJ?9>?q7waR zN%LMZY~@iC-0@qA56dt0VaKF~k_P5V3>j=-WlOH){rn9v)h{qT<*$xt%4gBC$FczzRL{rL_ax1uyu#R6}!R&=BC02k3`cQxUuvJ7^;HDV>V&9G*&)P;K^ zbze}P?|+wfA!>j)a!Wo%Kf*c>WoX9p`(>jhRV6Fus0=Gd^Qu9iXcZj_=G0Bx0fv!k z$RX&aH&-WnQ~tOPQD4J^$O`WdPIrGW#@ji3eJenY$kW?-2)f${ex#EKt`W|#ZP;k7 zEhpSTFdY3w$CO~v@XZC|2Q_KMjFchN**3lRmkM(_&$Qt~B_3-7a{@Uo-qZ|g8TrG# zmxm9Z>`BRPip!r2Z#Z%f5h&7NIc%a5k`hy#DKZPYtV}uk3RP29Q@@V9HMhzKZ))+W zQuBLfl$t*wy;~>Jytjyaqo~Y`%X@#lyd|SfY#r8(t3|rm1 z`zLGW{s$YeUmw1d@v|Tj{FGfAe!62d3(eR~^JPc44$(g~ zU&fr)&ZRd_@GX9!=sDeRX+_Hu6n!yAeLFge6mhs~fA)-Zw68B+x5xn;;Tf=r+B4fj zZG!J56v@%-^--@!X$EwJZiH+a#4S$I2(4~wx1U>ZhYE+}J|&F{0dFoNpRA;~&Qe<) zZaNp%he=yaHA0uX%hjh|5zs!CSq@?LzLWeL;Gb4sQ&a|2U8FSx!T{@YeB$!<`)lMq zS7B}Nu*p)Ep=8rFmZ)gdZZ0ul;y&yKHKp1aj{!Oi4p$>X;>Sjlq&0FKoe-oD*`7Fq zJL(?%^zoil%l7>|&|4o^S=Cl;m+Ku>g=AV*d`KK+ay}D&`-|J(ga$>A=|`$WBxPmT z0s8Oj7bZx!)&#)lwO$!4{j`Kfa+x19SPvfLbUppWD|jc%B&Mp(d@{iqsY#PsN}U&* z>4coF;_K2~cmh)LUb%53TGF@??L3Sm*bxAK{T^}^K7FjwTmlfpO=poQJsxV8DsC>Z|L?e{uR zj_woFV$c7U-wm8a+(1O>tY7Ty)Y5 zY!n|n$0MdqqA6(G3X6}V=K6>}#ww9l6rHoE=3NI+IeR93xr3AW+tOpWdaJLv`uI1! zJ=%69-wGY1t600d9Yw|wHuTa~g5#NyCZ}O<_nLKWQ9?NStHWCrlf-G>=@(B(b`2z;AFHNqpU0AFiW=J|;LSoD?T0Zh8_+|LK`<`7nZoh?xL5ZOQBF}zls?}@yO3KBi03yhE!VOaAb z#eUf?&aRA89r;`&x5lE&)^}F`LmrkGipWFqsi(E@)Cz0}UVzwA0&eyxETzTfZ(3_r zOWmR>NL~fbhr`zlC&(U!EU^hO&G?Aa1n8v)7P8kx@|rLnWC+we4pv<#S=sjHKV~Q?yF%4pXTk5W`~T&<11X060-yB+(E8 z*(#`U9-MM#A!n%vj73EwSE+R4@JZ@+`gv?3uy3ff7f-q^5&?9t5a8hQLFkQ4j~te@2^s7`;Q-}u8hNL7hw zT$PuNL>}cK+G9bmSqU@**l5qe)dKxto+q~Gi_@`UpVYx=;m|na4U5~~(~DyBD-Wy* zyA|hy1sggP$lk2C1Y3j{a)URL?NjgDB;KIElyG(u=X=UK`m!w92Z08qAfQ_guQiYC z50bgj56R?&!LV3eU4ar80GKCJE!>2m$m5F(3xUX%Yq%TzN5BA(;ailpuTR7RP-{|8 z3Y*^tw8B*8+KHBRo4OFT$>!&C*~IG|$;u%(FN*Mnqif|!d0wl>Cleh^J5`!Dgh2>m z1t|pyiC>y?wNTYKec5_|0)N8nRnO2+?cH$^e~A%O$_UsRE?f}n8DZwLK=yjF9qR^{ zKdTR-@)GG6ktKb>nAdCKp*(_aYcMK%$Jb)Y;%a50b-sfc9%7j@2cSFoTv%BTP?J1`q!2hBTy4`0m+oyDyeY^gdYQt&4;sB26XNOX6<9@9U=j}Z$&H3 zo-<6i3Av?qzGXk7>cTZ8NSWd--6yO|?JD?W56%S@jfGSnsRE&^tU$Uvq>co|$&G9) z6?Xs=v<~pns0Tj|;-z_jRdOtb_`jxCjuuLYnv2gX%*#_Uk));JHWcc>8o0|o!X#2U z3TH#iU@jwCm@G}i;O*`AJZS=aX=In-y}?)VPGkNlD<#8Np-e_9|dw6J`+E zAs>tU40?4SE<{lY1dmu&26Mcma8GY705E-smj}8X9n<)2KBu%CgqCI}H`b0SqCW-j z5~2}Cv=QNj09~Zv1e+=E;W9#8NkEEu)RjrH#l6nvb?6+Pkh_$L^ zDL;a*u42KUdq((zMJnloS<`kpYEZP~2qHmVv*)*!r}7ycH!l@#8&XtJD>M~Z5%YRJnF;R__{o< zJy09og@qllVayN(oHDplVQo?paQ2C^So**=I)Mu{N+GWX)aIprXh&^EwULjWX-1Kl z&M(K#xWlTmH)9%M|KFH91B4@08O;qJKD7Ok$*aaS>{5zG56{L2cRA>9Erh{&!SzF@eJPeGc6SfBKS zcu&W`BSQ2d`9a5*uFHToJQCZ}2Bsp$b#K>af{Zb6aYI)oHndVL^D=h&+DHN+=Mz2d z$k#p#EyK)4qh&uvghf%gM63meR=!$Zy_~< z+XTW6jtQIsN>-M4f;=?4A-y$qsH;f7#o~!;+0M#yWbOHc4&_H!iSF`?3X7-8I((RH zu$3po?l(P9j4eNb+ibkxG);jeH$l3{hX}Nvhakwrb}Y*;V=RcdHN46OmDV9+0MZ-K09G2fy44^Xd?6`ZdaEox!ve&8uapgJD8mwurF8g*k zp|YRKw1~aS!0=GQ`bgg^;o2UoP%aV=ST{!sX`-~fomwbrYhiyJy1swsp@941@4*gv z^L}_|E3}ZCSEQj>F}d{A$?6*tSV+z_kq1kTgC>5XaF(*d#ZIvp6`F!7oVqL} zO|`K^$H>SC4B*g zfumojF?p4;UiI>x@p_L0}X|4_(37|>Ff)u%?k8t>Bt&oL##=& z7+pzp2}mMlL@eIPi$>>|kmPrdG$Y)Z(&;ki&|c2aL-=}C-NKYUJ}&Dp%!fUnvW_pc zBg0?I!EWrIA>n0qhs}+6UT`nKY=^X-~@{nQnQmdn4O&U;nL+_&y_|e^6$e})#nRi%LWZ>Rc(^WxjjklCGZ=%cf3||acXBIMd^fi*9P5r z-YOoo{SKTnV5_EN0XbsNlAtnJGRy3=xQ%X5x48QDPte|%1V`@7| zlh8c|58jC{lMMcG_^O9XAy?|rkm)*&jINAc72s77VnZ1DXGIABZ zi<9;}iiYtbuYg^XZ~@$>WW;SkuM*3!D4R#At~7){6OI+#htgpQ8%>PEzyLr5L9<#1 zuzE<6%kQTOtf&sd^Gts{uyiz|i!&Acs!=FAQsOC5836S&oEixtBq#jE(>^2VS;_uI zUV<=keRfR9=_$7r;uHN67cU4_Q9<-k2&?+0f?!qb^}!x4W~PrN(H|uYYy-Z@LQPI@MQhD0C3XzMuu?6iJ>{*&l1FYays6Qwjyw6EDNQs(6 z;&=fUHiQaVgsVdr0?-GOZHFI(VGqOo9=Hs-6f)RvxLX)x@BV>#3y zXAOI;Ob~#uv=98FvaPj zQ;dZ}>tj8r?|)vy+jMBJ<_kDQL-N1WIqjZoxMSMNpfXLL4 zLSB?U!5*<5I9V)@itj;E$c+z(=elzClaH#Kw3~Q3(X_th3TLsa)GH-RjTRwX+-N@d zcS!GKtR$_l3#qm~U@n-esj8=9P_WKjulYc5siRG3ZCL$+DzsB8FV zwa>)dGV2s^=2s~bG!(ZU?|WQyw*cO%`Rnq-vcY*+H5h5NCHoK+49yp#3G*W-VEepkgL+RAYZc?ltI=T)er3o zS`Hf=a?2sC#&HeMwLy@`xsr|uy|lVfBDF(zRU1}XpeO*vBK?Y0(J*Rzub9b$%Qf`0 zg50GrVEbikUBh?bfpCVB2>I$eR=Y#)!os~f1tl|(*Gkpn%g)Pz(|}UJRRFJVy%&6W z75z$r56nR)NfTC7J!}66vX%@qLRMDEg!NlibeI`u>qV>K-@RC}S9Vg|f zK+f9Xh61@3x9f5^MZ>3z7MFk|2F^Lkqcm966+5R9qaS`P+%8cPhl`*v;v8XT4CA?< z5XLe~q0Zlr?h9cV)&!qZiaaw=QM;bVl7v-g0Y$=#+ux|7mcQPMXJRwh5{vNp{T);` zAu6dm`~J0okXhQ8g78@=9phX5_FO3|nZX^E7WEdBHW@sKyL_b(RJON!oVWEZRkxEN zJ|ys~86dxf_2egNQTdJT#07+()10|Vt%zFmuYiNWa_bq|(T9F#C%Ql^1Sp&Agf$zyDP2w*QNsMl3y8l7xTfD(j>14EpLi)rq?N<$62^>G2fY2d2L)S z9q>fG)_w#R-;G8f!bO*mJ`15MwLe|TR&8ga%WSuL@jV3$(VZB`&gc4_o#_Hy=}Pky zFLayUrOjY;*gMWqHvbSsI~T!B#J^HOHrwc-(PikSNdXHp9*kl{<%O00hud0nDvEi9Bo)Jj5wZ*8&KS%C*VFlKL}2iM$|2~q%#I2VG9^|fj2L%Ik_p#V zu0}pZ2@$O|{|GLiY_t+TtkFVW(0u&i`v;{A;wPGwDNOniPD9eN;qe<+EgY#4F%-GQ zZ#=Xi@QB4Ce}GkCfxvg7GNU#jekNs!1O{#{^6ej8VY5-^aXvJS~o!kK2nXE zM7lRg9g&d(4{+^zb;=-^{T#X@3FWc_(|`EBHm`$D_`pAWf0%w^?o{}|KYYK>_aJ|N z&(#DEd?AE5{c;8o(M##G^7aJ@@ba?iae+lBS45Z)Y~Tnwwa=n*1xxTipat{>6Z>Xh1(eZx_Q-5oYf|6bAy*ZB)4xjJ8mBL%>GCjq+nyWs?cLGQhg)b*l{W5vrBRu-(tYIXF!4)p`kYQvb`3nb z_(FsWzlhWxi-8kZC)R)pE9PMX^ip~>%|5BgoomB8q2*%_#2aef&z85;e4qM;=7~*j zX&yk#5TJvd;7goQ|As}GDM7VtWVGIf<%)|$on#I{q{#(qH#DZyCpPczc)-^}{O9g4u_S^mW^B?4s+Q1&{U zq6>et%P9;Czi#Qe^s)2#UlZDryJU(C#SLA@(VIC<=f?+CX+y!pMjGc+z1u~KrfvoI zmemqrWrTT@kR>_%$AMTA&f$nNwED|wMvQ@x`xMUTb3U&D(vo5FO~mwIpqco!3OM>) zsuB}JW{UlE(1%qA=}@EZWQX7D9#-gw87`jY-m~XfY-goW`8}y5qV<$Mg@orQZ189a zmttrow-#@+TX4s?Pi!6ujD7~>K7}O?086sT-xUH?56bEbeo^D$Bnnj8!eNnk3G6)| z`k`o(Txmpk5UIfoMFo;F04)3_EKSj*g^7m8_n?)SQ^=u)oq|OaPomBMZA2v+a&5x$ zd+^BBhYExsid^3nW~dSzyiqArKka`X3UGE0w_q$POVgKvCN;ahH>g^GU4Y^tH0q{= z!Y*>fO2o{1!L{EJdYR{n^sBJ%*i1dhNf*(KPs;ipFcC_xCi?(mxh^c%T%sfOtg0eg zQDk2jZgK@ib{%VT8a{dBM;(V0VJDQaX4^CGopTYa8duDStydI>N!x&Ow#^BS=J6O!4bGk zLfquS3gHKfSDZHa7|B2YgR?oLr>V#Frp~}`+S%-rPh4szvIl)J9pv(P6#xvb5;FOK zJUavAtXxJt|0gXtt_@*b4nQhU&~ON`mnH}xJtINO%48;4sdY*VChOSeTIX1PUQWi;*4} z0OC-NeA_TykcEObC1fn8?`kSgW>jj;&beKv{Vj2 z2LmVLBRqo~`B=9`qg0lk6)daB2+~Mnr#qIY6G=$*t+38Q5*AEt-w)&TSJndE2weU- z0dz{~C!;aQpCnO;Md79l{p9NfVW84xtgyN{JZB?U=-Ze0!7)3y)yJrPKI3!^{P41h zxC7L#lG3>L_V(A4Hz>(v5*7csCP1=6$I}HwB8T4^-Ymd#%V5b-R`V>sLD{Sf!$7B! zmq<~V!wWj$2H_K4;4I@KRbUb;qI_kr_Xdqw;Nl%rXm`mFq0eR<4{?YKc{rn*bnxx% z?|`x9lP~nDrVvL-UxxKB5SPP=063NT#|iIm_~03+o4d?IhJI~;`iPH zLlt^3QE`fIb-M?D)S>@r-KH@o$}g4P2>C1t8$hgDF=Mz;Z8u!-=Mrt|)UV_0VG=E) z$$;&1b^E(>s2f~LxlT~89Oq-C(q_pO;Uq)8u)u@B5mzt~5H0w^u7~pRTA68{Ds78q zd_0Ww<(I3?k8gjiI~M+OTxuB(s33^4&N>wt6X&)HwvmUa_&;N@FW5^9K9(sNpMH+x zTy!-D%!dy;+>;4hZmFE-(4|>i{ZJL$%e9&vc`)c-_bTH%M>I~ zR|g$^t?VO6ZgS@BquKZ5igGzFsJ=8d7%1 zDN}rDbxM{CW=AN%>6N_wwGO3feT@g*^n66blg5aGo6*L@?_keNPvjh0@)v|7{OLF| z7YI(M59^CTN*G+vZg5{MZbqDccSGn7mb9P~n6#|I`GwLbxyvC<`mtE@$IWo;vvOHz zpK(A;ga_wn*JN?rkE0}ZVkF%W4(DKE!T{}bk|XmwY%bYksDb*ycT>^;0Dub|nfa%j zt9}N)8KRvk^(Fj!coFetVgNQd51~a)gw&4_vzs%pe=`&~8Rz`be8pz`icksshu{OU zfLZ#ecC@b;IL;7WjFz_Gqd96+lK?(~rc2Dcs!0#1yk;=Hw!EO~O2aES3pxir0!<=c zn|AX9SgsC9iK8069G#CjO>gbAh8WA>7|``ICG7Dk#hzla(8YG1C=2rDV#Y-WqI`x%f^mYwkv#GD_^t=q5;|p4+g0qs3t01*h-J_=$!Zah?amad`*@ z-{&>#LqpNeFFz-l<%}qej#>~^>W`zVF)^_?SK@{*5~ba6v>~I6(;Aff7e9_RoYkPa zxN7v|8O4Q2Zf99Hqt{zS^m^gyeAjatzLrOZw1n6kOe-=n4EUXmv)=6wY*DG<@#Kx> zcsAtt>Qy!PU^t$s*hSONhU#i~T_w6ZLRA{fn>IyNj_25nJlAT<^WpgzYUE;T^uccN zGmLJ)vhS=a&XL4*Dcj=zjiW1J~7_afsJg< z(tM@k2b;Q728j4w9>nmV>xA!UhRkS7cOIn=#3m#Y5 zwun=_x0pnGoSMilU6h5pdiDaRM9p;1M=$(h32})3zu+`ZU2SYA0-D5fhr1*X<6(R$ z~mH70U z1AM5xfZaWr9V=^6-@InFaU>v_IphaLES1jq5v}y%IAkuKdSZT+G(@FQ5_r9&U^RuR*ZinUg zRIDE9=X2W7XPvJQCoVL@)E2q2B=S&8I>O2u_HST^2#DU0&Qe6lI$b$=;pr6Y2Q)V| z(dV`2E=aP8$6JsW$%R17-+Ac5gW1i6z9mjw@GnT_J!smv*P?Spb|3^cGfu*C;zD$T zd_-N*9$7zcAzKWmW29v8Pjn=owvatTD1-6!kSav6Lf_0Y7RsxYm~*^Dew%P>Bka<( z7Rv!`yku(!E96L^|L?|dW+aF|Oy;=Z+BTh|z?8(jt>-9kHa6l2p`Cil4Sbu;Shh?- zj4OJI&Pk9u5sTFJok~WmU`Z+b`kZ|oXmVPfdVs<=agsv4qr8+n1EPO|LOD61&<3Kp zg;FInesrq zr+DC|cvW( z7>v&Fqrtx;W{fJZX!}Let*0r}?$;hoHpED!^l83h2<962EuiUU7^5+3TzzwU*JrTq zVqkS(CJM^cbJ)z@BWc(x1;mYaDD4@nUiQr0#44D;LB22zZ%6+m;HC7Q!1ng@KMx znCh3cT)->Is6q&gFKVZ~502R?ZHh939h|z0o`MOm0+?7m?Z#@)#Y`u$wiEOV$x?ie zw3ivew=h!*`SCg1IzU9BK~}xo>B7YWsWT8{1NB_6{O)|P`{EFC%cs^}jDyw-n?^$D z*S7q6Z`*kaF~X(*2(ala^#_Y^Hr2qzb#Vcp?n}4Kg9-?cZannhSs1jiEn+o4aYUgGCRHM4WpLl6)msYt4{i8eYJ(TAhyac>P6N027*B$V7 z1P62nOFJH+no4_wl3jW0=p-U(^}K^8R!h8_kl;OU|JBt|IEweKt_n4iEN$=;- zvj0ch!8T-dxR>x-d%gi?1bc6Y;5MI=!yZn^oWvKz)i}}sDUUA)%hoQ7Fle`*aKKpw z66{fUEX8)y5eI5Cl(Baz_0nYp;Tq|kZcx1>q1VU^82BiJ^jO0-y$MpH<}*#OEwN&(NB2cmqmWx+8?YECk8%{{!vxE8UN(dU z+yrOXSga6=*0@=VqV!?Rra-(muwJKQ33N<>{TlFJ(rJd*a=7p)!ft&^P_NDi&Ma@_ zu!9eoB&{71I25eFg}kObni>Z?OgaaP-X4Ehk1p8jc_}z|N#)?o+{&Q^7kFUlHXKd& zcRcjt&WlmMfY(|D8Q&;lE1w#0P=Th&el5+MxZcf}3^)|O-7~qjNKayac83*wX~!s= zI$eHwTETWIW>T~}E|?J}Ft=+nLN8NH7B16W2U#~APk;7;QO#M!F-GP{r}Ii)?Ry`b0|9FK_aux z-fOSxv!45&3A6KqaVnp@?Z* zXi_$I9bRNCZWi_gp+pRZaY#qc+(CeB4AYh#=*A(60>?%VMkmiP;6lLxv;s(mTus=a zu@oE-`@Pim;e&{DVp|bN^**oEgO&b+Y6Bf@D|1W=!UxuZ;vJq>%ZLekI%gS=1d62* zUmv{<(w16<$Y=Cgp(ZT7woR+iH*BKr7tq1IEjSh%&;04YA2)j}Z0F)mn zH>k>X<#79p%LJHuigNA72>$hG_?lcVUm(b z)3^gsSrcmrvOwNQ8iNGHE9`F*NDr{ z^%S8pDQ(o{q3p62MaTiiIS8OOOdmme3S4<$bv8T7RS-bBq=LY@ z0Xn1~c3>;=m87;IRD6bVTwx$HV^t5h=js7diU)vYP4vT9Tj~dZMWDfECD+)J!_Y?p z(UN~ZE8R!rd2alSoDfhXY?TFl;+<1<&s0%a^{12tYM>aMG3$Sn; zMdemW(zn@J!zJf!j%h%YLPM9$mry0|cAjY*-!jr9I-ETf+O%}wLTA9Ez2*hz3V9j~ zSUxMjR=#eDR2k29Uv{cs2sG;|F|bIT4yN~ZBvhbHLXB)K%pBOk^^_3p@M&BZ9%N(X z+ava^*oV)&h6O@Fam!t8z_+S7aQQxRzi^6ZSL*OWyNOa8uovJj??Apf%f2S*NoT*& zp4-t!ehaFmY=_DE8Bg_pMk1~Lsv{M{5(Cy9HQ*%n3j;5XJy~XeyLJF4j$02E2(%v_ z-ZciUIEOpzCqD0CC)2jc!9a*2_CboEer*BNXEq`4#Qh291z-cIeWA3#6`>6zggO7) zX+o_K;3hX)yd(V>$0`+aPEmVPstj}+B#LSEp0vow!AJ``qjRu>5)|&^0?uA5SUgrO zzQOAayBD88V`^uN46gTDf(FGD*S1N)dc)4+LQpxuo<`~sy1Rm z2sjl2kx4?Z2CrgE-s-vn*KpI}1l>zAK&gvvR?x!6WGahkDHtGC!q!xpX5B8IVE3|D zO@NqK`EW`*E1DLqVNLxtGbqa7=Bi%9I)i|{k9P(Ngz25N@eU^{yqG1R!_$HC2Ftlask8UnA_U>52Rs5mN75Duyy zfJ3}f$1RKY3hQA<52=(vblK)Ga&co4k@L1l$!=|kTGcoRuBK=*k*3c+U(YZM5axh= zBF@Tv0gs4qO7Sg$t?7V(o2Pf7?-00E;=1dt*M%|-gP~S;(|y;>A{c8rPV(35QnUJo zPWREG*BRM(rLHiywp}ik7ckJuTGDyd6spRZadIq_j#Fr4uhM@`k=?uZkFjg9Yga06Gz`vzp?G+Y4XMvG!pW@_d zKBy^hQF>V!R*|k`=*t-F?6LFvGpAL^q_cBr;AK?>F3T?-5Y$ehy@cGbt@Mw5R`NkI z2T&MGw`SS!Pv#n$7f$&`eOFPw%N-7zT_kx4hT;H|aqe0-uG}H>U#v2JX=D{q_QjH6 z$fl$v+&#E(=9NyX4};%QVGGq*Ii?EihYyoB2nJs{G{*bT0#L|eU4a)`gCVok=}O0> zz0(K7k^%t~rPZ2DoUp9AyOI-b%MdApJ8-C=FteZ0O^21k)_u9)fYMiy^vbx+2Z2W{ zN!HIQ3FIzJA;};OY+q*eQ69zJ)|6c~}me~x4ZRk#t4&B11jMQwF04Z=59v$*! zw=`0vNwnb!XX4W+rXh=-d&oDYXfQmZbq`Vk!{sy#)lrP@t0*5{PmG zGu$gK4;pZ#1|9XY4%F)zFrRU$$gtNuv7@ZkIwRSVHfT(h-hD8q~7oc`M3h4?eQp_rlrBYl^gz zA>uxsoEM^8fJQsBvRpvnP3t#hKoRZeXE0V24S-e1mLS_Azb;e_K!Ub|hnxVC=Mlhn zB?BlGu%@`kDWbXfp+ryGA{2zFd9#aNS2}=wNf?atpzpB7V4LH!p7lj(@)Qy$9t%TCpa9Ic7HSu3$ zeA#+>)Y5><)Xm6xL*&~5dGch_4~?Ekwgm1W$U$1eLwsI$a4%kV#F^V)9^UtXebz4B zY=lKH?GaR!!(%q`6F^pEX5O)GKux?1hmtaOffJEVk?8_QjLs%YGKGzS7;3vkr{wC69nwsYpRWCAs$~6#=D{cOEBU`2>sWvQHO;szt&qYP|H*F7LkQ zS=G6dVgv6xsIBZL7zsFc8JY`&pff~i1<325%E5|VU)fJLpCx@Usb}o2$Wra`c`tQW z7WS3-+KoWcj^-+hbVq){#`mQR>Fr+??b;FOyAXRg2k}YW=@lj{dEo$WE|l;H)`|ll z)psY+2;%|f%6;?pPZ=v?@$<+pbp-z$3xp+AgbLpSB`E76HJss4x_y4oP%XTyV^qCc9Dj zwlGMTR?GF08v#a1PDkzxp$!&)_q-aVfuz{e?^DB&TPI|SzHrcK;IxX^yMr}O@8hlP z5bTK01S^y<9~VCp2R}Z|5r>9IU-t- zF%IVNwf5koT9Oju!h;C-5x&;%&_7NNsm`O2rOf*eZF&A1Qva{7kFJT0VSQUTjqFaP zO%zje41ja>IPY`C7?xhWE&;IqOdl4TnzJD*3Oo@NW|k=-f^1(<7fw%VnKCLkSql|A z@!*V-{GYji&$4`&vB@j3Ah3Qs%>VBO@yclxl!0eO{(t+#v&S;*vBCC`?=Dzp^~v=A zV$Y`}{g-4X@6z#^5RHQ*=&e>YsD z_($$WDJ*>0;}I}%>hZvAhLgp3QzZZ{d$`4qmX!e*Qa-B^Y8imgC5R>2ngy6ZMoSrh zmu7N7##P;(DY`KtE|=L1;iO&-0HY3T`)RSD=?L#EqNpx$t!J(XIU0Fmdy7{cAvj~KptWF|WJTB3#8mozB;sdh z(f)+5zmoae01!B;5Nc4=fPWLB=@?!(N0T{SL2{%-`VccNGCq>+AB!Cfw!Cy8XJLeT zN{WATiZI7M9e3mVi%_35Hjsw`Z+eCXxI$Su0=Jl7WHd}UOSAlYuH6U9?XRRY&h!sg z2{9(GKgfS)wq{pXx=MS0ZheoRO}|$edN~m7JsnuL#ow_GZmV+t3yJRFUx$j8tl-$0 zd{Uqbf%8ay8=zMFjIrHnC)@idQe?6rPIrG4UIw_`DZaFy(Z9gSNE!U2wI{&{5I<%V z@c=q`d;&r|^w{A@1)rY~)+O^dq?N_ck9I%KL$_077`1j;)qTTpp|^EbT0*R}FFWOS zKJ4Fh`j>LQx$0F<&~R2EsH6*?^4(h%DAilEz5#ico89Hr-$+5PJ>#3q)_)y)^8v=3 zdW%C^D7b}NW~EX2-KEmECW)&e(S+`L3HReG7z(MHnAEWel?#?!$5EEFE`xqbv)}AG zG$va_WJ>G<4I3b$tJJ6%;~RNkt5;;@Uk^8&`3MDNeOa%O`EMcJPRZFZ=f3kw;MK{- zqE1amFie?GAF>htMi6znv(vU@dijNi8%{cn7WZ)2=xBg_FncM4kCYuIV10W<>{OdVh^1SzRL3a}X!5vZUH~aJ^zkS!zwPj|~EFF%krF5b?zr$yR`~k<7_(j*=;E@&Z=SD;qORs-JoEN6_DFvY1f6#Z~db_Y=+@QZMyIn$jof|+i><`stsB-rT*Y)^F6fzBKLm(nX~F! z-*0PrrN6e8LQe>GYL#qz1>61d-HS2g(v@ZMyM+Kpm5Zio9QT7H&F5xw(s#_ zkUCfxxrKmyCK=wumCo358=oA2E;3!7S~sjJ@J^aiY2DMDs&;Ts?@`{E!Sh|CenYm z8i;yX^I?WKDe;V*g)%bc=Nn9sXcVO?!`$8`c4}d*Q-o7@@le}R;u;|nY=%T%GNyjC|*$@X^~E>1ccVi-g;#B7}yC% zK*zZw#}+GNJdmHg-GOz*&_zc&Dr1!h;Bp@B#a-uupr+vXv{MQtWu^UFXT@Zf4FBa+ zdHQ}}dMoMk%X66#QWYw=YXJtG2+j;b`HRW&4L&r;Z_Baz^M1yBx!#o5C1bvpp5~l7 zf*~I8&5{cJCbfrUtxE50;rn zS|GSmIb~u1iR@3!l7IQW@eyboiXj*3s-FNcVs4C6WO!no< zCH=Iy^7+!rnsh>tf(IT9Ni=6yHZw_|Xo%Q_W}=1Y2`GHnL1%(S7G8-DQ0LyCk~@P8 zaGMkI;bVzmsnYY)L&RtkgNom$vUDZ23W^NlU%0YcC68P?1Br!Drp8wuRGAJ-!*uwl zHw0wVZghhj9zG?K;frEOi&H)qmnH`nZoMu}{o23blUY;~FB4zsK;{1|TZR&jc|QUl zi+&IUis~9rt=Db-N_)Qec7j}B6?vOxS)gVe2&xTvf5uZ>peUhZv=*L zvmYE(Mu6@TnvNc054xt-4jcBo5SKl$^fGblfRxU_oT`bo;8TWvvFT$+EOKWWCFj=H1|Ec zBwc(>c7OAb^w8pXV4+r}y0?O@Nid^|g$42?sezc&HwwR=5yXtL8UJqNHS^;U%` z*d>Yc=SlU4)_Q_rMm&jD4M3F8%1XEaCKAT)H;iMbfEOpwr7c;U0Nr=G;!Hc~ z?!s9PyGx2=?EaXYC}V(56^ho+u1k*Pos+vK zCsN`clDAtaouyMIe@o`p-BGsq(E-poKT-?cM?urqIP)?3Z+I*ewgaklV}b?*QnI~? zHFF1KWF-958U%;i$~dt@aX(U!?VNsga(sOH*;~q8F9K3C?7lq4!>@Zwza@B5x&|lL zWjLl;X!q6A&$cIY#Ri$sUY(NOT0aNG{LQIma7_8&?c=#Txk$i@Cg4H*bLN%lA=`ro z0~Qc{&t3u^T^84c_al4jPtoj21s7!xYNI*zg}VDGgAc{G$n!qHc+_^@J3qQHIXEyy zSN>>m#jhh4>aWvZOgG7xERvlC5W0PV&7FZw zP}KlnAs}oapJ*QI!O6+~{^>6`_Ac_~8W&0h2Y6`XlB715UAQ8DdWmZ@UOAKK@9z*h ze=PbvM54kvsJC z54oyzs|z0qM9Y&C&=RJ^laqr3Ry#-}Di9?Pj3y1XZ!I$9M~4X3gkmZWHSqg3>%%c_I^Ef! zN+)wJTf&dJr!4h|;{d7k?&cuf=1qaX>=5WwXrJBLgut=*>FBH)t;Lmk3#>djJ6g-j$MLToHIr-ZVwVNU(6TE{B26<#y${^*Nu%$Q+&!x&aLa@S~wV1pThx*gc_PDsQa_!I#(CGbxjiOY`TwBu-Sp5@#W(d&_a#H+n}ahNbkUriHZ;fv7Jx!C>VR+Q2^w9w z(*(^RyQK(mr=tU}fJ2E=12wIUz-sKp3H!JFL)1jQ#EDTOM^!9b1Vbz+L>zeAIsJt< zi(Atb%R#bUSt+MbegJs9O}tbT%Yi8O#%oFb@d=!lEIS#k_X@%`6WJAq29!nSMb(>7 zrdQS7(Os*Lq4F@kDh$Ilp*qJnu7}t-O+nuPzw|CRL(Vf1UzYBWTc|51(rU}WF?9*QucE{|&(vLUAQZJe-!2!e`eqjSnsi5wqtF4Vm^m{GgP09;(8 zu1l$?jIA6bBicWzNlezh#<{if2a{uPMzk*T?lleGu%s!u33QA8IXPJY_S;=ftyjnF z79e+#j0k|g7(jsN+?(1u69}Z!N-P+-q}6(Jx_vldwda!J=vB$8rGKeO!n=+H>Af>+ zT?enl7&zF>eGT+(m|P1qvW=d#9Nj{TqGS!0AM8h=LW>>c3t`UawaukfuB!0mwpcrv z;EL^D(W4h(Nx@PyAn zeyukXPq;EpyGZ%?%KVebwO&2hIq_zpgRHP(LX-{5-61b@X<9abxs^t#-Yzw*YEw`p z*a{=(6e`3`xs|CyN){vKV+)BxY?dhDbo5)=6#l4mD>7=mhBkkGWMYIYYB5u&EVcYe zn_-T`pMY!t`{B#J^15jVB#A5X?(+A+$?>!}>7{nPuc%Cc$1Gi?Rx-vc7%9PjG@e zMMy^-J~F2*(O2hjG|OveMumi8hjbQ*FQg zSKNzQ{|G4&R&Jt0gR_yJBSIJ8A`#AyxR~Y_;JQnXDEN*s7PpLi4p4GcH4~2;P^VBX zOIUkS_rSgc8q#`0n2QeEd{oh=*l*n`aM0-0DGFFD99{xzfZ<{vVshThF7ebWvqSbm z=UKESXMUf8k7g%qtnTO-L)v+P?Jh8up^1H)mW zs2k#5RRsrDSQ0&)>gi{PKu(NnAmVPJq9mGp-VN+bQDu(x67KKJ!0X0Bkt0>P{kYuD07PI z!5N9C;1Ww(!*7(epx#MY%ivvB3{`Vyp~>K*rZWj<){QABbyQES>&e6WnKCa$TXxTKZe(5JYHPoK;qyCTN1C@?@}-4VT&O7+ zRgKLGFJxb01Ax(mEfAfbAls8|;DBJAJwR`!yDYKw82!b`XkXO!2qrraE~W%->56rh!9D8V zwKHT}BIVJUZ=ID5=mb82r$$M5lBm*|Sw~TJjV~kh7*H}w&@Gni%utav>GThES*5%# z7;G6Pd3vczVF;nke$FIoE(+PUDX4~N_A(}=4$fD+vN8L$eFm@pZNXV+#JFMvU=#$%ZzjE@zGzY&ox9W4VQkITq)IrV)XR z$t#5pS1l^F?V;+?g-h}Krd~>1?`7XXkq0XyuE)&=>380oL4p8Q1OhR`{p>puZHO8f zgK-@~Q*h<$k_8!eS@xalC#d(lk(~r7S*#Ks?=x4;MVGOcLBjSWyPMw-V@Z~W9T75P zdI%-_1uF(W?;+O)qSDw^8tAg~gp?S9X!l-OH>{eGkkEbD<=`1$p=Aktv)NCAwZTB9yA$ms^z04aPGgXZB2`f{@-7k$ASJdw771 z$iWR59iknEP$OLL;*wSf)oUzg&AYWdpY2U&2?NzGTYSsP;3z&rHD;ZmN#&fV4y;qV ziit6Gvaw7W1x7oRwlN+sW4Ulj`O(B|@lJ4nhNp&Y<)eJq1m_&wjb?*KUG&y5!En&% zCVb0J08~9{K7%|C1GsoJ2;e%N?^515+$PMe)=(~)1dG8>^q`I9f*oKA@f518ruw1B z%p;yRGvPsb+6F+yW8fqMy3k<3??{x0IIZY7o^lWJantV(Zfy%8U3%!4uKg31+r)8& zEy_>(v0O@P%b4&67f-w$YSVVL7}j+cvt3ohHDO&h=DTlM-`j@TbWF%%P*>3CUCc9t@4+Yf z3JI-A(pv2Y&@>a{-HYdX(>l;%Jhh<<4w1O@DHuwS$N$Qp1N#kHXXk?dS7eSK>BMTd zRu9Q@v71n>b-Xr+q!4})I4p!}wf+O$e3u4f^<H7Ma%`JE7d)eNWpU1hbANRF}M$v`F~i!N51l;mx{7km}w54slT z$)>}5Dt5WEiY$-3dU*uG-F1!4xVw%GMIRF<~ePR0<(fsD5`{_)kKvo^%3WudQf-`ITqnA zB+&z8jZ!lE$rc<^hS$)l=vtS=V_o&PfT(`oc;ljR{Y6V1P_H&UnBr$|nI~D7z!T zDhZR_Gk}<0kW~(c3JL2jyBepgfX6sndDU4%m`vz4t7cZRI0R*qgtO}i1`;M&N}}f>1#IL2Z*T!8=tKPJ-=POMeYAV}2-E1H(w5+2MJ|9l=yymN zs1^Qey;ZLt&hDL{tbRm917P0wQGM;eP6(P{6~j*-g`5CxwV&!${WI|z@Lq+~rjzO= zf+9DVv=j-`KY*)TaQ{Qwf}1`rVx!Yf0EX$^L!~v5!>RX9_L&-N?Ub#GpFl}*sO(JM zH8^m}&*6g0f11JWS@QFM^C8{y!+-dDYPJIBodfHoXnBa!*4l&stwGZz{;asQYVI6d z@oBwG9gq|I{Mx1UI>wL%f7UnP-Q~c~OpnfjDkU;+&e^5nKPN5f%zI0o7Wx)(4;NXy z+c?-mvMj4#zmTE`$jld*xA%FoF{Y+Ey{zw}zR+~i0sF$47fv4?$v8# zsC4yG#BQk(EvI*&EN|+t?gTv9PIGI6d_JJd3lH?it%K=?JfhJt&bE};b@!}WF-`Kv zfzHSCyAx;4p--ojlRM%JH*t3p$h~VLo8-|58bnu%>-lb)JT!RO`Wv%38H3m!x}R_8 z8W9g+!^r6)GTTlz0HTeJ(=U#Yi`ag}ay2KRb0D4NU7|S2HBN8`yporot0~~wsP{<$ zU40j1c58n^88S#-Pm@}o$N1J#icbumV~&FTE+2L_|7)nt8Bh;cOE1vk;QZt~_D)F= z;f2HooVjt9GsoXqD;J6mefbsm0p%uS9a7ke+3mvLDq@EMO(nQHV_6O-6?-d42#O z^*%$7Og@qgC39c;A@_fCM)_YAT^bHN7&0cfIFPcQ2*e)XMoC)n^+7*EG2b`@knQQ? zG;P0G)}uXJF*AhUhyx3=$OEf5LEUg&+66Ewdj=owY`Qlg?$vLsig&{F#qnX-gm-omzf9(|J)JAw`)ms7x95Ng zIIHp+;VJ%lhsBqm@BvfwdvojzK`vxh?)=5I?{|Q`3Aph{Tix!$g+-rn_7`HRU1NO! zvF&?X3XJs}|LJ=_@7SdD9+y`m#4_oxxkAo3IMw3MO$}yp7BUIi0d~HMWxlNl8N-7| z+4tU50g4JhqMN;!sQKDu2~Q|n-PQR&eDYjj`ns8r_3U`OwJ_l#91eP3pKp-Kq&FFM z8X|c5NV_x^1_Cp;&@^ylzV7i@5DLiPFqwZc@|rm$Vm!b1Pk;9BWy(CFmIuIa`bfX| z?`VWHx41(jx;qQGgAo$1(2mYzs?DE^*K=*Yj+h9M;#hIt)~Ghv%Zjtw;}{xfzDnL< z@HG2DyvIj!2`9Q0dS^avgj*yegtFDm*_vbH!BouI5quj9R469#6tT#E`1{E}{QZ#} z#^ETmo#&r671%4~VFKAwxQxEUcC{WNtpoJc6PO1Eyk$51 z2jt+qcl=wB9jFWpuDG_*Z8964c|P83AMfq*;^mvyu9iniHnTZxnIkEqWw~SM*ZeKO;auf-z9lM}&eNxV0%5xg5t(k_%jDe`kGw5KcU&*FDX>y; z$5w6{bQ};X795C+wGyRg9+h1X?~F19VerV83l=6BO>H~G50IOPOIYleoG;WBo9!!_ zX;t^#3C2jvyN8sGHcuZBCMV>V^JGi`ta%}ElG4apV?u@-A&wmG6MK3xbk&>v()#tAmtI~MgVXr9U-G`)7pGn1 zgSaFFVSyPNY@8i+9PO=DjBr`*k_K0WCa%1VVbS?&r?bU2-`T%`3Q_)%05U#vBYpFo z{cqANsIi;h!Q8=P>_C;}31jSonsfi3U+=uHXgdq@so6rNBt zz*J%F^h*in-1`3wxZdQ>+l$E?2$3orJj`@)ucv>L6Wy`+803sz3O)lXd3WHy!Y2lt zU!i@4o@bv`{Uia-3;fp%+50|&0XAh7jJ=SffK>=Wsc7js*@^oj=Y$Ph8^|&s+=aC0 z2SFfi3PZ*NVSNNmeUR!c1+Csn*Q42(@5#N4(rV)6;MW_NCdYixGw4=$YfJqlTD zvPaxC7+H4=M_4=FSkCcg zOW}z%X~sd;-X>P5rs5ril29dqwICfw1T>4ul6q0))#(wjP8yStQ-rme8=y^IA^eKM zuQ<=>AC`gc?+UR7_bNtbb3)1m?`lANu-WWsk^1B2k!cIP(Wb>x{lQX}X(W!&fz?Di zH~3*i60J9M1B-gkB>veKhWojDx-WIm@4fCtjyM5sy%vNzU;|bhr>uLr$gn_Il)w|% z`%<%UNu2t3i%#u9Oy{~7(sI96s}!&Z<}jiu+WpCaC|2xNb21lXdGDlwV*S59J^cd7 zS5Yq@DVUS4iL??6Z);Rkl|+djke)JqMvQdLEs6r(k*gXjz73ILZY<*fl>te!iL;cV zqXfU;woRI>^1F$QiWm5l^#oXif%vklBAfN&q1H))ar(s}DM)r@cXC)%%O^#yxxT)g zS?Uf+ltUido&CWa4Mf`67OG=gL%;M3-6M%@Mcc0OxTTj62#XqW>F52XCDi5eK#`rI z<NiN-^e$!nRJzcH1Ut;DF1G9< zR1?&Q*cj1e7k4LAj{u3m_|T)GNTjRh;A&JEnSOB<4B7usFWQ(gfaIK!5J+pm%ddoTiLQ0fCdRb(Jx&qAeS;9G)TH>0ppPbVQs9c7J#tv*}4>e zN-EWJbMAwvvn0|%%Hb-DKBHX*-wtBX;u3M+W8*CHZl)PYt6`lc9?D9k-@pAo{@Z)}M-Cjye%h>KG+p9gF7Kxd8^Cb9 ztqYH|)CJL@px}s`NBs~wlM8_>1>UeE7o53Y^{UAjeFl~SVQMlwYP3av?f366B~2asnrU!3C$s&;G{$~U&qS=`=V>eHgRw%FUZWXESe2Syh|h;RTqI> zU3=KqJ}=WLXVjJpR1#MJt}qFmNg3!# zh`}y1z6Z$8_im#l*yZzAXM49nJUpK6%`JKAdVq335{9enGw1IZyKYEYfRm-q#?H0@ zX<}EPdt9Ro;F5N%A8luYRC*3*`)s#mdr(CzMBTkMzl)`@-Q~69Cmo9y#0&~6RU*vr zbR%b}t#QupCHn(D(=5$5hUP4w?;HqWKQ@Egp7sLRfrS9PZuN0jdmRQfYWq5iL-bMU zC(r?h=Uv6iclr6L89WZVlGi7hC2AM!A?(5Q5z-{*t{`d&h-wsuvtZTPm~_erHZl8( z8w_ABhW^#=1VGJI1fb0PujtWk)UXfrR7VB<^}+yozjxq$m&gLHLYKL*b9;8LaNC#g z?6LT_fzn-;_yR>u7+_J>KT{lFHfHy2sfj?qD^i;1&*o_t0O-F=&IH6w%jMC3SF533 z60p=iq0(>cHEddJ$LKoV5#)7%z#_d!+3pQHKeDMyzhE=X4D6pJYtJKTZxOU`3E&SK z@5CZRUr<;3yZ}m&Df#;0KqB=JnqOJgVUJ~Q31k#R9;d)5*;paj`Zj|GG0VuzwXt)n zSfV)kE}dC8)D#+>+=+DI1`Z$;#%p78zyw=kl6vf71&QQ4eFP)Jf^W~}RJLnh_re6J zx1;y)%(|i831JBIj_$xt8oWjcPq7tV{KJ1FNAn&2{jVa>+{@z`3TRGS2r@;BODS^^ z7a; ztih|gUP(3zLPK{=4JzZ~`16+KO3*XvFr>@SZFd}VnlDZMnTTGnv8@fYiB^(d-2r3L zux;VHR?Gq`KkniX8|u5dbp|4S`>e#Q)y;IeY@`ri{Dm@&eQc-KECBshMj>8Lqpq5+ ziYa98q4X$k;VyLuz)WHsz6n$+uMF(VjVLZNw7{mk=}4w2KwwRhOSab|54miiE~%9D zMZ2GuBxy*8cc0paIuOg5AFEINtkCSpG0Uv?tt`V=%|Wcsk5EmmFXPQ+0Ks8DWu@#2 zQBuAoxWTOMj!QM;?$NAc^oN}-39M`>WRQ3G3+%$ObV|etGX-J^1*12~VM|gJIEZQ? z?nhhN@N*Pt6#Ld7X-a$1maoUpQO05h##WR8T-KY!;s_zWH5ccmPw!$_ikMFO+T2A2 zA)3<*wtR82Z@s^e1}>%IQ1Gt4GsAI7mdP9QBYAIum4%kT&JKREOCX)W2F>=jkl7ky zAjR7qGes!Lfwh~K6Tk+Ldv;nPp~k8bZx_IJWltI|ZZJyY&9=!(p}1?*gwXvsHmQ>_wdrqiQI^>ZLt;w+T}THKnlvn_jqC9Fl&!mxl$N8D{x#B^<-`Q3|$EB z0{9?HRj7M9_%ht>pYoycd3+eAv zL?8|Au#DycCt7wt7#5})t`TM=)fHWfWk{rJZM>|`1D%v^yN?2`)DLWR4z-(yNVojv zWO=+g78dPB>ud31NlX8OE)ckWZtM$b@^uo<=#kj02fx5Ak1_47NNaA zBqh-+{IZ=mc*cB zP-?^-U5+#>`(u9&`vV9>Bi~bX^z%=c2m{{0!3g7 z{*d|)%7_!STm$m_1yQcptu4}h{w=e+GLDE~dcNMA@Z|?rOyOa~Ad3T+dOI|u*ks?F zIQ8fKC^?Iv5JFGATKo+fFa#W{XKbRV-tLJvSUx{JH#j4)$TVT#7<)(h!NXUW;M#3v zLpb^^*P<3hiDDBdKn}J^4F02jiO$(ccL6@mnG{X`sL z(+U}Ew~rl_mvp1#q}xN>6-h@pIc#n!jZFDLU);O4iz*3T439w`(U60Bn;@z%deD%4?>g;;eFXk6;`7O-C5W)w99Zhz4hSAxVxF{EkUV zTTwV4dnNEfG~SM=N%m+3g==^sIP5^}mGcb3a769!-SAL>e2ECCdn#l!gH*%V*|5+D zASGcLg@aEcCx`?HB?GsjStur%AkGmPMJJ$%Z(~?IfAuk-05_;Y?XP2H2qJP{4k#!+ zcNITwpJAAyNO;A*#^ZWIK~q?E?||gbyoV%D5L5uer68$ip06L?>>X&K4AdJ&nJF?u z0xa&6;H|tPJ`8ok13&++H}C<;2`0PW9We?F%)MjE%K8a)9LE>VaCAsco0f4xLk3I> z!xfQneSLJ!4DWmo)_44j-|$gmkK;qs5*N-?;chdORS^_WhZWn40+N%q{?qO*Iq3@z z&iwZOba0F_xGAzJB5(vhFgo|!|MS7|Z!$!%Gu?ZISLPPSbsLo07GtS8z_69Lq~_*_ zN&_(z=Xj^*HYxOE#kcO@8u=SNyA zH&1m-Hi?jdPK`I!A6j4o#9+EP7H5FsnbUt!$HtE77tEah?OW!&>s!#OXqtMZeA>fi zeVPd0t1|C!f23dmNnIvR6eiMWEi6QAHY#BX7rUsLNPn=G^i3UP6OM~2h-}d@1XwUk zb^ov-fd|MVX+xmk4Ov;(a?S!4yJJj+J;Vg5OqO*W7amB|yQQ+lD1u&3OosR6_Lw+= z!JfS)bC?-IZabc@hvs|DDv~FGO#}vlYvj_&s}1H)ilD-4f&ty_ttrs!&PKoS08P|< z!Y#VJJ7@hb?#_rgf~j(_%nK;%Sw4J}?H$4ywou5J8<*B((Rk8x>wA@R1{tG8>{)6z2_eM&Ufi6O#Sju z(Ee8@xZ4;u^ELv68R9V;fdQvGk%$8l>n>d%uJ<+^nU!bj)h_ynOe#?4j*PjW1u?&( zgJ?j>>`5n-O+lN89AhV)0rGeA?1vc#_}rqx9th$pJ$WzlQ|ZKH1PZts{jZ~cD?<{S zFg=El7ac6*QQ-sT{y7&3I!U9v54Qk+5Gx*x&~O`xb6G_U3R)LpJx9iMW0xQe^u?tz zLcr6nTz~(5x#EYlr3iw0hYR>2)(rH7J4VBzrR&MLu+0#20|W!;p~DdA@fX%?fjXY~ z`;>|4;9zzzCxG+1{_){TZVIV{%S_%K)#VNxRerxLq);AOorVNPSJ4`$1MDxDO?5*e#O<5ldGk_@F=67Qzt zuV}<1QGjcvOI(%-{O;K|u28;BY&xW@5!F$OLD0;2)BBKto8e$&efT|& z>FvpMYuj^}ZjR0oNF!Y!wgVJ0OpM#9U=1`K=3Af#B*J+cRxK}yJS9*&D$+HaNVFT) zD2WQ`56B1<$Q5?)QH+N&-ke8uRQOXiULk6oOdNLS!FJN zF|A%whgoLfXIb34bWzpR5Q!aRNA0DEx{3-EG$nJBB!e{FiLFYT^IPnG%FC(E`F~7EZkQYR_PrO5U+U1fO%&N^LMQD1gLN;1lxEk-7>x@)b=&DVn zng3=7K>N1ymUnP{(z${mOU@aZyy&W2u2=eb$BibPZE-0C}oeGB&3_-bR# zOj9qMJ}M0Wlb}o>B51vKB0kpcq^l$_8{u-OGtt{c>V&({Z40{ge6+hM=sKsNFy*kL zNh9`pTD7>8@wiJoRbH{)<=LOs?a3kdODjz3Me?_)R`_Y_Rz?D-*C#j;>yu@>8EPdl z$4;kGTn8f?RHh67s?g!d|B^oA0}w??2GunReLzIPhlk^M%R<=eB}fxwycuZ-v?bY9 zmkf%7NNtT~>nPz#xM6U}T;rTMYm)Lc-P9ItJP z$YUpGkgJ0;+k~y^S~%|UQto`|2qsv7u4Ymw+&TmBhZ&)~qe7A}dg$murNvds#}0?g zw&M^A^DoGOJ{jtDA8r(z!+bx_nXTb3*nf5=AGT-Uw{k4=?)#hOH9%6|MV2zBeX-6h zI@I!-4;ZZ|5lv&f=8hw`a79mPZ@W30OpUm|JLn4Fpu3nOQ%NiHN>S(m&L zNGr%x*q^m{35iw@#k?Y7Zc6p03@gWd*RV@~Rfm89Sfu5ob=I7MB>L!sEwGFg&YA_C zqorvKn?-XVw2ub5ga>Oobq)Stu6k3ZUNN*I2LnB{F%_7in74W3@ot$uq~TI5M5$F! zBxDQJdU34@jos|85k@gPmvDgiCX-B%BP;jkhv!GFjm|c5vCHkw0LNqxn@`usxe>}N zlkYD<8iR0i+<)Tti2p_LXir8&MU`~^2c;aB&P{ZgVo0lt$9Ii!R zRCA|FCYgMy$*Qi|H`_T^B}jB?3-%lN9+xi^5E9>zxA4Ki31>y z8vS~bBf^GCwm3lsG~Z5m<|cdQ!6igPI^dx$Jh+JVG&3T;GUcyGiKxFKC!+p}q=@|W z>{$_Kd)tSnpK8G6Nec6QS5^D;>pKb{HK`L`yQdI*X!7DSYPur}cBmKC*UfZ+cA=;rC8v2u4Lc6kXmSTfad?0pbC^TL=w zT4;d&f4qPCON3!>+tU&h;iN~v_Xz6 z>{%F_acG0mD+qz_YNDoBPrrgsm_eRt!Eu21&yTK<@`j;;If9btN^nlM*%`U2l$)Wy zV6FHvHvkayTVfcwkmJ2=W(27k-PxX?`qcD5fU9Sd39#;P2S;0I#c4|_@QrOj1*z5L zxh%uJIqD5Bc7v&Gk*=2mmI7tOnG0;H25)KlD=z=1$J=YzlZ_LWWUso({hPo)okK+4 z-e(5i66=@gtF8jsz^EpMqwdjUHlpyxOHxU4L&dLRUp?+^@aQ({2T*_oDNEr}W&)Z! zWm7OX@-laev!F1?c7q@U9;|RgR%}e{?4UZaq-=ERl@brcD{fhP+GcLWH5b<$Dsb--dTt_YZ@W>PW| zV^9n@z|Z(BYbdE*s)DGZT|;<>H+w^$sTeY|C|x@JdebZ5)(T-)4q{0q+e;OMMcEpF z2aon&b-5eni1x-GJ`4yB`O6Rsb@~-IBR(n7Wy{;6-9mR;f2EeQyJA5g zn+p&2+v4`J!EgoL*8un?P-nDzERxQ-Axf8v$N=IMdL#gEJ)Z5- zQ2GmPjhGL3w4}Xe9vNm3y5GVSTb0{7XxByVFK?a{7C9Z3FyerF<4C5l1C1>4l!yqG6E>0o4LUv@ccOfWlUZ)jN#%QtH8?t2j8I7Fab-Bta3A_b} z#++_<)ygPsPJkEc*7TY_$B}-$h1D?mn^+pCc*;Hq86kb_itR&VS(5_XoE!Z|>Mt1k zmtZi*NDQvKuq=QddaQf^FLJs9ah-0keVp*rTO|=p>cVATOLkcLscHg-OpzZ7z)D1W z`NDh&v;)8KuLNr(c@$Q6?;r7@r>Zda${CaeHY zIIv=}!{<;n6#RPn%YNZluCx3Iy0Gt?J~$s3Uu`0qYt)D!^t7_BxePT(CPHb<3_rXn z8;usFxfq+LUtx+B90+ZkhiUw3rjpi}{Df%79E(nb+*aG-nXM2&@PS!r!?-2=2!XQ7 zJ4R4oPxvJ0{q1d}TQN`i)?wVQ!YV?mR)=xl0L@C=F_xr9dJ>Y9Sj9~kFwVd*>t}L> z%~sD{IQP}lU*2X)Ul~oXOWnI(Ece-dyV4hN1$gJd2Es5+m0uovkArW%bM|PYYOhDC z_1ekuNS=g6M=Z42;(vPQPe;L+@rrzZ%V<3;13YspRX3r;aIaiy?Vv=#PR@mTB*!h) z%BrtBcl)axF>tqH6eLE9W1}sg(_`HDRySOtSyA&-ZxB#Nb8cRO1NQKAt0r})`s|EP+dQO z_a=l;W#zLVK}sSSqdSP;T}Q()*TL+M(A9{elCT}u5O`G}FN@NZdkG)rW8Hy%ATJ$= zt{(15W_7#6DO4vvigbyx`sV+>WgoY;_4-qKsI- zB$vtrn$}^lyz_fv^3TDAsA|SU+qZA|NV;Y@2=qdAQ;cDYTOwq&^dMBXgO1>2LAC^Q zLUZ8uiOYt0g0+K?k-uqMnmSP<6#XE_RC71CG9BXU4Gh3^FOtV%_!@(GlGo6>hMV0- z*`B#G7l2-v7KRjzOaPM*8gcOQ#@`3>`MZ+2DXe8QRX%+LBM~{|8X%GiN{j4eoI8fbmjvlB5lS#=PPIF>ItfS9>N7H^@ z>Sx};R5_0j@^G;i&R3YDgB!QD6x$&4kS-GlmZ*q|ga3I~=k2E{WkVvIp!IGTvD z1O*1ywzyv%4C|WM&)mLEyDFK2X#*ZMM6AyCZNZP9T#NPxWX zx0SvC^*Em`w^#t|kZyQ};D~x2jW;0zTy0|q>A2Cz8i0VkB3f-)){05dD!me=S z!LOW@%s<+c7r#(bI&Yyhg!T6i4SY!%KP6^t0FfKdNt>fWjW56*AjA5@J61D zXVv{}cTDbOX%|I=3D}q<)lWmfS1^PK^M_krnh1g%JH>Qc@mO{+DVqE@`o1V>nd@QD z6_)=O4FV{3beFbg%2ZKyaj9Kae)#iD^?ZF|NZ>&7qobP^!Q8u`HT;K zHloAN9zXK)FGr6bKK_t5U-0Gwz2V7+e8eY@|AtZT0IdqR0_VaiNpKpKeA58Hly!lf9%RT5!sVAh!teNeuw9n_P)ORjBnX|FtKzb z>hFEd;UOF3JRqxz>+zK!>qi2xpYX>g9-IgdI(XzK0L6;(dZmH3_F)`L_O^5uj_PU( z?3GPBD%JH^y8!6@$KO|vA97f1>f;a3CmCTz-}m(@A z@ro{no(pvUC7r+jnC0Q!*yY3H#mA5TihcNW#5w-B$h5_=!QXwtx1V!qt5<{W1^@j- zo7Zz|U_ zA)5)Z;dom-qS>fdt|qr>=xsswpR+C_2Ho0^dB8SxN)g8S3wAt^81sTr!IiEU1$^e8 zc!{6;`g%StBgfP=LEQ?r;$sHUZ;@j3>}5c;a^bUWl|!T@|pzlGNdcNW7Q$7tyP(97*lv_y{dcS>lL zy)fqNO^ZG40otIlTnrcU7i8Wha=TlYa$ z(RJNsAJ0fD3KAj!(Vb-D9?~Qj3~nvLio%qadguVb=1s)&2y4Nl{Qp#^PG`Un-yfah zFA-txO~V6Vd#Q#Fj`0f^8F;@>SP)3){k6vr&p-Y?TiW;e5#Q>>6MPZ45kd*h7I_!q z;@2lW!jFS`Bx&dX8wQr-Wyq}?-5PSDNOt-eUl_+bO_^@im{p%1mh-9m4M(PgLdexXCl=#}mx zr}_R z>xSg^rlIFgA=yR)9+$grX;V$q;h)oSi$@wl zEGgKi^W0(}w(Lt|oFACqTX5X+r@|d9tYHlMep|qUmSL7L4JM|%p9lHW*?*$$YX!WV zkSXf-c?a$g57$(~V`qM-4N4MO8Tx!uSw;~o_AD0I_Ln5A<4F7U?dZQ{X3L(eXmk~h z_bJ8lN@w5MXD8TY*c7eG!ksq#r{{T-PlO9T5H|2{?U?}i2W%jJyl(^`fz$G#IIy3d zS5w_*x`R&X#D2n!5qoHeH)EogboH!N^XSb?Ri%)cHt1WYtZoqq>W*|(?VjN)1DxHH zQS68T`sRU(Mp@oNw$IJIgA$`f8!W#OvgDC)1co-GD!ZdYat%a2%~vf zeH|GdDPQW0pV2?JF`!CZ#ZP!>68b)1sL@%mmMzNlWxV+iko{|B;|vuHQ?4Um9NH93 zMvRUdG+vLjrLShw7Dl1rm*Efk-j6H4>pMVlMxQ_a8PBG8wXk~?@kQKc=&5+4OK9zs zu!7K-$Taw|ZB|{AR?6c*T5A&h3W9hGwJ+bz^e(eNLF@~S}0X%=r%=3`|WO(k!G?wGsY+MSfm)@{=( zNhE^Phk7~mDP0i?3;$Ly5)V}0wY{eUlAY>XzAn2$3J3+qMO#Qv^L;F zkwkI2?xU)Akn|QEOF4tTU_7IMM#h&y#v=>wg30x1t!>3OU$8p>g&r>}ZN*3EO}j~p zybjz>nV#UBX$t$amye%Xv(C{sKjq`nK|#sfoU$jZv-zSMtFyp{9hE-6V7bpa;wpz# zrd2NlKpT*qH&~1envyC~gu^OeB82^gh8BDEfiCMq1I|af5n6Fd@%pkKd+aYh*N0V; z+HcbLUM;glY7$k3aGmTA%TdN5aHh^w8PVs#$!USEHa{6SrQgA$0>N5?nuFp;hgZT9tsyC2~pKk|XPpIGt>eJcX#SmH0i*N&v4bmS&1o&azMWx-Z$~9Bf}Km9qHwQ($07 zHaMXMPX*uzU;|zZt;3>O0Q9Fq|N2fC5`yY0FVQaugzt>-hD2wXvB=B{&X;iknkgmWeWwg%x!?HdtV?yNJ?Y8#Ro>KQoH9Z6-)6)?)FvmTjY`5=oB+zMTDCka`WoG2@1r$ zFg#4if@AX1E-QjFceA9+M$1q-4TOSwZD$?!Bn$=vbfU>=_QHrT4|(m9uUja+MI#YZ zu6@H@YK6Uvo}I*P#G1ZXbF1s;Dd=N)uXaG{z@kB~J%?%b-i8{n+K?1jjX~WlPAzx? zj#)%VPzy3HIS3k;>Y{V}*H_=7bDbRWuodimFKk}G9t(JyR!g0*&(fxBG=F}=NmwQ< z+G|5Rz^hjRe)wYO4|0p-E9rzW>U!wUBhizJl@XFi;psn`XX8N{@SJKj50lH|wU2rE+MBIlLP;YDJ zo(-UULU&B&Q(Ecv8_=~pPh1S`r_2e|)P28>3hBrf!#TfpEU&zVyk_9|pt1SBy^ zCdZ;6%jf zab|G7Qm~}SMYj=ZD_Bp)zYv*RV9n@WK)S)q9@G%%wI*yfKxi6NxTe0*KjB9^pY+gx z&OH|_ncU@FOj6dN`=@o}@AJbTvvixz9g+DeD|4|aIkxOu=2kx88GjV@rnNZCpI#}hO!Azg#80!H{5=VT+Abb_TDTJ~ZK7*!0+=kk}p zqN{$|Dq*~q(@a0I08lm078hq(bOF2ei2v9CEmh=|H8!9tIaUqW+L&T)qV9lb+^6OQ z(Q@h*RU$7$t9_LA5ga7-hS|VQf6#>=@D8n>25oc}>a|2FJXO`uHFOk0zmGN$!82l* zoQwAGV~d+Ws^CK>;FC`3ZdH_CRN)b}P5$-^K?xj7sKpXqhs?e{8degE9To2@K*t)R ziG6M=QHZ&q&V+ca4$y(Aj!NQ)VSyc%%SFOv4A+Ds6su}Q5iB!tR5SBfT(3M?V2UtS z)?40uqB||Z^jXmJMjngNzqF4Nz7psji0j&9g4v_=?H;_>v3CQ)}D-jWsv&D}JSL2V+{ZVWq zf-`(Te`#<6=Y)$SW>`FP4OVbMf>S}80ZrHu8Br%$PKY0k^vGWI5J-rM<4g(yD9jYMpg}nGq`MD04AdYi z;We;G;;h9EmVKTGEI+L()5VX)e^rB#cE3Uj&sWzkWBIwM_3jv^C0cPbq5Vbg+;sx0 z-`N2r4l(a_a+cwux#mCTF{G~C%bX^%(xjVxtWzLij` zt0?aDr+g?ZW^mJ81XnzQC}~S_>Fy;8n=veS`%AY6MMDLO%)e0Dj9wt$nkXlpJgf+* zHKbx@6QCKVi|%0!NF&ljFrzh&yP#VI{HSG(@1X;;9jnOa0=h{?qi1}R0mpW@G`&S= zPvI_c=ZoMTA2b`%2KO+2#SGHRYBg-#&jU^+h<-|>539F8}S7RX_Tq{z>+uWCOX<2+aE|%yl+SFUppvi@JBledI5b;Jj`vuQL-M3~g-%u@yRm;oD`nvj+ zDkQm75~D}{?arNEHvdlr&2mWXCE;fNdd2R^5X^;@Qp;92w3-VkyBAuEYv2Nw04iOQ zHgC6XDf=zWN-xlb$qS~LP~ZI=tluMPcCwA5jf-M}w#-X#ps@5%w?;NW)CS>}5}}ZX^2z>#5Was}h-HRu5Z>#_IOVdyB2vEO^Z!x2+5S^577( zxVLJlN`s`w`MyXodPSNUA!tV6kY+z@mHOSnOe#et(?d_hqDUQzx8JPvwKaFQRC2fv!2hMQV-9y;M8ldx5FAO2#so zNZ7Rqj`F@*Q2{WP)ZlEGm^3c_AT+95qb~gy0Xzl^Cj~cU`bg0z&1D+gw3-+kurgFP z5V4paoKeIngQaUTpH+B*GzTd##!cBTOQ!HLLc=)6t3Cwe0JW9-(DwA3X_Meo{5BLQ z=&J^)!-aepHJmL{0|IMI;;t@>IPWEUV}+IF;uC)QVzrsW%f##J=%6ZHIM=3=97o6C zPWsKf$F<2~x^MTCTtf08x`s;|J_6K18&#C4D5mC=;+;`k(*(O-%?ZvC*~7&g$D*1o zxK>+pp%ZJg4R%F$zi&t~2iIi|?>5ZPt|@i|%JeQ~(fD-M4J>qwW;zlRD7i<9p!w69 zJiOcV!8g@aK^-h5eKnu=(sbb1 zTK{(N6;QTm!xy@c@j+^1J9g(Jd)qRccm)>mf5uEhNJ)1F^M^^aG8vXp>_?A(_`4GM zw87@J?OZN5Auf?XM`9$Lvrbmg1PZt;Ad&4 z$o`UE?m>ak%ey6^vJ=<0E^O?!{t@EQ{kSX({y5;fC?EdMe^evbPBWHi&q)ocZ#2f(Hng1>; zJ00nyj!3h}U=HMPD(vg}b7y`uy0ZC?@84DMG8%yzMA<%!eAxF#mnjc*bboZ^h}u`j zqnEw0_s7a^-r5wE)x_L?$t}He`ir|1En^N_6B2^-+nzc76N*G0z0@+HHdVYedm2Iw$5!TCLp^GQb^^Ka}2j z(HoKQ_u`c7B^fSqnS!wbj+){3=4AJ+35lk(w>46@l;ogHMw}vP<+mn>|M-4chnAt- z=TZ8G^nJY(>^Z`B>8Z&HK_#)-E=j=lPiAa|wD=-(q!HsU$hS`G_T>2V7v%PG@ntrY z$}FVl*ZBfB2cz-sTO@EAkG4*KK>=Mg+nJH~rMR!J8{T$&WxTT-!hP2&w&_N3l50*XAGq(r*^kN*c*r-0iPE`!$;_)q=`RT|qReF$N^ zC!@)I9v$6hPCMiWk9T|H`}fI`NL3=BJ>b_6Lavp}xyNF*%@05)a7qKeG%K~}7vVV697?8zB#Y5NmXSz`tZwBn!;W^8q8ps}LVkwVT?WQAKc}M`lPz-i98bTAG#^tBhopFhCHl(eYd#(p?|=FHt9Z1H@mZ#0RJUWpsD4L9JJ29-Mb!Ht3kCY^qcsRTbJk zS5n>eU8o(@wMTGWrJlY#woZPgdPy@?;o6u*&1)t*C9gXBG6xUCXRub1uEQ1zgfd=C z1XpEgOmDA{1b4PM7wj2*nNy4gQ>d7|EhG;IE2a4;OS1JqF!EHWdS@n_J z=DV!eHz|uuVd*T9;8=RrIaPV_DAq;le-$i7;kK`}!WP`0vi|2sbAEICMl!FkR(l#O zC%LbZVp7LJF%I~N+-MLxIXN{H$&46+7OtC`cWPO8%D?;!eUYng;TBd(JlhkT*Ce%+ z2A+)m&8UASO9=9Mf&###JgPfhIpC#gzc3_JbnLB-`=qqvEQ;=(gKM$HYQpVMOpUev%5fk0&!{A&9Pa~;G3ho4+4|^3Kx5cl@3Qu$krnABG<)t z^!$qA#*W7cI)$3U%`Xu1w&myzC5~X_9n_W}(*_%O)lEd_x*v?rRpj`sa?k6><+e8& zW#gp509|n5_4zJ}P+^=5E4;WnADw$$$D|}!6S!I<@CgHyaKbk!g6P^4MsAzR>0N^f z*SVq_9O=1hiB0v=v4pSBgk;aHtMK3MSdWKMgqOy9x2NOL^$dSsXi*ewm(HGk5!hL9 z!AVfCk-XZQbLr!$YRc_!Pk}1~u8XvbN@6jju#A}B0iGK(3c(={sSEK3i}8f7PdDdO zpVN_(r*kr5F`y#mGuuMg5#a!rs92&*oK42*OFX4y^H`uLkk)mJQdWGCp@Zd#i(9$O zRfkkp#p(&B5L;ANg0s_KFPM;|m>S`EZ%&V<#v#*|5`)Q?nj0+@zuvtLK(9fGOO5oJlMNd|AgmrQm^_r)#Tg!K|- z7e4N z{j{;&IdFi};dBn~dpv$_bQL)B^2!UX2pq}Ugob8kwKQ|woLd|Ac11{Px(A~|Mtu-N z;q}kFqym)YtjuT#mz4OZ%3*Mf$DE}yVApFpIya$g3VXLt$<;$|X<=T$tL`hrN4`b+ zSdt3BvSw$5+D4jP8O+SwmH3nP(dSP4e%JbV25=b zXpa>TiY(-9=yqoaKyRaf)n_j0a0y)};)8H5w|#Yl&{d5>jg(~a1J{6}5S9`*F*8md z*^>;irXpQ%583OdJT~#WtD2BP5gXGDJ_f0wCz^9aUGsh{Q1_`vi|^sT5mm?YP1uHo zz5+H`G-VzH1Eur>K-s6OuMTKwD@8V;D^ypQ1~hd-9KgB9)jI?m_odI~yDmaT0~v`Q zAv%>yg2=i0(~OoW9MS5AJ~Ai{S zwn=ze2wgD$EgnV7UM@+7&@~JvkSzk0yUr2Lf^uOYZ?T~Z?E{%x5td*1PBtHL-^2u? z5P?SGw0Or+G&6~Sfwt2!jb4ukdu?rlO1a?|;Bw62STtltA{Xqb za4$g6c({M1Igg<$GZR~I*3lz&Y}T9;aWf9Hvs7kXauqbLWrg`q4wHjLr(cX z(r+9dMy&v0ZvF!)Rb@aTctN|wqwGL@_Q3o11*fa^CjQp=u1<2nO;`9WoOF4K8nc?` z23e9RQqdhGHwW03)SeijlBV(Itu!+x?Jq(=t5M^;s*7ksllQc*NnX#sL*!yl4^+k= z#4`(FR_H|aHE?BB?*J!4maYHmnXBVbg=5${=_LesKD7WrE_O#K8zzbCQI;TnO!o$M z*eK>;e)@lMXi#d)9H9{OwZW%U&YfVWeArWk#|1^LDFM82$5wM+5>HR8YVc=3R(&gF zx84@st-SCxzX}AlUp-gerr!HzcF6NkdEZDyTh)1&2ij|Z?G{xY$XmY)aR%S>jP5g? z`n445P)n3N^ysj~PNY&FlOG(46w=jUG#(t!7(X0FUxk~|M)mTzdpks|{CtL9**fWx zAN>-lX`U@lQ|^~FNBK*$gKe=-y$t2ol&&0{Ptk7H)6Yx(+Cd;1u2KUgT#U&*Y7vX8 zQX#Vat!-f&L@+UPyp4?H06J8cl7PX?FF1erP(#ud$Djf!2 z=qv>C1Yzj7IRDL-x`U?$=?q6t`o#DHH;uF*`CfGCKwn6FM``73!blZOHe5s3FWr_3 z%{Qvx(VPrKsACUhgF8!8~4 z0saLE_wJOQle8rNx>(tw8Ut@uo1xTTXHz}B!jbJd_OGX7vehQf9@>8L-aAj;`|Bs~ zz4zq3|G->B?d2j2_asAKIP>J)FP^;nw@=>vFHhe4@ss!do0^Fkuj;3N{^Otj%lH52 zzyIg2p1kwnHF2?8$pS)c9KD-!G7!fByIX`~UM7fA%kb z`-lJhSN|`2@BUm@b?tlpE9>Z1HBKEvLT+`}DOcU@f)J8i9^uA>{-Mt;)wZ>53(1mN z4;x<FOG5l)Xe=87gmmbLHA{4jOE$c<(W?bk_Q(L11;g5SH{pn_&2*BnjR`*EYAWj zK<&-t*{=a5QQZk8AZ2p%=h%AewDjIR2WOO|A z^~-zLZ~yS&TeX4L>}i9uVULK#6ckTSj!u&OtTL1sqAx1Fs4YtxYmfRRD+f6NFI;l( z8s+XhXf;$V34rR53G12t)^Ht?%E_E(@0VvTqQF=wlY0wa8^tiT2Ba7#(bn=W<87Vc zGKL2bPG>zF2MhpS2crY_Ok*~a;1Byhy#Mh98L2tORLmqGohEkKS;z7ma7{3;6*Mu< z23lUzySW8pH*-d;IO?S+L|G87V0-R80|Qzxhi|R#v(~XNTWlp3HtG7-LWl0Xb-@TT z$O)9r8yLf4*fRbE=ihW5zdUC+Gz<9+k#1h`Bu9>tHDJ;4*UoJ=&d3lEvI-~l1i8xG_I7aw6C1d7`_ZnM%P>PEBx`$ ziTf8oi+3J;`wbKlqQ|RIt92zoK@!meWT^6e$2)i}_24j&(2xHfdj+!hQQjbqF>`(8 zn@?8mimyU)xW7Q%aTS2z{h9BV_S>7?Q^S*kW9c2eJ~;m;WG|nIH9>|Q92aM|ncqA0 z@el94YYttsCDqT3Z=mtI%TvIR?%$p@N!2;q2eCCaqOknX6ru&VR9o{6X+k*N{^rQ& z)XrUHIko#AE!{t{XfoO1a;IjFe82SOgRgEz0uL>dV9VZPZ+UePjt@iO1_DcqAPZf9 znB8Ss)}rtJ?b|MQ_H7<&HpduInumcwXv%pYwi=-X_UWI0kWR67cGr-)zup<&L^RhK zcYA&0TTlgIY6_JWSxVCi)cI^Sr>PMFa z&?Yd5y>wj&JWh})L8OYL5Wn(M=}_Q&@=9dE=cQ&YH$AJ-XWjGp*JH=C^;$)Py9avFJE+v0%-;={58^pqfBM-?IsL3J1p z&RsHFO_D!?mDY?cgK#nl`no?K9Z1v{XzZcTs>OFt`QO zHrXGQ7u$??vmd5_YIf)dv_Zy;ns<52t)_uP1EL|NY7~uXcd&-uJN(hgUk{iD1nFQb zw3$=~=~qv^^zyHM`;^qctoBi~s2wq0G-L8RG7{{Fa~G^7Ta0zcF!xkD@G-=o*> zzrjjD_weQ*Jkq5)oPEbiAo0f3CfEe6oR80%LWmZH@bG@L4@G$L#F}QrK=x1DQ`SCO z`S!pMXVHq&#&o_iNXtqP#ZM9_b$*gw!Q5q>b1TY5+tFO5iaG%E$PZ?niBh%hd<^4} z=~163anfMity~cq8|!y3TC@_QN?ylwbpJDKy)oEV6j+z zSgaTUXOWasgd~*xKN*!!7beJjDw*@rU4#vnD9sK!BOEyT*OgP8EQ)=_GDiE}=A+#^ z8e68#jPv`KU(y05$@dihHVA~nLzot9x%@)rnY~mv*9AZl0o7Z}Yz|t5Z<2|%pO6bw zAveD=5FI~cWGb&2lsrU}P-KyWXk9WhS5=5-Tr{FC#xo3*_ZE(6-s2-E zk^Q4P`YU}(F?pn};>OE;;hKGEtDE`a`)|I*QXa)*4iocWNoq{ktFOW~t=r^ftk-sH z+KrCI+iH!{iIwPZ%6V|;N8iUnUsEZ~B2pc`KkSQuwzN3jzlAt?_1;H_cFg~3#Fda$#=>;y1fDlm{;CqtZ zlu!D>pRTMdurO#dW99l8g!JGK?;Tv8omu%4E~+H<1TCp*7v9~(B`^TgxrO%Ldw1^L zRDx5?|0y4yEy5W9d<7WYUL_Dcwqf=iAaGfplZ!TYNz4E35BX;29Ym2fii?SsFvYx@n&cEQ@;FgTch?*!^K|1ecZ&kh~s*9$7WU^uD! zy~>XUI<4rgCm8M^w#=3GHRxrN@ z7UfG+Em$_X0S*%`t!7uGy2ujeSsLO1M#Ea`@@P8bkN8a~eTu3&b%#H&JCG}|iamn< zb_%0DQeJwlJ~6X$tT2w;b-vF!bF-ay-WYRhji|T`X@`S-MTU7Mfq6=P<+Ao%)c%8* zR=Y)(REv%&C4DH$e32lOqFM#3W3wm(V;=7z(=okxKP}~U@avM<7Z$>hseVQ%4jFCf zb#tu)0YKn74vQ68$dlh=GXd2>5ea62J39(=f{C+G!(-#l7I60{p;t5hk3C7fRl(H_J4Z+ zb`s1gVpGQ^RPVN-^sRgYL4he%g^#d_K>S6+AlOlqV8qrt@UaK)G_FP5gn4j7utbO{ z0ZT8N)N|YTAj&MRI1pIUMdxfx*F0~6AGl2$fC#PSOJY1C3vgWMQsOS>mV&19P9|`# zOHQC@-FNTvL!J#6^~94+dO_qw%p^_-{GXkT-?6{Z44^&XAN{#ZHim;PxHKw`5|N>U z$wR@+@0pV$>qxA>Y%p{E`=xU$Gq>zuu;qNHEpiD|UPR^uv8>)6jNu;X5`GXvK7|Y$ z=s?Dy%IK7-MfIA#c2zw?jITeqwEw}|P`-Coj`1;)d1eU~J%!30S)TjYv{7UjaKac@ z#Ed5&oI^Ul`lLBk%g#*pXS*<$)nK%8@i0t0xf{C550x)U0ip|SskY3c%HUzL8_j?@ zmH7z6wMroLXhi^#BV_+_J($d)DG`M*o(I=-SxZe6sWdMcUdf6L9V#Db^I0fH9GPzb z)}#!IK^e+Vf^qR>LFylS0V?2y_R`aTjlFryAK7%%OyRb3qn=+HbMxl zBb!xB|JM_zkF%+l1`G|5@xUcPmaunu7OKa*-n4n~{QA99`yntE;AiXMZVz+tSqt+6 z@n8AqFDN`Bz%rzQobSYObss|k0v2M%{F4Q9<-md~5>9T+G}%!X&^=+$2;iXfk3Ctn zetu@|UR>uLH(KK&uiwA@<%3HQ%rLEDlNmH?(xR4oViA8<$8FZy=Jx2V6jV{8K!LnB zr*0f$d0oL4mFOVt9o9eYI6BAKP&BIZ8f=F?!ZC6bnX1u6;1{bPuE#>{!aYOW?i=nr zL)!H^5BF`OVu`v|xoI0%MC=1~kOVt`JY#>-ujHIC8k3`668M<@4YYoI7J&9$8~HDg)7gq9V$>nw1b!uW8IzNEI$>75?*nID&rK|J3^>c|>&k-Kc`6DziP2%gJ3z#^3I>iB2jLhszagQj{2mC^`v*{XU| z7`KMDRt$E&{Msf|?LY)MX|$!dVWF9-n#2ud1>5v<&sz0n%f7^^&)KX#HR+ETVmJqW zKG9EiU1%M+A!I8rO9Mu44qH*B(DaDKvJA|H4{G}OmAC=Ar4NI>2OIKNznMw=i3C-l z9L9(e-`p8hDrLPCK8yJA3*-v@3>O!uA%xZ*e4!#QG0H0s{>mDcx100B?AbRl7FPeS zMzedjFQXW3&jH9k$1ufSGvZb$*W--I0>UA-MkDm90%)KP*_x?Z6wNS+ejblvG!^`- zkmZi>78}ZdOF&ZsmNbGYh6f%M<*9)@(m3BvLvi_mIS*l%hw(rF!qkk@c`qXWz4|eJ zw#K&;K3e+-Y?qRXVYztYdb3%(&yvS>^kc#GmCA&fW(w`ZcLMuZD!&uXg^2tC z0$mke97-B4&w-kFrYyup(vJ9gj~=>Y&+0C}MA@iXHqax)#R4G+tPWdP@FW{wOb=@{ z1M`=x2ucs$+Fjbgfqo7}w}8wz@L9YMP`&@Ya`ZiDW3)|F?!YH`PF``*B(Pn@Du{v8 z9a5A2QcAkfro@U~u2JNnWXG`K!i3uO<-_;z>2}@Gm&)q`7O{QV%0Ap893v_fHA38Nr+}?#T<~* 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%0AQ8_IJm{sM!=7O(VuJY!m%VV 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 diff --git a/priv/static/static/js/app.5c94bdec79a7d0f3cfcb.js.map b/priv/static/static/js/app.5c94bdec79a7d0f3cfcb.js.map deleted file mode 100644 index 163f78149e64bc29951b4b210d14da70f608af20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1658468 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

o&~Y&3nA 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쫍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⁡c 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

Jc?)Jr7vY0>qSrdZr|DJ!+$(Le~i+ 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 Sf3(%Tz16*U1PuvQN&f@3L{&im literal 0 HcmV?d00001 diff --git a/priv/static/static/js/app.def6476e8bc9b214218b.js.map b/priv/static/static/js/app.def6476e8bc9b214218b.js.map new file mode 100644 index 0000000000000000000000000000000000000000..a03cad2581e5778e348727271bf6ac11c0e30edd GIT binary patch literal 1658859 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�TW{d&zMieVk|?+s$97Mm^~$Jx!9~A47C8mZ=$R$ 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�x%fC5G#S6X`BgaX+;~eWq@;P`u6_EToMiY_61A6%!D2YwNGdAvaTh@=HHh zHUfDe)qdw09y%sVSsB-g>`rEuD1Fixx-)Xzxb=Vhjix_8?NRxJ7=X%yPsL9FnRGau z#^d8BPpmopL`js7{uisNcJ;*+f3!@x;Fm#mpo?dB!J6g zux;i>DVq?@!uMh}_J2aPXYc1Gd;DoDEnMue8l}MqowEX?YIgtmp2m24_P{Tt8anCA za~t7iP8D+6F1=@DWs&j~`uEZU%huQB&M^vyO!%v5749!UAr}cvKS7`@0mD6hz-X5r zTIOR?R&X=z$v>|jm3Z%HBKL8&ldsF8iKw)%71W&iw_K1XwiICwrKRl@hYWn-nPxqL zB>VAn;qUOHe7{4{`qG6KkTh2}prHP34~5zQPuemWv)e*D8Atw^R?I2o3qIIc{ABZ3 z(g1nqN%tmwyyW*QFo-8dUGXG*3SOt_z*+Gzz43qijoKiIK7+WNcJ*`h*rhTy-Nd}9 zz29NDMu>`t5+P!pSI0i+`ucoDml9)4|dJJAJGrxE?D=D9_c z9#KF1<GrO{z+EBav4%(KyJ;t<27c)0wBVk8 z_ht=ja2Y9rsCsUxZ(g`FoU}R>i$rDZs=FSNa}^*Lzf>1T3hEM}QF`Oke_OC=_81#f z?%!?5Ldb4OZ)5XFyZC5a+u1VkLK$&iomDNwXjt%i>-9uSph3E0cXgia0W2!}G#p!K zbN(5IIJq;Oxn9@}d|E)3xo=6V`C#7kGiM!@@4`s5&1gHa!s%G1ANMI43^QJVFzZ&j zS))qEj-yLc+vj#l`NhukRM{(Mj2EVy977x+X z8b@1z0+cy#im)Ga8%9oj|n=xfKmp3o*Y*9y)TZn(8?vJTwrBe(bX&d>Y5H{_vEjB zBl|U~4ZOdwq7*fh9Y`G;8QRV{hJlH*QRm6fgNbaYD0u^>7Jn42ap`htHb78%8E1dM zX^!~J8Bd$68(l%zmhopMI=g+;b7^Tkd822Az_|nDnHlLNojw>znq})qnXPE#M5+Q$ z(1F)#R```HSW)|k6uyS0{EnM3Me0fO7rh@Qu^0cOi^gh4AjC92=1*tWtGca`m9$Eb zu|}V*vWc5+dahlR5EP*4Z26SlP{Nv4@=39SV-BgcldIk%MLP2nh%C3zt5v`0= zqWB!Z-H4yYX8ho|Dw?`FH90xiel|L^v?;(~ly(D{5A7p2%L;Roxe0gYiC>;^RUo&1 z{XyI2C0mt|fL{ViQg&yDJPsS1a5yyd){aympz-{)VzrNh`&5pM*J{z`%Iw;*CN~F` zgdnVe>{Z7nN5eT39@@(XzYF2c*7GEfF?PK{pNZ4TuGetjX%g1qOVH`|u$Cwc@>9uw z>v|TS+S~8@{`R!YFAeDqH+-F@luir_ZF5OsZ8Qm9f35vgYy?>$5Laqm#(~q-Z>?l3^!=~PtTm|_d zTeJqYAtwVXX4^cf&KwoaAg^mObosJ?JPb6cJy8YxpH1bT24$54>*e$o=2L|szZg!h zRe9=gouA<7d+~vpV<#NC*D-tW?ABN~dVkjUyAa|TQ2FvOc@LPY)N+xQ#Rm_m)}ajg zH4PQYe37HW{W7p+Y>4;n4?Lg-D1S~LSn;0X`4V7*v{7JvBrv2ilCpcd?Mjia#a&^f z+A8s@-WNcD(lZ@P1ppk@RIblZVk}GU)7z=zK-Xz&);GR{W2DN}#@3VBy1fZFgR$?^ zaFORqPJ?*C(-Xrs9pfXw5CiS!Q&T|lmU1g;|ECaAu)*x4y?_>OoE2eom=%84M6Im} zW+s6!02CqdQJ!)Ja06oUrEjUF=RWGbD*+Ll)oWO3tv1X~Dkxo2z4ief=V}VO+3wyh zgSg91g?{j52di5lgMCZc8dP_IStqUv0)(i7Sq?0@ZKZ*Y{^Z8B@BZsE9FSm6%N|FQpsl772a8aB^l!D7v1mj0D`|u8>&!9vLi)t zHaBJ0QqBhq3H;1r?m7DeVxy_jO2J6D22}4cxJX%-@@REVlIBgOSsD4V94o_GcM^s@ z<5$~{!*u(`Qm34ST&Hux2Z=@5Qa(vq&$W2r1dN5=d##^=;NALd$^?0t6s+By8hh{( z*pd&zGlXz+%Px%p%{ZNmjp83I6;*#ReX>d$Q-uM3iWkWikyWrJn~If1i6`;u3Z6su zk-q0C3YsR!sj4ldZhiP!vT^vV_J-hr>1vOlP4DpzL@>!ce-a|*pKepEluI`2wIw${ zJSv4^eTqrt+@;q+B*Pny=UWKep5<8CJv`k*aZ479;erv0OT!G)5?aZ+R#x=I3_U|r zbP{sXv77uUqG3!Wg{MIW>4$6*`rPFgr_j+}c-{dzHGT=~9M``=m%?bi53V$pe9P~I z@8<^NFu58Ctx0_%;Dv0<=GxrtQjLR9b3=~1fprS!ZvU=Kaxw+`%#vE()=Xv9zV&(4 z^Q))Me8U5O5raM|1eVy)= z<-2RDnA^iG{Di8*eVF_x&q!^rx&!%HDJTcY83A<%l#5aTPb( z>^C|2g<1$HBR;sFaE6Z5bv7@~j+=8#%=x$;AaH}R3r+tA0tB{jN^;JUzZ(MdnIF&+ zxo;@Wcnku&Y#t6Qug1`tVo2_=a$qi$FE~#WVM}_ddrFr>AXvK-K%4Tny?=){hTuz6iAU)E5DvQqi=f-iH;3Muz;HSLSe<1 zz#dI+DZ!F*0PzeS)Y3~xkX5Y8W@FMTk{3fAE$lzWUxUe~82zs02P%6rq3j&Ljmw5p ztga(d@fez7is?Q7*-&XI;%4o1g1Xum*l&n;^sx40*zes=Ib(pA3`(~J(HR!E;I>8i z%1Hy!H(tfU%1`7Uy+zH1AxmGMVjS}uuH|Dqa-!L1$yvCfw=AhtGBJ&8p(*MYaT8Fl z;6t=f^Z6D~0y$j6asTkNy2N2|Cjy*5Til!?1T90cAO7fwy23)au)76;R3AVqK&z=Du-8;HYC7wP`!ZVAx1vxq0s5aa0{{qHR50$rvLts0cu z!lXjO=^rW}mo^gJGq0|nU?Hgels*SRTGK?UFD`9<@{x?^NphtLKKKj4!-zn&Ql<`DYwQ z?{Wf_7>rp^LeOoP%OeZq+GISt@g!MS+Aq&}j6_!DVzBEG_@;n$4%}uy{jpiKlEtJP z6=X@TM;2s(FA`S}(qqtvuGYfrFZsHPp|vo3-S`{B?DOLZm7EpLk#0J4kw{3$#n@ME zkJ~qw~B}e)n<*s@Ib1Zg7Q;oCrhm6or8Cmnkw9;O5TfVco%XiKmmTlog@QlLCv{N? z7k}#m;2Grn|4osXRtP69j$r;(phET&Du{eSKHFC$X!7Ose5`K zQ398EYe)RjMOb?pi?1v_S8e%~IPM)-43e?#f)~%pK}hQj+hb3re$$>@hS_n2Hc$)a z2cfMkeg*yOGK7vb7tGg~(m(RtREeIHwfUdBjy6_j`&x-7q%WemaeB?1q|!xfAegID z;y2drT45AI!}=x!hnNBi8Pl1WRXd#VisqWu32dhh(h=)hElx~$9)(o&h>!(*)ZC)ivex(3De|DXxB-J-Fj=v9x7m?b|SZ1-7#W{jS3|8h=^-J`zCtg}Xcn*(0kU(els11@Ojs zvTv0tR1!V!1B9iv^&MO*McYDD3<2Tz-I;lp&j|Orq}d7Pf*_#=Ew@){SVyd*n|#); zHb-qfnPd$C>OP`is zsMoox81J-hVFR^iEaA6q*@P}d$0T8TO(=c_7)fim_o?|J{??v>Vvw^VZbDZpL>UQZ znv%1N@J(QRnXmBWIuh(1KnuVTL2Fpgdv zfu8ASv=~y*=f|6~2A26muhs%Go{r8mCl*1oLefMgAg6Aqn>WuF6|>9G(Jl2BMxmoK)Yj~UCoZ6hF=Pgj%G5hW7@dJeomh- z0GJn9u=+p#MvQB5Tj$%@gna+G#V;!Ff~aC1PbQ%wpHx~;SR27cVn>1fBO@e0z*#!x zL2~UdlT0^P+)#&m-81Y)dXrB-yE1#`(#;n+t<}ZQ{dMgStYrHP?GPH(E)g22{=)`H z8PYPBnB8Cjz;>kKrjD7%3`V>aJ#}NlciymOM))|uyl4TrQ03ZvEf7+|b0y4>tlj<| z2+mBq`TDVtup}B+Qg_D)nhoIDfwH;lI*nV~aTi~Lxgf5@v9)ahac3h|3K7SM+6fje z;GbK6N!Nl=y4#H3X3IJ5FKF;7w!TRu>NkrV&^alsUyOq4U90naY%7If>aOxri-O$C z@?dF7_PB5YUS%;o+g$}uwU!J=psmYV1g>8;FgFZJ5!Fi*%UB33f+^_4xIsfHnp@HE zozfKSd6V7|@kZO0Bpfr88fKj1!2s*60`#gU)w@*ruSE5bqCy6qWH1tYVQ%xbYN|v z1OG8;(YaSQ=qK=9D}rGuzAv7+r(}D8#lubk!hrc|2v5nG&QUeE?)n3`VdHb}QGg|B7__a%ghmI{7{ zAB-kTm<#xPcI#vfH;!DVW@BYtO&m#ko3)nU-}z#RUS`~{f##oNy39?M*e<`O(1yL0 z^80q~vo*8bL!H+ncJg6kkzHH)ov$56VmNfrP4+FOto*rM7@9W!nY)1oSH>|@ zcssdn$_(l^vyl~Ik`$+IA^Nmtx8AdB&!JAE1@p92p<>in{hQraN@ZqIwn@H1^R1vB zuDCx|ueKPx7KsNgwZB5M&7E^>5^mEWAoyscdk$U=ig~j(!7`<0oPfT^Szrel(KL{s zpipvzqR2)rS@j~-eWahlNap|ya*q{O4EuFG`$SW(q2Fz)J0S7{10XJoiEkCfhQ;|c zPRAxshRkX1Hd0N zEe_f`hK_qycemBhPBk;PI4JuZuG82}Z{2#`vkNw4HIe%O3KIn6+M7$Z_(z=cf-%IG zl|e$`FiPQya1+k$(TIUhH?^77$qu8sD8nZ>(|VfRKY;>&NACB9v-h0$Ii{4FgZqAq)pRMTA@yQg42XEh_h=2;hVYy*9;ABx3 zac3E2e(*i3ynFm6#&%J71w#>j?MFYv7}`bT?Y1?xb^JE=_T$#pB62In#rGXyfSmRFX=i z6pyl?)${1FtsUeiLgWlJ9im#@{DLz&f)SIUtNp&K>+jW*n%UIwz)-#z=TVi z?sZjM<-W%p3P4P*d1!T$7MBTYUM)I^p0xy%{YUG0vTqCWVNE^O`%~SVl$_5ka%z-3 z*<#%q;12+jbS2AQQ`YUq5h|7*R%_(unwKfL_@rc5`u=sEZ1-$urq*~?`|0g1Zxsnv zcx7UE!0K*AH{W)#zUcO{h(W>>d>mO*lC^@>B0s-20JSR4X^x8j&B&S$lY-lpm9A(( z(uFPEDNkT=m0Vx`<5e_(==yP$vL3PJlW+T+cgZbKtMnp3e-GxN?u3KD@V zJku0(qE{d7(y1>>>9ZOVsQ1Td8_*P@Z+7f^2DXitPxBJm{`z{`_g?D1Mr7<_n-rva z)_i;x3$lk!(xbwFUn-(E;gS9z7DPVeG}`E+5oqjbU<`PF`% zL$D`sb%(bG|H$B3L!M*p+uJyRrlV*cOKD%^4;9O!8>+3_Y6U(p1XHg0(ziOhSB~dB z6Q&WTlnuRUZu`|XCRqTiRVCXs%;Oo+dE%{lW(QM1IGH16G!N-h775;=(7dxs!73{I zWZd_^jC(Io4sX5r zCLZNv?L#X@L>~O1?uS(+Rn(V~53GFkubw)un2h^R;|uONt0Lqq0zJQOP~I#ILq*a+ zH%JKF3o*)Er9qnDSQTZUrEE^{Gzh`s_$aMl70Nuu+m1f#{x?AgTM(6ck@v*t`tukB zn%ztDWv;5d>(jnYHv_6E5=#$N@{j^_Q0AkW=`n%YNaoTTRoN4I!gSO`f#yNY^ zZjy=)6Ia_ZxO(MyD06Tl7hi>`F?8#{U}mtvk+0S+rkGs3g-{rFGH1tWpKz;T8O-#3h0_7-wBtBT!2;5^;3 zRjgUj!P#C#*5oL$z5gG0TWGiU#1=8X-NnX`nMlS=N532Mpax;txa8Wug;75n|3D@H z){n+t*1^kn@H7yU{S5qw>HreO@Ho7|y51WNE*)6JCh#&6m9s&%$0fCCUC{!7Ut22th8q zyvqBzlU_K$YR=lX(kEat=y z4(AMDr+NGcb3gsb1Sf}JwiR9Nvkc?DYd^YbB*B?n6@1CFcFbAPvHe+uA`0sy@vM0J zJ({Us&`5}W*}L~m69Y3|us*trFk2ZV|1`wq&IfRJ&@hG4ptxA+8Q5t^&u+9X$ z2N*M|F^>_9NDJRYd`7Ntjzh*o?dXLso4AI9E(1(sAc6mTlK{~jzZjW0BvL!VuSD>R z8zV(#OsrwiFI@7QVuIO}HG=MK(y*^`>)u){1A5|of<$gv=UU)((D#maR^8}K-Jbd}y*GC{g}u+i`zzJy%&yW_VdiOE?Ac==F2JdpZw12GkcfY>2+V%F z2yhmyr}0V%7C%@7mK#FQ7lDMM)xVSfcsE{>sk_4@_>ymTJlw{KSzYvW8_&YzIJbl) zt)1cSd6M^Y%#WaJJtGB2Ub^ty*y1SIJp$|0M5*Nn>+IN4(wtlyCRx%r!!S)MwUAW! zFH)9{kp;En+EP3Ciqn%x##H?qDNCWwdzNyBLD(wLX4Lb$>aJ~QE*cA)^2f%l)9-6M zbs=V|V8=X^%Vxpk-;)Ush&(ESK;+l58KlZn^UhbvUGnQl=34C#sQU74`-hP6{OuVA z0w^3JKvQl9ek!#yc~Hx3&x2ZO@0z|*ZWm4Zl-f^74Fs9Y9~~+Taff6N;>1b#uN7V1 zR6^veaJG?MaOpWsAF3e~aSm5QB(r$IV!aZ^zz4_n^&b+3|B>95<#d(Q6v@hQYER08P)=#%Al5xgb0>kJe04!fsTHe-G;%D#+_A{l zw07F<=e6m(SXJJgGu7sVSElb2#?NaLQd6vo#50RRTZ#PML+D9t)@Q!x#WDT{V@qE# z`GJE4B(s^yz!q^CLR32sw8u2Q#i!{MM70Sl<@%^Q3Zc3h&tAj`HGum&>ig29g>)N!t^~z{?H&unfT$ z0iZitGXSRiA&B&X=KE#x+US04=~d*fHl6>o^I11%ifDu<|3Uyh!%OeaXAN>z^FQ?> z*(w>`Ax4)S z=(j$BeoNE*ccIsm@BR(&H!0^f1z)532=_tAMZ`S)74rWpltV08fdv|;fxMN!2K0ZL zxA)Cg)>3@)pravW4jQnqE@C2E0X$ekjIz&k@j946hzsl>ghD8j9NpvCf~L>qagdw| zXK^>8%E$NvE@jRsGwMpHD(xz>VVMDv(b(+Q>+@ARX%g&meb2I{lybb3$|h6JLipL4RDCr?Ryu6iRemGKcRDPNRY5sK+kjTJoFrFeFqJZz1U9>`zCWz5 z-|>3&Tv}veW1(972Ngo@M zHORuM*<7|5j|sPOB2wk_OldhBZ78+fQjJJDMGxingPjuC>7*7D^Ohc&quqSgQ~pth z(ipnFnm{nct{ND8F)gRz>FA~>pvo+`9W3>4@kE#NYbld&AF>IlPZML z%n$$Pw;#`wI$PqJ`)5?Izov%E&wFdM+}-flu0bQMv3i ze*L+H{M};dF5YKV)Jqn##Q#(EiOPPaf zh%WLX-sXHCzSmrfNcyH|r}*fS;Z)vKR+VJG?4<6Hf6?LQ?~v)ccO6{?vp;31n&2-z z;)mrvPLt(6VIIkT5jX#rAMviPzukk*HR3tk{N+cy!w7d8HeRmf{`$k+L1^u;VrqhQ zQu51>c(2H%Y5eCT{ZA0oPs}NK;x)sBMt%7Se$)k{{AU9$<2(EEBYtLt+&`cRCXdaR zAMRt}fC(-f_ylu}!j~WM7E1nB%f`F#llxy<&)Q{vnO4y=yI5a-cJGSV7yM@f-sYmb zFF)d~5;M$yPSHdiefbf;YEdeMMQKI^=$9Wco-uciiH&tM`pb{_es+WbJUcR~E^znB zmml%NHTLkejkjp2M!vTFzk~VDSuqjxMD#LSVWEGHbvt{gn-5s09ZV>7o;xw@)KODe8X_4d^3`saYXCOk9g;vIWA!niiu|r|A0BZ zlTSLhr2hed4z~~ZcKFXGcsc(EjJPBo4lL~X-M_S+^-Q=RIgG`>xqrZLZ`okE_5BsD zivRNR`5Djqvpe2%%7gaBRgT9B%h59@=l4)Ka$Em^<>*z(^ZCyhcz{Ri%g-?Z>!_7P ztxIGrJVoi(_RsDeV;CNrcb1EJzx)J`5z%88(Qp3%5&aKaksk4KkfB)2TlU)}zO;J9 z?TI+v^DeE51nz%%_I+k|l$33zQ2qmUNAHQ6<*c5D%W>r|Kf4bMm*Yc7=V z9saWsFF95B<>&a7rHFmA|36M9{wo}xeA3>2*xLUG9G_G$60t}UP?p*Ii@U7;Dct)1 zr_~N&|KC5`ov((o-RSF9B{u2ng^qmR*PQGI1_vGvI@AE|4L=z|I zoL}hhwYLz4eZmL(M$j+UUw?vcw}{fyGvY={O3}d z6vJO$?Rc2U`AXUzt;0pUuwQ<}c@E;_JOA3MCkG=P#NpNf#@ryGDyit~BI9YV= z3fN?l=mO2n*Fa#|>`#>|GO5I$lu*blk+Qh7>f2msfKXQs;%4YwfSl-URc$4$93v&u z)3<_M1e0*c78oY+&d72@ah<6D;cvincj-w7yStWt>;!{>)KZ1`iPzw`Ht?)(tykJr zg1GMmZq(tRMQ_Zo5xD6GZd4rMS_Hbri?!5BajY9o*b8Izt<3>SI8ep*+|bq9<(CA8 zv)aqY)rFf$yd8R?Id}5$}S{*V!edU+uZItu-;K)G6WskrNJ-#Gb zwW#`>Z2KQCN#1E=^=6Rl@kVL2J^fhQ(h3tgE<$<)d1SyZ#i4O-pQ9I&4DO4ZTT%5s zCLahn$5n_+ck_u4Ju`=;7s#0s`4#hPYh z(ZZ*f9QGQTH*@+JkIZ0zZSFt;&5RTBCDHvT9$PbKMz?pdF!Z>e6cI^d-AomxTVlqh z9+3kxgIseNe76Lwx^r0sK`uvS=u55!Mi3;BLCEvj9wGJ(gn(ZODeHn zi3uur+TQ^$hDGY1=-R~I-wi5_{Y?Rxh)@uV;)uw+wH)P z5M7V=aUTcX9X)){5v^o}KsZ^gLw;D6vWp=L5A5W9Jf>eDZ%u%vVFj|SbAEe(uGush zK`EcCRViN^g^Hv4yHYD`bm>=kGCHB;$>Hxx?otwot{YvFtD{Uw($k)0+N@s)k2YOE z4z1d-`14yJX8wej0~%@|de#3~rd1Z6Gu=LE4Kb`F2$-f;Mr4*{bngoolEfPK)Cqp0 zuO>OWsMHfVA76>m>U?KPxft8z4EGLyTx>3>L@^`Jy4^U&_>S%()fV_@P7*u;z+vtZ3-s|BY z3^ps-imi_78+C5P!6I5Eq{h*rS0)-@3K zzp1h6qrI+y7PPKmB3iI<*}-RY3~@H>N+L_Je;2cIP_1njbnpS)W0^d2KW1n(InH0F ze+NQaF&@{yT$CV=pdo^$LCj|78lDVp#h00x@2*$Vcgx=v>1z0PXXryCu;WGiK6 z{#{4s8&MFOk%_V6%JOPiE%d0jJ#GcHavt z-EV8GAiG)DAbIz?4=cc}9P|Hd;%{BK?n7T%owbdP2F8fyF}a1;-SJ_AnoS*ISpb5Q zR8tn;!P?n2$p7~D+rSc%^hsv}58Ap7Dd$a$BNZKX0{Ea{~x!pf&)7-+r}c>#tj}Qx0AO2GeUSoe3+WX-2VvL+iIox zRJPa}`KL>U?rY9Y$}&5U?4&?cpCUBBIkA}FYlQx38@BPgCUkDr{o^)PlY;G-ofJ;P zuiMBH$M43%(wuFBy^lX`V+99pGKO&AkW?O-e{zfY+Sg_W!tuUwSR_I@XUm%T=PucxXREfvn z*U*4Za3ik!$SjMp?k-&?hkP!iZvUc#mwB1WmmA%Z?J6m+ny!+D0xd)W%JQ^Yf_%(2 zq37>7dH$+rF3`B*;IJ9LRQa~ZR*|N>(tFT0PCkI}B?Dpabp@fY^osK#AkeubTW_iWS1By2 zcTC6%EqJg$L<_yGwYB;ci62*hJ~T2_>@5>Hh+ka|#6MD#Ju@;l2!=adZJ1GiNi&UQ zvP!!^K6yOaQJhz6sgm!HvF6!+v1b@S?zJNe&Y%rTTRb0TVKK< zpp&tka5vD6DS}MOHQw;`*fM}>Y^j=xCA0zPPBm+uy=7bIZ+6ACwOLJIJ6jYt^a`vj zTHg0o+O!}!(Xa;iU3dA~hAqHm!MbQx&B|hNv%ALCRtAgZYy%lA3OVxa{UU8KZ_`Dn z&jP762$82(CTmaqd$Vk=#M-E;0Q@Q2r^5P%T}7RWyp7QocquCZHKLfv(XrCF#+w|+#Y<~g|8T4* zlEJ5qqBO;?pJm}mwn0C!Op^z@uFGzcO#oV(Qw7~($d!S9(|q%p zPI!I6YkrPOU43o6^o6kwN%DAkZFe=TYLuvnPtdPKZc_ok2~MEer441Oej;=nl(|V2 z{?Qn!y371;4dNxa!-GTJ_I+JH!(@pUB-;cpqtXw1C1|6mZEVcq9pZZUb|1g|QH3Ay zA;m8rzyEdX2`eV^-G1^eZfx43cG` zH`E?KS@&(*K)Tp0D4PP%IwjbN25<>d{Ut8*sMlNkwxb3+d_1uyDneSI-15XlyEd;y z)2Um7yuEGT`tRk^zd8@$n3ZrjK@2i+P_i|^hO_Y#ivtcDTZ`p5^!?~&9y^V>&>`#^ zZhz|8UjE58@9F-=E7YSZ`x+FfKRPY%#tZ+W80(F=(nf!m68kh3L8><=oXdq{`o|-` zh#BHde74>UmDgl7RCgcDLv%+&P%mD8&DaKFXECh<^SQ-dBo~j$iAYQk#Sc}wF(pL= zK(ur%w-}*lyaUNoDVj6e6p9|~)`;`lT}@qdG2oX;dWv@}cL-=HcoLCwf3a7+Fwnz9 z4Hyvpfjm0GlK`?uao)1%w6|?zhaeONm*BA1k}ca+_|pBK47r6o5A)+UMJH&KdjI5% zX2;`=r{Ai&V@g#gY-DAtV)eJF#aKFQr8T0?AQ@xZP{gDXuDTo)273!V`v*HlcC~up z9b3`#Zv#X2&u@*BlWUUaFrfOtiRX_6TD6_0%NjFObn5QhI#t}FfCBAh0mz8HVB|~$ z{(VL?i7`|)*j+>0nQ*8}qN7I9@#pWmD%;M!>a&~9yR?|2T^k^9*D|&d5aLxf29j@0 zQZC+exW@71Zw@W`4q*6Q{PyeQ4*wQFpSsu%qYbu>J_^o%rkMd}>h% z=R*f_1~*W(`@k=qy(PA+J+Kxs5WNCza3bvnhUpJ+-SYZcBj=hsSqu2cTTx?wU#}kG z5&aXD19LW_%ku}v$ql{0%yXXpU!%yztq04s2mFczjp&TI-OfY;gP%c4vJbF0LLo!5 z^T71sOWPXQeAx$GqTBRsAY9ik=CNx6kMYFB&VQM3Xa8%2%YCE_nyobc|7jGN{B)}2 z3rp9DQ>kbc625XQ+{H$tPMp%Rs2qrM7zgS^AVQ0}bQSVM`iMO1dIcXjdD_z2Ie#+p z+&(x*9FKMLW+TeQE--(<0{@HRvT@iqVKQOSXN2u1)-ObUbC2CMICT-*XUkFFc)@Lr zY-l|3%eRrUuU$Xcc(ZTG54pDCX|J&DFRym|WxoJZTLZ@2tkW;HT2LBY@k9y?Rn3ij zZ1dBxetsA`9ND)DSXK*nh*0f0+uN2P?=%I|wHx?;+gbzlghFT6s@k!Ev{>C>uHGEw z7kSrtV$q?s9Bcp>K)Bp(0~`g~69M z5e%`ZCGV^Q;qbjvfmKxQmEUzaVj0zYW0%6TeJZS@eCuy6N9J!#HvMgNQFPD%P$=Jj zwOalajqUwctLsv7sk&RWXDAeWZ^s2kPy10phf(L=w6WyJ{M!lzQI6#WxQP(}8dC&O zT=n9~)7nk!0$qc(CAE}N-wKWsdr2LY7F4vMKOeo~XkGEv6k2Ky;*YALs^#OnB`}(RjxCJDc^@?&;Wm^eWk|VU1!*o$$68*oN7&|4%CiluBSv8YJ97X4@d<$}d`ES6h8w78!AB z7`UFG$ao;fM^3SZQB0qy+~2aM8#5P>mv8iH(ntSU4so+*qt~(VP2HH>`e-n@-RSV( z7WJ1dqZ}RqnvV9|rywjhwyWysFkiLVu~!3sbzAkxr_?DsP3`E=siCiu)wbch`*yW5 zFK0>qisqAj6T^K_AeZj>+lc^b?_Swx4I`IRtK8fYmZIJS+{z1FlU&;)HuLS+QqZ={ z1JX0(&iO=HSxb0eA9-Rxh%o-Y(cJLu&0eER>`!rO@Ilv>OXEeZ!J>os+1Rc<`fhKB z-}QD8tZ2nL%T9i=dj`bV64oHA^=j+eX^zQMW8pvsIxb;*hSsKqMqfVADRXWHTB_U| z7#(?=YK7Py&flOY{Dv2=`~u^-S%(+KOItAI%k^Uf)1!&eDk(w;EjLD(=}`X9Ate!*Jj zgCaZ-yMEff2m%gUAeRq5!lv9ifZ3K42>6@gUBcyE5wcG< zEvHVYIf7tJT~M=8`sY)8b`N#f@NIaK0yM(7t2>e$)#uhMBcb{xC4LI1Aq1t0Jvn;} zNa6M2TJNwxerh}>`3v#AL%4%oVyG^}WB#B{Cn#ihF&s|4XJ5cR~A z09J@i^sYSv74r-Y<08QpOx0T=Mxvp1&VFv=)Kj)g0U9XAq}PW|ZsVdCYzZ{XKYZxA~` zi5vDS8R1X!G$xTS%SoZ;lUeN1xhXc6WpDF3%!s^`G)uu0(D<73GN>{M+#);Woz4&jBi+nY~)oXjtwC;e-mpN)4?3C z2V&mliLD;mP^hg|^jpf&JST?KaCS*grnNoqrY~;R`5FF?OmN*BGB3qF4Z<3z*@j>k z$mUhAPz zHfIx*&G@eOoU>Tzt+ld0nw@frUzbXBz@%xhOj-}#_~n2llEJigBuuJyoMjb?bf>X! zpo1|-BQI}2+{Z(npmNMpfiVhg1fG_=EqD!P@yLld<@fI;S2Q$P3asnjL3tD(#xsjI zPB5S4kQHVdZW%RMVt~+x|0_!;Z*d{W6vn_PzuUZa#4S|o4hp8S*-^REJ=Z$U28bn% z%Dv3v_}PVVbLyv+eaU&{0nof;cKkOf6!1JcN5L2P{tIJ*EPuQjGgY5sB`^q(qnKbF zLeMuX(;U$QC}CX~gR7cn0WC&YS&)+-4s!K!1LWGtzYlSj!=Gj%HjT*T$${a7Z&`cx zu*J-b6QIW#2!woV1!C+=krm{-E~Zoeq1c+yRgztwi(xzoL_tBQlcfz*qSAu(Y3#aE zP&zNCPQ`NEB|0-K`_@H`SQQRDaXhXIqAy;o$fWh`_3u#DP=|)qDZ>EdT)g8T^ihQ6 ztEl?!#*mY3jKJI;3(kY`_n4~mJB|s>;jztLHx-I_TWM#E!^wb}XUH5Q0JgQk3?)_3 z+CwSAZE8_-J7y1?TDVJSA}Fl4@wS0lgSQ>#^^j_ue~jP1-Jv>2xh`GPX3{XYH5wTB z%2()9OdC3|lZ{aWsf_x5F-RVb@Ivbc(_b2vHpM_wfSzO43T%ajcgUGb+hb~3*rc_> zlKdPO4X+&IbVS$(mXPwVqk(R&U6dwGn<&FoYa3#sTVv&RV4`D|Y(`-3ZsUOi)_R7F z7-i91s?2J8ZDU4lG$UF$mc^ge9L7)>FZ&2(egbF`P?9EF2u>bl%8`I-_4KU zjdjCbild|mX^121xfUJWC3|Y2IZY}Ki7RqPJMpfuO0y7aUjv3a+jIHXo4|m;oVsv! z(Pm-PTetob zI==JVRbDNct5nroJvuck#@cXAUV0EJ1#p?he}s~}`r9qDj-*)@i>`xX zXQ9L9;u*HNzM7`MWgU#{1BceqOk+b?@N}64Y11vsfbdU~7H*k5-K?82n*P8MRdYww ze#Q~ibVt-t>WIRb5>0Oe-7rRn0ees+ql=8=k;q%1h`tMP;f7ztB6jbYG7+p$KwuZu zI|Qgu`&_s|$;vS?y{Op^dzuI!rYi~it{{`?Y77GjN>in3OHLYE>WV&%b!TyzSNb%j z2y5q0d+IHXW|Onvb{rgmisXCNj@&a9(UJU_yQ}8zuKl&UOVdJccB=kz(%0X$M`l=* zrtT~890fF;Np}u43DIIcOZI-Acwk9`m#VBUb)s3oRZElU8^a(h{di7!%IIWkt!(;Y zD}*<6rlxYO7;}i-Psz(=mX>Za!z}tZi-#uk+%Mw96uxXyQ*=Yx+|8j>_iT9$UP3eB zqPf{+5gva-3=o_REY#zaJOt^h<7ZnY+b{0f1KwpeT^4moX79(mloj;R(XS?K^ zgm3lU>=_7)CG2PwD96L`9g_~~)o5~thsP+6nLd8Q_aTzghwnR!5HH6U+z}>nd4EzF zhv0D((d#v}ZlUF_NY@Xpzr%D1p`$sOA_`LkMO(IfJ3%?Sy*Xx{)|g?w4I@l+N=R_b z&FF_wyD|TrZMtNeDSIt6m1AcT(SAUPQ_{Y>Fa5@xY}D`v95FrLAD{cjlY)2-8u+zJes*mzrlW_H2$oAL_k% zKca9a^Q~2N+6-Ub)24DUq_}rJtKRX7X$jOh^A@Lmh3Jz-PFag*^BVznI=t}7pvrOH zG^6&m{iswEmXPlg98xwV&u!lu4pL>y1Z;hNwE`r<*-LXiBywz1H9`8s|<&DeILN)A(;8|!h>C`(Al^%d5q&L%m(tbV+n_9%SW#5!3sOhNJ` zGjI6z>2n0TOC=hw(Oq*E+rJN-M$gSBW5gqxGIWdiUe1M!4D*TSeaYNOnXmQ=b4lpW z5Z&q0Ij?T8AHoRsi)JQlEs;<%a_>uXXq$$fF9Ej}NX^CD1ygWTIyrbV^}9aq2`pO( zOom?X*ow^?3Vq86%CN`K-g6zgE7)}G1x5$*m2kBnEJat<4qPhWYDc+EMheklrQ$#9 z%#d`?8PVViW3BuR=47X>YWw0vo(Xb{K3d8GuGs$+RgLJ|!4iUQ z6J;ph0$qLUs87#pIzjf0JX|%yZo(Wywt<=3HY90Z2y>v6c%3kMY#j(Ev<9PQ0_` zw049$6#ptg1xnj~@v z8akbAC>Y0i^H|&RmRx9EtEzDALaGMafx+N1{5-nDp*lf3XTA{tT9XYu(Y6JOMo(em zozL6x9pwNb9}oNw6HSA7=ufxtX#JW!=W+Vl6zuL4=3!vADR3!R%85I+QJ+jA-^LP> zwLwym(8{{pAHa<{UpbVg`Mk4b>^7cY%_8G0gA$_#Mw8@ZqT&MuFHPAw_s|fEi6(Y^ z%-CBL|Djh=h&6JrC9B1*wN+(eAlGOWpFpI$sPDiCxG_lP5Vhu;kR52CqjerKy?V6a zHvB6Ai|X{AZ**srGbWHLI~aF&-^?HgNNP~k!6dSFX^3ocLuyfeZQx$o1pL4f(oCt% z*ZAH#JhzlsxJb1CIUPdZM|j?hCiS=NpLLyFl5atE*fZ6k{(T0HY13Ey$7?mM6@R;Z zGtferZ~ycKGaC4%nR{!(sF4#5Z13;ck3rQe8QPA@0ec|fQh-F0Ylf7ZnaNx|72dbeKobH&_-=%2%|XXo~&Ot zO>5ar(o9ZVhZNy--9(?ILImzM6}I zSB*jpt5)3s(Kg3KXcbjet&CMFw2N-4SNO5JQFEU?0iLkFBnLb?!#AYy^}E})i&uss zHwx;cV+;&Yor^GLLnuiiXYzh<1YL&+YPKbvYix<55r-{m1>cepbsM9NS(#QJ&DiS8 zOl?Muqx&Ev(WDhlZKBZ$@4kRmI#NR`b-^ zXiMo7lNs*+RiRgEFgnxx+QpLh6J(H*Z9qJoVm>2-@+O0{Qb;N>wrJs!XS|Zg_*Aa+ z<@DZuO!6E*+2{6hRf@f@8TeN@z&XEW7-u}Q)o}G}_ILYEyZf9ndht>ois}Eq@{VtZ zw(kfnBa{i23kAa{0=BmL>ciq~YmW$Gy21V0i_Q=J1Y6ZBD&W2oLd$3LS%yqA`rM~X>KgFK zv52EkLb>}p4W(z>J;NTNgT5TgdGi3Yx9vx-bfQM^=FC~}nJFzOYY$F%9?X=JvyaV2 z1MR&#*adXw1D`r01@f@R0oe$!r8_n7Hl$z@Sx~W&KEzWzjp^$Pa_I8+`R>ZsQ6s{gR{o#kOKa6+r!=u)n%YcD2eAg&bvE)M)f|90Jt;*|q z1OaOL)MUtMaT;~DVHiZF?-q}JRO5JVlg{>@AdH^f%(WIfnwRQ#4k~KK)CU3#GU+UQ zyTpv`?i{@r{zv^H#6u|u6FWW=WnfzmD-&RdiX2pn9HW3Z5p2z<)7kYg^^J}ShWhRR z?S<~4dQljj9Q|x)7*SVy6MAj+Qq@zD#o!>Qo-Wf1K93%3reUFa4t@Iau_Bt&c^t&I z{+bQ0_4L*kHBBRh{%7?+hTe|8^SF7%Qeme++R-c%{0}f5pXev-GZ$)uUHu?>~ zqfsn15l9d2jgjgztK?c^@~$yR0ShiwGn2IcldQf-`(8YVuLUwCD8M0J`(& z2vtd>u`n3fbXG6b!|^3WiKAX=m^&Gy{(*`K9d#`H)eldWp;RUxp{VIq6gmwbF0)I7 zOMh2@FKvxzYgZhA+dEF@zdTFVBO>-K+sxSgTt*))7I(1H&angw5$Ulv!iNB69uHhA zXy?m@J#)Y`T`wSD402{E6T-Y1^U2v=!>yc8NwaBc{jD#s7KTDDZGUREKlmoiPyk*2 z@(o~+j`}u$hh!{dS|xcj-dKGsv&6pp$ovu@S%@cAqN_wYAC@S`Gb_<4epZ4lQ!88^4j57*{JX0g1?!@yZph5s)b9LS9SXR7N41wCkPo5xCO-BxXfQPK|CE4 zW<18z*$6SJ9!z^6n$`266K%oAW&CL2ukv;$Kj)owtq>JUnd?W^HH&NJ;i6$Nz~Hlb#6ul0idxfW`5Zh@QDN(i>>Bu*Vv$hPgVO!q-X0I+-v?r1LBnnY*ykdsq3>e^ zrdqn0n2y;vEMW*Bk#^(Ro?|F1pn23|B?XSPP0VHwV~Dbb@0@ig&>>v;`#FU^p?7*xsn`M-O}ifu;#H7go}=ty=TWz9f;HAFBa-jHV^xQW9;2B!b=h z*pc#6(GGOcn&M3W>REj6ZiVj5U!2_evlU=HIe{0_*$F#UJJ$}6)?ml_2d7@%eyW?} z9s4nqUTPbUcRz;y>*?zEumQs8aH1Aq6^fKMPQKhFX`qjtBsvA2#EW-mTyPXf|pSiwL; zNV*ptYKNxLe6j8hkLK#G!Ttnj;pPN07#`xG{o1p-V@HqS-Mseo^Yg85YY3SPc z{tl+XwFhsz&bV0aKuj}Ws*pUH&b5;iY%{Nru=maQ(&uTiW$tRZv>8ZSOwS;+0uQdi zOZ7H+HAmt+ev{Ui9NDm{`FLm>bU#Puj3_w-Efl_s$5(3R`$Q4!WHfw4ojOggHK@2% zg|W*-qFZVrlRdMz9}-BMit}V>8@G>f5t0DkH#=rUmg9$xmgG`Av2s5vK3h&+WDTM2 z$z1PhOU++3@@oYc5Sou7sR{q0MMe%uVxi55I|NC=Wb0HPPafhe*u0j^Pp%jIQLjG0 znmYuP$)=O&bccl*DUC-JMarlozs+05*-d6Aq-6seW?3n#wujC(Ei2`LYmw)QYQ1kK zGm@i&f%_xkS2fbnft~Ur=B5?RYOE6k2Tx-$hA4$ePQLBH7V-h7i}##A%s0-u@ZA&x zZNDZLd%S0$9W7|dcf_N}kcmx>@hseEaWQQ_xwwN9&>=4WwMW4pW5~z)(hdV#nWBCM z7ZeS}KPUz}qyi#7XC8D3U?o75MJ@SPxJ-mfg*XQk3MyuYlINFr%nGbPQezR^Ap;iu ztYSjC4Pd)b;h*GhTmAjo+0Yeksn*k!Qtqlk-zz0(&`E*ASVdLpr0NW~8^uo)g<&Na zlItlZr?2C0?6>lUb(|Rtik_JOK)A;r*+tv0xuG2@Fg5&<{faUdK&fA7gD*Q)g%8>! zKyt?l4qQQ^{ZXS(zFduY5DXZ9bTNzPC@}%we4fW!kW46CzgjYR8iR>WKI&eM71B19 zA8#dX)ry%^Bgl1?BbE*-Ji(LNgR38{OMwZyphXHT9-C2IU zAvpXig#gH!o9jH9|E~+Zlw9-<;51H)(o?#b!?xNdqP1fdV}5*{556QfIHP~Pg8b+X zL4=UA0;TxHY?Z%S=Gpli)i&K7xM6F^%$lgk z!n>NV5Tm!la-)gy{|io>rV&QZzSqS9sRCoIlgy7+lF$r7fEQjHjNs?c-zKgjBm@Z> z;yZ1zkefEPWJG#HzioRnx7`=oQdO&&)?dA_B|QoN5LeT}{m+VxYjjS2QZ z2PMvYKM!&9&g_GEd^B2h+r)Zm<_v=!qG!c?X;Oz<_?v0yC@vM&F*C%EMWLk$$sRXc zLNk@HEb}XIw94be!`T!OrjKKU3h=hym}m%a9zWq?V_df4ZzdFAOh9ppB%wm>nRSB( z`Z)|cJ#X>LdXG26y)voXPHC4mTP9>YS^zF;z@F18;a0*|Kpm5@6}S9wagL)*NTn#9 zicmzVVZe8odXc2hmU*kvt>-R>Mh=Jwm4+}39)8y6lc9s+Tv`|A*%*u!2dNZ(|By58%~c0IuX$s_D^Z%f zcWH%U%!&^ zYx16f&|%&%CZLAbBrwoha^T?*6|mNd@`*FhHtHbs5Z${uY$LI*jE9Dq@%;vXo#Z_q z72JoqlQg#_Y6_gN2uN4=&1g4i2FB|yF>1iw%Im3PX^_vUU98d`8sd)G(Gh;lI5tbh z4zPYFa~Nn1hqP`++7*jz<1QK0#v6xrDrcjI;HCCYJ5TUpL3R=JQ`k3v>+CwiVKjmFgG{lAD#QTzz#p zWs#GS#0gk#IaJ?REgC=mrbxQPa|-vcxnbT(7fm2w_1-~|Qnv3)L;FKvMH@F6Vf9jd ztCqs@CKfajMPB8rL0)ZFU0ylmuZozwN@;t=agtdn#}%PcJqIGy5?QJq%#g@g(FL2m z7hNG4Z=?nqQH3*K^5Cu7DezjWtt8mEcC2KM-DpyC0Dl?uccQMuyzxFIk$34PT^RPgzaGYp!gK_%TsAtGYv z^%GO5PK;P7VbjtJbJ_5XZAj7-TU`%aE3(pDooBSvRr&Hv$2emA0>uYj|RyJN1W+V z9=rM|enZ|exOT~OpT28Hdg_VQ>d{{OmMCb0GL4CIZS$7yK-|f~Zue`v`a;*t;)#JZ z#^8%$I`U1(oJP@l0zd-|qj`e7qnL<+#ja>wgp6#&qDao}vJeV3-D4{p6l@DFs^#V1 zK}7Dl-=QtHkG@a%K=~SpL+pEr@APn54Bx}?Xg1COYw731PvwSCpY5JP>b5}5{&2SWok6*)zprFIbmSa>#P zTnq9xh#_N5dd}74)}9V(Q{&cyKGn4%Uz~_ngH( z*Jfy%?uz5ADoSVEib|~RZ!wwBSS@G2{)}j?<=LnMx=5}F!fiUwySA~61_xTAA*I=1 z874|XD-va&LdAy3!wG%ytgN)EzwPz06BUY*(5mWtl7}jk03gcJt)kvx!6|u^ywaoS zfemm~5gkEKS0Y+U_X@VvcC}-%uaGchnxYZPbjr5Nh)@t}C|y6%=hmx*%Jl;s7**ib ze(<>*##480wzOH#Ds(!r5PA~Xyn2`2kj}8HtH5d5$f@zlmNb2~l!Y3&JS8RDp-ia- z@^4oat-YM@8)X}mKHiAVns;ux^k11NXUL%m;9@Uacudy^YdikB^$}}S- zRfwjNLUmvsgYF%CYmmJYN^glDAlQ^1HQf7@Zp z6rlHJ(Jk>d+m&ID15-<)otQbBye9S(1x;&aGg#;##U;~le%IH}inv{;&v=YB4oU5WBBlh?-HF6VJv9fk==T9S)H&JJ$++$W-U8z`$?r)d{Qd@bnRJcOdhn7U~NK>J15| zr5jL*JGjER0QHG_6UM^M7+FxPDjC^BdL3;q!+c7n1{J4i5+Cl$b<02a2 zL3@ZI+(#F(EBqN$bCAlQS^ojlQ|#4X8O*+%OXYvHEZ+43c{=$8%cf34Tzimj|N`6>H!?wF6#>2RNJ# zIadPCpaCHwB=YL+A{T^atLO0r6OJY_tcKU?&X2YIofPGaWM*sFW`bnu_o@e}v6dlp z0kavjsG}xpVCt!pW4o>~DgO2W({TrCLLs@C*lC?QHZgxdbZcbz=4UHpBx{u*SoN)E z811LAO7zhf3IK}%Qi)AC6dS?bPCe3Kv9`w}9q!f? z(7_-6Mq+pGJ_qxi*c7ol>zy{9x;|UYds`Jd!Pe zdFv{r9{|3xESQW4`7nBX*2FyFZpE-E)LvX7_2x$FT~BSHCrX_vG5SZ1_~(vne>U+s zt*O8p;%L*hY;XH#DcuzJOLIM6Oz5Z$7c~g;tELh$Fr;!z3%+eEx*KGShgS6n8*M}n z)k!sPQmjYfZpOTbcdj&Dt#_5@Zl-!IWUvRl(QZM>s_R5$Y}Vuc5-Fm%CumHy7<2O- zU{;1CQrSYu)rW;%V$UIwf+bxYk5Z#buP1_c0J{wC_ zVo!yV!ja;36Fn_MsqO`l_jMc(YO7NYC9&dF%}UX z)(mwXG`(zhL<>V{NBhw$3{H{m zK)Oe5lDt~To-+f>kyuzk3CY2Od$W4dmXa%Qoy zs0M>MX>;GwM-6GN?&7_Q$eC*aR^a$a#W$%(4KQUXY<#OR^}f0DC3xm8(N-iagu~W@ z;k7M`6v1HNrNzV%b%X(Or^{WK5W%_R*LE^Q>H%LjhXx}WU$VOKyiu>Llil@M;(IU7 zyHR(O1^3_)IsErxi|=`jmxy)swq;8}kbGw4!23Ykcy^Q{$MiG>6AWZUskwzqy&)PF z%Gq0WKyiUR_G-jS-y2u9W*(ccW2i*3qv<@xFA#Ju3U?7D+hNsE&_0N8|HLxRo5}JN zZ`-duYsqkc2kx!7mA68P5Zpxl%;&%vG&`%afBX6JT@b0Et7s{QB><%HU>VRW$!4w1 z6XeOzx|4N%=+Y{K3*tnbX-O{jkx&%u>Z2X7m@*J`Gzgf^j&XpoZ#=C*U!$Lv5M z^!l9o0772JR1wK~5y()9sV>mm#5*JMrVifo0Q4{`gk8U3wjQ*qeZwrK1d z&HWE<0HMoE_Qd(o6YS0*59U{plzsA6c5ra=%#%>y68LXS?ZT~9j(vr`^j_inl4H-> zy3{pynqoC*hZ=f8grt=pW7(KA?rSalEnT=as_U>_Ke{%I_P^)A z5Bk@YiGW*o_J~IjYtwj8cD4#370TO8PnRPUey!5#K4JvCW9eruj0{i({I&^Vsp($U zk?!iSxQW~N76Unbd!c}Q9?nC6zKXKRw^%9W`*PGy_(IG!EUF<4d1COqc4WMx z95FacV;6RWU?#Qnz(wl0aQZ^@v)VK8jH*gAZ*Ro3Q$T)|RV1g{{~ zm+_NpgO?ST)2VNK9KT?&u4tuJPR1@kPm6>qGu%Gm`9cCfa-=rv6uS}3A^P}B;y6h57dEJuq=xxl=Rhs*85H+(*;+&Zj{VxR2Ibv$ z{7AreKM_!g?~z#a{uhH{6EZs}f#vKW5aImY%ore;bKjcL=A&=svCqWnKtCOogdI;q ze$vx2&K>PHm}s8A_s(fGHPXD;LeN1H1dUx8wuBw9XTIu-R~qNz?dC@oh7_*Q%jMM1 z1mNebNBiXU_ra$?TuyywuT=8+1f3kREz#3WG_4xi@2bZyPTIkuMo$OnEfxA(XnY~$ zyNA$oJzu*HQqZacJJoDE%dvUo^vDD$= z+%0XZr)NsihBe8mP+uP0A<*B>+^@M^~br01i;*{OWy`rtviko0R zV2pE=Xjbp&Y5%ww*s;VfE5baku%F9Jwx5uf`d#3-74NW>>1RH+u}4-buyG1WxpXg> z=t~(%nDQTHzHqcXbj`(j+_6B{=TXJG-rK*ZSl5;Pb222cFTd~nLVSpA7~RF5>BgQR z(bJhllXqWx>geRn_=S+GnF*U;R?6oq0ePxT3^P-tvv;CV-4HyiU;EzDsNS#GZf4!G zcl}tH>2c{fF!dx#;c9n!?0BA(?=Uw5+=*SFZ5a$_6FM9DdpX(1}5mcxAvna+MKW29K$iTI-1Xljj|mY#aUADR(I;PiM3j&@6V<1 z@6=hfVf>Sj8K!&BYzbIB)AArmCn7in@B?J*3eHK{4;Y{aD?=20e^BG#GSj_`?erhJ!A2vgyCdVwdV+ zXBfZGwuF%ez8MgOemk%3Z5c7z>ZX+;UENZVyRh&pG)vz}JC*2Gx%ZO$9+!?pw{^4V zg9l6quuz|wNqul{KYHSeIXf@+r~)1?D_#}8$IzMXE7GSEO&dloca3XLdNOVFIqZo% zZy*W{yHnGgACf!!ohLjCyQLJn+itw$W9JXYZq7B)8}|$U#4QYV+28qN>;`SFue%L2 zg|Y6%`vdGs~9n*G&vDZv zJH*^W_*#81djENUCiIR7%2SO^d5=}HOm>kh_~jc*mPJZ*Y?qP@akK+%!WQ^!Zla2V zy4N@^xZG>BmjZRK0VsgF9fJ_6=i`$7+Ot6A25??K#(M_NBCdQh0kY-d@rDyEeE!KP z7oaT0Z~nUbUMC0~HcD<0XjH(#Vw8Tm@O8V5Zlir(s>{b?)(u*@sg&E*dm;p>bY5Xh z{HBF(ZFK{9M7Mc{Jf=w1RO+7K1Cw<;)GG?r!FvHpmixPV68%wM8i(2F$N zM75s-OEJ*CHUDGRpCs&(ml$^~9a^Z`;ll3XGnaW(B*X#|4k;-Q9_X7Mx|JWSazy9T z>NjqIBkNBz#x$T?Llka?8QheazI1Fu8yijBs5CBWT{xR5=hJL*AY$ux)ivSsZzitQ zkoa|}WWdpL^$|qlip+66B9_Xm>FY@IFlXd2Yc?>Rh!$@m$&4KQls{+9P2_Cr)PI&7 z{MgANo_J>YlpM+?Mt+u*C^8|0`+tBOJcg(-^iV|)IY0*k!yXaiNkl#&7M7?xR&dPCet}UuV=M+{ecQ1?n7V+{h zO9g+ATEdZnw9;)%=K2+2NOR^l8=YWjf4VRe;EeVkz&B?B-j0lLUXQAtQuggAA=MGe z!jUUDKhTSy+RL&1=t)%L$?rRR7Sr(^ogEE!65n2{=%z?xf>=sC#6k1B<-ItIfItzHBrw8+|hC&rD#Ksj(DbR!;mC~|GQ)d%O)5xhu zhn!i)wq$VdYV6q#OS4#AH&UQmoWAaOJNVskljx1yB|VMm$$U7i;8HzR;uVnE;&KbQ za=4Y@l7-_yM?+cU4qfRf<1wUvj!P1t>YK-l+Ll|ykF}9wbWs~_VsxkKsj^6dZW#5W z%6C;V{|TYhry~=~Pp)^pCY4?5M$ z3``voPFs?j^dT`xH%N9&l}pZ?gsS<3doF;B1I)UOj=g=_*Q$b2h9if}qy)H`>2^|7 zU~+w$xH)y^oh)ZIENwJ$bL}e%fm$07xS%;qu0uC_iKp+M$6T19$Og+UfiT?YsARk3 zCuPO7)t5;yv97!)CF`eYo6z39Uza;b@^kCwEgY>v5Ah3h<}vvt>4-RP?dwBZ8$G>V zsjU+()TO6MH5gk1QV&RB9%Z`1ubKAs=zT5IzMiTcdQ1Wd>#N{dELik6`YL%}W$SBD z4VKq5^i}aq8tDY+x$%7!)EEZGzl;nkhcEN^{&yoAUfak<*FG|Y(IwmcJ}%RZ9^# z@m`!WcY}F)%JGvgk|Z>6zhjwL)D05cN!W;@GqOk=1`n*k0 zc(qyIka(eEltw1tBS|m$HrXei^f@YGAOxY|DcOy=0OSKS3{o`QzDI)}Mr7a7(6Ic^ z&_GxOBGYa)s7*gW!~A~$4a+mFbmf#BG^?fLDPh`DJmlghBrwyq6_gjp086HXR^>lEn7;Jd!n{|P(&p^SLUG>Lb$WU&wQA0Y*wIuvv2;`0Nf%>D<~2we$#9+d+g z=9ulwzG=^;+8)t%JS`JtO-1wh5!Cd%>b4D=G_^`W!(loJLf4VVyWWkeyYZ84whvI)b(O9Ljnionfkmn8e%)h9B zlLfNXhh|WiiHVx$6!M(p+#ayki&&Q~QsvQ3gsLu$afwU_`?fJVoW3raCtd<>9Lum3 z#gj4APVXgCC_2{;a znZOt;$rHK-ulJIo+x%R09c=!f2i+wTo2+RvHf`k8l;qdAVm3cnFWk2x=xC?+UYZY6nA~(D}5b_tU=&`G7?# z3yZ~-2OLW5BF$04ix!$`Y|pt-v#-0xJkTy2LHgF0PR6ap6AEpIh;>NwF1iFYXy z=l(|}dEgHb{0fQ0{DPioVlId%MWSE0@+PT)B)?3N`07Y}+d!gU`EUZK;TRcJ{~i*h zpyIGFmI-w94v9Ev0wumj;(V23S=C=YKx5?((5O7{n0t!@r$%?_JsvzIWgn$5nGqd1 zOWVwwE&j-g4h~F#$m^jnrXwJqDCLEERw*YA8~nD6@3r?Leh9ZI*CxT|rZ7dc&n$|x zu_N*$d!b#<_7Su4y|LU^^6Jy590pgch^a~kJ8|yA!Ijg&mEH{w;ikcHYb%3W#GeiB zBN@19NIelNi&(>j#JC&bSZi=PCL_33jDUTRpZBDSI{EefA&tJiYIOL*{k}UkrTHXV#$Vx`1oZ0D5ePsVjjT_LN zG!os*Ms!7^`l8+WhX!5-i1a1#qczWp*k>r|bA9R056Qh3m~+J3*0ru5WZRAJY>%DW zq3nL2_LDi#S?8@CmU)}44huHT_QrkvTuu5A7V+tt$ada$U|K_*N-)JQ`aj;Gm3nEu zYXeI14iF?V=@Qyk7c4Tl8i!<7)|zGItxKBkM|Ws!v~&b2`B+*l#s@Z z=d?&hO5?GnkJAzIMiqwqN_k22g22$ zfEO#Ve|RfzNX<*=ib4_*9Oi5*AZffw4pk4?0>Juex!+UA1fm*8SmYQWB{F-;B=vSu zzZ^jXngJ05-+Sq^C4HJE9`AICY^KnUJp~XX`*|pw$D3tOKPzSMnQcSSlb`Z9or5vF z7mKP=dQomjfTPvx*p@@D#1lTe7pH+_zu<0e3r4v_QDRQJj&+h9X!n(%;f3pSp$vK? z?e-S@N+I^M61MT#vk(R1mD2LC+$j!!_RFr_XVcJV*-W8Ft@sZ7ZSHl{I zr%dT?-$6I(xyTMJJ)iIK%QJovdRgvod#Fgugs0rK!E8Wf7q1vqDg;N8^p3eok%RqO zW#KgTu&=u&gWjrR7dEfeiT~kmTCn)UP%y3zTvkk~x6WU3EYa+9vakh@$@5KgKkv;3 zRmgfyY!n032Ffs2Ooolhs$A`wznaZVr|5f}gTb*1KXW@xnHAz}b@l!7U;DqSZ(E{Sh;fHpkip3 zXQmd_oQuN8>e8lrQGN2v?YCxuz9vgwoXF8)v<;$eot`;PV01T02omUHqPR(V7720yz@jK+D)&4sNef zHgf^}vBGf-mV_s^}ZMcM4iJYh;}e zo$BhpOYQ9W)LLqV-!%t6g*G5Vgi;%`VwT(^-hpFdZPS5QAC)uhbKpE|zb$Y0 zYHfXEOT!j8o*%*r7ia;0pex}fv|qYl?`ml5ep}T7DHoI z;B=tE@436eyV+}qoR~1SaiE1O`VL|-i@SCTyj7HzsuCr&qQm;k*)hA1SoC^;J(vS3 zhhng-?_lh>G2Fb_hPb@8UBSRjF*xZU$BzX-qFL8xf(<}wh`1{OmA{B zFx>*~W3~W3$D(fM$30_-^`n3S7M=KD-uWQMFS_A)>`Z{Wl>Udm(Q;u@0B#Utli+t4 zqjU#Anh89xPpQG6%@_r8yf*0Z{~0oHQxcW4e%E8 zf|Zl2k*scMNt1jGms@Rmzrv>Ha(|Rg_RRJzoI33HHRf4LF5kbdo}2=H&G-d_6ASME z(K~~FfR%u66-L-cE>;2)#m#3E@Yre15a2!?s~oeD7$7snS%7oz!tt)6qb=Njt?>)4 zBGEVucLhLT^kD~22a}3vaVn<8dLv44Mn4Gm!?3pMB!hHg6zZ;z7x&F|B?i8}(soUg z3tNO*C`rM1CuwSZ4^K~HuI?H05}AtwcqclPr&V1ih&HYWwdh-zkaNBrhl$8;t~$0J zX!Rxbt>`uOttg#{uyg(LjqA&asMyymqWy+2r+b5zoY3hVw!Eb)l6gB)%o@rxS!Hg5xyW zryXi8B;P_@=!l?}Xn>b9OyszXw7}Pv2O2s?X$;DFr@dg0Um%^wx2oudf*i|8A_b z;O(atF8DeP3)!CE+SfT7j6EV8uQ2uje1#unC2*0}Ct5*a2_YEY(1C)q>1=y2jzcn| zd!=3=zd1yxBd%vGi%wr~lM}*B8r|rSUV;IgiW^R`LdyXrIW;L3e@1Dc_dZ$^XLBWUPw zmK2>o+$x$n@i!Lnh0WlNkap7t?GPX|Ly-T&yBBM#on!GrW39ZKB0XTW8~7W#Ye&nF{gZ+XzlC43!zbl=5tsw%X-?xC|p>Q0RkMDrLKW$)HL}(S;*_vsx;nM8X#Z9uhh9w%?Y@W2}f} ze8Jb*rVb;9os}+n#+EPdbln*}97*UXwS7$DY@agI6I(*x|8JHMC_KSb1r6cgWGaW% zvh4oPSJxk~+cPqAEaDfIm;6m?ds-}zgHPt3O=jMFuEF(gB}|&XSxx4BB}l;i%HHN= zjuK_vqw0g{=~Sa^H$`4z-!EQcTs-ue?3xtoKHcc&c6P%{d>p3N{~w!UPGBFnB>Vgo zem_hxsTWN|TTQV(J!@T%%dh9Q)_gj> z=`w8Mp5mELT)0GeHS#NU4+=bx>?`Rt^S*t%lf?V!cK6BIK?@>XGvAPaSXkTT#xbSI%xh=;CNd~Oz^=4 z-p{1>1Cw(yvGVT0^Er~K@y)TnML)#X&#cy_82C}wLCmi&THal@1QtCybUVv={Pn)Y zYuSy_=3^Jfm2}Mo!-QRiFZwZa-l;=lMsru;=RC~51Xb)W1{?W#>s%Bz@;X)eQii)r z@(}3h;=z3P?&3U{<+*il$1S$rXI=bGEIUh5>!Gn<9i|i|As{SUu>j66c2(|J6KWE? za4Ha#BWvF?0TrhGa3}~GXHB$s3GJJ8dq*8v2wOYj_o0D6y9VO$Nwe9YA85i6bT-)4DL)okh?)J zS~f`&HtTket6k*uz?|D<4P9BUE-NT!H8LT|a(CZE8_(6tkc#DO!i0%lUicM8zYAAW z<{z3wH=~Kyd7CcD)0IBQ$JHEEOn_8X+RxbhtO&){P3ysy-RkVO zjsB$z_z&qH)N+)z10t?E0?x;x8O6;dFTGO|4GG}GH-(E#zKwVQ0dk;EzW14KJ&@}d z(C5$qE-u;l3E4nugAlq@*_$ABtncP~f0{MB0%{?OA%*q`C1R~)AUA79CPSK`xVj~p zkiD&gYyy$y*=1K~{Ok2fi>I8#=$ld*3DXH3mR@8)IH27C>N5cVkh| z$p{3%(RMs}#l}oFq62bE<7s2otmJ`3m{M75&zGQQHvRF>E=@!n$w2IL1*Qn7Rd%~w z6!O_>h!ws|9qNCYGRn<^&cecNd6p$7OXxgJ!emR3aHkMFU4-OOXgAbxNFG()NFFt@ zrD1va6dXWv^Ddtg!4=Cs_`giW#IhDFJ=ggX;gLVm7g}m?Mr~6fr+(!gLoXV-59ys$ zTZI+3j_=*F(g{>K_=DJwX`Zfzv2r)5rg<0lHTDF@npY3cr&Kdvr?cfW%5#h5cK{8AWob{YQnE2n%?w&{rf3p zm~Bld*1%kB!5G3iW@lUj(--1zDR0^Iy-8qB<%zI)yTZZzQ@nNeD~~3uIb%ViEr4pDqADS>ovlV_ag8Va80^m0pAZe z_M4vZYGSdpZ3#*ORgSUGdzQ=fIJTa5iBg=GQ1bfI)t^L;Y(|$mCfDR*MKG};!9XwN zbqR?4dHaA`+dAaont=4|3DPt2nE_)(`y0>PWEGH5tY!2xA{T2K!r46hJjan{jK zbB}>&i4A?z%*JV?qkVc;0ZCM+IT;D@=`2ay@!%wl8-h(#qoa-||7uVifUai-P}@x= z_)c#Cgix)nd$!dd<8>?M78hN#*$NP;Q)UKPr4s)Xz0s2pOeKv;6g;#D~w z$cZ|tui$4{pFGnC1DIGO-m~b^aC-6UPVih_d9sEJR-Z$4IHvELNDMNI0ut>fflP0k5QGD;?^9Q4oethP^#7P%!!y=V| z4QLj#a2Ox%q#FaX$wdC&H+DllI?EH)TABoYx?@xH6VaGG_8}png647SjIkpe$iLiGEbMn+#u?X%rEJd8}FzTu_Jv!d5D@HmI6R_7e-0>c*H@p z`xZU<_{rcRl4eIs9F3i?uM+EvYDA-OGH(@Lq_{E7@U$IIgPX3+^G5tnz%qH8(;Q$vuP# zB7Kxi3^q>twP!ecof8>-w|8u2uF3F@Qe+YrzMh$oRtR(;++2+jY{6Y)0crEw>KhF= z{43eq@PW-HCFYBrrR;E)lJ9<1rkpe%1ZOFk8JrJs|5^Zz;(PnGXTfP_U0lYTg7%Gq zSX6%mCr2jD@n}1o{)7d-OD`vq8rHYt-={3?DA z_Mn@Mb!8h6;yBdHQKQQ(c%QV&aR}uUdcia6zvxA)gs~v>%b)Hl%6c!E%K5&LM%3Du z&pdZqORi)o`?di2upOAUh8=IuLW-GH)=jEuKZPlZTEouORt{EFHV@TDdV^IAJ*x4b znq)(FidsZ}<)AN-XS%5k)ZeS_va?)mz+*FJzenrRZDws`R+#ZJf%y16u$9mtXqBec zl!=G$OD)gI;Y)*KK9 zUHgEBREsCXHVrsln+q0@+6OKd@eK);`x~n@a{a1{_)8{$rScb(m#azv)h4UD5#;#b z=R<&V>~lv5KYt+}2g0v*Fp)5S00*I9pSA3pd08n4T0hPsFc9+3CGcK#Yrqi8<126LN8xhtD8ma8v}VIRDnMH8<)uKmh~ z$_0LbmIyWAHJcQ-HgS>Fov7%Q3$-6vFWW*1x`LPl5Vq;0v=kb+$_9Xk90n=O4Z^L(dQVOV8Pl8) z@=J?=ZFv=z_^5{(R*Q^I0oYoDU)h2_$(!u-o35vZ*-NTW|6qHS9_Z4MbuAEotyh^X z4SNfZ_&Y!R-Vd;3B};%jO{*l~MZ&Y`%(aIYod4E*oIE=k-Z?a}dEoN3^>* zgX6Up&OTZc)#HXC6}V;XCk(;{utFcL$4k#*!T$B36@pu;H*yrewZTc|lQtMbeoGtX zma%~fq&rZ-wDdeE>s|e5xPgi^f|8H+J=6b)3#16{<)am5k6DHMO&&s&1 z>_*6&cDs=_t#z%zzVB>_`k%oocbaC@%6Q&YF296~WXy&H!e`_C>E?Hp*7UD!f|LSg zuKEm^r_rmA{H1<9F(_Z_ZA)eHQpem08BF7>$zqRj#(v9+KMHuM(ER91z;5sfy_JtB zTMn*HMWcxK!}$CRDZyh-C8SvH7UNCbiOLRKss1C2gbMDiZJ%joR`M!R>{G0dpr(1p zUTy+0O+X!5SKPMnY&@9WRsmo*lbW zg%|ftL~E%kF!jTIA7ubNJ3@>Hfhlj%VIp>bW!=fBM5T@mENB%?3``KQdN*PVS``R| z*LY&%_4Y#`op5nz1E%FlnQ690KhGpLekbU2?UKi2Lw={XD)IFYr}7(W!aanBR4^IE zI?4!V0Z!Kw&UlHw>8biU(S~^=_&QAjhA@Gi_1nqwGdvNEqk|NekhxIYjM`D6Xs$Sd z`Q7cXC#1c0#Xt#MP2u|7t$^mZ`I>AiSW34($KhnIgO3MD>`EXK0x5=!2x7UG8X6>y5J2TpQ6@Ktrz1JlsU zS2?e#6s>YzM|M(Shg8P|c+_?h!p&r`_c2ZNoNe9VmXu3Ew(-?Jj*uH%lgb`&wmBnf zh?%%02K{friG1)EaDK!maB^Gs3Um%F8r~pj5V{CT6YVOigvj$VN+ZToTa-r1qZOsS ztW%mZ`xSj_9o`!fxQwvnTOdNE;-p*M^Tqh)bXMe~bQCinR-@V0keT%^mxBBk-=) zlkL46&(ti}r@zA9;zV1tN89k*V~Pn#jgwihBEhSQRnlRsko!kwnr1XVCinu@LzvLj zI@Gp!u-n)Mj16vNW1Cg#i+^#! zu~q)Xg8N95EI5RIn*)#h_flyt|3x^FkpBYCk1GH;(emAD?=KoY3zZ9^S-=?rSO1zd zplFq2OD-YW<%)a@=Fkwf=x|6)cOm!X31{rrutQ5DfRfN+u#KvX4SP>myV~@li?=Vf zawVWWS*=;MwPCAqH|Lfy;`ZAYYLzX~F*}mgd#N^GeOCO`aI?b`YqPWbt8E2=^W&_{ z-5>a5Xx90#t?V%_Mr77YZYpmMj!7w39&s?>Txnnyswa5|6X}fI?;2YeP_`#0f3f$4 z8(f=v-v}X&7F+u+JGwNv0pxpJ0_1*$kf-c?1|x0)(t>7i5_piL%Rqs2Et1nK%1F8( zH9dc@WvAiUm57h`H@lYdmJE$I2Fd#{=E0to+Kq51w{z`@Cq`;`7&56~vAKoSvEy>r zhv+y&er$t1lioP$N+O~$)Mbl`T^n{`3Jv~BmhyB79stKuCLmp=@7#K5jiu3)j6ac? z)ef3sT9`^KB48i_gB7Lda3Kzyo~cDPFyGX0U-d z6d*dfA+u{%f>)(%fSA1uLcS`Qdxx#t%!QdI)?qKz?vu$@*q15n&+lL-%B)Cm$6ybB;#4ybbu|_Hp+Bh8BkDgc$rlom|=WZcipVBH&1AG$z*@#iz3{a^N%HPB5&B#x- zkKUSPXDU&20_GVRorI`?&DF7&UKEiXZ422_Ec6m5ts<%nfLWak(mS&Q%>Uh}-m4G_ zvKAc@c7aaT3l`kl>$}2w)V{H|@-cNjJs`ZaL$PW%6u%U$)|VC1DsgLg-==r(a26NY z`|7w+usk^B&JqoRAuW;@Ojpd(!GaUp+CdI9C+9o3NP^V8)Pa{29F)cda+{Yc!Jb-C zj|}0o@7W|$ZfNr#JS>q%VOf}UhA@hB@(4U&MldrYF;ZruZ+0IXaU~3R1EwP_RDPQG z*IkU<1Zymj{ZWz{}aaVAQ8jV!w?m*Pe3?g1O!Tb9y@ z?3mP&ZklB<0A`*DEbV{jbsZfIw@e?|jI1Cm@j*Vs!k~NqHU8Pb&GyFts-i?2OAX}R zep(;3L2KtWX5tW6kM-JIS^vcmyUCopqhZz#ZSF(5x9MkCf-wa@!<{uh!>gq5BUjBJ zJ0;OUM-%`gAIO!Qqh#Ji-sGrb(fYW8WEn(8b@=o*kfU3wT1piXAy~x7ew;bfmSACT zyGuE!p|dL>g0dr68?*Z9;zj*E)qj$Az81}hZYVte^5t*^^#hEaSjYq@GwbgOCq?a9 zp5V*UcRZ2G)-ZUFS%YsUIiK%U8AvT5eVl2YQwdpHB~XFYV(bUS^)DF{15u9TXj#Ny zeOvG_rGY>*b~C#*R0U;|dl(VQn@=1UH@^A)%QsZGM9}mIXuIC<2UvA~5RI4AOx_Wy z|BcrEs3$aDM9RRw71Q3U<)C@_)+t-?lhxX zz1JiVRg{i=&xlAH#Go-aYCI9a9QCBnRg0V-9b`=FX|MQTUlBq&V^%Z|xW(f@L!+no z&B;lezSb~fN@m-f%;$_~Tv}LB^y0l57~NH)Y5S;Nk8yVrjb?lmFm0k99j&15e0*>B zJyYs-t>{D^Y_)uHCqK+wLqpwZG~HC(!V8&-L1~yV4ppDbRGDurMC=L!Q zg2sR#<GBcD$a~oWw z`HG&+SRax7LzpKgLz5qY0pqqggr)-8j8Cu$sG$52dEJQyM@M%i4y3r^v|jxgB(06e zUD!^KU`WoVXr1x;bf+z@UTlCg7fAD?PR0)#9|RaqXmC1M54^fMG1J${9FG|Tp8p!! zwU%I_MJq`W?{F?z998a}Dx@~tIXW!47e(Mp3?aEThMW!xE!kBXT=f1I!^V37T!D!+ zMvqPgIrbG^HLOJOXg|I)?g_GNXo!VTpAyPoJxaI|(i6lI0 znr=UGDQ_D|jNJ=d^Ugo(Mvmbc-GE)gSqyU&nZ(k>tirUxpNm+d@_< zrb#T3h={au%68q={)xn78|dDp5a&zYgF|>&&*p*wf=V-5UCSJT7#ZnyEUWS?z}6@k z$4YK>RZn9n?OCNJF{g>`;_7Ha%qgL<#ciH!*Fnc*H-s8eMSR<{=JEvc+C!|#NA=oL#aXM~bK+}RE{#-WXj@1A++YwsagY$I?HGc?9NeWX`ZNm0fUpYVyU0t-wGJQyi1rzTl@*p_gkEdwX+6L82NXJqy8o-2i~ zm2c|u*1BXrQxUcx1nX-Ob@9|7-X2ub(Xzo$f!LFJsRYU(O@{#xn&U}tm0*=Qm5M02 z?eU-m_%PPZf zTlR0EGQmbncSWD5cK;HJm(Xz06>%>KJ?V!5KTzy=Bn*|lB3gx_(12Whq zdmEHZY|0vTowGJfGZCa4jZUqu2yN~^wsHsBVPeUGec7-HyZBD}PcuGA(*G*r9d}ixRSlI`A_wmV*@4wL^q;NAcluPO zuO9qm@e)Cv+_a6GUe)zH?No=#Ue`5Oko=u)Kyz&4#)D}g9(!>;?^J0k^O$hqj5EvP zY7*?$kC(Orz6b0)vT?AeBC*u?6x;G3j63aL> zW;2TC1xXYvv>iJ!*it-SxJYg>1Ajd8;DUk*>h@_@!nH_p7)v)S#h=>znc)E&sn!Sr_D6xp#8ju}wKTwZv$inz(0fZO7`b)$CijCIbz0gOw*MStYU<~T35Qs9><@5o;@x%mi%9my3y?Na?;)E*qp*3uO}{rH(bv5Ew+y_o#Ps>CBe5GR-#{aET7mPg+-75DMkQ|Rl} z0^mra%pa5bs)bcfax9!xfew#LdVCvhacZ`tN$0ZN)Tj1fM&k-S-LusFgU*Z;Vfst@7#0krfA2_j$0tf$f4W&NuApR3=v|a zF2)8EI8GF}KRF-yuum<01%f2Yem^Eit5}_2NzmYfkCVZrB%Wog_zPMaG+2c@z_y36 zr!k0Vk)xof?}coW&|uy_AZ@<3q%5mk%#(}3Fh3BGwC z`wU`l3}Z4V0Obn9D@@4`$7r9T(W_yKLDKRs9JHu$g?^i#NnA2a^(zD{5G?85#imHC z0-1Eka5N8xtq=3D(F=i0pj&QB(Mul%zwxg7IGnf%_hJUbd{SaA>AItG^*-C7euXUb z$IO<_a3~S;8+Lw{>sndTXmj5)GI@L}4+Vz8Z z(=q}v5WCBJZ2G^Jj^y?08D}XZqO2M6!95tNMH$j2YAC;EW@f$O=m$)C;`9_uexVPE zGtY4`oSBdx@<}1&LUKXtJ*edssEU_%opHvLCY9@1|MRMQZ9gb~COwZrK23XGF~Y09 zgGG=|SYZ$`{}4kt7OiF{-S}TQE76hBtk(2!#TDM@>lK|bJLxjM!}y21e06(a>4 zqsntHF3MGGbl}Rak&|2WV84fzp4oJ2wi8AQwo#1^b@RFASDVniXy%+Hsn)Wly+}HLR?9MH37|HZ-!V42@v+b2KUzFn!2fRtQlK>=$`Yy6`E!f>bEK zU_3kE+$jDR2Ijmrj`O~+1`FMbPv5&~+yq!?axLl~plQ{48&+E-Sv`lTqIF)V5$?uu zl=r>s9nqBdsG}D=SEE(g3og1=?$}0o?*`a=EOb3yfN7uUZJ7Qg(aFxkj%7Dnq;tGU zs!9^S)~nh+Lj?XEj(t-!9Pd|fXJMKaWL6^JVTsUh^cZ`v@A@Pmd-X*$G>g`t-Y7a*wSw&wD_9VrLuIY;p`CeA zU+rN#1)ZJ%3paCkr1D-N?$ZBLk}+P59oByB8Bjf!T_HwU%-D*t`SXM;XXDuU`y{p~ z%u(xk-*|L8I0aq1Pf&H5^!&VivMJ$9E&~hoB5OyBGc`m%V~W$Tk!^tNypM20F;oah zQg5dO7x)=3oR2$lTIFHKYOsw%k zVr@VxlX%ze*QI&dQGubY!0~`8NYOnrcY!~64w)CfIn3OnHf_{>><&Hltj@hD%)E^E zXGs)-{OCN)WsI|p<4jBX__mY@JC>m-oD?MLp7)f`Q9CPuh6(a3sU0 zCQk!6H}!&!Gq9<&5CYo7va_uYuXlLYU4*l1O`&tuTZvzq=*Ozai>6+%EBn2!A+dK> zr`K$#Qp8$rRSNu}Dgl<$eXcP`g~1kOXnptnq8PeJ%TL0^BuXRb0dP6dmAR|vht7c~ zb)|(Dj4Drq!}whTe&O(Rvl+}#q(a1U#UT7{gDyIB!`+6{To{D8%%s;jcbEe@I?MTQ zOV5%_sK&iXo4k`8s|Yx2qB)NX5(4^8V@-_ku(l)>U|0k4a5it1*}6S2t{nDgj&%Vo z-v(d9?t%k0E!i{j)G`j)Q_`l{^ST3XT37BUdNSD;(I-DJ1HXeox6PUf$y;K(V7-rE z0_FUgqAg#MQOTGzWW-SeGNSzse>QH255YL~x_({`5iB@%UoQc8MNl&csuKvRsk0r2 z!0#dK1crD9mWxB&@0~cr{q{GaTmv89E>|@6VvqaH7P${h8j4_}pv|%fG`yCBAzZI( zdH}Bb>n<(Io>LOQDYzdsQ+>m5rEeJVK}{*?3d4A?h-9aM&XN#3Gp%-;@~|1am%(1` z!}h5)L2;nv5R@AW+Jq{@m3Wo4$*o2;4uGIZ`&vEZbW{AW+AWj2B1$RwZT<3JlxIpH zhHxQ>q7aA9l+HFn({0`V5niNC;p=G%rUr+U+Q$H65}#UJ8gOeZvgLf;;+a?wX^b>f zd@N}sdG!&7^Ko;BM_ym#_!S(x{KB~wv0`fJ1-ZHOory11zU`qgrlm+UcWw7Bb#6|6 zl_}gLfwfG$$uF>C1+}=H!l0b`1!`gRnRf9sO%A`b1u2nS=D3P<<=!S2XzR}sB)rJgj zC;(JHyR|;$n?!kl*O0{}{`J1TydPOxs^4?7`n&$iUf*EcjS0Bmyj4h7|EYPvTIg?W z!A4N_5tKGZa6#bxTLqCmJfa%u7k94usPdNS5wW$ z^mR%UDvVLj($pMVi>*X1J+yS|Wb7rg>i!D#_cA^MCFfT3>|o+Wf2|koS44)R%G6>} zTwBTZHwB2SM%Q)cGi}xaeCF2+6VGH`z51^`GpL6+IOzn^RP(Ts@X{d~R+Lq2T$#jI z61n?C8>CxYf1b90KM}UBq8Z?~`JH&-aeTP&!k6m6iJ z{QUC6qAg4@7)b@;0 ze(qg0)`-46Nw{qMf`Z^;^toz) zMf(�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 Date: Fri, 17 Apr 2020 23:55:56 +0200 Subject: [PATCH 290/581] migrations/20200406100225_users_add_emoji: Fix tag to Emoji filtering, electric bongaloo --- lib/pleroma/web/activity_pub/activity_pub.ex | 5 ++++- priv/repo/migrations/20200406100225_users_add_emoji.exs | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index d403405a0..cb942c211 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1430,7 +1430,10 @@ defp object_to_user_data(data) do emojis = data |> Map.get("tag", []) - |> Enum.filter(fn data -> data["type"] == "Emoji" and data["icon"] end) + |> Enum.filter(fn + %{"type" => t} -> t == "Emoji" + _ -> false + end) |> Enum.reduce(%{}, fn %{"icon" => %{"url" => url}, "name" => name}, acc -> Map.put(acc, String.trim(name, ":"), url) end) diff --git a/priv/repo/migrations/20200406100225_users_add_emoji.exs b/priv/repo/migrations/20200406100225_users_add_emoji.exs index 9f57abb5c..f754502ae 100644 --- a/priv/repo/migrations/20200406100225_users_add_emoji.exs +++ b/priv/repo/migrations/20200406100225_users_add_emoji.exs @@ -17,7 +17,10 @@ def up do emoji = user.source_data |> Map.get("tag", []) - |> Enum.filter(fn data -> data["type"] == "Emoji" and data["icon"] end) + |> Enum.filter(fn + %{"type" => t} -> t == "Emoji" + _ -> false + end) |> Enum.reduce(%{}, fn %{"icon" => %{"url" => url}, "name" => name}, acc -> Map.put(acc, String.trim(name, ":"), url) end) From 24f760c2f732465151655fd4cd69cc149546b29f Mon Sep 17 00:00:00 2001 From: Haelwenn Date: Fri, 17 Apr 2020 22:48:37 +0000 Subject: [PATCH 291/581] Apply suggestion to lib/pleroma/web/activity_pub/activity_pub.ex --- 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 cb942c211..eedea08a2 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1431,7 +1431,7 @@ defp object_to_user_data(data) do data |> Map.get("tag", []) |> Enum.filter(fn - %{"type" => t} -> t == "Emoji" + %{"type" => "Emoji"} -> true _ -> false end) |> Enum.reduce(%{}, fn %{"icon" => %{"url" => url}, "name" => name}, acc -> From d698ecef9b5ede19474f1a45b776f8ad9f8b7678 Mon Sep 17 00:00:00 2001 From: Haelwenn Date: Fri, 17 Apr 2020 22:48:40 +0000 Subject: [PATCH 292/581] Apply suggestion to priv/repo/migrations/20200406100225_users_add_emoji.exs --- priv/repo/migrations/20200406100225_users_add_emoji.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/priv/repo/migrations/20200406100225_users_add_emoji.exs b/priv/repo/migrations/20200406100225_users_add_emoji.exs index f754502ae..f248108de 100644 --- a/priv/repo/migrations/20200406100225_users_add_emoji.exs +++ b/priv/repo/migrations/20200406100225_users_add_emoji.exs @@ -18,7 +18,7 @@ def up do user.source_data |> Map.get("tag", []) |> Enum.filter(fn - %{"type" => t} -> t == "Emoji" + %{"type" => "Emoji"} -> true _ -> false end) |> Enum.reduce(%{}, fn %{"icon" => %{"url" => url}, "name" => name}, acc -> From c906ffc51a3c36213f2c10d6d20046beb32e5d10 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Sun, 19 Apr 2020 20:23:48 +0200 Subject: [PATCH 293/581] =?UTF-8?q?mix.exs:=20Do=20not=20bail=20out=20when?= =?UTF-8?q?=20.git=20doesn=E2=80=99t=20exists?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mix.exs | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/mix.exs b/mix.exs index c5e5fd432..b76aef180 100644 --- a/mix.exs +++ b/mix.exs @@ -221,19 +221,26 @@ defp version(version) do identifier_filter = ~r/[^0-9a-z\-]+/i # Pre-release version, denoted from patch version with a hyphen + {tag, tag_err} = + System.cmd("git", ["describe", "--tags", "--abbrev=0"], stderr_to_stdout: true) + + {describe, describe_err} = System.cmd("git", ["describe", "--tags", "--abbrev=8"]) + {commit_hash, commit_hash_err} = System.cmd("git", ["rev-parse", "--short", "HEAD"]) + git_pre_release = - with {tag, 0} <- - System.cmd("git", ["describe", "--tags", "--abbrev=0"], stderr_to_stdout: true), - {describe, 0} <- System.cmd("git", ["describe", "--tags", "--abbrev=8"]) do - describe - |> String.trim() - |> String.replace(String.trim(tag), "") - |> String.trim_leading("-") - |> String.trim() - else - _ -> - {commit_hash, 0} = System.cmd("git", ["rev-parse", "--short", "HEAD"]) + cond do + tag_err == 0 and describe_err == 0 -> + describe + |> String.trim() + |> String.replace(String.trim(tag), "") + |> String.trim_leading("-") + |> String.trim() + + commit_hash_err == 0 -> "0-g" <> String.trim(commit_hash) + + true -> + "" end # Branch name as pre-release version component, denoted with a dot @@ -251,6 +258,8 @@ defp version(version) do |> String.replace(identifier_filter, "-") branch_name + else + _ -> "stable" end build_name = From 258d8975797298b9eadddb48a8a2fcf3a9dbf211 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Mon, 20 Apr 2020 16:38:00 +0400 Subject: [PATCH 294/581] Cleanup and DRY the Router --- lib/pleroma/web/router.ex | 113 ++++++++++++++------------------------ 1 file changed, 40 insertions(+), 73 deletions(-) diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 7e5960949..153802a43 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -16,79 +16,60 @@ defmodule Pleroma.Web.Router do plug(Pleroma.Plugs.UserEnabledPlug) end - pipeline :api do - plug(:accepts, ["json"]) - plug(:fetch_session) + pipeline :authenticate do plug(Pleroma.Plugs.OAuthPlug) plug(Pleroma.Plugs.BasicAuthDecoderPlug) plug(Pleroma.Plugs.UserFetcherPlug) plug(Pleroma.Plugs.SessionAuthenticationPlug) plug(Pleroma.Plugs.LegacyAuthenticationPlug) plug(Pleroma.Plugs.AuthenticationPlug) + end + + pipeline :after_auth do plug(Pleroma.Plugs.UserEnabledPlug) plug(Pleroma.Plugs.SetUserSessionIdPlug) plug(Pleroma.Plugs.EnsureUserKeyPlug) - plug(Pleroma.Plugs.IdempotencyPlug) + end + + pipeline :base_api do + plug(:accepts, ["json"]) + plug(:fetch_session) + plug(:authenticate) plug(OpenApiSpex.Plug.PutApiSpec, module: Pleroma.Web.ApiSpec) end + pipeline :api do + plug(:base_api) + plug(:after_auth) + plug(Pleroma.Plugs.IdempotencyPlug) + end + pipeline :authenticated_api do - plug(:accepts, ["json"]) - plug(:fetch_session) + plug(:base_api) plug(Pleroma.Plugs.AuthExpectedPlug) - plug(Pleroma.Plugs.OAuthPlug) - plug(Pleroma.Plugs.BasicAuthDecoderPlug) - plug(Pleroma.Plugs.UserFetcherPlug) - plug(Pleroma.Plugs.SessionAuthenticationPlug) - plug(Pleroma.Plugs.LegacyAuthenticationPlug) - plug(Pleroma.Plugs.AuthenticationPlug) - plug(Pleroma.Plugs.UserEnabledPlug) - plug(Pleroma.Plugs.SetUserSessionIdPlug) + plug(:after_auth) plug(Pleroma.Plugs.EnsureAuthenticatedPlug) plug(Pleroma.Plugs.IdempotencyPlug) - plug(OpenApiSpex.Plug.PutApiSpec, module: Pleroma.Web.ApiSpec) end pipeline :admin_api do - plug(:accepts, ["json"]) - plug(:fetch_session) - plug(Pleroma.Plugs.OAuthPlug) - plug(Pleroma.Plugs.BasicAuthDecoderPlug) - plug(Pleroma.Plugs.UserFetcherPlug) - plug(Pleroma.Plugs.SessionAuthenticationPlug) - plug(Pleroma.Plugs.LegacyAuthenticationPlug) - plug(Pleroma.Plugs.AuthenticationPlug) + plug(:base_api) plug(Pleroma.Plugs.AdminSecretAuthenticationPlug) - plug(Pleroma.Plugs.UserEnabledPlug) - plug(Pleroma.Plugs.SetUserSessionIdPlug) + plug(:after_auth) plug(Pleroma.Plugs.EnsureAuthenticatedPlug) plug(Pleroma.Plugs.UserIsAdminPlug) plug(Pleroma.Plugs.IdempotencyPlug) - plug(OpenApiSpex.Plug.PutApiSpec, module: Pleroma.Web.ApiSpec) end pipeline :mastodon_html do - plug(:accepts, ["html"]) - plug(:fetch_session) - plug(Pleroma.Plugs.OAuthPlug) - plug(Pleroma.Plugs.BasicAuthDecoderPlug) - plug(Pleroma.Plugs.UserFetcherPlug) - plug(Pleroma.Plugs.SessionAuthenticationPlug) - plug(Pleroma.Plugs.LegacyAuthenticationPlug) - plug(Pleroma.Plugs.AuthenticationPlug) - plug(Pleroma.Plugs.UserEnabledPlug) - plug(Pleroma.Plugs.SetUserSessionIdPlug) - plug(Pleroma.Plugs.EnsureUserKeyPlug) + plug(:browser) + plug(:authenticate) + plug(:after_auth) end pipeline :pleroma_html do - plug(:accepts, ["html"]) - plug(:fetch_session) - plug(Pleroma.Plugs.OAuthPlug) - plug(Pleroma.Plugs.BasicAuthDecoderPlug) - plug(Pleroma.Plugs.UserFetcherPlug) - plug(Pleroma.Plugs.SessionAuthenticationPlug) - plug(Pleroma.Plugs.AuthenticationPlug) + plug(:browser) + plug(:authenticate) plug(Pleroma.Plugs.EnsureUserKeyPlug) end @@ -515,7 +496,7 @@ defmodule Pleroma.Web.Router do end scope "/api" do - pipe_through(:api) + pipe_through(:base_api) get("/openapi", OpenApiSpex.Plug.RenderSpec, []) end @@ -529,10 +510,6 @@ defmodule Pleroma.Web.Router do post("/qvitter/statuses/notifications/read", TwitterAPI.Controller, :notifications_read) end - pipeline :ap_service_actor do - plug(:accepts, ["activity+json", "json"]) - end - pipeline :ostatus do plug(:accepts, ["html", "xml", "rss", "atom", "activity+json", "json"]) plug(Pleroma.Plugs.StaticFEPlug) @@ -543,8 +520,7 @@ defmodule Pleroma.Web.Router do end scope "/", Pleroma.Web do - pipe_through(:ostatus) - pipe_through(:http_signature) + pipe_through([:ostatus, :http_signature]) get("/objects/:uuid", OStatus.OStatusController, :object) get("/activities/:uuid", OStatus.OStatusController, :activity) @@ -562,13 +538,6 @@ defmodule Pleroma.Web.Router do get("/mailer/unsubscribe/:token", Mailer.SubscriptionController, :unsubscribe) end - # Server to Server (S2S) AP interactions - pipeline :activitypub do - plug(:accepts, ["activity+json", "json"]) - plug(Pleroma.Web.Plugs.HTTPSignaturePlug) - plug(Pleroma.Web.Plugs.MappedSignatureToIdentityPlug) - end - scope "/", Pleroma.Web.ActivityPub do # XXX: not really ostatus pipe_through(:ostatus) @@ -576,19 +545,22 @@ defmodule Pleroma.Web.Router do get("/users/:nickname/outbox", ActivityPubController, :outbox) end + pipeline :ap_service_actor do + plug(:accepts, ["activity+json", "json"]) + end + + # Server to Server (S2S) AP interactions + pipeline :activitypub do + plug(:ap_service_actor) + plug(:http_signature) + end + # Client to Server (C2S) AP interactions pipeline :activitypub_client do - plug(:accepts, ["activity+json", "json"]) + plug(:ap_service_actor) plug(:fetch_session) - plug(Pleroma.Plugs.OAuthPlug) - plug(Pleroma.Plugs.BasicAuthDecoderPlug) - plug(Pleroma.Plugs.UserFetcherPlug) - plug(Pleroma.Plugs.SessionAuthenticationPlug) - plug(Pleroma.Plugs.LegacyAuthenticationPlug) - plug(Pleroma.Plugs.AuthenticationPlug) - plug(Pleroma.Plugs.UserEnabledPlug) - plug(Pleroma.Plugs.SetUserSessionIdPlug) - plug(Pleroma.Plugs.EnsureUserKeyPlug) + plug(:authenticate) + plug(:after_auth) end scope "/", Pleroma.Web.ActivityPub do @@ -660,12 +632,7 @@ defmodule Pleroma.Web.Router do get("/web/*path", MastoFEController, :index) end - pipeline :remote_media do - end - scope "/proxy/", Pleroma.Web.MediaProxy do - pipe_through(:remote_media) - get("/:sig/:url", MediaProxyController, :remote) get("/:sig/:url/:filename", MediaProxyController, :remote) end From 8b4de61d6449f70e0a5e84be3082724c7f50ffee Mon Sep 17 00:00:00 2001 From: Ilja Date: Mon, 20 Apr 2020 12:59:16 +0000 Subject: [PATCH 295/581] Fix ObjectAgePolicyTest The policy didn't block old posts as it should. * I fixed it and tested on a test server * I added the settings to description so that this information is shown in nodeinfo * TODO: I didn't work TTD and still need to fix the tests --- CHANGELOG.md | 2 + .../web/activity_pub/mrf/object_age_policy.ex | 10 +++- .../mrf/object_age_policy_test.exs | 52 ++++++++++--------- 3 files changed, 37 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9270e801f..e454bd9d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,8 +28,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixed - Logger configuration through AdminFE - HTTP Basic Authentication permissions issue +- ObjectAgePolicy didn't filter out old messages ### Added +- NodeInfo: ObjectAgePolicy settings to the `federation` list.

API Changes - Admin API: `GET /api/pleroma/admin/need_reboot`. diff --git a/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex b/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex index 4a8bc91ae..b0ccb63c8 100644 --- a/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex @@ -11,7 +11,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy do @moduledoc "Filter activities depending on their age" @behaviour Pleroma.Web.ActivityPub.MRF - defp check_date(%{"published" => published} = message) do + defp check_date(%{"object" => %{"published" => published}} = message) do with %DateTime{} = now <- DateTime.utc_now(), {:ok, %DateTime{} = then, _} <- DateTime.from_iso8601(published), max_ttl <- Config.get([:mrf_object_age, :threshold]), @@ -96,5 +96,11 @@ def filter(%{"type" => "Create", "published" => _} = message) do def filter(message), do: {:ok, message} @impl true - def describe, do: {:ok, %{}} + def describe do + mrf_object_age = + Pleroma.Config.get(:mrf_object_age) + |> Enum.into(%{}) + + {:ok, %{mrf_object_age: mrf_object_age}} + end end diff --git a/test/web/activity_pub/mrf/object_age_policy_test.exs b/test/web/activity_pub/mrf/object_age_policy_test.exs index 7ee195eeb..b0fb753bd 100644 --- a/test/web/activity_pub/mrf/object_age_policy_test.exs +++ b/test/web/activity_pub/mrf/object_age_policy_test.exs @@ -20,26 +20,38 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicyTest do :ok end + defp get_old_message do + File.read!("test/fixtures/mastodon-post-activity.json") + |> Poison.decode!() + end + + defp get_new_message do + old_message = get_old_message() + + new_object = + old_message + |> Map.get("object") + |> Map.put("published", DateTime.utc_now() |> DateTime.to_iso8601()) + + old_message + |> Map.put("object", new_object) + end + describe "with reject action" do test "it rejects an old post" do Config.put([:mrf_object_age, :actions], [:reject]) - data = - File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() + data = get_old_message() - {:reject, _} = ObjectAgePolicy.filter(data) + assert match?({:reject, _}, ObjectAgePolicy.filter(data)) end test "it allows a new post" do Config.put([:mrf_object_age, :actions], [:reject]) - data = - File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() - |> Map.put("published", DateTime.utc_now() |> DateTime.to_iso8601()) + data = get_new_message() - {:ok, _} = ObjectAgePolicy.filter(data) + assert match?({:ok, _}, ObjectAgePolicy.filter(data)) end end @@ -47,9 +59,7 @@ test "it allows a new post" do test "it delists an old post" do Config.put([:mrf_object_age, :actions], [:delist]) - data = - File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() + data = get_old_message() {:ok, _u} = User.get_or_fetch_by_ap_id(data["actor"]) @@ -61,14 +71,11 @@ test "it delists an old post" do test "it allows a new post" do Config.put([:mrf_object_age, :actions], [:delist]) - data = - File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() - |> Map.put("published", DateTime.utc_now() |> DateTime.to_iso8601()) + data = get_new_message() {:ok, _user} = User.get_or_fetch_by_ap_id(data["actor"]) - {:ok, ^data} = ObjectAgePolicy.filter(data) + assert match?({:ok, ^data}, ObjectAgePolicy.filter(data)) end end @@ -76,9 +83,7 @@ test "it allows a new post" do test "it strips followers collections from an old post" do Config.put([:mrf_object_age, :actions], [:strip_followers]) - data = - File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() + data = get_old_message() {:ok, user} = User.get_or_fetch_by_ap_id(data["actor"]) @@ -91,14 +96,11 @@ test "it strips followers collections from an old post" do test "it allows a new post" do Config.put([:mrf_object_age, :actions], [:strip_followers]) - data = - File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() - |> Map.put("published", DateTime.utc_now() |> DateTime.to_iso8601()) + data = get_new_message() {:ok, _u} = User.get_or_fetch_by_ap_id(data["actor"]) - {:ok, ^data} = ObjectAgePolicy.filter(data) + assert match?({:ok, ^data}, ObjectAgePolicy.filter(data)) end end end From ed3974af248a1b201d2008f1a128ee53550ef78b Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Mon, 20 Apr 2020 18:39:05 +0400 Subject: [PATCH 296/581] Add OpenAPI spec for `AccountController.identity_proofs` operation --- .../web/api_spec/operations/account_operation.ex | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index fe44a917a..d3cebaf05 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -341,4 +341,16 @@ def endorsements_operation do } } end + + def identity_proofs_operation do + %Operation{ + tags: ["accounts"], + summary: "Identity proofs", + operationId: "AccountController.identity_proofs", + description: "Not implemented", + responses: %{ + 200 => Operation.response("Empry array", "application/json", %Schema{type: :array}) + } + } + end end From b54c8813d632cb44c7deb207e91bd32f01f33794 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 13 Apr 2020 13:48:32 -0500 Subject: [PATCH 297/581] Add :reject_deletes option to SimplePolicy --- CHANGELOG.md | 2 + config/config.exs | 3 +- config/description.exs | 10 ++- docs/configuration/mrf.md | 3 +- .../web/activity_pub/mrf/simple_policy.ex | 14 +++- .../activity_pub/mrf/simple_policy_test.exs | 79 +++++++++++++++---- 6 files changed, 89 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36897503a..cd2536f9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - NodeInfo: `pleroma_emoji_reactions` to the `features` list. - Configuration: `:restrict_unauthenticated` setting, restrict access for unauthenticated users to timelines (public and federate), user profiles and statuses. - New HTTP adapter [gun](https://github.com/ninenines/gun). Gun adapter requires minimum OTP version of 22.2 otherwise Pleroma won’t start. For hackney OTP update is not required. +- Added `:reject_deletes` group to SimplePolicy
API Changes - Mastodon API: Support for `include_types` in `/api/v1/notifications`. @@ -20,6 +21,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixed - Support pagination in conversations API +- **Breaking**: SimplePolicy `:reject` and `:accept` allow deletions again ## [unreleased-patch] diff --git a/config/config.exs b/config/config.exs index 232a91bf1..9a6b93a37 100644 --- a/config/config.exs +++ b/config/config.exs @@ -334,7 +334,8 @@ reject: [], accept: [], avatar_removal: [], - banner_removal: [] + banner_removal: [], + reject_deletes: [] config :pleroma, :mrf_keyword, reject: [], diff --git a/config/description.exs b/config/description.exs index 642f1a3ce..9d8e3b93c 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1317,13 +1317,13 @@ %{ key: :reject, type: {:list, :string}, - description: "List of instances to reject any activities from", + description: "List of instances to reject activities from (except deletes)", suggestions: ["example.com", "*.example.com"] }, %{ key: :accept, type: {:list, :string}, - description: "List of instances to accept any activities from", + description: "List of instances to only accept activities from (except deletes)", suggestions: ["example.com", "*.example.com"] }, %{ @@ -1343,6 +1343,12 @@ type: {:list, :string}, description: "List of instances to strip banners from", suggestions: ["example.com", "*.example.com"] + }, + %{ + key: :reject_deletes, + type: {:list, :string}, + description: "List of instances to reject deletions from", + suggestions: ["example.com", "*.example.com"] } ] }, diff --git a/docs/configuration/mrf.md b/docs/configuration/mrf.md index c3957c255..2eb9631bd 100644 --- a/docs/configuration/mrf.md +++ b/docs/configuration/mrf.md @@ -43,9 +43,10 @@ Once `SimplePolicy` is enabled, you can configure various groups in the `:mrf_si * `media_removal`: Servers in this group will have media stripped from incoming messages. * `media_nsfw`: Servers in this group will have the #nsfw tag and sensitive setting injected into incoming messages which contain media. -* `reject`: Servers in this group will have their messages rejected. +* `reject`: Servers in this group will have their messages (except deletions) rejected. * `federated_timeline_removal`: Servers in this group will have their messages unlisted from the public timelines by flipping the `to` and `cc` fields. * `report_removal`: Servers in this group will have their reports (flags) rejected. +* `reject_deletes`: Deletion requests will be rejected from these servers. Servers should be configured as lists. diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index b23f263f5..b7dcb1b86 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -149,7 +149,19 @@ defp check_banner_removal(%{host: actor_host} = _actor_info, %{"image" => _image defp check_banner_removal(_actor_info, object), do: {:ok, object} @impl true - def filter(%{"type" => "Delete"} = object), do: {:ok, object} + def filter(%{"type" => "Delete", "actor" => actor} = object) do + %{host: actor_host} = URI.parse(actor) + + reject_deletes = + Pleroma.Config.get([:mrf_simple, :reject_deletes]) + |> MRF.subdomains_regex() + + if MRF.subdomain_match?(reject_deletes, actor_host) do + {:reject, nil} + else + {:ok, object} + end + end @impl true def filter(%{"actor" => actor} = object) do diff --git a/test/web/activity_pub/mrf/simple_policy_test.exs b/test/web/activity_pub/mrf/simple_policy_test.exs index eaa595706..b7b9bc6a2 100644 --- a/test/web/activity_pub/mrf/simple_policy_test.exs +++ b/test/web/activity_pub/mrf/simple_policy_test.exs @@ -17,7 +17,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do reject: [], accept: [], avatar_removal: [], - banner_removal: [] + banner_removal: [], + reject_deletes: [] ) describe "when :media_removal" do @@ -258,14 +259,6 @@ test "actor has a matching host" do assert SimplePolicy.filter(remote_user) == {:reject, nil} end - - test "always accept deletions" do - Config.put([:mrf_simple, :reject], ["remote.instance"]) - - deletion_message = build_remote_deletion_message() - - assert SimplePolicy.filter(deletion_message) == {:ok, deletion_message} - end end describe "when :accept" do @@ -316,14 +309,6 @@ test "actor has a matching host" do assert SimplePolicy.filter(remote_user) == {:ok, remote_user} end - - test "always accept deletions" do - Config.put([:mrf_simple, :accept], ["non.matching.remote"]) - - deletion_message = build_remote_deletion_message() - - assert SimplePolicy.filter(deletion_message) == {:ok, deletion_message} - end end describe "when :avatar_removal" do @@ -398,6 +383,66 @@ test "match with wildcard domain" do end end + describe "when :reject_deletes is empty" do + setup do: Config.put([:mrf_simple, :reject_deletes], []) + + test "it accepts deletions even from rejected servers" do + Config.put([:mrf_simple, :reject], ["remote.instance"]) + + deletion_message = build_remote_deletion_message() + + assert SimplePolicy.filter(deletion_message) == {:ok, deletion_message} + end + + test "it accepts deletions even from non-whitelisted servers" do + Config.put([:mrf_simple, :accept], ["non.matching.remote"]) + + deletion_message = build_remote_deletion_message() + + assert SimplePolicy.filter(deletion_message) == {:ok, deletion_message} + end + end + + describe "when :reject_deletes is not empty but it doesn't have a matching host" do + setup do: Config.put([:mrf_simple, :reject_deletes], ["non.matching.remote"]) + + test "it accepts deletions even from rejected servers" do + Config.put([:mrf_simple, :reject], ["remote.instance"]) + + deletion_message = build_remote_deletion_message() + + assert SimplePolicy.filter(deletion_message) == {:ok, deletion_message} + end + + test "it accepts deletions even from non-whitelisted servers" do + Config.put([:mrf_simple, :accept], ["non.matching.remote"]) + + deletion_message = build_remote_deletion_message() + + assert SimplePolicy.filter(deletion_message) == {:ok, deletion_message} + end + end + + describe "when :reject_deletes has a matching host" do + setup do: Config.put([:mrf_simple, :reject_deletes], ["remote.instance"]) + + test "it rejects the deletion" do + deletion_message = build_remote_deletion_message() + + assert SimplePolicy.filter(deletion_message) == {:reject, nil} + end + end + + describe "when :reject_deletes match with wildcard domain" do + setup do: Config.put([:mrf_simple, :reject_deletes], ["*.remote.instance"]) + + test "it rejects the deletion" do + deletion_message = build_remote_deletion_message() + + assert SimplePolicy.filter(deletion_message) == {:reject, nil} + end + end + defp build_local_message do %{ "actor" => "#{Pleroma.Web.base_url()}/users/alice", From f685cbd30940b3fd92a2f6c8a161729bc2ceaab6 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Tue, 21 Apr 2020 16:29:19 +0300 Subject: [PATCH 298/581] Automatic checks of authentication / instance publicity. Definition of missing OAuth scopes in AdminAPIController. Refactoring. --- docs/dev.md | 33 ++++ lib/pleroma/plugs/auth_expected_plug.ex | 17 -- .../plugs/ensure_authenticated_plug.ex | 8 +- .../ensure_public_or_authenticated_plug.ex | 6 +- .../plugs/expect_authenticated_check_plug.ex | 20 +++ ...pect_public_or_authenticated_check_plug.ex | 21 +++ lib/pleroma/plugs/oauth_scopes_plug.ex | 14 +- .../web/admin_api/admin_api_controller.ex | 36 ++++- .../web/fallback_redirect_controller.ex | 2 + lib/pleroma/web/masto_fe_controller.ex | 7 +- .../controllers/account_controller.ex | 26 +-- .../controllers/auth_controller.ex | 4 +- .../controllers/conversation_controller.ex | 6 +- .../controllers/domain_block_controller.ex | 2 - .../controllers/filter_controller.ex | 2 - .../controllers/follow_request_controller.ex | 2 - .../controllers/list_controller.ex | 8 +- .../controllers/marker_controller.ex | 2 +- .../controllers/mastodon_api_controller.ex | 2 - .../controllers/media_controller.ex | 2 - .../controllers/notification_controller.ex | 2 - .../controllers/poll_controller.ex | 2 - .../controllers/report_controller.ex | 2 - .../scheduled_activity_controller.ex | 2 - .../controllers/search_controller.ex | 2 - .../controllers/status_controller.ex | 2 +- .../controllers/subscription_controller.ex | 2 +- .../controllers/timeline_controller.ex | 2 +- .../web/media_proxy/media_proxy_controller.ex | 1 + .../controllers/account_controller.ex | 14 +- .../controllers/emoji_api_controller.ex | 16 +- .../controllers/mascot_controller.ex | 2 - .../controllers/pleroma_api_controller.ex | 16 +- .../controllers/scrobble_controller.ex | 2 - lib/pleroma/web/router.ex | 152 ++++++++++-------- .../controllers/util_controller.ex | 7 - .../web/twitter_api/twitter_api_controller.ex | 14 +- lib/pleroma/web/web.ex | 85 +++++++--- test/plugs/ensure_authenticated_plug_test.exs | 16 +- ...sure_public_or_authenticated_plug_test.exs | 4 +- test/plugs/oauth_scopes_plug_test.exs | 36 +---- .../activity_pub_controller_test.exs | 2 +- .../controllers/emoji_api_controller_test.exs | 11 +- .../twitter_api_controller_test.exs | 8 +- 44 files changed, 355 insertions(+), 267 deletions(-) create mode 100644 docs/dev.md delete mode 100644 lib/pleroma/plugs/auth_expected_plug.ex create mode 100644 lib/pleroma/plugs/expect_authenticated_check_plug.ex create mode 100644 lib/pleroma/plugs/expect_public_or_authenticated_check_plug.ex diff --git a/docs/dev.md b/docs/dev.md new file mode 100644 index 000000000..0ecf43a9e --- /dev/null +++ b/docs/dev.md @@ -0,0 +1,33 @@ +This document contains notes and guidelines for Pleroma developers. + +# Authentication & Authorization + +## OAuth token-based authentication & authorization + +* Pleroma supports hierarchical OAuth scopes, just like Mastodon but with added granularity of admin scopes. + For a reference, see [Mastodon OAuth scopes](https://docs.joinmastodon.org/api/oauth-scopes/). + +* It is important to either define OAuth scope restrictions or explicitly mark OAuth scope check as skipped, for every + controller action. To define scopes, call `plug(Pleroma.Plugs.OAuthScopesPlug, %{scopes: [...]})`. To explicitly set + OAuth scopes check skipped, call `plug(:skip_plug, Pleroma.Plugs.OAuthScopesPlug )`. + +* In controllers, `use Pleroma.Web, :controller` will result in `action/2` (see `Pleroma.Web.controller/0` for definition) + be called prior to actual controller action, and it'll perform security / privacy checks before passing control to + actual controller action. For routes with `:authenticated_api` pipeline, authentication & authorization are expected, + thus `OAuthScopesPlug` will be run unless explicitly skipped (also `EnsureAuthenticatedPlug` will be executed + immediately before action even if there was an early run to give an early error, since `OAuthScopesPlug` supports + `:proceed_unauthenticated` option, and other plugs may support similar options as well). For `:api` pipeline routes, + `EnsurePublicOrAuthenticatedPlug` will be called to ensure that the instance is not private or user is authenticated + (unless explicitly skipped). Such automated checks help to prevent human errors and result in higher security / privacy + for users. + +## [HTTP Basic Authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization) + +* With HTTP Basic Auth, OAuth scopes check is _not_ performed for any action (since password is provided during the auth, + requester is able to obtain a token with full permissions anyways). `Pleroma.Plugs.AuthenticationPlug` and + `Pleroma.Plugs.LegacyAuthenticationPlug` both call `Pleroma.Plugs.OAuthScopesPlug.skip_plug(conn)` when password + is provided. + +## Auth-related configuration, OAuth consumer mode etc. + +See `Authentication` section of [`docs/configuration/cheatsheet.md`](docs/configuration/cheatsheet.md#authentication). diff --git a/lib/pleroma/plugs/auth_expected_plug.ex b/lib/pleroma/plugs/auth_expected_plug.ex deleted file mode 100644 index f79597dc3..000000000 --- a/lib/pleroma/plugs/auth_expected_plug.ex +++ /dev/null @@ -1,17 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Plugs.AuthExpectedPlug do - import Plug.Conn - - def init(options), do: options - - def call(conn, _) do - put_private(conn, :auth_expected, true) - end - - def auth_expected?(conn) do - conn.private[:auth_expected] - end -end diff --git a/lib/pleroma/plugs/ensure_authenticated_plug.ex b/lib/pleroma/plugs/ensure_authenticated_plug.ex index 054d2297f..9c8f5597f 100644 --- a/lib/pleroma/plugs/ensure_authenticated_plug.ex +++ b/lib/pleroma/plugs/ensure_authenticated_plug.ex @@ -5,17 +5,21 @@ defmodule Pleroma.Plugs.EnsureAuthenticatedPlug do import Plug.Conn import Pleroma.Web.TranslationHelpers + alias Pleroma.User + use Pleroma.Web, :plug + def init(options) do options end - def call(%{assigns: %{user: %User{}}} = conn, _) do + @impl true + def perform(%{assigns: %{user: %User{}}} = conn, _) do conn end - def call(conn, options) do + def perform(conn, options) do perform = cond do options[:if_func] -> options[:if_func].() diff --git a/lib/pleroma/plugs/ensure_public_or_authenticated_plug.ex b/lib/pleroma/plugs/ensure_public_or_authenticated_plug.ex index d980ff13d..7265bb87a 100644 --- a/lib/pleroma/plugs/ensure_public_or_authenticated_plug.ex +++ b/lib/pleroma/plugs/ensure_public_or_authenticated_plug.ex @@ -5,14 +5,18 @@ defmodule Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug do import Pleroma.Web.TranslationHelpers import Plug.Conn + alias Pleroma.Config alias Pleroma.User + use Pleroma.Web, :plug + def init(options) do options end - def call(conn, _) do + @impl true + def perform(conn, _) do public? = Config.get!([:instance, :public]) case {public?, conn} do diff --git a/lib/pleroma/plugs/expect_authenticated_check_plug.ex b/lib/pleroma/plugs/expect_authenticated_check_plug.ex new file mode 100644 index 000000000..66b8d5de5 --- /dev/null +++ b/lib/pleroma/plugs/expect_authenticated_check_plug.ex @@ -0,0 +1,20 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Plugs.ExpectAuthenticatedCheckPlug do + @moduledoc """ + Marks `Pleroma.Plugs.EnsureAuthenticatedPlug` as expected to be executed later in plug chain. + + No-op plug which affects `Pleroma.Web` operation (is checked with `PlugHelper.plug_called?/2`). + """ + + use Pleroma.Web, :plug + + def init(options), do: options + + @impl true + def perform(conn, _) do + conn + end +end diff --git a/lib/pleroma/plugs/expect_public_or_authenticated_check_plug.ex b/lib/pleroma/plugs/expect_public_or_authenticated_check_plug.ex new file mode 100644 index 000000000..ba0ef76bd --- /dev/null +++ b/lib/pleroma/plugs/expect_public_or_authenticated_check_plug.ex @@ -0,0 +1,21 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Plugs.ExpectPublicOrAuthenticatedCheckPlug do + @moduledoc """ + Marks `Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug` as expected to be executed later in plug + chain. + + No-op plug which affects `Pleroma.Web` operation (is checked with `PlugHelper.plug_called?/2`). + """ + + use Pleroma.Web, :plug + + def init(options), do: options + + @impl true + def perform(conn, _) do + conn + end +end diff --git a/lib/pleroma/plugs/oauth_scopes_plug.ex b/lib/pleroma/plugs/oauth_scopes_plug.ex index 66f48c28c..a61582566 100644 --- a/lib/pleroma/plugs/oauth_scopes_plug.ex +++ b/lib/pleroma/plugs/oauth_scopes_plug.ex @@ -7,15 +7,12 @@ defmodule Pleroma.Plugs.OAuthScopesPlug do import Pleroma.Web.Gettext alias Pleroma.Config - alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug - alias Pleroma.Plugs.PlugHelper use Pleroma.Web, :plug - @behaviour Plug - def init(%{scopes: _} = options), do: options + @impl true def perform(%Plug.Conn{assigns: assigns} = conn, %{scopes: scopes} = options) do op = options[:op] || :| token = assigns[:token] @@ -34,7 +31,6 @@ def perform(%Plug.Conn{assigns: assigns} = conn, %{scopes: scopes} = options) do conn |> assign(:user, nil) |> assign(:token, nil) - |> maybe_perform_instance_privacy_check(options) true -> missing_scopes = scopes -- matched_scopes @@ -71,12 +67,4 @@ def transform_scopes(scopes, options) do scopes end end - - defp maybe_perform_instance_privacy_check(%Plug.Conn{} = conn, options) do - if options[:skip_instance_privacy_check] do - conn - else - EnsurePublicOrAuthenticatedPlug.call(conn, []) - end - end end diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index 9c79310c0..816c11e01 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -48,6 +48,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do %{scopes: ["write:accounts"], admin: true} when action in [ :get_password_reset, + :force_password_reset, :user_delete, :users_create, :user_toggle_activation, @@ -56,7 +57,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do :tag_users, :untag_users, :right_add, + :right_add_multiple, :right_delete, + :right_delete_multiple, :update_user_credentials ] ) @@ -84,13 +87,13 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do plug( OAuthScopesPlug, %{scopes: ["write:reports"], admin: true} - when action in [:reports_update] + when action in [:reports_update, :report_notes_create, :report_notes_delete] ) plug( OAuthScopesPlug, %{scopes: ["read:statuses"], admin: true} - when action == :list_user_statuses + when action in [:list_statuses, :list_user_statuses, :list_instance_statuses] ) plug( @@ -102,13 +105,30 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do plug( OAuthScopesPlug, %{scopes: ["read"], admin: true} - when action in [:config_show, :list_log, :stats] + when action in [ + :config_show, + :list_log, + :stats, + :relay_list, + :config_descriptions, + :need_reboot + ] ) plug( OAuthScopesPlug, %{scopes: ["write"], admin: true} - when action == :config_update + when action in [ + :restart, + :config_update, + :resend_confirmation_email, + :confirm_email, + :oauth_app_create, + :oauth_app_list, + :oauth_app_update, + :oauth_app_delete, + :reload_emoji + ] ) action_fallback(:errors) @@ -1103,25 +1123,25 @@ def stats(conn, _) do |> json(%{"status_visibility" => count}) end - def errors(conn, {:error, :not_found}) do + defp errors(conn, {:error, :not_found}) do conn |> put_status(:not_found) |> json(dgettext("errors", "Not found")) end - def errors(conn, {:error, reason}) do + defp errors(conn, {:error, reason}) do conn |> put_status(:bad_request) |> json(reason) end - def errors(conn, {:param_cast, _}) do + defp errors(conn, {:param_cast, _}) do conn |> put_status(:bad_request) |> json(dgettext("errors", "Invalid parameters")) end - def errors(conn, _) do + defp errors(conn, _) do conn |> put_status(:internal_server_error) |> json(dgettext("errors", "Something went wrong")) diff --git a/lib/pleroma/web/fallback_redirect_controller.ex b/lib/pleroma/web/fallback_redirect_controller.ex index c13518030..0d9d578fc 100644 --- a/lib/pleroma/web/fallback_redirect_controller.ex +++ b/lib/pleroma/web/fallback_redirect_controller.ex @@ -4,7 +4,9 @@ defmodule Fallback.RedirectController do use Pleroma.Web, :controller + require Logger + alias Pleroma.User alias Pleroma.Web.Metadata diff --git a/lib/pleroma/web/masto_fe_controller.ex b/lib/pleroma/web/masto_fe_controller.ex index 557cde328..9a2ec517a 100644 --- a/lib/pleroma/web/masto_fe_controller.ex +++ b/lib/pleroma/web/masto_fe_controller.ex @@ -13,11 +13,14 @@ defmodule Pleroma.Web.MastoFEController do # Note: :index action handles attempt of unauthenticated access to private instance with redirect plug( OAuthScopesPlug, - %{scopes: ["read"], fallback: :proceed_unauthenticated, skip_instance_privacy_check: true} + %{scopes: ["read"], fallback: :proceed_unauthenticated} when action == :index ) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug when action not in [:index, :manifest]) + plug( + :skip_plug, + Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug when action in [:index, :manifest] + ) @doc "GET /web/*path" def index(%{assigns: %{user: user, token: token}} = conn, _params) diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index e8e59ac66..9b8cc0d0d 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -26,12 +26,24 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do alias Pleroma.Web.OAuth.Token alias Pleroma.Web.TwitterAPI.TwitterAPI - plug(:skip_plug, OAuthScopesPlug when action == :identity_proofs) + plug(:skip_plug, OAuthScopesPlug when action in [:create, :identity_proofs]) + + plug( + :skip_plug, + Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug + when action in [:create, :show, :statuses] + ) plug( OAuthScopesPlug, %{fallback: :proceed_unauthenticated, scopes: ["read:accounts"]} - when action == :show + when action in [:show, :endorsements] + ) + + plug( + OAuthScopesPlug, + %{fallback: :proceed_unauthenticated, scopes: ["read:statuses"]} + when action == :statuses ) plug( @@ -56,21 +68,15 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do plug(OAuthScopesPlug, %{scopes: ["read:follows"]} when action == :relationships) - # Note: :follows (POST /api/v1/follows) is the same as :follow, consider removing :follows plug( OAuthScopesPlug, - %{scopes: ["follow", "write:follows"]} when action in [:follows, :follow, :unfollow] + %{scopes: ["follow", "write:follows"]} when action in [:follow_by_uri, :follow, :unfollow] ) plug(OAuthScopesPlug, %{scopes: ["follow", "read:mutes"]} when action == :mutes) plug(OAuthScopesPlug, %{scopes: ["follow", "write:mutes"]} when action in [:mute, :unmute]) - plug( - Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug - when action not in [:create, :show, :statuses] - ) - @relationship_actions [:follow, :unfollow] @needs_account ~W(followers following lists follow unfollow mute unmute block unblock)a @@ -356,7 +362,7 @@ def unblock(%{assigns: %{user: blocker, account: blocked}} = conn, _params) do end @doc "POST /api/v1/follows" - def follows(%{assigns: %{user: follower}} = conn, %{"uri" => uri}) do + def follow_by_uri(%{assigns: %{user: follower}} = conn, %{"uri" => uri}) do with {_, %User{} = followed} <- {:followed, User.get_cached_by_nickname(uri)}, {_, true} <- {:followed, follower.id != followed.id}, {:ok, follower, followed, _} <- CommonAPI.follow(follower, followed) do diff --git a/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex b/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex index 37b389382..753b3db3e 100644 --- a/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex @@ -13,10 +13,10 @@ defmodule Pleroma.Web.MastodonAPI.AuthController do action_fallback(Pleroma.Web.MastodonAPI.FallbackController) - @local_mastodon_name "Mastodon-Local" - plug(Pleroma.Plugs.RateLimiter, [name: :password_reset] when action == :password_reset) + @local_mastodon_name "Mastodon-Local" + @doc "GET /web/login" def login(%{assigns: %{user: %User{}}} = conn, _params) do redirect(conn, to: local_mastodon_root_path(conn)) diff --git a/lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex b/lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex index 7c9b11bf1..c44641526 100644 --- a/lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex @@ -14,9 +14,7 @@ defmodule Pleroma.Web.MastodonAPI.ConversationController do action_fallback(Pleroma.Web.MastodonAPI.FallbackController) plug(OAuthScopesPlug, %{scopes: ["read:statuses"]} when action == :index) - plug(OAuthScopesPlug, %{scopes: ["write:conversations"]} when action == :read) - - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) + plug(OAuthScopesPlug, %{scopes: ["write:conversations"]} when action != :index) @doc "GET /api/v1/conversations" def index(%{assigns: %{user: user}} = conn, params) do @@ -28,7 +26,7 @@ def index(%{assigns: %{user: user}} = conn, params) do end @doc "POST /api/v1/conversations/:id/read" - def read(%{assigns: %{user: user}} = conn, %{"id" => participation_id}) do + def mark_as_read(%{assigns: %{user: user}} = conn, %{"id" => participation_id}) do with %Participation{} = participation <- Repo.get_by(Participation, id: participation_id, user_id: user.id), {:ok, participation} <- Participation.mark_as_read(participation) do diff --git a/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex b/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex index 84de79413..c4fa383f2 100644 --- a/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex @@ -21,8 +21,6 @@ defmodule Pleroma.Web.MastodonAPI.DomainBlockController do %{scopes: ["follow", "write:blocks"]} when action != :index ) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) - @doc "GET /api/v1/domain_blocks" def index(%{assigns: %{user: user}} = conn, _) do json(conn, Map.get(user, :domain_blocks, [])) diff --git a/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex b/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex index 7b0b937a2..7fd0562c9 100644 --- a/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex @@ -17,8 +17,6 @@ defmodule Pleroma.Web.MastodonAPI.FilterController do %{scopes: ["write:filters"]} when action not in @oauth_read_actions ) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) - @doc "GET /api/v1/filters" def index(%{assigns: %{user: user}} = conn, _) do filters = Filter.get_filters(user) diff --git a/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex b/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex index 1ca86f63f..25f2269b9 100644 --- a/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex @@ -21,8 +21,6 @@ defmodule Pleroma.Web.MastodonAPI.FollowRequestController do %{scopes: ["follow", "write:follows"]} when action != :index ) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) - @doc "GET /api/v1/follow_requests" def index(%{assigns: %{user: followed}} = conn, _params) do follow_requests = User.get_follow_requests(followed) diff --git a/lib/pleroma/web/mastodon_api/controllers/list_controller.ex b/lib/pleroma/web/mastodon_api/controllers/list_controller.ex index dac4daa7b..bfe856025 100644 --- a/lib/pleroma/web/mastodon_api/controllers/list_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/list_controller.ex @@ -11,16 +11,16 @@ defmodule Pleroma.Web.MastodonAPI.ListController do plug(:list_by_id_and_user when action not in [:index, :create]) - plug(OAuthScopesPlug, %{scopes: ["read:lists"]} when action in [:index, :show, :list_accounts]) + @oauth_read_actions [:index, :show, :list_accounts] + + plug(OAuthScopesPlug, %{scopes: ["read:lists"]} when action in @oauth_read_actions) plug( OAuthScopesPlug, %{scopes: ["write:lists"]} - when action in [:create, :update, :delete, :add_to_list, :remove_from_list] + when action not in @oauth_read_actions ) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) - action_fallback(Pleroma.Web.MastodonAPI.FallbackController) # GET /api/v1/lists diff --git a/lib/pleroma/web/mastodon_api/controllers/marker_controller.ex b/lib/pleroma/web/mastodon_api/controllers/marker_controller.ex index 58e8a30c2..9f9d4574e 100644 --- a/lib/pleroma/web/mastodon_api/controllers/marker_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/marker_controller.ex @@ -13,7 +13,7 @@ defmodule Pleroma.Web.MastodonAPI.MarkerController do ) plug(OAuthScopesPlug, %{scopes: ["write:statuses"]} when action == :upsert) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) + action_fallback(Pleroma.Web.MastodonAPI.FallbackController) # GET /api/v1/markers diff --git a/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex index ac8c18f24..f0492b189 100644 --- a/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex @@ -17,8 +17,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do plug(:skip_plug, Pleroma.Plugs.OAuthScopesPlug when action in [:empty_array, :empty_object]) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) - action_fallback(Pleroma.Web.MastodonAPI.FallbackController) def empty_array(conn, _) do diff --git a/lib/pleroma/web/mastodon_api/controllers/media_controller.ex b/lib/pleroma/web/mastodon_api/controllers/media_controller.ex index 2b6f00952..e36751220 100644 --- a/lib/pleroma/web/mastodon_api/controllers/media_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/media_controller.ex @@ -15,8 +15,6 @@ defmodule Pleroma.Web.MastodonAPI.MediaController do plug(OAuthScopesPlug, %{scopes: ["write:media"]}) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) - @doc "POST /api/v1/media" def create(%{assigns: %{user: user}} = conn, %{"file" => file} = data) do with {:ok, object} <- diff --git a/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex b/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex index 7fb536b09..311405277 100644 --- a/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex @@ -20,8 +20,6 @@ defmodule Pleroma.Web.MastodonAPI.NotificationController do plug(OAuthScopesPlug, %{scopes: ["write:notifications"]} when action not in @oauth_read_actions) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) - # GET /api/v1/notifications def index(conn, %{"account_id" => account_id} = params) do case Pleroma.User.get_cached_by_id(account_id) do diff --git a/lib/pleroma/web/mastodon_api/controllers/poll_controller.ex b/lib/pleroma/web/mastodon_api/controllers/poll_controller.ex index d9f894118..af9b66eff 100644 --- a/lib/pleroma/web/mastodon_api/controllers/poll_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/poll_controller.ex @@ -22,8 +22,6 @@ defmodule Pleroma.Web.MastodonAPI.PollController do plug(OAuthScopesPlug, %{scopes: ["write:statuses"]} when action == :vote) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) - @doc "GET /api/v1/polls/:id" def show(%{assigns: %{user: user}} = conn, %{"id" => id}) do with %Object{} = object <- Object.get_by_id_and_maybe_refetch(id, interval: 60), diff --git a/lib/pleroma/web/mastodon_api/controllers/report_controller.ex b/lib/pleroma/web/mastodon_api/controllers/report_controller.ex index f5782be13..9fbaa7bd1 100644 --- a/lib/pleroma/web/mastodon_api/controllers/report_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/report_controller.ex @@ -11,8 +11,6 @@ defmodule Pleroma.Web.MastodonAPI.ReportController do plug(OAuthScopesPlug, %{scopes: ["write:reports"]} when action == :create) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) - @doc "POST /api/v1/reports" def create(%{assigns: %{user: user}} = conn, params) do with {:ok, activity} <- Pleroma.Web.CommonAPI.report(user, params) do diff --git a/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex b/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex index e1e6bd89b..899b78873 100644 --- a/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex @@ -18,8 +18,6 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityController do plug(OAuthScopesPlug, %{scopes: ["read:statuses"]} when action in @oauth_read_actions) plug(OAuthScopesPlug, %{scopes: ["write:statuses"]} when action not in @oauth_read_actions) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) - action_fallback(Pleroma.Web.MastodonAPI.FallbackController) @doc "GET /api/v1/scheduled_statuses" diff --git a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex index c258742dd..b54c56967 100644 --- a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex @@ -21,8 +21,6 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do # Note: Mastodon doesn't allow unauthenticated access (requires read:accounts / read:search) plug(OAuthScopesPlug, %{scopes: ["read:search"], fallback: :proceed_unauthenticated}) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) - plug(RateLimiter, [name: :search] when action in [:search, :search2, :account_search]) def account_search(%{assigns: %{user: user}} = conn, %{"q" => query} = params) do diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex index 397dd10e3..eade83aaf 100644 --- a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex @@ -77,7 +77,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do %{scopes: ["write:bookmarks"]} when action in [:bookmark, :unbookmark] ) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug when action not in [:index, :show]) + plug(:skip_plug, Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug when action in [:index, :show]) @rate_limited_status_actions ~w(reblog unreblog favourite unfavourite create delete)a diff --git a/lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex b/lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex index 4647c1f96..d184ea1d0 100644 --- a/lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex @@ -12,7 +12,7 @@ defmodule Pleroma.Web.MastodonAPI.SubscriptionController do action_fallback(:errors) plug(Pleroma.Plugs.OAuthScopesPlug, %{scopes: ["push"]}) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) + plug(:restrict_push_enabled) # Creates PushSubscription diff --git a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex index b3c58005e..891f924bc 100644 --- a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex @@ -26,7 +26,7 @@ defmodule Pleroma.Web.MastodonAPI.TimelineController do plug(OAuthScopesPlug, %{scopes: ["read:statuses"]} when action in [:home, :direct]) plug(OAuthScopesPlug, %{scopes: ["read:lists"]} when action == :list) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug when action != :public) + plug(:skip_plug, Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug when action == :public) plug(:put_view, Pleroma.Web.MastodonAPI.StatusView) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index 1a09ac62a..4657a4383 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -4,6 +4,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do use Pleroma.Web, :controller + alias Pleroma.ReverseProxy alias Pleroma.Web.MediaProxy diff --git a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex index 60405fbff..d6ffdcbe4 100644 --- a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex @@ -17,6 +17,13 @@ defmodule Pleroma.Web.PleromaAPI.AccountController do require Pleroma.Constants + plug(:skip_plug, OAuthScopesPlug when action == :confirmation_resend) + + plug( + :skip_plug, + Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug when action == :confirmation_resend + ) + plug( OAuthScopesPlug, %{scopes: ["follow", "write:follows"]} when action in [:subscribe, :unsubscribe] @@ -35,13 +42,8 @@ defmodule Pleroma.Web.PleromaAPI.AccountController do plug(OAuthScopesPlug, %{scopes: ["read:favourites"]} when action == :favourites) - # An extra safety measure for possible actions not guarded by OAuth permissions specification - plug( - Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug - when action != :confirmation_resend - ) - plug(RateLimiter, [name: :account_confirmation_resend] when action == :confirmation_resend) + plug(:assign_account_by_id when action in [:favourites, :subscribe, :unsubscribe]) plug(:put_view, Pleroma.Web.MastodonAPI.AccountView) diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex index 03e95e020..e01825b48 100644 --- a/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex @@ -1,6 +1,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIController do use Pleroma.Web, :controller + alias Pleroma.Plugs.ExpectPublicOrAuthenticatedCheckPlug alias Pleroma.Plugs.OAuthScopesPlug require Logger @@ -11,17 +12,20 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIController do when action in [ :create, :delete, - :download_from, - :list_from, + :save_from, :import_from_fs, :update_file, :update_metadata ] ) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) + plug( + :skip_plug, + [OAuthScopesPlug, ExpectPublicOrAuthenticatedCheckPlug] + when action in [:download_shared, :list_packs, :list_from] + ) - def emoji_dir_path do + defp emoji_dir_path do Path.join( Pleroma.Config.get!([:instance, :static_dir]), "emoji" @@ -212,13 +216,13 @@ defp shareable_packs_available(address) do end @doc """ - An admin endpoint to request downloading a pack named `pack_name` from the instance + An admin endpoint to request downloading and storing a pack named `pack_name` from the instance `instance_address`. If the requested instance's admin chose to share the pack, it will be downloaded from that instance, otherwise it will be downloaded from the fallback source, if there is one. """ - def download_from(conn, %{"instance_address" => address, "pack_name" => name} = data) do + def save_from(conn, %{"instance_address" => address, "pack_name" => name} = data) do address = String.trim(address) if shareable_packs_available(address) do diff --git a/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex b/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex index d9c1c8636..d4e0d8b7c 100644 --- a/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex @@ -12,8 +12,6 @@ defmodule Pleroma.Web.PleromaAPI.MascotController do plug(OAuthScopesPlug, %{scopes: ["read:accounts"]} when action == :show) plug(OAuthScopesPlug, %{scopes: ["write:accounts"]} when action != :show) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) - @doc "GET /api/v1/pleroma/mascot" def show(%{assigns: %{user: user}} = conn, _params) do json(conn, User.get_mascot(user)) diff --git a/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex b/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex index fe1b97a20..7a65697e8 100644 --- a/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex @@ -34,12 +34,14 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIController do plug( OAuthScopesPlug, - %{scopes: ["write:conversations"]} when action in [:update_conversation, :read_conversations] + %{scopes: ["write:conversations"]} + when action in [:update_conversation, :mark_conversations_as_read] ) - plug(OAuthScopesPlug, %{scopes: ["write:notifications"]} when action == :read_notification) - - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) + plug( + OAuthScopesPlug, + %{scopes: ["write:notifications"]} when action == :mark_notifications_as_read + ) def emoji_reactions_by(%{assigns: %{user: user}} = conn, %{"id" => activity_id} = params) do with %Activity{} = activity <- Activity.get_by_id_with_object(activity_id), @@ -167,7 +169,7 @@ def update_conversation( end end - def read_conversations(%{assigns: %{user: user}} = conn, _params) do + def mark_conversations_as_read(%{assigns: %{user: user}} = conn, _params) do with {:ok, _, participations} <- Participation.mark_all_as_read(user) do conn |> add_link_headers(participations) @@ -176,7 +178,7 @@ def read_conversations(%{assigns: %{user: user}} = conn, _params) do end end - def read_notification(%{assigns: %{user: user}} = conn, %{"id" => notification_id}) do + def mark_notifications_as_read(%{assigns: %{user: user}} = conn, %{"id" => notification_id}) do with {:ok, notification} <- Notification.read_one(user, notification_id) do conn |> put_view(NotificationView) @@ -189,7 +191,7 @@ def read_notification(%{assigns: %{user: user}} = conn, %{"id" => notification_i end end - def read_notification(%{assigns: %{user: user}} = conn, %{"max_id" => max_id} = params) do + def mark_notifications_as_read(%{assigns: %{user: user}} = conn, %{"max_id" => max_id} = params) do with notifications <- Notification.set_read_up_to(user, max_id) do notifications = Enum.take(notifications, 80) diff --git a/lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex b/lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex index 4463ec477..c81e8535e 100644 --- a/lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex @@ -16,8 +16,6 @@ defmodule Pleroma.Web.PleromaAPI.ScrobbleController do plug(OAuthScopesPlug, %{scopes: ["read"]} when action == :user_scrobbles) plug(OAuthScopesPlug, %{scopes: ["write"]} when action != :user_scrobbles) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) - def new_scrobble(%{assigns: %{user: user}} = conn, %{"title" => _} = params) do params = if !params["length"] do diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 153802a43..04c1c5941 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -16,6 +16,14 @@ defmodule Pleroma.Web.Router do plug(Pleroma.Plugs.UserEnabledPlug) end + pipeline :expect_authentication do + plug(Pleroma.Plugs.ExpectAuthenticatedCheckPlug) + end + + pipeline :expect_public_instance_or_authentication do + plug(Pleroma.Plugs.ExpectPublicOrAuthenticatedCheckPlug) + end + pipeline :authenticate do plug(Pleroma.Plugs.OAuthPlug) plug(Pleroma.Plugs.BasicAuthDecoderPlug) @@ -39,20 +47,22 @@ defmodule Pleroma.Web.Router do end pipeline :api do + plug(:expect_public_instance_or_authentication) plug(:base_api) plug(:after_auth) plug(Pleroma.Plugs.IdempotencyPlug) end pipeline :authenticated_api do + plug(:expect_authentication) plug(:base_api) - plug(Pleroma.Plugs.AuthExpectedPlug) plug(:after_auth) plug(Pleroma.Plugs.EnsureAuthenticatedPlug) plug(Pleroma.Plugs.IdempotencyPlug) end pipeline :admin_api do + plug(:expect_authentication) plug(:base_api) plug(Pleroma.Plugs.AdminSecretAuthenticationPlug) plug(:after_auth) @@ -200,24 +210,28 @@ defmodule Pleroma.Web.Router do end scope "/api/pleroma/emoji", Pleroma.Web.PleromaAPI do + # Modifying packs scope "/packs" do - # Modifying packs pipe_through(:admin_api) post("/import_from_fs", EmojiAPIController, :import_from_fs) - post("/:pack_name/update_file", EmojiAPIController, :update_file) post("/:pack_name/update_metadata", EmojiAPIController, :update_metadata) put("/:name", EmojiAPIController, :create) delete("/:name", EmojiAPIController, :delete) - post("/download_from", EmojiAPIController, :download_from) - post("/list_from", EmojiAPIController, :list_from) + + # Note: /download_from downloads and saves to instance, not to requester + post("/download_from", EmojiAPIController, :save_from) end + # Pack info / downloading scope "/packs" do - # Pack info / downloading get("/", EmojiAPIController, :list_packs) get("/:name/download_shared/", EmojiAPIController, :download_shared) + get("/list_from", EmojiAPIController, :list_from) + + # Deprecated: POST /api/pleroma/emoji/packs/list_from (use GET instead) + post("/list_from", EmojiAPIController, :list_from) end end @@ -277,7 +291,7 @@ defmodule Pleroma.Web.Router do get("/conversations/:id/statuses", PleromaAPIController, :conversation_statuses) get("/conversations/:id", PleromaAPIController, :conversation) - post("/conversations/read", PleromaAPIController, :read_conversations) + post("/conversations/read", PleromaAPIController, :mark_conversations_as_read) end scope [] do @@ -286,7 +300,7 @@ defmodule Pleroma.Web.Router do patch("/conversations/:id", PleromaAPIController, :update_conversation) put("/statuses/:id/reactions/:emoji", PleromaAPIController, :react_with_emoji) delete("/statuses/:id/reactions/:emoji", PleromaAPIController, :unreact_with_emoji) - post("/notifications/read", PleromaAPIController, :read_notification) + post("/notifications/read", PleromaAPIController, :mark_notifications_as_read) patch("/accounts/update_avatar", AccountController, :update_avatar) patch("/accounts/update_banner", AccountController, :update_banner) @@ -322,53 +336,81 @@ defmodule Pleroma.Web.Router do pipe_through(:authenticated_api) get("/accounts/verify_credentials", AccountController, :verify_credentials) + patch("/accounts/update_credentials", AccountController, :update_credentials) get("/accounts/relationships", AccountController, :relationships) - get("/accounts/:id/lists", AccountController, :lists) get("/accounts/:id/identity_proofs", AccountController, :identity_proofs) - - get("/follow_requests", FollowRequestController, :index) + get("/endorsements", AccountController, :endorsements) get("/blocks", AccountController, :blocks) get("/mutes", AccountController, :mutes) - get("/timelines/home", TimelineController, :home) - get("/timelines/direct", TimelineController, :direct) + post("/follows", AccountController, :follow_by_uri) + post("/accounts/:id/follow", AccountController, :follow) + post("/accounts/:id/unfollow", AccountController, :unfollow) + post("/accounts/:id/block", AccountController, :block) + post("/accounts/:id/unblock", AccountController, :unblock) + post("/accounts/:id/mute", AccountController, :mute) + post("/accounts/:id/unmute", AccountController, :unmute) - get("/favourites", StatusController, :favourites) - get("/bookmarks", StatusController, :bookmarks) + get("/conversations", ConversationController, :index) + post("/conversations/:id/read", ConversationController, :mark_as_read) + + get("/domain_blocks", DomainBlockController, :index) + post("/domain_blocks", DomainBlockController, :create) + delete("/domain_blocks", DomainBlockController, :delete) + + get("/filters", FilterController, :index) + + post("/filters", FilterController, :create) + get("/filters/:id", FilterController, :show) + put("/filters/:id", FilterController, :update) + delete("/filters/:id", FilterController, :delete) + + get("/follow_requests", FollowRequestController, :index) + post("/follow_requests/:id/authorize", FollowRequestController, :authorize) + post("/follow_requests/:id/reject", FollowRequestController, :reject) + + get("/lists", ListController, :index) + get("/lists/:id", ListController, :show) + get("/lists/:id/accounts", ListController, :list_accounts) + + delete("/lists/:id", ListController, :delete) + post("/lists", ListController, :create) + put("/lists/:id", ListController, :update) + post("/lists/:id/accounts", ListController, :add_to_list) + delete("/lists/:id/accounts", ListController, :remove_from_list) + + get("/markers", MarkerController, :index) + post("/markers", MarkerController, :upsert) + + post("/media", MediaController, :create) + put("/media/:id", MediaController, :update) get("/notifications", NotificationController, :index) get("/notifications/:id", NotificationController, :show) + post("/notifications/:id/dismiss", NotificationController, :dismiss) post("/notifications/clear", NotificationController, :clear) delete("/notifications/destroy_multiple", NotificationController, :destroy_multiple) # Deprecated: was removed in Mastodon v3, use `/notifications/:id/dismiss` instead post("/notifications/dismiss", NotificationController, :dismiss) + post("/polls/:id/votes", PollController, :vote) + + post("/reports", ReportController, :create) + get("/scheduled_statuses", ScheduledActivityController, :index) get("/scheduled_statuses/:id", ScheduledActivityController, :show) - get("/lists", ListController, :index) - get("/lists/:id", ListController, :show) - get("/lists/:id/accounts", ListController, :list_accounts) + put("/scheduled_statuses/:id", ScheduledActivityController, :update) + delete("/scheduled_statuses/:id", ScheduledActivityController, :delete) - get("/domain_blocks", DomainBlockController, :index) - - get("/filters", FilterController, :index) - - get("/suggestions", SuggestionController, :index) - - get("/conversations", ConversationController, :index) - post("/conversations/:id/read", ConversationController, :read) - - get("/endorsements", AccountController, :endorsements) - - patch("/accounts/update_credentials", AccountController, :update_credentials) + get("/favourites", StatusController, :favourites) + get("/bookmarks", StatusController, :bookmarks) post("/statuses", StatusController, :create) delete("/statuses/:id", StatusController, :delete) - post("/statuses/:id/reblog", StatusController, :reblog) post("/statuses/:id/unreblog", StatusController, :unreblog) post("/statuses/:id/favourite", StatusController, :favourite) @@ -380,49 +422,15 @@ defmodule Pleroma.Web.Router do post("/statuses/:id/mute", StatusController, :mute_conversation) post("/statuses/:id/unmute", StatusController, :unmute_conversation) - put("/scheduled_statuses/:id", ScheduledActivityController, :update) - delete("/scheduled_statuses/:id", ScheduledActivityController, :delete) - - post("/polls/:id/votes", PollController, :vote) - - post("/media", MediaController, :create) - put("/media/:id", MediaController, :update) - - delete("/lists/:id", ListController, :delete) - post("/lists", ListController, :create) - put("/lists/:id", ListController, :update) - - post("/lists/:id/accounts", ListController, :add_to_list) - delete("/lists/:id/accounts", ListController, :remove_from_list) - - post("/filters", FilterController, :create) - get("/filters/:id", FilterController, :show) - put("/filters/:id", FilterController, :update) - delete("/filters/:id", FilterController, :delete) - - post("/reports", ReportController, :create) - - post("/follows", AccountController, :follows) - post("/accounts/:id/follow", AccountController, :follow) - post("/accounts/:id/unfollow", AccountController, :unfollow) - post("/accounts/:id/block", AccountController, :block) - post("/accounts/:id/unblock", AccountController, :unblock) - post("/accounts/:id/mute", AccountController, :mute) - post("/accounts/:id/unmute", AccountController, :unmute) - - post("/follow_requests/:id/authorize", FollowRequestController, :authorize) - post("/follow_requests/:id/reject", FollowRequestController, :reject) - - post("/domain_blocks", DomainBlockController, :create) - delete("/domain_blocks", DomainBlockController, :delete) - post("/push/subscription", SubscriptionController, :create) get("/push/subscription", SubscriptionController, :get) put("/push/subscription", SubscriptionController, :update) delete("/push/subscription", SubscriptionController, :delete) - get("/markers", MarkerController, :index) - post("/markers", MarkerController, :upsert) + get("/suggestions", SuggestionController, :index) + + get("/timelines/home", TimelineController, :home) + get("/timelines/direct", TimelineController, :direct) end scope "/api/web", Pleroma.Web do @@ -507,7 +515,11 @@ defmodule Pleroma.Web.Router do get("/oauth_tokens", TwitterAPI.Controller, :oauth_tokens) delete("/oauth_tokens/:id", TwitterAPI.Controller, :revoke_token) - post("/qvitter/statuses/notifications/read", TwitterAPI.Controller, :notifications_read) + post( + "/qvitter/statuses/notifications/read", + TwitterAPI.Controller, + :mark_notifications_as_read + ) end pipeline :ostatus do diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index 537f9f778..9a4c39fa9 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -25,13 +25,6 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do when action == :follow_import ) - # Note: follower can submit the form (with password auth) not being signed in (having no token) - plug( - OAuthScopesPlug, - %{fallback: :proceed_unauthenticated, scopes: ["follow", "write:follows"]} - when action == :do_remote_follow - ) - plug(OAuthScopesPlug, %{scopes: ["follow", "write:blocks"]} when action == :blocks_import) plug( diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index 31adc2817..55228616a 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -13,12 +13,13 @@ defmodule Pleroma.Web.TwitterAPI.Controller do require Logger - plug(OAuthScopesPlug, %{scopes: ["write:notifications"]} when action == :notifications_read) + plug( + OAuthScopesPlug, + %{scopes: ["write:notifications"]} when action == :mark_notifications_as_read + ) plug(:skip_plug, OAuthScopesPlug when action in [:oauth_tokens, :revoke_token]) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) - action_fallback(:errors) def confirm_email(conn, %{"user_id" => uid, "token" => token}) do @@ -64,7 +65,10 @@ defp json_reply(conn, status, json) do |> send_resp(status, json) end - def notifications_read(%{assigns: %{user: user}} = conn, %{"latest_id" => latest_id} = params) do + def mark_notifications_as_read( + %{assigns: %{user: user}} = conn, + %{"latest_id" => latest_id} = params + ) do Notification.set_read_up_to(user, latest_id) notifications = Notification.for_user(user, params) @@ -75,7 +79,7 @@ def notifications_read(%{assigns: %{user: user}} = conn, %{"latest_id" => latest |> render("index.json", %{notifications: notifications, for: user}) end - def notifications_read(%{assigns: %{user: _user}} = conn, _) do + def mark_notifications_as_read(%{assigns: %{user: _user}} = conn, _) do bad_request_reply(conn, "You need to specify latest_id") end diff --git a/lib/pleroma/web/web.ex b/lib/pleroma/web/web.ex index bf48ce26c..ec04c05f0 100644 --- a/lib/pleroma/web/web.ex +++ b/lib/pleroma/web/web.ex @@ -2,6 +2,11 @@ # Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only +defmodule Pleroma.Web.Plug do + # Substitute for `call/2` which is defined with `use Pleroma.Web, :plug` + @callback perform(Plug.Conn.t(), Plug.opts()) :: Plug.Conn.t() +end + defmodule Pleroma.Web do @moduledoc """ A module that keeps using definitions for controllers, @@ -20,44 +25,79 @@ defmodule Pleroma.Web do below. """ + alias Pleroma.Plugs.EnsureAuthenticatedPlug + alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug + alias Pleroma.Plugs.ExpectAuthenticatedCheckPlug + alias Pleroma.Plugs.ExpectPublicOrAuthenticatedCheckPlug + alias Pleroma.Plugs.OAuthScopesPlug + alias Pleroma.Plugs.PlugHelper + def controller do quote do use Phoenix.Controller, namespace: Pleroma.Web import Plug.Conn + import Pleroma.Web.Gettext import Pleroma.Web.Router.Helpers import Pleroma.Web.TranslationHelpers - alias Pleroma.Plugs.PlugHelper - plug(:set_put_layout) defp set_put_layout(conn, _) do put_layout(conn, Pleroma.Config.get(:app_layout, "app.html")) end - # Marks a plug intentionally skipped and blocks its execution if it's present in plugs chain - defp skip_plug(conn, plug_module) do - try do - plug_module.skip_plug(conn) - rescue - UndefinedFunctionError -> - raise "#{plug_module} is not skippable. Append `use Pleroma.Web, :plug` to its code." - end + # Marks plugs intentionally skipped and blocks their execution if present in plugs chain + defp skip_plug(conn, plug_modules) do + plug_modules + |> List.wrap() + |> Enum.reduce( + conn, + fn plug_module, conn -> + try do + plug_module.skip_plug(conn) + rescue + UndefinedFunctionError -> + raise "`#{plug_module}` is not skippable. Append `use Pleroma.Web, :plug` to its code." + end + end + ) end # Executed just before actual controller action, invokes before-action hooks (callbacks) defp action(conn, params) do - with %Plug.Conn{halted: false} <- maybe_halt_on_missing_oauth_scopes_check(conn) do + with %Plug.Conn{halted: false} <- maybe_perform_public_or_authenticated_check(conn), + %Plug.Conn{halted: false} <- maybe_perform_authenticated_check(conn), + %Plug.Conn{halted: false} <- maybe_halt_on_missing_oauth_scopes_check(conn) do super(conn, params) end end + # Ensures instance is public -or- user is authenticated if such check was scheduled + defp maybe_perform_public_or_authenticated_check(conn) do + if PlugHelper.plug_called?(conn, ExpectPublicOrAuthenticatedCheckPlug) do + EnsurePublicOrAuthenticatedPlug.call(conn, %{}) + else + conn + end + end + + # Ensures user is authenticated if such check was scheduled + # Note: runs prior to action even if it was already executed earlier in plug chain + # (since OAuthScopesPlug has option of proceeding unauthenticated) + defp maybe_perform_authenticated_check(conn) do + if PlugHelper.plug_called?(conn, ExpectAuthenticatedCheckPlug) do + EnsureAuthenticatedPlug.call(conn, %{}) + else + conn + end + end + # Halts if authenticated API action neither performs nor explicitly skips OAuth scopes check defp maybe_halt_on_missing_oauth_scopes_check(conn) do - if Pleroma.Plugs.AuthExpectedPlug.auth_expected?(conn) && - not PlugHelper.plug_called_or_skipped?(conn, Pleroma.Plugs.OAuthScopesPlug) do + if PlugHelper.plug_called?(conn, ExpectAuthenticatedCheckPlug) and + not PlugHelper.plug_called_or_skipped?(conn, OAuthScopesPlug) do conn |> render_error( :forbidden, @@ -132,7 +172,8 @@ def channel do def plug do quote do - alias Pleroma.Plugs.PlugHelper + @behaviour Pleroma.Web.Plug + @behaviour Plug @doc """ Marks a plug intentionally skipped and blocks its execution if it's present in plugs chain. @@ -146,14 +187,22 @@ def skip_plug(conn) do end @impl Plug - @doc "If marked as skipped, returns `conn`, and calls `perform/2` otherwise." + @doc """ + If marked as skipped, returns `conn`, otherwise calls `perform/2`. + Note: multiple invocations of the same plug (with different or same options) are allowed. + """ def call(%Plug.Conn{} = conn, options) do if PlugHelper.plug_skipped?(conn, __MODULE__) do conn else - conn - |> PlugHelper.append_to_private_list(PlugHelper.called_plugs_list_id(), __MODULE__) - |> perform(options) + conn = + PlugHelper.append_to_private_list( + conn, + PlugHelper.called_plugs_list_id(), + __MODULE__ + ) + + apply(__MODULE__, :perform, [conn, options]) end end end diff --git a/test/plugs/ensure_authenticated_plug_test.exs b/test/plugs/ensure_authenticated_plug_test.exs index 7f3559b83..689fe757f 100644 --- a/test/plugs/ensure_authenticated_plug_test.exs +++ b/test/plugs/ensure_authenticated_plug_test.exs @@ -20,7 +20,7 @@ test "it continues if a user is assigned", %{conn: conn} do conn = assign(conn, :user, %User{}) ret_conn = EnsureAuthenticatedPlug.call(conn, %{}) - assert ret_conn == conn + refute ret_conn.halted end end @@ -34,20 +34,22 @@ test "it continues if a user is assigned", %{conn: conn} do test "it continues if a user is assigned", %{conn: conn, true_fn: true_fn, false_fn: false_fn} do conn = assign(conn, :user, %User{}) - assert EnsureAuthenticatedPlug.call(conn, if_func: true_fn) == conn - assert EnsureAuthenticatedPlug.call(conn, if_func: false_fn) == conn - assert EnsureAuthenticatedPlug.call(conn, unless_func: true_fn) == conn - assert EnsureAuthenticatedPlug.call(conn, unless_func: false_fn) == conn + refute EnsureAuthenticatedPlug.call(conn, if_func: true_fn).halted + refute EnsureAuthenticatedPlug.call(conn, if_func: false_fn).halted + refute EnsureAuthenticatedPlug.call(conn, unless_func: true_fn).halted + refute EnsureAuthenticatedPlug.call(conn, unless_func: false_fn).halted end test "it continues if a user is NOT assigned but :if_func evaluates to `false`", %{conn: conn, false_fn: false_fn} do - assert EnsureAuthenticatedPlug.call(conn, if_func: false_fn) == conn + ret_conn = EnsureAuthenticatedPlug.call(conn, if_func: false_fn) + refute ret_conn.halted end test "it continues if a user is NOT assigned but :unless_func evaluates to `true`", %{conn: conn, true_fn: true_fn} do - assert EnsureAuthenticatedPlug.call(conn, unless_func: true_fn) == conn + ret_conn = EnsureAuthenticatedPlug.call(conn, unless_func: true_fn) + refute ret_conn.halted end test "it halts if a user is NOT assigned and :if_func evaluates to `true`", diff --git a/test/plugs/ensure_public_or_authenticated_plug_test.exs b/test/plugs/ensure_public_or_authenticated_plug_test.exs index 411252274..fc2934369 100644 --- a/test/plugs/ensure_public_or_authenticated_plug_test.exs +++ b/test/plugs/ensure_public_or_authenticated_plug_test.exs @@ -29,7 +29,7 @@ test "it continues if public", %{conn: conn} do conn |> EnsurePublicOrAuthenticatedPlug.call(%{}) - assert ret_conn == conn + refute ret_conn.halted end test "it continues if a user is assigned, even if not public", %{conn: conn} do @@ -43,6 +43,6 @@ test "it continues if a user is assigned, even if not public", %{conn: conn} do conn |> EnsurePublicOrAuthenticatedPlug.call(%{}) - assert ret_conn == conn + refute ret_conn.halted end end diff --git a/test/plugs/oauth_scopes_plug_test.exs b/test/plugs/oauth_scopes_plug_test.exs index edbc94227..884de7b4d 100644 --- a/test/plugs/oauth_scopes_plug_test.exs +++ b/test/plugs/oauth_scopes_plug_test.exs @@ -5,17 +5,12 @@ defmodule Pleroma.Plugs.OAuthScopesPlugTest do use Pleroma.Web.ConnCase, async: true - alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.Repo import Mock import Pleroma.Factory - setup_with_mocks([{EnsurePublicOrAuthenticatedPlug, [], [call: fn conn, _ -> conn end]}]) do - :ok - end - test "is not performed if marked as skipped", %{conn: conn} do with_mock OAuthScopesPlug, [:passthrough], perform: &passthrough([&1, &2]) do conn = @@ -60,7 +55,7 @@ test "if `token.scopes` fulfills specified 'all of' conditions, " <> describe "with `fallback: :proceed_unauthenticated` option, " do test "if `token.scopes` doesn't fulfill specified conditions, " <> - "clears :user and :token assigns and calls EnsurePublicOrAuthenticatedPlug", + "clears :user and :token assigns", %{conn: conn} do user = insert(:user) token1 = insert(:oauth_token, scopes: ["read", "write"], user: user) @@ -79,35 +74,6 @@ test "if `token.scopes` doesn't fulfill specified conditions, " <> refute ret_conn.halted refute ret_conn.assigns[:user] refute ret_conn.assigns[:token] - - assert called(EnsurePublicOrAuthenticatedPlug.call(ret_conn, :_)) - end - end - - test "with :skip_instance_privacy_check option, " <> - "if `token.scopes` doesn't fulfill specified conditions, " <> - "clears :user and :token assigns and does NOT call EnsurePublicOrAuthenticatedPlug", - %{conn: conn} do - user = insert(:user) - token1 = insert(:oauth_token, scopes: ["read:statuses", "write"], user: user) - - for token <- [token1, nil], op <- [:|, :&] do - ret_conn = - conn - |> assign(:user, user) - |> assign(:token, token) - |> OAuthScopesPlug.call(%{ - scopes: ["read"], - op: op, - fallback: :proceed_unauthenticated, - skip_instance_privacy_check: true - }) - - refute ret_conn.halted - refute ret_conn.assigns[:user] - refute ret_conn.assigns[:token] - - refute called(EnsurePublicOrAuthenticatedPlug.call(ret_conn, :_)) end 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 fbacb3993..eca526604 100644 --- a/test/web/activity_pub/activity_pub_controller_test.exs +++ b/test/web/activity_pub/activity_pub_controller_test.exs @@ -766,7 +766,7 @@ test "it requires authentication if instance is NOT federating", %{ end describe "POST /users/:nickname/outbox" do - test "it rejects posts from other users / unauuthenticated users", %{conn: conn} do + test "it rejects posts from other users / unauthenticated users", %{conn: conn} do data = File.read!("test/fixtures/activitypub-client-post-activity.json") |> Poison.decode!() user = insert(:user) other_user = insert(:user) diff --git a/test/web/pleroma_api/controllers/emoji_api_controller_test.exs b/test/web/pleroma_api/controllers/emoji_api_controller_test.exs index 435fb6592..4246eb400 100644 --- a/test/web/pleroma_api/controllers/emoji_api_controller_test.exs +++ b/test/web/pleroma_api/controllers/emoji_api_controller_test.exs @@ -38,8 +38,7 @@ test "shared & non-shared pack information in list_packs is ok" do end test "listing remote packs" do - admin = insert(:user, is_admin: true) - %{conn: conn} = oauth_access(["admin:write"], user: admin) + conn = build_conn() resp = build_conn() @@ -76,7 +75,7 @@ test "downloading a shared pack from download_shared" do assert Enum.find(arch, fn {n, _} -> n == 'blank.png' end) end - test "downloading shared & unshared packs from another instance via download_from, deleting them" do + test "downloading shared & unshared packs from another instance, deleting them" do on_exit(fn -> File.rm_rf!("#{@emoji_dir_path}/test_pack2") File.rm_rf!("#{@emoji_dir_path}/test_pack_nonshared2") @@ -136,7 +135,7 @@ test "downloading shared & unshared packs from another instance via download_fro |> post( emoji_api_path( conn, - :download_from + :save_from ), %{ instance_address: "https://old-instance", @@ -152,7 +151,7 @@ test "downloading shared & unshared packs from another instance via download_fro |> post( emoji_api_path( conn, - :download_from + :save_from ), %{ instance_address: "https://example.com", @@ -179,7 +178,7 @@ test "downloading shared & unshared packs from another instance via download_fro |> post( emoji_api_path( conn, - :download_from + :save_from ), %{ instance_address: "https://example.com", diff --git a/test/web/twitter_api/twitter_api_controller_test.exs b/test/web/twitter_api/twitter_api_controller_test.exs index ab0a2c3df..464d0ea2e 100644 --- a/test/web/twitter_api/twitter_api_controller_test.exs +++ b/test/web/twitter_api/twitter_api_controller_test.exs @@ -19,13 +19,9 @@ test "without valid credentials", %{conn: conn} do end test "with credentials, without any params" do - %{user: current_user, conn: conn} = - oauth_access(["read:notifications", "write:notifications"]) + %{conn: conn} = oauth_access(["write:notifications"]) - conn = - conn - |> assign(:user, current_user) - |> post("/api/qvitter/statuses/notifications/read") + conn = post(conn, "/api/qvitter/statuses/notifications/read") assert json_response(conn, 400) == %{ "error" => "You need to specify latest_id", From f0238d010a61ab935b61beebd5674593a75f17dc Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 21 Apr 2020 23:30:24 +0400 Subject: [PATCH 299/581] Improve OpenAPI schema - Removes unneeded wrapping in examples - Adds `:format` attributes --- lib/pleroma/web/api_spec/schemas/account.ex | 152 +++++++------ .../schemas/account_create_request.ex | 6 +- .../schemas/account_create_response.ex | 12 +- .../web/api_spec/schemas/account_emoji.ex | 18 +- .../web/api_spec/schemas/account_field.ex | 14 +- .../schemas/account_field_attribute.ex | 6 +- .../schemas/account_follows_request.ex | 2 +- .../api_spec/schemas/account_relationship.ex | 26 +-- .../api_spec/schemas/app_create_request.ex | 6 +- .../api_spec/schemas/app_create_response.ex | 4 +- lib/pleroma/web/api_spec/schemas/list.ex | 6 +- lib/pleroma/web/api_spec/schemas/status.ex | 206 +++++++++--------- 12 files changed, 225 insertions(+), 233 deletions(-) diff --git a/lib/pleroma/web/api_spec/schemas/account.ex b/lib/pleroma/web/api_spec/schemas/account.ex index beb093182..3634a7c76 100644 --- a/lib/pleroma/web/api_spec/schemas/account.ex +++ b/lib/pleroma/web/api_spec/schemas/account.ex @@ -17,8 +17,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do type: :object, properties: %{ acct: %Schema{type: :string}, - avatar_static: %Schema{type: :string}, - avatar: %Schema{type: :string}, + avatar_static: %Schema{type: :string, format: :uri}, + avatar: %Schema{type: :string, format: :uri}, bot: %Schema{type: :boolean}, created_at: %Schema{type: :string, format: "date-time"}, display_name: %Schema{type: :string}, @@ -27,13 +27,13 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do follow_requests_count: %Schema{type: :integer}, followers_count: %Schema{type: :integer}, following_count: %Schema{type: :integer}, - header_static: %Schema{type: :string}, - header: %Schema{type: :string}, + header_static: %Schema{type: :string, format: :uri}, + header: %Schema{type: :string, format: :uri}, id: %Schema{type: :string}, locked: %Schema{type: :boolean}, - note: %Schema{type: :string}, + note: %Schema{type: :string, format: :html}, statuses_count: %Schema{type: :integer}, - url: %Schema{type: :string}, + url: %Schema{type: :string, format: :uri}, username: %Schema{type: :string}, pleroma: %Schema{ type: :object, @@ -104,80 +104,78 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do } }, example: %{ - "JSON" => %{ - "acct" => "foobar", - "avatar" => "https://mypleroma.com/images/avi.png", - "avatar_static" => "https://mypleroma.com/images/avi.png", - "bot" => false, - "created_at" => "2020-03-24T13:05:58.000Z", - "display_name" => "foobar", - "emojis" => [], + "acct" => "foobar", + "avatar" => "https://mypleroma.com/images/avi.png", + "avatar_static" => "https://mypleroma.com/images/avi.png", + "bot" => false, + "created_at" => "2020-03-24T13:05:58.000Z", + "display_name" => "foobar", + "emojis" => [], + "fields" => [], + "follow_requests_count" => 0, + "followers_count" => 0, + "following_count" => 1, + "header" => "https://mypleroma.com/images/banner.png", + "header_static" => "https://mypleroma.com/images/banner.png", + "id" => "9tKi3esbG7OQgZ2920", + "locked" => false, + "note" => "cofe", + "pleroma" => %{ + "allow_following_move" => true, + "background_image" => nil, + "confirmation_pending" => true, + "hide_favorites" => true, + "hide_followers" => false, + "hide_followers_count" => false, + "hide_follows" => false, + "hide_follows_count" => false, + "is_admin" => false, + "is_moderator" => false, + "skip_thread_containment" => false, + "chat_token" => + "SFMyNTY.g3QAAAACZAAEZGF0YW0AAAASOXRLaTNlc2JHN09RZ1oyOTIwZAAGc2lnbmVkbgYARNplS3EB.Mb_Iaqew2bN1I1o79B_iP7encmVCpTKC4OtHZRxdjKc", + "unread_conversation_count" => 0, + "tags" => [], + "notification_settings" => %{ + "followers" => true, + "follows" => true, + "non_followers" => true, + "non_follows" => true, + "privacy_option" => false + }, + "relationship" => %{ + "blocked_by" => false, + "blocking" => false, + "domain_blocking" => false, + "endorsed" => false, + "followed_by" => false, + "following" => false, + "id" => "9tKi3esbG7OQgZ2920", + "muting" => false, + "muting_notifications" => false, + "requested" => false, + "showing_reblogs" => true, + "subscribing" => false + }, + "settings_store" => %{ + "pleroma-fe" => %{} + } + }, + "source" => %{ "fields" => [], - "follow_requests_count" => 0, - "followers_count" => 0, - "following_count" => 1, - "header" => "https://mypleroma.com/images/banner.png", - "header_static" => "https://mypleroma.com/images/banner.png", - "id" => "9tKi3esbG7OQgZ2920", - "locked" => false, - "note" => "cofe", + "note" => "foobar", "pleroma" => %{ - "allow_following_move" => true, - "background_image" => nil, - "confirmation_pending" => true, - "hide_favorites" => true, - "hide_followers" => false, - "hide_followers_count" => false, - "hide_follows" => false, - "hide_follows_count" => false, - "is_admin" => false, - "is_moderator" => false, - "skip_thread_containment" => false, - "chat_token" => - "SFMyNTY.g3QAAAACZAAEZGF0YW0AAAASOXRLaTNlc2JHN09RZ1oyOTIwZAAGc2lnbmVkbgYARNplS3EB.Mb_Iaqew2bN1I1o79B_iP7encmVCpTKC4OtHZRxdjKc", - "unread_conversation_count" => 0, - "tags" => [], - "notification_settings" => %{ - "followers" => true, - "follows" => true, - "non_followers" => true, - "non_follows" => true, - "privacy_option" => false - }, - "relationship" => %{ - "blocked_by" => false, - "blocking" => false, - "domain_blocking" => false, - "endorsed" => false, - "followed_by" => false, - "following" => false, - "id" => "9tKi3esbG7OQgZ2920", - "muting" => false, - "muting_notifications" => false, - "requested" => false, - "showing_reblogs" => true, - "subscribing" => false - }, - "settings_store" => %{ - "pleroma-fe" => %{} - } + "actor_type" => "Person", + "discoverable" => false, + "no_rich_text" => false, + "show_role" => true }, - "source" => %{ - "fields" => [], - "note" => "foobar", - "pleroma" => %{ - "actor_type" => "Person", - "discoverable" => false, - "no_rich_text" => false, - "show_role" => true - }, - "privacy" => "public", - "sensitive" => false - }, - "statuses_count" => 0, - "url" => "https://mypleroma.com/users/foobar", - "username" => "foobar" - } + "privacy" => "public", + "sensitive" => false + }, + "statuses_count" => 0, + "url" => "https://mypleroma.com/users/foobar", + "username" => "foobar" } }) end diff --git a/lib/pleroma/web/api_spec/schemas/account_create_request.ex b/lib/pleroma/web/api_spec/schemas/account_create_request.ex index 398e2d613..49fa12159 100644 --- a/lib/pleroma/web/api_spec/schemas/account_create_request.ex +++ b/lib/pleroma/web/api_spec/schemas/account_create_request.ex @@ -23,7 +23,11 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest do "The email address to be used for login. Required when `account_activation_required` is enabled.", format: :email }, - password: %Schema{type: :string, description: "The password to be used for login"}, + password: %Schema{ + type: :string, + description: "The password to be used for login", + format: :password + }, agreement: %Schema{ type: :boolean, description: diff --git a/lib/pleroma/web/api_spec/schemas/account_create_response.ex b/lib/pleroma/web/api_spec/schemas/account_create_response.ex index f41a034c0..2237351a2 100644 --- a/lib/pleroma/web/api_spec/schemas/account_create_response.ex +++ b/lib/pleroma/web/api_spec/schemas/account_create_response.ex @@ -15,15 +15,13 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse do token_type: %Schema{type: :string}, access_token: %Schema{type: :string}, scope: %Schema{type: :array, items: %Schema{type: :string}}, - created_at: %Schema{type: :integer} + created_at: %Schema{type: :integer, format: :"date-time"} }, example: %{ - "JSON" => %{ - "access_token" => "i9hAVVzGld86Pl5JtLtizKoXVvtTlSCJvwaugCxvZzk", - "created_at" => 1_585_918_714, - "scope" => ["read", "write", "follow", "push"], - "token_type" => "Bearer" - } + "access_token" => "i9hAVVzGld86Pl5JtLtizKoXVvtTlSCJvwaugCxvZzk", + "created_at" => 1_585_918_714, + "scope" => ["read", "write", "follow", "push"], + "token_type" => "Bearer" } }) end diff --git a/lib/pleroma/web/api_spec/schemas/account_emoji.ex b/lib/pleroma/web/api_spec/schemas/account_emoji.ex index 403b13b15..6c1d4d95c 100644 --- a/lib/pleroma/web/api_spec/schemas/account_emoji.ex +++ b/lib/pleroma/web/api_spec/schemas/account_emoji.ex @@ -13,19 +13,17 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountEmoji do type: :object, properties: %{ shortcode: %Schema{type: :string}, - url: %Schema{type: :string}, - static_url: %Schema{type: :string}, + url: %Schema{type: :string, format: :uri}, + static_url: %Schema{type: :string, format: :uri}, visible_in_picker: %Schema{type: :boolean} }, example: %{ - "JSON" => %{ - "shortcode" => "fatyoshi", - "url" => - "https://files.mastodon.social/custom_emojis/images/000/023/920/original/e57ecb623faa0dc9.png", - "static_url" => - "https://files.mastodon.social/custom_emojis/images/000/023/920/static/e57ecb623faa0dc9.png", - "visible_in_picker" => true - } + "shortcode" => "fatyoshi", + "url" => + "https://files.mastodon.social/custom_emojis/images/000/023/920/original/e57ecb623faa0dc9.png", + "static_url" => + "https://files.mastodon.social/custom_emojis/images/000/023/920/static/e57ecb623faa0dc9.png", + "visible_in_picker" => true } }) end diff --git a/lib/pleroma/web/api_spec/schemas/account_field.ex b/lib/pleroma/web/api_spec/schemas/account_field.ex index 8906d812d..fa97073a0 100644 --- a/lib/pleroma/web/api_spec/schemas/account_field.ex +++ b/lib/pleroma/web/api_spec/schemas/account_field.ex @@ -13,16 +13,14 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountField do type: :object, properties: %{ name: %Schema{type: :string}, - value: %Schema{type: :string}, - verified_at: %Schema{type: :string, format: "date-time", nullable: true} + value: %Schema{type: :string, format: :html}, + verified_at: %Schema{type: :string, format: :"date-time", nullable: true} }, example: %{ - "JSON" => %{ - "name" => "Website", - "value" => - "https://pleroma.com", - "verified_at" => "2019-08-29T04:14:55.571+00:00" - } + "name" => "Website", + "value" => + "https://pleroma.com", + "verified_at" => "2019-08-29T04:14:55.571+00:00" } }) end diff --git a/lib/pleroma/web/api_spec/schemas/account_field_attribute.ex b/lib/pleroma/web/api_spec/schemas/account_field_attribute.ex index fbbdf95f5..89e483655 100644 --- a/lib/pleroma/web/api_spec/schemas/account_field_attribute.ex +++ b/lib/pleroma/web/api_spec/schemas/account_field_attribute.ex @@ -17,10 +17,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountAttributeField do }, required: [:name, :value], example: %{ - "JSON" => %{ - "name" => "Website", - "value" => "https://pleroma.com" - } + "name" => "Website", + "value" => "https://pleroma.com" } }) end diff --git a/lib/pleroma/web/api_spec/schemas/account_follows_request.ex b/lib/pleroma/web/api_spec/schemas/account_follows_request.ex index 4fbe615d6..19dce0cb2 100644 --- a/lib/pleroma/web/api_spec/schemas/account_follows_request.ex +++ b/lib/pleroma/web/api_spec/schemas/account_follows_request.ex @@ -11,7 +11,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountFollowsRequest do description: "POST body for muting an account", type: :object, properties: %{ - uri: %Schema{type: :string} + uri: %Schema{type: :string, format: :uri} }, required: [:uri] }) diff --git a/lib/pleroma/web/api_spec/schemas/account_relationship.ex b/lib/pleroma/web/api_spec/schemas/account_relationship.ex index 7db3b49bb..f2bd37d39 100644 --- a/lib/pleroma/web/api_spec/schemas/account_relationship.ex +++ b/lib/pleroma/web/api_spec/schemas/account_relationship.ex @@ -26,20 +26,18 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationship do subscribing: %Schema{type: :boolean} }, example: %{ - "JSON" => %{ - "blocked_by" => false, - "blocking" => false, - "domain_blocking" => false, - "endorsed" => false, - "followed_by" => false, - "following" => false, - "id" => "9tKi3esbG7OQgZ2920", - "muting" => false, - "muting_notifications" => false, - "requested" => false, - "showing_reblogs" => true, - "subscribing" => false - } + "blocked_by" => false, + "blocking" => false, + "domain_blocking" => false, + "endorsed" => false, + "followed_by" => false, + "following" => false, + "id" => "9tKi3esbG7OQgZ2920", + "muting" => false, + "muting_notifications" => false, + "requested" => false, + "showing_reblogs" => true, + "subscribing" => false } }) end diff --git a/lib/pleroma/web/api_spec/schemas/app_create_request.ex b/lib/pleroma/web/api_spec/schemas/app_create_request.ex index 8a83abef3..7e92205cf 100644 --- a/lib/pleroma/web/api_spec/schemas/app_create_request.ex +++ b/lib/pleroma/web/api_spec/schemas/app_create_request.ex @@ -21,7 +21,11 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AppCreateRequest do type: :string, description: "Space separated list of scopes. If none is provided, defaults to `read`." }, - website: %Schema{type: :string, description: "A URL to the homepage of your app"} + website: %Schema{ + type: :string, + description: "A URL to the homepage of your app", + format: :uri + } }, required: [:client_name, :redirect_uris], example: %{ diff --git a/lib/pleroma/web/api_spec/schemas/app_create_response.ex b/lib/pleroma/web/api_spec/schemas/app_create_response.ex index f290fb031..3c41d4ee5 100644 --- a/lib/pleroma/web/api_spec/schemas/app_create_response.ex +++ b/lib/pleroma/web/api_spec/schemas/app_create_response.ex @@ -16,9 +16,9 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AppCreateResponse do name: %Schema{type: :string}, client_id: %Schema{type: :string}, client_secret: %Schema{type: :string}, - redirect_uri: %Schema{type: :string}, + redirect_uri: %Schema{type: :string, format: :uri}, vapid_key: %Schema{type: :string}, - website: %Schema{type: :string, nullable: true} + website: %Schema{type: :string, nullable: true, format: :uri} }, example: %{ "id" => "123", diff --git a/lib/pleroma/web/api_spec/schemas/list.ex b/lib/pleroma/web/api_spec/schemas/list.ex index 30fa7db93..f85fac2b8 100644 --- a/lib/pleroma/web/api_spec/schemas/list.ex +++ b/lib/pleroma/web/api_spec/schemas/list.ex @@ -16,10 +16,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.List do title: %Schema{type: :string} }, example: %{ - "JSON" => %{ - "id" => "123", - "title" => "my list" - } + "id" => "123", + "title" => "my list" } }) end diff --git a/lib/pleroma/web/api_spec/schemas/status.ex b/lib/pleroma/web/api_spec/schemas/status.ex index 486c3a0fe..a022450e6 100644 --- a/lib/pleroma/web/api_spec/schemas/status.ex +++ b/lib/pleroma/web/api_spec/schemas/status.ex @@ -21,7 +21,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do type: :object, properties: %{ name: %Schema{type: :string}, - website: %Schema{type: :string, nullable: true} + website: %Schema{type: :string, nullable: true, format: :uri} } }, bookmarked: %Schema{type: :boolean}, @@ -29,16 +29,16 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do type: :object, nullable: true, properties: %{ - type: %Schema{type: :string}, - provider_name: %Schema{type: :string}, - provider_url: %Schema{type: :string}, - url: %Schema{type: :string}, - image: %Schema{type: :string}, + type: %Schema{type: :string, enum: ["link", "photo", "video", "rich"]}, + provider_name: %Schema{type: :string, nullable: true}, + provider_url: %Schema{type: :string, format: :uri}, + url: %Schema{type: :string, format: :uri}, + image: %Schema{type: :string, nullable: true, format: :uri}, title: %Schema{type: :string}, description: %Schema{type: :string} } }, - content: %Schema{type: :string}, + content: %Schema{type: :string, format: :html}, created_at: %Schema{type: :string, format: "date-time"}, emojis: %Schema{type: :array, items: AccountEmoji}, favourited: %Schema{type: :boolean}, @@ -53,10 +53,10 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do type: :object, properties: %{ id: %Schema{type: :string}, - url: %Schema{type: :string}, - remote_url: %Schema{type: :string}, - preview_url: %Schema{type: :string}, - text_url: %Schema{type: :string}, + url: %Schema{type: :string, format: :uri}, + remote_url: %Schema{type: :string, format: :uri}, + preview_url: %Schema{type: :string, format: :uri}, + text_url: %Schema{type: :string, format: :uri}, description: %Schema{type: :string}, type: %Schema{type: :string, enum: ["image", "video", "audio", "unknown"]}, pleroma: %Schema{ @@ -74,7 +74,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do id: %Schema{type: :string}, acct: %Schema{type: :string}, username: %Schema{type: :string}, - url: %Schema{type: :string} + url: %Schema{type: :string, format: :uri} } } }, @@ -120,108 +120,106 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do type: :object, properties: %{ name: %Schema{type: :string}, - url: %Schema{type: :string} + url: %Schema{type: :string, format: :uri} } } }, - uri: %Schema{type: :string}, - url: %Schema{type: :string}, + uri: %Schema{type: :string, format: :uri}, + url: %Schema{type: :string, nullable: true, format: :uri}, visibility: VisibilityScope }, example: %{ - "JSON" => %{ - "account" => %{ - "acct" => "nick6", - "avatar" => "http://localhost:4001/images/avi.png", - "avatar_static" => "http://localhost:4001/images/avi.png", - "bot" => false, - "created_at" => "2020-04-07T19:48:51.000Z", - "display_name" => "Test テスト User 6", - "emojis" => [], - "fields" => [], - "followers_count" => 1, - "following_count" => 0, - "header" => "http://localhost:4001/images/banner.png", - "header_static" => "http://localhost:4001/images/banner.png", - "id" => "9toJCsKN7SmSf3aj5c", - "locked" => false, - "note" => "Tester Number 6", - "pleroma" => %{ - "background_image" => nil, - "confirmation_pending" => false, - "hide_favorites" => true, - "hide_followers" => false, - "hide_followers_count" => false, - "hide_follows" => false, - "hide_follows_count" => false, - "is_admin" => false, - "is_moderator" => false, - "relationship" => %{ - "blocked_by" => false, - "blocking" => false, - "domain_blocking" => false, - "endorsed" => false, - "followed_by" => false, - "following" => true, - "id" => "9toJCsKN7SmSf3aj5c", - "muting" => false, - "muting_notifications" => false, - "requested" => false, - "showing_reblogs" => true, - "subscribing" => false - }, - "skip_thread_containment" => false, - "tags" => [] - }, - "source" => %{ - "fields" => [], - "note" => "Tester Number 6", - "pleroma" => %{"actor_type" => "Person", "discoverable" => false}, - "sensitive" => false - }, - "statuses_count" => 1, - "url" => "http://localhost:4001/users/nick6", - "username" => "nick6" - }, - "application" => %{"name" => "Web", "website" => nil}, - "bookmarked" => false, - "card" => nil, - "content" => "foobar", + "account" => %{ + "acct" => "nick6", + "avatar" => "http://localhost:4001/images/avi.png", + "avatar_static" => "http://localhost:4001/images/avi.png", + "bot" => false, "created_at" => "2020-04-07T19:48:51.000Z", + "display_name" => "Test テスト User 6", "emojis" => [], - "favourited" => false, - "favourites_count" => 0, - "id" => "9toJCu5YZW7O7gfvH6", - "in_reply_to_account_id" => nil, - "in_reply_to_id" => nil, - "language" => nil, - "media_attachments" => [], - "mentions" => [], - "muted" => false, - "pinned" => false, + "fields" => [], + "followers_count" => 1, + "following_count" => 0, + "header" => "http://localhost:4001/images/banner.png", + "header_static" => "http://localhost:4001/images/banner.png", + "id" => "9toJCsKN7SmSf3aj5c", + "locked" => false, + "note" => "Tester Number 6", "pleroma" => %{ - "content" => %{"text/plain" => "foobar"}, - "conversation_id" => 345_972, - "direct_conversation_id" => nil, - "emoji_reactions" => [], - "expires_at" => nil, - "in_reply_to_account_acct" => nil, - "local" => true, - "spoiler_text" => %{"text/plain" => ""}, - "thread_muted" => false + "background_image" => nil, + "confirmation_pending" => false, + "hide_favorites" => true, + "hide_followers" => false, + "hide_followers_count" => false, + "hide_follows" => false, + "hide_follows_count" => false, + "is_admin" => false, + "is_moderator" => false, + "relationship" => %{ + "blocked_by" => false, + "blocking" => false, + "domain_blocking" => false, + "endorsed" => false, + "followed_by" => false, + "following" => true, + "id" => "9toJCsKN7SmSf3aj5c", + "muting" => false, + "muting_notifications" => false, + "requested" => false, + "showing_reblogs" => true, + "subscribing" => false + }, + "skip_thread_containment" => false, + "tags" => [] }, - "poll" => nil, - "reblog" => nil, - "reblogged" => false, - "reblogs_count" => 0, - "replies_count" => 0, - "sensitive" => false, - "spoiler_text" => "", - "tags" => [], - "uri" => "http://localhost:4001/objects/0f5dad44-0e9e-4610-b377-a2631e499190", - "url" => "http://localhost:4001/notice/9toJCu5YZW7O7gfvH6", - "visibility" => "private" - } + "source" => %{ + "fields" => [], + "note" => "Tester Number 6", + "pleroma" => %{"actor_type" => "Person", "discoverable" => false}, + "sensitive" => false + }, + "statuses_count" => 1, + "url" => "http://localhost:4001/users/nick6", + "username" => "nick6" + }, + "application" => %{"name" => "Web", "website" => nil}, + "bookmarked" => false, + "card" => nil, + "content" => "foobar", + "created_at" => "2020-04-07T19:48:51.000Z", + "emojis" => [], + "favourited" => false, + "favourites_count" => 0, + "id" => "9toJCu5YZW7O7gfvH6", + "in_reply_to_account_id" => nil, + "in_reply_to_id" => nil, + "language" => nil, + "media_attachments" => [], + "mentions" => [], + "muted" => false, + "pinned" => false, + "pleroma" => %{ + "content" => %{"text/plain" => "foobar"}, + "conversation_id" => 345_972, + "direct_conversation_id" => nil, + "emoji_reactions" => [], + "expires_at" => nil, + "in_reply_to_account_acct" => nil, + "local" => true, + "spoiler_text" => %{"text/plain" => ""}, + "thread_muted" => false + }, + "poll" => nil, + "reblog" => nil, + "reblogged" => false, + "reblogs_count" => 0, + "replies_count" => 0, + "sensitive" => false, + "spoiler_text" => "", + "tags" => [], + "uri" => "http://localhost:4001/objects/0f5dad44-0e9e-4610-b377-a2631e499190", + "url" => "http://localhost:4001/notice/9toJCu5YZW7O7gfvH6", + "visibility" => "private" } }) end From 11433cd38d9761ddf3fdb94f8c39526910b975c1 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 21 Apr 2020 23:54:45 +0400 Subject: [PATCH 300/581] Add OpenAPI schema for FlakeID --- lib/pleroma/web/api_spec/schemas/account.ex | 22 ++++--------------- .../api_spec/schemas/account_relationship.ex | 3 ++- lib/pleroma/web/api_spec/schemas/flake_id.ex | 14 ++++++++++++ lib/pleroma/web/api_spec/schemas/poll.ex | 3 ++- lib/pleroma/web/api_spec/schemas/status.ex | 3 ++- 5 files changed, 24 insertions(+), 21 deletions(-) create mode 100644 lib/pleroma/web/api_spec/schemas/flake_id.ex diff --git a/lib/pleroma/web/api_spec/schemas/account.ex b/lib/pleroma/web/api_spec/schemas/account.ex index 3634a7c76..f57015254 100644 --- a/lib/pleroma/web/api_spec/schemas/account.ex +++ b/lib/pleroma/web/api_spec/schemas/account.ex @@ -6,7 +6,9 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do alias OpenApiSpex.Schema alias Pleroma.Web.ApiSpec.Schemas.AccountEmoji alias Pleroma.Web.ApiSpec.Schemas.AccountField + alias Pleroma.Web.ApiSpec.Schemas.AccountRelationship alias Pleroma.Web.ApiSpec.Schemas.ActorType + alias Pleroma.Web.ApiSpec.Schemas.FlakeID alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope require OpenApiSpex @@ -29,7 +31,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do following_count: %Schema{type: :integer}, header_static: %Schema{type: :string, format: :uri}, header: %Schema{type: :string, format: :uri}, - id: %Schema{type: :string}, + id: FlakeID, locked: %Schema{type: :boolean}, note: %Schema{type: :string, format: :html}, statuses_count: %Schema{type: :integer}, @@ -62,23 +64,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do privacy_option: %Schema{type: :boolean} } }, - relationship: %Schema{ - type: :object, - properties: %{ - blocked_by: %Schema{type: :boolean}, - blocking: %Schema{type: :boolean}, - domain_blocking: %Schema{type: :boolean}, - endorsed: %Schema{type: :boolean}, - followed_by: %Schema{type: :boolean}, - following: %Schema{type: :boolean}, - id: %Schema{type: :string}, - muting: %Schema{type: :boolean}, - muting_notifications: %Schema{type: :boolean}, - requested: %Schema{type: :boolean}, - showing_reblogs: %Schema{type: :boolean}, - subscribing: %Schema{type: :boolean} - } - }, + relationship: AccountRelationship, settings_store: %Schema{ type: :object } diff --git a/lib/pleroma/web/api_spec/schemas/account_relationship.ex b/lib/pleroma/web/api_spec/schemas/account_relationship.ex index f2bd37d39..8b982669e 100644 --- a/lib/pleroma/web/api_spec/schemas/account_relationship.ex +++ b/lib/pleroma/web/api_spec/schemas/account_relationship.ex @@ -4,6 +4,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationship do alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.FlakeID require OpenApiSpex @@ -18,7 +19,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationship do endorsed: %Schema{type: :boolean}, followed_by: %Schema{type: :boolean}, following: %Schema{type: :boolean}, - id: %Schema{type: :string}, + id: FlakeID, muting: %Schema{type: :boolean}, muting_notifications: %Schema{type: :boolean}, requested: %Schema{type: :boolean}, diff --git a/lib/pleroma/web/api_spec/schemas/flake_id.ex b/lib/pleroma/web/api_spec/schemas/flake_id.ex new file mode 100644 index 000000000..b8e03b8a1 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/flake_id.ex @@ -0,0 +1,14 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.FlakeID do + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "FlakeID", + description: + "Pleroma uses 128-bit ids as opposed to Mastodon's 64 bits. However just like Mastodon's ids they are sortable strings", + type: :string + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/poll.ex b/lib/pleroma/web/api_spec/schemas/poll.ex index 2a9975f85..5fc9e889f 100644 --- a/lib/pleroma/web/api_spec/schemas/poll.ex +++ b/lib/pleroma/web/api_spec/schemas/poll.ex @@ -5,6 +5,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Poll do alias OpenApiSpex.Schema alias Pleroma.Web.ApiSpec.Schemas.AccountEmoji + alias Pleroma.Web.ApiSpec.Schemas.FlakeID require OpenApiSpex @@ -13,7 +14,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Poll do description: "Response schema for account custom fields", type: :object, properties: %{ - id: %Schema{type: :string}, + id: FlakeID, expires_at: %Schema{type: :string, format: "date-time"}, expired: %Schema{type: :boolean}, multiple: %Schema{type: :boolean}, diff --git a/lib/pleroma/web/api_spec/schemas/status.ex b/lib/pleroma/web/api_spec/schemas/status.ex index a022450e6..bf5f04691 100644 --- a/lib/pleroma/web/api_spec/schemas/status.ex +++ b/lib/pleroma/web/api_spec/schemas/status.ex @@ -6,6 +6,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do alias OpenApiSpex.Schema alias Pleroma.Web.ApiSpec.Schemas.Account alias Pleroma.Web.ApiSpec.Schemas.AccountEmoji + alias Pleroma.Web.ApiSpec.Schemas.FlakeID alias Pleroma.Web.ApiSpec.Schemas.Poll alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope @@ -43,7 +44,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do emojis: %Schema{type: :array, items: AccountEmoji}, favourited: %Schema{type: :boolean}, favourites_count: %Schema{type: :integer}, - id: %Schema{type: :string}, + id: FlakeID, in_reply_to_account_id: %Schema{type: :string, nullable: true}, in_reply_to_id: %Schema{type: :string, nullable: true}, language: %Schema{type: :string, nullable: true}, From f719a5b23a9bec4ed94f36c07e24aa1413654bae Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 22 Apr 2020 13:28:34 +0200 Subject: [PATCH 301/581] WebPush: Return proper values for jobs. --- lib/pleroma/web/push/impl.ex | 3 ++- test/web/push/impl_test.exs | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/push/impl.ex b/lib/pleroma/web/push/impl.ex index f1740a6e0..a9f893f7b 100644 --- a/lib/pleroma/web/push/impl.ex +++ b/lib/pleroma/web/push/impl.ex @@ -55,11 +55,12 @@ def perform( |> Jason.encode!() |> push_message(build_sub(subscription), gcm_api_key, subscription) end + |> (&{:ok, &1}).() end def perform(_) do Logger.warn("Unknown notification type") - :error + {:error, :unknown_type} end @doc "Push message to web" diff --git a/test/web/push/impl_test.exs b/test/web/push/impl_test.exs index 9121d90e7..b2664bf28 100644 --- a/test/web/push/impl_test.exs +++ b/test/web/push/impl_test.exs @@ -63,12 +63,12 @@ test "performs sending notifications" do activity: activity ) - assert Impl.perform(notif) == [:ok, :ok] + assert Impl.perform(notif) == {:ok, [:ok, :ok]} end @tag capture_log: true test "returns error if notif does not match " do - assert Impl.perform(%{}) == :error + assert Impl.perform(%{}) == {:error, :unknown_type} end test "successful message sending" do From 923513b6417973f700a80ee969c6c92ed2c9faee Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 22 Apr 2020 13:28:52 +0200 Subject: [PATCH 302/581] Federator: Return proper values for jobs --- lib/pleroma/web/federator/federator.ex | 13 +++++++++---- test/web/federator_test.exs | 7 +++++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/web/federator/federator.ex b/lib/pleroma/web/federator/federator.ex index fd904ef0a..f5803578d 100644 --- a/lib/pleroma/web/federator/federator.ex +++ b/lib/pleroma/web/federator/federator.ex @@ -72,19 +72,24 @@ def perform(:incoming_ap_doc, params) do # actor shouldn't be acting on objects outside their own AP server. with {:ok, _user} <- ap_enabled_actor(params["actor"]), nil <- Activity.normalize(params["id"]), - :ok <- Containment.contain_origin_from_id(params["actor"], params), + {_, :ok} <- + {:correct_origin?, Containment.contain_origin_from_id(params["actor"], params)}, {:ok, activity} <- Transmogrifier.handle_incoming(params) do {:ok, activity} else + {:correct_origin?, _} -> + Logger.debug("Origin containment failure for #{params["id"]}") + {:error, :origin_containment_failed} + %Activity{} -> Logger.debug("Already had #{params["id"]}") - :error + {:error, :already_present} - _e -> + e -> # Just drop those for now Logger.debug("Unhandled activity") Logger.debug(Jason.encode!(params, pretty: true)) - :error + {:error, e} end end diff --git a/test/web/federator_test.exs b/test/web/federator_test.exs index 59e53bb03..261518ef0 100644 --- a/test/web/federator_test.exs +++ b/test/web/federator_test.exs @@ -130,6 +130,9 @@ test "successfully processes incoming AP docs with correct origin" do assert {:ok, job} = Federator.incoming_ap_doc(params) assert {:ok, _activity} = ObanHelpers.perform(job) + + assert {:ok, job} = Federator.incoming_ap_doc(params) + assert {:error, :already_present} = ObanHelpers.perform(job) end test "rejects incoming AP docs with incorrect origin" do @@ -148,7 +151,7 @@ test "rejects incoming AP docs with incorrect origin" do } assert {:ok, job} = Federator.incoming_ap_doc(params) - assert :error = ObanHelpers.perform(job) + assert {:error, :origin_containment_failed} = ObanHelpers.perform(job) end test "it does not crash if MRF rejects the post" do @@ -164,7 +167,7 @@ test "it does not crash if MRF rejects the post" do |> Poison.decode!() assert {:ok, job} = Federator.incoming_ap_doc(params) - assert :error = ObanHelpers.perform(job) + assert {:error, _} = ObanHelpers.perform(job) end end end From 5102468d0f8067548ef233b5947da4bc517f5774 Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 22 Apr 2020 14:06:39 +0200 Subject: [PATCH 303/581] Polls: Persist and show voters' count --- lib/pleroma/object.ex | 5 ++++- lib/pleroma/web/activity_pub/activity_pub.ex | 5 +++-- lib/pleroma/web/mastodon_api/views/poll_view.ex | 7 +++++++ test/web/mastodon_api/views/poll_view_test.exs | 16 ++++++++++++++-- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex index 9574432f0..e678fd415 100644 --- a/lib/pleroma/object.ex +++ b/lib/pleroma/object.ex @@ -261,7 +261,7 @@ def decrease_replies_count(ap_id) do end end - def increase_vote_count(ap_id, name) do + def increase_vote_count(ap_id, name, actor) do with %Object{} = object <- Object.normalize(ap_id), "Question" <- object.data["type"] do multiple = Map.has_key?(object.data, "anyOf") @@ -276,12 +276,15 @@ def increase_vote_count(ap_id, name) do option end) + voters = [actor | object.data["voters"] || []] |> Enum.uniq() + data = if multiple do Map.put(object.data, "anyOf", options) else Map.put(object.data, "oneOf", options) end + |> Map.put("voters", voters) object |> Object.change(%{data: data}) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index eedea08a2..4a133498e 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -118,9 +118,10 @@ def decrease_replies_count_if_reply(_object), do: :noop def increase_poll_votes_if_vote(%{ "object" => %{"inReplyTo" => reply_ap_id, "name" => name}, - "type" => "Create" + "type" => "Create", + "actor" => actor }) do - Object.increase_vote_count(reply_ap_id, name) + Object.increase_vote_count(reply_ap_id, name, actor) end def increase_poll_votes_if_vote(_create_data), do: :noop diff --git a/lib/pleroma/web/mastodon_api/views/poll_view.ex b/lib/pleroma/web/mastodon_api/views/poll_view.ex index 40edbb213..59a5deb28 100644 --- a/lib/pleroma/web/mastodon_api/views/poll_view.ex +++ b/lib/pleroma/web/mastodon_api/views/poll_view.ex @@ -19,6 +19,7 @@ def render("show.json", %{object: object, multiple: multiple, options: options} expired: expired, multiple: multiple, votes_count: votes_count, + voters_count: (multiple || nil) && voters_count(object), options: options, voted: voted?(params), emojis: Pleroma.Web.MastodonAPI.StatusView.build_emojis(object.data["emoji"]) @@ -62,6 +63,12 @@ defp options_and_votes_count(options) do end) end + defp voters_count(%{data: %{"voters" => [_ | _] = voters}}) do + length(voters) + end + + defp voters_count(_), do: 0 + defp voted?(%{object: object} = opts) do if opts[:for] do existing_votes = Pleroma.Web.ActivityPub.Utils.get_existing_votes(opts[:for].ap_id, object) diff --git a/test/web/mastodon_api/views/poll_view_test.exs b/test/web/mastodon_api/views/poll_view_test.exs index 6211fa888..63b204387 100644 --- a/test/web/mastodon_api/views/poll_view_test.exs +++ b/test/web/mastodon_api/views/poll_view_test.exs @@ -43,7 +43,8 @@ test "renders a poll" do %{title: "why are you even asking?", votes_count: 0} ], voted: false, - votes_count: 0 + votes_count: 0, + voters_count: nil } result = PollView.render("show.json", %{object: object}) @@ -69,9 +70,20 @@ test "detects if it is multiple choice" do } }) + voter = insert(:user) + object = Object.normalize(activity) - assert %{multiple: true} = PollView.render("show.json", %{object: object}) + {:ok, _votes, object} = CommonAPI.vote(voter, object, [0, 1]) + + assert match?( + %{ + multiple: true, + voters_count: 1, + votes_count: 2 + }, + PollView.render("show.json", %{object: object}) + ) end test "detects emoji" do From 568f48435e7db4582c54a443b2d543cc004f7f9b Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 22 Apr 2020 12:10:20 +0000 Subject: [PATCH 304/581] Apply suggestion to docs/installation/debian_based_en.md --- docs/installation/debian_based_en.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation/debian_based_en.md b/docs/installation/debian_based_en.md index a900ec61d..62d8733f7 100644 --- a/docs/installation/debian_based_en.md +++ b/docs/installation/debian_based_en.md @@ -7,7 +7,7 @@ This guide will assume you are on Debian Stretch. This guide should also work wi * `postgresql` (9.6+, Ubuntu 16.04 comes with 9.5, you can get a newer version from [here](https://www.postgresql.org/download/linux/ubuntu/)) * `postgresql-contrib` (9.6+, same situtation as above) -* `elixir` (1.8+, [install from here, Debian and Ubuntu ship older versions](https://elixir-lang.org/install.html#unix-and-unix-like) or use [asdf](https://github.com/asdf-vm/asdf) as the pleroma user) +* `elixir` (1.8+, Follow the guide to install from the Erlang Solutions repo or use [asdf](https://github.com/asdf-vm/asdf) as the pleroma user) * `erlang-dev` * `erlang-nox` * `git` From c10485db163d56acd7206980f91f0e51153ef36a Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 22 Apr 2020 14:26:19 +0200 Subject: [PATCH 305/581] StatusController: Ignore nil scheduled_at parameters. --- .../web/mastodon_api/controllers/status_controller.ex | 3 ++- .../controllers/status_controller_test.exs | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex index 397dd10e3..f6e4f7d66 100644 --- a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex @@ -127,7 +127,8 @@ def index(%{assigns: %{user: user}} = conn, %{"ids" => ids} = params) do def create( %{assigns: %{user: user}} = conn, %{"status" => _, "scheduled_at" => scheduled_at} = params - ) do + ) + when not is_nil(scheduled_at) do params = Map.put(params, "in_reply_to_status_id", params["in_reply_to_id"]) with {:far_enough, true} <- {:far_enough, ScheduledActivity.far_enough?(scheduled_at)}, diff --git a/test/web/mastodon_api/controllers/status_controller_test.exs b/test/web/mastodon_api/controllers/status_controller_test.exs index 162f7b1b2..85068edd0 100644 --- a/test/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/web/mastodon_api/controllers/status_controller_test.exs @@ -302,6 +302,17 @@ test "creates a scheduled activity", %{conn: conn} do assert [] == Repo.all(Activity) end + test "ignores nil values", %{conn: conn} do + conn = + post(conn, "/api/v1/statuses", %{ + "status" => "not scheduled", + "scheduled_at" => nil + }) + + assert result = json_response(conn, 200) + assert Activity.get_by_id(result["id"]) + end + test "creates a scheduled activity with a media attachment", %{user: user, conn: conn} do scheduled_at = NaiveDateTime.add(NaiveDateTime.utc_now(), :timer.minutes(120), :millisecond) From 5b3952619818d38f8fdba9a64b050ce3f24394ff Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 22 Apr 2020 15:04:26 +0200 Subject: [PATCH 306/581] AccountController: Use code 400 for self-follow. --- .../controllers/account_controller.ex | 21 ++++++++++--------- .../controllers/account_controller_test.exs | 6 +++--- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index e8e59ac66..5a92cebd8 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -293,7 +293,7 @@ def lists(%{assigns: %{user: user, account: account}} = conn, _params) do @doc "POST /api/v1/accounts/:id/follow" def follow(%{assigns: %{user: %{id: id}, account: %{id: id}}}, _params) do - {:error, :not_found} + {:error, "Can not follow yourself"} end def follow(%{assigns: %{user: follower, account: followed}} = conn, _params) do @@ -306,7 +306,7 @@ def follow(%{assigns: %{user: follower, account: followed}} = conn, _params) do @doc "POST /api/v1/accounts/:id/unfollow" def unfollow(%{assigns: %{user: %{id: id}, account: %{id: id}}}, _params) do - {:error, :not_found} + {:error, "Can not unfollow yourself"} end def unfollow(%{assigns: %{user: follower, account: followed}} = conn, _params) do @@ -356,14 +356,15 @@ def unblock(%{assigns: %{user: blocker, account: blocked}} = conn, _params) do end @doc "POST /api/v1/follows" - def follows(%{assigns: %{user: follower}} = conn, %{"uri" => uri}) do - with {_, %User{} = followed} <- {:followed, User.get_cached_by_nickname(uri)}, - {_, true} <- {:followed, follower.id != followed.id}, - {:ok, follower, followed, _} <- CommonAPI.follow(follower, followed) do - render(conn, "show.json", user: followed, for: follower) - else - {:followed, _} -> {:error, :not_found} - {:error, message} -> json_response(conn, :forbidden, %{error: message}) + def follows(conn, %{"uri" => uri}) do + case User.get_cached_by_nickname(uri) do + %User{} = user -> + conn + |> assign(:account, user) + |> follow(%{}) + + nil -> + {:error, :not_found} end end diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 61c2697b2..8c428efee 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -681,17 +681,17 @@ test "following without reblogs" do test "following / unfollowing errors", %{user: user, conn: conn} do # self follow conn_res = post(conn, "/api/v1/accounts/#{user.id}/follow") - assert %{"error" => "Record not found"} = json_response(conn_res, 404) + assert %{"error" => "Can not follow yourself"} = json_response(conn_res, 400) # self unfollow user = User.get_cached_by_id(user.id) conn_res = post(conn, "/api/v1/accounts/#{user.id}/unfollow") - assert %{"error" => "Record not found"} = json_response(conn_res, 404) + assert %{"error" => "Can not unfollow yourself"} = json_response(conn_res, 400) # self follow via uri user = User.get_cached_by_id(user.id) conn_res = post(conn, "/api/v1/follows", %{"uri" => user.nickname}) - assert %{"error" => "Record not found"} = json_response(conn_res, 404) + assert %{"error" => "Can not follow yourself"} = json_response(conn_res, 400) # follow non existing user conn_res = post(conn, "/api/v1/accounts/doesntexist/follow") From 8b88e2a6e2b3a777ca99bf94676ab47f2d4cc0ea Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 22 Apr 2020 15:31:37 +0200 Subject: [PATCH 307/581] Stats: Ignore internal users for user count. --- lib/pleroma/stats.ex | 19 ++++++++++++++----- test/{stat_test.exs => stats_test.exs} | 13 ++++++++++++- 2 files changed, 26 insertions(+), 6 deletions(-) rename test/{stat_test.exs => stats_test.exs} (84%) diff --git a/lib/pleroma/stats.ex b/lib/pleroma/stats.ex index 4446562ac..6763786a7 100644 --- a/lib/pleroma/stats.ex +++ b/lib/pleroma/stats.ex @@ -45,11 +45,11 @@ def get_peers do end def init(_args) do - {:ok, get_stat_data()} + {:ok, calculate_stat_data()} end def handle_call(:force_update, _from, _state) do - new_stats = get_stat_data() + new_stats = calculate_stat_data() {:reply, new_stats, new_stats} end @@ -58,12 +58,12 @@ def handle_call(:get_state, _from, state) do end def handle_cast(:run_update, _state) do - new_stats = get_stat_data() + new_stats = calculate_stat_data() {:noreply, new_stats} end - defp get_stat_data do + def calculate_stat_data do peers = from( u in User, @@ -77,7 +77,16 @@ defp get_stat_data do status_count = Repo.aggregate(User.Query.build(%{local: true}), :sum, :note_count) - user_count = Repo.aggregate(User.Query.build(%{local: true, active: true}), :count, :id) + users_query = + from(u in User, + where: u.deactivated != true, + where: u.local == true, + where: not is_nil(u.nickname), + where: fragment("? not like 'internal.%'", u.nickname), + where: fragment("? not like '%/relay'", u.ap_id) + ) + + user_count = Repo.aggregate(users_query, :count, :id) %{ peers: peers, diff --git a/test/stat_test.exs b/test/stats_test.exs similarity index 84% rename from test/stat_test.exs rename to test/stats_test.exs index bccc1c8d0..73c7c1495 100644 --- a/test/stat_test.exs +++ b/test/stats_test.exs @@ -2,11 +2,22 @@ # Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.StateTest do +defmodule Pleroma.StatsTest do use Pleroma.DataCase import Pleroma.Factory alias Pleroma.Web.CommonAPI + describe "user count" do + test "it ignores internal users" do + _user = insert(:user, local: true) + _internal = insert(:user, local: true, nickname: nil) + _internal = insert(:user, local: true, nickname: "internal.dude") + _internal = Pleroma.Web.ActivityPub.Relay.get_actor() + + assert match?(%{stats: %{user_count: 1}}, Pleroma.Stats.calculate_stat_data()) + end + end + describe "status visibility count" do test "on new status" do user = insert(:user) From 452072ec95781214df262962b71c60b7d771b7b1 Mon Sep 17 00:00:00 2001 From: Karol Kosek Date: Wed, 22 Apr 2020 16:02:40 +0200 Subject: [PATCH 308/581] static_fe: Add microformats2 classes --- .../templates/static_fe/static_fe/_attachment.html.eex | 6 +++--- .../web/templates/static_fe/static_fe/_notice.html.eex | 10 +++++++--- .../templates/static_fe/static_fe/_user_card.html.eex | 4 ++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/pleroma/web/templates/static_fe/static_fe/_attachment.html.eex b/lib/pleroma/web/templates/static_fe/static_fe/_attachment.html.eex index 7e04e9550..4853e7f4b 100644 --- a/lib/pleroma/web/templates/static_fe/static_fe/_attachment.html.eex +++ b/lib/pleroma/web/templates/static_fe/static_fe/_attachment.html.eex @@ -1,8 +1,8 @@ <%= case @mediaType do %> <% "audio" -> %> - + <% "video" -> %> - + <% _ -> %> -<%= @name %> +<%= @name %> <% end %> diff --git a/lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex b/lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex index df5e5eedd..df0244795 100644 --- a/lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex +++ b/lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex @@ -1,12 +1,16 @@ -
id="selected" <% end %>> +
id="selected" <% end %>>

- <%= link format_date(@published), to: @link, class: "activity-link" %> + + +

<%= render("_user_card.html", %{user: @user}) %>
<%= if @title != "" do %>
open<% end %>> - <%= raw @title %> + <%= raw @title %>
<%= raw @content %>
<% else %> diff --git a/lib/pleroma/web/templates/static_fe/static_fe/_user_card.html.eex b/lib/pleroma/web/templates/static_fe/static_fe/_user_card.html.eex index 56f3a1524..977b894d3 100644 --- a/lib/pleroma/web/templates/static_fe/static_fe/_user_card.html.eex +++ b/lib/pleroma/web/templates/static_fe/static_fe/_user_card.html.eex @@ -1,10 +1,10 @@
- +
- <%= raw Formatter.emojify(@user.name, @user.emoji) %> + <%= raw Formatter.emojify(@user.name, @user.emoji) %> <%= @user.nickname %>
From 7a3a88a13ef526fba18bb6aeadc93f5da934dc5b Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 22 Apr 2020 17:21:13 +0200 Subject: [PATCH 309/581] Streamer: Stream boosts to the boosting user. --- lib/pleroma/user.ex | 4 +++- lib/pleroma/web/streamer/worker.ex | 18 --------------- test/user_test.exs | 12 ++++++++++ test/web/streamer/streamer_test.exs | 36 +++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 19 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index bef4679cb..477237756 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1180,7 +1180,9 @@ def get_users_from_set(ap_ids, local_only \\ true) do end @spec get_recipients_from_activity(Activity.t()) :: [User.t()] - def get_recipients_from_activity(%Activity{recipients: to}) do + def get_recipients_from_activity(%Activity{recipients: to, actor: actor}) do + to = [actor | to] + User.Query.build(%{recipients_from_activity: to, local: true, deactivated: false}) |> Repo.all() end diff --git a/lib/pleroma/web/streamer/worker.ex b/lib/pleroma/web/streamer/worker.ex index abfed21c8..f6160fa4d 100644 --- a/lib/pleroma/web/streamer/worker.ex +++ b/lib/pleroma/web/streamer/worker.ex @@ -158,24 +158,6 @@ defp should_send?(%User{} = user, %Notification{activity: activity}) do should_send?(user, activity) end - def push_to_socket(topics, topic, %Activity{data: %{"type" => "Announce"}} = item) do - Enum.each(topics[topic] || [], fn %StreamerSocket{ - transport_pid: transport_pid, - user: socket_user - } -> - # Get the current user so we have up-to-date blocks etc. - if socket_user do - user = User.get_cached_by_ap_id(socket_user.ap_id) - - if should_send?(user, item) do - send(transport_pid, {:text, StreamerView.render("update.json", item, user)}) - end - else - send(transport_pid, {:text, StreamerView.render("update.json", item)}) - end - end) - end - def push_to_socket(topics, topic, %Participation{} = participation) do Enum.each(topics[topic] || [], fn %StreamerSocket{transport_pid: transport_pid} -> send(transport_pid, {:text, StreamerView.render("conversation.json", participation)}) diff --git a/test/user_test.exs b/test/user_test.exs index 65e118d6d..cd4041673 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -987,6 +987,18 @@ test "it imports user blocks from list" do end describe "get_recipients_from_activity" do + test "works for announces" do + actor = insert(:user) + user = insert(:user, local: true) + + {:ok, activity} = CommonAPI.post(actor, %{"status" => "hello"}) + {:ok, announce, _} = CommonAPI.repeat(activity.id, user) + + recipients = User.get_recipients_from_activity(announce) + + assert user in recipients + end + test "get recipients" do actor = insert(:user) user = insert(:user, local: true) diff --git a/test/web/streamer/streamer_test.exs b/test/web/streamer/streamer_test.exs index eb082b79f..8b8d8af6c 100644 --- a/test/web/streamer/streamer_test.exs +++ b/test/web/streamer/streamer_test.exs @@ -28,6 +28,42 @@ defmodule Pleroma.Web.StreamerTest do {:ok, %{user: user, notify: notify}} end + test "it streams the user's post in the 'user' stream", %{user: user} do + task = + Task.async(fn -> + assert_receive {:text, _}, @streamer_timeout + end) + + Streamer.add_socket( + "user", + %{transport_pid: task.pid, assigns: %{user: user}} + ) + + {:ok, activity} = CommonAPI.post(user, %{"status" => "hey"}) + + Streamer.stream("user", activity) + Task.await(task) + end + + test "it streams boosts of the user in the 'user' stream", %{user: user} do + task = + Task.async(fn -> + assert_receive {:text, _}, @streamer_timeout + end) + + Streamer.add_socket( + "user", + %{transport_pid: task.pid, assigns: %{user: user}} + ) + + other_user = insert(:user) + {:ok, activity} = CommonAPI.post(other_user, %{"status" => "hey"}) + {:ok, announce, _} = CommonAPI.repeat(activity.id, user) + + Streamer.stream("user", announce) + Task.await(task) + end + test "it sends notify to in the 'user' stream", %{user: user, notify: notify} do task = Task.async(fn -> From 88b82e5c3edae649f1caa45c6ef805828e4b8b1e Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 21 Apr 2020 20:05:25 +0400 Subject: [PATCH 310/581] Fix follow import --- .../controllers/util_controller.ex | 25 +++++++++---------- test/web/twitter_api/util_controller_test.exs | 24 ++++++++++++++++++ 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index 537f9f778..824951d59 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -199,15 +199,16 @@ def follow_import(conn, %{"list" => %Plug.Upload{} = listfile}) do end def follow_import(%{assigns: %{user: follower}} = conn, %{"list" => list}) do - with lines <- String.split(list, "\n"), - followed_identifiers <- - Enum.map(lines, fn line -> - String.split(line, ",") |> List.first() - end) - |> List.delete("Account address") do - User.follow_import(follower, followed_identifiers) - json(conn, "job started") - end + followed_identifiers = + list + |> String.split("\n") + |> Enum.map(&(&1 |> String.split(",") |> List.first())) + |> List.delete("Account address") + |> Enum.map(&(&1 |> String.trim() |> String.trim_leading("@"))) + |> Enum.reject(&(&1 == "")) + + User.follow_import(follower, followed_identifiers) + json(conn, "job started") end def blocks_import(conn, %{"list" => %Plug.Upload{} = listfile}) do @@ -215,10 +216,8 @@ def blocks_import(conn, %{"list" => %Plug.Upload{} = listfile}) do end def blocks_import(%{assigns: %{user: blocker}} = conn, %{"list" => list}) do - with blocked_identifiers <- String.split(list) do - User.blocks_import(blocker, blocked_identifiers) - json(conn, "job started") - end + User.blocks_import(blocker, _blocked_identifiers = String.split(list)) + json(conn, "job started") end def change_password(%{assigns: %{user: user}} = conn, params) do diff --git a/test/web/twitter_api/util_controller_test.exs b/test/web/twitter_api/util_controller_test.exs index 30e54bebd..85aaab19b 100644 --- a/test/web/twitter_api/util_controller_test.exs +++ b/test/web/twitter_api/util_controller_test.exs @@ -95,6 +95,30 @@ test "requires 'follow' or 'write:follows' permissions" do end end end + + test "it imports with different nickname variations", %{conn: conn} do + [user2, user3, user4, user5, user6] = insert_list(5, :user) + + identifiers = + [ + user2.ap_id, + user3.nickname, + " ", + "@" <> user4.nickname, + user5.nickname <> "@localhost", + "@" <> user6.nickname <> "@localhost" + ] + |> Enum.join("\n") + + response = + conn + |> post("/api/pleroma/follow_import", %{"list" => identifiers}) + |> json_response(:ok) + + assert response == "job started" + assert [job_result] = ObanHelpers.perform_all() + assert job_result == [user2, user3, user4, user5, user6] + end end describe "POST /api/pleroma/blocks_import" do From e7771424a895572626ec36a98bf862952dc6ff07 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 22 Apr 2020 18:13:13 +0400 Subject: [PATCH 311/581] Fix blocks import --- .../controllers/util_controller.ex | 3 ++- test/web/twitter_api/util_controller_test.exs | 25 ++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index 824951d59..d5d5ce08f 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -216,7 +216,8 @@ def blocks_import(conn, %{"list" => %Plug.Upload{} = listfile}) do end def blocks_import(%{assigns: %{user: blocker}} = conn, %{"list" => list}) do - User.blocks_import(blocker, _blocked_identifiers = String.split(list)) + blocked_identifiers = list |> String.split() |> Enum.map(&String.trim_leading(&1, "@")) + User.blocks_import(blocker, blocked_identifiers) json(conn, "job started") end diff --git a/test/web/twitter_api/util_controller_test.exs b/test/web/twitter_api/util_controller_test.exs index 85aaab19b..d835331ae 100644 --- a/test/web/twitter_api/util_controller_test.exs +++ b/test/web/twitter_api/util_controller_test.exs @@ -96,7 +96,7 @@ test "requires 'follow' or 'write:follows' permissions" do end end - test "it imports with different nickname variations", %{conn: conn} do + test "it imports follows with different nickname variations", %{conn: conn} do [user2, user3, user4, user5, user6] = insert_list(5, :user) identifiers = @@ -160,6 +160,29 @@ test "it imports blocks users from file", %{user: user1, conn: conn} do ) end end + + test "it imports blocks with different nickname variations", %{conn: conn} do + [user2, user3, user4, user5, user6] = insert_list(5, :user) + + identifiers = + [ + user2.ap_id, + user3.nickname, + "@" <> user4.nickname, + user5.nickname <> "@localhost", + "@" <> user6.nickname <> "@localhost" + ] + |> Enum.join(" ") + + response = + conn + |> post("/api/pleroma/blocks_import", %{"list" => identifiers}) + |> json_response(:ok) + + assert response == "job started" + assert [job_result] = ObanHelpers.perform_all() + assert job_result == [user2, user3, user4, user5, user6] + end end describe "PUT /api/pleroma/notification_settings" do From 6db52c3b3680efbdb56d53d84d5dec0f4b6e34f0 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 22 Apr 2020 19:00:08 +0400 Subject: [PATCH 312/581] Fix Oban warning Warning example: [warn] Expected Elixir.Pleroma.Workers.BackgroundWorker.perform/2 to return :ok, {:ok, value}, or {:error, reason}. Instead received: [error: "not found @user@server.party", error: "not found "] The job will be considered a success. --- lib/pleroma/workers/background_worker.ex | 4 ++-- test/user_test.exs | 4 ++-- test/web/twitter_api/util_controller_test.exs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/workers/background_worker.ex b/lib/pleroma/workers/background_worker.ex index 0f8ece2c4..57c3a9c3a 100644 --- a/lib/pleroma/workers/background_worker.ex +++ b/lib/pleroma/workers/background_worker.ex @@ -35,7 +35,7 @@ def perform( _job ) do blocker = User.get_cached_by_id(blocker_id) - User.perform(:blocks_import, blocker, blocked_identifiers) + {:ok, User.perform(:blocks_import, blocker, blocked_identifiers)} end def perform( @@ -47,7 +47,7 @@ def perform( _job ) do follower = User.get_cached_by_id(follower_id) - User.perform(:follow_import, follower, followed_identifiers) + {:ok, User.perform(:follow_import, follower, followed_identifiers)} end def perform(%{"op" => "media_proxy_preload", "message" => message}, _job) do diff --git a/test/user_test.exs b/test/user_test.exs index 65e118d6d..23e7cf6e3 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -756,8 +756,8 @@ test "it imports user followings from list" do ] {:ok, job} = User.follow_import(user1, identifiers) - result = ObanHelpers.perform(job) + assert {:ok, result} = ObanHelpers.perform(job) assert is_list(result) assert result == [user2, user3] end @@ -979,8 +979,8 @@ test "it imports user blocks from list" do ] {:ok, job} = User.blocks_import(user1, identifiers) - result = ObanHelpers.perform(job) + assert {:ok, result} = ObanHelpers.perform(job) assert is_list(result) assert result == [user2, user3] end diff --git a/test/web/twitter_api/util_controller_test.exs b/test/web/twitter_api/util_controller_test.exs index d835331ae..b701239a0 100644 --- a/test/web/twitter_api/util_controller_test.exs +++ b/test/web/twitter_api/util_controller_test.exs @@ -116,7 +116,7 @@ test "it imports follows with different nickname variations", %{conn: conn} do |> json_response(:ok) assert response == "job started" - assert [job_result] = ObanHelpers.perform_all() + assert [{:ok, job_result}] = ObanHelpers.perform_all() assert job_result == [user2, user3, user4, user5, user6] end end @@ -180,7 +180,7 @@ test "it imports blocks with different nickname variations", %{conn: conn} do |> json_response(:ok) assert response == "job started" - assert [job_result] = ObanHelpers.perform_all() + assert [{:ok, job_result}] = ObanHelpers.perform_all() assert job_result == [user2, user3, user4, user5, user6] end end From 771c1ad735eb06842278e823a29acb94fd9acafb Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 22 Apr 2020 19:31:03 +0400 Subject: [PATCH 313/581] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d8e7efc3..702c58180 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixed - Support pagination in conversations API - **Breaking**: SimplePolicy `:reject` and `:accept` allow deletions again +- Fix follower/blocks import when nicknames starts with @ ## [unreleased-patch] ### Fixed From b03aeae8b935b0a211c51cc3be5f1c15591f5a2f Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Wed, 22 Apr 2020 15:31:41 +0000 Subject: [PATCH 314/581] Apply suggestion to lib/pleroma/notification.ex --- lib/pleroma/notification.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index d305a43ba..aaa675253 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -362,7 +362,7 @@ def get_notified_from_activity(%Activity{data: %{"type" => type}} = activity, lo def get_notified_from_activity(_, _local_only), do: {[], []} - @doc "Filters out AP IDs of users who domain-block and not follow activity actor" + @doc "Filters out AP IDs domain-blocking and not following the activity's actor" def exclude_domain_blocker_ap_ids(ap_ids, activity, preloaded_users \\ []) def exclude_domain_blocker_ap_ids([], _activity, _preloaded_users), do: [] From 2958a7d246f40141a88bcb7bdd6a477c4f65f0bc Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Wed, 22 Apr 2020 18:50:25 +0300 Subject: [PATCH 315/581] Fixed OAuth restrictions for :api routes. Made auth info dropped for :api routes if OAuth check was neither performed nor explicitly skipped. --- docs/dev.md | 26 +++++--------- lib/pleroma/plugs/oauth_scopes_plug.ex | 13 +++++-- .../controllers/account_controller.ex | 4 +-- .../controllers/app_controller.ex | 8 +++++ .../controllers/custom_emoji_controller.ex | 6 ++++ .../controllers/instance_controller.ex | 6 ++++ .../controllers/mastodon_api_controller.ex | 6 +++- .../controllers/search_controller.ex | 2 ++ .../controllers/timeline_controller.ex | 17 +++++++--- .../controllers/pleroma_api_controller.ex | 6 ++++ .../controllers/scrobble_controller.ex | 6 +++- lib/pleroma/web/router.ex | 34 ++++++++----------- .../web/twitter_api/twitter_api_controller.ex | 6 ++-- lib/pleroma/web/web.ex | 14 +++++++- 14 files changed, 101 insertions(+), 53 deletions(-) diff --git a/docs/dev.md b/docs/dev.md index 0ecf43a9e..f1b4cbf8b 100644 --- a/docs/dev.md +++ b/docs/dev.md @@ -4,29 +4,19 @@ This document contains notes and guidelines for Pleroma developers. ## OAuth token-based authentication & authorization -* Pleroma supports hierarchical OAuth scopes, just like Mastodon but with added granularity of admin scopes. - For a reference, see [Mastodon OAuth scopes](https://docs.joinmastodon.org/api/oauth-scopes/). +* Pleroma supports hierarchical OAuth scopes, just like Mastodon but with added granularity of admin scopes. For a reference, see [Mastodon OAuth scopes](https://docs.joinmastodon.org/api/oauth-scopes/). -* It is important to either define OAuth scope restrictions or explicitly mark OAuth scope check as skipped, for every - controller action. To define scopes, call `plug(Pleroma.Plugs.OAuthScopesPlug, %{scopes: [...]})`. To explicitly set - OAuth scopes check skipped, call `plug(:skip_plug, Pleroma.Plugs.OAuthScopesPlug )`. +* It is important to either define OAuth scope restrictions or explicitly mark OAuth scope check as skipped, for every controller action. To define scopes, call `plug(Pleroma.Plugs.OAuthScopesPlug, %{scopes: [...]})`. To explicitly set OAuth scopes check skipped, call `plug(:skip_plug, Pleroma.Plugs.OAuthScopesPlug )`. -* In controllers, `use Pleroma.Web, :controller` will result in `action/2` (see `Pleroma.Web.controller/0` for definition) - be called prior to actual controller action, and it'll perform security / privacy checks before passing control to - actual controller action. For routes with `:authenticated_api` pipeline, authentication & authorization are expected, - thus `OAuthScopesPlug` will be run unless explicitly skipped (also `EnsureAuthenticatedPlug` will be executed - immediately before action even if there was an early run to give an early error, since `OAuthScopesPlug` supports - `:proceed_unauthenticated` option, and other plugs may support similar options as well). For `:api` pipeline routes, - `EnsurePublicOrAuthenticatedPlug` will be called to ensure that the instance is not private or user is authenticated - (unless explicitly skipped). Such automated checks help to prevent human errors and result in higher security / privacy - for users. +* In controllers, `use Pleroma.Web, :controller` will result in `action/2` (see `Pleroma.Web.controller/0` for definition) be called prior to actual controller action, and it'll perform security / privacy checks before passing control to actual controller action. + + For routes with `:authenticated_api` pipeline, authentication & authorization are expected, thus `OAuthScopesPlug` will be run unless explicitly skipped (also `EnsureAuthenticatedPlug` will be executed immediately before action even if there was an early run to give an early error, since `OAuthScopesPlug` supports `:proceed_unauthenticated` option, and other plugs may support similar options as well). + + For `:api` pipeline routes, it'll be verified whether `OAuthScopesPlug` was called or explicitly skipped, and if it was not then auth information will be dropped for request. Then `EnsurePublicOrAuthenticatedPlug` will be called to ensure that either the instance is not private or user is authenticated (unless explicitly skipped). Such automated checks help to prevent human errors and result in higher security / privacy for users. ## [HTTP Basic Authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization) -* With HTTP Basic Auth, OAuth scopes check is _not_ performed for any action (since password is provided during the auth, - requester is able to obtain a token with full permissions anyways). `Pleroma.Plugs.AuthenticationPlug` and - `Pleroma.Plugs.LegacyAuthenticationPlug` both call `Pleroma.Plugs.OAuthScopesPlug.skip_plug(conn)` when password - is provided. +* With HTTP Basic Auth, OAuth scopes check is _not_ performed for any action (since password is provided during the auth, requester is able to obtain a token with full permissions anyways). `Pleroma.Plugs.AuthenticationPlug` and `Pleroma.Plugs.LegacyAuthenticationPlug` both call `Pleroma.Plugs.OAuthScopesPlug.skip_plug(conn)` when password is provided. ## Auth-related configuration, OAuth consumer mode etc. diff --git a/lib/pleroma/plugs/oauth_scopes_plug.ex b/lib/pleroma/plugs/oauth_scopes_plug.ex index a61582566..efc25b79f 100644 --- a/lib/pleroma/plugs/oauth_scopes_plug.ex +++ b/lib/pleroma/plugs/oauth_scopes_plug.ex @@ -28,9 +28,7 @@ def perform(%Plug.Conn{assigns: assigns} = conn, %{scopes: scopes} = options) do conn options[:fallback] == :proceed_unauthenticated -> - conn - |> assign(:user, nil) - |> assign(:token, nil) + drop_auth_info(conn) true -> missing_scopes = scopes -- matched_scopes @@ -46,6 +44,15 @@ def perform(%Plug.Conn{assigns: assigns} = conn, %{scopes: scopes} = options) do end end + @doc "Drops authentication info from connection" + def drop_auth_info(conn) do + # To simplify debugging, setting a private variable on `conn` if auth info is dropped + conn + |> put_private(:authentication_ignored, true) + |> assign(:user, nil) + |> assign(:token, nil) + end + @doc "Filters descendants of supported scopes" def filter_descendants(scopes, supported_scopes) do Enum.filter( diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 9b8cc0d0d..e501b3555 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -37,7 +37,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do plug( OAuthScopesPlug, %{fallback: :proceed_unauthenticated, scopes: ["read:accounts"]} - when action in [:show, :endorsements] + when action in [:show, :followers, :following, :endorsements] ) plug( @@ -49,7 +49,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do plug( OAuthScopesPlug, %{scopes: ["read:accounts"]} - when action in [:endorsements, :verify_credentials, :followers, :following] + when action in [:endorsements, :verify_credentials] ) plug(OAuthScopesPlug, %{scopes: ["write:accounts"]} when action == :update_credentials) diff --git a/lib/pleroma/web/mastodon_api/controllers/app_controller.ex b/lib/pleroma/web/mastodon_api/controllers/app_controller.ex index 005c60444..408e11474 100644 --- a/lib/pleroma/web/mastodon_api/controllers/app_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/app_controller.ex @@ -5,6 +5,7 @@ defmodule Pleroma.Web.MastodonAPI.AppController do use Pleroma.Web, :controller + alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.Repo alias Pleroma.Web.OAuth.App @@ -13,7 +14,14 @@ defmodule Pleroma.Web.MastodonAPI.AppController do action_fallback(Pleroma.Web.MastodonAPI.FallbackController) + plug( + :skip_plug, + [OAuthScopesPlug, EnsurePublicOrAuthenticatedPlug] + when action == :create + ) + plug(OAuthScopesPlug, %{scopes: ["read"]} when action == :verify_credentials) + plug(OpenApiSpex.Plug.CastAndValidate) @local_mastodon_name "Mastodon-Local" diff --git a/lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex b/lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex index 3bfebef8b..000ad743f 100644 --- a/lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex @@ -7,6 +7,12 @@ defmodule Pleroma.Web.MastodonAPI.CustomEmojiController do plug(OpenApiSpex.Plug.CastAndValidate) + plug( + :skip_plug, + [Pleroma.Plugs.OAuthScopesPlug, Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug] + when action == :index + ) + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.CustomEmojiOperation def index(conn, _params) do diff --git a/lib/pleroma/web/mastodon_api/controllers/instance_controller.ex b/lib/pleroma/web/mastodon_api/controllers/instance_controller.ex index 27b5b1a52..237f85677 100644 --- a/lib/pleroma/web/mastodon_api/controllers/instance_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/instance_controller.ex @@ -5,6 +5,12 @@ defmodule Pleroma.Web.MastodonAPI.InstanceController do use Pleroma.Web, :controller + plug( + :skip_plug, + [Pleroma.Plugs.OAuthScopesPlug, Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug] + when action in [:show, :peers] + ) + @doc "GET /api/v1/instance" def show(conn, _params) do render(conn, "show.json") diff --git a/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex index f0492b189..e7767de4e 100644 --- a/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex @@ -15,7 +15,11 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do require Logger - plug(:skip_plug, Pleroma.Plugs.OAuthScopesPlug when action in [:empty_array, :empty_object]) + plug( + :skip_plug, + [Pleroma.Plugs.OAuthScopesPlug, Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug] + when action in [:empty_array, :empty_object] + ) action_fallback(Pleroma.Web.MastodonAPI.FallbackController) diff --git a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex index b54c56967..cd49da6ad 100644 --- a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex @@ -21,6 +21,8 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do # Note: Mastodon doesn't allow unauthenticated access (requires read:accounts / read:search) plug(OAuthScopesPlug, %{scopes: ["read:search"], fallback: :proceed_unauthenticated}) + # Note: on private instances auth is required (EnsurePublicOrAuthenticatedPlug is not skipped) + plug(RateLimiter, [name: :search] when action in [:search, :search2, :account_search]) def account_search(%{assigns: %{user: user}} = conn, %{"q" => query} = params) do diff --git a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex index 891f924bc..040a0b9dd 100644 --- a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex @@ -9,6 +9,7 @@ defmodule Pleroma.Web.MastodonAPI.TimelineController do only: [add_link_headers: 2, add_link_headers: 3, truthy_param?: 1, skip_relationships?: 1] alias Pleroma.Pagination + alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.Plugs.RateLimiter alias Pleroma.User @@ -26,7 +27,13 @@ defmodule Pleroma.Web.MastodonAPI.TimelineController do plug(OAuthScopesPlug, %{scopes: ["read:statuses"]} when action in [:home, :direct]) plug(OAuthScopesPlug, %{scopes: ["read:lists"]} when action == :list) - plug(:skip_plug, Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug when action == :public) + plug( + OAuthScopesPlug, + %{scopes: ["read:statuses"], fallback: :proceed_unauthenticated} + when action in [:public, :hashtag] + ) + + plug(:skip_plug, EnsurePublicOrAuthenticatedPlug when action in [:public, :hashtag]) plug(:put_view, Pleroma.Web.MastodonAPI.StatusView) @@ -93,7 +100,9 @@ def public(%{assigns: %{user: user}} = conn, params) do restrict? = Pleroma.Config.get([:restrict_unauthenticated, :timelines, cfg_key]) - if not (restrict? and is_nil(user)) do + if restrict? and is_nil(user) do + render_error(conn, :unauthorized, "authorization required for timeline view") + else activities = params |> Map.put("type", ["Create", "Announce"]) @@ -110,12 +119,10 @@ def public(%{assigns: %{user: user}} = conn, params) do as: :activity, skip_relationships: skip_relationships?(params) ) - else - render_error(conn, :unauthorized, "authorization required for timeline view") end end - def hashtag_fetching(params, user, local_only) do + defp hashtag_fetching(params, user, local_only) do tags = [params["tag"], params["any"]] |> List.flatten() diff --git a/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex b/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex index 7a65697e8..2c1874051 100644 --- a/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex @@ -26,6 +26,12 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIController do when action in [:conversation, :conversation_statuses] ) + plug( + OAuthScopesPlug, + %{scopes: ["read:statuses"], fallback: :proceed_unauthenticated} + when action == :emoji_reactions_by + ) + plug( OAuthScopesPlug, %{scopes: ["write:statuses"]} diff --git a/lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex b/lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex index c81e8535e..22da6c0ad 100644 --- a/lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex @@ -13,7 +13,11 @@ defmodule Pleroma.Web.PleromaAPI.ScrobbleController do alias Pleroma.Web.CommonAPI alias Pleroma.Web.MastodonAPI.StatusView - plug(OAuthScopesPlug, %{scopes: ["read"]} when action == :user_scrobbles) + plug( + OAuthScopesPlug, + %{scopes: ["read"], fallback: :proceed_unauthenticated} when action == :user_scrobbles + ) + plug(OAuthScopesPlug, %{scopes: ["write"]} when action != :user_scrobbles) def new_scrobble(%{assigns: %{user: user}} = conn, %{"title" => _} = params) do diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 04c1c5941..db158d366 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -312,14 +312,10 @@ defmodule Pleroma.Web.Router do post("/scrobble", ScrobbleController, :new_scrobble) end - scope [] do - pipe_through(:api) - get("/accounts/:id/favourites", AccountController, :favourites) - end - scope [] do pipe_through(:authenticated_api) + get("/accounts/:id/favourites", AccountController, :favourites) post("/accounts/:id/subscribe", AccountController, :subscribe) post("/accounts/:id/unsubscribe", AccountController, :unsubscribe) end @@ -353,6 +349,8 @@ defmodule Pleroma.Web.Router do post("/accounts/:id/mute", AccountController, :mute) post("/accounts/:id/unmute", AccountController, :unmute) + get("/apps/verify_credentials", AppController, :verify_credentials) + get("/conversations", ConversationController, :index) post("/conversations/:id/read", ConversationController, :mark_as_read) @@ -431,6 +429,7 @@ defmodule Pleroma.Web.Router do get("/timelines/home", TimelineController, :home) get("/timelines/direct", TimelineController, :direct) + get("/timelines/list/:list_id", TimelineController, :list) end scope "/api/web", Pleroma.Web do @@ -442,15 +441,24 @@ defmodule Pleroma.Web.Router do scope "/api/v1", Pleroma.Web.MastodonAPI do pipe_through(:api) - post("/accounts", AccountController, :create) get("/accounts/search", SearchController, :account_search) + get("/search", SearchController, :search) + + get("/accounts/:id/statuses", AccountController, :statuses) + get("/accounts/:id/followers", AccountController, :followers) + get("/accounts/:id/following", AccountController, :following) + get("/accounts/:id", AccountController, :show) + + post("/accounts", AccountController, :create) get("/instance", InstanceController, :show) get("/instance/peers", InstanceController, :peers) post("/apps", AppController, :create) - get("/apps/verify_credentials", AppController, :verify_credentials) + get("/statuses", StatusController, :index) + get("/statuses/:id", StatusController, :show) + get("/statuses/:id/context", StatusController, :context) get("/statuses/:id/card", StatusController, :card) get("/statuses/:id/favourited_by", StatusController, :favourited_by) get("/statuses/:id/reblogged_by", StatusController, :reblogged_by) @@ -461,20 +469,8 @@ defmodule Pleroma.Web.Router do get("/timelines/public", TimelineController, :public) get("/timelines/tag/:tag", TimelineController, :hashtag) - get("/timelines/list/:list_id", TimelineController, :list) - - get("/statuses", StatusController, :index) - get("/statuses/:id", StatusController, :show) - get("/statuses/:id/context", StatusController, :context) get("/polls/:id", PollController, :show) - - get("/accounts/:id/statuses", AccountController, :statuses) - get("/accounts/:id/followers", AccountController, :followers) - get("/accounts/:id/following", AccountController, :following) - get("/accounts/:id", AccountController, :show) - - get("/search", SearchController, :search) end scope "/api/v2", Pleroma.Web.MastodonAPI do diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index 55228616a..e4f182b02 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -18,7 +18,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do %{scopes: ["write:notifications"]} when action == :mark_notifications_as_read ) - plug(:skip_plug, OAuthScopesPlug when action in [:oauth_tokens, :revoke_token]) + plug(:skip_plug, OAuthScopesPlug when action in [:confirm_email, :oauth_tokens, :revoke_token]) action_fallback(:errors) @@ -47,13 +47,13 @@ def revoke_token(%{assigns: %{user: user}} = conn, %{"id" => id} = _params) do json_reply(conn, 201, "") end - def errors(conn, {:param_cast, _}) do + defp errors(conn, {:param_cast, _}) do conn |> put_status(400) |> json("Invalid parameters") end - def errors(conn, _) do + defp errors(conn, _) do conn |> put_status(500) |> json("Something went wrong") diff --git a/lib/pleroma/web/web.ex b/lib/pleroma/web/web.ex index ec04c05f0..e2416fb2e 100644 --- a/lib/pleroma/web/web.ex +++ b/lib/pleroma/web/web.ex @@ -67,13 +67,25 @@ defp skip_plug(conn, plug_modules) do # Executed just before actual controller action, invokes before-action hooks (callbacks) defp action(conn, params) do - with %Plug.Conn{halted: false} <- maybe_perform_public_or_authenticated_check(conn), + with %Plug.Conn{halted: false} <- maybe_drop_authentication_if_oauth_check_ignored(conn), + %Plug.Conn{halted: false} <- maybe_perform_public_or_authenticated_check(conn), %Plug.Conn{halted: false} <- maybe_perform_authenticated_check(conn), %Plug.Conn{halted: false} <- maybe_halt_on_missing_oauth_scopes_check(conn) do super(conn, params) end end + # For non-authenticated API actions, drops auth info if OAuth scopes check was ignored + # (neither performed nor explicitly skipped) + defp maybe_drop_authentication_if_oauth_check_ignored(conn) do + if PlugHelper.plug_called?(conn, ExpectPublicOrAuthenticatedCheckPlug) and + not PlugHelper.plug_called_or_skipped?(conn, OAuthScopesPlug) do + OAuthScopesPlug.drop_auth_info(conn) + else + conn + end + end + # Ensures instance is public -or- user is authenticated if such check was scheduled defp maybe_perform_public_or_authenticated_check(conn) do if PlugHelper.plug_called?(conn, ExpectPublicOrAuthenticatedCheckPlug) do From 1b06a27746ccbbdec77b7bc1571783a64ade4431 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 22 Apr 2020 20:20:19 +0400 Subject: [PATCH 316/581] Update Flake ID description --- docs/API/differences_in_mastoapi_responses.md | 2 +- lib/pleroma/web/api_spec/schemas/flake_id.ex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index 1059155cf..62725edb4 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -4,7 +4,7 @@ A Pleroma instance can be identified by " (compatible; Pleroma ## Flake IDs -Pleroma uses 128-bit ids as opposed to Mastodon's 64 bits. However just like Mastodon's ids they are sortable strings +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 diff --git a/lib/pleroma/web/api_spec/schemas/flake_id.ex b/lib/pleroma/web/api_spec/schemas/flake_id.ex index b8e03b8a1..3b5f6477a 100644 --- a/lib/pleroma/web/api_spec/schemas/flake_id.ex +++ b/lib/pleroma/web/api_spec/schemas/flake_id.ex @@ -8,7 +8,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.FlakeID do OpenApiSpex.schema(%{ title: "FlakeID", description: - "Pleroma uses 128-bit ids as opposed to Mastodon's 64 bits. However just like Mastodon's ids they are sortable strings", + "Pleroma uses 128-bit ids as opposed to Mastodon's 64 bits. However just like Mastodon's ids they are lexically sortable strings", type: :string }) end From e62173dfc8b739508345b7ab97477ae04fcdb457 Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 22 Apr 2020 18:40:53 +0200 Subject: [PATCH 317/581] SideEffects: Run in transaction. This fixes race conditions. --- lib/pleroma/web/activity_pub/side_effects.ex | 11 +++++--- test/web/common_api/common_api_test.exs | 27 ++++++++++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 6a8f1af96..a0f71fd88 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -15,12 +15,15 @@ def handle(object, meta \\ []) # - Add like to object # - Set up notification def handle(%{data: %{"type" => "Like"}} = object, meta) do - liked_object = Object.get_by_ap_id(object.data["object"]) - Utils.add_like_to_object(object, liked_object) + Pleroma.Repo.transaction(fn -> + liked_object = Object.get_by_ap_id(object.data["object"]) + Utils.add_like_to_object(object, liked_object) - Notification.create_notifications(object) + Notification.create_notifications(object) - {:ok, object, meta} + {:ok, object, meta} + end) + |> (fn {:ok, res} -> res end).() end # Nothing to do diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index e130736ec..68a29108a 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -21,6 +21,33 @@ defmodule Pleroma.Web.CommonAPITest do setup do: clear_config([:instance, :limit]) setup do: clear_config([:instance, :max_pinned_statuses]) + test "favoriting race condition" do + user = insert(:user) + users_serial = insert_list(10, :user) + users = insert_list(10, :user) + + {:ok, activity} = CommonAPI.post(user, %{"status" => "."}) + + users_serial + |> Enum.map(fn user -> + CommonAPI.favorite(user, activity.id) + end) + + object = Object.get_by_ap_id(activity.data["object"]) + assert object.data["like_count"] == 10 + + users + |> Enum.map(fn user -> + Task.async(fn -> + CommonAPI.favorite(user, activity.id) + end) + end) + |> Enum.map(&Task.await/1) + + object = Object.get_by_ap_id(activity.data["object"]) + assert object.data["like_count"] == 20 + end + test "when replying to a conversation / participation, it will set the correct context id even if no explicit reply_to is given" do user = insert(:user) {:ok, activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "direct"}) From f5bda09de648a6de3151c8614005ebc70447facb Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 22 Apr 2020 19:02:22 +0200 Subject: [PATCH 318/581] Stats: Use `invisible` property for filtering. --- lib/pleroma/stats.ex | 3 +-- test/stats_test.exs | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/pleroma/stats.ex b/lib/pleroma/stats.ex index 6763786a7..8d2809bbb 100644 --- a/lib/pleroma/stats.ex +++ b/lib/pleroma/stats.ex @@ -82,8 +82,7 @@ def calculate_stat_data do where: u.deactivated != true, where: u.local == true, where: not is_nil(u.nickname), - where: fragment("? not like 'internal.%'", u.nickname), - where: fragment("? not like '%/relay'", u.ap_id) + where: not u.invisible ) user_count = Repo.aggregate(users_query, :count, :id) diff --git a/test/stats_test.exs b/test/stats_test.exs index 73c7c1495..c1aeb2c7f 100644 --- a/test/stats_test.exs +++ b/test/stats_test.exs @@ -11,7 +11,6 @@ defmodule Pleroma.StatsTest do test "it ignores internal users" do _user = insert(:user, local: true) _internal = insert(:user, local: true, nickname: nil) - _internal = insert(:user, local: true, nickname: "internal.dude") _internal = Pleroma.Web.ActivityPub.Relay.get_actor() assert match?(%{stats: %{user_count: 1}}, Pleroma.Stats.calculate_stat_data()) From 1bcbdc7a9f5df35f42d1ab331bc4b6785e180284 Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 22 Apr 2020 21:21:21 +0200 Subject: [PATCH 319/581] SideEffects: Use less cryptic syntax. --- lib/pleroma/web/activity_pub/side_effects.ex | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index a0f71fd88..5981e7545 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -15,15 +15,17 @@ def handle(object, meta \\ []) # - Add like to object # - Set up notification def handle(%{data: %{"type" => "Like"}} = object, meta) do - Pleroma.Repo.transaction(fn -> - liked_object = Object.get_by_ap_id(object.data["object"]) - Utils.add_like_to_object(object, liked_object) + {:ok, result} = + Pleroma.Repo.transaction(fn -> + liked_object = Object.get_by_ap_id(object.data["object"]) + Utils.add_like_to_object(object, liked_object) - Notification.create_notifications(object) + Notification.create_notifications(object) - {:ok, object, meta} - end) - |> (fn {:ok, res} -> res end).() + {:ok, object, meta} + end) + + result end # Nothing to do From 7d38197894692306c940b55045b91d563e138284 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 23 Apr 2020 13:33:30 +0200 Subject: [PATCH 320/581] CommonAPI: Don't make repeating announces possible --- lib/pleroma/web/common_api/common_api.ex | 23 +++++++++++-------- lib/pleroma/web/common_api/utils.ex | 18 --------------- test/web/common_api/common_api_test.exs | 18 ++++++++++++--- test/web/common_api/common_api_utils_test.exs | 20 ---------------- 4 files changed, 28 insertions(+), 51 deletions(-) diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index f50a909aa..d1efe0c36 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -86,8 +86,9 @@ def delete(activity_id, user) do end end - def repeat(id_or_ap_id, user, params \\ %{}) do - with {_, %Activity{} = activity} <- {:find_activity, get_by_id_or_ap_id(id_or_ap_id)}, + def repeat(id, user, params \\ %{}) do + with {_, %Activity{data: %{"type" => "Create"}} = activity} <- + {:find_activity, Activity.get_by_id(id)}, object <- Object.normalize(activity), announce_activity <- Utils.get_existing_announce(user.ap_id, object), public <- public_announce?(object, params) do @@ -102,8 +103,9 @@ def repeat(id_or_ap_id, user, params \\ %{}) do end end - def unrepeat(id_or_ap_id, user) do - with {_, %Activity{} = activity} <- {:find_activity, get_by_id_or_ap_id(id_or_ap_id)} do + def unrepeat(id, user) do + with {_, %Activity{data: %{"type" => "Create"}} = activity} <- + {:find_activity, Activity.get_by_id(id)} do object = Object.normalize(activity) ActivityPub.unannounce(user, object) else @@ -160,8 +162,9 @@ def favorite_helper(user, id) do end end - def unfavorite(id_or_ap_id, user) do - with {_, %Activity{} = activity} <- {:find_activity, get_by_id_or_ap_id(id_or_ap_id)} do + def unfavorite(id, user) do + with {_, %Activity{data: %{"type" => "Create"}} = activity} <- + {:find_activity, Activity.get_by_id(id)} do object = Object.normalize(activity) ActivityPub.unlike(user, object) else @@ -332,12 +335,12 @@ defp maybe_create_activity_expiration({:ok, activity}, %NaiveDateTime{} = expire defp maybe_create_activity_expiration(result, _), do: result - def pin(id_or_ap_id, %{ap_id: user_ap_id} = user) do + def pin(id, %{ap_id: user_ap_id} = user) do with %Activity{ actor: ^user_ap_id, data: %{"type" => "Create"}, object: %Object{data: %{"type" => object_type}} - } = activity <- get_by_id_or_ap_id(id_or_ap_id), + } = activity <- Activity.get_by_id_with_object(id), true <- object_type in ["Note", "Article", "Question"], true <- Visibility.is_public?(activity), {:ok, _user} <- User.add_pinnned_activity(user, activity) do @@ -348,8 +351,8 @@ def pin(id_or_ap_id, %{ap_id: user_ap_id} = user) do end end - def unpin(id_or_ap_id, user) do - with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id), + def unpin(id, user) do + with %Activity{data: %{"type" => "Create"}} = activity <- Activity.get_by_id(id), {:ok, _user} <- User.remove_pinnned_activity(user, activity) do {:ok, activity} else diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 7eec5aa09..945e63e22 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -22,24 +22,6 @@ defmodule Pleroma.Web.CommonAPI.Utils do require Logger require Pleroma.Constants - # This is a hack for twidere. - def get_by_id_or_ap_id(id) do - activity = - with true <- FlakeId.flake_id?(id), - %Activity{} = activity <- Activity.get_by_id_with_object(id) do - activity - else - _ -> Activity.get_create_by_object_ap_id_with_object(id) - end - - activity && - if activity.data["type"] == "Create" do - activity - else - Activity.get_create_by_object_ap_id_with_object(activity.data["object"]) - end - end - def attachments_from_ids(%{"media_ids" => ids, "descriptions" => desc} = _) do attachments_from_ids_descs(ids, desc) end diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 68a29108a..e87193c83 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -283,6 +283,16 @@ test "repeating a status" do {:ok, %Activity{}, _} = CommonAPI.repeat(activity.id, user) end + test "can't repeat a repeat" do + user = insert(:user) + other_user = insert(:user) + {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) + + {:ok, %Activity{} = announce, _} = CommonAPI.repeat(activity.id, other_user) + + refute match?({:ok, %Activity{}, _}, CommonAPI.repeat(announce.id, user)) + end + test "repeating a status privately" do user = insert(:user) other_user = insert(:user) @@ -312,8 +322,8 @@ test "retweeting a status twice returns the status" do other_user = insert(:user) {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) - {:ok, %Activity{} = activity, object} = CommonAPI.repeat(activity.id, user) - {:ok, ^activity, ^object} = CommonAPI.repeat(activity.id, user) + {:ok, %Activity{} = announce, object} = CommonAPI.repeat(activity.id, user) + {:ok, ^announce, ^object} = CommonAPI.repeat(activity.id, user) end test "favoriting a status twice returns ok, but without the like activity" do @@ -387,7 +397,9 @@ test "unpin status", %{user: user, activity: activity} do user = refresh_record(user) - assert {:ok, ^activity} = CommonAPI.unpin(activity.id, user) + id = activity.id + + assert match?({:ok, %{id: ^id}}, CommonAPI.unpin(activity.id, user)) user = refresh_record(user) diff --git a/test/web/common_api/common_api_utils_test.exs b/test/web/common_api/common_api_utils_test.exs index b21445fe9..18a3b3b87 100644 --- a/test/web/common_api/common_api_utils_test.exs +++ b/test/web/common_api/common_api_utils_test.exs @@ -335,26 +335,6 @@ test "for direct posts, a reply" do end end - describe "get_by_id_or_ap_id/1" do - test "get activity by id" do - activity = insert(:note_activity) - %Pleroma.Activity{} = note = Utils.get_by_id_or_ap_id(activity.id) - assert note.id == activity.id - end - - test "get activity by ap_id" do - activity = insert(:note_activity) - %Pleroma.Activity{} = note = Utils.get_by_id_or_ap_id(activity.data["object"]) - assert note.id == activity.id - end - - test "get activity by object when type isn't `Create` " do - activity = insert(:like_activity) - %Pleroma.Activity{} = like = Utils.get_by_id_or_ap_id(activity.id) - assert like.data["object"] == activity.data["object"] - end - end - describe "to_master_date/1" do test "removes microseconds from date (NaiveDateTime)" do assert Utils.to_masto_date(~N[2015-01-23 23:50:07.123]) == "2015-01-23T23:50:07.000Z" From 89f38d94c754d33736e2444859d6020b2147eaf7 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Thu, 23 Apr 2020 21:47:33 +0300 Subject: [PATCH 321/581] [#2409] Fixed before-action callback results persistence. --- lib/pleroma/web/web.ex | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/web.ex b/lib/pleroma/web/web.ex index e2416fb2e..08e42a7e5 100644 --- a/lib/pleroma/web/web.ex +++ b/lib/pleroma/web/web.ex @@ -67,10 +67,10 @@ defp skip_plug(conn, plug_modules) do # Executed just before actual controller action, invokes before-action hooks (callbacks) defp action(conn, params) do - with %Plug.Conn{halted: false} <- maybe_drop_authentication_if_oauth_check_ignored(conn), - %Plug.Conn{halted: false} <- maybe_perform_public_or_authenticated_check(conn), - %Plug.Conn{halted: false} <- maybe_perform_authenticated_check(conn), - %Plug.Conn{halted: false} <- maybe_halt_on_missing_oauth_scopes_check(conn) do + with %{halted: false} = conn <- maybe_drop_authentication_if_oauth_check_ignored(conn), + %{halted: false} = conn <- maybe_perform_public_or_authenticated_check(conn), + %{halted: false} = conn <- maybe_perform_authenticated_check(conn), + %{halted: false} = conn <- maybe_halt_on_missing_oauth_scopes_check(conn) do super(conn, params) end end From f362836742aabd5b60b92c1296f2bbb6d83a3d59 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Fri, 24 Apr 2020 14:46:59 +0400 Subject: [PATCH 322/581] Support validation for inline OpenAPI schema and automatic tests for examples --- .../web/api_spec/operations/app_operation.ex | 60 +++++++++++++++++-- .../operations/custom_emoji_operation.ex | 40 ++++++++++++- .../operations/domain_block_operation.ex | 31 ++++++++-- .../api_spec/schemas/app_create_request.ex | 33 ---------- .../api_spec/schemas/app_create_response.ex | 33 ---------- .../schemas/custom_emojis_response.ex | 42 ------------- .../api_spec/schemas/domain_block_request.ex | 20 ------- .../schemas/domain_blocks_response.ex | 16 ----- lib/pleroma/web/oauth/scopes.ex | 6 +- test/support/api_spec_helpers.ex | 57 ++++++++++++++++++ test/support/conn_case.ex | 36 +++++++++++ test/web/api_spec/app_operation_test.exs | 45 -------------- test/web/api_spec/schema_examples_test.exs | 43 +++++++++++++ .../controllers/app_controller_test.exs | 4 +- .../custom_emoji_controller_test.exs | 17 +----- .../domain_block_controller_test.exs | 28 +++------ 16 files changed, 267 insertions(+), 244 deletions(-) delete mode 100644 lib/pleroma/web/api_spec/schemas/app_create_request.ex delete mode 100644 lib/pleroma/web/api_spec/schemas/app_create_response.ex delete mode 100644 lib/pleroma/web/api_spec/schemas/custom_emojis_response.ex delete mode 100644 lib/pleroma/web/api_spec/schemas/domain_block_request.ex delete mode 100644 lib/pleroma/web/api_spec/schemas/domain_blocks_response.ex create mode 100644 test/support/api_spec_helpers.ex delete mode 100644 test/web/api_spec/app_operation_test.exs create mode 100644 test/web/api_spec/schema_examples_test.exs diff --git a/lib/pleroma/web/api_spec/operations/app_operation.ex b/lib/pleroma/web/api_spec/operations/app_operation.ex index 26d8dbd42..035ef2470 100644 --- a/lib/pleroma/web/api_spec/operations/app_operation.ex +++ b/lib/pleroma/web/api_spec/operations/app_operation.ex @@ -6,8 +6,6 @@ defmodule Pleroma.Web.ApiSpec.AppOperation do alias OpenApiSpex.Operation alias OpenApiSpex.Schema alias Pleroma.Web.ApiSpec.Helpers - alias Pleroma.Web.ApiSpec.Schemas.AppCreateRequest - alias Pleroma.Web.ApiSpec.Schemas.AppCreateResponse @spec open_api_operation(atom) :: Operation.t() def open_api_operation(action) do @@ -22,9 +20,9 @@ def create_operation do summary: "Create an application", description: "Create a new application to obtain OAuth2 credentials", operationId: "AppController.create", - requestBody: Helpers.request_body("Parameters", AppCreateRequest, required: true), + requestBody: Helpers.request_body("Parameters", create_request(), required: true), responses: %{ - 200 => Operation.response("App", "application/json", AppCreateResponse), + 200 => Operation.response("App", "application/json", create_response()), 422 => Operation.response( "Unprocessable Entity", @@ -93,4 +91,58 @@ def verify_credentials_operation do } } end + + defp create_request do + %Schema{ + title: "AppCreateRequest", + description: "POST body for creating an app", + type: :object, + properties: %{ + client_name: %Schema{type: :string, description: "A name for your application."}, + 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." + }, + scopes: %Schema{ + type: :string, + description: "Space separated list of scopes", + default: "read" + }, + website: %Schema{type: :string, description: "A URL to the homepage of your app"} + }, + required: [:client_name, :redirect_uris], + example: %{ + "client_name" => "My App", + "redirect_uris" => "https://myapp.com/auth/callback", + "website" => "https://myapp.com/" + } + } + end + + defp create_response do + %Schema{ + title: "AppCreateResponse", + description: "Response schema for an app", + type: :object, + properties: %{ + id: %Schema{type: :string}, + name: %Schema{type: :string}, + client_id: %Schema{type: :string}, + client_secret: %Schema{type: :string}, + redirect_uri: %Schema{type: :string}, + vapid_key: %Schema{type: :string}, + website: %Schema{type: :string, nullable: true} + }, + example: %{ + "id" => "123", + "name" => "My App", + "client_id" => "TWhM-tNSuncnqN7DBJmoyeLnk6K3iJJ71KKXxgL1hPM", + "client_secret" => "ZEaFUFmF0umgBX1qKJDjaU99Q31lDkOU8NutzTOoliw", + "vapid_key" => + "BCk-QqERU0q-CfYZjcuB6lnyyOYfJ2AifKqfeGIm7Z-HiTU5T9eTG5GxVA0_OH5mMlI4UkkDTpaZwozy0TzdZ2M=", + "website" => "https://myapp.com/" + } + } + end end diff --git a/lib/pleroma/web/api_spec/operations/custom_emoji_operation.ex b/lib/pleroma/web/api_spec/operations/custom_emoji_operation.ex index cf2215823..a117fe460 100644 --- a/lib/pleroma/web/api_spec/operations/custom_emoji_operation.ex +++ b/lib/pleroma/web/api_spec/operations/custom_emoji_operation.ex @@ -4,7 +4,8 @@ defmodule Pleroma.Web.ApiSpec.CustomEmojiOperation do alias OpenApiSpex.Operation - alias Pleroma.Web.ApiSpec.Schemas.CustomEmojisResponse + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.CustomEmoji def open_api_operation(action) do operation = String.to_existing_atom("#{action}_operation") @@ -18,8 +19,43 @@ def index_operation do description: "Returns custom emojis that are available on the server.", operationId: "CustomEmojiController.index", responses: %{ - 200 => Operation.response("Custom Emojis", "application/json", CustomEmojisResponse) + 200 => Operation.response("Custom Emojis", "application/json", custom_emojis_resposnse()) } } end + + defp custom_emojis_resposnse do + %Schema{ + title: "CustomEmojisResponse", + description: "Response schema for custom emojis", + type: :array, + items: CustomEmoji, + example: [ + %{ + "category" => "Fun", + "shortcode" => "blank", + "static_url" => "https://lain.com/emoji/blank.png", + "tags" => ["Fun"], + "url" => "https://lain.com/emoji/blank.png", + "visible_in_picker" => false + }, + %{ + "category" => "Gif,Fun", + "shortcode" => "firefox", + "static_url" => "https://lain.com/emoji/Firefox.gif", + "tags" => ["Gif", "Fun"], + "url" => "https://lain.com/emoji/Firefox.gif", + "visible_in_picker" => true + }, + %{ + "category" => "pack:mixed", + "shortcode" => "sadcat", + "static_url" => "https://lain.com/emoji/mixed/sadcat.png", + "tags" => ["pack:mixed"], + "url" => "https://lain.com/emoji/mixed/sadcat.png", + "visible_in_picker" => true + } + ] + } + end end diff --git a/lib/pleroma/web/api_spec/operations/domain_block_operation.ex b/lib/pleroma/web/api_spec/operations/domain_block_operation.ex index dd14837c3..3b7f51ceb 100644 --- a/lib/pleroma/web/api_spec/operations/domain_block_operation.ex +++ b/lib/pleroma/web/api_spec/operations/domain_block_operation.ex @@ -6,8 +6,6 @@ defmodule Pleroma.Web.ApiSpec.DomainBlockOperation do alias OpenApiSpex.Operation alias OpenApiSpex.Schema alias Pleroma.Web.ApiSpec.Helpers - alias Pleroma.Web.ApiSpec.Schemas.DomainBlockRequest - alias Pleroma.Web.ApiSpec.Schemas.DomainBlocksResponse def open_api_operation(action) do operation = String.to_existing_atom("#{action}_operation") @@ -22,7 +20,13 @@ def index_operation do security: [%{"oAuth" => ["follow", "read:blocks"]}], operationId: "DomainBlockController.index", responses: %{ - 200 => Operation.response("Domain blocks", "application/json", DomainBlocksResponse) + 200 => + Operation.response("Domain blocks", "application/json", %Schema{ + description: "Response schema for domain blocks", + type: :array, + items: %Schema{type: :string}, + example: ["google.com", "facebook.com"] + }) } } end @@ -40,7 +44,7 @@ def create_operation do - prevent following new users from it (but does not remove existing follows) """, operationId: "DomainBlockController.create", - requestBody: Helpers.request_body("Parameters", DomainBlockRequest, required: true), + requestBody: domain_block_request(), security: [%{"oAuth" => ["follow", "write:blocks"]}], responses: %{ 200 => Operation.response("Empty object", "application/json", %Schema{type: :object}) @@ -54,11 +58,28 @@ def delete_operation do summary: "Unblock a domain", description: "Remove a domain block, if it exists in the user's array of blocked domains.", operationId: "DomainBlockController.delete", - requestBody: Helpers.request_body("Parameters", DomainBlockRequest, required: true), + requestBody: domain_block_request(), security: [%{"oAuth" => ["follow", "write:blocks"]}], responses: %{ 200 => Operation.response("Empty object", "application/json", %Schema{type: :object}) } } end + + defp domain_block_request do + Helpers.request_body( + "Parameters", + %Schema{ + type: :object, + properties: %{ + domain: %Schema{type: :string} + }, + required: [:domain] + }, + required: true, + example: %{ + "domain" => "facebook.com" + } + ) + end end diff --git a/lib/pleroma/web/api_spec/schemas/app_create_request.ex b/lib/pleroma/web/api_spec/schemas/app_create_request.ex deleted file mode 100644 index 8a83abef3..000000000 --- a/lib/pleroma/web/api_spec/schemas/app_create_request.ex +++ /dev/null @@ -1,33 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.AppCreateRequest do - alias OpenApiSpex.Schema - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "AppCreateRequest", - description: "POST body for creating an app", - type: :object, - properties: %{ - client_name: %Schema{type: :string, description: "A name for your application."}, - 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." - }, - scopes: %Schema{ - type: :string, - description: "Space separated list of scopes. If none is provided, defaults to `read`." - }, - website: %Schema{type: :string, description: "A URL to the homepage of your app"} - }, - required: [:client_name, :redirect_uris], - example: %{ - "client_name" => "My App", - "redirect_uris" => "https://myapp.com/auth/callback", - "website" => "https://myapp.com/" - } - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/app_create_response.ex b/lib/pleroma/web/api_spec/schemas/app_create_response.ex deleted file mode 100644 index f290fb031..000000000 --- a/lib/pleroma/web/api_spec/schemas/app_create_response.ex +++ /dev/null @@ -1,33 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.AppCreateResponse do - alias OpenApiSpex.Schema - - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "AppCreateResponse", - description: "Response schema for an app", - type: :object, - properties: %{ - id: %Schema{type: :string}, - name: %Schema{type: :string}, - client_id: %Schema{type: :string}, - client_secret: %Schema{type: :string}, - redirect_uri: %Schema{type: :string}, - vapid_key: %Schema{type: :string}, - website: %Schema{type: :string, nullable: true} - }, - example: %{ - "id" => "123", - "name" => "My App", - "client_id" => "TWhM-tNSuncnqN7DBJmoyeLnk6K3iJJ71KKXxgL1hPM", - "client_secret" => "ZEaFUFmF0umgBX1qKJDjaU99Q31lDkOU8NutzTOoliw", - "vapid_key" => - "BCk-QqERU0q-CfYZjcuB6lnyyOYfJ2AifKqfeGIm7Z-HiTU5T9eTG5GxVA0_OH5mMlI4UkkDTpaZwozy0TzdZ2M=", - "website" => "https://myapp.com/" - } - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/custom_emojis_response.ex b/lib/pleroma/web/api_spec/schemas/custom_emojis_response.ex deleted file mode 100644 index 01582a63d..000000000 --- a/lib/pleroma/web/api_spec/schemas/custom_emojis_response.ex +++ /dev/null @@ -1,42 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.CustomEmojisResponse do - alias Pleroma.Web.ApiSpec.Schemas.CustomEmoji - - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "CustomEmojisResponse", - description: "Response schema for custom emojis", - type: :array, - items: CustomEmoji, - example: [ - %{ - "category" => "Fun", - "shortcode" => "blank", - "static_url" => "https://lain.com/emoji/blank.png", - "tags" => ["Fun"], - "url" => "https://lain.com/emoji/blank.png", - "visible_in_picker" => true - }, - %{ - "category" => "Gif,Fun", - "shortcode" => "firefox", - "static_url" => "https://lain.com/emoji/Firefox.gif", - "tags" => ["Gif", "Fun"], - "url" => "https://lain.com/emoji/Firefox.gif", - "visible_in_picker" => true - }, - %{ - "category" => "pack:mixed", - "shortcode" => "sadcat", - "static_url" => "https://lain.com/emoji/mixed/sadcat.png", - "tags" => ["pack:mixed"], - "url" => "https://lain.com/emoji/mixed/sadcat.png", - "visible_in_picker" => true - } - ] - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/domain_block_request.ex b/lib/pleroma/web/api_spec/schemas/domain_block_request.ex deleted file mode 100644 index ee9238361..000000000 --- a/lib/pleroma/web/api_spec/schemas/domain_block_request.ex +++ /dev/null @@ -1,20 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.DomainBlockRequest do - alias OpenApiSpex.Schema - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "DomainBlockRequest", - type: :object, - properties: %{ - domain: %Schema{type: :string} - }, - required: [:domain], - example: %{ - "domain" => "facebook.com" - } - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/domain_blocks_response.ex b/lib/pleroma/web/api_spec/schemas/domain_blocks_response.ex deleted file mode 100644 index d895aca4e..000000000 --- a/lib/pleroma/web/api_spec/schemas/domain_blocks_response.ex +++ /dev/null @@ -1,16 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.DomainBlocksResponse do - require OpenApiSpex - alias OpenApiSpex.Schema - - OpenApiSpex.schema(%{ - title: "DomainBlocksResponse", - description: "Response schema for domain blocks", - type: :array, - items: %Schema{type: :string}, - example: ["google.com", "facebook.com"] - }) -end diff --git a/lib/pleroma/web/oauth/scopes.ex b/lib/pleroma/web/oauth/scopes.ex index 1023f16d4..6f06f1431 100644 --- a/lib/pleroma/web/oauth/scopes.ex +++ b/lib/pleroma/web/oauth/scopes.ex @@ -17,12 +17,8 @@ defmodule Pleroma.Web.OAuth.Scopes do """ @spec fetch_scopes(map() | struct(), list()) :: list() - def fetch_scopes(%Pleroma.Web.ApiSpec.Schemas.AppCreateRequest{scopes: scopes}, default) do - parse_scopes(scopes, default) - end - def fetch_scopes(params, default) do - parse_scopes(params["scope"] || params["scopes"], default) + parse_scopes(params["scope"] || params["scopes"] || params[:scopes], default) end def parse_scopes(scopes, _default) when is_list(scopes) do diff --git a/test/support/api_spec_helpers.ex b/test/support/api_spec_helpers.ex new file mode 100644 index 000000000..80c69c788 --- /dev/null +++ b/test/support/api_spec_helpers.ex @@ -0,0 +1,57 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Tests.ApiSpecHelpers do + @moduledoc """ + OpenAPI spec test helpers + """ + + import ExUnit.Assertions + + alias OpenApiSpex.Cast.Error + alias OpenApiSpex.Reference + alias OpenApiSpex.Schema + + def assert_schema(value, schema) do + api_spec = Pleroma.Web.ApiSpec.spec() + + case OpenApiSpex.cast_value(value, schema, api_spec) do + {:ok, data} -> + data + + {:error, errors} -> + errors = + Enum.map(errors, fn error -> + message = Error.message(error) + path = Error.path_to_string(error) + "#{message} at #{path}" + end) + + flunk( + "Value does not conform to schema #{schema.title}: #{Enum.join(errors, "\n")}\n#{ + inspect(value) + }" + ) + end + end + + def resolve_schema(%Schema{} = schema), do: schema + + def resolve_schema(%Reference{} = ref) do + schemas = Pleroma.Web.ApiSpec.spec().components.schemas + Reference.resolve_schema(ref, schemas) + end + + def api_operations do + paths = Pleroma.Web.ApiSpec.spec().paths + + Enum.flat_map(paths, fn {_, path_item} -> + path_item + |> Map.take([:delete, :get, :head, :options, :patch, :post, :put, :trace]) + |> Map.values() + |> Enum.reject(&is_nil/1) + |> Enum.uniq() + end) + end +end diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex index 064874201..781622476 100644 --- a/test/support/conn_case.ex +++ b/test/support/conn_case.ex @@ -51,6 +51,42 @@ defp oauth_access(scopes, opts \\ []) do %{user: user, token: token, conn: conn} end + defp json_response_and_validate_schema(conn, status \\ nil) do + content_type = + conn + |> Plug.Conn.get_resp_header("content-type") + |> List.first() + |> String.split(";") + |> List.first() + + status = status || conn.status + + %{private: %{open_api_spex: %{operation_id: op_id, operation_lookup: lookup, spec: spec}}} = + conn + + schema = lookup[op_id].responses[status].content[content_type].schema + json = json_response(conn, status) + + case OpenApiSpex.cast_value(json, schema, spec) do + {:ok, _data} -> + json + + {:error, errors} -> + errors = + Enum.map(errors, fn error -> + message = OpenApiSpex.Cast.Error.message(error) + path = OpenApiSpex.Cast.Error.path_to_string(error) + "#{message} at #{path}" + end) + + flunk( + "Response does not conform to schema of #{op_id} operation: #{ + Enum.join(errors, "\n") + }\n#{inspect(json)}" + ) + end + end + defp ensure_federating_or_authenticated(conn, url, user) do initial_setting = Config.get([:instance, :federating]) on_exit(fn -> Config.put([:instance, :federating], initial_setting) end) diff --git a/test/web/api_spec/app_operation_test.exs b/test/web/api_spec/app_operation_test.exs deleted file mode 100644 index 5b96abb44..000000000 --- a/test/web/api_spec/app_operation_test.exs +++ /dev/null @@ -1,45 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.AppOperationTest do - use Pleroma.Web.ConnCase, async: true - - alias Pleroma.Web.ApiSpec - alias Pleroma.Web.ApiSpec.Schemas.AppCreateRequest - alias Pleroma.Web.ApiSpec.Schemas.AppCreateResponse - - import OpenApiSpex.TestAssertions - import Pleroma.Factory - - test "AppCreateRequest example matches schema" do - api_spec = ApiSpec.spec() - schema = AppCreateRequest.schema() - assert_schema(schema.example, "AppCreateRequest", api_spec) - end - - test "AppCreateResponse example matches schema" do - api_spec = ApiSpec.spec() - schema = AppCreateResponse.schema() - assert_schema(schema.example, "AppCreateResponse", api_spec) - end - - test "AppController produces a AppCreateResponse", %{conn: conn} do - api_spec = ApiSpec.spec() - app_attrs = build(:oauth_app) - - json = - conn - |> put_req_header("content-type", "application/json") - |> post( - "/api/v1/apps", - Jason.encode!(%{ - client_name: app_attrs.client_name, - redirect_uris: app_attrs.redirect_uris - }) - ) - |> json_response(200) - - assert_schema(json, "AppCreateResponse", api_spec) - end -end diff --git a/test/web/api_spec/schema_examples_test.exs b/test/web/api_spec/schema_examples_test.exs new file mode 100644 index 000000000..88b6f07cb --- /dev/null +++ b/test/web/api_spec/schema_examples_test.exs @@ -0,0 +1,43 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.SchemaExamplesTest do + use ExUnit.Case, async: true + import Pleroma.Tests.ApiSpecHelpers + + @content_type "application/json" + + for operation <- api_operations() do + describe operation.operationId <> " Request Body" do + if operation.requestBody do + @media_type operation.requestBody.content[@content_type] + @schema resolve_schema(@media_type.schema) + + if @media_type.example do + test "request body media type example matches schema" do + assert_schema(@media_type.example, @schema) + end + end + + if @schema.example do + test "request body schema example matches schema" do + assert_schema(@schema.example, @schema) + end + end + end + end + + for {status, response} <- operation.responses do + describe "#{operation.operationId} - #{status} Response" do + @schema resolve_schema(response.content[@content_type].schema) + + if @schema.example do + test "example matches schema" do + assert_schema(@schema.example, @schema) + end + end + end + end + end +end diff --git a/test/web/mastodon_api/controllers/app_controller_test.exs b/test/web/mastodon_api/controllers/app_controller_test.exs index e7b11d14e..a0b8b126c 100644 --- a/test/web/mastodon_api/controllers/app_controller_test.exs +++ b/test/web/mastodon_api/controllers/app_controller_test.exs @@ -27,7 +27,7 @@ test "apps/verify_credentials", %{conn: conn} do "vapid_key" => Push.vapid_config() |> Keyword.get(:public_key) } - assert expected == json_response(conn, 200) + assert expected == json_response_and_validate_schema(conn, 200) end test "creates an oauth app", %{conn: conn} do @@ -55,6 +55,6 @@ test "creates an oauth app", %{conn: conn} do "vapid_key" => Push.vapid_config() |> Keyword.get(:public_key) } - assert expected == json_response(conn, 200) + assert expected == json_response_and_validate_schema(conn, 200) end end diff --git a/test/web/mastodon_api/controllers/custom_emoji_controller_test.exs b/test/web/mastodon_api/controllers/custom_emoji_controller_test.exs index 0b2ffa470..4222556a4 100644 --- a/test/web/mastodon_api/controllers/custom_emoji_controller_test.exs +++ b/test/web/mastodon_api/controllers/custom_emoji_controller_test.exs @@ -5,15 +5,13 @@ defmodule Pleroma.Web.MastodonAPI.CustomEmojiControllerTest do use Pleroma.Web.ConnCase, async: true alias Pleroma.Web.ApiSpec - alias Pleroma.Web.ApiSpec.Schemas.CustomEmoji - alias Pleroma.Web.ApiSpec.Schemas.CustomEmojisResponse import OpenApiSpex.TestAssertions test "with tags", %{conn: conn} do assert resp = conn |> get("/api/v1/custom_emojis") - |> json_response(200) + |> json_response_and_validate_schema(200) assert [emoji | _body] = resp assert Map.has_key?(emoji, "shortcode") @@ -23,19 +21,6 @@ test "with tags", %{conn: conn} do assert Map.has_key?(emoji, "category") assert Map.has_key?(emoji, "url") assert Map.has_key?(emoji, "visible_in_picker") - assert_schema(resp, "CustomEmojisResponse", ApiSpec.spec()) assert_schema(emoji, "CustomEmoji", ApiSpec.spec()) end - - test "CustomEmoji example matches schema" do - api_spec = ApiSpec.spec() - schema = CustomEmoji.schema() - assert_schema(schema.example, "CustomEmoji", api_spec) - end - - test "CustomEmojisResponse example matches schema" do - api_spec = ApiSpec.spec() - schema = CustomEmojisResponse.schema() - assert_schema(schema.example, "CustomEmojisResponse", api_spec) - end end diff --git a/test/web/mastodon_api/controllers/domain_block_controller_test.exs b/test/web/mastodon_api/controllers/domain_block_controller_test.exs index d66190c90..01a24afcf 100644 --- a/test/web/mastodon_api/controllers/domain_block_controller_test.exs +++ b/test/web/mastodon_api/controllers/domain_block_controller_test.exs @@ -6,11 +6,8 @@ defmodule Pleroma.Web.MastodonAPI.DomainBlockControllerTest do use Pleroma.Web.ConnCase alias Pleroma.User - alias Pleroma.Web.ApiSpec - alias Pleroma.Web.ApiSpec.Schemas.DomainBlocksResponse import Pleroma.Factory - import OpenApiSpex.TestAssertions test "blocking / unblocking a domain" do %{user: user, conn: conn} = oauth_access(["write:blocks"]) @@ -21,7 +18,7 @@ test "blocking / unblocking a domain" do |> put_req_header("content-type", "application/json") |> post("/api/v1/domain_blocks", %{"domain" => "dogwhistle.zone"}) - assert %{} = json_response(ret_conn, 200) + assert %{} == json_response_and_validate_schema(ret_conn, 200) user = User.get_cached_by_ap_id(user.ap_id) assert User.blocks?(user, other_user) @@ -30,7 +27,7 @@ test "blocking / unblocking a domain" do |> put_req_header("content-type", "application/json") |> delete("/api/v1/domain_blocks", %{"domain" => "dogwhistle.zone"}) - assert %{} = json_response(ret_conn, 200) + assert %{} == json_response_and_validate_schema(ret_conn, 200) user = User.get_cached_by_ap_id(user.ap_id) refute User.blocks?(user, other_user) end @@ -41,21 +38,10 @@ test "getting a list of domain blocks" do {:ok, user} = User.block_domain(user, "bad.site") {:ok, user} = User.block_domain(user, "even.worse.site") - conn = - conn - |> assign(:user, user) - |> get("/api/v1/domain_blocks") - - domain_blocks = json_response(conn, 200) - - assert "bad.site" in domain_blocks - assert "even.worse.site" in domain_blocks - assert_schema(domain_blocks, "DomainBlocksResponse", ApiSpec.spec()) - end - - test "DomainBlocksResponse example matches schema" do - api_spec = ApiSpec.spec() - schema = DomainBlocksResponse.schema() - assert_schema(schema.example, "DomainBlocksResponse", api_spec) + assert ["even.worse.site", "bad.site"] == + conn + |> assign(:user, user) + |> get("/api/v1/domain_blocks") + |> json_response_and_validate_schema(200) end end From bbf8554c975ea1ba9b5c809a7891ec0fb4a8e537 Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 24 Apr 2020 13:48:13 +0200 Subject: [PATCH 323/581] ActivitPub: Remove `like` function. We don't need another way to build likes. --- lib/pleroma/web/activity_pub/activity_pub.ex | 30 -------- .../activity_pub/activity_pub_controller.ex | 7 +- test/web/activity_pub/activity_pub_test.exs | 77 ++----------------- test/web/activity_pub/utils_test.exs | 5 +- 4 files changed, 15 insertions(+), 104 deletions(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 4a133498e..c67b3335d 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -398,36 +398,6 @@ defp do_unreact_with_emoji(user, reaction_id, options) do end end - # TODO: This is weird, maybe we shouldn't check here if we can make the activity. - @spec like(User.t(), Object.t(), String.t() | nil, boolean()) :: - {:ok, Activity.t(), Object.t()} | {:error, any()} - def like(user, object, activity_id \\ nil, local \\ true) do - with {:ok, result} <- Repo.transaction(fn -> do_like(user, object, activity_id, local) end) do - result - end - end - - defp do_like( - %User{ap_id: ap_id} = user, - %Object{data: %{"id" => _}} = object, - activity_id, - local - ) do - with nil <- get_existing_like(ap_id, object), - like_data <- make_like_data(user, object, activity_id), - {:ok, activity} <- insert(like_data, local), - {:ok, object} <- add_like_to_object(activity, object), - :ok <- maybe_federate(activity) do - {:ok, activity, object} - else - %Activity{} = activity -> - {:ok, activity, object} - - {:error, error} -> - Repo.rollback(error) - end - end - @spec unlike(User.t(), Object.t(), String.t() | nil, boolean()) :: {:ok, Activity.t(), Activity.t(), Object.t()} | {:ok, Object.t()} | {:error, any()} def unlike(%User{} = actor, %Object{} = object, activity_id \\ nil, local \\ true) do diff --git a/lib/pleroma/web/activity_pub/activity_pub_controller.ex b/lib/pleroma/web/activity_pub/activity_pub_controller.ex index 8b9eb4a2c..325a714b4 100644 --- a/lib/pleroma/web/activity_pub/activity_pub_controller.ex +++ b/lib/pleroma/web/activity_pub/activity_pub_controller.ex @@ -12,6 +12,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do alias Pleroma.Plugs.EnsureAuthenticatedPlug alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.ActivityPub.Builder + alias Pleroma.Web.ActivityPub.Pipeline alias Pleroma.Web.ActivityPub.InternalFetchActor alias Pleroma.Web.ActivityPub.ObjectView alias Pleroma.Web.ActivityPub.Relay @@ -421,7 +423,10 @@ defp handle_user_activity(%User{} = user, %{"type" => "Delete"} = params) do defp handle_user_activity(%User{} = user, %{"type" => "Like"} = params) do with %Object{} = object <- Object.normalize(params["object"]), - {:ok, activity, _object} <- ActivityPub.like(user, object) do + {_, {:ok, like_object, meta}} <- {:build_object, Builder.like(user, object)}, + {_, {:ok, %Activity{} = activity, _meta}} <- + {:common_pipeline, + Pipeline.common_pipeline(like_object, Keyword.put(meta, :local, true))} do {:ok, activity} else _ -> {:error, dgettext("errors", "Can't like object")} diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index 6410df49b..53176917e 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -994,72 +994,6 @@ test "reverts emoji unreact on error" do end end - describe "like an object" do - test_with_mock "sends an activity to federation", Federator, [:passthrough], [] do - Config.put([:instance, :federating], true) - note_activity = insert(:note_activity) - assert object_activity = Object.normalize(note_activity) - - user = insert(:user) - - {:ok, like_activity, _object} = ActivityPub.like(user, object_activity) - assert called(Federator.publish(like_activity)) - end - - test "returns exist activity if object already liked" do - note_activity = insert(:note_activity) - assert object_activity = Object.normalize(note_activity) - - user = insert(:user) - - {:ok, like_activity, _object} = ActivityPub.like(user, object_activity) - - {:ok, like_activity_exist, _object} = ActivityPub.like(user, object_activity) - assert like_activity == like_activity_exist - end - - test "reverts like activity on error" do - note_activity = insert(:note_activity) - object = Object.normalize(note_activity) - user = insert(:user) - - with_mock(Utils, [:passthrough], maybe_federate: fn _ -> {:error, :reverted} end) do - assert {:error, :reverted} = ActivityPub.like(user, object) - end - - assert Repo.aggregate(Activity, :count, :id) == 1 - assert Repo.get(Object, object.id) == object - end - - test "adds a like activity to the db" do - note_activity = insert(:note_activity) - assert object = Object.normalize(note_activity) - - user = insert(:user) - user_two = insert(:user) - - {:ok, like_activity, object} = ActivityPub.like(user, object) - - assert like_activity.data["actor"] == user.ap_id - assert like_activity.data["type"] == "Like" - assert like_activity.data["object"] == object.data["id"] - assert like_activity.data["to"] == [User.ap_followers(user), note_activity.data["actor"]] - assert like_activity.data["context"] == object.data["context"] - assert object.data["like_count"] == 1 - assert object.data["likes"] == [user.ap_id] - - # Just return the original activity if the user already liked it. - {:ok, same_like_activity, object} = ActivityPub.like(user, object) - - assert like_activity == same_like_activity - assert object.data["likes"] == [user.ap_id] - assert object.data["like_count"] == 1 - - {:ok, _like_activity, object} = ActivityPub.like(user_two, object) - assert object.data["like_count"] == 2 - end - end - describe "unliking" do test_with_mock "sends an activity to federation", Federator, [:passthrough], [] do Config.put([:instance, :federating], true) @@ -1071,7 +1005,8 @@ test "adds a like activity to the db" do {:ok, object} = ActivityPub.unlike(user, object) refute called(Federator.publish()) - {:ok, _like_activity, object} = ActivityPub.like(user, object) + {:ok, _like_activity} = CommonAPI.favorite(user, note_activity.id) + object = Object.get_by_id(object.id) assert object.data["like_count"] == 1 {:ok, unlike_activity, _, object} = ActivityPub.unlike(user, object) @@ -1082,10 +1017,10 @@ test "adds a like activity to the db" do test "reverts unliking on error" do note_activity = insert(:note_activity) - object = Object.normalize(note_activity) user = insert(:user) - {:ok, like_activity, object} = ActivityPub.like(user, object) + {:ok, like_activity} = CommonAPI.favorite(user, note_activity.id) + object = Object.normalize(note_activity) assert object.data["like_count"] == 1 with_mock(Utils, [:passthrough], maybe_federate: fn _ -> {:error, :reverted} end) do @@ -1106,7 +1041,9 @@ test "unliking a previously liked object" do {:ok, object} = ActivityPub.unlike(user, object) assert object.data["like_count"] == 0 - {:ok, like_activity, object} = ActivityPub.like(user, object) + {:ok, like_activity} = CommonAPI.favorite(user, note_activity.id) + + object = Object.get_by_id(object.id) assert object.data["like_count"] == 1 {:ok, unlike_activity, _, object} = ActivityPub.unlike(user, object) diff --git a/test/web/activity_pub/utils_test.exs b/test/web/activity_pub/utils_test.exs index e913a5148..b0bfed917 100644 --- a/test/web/activity_pub/utils_test.exs +++ b/test/web/activity_pub/utils_test.exs @@ -224,8 +224,7 @@ test "fetches only Create activities" do object = Object.normalize(activity) {:ok, [vote], object} = CommonAPI.vote(other_user, object, [0]) - vote_object = Object.normalize(vote) - {:ok, _activity, _object} = ActivityPub.like(user, vote_object) + {:ok, _activity} = CommonAPI.favorite(user, activity.id) [fetched_vote] = Utils.get_existing_votes(other_user.ap_id, object) assert fetched_vote.id == vote.id end @@ -346,7 +345,7 @@ test "fetches existing like" do user = insert(:user) refute Utils.get_existing_like(user.ap_id, object) - {:ok, like_activity, _object} = ActivityPub.like(user, object) + {:ok, like_activity} = CommonAPI.favorite(user, note_activity.id) assert ^like_activity = Utils.get_existing_like(user.ap_id, object) end From 1df6af2a4c93257f94e2780e4317cfcf9bef7adb Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 24 Apr 2020 13:59:48 +0200 Subject: [PATCH 324/581] Credo fixes. --- lib/pleroma/web/activity_pub/activity_pub_controller.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub_controller.ex b/lib/pleroma/web/activity_pub/activity_pub_controller.ex index 325a714b4..d625530ec 100644 --- a/lib/pleroma/web/activity_pub/activity_pub_controller.ex +++ b/lib/pleroma/web/activity_pub/activity_pub_controller.ex @@ -13,9 +13,9 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Builder - alias Pleroma.Web.ActivityPub.Pipeline alias Pleroma.Web.ActivityPub.InternalFetchActor alias Pleroma.Web.ActivityPub.ObjectView + alias Pleroma.Web.ActivityPub.Pipeline alias Pleroma.Web.ActivityPub.Relay alias Pleroma.Web.ActivityPub.Transmogrifier alias Pleroma.Web.ActivityPub.UserView From cb12585098e0cc1e2e85d253812e1898e8034b7f Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 24 Apr 2020 14:37:53 +0200 Subject: [PATCH 325/581] Announcements: Prevent race condition. --- lib/pleroma/web/activity_pub/activity_pub.ex | 1 + test/web/common_api/common_api_test.exs | 27 ++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index c67b3335d..4cce4f13c 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -438,6 +438,7 @@ def announce( defp do_announce(user, object, activity_id, local, public) do with true <- is_announceable?(object, user, public), + object <- Object.get_by_id(object.id), announce_data <- make_announce_data(user, object, activity_id, public), {:ok, activity} <- insert(announce_data, local), {:ok, object} <- add_announce_to_object(activity, object), diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index e87193c83..1758662b0 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -48,6 +48,33 @@ test "favoriting race condition" do assert object.data["like_count"] == 20 end + test "repeating race condition" do + user = insert(:user) + users_serial = insert_list(10, :user) + users = insert_list(10, :user) + + {:ok, activity} = CommonAPI.post(user, %{"status" => "."}) + + users_serial + |> Enum.map(fn user -> + CommonAPI.repeat(activity.id, user) + end) + + object = Object.get_by_ap_id(activity.data["object"]) + assert object.data["announcement_count"] == 10 + + users + |> Enum.map(fn user -> + Task.async(fn -> + CommonAPI.repeat(activity.id, user) + end) + end) + |> Enum.map(&Task.await/1) + + object = Object.get_by_ap_id(activity.data["object"]) + assert object.data["announcement_count"] == 20 + end + test "when replying to a conversation / participation, it will set the correct context id even if no explicit reply_to is given" do user = insert(:user) {:ok, activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "direct"}) From 6e625a427cdc829714ad0365560d79aa4ee9c2e5 Mon Sep 17 00:00:00 2001 From: Alexander Date: Wed, 4 Dec 2019 09:49:17 +0300 Subject: [PATCH 326/581] reply filtering --- CHANGELOG.md | 1 + benchmarks/load_testing/fetcher.ex | 53 ++ docs/API/differences_in_mastoapi_responses.md | 2 +- lib/pleroma/user.ex | 14 + lib/pleroma/user/query.ex | 4 +- lib/pleroma/web/activity_pub/activity_pub.ex | 77 ++- lib/pleroma/web/common_api/activity_draft.ex | 16 +- .../controllers/timeline_controller.ex | 1 + test/web/activity_pub/activity_pub_test.exs | 486 ++++++++++++++++++ 9 files changed, 636 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 702c58180..affabcd95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). API Changes - Mastodon API: Support for `include_types` in `/api/v1/notifications`. - Mastodon API: Added `/api/v1/notifications/:id/dismiss` endpoint. +- Mastodon API: Add support for filtering replies in public and friends timelines - Admin API: endpoints for create/update/delete OAuth Apps.
diff --git a/benchmarks/load_testing/fetcher.ex b/benchmarks/load_testing/fetcher.ex index 786929ace..3aa82b48a 100644 --- a/benchmarks/load_testing/fetcher.ex +++ b/benchmarks/load_testing/fetcher.ex @@ -495,4 +495,57 @@ defp render_long_thread(user) do formatters: formatters() ) end + + def query_replies(user) do + public_params = %{ + "type" => ["Create", "Announce"], + "local_only" => false, + "blocking_user" => user, + "muting_user" => user, + "count" => 20 + } + + Benchee.run(%{ + "Public timeline without reply filtering" => fn -> + ActivityPub.fetch_public_activities(public_params) + end, + "Public timeline with reply filtering - following" => fn -> + public_params + |> Map.put("reply_visibility", "following") + |> Map.put("user", user) + |> ActivityPub.fetch_public_activities() + end, + "Public timeline with reply filtering - self" => fn -> + public_params + |> Map.put("reply_visibility", "self") + |> Map.put("user", user) + |> ActivityPub.fetch_public_activities() + end + }) + + private_params = %{ + "type" => ["Create", "Announce"], + "blocking_user" => user, + "muting_user" => user, + "user" => user, + "count" => 20 + } + + recipients = [user.ap_id | User.following(user)] + + Benchee.run(%{ + "Home timeline without reply filtering" => fn -> + ActivityPub.fetch_activities(recipients, private_params) + end, + "Home timeline with reply filtering - following" => fn -> + private_params = Map.put(private_params, "reply_visibility", "following") + + ActivityPub.fetch_activities(recipients, private_params) + end, + "Home timeline with reply filtering - self" => fn -> + private_params = Map.put(private_params, "reply_visibility", "self") + ActivityPub.fetch_activities(recipients, private_params) + end + }) + end end diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index 1059155cf..c97fb8c56 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -14,7 +14,7 @@ Some apps operate under the assumption that no more than 4 attachments can be re Adding the parameter `with_muted=true` to the timeline queries will also return activities by muted (not by blocked!) users. Adding the parameter `exclude_visibilities` to the timeline queries will exclude the statuses with the given visibilities. The parameter accepts an array of visibility types (`public`, `unlisted`, `private`, `direct`), e.g., `exclude_visibilities[]=direct&exclude_visibilities[]=private`. - +Adding the parameter `reply_visibility` to the public and friends timelines quieries will filter replies. Possible values: without parameter (default) shows all replies, `following` - replies directed to you or users you follow, `self` - replies directed to you. ## Statuses - `visibility`: has an additional possible value `list` diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 477237756..b451202b2 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -832,6 +832,7 @@ def set_cache({:error, err}), do: {:error, err} def set_cache(%User{} = user) do Cachex.put(:user_cache, "ap_id:#{user.ap_id}", user) Cachex.put(:user_cache, "nickname:#{user.nickname}", user) + Cachex.put(:user_cache, "friends_ap_ids:#{user.nickname}", get_user_friends_ap_ids(user)) {:ok, user} end @@ -847,9 +848,22 @@ def update_and_set_cache(changeset) do end end + def get_user_friends_ap_ids(user) do + from(u in User.get_friends_query(user), select: u.ap_id) + |> Repo.all() + end + + @spec get_cached_user_friends_ap_ids(User.t()) :: [String.t()] + def get_cached_user_friends_ap_ids(user) do + Cachex.fetch!(:user_cache, "friends_ap_ids:#{user.ap_id}", fn _ -> + get_user_friends_ap_ids(user) + end) + end + def invalidate_cache(user) do Cachex.del(:user_cache, "ap_id:#{user.ap_id}") Cachex.del(:user_cache, "nickname:#{user.nickname}") + Cachex.del(:user_cache, "friends_ap_ids:#{user.ap_id}") end @spec get_cached_by_ap_id(String.t()) :: User.t() | nil diff --git a/lib/pleroma/user/query.ex b/lib/pleroma/user/query.ex index ec88088cf..ac77aab71 100644 --- a/lib/pleroma/user/query.ex +++ b/lib/pleroma/user/query.ex @@ -54,13 +54,13 @@ defmodule Pleroma.User.Query do select: term(), limit: pos_integer() } - | %{} + | map() @ilike_criteria [:nickname, :name, :query] @equal_criteria [:email] @contains_criteria [:ap_id, :nickname] - @spec build(criteria()) :: Query.t() + @spec build(Query.t(), criteria()) :: Query.t() def build(query \\ base_query(), criteria) do prepare_query(query, criteria) end diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index c67b3335d..8b170b7f8 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -270,9 +270,9 @@ defp do_create(%{to: to, actor: actor, context: context, object: object} = param ), {:ok, activity} <- insert(create_data, local, fake), {:fake, false, activity} <- {:fake, fake, activity}, + {:quick_insert, false, activity} <- {:quick_insert, quick_insert?, activity}, _ <- increase_replies_count_if_reply(create_data), _ <- increase_poll_votes_if_vote(create_data), - {:quick_insert, false, activity} <- {:quick_insert, quick_insert?, activity}, {:ok, _actor} <- increase_note_count_if_public(actor, activity), :ok <- maybe_federate(activity) do {:ok, activity} @@ -700,12 +700,14 @@ def fetch_activities_for_context_query(context, opts) do do: [opts["user"].ap_id | User.following(opts["user"])] ++ public, else: public + opts = Map.put(opts, "user", opts["user"]) + from(activity in Activity) |> maybe_preload_objects(opts) |> maybe_preload_bookmarks(opts) |> maybe_set_thread_muted_field(opts) |> restrict_blocked(opts) - |> restrict_recipients(recipients, opts["user"]) + |> restrict_recipients(recipients, opts) |> where( [activity], fragment( @@ -740,7 +742,10 @@ def fetch_latest_activity_id_for_context(context, opts \\ %{}) do @spec fetch_public_activities(map(), Pagination.type()) :: [Activity.t()] def fetch_public_activities(opts \\ %{}, pagination \\ :keyset) do - opts = Map.drop(opts, ["user"]) + opts = + opts + |> Map.put("reply_user", opts["user"]) + |> Map.delete("user") [Constants.as_public()] |> fetch_activities_query(opts) @@ -976,13 +981,65 @@ defp restrict_tag(query, %{"tag" => tag}) when is_binary(tag) do defp restrict_tag(query, _), do: query - defp restrict_recipients(query, [], _user), do: query - - defp restrict_recipients(query, recipients, nil) do - from(activity in query, where: fragment("? && ?", ^recipients, activity.recipients)) + defp reply_recipients(user, "following") do + [user.ap_id | User.get_cached_user_friends_ap_ids(user)] end - defp restrict_recipients(query, recipients, user) do + defp reply_recipients(user, "self"), do: [user.ap_id] + + defp restrict_recipients(query, [], _opts), do: query + + defp restrict_recipients( + query, + recipients, + %{"user" => nil, "reply_user" => user, "reply_visibility" => visibility} + ) + when not is_nil(user) and visibility in ["following", "self"] do + reply_recipients = reply_recipients(user, visibility) + + from([activity, object] in query, + where: + fragment( + "? && ? AND (?->>'inReplyTo' IS NULL OR array_remove(?, ?) && ? OR ? = ?)", + ^recipients, + activity.recipients, + object.data, + activity.recipients, + activity.actor, + ^reply_recipients, + activity.actor, + ^user.ap_id + ) + ) + end + + defp restrict_recipients(query, recipients, %{"user" => nil}) do + from(activity in query, + where: fragment("? && ?", ^recipients, activity.recipients) + ) + end + + defp restrict_recipients(query, recipients, %{"user" => user, "reply_visibility" => visibility}) + when visibility in ["following", "self"] do + reply_recipients = reply_recipients(user, visibility) + + from( + [activity, object] in query, + where: + fragment( + "? && ? AND (?->>'inReplyTo' IS NULL OR array_remove(?, ?) && ?)", + ^recipients, + activity.recipients, + object.data, + activity.recipients, + activity.actor, + ^reply_recipients + ), + or_where: activity.actor == ^user.ap_id + ) + end + + defp restrict_recipients(query, recipients, %{"user" => user}) do from( activity in query, where: fragment("? && ?", ^recipients, activity.recipients), @@ -1254,13 +1311,15 @@ def fetch_activities_query(recipients, opts \\ %{}) do skip_thread_containment: Config.get([:instance, :skip_thread_containment]) } + opts = Map.put(opts, "user", opts["user"]) + Activity |> maybe_preload_objects(opts) |> maybe_preload_bookmarks(opts) |> maybe_preload_report_notes(opts) |> maybe_set_thread_muted_field(opts) |> maybe_order(opts) - |> restrict_recipients(recipients, opts["user"]) + |> restrict_recipients(recipients, opts) |> restrict_tag(opts) |> restrict_tag_reject(opts) |> restrict_tag_all(opts) diff --git a/lib/pleroma/web/common_api/activity_draft.ex b/lib/pleroma/web/common_api/activity_draft.ex index c1cd15bb2..244cf2be5 100644 --- a/lib/pleroma/web/common_api/activity_draft.ex +++ b/lib/pleroma/web/common_api/activity_draft.ex @@ -84,14 +84,18 @@ defp attachments(%{params: params} = draft) do %__MODULE__{draft | attachments: attachments} end - defp in_reply_to(draft) do - case Map.get(draft.params, "in_reply_to_status_id") do - "" -> draft - nil -> draft - id -> %__MODULE__{draft | in_reply_to: Activity.get_by_id(id)} - end + defp in_reply_to(%{params: %{"in_reply_to_status_id" => ""}} = draft), do: draft + + defp in_reply_to(%{params: %{"in_reply_to_status_id" => id}} = draft) when is_binary(id) do + %__MODULE__{draft | in_reply_to: Activity.get_by_id(id)} end + defp in_reply_to(%{params: %{"in_reply_to_status_id" => %Activity{} = in_reply_to}} = draft) do + %__MODULE__{draft | in_reply_to: in_reply_to} + end + + defp in_reply_to(draft), do: draft + defp in_reply_to_conversation(draft) do in_reply_to_conversation = Participation.get(draft.params["in_reply_to_conversation_id"]) %__MODULE__{draft | in_reply_to_conversation: in_reply_to_conversation} diff --git a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex index b3c58005e..a2ac9301e 100644 --- a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex @@ -100,6 +100,7 @@ def public(%{assigns: %{user: user}} = conn, params) do |> Map.put("local_only", local_only) |> Map.put("blocking_user", user) |> Map.put("muting_user", user) + |> Map.put("user", user) |> ActivityPub.fetch_public_activities() conn diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index 53176917e..8a1638a23 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -1910,4 +1910,490 @@ test "old user must be in the new user's `also_known_as` list" do ActivityPub.move(old_user, new_user) end end + + test "doesn't retrieve replies activities with exclude_replies" do + user = insert(:user) + + {:ok, activity} = CommonAPI.post(user, %{"status" => "yeah"}) + + {:ok, _reply} = + CommonAPI.post(user, %{"status" => "yeah", "in_reply_to_status_id" => activity.id}) + + [result] = ActivityPub.fetch_public_activities(%{"exclude_replies" => "true"}) + + assert result.id == activity.id + + assert length(ActivityPub.fetch_public_activities()) == 2 + end + + describe "replies filtering with public messages" do + setup :public_messages + + test "public timeline", %{users: %{u1: user}} do + activities_ids = + %{} + |> Map.put("type", ["Create", "Announce"]) + |> Map.put("local_only", false) + |> Map.put("blocking_user", user) + |> Map.put("muting_user", user) + |> Map.put("user", user) + |> ActivityPub.fetch_public_activities() + |> Enum.map(& &1.id) + + assert length(activities_ids) == 16 + end + + test "public timeline with reply_visibility `following`", %{ + users: %{u1: user}, + u1: u1, + u2: u2, + u3: u3, + u4: u4, + activities: activities + } do + activities_ids = + %{} + |> Map.put("type", ["Create", "Announce"]) + |> Map.put("local_only", false) + |> Map.put("blocking_user", user) + |> Map.put("muting_user", user) + |> Map.put("reply_visibility", "following") + |> Map.put("user", user) + |> ActivityPub.fetch_public_activities() + |> Enum.map(& &1.id) + + assert length(activities_ids) == 14 + + visible_ids = + Map.values(u1) ++ Map.values(u2) ++ Map.values(u4) ++ Map.values(activities) ++ [u3[:r1]] + + assert Enum.all?(visible_ids, &(&1 in activities_ids)) + end + + test "public timeline with reply_visibility `self`", %{ + users: %{u1: user}, + u1: u1, + u2: u2, + u3: u3, + u4: u4, + activities: activities + } do + activities_ids = + %{} + |> Map.put("type", ["Create", "Announce"]) + |> Map.put("local_only", false) + |> Map.put("blocking_user", user) + |> Map.put("muting_user", user) + |> Map.put("reply_visibility", "self") + |> Map.put("user", user) + |> ActivityPub.fetch_public_activities() + |> Enum.map(& &1.id) + + assert length(activities_ids) == 10 + visible_ids = Map.values(u1) ++ [u2[:r1], u3[:r1], u4[:r1]] ++ Map.values(activities) + assert Enum.all?(visible_ids, &(&1 in activities_ids)) + end + + test "home timeline", %{ + users: %{u1: user}, + activities: activities, + u1: u1, + u2: u2, + u3: u3, + u4: u4 + } do + params = + %{} + |> Map.put("type", ["Create", "Announce"]) + |> Map.put("blocking_user", user) + |> Map.put("muting_user", user) + |> Map.put("user", user) + + activities_ids = + ActivityPub.fetch_activities([user.ap_id | User.following(user)], params) + |> Enum.map(& &1.id) + + assert length(activities_ids) == 13 + + visible_ids = + Map.values(u1) ++ + Map.values(u3) ++ + [ + activities[:a1], + activities[:a2], + activities[:a4], + u2[:r1], + u2[:r3], + u4[:r1], + u4[:r2] + ] + + assert Enum.all?(visible_ids, &(&1 in activities_ids)) + end + + test "home timeline with reply_visibility `following`", %{ + users: %{u1: user}, + activities: activities, + u1: u1, + u2: u2, + u3: u3, + u4: u4 + } do + params = + %{} + |> Map.put("type", ["Create", "Announce"]) + |> Map.put("blocking_user", user) + |> Map.put("muting_user", user) + |> Map.put("user", user) + |> Map.put("reply_visibility", "following") + + activities_ids = + ActivityPub.fetch_activities([user.ap_id | User.following(user)], params) + |> Enum.map(& &1.id) + + assert length(activities_ids) == 11 + + visible_ids = + Map.values(u1) ++ + [ + activities[:a1], + activities[:a2], + activities[:a4], + u2[:r1], + u2[:r3], + u3[:r1], + u4[:r1], + u4[:r2] + ] + + assert Enum.all?(visible_ids, &(&1 in activities_ids)) + end + + test "home timeline with reply_visibility `self`", %{ + users: %{u1: user}, + activities: activities, + u1: u1, + u2: u2, + u3: u3, + u4: u4 + } do + params = + %{} + |> Map.put("type", ["Create", "Announce"]) + |> Map.put("blocking_user", user) + |> Map.put("muting_user", user) + |> Map.put("user", user) + |> Map.put("reply_visibility", "self") + + activities_ids = + ActivityPub.fetch_activities([user.ap_id | User.following(user)], params) + |> Enum.map(& &1.id) + + assert length(activities_ids) == 9 + + visible_ids = + Map.values(u1) ++ + [ + activities[:a1], + activities[:a2], + activities[:a4], + u2[:r1], + u3[:r1], + u4[:r1] + ] + + assert Enum.all?(visible_ids, &(&1 in activities_ids)) + end + end + + describe "replies filtering with private messages" do + setup :private_messages + + test "public timeline", %{users: %{u1: user}} do + activities_ids = + %{} + |> Map.put("type", ["Create", "Announce"]) + |> Map.put("local_only", false) + |> Map.put("blocking_user", user) + |> Map.put("muting_user", user) + |> Map.put("user", user) + |> ActivityPub.fetch_public_activities() + |> Enum.map(& &1.id) + + assert activities_ids == [] + end + + test "public timeline with default reply_visibility `following`", %{users: %{u1: user}} do + activities_ids = + %{} + |> Map.put("type", ["Create", "Announce"]) + |> Map.put("local_only", false) + |> Map.put("blocking_user", user) + |> Map.put("muting_user", user) + |> Map.put("reply_visibility", "following") + |> Map.put("user", user) + |> ActivityPub.fetch_public_activities() + |> Enum.map(& &1.id) + + assert activities_ids == [] + end + + test "public timeline with default reply_visibility `self`", %{users: %{u1: user}} do + activities_ids = + %{} + |> Map.put("type", ["Create", "Announce"]) + |> Map.put("local_only", false) + |> Map.put("blocking_user", user) + |> Map.put("muting_user", user) + |> Map.put("reply_visibility", "self") + |> Map.put("user", user) + |> ActivityPub.fetch_public_activities() + |> Enum.map(& &1.id) + + assert activities_ids == [] + end + + test "home timeline", %{users: %{u1: user}} do + params = + %{} + |> Map.put("type", ["Create", "Announce"]) + |> Map.put("blocking_user", user) + |> Map.put("muting_user", user) + |> Map.put("user", user) + + activities_ids = + ActivityPub.fetch_activities([user.ap_id | User.following(user)], params) + |> Enum.map(& &1.id) + + assert length(activities_ids) == 12 + end + + test "home timeline with default reply_visibility `following`", %{users: %{u1: user}} do + params = + %{} + |> Map.put("type", ["Create", "Announce"]) + |> Map.put("blocking_user", user) + |> Map.put("muting_user", user) + |> Map.put("user", user) + |> Map.put("reply_visibility", "following") + + activities_ids = + ActivityPub.fetch_activities([user.ap_id | User.following(user)], params) + |> Enum.map(& &1.id) + + assert length(activities_ids) == 12 + end + + test "home timeline with default reply_visibility `self`", %{ + users: %{u1: user}, + activities: activities, + u1: u1, + u2: u2, + u3: u3, + u4: u4 + } do + params = + %{} + |> Map.put("type", ["Create", "Announce"]) + |> Map.put("blocking_user", user) + |> Map.put("muting_user", user) + |> Map.put("user", user) + |> Map.put("reply_visibility", "self") + + activities_ids = + ActivityPub.fetch_activities([user.ap_id | User.following(user)], params) + |> Enum.map(& &1.id) + + assert length(activities_ids) == 10 + + visible_ids = + Map.values(u1) ++ Map.values(u4) ++ [u2[:r1], u3[:r1]] ++ Map.values(activities) + + assert Enum.all?(visible_ids, &(&1 in activities_ids)) + end + end + + defp public_messages(_) do + [u1, u2, u3, u4] = insert_list(4, :user) + {:ok, u1} = User.follow(u1, u2) + {:ok, u2} = User.follow(u2, u1) + {:ok, u1} = User.follow(u1, u4) + {:ok, u4} = User.follow(u4, u1) + + {:ok, u2} = User.follow(u2, u3) + {:ok, u3} = User.follow(u3, u2) + + {:ok, a1} = CommonAPI.post(u1, %{"status" => "Status"}) + + {:ok, r1_1} = + CommonAPI.post(u2, %{ + "status" => "@#{u1.nickname} reply from u2 to u1", + "in_reply_to_status_id" => a1.id + }) + + {:ok, r1_2} = + CommonAPI.post(u3, %{ + "status" => "@#{u1.nickname} reply from u3 to u1", + "in_reply_to_status_id" => a1.id + }) + + {:ok, r1_3} = + CommonAPI.post(u4, %{ + "status" => "@#{u1.nickname} reply from u4 to u1", + "in_reply_to_status_id" => a1.id + }) + + {:ok, a2} = CommonAPI.post(u2, %{"status" => "Status"}) + + {:ok, r2_1} = + CommonAPI.post(u1, %{ + "status" => "@#{u2.nickname} reply from u1 to u2", + "in_reply_to_status_id" => a2.id + }) + + {:ok, r2_2} = + CommonAPI.post(u3, %{ + "status" => "@#{u2.nickname} reply from u3 to u2", + "in_reply_to_status_id" => a2.id + }) + + {:ok, r2_3} = + CommonAPI.post(u4, %{ + "status" => "@#{u2.nickname} reply from u4 to u2", + "in_reply_to_status_id" => a2.id + }) + + {:ok, a3} = CommonAPI.post(u3, %{"status" => "Status"}) + + {:ok, r3_1} = + CommonAPI.post(u1, %{ + "status" => "@#{u3.nickname} reply from u1 to u3", + "in_reply_to_status_id" => a3.id + }) + + {:ok, r3_2} = + CommonAPI.post(u2, %{ + "status" => "@#{u3.nickname} reply from u2 to u3", + "in_reply_to_status_id" => a3.id + }) + + {:ok, r3_3} = + CommonAPI.post(u4, %{ + "status" => "@#{u3.nickname} reply from u4 to u3", + "in_reply_to_status_id" => a3.id + }) + + {:ok, a4} = CommonAPI.post(u4, %{"status" => "Status"}) + + {:ok, r4_1} = + CommonAPI.post(u1, %{ + "status" => "@#{u4.nickname} reply from u1 to u4", + "in_reply_to_status_id" => a4.id + }) + + {:ok, r4_2} = + CommonAPI.post(u2, %{ + "status" => "@#{u4.nickname} reply from u2 to u4", + "in_reply_to_status_id" => a4.id + }) + + {:ok, r4_3} = + CommonAPI.post(u3, %{ + "status" => "@#{u4.nickname} reply from u3 to u4", + "in_reply_to_status_id" => a4.id + }) + + {:ok, + users: %{u1: u1, u2: u2, u3: u3, u4: u4}, + activities: %{a1: a1.id, a2: a2.id, a3: a3.id, a4: a4.id}, + u1: %{r1: r1_1.id, r2: r1_2.id, r3: r1_3.id}, + u2: %{r1: r2_1.id, r2: r2_2.id, r3: r2_3.id}, + u3: %{r1: r3_1.id, r2: r3_2.id, r3: r3_3.id}, + u4: %{r1: r4_1.id, r2: r4_2.id, r3: r4_3.id}} + end + + defp private_messages(_) do + [u1, u2, u3, u4] = insert_list(4, :user) + {:ok, u1} = User.follow(u1, u2) + {:ok, u2} = User.follow(u2, u1) + {:ok, u1} = User.follow(u1, u3) + {:ok, u3} = User.follow(u3, u1) + {:ok, u1} = User.follow(u1, u4) + {:ok, u4} = User.follow(u4, u1) + + {:ok, u2} = User.follow(u2, u3) + {:ok, u3} = User.follow(u3, u2) + + {:ok, a1} = CommonAPI.post(u1, %{"status" => "Status", "visibility" => "private"}) + + {:ok, r1_1} = + CommonAPI.post(u2, %{ + "status" => "@#{u1.nickname} reply from u2 to u1", + "in_reply_to_status_id" => a1.id, + "visibility" => "private" + }) + + {:ok, r1_2} = + CommonAPI.post(u3, %{ + "status" => "@#{u1.nickname} reply from u3 to u1", + "in_reply_to_status_id" => a1.id, + "visibility" => "private" + }) + + {:ok, r1_3} = + CommonAPI.post(u4, %{ + "status" => "@#{u1.nickname} reply from u4 to u1", + "in_reply_to_status_id" => a1.id, + "visibility" => "private" + }) + + {:ok, a2} = CommonAPI.post(u2, %{"status" => "Status", "visibility" => "private"}) + + {:ok, r2_1} = + CommonAPI.post(u1, %{ + "status" => "@#{u2.nickname} reply from u1 to u2", + "in_reply_to_status_id" => a2.id, + "visibility" => "private" + }) + + {:ok, r2_2} = + CommonAPI.post(u3, %{ + "status" => "@#{u2.nickname} reply from u3 to u2", + "in_reply_to_status_id" => a2.id, + "visibility" => "private" + }) + + {:ok, a3} = CommonAPI.post(u3, %{"status" => "Status", "visibility" => "private"}) + + {:ok, r3_1} = + CommonAPI.post(u1, %{ + "status" => "@#{u3.nickname} reply from u1 to u3", + "in_reply_to_status_id" => a3.id, + "visibility" => "private" + }) + + {:ok, r3_2} = + CommonAPI.post(u2, %{ + "status" => "@#{u3.nickname} reply from u2 to u3", + "in_reply_to_status_id" => a3.id, + "visibility" => "private" + }) + + {:ok, a4} = CommonAPI.post(u4, %{"status" => "Status", "visibility" => "private"}) + + {:ok, r4_1} = + CommonAPI.post(u1, %{ + "status" => "@#{u4.nickname} reply from u1 to u4", + "in_reply_to_status_id" => a4.id, + "visibility" => "private" + }) + + {:ok, + users: %{u1: u1, u2: u2, u3: u3, u4: u4}, + activities: %{a1: a1.id, a2: a2.id, a3: a3.id, a4: a4.id}, + u1: %{r1: r1_1.id, r2: r1_2.id, r3: r1_3.id}, + u2: %{r1: r2_1.id, r2: r2_2.id}, + u3: %{r1: r3_1.id, r2: r3_2.id}, + u4: %{r1: r4_1.id}} + end end From be34672d6768bdc9ece96669e07e940a98c9d933 Mon Sep 17 00:00:00 2001 From: Alexander Date: Wed, 4 Dec 2019 10:29:26 +0300 Subject: [PATCH 327/581] formatting --- docs/API/differences_in_mastoapi_responses.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index c97fb8c56..92086136f 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -15,6 +15,7 @@ Some apps operate under the assumption that no more than 4 attachments can be re Adding the parameter `with_muted=true` to the timeline queries will also return activities by muted (not by blocked!) users. Adding the parameter `exclude_visibilities` to the timeline queries will exclude the statuses with the given visibilities. The parameter accepts an array of visibility types (`public`, `unlisted`, `private`, `direct`), e.g., `exclude_visibilities[]=direct&exclude_visibilities[]=private`. Adding the parameter `reply_visibility` to the public and friends timelines quieries will filter replies. Possible values: without parameter (default) shows all replies, `following` - replies directed to you or users you follow, `self` - replies directed to you. + ## Statuses - `visibility`: has an additional possible value `list` From 1a75ef63b2f6fef96b9bf9d07b4963fb217d4017 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 24 Apr 2020 09:24:08 +0300 Subject: [PATCH 328/581] updating benchmarks --- benchmarks/load_testing/activities.ex | 2 +- benchmarks/load_testing/fetcher.ex | 85 +++++++++++++-------------- 2 files changed, 41 insertions(+), 46 deletions(-) diff --git a/benchmarks/load_testing/activities.ex b/benchmarks/load_testing/activities.ex index 23ee2b987..2b032943b 100644 --- a/benchmarks/load_testing/activities.ex +++ b/benchmarks/load_testing/activities.ex @@ -313,7 +313,7 @@ defp insert_activity("simple_thread", visibility, group, user, friends, non_frie tasks = get_reply_tasks(visibility, group) {:ok, activity} = - CommonAPI.post(user, %{"status" => "Simple status", "visibility" => "unlisted"}) + 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) diff --git a/benchmarks/load_testing/fetcher.ex b/benchmarks/load_testing/fetcher.ex index 3aa82b48a..6503deb41 100644 --- a/benchmarks/load_testing/fetcher.ex +++ b/benchmarks/load_testing/fetcher.ex @@ -41,6 +41,7 @@ defp fetch_timelines(user) do fetch_notifications(user) fetch_favourites(user) fetch_long_thread(user) + fetch_timelines_with_reply_filtering(user) end defp render_views(user) do @@ -496,56 +497,50 @@ defp render_long_thread(user) do ) end - def query_replies(user) do - public_params = %{ - "type" => ["Create", "Announce"], - "local_only" => false, - "blocking_user" => user, - "muting_user" => user, - "count" => 20 - } + defp fetch_timelines_with_reply_filtering(user) do + public_params = opts_for_public_timeline(user) - Benchee.run(%{ - "Public timeline without reply filtering" => fn -> - ActivityPub.fetch_public_activities(public_params) - end, - "Public timeline with reply filtering - following" => fn -> - public_params - |> Map.put("reply_visibility", "following") - |> Map.put("user", user) - |> ActivityPub.fetch_public_activities() - end, - "Public timeline with reply filtering - self" => fn -> - public_params - |> Map.put("reply_visibility", "self") - |> Map.put("user", user) - |> ActivityPub.fetch_public_activities() - end - }) + Benchee.run( + %{ + "Public timeline without reply filtering" => fn -> + ActivityPub.fetch_public_activities(public_params) + end, + "Public timeline with reply filtering - following" => fn -> + public_params + |> Map.put("reply_visibility", "following") + |> Map.put("user", user) + |> ActivityPub.fetch_public_activities() + end, + "Public timeline with reply filtering - self" => fn -> + public_params + |> Map.put("reply_visibility", "self") + |> Map.put("user", user) + |> ActivityPub.fetch_public_activities() + end + }, + formatters: formatters() + ) - private_params = %{ - "type" => ["Create", "Announce"], - "blocking_user" => user, - "muting_user" => user, - "user" => user, - "count" => 20 - } + private_params = opts_for_home_timeline(user) recipients = [user.ap_id | User.following(user)] - Benchee.run(%{ - "Home timeline without reply filtering" => fn -> - ActivityPub.fetch_activities(recipients, private_params) - end, - "Home timeline with reply filtering - following" => fn -> - private_params = Map.put(private_params, "reply_visibility", "following") + Benchee.run( + %{ + "Home timeline without reply filtering" => fn -> + ActivityPub.fetch_activities(recipients, private_params) + end, + "Home timeline with reply filtering - following" => fn -> + private_params = Map.put(private_params, "reply_visibility", "following") - ActivityPub.fetch_activities(recipients, private_params) - end, - "Home timeline with reply filtering - self" => fn -> - private_params = Map.put(private_params, "reply_visibility", "self") - ActivityPub.fetch_activities(recipients, private_params) - end - }) + ActivityPub.fetch_activities(recipients, private_params) + end, + "Home timeline with reply filtering - self" => fn -> + private_params = Map.put(private_params, "reply_visibility", "self") + ActivityPub.fetch_activities(recipients, private_params) + end + }, + formatters: formatters() + ) end end From 375ab05234a3590c161a2a5a4f715fbc61dafb34 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 24 Apr 2020 09:57:30 +0300 Subject: [PATCH 329/581] bench sync --- benchmarks/load_testing/activities.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/load_testing/activities.ex b/benchmarks/load_testing/activities.ex index 2b032943b..482e42fc1 100644 --- a/benchmarks/load_testing/activities.ex +++ b/benchmarks/load_testing/activities.ex @@ -279,7 +279,7 @@ defp insert_activity("like", visibility, group, user, friends, non_friends, opts actor = get_actor(group, user, friends, non_friends) with activity_id when not is_nil(activity_id) <- get_random_create_activity_id(), - {:ok, _activity, _object} <- CommonAPI.favorite(activity_id, actor) do + {:ok, _activity} <- CommonAPI.favorite(actor, activity_id) do :ok else {:error, _} -> From 8480f84615b696965d3c1ca34b5847af99fbdece Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 24 Apr 2020 10:26:54 +0000 Subject: [PATCH 330/581] Update differences_in_mastoapi_responses.md --- docs/API/differences_in_mastoapi_responses.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index 92086136f..41ceda26b 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -14,7 +14,7 @@ Some apps operate under the assumption that no more than 4 attachments can be re Adding the parameter `with_muted=true` to the timeline queries will also return activities by muted (not by blocked!) users. Adding the parameter `exclude_visibilities` to the timeline queries will exclude the statuses with the given visibilities. The parameter accepts an array of visibility types (`public`, `unlisted`, `private`, `direct`), e.g., `exclude_visibilities[]=direct&exclude_visibilities[]=private`. -Adding the parameter `reply_visibility` to the public and friends timelines quieries will filter replies. Possible values: without parameter (default) shows all replies, `following` - replies directed to you or users you follow, `self` - replies directed to you. +Adding the parameter `reply_visibility` to the public and home timelines queries will filter replies. Possible values: without parameter (default) shows all replies, `following` - replies directed to you or users you follow, `self` - replies directed to you. ## Statuses From e2f3030c868ca087915294909dee304f7de1730f Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 24 Apr 2020 10:27:51 +0000 Subject: [PATCH 331/581] Apply suggestion to CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index affabcd95..ccc6a5bd4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). API Changes - Mastodon API: Support for `include_types` in `/api/v1/notifications`. - Mastodon API: Added `/api/v1/notifications/:id/dismiss` endpoint. -- Mastodon API: Add support for filtering replies in public and friends timelines +- Mastodon API: Add support for filtering replies in public and home timelines - Admin API: endpoints for create/update/delete OAuth Apps.
From 00e62161f64802317d7d789e7eac42c33f0540f5 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Fri, 24 Apr 2020 16:52:38 +0300 Subject: [PATCH 332/581] [#2409] Tested all auth setup configs in AuthTestControllerTest. Adjusted :skip_plug definitions for some endpoints. --- lib/pleroma/tests/auth_test_controller.ex | 93 +++++++ lib/pleroma/tests/oauth_test_controller.ex | 31 --- lib/pleroma/web/masto_fe_controller.ex | 5 +- .../controllers/account_controller.ex | 13 +- .../controllers/status_controller.ex | 4 +- .../controllers/timeline_controller.ex | 4 +- lib/pleroma/web/oauth/oauth_controller.ex | 5 +- .../controllers/account_controller.ex | 5 +- lib/pleroma/web/router.ex | 21 +- .../web/twitter_api/twitter_api_controller.ex | 8 +- test/web/auth/auth_test_controller_test.exs | 242 ++++++++++++++++++ test/web/auth/oauth_test_controller_test.exs | 49 ---- .../mastodon_api_controller_test.exs | 33 +-- 13 files changed, 392 insertions(+), 121 deletions(-) create mode 100644 lib/pleroma/tests/auth_test_controller.ex delete mode 100644 lib/pleroma/tests/oauth_test_controller.ex create mode 100644 test/web/auth/auth_test_controller_test.exs delete mode 100644 test/web/auth/oauth_test_controller_test.exs diff --git a/lib/pleroma/tests/auth_test_controller.ex b/lib/pleroma/tests/auth_test_controller.ex new file mode 100644 index 000000000..fb04411d9 --- /dev/null +++ b/lib/pleroma/tests/auth_test_controller.ex @@ -0,0 +1,93 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +# A test controller reachable only in :test env. +defmodule Pleroma.Tests.AuthTestController do + @moduledoc false + + use Pleroma.Web, :controller + + alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug + alias Pleroma.Plugs.OAuthScopesPlug + alias Pleroma.User + + # Serves only with proper OAuth token (:api and :authenticated_api) + # Skipping EnsurePublicOrAuthenticatedPlug has no effect in this case + # + # Suggested use case: all :authenticated_api endpoints (makes no sense for :api endpoints) + plug(OAuthScopesPlug, %{scopes: ["read"]} when action == :do_oauth_check) + + # Via :api, keeps :user if token has requested scopes (if :user is dropped, serves if public) + # Via :authenticated_api, serves if token is present and has requested scopes + # + # Suggested use case: vast majority of :api endpoints (no sense for :authenticated_api ones) + plug( + OAuthScopesPlug, + %{scopes: ["read"], fallback: :proceed_unauthenticated} + when action == :fallback_oauth_check + ) + + # Keeps :user if present, executes regardless of token / token scopes + # Fails with no :user for :authenticated_api / no user for :api on private instance + # Note: EnsurePublicOrAuthenticatedPlug is not skipped (private instance fails on no :user) + # Note: Basic Auth processing results in :skip_plug call for OAuthScopesPlug + # + # Suggested use: suppressing OAuth checks for other auth mechanisms (like Basic Auth) + # For controller-level use, see :skip_oauth_skip_publicity_check instead + plug( + :skip_plug, + OAuthScopesPlug when action == :skip_oauth_check + ) + + # (Shouldn't be executed since the plug is skipped) + plug(OAuthScopesPlug, %{scopes: ["admin"]} when action == :skip_oauth_check) + + # Via :api, keeps :user if token has requested scopes, and continues with nil :user otherwise + # Via :authenticated_api, serves if token is present and has requested scopes + # + # Suggested use: as :fallback_oauth_check but open with nil :user for :api on private instances + plug( + :skip_plug, + EnsurePublicOrAuthenticatedPlug when action == :fallback_oauth_skip_publicity_check + ) + + plug( + OAuthScopesPlug, + %{scopes: ["read"], fallback: :proceed_unauthenticated} + when action == :fallback_oauth_skip_publicity_check + ) + + # Via :api, keeps :user if present, serves regardless of token presence / scopes / :user presence + # Via :authenticated_api, serves if :user is set (regardless of token presence and its scopes) + # + # Suggested use: making an :api endpoint always accessible (e.g. email confirmation endpoint) + plug( + :skip_plug, + [OAuthScopesPlug, EnsurePublicOrAuthenticatedPlug] + when action == :skip_oauth_skip_publicity_check + ) + + # Via :authenticated_api, always fails with 403 (endpoint is insecure) + # Via :api, drops :user if present and serves if public (private instance rejects on no user) + # + # Suggested use: none; please define OAuth rules for all :api / :authenticated_api endpoints + plug(:skip_plug, [] when action == :missing_oauth_check_definition) + + def do_oauth_check(conn, _params), do: conn_state(conn) + + def fallback_oauth_check(conn, _params), do: conn_state(conn) + + def skip_oauth_check(conn, _params), do: conn_state(conn) + + def fallback_oauth_skip_publicity_check(conn, _params), do: conn_state(conn) + + def skip_oauth_skip_publicity_check(conn, _params), do: conn_state(conn) + + def missing_oauth_check_definition(conn, _params), do: conn_state(conn) + + defp conn_state(%{assigns: %{user: %User{} = user}} = conn), + do: json(conn, %{user_id: user.id}) + + defp conn_state(conn), do: json(conn, %{user_id: nil}) +end diff --git a/lib/pleroma/tests/oauth_test_controller.ex b/lib/pleroma/tests/oauth_test_controller.ex deleted file mode 100644 index 58d517f78..000000000 --- a/lib/pleroma/tests/oauth_test_controller.ex +++ /dev/null @@ -1,31 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -# A test controller reachable only in :test env. -# Serves to test OAuth scopes check skipping / enforcement. -defmodule Pleroma.Tests.OAuthTestController do - @moduledoc false - - use Pleroma.Web, :controller - - alias Pleroma.Plugs.OAuthScopesPlug - - plug(:skip_plug, OAuthScopesPlug when action == :skipped_oauth) - - plug(OAuthScopesPlug, %{scopes: ["read"]} when action != :missed_oauth) - - def skipped_oauth(conn, _params) do - noop(conn) - end - - def performed_oauth(conn, _params) do - noop(conn) - end - - def missed_oauth(conn, _params) do - noop(conn) - end - - defp noop(conn), do: json(conn, %{}) -end diff --git a/lib/pleroma/web/masto_fe_controller.ex b/lib/pleroma/web/masto_fe_controller.ex index 9a2ec517a..d0d8bc8eb 100644 --- a/lib/pleroma/web/masto_fe_controller.ex +++ b/lib/pleroma/web/masto_fe_controller.ex @@ -5,12 +5,15 @@ defmodule Pleroma.Web.MastoFEController do use Pleroma.Web, :controller + alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.User plug(OAuthScopesPlug, %{scopes: ["write:accounts"]} when action == :put_settings) # Note: :index action handles attempt of unauthenticated access to private instance with redirect + plug(:skip_plug, EnsurePublicOrAuthenticatedPlug when action == :index) + plug( OAuthScopesPlug, %{scopes: ["read"], fallback: :proceed_unauthenticated} @@ -19,7 +22,7 @@ defmodule Pleroma.Web.MastoFEController do plug( :skip_plug, - Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug when action in [:index, :manifest] + [OAuthScopesPlug, EnsurePublicOrAuthenticatedPlug] when action == :manifest ) @doc "GET /web/*path" diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index e3465e659..f39825e08 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -14,6 +14,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do skip_relationships?: 1 ] + alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.Plugs.RateLimiter alias Pleroma.User @@ -26,18 +27,14 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do alias Pleroma.Web.OAuth.Token alias Pleroma.Web.TwitterAPI.TwitterAPI - plug(:skip_plug, OAuthScopesPlug when action in [:create, :identity_proofs]) + plug(:skip_plug, [OAuthScopesPlug, EnsurePublicOrAuthenticatedPlug] when action == :create) - plug( - :skip_plug, - Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug - when action in [:create, :show, :statuses] - ) + plug(:skip_plug, EnsurePublicOrAuthenticatedPlug when action in [:show, :statuses]) plug( OAuthScopesPlug, %{fallback: :proceed_unauthenticated, scopes: ["read:accounts"]} - when action in [:show, :followers, :following, :endorsements] + when action in [:show, :followers, :following] ) plug( @@ -49,7 +46,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do plug( OAuthScopesPlug, %{scopes: ["read:accounts"]} - when action in [:endorsements, :verify_credentials] + when action in [:verify_credentials, :endorsements, :identity_proofs] ) plug(OAuthScopesPlug, %{scopes: ["write:accounts"]} when action == :update_credentials) diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex index eade83aaf..4fa9a2120 100644 --- a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex @@ -24,6 +24,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do alias Pleroma.Web.MastodonAPI.AccountView alias Pleroma.Web.MastodonAPI.ScheduledActivityView + plug(:skip_plug, Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug when action in [:index, :show]) + @unauthenticated_access %{fallback: :proceed_unauthenticated, scopes: []} plug( @@ -77,8 +79,6 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do %{scopes: ["write:bookmarks"]} when action in [:bookmark, :unbookmark] ) - plug(:skip_plug, Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug when action in [:index, :show]) - @rate_limited_status_actions ~w(reblog unreblog favourite unfavourite create delete)a plug( diff --git a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex index 040a0b9dd..fb6b18ed5 100644 --- a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex @@ -15,6 +15,8 @@ defmodule Pleroma.Web.MastodonAPI.TimelineController do alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub + plug(:skip_plug, EnsurePublicOrAuthenticatedPlug when action in [:public, :hashtag]) + # TODO: Replace with a macro when there is a Phoenix release with the following commit in it: # https://github.com/phoenixframework/phoenix/commit/2e8c63c01fec4dde5467dbbbf9705ff9e780735e @@ -33,8 +35,6 @@ defmodule Pleroma.Web.MastodonAPI.TimelineController do when action in [:public, :hashtag] ) - plug(:skip_plug, EnsurePublicOrAuthenticatedPlug when action in [:public, :hashtag]) - plug(:put_view, Pleroma.Web.MastodonAPI.StatusView) # GET /api/v1/timelines/home diff --git a/lib/pleroma/web/oauth/oauth_controller.ex b/lib/pleroma/web/oauth/oauth_controller.ex index 0121cd661..685269877 100644 --- a/lib/pleroma/web/oauth/oauth_controller.ex +++ b/lib/pleroma/web/oauth/oauth_controller.ex @@ -25,9 +25,10 @@ defmodule Pleroma.Web.OAuth.OAuthController do plug(:fetch_session) plug(:fetch_flash) - plug(RateLimiter, [name: :authentication] when action == :create_authorization) - plug(:skip_plug, Pleroma.Plugs.OAuthScopesPlug) + plug(:skip_plug, [Pleroma.Plugs.OAuthScopesPlug, Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug]) + + plug(RateLimiter, [name: :authentication] when action == :create_authorization) action_fallback(Pleroma.Web.OAuth.FallbackController) diff --git a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex index d6ffdcbe4..237c8157e 100644 --- a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex @@ -9,6 +9,7 @@ defmodule Pleroma.Web.PleromaAPI.AccountController do only: [json_response: 3, add_link_headers: 2, assign_account_by_id: 2, skip_relationships?: 1] alias Ecto.Changeset + alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.Plugs.RateLimiter alias Pleroma.User @@ -17,11 +18,9 @@ defmodule Pleroma.Web.PleromaAPI.AccountController do require Pleroma.Constants - plug(:skip_plug, OAuthScopesPlug when action == :confirmation_resend) - plug( :skip_plug, - Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug when action == :confirmation_resend + [OAuthScopesPlug, EnsurePublicOrAuthenticatedPlug] when action == :confirmation_resend ) plug( diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index db158d366..57efc3314 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -655,11 +655,28 @@ defmodule Pleroma.Web.Router do # Test-only routes needed to test action dispatching and plug chain execution if Pleroma.Config.get(:env) == :test do + @test_actions [ + :do_oauth_check, + :fallback_oauth_check, + :skip_oauth_check, + :fallback_oauth_skip_publicity_check, + :skip_oauth_skip_publicity_check, + :missing_oauth_check_definition + ] + + scope "/test/api", Pleroma.Tests do + pipe_through(:api) + + for action <- @test_actions do + get("/#{action}", AuthTestController, action) + end + end + scope "/test/authenticated_api", Pleroma.Tests do pipe_through(:authenticated_api) - for action <- [:skipped_oauth, :performed_oauth, :missed_oauth] do - get("/#{action}", OAuthTestController, action) + for action <- @test_actions do + get("/#{action}", AuthTestController, action) end end end diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index e4f182b02..c2de26b0b 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -6,6 +6,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do use Pleroma.Web, :controller alias Pleroma.Notification + alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.User alias Pleroma.Web.OAuth.Token @@ -18,7 +19,12 @@ defmodule Pleroma.Web.TwitterAPI.Controller do %{scopes: ["write:notifications"]} when action == :mark_notifications_as_read ) - plug(:skip_plug, OAuthScopesPlug when action in [:confirm_email, :oauth_tokens, :revoke_token]) + plug( + :skip_plug, + [OAuthScopesPlug, EnsurePublicOrAuthenticatedPlug] when action == :confirm_email + ) + + plug(:skip_plug, OAuthScopesPlug when action in [:oauth_tokens, :revoke_token]) action_fallback(:errors) diff --git a/test/web/auth/auth_test_controller_test.exs b/test/web/auth/auth_test_controller_test.exs new file mode 100644 index 000000000..fed52b7f3 --- /dev/null +++ b/test/web/auth/auth_test_controller_test.exs @@ -0,0 +1,242 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Tests.AuthTestControllerTest do + use Pleroma.Web.ConnCase + + import Pleroma.Factory + + describe "do_oauth_check" do + test "serves with proper OAuth token (fulfilling requested scopes)" do + %{conn: good_token_conn, user: user} = oauth_access(["read"]) + + assert %{"user_id" => user.id} == + good_token_conn + |> get("/test/authenticated_api/do_oauth_check") + |> json_response(200) + + # Unintended usage (:api) — use with :authenticated_api instead + assert %{"user_id" => user.id} == + good_token_conn + |> get("/test/api/do_oauth_check") + |> json_response(200) + end + + test "fails on no token / missing scope(s)" do + %{conn: bad_token_conn} = oauth_access(["irrelevant_scope"]) + + bad_token_conn + |> get("/test/authenticated_api/do_oauth_check") + |> json_response(403) + + bad_token_conn + |> assign(:token, nil) + |> get("/test/api/do_oauth_check") + |> json_response(403) + end + end + + describe "fallback_oauth_check" do + test "serves with proper OAuth token (fulfilling requested scopes)" do + %{conn: good_token_conn, user: user} = oauth_access(["read"]) + + assert %{"user_id" => user.id} == + good_token_conn + |> get("/test/api/fallback_oauth_check") + |> json_response(200) + + # Unintended usage (:authenticated_api) — use with :api instead + assert %{"user_id" => user.id} == + good_token_conn + |> get("/test/authenticated_api/fallback_oauth_check") + |> json_response(200) + end + + test "for :api on public instance, drops :user and renders on no token / missing scope(s)" do + clear_config([:instance, :public], true) + + %{conn: bad_token_conn} = oauth_access(["irrelevant_scope"]) + + assert %{"user_id" => nil} == + bad_token_conn + |> get("/test/api/fallback_oauth_check") + |> json_response(200) + + assert %{"user_id" => nil} == + bad_token_conn + |> assign(:token, nil) + |> get("/test/api/fallback_oauth_check") + |> json_response(200) + end + + test "for :api on private instance, fails on no token / missing scope(s)" do + clear_config([:instance, :public], false) + + %{conn: bad_token_conn} = oauth_access(["irrelevant_scope"]) + + bad_token_conn + |> get("/test/api/fallback_oauth_check") + |> json_response(403) + + bad_token_conn + |> assign(:token, nil) + |> get("/test/api/fallback_oauth_check") + |> json_response(403) + end + end + + describe "skip_oauth_check" do + test "for :authenticated_api, serves if :user is set (regardless of token / token scopes)" do + user = insert(:user) + + assert %{"user_id" => user.id} == + build_conn() + |> assign(:user, user) + |> get("/test/authenticated_api/skip_oauth_check") + |> json_response(200) + + %{conn: bad_token_conn, user: user} = oauth_access(["irrelevant_scope"]) + + assert %{"user_id" => user.id} == + bad_token_conn + |> get("/test/authenticated_api/skip_oauth_check") + |> json_response(200) + end + + test "serves via :api on public instance if :user is not set" do + clear_config([:instance, :public], true) + + assert %{"user_id" => nil} == + build_conn() + |> get("/test/api/skip_oauth_check") + |> json_response(200) + + build_conn() + |> get("/test/authenticated_api/skip_oauth_check") + |> json_response(403) + end + + test "fails on private instance if :user is not set" do + clear_config([:instance, :public], false) + + build_conn() + |> get("/test/api/skip_oauth_check") + |> json_response(403) + + build_conn() + |> get("/test/authenticated_api/skip_oauth_check") + |> json_response(403) + end + end + + describe "fallback_oauth_skip_publicity_check" do + test "serves with proper OAuth token (fulfilling requested scopes)" do + %{conn: good_token_conn, user: user} = oauth_access(["read"]) + + assert %{"user_id" => user.id} == + good_token_conn + |> get("/test/api/fallback_oauth_skip_publicity_check") + |> json_response(200) + + # Unintended usage (:authenticated_api) + assert %{"user_id" => user.id} == + good_token_conn + |> get("/test/authenticated_api/fallback_oauth_skip_publicity_check") + |> json_response(200) + end + + test "for :api on private / public instance, drops :user and renders on token issue" do + %{conn: bad_token_conn} = oauth_access(["irrelevant_scope"]) + + for is_public <- [true, false] do + clear_config([:instance, :public], is_public) + + assert %{"user_id" => nil} == + bad_token_conn + |> get("/test/api/fallback_oauth_skip_publicity_check") + |> json_response(200) + + assert %{"user_id" => nil} == + bad_token_conn + |> assign(:token, nil) + |> get("/test/api/fallback_oauth_skip_publicity_check") + |> json_response(200) + end + end + end + + describe "skip_oauth_skip_publicity_check" do + test "for :authenticated_api, serves if :user is set (regardless of token / token scopes)" do + user = insert(:user) + + assert %{"user_id" => user.id} == + build_conn() + |> assign(:user, user) + |> get("/test/authenticated_api/skip_oauth_skip_publicity_check") + |> json_response(200) + + %{conn: bad_token_conn, user: user} = oauth_access(["irrelevant_scope"]) + + assert %{"user_id" => user.id} == + bad_token_conn + |> get("/test/authenticated_api/skip_oauth_skip_publicity_check") + |> json_response(200) + end + + test "for :api, serves on private and public instances regardless of whether :user is set" do + user = insert(:user) + + for is_public <- [true, false] do + clear_config([:instance, :public], is_public) + + assert %{"user_id" => nil} == + build_conn() + |> get("/test/api/skip_oauth_skip_publicity_check") + |> json_response(200) + + assert %{"user_id" => user.id} == + build_conn() + |> assign(:user, user) + |> get("/test/api/skip_oauth_skip_publicity_check") + |> json_response(200) + end + end + end + + describe "missing_oauth_check_definition" do + def test_missing_oauth_check_definition_failure(endpoint, expected_error) do + %{conn: conn} = oauth_access(["read", "write", "follow", "push", "admin"]) + + assert %{"error" => expected_error} == + conn + |> get(endpoint) + |> json_response(403) + end + + test "fails if served via :authenticated_api" do + test_missing_oauth_check_definition_failure( + "/test/authenticated_api/missing_oauth_check_definition", + "Security violation: OAuth scopes check was neither handled nor explicitly skipped." + ) + end + + test "fails if served via :api and the instance is private" do + clear_config([:instance, :public], false) + + test_missing_oauth_check_definition_failure( + "/test/api/missing_oauth_check_definition", + "This resource requires authentication." + ) + end + + test "succeeds with dropped :user if served via :api on public instance" do + %{conn: conn} = oauth_access(["read", "write", "follow", "push", "admin"]) + + assert %{"user_id" => nil} == + conn + |> get("/test/api/missing_oauth_check_definition") + |> json_response(200) + end + end +end diff --git a/test/web/auth/oauth_test_controller_test.exs b/test/web/auth/oauth_test_controller_test.exs deleted file mode 100644 index a2f6009ac..000000000 --- a/test/web/auth/oauth_test_controller_test.exs +++ /dev/null @@ -1,49 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Tests.OAuthTestControllerTest do - use Pleroma.Web.ConnCase - - import Pleroma.Factory - - setup %{conn: conn} do - user = insert(:user) - conn = assign(conn, :user, user) - %{conn: conn, user: user} - end - - test "missed_oauth", %{conn: conn} do - res = - conn - |> get("/test/authenticated_api/missed_oauth") - |> json_response(403) - - assert res == - %{ - "error" => - "Security violation: OAuth scopes check was neither handled nor explicitly skipped." - } - end - - test "skipped_oauth", %{conn: conn} do - conn - |> assign(:token, nil) - |> get("/test/authenticated_api/skipped_oauth") - |> json_response(200) - end - - test "performed_oauth", %{user: user} do - %{conn: good_token_conn} = oauth_access(["read"], user: user) - - good_token_conn - |> get("/test/authenticated_api/performed_oauth") - |> json_response(200) - - %{conn: bad_token_conn} = oauth_access(["follow"], user: user) - - bad_token_conn - |> get("/test/authenticated_api/performed_oauth") - |> json_response(403) - end -end diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index 75f184242..bb4bc4396 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -7,35 +7,28 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do describe "empty_array/2 (stubs)" do test "GET /api/v1/accounts/:id/identity_proofs" do - %{user: user, conn: conn} = oauth_access(["n/a"]) + %{user: user, conn: conn} = oauth_access(["read:accounts"]) - res = - conn - |> assign(:user, user) - |> get("/api/v1/accounts/#{user.id}/identity_proofs") - |> json_response(200) - - assert res == [] + assert [] == + conn + |> get("/api/v1/accounts/#{user.id}/identity_proofs") + |> json_response(200) end test "GET /api/v1/endorsements" do %{conn: conn} = oauth_access(["read:accounts"]) - res = - conn - |> get("/api/v1/endorsements") - |> json_response(200) - - assert res == [] + assert [] == + conn + |> get("/api/v1/endorsements") + |> json_response(200) end test "GET /api/v1/trends", %{conn: conn} do - res = - conn - |> get("/api/v1/trends") - |> json_response(200) - - assert res == [] + assert [] == + conn + |> get("/api/v1/trends") + |> json_response(200) end end end From d89cd0a19733eec27b79b768df2e30a68bfc6d6b Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 24 Apr 2020 18:25:26 +0200 Subject: [PATCH 333/581] Reply Filtering: Refactor. --- benchmarks/load_testing/fetcher.ex | 15 ++- benchmarks/mix/tasks/pleroma/load_testing.ex | 1 + lib/pleroma/web/activity_pub/activity_pub.ex | 114 +++++++----------- .../controllers/timeline_controller.ex | 3 +- test/web/activity_pub/activity_pub_test.exs | 13 +- 5 files changed, 69 insertions(+), 77 deletions(-) diff --git a/benchmarks/load_testing/fetcher.ex b/benchmarks/load_testing/fetcher.ex index 6503deb41..12c30f6f5 100644 --- a/benchmarks/load_testing/fetcher.ex +++ b/benchmarks/load_testing/fetcher.ex @@ -508,13 +508,13 @@ defp fetch_timelines_with_reply_filtering(user) do "Public timeline with reply filtering - following" => fn -> public_params |> Map.put("reply_visibility", "following") - |> Map.put("user", user) + |> Map.put("reply_filtering_user", user) |> ActivityPub.fetch_public_activities() end, "Public timeline with reply filtering - self" => fn -> public_params |> Map.put("reply_visibility", "self") - |> Map.put("user", user) + |> Map.put("reply_filtering_user", user) |> ActivityPub.fetch_public_activities() end }, @@ -531,12 +531,19 @@ defp fetch_timelines_with_reply_filtering(user) do ActivityPub.fetch_activities(recipients, private_params) end, "Home timeline with reply filtering - following" => fn -> - private_params = Map.put(private_params, "reply_visibility", "following") + private_params = + private_params + |> Map.put("reply_filtering_user", user) + |> Map.put("reply_visibility", "following") ActivityPub.fetch_activities(recipients, private_params) end, "Home timeline with reply filtering - self" => fn -> - private_params = Map.put(private_params, "reply_visibility", "self") + private_params = + private_params + |> Map.put("reply_filtering_user", user) + |> Map.put("reply_visibility", "self") + ActivityPub.fetch_activities(recipients, private_params) end }, diff --git a/benchmarks/mix/tasks/pleroma/load_testing.ex b/benchmarks/mix/tasks/pleroma/load_testing.ex index 72b225f09..388883240 100644 --- a/benchmarks/mix/tasks/pleroma/load_testing.ex +++ b/benchmarks/mix/tasks/pleroma/load_testing.ex @@ -44,6 +44,7 @@ defmodule Mix.Tasks.Pleroma.LoadTesting do ] def run(args) do + Logger.configure(level: :error) Mix.Pleroma.start_pleroma() clean_tables() {opts, _} = OptionParser.parse!(args, strict: @switches, aliases: @aliases) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 8b170b7f8..9ec31fb03 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -270,9 +270,9 @@ defp do_create(%{to: to, actor: actor, context: context, object: object} = param ), {:ok, activity} <- insert(create_data, local, fake), {:fake, false, activity} <- {:fake, fake, activity}, - {:quick_insert, false, activity} <- {:quick_insert, quick_insert?, activity}, _ <- increase_replies_count_if_reply(create_data), _ <- increase_poll_votes_if_vote(create_data), + {:quick_insert, false, activity} <- {:quick_insert, quick_insert?, activity}, {:ok, _actor} <- increase_note_count_if_public(actor, activity), :ok <- maybe_federate(activity) do {:ok, activity} @@ -700,14 +700,12 @@ def fetch_activities_for_context_query(context, opts) do do: [opts["user"].ap_id | User.following(opts["user"])] ++ public, else: public - opts = Map.put(opts, "user", opts["user"]) - from(activity in Activity) |> maybe_preload_objects(opts) |> maybe_preload_bookmarks(opts) |> maybe_set_thread_muted_field(opts) |> restrict_blocked(opts) - |> restrict_recipients(recipients, opts) + |> restrict_recipients(recipients, opts["user"]) |> where( [activity], fragment( @@ -742,10 +740,7 @@ def fetch_latest_activity_id_for_context(context, opts \\ %{}) do @spec fetch_public_activities(map(), Pagination.type()) :: [Activity.t()] def fetch_public_activities(opts \\ %{}, pagination \\ :keyset) do - opts = - opts - |> Map.put("reply_user", opts["user"]) - |> Map.delete("user") + opts = Map.drop(opts, ["user"]) [Constants.as_public()] |> fetch_activities_query(opts) @@ -981,65 +976,13 @@ defp restrict_tag(query, %{"tag" => tag}) when is_binary(tag) do defp restrict_tag(query, _), do: query - defp reply_recipients(user, "following") do - [user.ap_id | User.get_cached_user_friends_ap_ids(user)] + defp restrict_recipients(query, [], _user), do: query + + defp restrict_recipients(query, recipients, nil) do + from(activity in query, where: fragment("? && ?", ^recipients, activity.recipients)) end - defp reply_recipients(user, "self"), do: [user.ap_id] - - defp restrict_recipients(query, [], _opts), do: query - - defp restrict_recipients( - query, - recipients, - %{"user" => nil, "reply_user" => user, "reply_visibility" => visibility} - ) - when not is_nil(user) and visibility in ["following", "self"] do - reply_recipients = reply_recipients(user, visibility) - - from([activity, object] in query, - where: - fragment( - "? && ? AND (?->>'inReplyTo' IS NULL OR array_remove(?, ?) && ? OR ? = ?)", - ^recipients, - activity.recipients, - object.data, - activity.recipients, - activity.actor, - ^reply_recipients, - activity.actor, - ^user.ap_id - ) - ) - end - - defp restrict_recipients(query, recipients, %{"user" => nil}) do - from(activity in query, - where: fragment("? && ?", ^recipients, activity.recipients) - ) - end - - defp restrict_recipients(query, recipients, %{"user" => user, "reply_visibility" => visibility}) - when visibility in ["following", "self"] do - reply_recipients = reply_recipients(user, visibility) - - from( - [activity, object] in query, - where: - fragment( - "? && ? AND (?->>'inReplyTo' IS NULL OR array_remove(?, ?) && ?)", - ^recipients, - activity.recipients, - object.data, - activity.recipients, - activity.actor, - ^reply_recipients - ), - or_where: activity.actor == ^user.ap_id - ) - end - - defp restrict_recipients(query, recipients, %{"user" => user}) do + defp restrict_recipients(query, recipients, user) do from( activity in query, where: fragment("? && ?", ^recipients, activity.recipients), @@ -1104,6 +1047,41 @@ defp restrict_replies(query, %{"exclude_replies" => val}) when val == "true" or ) end + defp restrict_replies(query, %{ + "reply_filtering_user" => user, + "reply_visibility" => "self" + }) do + from( + [activity, object] in query, + where: + fragment( + "?->>'inReplyTo' is null OR ? = ANY(?)", + object.data, + ^user.ap_id, + activity.recipients + ) + ) + end + + defp restrict_replies(query, %{ + "reply_filtering_user" => user, + "reply_visibility" => "following" + }) do + from( + [activity, object] in query, + where: + fragment( + "?->>'inReplyTo' is null OR ? && array_remove(?, ?) OR ? = ?", + object.data, + ^[user.ap_id | User.get_cached_user_friends_ap_ids(user)], + activity.recipients, + activity.actor, + activity.actor, + ^user.ap_id + ) + ) + end + defp restrict_replies(query, _), do: query defp restrict_reblogs(query, %{"exclude_reblogs" => val}) when val == "true" or val == "1" do @@ -1311,15 +1289,14 @@ def fetch_activities_query(recipients, opts \\ %{}) do skip_thread_containment: Config.get([:instance, :skip_thread_containment]) } - opts = Map.put(opts, "user", opts["user"]) - Activity |> maybe_preload_objects(opts) |> maybe_preload_bookmarks(opts) |> maybe_preload_report_notes(opts) |> maybe_set_thread_muted_field(opts) |> maybe_order(opts) - |> restrict_recipients(recipients, opts) + |> restrict_recipients(recipients, opts["user"]) + |> restrict_replies(opts) |> restrict_tag(opts) |> restrict_tag_reject(opts) |> restrict_tag_all(opts) @@ -1334,7 +1311,6 @@ def fetch_activities_query(recipients, opts \\ %{}) do |> restrict_media(opts) |> restrict_visibility(opts) |> restrict_thread_visibility(opts, config) - |> restrict_replies(opts) |> restrict_reblogs(opts) |> restrict_pinned(opts) |> restrict_muted_reblogs(restrict_muted_reblogs_opts) diff --git a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex index a2ac9301e..403d500e0 100644 --- a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex @@ -37,6 +37,7 @@ def home(%{assigns: %{user: user}} = conn, params) do |> Map.put("type", ["Create", "Announce"]) |> Map.put("blocking_user", user) |> Map.put("muting_user", user) + |> Map.put("reply_filtering_user", user) |> Map.put("user", user) recipients = [user.ap_id | User.following(user)] @@ -100,7 +101,7 @@ def public(%{assigns: %{user: user}} = conn, params) do |> Map.put("local_only", local_only) |> Map.put("blocking_user", user) |> Map.put("muting_user", user) - |> Map.put("user", user) + |> Map.put("reply_filtering_user", user) |> ActivityPub.fetch_public_activities() conn diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index 8a1638a23..edd7dfb22 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -1936,7 +1936,7 @@ test "public timeline", %{users: %{u1: user}} do |> Map.put("local_only", false) |> Map.put("blocking_user", user) |> Map.put("muting_user", user) - |> Map.put("user", user) + |> Map.put("reply_filtering_user", user) |> ActivityPub.fetch_public_activities() |> Enum.map(& &1.id) @@ -1958,7 +1958,7 @@ test "public timeline with reply_visibility `following`", %{ |> Map.put("blocking_user", user) |> Map.put("muting_user", user) |> Map.put("reply_visibility", "following") - |> Map.put("user", user) + |> Map.put("reply_filtering_user", user) |> ActivityPub.fetch_public_activities() |> Enum.map(& &1.id) @@ -1985,7 +1985,7 @@ test "public timeline with reply_visibility `self`", %{ |> Map.put("blocking_user", user) |> Map.put("muting_user", user) |> Map.put("reply_visibility", "self") - |> Map.put("user", user) + |> Map.put("reply_filtering_user", user) |> ActivityPub.fetch_public_activities() |> Enum.map(& &1.id) @@ -2008,6 +2008,7 @@ test "home timeline", %{ |> Map.put("blocking_user", user) |> Map.put("muting_user", user) |> Map.put("user", user) + |> Map.put("reply_filtering_user", user) activities_ids = ActivityPub.fetch_activities([user.ap_id | User.following(user)], params) @@ -2046,6 +2047,7 @@ test "home timeline with reply_visibility `following`", %{ |> Map.put("muting_user", user) |> Map.put("user", user) |> Map.put("reply_visibility", "following") + |> Map.put("reply_filtering_user", user) activities_ids = ActivityPub.fetch_activities([user.ap_id | User.following(user)], params) @@ -2084,6 +2086,7 @@ test "home timeline with reply_visibility `self`", %{ |> Map.put("muting_user", user) |> Map.put("user", user) |> Map.put("reply_visibility", "self") + |> Map.put("reply_filtering_user", user) activities_ids = ActivityPub.fetch_activities([user.ap_id | User.following(user)], params) @@ -2131,6 +2134,7 @@ test "public timeline with default reply_visibility `following`", %{users: %{u1: |> Map.put("blocking_user", user) |> Map.put("muting_user", user) |> Map.put("reply_visibility", "following") + |> Map.put("reply_filtering_user", user) |> Map.put("user", user) |> ActivityPub.fetch_public_activities() |> Enum.map(& &1.id) @@ -2146,6 +2150,7 @@ test "public timeline with default reply_visibility `self`", %{users: %{u1: user |> Map.put("blocking_user", user) |> Map.put("muting_user", user) |> Map.put("reply_visibility", "self") + |> Map.put("reply_filtering_user", user) |> Map.put("user", user) |> ActivityPub.fetch_public_activities() |> Enum.map(& &1.id) @@ -2176,6 +2181,7 @@ test "home timeline with default reply_visibility `following`", %{users: %{u1: u |> Map.put("muting_user", user) |> Map.put("user", user) |> Map.put("reply_visibility", "following") + |> Map.put("reply_filtering_user", user) activities_ids = ActivityPub.fetch_activities([user.ap_id | User.following(user)], params) @@ -2199,6 +2205,7 @@ test "home timeline with default reply_visibility `self`", %{ |> Map.put("muting_user", user) |> Map.put("user", user) |> Map.put("reply_visibility", "self") + |> Map.put("reply_filtering_user", user) activities_ids = ActivityPub.fetch_activities([user.ap_id | User.following(user)], params) From b4139cc5472079a34f0256ac9991a0222844d44c Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Fri, 24 Apr 2020 22:25:27 +0300 Subject: [PATCH 334/581] [#2409] Made `GET /api/v1/accounts/:id/favourites` auth-optional, adjusted tests. --- .../controllers/status_controller.ex | 2 +- .../controllers/account_controller.ex | 5 ++++- lib/pleroma/web/router.ex | 7 ++++++- .../controllers/account_controller_test.exs | 20 ++++++++++++------- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex index 4fa9a2120..45601ff59 100644 --- a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex @@ -357,7 +357,7 @@ def context(%{assigns: %{user: user}} = conn, %{"id" => id}) do end @doc "GET /api/v1/favourites" - def favourites(%{assigns: %{user: user}} = conn, params) do + def favourites(%{assigns: %{user: %User{} = user}} = conn, params) do activities = ActivityPub.fetch_favourites( user, diff --git a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex index 237c8157e..be7477867 100644 --- a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex @@ -39,7 +39,10 @@ defmodule Pleroma.Web.PleromaAPI.AccountController do ] ) - plug(OAuthScopesPlug, %{scopes: ["read:favourites"]} when action == :favourites) + plug( + OAuthScopesPlug, + %{scopes: ["read:favourites"], fallback: :proceed_unauthenticated} when action == :favourites + ) plug(RateLimiter, [name: :account_confirmation_resend] when action == :confirmation_resend) diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 57efc3314..becce3098 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -312,10 +312,14 @@ defmodule Pleroma.Web.Router do post("/scrobble", ScrobbleController, :new_scrobble) end + scope [] do + pipe_through(:api) + get("/accounts/:id/favourites", AccountController, :favourites) + end + scope [] do pipe_through(:authenticated_api) - get("/accounts/:id/favourites", AccountController, :favourites) post("/accounts/:id/subscribe", AccountController, :subscribe) post("/accounts/:id/unsubscribe", AccountController, :unsubscribe) end @@ -404,6 +408,7 @@ defmodule Pleroma.Web.Router do put("/scheduled_statuses/:id", ScheduledActivityController, :update) delete("/scheduled_statuses/:id", ScheduledActivityController, :delete) + # Unlike `GET /api/v1/accounts/:id/favourites`, demands authentication get("/favourites", StatusController, :favourites) get("/bookmarks", StatusController, :bookmarks) diff --git a/test/web/pleroma_api/controllers/account_controller_test.exs b/test/web/pleroma_api/controllers/account_controller_test.exs index ae5334015..6b671a667 100644 --- a/test/web/pleroma_api/controllers/account_controller_test.exs +++ b/test/web/pleroma_api/controllers/account_controller_test.exs @@ -151,15 +151,18 @@ test "returns list of statuses favorited by specified user", %{ assert like["id"] == activity.id end - test "does not return favorites for specified user_id when user is not logged in", %{ + test "returns favorites for specified user_id when requester is not logged in", %{ user: user } do activity = insert(:note_activity) CommonAPI.favorite(user, activity.id) - build_conn() - |> get("/api/v1/pleroma/accounts/#{user.id}/favourites") - |> json_response(403) + response = + build_conn() + |> get("/api/v1/pleroma/accounts/#{user.id}/favourites") + |> json_response(200) + + assert length(response) == 1 end test "returns favorited DM only when user is logged in and he is one of recipients", %{ @@ -185,9 +188,12 @@ test "returns favorited DM only when user is logged in and he is one of recipien assert length(response) == 1 end - build_conn() - |> get("/api/v1/pleroma/accounts/#{user.id}/favourites") - |> json_response(403) + response = + build_conn() + |> get("/api/v1/pleroma/accounts/#{user.id}/favourites") + |> json_response(200) + + assert length(response) == 0 end test "does not return others' favorited DM when user is not one of recipients", %{ From 0d05e1fe397d75d4381d9059bd1c049ab7030085 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Sat, 25 Apr 2020 18:24:10 +0300 Subject: [PATCH 335/581] [#1706] Prevented error on unresolved activity actors for timeline actions. --- lib/pleroma/web/admin_api/views/status_view.ex | 18 +++--------------- .../web/mastodon_api/views/status_view.ex | 13 ++++++++++--- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/lib/pleroma/web/admin_api/views/status_view.ex b/lib/pleroma/web/admin_api/views/status_view.ex index 360ddc22c..3637dee24 100644 --- a/lib/pleroma/web/admin_api/views/status_view.ex +++ b/lib/pleroma/web/admin_api/views/status_view.ex @@ -8,15 +8,16 @@ defmodule Pleroma.Web.AdminAPI.StatusView do require Pleroma.Constants alias Pleroma.User + alias Pleroma.Web.MastodonAPI.StatusView def render("index.json", opts) do safe_render_many(opts.activities, __MODULE__, "show.json", opts) end def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} = opts) do - user = get_user(activity.data["actor"]) + user = StatusView.get_user(activity.data["actor"]) - Pleroma.Web.MastodonAPI.StatusView.render("show.json", opts) + StatusView.render("show.json", opts) |> Map.merge(%{account: merge_account_views(user)}) end @@ -26,17 +27,4 @@ defp merge_account_views(%User{} = user) do end defp merge_account_views(_), do: %{} - - defp get_user(ap_id) do - cond do - user = User.get_cached_by_ap_id(ap_id) -> - user - - user = User.get_by_guessed_nickname(ap_id) -> - user - - true -> - User.error_user(ap_id) - end - end end diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index b5850e1ae..b0c53acd9 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -45,7 +45,7 @@ defp get_replied_to_activities(activities) do end) end - defp get_user(ap_id) do + def get_user(ap_id, fake_record_fallback \\ true) do cond do user = User.get_cached_by_ap_id(ap_id) -> user @@ -53,8 +53,11 @@ defp get_user(ap_id) do user = User.get_by_guessed_nickname(ap_id) -> user - true -> + fake_record_fallback -> + # TODO: refactor (fake records is never a good idea) User.error_user(ap_id) + + true -> nil end end @@ -97,7 +100,11 @@ def render("index.json", opts) do UserRelationship.view_relationships_option(nil, []) true -> - actors = Enum.map(activities ++ parent_activities, &get_user(&1.data["actor"])) + # Note: unresolved users are filtered out + actors = + (activities ++ parent_activities) + |> Enum.map(&get_user(&1.data["actor"], false)) + |> Enum.filter(& &1) UserRelationship.view_relationships_option(reading_user, actors, source_mutes_only: opts[:skip_relationships] From e16437ff191f17b7ec59504d3c38e582ba76eedc Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Sat, 25 Apr 2020 18:42:08 +0300 Subject: [PATCH 336/581] [#1706] Formatting fix. --- lib/pleroma/web/mastodon_api/views/status_view.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index b0c53acd9..1d9082c09 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -57,7 +57,8 @@ def get_user(ap_id, fake_record_fallback \\ true) do # TODO: refactor (fake records is never a good idea) User.error_user(ap_id) - true -> nil + true -> + nil end end From 1bd9749a8f31e5f087b0d0ca75b13f4baf461997 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 26 Apr 2020 00:28:57 -0500 Subject: [PATCH 337/581] Let blob: pass CSP --- docs/configuration/hardening.md | 2 +- lib/pleroma/plugs/http_security_plug.ex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/configuration/hardening.md b/docs/configuration/hardening.md index b54c28850..d3bfc4e4a 100644 --- a/docs/configuration/hardening.md +++ b/docs/configuration/hardening.md @@ -36,7 +36,7 @@ content-security-policy: default-src 'none'; base-uri 'self'; frame-ancestors 'none'; - img-src 'self' data: https:; + img-src 'self' data: blob: https:; media-src 'self' https:; style-src 'self' 'unsafe-inline'; font-src 'self'; diff --git a/lib/pleroma/plugs/http_security_plug.ex b/lib/pleroma/plugs/http_security_plug.ex index 81e6b4f2a..6462797b6 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 "default-src 'none'", "base-uri 'self'", "frame-ancestors 'none'", - "img-src 'self' data: https:", + "img-src 'self' data: blob: https:", "media-src 'self' https:", "style-src 'self' 'unsafe-inline'", "font-src 'self'", From 66acfa6882152de9f7b5181e708de02bb97d42a8 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Mon, 27 Apr 2020 10:28:05 +0300 Subject: [PATCH 338/581] descriptions that module names are shortened --- config/description.exs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/config/description.exs b/config/description.exs index 7fac1e561..62e4cda7a 100644 --- a/config/description.exs +++ b/config/description.exs @@ -28,7 +28,8 @@ %{ key: :filters, type: {:list, :module}, - description: "List of filter modules for uploads", + description: + "List of filter modules for uploads. Module names are shortened (removed leading `Pleroma.Upload.Filter.` part), but on adding custom MRF module you need to use full name.", suggestions: Generator.list_modules_in_dir( "lib/pleroma/upload/filter", @@ -681,7 +682,8 @@ %{ key: :federation_publisher_modules, type: {:list, :module}, - description: "List of modules for federation publishing", + description: + "List of modules for federation publishing. Module names are shortened (removed leading `Pleroma.Web.` part), but on adding custom MRF module you need to use full name.", suggestions: [ Pleroma.Web.ActivityPub.Publisher ] @@ -694,7 +696,8 @@ %{ key: :rewrite_policy, type: [:module, {:list, :module}], - description: "A list of MRF policies enabled", + description: + "A list of enabled MRF policies. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom MRF module you need to use full name.", suggestions: Generator.list_modules_in_dir( "lib/pleroma/web/activity_pub/mrf", @@ -1975,7 +1978,8 @@ %{ key: :parsers, type: {:list, :module}, - description: "List of Rich Media parsers.", + description: + "List of Rich Media parsers. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parsers.` part), but on adding custom MRF module you need to use full name.", suggestions: [ Pleroma.Web.RichMedia.Parsers.MetaTagsParser, Pleroma.Web.RichMedia.Parsers.OEmbed, @@ -1987,7 +1991,8 @@ key: :ttl_setters, label: "TTL setters", type: {:list, :module}, - description: "List of rich media TTL setters.", + description: + "List of rich media TTL setters. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parser.` part), but on adding custom MRF module you need to use full name.", suggestions: [ Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl ] @@ -2674,6 +2679,8 @@ %{ key: :scrub_policy, type: {:list, :module}, + description: + "Module names are shortened (removed leading `Pleroma.HTML.` part), but on adding custom MRF module you need to use full name.", suggestions: [Pleroma.HTML.Transform.MediaProxy, Pleroma.HTML.Scrubber.Default] } ] From 3635a9c9c25db16be292c5f56c27ab5d5f5affb5 Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 27 Apr 2020 14:28:08 +0200 Subject: [PATCH 339/581] InstanceController: Add extensions to `/api/v1/instance` --- .../web/mastodon_api/views/instance_view.ex | 58 ++++++++++++++++++- .../web/nodeinfo/nodeinfo_controller.ex | 47 ++------------- .../controllers/instance_controller_test.exs | 4 ++ 3 files changed, 64 insertions(+), 45 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/views/instance_view.ex b/lib/pleroma/web/mastodon_api/views/instance_view.ex index 67214dbea..a329ffc28 100644 --- a/lib/pleroma/web/mastodon_api/views/instance_view.ex +++ b/lib/pleroma/web/mastodon_api/views/instance_view.ex @@ -5,10 +5,13 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do use Pleroma.Web, :view + alias Pleroma.Config + alias Pleroma.Web.ActivityPub.MRF + @mastodon_api_level "2.7.2" def render("show.json", _) do - instance = Pleroma.Config.get(:instance) + instance = Config.get(:instance) %{ uri: Pleroma.Web.base_url(), @@ -29,7 +32,58 @@ def render("show.json", _) do upload_limit: Keyword.get(instance, :upload_limit), avatar_upload_limit: Keyword.get(instance, :avatar_upload_limit), background_upload_limit: Keyword.get(instance, :background_upload_limit), - banner_upload_limit: Keyword.get(instance, :banner_upload_limit) + banner_upload_limit: Keyword.get(instance, :banner_upload_limit), + pleroma: %{ + metadata: %{ + features: features(), + federation: federation() + }, + vapid_public_key: Keyword.get(Pleroma.Web.Push.vapid_config(), :public_key) + } } end + + def features do + [ + "pleroma_api", + "mastodon_api", + "mastodon_api_streaming", + "polls", + "pleroma_explicit_addressing", + "shareable_emoji_packs", + "multifetch", + "pleroma:api/v1/notifications:include_types_filter", + if Config.get([:media_proxy, :enabled]) do + "media_proxy" + end, + if Config.get([:gopher, :enabled]) do + "gopher" + end, + if Config.get([:chat, :enabled]) do + "chat" + end, + if Config.get([:instance, :allow_relay]) do + "relay" + end, + if Config.get([:instance, :safe_dm_mentions]) do + "safe_dm_mentions" + end, + "pleroma_emoji_reactions" + ] + |> Enum.filter(& &1) + end + + def federation do + quarantined = Config.get([:instance, :quarantined_instances], []) + + if Config.get([:instance, :mrf_transparency]) do + {:ok, data} = MRF.describe() + + data + |> Map.merge(%{quarantined_instances: quarantined}) + else + %{} + end + |> Map.put(:enabled, Config.get([:instance, :federating])) + end end diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex index f9a5ddcc0..721b599d4 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex @@ -9,8 +9,8 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do alias Pleroma.Stats alias Pleroma.User alias Pleroma.Web - alias Pleroma.Web.ActivityPub.MRF alias Pleroma.Web.Federator.Publisher + alias Pleroma.Web.MastodonAPI.InstanceView def schemas(conn, _params) do response = %{ @@ -34,51 +34,12 @@ def schemas(conn, _params) do def raw_nodeinfo do stats = Stats.get_stats() - quarantined = Config.get([:instance, :quarantined_instances], []) - staff_accounts = User.all_superusers() |> Enum.map(fn u -> u.ap_id end) - federation_response = - if Config.get([:instance, :mrf_transparency]) do - {:ok, data} = MRF.describe() - - data - |> Map.merge(%{quarantined_instances: quarantined}) - else - %{} - end - |> Map.put(:enabled, Config.get([:instance, :federating])) - - features = - [ - "pleroma_api", - "mastodon_api", - "mastodon_api_streaming", - "polls", - "pleroma_explicit_addressing", - "shareable_emoji_packs", - "multifetch", - "pleroma:api/v1/notifications:include_types_filter", - if Config.get([:media_proxy, :enabled]) do - "media_proxy" - end, - if Config.get([:gopher, :enabled]) do - "gopher" - end, - if Config.get([:chat, :enabled]) do - "chat" - end, - if Config.get([:instance, :allow_relay]) do - "relay" - end, - if Config.get([:instance, :safe_dm_mentions]) do - "safe_dm_mentions" - end, - "pleroma_emoji_reactions" - ] - |> Enum.filter(& &1) + features = InstanceView.features() + federation = InstanceView.federation() %{ version: "2.0", @@ -106,7 +67,7 @@ def raw_nodeinfo do enabled: false }, staffAccounts: staff_accounts, - federation: federation_response, + federation: federation, pollLimits: Config.get([:instance, :poll_limits]), postFormats: Config.get([:instance, :allowed_post_formats]), uploadLimits: %{ diff --git a/test/web/mastodon_api/controllers/instance_controller_test.exs b/test/web/mastodon_api/controllers/instance_controller_test.exs index 2737dcaba..2c7fd9fd0 100644 --- a/test/web/mastodon_api/controllers/instance_controller_test.exs +++ b/test/web/mastodon_api/controllers/instance_controller_test.exs @@ -34,6 +34,10 @@ test "get instance information", %{conn: conn} do "banner_upload_limit" => _ } = result + assert result["pleroma"]["metadata"]["features"] + assert result["pleroma"]["metadata"]["federation"] + assert result["pleroma"]["vapid_public_key"] + assert email == from_config_email end From 4cadaf7e96bed51545d82deb86b5554cd009020e Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 27 Apr 2020 14:33:21 +0200 Subject: [PATCH 340/581] Docs: Add `/api/v1/instance` information --- docs/API/differences_in_mastoapi_responses.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index 41ceda26b..d0a776ebf 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -191,3 +191,17 @@ Has theses additional parameters (which are the same as in Pleroma-API): - `captcha_solution`: optional, contains provider-specific captcha solution, - `captcha_token`: optional, contains provider-specific captcha token - `token`: invite token required when the registrations aren't public. + +## Instance + +`GET /api/v1/instance` has additional fields + +- `max_toot_chars`: The maximum characters per post +- `poll_limits`: The limits of polls +- `upload_limit`: The maximum upload file size +- `avatar_upload_limit`: The same for avatars +- `background_upload_limit`: The same for backgrounds +- `banner_upload_limit`: The same for banners +- `pleroma.metadata.features`: A list of supported features +- `pleroma.metadata.federation`: The federation restrictions of this instance +- `vapid_public_key`: The public key needed for push messages From 5a3a5abc0c3315cba1ed3694e8a2876da8a5d294 Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 27 Apr 2020 14:35:12 +0200 Subject: [PATCH 341/581] Changelog: Add info about `/api/v1/instance` changes --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ccc6a5bd4..b98d4fc63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - **Breaking:** removed `with_move` parameter from notifications timeline. ### Added +- Instance: Extend `/api/v1/instance` with Pleroma-specific information. - NodeInfo: `pleroma:api/v1/notifications:include_types_filter` to the `features` list. - NodeInfo: `pleroma_emoji_reactions` to the `features` list. - Configuration: `:restrict_unauthenticated` setting, restrict access for unauthenticated users to timelines (public and federate), user profiles and statuses. @@ -17,6 +18,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Added `:reject_deletes` group to SimplePolicy
API Changes +- Mastodon API: Extended `/api/v1/instance`. - Mastodon API: Support for `include_types` in `/api/v1/notifications`. - Mastodon API: Added `/api/v1/notifications/:id/dismiss` endpoint. - Mastodon API: Add support for filtering replies in public and home timelines From a626cb682cc8fd6cad91484db064ed22646960af Mon Sep 17 00:00:00 2001 From: fence Date: Mon, 27 Apr 2020 17:55:33 +0200 Subject: [PATCH 342/581] secure mongoose auth endpoint --- .../web/mongooseim/mongoose_im_controller.ex | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/lib/pleroma/web/mongooseim/mongoose_im_controller.ex b/lib/pleroma/web/mongooseim/mongoose_im_controller.ex index 04d823b36..744cf5227 100644 --- a/lib/pleroma/web/mongooseim/mongoose_im_controller.ex +++ b/lib/pleroma/web/mongooseim/mongoose_im_controller.ex @@ -26,21 +26,36 @@ def user_exists(conn, %{"user" => username}) do end def check_password(conn, %{"user" => username, "pass" => password}) do - with %User{password_hash: password_hash} <- - Repo.get_by(User, nickname: username, local: true), - true <- Pbkdf2.checkpw(password, password_hash) do - conn - |> json(true) - else - false -> - conn - |> put_status(:forbidden) - |> json(false) + user = Repo.get_by(User, nickname: username, local: true) - _ -> + case User.account_status(user) do + :deactivated -> conn |> put_status(:not_found) |> json(false) + + :confirmation_pending -> + conn + |> put_status(:not_found) + |> json(false) + + _ -> + with %User{password_hash: password_hash} <- + user, + true <- Pbkdf2.checkpw(password, password_hash) do + conn + |> json(true) + else + false -> + conn + |> put_status(:forbidden) + |> json(false) + + _ -> + conn + |> put_status(:not_found) + |> json(false) + end end end end From 5c7cc109172c84b991fad7eebbdd51e75f0c5382 Mon Sep 17 00:00:00 2001 From: fence Date: Mon, 27 Apr 2020 18:31:00 +0200 Subject: [PATCH 343/581] add tests for deactivated users for mongoose auth --- lib/pleroma/web/mongooseim/mongoose_im_controller.ex | 7 ++++++- test/web/mongooseim/mongoose_im_controller_test.exs | 9 +++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/mongooseim/mongoose_im_controller.ex b/lib/pleroma/web/mongooseim/mongoose_im_controller.ex index 744cf5227..c15b4bfb8 100644 --- a/lib/pleroma/web/mongooseim/mongoose_im_controller.ex +++ b/lib/pleroma/web/mongooseim/mongoose_im_controller.ex @@ -27,8 +27,13 @@ def user_exists(conn, %{"user" => username}) do def check_password(conn, %{"user" => username, "pass" => password}) do user = Repo.get_by(User, nickname: username, local: true) + + state = case user do + nil -> nil + _ -> User.account_status(user) + end - case User.account_status(user) do + case state do :deactivated -> conn |> put_status(:not_found) diff --git a/test/web/mongooseim/mongoose_im_controller_test.exs b/test/web/mongooseim/mongoose_im_controller_test.exs index 291ae54fc..5987111e5 100644 --- a/test/web/mongooseim/mongoose_im_controller_test.exs +++ b/test/web/mongooseim/mongoose_im_controller_test.exs @@ -34,6 +34,7 @@ test "/user_exists", %{conn: conn} do test "/check_password", %{conn: conn} do user = insert(:user, password_hash: Comeonin.Pbkdf2.hashpwsalt("cool")) + _deactivated_user = insert(:user, nickname: "konata", local: false, deactivated: true) res = conn @@ -49,6 +50,14 @@ test "/check_password", %{conn: conn} do assert res == false + res = + conn + |> get(mongoose_im_path(conn, :check_password), user: "konata", pass: "1337") + |> json_response(404) + + assert res == false + + res = conn |> get(mongoose_im_path(conn, :check_password), user: "nobody", pass: "cool") From 2efc00b3cf5413ae7f8e8411ee1372343ee2618a Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Mon, 27 Apr 2020 20:46:52 +0400 Subject: [PATCH 344/581] Use `json_response_and_validate_schema/2` in tests to validate OpenAPI schema --- .../api_spec/operations/account_operation.ex | 27 +- lib/pleroma/web/api_spec/schemas/account.ex | 2 +- lib/pleroma/web/controller_helper.ex | 5 +- .../controllers/account_controller.ex | 4 +- test/support/conn_case.ex | 21 +- .../update_credentials_test.exs | 60 +- .../controllers/account_controller_test.exs | 569 ++++++++---------- 7 files changed, 330 insertions(+), 358 deletions(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index fcf030037..bf8d21059 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -7,6 +7,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do alias OpenApiSpex.Reference alias OpenApiSpex.Schema alias Pleroma.Web.ApiSpec.Schemas.Account + alias Pleroma.Web.ApiSpec.Schemas.ApiError alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse alias Pleroma.Web.ApiSpec.Schemas.AccountFollowsRequest @@ -38,7 +39,10 @@ def create_operation do operationId: "AccountController.create", requestBody: request_body("Parameters", AccountCreateRequest, required: true), responses: %{ - 200 => Operation.response("Account", "application/json", AccountCreateResponse) + 200 => Operation.response("Account", "application/json", AccountCreateResponse), + 400 => Operation.response("Error", "application/json", ApiError), + 403 => Operation.response("Error", "application/json", ApiError), + 429 => Operation.response("Error", "application/json", ApiError) } } end @@ -65,7 +69,8 @@ def update_credentials_operation do security: [%{"oAuth" => ["write:accounts"]}], requestBody: request_body("Parameters", AccountUpdateCredentialsRequest, required: true), responses: %{ - 200 => Operation.response("Account", "application/json", Account) + 200 => Operation.response("Account", "application/json", Account), + 403 => Operation.response("Error", "application/json", ApiError) } } end @@ -102,7 +107,8 @@ def show_operation do description: "View information about a profile.", parameters: [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}], responses: %{ - 200 => Operation.response("Account", "application/json", Account) + 200 => Operation.response("Account", "application/json", Account), + 404 => Operation.response("Error", "application/json", ApiError) } } end @@ -140,7 +146,8 @@ def statuses_operation do ) ] ++ pagination_params(), responses: %{ - 200 => Operation.response("Statuses", "application/json", StatusesResponse) + 200 => Operation.response("Statuses", "application/json", StatusesResponse), + 404 => Operation.response("Error", "application/json", ApiError) } } end @@ -204,7 +211,9 @@ def follow_operation do ) ], responses: %{ - 200 => Operation.response("Relationship", "application/json", AccountRelationship) + 200 => Operation.response("Relationship", "application/json", AccountRelationship), + 400 => Operation.response("Error", "application/json", ApiError), + 404 => Operation.response("Error", "application/json", ApiError) } } end @@ -218,7 +227,9 @@ def unfollow_operation do description: "Unfollow the given account", parameters: [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}], responses: %{ - 200 => Operation.response("Relationship", "application/json", AccountRelationship) + 200 => Operation.response("Relationship", "application/json", AccountRelationship), + 400 => Operation.response("Error", "application/json", ApiError), + 404 => Operation.response("Error", "application/json", ApiError) } } end @@ -298,7 +309,9 @@ def follows_operation do security: [%{"oAuth" => ["follow", "write:follows"]}], requestBody: request_body("Parameters", AccountFollowsRequest, required: true), responses: %{ - 200 => Operation.response("Account", "application/json", AccountRelationship) + 200 => Operation.response("Account", "application/json", AccountRelationship), + 400 => Operation.response("Error", "application/json", ApiError), + 404 => Operation.response("Error", "application/json", ApiError) } } end diff --git a/lib/pleroma/web/api_spec/schemas/account.ex b/lib/pleroma/web/api_spec/schemas/account.ex index f57015254..d128feb30 100644 --- a/lib/pleroma/web/api_spec/schemas/account.ex +++ b/lib/pleroma/web/api_spec/schemas/account.ex @@ -41,7 +41,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do type: :object, properties: %{ allow_following_move: %Schema{type: :boolean}, - background_image: %Schema{type: :boolean, nullable: true}, + background_image: %Schema{type: :string, nullable: true}, chat_token: %Schema{type: :string}, confirmation_pending: %Schema{type: :boolean}, hide_favorites: %Schema{type: :boolean}, diff --git a/lib/pleroma/web/controller_helper.ex b/lib/pleroma/web/controller_helper.ex index 4780081b2..eb97ae975 100644 --- a/lib/pleroma/web/controller_helper.ex +++ b/lib/pleroma/web/controller_helper.ex @@ -82,8 +82,9 @@ def add_link_headers(conn, activities, extra_params) do end end - def assign_account_by_id(%{params: %{"id" => id}} = conn, _) do - case Pleroma.User.get_cached_by_id(id) do + def assign_account_by_id(conn, _) do + # TODO: use `conn.params[:id]` only after moving to OpenAPI + case Pleroma.User.get_cached_by_id(conn.params[:id] || conn.params["id"]) do %Pleroma.User{} = account -> assign(conn, :account, account) nil -> Pleroma.Web.MastodonAPI.FallbackController.call(conn, {:error, :not_found}) |> halt() end diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 93df79645..b1513001b 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -26,6 +26,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do alias Pleroma.Web.OAuth.Token alias Pleroma.Web.TwitterAPI.TwitterAPI + plug(OpenApiSpex.Plug.CastAndValidate, render_error: Pleroma.Web.ApiSpec.RenderError) + plug(:skip_plug, OAuthScopesPlug when action == :identity_proofs) plug( @@ -83,8 +85,6 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do plug(RateLimiter, [name: :app_account_creation] when action == :create) plug(:assign_account_by_id when action in @needs_account) - plug(OpenApiSpex.Plug.CastAndValidate, render_error: Pleroma.Web.ApiSpec.RenderError) - action_fallback(Pleroma.Web.MastodonAPI.FallbackController) defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.AccountOperation diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex index 8099461cc..fa30a0c41 100644 --- a/test/support/conn_case.ex +++ b/test/support/conn_case.ex @@ -56,7 +56,14 @@ defp request_content_type(%{conn: conn}) do [conn: conn] end - defp json_response_and_validate_schema(conn, status \\ nil) do + defp json_response_and_validate_schema( + %{ + private: %{ + open_api_spex: %{operation_id: op_id, operation_lookup: lookup, spec: spec} + } + } = conn, + status + ) do content_type = conn |> Plug.Conn.get_resp_header("content-type") @@ -64,10 +71,12 @@ defp json_response_and_validate_schema(conn, status \\ nil) do |> String.split(";") |> List.first() - status = status || conn.status + status = Plug.Conn.Status.code(status) - %{private: %{open_api_spex: %{operation_id: op_id, operation_lookup: lookup, spec: spec}}} = - conn + unless lookup[op_id].responses[status] do + err = "Response schema not found for #{conn.status} #{conn.method} #{conn.request_path}" + flunk(err) + end schema = lookup[op_id].responses[status].content[content_type].schema json = json_response(conn, status) @@ -92,6 +101,10 @@ defp json_response_and_validate_schema(conn, status \\ nil) do end end + defp json_response_and_validate_schema(conn, _status) do + flunk("Response schema not found for #{conn.method} #{conn.request_path} #{conn.status}") + end + defp ensure_federating_or_authenticated(conn, url, user) do initial_setting = Config.get([:instance, :federating]) on_exit(fn -> Config.put([:instance, :federating], initial_setting) end) 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 a3356c12f..fdb6d4c5d 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 @@ -26,7 +26,7 @@ test "sets user settings in a generic way", %{conn: conn} do } }) - assert user_data = json_response(res_conn, 200) + assert user_data = json_response_and_validate_schema(res_conn, 200) assert user_data["pleroma"]["settings_store"] == %{"pleroma_fe" => %{"theme" => "bla"}} user = Repo.get(User, user_data["id"]) @@ -42,7 +42,7 @@ test "sets user settings in a generic way", %{conn: conn} do } }) - assert user_data = json_response(res_conn, 200) + assert user_data = json_response_and_validate_schema(res_conn, 200) assert user_data["pleroma"]["settings_store"] == %{ @@ -63,7 +63,7 @@ test "sets user settings in a generic way", %{conn: conn} do } }) - assert user_data = json_response(res_conn, 200) + assert user_data = json_response_and_validate_schema(res_conn, 200) assert user_data["pleroma"]["settings_store"] == %{ @@ -80,7 +80,7 @@ test "updates the user's bio", %{conn: conn} do "note" => "I drink #cofe with @#{user2.nickname}\n\nsuya.." }) - assert user_data = json_response(conn, 200) + assert user_data = json_response_and_validate_schema(conn, 200) assert user_data["note"] == ~s(I drink #cofe with %{"pleroma" => %{"discoverable" => true}}} = conn |> patch("/api/v1/accounts/update_credentials", %{discoverable: "true"}) - |> json_response(:ok) + |> json_response_and_validate_schema(:ok) assert %{"source" => %{"pleroma" => %{"discoverable" => false}}} = conn |> patch("/api/v1/accounts/update_credentials", %{discoverable: "false"}) - |> json_response(:ok) + |> json_response_and_validate_schema(:ok) end test "updates the user's hide_followers_count and hide_follows_count", %{conn: conn} do @@ -138,7 +138,7 @@ test "updates the user's hide_followers_count and hide_follows_count", %{conn: c hide_follows_count: "true" }) - assert user_data = json_response(conn, 200) + assert user_data = json_response_and_validate_schema(conn, 200) assert user_data["pleroma"]["hide_followers_count"] == true assert user_data["pleroma"]["hide_follows_count"] == true end @@ -147,7 +147,7 @@ test "updates the user's skip_thread_containment option", %{user: user, conn: co response = conn |> patch("/api/v1/accounts/update_credentials", %{skip_thread_containment: "true"}) - |> json_response(200) + |> json_response_and_validate_schema(200) assert response["pleroma"]["skip_thread_containment"] == true assert refresh_record(user).skip_thread_containment @@ -156,28 +156,28 @@ test "updates the user's skip_thread_containment option", %{user: user, conn: co test "updates the user's hide_follows status", %{conn: conn} do conn = patch(conn, "/api/v1/accounts/update_credentials", %{hide_follows: "true"}) - assert user_data = json_response(conn, 200) + assert user_data = json_response_and_validate_schema(conn, 200) assert user_data["pleroma"]["hide_follows"] == true end test "updates the user's hide_favorites status", %{conn: conn} do conn = patch(conn, "/api/v1/accounts/update_credentials", %{hide_favorites: "true"}) - assert user_data = json_response(conn, 200) + assert user_data = json_response_and_validate_schema(conn, 200) assert user_data["pleroma"]["hide_favorites"] == true end test "updates the user's show_role status", %{conn: conn} do conn = patch(conn, "/api/v1/accounts/update_credentials", %{show_role: "false"}) - assert user_data = json_response(conn, 200) + assert user_data = json_response_and_validate_schema(conn, 200) assert user_data["source"]["pleroma"]["show_role"] == false end test "updates the user's no_rich_text status", %{conn: conn} do conn = patch(conn, "/api/v1/accounts/update_credentials", %{no_rich_text: "true"}) - assert user_data = json_response(conn, 200) + assert user_data = json_response_and_validate_schema(conn, 200) assert user_data["source"]["pleroma"]["no_rich_text"] == true end @@ -185,7 +185,7 @@ test "updates the user's name", %{conn: conn} do conn = patch(conn, "/api/v1/accounts/update_credentials", %{"display_name" => "markorepairs"}) - assert user_data = json_response(conn, 200) + assert user_data = json_response_and_validate_schema(conn, 200) assert user_data["display_name"] == "markorepairs" end @@ -198,7 +198,7 @@ test "updates the user's avatar", %{user: user, conn: conn} do conn = patch(conn, "/api/v1/accounts/update_credentials", %{"avatar" => new_avatar}) - assert user_response = json_response(conn, 200) + assert user_response = json_response_and_validate_schema(conn, 200) assert user_response["avatar"] != User.avatar_url(user) end @@ -211,7 +211,7 @@ test "updates the user's banner", %{user: user, conn: conn} do conn = patch(conn, "/api/v1/accounts/update_credentials", %{"header" => new_header}) - assert user_response = json_response(conn, 200) + assert user_response = json_response_and_validate_schema(conn, 200) assert user_response["header"] != User.banner_url(user) end @@ -227,7 +227,7 @@ test "updates the user's background", %{conn: conn} do "pleroma_background_image" => new_header }) - assert user_response = json_response(conn, 200) + assert user_response = json_response_and_validate_schema(conn, 200) assert user_response["pleroma"]["background_image"] end @@ -244,9 +244,9 @@ test "requires 'write:accounts' permission" do if token == token1 do assert %{"error" => "Insufficient permissions: write:accounts."} == - json_response(conn, 403) + json_response_and_validate_schema(conn, 403) else - assert json_response(conn, 200) + assert json_response_and_validate_schema(conn, 200) end end end @@ -261,11 +261,11 @@ test "updates profile emojos", %{user: user, conn: conn} do "display_name" => name }) - assert json_response(ret_conn, 200) + assert json_response_and_validate_schema(ret_conn, 200) conn = get(conn, "/api/v1/accounts/#{user.id}") - assert user_data = json_response(conn, 200) + assert user_data = json_response_and_validate_schema(conn, 200) assert user_data["note"] == note assert user_data["display_name"] == name @@ -281,7 +281,7 @@ test "update fields", %{conn: conn} do account_data = conn |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) - |> json_response(200) + |> json_response_and_validate_schema(200) assert account_data["fields"] == [ %{"name" => "foo", "value" => "bar"}, @@ -314,7 +314,7 @@ test "update fields via x-www-form-urlencoded", %{conn: conn} do conn |> put_req_header("content-type", "application/x-www-form-urlencoded") |> patch("/api/v1/accounts/update_credentials", fields) - |> json_response(200) + |> json_response_and_validate_schema(200) assert account["fields"] == [ %{"name" => "foo", "value" => "bar"}, @@ -339,7 +339,7 @@ test "update fields with empty name", %{conn: conn} do account = conn |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) - |> json_response(200) + |> json_response_and_validate_schema(200) assert account["fields"] == [ %{"name" => "foo", "value" => ""} @@ -358,14 +358,14 @@ test "update fields when invalid request", %{conn: conn} do assert %{"error" => "Invalid request"} == conn |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) - |> json_response(403) + |> json_response_and_validate_schema(403) fields = [%{"name" => long_name, "value" => "bar"}] assert %{"error" => "Invalid request"} == conn |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) - |> json_response(403) + |> json_response_and_validate_schema(403) Pleroma.Config.put([:instance, :max_account_fields], 1) @@ -377,7 +377,7 @@ test "update fields when invalid request", %{conn: conn} do assert %{"error" => "Invalid request"} == conn |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) - |> json_response(403) + |> json_response_and_validate_schema(403) end end end diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index d885b5e08..ba70ba66c 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -10,54 +10,46 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.InternalFetchActor - alias Pleroma.Web.ApiSpec alias Pleroma.Web.CommonAPI alias Pleroma.Web.OAuth.Token - import OpenApiSpex.TestAssertions import Pleroma.Factory describe "account fetching" do setup do: clear_config([:instance, :limit_to_local_content]) test "works by id" do - user = insert(:user) + %User{id: user_id} = insert(:user) - conn = - build_conn() - |> get("/api/v1/accounts/#{user.id}") + assert %{"id" => ^user_id} = + build_conn() + |> get("/api/v1/accounts/#{user_id}") + |> json_response_and_validate_schema(200) - assert %{"id" => id} = json_response(conn, 200) - assert id == to_string(user.id) - - conn = - build_conn() - |> get("/api/v1/accounts/-1") - - assert %{"error" => "Can't find user"} = json_response(conn, 404) + assert %{"error" => "Can't find user"} = + build_conn() + |> get("/api/v1/accounts/-1") + |> json_response_and_validate_schema(404) end test "works by nickname" do user = insert(:user) - conn = - build_conn() - |> get("/api/v1/accounts/#{user.nickname}") - - assert %{"id" => id} = json_response(conn, 200) - assert id == user.id + assert %{"id" => user_id} = + build_conn() + |> get("/api/v1/accounts/#{user.nickname}") + |> json_response_and_validate_schema(200) end test "works by nickname for remote users" do Config.put([:instance, :limit_to_local_content], false) + user = insert(:user, nickname: "user@example.com", local: false) - conn = - build_conn() - |> get("/api/v1/accounts/#{user.nickname}") - - assert %{"id" => id} = json_response(conn, 200) - assert id == user.id + assert %{"id" => user_id} = + build_conn() + |> get("/api/v1/accounts/#{user.nickname}") + |> json_response_and_validate_schema(200) end test "respects limit_to_local_content == :all for remote user nicknames" do @@ -65,11 +57,9 @@ test "respects limit_to_local_content == :all for remote user nicknames" do user = insert(:user, nickname: "user@example.com", local: false) - conn = - build_conn() - |> get("/api/v1/accounts/#{user.nickname}") - - assert json_response(conn, 404) + assert build_conn() + |> get("/api/v1/accounts/#{user.nickname}") + |> json_response_and_validate_schema(404) end test "respects limit_to_local_content == :unauthenticated for remote user nicknames" do @@ -82,7 +72,7 @@ test "respects limit_to_local_content == :unauthenticated for remote user nickna build_conn() |> get("/api/v1/accounts/#{user.nickname}") - assert json_response(conn, 404) + assert json_response_and_validate_schema(conn, 404) conn = build_conn() @@ -90,7 +80,7 @@ test "respects limit_to_local_content == :unauthenticated for remote user nickna |> assign(:token, insert(:oauth_token, user: reading_user, scopes: ["read:accounts"])) |> get("/api/v1/accounts/#{user.nickname}") - assert %{"id" => id} = json_response(conn, 200) + assert %{"id" => id} = json_response_and_validate_schema(conn, 200) assert id == user.id end @@ -101,21 +91,21 @@ test "accounts fetches correct account for nicknames beginning with numbers", %{ user_one = insert(:user, %{id: 1212}) user_two = insert(:user, %{nickname: "#{user_one.id}garbage"}) - resp_one = + acc_one = conn |> get("/api/v1/accounts/#{user_one.id}") + |> json_response_and_validate_schema(:ok) - resp_two = + acc_two = conn |> get("/api/v1/accounts/#{user_two.nickname}") + |> json_response_and_validate_schema(:ok) - resp_three = + acc_three = conn |> get("/api/v1/accounts/#{user_two.id}") + |> json_response_and_validate_schema(:ok) - acc_one = json_response(resp_one, 200) - acc_two = json_response(resp_two, 200) - acc_three = json_response(resp_three, 200) refute acc_one == acc_two assert acc_two == acc_three end @@ -123,23 +113,19 @@ test "accounts fetches correct account for nicknames beginning with numbers", %{ test "returns 404 when user is invisible", %{conn: conn} do user = insert(:user, %{invisible: true}) - resp = - conn - |> get("/api/v1/accounts/#{user.nickname}") - |> json_response(404) - - assert %{"error" => "Can't find user"} = resp + assert %{"error" => "Can't find user"} = + conn + |> get("/api/v1/accounts/#{user.nickname}") + |> json_response_and_validate_schema(404) end test "returns 404 for internal.fetch actor", %{conn: conn} do %User{nickname: "internal.fetch"} = InternalFetchActor.get_actor() - resp = - conn - |> get("/api/v1/accounts/internal.fetch") - |> json_response(404) - - assert %{"error" => "Can't find user"} = resp + assert %{"error" => "Can't find user"} = + conn + |> get("/api/v1/accounts/internal.fetch") + |> json_response_and_validate_schema(404) end end @@ -157,27 +143,25 @@ defp local_and_remote_users do setup do: clear_config([:restrict_unauthenticated, :profiles, :remote], true) test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do - res_conn = get(conn, "/api/v1/accounts/#{local.id}") + assert %{"error" => "Can't find user"} == + conn + |> get("/api/v1/accounts/#{local.id}") + |> json_response_and_validate_schema(:not_found) - assert json_response(res_conn, :not_found) == %{ - "error" => "Can't find user" - } - - res_conn = get(conn, "/api/v1/accounts/#{remote.id}") - - assert json_response(res_conn, :not_found) == %{ - "error" => "Can't find user" - } + assert %{"error" => "Can't find user"} == + conn + |> get("/api/v1/accounts/#{remote.id}") + |> json_response_and_validate_schema(:not_found) end test "if user is authenticated", %{local: local, remote: remote} do %{conn: conn} = oauth_access(["read"]) res_conn = get(conn, "/api/v1/accounts/#{local.id}") - assert %{"id" => _} = json_response(res_conn, 200) + assert %{"id" => _} = json_response_and_validate_schema(res_conn, 200) res_conn = get(conn, "/api/v1/accounts/#{remote.id}") - assert %{"id" => _} = json_response(res_conn, 200) + assert %{"id" => _} = json_response_and_validate_schema(res_conn, 200) end end @@ -189,22 +173,22 @@ test "if user is authenticated", %{local: local, remote: remote} do test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do res_conn = get(conn, "/api/v1/accounts/#{local.id}") - assert json_response(res_conn, :not_found) == %{ + assert json_response_and_validate_schema(res_conn, :not_found) == %{ "error" => "Can't find user" } res_conn = get(conn, "/api/v1/accounts/#{remote.id}") - assert %{"id" => _} = json_response(res_conn, 200) + assert %{"id" => _} = json_response_and_validate_schema(res_conn, 200) end test "if user is authenticated", %{local: local, remote: remote} do %{conn: conn} = oauth_access(["read"]) res_conn = get(conn, "/api/v1/accounts/#{local.id}") - assert %{"id" => _} = json_response(res_conn, 200) + assert %{"id" => _} = json_response_and_validate_schema(res_conn, 200) res_conn = get(conn, "/api/v1/accounts/#{remote.id}") - assert %{"id" => _} = json_response(res_conn, 200) + assert %{"id" => _} = json_response_and_validate_schema(res_conn, 200) end end @@ -215,11 +199,11 @@ test "if user is authenticated", %{local: local, remote: remote} do test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do res_conn = get(conn, "/api/v1/accounts/#{local.id}") - assert %{"id" => _} = json_response(res_conn, 200) + assert %{"id" => _} = json_response_and_validate_schema(res_conn, 200) res_conn = get(conn, "/api/v1/accounts/#{remote.id}") - assert json_response(res_conn, :not_found) == %{ + assert json_response_and_validate_schema(res_conn, :not_found) == %{ "error" => "Can't find user" } end @@ -228,10 +212,10 @@ test "if user is authenticated", %{local: local, remote: remote} do %{conn: conn} = oauth_access(["read"]) res_conn = get(conn, "/api/v1/accounts/#{local.id}") - assert %{"id" => _} = json_response(res_conn, 200) + assert %{"id" => _} = json_response_and_validate_schema(res_conn, 200) res_conn = get(conn, "/api/v1/accounts/#{remote.id}") - assert %{"id" => _} = json_response(res_conn, 200) + assert %{"id" => _} = json_response_and_validate_schema(res_conn, 200) end end @@ -247,28 +231,37 @@ test "respects blocks", %{user: user_one, conn: conn} do {:ok, activity} = CommonAPI.post(user_two, %{"status" => "User one sux0rz"}) {:ok, repeat, _} = CommonAPI.repeat(activity.id, user_three) - assert resp = get(conn, "/api/v1/accounts/#{user_two.id}/statuses") |> json_response(200) + assert resp = + conn + |> get("/api/v1/accounts/#{user_two.id}/statuses") + |> json_response_and_validate_schema(200) + assert [%{"id" => id}] = resp - assert_schema(resp, "StatusesResponse", ApiSpec.spec()) assert id == activity.id # Even a blocked user will deliver the full user timeline, there would be # no point in looking at a blocked users timeline otherwise - assert resp = get(conn, "/api/v1/accounts/#{user_two.id}/statuses") |> json_response(200) + assert resp = + conn + |> get("/api/v1/accounts/#{user_two.id}/statuses") + |> json_response_and_validate_schema(200) + assert [%{"id" => id}] = resp assert id == activity.id - assert_schema(resp, "StatusesResponse", ApiSpec.spec()) # Third user's timeline includes the repeat when viewed by unauthenticated user - resp = get(build_conn(), "/api/v1/accounts/#{user_three.id}/statuses") |> json_response(200) + resp = + build_conn() + |> get("/api/v1/accounts/#{user_three.id}/statuses") + |> json_response_and_validate_schema(200) + assert [%{"id" => id}] = resp assert id == repeat.id - assert_schema(resp, "StatusesResponse", ApiSpec.spec()) # When viewing a third user's timeline, the blocked users' statuses will NOT be shown resp = get(conn, "/api/v1/accounts/#{user_three.id}/statuses") - assert [] = json_response(resp, 200) + assert [] == json_response_and_validate_schema(resp, 200) end test "gets users statuses", %{conn: conn} do @@ -289,34 +282,36 @@ test "gets users statuses", %{conn: conn} do {:ok, private_activity} = CommonAPI.post(user_one, %{"status" => "private", "visibility" => "private"}) - resp = get(conn, "/api/v1/accounts/#{user_one.id}/statuses") |> json_response(200) + # TODO!!! + resp = + conn + |> get("/api/v1/accounts/#{user_one.id}/statuses") + |> json_response_and_validate_schema(200) + assert [%{"id" => id}] = resp assert id == to_string(activity.id) - assert_schema(resp, "StatusesResponse", ApiSpec.spec()) resp = conn |> assign(:user, user_two) |> assign(:token, insert(:oauth_token, user: user_two, scopes: ["read:statuses"])) |> get("/api/v1/accounts/#{user_one.id}/statuses") - |> json_response(200) + |> json_response_and_validate_schema(200) assert [%{"id" => id_one}, %{"id" => id_two}] = resp assert id_one == to_string(direct_activity.id) assert id_two == to_string(activity.id) - assert_schema(resp, "StatusesResponse", ApiSpec.spec()) resp = conn |> assign(:user, user_three) |> assign(:token, insert(:oauth_token, user: user_three, scopes: ["read:statuses"])) |> get("/api/v1/accounts/#{user_one.id}/statuses") - |> json_response(200) + |> json_response_and_validate_schema(200) assert [%{"id" => id_one}, %{"id" => id_two}] = resp assert id_one == to_string(private_activity.id) assert id_two == to_string(activity.id) - assert_schema(resp, "StatusesResponse", ApiSpec.spec()) end test "unimplemented pinned statuses feature", %{conn: conn} do @@ -325,7 +320,7 @@ test "unimplemented pinned statuses feature", %{conn: conn} do conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?pinned=true") - assert json_response(conn, 200) == [] + assert json_response_and_validate_schema(conn, 200) == [] end test "gets an users media", %{conn: conn} do @@ -340,61 +335,48 @@ test "gets an users media", %{conn: conn} do {:ok, %{id: media_id}} = ActivityPub.upload(file, actor: user.ap_id) - {:ok, image_post} = CommonAPI.post(user, %{"status" => "cofe", "media_ids" => [media_id]}) + {:ok, %{id: image_post_id}} = + CommonAPI.post(user, %{"status" => "cofe", "media_ids" => [media_id]}) conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?only_media=true") - assert [%{"id" => id}] = json_response(conn, 200) - assert id == to_string(image_post.id) - assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) + assert [%{"id" => ^image_post_id}] = json_response_and_validate_schema(conn, 200) conn = get(build_conn(), "/api/v1/accounts/#{user.id}/statuses?only_media=1") - assert [%{"id" => id}] = json_response(conn, 200) - assert id == to_string(image_post.id) - assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) + assert [%{"id" => ^image_post_id}] = json_response_and_validate_schema(conn, 200) end test "gets a user's statuses without reblogs", %{user: user, conn: conn} do - {:ok, post} = CommonAPI.post(user, %{"status" => "HI!!!"}) - {:ok, _, _} = CommonAPI.repeat(post.id, user) + {:ok, %{id: post_id}} = CommonAPI.post(user, %{"status" => "HI!!!"}) + {:ok, _, _} = CommonAPI.repeat(post_id, user) conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?exclude_reblogs=true") - - assert [%{"id" => id}] = json_response(conn, 200) - assert id == to_string(post.id) - assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) + assert [%{"id" => ^post_id}] = json_response_and_validate_schema(conn, 200) conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?exclude_reblogs=1") - - assert [%{"id" => id}] = json_response(conn, 200) - assert id == to_string(post.id) - assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) + assert [%{"id" => ^post_id}] = json_response_and_validate_schema(conn, 200) end test "filters user's statuses by a hashtag", %{user: user, conn: conn} do - {:ok, post} = CommonAPI.post(user, %{"status" => "#hashtag"}) + {:ok, %{id: post_id}} = CommonAPI.post(user, %{"status" => "#hashtag"}) {:ok, _post} = CommonAPI.post(user, %{"status" => "hashtag"}) conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?tagged=hashtag") - - assert [%{"id" => id}] = json_response(conn, 200) - assert id == to_string(post.id) - assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) + assert [%{"id" => ^post_id}] = json_response_and_validate_schema(conn, 200) end test "the user views their own timelines and excludes direct messages", %{ user: user, conn: conn } do - {:ok, public_activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "public"}) + {:ok, %{id: public_activity_id}} = + CommonAPI.post(user, %{"status" => ".", "visibility" => "public"}) + {:ok, _direct_activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "direct"}) conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?exclude_visibilities[]=direct") - - assert [%{"id" => id}] = json_response(conn, 200) - assert id == to_string(public_activity.id) - assert_schema(json_response(conn, 200), "StatusesResponse", ApiSpec.spec()) + assert [%{"id" => ^public_activity_id}] = json_response_and_validate_schema(conn, 200) end end @@ -414,29 +396,25 @@ defp local_and_remote_activities(%{local: local, remote: remote}) do setup do: clear_config([:restrict_unauthenticated, :profiles, :remote], true) test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do - res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses") + assert %{"error" => "Can't find user"} == + conn + |> get("/api/v1/accounts/#{local.id}/statuses") + |> json_response_and_validate_schema(:not_found) - assert json_response(res_conn, :not_found) == %{ - "error" => "Can't find user" - } - - res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") - - assert json_response(res_conn, :not_found) == %{ - "error" => "Can't find user" - } + assert %{"error" => "Can't find user"} == + conn + |> get("/api/v1/accounts/#{remote.id}/statuses") + |> json_response_and_validate_schema(:not_found) end test "if user is authenticated", %{local: local, remote: remote} do %{conn: conn} = oauth_access(["read"]) res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses") - assert length(json_response(res_conn, 200)) == 1 - assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) + assert length(json_response_and_validate_schema(res_conn, 200)) == 1 res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") - assert length(json_response(res_conn, 200)) == 1 - assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) + assert length(json_response_and_validate_schema(res_conn, 200)) == 1 end end @@ -447,27 +425,23 @@ test "if user is authenticated", %{local: local, remote: remote} do setup do: clear_config([:restrict_unauthenticated, :profiles, :local], true) test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do - res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses") - - assert json_response(res_conn, :not_found) == %{ - "error" => "Can't find user" - } + assert %{"error" => "Can't find user"} == + conn + |> get("/api/v1/accounts/#{local.id}/statuses") + |> json_response_and_validate_schema(:not_found) res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") - assert length(json_response(res_conn, 200)) == 1 - assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) + assert length(json_response_and_validate_schema(res_conn, 200)) == 1 end test "if user is authenticated", %{local: local, remote: remote} do %{conn: conn} = oauth_access(["read"]) res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses") - assert length(json_response(res_conn, 200)) == 1 - assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) + assert length(json_response_and_validate_schema(res_conn, 200)) == 1 res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") - assert length(json_response(res_conn, 200)) == 1 - assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) + assert length(json_response_and_validate_schema(res_conn, 200)) == 1 end end @@ -479,26 +453,22 @@ test "if user is authenticated", %{local: local, remote: remote} do test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses") - assert length(json_response(res_conn, 200)) == 1 - assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) + assert length(json_response_and_validate_schema(res_conn, 200)) == 1 - res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") - - assert json_response(res_conn, :not_found) == %{ - "error" => "Can't find user" - } + assert %{"error" => "Can't find user"} == + conn + |> get("/api/v1/accounts/#{remote.id}/statuses") + |> json_response_and_validate_schema(:not_found) end test "if user is authenticated", %{local: local, remote: remote} do %{conn: conn} = oauth_access(["read"]) res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses") - assert length(json_response(res_conn, 200)) == 1 - assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) + assert length(json_response_and_validate_schema(res_conn, 200)) == 1 res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses") - assert length(json_response(res_conn, 200)) == 1 - assert_schema(json_response(res_conn, 200), "StatusesResponse", ApiSpec.spec()) + assert length(json_response_and_validate_schema(res_conn, 200)) == 1 end end @@ -507,13 +477,11 @@ test "if user is authenticated", %{local: local, remote: remote} do test "getting followers", %{user: user, conn: conn} do other_user = insert(:user) - {:ok, user} = User.follow(user, other_user) + {:ok, %{id: user_id}} = User.follow(user, other_user) conn = get(conn, "/api/v1/accounts/#{other_user.id}/followers") - assert [%{"id" => id}] = json_response(conn, 200) - assert id == to_string(user.id) - assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec()) + assert [%{"id" => ^user_id}] = json_response_and_validate_schema(conn, 200) end test "getting followers, hide_followers", %{user: user, conn: conn} do @@ -522,7 +490,7 @@ test "getting followers, hide_followers", %{user: user, conn: conn} do conn = get(conn, "/api/v1/accounts/#{other_user.id}/followers") - assert [] == json_response(conn, 200) + assert [] == json_response_and_validate_schema(conn, 200) end test "getting followers, hide_followers, same user requesting" do @@ -536,40 +504,31 @@ test "getting followers, hide_followers, same user requesting" do |> assign(:token, insert(:oauth_token, user: other_user, scopes: ["read:accounts"])) |> get("/api/v1/accounts/#{other_user.id}/followers") - refute [] == json_response(conn, 200) - assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec()) + refute [] == json_response_and_validate_schema(conn, 200) end test "getting followers, pagination", %{user: user, conn: conn} do - follower1 = insert(:user) - follower2 = insert(:user) - follower3 = insert(:user) - {:ok, _} = User.follow(follower1, user) - {:ok, _} = User.follow(follower2, user) - {:ok, _} = User.follow(follower3, user) + {:ok, %User{id: follower1_id}} = :user |> insert() |> User.follow(user) + {:ok, %User{id: follower2_id}} = :user |> insert() |> User.follow(user) + {:ok, %User{id: follower3_id}} = :user |> insert() |> User.follow(user) - res_conn = get(conn, "/api/v1/accounts/#{user.id}/followers?since_id=#{follower1.id}") + assert [%{"id" => ^follower3_id}, %{"id" => ^follower2_id}] = + conn + |> get("/api/v1/accounts/#{user.id}/followers?since_id=#{follower1_id}") + |> json_response_and_validate_schema(200) - assert [%{"id" => id3}, %{"id" => id2}] = json_response(res_conn, 200) - assert id3 == follower3.id - assert id2 == follower2.id - assert_schema(json_response(res_conn, 200), "AccountsResponse", ApiSpec.spec()) + assert [%{"id" => ^follower2_id}, %{"id" => ^follower1_id}] = + conn + |> get("/api/v1/accounts/#{user.id}/followers?max_id=#{follower3_id}") + |> json_response_and_validate_schema(200) - res_conn = get(conn, "/api/v1/accounts/#{user.id}/followers?max_id=#{follower3.id}") + res_conn = get(conn, "/api/v1/accounts/#{user.id}/followers?limit=1&max_id=#{follower3_id}") - assert [%{"id" => id2}, %{"id" => id1}] = json_response(res_conn, 200) - assert id2 == follower2.id - assert id1 == follower1.id - - res_conn = get(conn, "/api/v1/accounts/#{user.id}/followers?limit=1&max_id=#{follower3.id}") - - assert [%{"id" => id2}] = json_response(res_conn, 200) - assert id2 == follower2.id + assert [%{"id" => ^follower2_id}] = json_response_and_validate_schema(res_conn, 200) assert [link_header] = get_resp_header(res_conn, "link") - assert link_header =~ ~r/min_id=#{follower2.id}/ - assert link_header =~ ~r/max_id=#{follower2.id}/ - assert_schema(json_response(res_conn, 200), "AccountsResponse", ApiSpec.spec()) + assert link_header =~ ~r/min_id=#{follower2_id}/ + assert link_header =~ ~r/max_id=#{follower2_id}/ end end @@ -582,9 +541,8 @@ test "getting following", %{user: user, conn: conn} do conn = get(conn, "/api/v1/accounts/#{user.id}/following") - assert [%{"id" => id}] = json_response(conn, 200) + assert [%{"id" => id}] = json_response_and_validate_schema(conn, 200) assert id == to_string(other_user.id) - assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec()) end test "getting following, hide_follows, other user requesting" do @@ -598,8 +556,7 @@ test "getting following, hide_follows, other user requesting" do |> assign(:token, insert(:oauth_token, user: other_user, scopes: ["read:accounts"])) |> get("/api/v1/accounts/#{user.id}/following") - assert [] == json_response(conn, 200) - assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec()) + assert [] == json_response_and_validate_schema(conn, 200) end test "getting following, hide_follows, same user requesting" do @@ -613,7 +570,7 @@ test "getting following, hide_follows, same user requesting" do |> assign(:token, insert(:oauth_token, user: user, scopes: ["read:accounts"])) |> get("/api/v1/accounts/#{user.id}/following") - refute [] == json_response(conn, 200) + refute [] == json_response_and_validate_schema(conn, 200) end test "getting following, pagination", %{user: user, conn: conn} do @@ -626,28 +583,25 @@ test "getting following, pagination", %{user: user, conn: conn} do res_conn = get(conn, "/api/v1/accounts/#{user.id}/following?since_id=#{following1.id}") - assert [%{"id" => id3}, %{"id" => id2}] = json_response(res_conn, 200) + assert [%{"id" => id3}, %{"id" => id2}] = json_response_and_validate_schema(res_conn, 200) assert id3 == following3.id assert id2 == following2.id - assert_schema(json_response(res_conn, 200), "AccountsResponse", ApiSpec.spec()) res_conn = get(conn, "/api/v1/accounts/#{user.id}/following?max_id=#{following3.id}") - assert [%{"id" => id2}, %{"id" => id1}] = json_response(res_conn, 200) + assert [%{"id" => id2}, %{"id" => id1}] = json_response_and_validate_schema(res_conn, 200) assert id2 == following2.id assert id1 == following1.id - assert_schema(json_response(res_conn, 200), "AccountsResponse", ApiSpec.spec()) res_conn = get(conn, "/api/v1/accounts/#{user.id}/following?limit=1&max_id=#{following3.id}") - assert [%{"id" => id2}] = json_response(res_conn, 200) + assert [%{"id" => id2}] = json_response_and_validate_schema(res_conn, 200) assert id2 == following2.id assert [link_header] = get_resp_header(res_conn, "link") assert link_header =~ ~r/min_id=#{following2.id}/ assert link_header =~ ~r/max_id=#{following2.id}/ - assert_schema(json_response(res_conn, 200), "AccountsResponse", ApiSpec.spec()) end end @@ -655,40 +609,37 @@ test "getting following, pagination", %{user: user, conn: conn} do setup do: oauth_access(["follow"]) test "following / unfollowing a user", %{conn: conn} do - other_user = insert(:user) + %{id: other_user_id, nickname: other_user_nickname} = insert(:user) - ret_conn = post(conn, "/api/v1/accounts/#{other_user.id}/follow") + assert %{"id" => _id, "following" => true} = + conn + |> post("/api/v1/accounts/#{other_user_id}/follow") + |> json_response_and_validate_schema(200) - assert %{"id" => _id, "following" => true} = json_response(ret_conn, 200) - assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) + assert %{"id" => _id, "following" => false} = + conn + |> post("/api/v1/accounts/#{other_user_id}/unfollow") + |> json_response_and_validate_schema(200) - ret_conn = post(conn, "/api/v1/accounts/#{other_user.id}/unfollow") - - assert %{"id" => _id, "following" => false} = json_response(ret_conn, 200) - assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) - - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/v1/follows", %{"uri" => other_user.nickname}) - - assert %{"id" => id} = json_response(conn, 200) - assert id == to_string(other_user.id) - assert_schema(json_response(conn, 200), "Account", ApiSpec.spec()) + assert %{"id" => ^other_user_id} = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/follows", %{"uri" => other_user_nickname}) + |> json_response_and_validate_schema(200) end test "cancelling follow request", %{conn: conn} do %{id: other_user_id} = insert(:user, %{locked: true}) - resp = conn |> post("/api/v1/accounts/#{other_user_id}/follow") |> json_response(:ok) + assert %{"id" => ^other_user_id, "following" => false, "requested" => true} = + conn + |> post("/api/v1/accounts/#{other_user_id}/follow") + |> json_response_and_validate_schema(:ok) - assert %{"id" => ^other_user_id, "following" => false, "requested" => true} = resp - assert_schema(resp, "AccountRelationship", ApiSpec.spec()) - - resp = conn |> post("/api/v1/accounts/#{other_user_id}/unfollow") |> json_response(:ok) - - assert %{"id" => ^other_user_id, "following" => false, "requested" => false} = resp - assert_schema(resp, "AccountRelationship", ApiSpec.spec()) + assert %{"id" => ^other_user_id, "following" => false, "requested" => false} = + conn + |> post("/api/v1/accounts/#{other_user_id}/unfollow") + |> json_response_and_validate_schema(:ok) end test "following without reblogs" do @@ -698,50 +649,53 @@ test "following without reblogs" do ret_conn = post(conn, "/api/v1/accounts/#{followed.id}/follow?reblogs=false") - assert %{"showing_reblogs" => false} = json_response(ret_conn, 200) - assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) + assert %{"showing_reblogs" => false} = json_response_and_validate_schema(ret_conn, 200) {:ok, activity} = CommonAPI.post(other_user, %{"status" => "hey"}) - {:ok, reblog, _} = CommonAPI.repeat(activity.id, followed) + {:ok, %{id: reblog_id}, _} = CommonAPI.repeat(activity.id, followed) - ret_conn = get(conn, "/api/v1/timelines/home") + assert [] == + conn + |> get("/api/v1/timelines/home") + |> json_response(200) - assert [] == json_response(ret_conn, 200) + assert %{"showing_reblogs" => true} = + conn + |> post("/api/v1/accounts/#{followed.id}/follow?reblogs=true") + |> json_response_and_validate_schema(200) - ret_conn = post(conn, "/api/v1/accounts/#{followed.id}/follow?reblogs=true") - - assert %{"showing_reblogs" => true} = json_response(ret_conn, 200) - assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) - - conn = get(conn, "/api/v1/timelines/home") - - expected_activity_id = reblog.id - assert [%{"id" => ^expected_activity_id}] = json_response(conn, 200) + assert [%{"id" => ^reblog_id}] = + conn + |> get("/api/v1/timelines/home") + |> json_response(200) end test "following / unfollowing errors", %{user: user, conn: conn} do # self follow conn_res = post(conn, "/api/v1/accounts/#{user.id}/follow") - assert %{"error" => "Can not follow yourself"} = json_response(conn_res, 400) + + assert %{"error" => "Can not follow yourself"} = + json_response_and_validate_schema(conn_res, 400) # self unfollow user = User.get_cached_by_id(user.id) conn_res = post(conn, "/api/v1/accounts/#{user.id}/unfollow") - assert %{"error" => "Can not unfollow yourself"} = json_response(conn_res, 400) + + assert %{"error" => "Can not unfollow yourself"} = + json_response_and_validate_schema(conn_res, 400) # self follow via uri user = User.get_cached_by_id(user.id) - conn_res = - conn - |> put_req_header("content-type", "multipart/form-data") - |> post("/api/v1/follows", %{"uri" => user.nickname}) - - assert %{"error" => "Can not follow yourself"} = json_response(conn_res, 400) + assert %{"error" => "Can not follow yourself"} = + conn + |> put_req_header("content-type", "multipart/form-data") + |> post("/api/v1/follows", %{"uri" => user.nickname}) + |> json_response_and_validate_schema(400) # follow non existing user conn_res = post(conn, "/api/v1/accounts/doesntexist/follow") - assert %{"error" => "Record not found"} = json_response(conn_res, 404) + assert %{"error" => "Record not found"} = json_response_and_validate_schema(conn_res, 404) # follow non existing user via uri conn_res = @@ -749,11 +703,11 @@ test "following / unfollowing errors", %{user: user, conn: conn} do |> put_req_header("content-type", "multipart/form-data") |> post("/api/v1/follows", %{"uri" => "doesntexist"}) - assert %{"error" => "Record not found"} = json_response(conn_res, 404) + assert %{"error" => "Record not found"} = json_response_and_validate_schema(conn_res, 404) # unfollow non existing user conn_res = post(conn, "/api/v1/accounts/doesntexist/unfollow") - assert %{"error" => "Record not found"} = json_response(conn_res, 404) + assert %{"error" => "Record not found"} = json_response_and_validate_schema(conn_res, 404) end end @@ -763,21 +717,16 @@ test "following / unfollowing errors", %{user: user, conn: conn} do test "with notifications", %{conn: conn} do other_user = insert(:user) - ret_conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/v1/accounts/#{other_user.id}/mute") - - response = json_response(ret_conn, 200) - - assert %{"id" => _id, "muting" => true, "muting_notifications" => true} = response - assert_schema(response, "AccountRelationship", ApiSpec.spec()) + assert %{"id" => _id, "muting" => true, "muting_notifications" => true} = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/accounts/#{other_user.id}/mute") + |> json_response_and_validate_schema(200) conn = post(conn, "/api/v1/accounts/#{other_user.id}/unmute") - response = json_response(conn, 200) - assert %{"id" => _id, "muting" => false, "muting_notifications" => false} = response - assert_schema(response, "AccountRelationship", ApiSpec.spec()) + assert %{"id" => _id, "muting" => false, "muting_notifications" => false} = + json_response_and_validate_schema(conn, 200) end test "without notifications", %{conn: conn} do @@ -788,16 +737,13 @@ test "without notifications", %{conn: conn} do |> put_req_header("content-type", "multipart/form-data") |> post("/api/v1/accounts/#{other_user.id}/mute", %{"notifications" => "false"}) - response = json_response(ret_conn, 200) - - assert %{"id" => _id, "muting" => true, "muting_notifications" => false} = response - assert_schema(response, "AccountRelationship", ApiSpec.spec()) + assert %{"id" => _id, "muting" => true, "muting_notifications" => false} = + json_response_and_validate_schema(ret_conn, 200) conn = post(conn, "/api/v1/accounts/#{other_user.id}/unmute") - response = json_response(conn, 200) - assert %{"id" => _id, "muting" => false, "muting_notifications" => false} = response - assert_schema(response, "AccountRelationship", ApiSpec.spec()) + assert %{"id" => _id, "muting" => false, "muting_notifications" => false} = + json_response_and_validate_schema(conn, 200) end end @@ -810,17 +756,13 @@ test "without notifications", %{conn: conn} do [conn: conn, user: user, activity: activity] end - test "returns pinned statuses", %{conn: conn, user: user, activity: activity} do - {:ok, _} = CommonAPI.pin(activity.id, user) + test "returns pinned statuses", %{conn: conn, user: user, activity: %{id: activity_id}} do + {:ok, _} = CommonAPI.pin(activity_id, user) - result = - conn - |> get("/api/v1/accounts/#{user.id}/statuses?pinned=true") - |> json_response(200) - - id_str = to_string(activity.id) - - assert [%{"id" => ^id_str, "pinned" => true}] = result + assert [%{"id" => ^activity_id, "pinned" => true}] = + conn + |> get("/api/v1/accounts/#{user.id}/statuses?pinned=true") + |> json_response_and_validate_schema(200) end end @@ -830,13 +772,11 @@ test "blocking / unblocking a user" do ret_conn = post(conn, "/api/v1/accounts/#{other_user.id}/block") - assert %{"id" => _id, "blocking" => true} = json_response(ret_conn, 200) - assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) + assert %{"id" => _id, "blocking" => true} = json_response_and_validate_schema(ret_conn, 200) conn = post(conn, "/api/v1/accounts/#{other_user.id}/unblock") - assert %{"id" => _id, "blocking" => false} = json_response(conn, 200) - assert_schema(json_response(ret_conn, 200), "AccountRelationship", ApiSpec.spec()) + assert %{"id" => _id, "blocking" => false} = json_response_and_validate_schema(conn, 200) end describe "create account by app" do @@ -863,15 +803,15 @@ test "Account registration via Application", %{conn: conn} do scopes: "read, write, follow" }) - %{ - "client_id" => client_id, - "client_secret" => client_secret, - "id" => _, - "name" => "client_name", - "redirect_uri" => "urn:ietf:wg:oauth:2.0:oob", - "vapid_key" => _, - "website" => nil - } = json_response(conn, 200) + assert %{ + "client_id" => client_id, + "client_secret" => client_secret, + "id" => _, + "name" => "client_name", + "redirect_uri" => "urn:ietf:wg:oauth:2.0:oob", + "vapid_key" => _, + "website" => nil + } = json_response_and_validate_schema(conn, 200) conn = post(conn, "/oauth/token", %{ @@ -906,7 +846,7 @@ test "Account registration via Application", %{conn: conn} do "created_at" => _created_at, "scope" => _scope, "token_type" => "Bearer" - } = json_response(conn, 200) + } = json_response_and_validate_schema(conn, 200) token_from_db = Repo.get_by(Token, token: token) assert token_from_db @@ -926,7 +866,9 @@ test "returns error when user already registred", %{conn: conn, valid_params: va |> put_req_header("content-type", "application/json") |> post("/api/v1/accounts", valid_params) - assert json_response(res, 400) == %{"error" => "{\"email\":[\"has already been taken\"]}"} + assert json_response_and_validate_schema(res, 400) == %{ + "error" => "{\"email\":[\"has already been taken\"]}" + } end test "returns bad_request if missing required params", %{ @@ -941,7 +883,7 @@ test "returns bad_request if missing required params", %{ |> put_req_header("content-type", "application/json") res = post(conn, "/api/v1/accounts", valid_params) - assert json_response(res, 200) + assert json_response_and_validate_schema(res, 200) [{127, 0, 0, 1}, {127, 0, 0, 2}, {127, 0, 0, 3}, {127, 0, 0, 4}] |> Stream.zip(Map.delete(valid_params, :email)) @@ -950,7 +892,7 @@ test "returns bad_request if missing required params", %{ conn |> Map.put(:remote_ip, ip) |> post("/api/v1/accounts", Map.delete(valid_params, attr)) - |> json_response(400) + |> json_response_and_validate_schema(400) assert res == %{ "error" => "Missing field: #{attr}.", @@ -983,14 +925,16 @@ test "returns bad_request if missing email params when :account_activation_requi |> Map.put(:remote_ip, {127, 0, 0, 5}) |> post("/api/v1/accounts", Map.delete(valid_params, :email)) - assert json_response(res, 400) == %{"error" => "Missing parameters"} + assert json_response_and_validate_schema(res, 400) == %{"error" => "Missing parameters"} res = conn |> Map.put(:remote_ip, {127, 0, 0, 6}) |> post("/api/v1/accounts", Map.put(valid_params, :email, "")) - assert json_response(res, 400) == %{"error" => "{\"email\":[\"can't be blank\"]}"} + assert json_response_and_validate_schema(res, 400) == %{ + "error" => "{\"email\":[\"can't be blank\"]}" + } end test "allow registration without an email", %{conn: conn, valid_params: valid_params} do @@ -1003,7 +947,7 @@ test "allow registration without an email", %{conn: conn, valid_params: valid_pa |> Map.put(:remote_ip, {127, 0, 0, 7}) |> post("/api/v1/accounts", Map.delete(valid_params, :email)) - assert json_response(res, 200) + assert json_response_and_validate_schema(res, 200) end test "allow registration with an empty email", %{conn: conn, valid_params: valid_params} do @@ -1016,7 +960,7 @@ test "allow registration with an empty email", %{conn: conn, valid_params: valid |> Map.put(:remote_ip, {127, 0, 0, 8}) |> post("/api/v1/accounts", Map.put(valid_params, :email, "")) - assert json_response(res, 200) + assert json_response_and_validate_schema(res, 200) end test "returns forbidden if token is invalid", %{conn: conn, valid_params: valid_params} do @@ -1026,7 +970,7 @@ test "returns forbidden if token is invalid", %{conn: conn, valid_params: valid_ |> put_req_header("content-type", "multipart/form-data") |> post("/api/v1/accounts", valid_params) - assert json_response(res, 403) == %{"error" => "Invalid credentials"} + assert json_response_and_validate_schema(res, 403) == %{"error" => "Invalid credentials"} end test "registration from trusted app" do @@ -1056,7 +1000,7 @@ test "registration from trusted app" do password: "some_password", confirm: "some_password" }) - |> json_response(200) + |> json_response_and_validate_schema(200) assert %{ "access_token" => access_token, @@ -1069,7 +1013,7 @@ test "registration from trusted app" do build_conn() |> Plug.Conn.put_req_header("authorization", "Bearer " <> access_token) |> get("/api/v1/accounts/verify_credentials") - |> json_response(200) + |> json_response_and_validate_schema(200) assert %{ "acct" => "Lain", @@ -1125,7 +1069,7 @@ test "respects rate limit setting", %{conn: conn} do "created_at" => _created_at, "scope" => _scope, "token_type" => "Bearer" - } = json_response(conn, 200) + } = json_response_and_validate_schema(conn, 200) token_from_db = Repo.get_by(Token, token: token) assert token_from_db @@ -1143,7 +1087,9 @@ test "respects rate limit setting", %{conn: conn} do agreement: true }) - assert json_response(conn, :too_many_requests) == %{"error" => "Throttled"} + assert json_response_and_validate_schema(conn, :too_many_requests) == %{ + "error" => "Throttled" + } end end @@ -1151,16 +1097,13 @@ test "respects rate limit setting", %{conn: conn} do test "returns lists to which the account belongs" do %{user: user, conn: conn} = oauth_access(["read:lists"]) other_user = insert(:user) - assert {:ok, %Pleroma.List{} = list} = Pleroma.List.create("Test List", user) + assert {:ok, %Pleroma.List{id: list_id} = list} = Pleroma.List.create("Test List", user) {:ok, %{following: _following}} = Pleroma.List.follow(list, other_user) - res = - conn - |> get("/api/v1/accounts/#{other_user.id}/lists") - |> json_response(200) - - assert res == [%{"id" => to_string(list.id), "title" => "Test List"}] - assert_schema(res, "ListsResponse", ApiSpec.spec()) + assert [%{"id" => list_id, "title" => "Test List"}] = + conn + |> get("/api/v1/accounts/#{other_user.id}/lists") + |> json_response_and_validate_schema(200) end end @@ -1169,7 +1112,7 @@ test "verify_credentials" do %{user: user, conn: conn} = oauth_access(["read:accounts"]) conn = get(conn, "/api/v1/accounts/verify_credentials") - response = json_response(conn, 200) + response = json_response_and_validate_schema(conn, 200) assert %{"id" => id, "source" => %{"privacy" => "public"}} = response assert response["pleroma"]["chat_token"] @@ -1182,7 +1125,9 @@ test "verify_credentials default scope unlisted" do conn = get(conn, "/api/v1/accounts/verify_credentials") - assert %{"id" => id, "source" => %{"privacy" => "unlisted"}} = json_response(conn, 200) + assert %{"id" => id, "source" => %{"privacy" => "unlisted"}} = + json_response_and_validate_schema(conn, 200) + assert id == to_string(user.id) end @@ -1192,7 +1137,9 @@ test "locked accounts" do conn = get(conn, "/api/v1/accounts/verify_credentials") - assert %{"id" => id, "source" => %{"privacy" => "private"}} = json_response(conn, 200) + assert %{"id" => id, "source" => %{"privacy" => "private"}} = + json_response_and_validate_schema(conn, 200) + assert id == to_string(user.id) end end @@ -1207,18 +1154,18 @@ test "returns the relationships for the current user", %{user: user, conn: conn} assert [%{"id" => ^other_user_id}] = conn |> get("/api/v1/accounts/relationships?id=#{other_user.id}") - |> json_response(200) + |> json_response_and_validate_schema(200) assert [%{"id" => ^other_user_id}] = conn |> get("/api/v1/accounts/relationships?id[]=#{other_user.id}") - |> json_response(200) + |> json_response_and_validate_schema(200) end test "returns an empty list on a bad request", %{conn: conn} do conn = get(conn, "/api/v1/accounts/relationships", %{}) - assert [] = json_response(conn, 200) + assert [] = json_response_and_validate_schema(conn, 200) end end @@ -1231,8 +1178,7 @@ test "getting a list of mutes" do conn = get(conn, "/api/v1/mutes") other_user_id = to_string(other_user.id) - assert [%{"id" => ^other_user_id}] = json_response(conn, 200) - assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec()) + assert [%{"id" => ^other_user_id}] = json_response_and_validate_schema(conn, 200) end test "getting a list of blocks" do @@ -1247,7 +1193,6 @@ test "getting a list of blocks" do |> get("/api/v1/blocks") other_user_id = to_string(other_user.id) - assert [%{"id" => ^other_user_id}] = json_response(conn, 200) - assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec()) + assert [%{"id" => ^other_user_id}] = json_response_and_validate_schema(conn, 200) end end From cc1e2e8d0f5fa27d051a0a21740a8052b95ce1a5 Mon Sep 17 00:00:00 2001 From: fence Date: Mon, 27 Apr 2020 19:11:03 +0200 Subject: [PATCH 345/581] requested changes to mongoose_im_controller.ex --- .../web/mongooseim/mongoose_im_controller.ex | 45 ++++++------------- 1 file changed, 13 insertions(+), 32 deletions(-) diff --git a/lib/pleroma/web/mongooseim/mongoose_im_controller.ex b/lib/pleroma/web/mongooseim/mongoose_im_controller.ex index c15b4bfb8..7123153c5 100644 --- a/lib/pleroma/web/mongooseim/mongoose_im_controller.ex +++ b/lib/pleroma/web/mongooseim/mongoose_im_controller.ex @@ -14,7 +14,7 @@ defmodule Pleroma.Web.MongooseIM.MongooseIMController do plug(RateLimiter, [name: :authentication, params: ["user"]] when action == :check_password) def user_exists(conn, %{"user" => username}) do - with %User{} <- Repo.get_by(User, nickname: username, local: true) do + with %User{} <- Repo.get_by(User, nickname: username, local: true, deactivated: false) do conn |> json(true) else @@ -26,41 +26,22 @@ def user_exists(conn, %{"user" => username}) do end def check_password(conn, %{"user" => username, "pass" => password}) do - user = Repo.get_by(User, nickname: username, local: true) - - state = case user do - nil -> nil - _ -> User.account_status(user) - end - - case state do - :deactivated -> + with %User{password_hash: password_hash, deactivated: false} <- + Repo.get_by(User, nickname: username, local: true), + true <- Pbkdf2.checkpw(password, password_hash) do + conn + |> json(true) + else + false -> conn - |> put_status(:not_found) - |> json(false) - - :confirmation_pending -> - conn - |> put_status(:not_found) + |> put_status(:forbidden) |> json(false) _ -> - with %User{password_hash: password_hash} <- - user, - true <- Pbkdf2.checkpw(password, password_hash) do - conn - |> json(true) - else - false -> - conn - |> put_status(:forbidden) - |> json(false) - - _ -> - conn - |> put_status(:not_found) - |> json(false) - end + conn + |> put_status(:not_found) + |> json(false) end end end + From 935ca2c1329fd4b4f2b40a5ed7f2c1fa5f95b9bd Mon Sep 17 00:00:00 2001 From: fence Date: Mon, 27 Apr 2020 19:16:05 +0200 Subject: [PATCH 346/581] requested changes to mongoose test --- test/web/mongooseim/mongoose_im_controller_test.exs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/test/web/mongooseim/mongoose_im_controller_test.exs b/test/web/mongooseim/mongoose_im_controller_test.exs index 5987111e5..2b4d124af 100644 --- a/test/web/mongooseim/mongoose_im_controller_test.exs +++ b/test/web/mongooseim/mongoose_im_controller_test.exs @@ -9,6 +9,7 @@ defmodule Pleroma.Web.MongooseIMController do test "/user_exists", %{conn: conn} do _user = insert(:user, nickname: "lain") _remote_user = insert(:user, nickname: "alice", local: false) + _deactivated_user = insert(:user, nickname: "konata", deactivated: true) res = conn @@ -30,11 +31,18 @@ test "/user_exists", %{conn: conn} do |> json_response(404) assert res == false + + res = + conn + |> get(mongoose_im_path(conn, :user_exists), user: "konata") + |> json_response(404) + + assert res == false end test "/check_password", %{conn: conn} do user = insert(:user, password_hash: Comeonin.Pbkdf2.hashpwsalt("cool")) - _deactivated_user = insert(:user, nickname: "konata", local: false, deactivated: true) + _deactivated_user = insert(:user, nickname: "konata", deactivated: true) res = conn @@ -52,7 +60,7 @@ test "/check_password", %{conn: conn} do res = conn - |> get(mongoose_im_path(conn, :check_password), user: "konata", pass: "1337") + |> get(mongoose_im_path(conn, :check_password), user: "konata", pass: "cool") |> json_response(404) assert res == false From d607b4d84002ff14f51713f1ac74a4971e2dffac Mon Sep 17 00:00:00 2001 From: fence Date: Mon, 27 Apr 2020 19:32:58 +0200 Subject: [PATCH 347/581] mongooseim test: explicitly set password for the deactivated used --- test/web/mongooseim/mongoose_im_controller_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/web/mongooseim/mongoose_im_controller_test.exs b/test/web/mongooseim/mongoose_im_controller_test.exs index 2b4d124af..d17f8dbb4 100644 --- a/test/web/mongooseim/mongoose_im_controller_test.exs +++ b/test/web/mongooseim/mongoose_im_controller_test.exs @@ -42,7 +42,7 @@ test "/user_exists", %{conn: conn} do test "/check_password", %{conn: conn} do user = insert(:user, password_hash: Comeonin.Pbkdf2.hashpwsalt("cool")) - _deactivated_user = insert(:user, nickname: "konata", deactivated: true) + _deactivated_user = insert(:user, nickname: "konata", deactivated: true, password_hash: Comeonin.Pbkdf2.hashpwsalt("cool")) res = conn From dda65f7799e9dfa2e7b87389848eeee10993a858 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Mon, 27 Apr 2020 22:55:05 +0400 Subject: [PATCH 348/581] Move single used schemas to operation schema --- .../api_spec/operations/account_operation.ex | 376 +++++++++++++++++- .../operations/custom_emoji_operation.ex | 35 +- lib/pleroma/web/api_spec/schemas/account.ex | 4 +- .../schemas/account_create_request.ex | 60 --- .../schemas/account_create_response.ex | 27 -- .../schemas/account_field_attribute.ex | 24 -- .../schemas/account_follows_request.ex | 18 - .../api_spec/schemas/account_mute_request.ex | 24 -- .../schemas/account_relationships_response.ex | 58 --- .../account_update_credentials_request.ex | 125 ------ .../web/api_spec/schemas/accounts_response.ex | 13 - .../schemas/{list.ex => api_error.ex} | 14 +- .../web/api_spec/schemas/custom_emoji.ex | 30 -- .../schemas/{account_emoji.ex => emoji.ex} | 6 +- .../web/api_spec/schemas/lists_response.ex | 16 - lib/pleroma/web/api_spec/schemas/poll.ex | 4 +- lib/pleroma/web/api_spec/schemas/status.ex | 4 +- .../web/api_spec/schemas/statuses_response.ex | 13 - .../controllers/account_controller.ex | 11 +- test/web/api_spec/account_operation_test.exs | 141 ------- .../custom_emoji_controller_test.exs | 3 - 21 files changed, 402 insertions(+), 604 deletions(-) delete mode 100644 lib/pleroma/web/api_spec/schemas/account_create_request.ex delete mode 100644 lib/pleroma/web/api_spec/schemas/account_create_response.ex delete mode 100644 lib/pleroma/web/api_spec/schemas/account_field_attribute.ex delete mode 100644 lib/pleroma/web/api_spec/schemas/account_follows_request.ex delete mode 100644 lib/pleroma/web/api_spec/schemas/account_mute_request.ex delete mode 100644 lib/pleroma/web/api_spec/schemas/account_relationships_response.ex delete mode 100644 lib/pleroma/web/api_spec/schemas/account_update_credentials_request.ex delete mode 100644 lib/pleroma/web/api_spec/schemas/accounts_response.ex rename lib/pleroma/web/api_spec/schemas/{list.ex => api_error.ex} (52%) delete mode 100644 lib/pleroma/web/api_spec/schemas/custom_emoji.ex rename lib/pleroma/web/api_spec/schemas/{account_emoji.ex => emoji.ex} (85%) delete mode 100644 lib/pleroma/web/api_spec/schemas/lists_response.ex delete mode 100644 lib/pleroma/web/api_spec/schemas/statuses_response.ex delete mode 100644 test/web/api_spec/account_operation_test.exs diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index bf8d21059..2efe6e901 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -7,18 +7,11 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do alias OpenApiSpex.Reference alias OpenApiSpex.Schema alias Pleroma.Web.ApiSpec.Schemas.Account - alias Pleroma.Web.ApiSpec.Schemas.ApiError - alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest - alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse - alias Pleroma.Web.ApiSpec.Schemas.AccountFollowsRequest - alias Pleroma.Web.ApiSpec.Schemas.AccountMuteRequest alias Pleroma.Web.ApiSpec.Schemas.AccountRelationship - alias Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse - alias Pleroma.Web.ApiSpec.Schemas.AccountsResponse - alias Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest + alias Pleroma.Web.ApiSpec.Schemas.ActorType + alias Pleroma.Web.ApiSpec.Schemas.ApiError alias Pleroma.Web.ApiSpec.Schemas.BooleanLike - alias Pleroma.Web.ApiSpec.Schemas.ListsResponse - alias Pleroma.Web.ApiSpec.Schemas.StatusesResponse + alias Pleroma.Web.ApiSpec.Schemas.Status alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope import Pleroma.Web.ApiSpec.Helpers @@ -37,9 +30,9 @@ def create_operation do description: "Creates a user and account records. Returns an account access token for the app that initiated the request. The app should save this token for later, and should wait for the user to confirm their account by clicking a link in their email inbox.", operationId: "AccountController.create", - requestBody: request_body("Parameters", AccountCreateRequest, required: true), + requestBody: request_body("Parameters", create_request(), required: true), responses: %{ - 200 => Operation.response("Account", "application/json", AccountCreateResponse), + 200 => Operation.response("Account", "application/json", create_response()), 400 => Operation.response("Error", "application/json", ApiError), 403 => Operation.response("Error", "application/json", ApiError), 429 => Operation.response("Error", "application/json", ApiError) @@ -67,7 +60,7 @@ def update_credentials_operation do description: "Update the user's display and preferences.", operationId: "AccountController.update_credentials", security: [%{"oAuth" => ["write:accounts"]}], - requestBody: request_body("Parameters", AccountUpdateCredentialsRequest, required: true), + requestBody: request_body("Parameters", update_creadentials_request(), required: true), responses: %{ 200 => Operation.response("Account", "application/json", Account), 403 => Operation.response("Error", "application/json", ApiError) @@ -94,7 +87,7 @@ def relationships_operation do ) ], responses: %{ - 200 => Operation.response("Account", "application/json", AccountRelationshipsResponse) + 200 => Operation.response("Account", "application/json", array_of_relationships()) } } end @@ -146,7 +139,7 @@ def statuses_operation do ) ] ++ pagination_params(), responses: %{ - 200 => Operation.response("Statuses", "application/json", StatusesResponse), + 200 => Operation.response("Statuses", "application/json", array_of_statuses()), 404 => Operation.response("Error", "application/json", ApiError) } } @@ -163,7 +156,7 @@ def followers_operation do parameters: [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}] ++ pagination_params(), responses: %{ - 200 => Operation.response("Accounts", "application/json", AccountsResponse) + 200 => Operation.response("Accounts", "application/json", array_of_accounts()) } } end @@ -178,7 +171,7 @@ def following_operation do "Accounts which the given account is following, if network is not hidden by the account owner.", parameters: [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}] ++ pagination_params(), - responses: %{200 => Operation.response("Accounts", "application/json", AccountsResponse)} + responses: %{200 => Operation.response("Accounts", "application/json", array_of_accounts())} } end @@ -190,7 +183,7 @@ def lists_operation do security: [%{"oAuth" => ["read:lists"]}], description: "User lists that you have added this account to.", parameters: [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}], - responses: %{200 => Operation.response("Lists", "application/json", ListsResponse)} + responses: %{200 => Operation.response("Lists", "application/json", array_of_lists())} } end @@ -240,7 +233,7 @@ def mute_operation do summary: "Mute", operationId: "AccountController.mute", security: [%{"oAuth" => ["follow", "write:mutes"]}], - requestBody: request_body("Parameters", AccountMuteRequest), + requestBody: request_body("Parameters", mute_request()), description: "Mute the given account. Clients should filter statuses and notifications from this account, if received (e.g. due to a boost in the Home timeline).", parameters: [ @@ -307,7 +300,7 @@ def follows_operation do summary: "Follows", operationId: "AccountController.follows", security: [%{"oAuth" => ["follow", "write:follows"]}], - requestBody: request_body("Parameters", AccountFollowsRequest, required: true), + requestBody: request_body("Parameters", follows_request(), required: true), responses: %{ 200 => Operation.response("Account", "application/json", AccountRelationship), 400 => Operation.response("Error", "application/json", ApiError), @@ -324,7 +317,7 @@ def mutes_operation do description: "Accounts the user has muted.", security: [%{"oAuth" => ["follow", "read:mutes"]}], responses: %{ - 200 => Operation.response("Accounts", "application/json", AccountsResponse) + 200 => Operation.response("Accounts", "application/json", array_of_accounts()) } } end @@ -337,7 +330,7 @@ def blocks_operation do description: "View your blocks. See also accounts/:id/{block,unblock}", security: [%{"oAuth" => ["read:blocks"]}], responses: %{ - 200 => Operation.response("Accounts", "application/json", AccountsResponse) + 200 => Operation.response("Accounts", "application/json", array_of_accounts()) } } end @@ -366,4 +359,343 @@ def identity_proofs_operation do } } end + + defp create_request do + %Schema{ + title: "AccountCreateRequest", + description: "POST body for creating an account", + type: :object, + properties: %{ + reason: %Schema{ + type: :string, + description: + "Text that will be reviewed by moderators if registrations require manual approval" + }, + username: %Schema{type: :string, description: "The desired username for the account"}, + email: %Schema{ + type: :string, + description: + "The email address to be used for login. Required when `account_activation_required` is enabled.", + format: :email + }, + password: %Schema{ + type: :string, + description: "The password to be used for login", + format: :password + }, + agreement: %Schema{ + type: :boolean, + description: + "Whether the user agrees to the local rules, terms, and policies. These should be presented to the user in order to allow them to consent before setting this parameter to TRUE." + }, + locale: %Schema{ + type: :string, + description: "The language of the confirmation email that will be sent" + }, + # Pleroma-specific properties: + fullname: %Schema{type: :string, description: "Full name"}, + bio: %Schema{type: :string, description: "Bio", default: ""}, + captcha_solution: %Schema{ + type: :string, + description: "Provider-specific captcha solution" + }, + captcha_token: %Schema{type: :string, description: "Provider-specific captcha token"}, + captcha_answer_data: %Schema{type: :string, description: "Provider-specific captcha data"}, + token: %Schema{ + type: :string, + description: "Invite token required when the registrations aren't public" + } + }, + required: [:username, :password, :agreement], + example: %{ + "username" => "cofe", + "email" => "cofe@example.com", + "password" => "secret", + "agreement" => "true", + "bio" => "☕️" + } + } + end + + defp create_response do + %Schema{ + title: "AccountCreateResponse", + description: "Response schema for an account", + type: :object, + properties: %{ + token_type: %Schema{type: :string}, + access_token: %Schema{type: :string}, + scope: %Schema{type: :array, items: %Schema{type: :string}}, + created_at: %Schema{type: :integer, format: :"date-time"} + }, + example: %{ + "access_token" => "i9hAVVzGld86Pl5JtLtizKoXVvtTlSCJvwaugCxvZzk", + "created_at" => 1_585_918_714, + "scope" => ["read", "write", "follow", "push"], + "token_type" => "Bearer" + } + } + end + + defp update_creadentials_request do + %Schema{ + title: "AccountUpdateCredentialsRequest", + description: "POST body for creating an account", + type: :object, + properties: %{ + bot: %Schema{ + type: :boolean, + description: "Whether the account has a bot flag." + }, + display_name: %Schema{ + type: :string, + description: "The display name to use for the profile." + }, + note: %Schema{type: :string, description: "The account bio."}, + avatar: %Schema{ + type: :string, + description: "Avatar image encoded using multipart/form-data", + format: :binary + }, + header: %Schema{ + type: :string, + description: "Header image encoded using multipart/form-data", + format: :binary + }, + locked: %Schema{ + type: :boolean, + description: "Whether manual approval of follow requests is required." + }, + fields_attributes: %Schema{ + oneOf: [ + %Schema{type: :array, items: attribute_field()}, + %Schema{type: :object, additionalProperties: %Schema{type: attribute_field()}} + ] + }, + # NOTE: `source` field is not supported + # + # source: %Schema{ + # type: :object, + # properties: %{ + # privacy: %Schema{type: :string}, + # sensitive: %Schema{type: :boolean}, + # language: %Schema{type: :string} + # } + # }, + + # Pleroma-specific fields + no_rich_text: %Schema{ + type: :boolean, + description: "html tags are stripped from all statuses requested from the API" + }, + hide_followers: %Schema{type: :boolean, description: "user's followers will be hidden"}, + hide_follows: %Schema{type: :boolean, description: "user's follows will be hidden"}, + hide_followers_count: %Schema{ + type: :boolean, + description: "user's follower count will be hidden" + }, + hide_follows_count: %Schema{ + type: :boolean, + description: "user's follow count will be hidden" + }, + hide_favorites: %Schema{ + type: :boolean, + description: "user's favorites timeline will be hidden" + }, + show_role: %Schema{ + type: :boolean, + description: "user's role (e.g admin, moderator) will be exposed to anyone in the + API" + }, + default_scope: VisibilityScope, + pleroma_settings_store: %Schema{ + type: :object, + description: "Opaque user settings to be saved on the backend." + }, + skip_thread_containment: %Schema{ + type: :boolean, + description: "Skip filtering out broken threads" + }, + allow_following_move: %Schema{ + type: :boolean, + description: "Allows automatically follow moved following accounts" + }, + pleroma_background_image: %Schema{ + type: :string, + description: "Sets the background image of the user.", + format: :binary + }, + discoverable: %Schema{ + type: :boolean, + description: + "Discovery of this account in search results and other services is allowed." + }, + actor_type: ActorType + }, + example: %{ + bot: false, + display_name: "cofe", + note: "foobar", + fields_attributes: [%{name: "foo", value: "bar"}], + no_rich_text: false, + hide_followers: true, + hide_follows: false, + hide_followers_count: false, + hide_follows_count: false, + hide_favorites: false, + show_role: false, + default_scope: "private", + pleroma_settings_store: %{"pleroma-fe" => %{"key" => "val"}}, + skip_thread_containment: false, + allow_following_move: false, + discoverable: false, + actor_type: "Person" + } + } + end + + defp array_of_accounts do + %Schema{ + title: "ArrayOfAccounts", + type: :array, + items: Account + } + end + + defp array_of_relationships do + %Schema{ + title: "ArrayOfRelationships", + description: "Response schema for account relationships", + type: :array, + items: AccountRelationship, + example: [ + %{ + "id" => "1", + "following" => true, + "showing_reblogs" => true, + "followed_by" => true, + "blocking" => false, + "blocked_by" => true, + "muting" => false, + "muting_notifications" => false, + "requested" => false, + "domain_blocking" => false, + "subscribing" => false, + "endorsed" => true + }, + %{ + "id" => "2", + "following" => true, + "showing_reblogs" => true, + "followed_by" => true, + "blocking" => false, + "blocked_by" => true, + "muting" => true, + "muting_notifications" => false, + "requested" => true, + "domain_blocking" => false, + "subscribing" => false, + "endorsed" => false + }, + %{ + "id" => "3", + "following" => true, + "showing_reblogs" => true, + "followed_by" => true, + "blocking" => true, + "blocked_by" => false, + "muting" => true, + "muting_notifications" => false, + "requested" => false, + "domain_blocking" => true, + "subscribing" => true, + "endorsed" => false + } + ] + } + end + + defp follows_request do + %Schema{ + title: "AccountFollowsRequest", + description: "POST body for muting an account", + type: :object, + properties: %{ + uri: %Schema{type: :string, format: :uri} + }, + required: [:uri] + } + end + + defp mute_request do + %Schema{ + title: "AccountMuteRequest", + description: "POST body for muting an account", + type: :object, + properties: %{ + notifications: %Schema{ + type: :boolean, + description: "Mute notifications in addition to statuses? Defaults to true.", + default: true + } + }, + example: %{ + "notifications" => true + } + } + end + + defp list do + %Schema{ + title: "List", + description: "Response schema for a list", + type: :object, + properties: %{ + id: %Schema{type: :string}, + title: %Schema{type: :string} + }, + example: %{ + "id" => "123", + "title" => "my list" + } + } + end + + defp array_of_lists do + %Schema{ + title: "ArrayOfLists", + description: "Response schema for lists", + type: :array, + items: list(), + example: [ + %{"id" => "123", "title" => "my list"}, + %{"id" => "1337", "title" => "anotehr list"} + ] + } + end + + defp array_of_statuses do + %Schema{ + title: "ArrayOfStatuses", + type: :array, + items: Status + } + end + + defp attribute_field do + %Schema{ + title: "AccountAttributeField", + description: "Request schema for account custom fields", + type: :object, + properties: %{ + name: %Schema{type: :string}, + value: %Schema{type: :string} + }, + required: [:name, :value], + example: %{ + "name" => "Website", + "value" => "https://pleroma.com" + } + } + end end diff --git a/lib/pleroma/web/api_spec/operations/custom_emoji_operation.ex b/lib/pleroma/web/api_spec/operations/custom_emoji_operation.ex index a117fe460..2f812ac77 100644 --- a/lib/pleroma/web/api_spec/operations/custom_emoji_operation.ex +++ b/lib/pleroma/web/api_spec/operations/custom_emoji_operation.ex @@ -5,7 +5,7 @@ defmodule Pleroma.Web.ApiSpec.CustomEmojiOperation do alias OpenApiSpex.Operation alias OpenApiSpex.Schema - alias Pleroma.Web.ApiSpec.Schemas.CustomEmoji + alias Pleroma.Web.ApiSpec.Schemas.Emoji def open_api_operation(action) do operation = String.to_existing_atom("#{action}_operation") @@ -19,17 +19,17 @@ def index_operation do description: "Returns custom emojis that are available on the server.", operationId: "CustomEmojiController.index", responses: %{ - 200 => Operation.response("Custom Emojis", "application/json", custom_emojis_resposnse()) + 200 => Operation.response("Custom Emojis", "application/json", resposnse()) } } end - defp custom_emojis_resposnse do + defp resposnse do %Schema{ title: "CustomEmojisResponse", description: "Response schema for custom emojis", type: :array, - items: CustomEmoji, + items: custom_emoji(), example: [ %{ "category" => "Fun", @@ -58,4 +58,31 @@ defp custom_emojis_resposnse do ] } end + + defp custom_emoji do + %Schema{ + title: "CustomEmoji", + description: "Schema for a CustomEmoji", + allOf: [ + Emoji, + %Schema{ + type: :object, + properties: %{ + category: %Schema{type: :string}, + tags: %Schema{type: :array} + } + } + ], + example: %{ + "category" => "Fun", + "shortcode" => "aaaa", + "url" => + "https://files.mastodon.social/custom_emojis/images/000/007/118/original/aaaa.png", + "static_url" => + "https://files.mastodon.social/custom_emojis/images/000/007/118/static/aaaa.png", + "visible_in_picker" => true, + "tags" => ["Gif", "Fun"] + } + } + end end diff --git a/lib/pleroma/web/api_spec/schemas/account.ex b/lib/pleroma/web/api_spec/schemas/account.ex index d128feb30..d54e2158d 100644 --- a/lib/pleroma/web/api_spec/schemas/account.ex +++ b/lib/pleroma/web/api_spec/schemas/account.ex @@ -4,10 +4,10 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do alias OpenApiSpex.Schema - alias Pleroma.Web.ApiSpec.Schemas.AccountEmoji alias Pleroma.Web.ApiSpec.Schemas.AccountField alias Pleroma.Web.ApiSpec.Schemas.AccountRelationship alias Pleroma.Web.ApiSpec.Schemas.ActorType + alias Pleroma.Web.ApiSpec.Schemas.Emoji alias Pleroma.Web.ApiSpec.Schemas.FlakeID alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope @@ -24,7 +24,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do bot: %Schema{type: :boolean}, created_at: %Schema{type: :string, format: "date-time"}, display_name: %Schema{type: :string}, - emojis: %Schema{type: :array, items: AccountEmoji}, + emojis: %Schema{type: :array, items: Emoji}, fields: %Schema{type: :array, items: AccountField}, follow_requests_count: %Schema{type: :integer}, followers_count: %Schema{type: :integer}, diff --git a/lib/pleroma/web/api_spec/schemas/account_create_request.ex b/lib/pleroma/web/api_spec/schemas/account_create_request.ex deleted file mode 100644 index 49fa12159..000000000 --- a/lib/pleroma/web/api_spec/schemas/account_create_request.ex +++ /dev/null @@ -1,60 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest do - alias OpenApiSpex.Schema - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "AccountCreateRequest", - description: "POST body for creating an account", - type: :object, - properties: %{ - reason: %Schema{ - type: :string, - description: - "Text that will be reviewed by moderators if registrations require manual approval" - }, - username: %Schema{type: :string, description: "The desired username for the account"}, - email: %Schema{ - type: :string, - description: - "The email address to be used for login. Required when `account_activation_required` is enabled.", - format: :email - }, - password: %Schema{ - type: :string, - description: "The password to be used for login", - format: :password - }, - agreement: %Schema{ - type: :boolean, - description: - "Whether the user agrees to the local rules, terms, and policies. These should be presented to the user in order to allow them to consent before setting this parameter to TRUE." - }, - locale: %Schema{ - type: :string, - description: "The language of the confirmation email that will be sent" - }, - # Pleroma-specific properties: - fullname: %Schema{type: :string, description: "Full name"}, - bio: %Schema{type: :string, description: "Bio", default: ""}, - captcha_solution: %Schema{type: :string, description: "Provider-specific captcha solution"}, - captcha_token: %Schema{type: :string, description: "Provider-specific captcha token"}, - captcha_answer_data: %Schema{type: :string, description: "Provider-specific captcha data"}, - token: %Schema{ - type: :string, - description: "Invite token required when the registrations aren't public" - } - }, - required: [:username, :password, :agreement], - example: %{ - "username" => "cofe", - "email" => "cofe@example.com", - "password" => "secret", - "agreement" => "true", - "bio" => "☕️" - } - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/account_create_response.ex b/lib/pleroma/web/api_spec/schemas/account_create_response.ex deleted file mode 100644 index 2237351a2..000000000 --- a/lib/pleroma/web/api_spec/schemas/account_create_response.ex +++ /dev/null @@ -1,27 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse do - alias OpenApiSpex.Schema - - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "AccountCreateResponse", - description: "Response schema for an account", - type: :object, - properties: %{ - token_type: %Schema{type: :string}, - access_token: %Schema{type: :string}, - scope: %Schema{type: :array, items: %Schema{type: :string}}, - created_at: %Schema{type: :integer, format: :"date-time"} - }, - example: %{ - "access_token" => "i9hAVVzGld86Pl5JtLtizKoXVvtTlSCJvwaugCxvZzk", - "created_at" => 1_585_918_714, - "scope" => ["read", "write", "follow", "push"], - "token_type" => "Bearer" - } - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/account_field_attribute.ex b/lib/pleroma/web/api_spec/schemas/account_field_attribute.ex deleted file mode 100644 index 89e483655..000000000 --- a/lib/pleroma/web/api_spec/schemas/account_field_attribute.ex +++ /dev/null @@ -1,24 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.AccountAttributeField do - alias OpenApiSpex.Schema - - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "AccountAttributeField", - description: "Request schema for account custom fields", - type: :object, - properties: %{ - name: %Schema{type: :string}, - value: %Schema{type: :string} - }, - required: [:name, :value], - example: %{ - "name" => "Website", - "value" => "https://pleroma.com" - } - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/account_follows_request.ex b/lib/pleroma/web/api_spec/schemas/account_follows_request.ex deleted file mode 100644 index 19dce0cb2..000000000 --- a/lib/pleroma/web/api_spec/schemas/account_follows_request.ex +++ /dev/null @@ -1,18 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.AccountFollowsRequest do - alias OpenApiSpex.Schema - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "AccountFollowsRequest", - description: "POST body for muting an account", - type: :object, - properties: %{ - uri: %Schema{type: :string, format: :uri} - }, - required: [:uri] - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/account_mute_request.ex b/lib/pleroma/web/api_spec/schemas/account_mute_request.ex deleted file mode 100644 index a61f6d04c..000000000 --- a/lib/pleroma/web/api_spec/schemas/account_mute_request.ex +++ /dev/null @@ -1,24 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.AccountMuteRequest do - alias OpenApiSpex.Schema - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "AccountMuteRequest", - description: "POST body for muting an account", - type: :object, - properties: %{ - notifications: %Schema{ - type: :boolean, - description: "Mute notifications in addition to statuses? Defaults to true.", - default: true - } - }, - example: %{ - "notifications" => true - } - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/account_relationships_response.ex b/lib/pleroma/web/api_spec/schemas/account_relationships_response.ex deleted file mode 100644 index 960e14db1..000000000 --- a/lib/pleroma/web/api_spec/schemas/account_relationships_response.ex +++ /dev/null @@ -1,58 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse do - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "AccountRelationshipsResponse", - description: "Response schema for account relationships", - type: :array, - items: Pleroma.Web.ApiSpec.Schemas.AccountRelationship, - example: [ - %{ - "id" => "1", - "following" => true, - "showing_reblogs" => true, - "followed_by" => true, - "blocking" => false, - "blocked_by" => true, - "muting" => false, - "muting_notifications" => false, - "requested" => false, - "domain_blocking" => false, - "subscribing" => false, - "endorsed" => true - }, - %{ - "id" => "2", - "following" => true, - "showing_reblogs" => true, - "followed_by" => true, - "blocking" => false, - "blocked_by" => true, - "muting" => true, - "muting_notifications" => false, - "requested" => true, - "domain_blocking" => false, - "subscribing" => false, - "endorsed" => false - }, - %{ - "id" => "3", - "following" => true, - "showing_reblogs" => true, - "followed_by" => true, - "blocking" => true, - "blocked_by" => false, - "muting" => true, - "muting_notifications" => false, - "requested" => false, - "domain_blocking" => true, - "subscribing" => true, - "endorsed" => false - } - ] - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/account_update_credentials_request.ex b/lib/pleroma/web/api_spec/schemas/account_update_credentials_request.ex deleted file mode 100644 index 35220c78a..000000000 --- a/lib/pleroma/web/api_spec/schemas/account_update_credentials_request.ex +++ /dev/null @@ -1,125 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest do - alias OpenApiSpex.Schema - alias Pleroma.Web.ApiSpec.Schemas.AccountAttributeField - alias Pleroma.Web.ApiSpec.Schemas.ActorType - alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "AccountUpdateCredentialsRequest", - description: "POST body for creating an account", - type: :object, - properties: %{ - bot: %Schema{ - type: :boolean, - description: "Whether the account has a bot flag." - }, - display_name: %Schema{ - type: :string, - description: "The display name to use for the profile." - }, - note: %Schema{type: :string, description: "The account bio."}, - avatar: %Schema{ - type: :string, - description: "Avatar image encoded using multipart/form-data", - format: :binary - }, - header: %Schema{ - type: :string, - description: "Header image encoded using multipart/form-data", - format: :binary - }, - locked: %Schema{ - type: :boolean, - description: "Whether manual approval of follow requests is required." - }, - fields_attributes: %Schema{ - oneOf: [ - %Schema{type: :array, items: AccountAttributeField}, - %Schema{type: :object, additionalProperties: %Schema{type: AccountAttributeField}} - ] - }, - # NOTE: `source` field is not supported - # - # source: %Schema{ - # type: :object, - # properties: %{ - # privacy: %Schema{type: :string}, - # sensitive: %Schema{type: :boolean}, - # language: %Schema{type: :string} - # } - # }, - - # Pleroma-specific fields - no_rich_text: %Schema{ - type: :boolean, - description: "html tags are stripped from all statuses requested from the API" - }, - hide_followers: %Schema{type: :boolean, description: "user's followers will be hidden"}, - hide_follows: %Schema{type: :boolean, description: "user's follows will be hidden"}, - hide_followers_count: %Schema{ - type: :boolean, - description: "user's follower count will be hidden" - }, - hide_follows_count: %Schema{ - type: :boolean, - description: "user's follow count will be hidden" - }, - hide_favorites: %Schema{ - type: :boolean, - description: "user's favorites timeline will be hidden" - }, - show_role: %Schema{ - type: :boolean, - description: "user's role (e.g admin, moderator) will be exposed to anyone in the - API" - }, - default_scope: VisibilityScope, - pleroma_settings_store: %Schema{ - type: :object, - description: "Opaque user settings to be saved on the backend." - }, - skip_thread_containment: %Schema{ - type: :boolean, - description: "Skip filtering out broken threads" - }, - allow_following_move: %Schema{ - type: :boolean, - description: "Allows automatically follow moved following accounts" - }, - pleroma_background_image: %Schema{ - type: :string, - description: "Sets the background image of the user.", - format: :binary - }, - discoverable: %Schema{ - type: :boolean, - description: "Discovery of this account in search results and other services is allowed." - }, - actor_type: ActorType - }, - example: %{ - bot: false, - display_name: "cofe", - note: "foobar", - fields_attributes: [%{name: "foo", value: "bar"}], - no_rich_text: false, - hide_followers: true, - hide_follows: false, - hide_followers_count: false, - hide_follows_count: false, - hide_favorites: false, - show_role: false, - default_scope: "private", - pleroma_settings_store: %{"pleroma-fe" => %{"key" => "val"}}, - skip_thread_containment: false, - allow_following_move: false, - discoverable: false, - actor_type: "Person" - } - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/accounts_response.ex b/lib/pleroma/web/api_spec/schemas/accounts_response.ex deleted file mode 100644 index b714f59e7..000000000 --- a/lib/pleroma/web/api_spec/schemas/accounts_response.ex +++ /dev/null @@ -1,13 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.AccountsResponse do - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "AccountsResponse", - type: :array, - items: Pleroma.Web.ApiSpec.Schemas.Account - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/list.ex b/lib/pleroma/web/api_spec/schemas/api_error.ex similarity index 52% rename from lib/pleroma/web/api_spec/schemas/list.ex rename to lib/pleroma/web/api_spec/schemas/api_error.ex index f85fac2b8..5815df94c 100644 --- a/lib/pleroma/web/api_spec/schemas/list.ex +++ b/lib/pleroma/web/api_spec/schemas/api_error.ex @@ -2,22 +2,18 @@ # Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.Web.ApiSpec.Schemas.List do +defmodule Pleroma.Web.ApiSpec.Schemas.ApiError do alias OpenApiSpex.Schema require OpenApiSpex OpenApiSpex.schema(%{ - title: "List", - description: "Response schema for a list", + title: "ApiError", + description: "Response schema for API error", type: :object, - properties: %{ - id: %Schema{type: :string}, - title: %Schema{type: :string} - }, + properties: %{error: %Schema{type: :string}}, example: %{ - "id" => "123", - "title" => "my list" + "error" => "Something went wrong" } }) end diff --git a/lib/pleroma/web/api_spec/schemas/custom_emoji.ex b/lib/pleroma/web/api_spec/schemas/custom_emoji.ex deleted file mode 100644 index 5531b2081..000000000 --- a/lib/pleroma/web/api_spec/schemas/custom_emoji.ex +++ /dev/null @@ -1,30 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.CustomEmoji do - alias OpenApiSpex.Schema - - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "CustomEmoji", - description: "Response schema for an CustomEmoji", - type: :object, - properties: %{ - shortcode: %Schema{type: :string}, - url: %Schema{type: :string}, - static_url: %Schema{type: :string}, - visible_in_picker: %Schema{type: :boolean}, - category: %Schema{type: :string}, - tags: %Schema{type: :array} - }, - example: %{ - "shortcode" => "aaaa", - "url" => "https://files.mastodon.social/custom_emojis/images/000/007/118/original/aaaa.png", - "static_url" => - "https://files.mastodon.social/custom_emojis/images/000/007/118/static/aaaa.png", - "visible_in_picker" => true - } - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/account_emoji.ex b/lib/pleroma/web/api_spec/schemas/emoji.ex similarity index 85% rename from lib/pleroma/web/api_spec/schemas/account_emoji.ex rename to lib/pleroma/web/api_spec/schemas/emoji.ex index 6c1d4d95c..26f35e648 100644 --- a/lib/pleroma/web/api_spec/schemas/account_emoji.ex +++ b/lib/pleroma/web/api_spec/schemas/emoji.ex @@ -2,14 +2,14 @@ # Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.Web.ApiSpec.Schemas.AccountEmoji do +defmodule Pleroma.Web.ApiSpec.Schemas.Emoji do alias OpenApiSpex.Schema require OpenApiSpex OpenApiSpex.schema(%{ - title: "AccountEmoji", - description: "Response schema for account custom fields", + title: "Emoji", + description: "Response schema for an emoji", type: :object, properties: %{ shortcode: %Schema{type: :string}, diff --git a/lib/pleroma/web/api_spec/schemas/lists_response.ex b/lib/pleroma/web/api_spec/schemas/lists_response.ex deleted file mode 100644 index 132454579..000000000 --- a/lib/pleroma/web/api_spec/schemas/lists_response.ex +++ /dev/null @@ -1,16 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.ListsResponse do - alias Pleroma.Web.ApiSpec.Schemas.List - - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "ListsResponse", - description: "Response schema for lists", - type: :array, - items: List - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/poll.ex b/lib/pleroma/web/api_spec/schemas/poll.ex index 5fc9e889f..0474b550b 100644 --- a/lib/pleroma/web/api_spec/schemas/poll.ex +++ b/lib/pleroma/web/api_spec/schemas/poll.ex @@ -4,7 +4,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Poll do alias OpenApiSpex.Schema - alias Pleroma.Web.ApiSpec.Schemas.AccountEmoji + alias Pleroma.Web.ApiSpec.Schemas.Emoji alias Pleroma.Web.ApiSpec.Schemas.FlakeID require OpenApiSpex @@ -20,7 +20,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Poll do multiple: %Schema{type: :boolean}, votes_count: %Schema{type: :integer}, voted: %Schema{type: :boolean}, - emojis: %Schema{type: :array, items: AccountEmoji}, + emojis: %Schema{type: :array, items: Emoji}, options: %Schema{ type: :array, items: %Schema{ diff --git a/lib/pleroma/web/api_spec/schemas/status.ex b/lib/pleroma/web/api_spec/schemas/status.ex index bf5f04691..aef0588d4 100644 --- a/lib/pleroma/web/api_spec/schemas/status.ex +++ b/lib/pleroma/web/api_spec/schemas/status.ex @@ -5,7 +5,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do alias OpenApiSpex.Schema alias Pleroma.Web.ApiSpec.Schemas.Account - alias Pleroma.Web.ApiSpec.Schemas.AccountEmoji + alias Pleroma.Web.ApiSpec.Schemas.Emoji alias Pleroma.Web.ApiSpec.Schemas.FlakeID alias Pleroma.Web.ApiSpec.Schemas.Poll alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope @@ -41,7 +41,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do }, content: %Schema{type: :string, format: :html}, created_at: %Schema{type: :string, format: "date-time"}, - emojis: %Schema{type: :array, items: AccountEmoji}, + emojis: %Schema{type: :array, items: Emoji}, favourited: %Schema{type: :boolean}, favourites_count: %Schema{type: :integer}, id: FlakeID, diff --git a/lib/pleroma/web/api_spec/schemas/statuses_response.ex b/lib/pleroma/web/api_spec/schemas/statuses_response.ex deleted file mode 100644 index fb7c7e0aa..000000000 --- a/lib/pleroma/web/api_spec/schemas/statuses_response.ex +++ /dev/null @@ -1,13 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.StatusesResponse do - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "StatusesResponse", - type: :array, - items: Pleroma.Web.ApiSpec.Schemas.Status - }) -end diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index b1513001b..37adeec5f 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -104,8 +104,7 @@ def create(%{assigns: %{app: app}, body_params: params} = conn, _params) do :fullname ]) |> Map.put(:nickname, params.username) - |> Map.put(:fullname, params.fullname || params.username) - |> Map.put(:bio, params.bio || "") + |> Map.put(:fullname, Map.get(params, :fullname, params.username)) |> Map.put(:confirm, params.password) |> Map.put(:trusted_app, app.trusted) @@ -158,7 +157,6 @@ def update_credentials(%{assigns: %{user: original_user}, body_params: params} = params = params - |> Map.from_struct() |> Enum.filter(fn {_, value} -> not is_nil(value) end) |> Enum.into(%{}) @@ -217,11 +215,8 @@ defp normalize_fields_attributes(fields) do Enum.map(fields, fn {_, v} -> v end) else Enum.map(fields, fn - %Pleroma.Web.ApiSpec.Schemas.AccountAttributeField{} = field -> - %{"name" => field.name, "value" => field.value} - - field -> - field + %{} = field -> %{"name" => field.name, "value" => field.value} + field -> field end) end end diff --git a/test/web/api_spec/account_operation_test.exs b/test/web/api_spec/account_operation_test.exs deleted file mode 100644 index 892ade71c..000000000 --- a/test/web/api_spec/account_operation_test.exs +++ /dev/null @@ -1,141 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.AccountOperationTest do - use Pleroma.Web.ConnCase - - alias Pleroma.Web.ApiSpec - alias Pleroma.Web.ApiSpec.Schemas.Account - alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest - alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse - alias Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse - alias Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest - - import OpenApiSpex.TestAssertions - import Pleroma.Factory - - test "Account example matches schema" do - api_spec = ApiSpec.spec() - schema = Account.schema() - assert_schema(schema.example, "Account", api_spec) - end - - test "AccountCreateRequest example matches schema" do - api_spec = ApiSpec.spec() - schema = AccountCreateRequest.schema() - assert_schema(schema.example, "AccountCreateRequest", api_spec) - end - - test "AccountCreateResponse example matches schema" do - api_spec = ApiSpec.spec() - schema = AccountCreateResponse.schema() - assert_schema(schema.example, "AccountCreateResponse", api_spec) - end - - test "AccountUpdateCredentialsRequest example matches schema" do - api_spec = ApiSpec.spec() - schema = AccountUpdateCredentialsRequest.schema() - assert_schema(schema.example, "AccountUpdateCredentialsRequest", api_spec) - end - - test "AccountController produces a AccountCreateResponse", %{conn: conn} do - api_spec = ApiSpec.spec() - app_token = insert(:oauth_token, user: nil) - - json = - conn - |> put_req_header("authorization", "Bearer " <> app_token.token) - |> put_req_header("content-type", "application/json") - |> post( - "/api/v1/accounts", - %{ - username: "foo", - email: "bar@example.org", - password: "qwerty", - agreement: true - } - ) - |> json_response(200) - - assert_schema(json, "AccountCreateResponse", api_spec) - end - - test "AccountUpdateCredentialsRequest produces an Account", %{conn: conn} do - api_spec = ApiSpec.spec() - token = insert(:oauth_token, scopes: ["read", "write"]) - - json = - conn - |> put_req_header("authorization", "Bearer " <> token.token) - |> put_req_header("content-type", "application/json") - |> patch( - "/api/v1/accounts/update_credentials", - %{ - hide_followers_count: "true", - hide_follows_count: "true", - skip_thread_containment: "true", - hide_follows: "true", - pleroma_settings_store: %{"pleroma-fe" => %{"key" => "val"}}, - note: "foobar", - fields_attributes: [%{name: "foo", value: "bar"}] - } - ) - |> json_response(200) - - assert_schema(json, "Account", api_spec) - end - - test "AccountRelationshipsResponse example matches schema" do - api_spec = ApiSpec.spec() - schema = AccountRelationshipsResponse.schema() - assert_schema(schema.example, "AccountRelationshipsResponse", api_spec) - end - - test "/api/v1/accounts/relationships produces AccountRelationshipsResponse", %{ - conn: conn - } do - token = insert(:oauth_token, scopes: ["read", "write"]) - other_user = insert(:user) - {:ok, _user} = Pleroma.User.follow(token.user, other_user) - api_spec = ApiSpec.spec() - - assert [relationship] = - conn - |> put_req_header("authorization", "Bearer " <> token.token) - |> get("/api/v1/accounts/relationships?id=#{other_user.id}") - |> json_response(:ok) - - assert_schema([relationship], "AccountRelationshipsResponse", api_spec) - end - - test "/api/v1/accounts/:id produces Account", %{ - conn: conn - } do - user = insert(:user) - api_spec = ApiSpec.spec() - - assert resp = - conn - |> get("/api/v1/accounts/#{user.id}") - |> json_response(:ok) - - assert_schema(resp, "Account", api_spec) - end - - test "/api/v1/accounts/:id/statuses produces StatusesResponse", %{ - conn: conn - } do - user = insert(:user) - Pleroma.Web.CommonAPI.post(user, %{"status" => "foobar"}) - - api_spec = ApiSpec.spec() - - assert resp = - conn - |> get("/api/v1/accounts/#{user.id}/statuses") - |> json_response(:ok) - - assert_schema(resp, "StatusesResponse", api_spec) - end -end diff --git a/test/web/mastodon_api/controllers/custom_emoji_controller_test.exs b/test/web/mastodon_api/controllers/custom_emoji_controller_test.exs index 4222556a4..ab0027f90 100644 --- a/test/web/mastodon_api/controllers/custom_emoji_controller_test.exs +++ b/test/web/mastodon_api/controllers/custom_emoji_controller_test.exs @@ -4,8 +4,6 @@ defmodule Pleroma.Web.MastodonAPI.CustomEmojiControllerTest do use Pleroma.Web.ConnCase, async: true - alias Pleroma.Web.ApiSpec - import OpenApiSpex.TestAssertions test "with tags", %{conn: conn} do assert resp = @@ -21,6 +19,5 @@ test "with tags", %{conn: conn} do assert Map.has_key?(emoji, "category") assert Map.has_key?(emoji, "url") assert Map.has_key?(emoji, "visible_in_picker") - assert_schema(emoji, "CustomEmoji", ApiSpec.spec()) end end From 5ff20793e739daa962cdc1623c01dc6ec1ff8a61 Mon Sep 17 00:00:00 2001 From: fence Date: Tue, 28 Apr 2020 01:29:31 +0200 Subject: [PATCH 349/581] formating --- lib/pleroma/web/mongooseim/mongoose_im_controller.ex | 1 - test/web/mongooseim/mongoose_im_controller_test.exs | 9 +++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/mongooseim/mongoose_im_controller.ex b/lib/pleroma/web/mongooseim/mongoose_im_controller.ex index 7123153c5..1ed6ee521 100644 --- a/lib/pleroma/web/mongooseim/mongoose_im_controller.ex +++ b/lib/pleroma/web/mongooseim/mongoose_im_controller.ex @@ -44,4 +44,3 @@ def check_password(conn, %{"user" => username, "pass" => password}) do end end end - diff --git a/test/web/mongooseim/mongoose_im_controller_test.exs b/test/web/mongooseim/mongoose_im_controller_test.exs index d17f8dbb4..1ac2f2c27 100644 --- a/test/web/mongooseim/mongoose_im_controller_test.exs +++ b/test/web/mongooseim/mongoose_im_controller_test.exs @@ -42,7 +42,13 @@ test "/user_exists", %{conn: conn} do test "/check_password", %{conn: conn} do user = insert(:user, password_hash: Comeonin.Pbkdf2.hashpwsalt("cool")) - _deactivated_user = insert(:user, nickname: "konata", deactivated: true, password_hash: Comeonin.Pbkdf2.hashpwsalt("cool")) + + _deactivated_user = + insert(:user, + nickname: "konata", + deactivated: true, + password_hash: Comeonin.Pbkdf2.hashpwsalt("cool") + ) res = conn @@ -65,7 +71,6 @@ test "/check_password", %{conn: conn} do assert res == false - res = conn |> get(mongoose_im_path(conn, :check_password), user: "nobody", pass: "cool") From 270c3fe446a374202b6d64ce487f7df29ecb1c14 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Tue, 28 Apr 2020 06:45:59 +0300 Subject: [PATCH 350/581] fix markdown format --- docs/API/differences_in_mastoapi_responses.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index 0a7520f9e..a56a74064 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -185,11 +185,11 @@ Post here request with `grant_type=refresh_token` to obtain new access token. Re Has theses additional parameters (which are the same as in Pleroma-API): - `fullname`: optional - `bio`: optional - `captcha_solution`: optional, contains provider-specific captcha solution, - `captcha_token`: optional, contains provider-specific captcha token - `token`: invite token required when the registrations aren't public. +- `fullname`: optional +- `bio`: optional +- `captcha_solution`: optional, contains provider-specific captcha solution, +- `captcha_token`: optional, contains provider-specific captcha token +- `token`: invite token required when the registrations aren't public. ## Markers From ea5142b94bcd1a02571776440dc828dd08a2c3d6 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Tue, 28 Apr 2020 09:32:43 +0300 Subject: [PATCH 351/581] convert markdown content to html --- .../web/activity_pub/transmogrifier.ex | 15 +- test/fixtures/tesla_mock/bittube-video.json | 1 - test/fixtures/tesla_mock/craigmaloney.json | 112 +++++++++ test/fixtures/tesla_mock/hanimated.json | 1 - test/fixtures/tesla_mock/peertube-social.json | 234 ++++++++++++++++++ test/support/http_request_mock.ex | 8 +- test/web/activity_pub/transmogrifier_test.exs | 19 +- 7 files changed, 375 insertions(+), 15 deletions(-) delete mode 100644 test/fixtures/tesla_mock/bittube-video.json create mode 100644 test/fixtures/tesla_mock/craigmaloney.json delete mode 100644 test/fixtures/tesla_mock/hanimated.json create mode 100644 test/fixtures/tesla_mock/peertube-social.json diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 17e3c203a..91933dc0f 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -7,6 +7,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do A module to handle coding from internal to wire ActivityPub and back. """ alias Pleroma.Activity + alias Pleroma.EarmarkRenderer alias Pleroma.FollowingRelationship alias Pleroma.Object alias Pleroma.Object.Containment @@ -35,7 +36,6 @@ def fix_object(object, options \\ []) do |> fix_actor |> fix_url |> fix_attachments - |> fix_media_type |> fix_context |> fix_in_reply_to(options) |> fix_emoji @@ -44,6 +44,7 @@ def fix_object(object, options \\ []) do |> fix_addressing |> fix_summary |> fix_type(options) + |> fix_content end def fix_summary(%{"summary" => nil} = object) do @@ -358,11 +359,17 @@ def fix_type(%{"inReplyTo" => reply_id, "name" => _} = object, options) def fix_type(object, _), do: object - defp fix_media_type(%{"mediaType" => _} = object) do - Map.put(object, "mediaType", "text/html") + defp fix_content(%{"mediaType" => "text/markdown", "content" => content} = object) + when is_binary(content) do + html_content = + content + |> Earmark.as_html!(%Earmark.Options{renderer: EarmarkRenderer}) + |> Pleroma.HTML.filter_tags() + + Map.merge(object, %{"content" => html_content, "mediaType" => "text/html"}) end - defp fix_media_type(object), do: object + defp fix_content(object), do: object defp mastodon_follow_hack(%{"id" => id, "actor" => follower_id}, followed) do with true <- id =~ "follows", diff --git a/test/fixtures/tesla_mock/bittube-video.json b/test/fixtures/tesla_mock/bittube-video.json deleted file mode 100644 index be839862f..000000000 --- a/test/fixtures/tesla_mock/bittube-video.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Video","id":"https://bittube.video/videos/watch/2aad7dfb-5c75-4ee6-a9ed-08436af0558b","name":"Implications of 5G Rollout Simply Explained","duration":"PT428S","uuid":"2aad7dfb-5c75-4ee6-a9ed-08436af0558b","tag":[{"type":"Hashtag","name":"5g"},{"type":"Hashtag","name":"big brother"},{"type":"Hashtag","name":"facial recognition"},{"type":"Hashtag","name":"smart device"}],"category":{"identifier":"15","name":"Science & Technology"},"language":{"identifier":"en","name":"English"},"views":5,"sensitive":false,"waitTranscoding":true,"state":1,"commentsEnabled":true,"downloadEnabled":true,"published":"2020-04-12T11:55:44.805Z","originallyPublishedAt":null,"updated":"2020-04-13T02:01:24.279Z","mediaType":"text/markdown","content":null,"support":null,"subtitleLanguage":[],"icon":{"type":"Image","url":"https://bittube.video/static/thumbnails/2aad7dfb-5c75-4ee6-a9ed-08436af0558b.jpg","mediaType":"image/jpeg","width":223,"height":122},"url":[{"type":"Link","mediaType":"text/html","href":"https://bittube.video/videos/watch/2aad7dfb-5c75-4ee6-a9ed-08436af0558b"},{"type":"Link","mediaType":"video/mp4","href":"https://bittube.video/static/webseed/2aad7dfb-5c75-4ee6-a9ed-08436af0558b-240.mp4","height":240,"size":17158094,"fps":30},{"type":"Link","mediaType":"application/x-bittorrent","href":"https://bittube.video/static/torrents/2aad7dfb-5c75-4ee6-a9ed-08436af0558b-240.torrent","height":240},{"type":"Link","mediaType":"application/x-bittorrent;x-scheme-handler/magnet","href":"magnet:?xs=https%3A%2F%2Fbittube.video%2Fstatic%2Ftorrents%2F2aad7dfb-5c75-4ee6-a9ed-08436af0558b-240.torrent&xt=urn:btih:16c8f60d788a29e7ff195de44b4a1558b41dc6c3&dn=Implications+of+5G+Rollout+Simply+Explained&tr=wss%3A%2F%2Fbittube.video%3A443%2Ftracker%2Fsocket&tr=https%3A%2F%2Fbittube.video%2Ftracker%2Fannounce&ws=https%3A%2F%2Fbittube.video%2Fstatic%2Fwebseed%2F2aad7dfb-5c75-4ee6-a9ed-08436af0558b-240.mp4","height":240},{"type":"Link","mediaType":"video/mp4","href":"https://bittube.video/static/webseed/2aad7dfb-5c75-4ee6-a9ed-08436af0558b-0.mp4","height":0,"size":5215186,"fps":0},{"type":"Link","mediaType":"application/x-bittorrent","href":"https://bittube.video/static/torrents/2aad7dfb-5c75-4ee6-a9ed-08436af0558b-0.torrent","height":0},{"type":"Link","mediaType":"application/x-bittorrent;x-scheme-handler/magnet","href":"magnet:?xs=https%3A%2F%2Fbittube.video%2Fstatic%2Ftorrents%2F2aad7dfb-5c75-4ee6-a9ed-08436af0558b-0.torrent&xt=urn:btih:8a043b09291f2947423ce96d1cd0e977662d6de8&dn=Implications+of+5G+Rollout+Simply+Explained&tr=wss%3A%2F%2Fbittube.video%3A443%2Ftracker%2Fsocket&tr=https%3A%2F%2Fbittube.video%2Ftracker%2Fannounce&ws=https%3A%2F%2Fbittube.video%2Fstatic%2Fwebseed%2F2aad7dfb-5c75-4ee6-a9ed-08436af0558b-0.mp4","height":0},{"type":"Link","mediaType":"video/mp4","href":"https://bittube.video/static/webseed/2aad7dfb-5c75-4ee6-a9ed-08436af0558b-360.mp4","height":360,"size":22813140,"fps":30},{"type":"Link","mediaType":"application/x-bittorrent","href":"https://bittube.video/static/torrents/2aad7dfb-5c75-4ee6-a9ed-08436af0558b-360.torrent","height":360},{"type":"Link","mediaType":"application/x-bittorrent;x-scheme-handler/magnet","href":"magnet:?xs=https%3A%2F%2Fbittube.video%2Fstatic%2Ftorrents%2F2aad7dfb-5c75-4ee6-a9ed-08436af0558b-360.torrent&xt=urn:btih:d121f7493998d4204b3d33d00da7fea1c9a42484&dn=Implications+of+5G+Rollout+Simply+Explained&tr=wss%3A%2F%2Fbittube.video%3A443%2Ftracker%2Fsocket&tr=https%3A%2F%2Fbittube.video%2Ftracker%2Fannounce&ws=https%3A%2F%2Fbittube.video%2Fstatic%2Fwebseed%2F2aad7dfb-5c75-4ee6-a9ed-08436af0558b-360.mp4","height":360}],"likes":"https://bittube.video/videos/watch/2aad7dfb-5c75-4ee6-a9ed-08436af0558b/likes","dislikes":"https://bittube.video/videos/watch/2aad7dfb-5c75-4ee6-a9ed-08436af0558b/dislikes","shares":"https://bittube.video/videos/watch/2aad7dfb-5c75-4ee6-a9ed-08436af0558b/announces","comments":"https://bittube.video/videos/watch/2aad7dfb-5c75-4ee6-a9ed-08436af0558b/comments","attributedTo":[{"type":"Person","id":"https://bittube.video/accounts/hanimated.moh"},{"type":"Group","id":"https://bittube.video/video-channels/hanimated.moh_channel"}],"to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://bittube.video/accounts/hanimated.moh/followers"],"@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"RsaSignature2017":"https://w3id.org/security#RsaSignature2017","pt":"https://joinpeertube.org/ns#","sc":"http://schema.org#","Hashtag":"as:Hashtag","uuid":"sc:identifier","category":"sc:category","licence":"sc:license","subtitleLanguage":"sc:subtitleLanguage","sensitive":"as:sensitive","language":"sc:inLanguage","expires":"sc:expires","CacheFile":"pt:CacheFile","Infohash":"pt:Infohash","originallyPublishedAt":"sc:datePublished","views":{"@type":"sc:Number","@id":"pt:views"},"state":{"@type":"sc:Number","@id":"pt:state"},"size":{"@type":"sc:Number","@id":"pt:size"},"fps":{"@type":"sc:Number","@id":"pt:fps"},"startTimestamp":{"@type":"sc:Number","@id":"pt:startTimestamp"},"stopTimestamp":{"@type":"sc:Number","@id":"pt:stopTimestamp"},"position":{"@type":"sc:Number","@id":"pt:position"},"commentsEnabled":{"@type":"sc:Boolean","@id":"pt:commentsEnabled"},"downloadEnabled":{"@type":"sc:Boolean","@id":"pt:downloadEnabled"},"waitTranscoding":{"@type":"sc:Boolean","@id":"pt:waitTranscoding"},"support":{"@type":"sc:Text","@id":"pt:support"}},{"likes":{"@id":"as:likes","@type":"@id"},"dislikes":{"@id":"as:dislikes","@type":"@id"},"playlists":{"@id":"pt:playlists","@type":"@id"},"shares":{"@id":"as:shares","@type":"@id"},"comments":{"@id":"as:comments","@type":"@id"}}]} diff --git a/test/fixtures/tesla_mock/craigmaloney.json b/test/fixtures/tesla_mock/craigmaloney.json new file mode 100644 index 000000000..56ea9c7c3 --- /dev/null +++ b/test/fixtures/tesla_mock/craigmaloney.json @@ -0,0 +1,112 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + { + "CacheFile": "pt:CacheFile", + "Hashtag": "as:Hashtag", + "Infohash": "pt:Infohash", + "RsaSignature2017": "https://w3id.org/security#RsaSignature2017", + "category": "sc:category", + "commentsEnabled": { + "@id": "pt:commentsEnabled", + "@type": "sc:Boolean" + }, + "downloadEnabled": { + "@id": "pt:downloadEnabled", + "@type": "sc:Boolean" + }, + "expires": "sc:expires", + "fps": { + "@id": "pt:fps", + "@type": "sc:Number" + }, + "language": "sc:inLanguage", + "licence": "sc:license", + "originallyPublishedAt": "sc:datePublished", + "position": { + "@id": "pt:position", + "@type": "sc:Number" + }, + "pt": "https://joinpeertube.org/ns#", + "sc": "http://schema.org#", + "sensitive": "as:sensitive", + "size": { + "@id": "pt:size", + "@type": "sc:Number" + }, + "startTimestamp": { + "@id": "pt:startTimestamp", + "@type": "sc:Number" + }, + "state": { + "@id": "pt:state", + "@type": "sc:Number" + }, + "stopTimestamp": { + "@id": "pt:stopTimestamp", + "@type": "sc:Number" + }, + "subtitleLanguage": "sc:subtitleLanguage", + "support": { + "@id": "pt:support", + "@type": "sc:Text" + }, + "uuid": "sc:identifier", + "views": { + "@id": "pt:views", + "@type": "sc:Number" + }, + "waitTranscoding": { + "@id": "pt:waitTranscoding", + "@type": "sc:Boolean" + } + }, + { + "comments": { + "@id": "as:comments", + "@type": "@id" + }, + "dislikes": { + "@id": "as:dislikes", + "@type": "@id" + }, + "likes": { + "@id": "as:likes", + "@type": "@id" + }, + "playlists": { + "@id": "pt:playlists", + "@type": "@id" + }, + "shares": { + "@id": "as:shares", + "@type": "@id" + } + } + ], + "endpoints": { + "sharedInbox": "https://peertube.social/inbox" + }, + "followers": "https://peertube.social/accounts/craigmaloney/followers", + "following": "https://peertube.social/accounts/craigmaloney/following", + "icon": { + "mediaType": "image/png", + "type": "Image", + "url": "https://peertube.social/lazy-static/avatars/87bd694b-95bc-4066-83f4-bddfcd2b9caa.png" + }, + "id": "https://peertube.social/accounts/craigmaloney", + "inbox": "https://peertube.social/accounts/craigmaloney/inbox", + "name": "Craig Maloney", + "outbox": "https://peertube.social/accounts/craigmaloney/outbox", + "playlists": "https://peertube.social/accounts/craigmaloney/playlists", + "preferredUsername": "craigmaloney", + "publicKey": { + "id": "https://peertube.social/accounts/craigmaloney#main-key", + "owner": "https://peertube.social/accounts/craigmaloney", + "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9qvGIYUW01yc8CCsrwxK\n5OXlV5s7EbNWY8tJr/p1oGuELZwAnG2XKxtdbvgcCT+YxL5uRXIdCFIIIKrzRFr/\nHfS0mOgNT9u3gu+SstCNgtatciT0RVP77yiC3b2NHq1NRRvvVhzQb4cpIWObIxqh\nb2ypDClTc7XaKtgmQCbwZlGyZMT+EKz/vustD6BlpGsglRkm7iES6s1PPGb1BU+n\nS94KhbS2DOFiLcXCVWt0QarokIIuKznp4+xP1axKyP+SkT5AHx08Nd5TYFb2C1Jl\nz0WD/1q0mAN62m7QrA3SQPUgB+wWD+S3Nzf7FwNPiP4srbBgxVEUnji/r9mQ6BXC\nrQIDAQAB\n-----END PUBLIC KEY-----" + }, + "summary": null, + "type": "Person", + "url": "https://peertube.social/accounts/craigmaloney" +} diff --git a/test/fixtures/tesla_mock/hanimated.json b/test/fixtures/tesla_mock/hanimated.json deleted file mode 100644 index 564deebd9..000000000 --- a/test/fixtures/tesla_mock/hanimated.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Person","id":"https://bittube.video/accounts/hanimated.moh","following":"https://bittube.video/accounts/hanimated.moh/following","followers":"https://bittube.video/accounts/hanimated.moh/followers","playlists":"https://bittube.video/accounts/hanimated.moh/playlists","inbox":"https://bittube.video/accounts/hanimated.moh/inbox","outbox":"https://bittube.video/accounts/hanimated.moh/outbox","preferredUsername":"hanimated.moh","url":"https://bittube.video/accounts/hanimated.moh","name":"Nosat","endpoints":{"sharedInbox":"https://bittube.video/inbox"},"publicKey":{"id":"https://bittube.video/accounts/hanimated.moh#main-key","owner":"https://bittube.video/accounts/hanimated.moh","publicKeyPem":"-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwuoQT+4uyAboQcf/okCM\nFqUS/LuqFc2888OSKZFAz00Op/dyOB/pkr1+QLxbl8ZGiUWhmnmhNwmmd3tbhSsC\nvLv9Mz/YaWQPYLfRS/s/7iIxdniC4lo/YgicOrzcvetHmk1feOg5vb5/yc+bgUSm\nOk+L4azqXP9GmZyofzvufT65bUmzQRFXP19eL55YZWvZDaC81QAfRXsqtCqbehtF\nQNOjGhnl6a7Kfe8KprRDPV/3WvvFjftnNO2qenIIOFLLeznkQ0ELP6lyb9pvv/1C\n2/GRh2BwmgVlCTw1kTxLSdj80BFX5P8AudSiIx079lVkhamEhzsNLkMpQFqWAAlg\nrQIDAQAB\n-----END PUBLIC KEY-----"},"icon":{"type":"Image","mediaType":"image/jpeg","url":"https://bittube.video/lazy-static/avatars/84b8acc3-e48b-4642-a9f4-360a4499579b.jpg"},"@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"RsaSignature2017":"https://w3id.org/security#RsaSignature2017","pt":"https://joinpeertube.org/ns#","sc":"http://schema.org#","Hashtag":"as:Hashtag","uuid":"sc:identifier","category":"sc:category","licence":"sc:license","subtitleLanguage":"sc:subtitleLanguage","sensitive":"as:sensitive","language":"sc:inLanguage","expires":"sc:expires","CacheFile":"pt:CacheFile","Infohash":"pt:Infohash","originallyPublishedAt":"sc:datePublished","views":{"@type":"sc:Number","@id":"pt:views"},"state":{"@type":"sc:Number","@id":"pt:state"},"size":{"@type":"sc:Number","@id":"pt:size"},"fps":{"@type":"sc:Number","@id":"pt:fps"},"startTimestamp":{"@type":"sc:Number","@id":"pt:startTimestamp"},"stopTimestamp":{"@type":"sc:Number","@id":"pt:stopTimestamp"},"position":{"@type":"sc:Number","@id":"pt:position"},"commentsEnabled":{"@type":"sc:Boolean","@id":"pt:commentsEnabled"},"downloadEnabled":{"@type":"sc:Boolean","@id":"pt:downloadEnabled"},"waitTranscoding":{"@type":"sc:Boolean","@id":"pt:waitTranscoding"},"support":{"@type":"sc:Text","@id":"pt:support"}},{"likes":{"@id":"as:likes","@type":"@id"},"dislikes":{"@id":"as:dislikes","@type":"@id"},"playlists":{"@id":"pt:playlists","@type":"@id"},"shares":{"@id":"as:shares","@type":"@id"},"comments":{"@id":"as:comments","@type":"@id"}}],"summary":null} diff --git a/test/fixtures/tesla_mock/peertube-social.json b/test/fixtures/tesla_mock/peertube-social.json new file mode 100644 index 000000000..0e996ba35 --- /dev/null +++ b/test/fixtures/tesla_mock/peertube-social.json @@ -0,0 +1,234 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + { + "CacheFile": "pt:CacheFile", + "Hashtag": "as:Hashtag", + "Infohash": "pt:Infohash", + "RsaSignature2017": "https://w3id.org/security#RsaSignature2017", + "category": "sc:category", + "commentsEnabled": { + "@id": "pt:commentsEnabled", + "@type": "sc:Boolean" + }, + "downloadEnabled": { + "@id": "pt:downloadEnabled", + "@type": "sc:Boolean" + }, + "expires": "sc:expires", + "fps": { + "@id": "pt:fps", + "@type": "sc:Number" + }, + "language": "sc:inLanguage", + "licence": "sc:license", + "originallyPublishedAt": "sc:datePublished", + "position": { + "@id": "pt:position", + "@type": "sc:Number" + }, + "pt": "https://joinpeertube.org/ns#", + "sc": "http://schema.org#", + "sensitive": "as:sensitive", + "size": { + "@id": "pt:size", + "@type": "sc:Number" + }, + "startTimestamp": { + "@id": "pt:startTimestamp", + "@type": "sc:Number" + }, + "state": { + "@id": "pt:state", + "@type": "sc:Number" + }, + "stopTimestamp": { + "@id": "pt:stopTimestamp", + "@type": "sc:Number" + }, + "subtitleLanguage": "sc:subtitleLanguage", + "support": { + "@id": "pt:support", + "@type": "sc:Text" + }, + "uuid": "sc:identifier", + "views": { + "@id": "pt:views", + "@type": "sc:Number" + }, + "waitTranscoding": { + "@id": "pt:waitTranscoding", + "@type": "sc:Boolean" + } + }, + { + "comments": { + "@id": "as:comments", + "@type": "@id" + }, + "dislikes": { + "@id": "as:dislikes", + "@type": "@id" + }, + "likes": { + "@id": "as:likes", + "@type": "@id" + }, + "playlists": { + "@id": "pt:playlists", + "@type": "@id" + }, + "shares": { + "@id": "as:shares", + "@type": "@id" + } + } + ], + "attributedTo": [ + { + "id": "https://peertube.social/accounts/craigmaloney", + "type": "Person" + }, + { + "id": "https://peertube.social/video-channels/9909c7d9-6b5b-4aae-9164-c1af7229c91c", + "type": "Group" + } + ], + "category": { + "identifier": "15", + "name": "Science & Technology" + }, + "cc": [ + "https://peertube.social/accounts/craigmaloney/followers" + ], + "comments": "https://peertube.social/videos/watch/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe/comments", + "commentsEnabled": true, + "content": "Support this and our other Michigan!/usr/group videos and meetings. Learn more at http://mug.org/membership\n\nTwenty Years in Jail: FreeBSD's Jails, Then and Now\n\nJails started as a limited virtualization system, but over the last two years they've...", + "dislikes": "https://peertube.social/videos/watch/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe/dislikes", + "downloadEnabled": true, + "duration": "PT5151S", + "icon": { + "height": 122, + "mediaType": "image/jpeg", + "type": "Image", + "url": "https://peertube.social/static/thumbnails/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe.jpg", + "width": 223 + }, + "id": "https://peertube.social/videos/watch/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe", + "language": { + "identifier": "en", + "name": "English" + }, + "licence": { + "identifier": "1", + "name": "Attribution" + }, + "likes": "https://peertube.social/videos/watch/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe/likes", + "mediaType": "text/markdown", + "name": "Twenty Years in Jail: FreeBSD's Jails, Then and Now", + "originallyPublishedAt": "2019-08-13T00:00:00.000Z", + "published": "2020-02-12T01:06:08.054Z", + "sensitive": false, + "shares": "https://peertube.social/videos/watch/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe/announces", + "state": 1, + "subtitleLanguage": [], + "support": "Learn more at http://mug.org", + "tag": [ + { + "name": "linux", + "type": "Hashtag" + }, + { + "name": "mug.org", + "type": "Hashtag" + }, + { + "name": "open", + "type": "Hashtag" + }, + { + "name": "oss", + "type": "Hashtag" + }, + { + "name": "source", + "type": "Hashtag" + } + ], + "to": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "type": "Video", + "updated": "2020-02-15T15:01:09.474Z", + "url": [ + { + "href": "https://peertube.social/videos/watch/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe", + "mediaType": "text/html", + "type": "Link" + }, + { + "fps": 30, + "height": 240, + "href": "https://peertube.social/static/webseed/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe-240.mp4", + "mediaType": "video/mp4", + "size": 119465800, + "type": "Link" + }, + { + "height": 240, + "href": "https://peertube.social/static/torrents/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe-240.torrent", + "mediaType": "application/x-bittorrent", + "type": "Link" + }, + { + "height": 240, + "href": "magnet:?xs=https%3A%2F%2Fpeertube.social%2Fstatic%2Ftorrents%2F278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe-240.torrent&xt=urn:btih:b3365331a8543bf48d09add56d7fe4b1cbbb5659&dn=Twenty+Years+in+Jail%3A+FreeBSD's+Jails%2C+Then+and+Now&tr=wss%3A%2F%2Fpeertube.social%3A443%2Ftracker%2Fsocket&tr=https%3A%2F%2Fpeertube.social%2Ftracker%2Fannounce&ws=https%3A%2F%2Fpeertube.social%2Fstatic%2Fwebseed%2F278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe-240.mp4", + "mediaType": "application/x-bittorrent;x-scheme-handler/magnet", + "type": "Link" + }, + { + "fps": 30, + "height": 360, + "href": "https://peertube.social/static/webseed/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe-360.mp4", + "mediaType": "video/mp4", + "size": 143930318, + "type": "Link" + }, + { + "height": 360, + "href": "https://peertube.social/static/torrents/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe-360.torrent", + "mediaType": "application/x-bittorrent", + "type": "Link" + }, + { + "height": 360, + "href": "magnet:?xs=https%3A%2F%2Fpeertube.social%2Fstatic%2Ftorrents%2F278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe-360.torrent&xt=urn:btih:0d37b23c98cb0d89e28b5dc8f49b3c97a041e569&dn=Twenty+Years+in+Jail%3A+FreeBSD's+Jails%2C+Then+and+Now&tr=wss%3A%2F%2Fpeertube.social%3A443%2Ftracker%2Fsocket&tr=https%3A%2F%2Fpeertube.social%2Ftracker%2Fannounce&ws=https%3A%2F%2Fpeertube.social%2Fstatic%2Fwebseed%2F278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe-360.mp4", + "mediaType": "application/x-bittorrent;x-scheme-handler/magnet", + "type": "Link" + }, + { + "fps": 30, + "height": 480, + "href": "https://peertube.social/static/webseed/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe-480.mp4", + "mediaType": "video/mp4", + "size": 130530754, + "type": "Link" + }, + { + "height": 480, + "href": "https://peertube.social/static/torrents/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe-480.torrent", + "mediaType": "application/x-bittorrent", + "type": "Link" + }, + { + "height": 480, + "href": "magnet:?xs=https%3A%2F%2Fpeertube.social%2Fstatic%2Ftorrents%2F278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe-480.torrent&xt=urn:btih:3a13ff822ad9494165eff6167183ddaaabc1372a&dn=Twenty+Years+in+Jail%3A+FreeBSD's+Jails%2C+Then+and+Now&tr=wss%3A%2F%2Fpeertube.social%3A443%2Ftracker%2Fsocket&tr=https%3A%2F%2Fpeertube.social%2Ftracker%2Fannounce&ws=https%3A%2F%2Fpeertube.social%2Fstatic%2Fwebseed%2F278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe-480.mp4", + "mediaType": "application/x-bittorrent;x-scheme-handler/magnet", + "type": "Link" + } + ], + "uuid": "278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe", + "views": 2, + "waitTranscoding": false +} diff --git a/test/support/http_request_mock.ex b/test/support/http_request_mock.ex index 54dde0432..9624cb0f7 100644 --- a/test/support/http_request_mock.ex +++ b/test/support/http_request_mock.ex @@ -308,19 +308,19 @@ def get("https://peertube.moe/videos/watch/df5f464b-be8d-46fb-ad81-2d4c2d1630e3" }} end - def get("https://bittube.video/accounts/hanimated.moh", _, _, _) do + def get("https://peertube.social/accounts/craigmaloney", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/hanimated.json") + body: File.read!("test/fixtures/tesla_mock/craigmaloney.json") }} end - def get("https://bittube.video/videos/watch/2aad7dfb-5c75-4ee6-a9ed-08436af0558b", _, _, _) do + def get("https://peertube.social/videos/watch/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/bittube-video.json") + body: File.read!("test/fixtures/tesla_mock/peertube-social.json") }} end diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index de9663fa9..0404aae6a 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -1221,11 +1221,20 @@ test "it rejects activities without a valid ID" do :error = Transmogrifier.handle_incoming(data) end - test "it remaps mediaType of object" do - {:ok, object} = - Fetcher.fetch_object_from_id( - "https://bittube.video/videos/watch/2aad7dfb-5c75-4ee6-a9ed-08436af0558b" - ) + test "it converts content of object to html" do + object_id = "https://peertube.social/videos/watch/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe" + + {:ok, %{"content" => content_markdown}} = + Fetcher.fetch_and_contain_remote_object_from_id(object_id) + + {:ok, %Pleroma.Object{data: %{"content" => content}} = object} = + Fetcher.fetch_object_from_id(object_id) + + assert content_markdown == + "Support this and our other Michigan!/usr/group videos and meetings. Learn more at http://mug.org/membership\n\nTwenty Years in Jail: FreeBSD's Jails, Then and Now\n\nJails started as a limited virtualization system, but over the last two years they've..." + + assert content == + "

Support this and our other Michigan!/usr/group videos and meetings. Learn more at http://mug.org/membership

Twenty Years in Jail: FreeBSD’s Jails, Then and Now

Jails started as a limited virtualization system, but over the last two years they’ve…

" assert object.data["mediaType"] == "text/html" end From 560f2c1979ca4d49f18abd6de6aac49875bfc771 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 28 Apr 2020 16:50:37 +0400 Subject: [PATCH 352/581] Add OpenAPI spec for ReportController --- .../api_spec/operations/report_operation.ex | 78 +++++++++++++++++++ lib/pleroma/web/common_api/common_api.ex | 10 +-- lib/pleroma/web/common_api/utils.ex | 3 +- .../controllers/report_controller.ex | 6 +- .../admin_api/admin_api_controller_test.exs | 40 +++++----- test/web/admin_api/views/report_view_test.exs | 18 ++--- test/web/common_api/common_api_test.exs | 30 +++---- .../controllers/report_controller_test.exs | 24 ++++-- 8 files changed, 148 insertions(+), 61 deletions(-) create mode 100644 lib/pleroma/web/api_spec/operations/report_operation.ex diff --git a/lib/pleroma/web/api_spec/operations/report_operation.ex b/lib/pleroma/web/api_spec/operations/report_operation.ex new file mode 100644 index 000000000..da4d50703 --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/report_operation.ex @@ -0,0 +1,78 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.ReportOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Helpers + alias Pleroma.Web.ApiSpec.Schemas.ApiError + + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + def create_operation do + %Operation{ + tags: ["reports"], + summary: "File a report", + description: "Report problematic users to your moderators", + operationId: "ReportController.create", + security: [%{"oAuth" => ["follow", "write:reports"]}], + requestBody: Helpers.request_body("Parameters", create_request(), required: true), + responses: %{ + 200 => Operation.response("Report", "application/json", create_response()), + 400 => Operation.response("Report", "application/json", ApiError) + } + } + end + + defp create_request do + %Schema{ + title: "ReportCreateRequest", + description: "POST body for creating a report", + type: :object, + properties: %{ + account_id: %Schema{type: :string, description: "ID of the account to report"}, + status_ids: %Schema{ + type: :array, + items: %Schema{type: :string}, + description: "Array of Statuses to attach to the report, for context" + }, + comment: %Schema{ + type: :string, + description: "Reason for the report" + }, + forward: %Schema{ + type: :boolean, + default: false, + description: + "If the account is remote, should the report be forwarded to the remote admin?" + } + }, + required: [:account_id], + example: %{ + "account_id" => "123", + "status_ids" => ["1337"], + "comment" => "bad status!", + "forward" => "false" + } + } + end + + defp create_response do + %Schema{ + title: "ReportResponse", + type: :object, + properties: %{ + id: %Schema{type: :string, description: "Report ID"}, + action_taken: %Schema{type: :boolean, description: "Is action taken?"} + }, + example: %{ + "id" => "123", + "action_taken" => false + } + } + end +end diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index d1efe0c36..53ce7d425 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -380,9 +380,9 @@ def thread_muted?(user, activity) do ThreadMute.exists?(user.id, activity.data["context"]) end - def report(user, %{"account_id" => account_id} = data) do - with {:ok, account} <- get_reported_account(account_id), - {:ok, {content_html, _, _}} <- make_report_content_html(data["comment"]), + def report(user, data) do + with {:ok, account} <- get_reported_account(data.account_id), + {:ok, {content_html, _, _}} <- make_report_content_html(data[:comment]), {:ok, statuses} <- get_report_statuses(account, data) do ActivityPub.flag(%{ context: Utils.generate_context_id(), @@ -390,13 +390,11 @@ def report(user, %{"account_id" => account_id} = data) do account: account, statuses: statuses, content: content_html, - forward: data["forward"] || false + forward: Map.get(data, :forward, false) }) end end - def report(_user, _params), do: {:error, dgettext("errors", "Valid `account_id` required")} - defp get_reported_account(account_id) do case User.get_cached_by_id(account_id) do %User{} = account -> {:ok, account} diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 945e63e22..6540fa5d1 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -504,7 +504,8 @@ def make_report_content_html(comment) do end end - def get_report_statuses(%User{ap_id: actor}, %{"status_ids" => status_ids}) do + def get_report_statuses(%User{ap_id: actor}, %{status_ids: status_ids}) + when is_list(status_ids) do {:ok, Activity.all_by_actor_and_id(actor, status_ids)} end diff --git a/lib/pleroma/web/mastodon_api/controllers/report_controller.ex b/lib/pleroma/web/mastodon_api/controllers/report_controller.ex index f5782be13..85bd52106 100644 --- a/lib/pleroma/web/mastodon_api/controllers/report_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/report_controller.ex @@ -9,12 +9,14 @@ defmodule Pleroma.Web.MastodonAPI.ReportController do action_fallback(Pleroma.Web.MastodonAPI.FallbackController) + plug(OpenApiSpex.Plug.CastAndValidate, render_error: Pleroma.Web.ApiSpec.RenderError) plug(OAuthScopesPlug, %{scopes: ["write:reports"]} when action == :create) - plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.ReportOperation + @doc "POST /api/v1/reports" - def create(%{assigns: %{user: user}} = conn, params) do + def create(%{assigns: %{user: user}, body_params: params} = conn, _) do with {:ok, activity} <- Pleroma.Web.CommonAPI.report(user, params) do render(conn, "show.json", activity: activity) end diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index f80dbf8dd..1862a9589 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -1347,9 +1347,9 @@ test "returns report by its id", %{conn: conn} do {:ok, %{id: report_id}} = CommonAPI.report(reporter, %{ - "account_id" => target_user.id, - "comment" => "I feel offended", - "status_ids" => [activity.id] + account_id: target_user.id, + comment: "I feel offended", + status_ids: [activity.id] }) response = @@ -1374,16 +1374,16 @@ test "returns 404 when report id is invalid", %{conn: conn} do {:ok, %{id: report_id}} = CommonAPI.report(reporter, %{ - "account_id" => target_user.id, - "comment" => "I feel offended", - "status_ids" => [activity.id] + account_id: target_user.id, + comment: "I feel offended", + status_ids: [activity.id] }) {:ok, %{id: second_report_id}} = CommonAPI.report(reporter, %{ - "account_id" => target_user.id, - "comment" => "I feel very offended", - "status_ids" => [activity.id] + account_id: target_user.id, + comment: "I feel very offended", + status_ids: [activity.id] }) %{ @@ -1523,9 +1523,9 @@ test "returns reports", %{conn: conn} do {:ok, %{id: report_id}} = CommonAPI.report(reporter, %{ - "account_id" => target_user.id, - "comment" => "I feel offended", - "status_ids" => [activity.id] + account_id: target_user.id, + comment: "I feel offended", + status_ids: [activity.id] }) response = @@ -1547,15 +1547,15 @@ test "returns reports with specified state", %{conn: conn} do {:ok, %{id: first_report_id}} = CommonAPI.report(reporter, %{ - "account_id" => target_user.id, - "comment" => "I feel offended", - "status_ids" => [activity.id] + account_id: target_user.id, + comment: "I feel offended", + status_ids: [activity.id] }) {:ok, %{id: second_report_id}} = CommonAPI.report(reporter, %{ - "account_id" => target_user.id, - "comment" => "I don't like this user" + account_id: target_user.id, + comment: "I don't like this user" }) CommonAPI.update_report_state(second_report_id, "closed") @@ -3431,9 +3431,9 @@ test "it resend emails for two users", %{conn: conn, admin: admin} do {:ok, %{id: report_id}} = CommonAPI.report(reporter, %{ - "account_id" => target_user.id, - "comment" => "I feel offended", - "status_ids" => [activity.id] + account_id: target_user.id, + comment: "I feel offended", + status_ids: [activity.id] }) post(conn, "/api/pleroma/admin/reports/#{report_id}/notes", %{ diff --git a/test/web/admin_api/views/report_view_test.exs b/test/web/admin_api/views/report_view_test.exs index 5db6629f2..8cfa1dcfa 100644 --- a/test/web/admin_api/views/report_view_test.exs +++ b/test/web/admin_api/views/report_view_test.exs @@ -15,7 +15,7 @@ test "renders a report" do user = insert(:user) other_user = insert(:user) - {:ok, activity} = CommonAPI.report(user, %{"account_id" => other_user.id}) + {:ok, activity} = CommonAPI.report(user, %{account_id: other_user.id}) expected = %{ content: nil, @@ -48,7 +48,7 @@ test "includes reported statuses" do {:ok, activity} = CommonAPI.post(other_user, %{"status" => "toot"}) {:ok, report_activity} = - CommonAPI.report(user, %{"account_id" => other_user.id, "status_ids" => [activity.id]}) + CommonAPI.report(user, %{account_id: other_user.id, status_ids: [activity.id]}) other_user = Pleroma.User.get_by_id(other_user.id) @@ -81,7 +81,7 @@ test "renders report's state" do user = insert(:user) other_user = insert(:user) - {:ok, activity} = CommonAPI.report(user, %{"account_id" => other_user.id}) + {:ok, activity} = CommonAPI.report(user, %{account_id: other_user.id}) {:ok, activity} = CommonAPI.update_report_state(activity.id, "closed") assert %{state: "closed"} = @@ -94,8 +94,8 @@ test "renders report description" do {:ok, activity} = CommonAPI.report(user, %{ - "account_id" => other_user.id, - "comment" => "posts are too good for this instance" + account_id: other_user.id, + comment: "posts are too good for this instance" }) assert %{content: "posts are too good for this instance"} = @@ -108,8 +108,8 @@ test "sanitizes report description" do {:ok, activity} = CommonAPI.report(user, %{ - "account_id" => other_user.id, - "comment" => "" + account_id: other_user.id, + comment: "" }) data = Map.put(activity.data, "content", "") @@ -125,8 +125,8 @@ test "doesn't error out when the user doesn't exists" do {:ok, activity} = CommonAPI.report(user, %{ - "account_id" => other_user.id, - "comment" => "" + account_id: other_user.id, + comment: "" }) Pleroma.User.delete(other_user) diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 1758662b0..c6ccc02c4 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -485,9 +485,9 @@ test "creates a report" do comment = "foobar" report_data = %{ - "account_id" => target_user.id, - "comment" => comment, - "status_ids" => [activity.id] + account_id: target_user.id, + comment: comment, + status_ids: [activity.id] } note_obj = %{ @@ -517,9 +517,9 @@ test "updates report state" do {:ok, %Activity{id: report_id}} = CommonAPI.report(reporter, %{ - "account_id" => target_user.id, - "comment" => "I feel offended", - "status_ids" => [activity.id] + account_id: target_user.id, + comment: "I feel offended", + status_ids: [activity.id] }) {:ok, report} = CommonAPI.update_report_state(report_id, "resolved") @@ -538,9 +538,9 @@ test "does not update report state when state is unsupported" do {:ok, %Activity{id: report_id}} = CommonAPI.report(reporter, %{ - "account_id" => target_user.id, - "comment" => "I feel offended", - "status_ids" => [activity.id] + account_id: target_user.id, + comment: "I feel offended", + status_ids: [activity.id] }) assert CommonAPI.update_report_state(report_id, "test") == {:error, "Unsupported state"} @@ -552,16 +552,16 @@ test "updates state of multiple reports" do {:ok, %Activity{id: first_report_id}} = CommonAPI.report(reporter, %{ - "account_id" => target_user.id, - "comment" => "I feel offended", - "status_ids" => [activity.id] + account_id: target_user.id, + comment: "I feel offended", + status_ids: [activity.id] }) {:ok, %Activity{id: second_report_id}} = CommonAPI.report(reporter, %{ - "account_id" => target_user.id, - "comment" => "I feel very offended!", - "status_ids" => [activity.id] + account_id: target_user.id, + comment: "I feel very offended!", + status_ids: [activity.id] }) {:ok, report_ids} = diff --git a/test/web/mastodon_api/controllers/report_controller_test.exs b/test/web/mastodon_api/controllers/report_controller_test.exs index 34ec8119e..21b037237 100644 --- a/test/web/mastodon_api/controllers/report_controller_test.exs +++ b/test/web/mastodon_api/controllers/report_controller_test.exs @@ -22,8 +22,9 @@ defmodule Pleroma.Web.MastodonAPI.ReportControllerTest do test "submit a basic report", %{conn: conn, target_user: target_user} do assert %{"action_taken" => false, "id" => _} = conn + |> put_req_header("content-type", "application/json") |> post("/api/v1/reports", %{"account_id" => target_user.id}) - |> json_response(200) + |> json_response_and_validate_schema(200) end test "submit a report with statuses and comment", %{ @@ -33,23 +34,25 @@ test "submit a report with statuses and comment", %{ } do assert %{"action_taken" => false, "id" => _} = conn + |> put_req_header("content-type", "application/json") |> post("/api/v1/reports", %{ "account_id" => target_user.id, "status_ids" => [activity.id], "comment" => "bad status!", "forward" => "false" }) - |> json_response(200) + |> json_response_and_validate_schema(200) end test "account_id is required", %{ conn: conn, activity: activity } do - assert %{"error" => "Valid `account_id` required"} = + assert %{"error" => "Missing field: account_id."} = conn + |> put_req_header("content-type", "application/json") |> post("/api/v1/reports", %{"status_ids" => [activity.id]}) - |> json_response(400) + |> json_response_and_validate_schema(400) end test "comment must be up to the size specified in the config", %{ @@ -63,17 +66,21 @@ test "comment must be up to the size specified in the config", %{ assert ^error = conn + |> put_req_header("content-type", "application/json") |> post("/api/v1/reports", %{"account_id" => target_user.id, "comment" => comment}) - |> json_response(400) + |> json_response_and_validate_schema(400) end test "returns error when account is not exist", %{ conn: conn, activity: activity } do - conn = post(conn, "/api/v1/reports", %{"status_ids" => [activity.id], "account_id" => "foo"}) + conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/reports", %{"status_ids" => [activity.id], "account_id" => "foo"}) - assert json_response(conn, 400) == %{"error" => "Account not found"} + assert json_response_and_validate_schema(conn, 400) == %{"error" => "Account not found"} end test "doesn't fail if an admin has no email", %{conn: conn, target_user: target_user} do @@ -81,7 +88,8 @@ test "doesn't fail if an admin has no email", %{conn: conn, target_user: target_ assert %{"action_taken" => false, "id" => _} = conn + |> put_req_header("content-type", "application/json") |> post("/api/v1/reports", %{"account_id" => target_user.id}) - |> json_response(200) + |> json_response_and_validate_schema(200) end end From 4b3298133b78ad67b61b07e2f267e5587ceef7bf Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 28 Apr 2020 10:13:58 -0500 Subject: [PATCH 353/581] Document DELETE /api/v1/notifications/destroy_multiple --- docs/API/differences_in_mastoapi_responses.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index 921995510..289f85930 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -120,6 +120,18 @@ Accepts additional parameters: - `exclude_visibilities`: will exclude the notifications for activities with the given visibilities. The parameter accepts an array of visibility types (`public`, `unlisted`, `private`, `direct`). Usage example: `GET /api/v1/notifications?exclude_visibilities[]=direct&exclude_visibilities[]=private`. - `include_types`: will include the notifications for activities with the given types. The parameter accepts an array of types (`mention`, `follow`, `reblog`, `favourite`, `move`, `pleroma:emoji_reaction`). Usage example: `GET /api/v1/notifications?include_types[]=mention&include_types[]=reblog`. +## DELETE `/api/v1/notifications/destroy_multiple` + +An endpoint to delete multiple statuses by IDs. + +Required parameters: + +- `ids`: array of activity ids + +Usage example: `DELETE /api/v1/notifications/destroy_multiple/?ids[]=1&ids[]=2`. + +Returns on success: 200 OK `{}` + ## POST `/api/v1/statuses` Additional parameters can be added to the JSON body/Form data: From 4c0e53367acd74de04de070a5e33380f5e457163 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Tue, 28 Apr 2020 20:04:25 +0300 Subject: [PATCH 354/581] [#2349] Post-merge fix. --- lib/pleroma/web/api_spec/operations/account_operation.ex | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 2efe6e901..64e2e43c4 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -294,13 +294,13 @@ def unblock_operation do } end - def follows_operation do + def follow_by_uri_operation do %Operation{ tags: ["accounts"], - summary: "Follows", + summary: "Follow by URI", operationId: "AccountController.follows", security: [%{"oAuth" => ["follow", "write:follows"]}], - requestBody: request_body("Parameters", follows_request(), required: true), + requestBody: request_body("Parameters", follow_by_uri_request(), required: true), responses: %{ 200 => Operation.response("Account", "application/json", AccountRelationship), 400 => Operation.response("Error", "application/json", ApiError), @@ -615,7 +615,7 @@ defp array_of_relationships do } end - defp follows_request do + defp follow_by_uri_request do %Schema{ title: "AccountFollowsRequest", description: "POST body for muting an account", From 5238ae3dd3bfba9ff84d5f47e2419227fc7c5d9a Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 28 Apr 2020 21:27:54 +0400 Subject: [PATCH 355/581] Add OpenAPI spec for NotificationController --- lib/pleroma/web/api_spec/helpers.ex | 8 + .../api_spec/operations/account_operation.ex | 4 +- .../operations/domain_block_operation.ex | 8 +- .../operations/notification_operation.ex | 202 ++++++++++++++++++ .../controllers/notification_controller.ex | 24 ++- lib/pleroma/web/router.ex | 2 +- .../notification_controller_test.exs | 181 ++++++++-------- 7 files changed, 325 insertions(+), 104 deletions(-) create mode 100644 lib/pleroma/web/api_spec/operations/notification_operation.ex diff --git a/lib/pleroma/web/api_spec/helpers.ex b/lib/pleroma/web/api_spec/helpers.ex index ce40fb9e8..df0804486 100644 --- a/lib/pleroma/web/api_spec/helpers.ex +++ b/lib/pleroma/web/api_spec/helpers.ex @@ -46,4 +46,12 @@ def pagination_params do ) ] end + + def empty_object_response do + Operation.response("Empty object", "application/json", %Schema{type: :object, example: %{}}) + end + + def empty_array_response do + Operation.response("Empty array", "application/json", %Schema{type: :array, example: []}) + end end diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 2efe6e901..6fb6e627b 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -343,7 +343,7 @@ def endorsements_operation do description: "Not implemented", security: [%{"oAuth" => ["read:accounts"]}], responses: %{ - 200 => Operation.response("Empry array", "application/json", %Schema{type: :array}) + 200 => empty_array_response() } } end @@ -355,7 +355,7 @@ def identity_proofs_operation do operationId: "AccountController.identity_proofs", description: "Not implemented", responses: %{ - 200 => Operation.response("Empry array", "application/json", %Schema{type: :array}) + 200 => empty_array_response() } } end diff --git a/lib/pleroma/web/api_spec/operations/domain_block_operation.ex b/lib/pleroma/web/api_spec/operations/domain_block_operation.ex index 3b7f51ceb..049bcf931 100644 --- a/lib/pleroma/web/api_spec/operations/domain_block_operation.ex +++ b/lib/pleroma/web/api_spec/operations/domain_block_operation.ex @@ -5,7 +5,7 @@ defmodule Pleroma.Web.ApiSpec.DomainBlockOperation do alias OpenApiSpex.Operation alias OpenApiSpex.Schema - alias Pleroma.Web.ApiSpec.Helpers + import Pleroma.Web.ApiSpec.Helpers def open_api_operation(action) do operation = String.to_existing_atom("#{action}_operation") @@ -46,9 +46,7 @@ def create_operation do operationId: "DomainBlockController.create", requestBody: domain_block_request(), security: [%{"oAuth" => ["follow", "write:blocks"]}], - responses: %{ - 200 => Operation.response("Empty object", "application/json", %Schema{type: :object}) - } + responses: %{200 => empty_object_response()} } end @@ -67,7 +65,7 @@ def delete_operation do end defp domain_block_request do - Helpers.request_body( + request_body( "Parameters", %Schema{ type: :object, diff --git a/lib/pleroma/web/api_spec/operations/notification_operation.ex b/lib/pleroma/web/api_spec/operations/notification_operation.ex new file mode 100644 index 000000000..c6514f3f2 --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/notification_operation.ex @@ -0,0 +1,202 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.NotificationOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.Account + alias Pleroma.Web.ApiSpec.Schemas.ApiError + alias Pleroma.Web.ApiSpec.Schemas.BooleanLike + alias Pleroma.Web.ApiSpec.Schemas.Status + alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope + + 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{ + tags: ["Notifications"], + summary: "Get all notifications", + description: + "Notifications concerning the user. This API returns Link headers containing links to the next/previous page. However, the links can also be constructed dynamically using query params and `id` values.", + operationId: "NotificationController.index", + security: [%{"oAuth" => ["read:notifications"]}], + parameters: + [ + Operation.parameter( + :exclude_types, + :query, + %Schema{type: :array, items: notification_type()}, + "Array of types to exclude" + ), + Operation.parameter( + :account_id, + :query, + %Schema{type: :string}, + "Return only notifications received from this account" + ), + Operation.parameter( + :exclude_visibilities, + :query, + %Schema{type: :array, items: VisibilityScope}, + "Exclude the notifications for activities with the given visibilities" + ), + Operation.parameter( + :include_types, + :query, + %Schema{type: :array, items: notification_type()}, + "Include the notifications for activities with the given types" + ), + Operation.parameter( + :with_muted, + :query, + BooleanLike, + "Include the notifications from muted users" + ) + ] ++ pagination_params(), + responses: %{ + 200 => + Operation.response("Array of notifications", "application/json", %Schema{ + type: :array, + items: notification() + }), + 404 => Operation.response("Error", "application/json", ApiError) + } + } + end + + def show_operation do + %Operation{ + tags: ["Notifications"], + summary: "Get a single notification", + description: "View information about a notification with a given ID.", + operationId: "NotificationController.show", + security: [%{"oAuth" => ["read:notifications"]}], + parameters: [id_param()], + responses: %{ + 200 => Operation.response("Notification", "application/json", notification()) + } + } + end + + def clear_operation do + %Operation{ + tags: ["Notifications"], + summary: "Dismiss all notifications", + description: "Clear all notifications from the server.", + operationId: "NotificationController.clear", + security: [%{"oAuth" => ["write:notifications"]}], + responses: %{200 => empty_object_response()} + } + end + + def dismiss_operation do + %Operation{ + tags: ["Notifications"], + summary: "Dismiss a single notification", + description: "Clear a single notification from the server.", + operationId: "NotificationController.dismiss", + parameters: [id_param()], + security: [%{"oAuth" => ["write:notifications"]}], + responses: %{200 => empty_object_response()} + } + end + + def dismiss_via_body_operation do + %Operation{ + tags: ["Notifications"], + summary: "Dismiss a single notification", + deprecated: true, + description: "Clear a single notification from the server.", + operationId: "NotificationController.dismiss_via_body", + requestBody: + request_body( + "Parameters", + %Schema{type: :object, properties: %{id: %Schema{type: :string}}}, + required: true + ), + security: [%{"oAuth" => ["write:notifications"]}], + responses: %{200 => empty_object_response()} + } + end + + def destroy_multiple_operation do + %Operation{ + tags: ["Notifications"], + summary: "Dismiss multiple notifications", + operationId: "NotificationController.destroy_multiple", + security: [%{"oAuth" => ["write:notifications"]}], + parameters: [ + Operation.parameter( + :ids, + :query, + %Schema{type: :array, items: %Schema{type: :string}}, + "Array of notification IDs to dismiss", + required: true + ) + ], + responses: %{200 => empty_object_response()} + } + end + + defp notification do + %Schema{ + title: "Notification", + description: "Response schema for a notification", + type: :object, + properties: %{ + id: %Schema{type: :string}, + type: notification_type(), + created_at: %Schema{type: :string, format: :"date-time"}, + account: %Schema{ + allOf: [Account], + description: "The account that performed the action that generated the notification." + }, + status: %Schema{ + allOf: [Status], + description: + "Status that was the object of the notification, e.g. in mentions, reblogs, favourites, or polls.", + nullable: true + } + }, + example: %{ + "id" => "34975861", + "type" => "mention", + "created_at" => "2019-11-23T07:49:02.064Z", + "account" => Account.schema().example, + "status" => Status.schema().example + } + } + end + + defp notification_type do + %Schema{ + type: :string, + enum: ["follow", "favourite", "reblog", "mention", "poll", "pleroma:emoji_reaction", "move"], + description: """ + The type of event that resulted in the notification. + + - `follow` - Someone followed you + - `mention` - Someone mentioned you in their status + - `reblog` - Someone boosted one of your statuses + - `favourite` - Someone favourited one of your statuses + - `poll` - A poll you have voted in or created has ended + - `move` - Someone moved their account + - `pleroma:emoji_reaction` - Someone reacted with emoji to your status + """ + } + end + + defp id_param do + Operation.parameter(:id, :path, :string, "Notification ID", + example: "123", + required: true + ) + end +end diff --git a/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex b/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex index 7fb536b09..dcb421756 100644 --- a/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex @@ -13,6 +13,8 @@ defmodule Pleroma.Web.MastodonAPI.NotificationController do @oauth_read_actions [:show, :index] + plug(OpenApiSpex.Plug.CastAndValidate, render_error: Pleroma.Web.ApiSpec.RenderError) + plug( OAuthScopesPlug, %{scopes: ["read:notifications"]} when action in @oauth_read_actions @@ -22,14 +24,16 @@ defmodule Pleroma.Web.MastodonAPI.NotificationController do plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug) + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.NotificationOperation + # GET /api/v1/notifications - def index(conn, %{"account_id" => account_id} = params) do + def index(conn, %{account_id: account_id} = params) do case Pleroma.User.get_cached_by_id(account_id) do %{ap_id: account_ap_id} -> params = params - |> Map.delete("account_id") - |> Map.put("account_ap_id", account_ap_id) + |> Map.delete(:account_id) + |> Map.put(:account_ap_id, account_ap_id) index(conn, params) @@ -41,6 +45,7 @@ def index(conn, %{"account_id" => account_id} = params) do end def index(%{assigns: %{user: user}} = conn, params) do + params = Map.new(params, fn {k, v} -> {to_string(k), v} end) notifications = MastodonAPI.get_notifications(user, params) conn @@ -53,7 +58,7 @@ def index(%{assigns: %{user: user}} = conn, params) do end # GET /api/v1/notifications/:id - def show(%{assigns: %{user: user}} = conn, %{"id" => id}) do + def show(%{assigns: %{user: user}} = conn, %{id: id}) do with {:ok, notification} <- Notification.get(user, id) do render(conn, "show.json", notification: notification, for: user) else @@ -71,8 +76,8 @@ def clear(%{assigns: %{user: user}} = conn, _params) do end # POST /api/v1/notifications/:id/dismiss - # POST /api/v1/notifications/dismiss (deprecated) - def dismiss(%{assigns: %{user: user}} = conn, %{"id" => id} = _params) do + + def dismiss(%{assigns: %{user: user}} = conn, %{id: id} = _params) do with {:ok, _notif} <- Notification.dismiss(user, id) do json(conn, %{}) else @@ -83,8 +88,13 @@ def dismiss(%{assigns: %{user: user}} = conn, %{"id" => id} = _params) do end end + # POST /api/v1/notifications/dismiss (deprecated) + def dismiss_via_body(%{body_params: params} = conn, _) do + dismiss(conn, params) + end + # DELETE /api/v1/notifications/destroy_multiple - def destroy_multiple(%{assigns: %{user: user}} = conn, %{"ids" => ids} = _params) do + def destroy_multiple(%{assigns: %{user: user}} = conn, %{ids: ids} = _params) do Notification.destroy_multiple(user, ids) json(conn, %{}) end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 153802a43..fe984b06c 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -344,7 +344,7 @@ defmodule Pleroma.Web.Router do post("/notifications/clear", NotificationController, :clear) delete("/notifications/destroy_multiple", NotificationController, :destroy_multiple) # Deprecated: was removed in Mastodon v3, use `/notifications/:id/dismiss` instead - post("/notifications/dismiss", NotificationController, :dismiss) + post("/notifications/dismiss", NotificationController, :dismiss_via_body) get("/scheduled_statuses", ScheduledActivityController, :index) get("/scheduled_statuses/:id", ScheduledActivityController, :show) diff --git a/test/web/mastodon_api/controllers/notification_controller_test.exs b/test/web/mastodon_api/controllers/notification_controller_test.exs index 8c815b415..db380f76a 100644 --- a/test/web/mastodon_api/controllers/notification_controller_test.exs +++ b/test/web/mastodon_api/controllers/notification_controller_test.exs @@ -25,7 +25,7 @@ test "does NOT render account/pleroma/relationship if this is disabled by defaul conn |> assign(:user, user) |> get("/api/v1/notifications") - |> json_response(200) + |> json_response_and_validate_schema(200) assert Enum.all?(response, fn n -> get_in(n, ["account", "pleroma", "relationship"]) == %{} @@ -50,7 +50,9 @@ test "list of notifications" do user.ap_id }\" rel=\"ugc\">@#{user.nickname}
" - assert [%{"status" => %{"content" => response}} | _rest] = json_response(conn, 200) + assert [%{"status" => %{"content" => response}} | _rest] = + json_response_and_validate_schema(conn, 200) + assert response == expected_response end @@ -69,7 +71,7 @@ test "getting a single notification" do user.ap_id }\" rel=\"ugc\">@#{user.nickname}" - assert %{"status" => %{"content" => response}} = json_response(conn, 200) + assert %{"status" => %{"content" => response}} = json_response_and_validate_schema(conn, 200) assert response == expected_response end @@ -84,9 +86,10 @@ test "dismissing a single notification (deprecated endpoint)" do conn = conn |> assign(:user, user) - |> post("/api/v1/notifications/dismiss", %{"id" => notification.id}) + |> put_req_header("content-type", "application/json") + |> post("/api/v1/notifications/dismiss", %{"id" => to_string(notification.id)}) - assert %{} = json_response(conn, 200) + assert %{} = json_response_and_validate_schema(conn, 200) end test "dismissing a single notification" do @@ -102,7 +105,7 @@ test "dismissing a single notification" do |> assign(:user, user) |> post("/api/v1/notifications/#{notification.id}/dismiss") - assert %{} = json_response(conn, 200) + assert %{} = json_response_and_validate_schema(conn, 200) end test "clearing all notifications" do @@ -115,11 +118,11 @@ test "clearing all notifications" do ret_conn = post(conn, "/api/v1/notifications/clear") - assert %{} = json_response(ret_conn, 200) + assert %{} = json_response_and_validate_schema(ret_conn, 200) ret_conn = get(conn, "/api/v1/notifications") - assert all = json_response(ret_conn, 200) + assert all = json_response_and_validate_schema(ret_conn, 200) assert all == [] end @@ -143,7 +146,7 @@ test "paginates notifications using min_id, since_id, max_id, and limit" do result = conn |> get("/api/v1/notifications?limit=2&min_id=#{notification1_id}") - |> json_response(:ok) + |> json_response_and_validate_schema(:ok) assert [%{"id" => ^notification3_id}, %{"id" => ^notification2_id}] = result @@ -151,7 +154,7 @@ test "paginates notifications using min_id, since_id, max_id, and limit" do result = conn |> get("/api/v1/notifications?limit=2&since_id=#{notification1_id}") - |> json_response(:ok) + |> json_response_and_validate_schema(:ok) assert [%{"id" => ^notification4_id}, %{"id" => ^notification3_id}] = result @@ -159,7 +162,7 @@ test "paginates notifications using min_id, since_id, max_id, and limit" do result = conn |> get("/api/v1/notifications?limit=2&max_id=#{notification4_id}") - |> json_response(:ok) + |> json_response_and_validate_schema(:ok) assert [%{"id" => ^notification3_id}, %{"id" => ^notification2_id}] = result end @@ -181,36 +184,28 @@ test "filters notifications for mentions" do {:ok, private_activity} = CommonAPI.post(other_user, %{"status" => "@#{user.nickname}", "visibility" => "private"}) - conn_res = - get(conn, "/api/v1/notifications", %{ - exclude_visibilities: ["public", "unlisted", "private"] - }) + query = params_to_query(%{exclude_visibilities: ["public", "unlisted", "private"]}) + conn_res = get(conn, "/api/v1/notifications?" <> query) - assert [%{"status" => %{"id" => id}}] = json_response(conn_res, 200) + assert [%{"status" => %{"id" => id}}] = json_response_and_validate_schema(conn_res, 200) assert id == direct_activity.id - conn_res = - get(conn, "/api/v1/notifications", %{ - exclude_visibilities: ["public", "unlisted", "direct"] - }) + query = params_to_query(%{exclude_visibilities: ["public", "unlisted", "direct"]}) + conn_res = get(conn, "/api/v1/notifications?" <> query) - assert [%{"status" => %{"id" => id}}] = json_response(conn_res, 200) + assert [%{"status" => %{"id" => id}}] = json_response_and_validate_schema(conn_res, 200) assert id == private_activity.id - conn_res = - get(conn, "/api/v1/notifications", %{ - exclude_visibilities: ["public", "private", "direct"] - }) + query = params_to_query(%{exclude_visibilities: ["public", "private", "direct"]}) + conn_res = get(conn, "/api/v1/notifications?" <> query) - assert [%{"status" => %{"id" => id}}] = json_response(conn_res, 200) + assert [%{"status" => %{"id" => id}}] = json_response_and_validate_schema(conn_res, 200) assert id == unlisted_activity.id - conn_res = - get(conn, "/api/v1/notifications", %{ - exclude_visibilities: ["unlisted", "private", "direct"] - }) + query = params_to_query(%{exclude_visibilities: ["unlisted", "private", "direct"]}) + conn_res = get(conn, "/api/v1/notifications?" <> query) - assert [%{"status" => %{"id" => id}}] = json_response(conn_res, 200) + assert [%{"status" => %{"id" => id}}] = json_response_and_validate_schema(conn_res, 200) assert id == public_activity.id end @@ -237,8 +232,8 @@ test "filters notifications for Like activities" do activity_ids = conn - |> get("/api/v1/notifications", %{exclude_visibilities: ["direct"]}) - |> json_response(200) + |> get("/api/v1/notifications?exclude_visibilities[]=direct") + |> json_response_and_validate_schema(200) |> Enum.map(& &1["status"]["id"]) assert public_activity.id in activity_ids @@ -248,8 +243,8 @@ test "filters notifications for Like activities" do activity_ids = conn - |> get("/api/v1/notifications", %{exclude_visibilities: ["unlisted"]}) - |> json_response(200) + |> get("/api/v1/notifications?exclude_visibilities[]=unlisted") + |> json_response_and_validate_schema(200) |> Enum.map(& &1["status"]["id"]) assert public_activity.id in activity_ids @@ -259,8 +254,8 @@ test "filters notifications for Like activities" do activity_ids = conn - |> get("/api/v1/notifications", %{exclude_visibilities: ["private"]}) - |> json_response(200) + |> get("/api/v1/notifications?exclude_visibilities[]=private") + |> json_response_and_validate_schema(200) |> Enum.map(& &1["status"]["id"]) assert public_activity.id in activity_ids @@ -270,8 +265,8 @@ test "filters notifications for Like activities" do activity_ids = conn - |> get("/api/v1/notifications", %{exclude_visibilities: ["public"]}) - |> json_response(200) + |> get("/api/v1/notifications?exclude_visibilities[]=public") + |> json_response_and_validate_schema(200) |> Enum.map(& &1["status"]["id"]) refute public_activity.id in activity_ids @@ -295,8 +290,8 @@ test "filters notifications for Announce activities" do activity_ids = conn - |> get("/api/v1/notifications", %{exclude_visibilities: ["unlisted"]}) - |> json_response(200) + |> get("/api/v1/notifications?exclude_visibilities[]=unlisted") + |> json_response_and_validate_schema(200) |> Enum.map(& &1["status"]["id"]) assert public_activity.id in activity_ids @@ -319,25 +314,27 @@ test "filters notifications using exclude_types" do reblog_notification_id = get_notification_id_by_activity(reblog_activity) follow_notification_id = get_notification_id_by_activity(follow_activity) - conn_res = - get(conn, "/api/v1/notifications", %{exclude_types: ["mention", "favourite", "reblog"]}) + query = params_to_query(%{exclude_types: ["mention", "favourite", "reblog"]}) + conn_res = get(conn, "/api/v1/notifications?" <> query) - assert [%{"id" => ^follow_notification_id}] = json_response(conn_res, 200) + assert [%{"id" => ^follow_notification_id}] = json_response_and_validate_schema(conn_res, 200) - conn_res = - get(conn, "/api/v1/notifications", %{exclude_types: ["favourite", "reblog", "follow"]}) + query = params_to_query(%{exclude_types: ["favourite", "reblog", "follow"]}) + conn_res = get(conn, "/api/v1/notifications?" <> query) - assert [%{"id" => ^mention_notification_id}] = json_response(conn_res, 200) + assert [%{"id" => ^mention_notification_id}] = + json_response_and_validate_schema(conn_res, 200) - conn_res = - get(conn, "/api/v1/notifications", %{exclude_types: ["reblog", "follow", "mention"]}) + query = params_to_query(%{exclude_types: ["reblog", "follow", "mention"]}) + conn_res = get(conn, "/api/v1/notifications?" <> query) - assert [%{"id" => ^favorite_notification_id}] = json_response(conn_res, 200) + assert [%{"id" => ^favorite_notification_id}] = + json_response_and_validate_schema(conn_res, 200) - conn_res = - get(conn, "/api/v1/notifications", %{exclude_types: ["follow", "mention", "favourite"]}) + query = params_to_query(%{exclude_types: ["follow", "mention", "favourite"]}) + conn_res = get(conn, "/api/v1/notifications?" <> query) - assert [%{"id" => ^reblog_notification_id}] = json_response(conn_res, 200) + assert [%{"id" => ^reblog_notification_id}] = json_response_and_validate_schema(conn_res, 200) end test "filters notifications using include_types" do @@ -355,32 +352,34 @@ test "filters notifications using include_types" do reblog_notification_id = get_notification_id_by_activity(reblog_activity) follow_notification_id = get_notification_id_by_activity(follow_activity) - conn_res = get(conn, "/api/v1/notifications", %{include_types: ["follow"]}) + conn_res = get(conn, "/api/v1/notifications?include_types[]=follow") - assert [%{"id" => ^follow_notification_id}] = json_response(conn_res, 200) + assert [%{"id" => ^follow_notification_id}] = json_response_and_validate_schema(conn_res, 200) - conn_res = get(conn, "/api/v1/notifications", %{include_types: ["mention"]}) + conn_res = get(conn, "/api/v1/notifications?include_types[]=mention") - assert [%{"id" => ^mention_notification_id}] = json_response(conn_res, 200) + assert [%{"id" => ^mention_notification_id}] = + json_response_and_validate_schema(conn_res, 200) - conn_res = get(conn, "/api/v1/notifications", %{include_types: ["favourite"]}) + conn_res = get(conn, "/api/v1/notifications?include_types[]=favourite") - assert [%{"id" => ^favorite_notification_id}] = json_response(conn_res, 200) + assert [%{"id" => ^favorite_notification_id}] = + json_response_and_validate_schema(conn_res, 200) - conn_res = get(conn, "/api/v1/notifications", %{include_types: ["reblog"]}) + conn_res = get(conn, "/api/v1/notifications?include_types[]=reblog") - assert [%{"id" => ^reblog_notification_id}] = json_response(conn_res, 200) + assert [%{"id" => ^reblog_notification_id}] = json_response_and_validate_schema(conn_res, 200) - result = conn |> get("/api/v1/notifications") |> json_response(200) + result = conn |> get("/api/v1/notifications") |> json_response_and_validate_schema(200) assert length(result) == 4 + query = params_to_query(%{include_types: ["follow", "mention", "favourite", "reblog"]}) + result = conn - |> get("/api/v1/notifications", %{ - include_types: ["follow", "mention", "favourite", "reblog"] - }) - |> json_response(200) + |> get("/api/v1/notifications?" <> query) + |> json_response_and_validate_schema(200) assert length(result) == 4 end @@ -402,7 +401,7 @@ test "destroy multiple" do result = conn |> get("/api/v1/notifications") - |> json_response(:ok) + |> json_response_and_validate_schema(:ok) assert [%{"id" => ^notification2_id}, %{"id" => ^notification1_id}] = result @@ -414,22 +413,19 @@ test "destroy multiple" do result = conn2 |> get("/api/v1/notifications") - |> json_response(:ok) + |> json_response_and_validate_schema(:ok) assert [%{"id" => ^notification4_id}, %{"id" => ^notification3_id}] = result - conn_destroy = - conn - |> delete("/api/v1/notifications/destroy_multiple", %{ - "ids" => [notification1_id, notification2_id] - }) + query = params_to_query(%{ids: [notification1_id, notification2_id]}) + conn_destroy = delete(conn, "/api/v1/notifications/destroy_multiple?" <> query) - assert json_response(conn_destroy, 200) == %{} + assert json_response_and_validate_schema(conn_destroy, 200) == %{} result = conn2 |> get("/api/v1/notifications") - |> json_response(:ok) + |> json_response_and_validate_schema(:ok) assert [%{"id" => ^notification4_id}, %{"id" => ^notification3_id}] = result end @@ -443,13 +439,13 @@ test "doesn't see notifications after muting user with notifications" do ret_conn = get(conn, "/api/v1/notifications") - assert length(json_response(ret_conn, 200)) == 1 + assert length(json_response_and_validate_schema(ret_conn, 200)) == 1 {:ok, _user_relationships} = User.mute(user, user2) conn = get(conn, "/api/v1/notifications") - assert json_response(conn, 200) == [] + assert json_response_and_validate_schema(conn, 200) == [] end test "see notifications after muting user without notifications" do @@ -461,13 +457,13 @@ test "see notifications after muting user without notifications" do ret_conn = get(conn, "/api/v1/notifications") - assert length(json_response(ret_conn, 200)) == 1 + assert length(json_response_and_validate_schema(ret_conn, 200)) == 1 {:ok, _user_relationships} = User.mute(user, user2, false) conn = get(conn, "/api/v1/notifications") - assert length(json_response(conn, 200)) == 1 + assert length(json_response_and_validate_schema(conn, 200)) == 1 end test "see notifications after muting user with notifications and with_muted parameter" do @@ -479,13 +475,13 @@ test "see notifications after muting user with notifications and with_muted para ret_conn = get(conn, "/api/v1/notifications") - assert length(json_response(ret_conn, 200)) == 1 + assert length(json_response_and_validate_schema(ret_conn, 200)) == 1 {:ok, _user_relationships} = User.mute(user, user2) - conn = get(conn, "/api/v1/notifications", %{"with_muted" => "true"}) + conn = get(conn, "/api/v1/notifications?with_muted=true") - assert length(json_response(conn, 200)) == 1 + assert length(json_response_and_validate_schema(conn, 200)) == 1 end @tag capture_log: true @@ -512,7 +508,7 @@ test "see move notifications" do conn = get(conn, "/api/v1/notifications") - assert length(json_response(conn, 200)) == 1 + assert length(json_response_and_validate_schema(conn, 200)) == 1 end describe "link headers" do @@ -538,10 +534,10 @@ test "preserves parameters in link headers" do conn = conn |> assign(:user, user) - |> get("/api/v1/notifications", %{media_only: true}) + |> get("/api/v1/notifications?limit=5") assert [link_header] = get_resp_header(conn, "link") - assert link_header =~ ~r/media_only=true/ + assert link_header =~ ~r/limit=5/ assert link_header =~ ~r/min_id=#{notification2.id}/ assert link_header =~ ~r/max_id=#{notification1.id}/ end @@ -560,14 +556,14 @@ test "account_id" do assert [%{"account" => %{"id" => ^account_id}}] = conn |> assign(:user, user) - |> get("/api/v1/notifications", %{account_id: account_id}) - |> json_response(200) + |> get("/api/v1/notifications?account_id=#{account_id}") + |> json_response_and_validate_schema(200) assert %{"error" => "Account is not found"} = conn |> assign(:user, user) - |> get("/api/v1/notifications", %{account_id: "cofe"}) - |> json_response(404) + |> get("/api/v1/notifications?account_id=cofe") + |> json_response_and_validate_schema(404) end end @@ -577,4 +573,11 @@ defp get_notification_id_by_activity(%{id: id}) do |> Map.get(:id) |> to_string() end + + defp params_to_query(%{} = params) do + Enum.map_join(params, "&", fn + {k, v} when is_list(v) -> Enum.map_join(v, "&", &"#{k}[]=#{&1}") + {k, v} -> k <> "=" <> v + end) + end end From 7bd187bc5e2e589f3ba639bbc0ab2feea905a9b0 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 29 Apr 2020 08:13:10 +0300 Subject: [PATCH 356/581] added test --- test/web/activity_pub/transmogrifier_test.exs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 0404aae6a..0800305ce 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -1221,6 +1221,17 @@ test "it rejects activities without a valid ID" do :error = Transmogrifier.handle_incoming(data) end + test "skip converting the content when it is nil" do + object_id = "https://peertube.social/videos/watch/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe" + + {:ok, object} = Fetcher.fetch_and_contain_remote_object_from_id(object_id) + + result = + Pleroma.Web.ActivityPub.Transmogrifier.fix_object(Map.merge(object, %{"content" => nil})) + + assert result["content"] == nil + end + test "it converts content of object to html" do object_id = "https://peertube.social/videos/watch/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe" From b8056e69e0a2505fc466dd5742b0986b7c1895ae Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 29 Apr 2020 19:08:08 +0200 Subject: [PATCH 357/581] Object Validator Types: Add Recipients. --- .../object_validators/types/recipients.ex | 34 +++++++++++++++++++ .../types/recipients_test.exs | 27 +++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 lib/pleroma/web/activity_pub/object_validators/types/recipients.ex create mode 100644 test/web/activity_pub/object_validators/types/recipients_test.exs diff --git a/lib/pleroma/web/activity_pub/object_validators/types/recipients.ex b/lib/pleroma/web/activity_pub/object_validators/types/recipients.ex new file mode 100644 index 000000000..48fe61e1a --- /dev/null +++ b/lib/pleroma/web/activity_pub/object_validators/types/recipients.ex @@ -0,0 +1,34 @@ +defmodule Pleroma.Web.ActivityPub.ObjectValidators.Types.Recipients do + use Ecto.Type + + alias Pleroma.Web.ActivityPub.ObjectValidators.Types.ObjectID + + def type, do: {:array, ObjectID} + + def cast(object) when is_binary(object) do + cast([object]) + end + + def cast(data) when is_list(data) do + data + |> Enum.reduce({:ok, []}, fn element, acc -> + case {acc, ObjectID.cast(element)} do + {:error, _} -> :error + {_, :error} -> :error + {{:ok, list}, {:ok, id}} -> {:ok, [id | list]} + end + end) + end + + def cast(_) do + :error + end + + def dump(data) do + {:ok, data} + end + + def load(data) do + {:ok, data} + end +end diff --git a/test/web/activity_pub/object_validators/types/recipients_test.exs b/test/web/activity_pub/object_validators/types/recipients_test.exs new file mode 100644 index 000000000..f278f039b --- /dev/null +++ b/test/web/activity_pub/object_validators/types/recipients_test.exs @@ -0,0 +1,27 @@ +defmodule Pleroma.Web.ObjectValidators.Types.RecipientsTest do + alias Pleroma.Web.ActivityPub.ObjectValidators.Types.Recipients + use Pleroma.DataCase + + test "it asserts that all elements of the list are object ids" do + list = ["https://lain.com/users/lain", "invalid"] + + assert :error == Recipients.cast(list) + end + + test "it works with a list" do + list = ["https://lain.com/users/lain"] + assert {:ok, list} == Recipients.cast(list) + end + + test "it works with a list with whole objects" do + list = ["https://lain.com/users/lain", %{"id" => "https://gensokyo.2hu/users/raymoo"}] + resulting_list = ["https://gensokyo.2hu/users/raymoo", "https://lain.com/users/lain"] + assert {:ok, resulting_list} == Recipients.cast(list) + end + + test "it turns a single string into a list" do + recipient = "https://lain.com/users/lain" + + assert {:ok, [recipient]} == Recipients.cast(recipient) + end +end From 78c864cbeed8fcdbe80e2842377d4fabc9362f3c Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 29 Apr 2020 19:08:36 +0200 Subject: [PATCH 358/581] LikeValidator: Use Recipients Type. --- .../web/activity_pub/object_validators/like_validator.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/object_validators/like_validator.ex b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex index 49546ceaa..eeb0da192 100644 --- a/lib/pleroma/web/activity_pub/object_validators/like_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex @@ -19,8 +19,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator do field(:object, Types.ObjectID) field(:actor, Types.ObjectID) field(:context, :string) - field(:to, {:array, :string}) - field(:cc, {:array, :string}) + field(:to, Types.Recipients) + field(:cc, Types.Recipients) end def cast_and_validate(data) do From 503de4b8df0bfc34008c3c856edc488633290f0e Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 29 Apr 2020 19:09:51 +0200 Subject: [PATCH 359/581] ObjectValidator: Add validation for `Delete`s. --- lib/pleroma/web/activity_pub/builder.ex | 16 +++++ .../web/activity_pub/object_validator.ex | 17 +++++ .../object_validators/common_validations.ex | 20 ++++++ .../object_validators/delete_validator.ex | 64 ++++++++++++++++++ .../activity_pub/object_validator_test.exs | 67 +++++++++++++++++++ 5 files changed, 184 insertions(+) create mode 100644 lib/pleroma/web/activity_pub/object_validators/delete_validator.ex diff --git a/lib/pleroma/web/activity_pub/builder.ex b/lib/pleroma/web/activity_pub/builder.ex index 429a510b8..5cc46c3ea 100644 --- a/lib/pleroma/web/activity_pub/builder.ex +++ b/lib/pleroma/web/activity_pub/builder.ex @@ -10,6 +10,22 @@ defmodule Pleroma.Web.ActivityPub.Builder do alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Visibility + @spec delete(User.t(), String.t()) :: {:ok, map(), keyword()} + def delete(actor, object_id) do + object = Object.normalize(object_id) + + to = (object.data["to"] || []) ++ (object.data["cc"] || []) + + {:ok, + %{ + "id" => Utils.generate_activity_id(), + "actor" => actor.ap_id, + "object" => object_id, + "to" => to, + "type" => "Delete" + }, []} + end + @spec like(User.t(), Object.t()) :: {:ok, map(), keyword()} def like(actor, object) do object_actor = User.get_cached_by_ap_id(object.data["actor"]) diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index dc4bce059..f476c6f72 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -12,10 +12,21 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do alias Pleroma.Object alias Pleroma.User alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator + alias Pleroma.Web.ActivityPub.ObjectValidators.DeleteValidator @spec validate(map(), keyword()) :: {:ok, map(), keyword()} | {:error, any()} def validate(object, meta) + def validate(%{"type" => "Delete"} = object, meta) do + with {:ok, object} <- + object + |> DeleteValidator.cast_and_validate() + |> Ecto.Changeset.apply_action(:insert) do + object = stringify_keys(object) + {:ok, object, meta} + end + end + def validate(%{"type" => "Like"} = object, meta) do with {:ok, object} <- object |> LikeValidator.cast_and_validate() |> Ecto.Changeset.apply_action(:insert) do @@ -24,6 +35,12 @@ def validate(%{"type" => "Like"} = object, meta) do end end + def stringify_keys(%{__struct__: _} = object) do + object + |> Map.from_struct() + |> stringify_keys + end + def stringify_keys(object) do object |> Map.new(fn {key, val} -> {to_string(key), val} end) diff --git a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex index b479c3918..e115d9526 100644 --- a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex +++ b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex @@ -8,6 +8,26 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations do alias Pleroma.Object alias Pleroma.User + def validate_recipients_presence(cng, fields \\ [:to, :cc]) do + non_empty = + fields + |> Enum.map(fn field -> get_field(cng, field) end) + |> Enum.any?(fn + [] -> false + _ -> true + end) + + if non_empty do + cng + else + fields + |> Enum.reduce(cng, fn field, cng -> + cng + |> add_error(field, "no recipients in any field") + end) + end + end + def validate_actor_presence(cng, field_name \\ :actor) do cng |> validate_change(field_name, fn field_name, actor -> diff --git a/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex new file mode 100644 index 000000000..8dd5c19ad --- /dev/null +++ b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex @@ -0,0 +1,64 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.ObjectValidators.DeleteValidator do + use Ecto.Schema + + alias Pleroma.Web.ActivityPub.ObjectValidators.Types + + import Ecto.Changeset + import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations + + @primary_key false + + embedded_schema do + field(:id, Types.ObjectID, primary_key: true) + field(:type, :string) + field(:actor, Types.ObjectID) + field(:to, Types.Recipients, default: []) + field(:cc, Types.Recipients, default: []) + field(:object, Types.ObjectID) + end + + def cast_data(data) do + %__MODULE__{} + |> cast(data, __schema__(:fields)) + end + + def validate_data(cng) do + cng + |> validate_required([:id, :type, :actor, :to, :cc, :object]) + |> validate_inclusion(:type, ["Delete"]) + |> validate_same_domain() + |> validate_object_presence() + |> validate_recipients_presence() + end + + def validate_same_domain(cng) do + actor_domain = + cng + |> get_field(:actor) + |> URI.parse() + |> (& &1.host).() + + object_domain = + cng + |> get_field(:object) + |> URI.parse() + |> (& &1.host).() + + if object_domain != actor_domain do + cng + |> add_error(:actor, "is not allowed to delete object") + else + cng + end + end + + def cast_and_validate(data) do + data + |> cast_data + |> validate_data + end +end diff --git a/test/web/activity_pub/object_validator_test.exs b/test/web/activity_pub/object_validator_test.exs index 3c5c3696e..64b9ee1ec 100644 --- a/test/web/activity_pub/object_validator_test.exs +++ b/test/web/activity_pub/object_validator_test.exs @@ -1,6 +1,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do use Pleroma.DataCase + alias Pleroma.Web.ActivityPub.Builder alias Pleroma.Web.ActivityPub.ObjectValidator alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator alias Pleroma.Web.ActivityPub.Utils @@ -8,6 +9,72 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do import Pleroma.Factory + describe "deletes" do + setup do + user = insert(:user) + {:ok, post_activity} = CommonAPI.post(user, %{"status" => "cancel me daddy"}) + + {:ok, valid_post_delete, _} = Builder.delete(user, post_activity.data["object"]) + + %{user: user, valid_post_delete: valid_post_delete} + end + + test "it is valid for a post deletion", %{valid_post_delete: valid_post_delete} do + assert match?({:ok, _, _}, ObjectValidator.validate(valid_post_delete, [])) + end + + test "it's invalid if the id is missing", %{valid_post_delete: valid_post_delete} do + no_id = + valid_post_delete + |> Map.delete("id") + + {:error, cng} = ObjectValidator.validate(no_id, []) + + assert {:id, {"can't be blank", [validation: :required]}} in cng.errors + end + + test "it's invalid if the object doesn't exist", %{valid_post_delete: valid_post_delete} do + missing_object = + valid_post_delete + |> Map.put("object", "http://does.not/exist") + + {:error, cng} = ObjectValidator.validate(missing_object, []) + + assert {:object, {"can't find object", []}} in cng.errors + end + + test "it's invalid if the actor of the object and the actor of delete are from different domains", + %{valid_post_delete: valid_post_delete} do + valid_other_actor = + valid_post_delete + |> Map.put("actor", valid_post_delete["actor"] <> "1") + + assert match?({:ok, _, _}, ObjectValidator.validate(valid_other_actor, [])) + + invalid_other_actor = + valid_post_delete + |> Map.put("actor", "https://gensokyo.2hu/users/raymoo") + + {:error, cng} = ObjectValidator.validate(invalid_other_actor, []) + + assert {:actor, {"is not allowed to delete object", []}} in cng.errors + end + + test "it's invalid if all the recipient fields are empty", %{ + valid_post_delete: valid_post_delete + } do + empty_recipients = + valid_post_delete + |> Map.put("to", []) + |> Map.put("cc", []) + + {:error, cng} = ObjectValidator.validate(empty_recipients, []) + + assert {:to, {"no recipients in any field", []}} in cng.errors + assert {:cc, {"no recipients in any field", []}} in cng.errors + end + end + describe "likes" do setup do user = insert(:user) From 8148d76ec5f85083aae9895e79f8d249e1267482 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 29 Apr 2020 14:30:07 +0400 Subject: [PATCH 360/581] Document `captcha_answer_data` parameter --- docs/API/differences_in_mastoapi_responses.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index 289f85930..041563de5 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -202,4 +202,5 @@ Has theses additional parameters (which are the same as in Pleroma-API): - `bio`: optional - `captcha_solution`: optional, contains provider-specific captcha solution, - `captcha_token`: optional, contains provider-specific captcha token +- `captcha_answer_data`: optional, contains provider-specific captcha data - `token`: invite token required when the registrations aren't public. From 2f77842bd3c07d915cd341f7d3ba1f9053cc3a18 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 29 Apr 2020 14:31:13 +0400 Subject: [PATCH 361/581] Fix account registration when captcha is enabled but not provided --- lib/pleroma/web/twitter_api/twitter_api.ex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index cf1d9c74c..a6ef9a310 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -47,9 +47,9 @@ defp validate_captcha(params) do :ok else Pleroma.Captcha.validate( - params.captcha_token, - params.captcha_solution, - params.captcha_answer_data + params[:captcha_token], + params[:captcha_solution], + params[:captcha_answer_data] ) end end From 7b0c8f0fde495e50c5434575c452addeace39e60 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 29 Apr 2020 20:48:08 +0400 Subject: [PATCH 362/581] Add tests for account registration with captcha enabled and improve errors --- lib/pleroma/captcha/captcha.ex | 91 +++++++++------ lib/pleroma/captcha/kocaptcha.ex | 5 +- lib/pleroma/captcha/native.ex | 5 +- .../controllers/account_controller.ex | 24 +--- lib/pleroma/web/twitter_api/twitter_api.ex | 108 +++++++++++------- test/captcha_test.exs | 7 +- test/support/captcha_mock.ex | 6 +- .../controllers/account_controller_test.exs | 88 +++++++++++++- test/web/twitter_api/twitter_api_test.exs | 41 ++++--- 9 files changed, 246 insertions(+), 129 deletions(-) diff --git a/lib/pleroma/captcha/captcha.ex b/lib/pleroma/captcha/captcha.ex index cf75c3adc..e17dc2426 100644 --- a/lib/pleroma/captcha/captcha.ex +++ b/lib/pleroma/captcha/captcha.ex @@ -3,8 +3,6 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Captcha do - import Pleroma.Web.Gettext - alias Calendar.DateTime alias Plug.Crypto.KeyGenerator alias Plug.Crypto.MessageEncryptor @@ -37,19 +35,14 @@ def validate(token, captcha, answer_data) do @doc false def handle_call(:new, _from, state) do - enabled = Pleroma.Config.get([__MODULE__, :enabled]) - - if !enabled do + if not enabled?() do {:reply, %{type: :none}, state} else new_captcha = method().new() - secret_key_base = Pleroma.Config.get!([Pleroma.Web.Endpoint, :secret_key_base]) - # This make salt a little different for two keys - token = new_captcha[:token] - secret = KeyGenerator.generate(secret_key_base, token <> "_encrypt") - sign_secret = KeyGenerator.generate(secret_key_base, token <> "_sign") + {secret, sign_secret} = secret_pair(new_captcha[:token]) + # Basically copy what Phoenix.Token does here, add the time to # the actual data and make it a binary to then encrypt it encrypted_captcha_answer = @@ -71,44 +64,68 @@ def handle_call(:new, _from, state) do @doc false def handle_call({:validate, token, captcha, answer_data}, _from, state) do + {:reply, do_validate(token, captcha, answer_data), state} + end + + def enabled?, do: Pleroma.Config.get([__MODULE__, :enabled], false) + + defp seconds_valid, do: Pleroma.Config.get!([__MODULE__, :seconds_valid]) + + defp secret_pair(token) do secret_key_base = Pleroma.Config.get!([Pleroma.Web.Endpoint, :secret_key_base]) secret = KeyGenerator.generate(secret_key_base, token <> "_encrypt") sign_secret = KeyGenerator.generate(secret_key_base, token <> "_sign") + {secret, sign_secret} + end + + defp do_validate(token, captcha, answer_data) do + with {:ok, %{at: at, answer_data: answer_md5}} <- validate_answer_data(token, answer_data), + :ok <- validate_expiration(at), + :ok <- validate_usage(token), + :ok <- method().validate(token, captcha, answer_md5), + {:ok, _} <- mark_captcha_as_used(token) do + :ok + end + end + + defp validate_answer_data(token, answer_data) do + {secret, sign_secret} = secret_pair(token) + + with false <- is_nil(answer_data), + {:ok, data} <- MessageEncryptor.decrypt(answer_data, secret, sign_secret), + %{at: at, answer_data: answer_md5} <- :erlang.binary_to_term(data) do + {:ok, %{at: at, answer_data: answer_md5}} + else + _ -> {:error, :invalid_answer_data} + end + end + + defp validate_expiration(created_at) do # If the time found is less than (current_time-seconds_valid) then the time has already passed # Later we check that the time found is more than the presumed invalidatation time, that means # that the data is still valid and the captcha can be checked - seconds_valid = Pleroma.Config.get!([Pleroma.Captcha, :seconds_valid]) - valid_if_after = DateTime.subtract!(DateTime.now_utc(), seconds_valid) - result = - with false <- is_nil(answer_data), - {:ok, data} <- MessageEncryptor.decrypt(answer_data, secret, sign_secret), - %{at: at, answer_data: answer_md5} <- :erlang.binary_to_term(data) do - try do - if DateTime.before?(at, valid_if_after), - do: throw({:error, dgettext("errors", "CAPTCHA expired")}) + valid_if_after = DateTime.subtract!(DateTime.now_utc(), seconds_valid()) - if not is_nil(Cachex.get!(:used_captcha_cache, token)), - do: throw({:error, dgettext("errors", "CAPTCHA already used")}) + if DateTime.before?(created_at, valid_if_after) do + {:error, :expired} + else + :ok + end + end - res = method().validate(token, captcha, answer_md5) - # Throw if an error occurs - if res != :ok, do: throw(res) + defp validate_usage(token) do + if is_nil(Cachex.get!(:used_captcha_cache, token)) do + :ok + else + {:error, :already_used} + end + end - # Mark this captcha as used - {:ok, _} = - Cachex.put(:used_captcha_cache, token, true, ttl: :timer.seconds(seconds_valid)) - - :ok - catch - :throw, e -> e - end - else - _ -> {:error, dgettext("errors", "Invalid answer data")} - end - - {:reply, result, state} + defp mark_captcha_as_used(token) do + ttl = seconds_valid() |> :timer.seconds() + Cachex.put(:used_captcha_cache, token, true, ttl: ttl) end defp method, do: Pleroma.Config.get!([__MODULE__, :method]) diff --git a/lib/pleroma/captcha/kocaptcha.ex b/lib/pleroma/captcha/kocaptcha.ex index 06ceb20b6..6bc2fa158 100644 --- a/lib/pleroma/captcha/kocaptcha.ex +++ b/lib/pleroma/captcha/kocaptcha.ex @@ -3,7 +3,6 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Captcha.Kocaptcha do - import Pleroma.Web.Gettext alias Pleroma.Captcha.Service @behaviour Service @@ -13,7 +12,7 @@ def new do case Tesla.get(endpoint <> "/new") do {:error, _} -> - %{error: dgettext("errors", "Kocaptcha service unavailable")} + %{error: :kocaptcha_service_unavailable} {:ok, res} -> json_resp = Jason.decode!(res.body) @@ -33,6 +32,6 @@ def validate(_token, captcha, answer_data) do if not is_nil(captcha) and :crypto.hash(:md5, captcha) |> Base.encode16() == String.upcase(answer_data), do: :ok, - else: {:error, dgettext("errors", "Invalid CAPTCHA")} + else: {:error, :invalid} end end diff --git a/lib/pleroma/captcha/native.ex b/lib/pleroma/captcha/native.ex index 06c479ca9..a90631d61 100644 --- a/lib/pleroma/captcha/native.ex +++ b/lib/pleroma/captcha/native.ex @@ -3,7 +3,6 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Captcha.Native do - import Pleroma.Web.Gettext alias Pleroma.Captcha.Service @behaviour Service @@ -11,7 +10,7 @@ defmodule Pleroma.Captcha.Native do def new do case Captcha.get() do :error -> - %{error: dgettext("errors", "Captcha error")} + %{error: :captcha_error} {:ok, answer_data, img_binary} -> %{ @@ -25,7 +24,7 @@ def new do @impl Service def validate(_token, captcha, captcha) when not is_nil(captcha), do: :ok - def validate(_token, _captcha, _answer), do: {:error, dgettext("errors", "Invalid CAPTCHA")} + def validate(_token, _captcha, _answer), do: {:error, :invalid} defp token do 10 diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 1eedf02d6..61b0e2f63 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -94,24 +94,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do @doc "POST /api/v1/accounts" def create(%{assigns: %{app: app}, body_params: params} = conn, _params) do - params = - params - |> Map.take([ - :email, - :bio, - :captcha_solution, - :captcha_token, - :captcha_answer_data, - :token, - :password, - :fullname - ]) - |> Map.put(:nickname, params.username) - |> Map.put(:fullname, Map.get(params, :fullname, params.username)) - |> Map.put(:confirm, params.password) - |> Map.put(:trusted_app, app.trusted) - with :ok <- validate_email_param(params), + :ok <- TwitterAPI.validate_captcha(app, params), {:ok, user} <- TwitterAPI.register_user(params, need_confirmation: true), {:ok, token} <- Token.create_token(app, user, %{scopes: app.scopes}) do json(conn, %{ @@ -121,7 +105,7 @@ def create(%{assigns: %{app: app}, body_params: params} = conn, _params) do created_at: Token.Utils.format_created_at(token) }) else - {:error, errors} -> json_response(conn, :bad_request, errors) + {:error, error} -> json_response(conn, :bad_request, %{error: error}) end end @@ -133,11 +117,11 @@ def create(conn, _) do render_error(conn, :forbidden, "Invalid credentials") end - defp validate_email_param(%{:email => email}) when not is_nil(email), do: :ok + defp validate_email_param(%{email: email}) when not is_nil(email), do: :ok defp validate_email_param(_) do case Pleroma.Config.get([:instance, :account_activation_required]) do - true -> {:error, %{"error" => "Missing parameters"}} + true -> {:error, dgettext("errors", "Missing parameter: %{name}", name: "email")} _ -> :ok end end diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index a6ef9a310..5cfb385ac 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -3,54 +3,27 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.TwitterAPI.TwitterAPI do + import Pleroma.Web.Gettext + alias Pleroma.Emails.Mailer alias Pleroma.Emails.UserEmail alias Pleroma.Repo alias Pleroma.User alias Pleroma.UserInviteToken - require Pleroma.Constants - def register_user(params, opts \\ []) do params = params - |> Map.take([ - :nickname, - :password, - :captcha_solution, - :captcha_token, - :captcha_answer_data, - :token, - :email, - :trusted_app - ]) - |> Map.put(:bio, User.parse_bio(params[:bio] || "")) - |> Map.put(:name, params.fullname) - |> Map.put(:password_confirmation, params[:confirm]) + |> Map.take([:email, :token, :password]) + |> Map.put(:bio, params |> Map.get(:bio, "") |> User.parse_bio()) + |> Map.put(:nickname, params[:username]) + |> Map.put(:name, Map.get(params, :fullname, params[:username])) + |> Map.put(:password_confirmation, params[:password]) - case validate_captcha(params) do - :ok -> - if Pleroma.Config.get([:instance, :registrations_open]) do - create_user(params, opts) - else - create_user_with_invite(params, opts) - end - - {:error, error} -> - # I have no idea how this error handling works - {:error, %{error: Jason.encode!(%{captcha: [error]})}} - end - end - - defp validate_captcha(params) do - if params[:trusted_app] || not Pleroma.Config.get([Pleroma.Captcha, :enabled]) do - :ok + if Pleroma.Config.get([:instance, :registrations_open]) do + create_user(params, opts) else - Pleroma.Captcha.validate( - params[:captcha_token], - params[:captcha_solution], - params[:captcha_answer_data] - ) + create_user_with_invite(params, opts) end end @@ -75,16 +48,17 @@ defp create_user(params, opts) do {:error, changeset} -> errors = - Ecto.Changeset.traverse_errors(changeset, fn {msg, _opts} -> msg end) + changeset + |> Ecto.Changeset.traverse_errors(fn {msg, _opts} -> msg end) |> Jason.encode!() - {:error, %{error: errors}} + {:error, errors} end end def password_reset(nickname_or_email) do with true <- is_binary(nickname_or_email), - %User{local: true, email: email} = user when not is_nil(email) <- + %User{local: true, email: email} = user when is_binary(email) <- User.get_by_nickname_or_email(nickname_or_email), {:ok, token_record} <- Pleroma.PasswordResetToken.create_token(user) do user @@ -106,4 +80,58 @@ def password_reset(nickname_or_email) do {:error, "unknown user"} end end + + def validate_captcha(app, params) do + if app.trusted || not Pleroma.Captcha.enabled?() do + :ok + else + do_validate_captcha(params) + end + end + + defp do_validate_captcha(params) do + with :ok <- validate_captcha_presence(params), + :ok <- + Pleroma.Captcha.validate( + params[:captcha_token], + params[:captcha_solution], + params[:captcha_answer_data] + ) do + :ok + else + {:error, :captcha_error} -> + captcha_error(dgettext("errors", "CAPTCHA Error")) + + {:error, :invalid} -> + captcha_error(dgettext("errors", "Invalid CAPTCHA")) + + {:error, :kocaptcha_service_unavailable} -> + captcha_error(dgettext("errors", "Kocaptcha service unavailable")) + + {:error, :expired} -> + captcha_error(dgettext("errors", "CAPTCHA expired")) + + {:error, :already_used} -> + captcha_error(dgettext("errors", "CAPTCHA already used")) + + {:error, :invalid_answer_data} -> + captcha_error(dgettext("errors", "Invalid answer data")) + + {:error, error} -> + captcha_error(error) + end + end + + defp validate_captcha_presence(params) do + [:captcha_solution, :captcha_token, :captcha_answer_data] + |> Enum.find_value(:ok, fn key -> + unless is_binary(params[key]) do + error = dgettext("errors", "Invalid CAPTCHA (Missing parameter: %{name})", name: key) + {:error, error} + end + end) + end + + # For some reason FE expects error message to be a serialized JSON + defp captcha_error(error), do: {:error, Jason.encode!(%{captcha: [error]})} end diff --git a/test/captcha_test.exs b/test/captcha_test.exs index ac1d846e8..1ab9019ab 100644 --- a/test/captcha_test.exs +++ b/test/captcha_test.exs @@ -61,7 +61,7 @@ test "new and validate" do assert is_binary(answer) assert :ok = Native.validate(token, answer, answer) - assert {:error, "Invalid CAPTCHA"} == Native.validate(token, answer, answer <> "foobar") + assert {:error, :invalid} == Native.validate(token, answer, answer <> "foobar") end end @@ -78,6 +78,7 @@ test "validate" do assert is_binary(answer) assert :ok = Captcha.validate(token, "63615261b77f5354fb8c4e4986477555", answer) + Cachex.del(:used_captcha_cache, token) end test "doesn't validate invalid answer" do @@ -92,7 +93,7 @@ test "doesn't validate invalid answer" do assert is_binary(answer) - assert {:error, "Invalid answer data"} = + assert {:error, :invalid_answer_data} = Captcha.validate(token, "63615261b77f5354fb8c4e4986477555", answer <> "foobar") end @@ -108,7 +109,7 @@ test "nil answer_data" do assert is_binary(answer) - assert {:error, "Invalid answer data"} = + assert {:error, :invalid_answer_data} = Captcha.validate(token, "63615261b77f5354fb8c4e4986477555", nil) end end diff --git a/test/support/captcha_mock.ex b/test/support/captcha_mock.ex index 6dae94edf..7b0c1d5af 100644 --- a/test/support/captcha_mock.ex +++ b/test/support/captcha_mock.ex @@ -6,12 +6,16 @@ defmodule Pleroma.Captcha.Mock do alias Pleroma.Captcha.Service @behaviour Service + @solution "63615261b77f5354fb8c4e4986477555" + + def solution, do: @solution + @impl Service def new, do: %{ type: :mock, token: "afa1815e14e29355e6c8f6b143a39fa2", - answer_data: "63615261b77f5354fb8c4e4986477555", + answer_data: @solution, url: "https://example.org/captcha.png" } diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index ba70ba66c..b9da7e924 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -925,7 +925,8 @@ test "returns bad_request if missing email params when :account_activation_requi |> Map.put(:remote_ip, {127, 0, 0, 5}) |> post("/api/v1/accounts", Map.delete(valid_params, :email)) - assert json_response_and_validate_schema(res, 400) == %{"error" => "Missing parameters"} + assert json_response_and_validate_schema(res, 400) == + %{"error" => "Missing parameter: email"} res = conn @@ -1093,6 +1094,91 @@ test "respects rate limit setting", %{conn: conn} do end end + describe "create account with enabled captcha" do + setup %{conn: conn} do + app_token = insert(:oauth_token, user: nil) + + conn = + conn + |> put_req_header("authorization", "Bearer " <> app_token.token) + |> put_req_header("content-type", "multipart/form-data") + + [conn: conn] + end + + setup do: clear_config([Pleroma.Captcha, :enabled], true) + + test "creates an account and returns 200 if captcha is valid", %{conn: conn} do + %{token: token, answer_data: answer_data} = Pleroma.Captcha.new() + + params = %{ + username: "lain", + email: "lain@example.org", + password: "PlzDontHackLain", + agreement: true, + captcha_solution: Pleroma.Captcha.Mock.solution(), + captcha_token: token, + captcha_answer_data: answer_data + } + + assert %{ + "access_token" => access_token, + "created_at" => _, + "scope" => ["read"], + "token_type" => "Bearer" + } = + conn + |> post("/api/v1/accounts", params) + |> json_response_and_validate_schema(:ok) + + assert Token |> Repo.get_by(token: access_token) |> Repo.preload(:user) |> Map.get(:user) + + Cachex.del(:used_captcha_cache, token) + end + + test "returns 400 if any captcha field is not provided", %{conn: conn} do + captcha_fields = [:captcha_solution, :captcha_token, :captcha_answer_data] + + valid_params = %{ + username: "lain", + email: "lain@example.org", + password: "PlzDontHackLain", + agreement: true, + captcha_solution: "xx", + captcha_token: "xx", + captcha_answer_data: "xx" + } + + for field <- captcha_fields do + expected = %{ + "error" => "{\"captcha\":[\"Invalid CAPTCHA (Missing parameter: #{field})\"]}" + } + + assert expected == + conn + |> post("/api/v1/accounts", Map.delete(valid_params, field)) + |> json_response_and_validate_schema(:bad_request) + end + end + + test "returns an error if captcha is invalid", %{conn: conn} do + params = %{ + username: "lain", + email: "lain@example.org", + password: "PlzDontHackLain", + agreement: true, + captcha_solution: "cofe", + captcha_token: "cofe", + captcha_answer_data: "cofe" + } + + assert %{"error" => "{\"captcha\":[\"Invalid answer data\"]}"} == + conn + |> post("/api/v1/accounts", params) + |> json_response_and_validate_schema(:bad_request) + end + end + describe "GET /api/v1/accounts/:id/lists - account_lists" do test "returns lists to which the account belongs" do %{user: user, conn: conn} = oauth_access(["read:lists"]) diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index 7926a0757..368533292 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -18,7 +18,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do test "it registers a new user and returns the user." do data = %{ - :nickname => "lain", + :username => "lain", :email => "lain@wired.jp", :fullname => "lain iwakura", :password => "bear", @@ -35,7 +35,7 @@ test "it registers a new user and returns the user." do test "it registers a new user with empty string in bio and returns the user." do data = %{ - :nickname => "lain", + :username => "lain", :email => "lain@wired.jp", :fullname => "lain iwakura", :bio => "", @@ -60,7 +60,7 @@ test "it sends confirmation email if :account_activation_required is specified i end data = %{ - :nickname => "lain", + :username => "lain", :email => "lain@wired.jp", :fullname => "lain iwakura", :bio => "", @@ -87,7 +87,7 @@ test "it sends confirmation email if :account_activation_required is specified i test "it registers a new user and parses mentions in the bio" do data1 = %{ - :nickname => "john", + :username => "john", :email => "john@gmail.com", :fullname => "John Doe", :bio => "test", @@ -98,7 +98,7 @@ test "it registers a new user and parses mentions in the bio" do {:ok, user1} = TwitterAPI.register_user(data1) data2 = %{ - :nickname => "lain", + :username => "lain", :email => "lain@wired.jp", :fullname => "lain iwakura", :bio => "@john test", @@ -123,7 +123,7 @@ test "returns user on success" do {:ok, invite} = UserInviteToken.create_invite() data = %{ - :nickname => "vinny", + :username => "vinny", :email => "pasta@pizza.vs", :fullname => "Vinny Vinesauce", :bio => "streamer", @@ -145,7 +145,7 @@ test "returns user on success" do test "returns error on invalid token" do data = %{ - :nickname => "GrimReaper", + :username => "GrimReaper", :email => "death@reapers.afterlife", :fullname => "Reaper Grim", :bio => "Your time has come", @@ -165,7 +165,7 @@ test "returns error on expired token" do UserInviteToken.update_invite!(invite, used: true) data = %{ - :nickname => "GrimReaper", + :username => "GrimReaper", :email => "death@reapers.afterlife", :fullname => "Reaper Grim", :bio => "Your time has come", @@ -186,7 +186,7 @@ test "returns error on expired token" do setup do data = %{ - :nickname => "vinny", + :username => "vinny", :email => "pasta@pizza.vs", :fullname => "Vinny Vinesauce", :bio => "streamer", @@ -250,7 +250,7 @@ test "returns user on success, after him registration fails" do UserInviteToken.update_invite!(invite, uses: 99) data = %{ - :nickname => "vinny", + :username => "vinny", :email => "pasta@pizza.vs", :fullname => "Vinny Vinesauce", :bio => "streamer", @@ -269,7 +269,7 @@ test "returns user on success, after him registration fails" do AccountView.render("show.json", %{user: fetched_user}) data = %{ - :nickname => "GrimReaper", + :username => "GrimReaper", :email => "death@reapers.afterlife", :fullname => "Reaper Grim", :bio => "Your time has come", @@ -292,7 +292,7 @@ test "returns user on success" do {:ok, invite} = UserInviteToken.create_invite(%{expires_at: Date.utc_today(), max_use: 100}) data = %{ - :nickname => "vinny", + :username => "vinny", :email => "pasta@pizza.vs", :fullname => "Vinny Vinesauce", :bio => "streamer", @@ -317,7 +317,7 @@ test "error after max uses" do UserInviteToken.update_invite!(invite, uses: 99) data = %{ - :nickname => "vinny", + :username => "vinny", :email => "pasta@pizza.vs", :fullname => "Vinny Vinesauce", :bio => "streamer", @@ -335,7 +335,7 @@ test "error after max uses" do AccountView.render("show.json", %{user: fetched_user}) data = %{ - :nickname => "GrimReaper", + :username => "GrimReaper", :email => "death@reapers.afterlife", :fullname => "Reaper Grim", :bio => "Your time has come", @@ -355,7 +355,7 @@ test "returns error on overdue date" do UserInviteToken.create_invite(%{expires_at: Date.add(Date.utc_today(), -1), max_use: 100}) data = %{ - :nickname => "GrimReaper", + :username => "GrimReaper", :email => "death@reapers.afterlife", :fullname => "Reaper Grim", :bio => "Your time has come", @@ -377,7 +377,7 @@ test "returns error on with overdue date and after max" do UserInviteToken.update_invite!(invite, uses: 100) data = %{ - :nickname => "GrimReaper", + :username => "GrimReaper", :email => "death@reapers.afterlife", :fullname => "Reaper Grim", :bio => "Your time has come", @@ -395,16 +395,15 @@ test "returns error on with overdue date and after max" do test "it returns the error on registration problems" do data = %{ - :nickname => "lain", + :username => "lain", :email => "lain@wired.jp", :fullname => "lain iwakura", - :bio => "close the world.", - :password => "bear" + :bio => "close the world." } - {:error, error_object} = TwitterAPI.register_user(data) + {:error, error} = TwitterAPI.register_user(data) - assert is_binary(error_object[:error]) + assert is_binary(error) refute User.get_cached_by_nickname("lain") end From 39a78998d0a729323406497332f9402301994811 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 29 Apr 2020 21:01:16 +0400 Subject: [PATCH 363/581] Change Pleroma.CaptchaTest to be a regular module instead of GenServer --- lib/pleroma/application.ex | 1 - lib/pleroma/captcha/captcha.ex | 58 ++++++++-------------------------- 2 files changed, 14 insertions(+), 45 deletions(-) diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index a00938c04..308d8cffa 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -73,7 +73,6 @@ def start(_type, _args) do Pleroma.Repo, Config.TransferTask, Pleroma.Emoji, - Pleroma.Captcha, Pleroma.Plugs.RateLimiter.Supervisor ] ++ cachex_children() ++ diff --git a/lib/pleroma/captcha/captcha.ex b/lib/pleroma/captcha/captcha.ex index e17dc2426..6ab754b6f 100644 --- a/lib/pleroma/captcha/captcha.ex +++ b/lib/pleroma/captcha/captcha.ex @@ -7,36 +7,12 @@ defmodule Pleroma.Captcha do alias Plug.Crypto.KeyGenerator alias Plug.Crypto.MessageEncryptor - use GenServer - - @doc false - def start_link(_) do - GenServer.start_link(__MODULE__, [], name: __MODULE__) - end - - @doc false - def init(_) do - {:ok, nil} - end - @doc """ Ask the configured captcha service for a new captcha """ def new do - GenServer.call(__MODULE__, :new) - end - - @doc """ - Ask the configured captcha service to validate the captcha - """ - def validate(token, captcha, answer_data) do - GenServer.call(__MODULE__, {:validate, token, captcha, answer_data}) - end - - @doc false - def handle_call(:new, _from, state) do if not enabled?() do - {:reply, %{type: :none}, state} + %{type: :none} else new_captcha = method().new() @@ -53,18 +29,22 @@ def handle_call(:new, _from, state) do |> :erlang.term_to_binary() |> MessageEncryptor.encrypt(secret, sign_secret) - { - :reply, - # Replace the answer with the encrypted answer - %{new_captcha | answer_data: encrypted_captcha_answer}, - state - } + # Replace the answer with the encrypted answer + %{new_captcha | answer_data: encrypted_captcha_answer} end end - @doc false - def handle_call({:validate, token, captcha, answer_data}, _from, state) do - {:reply, do_validate(token, captcha, answer_data), state} + @doc """ + Ask the configured captcha service to validate the captcha + """ + def validate(token, captcha, answer_data) do + with {:ok, %{at: at, answer_data: answer_md5}} <- validate_answer_data(token, answer_data), + :ok <- validate_expiration(at), + :ok <- validate_usage(token), + :ok <- method().validate(token, captcha, answer_md5), + {:ok, _} <- mark_captcha_as_used(token) do + :ok + end end def enabled?, do: Pleroma.Config.get([__MODULE__, :enabled], false) @@ -79,16 +59,6 @@ defp secret_pair(token) do {secret, sign_secret} end - defp do_validate(token, captcha, answer_data) do - with {:ok, %{at: at, answer_data: answer_md5}} <- validate_answer_data(token, answer_data), - :ok <- validate_expiration(at), - :ok <- validate_usage(token), - :ok <- method().validate(token, captcha, answer_md5), - {:ok, _} <- mark_captcha_as_used(token) do - :ok - end - end - defp validate_answer_data(token, answer_data) do {secret, sign_secret} = secret_pair(token) From 3ead44a9aa14daebfb63de089d047f4fe9ee3bdd Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 29 Apr 2020 15:49:48 -0500 Subject: [PATCH 364/581] Update AdminFE build in preparation for the 2.0.3 release --- .../{app.85534e14.css => app.796ca6d4.css} | 2 +- ...a.5a5f973d.css => chunk-0558.af0d89cd.css} | 0 priv/static/adminfe/chunk-0778.d9e7180a.css | 1 + ...c.90dffac4.css => chunk-0961.d3692214.css} | 0 priv/static/adminfe/chunk-0d8f.d85f5a29.css | 1 - priv/static/adminfe/chunk-13e9.98eaadba.css | 1 - priv/static/adminfe/chunk-22d2.813009b9.css | 1 + priv/static/adminfe/chunk-2b9c.feb61a2b.css | 1 - ...a.f1130f8e.css => chunk-3384.2278f87c.css} | 2 +- priv/static/adminfe/chunk-4011.c4799067.css | 1 + priv/static/adminfe/chunk-46ef.145de4f9.css | 1 - priv/static/adminfe/chunk-6b68.0cc00484.css | 1 + ...b.dd09fe2e.css => chunk-6e81.0e80d020.css} | 0 priv/static/adminfe/chunk-7637.941c4edb.css | 1 + priv/static/adminfe/chunk-87b3.3c6ede9c.css | 1 - priv/static/adminfe/chunk-88c9.184084df.css | 1 - priv/static/adminfe/chunk-970d.f59cca8c.css | 1 + priv/static/adminfe/chunk-cf57.26596375.css | 1 - priv/static/adminfe/chunk-d38a.cabdc22e.css | 1 + priv/static/adminfe/chunk-e458.f88bafea.css | 1 + priv/static/adminfe/index.html | 2 +- priv/static/adminfe/static/js/app.203f69f8.js | Bin 0 -> 187722 bytes .../adminfe/static/js/app.203f69f8.js.map | Bin 0 -> 416278 bytes priv/static/adminfe/static/js/app.d898cc2b.js | Bin 185128 -> 0 bytes .../adminfe/static/js/app.d898cc2b.js.map | Bin 410154 -> 0 bytes ...5fa.34070731.js => chunk-0558.75954137.js} | Bin 7919 -> 7919 bytes ...0731.js.map => chunk-0558.75954137.js.map} | Bin 17438 -> 17438 bytes .../adminfe/static/js/chunk-0778.b17650df.js | Bin 0 -> 9756 bytes .../static/js/chunk-0778.b17650df.js.map | Bin 0 -> 32393 bytes ...76c.e4ceccca.js => chunk-0961.ef33e81b.js} | Bin 5112 -> 5112 bytes ...ccca.js.map => chunk-0961.ef33e81b.js.map} | Bin 19744 -> 19744 bytes .../adminfe/static/js/chunk-0d8f.6d50ff86.js | Bin 33538 -> 0 bytes .../static/js/chunk-0d8f.6d50ff86.js.map | Bin 116201 -> 0 bytes .../adminfe/static/js/chunk-136a.c4719e3e.js | Bin 19553 -> 0 bytes .../static/js/chunk-136a.c4719e3e.js.map | Bin 69090 -> 0 bytes .../adminfe/static/js/chunk-13e9.79da1569.js | Bin 9528 -> 0 bytes .../static/js/chunk-13e9.79da1569.js.map | Bin 40125 -> 0 bytes .../adminfe/static/js/chunk-22d2.a0cf7976.js | Bin 0 -> 30624 bytes .../static/js/chunk-22d2.a0cf7976.js.map | Bin 0 -> 103450 bytes .../adminfe/static/js/chunk-2b9c.cf321c74.js | Bin 28194 -> 0 bytes .../static/js/chunk-2b9c.cf321c74.js.map | Bin 95810 -> 0 bytes .../adminfe/static/js/chunk-3384.458ffaf1.js | Bin 0 -> 23953 bytes .../static/js/chunk-3384.458ffaf1.js.map | Bin 0 -> 85906 bytes .../adminfe/static/js/chunk-4011.67fb1692.js | Bin 0 -> 117521 bytes .../static/js/chunk-4011.67fb1692.js.map | Bin 0 -> 397967 bytes .../adminfe/static/js/chunk-46ef.671cac7d.js | Bin 7765 -> 0 bytes .../static/js/chunk-46ef.671cac7d.js.map | Bin 26170 -> 0 bytes .../adminfe/static/js/chunk-6b68.fbc0f684.js | Bin 0 -> 14790 bytes .../static/js/chunk-6b68.fbc0f684.js.map | Bin 0 -> 40172 bytes ...ffb.0e8f3772.js => chunk-6e81.3733ace2.js} | Bin 2080 -> 2080 bytes ...3772.js.map => chunk-6e81.3733ace2.js.map} | Bin 9090 -> 9090 bytes .../adminfe/static/js/chunk-7637.8f5fb36e.js | Bin 0 -> 10877 bytes .../static/js/chunk-7637.8f5fb36e.js.map | Bin 0 -> 44563 bytes .../adminfe/static/js/chunk-87b3.3c11ef09.js | Bin 103449 -> 0 bytes .../static/js/chunk-87b3.3c11ef09.js.map | Bin 358904 -> 0 bytes .../adminfe/static/js/chunk-88c9.e3583744.js | Bin 24234 -> 0 bytes .../static/js/chunk-88c9.e3583744.js.map | Bin 92387 -> 0 bytes .../adminfe/static/js/chunk-970d.2457e066.js | Bin 0 -> 26608 bytes .../static/js/chunk-970d.2457e066.js.map | Bin 0 -> 100000 bytes .../adminfe/static/js/chunk-cf57.3e45f57f.js | Bin 29728 -> 0 bytes .../static/js/chunk-cf57.3e45f57f.js.map | Bin 89855 -> 0 bytes .../adminfe/static/js/chunk-d38a.a851004a.js | Bin 0 -> 20205 bytes .../static/js/chunk-d38a.a851004a.js.map | Bin 0 -> 81345 bytes .../adminfe/static/js/chunk-e458.4e5aad44.js | Bin 0 -> 16756 bytes .../static/js/chunk-e458.4e5aad44.js.map | Bin 0 -> 55666 bytes .../adminfe/static/js/runtime.1b4f6ce0.js | Bin 0 -> 4032 bytes .../adminfe/static/js/runtime.1b4f6ce0.js.map | Bin 0 -> 16879 bytes .../adminfe/static/js/runtime.cb26bbd1.js | Bin 3969 -> 0 bytes .../adminfe/static/js/runtime.cb26bbd1.js.map | Bin 16759 -> 0 bytes 69 files changed, 11 insertions(+), 10 deletions(-) rename priv/static/adminfe/{app.85534e14.css => app.796ca6d4.css} (68%) rename priv/static/adminfe/{chunk-15fa.5a5f973d.css => chunk-0558.af0d89cd.css} (100%) create mode 100644 priv/static/adminfe/chunk-0778.d9e7180a.css rename priv/static/adminfe/{chunk-876c.90dffac4.css => chunk-0961.d3692214.css} (100%) delete mode 100644 priv/static/adminfe/chunk-0d8f.d85f5a29.css delete mode 100644 priv/static/adminfe/chunk-13e9.98eaadba.css create mode 100644 priv/static/adminfe/chunk-22d2.813009b9.css delete mode 100644 priv/static/adminfe/chunk-2b9c.feb61a2b.css rename priv/static/adminfe/{chunk-136a.f1130f8e.css => chunk-3384.2278f87c.css} (64%) create mode 100644 priv/static/adminfe/chunk-4011.c4799067.css delete mode 100644 priv/static/adminfe/chunk-46ef.145de4f9.css create mode 100644 priv/static/adminfe/chunk-6b68.0cc00484.css rename priv/static/adminfe/{chunk-4ffb.dd09fe2e.css => chunk-6e81.0e80d020.css} (100%) create mode 100644 priv/static/adminfe/chunk-7637.941c4edb.css delete mode 100644 priv/static/adminfe/chunk-87b3.3c6ede9c.css delete mode 100644 priv/static/adminfe/chunk-88c9.184084df.css create mode 100644 priv/static/adminfe/chunk-970d.f59cca8c.css delete mode 100644 priv/static/adminfe/chunk-cf57.26596375.css create mode 100644 priv/static/adminfe/chunk-d38a.cabdc22e.css create mode 100644 priv/static/adminfe/chunk-e458.f88bafea.css create mode 100644 priv/static/adminfe/static/js/app.203f69f8.js create mode 100644 priv/static/adminfe/static/js/app.203f69f8.js.map delete mode 100644 priv/static/adminfe/static/js/app.d898cc2b.js delete mode 100644 priv/static/adminfe/static/js/app.d898cc2b.js.map rename priv/static/adminfe/static/js/{chunk-15fa.34070731.js => chunk-0558.75954137.js} (98%) rename priv/static/adminfe/static/js/{chunk-15fa.34070731.js.map => chunk-0558.75954137.js.map} (99%) create mode 100644 priv/static/adminfe/static/js/chunk-0778.b17650df.js create mode 100644 priv/static/adminfe/static/js/chunk-0778.b17650df.js.map rename priv/static/adminfe/static/js/{chunk-876c.e4ceccca.js => chunk-0961.ef33e81b.js} (97%) rename priv/static/adminfe/static/js/{chunk-876c.e4ceccca.js.map => chunk-0961.ef33e81b.js.map} (99%) delete mode 100644 priv/static/adminfe/static/js/chunk-0d8f.6d50ff86.js delete mode 100644 priv/static/adminfe/static/js/chunk-0d8f.6d50ff86.js.map delete mode 100644 priv/static/adminfe/static/js/chunk-136a.c4719e3e.js delete mode 100644 priv/static/adminfe/static/js/chunk-136a.c4719e3e.js.map delete mode 100644 priv/static/adminfe/static/js/chunk-13e9.79da1569.js delete mode 100644 priv/static/adminfe/static/js/chunk-13e9.79da1569.js.map create mode 100644 priv/static/adminfe/static/js/chunk-22d2.a0cf7976.js create mode 100644 priv/static/adminfe/static/js/chunk-22d2.a0cf7976.js.map delete mode 100644 priv/static/adminfe/static/js/chunk-2b9c.cf321c74.js delete mode 100644 priv/static/adminfe/static/js/chunk-2b9c.cf321c74.js.map create mode 100644 priv/static/adminfe/static/js/chunk-3384.458ffaf1.js create mode 100644 priv/static/adminfe/static/js/chunk-3384.458ffaf1.js.map create mode 100644 priv/static/adminfe/static/js/chunk-4011.67fb1692.js create mode 100644 priv/static/adminfe/static/js/chunk-4011.67fb1692.js.map delete mode 100644 priv/static/adminfe/static/js/chunk-46ef.671cac7d.js delete mode 100644 priv/static/adminfe/static/js/chunk-46ef.671cac7d.js.map create mode 100644 priv/static/adminfe/static/js/chunk-6b68.fbc0f684.js create mode 100644 priv/static/adminfe/static/js/chunk-6b68.fbc0f684.js.map rename priv/static/adminfe/static/js/{chunk-4ffb.0e8f3772.js => chunk-6e81.3733ace2.js} (85%) rename priv/static/adminfe/static/js/{chunk-4ffb.0e8f3772.js.map => chunk-6e81.3733ace2.js.map} (98%) create mode 100644 priv/static/adminfe/static/js/chunk-7637.8f5fb36e.js create mode 100644 priv/static/adminfe/static/js/chunk-7637.8f5fb36e.js.map delete mode 100644 priv/static/adminfe/static/js/chunk-87b3.3c11ef09.js delete mode 100644 priv/static/adminfe/static/js/chunk-87b3.3c11ef09.js.map delete mode 100644 priv/static/adminfe/static/js/chunk-88c9.e3583744.js delete mode 100644 priv/static/adminfe/static/js/chunk-88c9.e3583744.js.map create mode 100644 priv/static/adminfe/static/js/chunk-970d.2457e066.js create mode 100644 priv/static/adminfe/static/js/chunk-970d.2457e066.js.map delete mode 100644 priv/static/adminfe/static/js/chunk-cf57.3e45f57f.js delete mode 100644 priv/static/adminfe/static/js/chunk-cf57.3e45f57f.js.map create mode 100644 priv/static/adminfe/static/js/chunk-d38a.a851004a.js create mode 100644 priv/static/adminfe/static/js/chunk-d38a.a851004a.js.map create mode 100644 priv/static/adminfe/static/js/chunk-e458.4e5aad44.js create mode 100644 priv/static/adminfe/static/js/chunk-e458.4e5aad44.js.map create mode 100644 priv/static/adminfe/static/js/runtime.1b4f6ce0.js create mode 100644 priv/static/adminfe/static/js/runtime.1b4f6ce0.js.map delete mode 100644 priv/static/adminfe/static/js/runtime.cb26bbd1.js delete mode 100644 priv/static/adminfe/static/js/runtime.cb26bbd1.js.map diff --git a/priv/static/adminfe/app.85534e14.css b/priv/static/adminfe/app.796ca6d4.css similarity index 68% rename from priv/static/adminfe/app.85534e14.css rename to priv/static/adminfe/app.796ca6d4.css index 473ec1b86..1b83a8a39 100644 --- a/priv/static/adminfe/app.85534e14.css +++ b/priv/static/adminfe/app.796ca6d4.css @@ -1 +1 @@ -.fade-enter-active,.fade-leave-active{-webkit-transition:opacity .28s;transition:opacity .28s}.fade-enter,.fade-leave-active{opacity:0}.fade-transform-enter-active,.fade-transform-leave-active{-webkit-transition:all .5s;transition:all .5s}.fade-transform-enter{opacity:0;-webkit-transform:translateX(-30px);transform:translateX(-30px)}.fade-transform-leave-to{opacity:0;-webkit-transform:translateX(30px);transform:translateX(30px)}.breadcrumb-enter-active,.breadcrumb-leave-active{-webkit-transition:all .5s;transition:all .5s}.breadcrumb-enter,.breadcrumb-leave-active{opacity:0;-webkit-transform:translateX(20px);transform:translateX(20px)}.breadcrumb-move{-webkit-transition:all .5s;transition:all .5s}.breadcrumb-leave-active{position:absolute}.el-breadcrumb__inner,.el-breadcrumb__inner a{font-weight:400!important}.el-upload input[type=file]{display:none!important}.el-upload__input{display:none}.cell .el-tag{margin-right:0}.small-padding .cell{padding-left:5px;padding-right:5px}.fixed-width .el-button--mini{padding:7px 10px;width:60px}.status-col .cell{padding:0 10px;text-align:center}.status-col .cell .el-tag{margin-right:0}.el-dialog{-webkit-transform:none;transform:none;left:0;position:relative;margin:0 auto}.article-textarea textarea{padding-right:40px;resize:none;border-radius:0;border:none;border-bottom:1px solid #bfcbd9}.upload-container .el-upload{width:100%}.upload-container .el-upload .el-upload-dragger{width:100%;height:200px}.el-dropdown-menu a{display:block}#app .main-container{min-height:100%;-webkit-transition:margin-left .28s;transition:margin-left .28s;margin-left:180px;position:relative}#app .sidebar-container{-webkit-transition:width .28s;transition:width .28s;width:180px!important;height:100%;position:fixed;font-size:0;top:0;bottom:0;left:0;z-index:1001;overflow:hidden}#app .sidebar-container .horizontal-collapse-transition{-webkit-transition:width 0s ease-in-out,padding-left 0s ease-in-out,padding-right 0s ease-in-out;transition:width 0s ease-in-out,padding-left 0s ease-in-out,padding-right 0s ease-in-out}#app .sidebar-container .scrollbar-wrapper{overflow-x:hidden!important}#app .sidebar-container .scrollbar-wrapper .el-scrollbar__view{height:100%}#app .sidebar-container .el-scrollbar__bar.is-vertical{right:0}#app .sidebar-container .is-horizontal{display:none}#app .sidebar-container a{display:inline-block;width:100%;overflow:hidden}#app .sidebar-container .svg-icon{margin-right:16px}#app .sidebar-container .el-menu{border:none;height:100%;width:100%!important}#app .sidebar-container .el-submenu__title:hover,#app .sidebar-container .submenu-title-noDropdown:hover{background-color:#263445!important}#app .sidebar-container .is-active>.el-submenu__title{color:#f4f4f5!important}#app .sidebar-container .el-submenu .el-menu-item,#app .sidebar-container .nest-menu .el-submenu>.el-submenu__title{min-width:180px!important;background-color:#1f2d3d!important}#app .sidebar-container .el-submenu .el-menu-item:hover,#app .sidebar-container .nest-menu .el-submenu>.el-submenu__title:hover{background-color:#001528!important}#app .hideSidebar .sidebar-container{width:36px!important}#app .hideSidebar .main-container{margin-left:36px}#app .hideSidebar .submenu-title-noDropdown{padding-left:10px!important;position:relative}#app .hideSidebar .submenu-title-noDropdown .el-tooltip{padding:0 10px!important}#app .hideSidebar .el-submenu{overflow:hidden}#app .hideSidebar .el-submenu>.el-submenu__title{padding-left:10px!important}#app .hideSidebar .el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}#app .hideSidebar .el-menu--collapse .el-submenu>.el-submenu__title>span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}#app .el-menu--collapse .el-menu .el-submenu{min-width:180px!important}#app .mobile .main-container{margin-left:0}#app .mobile .sidebar-container{-webkit-transition:-webkit-transform .28s;transition:-webkit-transform .28s;transition:transform .28s;transition:transform .28s,-webkit-transform .28s;width:180px!important}#app .mobile.hideSidebar .sidebar-container{pointer-events:none;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transform:translate3d(-180px,0,0);transform:translate3d(-180px,0,0)}#app .withoutAnimation .main-container,#app .withoutAnimation .sidebar-container{-webkit-transition:none;transition:none}.el-menu--vertical>.el-menu .svg-icon{margin-right:16px}.el-menu--vertical .el-menu-item:hover,.el-menu--vertical .nest-menu .el-submenu>.el-submenu__title:hover{background-color:#263445!important}.blue-btn{background:#324157}.blue-btn:hover{color:#324157}.blue-btn:hover:after,.blue-btn:hover:before{background:#324157}.light-blue-btn{background:#3a71a8}.light-blue-btn:hover{color:#3a71a8}.light-blue-btn:hover:after,.light-blue-btn:hover:before{background:#3a71a8}.red-btn{background:#c03639}.red-btn:hover{color:#c03639}.red-btn:hover:after,.red-btn:hover:before{background:#c03639}.pink-btn{background:#e65d6e}.pink-btn:hover{color:#e65d6e}.pink-btn:hover:after,.pink-btn:hover:before{background:#e65d6e}.green-btn{background:#30b08f}.green-btn:hover{color:#30b08f}.green-btn:hover:after,.green-btn:hover:before{background:#30b08f}.tiffany-btn{background:#4ab7bd}.tiffany-btn:hover{color:#4ab7bd}.tiffany-btn:hover:after,.tiffany-btn:hover:before{background:#4ab7bd}.yellow-btn{background:#fec171}.yellow-btn:hover{color:#fec171}.yellow-btn:hover:after,.yellow-btn:hover:before{background:#fec171}.pan-btn{font-size:14px;color:#fff;padding:14px 36px;border-radius:8px;border:none;outline:none;-webkit-transition:all .6s ease;transition:all .6s ease;position:relative;display:inline-block}.pan-btn:hover{background:#fff}.pan-btn:hover:after,.pan-btn:hover:before{width:100%;-webkit-transition:all .6s ease;transition:all .6s ease}.pan-btn:after,.pan-btn:before{content:"";position:absolute;top:0;right:0;height:2px;width:0;-webkit-transition:all .4s ease;transition:all .4s ease}.pan-btn:after{right:inherit;top:inherit;left:0;bottom:0}.custom-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;color:#fff;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;padding:10px 15px;font-size:14px;border-radius:4px}body{height:100%;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Arial,sans-serif;background:#fff;color:#000}label{font-weight:700}html{-webkit-box-sizing:border-box;box-sizing:border-box}#app,html{height:100%}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}.no-padding{padding:0!important}.padding-content{padding:4px 0}a:active,a:focus{outline:none}a,a:focus,a:hover{cursor:pointer;color:inherit;text-decoration:none}div:focus{outline:none}.fr{float:right}.fl{float:left}.pr-5{padding-right:5px}.pl-5{padding-left:5px}.block{display:block}.pointer{cursor:pointer}.inlineBlock{display:block}.clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}code{background:#eef1f6;padding:15px 16px;margin-bottom:20px;display:block;line-height:36px;font-size:15px;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif}code a{color:#337ab7;cursor:pointer}code a:hover{color:#20a0ff}.warn-content{background:rgba(66,185,131,.1);border-radius:2px;padding:1rem;line-height:1.6rem;word-spacing:.05rem}.warn-content a{color:#42b983;font-weight:600}.app-container{padding:20px}.components-container{margin:30px 50px;position:relative}.pagination-container{margin-top:30px}.text-center{text-align:center}.sub-navbar{height:50px;line-height:50px;position:relative;width:100%;text-align:right;padding-right:20px;-webkit-transition:position .6s ease;transition:position .6s ease;background:-webkit-gradient(linear,left top,right top,from(#20b6f9),color-stop(0,#20b6f9),color-stop(100%,#2178f1),to(#2178f1));background:linear-gradient(90deg,#20b6f9,#20b6f9 0,#2178f1 100%,#2178f1 0)}.sub-navbar .subtitle{font-size:20px;color:#fff}.sub-navbar.deleted,.sub-navbar.draft{background:#d0d0d0}.link-type,.link-type:focus{color:#337ab7;cursor:pointer}.link-type:focus:hover,.link-type:hover{color:#20a0ff}.filter-container{padding-bottom:10px}.filter-container .filter-item{display:inline-block;vertical-align:middle;margin-bottom:10px}.multiselect{line-height:16px}.multiselect--active{z-index:1000!important}.hamburger[data-v-69c6c5c4]{display:inline-block;vertical-align:middle;width:20px;height:20px}.hamburger.is-active[data-v-69c6c5c4]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.navbar[data-v-19937682]{height:50px;overflow:hidden}.navbar .hamburger-container[data-v-19937682]{line-height:46px;height:100%;float:left;cursor:pointer;-webkit-transition:background .3s;transition:background .3s}.navbar .hamburger-container[data-v-19937682]:hover{background:rgba(0,0,0,.025)}.navbar .breadcrumb-container[data-v-19937682]{float:left}.navbar .errLog-container[data-v-19937682]{display:inline-block;vertical-align:top}.navbar .right-menu[data-v-19937682]{float:right;height:100%;line-height:50px}.navbar .right-menu[data-v-19937682]:focus{outline:none}.navbar .right-menu .right-menu-item[data-v-19937682]{display:inline-block;padding:0 8px;height:100%;font-size:18px;color:#5a5e66;vertical-align:text-bottom}.navbar .right-menu .right-menu-item.hover-effect[data-v-19937682]{cursor:pointer;-webkit-transition:background .3s;transition:background .3s}.navbar .right-menu .right-menu-item.hover-effect[data-v-19937682]:hover{background:rgba(0,0,0,.025)}.navbar .right-menu .avatar-container .avatar-wrapper[data-v-19937682]{margin-top:5px;position:relative}.navbar .right-menu .avatar-container .avatar-wrapper .user-avatar[data-v-19937682]{cursor:pointer;width:40px;height:40px;border-radius:10px}.navbar .right-menu .avatar-container .avatar-wrapper .el-icon-caret-bottom[data-v-19937682]{cursor:pointer;position:absolute;right:-20px;top:25px;font-size:12px}.scroll-container[data-v-591d6778]{white-space:nowrap;position:relative;overflow:hidden;width:100%}.scroll-container[data-v-591d6778] .el-scrollbar__bar{bottom:0}.scroll-container[data-v-591d6778] .el-scrollbar__wrap{height:49px}.tags-view-container[data-v-e1cdb714]{height:34px;width:100%;background:#fff;border-bottom:1px solid #d8dce5;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.12),0 0 3px 0 rgba(0,0,0,.04);box-shadow:0 1px 3px 0 rgba(0,0,0,.12),0 0 3px 0 rgba(0,0,0,.04)}.tags-view-container .tags-view-wrapper .tags-view-item[data-v-e1cdb714]{display:inline-block;position:relative;cursor:pointer;height:26px;line-height:26px;border:1px solid #d8dce5;color:#495060;background:#fff;padding:0 8px;font-size:12px;margin-left:5px;margin-top:4px}.tags-view-container .tags-view-wrapper .tags-view-item[data-v-e1cdb714]:first-of-type{margin-left:15px}.tags-view-container .tags-view-wrapper .tags-view-item[data-v-e1cdb714]:last-of-type{margin-right:15px}.tags-view-container .tags-view-wrapper .tags-view-item.active[data-v-e1cdb714]{background-color:#42b983;color:#fff;border-color:#42b983}.tags-view-container .tags-view-wrapper .tags-view-item.active[data-v-e1cdb714]:before{content:"";background:#fff;display:inline-block;width:8px;height:8px;border-radius:50%;position:relative;margin-right:2px}.tags-view-container .contextmenu[data-v-e1cdb714]{margin:0;background:#fff;z-index:100;position:absolute;list-style-type:none;padding:5px 0;border-radius:4px;font-size:12px;font-weight:400;color:#333;-webkit-box-shadow:2px 2px 3px 0 rgba(0,0,0,.3);box-shadow:2px 2px 3px 0 rgba(0,0,0,.3)}.tags-view-container .contextmenu li[data-v-e1cdb714]{margin:0;padding:7px 16px;cursor:pointer}.tags-view-container .contextmenu li[data-v-e1cdb714]:hover{background:#eee}.tags-view-wrapper .tags-view-item .el-icon-close{width:16px;height:16px;vertical-align:2px;border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.tags-view-wrapper .tags-view-item .el-icon-close:before{-webkit-transform:scale(.6);transform:scale(.6);display:inline-block;vertical-align:-3px}.tags-view-wrapper .tags-view-item .el-icon-close:hover{background-color:#b4bccc;color:#fff}.app-main[data-v-f852c4f2]{min-height:calc(100vh - 84px);width:100%;position:relative;overflow:hidden}.app-wrapper[data-v-767d264f]{position:relative;height:100%;width:100%}.app-wrapper[data-v-767d264f]:after{content:"";display:table;clear:both}.app-wrapper.mobile.openSidebar[data-v-767d264f]{position:fixed;top:0}.drawer-bg[data-v-767d264f]{background:#000;opacity:.3;width:100%;top:0;height:100%;position:absolute;z-index:999}.svg-icon[data-v-17178ffc]{width:1em;height:1em;vertical-align:-.15em;fill:currentColor;overflow:hidden} \ No newline at end of file +.fade-enter-active,.fade-leave-active{-webkit-transition:opacity .28s;transition:opacity .28s}.fade-enter,.fade-leave-active{opacity:0}.fade-transform-enter-active,.fade-transform-leave-active{-webkit-transition:all .5s;transition:all .5s}.fade-transform-enter{opacity:0;-webkit-transform:translateX(-30px);transform:translateX(-30px)}.fade-transform-leave-to{opacity:0;-webkit-transform:translateX(30px);transform:translateX(30px)}.breadcrumb-enter-active,.breadcrumb-leave-active{-webkit-transition:all .5s;transition:all .5s}.breadcrumb-enter,.breadcrumb-leave-active{opacity:0;-webkit-transform:translateX(20px);transform:translateX(20px)}.breadcrumb-move{-webkit-transition:all .5s;transition:all .5s}.breadcrumb-leave-active{position:absolute}.el-breadcrumb__inner,.el-breadcrumb__inner a{font-weight:400!important}.el-upload input[type=file]{display:none!important}.el-upload__input{display:none}.cell .el-tag{margin-right:0}.small-padding .cell{padding-left:5px;padding-right:5px}.fixed-width .el-button--mini{padding:7px 10px;width:60px}.status-col .cell{padding:0 10px;text-align:center}.status-col .cell .el-tag{margin-right:0}.el-dialog{-webkit-transform:none;transform:none;left:0;position:relative;margin:0 auto}.article-textarea textarea{padding-right:40px;resize:none;border-radius:0;border:none;border-bottom:1px solid #bfcbd9}.upload-container .el-upload{width:100%}.upload-container .el-upload .el-upload-dragger{width:100%;height:200px}.el-dropdown-menu a{display:block}#app .main-container{min-height:100%;-webkit-transition:margin-left .28s;transition:margin-left .28s;margin-left:180px;position:relative}#app .sidebar-container{-webkit-transition:width .28s;transition:width .28s;width:180px!important;height:100%;position:fixed;font-size:0;top:0;bottom:0;left:0;z-index:5000;overflow:hidden}#app .sidebar-container .horizontal-collapse-transition{-webkit-transition:width 0s ease-in-out,padding-left 0s ease-in-out,padding-right 0s ease-in-out;transition:width 0s ease-in-out,padding-left 0s ease-in-out,padding-right 0s ease-in-out}#app .sidebar-container .scrollbar-wrapper{overflow-x:hidden!important}#app .sidebar-container .scrollbar-wrapper .el-scrollbar__view{height:100%}#app .sidebar-container .el-scrollbar__bar.is-vertical{right:0}#app .sidebar-container .is-horizontal{display:none}#app .sidebar-container a{display:inline-block;width:100%;overflow:hidden}#app .sidebar-container .svg-icon{margin-right:16px}#app .sidebar-container .el-menu{border:none;height:100%;width:100%!important}#app .sidebar-container .el-submenu__title:hover,#app .sidebar-container .submenu-title-noDropdown:hover{background-color:#263445!important}#app .sidebar-container .is-active>.el-submenu__title{color:#f4f4f5!important}#app .sidebar-container .el-submenu .el-menu-item,#app .sidebar-container .nest-menu .el-submenu>.el-submenu__title{min-width:180px!important;background-color:#1f2d3d!important}#app .sidebar-container .el-submenu .el-menu-item:hover,#app .sidebar-container .nest-menu .el-submenu>.el-submenu__title:hover{background-color:#001528!important}#app .hideSidebar .sidebar-container{width:36px!important}#app .hideSidebar .main-container{margin-left:36px}#app .hideSidebar .submenu-title-noDropdown{padding-left:10px!important;position:relative}#app .hideSidebar .submenu-title-noDropdown .el-tooltip{padding:0 10px!important}#app .hideSidebar .el-submenu{overflow:hidden}#app .hideSidebar .el-submenu>.el-submenu__title{padding-left:10px!important}#app .hideSidebar .el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}#app .hideSidebar .el-menu--collapse .el-submenu>.el-submenu__title>span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}#app .el-menu--collapse .el-menu .el-submenu{min-width:180px!important}#app .mobile .main-container{margin-left:0}#app .mobile .sidebar-container{-webkit-transition:-webkit-transform .28s;transition:-webkit-transform .28s;transition:transform .28s;transition:transform .28s,-webkit-transform .28s;width:180px!important}#app .mobile.hideSidebar .sidebar-container{pointer-events:none;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transform:translate3d(-180px,0,0);transform:translate3d(-180px,0,0)}#app .withoutAnimation .main-container,#app .withoutAnimation .sidebar-container{-webkit-transition:none;transition:none}.el-menu--vertical>.el-menu .svg-icon{margin-right:16px}.el-menu--vertical .el-menu-item:hover,.el-menu--vertical .nest-menu .el-submenu>.el-submenu__title:hover{background-color:#263445!important}.blue-btn{background:#324157}.blue-btn:hover{color:#324157}.blue-btn:hover:after,.blue-btn:hover:before{background:#324157}.light-blue-btn{background:#3a71a8}.light-blue-btn:hover{color:#3a71a8}.light-blue-btn:hover:after,.light-blue-btn:hover:before{background:#3a71a8}.red-btn{background:#c03639}.red-btn:hover{color:#c03639}.red-btn:hover:after,.red-btn:hover:before{background:#c03639}.pink-btn{background:#e65d6e}.pink-btn:hover{color:#e65d6e}.pink-btn:hover:after,.pink-btn:hover:before{background:#e65d6e}.green-btn{background:#30b08f}.green-btn:hover{color:#30b08f}.green-btn:hover:after,.green-btn:hover:before{background:#30b08f}.tiffany-btn{background:#4ab7bd}.tiffany-btn:hover{color:#4ab7bd}.tiffany-btn:hover:after,.tiffany-btn:hover:before{background:#4ab7bd}.yellow-btn{background:#fec171}.yellow-btn:hover{color:#fec171}.yellow-btn:hover:after,.yellow-btn:hover:before{background:#fec171}.pan-btn{font-size:14px;color:#fff;padding:14px 36px;border-radius:8px;border:none;outline:none;-webkit-transition:all .6s ease;transition:all .6s ease;position:relative;display:inline-block}.pan-btn:hover{background:#fff}.pan-btn:hover:after,.pan-btn:hover:before{width:100%;-webkit-transition:all .6s ease;transition:all .6s ease}.pan-btn:after,.pan-btn:before{content:"";position:absolute;top:0;right:0;height:2px;width:0;-webkit-transition:all .4s ease;transition:all .4s ease}.pan-btn:after{right:inherit;top:inherit;left:0;bottom:0}.custom-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;color:#fff;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;padding:10px 15px;font-size:14px;border-radius:4px}body{height:100%;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Arial,sans-serif;background:#fff;color:#000}label{font-weight:700}html{-webkit-box-sizing:border-box;box-sizing:border-box}#app,html{height:100%}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}.no-padding{padding:0!important}.padding-content{padding:4px 0}a:active,a:focus{outline:none}a,a:focus,a:hover{cursor:pointer;color:inherit;text-decoration:none}div:focus{outline:none}.fr{float:right}.fl{float:left}.pr-5{padding-right:5px}.pl-5{padding-left:5px}.block{display:block}.pointer{cursor:pointer}.inlineBlock{display:block}.clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}code{background:#eef1f6;padding:15px 16px;margin-bottom:20px;display:block;line-height:36px;font-size:15px;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif}code a{color:#337ab7;cursor:pointer}code a:hover{color:#20a0ff}.warn-content{background:rgba(66,185,131,.1);border-radius:2px;padding:1rem;line-height:1.6rem;word-spacing:.05rem}.warn-content a{color:#42b983;font-weight:600}.app-container{padding:20px}.components-container{margin:30px 50px;position:relative}.pagination-container{margin-top:30px}.text-center{text-align:center}.sub-navbar{height:50px;line-height:50px;position:relative;width:100%;text-align:right;padding-right:20px;-webkit-transition:position .6s ease;transition:position .6s ease;background:-webkit-gradient(linear,left top,right top,from(#20b6f9),color-stop(0,#20b6f9),color-stop(100%,#2178f1),to(#2178f1));background:linear-gradient(90deg,#20b6f9,#20b6f9 0,#2178f1 100%,#2178f1 0)}.sub-navbar .subtitle{font-size:20px;color:#fff}.sub-navbar.deleted,.sub-navbar.draft{background:#d0d0d0}.link-type,.link-type:focus{color:#337ab7;cursor:pointer}.link-type:focus:hover,.link-type:hover{color:#20a0ff}.filter-container{padding-bottom:10px}.filter-container .filter-item{display:inline-block;vertical-align:middle;margin-bottom:10px}.multiselect{line-height:16px}.multiselect--active{z-index:1000!important}.hamburger[data-v-69c6c5c4]{display:inline-block;vertical-align:middle;width:20px;height:20px}.hamburger.is-active[data-v-69c6c5c4]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.navbar[data-v-28de7ff2]{height:50px;overflow:hidden}.navbar .hamburger-container[data-v-28de7ff2]{line-height:46px;height:100%;float:left;cursor:pointer;-webkit-transition:background .3s;transition:background .3s}.navbar .hamburger-container[data-v-28de7ff2]:hover{background:rgba(0,0,0,.025)}.navbar .breadcrumb-container[data-v-28de7ff2]{float:left}.navbar .errLog-container[data-v-28de7ff2]{display:inline-block;vertical-align:top}.navbar .right-menu[data-v-28de7ff2]{float:right;height:100%;line-height:50px}.navbar .right-menu[data-v-28de7ff2]:focus{outline:none}.navbar .right-menu .right-menu-item[data-v-28de7ff2]{display:inline-block;padding:0 15px;height:100%;font-size:18px;color:#5a5e66;vertical-align:text-bottom}.navbar .right-menu .right-menu-item.hover-effect[data-v-28de7ff2]{cursor:pointer;-webkit-transition:background .3s;transition:background .3s}.navbar .right-menu .right-menu-item.hover-effect[data-v-28de7ff2]:hover{background:rgba(0,0,0,.025)}.navbar .right-menu .avatar-container .avatar-wrapper[data-v-28de7ff2]{margin-top:5px;position:relative}.navbar .right-menu .avatar-container .avatar-wrapper .user-avatar[data-v-28de7ff2]{cursor:pointer;width:40px;height:40px;border-radius:10px}.navbar .right-menu .avatar-container .avatar-wrapper .el-icon-caret-bottom[data-v-28de7ff2]{cursor:pointer;position:absolute;right:-20px;top:25px;font-size:12px}.scroll-container[data-v-591d6778]{white-space:nowrap;position:relative;overflow:hidden;width:100%}.scroll-container[data-v-591d6778] .el-scrollbar__bar{bottom:0}.scroll-container[data-v-591d6778] .el-scrollbar__wrap{height:49px}.tags-view-container[data-v-e1cdb714]{height:34px;width:100%;background:#fff;border-bottom:1px solid #d8dce5;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.12),0 0 3px 0 rgba(0,0,0,.04);box-shadow:0 1px 3px 0 rgba(0,0,0,.12),0 0 3px 0 rgba(0,0,0,.04)}.tags-view-container .tags-view-wrapper .tags-view-item[data-v-e1cdb714]{display:inline-block;position:relative;cursor:pointer;height:26px;line-height:26px;border:1px solid #d8dce5;color:#495060;background:#fff;padding:0 8px;font-size:12px;margin-left:5px;margin-top:4px}.tags-view-container .tags-view-wrapper .tags-view-item[data-v-e1cdb714]:first-of-type{margin-left:15px}.tags-view-container .tags-view-wrapper .tags-view-item[data-v-e1cdb714]:last-of-type{margin-right:15px}.tags-view-container .tags-view-wrapper .tags-view-item.active[data-v-e1cdb714]{background-color:#42b983;color:#fff;border-color:#42b983}.tags-view-container .tags-view-wrapper .tags-view-item.active[data-v-e1cdb714]:before{content:"";background:#fff;display:inline-block;width:8px;height:8px;border-radius:50%;position:relative;margin-right:2px}.tags-view-container .contextmenu[data-v-e1cdb714]{margin:0;background:#fff;z-index:100;position:absolute;list-style-type:none;padding:5px 0;border-radius:4px;font-size:12px;font-weight:400;color:#333;-webkit-box-shadow:2px 2px 3px 0 rgba(0,0,0,.3);box-shadow:2px 2px 3px 0 rgba(0,0,0,.3)}.tags-view-container .contextmenu li[data-v-e1cdb714]{margin:0;padding:7px 16px;cursor:pointer}.tags-view-container .contextmenu li[data-v-e1cdb714]:hover{background:#eee}.tags-view-wrapper .tags-view-item .el-icon-close{width:16px;height:16px;vertical-align:2px;border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.tags-view-wrapper .tags-view-item .el-icon-close:before{-webkit-transform:scale(.6);transform:scale(.6);display:inline-block;vertical-align:-3px}.tags-view-wrapper .tags-view-item .el-icon-close:hover{background-color:#b4bccc;color:#fff}.app-main[data-v-f852c4f2]{min-height:calc(100vh - 84px);width:100%;position:relative;overflow:hidden}.app-wrapper[data-v-767d264f]{position:relative;height:100%;width:100%}.app-wrapper[data-v-767d264f]:after{content:"";display:table;clear:both}.app-wrapper.mobile.openSidebar[data-v-767d264f]{position:fixed;top:0}.drawer-bg[data-v-767d264f]{background:#000;opacity:.3;width:100%;top:0;height:100%;position:absolute;z-index:999}.svg-icon[data-v-17178ffc]{width:1em;height:1em;vertical-align:-.15em;fill:currentColor;overflow:hidden} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-15fa.5a5f973d.css b/priv/static/adminfe/chunk-0558.af0d89cd.css similarity index 100% rename from priv/static/adminfe/chunk-15fa.5a5f973d.css rename to priv/static/adminfe/chunk-0558.af0d89cd.css diff --git a/priv/static/adminfe/chunk-0778.d9e7180a.css b/priv/static/adminfe/chunk-0778.d9e7180a.css new file mode 100644 index 000000000..9d730019a --- /dev/null +++ b/priv/static/adminfe/chunk-0778.d9e7180a.css @@ -0,0 +1 @@ +.invites-container .actions-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px}.invites-container .create-invite-token{text-align:left;width:350px;padding:10px}.invites-container .create-new-token-dialog{width:50%}.invites-container .create-new-token-dialog a{margin-bottom:3px}.invites-container .create-new-token-dialog .el-card__body{padding:10px 20px}.invites-container .el-dialog__body{padding:5px 20px 0}.invites-container h1{margin:0}.invites-container .icon{margin-right:5px}.invites-container .invite-token-table{width:100%;margin:0 15px}.invites-container .invite-via-email{text-align:left;width:350px;padding:10px}.invites-container .invite-via-email-dialog{width:50%}.invites-container .invites-header-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:10px 15px}.invites-container .info{color:#666;font-size:13px;line-height:22px;margin:0 0 10px}.invites-container .new-token-card .el-form-item{margin:0}.invites-container .reboot-button{padding:10px;margin:0;width:145px}@media only screen and (max-width:480px){.invites-container .actions-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:82px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px 10px 7px}.invites-container .cell{padding:0}.invites-container .create-invite-token{width:100%}.invites-container .create-new-token-dialog{width:85%}.invites-container .el-date-editor{width:150px}.invites-container .el-dialog__body{padding:5px 15px 0}.invites-container h1{margin:0}.invites-container .invite-token-table{width:100%;margin:0 5px;font-size:12px;font-weight:500}.invites-container .invite-via-email{width:100%;margin:10px 0 0}.invites-container .invite-via-email-dialog{width:85%}.invites-container .invites-header-container{margin:0 10px}.invites-container .info{margin:0 0 10px 5px}.invites-container th .cell{padding:0}.create-invite-token,.invite-via-email{width:100%}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-876c.90dffac4.css b/priv/static/adminfe/chunk-0961.d3692214.css similarity index 100% rename from priv/static/adminfe/chunk-876c.90dffac4.css rename to priv/static/adminfe/chunk-0961.d3692214.css diff --git a/priv/static/adminfe/chunk-0d8f.d85f5a29.css b/priv/static/adminfe/chunk-0d8f.d85f5a29.css deleted file mode 100644 index 931620872..000000000 --- a/priv/static/adminfe/chunk-0d8f.d85f5a29.css +++ /dev/null @@ -1 +0,0 @@ -.select-field[data-v-29abde8c]{width:350px}@media only screen and (max-width:480px){.select-field[data-v-29abde8c]{width:100%;margin-bottom:5px}}@media only screen and (max-width:801px) and (min-width:481px){.select-field[data-v-29abde8c]{width:50%}}.actions-button[data-v-3850612b]{text-align:left;width:350px;padding:10px}.actions-button-container[data-v-3850612b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-dropdown[data-v-3850612b]{float:right}.el-icon-edit[data-v-3850612b]{margin-right:5px}.tag-container[data-v-3850612b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.tag-text[data-v-3850612b]{padding-right:20px}.no-hover[data-v-3850612b]:hover{color:#606266;background-color:#fff;cursor:auto}.el-dialog__body{padding:20px}.create-account-form-item{margin-bottom:20px}.create-account-form-item-without-margin{margin-bottom:0}@media only screen and (max-width:480px){.create-user-dialog{width:85%}.create-account-form-item{margin-bottom:20px}.el-dialog__body{padding:20px}}.moderate-user-button{text-align:left;width:200px;padding:10px}.moderate-user-button-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.actions-button{text-align:left;width:350px;padding:10px}.actions-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0 15px 10px}.active-tag{color:#409eff;font-weight:700}.active-tag .el-icon-check{color:#409eff;float:right;margin:7px 0 0 15px}.el-dropdown-link:hover{cursor:pointer;color:#409eff}.create-account>.el-icon-plus{margin-right:5px}.password-reset-token{margin:0 0 14px}.password-reset-token-dialog{width:50%}.reset-password-link{text-decoration:underline}.users-container h1{margin:10px 0 0 15px}.users-container .pagination{margin:25px 0;text-align:center}.users-container .search{width:350px;float:right}.users-container .filter-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:22px 15px 15px}.users-container .user-count{color:grey;font-size:28px}@media only screen and (max-width:480px){.password-reset-token-dialog{width:85%}.users-container h1{margin:7px 10px 15px}.users-container .actions-button{width:100%}.users-container .actions-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 10px 7px}.users-container .el-icon-arrow-down{font-size:12px}.users-container .search{width:100%}.users-container .filter-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:82px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 10px}.users-container .el-tag{width:30px;display:inline-block;margin-bottom:4px;font-weight:700}.users-container .el-tag.el-tag--danger,.users-container .el-tag.el-tag--success{padding-left:8px}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-13e9.98eaadba.css b/priv/static/adminfe/chunk-13e9.98eaadba.css deleted file mode 100644 index 9f377eee2..000000000 --- a/priv/static/adminfe/chunk-13e9.98eaadba.css +++ /dev/null @@ -1 +0,0 @@ -.moderation-log-container[data-v-5d520014]{margin:0 15px}h1[data-v-5d520014]{margin:10px 0 20px}.el-timeline[data-v-5d520014]{margin:25px 45px 0 0;padding:0}.moderation-log-date-panel[data-v-5d520014]{width:350px}.moderation-log-nav-container[data-v-5d520014]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.moderation-log-search[data-v-5d520014]{width:350px}.moderation-log-user-select[data-v-5d520014]{margin:0 0 20px;width:350px}.search-container[data-v-5d520014]{text-align:right}.pagination[data-v-5d520014]{text-align:center}@media only screen and (max-width:480px){.moderation-log-date-panel[data-v-5d520014]{width:100%}.moderation-log-user-select[data-v-5d520014]{margin:0 0 10px;width:55%}.moderation-log-search[data-v-5d520014]{width:40%}}@media only screen and (max-width:801px) and (min-width:481px){.moderation-log-date-panel[data-v-5d520014]{width:55%}.moderation-log-user-select[data-v-5d520014]{margin:0 0 10px;width:55%}.moderation-log-search[data-v-5d520014]{width:40%}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-22d2.813009b9.css b/priv/static/adminfe/chunk-22d2.813009b9.css new file mode 100644 index 000000000..f0a98583e --- /dev/null +++ b/priv/static/adminfe/chunk-22d2.813009b9.css @@ -0,0 +1 @@ +.status-card{margin-bottom:10px}.status-card .account{text-decoration:underline;line-height:26px;font-size:13px}.status-card .image{width:20%}.status-card .image img{width:100%}.status-card .show-more-button{margin-left:5px}.status-card .status-account{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.status-card .status-avatar-img{display:inline-block;width:15px;height:15px;margin-right:5px}.status-card .status-account-name{display:inline-block;margin:0;height:22px}.status-card .status-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.status-card .status-checkbox{margin-right:7px}.status-card .status-content{font-size:15px;line-height:26px}.status-card .status-deleted{font-style:italic;margin-top:3px}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.status-card .status-without-content{font-style:italic}@media only screen and (max-width:480px){.el-message{min-width:80%}.el-message-box{width:80%}.status-card .el-card__header{padding:10px 17px}.status-card .el-tag{margin:3px 4px 3px 0}.status-card .status-account-container{margin-bottom:5px}.status-card .status-actions-button{margin:3px 0}.status-card .status-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.moderate-user-button{text-align:left;width:350px;padding:10px}.moderate-user-button-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media only screen and (max-width:480px){.moderate-user-button{width:100%}}.security-settings-container{display:-webkit-box;display:-ms-flexbox;display:flex}.security-settings-container label{width:15%;height:36px}.security-settings-modal .el-dialog__body{padding-top:10px}.security-settings-modal .el-form-item,.security-settings-modal .password-alert{margin-bottom:15px}.security-settings-modal .password-input{margin-bottom:0}.security-settings-submit-button{float:right}@media (max-width:800px){.security-settings-modal .el-dialog{width:90%}}.security-settings-modal .el-alert .el-alert__description{word-break:break-word;font-size:1em}.security-settings-modal .form-text{display:block;margin-top:.25rem;color:#909399}header[data-v-d4bc7d00]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;margin:22px 0;padding-left:15px}header h1[data-v-d4bc7d00]{margin:0 0 0 10px}table[data-v-d4bc7d00]{margin:10px 0 0 15px}table .name-col[data-v-d4bc7d00]{width:150px}.avatar-name-container[data-v-d4bc7d00]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table--border[data-v-d4bc7d00]:after,.el-table--group[data-v-d4bc7d00]:after,.el-table[data-v-d4bc7d00]:before{background-color:transparent}.image[data-v-d4bc7d00]{width:20%}.image img[data-v-d4bc7d00]{width:100%}.left-header-container[data-v-d4bc7d00]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.no-statuses[data-v-d4bc7d00]{margin-left:28px;color:#606266}.poll ul[data-v-d4bc7d00]{list-style-type:none;padding:0;width:30%}.reboot-button[data-v-d4bc7d00]{padding:10px;margin-left:10px}.recent-statuses-container[data-v-d4bc7d00]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:67%}.recent-statuses-header[data-v-d4bc7d00]{margin-top:10px}.security-setting-button[data-v-d4bc7d00]{margin-top:20px;width:100%}.statuses[data-v-d4bc7d00]{padding:0 20px 0 0}.show-private[data-v-d4bc7d00]{width:200px;text-align:left;line-height:67px;margin-right:20px}.show-private-statuses[data-v-d4bc7d00]{margin-left:28px;margin-bottom:20px}.recent-statuses[data-v-d4bc7d00]{margin-left:28px}.user-page-header[data-v-d4bc7d00]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 15px 0 20px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.user-page-header h1[data-v-d4bc7d00]{display:inline}.user-profile-card[data-v-d4bc7d00]{margin:0 20px;width:30%;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.user-profile-container[data-v-d4bc7d00]{display:-webkit-box;display:-ms-flexbox;display:flex}.user-profile-table[data-v-d4bc7d00]{margin:0}.user-profile-tag[data-v-d4bc7d00]{margin:0 4px 4px 0}@media only screen and (max-width:480px){.avatar-name-container[data-v-d4bc7d00]{margin-bottom:10px}.recent-statuses[data-v-d4bc7d00]{margin:20px 10px 15px}.recent-statuses-container[data-v-d4bc7d00]{width:100%;margin:0 10px}.show-private-statuses[data-v-d4bc7d00]{margin:0 10px 20px}.user-page-header[data-v-d4bc7d00]{padding:0;margin:7px 15px 15px 10px}.user-page-header-container .el-dropdown[data-v-d4bc7d00]{width:95%;margin:0 15px 15px 10px}.user-profile-card[data-v-d4bc7d00]{margin:0 10px;width:95%}.user-profile-card td[data-v-d4bc7d00]{width:80px}.user-profile-container[data-v-d4bc7d00]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}@media only screen and (max-width:801px) and (min-width:481px){.recent-statuses[data-v-d4bc7d00]{margin:20px 10px 15px 0}.recent-statuses-container[data-v-d4bc7d00]{width:97%;margin:0 20px}.show-private-statuses[data-v-d4bc7d00]{margin:0 10px 20px 0}.user-page-header[data-v-d4bc7d00]{padding:0;margin:7px 15px 20px 20px}.user-profile-card[data-v-d4bc7d00]{margin:0 20px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.user-profile-container[data-v-d4bc7d00]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-2b9c.feb61a2b.css b/priv/static/adminfe/chunk-2b9c.feb61a2b.css deleted file mode 100644 index f54eca1f5..000000000 --- a/priv/static/adminfe/chunk-2b9c.feb61a2b.css +++ /dev/null @@ -1 +0,0 @@ -.status-card{margin-bottom:10px}.status-card .account{text-decoration:underline;line-height:26px;font-size:13px}.status-card .image{width:20%}.status-card .image img{width:100%}.status-card .show-more-button{margin-left:5px}.status-card .status-account{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.status-card .status-avatar-img{display:inline-block;width:15px;height:15px;margin-right:5px}.status-card .status-account-name{display:inline-block;margin:0;height:22px}.status-card .status-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.status-card .status-checkbox{margin-right:7px}.status-card .status-content{font-size:15px;line-height:26px}.status-card .status-deleted{font-style:italic;margin-top:3px}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.status-card .status-without-content{font-style:italic}@media only screen and (max-width:480px){.el-message{min-width:80%}.el-message-box{width:80%}.status-card .el-card__header{padding:10px 17px}.status-card .el-tag{margin:3px 4px 3px 0}.status-card .status-account-container{margin-bottom:5px}.status-card .status-actions-button{margin:3px 0}.status-card .status-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.moderate-user-button{text-align:left;width:200px;padding:10px}.moderate-user-button-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media (max-width:800px){.security-settings-modal .el-dialog{width:90%}}.security-settings-modal .el-alert .el-alert__description{word-break:break-word;font-size:1em}.security-settings-modal .form-text{display:block;margin-top:.25rem;color:#909399}.avatar-name-container[data-v-77412d30],header[data-v-77412d30]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}header[data-v-77412d30]{margin:22px 0;padding-left:15px}header h1[data-v-77412d30]{margin:0 0 0 10px}table[data-v-77412d30]{margin:10px 0 0 15px}table .name-col[data-v-77412d30]{width:150px}.el-table--border[data-v-77412d30]:after,.el-table--group[data-v-77412d30]:after,.el-table[data-v-77412d30]:before{background-color:transparent}.poll ul[data-v-77412d30]{list-style-type:none;padding:0;width:30%}.image[data-v-77412d30]{width:20%}.image img[data-v-77412d30]{width:100%}.no-statuses[data-v-77412d30]{margin-left:28px;color:#606266}.recent-statuses-container[data-v-77412d30]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:67%}.recent-statuses-header[data-v-77412d30]{margin-top:10px}.statuses[data-v-77412d30]{padding:0 20px 0 0}.show-private[data-v-77412d30]{width:200px;text-align:left;line-height:67px;margin-right:20px}.show-private-statuses[data-v-77412d30]{margin-left:28px;margin-bottom:20px}.recent-statuses[data-v-77412d30]{margin-left:28px}.user-page-header[data-v-77412d30]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 20px}.user-page-header h1[data-v-77412d30]{display:inline}.user-profile-card[data-v-77412d30]{margin:0 20px;width:30%;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.user-profile-container[data-v-77412d30]{display:-webkit-box;display:-ms-flexbox;display:flex}.user-profile-table[data-v-77412d30]{margin:0}.user-profile-tag[data-v-77412d30]{margin:0 4px 4px 0}@media only screen and (max-width:480px){.avatar-name-container[data-v-77412d30]{margin-bottom:10px}.recent-statuses[data-v-77412d30]{margin:20px 10px 15px}.recent-statuses-container[data-v-77412d30]{width:100%;margin:0 10px}.show-private-statuses[data-v-77412d30]{margin:0 10px 20px}.user-page-header[data-v-77412d30]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:0;margin:7px 0 15px 10px}.user-profile-card[data-v-77412d30]{margin:0 10px;width:95%}.user-profile-card td[data-v-77412d30]{width:80px}.user-profile-container[data-v-77412d30]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}@media only screen and (max-width:801px) and (min-width:481px){.avatar-name-container[data-v-77412d30]{margin-bottom:20px}.recent-statuses[data-v-77412d30]{margin:20px 10px 15px 0}.recent-statuses-container[data-v-77412d30]{width:97%;margin:0 20px}.show-private-statuses[data-v-77412d30]{margin:0 10px 20px 0}.user-page-header[data-v-77412d30]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:0;margin:7px 0 20px 20px}.user-profile-card[data-v-77412d30]{margin:0 20px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.user-profile-container[data-v-77412d30]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-136a.f1130f8e.css b/priv/static/adminfe/chunk-3384.2278f87c.css similarity index 64% rename from priv/static/adminfe/chunk-136a.f1130f8e.css rename to priv/static/adminfe/chunk-3384.2278f87c.css index f492b37d0..96e3273eb 100644 --- a/priv/static/adminfe/chunk-136a.f1130f8e.css +++ b/priv/static/adminfe/chunk-3384.2278f87c.css @@ -1 +1 @@ -.copy-popover{width:330px}.emoji-buttons{place-self:center;min-width:200px}.emoji-container-grid{display:grid;grid-template-columns:75px auto auto 200px;grid-column-gap:15px;margin-bottom:10px}.emoji-preview-img{max-width:100%;place-self:center}.emoji-info{place-self:center}.copy-pack-container{place-self:center stretch}.copy-pack-select{width:100%}.remote-emoji-container-grid{display:grid;grid-template-columns:75px auto auto 160px;grid-column-gap:15px;margin-bottom:10px}@media only screen and (max-width:480px){.emoji-container-flex{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border:1px solid #dcdfe6;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;padding:15px;margin:0 15px 15px 0}.emoji-info,.emoji-preview-img{margin-bottom:10px}.emoji-buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;width:100%}.emoji-buttons button{padding:10px 5px;width:47%}}@media only screen and (max-width:801px) and (min-width:481px){.emoji-container-grid{grid-column-gap:10px}.emoji-buttons .el-button+.el-button{margin-left:5px}.remote-emoji-container-grid{grid-column-gap:10px}}.add-new-emoji{height:36px;font-size:14px;font-weight:700;color:#606266}.text{line-height:20px;margin-right:15px}.upload-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.upload-button{margin-left:10px}.upload-file-url{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media only screen and (max-width:480px){.new-emoji-uploader-form label.el-form-item__label{padding:0}}.download-archive{width:250px}.download-pack-button-container{width:265px}.download-pack-button-container .el-link,.download-pack-button-container .el-link span,.download-pack-button-container .el-link span .download-archive{width:inherit}.download-shared-pack{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:10px}.download-shared-pack-button{margin-left:10px}.el-collapse-item__content{padding-bottom:0}.el-collapse-item__header{height:36px;font-size:14px;font-weight:700;color:#606266}.emoji-pack-card{margin-top:5px}.emoji-pack-metadata .el-form-item{margin-bottom:10px}.has-background .el-collapse-item__header{background:#f6f6f6}.no-background .el-collapse-item__header{background:#fff}.pack-button-container{margin:0 0 18px 120px}.save-pack-button-container{margin-bottom:8px;width:265px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media only screen and (max-width:480px){.delete-pack-button{width:45%}.download-pack-button-container{width:100%}.download-shared-pack{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.download-shared-pack-button{margin-left:0;margin-top:10px;padding:10px}.pack-button-container{width:100%;margin:0 0 22px}.remote-pack-metadata .el-form-item__content{line-height:24px;margin-top:4px}.save-pack-button{width:54%}.save-pack-button-container{margin-bottom:8px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.save-pack-button-container button{padding:10px 5px}.save-pack-button-container .el-button+.el-button{margin-left:3px}}.emoji-packs-header-button-container{margin:0 0 22px 15px}.create-pack,.emoji-packs-header-button-container{display:-webkit-box;display:-ms-flexbox;display:flex}.create-pack{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.create-pack-button{margin-left:10px}.emoji-packs-form{margin:0 30px}.emoji-packs-header{margin:10px 0 20px 15px}.import-pack-button{margin-left:10px}.line{width:100%;height:0;border:1px solid #eee;margin-bottom:22px}@media only screen and (min-width:1824px){.emoji-packs{max-width:1824px;margin:auto}}@media only screen and (max-width:480px){.create-pack{height:82px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.create-pack-button{margin-left:0}.divider{margin:15px 0}.el-message{min-width:80%}.el-message-box{width:80%}.emoji-packs-form{margin:0 7px}.emoji-packs-form label{padding-right:8px}.emoji-packs-form .el-form-item{margin-bottom:15px}.emoji-packs-header{margin:15px}.emoji-packs-header-button-container{height:82px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.emoji-packs-header-button-container .el-button+.el-button{margin:7px 0 0}.emoji-packs-header-button-container .el-button+.el-button,.reload-emoji-button{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}} \ No newline at end of file +.copy-popover{width:330px}.emoji-buttons{place-self:center;min-width:200px}.emoji-container-grid{display:grid;grid-template-columns:75px auto auto 200px;grid-column-gap:15px;margin-bottom:10px}.emoji-preview-img{max-width:100%;place-self:center}.emoji-info{place-self:center}.copy-pack-container{place-self:center stretch}.copy-pack-select{width:100%}.remote-emoji-container-grid{display:grid;grid-template-columns:75px auto auto 160px;grid-column-gap:15px;margin-bottom:10px}@media only screen and (max-width:480px){.emoji-container-flex{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border:1px solid #dcdfe6;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;padding:15px;margin:0 15px 15px 0}.emoji-info,.emoji-preview-img{margin-bottom:10px}.emoji-buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;width:100%}.emoji-buttons button{padding:10px 5px;width:47%}}@media only screen and (max-width:801px) and (min-width:481px){.emoji-container-grid{grid-column-gap:10px}.emoji-buttons .el-button+.el-button{margin-left:5px}.remote-emoji-container-grid{grid-column-gap:10px}}.add-new-emoji{height:36px;font-size:14px;font-weight:700;color:#606266}.text{line-height:20px;margin-right:15px}.upload-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.upload-button{margin-left:10px}.upload-file-url{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media only screen and (max-width:480px){.new-emoji-uploader-form label.el-form-item__label{padding:0}}.download-archive{width:250px}.download-pack-button-container{width:265px}.download-pack-button-container .el-link,.download-pack-button-container .el-link span,.download-pack-button-container .el-link span .download-archive{width:inherit}.download-shared-pack{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:10px}.download-shared-pack-button{margin-left:10px}.el-collapse-item__content{padding-bottom:0}.el-collapse-item__header{height:36px;font-size:14px;font-weight:700;color:#606266}.emoji-pack-card{margin-top:5px}.emoji-pack-metadata .el-form-item{margin-bottom:10px}.has-background .el-collapse-item__header{background:#f6f6f6}.no-background .el-collapse-item__header{background:#fff}.pack-button-container{margin:0 0 18px 120px}.save-pack-button-container{margin-bottom:8px;width:265px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media only screen and (max-width:480px){.delete-pack-button{width:45%}.download-pack-button-container{width:100%}.download-shared-pack{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.download-shared-pack-button{margin-left:0;margin-top:10px;padding:10px}.pack-button-container{width:100%;margin:0 0 22px}.remote-pack-metadata .el-form-item__content{line-height:24px;margin-top:4px}.save-pack-button{width:54%}.save-pack-button-container{margin-bottom:8px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.save-pack-button-container button{padding:10px 5px}.save-pack-button-container .el-button+.el-button{margin-left:3px}}.emoji-header-container{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:0 15px 22px}.create-pack,.emoji-header-container,.emoji-packs-header-button-container{display:-webkit-box;display:-ms-flexbox;display:flex}.create-pack{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.create-pack-button{margin-left:10px}.emoji-packs-form{margin:0 30px}.emoji-packs-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:10px 15px 15px}.import-pack-button{margin-left:10px}h1{margin:0}.line{width:100%;height:0;border:1px solid #eee;margin-bottom:22px}.reboot-button{padding:10px;margin:0;width:145px}@media only screen and (min-width:1824px){.emoji-packs{max-width:1824px;margin:auto}}@media only screen and (max-width:480px){.create-pack{height:82px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.create-pack-button{margin-left:0}.divider{margin:15px 0}.el-message{min-width:80%}.el-message-box{width:80%}.emoji-header-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.emoji-packs-form{margin:0 7px}.emoji-packs-form label{padding-right:8px}.emoji-packs-form .el-form-item{margin-bottom:15px}.emoji-packs-header{margin:15px}.emoji-packs-header-button-container{height:82px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.emoji-packs-header-button-container .el-button+.el-button{margin:7px 0 0}.emoji-packs-header-button-container .el-button+.el-button,.reload-emoji-button{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-4011.c4799067.css b/priv/static/adminfe/chunk-4011.c4799067.css new file mode 100644 index 000000000..1fb099c0c --- /dev/null +++ b/priv/static/adminfe/chunk-4011.c4799067.css @@ -0,0 +1 @@ +a{text-decoration:underline}.center-label label{text-align:center}.center-label label span{float:left}.code{background-color:rgba(173,190,214,.48);border-radius:3px;font-family:monospace;padding:0 3px}.delete-setting-button{margin-left:5px}.description>p{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700;line-height:20px;margin:0 0 14px}.description>p code{display:inline;padding:2px 3px;font-size:14px}.description-container{overflow-wrap:break-word;margin-bottom:0}.divider{margin:0 0 18px}.divider.thick-line{height:2px}.docs-search-container{float:right;margin-right:30px}.editable-keyword-container{width:100%}.el-form-item .rate-limit{margin-right:0}.el-input-group__prepend{padding-left:10px;padding-right:10px}.el-tabs__header{z-index:3000}.esshd-list{margin:0}.expl,.expl>p{color:#666;font-size:13px;line-height:22px;margin:5px 0 0;overflow-wrap:break-word;overflow:hidden;text-overflow:ellipsis}.expl>p code,.expl code{display:inline;line-height:22px;font-size:13px;padding:2px 3px}.follow-relay{width:350px;margin-right:7px}.form-container{margin-bottom:80px}.grouped-settings-header{margin:0 0 14px}.highlight{background-color:#e6e6e6}.icons-button-container{width:100%;margin-bottom:10px}.icons-button-desc{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;margin-left:5px}.icon-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:95%}.icon-values-container{display:-webkit-box;display:-ms-flexbox;display:flex;margin:0 10px 10px 0}.icon-key-input{width:30%;margin-right:8px}.icon-minus-button{width:36px;height:36px}.icon-value-input{width:70%;margin-left:8px}.icons-container,.input-container{display:-webkit-box;display:-ms-flexbox;display:flex}.input-container{-webkit-box-align:start;-ms-flex-align:start;align-items:start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.input-container .el-form-item{margin-right:30px;width:100%}.input-container .el-select,.keyword-container{width:100%}label{overflow:hidden;text-overflow:ellipsis}.label-font{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700}.limit-button-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.limit-expl{margin-left:10px}.limit-input{width:47%;margin:0 0 5px 1%}.line{width:100%;height:0;border:1px solid #eee;margin-bottom:18px}.mascot{margin-bottom:15px}.mascot-container{width:100%}.mascot-input{margin-bottom:7px}.mascot-name-container{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:7px}.mascot-name-input{margin-right:10px}.multiple-select-container{width:100%}.name-input{width:30%;margin-right:8px}.pattern-input{width:20%;margin-right:8px}.proxy-url-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:10px;width:100%}.proxy-url-host-input{width:35%;margin-right:8px}.proxy-url-value-input{width:35%;margin-left:8px;margin-right:10px}.prune-options{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.prune-options .el-radio{margin-top:11px}.rate-limit .el-form-item__content{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.rate-limit-container,.rate-limit-content{width:100%}.rate-limit-label{float:right}.rate-limit-label-container{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700;height:36px;width:100%;margin-right:10px}.reboot-button{width:145px;text-align:left;padding:10px;float:right;margin:0 30px 0 0}.reboot-button-container{width:100%;position:fixed;top:60px;right:0;z-index:2000}.relays-container{margin:0 15px}.replacement-input{width:80%;margin-left:8px;margin-right:10px}.scale-input{width:47%;margin:0 1% 5px 0}.setting-input{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:10px}.settings-container{max-width:1824px;margin:auto}.settings-container .el-tabs{margin-top:20px}.settings-delete-button{margin-left:5px}.settings-docs-button{width:163px;text-align:left;padding:10px}.settings-header{margin:10px 15px 15px}.header-sidebar-opened{max-width:1585px}.header-sidebar-closed{max-width:1728px}.settings-header-container{height:87px}.settings-search-input{width:350px;margin-left:5px}.single-input{margin-right:10px}.socks5-checkbox{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700;margin-left:10px}.socks5-checkbox-container{width:40%;height:36px;margin-right:5px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ssl-tls-opts{margin:36px 0 0}.submit-button{float:right;margin:0 30px 22px 0}.submit-button-container{width:100%;position:fixed;bottom:0;right:0;z-index:2000}.switch-input{height:36px}.text{line-height:20px;margin-right:15px}.upload-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.value-input{width:70%;margin-left:8px;margin-right:10px}@media only screen and (min-width:1824px){.header-sidebar-closed{max-width:1772px}.header-sidebar-opened{max-width:1630px}.reboot-button-container{width:100%;max-width:inherit;margin-left:auto;margin-right:auto;right:auto}.reboot-sidebar-opened{max-width:1630px}.reboot-sidebar-closed{max-width:1772px}.sidebar-closed{max-width:1586px}.sidebar-opened{max-width:1442px}.submit-button-container{width:100%;max-width:inherit;margin-left:auto;margin-right:auto;right:auto}}@media only screen and (max-width:480px){.crontab,.crontab label{width:100%}.delete-setting-button{margin:4px 0 0 5px;height:28px}.delete-setting-button-container{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.description>p{line-height:18px;margin:0 5px 7px 15px}.description>p code{display:inline;line-height:18px;padding:2px 3px;font-size:14px}.divider{margin:0 0 10px}.divider .thick-line{height:2px}.follow-relay{width:70%;margin-right:5px}.follow-relay input{width:100%}.follow-relay-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}h1{font-size:24px}.input{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.input-container{width:100%}.input-container .el-form-item:first-child{margin:0;padding:0 15px 10px}.input-container .el-form-item.crontab-container:first-child{margin:0;padding:0}.input-container .el-form-item:first-child .mascot-form-item,.input-container .el-form-item:first-child .rate-limit{padding:0}.input-container .settings-delete-button{margin-top:4px;float:right}.input-row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.label-with-margin{margin-left:15px}.limit-input{width:45%}.nav-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px}.proxy-url-input{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-bottom:0}.proxy-url-host-input{width:100%;margin-bottom:5px}.proxy-url-value-input{width:100%;margin-left:0}.prune-options{height:80px}.prune-options,.rate-limit .el-form-item__content{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.rate-limit-label{float:left}.reboot-button{margin:0 15px 0 0}.reboot-button-container{top:57px}.scale-input{width:45%}.setting-label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.settings-header{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;display:inline-block;margin:10px 15px 15px}.docs-search-container{float:right}.settings-search-input{width:100%;margin-left:0}.settings-search-input-container{margin:0 15px 15px}.settings-menu{width:163px;margin-right:5px}.socks5-checkbox-container{width:100%}.submit-button{margin:0 15px 22px 0}.el-input__inner{padding:0 5px}.el-form-item__label:not(.no-top-margin){padding-bottom:5px;line-height:22px;margin-top:7px;width:100%}.el-form-item__label:not(.no-top-margin) span{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.el-message{min-width:80%}.el-select__tags{overflow:hidden}.expl,.expl>p{line-height:16px}.icon-key-input{width:40%;margin-right:4px}.icon-minus-button{width:28px;height:28px;margin-top:4px}.icon-values-container{margin:0 7px 7px 0}.icon-value-input{width:60%;margin-left:4px}.icons-button-container{line-height:24px}.line{margin-bottom:10px}.mascot-form-item .el-form-item__label:not(.no-top-margin){margin:0;padding:0}.mascot-container{margin-bottom:5px}.name-input{width:40%;margin-right:5px}p.expl{line-height:20px}.pattern-input{width:40%;margin-right:4px}.relays-container{margin:0 10px}.replacement-input{width:60%;margin-left:4px;margin-right:5px}.settings-header-container{height:45px}.value-input{width:60%;margin-left:5px;margin-right:8px}}@media only screen and (max-width:818px) and (min-width:481px){.delete-setting-button{margin:4px 0 0 10px;height:28px}.delete-setting-button-container{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.description>p{line-height:18px;margin:0 15px 10px 0}.icon-minus-button{width:28px;height:28px;margin-top:4px}.input{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.input-container .el-form-item__label span{margin-left:10px}.input-row,.nav-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.nav-container{height:36px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px 30px 15px 15px}.rate-limit-label-container{width:250px}.settings-delete-button{float:right}.settings-header-container{height:36px}.settings-search-input{width:250px;margin:0 0 15px 15px}}a[data-v-667428a6]{text-decoration:underline}.center-label label[data-v-667428a6]{text-align:center}.center-label label span[data-v-667428a6]{float:left}.code[data-v-667428a6]{background-color:rgba(173,190,214,.48);border-radius:3px;font-family:monospace;padding:0 3px}.delete-setting-button[data-v-667428a6]{margin-left:5px}.description>p[data-v-667428a6]{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700;line-height:20px;margin:0 0 14px}.description>p code[data-v-667428a6]{display:inline;padding:2px 3px;font-size:14px}.description-container[data-v-667428a6]{overflow-wrap:break-word;margin-bottom:0}.divider[data-v-667428a6]{margin:0 0 18px}.divider.thick-line[data-v-667428a6]{height:2px}.docs-search-container[data-v-667428a6]{float:right;margin-right:30px}.editable-keyword-container[data-v-667428a6]{width:100%}.el-form-item .rate-limit[data-v-667428a6]{margin-right:0}.el-input-group__prepend[data-v-667428a6]{padding-left:10px;padding-right:10px}.el-tabs__header[data-v-667428a6]{z-index:3000}.esshd-list[data-v-667428a6]{margin:0}.expl>p[data-v-667428a6],.expl[data-v-667428a6]{color:#666;font-size:13px;line-height:22px;margin:5px 0 0;overflow-wrap:break-word;overflow:hidden;text-overflow:ellipsis}.expl>p code[data-v-667428a6],.expl code[data-v-667428a6]{display:inline;line-height:22px;font-size:13px;padding:2px 3px}.follow-relay[data-v-667428a6]{width:350px;margin-right:7px}.form-container[data-v-667428a6]{margin-bottom:80px}.grouped-settings-header[data-v-667428a6]{margin:0 0 14px}.highlight[data-v-667428a6]{background-color:#e6e6e6}.icons-button-container[data-v-667428a6]{width:100%;margin-bottom:10px}.icons-button-desc[data-v-667428a6]{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;margin-left:5px}.icon-container[data-v-667428a6]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:95%}.icon-values-container[data-v-667428a6]{display:-webkit-box;display:-ms-flexbox;display:flex;margin:0 10px 10px 0}.icon-key-input[data-v-667428a6]{width:30%;margin-right:8px}.icon-minus-button[data-v-667428a6]{width:36px;height:36px}.icon-value-input[data-v-667428a6]{width:70%;margin-left:8px}.icons-container[data-v-667428a6],.input-container[data-v-667428a6]{display:-webkit-box;display:-ms-flexbox;display:flex}.input-container[data-v-667428a6]{-webkit-box-align:start;-ms-flex-align:start;align-items:start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.input-container .el-form-item[data-v-667428a6]{margin-right:30px;width:100%}.input-container .el-select[data-v-667428a6],.keyword-container[data-v-667428a6]{width:100%}label[data-v-667428a6]{overflow:hidden;text-overflow:ellipsis}.label-font[data-v-667428a6]{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700}.limit-button-container[data-v-667428a6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.limit-expl[data-v-667428a6]{margin-left:10px}.limit-input[data-v-667428a6]{width:47%;margin:0 0 5px 1%}.line[data-v-667428a6]{width:100%;height:0;border:1px solid #eee;margin-bottom:18px}.mascot[data-v-667428a6]{margin-bottom:15px}.mascot-container[data-v-667428a6]{width:100%}.mascot-input[data-v-667428a6]{margin-bottom:7px}.mascot-name-container[data-v-667428a6]{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:7px}.mascot-name-input[data-v-667428a6]{margin-right:10px}.multiple-select-container[data-v-667428a6]{width:100%}.name-input[data-v-667428a6]{width:30%;margin-right:8px}.pattern-input[data-v-667428a6]{width:20%;margin-right:8px}.proxy-url-input[data-v-667428a6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:10px;width:100%}.proxy-url-host-input[data-v-667428a6]{width:35%;margin-right:8px}.proxy-url-value-input[data-v-667428a6]{width:35%;margin-left:8px;margin-right:10px}.prune-options[data-v-667428a6]{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.prune-options .el-radio[data-v-667428a6]{margin-top:11px}.rate-limit .el-form-item__content[data-v-667428a6]{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.rate-limit-container[data-v-667428a6],.rate-limit-content[data-v-667428a6]{width:100%}.rate-limit-label[data-v-667428a6]{float:right}.rate-limit-label-container[data-v-667428a6]{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700;height:36px;width:100%;margin-right:10px}.reboot-button[data-v-667428a6]{width:145px;text-align:left;padding:10px;float:right;margin:0 30px 0 0}.reboot-button-container[data-v-667428a6]{width:100%;position:fixed;top:60px;right:0;z-index:2000}.relays-container[data-v-667428a6]{margin:0 15px}.replacement-input[data-v-667428a6]{width:80%;margin-left:8px;margin-right:10px}.scale-input[data-v-667428a6]{width:47%;margin:0 1% 5px 0}.setting-input[data-v-667428a6]{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:10px}.settings-container[data-v-667428a6]{max-width:1824px;margin:auto}.settings-container .el-tabs[data-v-667428a6]{margin-top:20px}.settings-delete-button[data-v-667428a6]{margin-left:5px}.settings-docs-button[data-v-667428a6]{width:163px;text-align:left;padding:10px}.settings-header[data-v-667428a6]{margin:10px 15px 15px}.header-sidebar-opened[data-v-667428a6]{max-width:1585px}.header-sidebar-closed[data-v-667428a6]{max-width:1728px}.settings-header-container[data-v-667428a6]{height:87px}.settings-search-input[data-v-667428a6]{width:350px;margin-left:5px}.single-input[data-v-667428a6]{margin-right:10px}.socks5-checkbox[data-v-667428a6]{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700;margin-left:10px}.socks5-checkbox-container[data-v-667428a6]{width:40%;height:36px;margin-right:5px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ssl-tls-opts[data-v-667428a6]{margin:36px 0 0}.submit-button[data-v-667428a6]{float:right;margin:0 30px 22px 0}.submit-button-container[data-v-667428a6]{width:100%;position:fixed;bottom:0;right:0;z-index:2000}.switch-input[data-v-667428a6]{height:36px}.text[data-v-667428a6]{line-height:20px;margin-right:15px}.upload-container[data-v-667428a6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.value-input[data-v-667428a6]{width:70%;margin-left:8px;margin-right:10px}@media only screen and (min-width:1824px){.header-sidebar-closed[data-v-667428a6]{max-width:1772px}.header-sidebar-opened[data-v-667428a6]{max-width:1630px}.reboot-button-container[data-v-667428a6]{width:100%;max-width:inherit;margin-left:auto;margin-right:auto;right:auto}.reboot-sidebar-opened[data-v-667428a6]{max-width:1630px}.reboot-sidebar-closed[data-v-667428a6]{max-width:1772px}.sidebar-closed[data-v-667428a6]{max-width:1586px}.sidebar-opened[data-v-667428a6]{max-width:1442px}.submit-button-container[data-v-667428a6]{width:100%;max-width:inherit;margin-left:auto;margin-right:auto;right:auto}}@media only screen and (max-width:480px){.crontab[data-v-667428a6],.crontab label[data-v-667428a6]{width:100%}.delete-setting-button[data-v-667428a6]{margin:4px 0 0 5px;height:28px}.delete-setting-button-container[data-v-667428a6]{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.description>p[data-v-667428a6]{line-height:18px;margin:0 5px 7px 15px}.description>p code[data-v-667428a6]{display:inline;line-height:18px;padding:2px 3px;font-size:14px}.divider[data-v-667428a6]{margin:0 0 10px}.divider .thick-line[data-v-667428a6]{height:2px}.follow-relay[data-v-667428a6]{width:70%;margin-right:5px}.follow-relay input[data-v-667428a6]{width:100%}.follow-relay-container[data-v-667428a6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}h1[data-v-667428a6]{font-size:24px}.input[data-v-667428a6]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.input-container[data-v-667428a6]{width:100%}.input-container .el-form-item[data-v-667428a6]:first-child{margin:0;padding:0 15px 10px}.input-container .el-form-item.crontab-container[data-v-667428a6]:first-child{margin:0;padding:0}.input-container .el-form-item:first-child .mascot-form-item[data-v-667428a6],.input-container .el-form-item:first-child .rate-limit[data-v-667428a6]{padding:0}.input-container .settings-delete-button[data-v-667428a6]{margin-top:4px;float:right}.input-row[data-v-667428a6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.label-with-margin[data-v-667428a6]{margin-left:15px}.limit-input[data-v-667428a6]{width:45%}.nav-container[data-v-667428a6]{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px}.proxy-url-input[data-v-667428a6]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-bottom:0}.proxy-url-host-input[data-v-667428a6]{width:100%;margin-bottom:5px}.proxy-url-value-input[data-v-667428a6]{width:100%;margin-left:0}.prune-options[data-v-667428a6]{height:80px}.prune-options[data-v-667428a6],.rate-limit .el-form-item__content[data-v-667428a6]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.rate-limit-label[data-v-667428a6]{float:left}.reboot-button[data-v-667428a6]{margin:0 15px 0 0}.reboot-button-container[data-v-667428a6]{top:57px}.scale-input[data-v-667428a6]{width:45%}.setting-label[data-v-667428a6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.settings-header[data-v-667428a6]{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;display:inline-block;margin:10px 15px 15px}.docs-search-container[data-v-667428a6]{float:right}.settings-search-input[data-v-667428a6]{width:100%;margin-left:0}.settings-search-input-container[data-v-667428a6]{margin:0 15px 15px}.settings-menu[data-v-667428a6]{width:163px;margin-right:5px}.socks5-checkbox-container[data-v-667428a6]{width:100%}.submit-button[data-v-667428a6]{margin:0 15px 22px 0}.el-input__inner[data-v-667428a6]{padding:0 5px}.el-form-item__label[data-v-667428a6]:not(.no-top-margin){padding-bottom:5px;line-height:22px;margin-top:7px;width:100%}.el-form-item__label:not(.no-top-margin) span[data-v-667428a6]{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.el-message[data-v-667428a6]{min-width:80%}.el-select__tags[data-v-667428a6]{overflow:hidden}.expl>p[data-v-667428a6],.expl[data-v-667428a6]{line-height:16px}.icon-key-input[data-v-667428a6]{width:40%;margin-right:4px}.icon-minus-button[data-v-667428a6]{width:28px;height:28px;margin-top:4px}.icon-values-container[data-v-667428a6]{margin:0 7px 7px 0}.icon-value-input[data-v-667428a6]{width:60%;margin-left:4px}.icons-button-container[data-v-667428a6]{line-height:24px}.line[data-v-667428a6]{margin-bottom:10px}.mascot-form-item .el-form-item__label[data-v-667428a6]:not(.no-top-margin){margin:0;padding:0}.mascot-container[data-v-667428a6]{margin-bottom:5px}.name-input[data-v-667428a6]{width:40%;margin-right:5px}p.expl[data-v-667428a6]{line-height:20px}.pattern-input[data-v-667428a6]{width:40%;margin-right:4px}.relays-container[data-v-667428a6]{margin:0 10px}.replacement-input[data-v-667428a6]{width:60%;margin-left:4px;margin-right:5px}.settings-header-container[data-v-667428a6]{height:45px}.value-input[data-v-667428a6]{width:60%;margin-left:5px;margin-right:8px}}@media only screen and (max-width:818px) and (min-width:481px){.delete-setting-button[data-v-667428a6]{margin:4px 0 0 10px;height:28px}.delete-setting-button-container[data-v-667428a6]{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.description>p[data-v-667428a6]{line-height:18px;margin:0 15px 10px 0}.icon-minus-button[data-v-667428a6]{width:28px;height:28px;margin-top:4px}.input[data-v-667428a6]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.input-container .el-form-item__label span[data-v-667428a6]{margin-left:10px}.input-row[data-v-667428a6],.nav-container[data-v-667428a6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.nav-container[data-v-667428a6]{height:36px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px 30px 15px 15px}.rate-limit-label-container[data-v-667428a6]{width:250px}.settings-delete-button[data-v-667428a6]{float:right}.settings-header-container[data-v-667428a6]{height:36px}.settings-search-input[data-v-667428a6]{width:250px;margin:0 0 15px 15px}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-46ef.145de4f9.css b/priv/static/adminfe/chunk-46ef.145de4f9.css deleted file mode 100644 index deb5249ac..000000000 --- a/priv/static/adminfe/chunk-46ef.145de4f9.css +++ /dev/null @@ -1 +0,0 @@ -.invites-container .actions-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:20px 15px 15px}.invites-container .create-invite-token{text-align:left;width:350px;padding:10px}.invites-container .create-new-token-dialog{width:40%}.invites-container .el-dialog__body{padding:5px 20px 0}.invites-container h1{margin:10px 0 0 15px}.invites-container .icon{margin-right:5px}.invites-container .invite-token-table{width:100%;margin:0 15px}.invites-container .invite-via-email{text-align:left;width:350px;padding:10px}.invites-container .invite-via-email-dialog{width:50%}.invites-container .info{color:#666;font-size:13px;line-height:22px;margin:0 0 10px}@media only screen and (max-width:480px){.invites-container .actions-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:82px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px 10px 7px}.invites-container .cell{padding:0}.invites-container .create-invite-token{width:100%}.invites-container .create-new-token-dialog{width:85%}.invites-container .el-date-editor{width:150px}.invites-container .el-dialog__body{padding:5px 15px 0}.invites-container h1{margin:7px 10px 15px}.invites-container .invite-token-table{width:100%;margin:0 5px;font-size:12px;font-weight:500}.invites-container .invite-via-email{width:100%;margin:10px 0 0}.invites-container .invite-via-email-dialog{width:85%}.invites-container .info{margin:0 0 10px 5px}.invites-container th .cell{padding:0}.create-invite-token,.invite-via-email{width:100%}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-6b68.0cc00484.css b/priv/static/adminfe/chunk-6b68.0cc00484.css new file mode 100644 index 000000000..7061b3d03 --- /dev/null +++ b/priv/static/adminfe/chunk-6b68.0cc00484.css @@ -0,0 +1 @@ +.actions-button[data-v-3850612b]{text-align:left;width:350px;padding:10px}.actions-button-container[data-v-3850612b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-dropdown[data-v-3850612b]{float:right}.el-icon-edit[data-v-3850612b]{margin-right:5px}.tag-container[data-v-3850612b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.tag-text[data-v-3850612b]{padding-right:20px}.no-hover[data-v-3850612b]:hover{color:#606266;background-color:#fff;cursor:auto} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-4ffb.dd09fe2e.css b/priv/static/adminfe/chunk-6e81.0e80d020.css similarity index 100% rename from priv/static/adminfe/chunk-4ffb.dd09fe2e.css rename to priv/static/adminfe/chunk-6e81.0e80d020.css diff --git a/priv/static/adminfe/chunk-7637.941c4edb.css b/priv/static/adminfe/chunk-7637.941c4edb.css new file mode 100644 index 000000000..be1d183a9 --- /dev/null +++ b/priv/static/adminfe/chunk-7637.941c4edb.css @@ -0,0 +1 @@ +.moderation-log-container[data-v-103bba83]{margin:0 15px}h1[data-v-103bba83]{margin:0}.el-timeline[data-v-103bba83]{margin:25px 45px 0 0;padding:0}.moderation-log-date-panel[data-v-103bba83]{width:350px}.moderation-log-header-container[data-v-103bba83]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:10px 0 15px}.moderation-log-header-container[data-v-103bba83],.moderation-log-nav-container[data-v-103bba83]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.moderation-log-search[data-v-103bba83]{width:350px}.moderation-log-user-select[data-v-103bba83]{margin:0 0 20px;width:350px}.reboot-button[data-v-103bba83]{padding:10px;margin:0;width:145px}.search-container[data-v-103bba83]{text-align:right}.pagination[data-v-103bba83]{text-align:center}@media only screen and (max-width:480px){h1[data-v-103bba83]{font-size:24px}.moderation-log-date-panel[data-v-103bba83]{width:100%}.moderation-log-user-select[data-v-103bba83]{margin:0 0 10px;width:55%}.moderation-log-search[data-v-103bba83]{width:40%}}@media only screen and (max-width:801px) and (min-width:481px){.moderation-log-date-panel[data-v-103bba83]{width:55%}.moderation-log-user-select[data-v-103bba83]{margin:0 0 10px;width:55%}.moderation-log-search[data-v-103bba83]{width:40%}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-87b3.3c6ede9c.css b/priv/static/adminfe/chunk-87b3.3c6ede9c.css deleted file mode 100644 index f0e6bf4ee..000000000 --- a/priv/static/adminfe/chunk-87b3.3c6ede9c.css +++ /dev/null @@ -1 +0,0 @@ -a{text-decoration:underline}.center-label label{text-align:center}.center-label label span{float:left}.code{background-color:rgba(173,190,214,.48);border-radius:3px;font-family:monospace;padding:0 3px}.delete-setting-button{margin-left:5px}.description>p{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700;line-height:20px;margin:0 0 14px}.description>p code{display:inline;padding:2px 3px;font-size:14px}.description-container{overflow-wrap:break-word;margin-bottom:0}.divider{margin:0 0 18px}.divider.thick-line{height:2px}.editable-keyword-container{width:100%}.el-form-item .rate-limit{margin-right:0}.el-input-group__prepend{padding-left:10px;padding-right:10px}.esshd-list{margin:0}.expl,.expl>p{color:#666;font-size:13px;line-height:22px;margin:5px 0 0;overflow-wrap:break-word;overflow:hidden;text-overflow:ellipsis}.expl>p code,.expl code{display:inline;line-height:22px;font-size:13px;padding:2px 3px}.follow-relay{width:350px;margin-right:7px}.form-container{margin-bottom:80px}.grouped-settings-header{margin:0 0 14px}.highlight{background-color:#e6e6e6}.icons-button-container{width:100%;margin-bottom:10px}.icons-button-desc{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;margin-left:5px}.icon-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:95%}.icon-values-container{display:-webkit-box;display:-ms-flexbox;display:flex;margin:0 10px 10px 0}.icon-key-input{width:30%;margin-right:8px}.icon-minus-button{width:36px;height:36px}.icon-value-input{width:70%;margin-left:8px}.icons-container,.input-container{display:-webkit-box;display:-ms-flexbox;display:flex}.input-container{-webkit-box-align:start;-ms-flex-align:start;align-items:start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.input-container .el-form-item{margin-right:30px;width:100%}.input-container .el-select,.keyword-container{width:100%}label{overflow:hidden;text-overflow:ellipsis}.label-font{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700}.limit-button-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.limit-expl{margin-left:10px}.limit-input{width:47%;margin:0 0 5px 1%}.line{width:100%;height:0;border:1px solid #eee;margin-bottom:18px}.mascot{margin-bottom:15px}.mascot-container{width:100%}.mascot-input{margin-bottom:7px}.mascot-name-container{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:7px}.mascot-name-input{margin-right:10px}.multiple-select-container{width:100%}.name-input{width:30%;margin-right:8px}.pattern-input{width:20%;margin-right:8px}.proxy-url-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:10px;width:100%}.proxy-url-host-input{width:35%;margin-right:8px}.proxy-url-value-input{width:35%;margin-left:8px;margin-right:10px}.prune-options{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.prune-options .el-radio{margin-top:11px}.rate-limit .el-form-item__content{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.rate-limit-container,.rate-limit-content{width:100%}.rate-limit-label{float:right}.rate-limit-label-container{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700;height:36px;width:100%;margin-right:10px}.relays-container{margin:0 15px}.replacement-input{width:80%;margin-left:8px;margin-right:10px}.scale-input{width:47%;margin:0 1% 5px 0}.setting-input{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:10px}.settings-container{max-width:1824px;margin:auto}.settings-container .el-tabs{margin-top:20px}.settings-delete-button{margin-left:5px}.settings-docs-button{width:163px;text-align:left;padding:10px}.settings-header{margin:0}.header-sidebar-opened{max-width:1585px}.header-sidebar-closed{max-width:1728px}.settings-header-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:22px 30px 15px 15px}.settings-reboot-button{width:145px;text-align:left;padding:10px;margin-right:5px}.single-input{margin-right:10px}.socks5-checkbox{font-size:14px;color:#606266;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei;font-weight:700;margin-left:10px}.socks5-checkbox-container{width:40%;height:36px;margin-right:5px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ssl-tls-opts{margin:36px 0 0}.submit-button{float:right;margin:0 30px 22px 0}.submit-button-container{width:100%;position:fixed;bottom:0;right:0;z-index:10000}.switch-input{height:36px}.text{line-height:20px;margin-right:15px}.upload-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.value-input{width:70%;margin-left:8px;margin-right:10px}@media only screen and (min-width:1824px){.sidebar-closed{max-width:1586px}.sidebar-opened{max-width:1442px}.submit-button-container{width:100%;max-width:inherit;margin-left:auto;margin-right:auto;right:auto}}@media only screen and (max-width:480px){.crontab,.crontab label{width:100%}.delete-setting-button{margin:4px 0 0 5px;height:28px}.delete-setting-button-container{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.description>p{line-height:18px;margin:0 5px 7px 0}.description>p code{display:inline;line-height:18px;padding:2px 3px;font-size:14px}.divider{margin:0 0 10px}.divider .thick-line{height:2px}.follow-relay{width:70%;margin-right:5px}.follow-relay input{width:100%}.follow-relay-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.input{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.input-container{width:100%}.input-container .el-form-item:first-child{margin:0;padding:0 15px 10px 0}.input-container .el-form-item.crontab-container:first-child{margin:0;padding:0}.input-container .el-form-item:first-child .mascot-form-item,.input-container .el-form-item:first-child .rate-limit{padding:0}.input-container .settings-delete-button{margin-top:4px;float:right}.input-row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.limit-input{width:45%}.proxy-url-input{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-bottom:0}.proxy-url-host-input{width:100%;margin-bottom:5px}.proxy-url-value-input{width:100%;margin-left:0}.prune-options{height:80px}.prune-options,.rate-limit .el-form-item__content{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.rate-limit-label{float:left}.scale-input{width:45%}.setting-label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.settings-header{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;display:inline-block;margin:0}.settings-header-container{margin:10px 15px 15px}.nav-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px}.settings-menu{width:163px}.socks5-checkbox-container{width:100%}.submit-button{margin:0 15px 22px 0}.el-input__inner{padding:0 5px}.el-form-item__label:not(.no-top-margin){padding-left:3px;padding-right:10px;line-height:22px;margin-top:7px}.el-message{min-width:80%}.el-select__tags{overflow:hidden}.expl,.expl>p{line-height:16px}.icon-key-input{width:40%;margin-right:4px}.icon-minus-button{width:28px;height:28px;margin-top:4px}.icon-values-container{margin:0 7px 7px 0}.icon-value-input{width:60%;margin-left:4px}.icons-button-container{line-height:24px}.line{margin-bottom:10px}.mascot-container{margin-bottom:5px}.name-input{width:40%;margin-right:5px}p.expl{line-height:20px}.pattern-input{width:40%;margin-right:4px}.relays-container{margin:0 10px}.replacement-input{width:60%;margin-left:4px;margin-right:5px}.value-input{width:60%;margin-left:5px;margin-right:8px}}@media only screen and (max-width:818px) and (min-width:481px){.delete-setting-button{margin:4px 0 0 10px;height:28px}.delete-setting-button-container{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.description>p{line-height:18px;margin:0 15px 10px 0}.icon-minus-button{width:28px;height:28px;margin-top:4px}.input{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.input-container .el-form-item__label span{margin-left:10px}.input-row,.nav-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.nav-container{height:36px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px 30px 15px 15px}.rate-limit-label-container{width:250px}.settings-delete-button{float:right}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-88c9.184084df.css b/priv/static/adminfe/chunk-88c9.184084df.css deleted file mode 100644 index f3299f33b..000000000 --- a/priv/static/adminfe/chunk-88c9.184084df.css +++ /dev/null @@ -1 +0,0 @@ -a{text-decoration:underline}.note-header{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;height:40px}.note-actor{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.note-actor-name{margin:0;height:22px}.note-avatar-img{width:15px;height:15px;margin-right:5px}.note-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.note-card{margin-bottom:15px}.note-content{font-size:15px}.note-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media only screen and (max-width:480px){.el-card__header{padding:10px 17px}.note-header{height:80px}.note-actor-container{margin-bottom:5px}.note-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.status-card{margin-bottom:10px}.status-card .account{text-decoration:underline;line-height:26px;font-size:13px}.status-card .image{width:20%}.status-card .image img{width:100%}.status-card .show-more-button{margin-left:5px}.status-card .status-account{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.status-card .status-avatar-img{display:inline-block;width:15px;height:15px;margin-right:5px}.status-card .status-account-name{display:inline-block;margin:0;height:22px}.status-card .status-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.status-card .status-checkbox{margin-right:7px}.status-card .status-content{font-size:15px;line-height:26px}.status-card .status-deleted{font-style:italic;margin-top:3px}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.status-card .status-without-content{font-style:italic}@media only screen and (max-width:480px){.el-message{min-width:80%}.el-message-box{width:80%}.status-card .el-card__header{padding:10px 17px}.status-card .el-tag{margin:3px 4px 3px 0}.status-card .status-account-container{margin-bottom:5px}.status-card .status-actions-button{margin:3px 0}.status-card .status-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.account{text-decoration:underline}.avatar-img{vertical-align:bottom;width:15px;height:15px;margin-left:5px}.divider{margin:15px 0}.el-card__body{padding:17px}.el-card__header{background-color:#fafafa;padding:10px 20px}.el-collapse{border-bottom:none}.el-collapse-item__header{height:46px;font-size:14px}.el-collapse-item__content{padding-bottom:7px}.el-icon-arrow-right{margin-right:6px}.el-icon-close{padding:10px 5px 10px 10px;cursor:pointer}h4{margin:0;height:17px}.report .header-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;height:40px}.id{color:grey;margin-top:6px}.line{width:100%;height:0;border:.5px solid #ebeef5;margin:15px 0}.new-note p{font-size:14px;font-weight:500;height:17px;margin:13px 0 7px}.note{-webkit-box-shadow:0 2px 5px 0 rgba(0,0,0,.1);box-shadow:0 2px 5px 0 rgba(0,0,0,.1);margin-bottom:10px}.no-notes{font-style:italic;color:grey}.report-row-key{font-weight:500;font-size:14px}.report-title{margin:0}.report-note-form{margin:15px 0 0}.report-post-note{margin:5px 0 0;text-align:right}.reports-pagination{margin:25px 0;text-align:center}.reports-timeline{margin:30px 45px 45px 19px;padding:0}.statuses{margin-top:15px}.submit-button{display:block;margin:7px 0 17px auto}.timestamp{margin:0;font-style:italic;color:grey}@media only screen and (max-width:480px){.report .header-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;height:auto}.report .id{margin:6px 0 0}.report .report-actions-button,.report .report-tag{margin:3px 0 6px}.report .title-container{margin-bottom:7px}.reports-timeline{margin:20px 10px}.reports-timeline .el-timeline-item__wrapper{padding-left:20px}}.select-field[data-v-ecc36f5a]{width:350px}@media only screen and (max-width:480px){.select-field[data-v-ecc36f5a]{width:100%;margin-bottom:5px}}@media only screen and (max-width:801px) and (min-width:481px){.select-field[data-v-ecc36f5a]{width:50%}}.reports-container .reports-filter-container[data-v-0a3cd0a0]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin:22px 15px;padding-bottom:0}.reports-container h1[data-v-0a3cd0a0]{margin:10px 0 0 15px}.reports-container .no-reports-message[data-v-0a3cd0a0]{color:grey;margin-left:19px}.reports-container .report-count[data-v-0a3cd0a0]{color:grey;font-size:28px}@media only screen and (max-width:480px){.reports-container h1[data-v-0a3cd0a0]{margin:7px 10px 15px}.reports-container .reports-filter-container[data-v-0a3cd0a0]{margin:0 10px}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-970d.f59cca8c.css b/priv/static/adminfe/chunk-970d.f59cca8c.css new file mode 100644 index 000000000..15511f12f --- /dev/null +++ b/priv/static/adminfe/chunk-970d.f59cca8c.css @@ -0,0 +1 @@ +a{text-decoration:underline}.note-header{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;height:40px}.note-actor{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.note-actor-name{margin:0;height:22px}.note-avatar-img{width:15px;height:15px;margin-right:5px}.note-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.note-card{margin-bottom:15px}.note-content{font-size:15px}.note-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media only screen and (max-width:480px){.el-card__header{padding:10px 17px}.note-header{height:80px}.note-actor-container{margin-bottom:5px}.note-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.status-card{margin-bottom:10px}.status-card .account{text-decoration:underline;line-height:26px;font-size:13px}.status-card .image{width:20%}.status-card .image img{width:100%}.status-card .show-more-button{margin-left:5px}.status-card .status-account{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.status-card .status-avatar-img{display:inline-block;width:15px;height:15px;margin-right:5px}.status-card .status-account-name{display:inline-block;margin:0;height:22px}.status-card .status-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.status-card .status-checkbox{margin-right:7px}.status-card .status-content{font-size:15px;line-height:26px}.status-card .status-deleted{font-style:italic;margin-top:3px}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.status-card .status-without-content{font-style:italic}@media only screen and (max-width:480px){.el-message{min-width:80%}.el-message-box{width:80%}.status-card .el-card__header{padding:10px 17px}.status-card .el-tag{margin:3px 4px 3px 0}.status-card .status-account-container{margin-bottom:5px}.status-card .status-actions-button{margin:3px 0}.status-card .status-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.account{text-decoration:underline}.avatar-img{vertical-align:bottom;width:15px;height:15px;margin-left:5px}.divider{margin:15px 0}.deactivated{color:grey}.el-card__body{padding:17px}.el-card__header{background-color:#fafafa;padding:10px 20px}.el-collapse{border-bottom:none}.el-collapse-item__header{height:46px;font-size:14px}.el-collapse-item__content{padding-bottom:7px}.el-icon-arrow-right{margin-right:6px}.el-icon-close{padding:10px 5px 10px 10px;cursor:pointer}h4{margin:0;height:17px}.report .report-header-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;height:40px}.id{color:grey;margin-top:6px}.line{width:100%;height:0;border:.5px solid #ebeef5;margin:15px 0}.new-note p{font-size:14px;font-weight:500;height:17px;margin:13px 0 7px}.note{-webkit-box-shadow:0 2px 5px 0 rgba(0,0,0,.1);box-shadow:0 2px 5px 0 rgba(0,0,0,.1);margin-bottom:10px}.no-notes{font-style:italic;color:grey}.report-row-key{font-weight:500;font-size:14px}.report-title{margin:0}.report-note-form{margin:15px 0 0}.report-post-note{margin:5px 0 0;text-align:right}.reports-pagination{margin:25px 0;text-align:center}.reports-timeline{margin:30px 45px 45px 19px;padding:0}.statuses{margin-top:15px}.submit-button{display:block;margin:7px 0 17px auto}.timestamp{margin:0;font-style:italic;color:grey}@media only screen and (max-width:480px){.report .report-header-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;height:auto}.report .id{margin:6px 0 0}.report .report-actions-button,.report .report-tag{margin:3px 0 6px}.report .title-container{margin-bottom:7px}.reports-timeline{margin:20px 10px}.reports-timeline .el-timeline-item__wrapper{padding-left:20px}}.select-field[data-v-ecc36f5a]{width:350px}@media only screen and (max-width:480px){.select-field[data-v-ecc36f5a]{width:100%;margin-bottom:5px}}@media only screen and (max-width:801px) and (min-width:481px){.select-field[data-v-ecc36f5a]{width:50%}}.reports-container .reboot-button[data-v-fa601560]{padding:10px;margin:0;width:145px}.reports-container .reports-filter-container[data-v-fa601560]{margin:15px 45px 22px 15px;padding-bottom:0}.reports-container .reports-filter-container[data-v-fa601560],.reports-container .reports-header-container[data-v-fa601560]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.reports-container .reports-header-container[data-v-fa601560]{margin:10px 15px}.reports-container h1[data-v-fa601560]{margin:0}.reports-container .no-reports-message[data-v-fa601560]{color:grey;margin-left:19px}.reports-container .report-count[data-v-fa601560]{color:grey;font-size:28px}@media only screen and (max-width:480px){.reports-container h1[data-v-fa601560]{margin:7px 10px 15px}.reports-container .reboot-button[data-v-fa601560]{margin:0 0 5px 10px;width:145px}.reports-container .report-count[data-v-fa601560]{font-size:22px}.reports-container .reports-filter-container[data-v-fa601560]{margin:0 10px}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-cf57.26596375.css b/priv/static/adminfe/chunk-cf57.26596375.css deleted file mode 100644 index 9f72b88c1..000000000 --- a/priv/static/adminfe/chunk-cf57.26596375.css +++ /dev/null @@ -1 +0,0 @@ -.actions-button[data-v-3850612b]{text-align:left;width:350px;padding:10px}.actions-button-container[data-v-3850612b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-dropdown[data-v-3850612b]{float:right}.el-icon-edit[data-v-3850612b]{margin-right:5px}.tag-container[data-v-3850612b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.tag-text[data-v-3850612b]{padding-right:20px}.no-hover[data-v-3850612b]:hover{color:#606266;background-color:#fff;cursor:auto}.status-card{margin-bottom:10px}.status-card .account{text-decoration:underline;line-height:26px;font-size:13px}.status-card .image{width:20%}.status-card .image img{width:100%}.status-card .show-more-button{margin-left:5px}.status-card .status-account{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.status-card .status-avatar-img{display:inline-block;width:15px;height:15px;margin-right:5px}.status-card .status-account-name{display:inline-block;margin:0;height:22px}.status-card .status-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.status-card .status-checkbox{margin-right:7px}.status-card .status-content{font-size:15px;line-height:26px}.status-card .status-deleted{font-style:italic;margin-top:3px}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.status-card .status-without-content{font-style:italic}@media only screen and (max-width:480px){.el-message{min-width:80%}.el-message-box{width:80%}.status-card .el-card__header{padding:10px 17px}.status-card .el-tag{margin:3px 4px 3px 0}.status-card .status-account-container{margin-bottom:5px}.status-card .status-actions-button{margin:3px 0}.status-card .status-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.statuses-container{padding:0 15px}.statuses-container h1{margin:10px 0 15px}.statuses-container .status-container{margin:0 0 10px}.checkbox-container{margin-bottom:15px}.filter-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:22px 0 15px}.select-instance{width:350px}.statuses-pagination{padding:15px 0;text-align:center}@media only screen and (max-width:480px){.checkbox-container{margin-bottom:10px}.filter-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:10px 0}.select-field{width:100%;margin-bottom:5px}.select-instance{width:100%}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-d38a.cabdc22e.css b/priv/static/adminfe/chunk-d38a.cabdc22e.css new file mode 100644 index 000000000..4a2bf472b --- /dev/null +++ b/priv/static/adminfe/chunk-d38a.cabdc22e.css @@ -0,0 +1 @@ +.select-field[data-v-4bc96860]{width:350px}@media only screen and (max-width:480px){.select-field[data-v-4bc96860]{width:100%;margin-bottom:5px}}.el-dialog__body{padding:20px}.create-account-form-item{margin-bottom:20px}.create-account-form-item-without-margin{margin-bottom:0}@media only screen and (max-width:480px){.create-user-dialog{width:85%}.create-account-form-item{margin-bottom:20px}.el-dialog__body{padding:20px}}.moderate-user-button{text-align:left;width:350px;padding:10px}.moderate-user-button-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media only screen and (max-width:480px){.moderate-user-button{width:100%}}.actions-button{text-align:left;width:350px;padding:10px}.actions-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0 15px 10px}.actions-container .el-dropdown{margin-left:10px}.active-tag{color:#409eff;font-weight:700}.active-tag .el-icon-check{color:#409eff;float:right;margin:7px 0 0 15px}.el-dropdown-link:hover{cursor:pointer;color:#409eff}.create-account>.el-icon-plus{margin-right:5px}.users-header-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.password-reset-token{margin:0 0 14px}.password-reset-token-dialog{width:50%}.reset-password-link{text-decoration:underline}.users-container h1{margin:10px 0 0 15px;height:40px}.users-container .pagination{margin:25px 0;text-align:center}.users-container .reboot-button{margin:0 15px 0 0;padding:10px;width:145px}.users-container .search{width:350px;float:right;margin-left:10px}.users-container .filter-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:15px}.users-container .user-count{color:grey;font-size:28px}@media only screen and (max-width:480px){.password-reset-token-dialog{width:85%}.users-container h1{margin:0}.users-container .actions-button{width:100%}.users-container .actions-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 10px 7px}.users-container .el-icon-arrow-down{font-size:12px}.users-container .search{width:100%;margin-left:0}.users-container .filter-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:82px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 10px}.users-container .el-tag{width:30px;display:inline-block;margin-bottom:4px;font-weight:700}.users-container .el-tag.el-tag--danger,.users-container .el-tag.el-tag--success{padding-left:8px}.users-container .reboot-button{margin:0}.users-container .users-header-container{margin:7px 10px 12px}.users-container .user-count{color:grey;font-size:22px}}@media only screen and (max-width:801px) and (min-width:481px){.actions-button,.search{width:49%}} \ No newline at end of file diff --git a/priv/static/adminfe/chunk-e458.f88bafea.css b/priv/static/adminfe/chunk-e458.f88bafea.css new file mode 100644 index 000000000..085bdf076 --- /dev/null +++ b/priv/static/adminfe/chunk-e458.f88bafea.css @@ -0,0 +1 @@ +.status-card{margin-bottom:10px}.status-card .account{text-decoration:underline;line-height:26px;font-size:13px}.status-card .image{width:20%}.status-card .image img{width:100%}.status-card .show-more-button{margin-left:5px}.status-card .status-account{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.status-card .status-avatar-img{display:inline-block;width:15px;height:15px;margin-right:5px}.status-card .status-account-name{display:inline-block;margin:0;height:22px}.status-card .status-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.status-card .status-checkbox{margin-right:7px}.status-card .status-content{font-size:15px;line-height:26px}.status-card .status-deleted{font-style:italic;margin-top:3px}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.status-card .status-without-content{font-style:italic}@media only screen and (max-width:480px){.el-message{min-width:80%}.el-message-box{width:80%}.status-card .el-card__header{padding:10px 17px}.status-card .el-tag{margin:3px 4px 3px 0}.status-card .status-account-container{margin-bottom:5px}.status-card .status-actions-button{margin:3px 0}.status-card .status-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.status-card .status-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.statuses-container{padding:0 15px}.statuses-container h1{margin:10px 0 15px}.statuses-container .status-container{margin:0 0 10px}.checkbox-container{margin-bottom:15px}.filter-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:22px 0 15px}.reboot-button{padding:10px;margin:0;width:145px}.select-instance{width:396px}.statuses-header,.statuses-header-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.statuses-pagination{padding:15px 0;text-align:center}@media only screen and (max-width:480px){.checkbox-container{margin-bottom:10px}.filter-container{display:-webkit-box;display:-ms-flexbox;display:flex;height:36px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:10px 0}.select-field{width:100%;margin-bottom:5px}.select-instance{width:100%}.statuses-header-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.statuses-header-container .el-button{padding:10px 6.5px}.statuses-header-container .reboot-button{margin:10px 0 0}} \ No newline at end of file diff --git a/priv/static/adminfe/index.html b/priv/static/adminfe/index.html index 3651c1cf0..a236dd0f7 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.203f69f8.js b/priv/static/adminfe/static/js/app.203f69f8.js new file mode 100644 index 0000000000000000000000000000000000000000..d06fdf71def65f514bd5f24044db9870982f1d86 GIT binary patch literal 187722 zcmeFaTW=fL+UNIG*hIsx^qQntJQNRZwa1p_mb)d}ZK>4 z31)x<0fGPnWCG+SxyVI;Tn&PJp1cF(TjckD)~W*!lI(4__TDqIdt0npwQ3!n=ULBr zty($n4-ZD?rSs_3NvHez`^ji{vc9D3k3XKjSS_8LPI@cPpXWO#C;1nJi~Q}*!+O4b zcslG(`=jAXRG1cqs~7pxNtByR$Nla!e`i=4uS{3(oOQ;z&iZgAU%MaunqMu9*N3Iy zN@uk&QQ@P`!zqO$E1awr`s>5!JU1?NRxbJn?R>vG8Wv9u4)X?R+^`&IRR4&Hm&Iyfux6)Am1oGkJIXYBb3CitBR~b8n9a!^wKSH=Ule*VfL@ z0Y|ko8Xv7y%H{IfmRJA!}#`_lg_l4qiClYwo2tjHCJggO4V{>E37w4K@jYR z^-{G~8&raz)Cwy(_gj5`T&z@^rAn2OuvBTp)rz%7SgN&}#ZtLmJF5j@sa0?E8bPhp zsGb#rMza*sbhTV+)&kn7R_mo^HOy7Ra;e_v7V8Y5SS^*qS}`b>TD2M_LAA<@r7$Sc zQCWY(Mlo=8s->{Z(^6Qh&}5*iUa{6JH7mhcvt9~oLC@|g-3IT5f@-Z4)QY9L1|GkX zqsg#tZPs%^rBtsm2D;6u+j7hLt>hRR!_wfYxfYLW#YU+{o4imdH;VyJ%8i_!*BNzK zuHIw>!!9e8QaK26<)Q#hZ}lpD0xe!vO?#~N8=AG|1pp2Q18t~E!PAZm15AOb~6{$ZM2{-3>tb1q!_$vKnM61D~(d4*2wWHGpsQS zy0x2LF$_!PYIp`!muhuxD;%>u z4=eO$7%MlRAq}VLMpak!Fx2R)3|nNvT7q6_QnL&+$x2WGU4TNAR;A5anQ{QlOx;bj z2F9AA8X(vZ&S;-b>lH9m1H+868MNN-gtc0!m1~y4W?*D2sET@kPgO9>Rhe(lELLjP ztxbvcfIBn;2%Df=&zc~EJCIQ;gS4t5}b?L+ykcc8zfl`B@%R&dK44@LSaBBbr6aj;Btw;@KU!(NNBjFl$yD0N3lr zm3XzP=VBNve;5%>RO)9zlX*3py*e|fw7OdTA}LWiEtYEV69Zt~S`3V6>p-Lhk21V# zDFRUuhQ^=~wLH%Xp-9L_bN~iJfXExVqs0)^36_qP@`A2KWR1GNF@TFB(WclCgV7R( zZ8MZgIv+X)xOCfaJg-=RdxFQs>}c zrN4S-S~`dhJEw!`djCTqUw-&%cw-Vb8l4P~uNk3hCClY5YXWw(MCyKobe$EYSwct7-+rLZI%Mi22W&F0o_3C4TP{-{T+OgRw18K9mto;EjUuCC4pO^ z70?(W0U^*vv(`mC8%`17HKCqW4OyW6n4!N@ zXRLUelZL_2syU6*rc>V%f3DX%@GiaUe@sKNNxRu}A!4{G+#XJh1VuPC0@xxjtgsq@ zS}WLq=eH1PG^8a{%{Ab$^l1EsW$ZW)!)d_+(Nwfx5ebZ5zmrf8kUIRp#{6Af?{yhF zb7e)ShgOc+H(9|F4rl=^oJLhL0yW2koEA*2E|BrIv>W&Xtj2D{h^w`V7^7GY*rgSu zo7f-Xz}4|LaWk$|Qx3~@f8(ow6*XfRr5P~^T95m+8}ZmulNpH%)@o7@S`|1Hh(rGq zXGWoM*L4s9qNpK84rrTFRa#6%&;6xd7lqm@65t{qHHC1Y>V&rg#GJKd?Yc{8gK$zP zE-Y0W6+p_ukb(l)X$4e7UsYJ5yMcBZO|dRl%DX&^Z>$Q>q$LWCOhPmWRxR%a!A@<$U=H zd#F3;Ot5=oUgf`taTJdv|Lr#jt;x6FOs4M!kwlySb)|{*R2LCcnr|?oLc}ZlK&loh z5i}B3r?6I8MX2n?LR#pAEP)2=4%?uC5(@8biYJBA%8=sz5n3Y(6>l{wjcqds>F5oV zQ$@>GTjH_R0LE-B?jZ=^7P&g+RM41;3x{=jbOiu;`{)WG>Z8 zSaj1YHW2|Ws9V$2qgpF0+BEeR{B^rb*VR&^+<0RHVXZMuagF!Yo6?TVZ z7pHD6vf@M=uAZZtmc*l&C-W8&xVZ>R0eXS!TE>TjzZ+JOxrFs#4;}{(5(z=8*0Lys z$@*CqnI&L>J`Du!H4h!vA{Mkw#`or->PO-M?nh~}!9-&Gm~XRH}5~YhQBB7 zt&R6jNBLE}UUF`gI%w>bW^{DT+h5E_7QO9Hi-)I!!K6Em=7hxTqvf)~Yu<~Vv(MMz z=ZBV2=4)~)z?h+zN^4NWNyIWou}7&w0fB8d;9;yZEGzL{`H9MC2XKcnE)f<*y=#>! zRvqpJwWzvubes!__HqyojN71y1h}J6-2yRS7-p*jc_CxmU+Ks4G}TZ?%aoz?*dHsW z1dd+`2hwG+K6zU{hNi}ZD#~y*R2v170tE(U2dkA%f*PekpCNC;N|#xoDwi5^sKB62 z_qONeE~^fhe7Pdqq}-q`?4ewyq$!?cjy?Sja%~`4f7_pob<9b|A2U}IO@vT0lr@J76j+z#6GXSk4in8A!FzsL_bgO$dssVSE`aqFz9Z{Pol*Ex%Gl!I4)f z*OCYJjNb8d3WtbAJSbsU5sYvayT1vPOf|1ID-M{p8(3LK*nGQ z)l-WP1_#}Ff7*_Dx}^L-L$;b303dK^7DZ!`W8D!>fW8=KMMaMuspEB84A2-SKF&RlMtg zF-fs2u~=cv4M@&DoO*6V;{7$x`^A0G)tRU`T_{yqq|4L^HkeF-93@j4n8<=4=o0Ys z1A{Xz=$HWw3Xp<0?owIoppCyN->AA(_VEft^=WVOrc{7oG?_*RS@Y19+_=E^1IfsF z2%^Gjm6HPGNdE<}6ewnd>WdI|*We6wKo&cO4LB{c{N1&Cjsu9-ap?0pgaqrrZdX;i z-nDKd;9*{_Lqb0|8Bi6=xcP7ywwl2{c&}EsT=~8pNE3y7WAZJIPwta=d`44q<7;Nd z$GX)zVnJXEA`GFSMw1eG8)-$$tA7wYr+UItgo9(7S@`Jp(=&7d?Ycfs}sAC^AH^Q zYr_%YGaG}UBv?M!pe%bBu$%L|Tw4VDr;^1y*u~I1*kN=j+{OQ5zz2TV%OH;t=OCY* zP0wZ)>|^cJwv3n>`xxoi^q*i-)c1b;@uoP!v=<%Ec=4^^#`%F8Mur`rp_K4h6YFl) zwgF@nC54blbpr=TLqRY^0xW@5B(FOzloI-&v;)=_bP1P$Z&)SP7~;%cMpwbZDQyRV zi?fOM6vzo z2nDrF_awg7K%1BwpRZ<3x!1Q5CVtKv#6I3)>jQX zLp-^PW-B)cd>9i-QDE_FcqVRz2Juj-!GPX90ReJ&SuK`%Nc5DzNR?#_{OT=rYx*0m zCP{Gs8Q^(Fw_sLGnaHf>rBFFmA5R(Twj&9=1tCf~xTB?}BBZj%=&xe>x2^>VXh1MR z?*T|+Q!*;*_Nej+OEG+V_V}ij;^Am~oE6Qwzww1=gUGDIrgU(Nm?-)s;uqTo@&s38 z;Q>_X#jUUdu2F>CU#W4#bXga&=4Et z8ffm9dlHpctSm1Y=Oq+BG;kDGv@GJoa20!FMG9ps18_hi&g77P0b`d}7#pEHOkvs4b6p69SoSVCbC^ocWii64J;2S z=t61>bx{N*7DQH2@>lUd$j2gBH8>l-&t~)ej&ML~5=bsrV5emUL&k??t6;kb`?9SB zcH9%#DJ?M}+zQn#SrAq7R+tjbQfYmmpjnftVreh%)ecr^y~Z2v$H7x?OC^LG%Uxa7 zu-%V)PF=I9t1`-gfHEmOVl6{R);DnGFUn=PvQM0h=&>P|BghOwY@E$`| zFx=;}fF-6y=z>Lre}KLlkgWf4Xu?#&@B+kPZ3A;ZAVN}?xP=KrW;CF1W3JpIvRbK~ z!O9Wh$Pg`Bk*k1<4_zx+MpvaneJD(?=|_E-glotkRd$t@r4Uv(DXq~<_DQn@6tpHO z%amEQLaOAuWmX|*%ykC@dAHT<;bA65c?O@r`@gN2wM-0_PMt205Ryu^h)m`*6*z@! zNw|=LXA*@7KC7iJ!y_=;Q``?I5{8G_NI77PLLPBp(PRh`aP7P6EeOPXByxY4j)E(u zfo@E(2}0EeNbppOm#(DXuSY-wtFv*jaN{ab&JYGejfD8^t39aRw4UH_=7Gj{K!_cTV2c!<|SB}2Zm)sW9HPRYpyG-DlKATk}1E4D9Jqn0Cd zQ&m*mUZGjwC-Fce#&dWR9jpc_;%z3~6Omg*V>Uj`!qpX&2QlGb(?evknqwXaV^Inc zg@+w@Gv=rM7%Ui5-Mq52nxhIPsQ$#yFnFaEh}9tve4{PmXM}1T`H2zxrzRzu@*BdH zsf_(>V}u zy6H7q0QwcRwt{8{)Zujy2KD2}zztEtIQRsmv{n25)lDg-2c1dp z)u=O`aT+Csm#e4c@|Q~XqNOz1E9sdef+SJE1ieCw_(jMYGOAEq13w>&LZlbs^cBSj z^%#Kq3rVu@#8>fx>!Bh)b`7PXsfrWw8f!#?RJmR5sTz>l&@i4HnlvLt#X1qIq7!4# zq>^a_T9)=I72QJ{fi)my1wGQ*)x)?CaWiX0BhW-x7<%jnsCVNz=w;?cJ0?JqdA>hp z*-0RwUg6082%v~eKN%=~@D8dOpvb!)14YW>r9g=vYDyle^FWCKlm!YLM%h)L3Y47& z{a_4`yw_?DlvxXLDD{UR52=1kgGEjf9>}Z;@O8x+k%y?yp{aS6M2}je37Z?=7@H3q zF(?wxc$L3!6{!I=rIT5(fVdIVDK!B*SFAxb(H%ixQ=u&lhMBs-@CY44$`rbVlv)Oc z5GJy33b5Sza1L})T7zeUX|CneRNPaZ041@&Yo*4LekQF``C>|JgdvNC6C*cGr)3&5 zPD0VCoC)Y{*xWEEC5OmgfP{ibm4D7?rHSZe+F&N6)FDp{ZnC2^R43E)GCC3s5$AG% z!dMAOnF9zWS$N-`(n=XI4;AB~#a;te`0y3Pm0m6UzCX6S4+Crsk0rG%OLJy*%O7*i z>NYlDI7?SIE7Y&NfYVU)_G5%7Fv0EN^~lRSy&` ziba-J-#{iyqaAFyO4(~1xm{D98k=THv?Jh!T614=2@Owz!K$# zmsyr~v#a|Uvkk5nk`KO|O0qKGzX*0G%Q%*bmRg0@gG$HhR%i|tMM<(2!Bzkg8&{kL z!yhaMGLy;pr+yP<)ULOHZVP{?^gJ{eYAJFEafwS(ivr%*a6RDZu!LyRrDO<0An{08 z`JvK?&1%A4fVp6A$_a=gwOrjm2X?7n+7khTlq(a=Vk*gx!^^l4Mg6uVh$=?BnoFP@ zW6zvWD(kHcSO+N!T2gom>hdC^s9_gD`T8X_+-4%nQ{0jvF;y`j8v+Rgn_l)!#< ze613Aure*=JNZJg32*gc98FKh!(4}b1THTr^GpTNdS`redd$|iNof!bkEXqE%eQWw zjrs?<@>lEW!{_A}caxgjwDW^ew=?LCChY6;okXSM&a~TGS<~jZ$=&u}*8Z}#wt6?p zYzj;U6qP2^&UiZcxj*f#q;0kHtAG44`%K<12)7jQ?88d5dNRQwj_QiY`*#BhlS!lXQ$$%H##}#50A2*-ni^?b^1@*I}vxB)u!=| zw6r`)9I2Y0-7@E8>>{yYu?TXh1em@u$87!a*V!|2sKP56qttrV9PPBUor`sj`N$R0AHR;d3(=_vSg_EfHYCqrI{sBjry80I>snES zx@p`&tJY!dF$w*NEy<>ht;vF9m1-#d$33@cF&g|w=CngglG6?^8$+lowV+`hQl6`A z+x+H!lJ+tFP~4EmjETwXuSs&YHfU(r$~HinvH{}YfG@&V^y3;~hEn;MJt7R{j_#%2 z)k(Qeo@nYk!>P#3rDT$)VNjK|15|~Ux}2l##~KDa?3$u`hZ!@3LztjmhJ%AlFrxYC z63>VDypSuum^hexp7`69&Z>GmZq+-O%T?(G?kDLdLjhvof&qV9nD_<*H&i14KyJ)A z}%X`i!P1m#5VISld9RY2yR+dY~Pe{>MFc^Akqj zAIrOtELz>65_;r!cYj?U(4DPs zOWL%kqgDpgDx#1F8FohM0W6dwJdsrc0}7~**Lnfmlz0qL}^yGa$#QRNQyl&b60H55+WE^`33~t`I5>Abh3mRg6b!tE{`m z*JaEU8X$*Xo=s>#DP zG6(HJ)NWVWGcqOlP-vqe^If+vGR6JHRjM_){uPSyKMvRoOk1n93W)4T!Sp}zV|G;V zyl#n7<|ZV=5@MF;r3Db78sk&SAjBM|V>vi*(r9w3q(PE(MLruh^aYc~`~+zsIKop$ zxJnGCN~N-)r;JqscmsBri&<&Em~#uW_|V4KilJzrc|ypE*@Cz%DpOHpo&Kv9$i$>q ztb!Ks?sbGY*+%;7=4Aj9DS<aDx@NpJdvAk`^{_A6O7nJQEEV!W5dx$+LA$C{1Dj zJDLU{Jth>kHVot}>o~BeH)_bIat|hf;{YbyFseWZYw2oBhA2qOL<^Ec%sQkCxHLS; zWC%k$VCA4xToz(;e{Hm?qCIyg+X^2dT4>7U6*X|3inH>*b`2`9M-;JYqeXzgbR=of zv-OO2AVQvM5yM@0YF-EgyS9MQJhQbI#Kpt`LVZai(5{7H#=_(C`rfT&8wuyE`^MqVHMaO)@k^meoK<5>VBzMglQec)2 z&AE_R<1M32H!@4VjYlRrVvxM8;40(Rtkj2%TfC}XhZn#Z<>tp^Lc-XdC_6eqaVNT_ z7Qq-=vP@-CQ)tcjfpia@@*okW6+w)nLkbC7aJ7L&Kkj`5ti{m?avR@-?BQN0I-0Py zLTM2T=J?GtMo~1fiPz9~)UBd6rp=VYeKR|2TWX_q2I@$&m5-$X+fd4!l4%uk5uY>p zCZ0)~a62>+7thhWLv6ZZ1kxhlejS`Q4c58;iN}pVWSn*g1)#!=W;BRVx>Fl?xaGAo z|8#v@nj4%;CsY7Z*1E7Nj%X~=Np>Uwvos-1`UGz`Et5*ufD(Bi9M#0X1!5XEKv#`< zmn~v1&jLu(7y^K(iCBC~nFiw7pc=MeG)f}85M+MVMvJs>Vtw*0!mbEO0y*=~5z!Z? zWIiHJ^D#o;8f9e*#Q;N|HjxQ7G;ozrkK$SN`Yvs<;T5TbyUZ?uS5>}5BUvpbhRPrr ziel?pOk$*(4Sy}tNLsX-k~l^V>9XgR(mr0%R<*SaOyT_6wqG>^Ab!~h7=&xVXuUbY zX0PsLEn35- zYRhXxCzfFmwmx3)WDT$CshMr4s`(#{@(;ea8FkJZd8P&YN- z&Z$5QO5}t%Or)$R^~QQYkYTPc9MI%{-0ZN~&_GGNmGQ>NC0pPA(E$oa-f7^{dEtq0$6Hrx>|S- zq)USPA8T98Qgrct2MSl#7aMD2K-l3QgkIzS`(jnnQ6eGa$rX<=*6j^nN|F2jhOebw zlFP96@$B^Bg9n2fvLoKS$#T#)Z*H7zGJvcRVd77l@`_8BXh6klO zvxY7j+aMPQ4h%!dZ7^9-t+woW#r#-ok%BT%B}tgjre4$=DyeUFNr4NACpe8{n7s%m zl}bc4a41ET!Gi;fWD7wi+mN#GFwF$k1>`kjd_UZ&2>+dPYlNt9;#$D zageiPq{Eg2psg;e23%cnVutF&N^~tas8lMMNJ8Auo>+ITmI%cXvQY*QruGUQDDRbq zbpnHV+tDP|81sTEq+r@42%R!4)x?7IR~(7t5wE6|a;FKPj^l(hxXFN|6^p50-U9## z%>30TAx62B)qu9nEkXs5vx^%BMdmo56~R(Nq>gocJL z3W<^!X^zItR5onmU*k>NGeWnRBnra-Rp3X%YLuay_z&gkFx+GeWPV&x1a6q3hzfJiphg*pVM%CcT2p5J+jELI<5B&xT^!G$^(JmqagHl< zS=vfeE~Bj-2;B0Q2JL(S}FVjeY?P| z4jO7~^{v;WT_GqL4|*#U#~q7L0U%(kEAe0a#j2&QsjNNn({m11C!JyB(CaC$31;W278SP{Mj9r8$l5EpVzhyaL; zz}Iv^>kzmj4WUm&D#*|~S&M>&rffiAez075&o|i7E&VstOOMs_2!?8KNa2UR@el6OyHK z&Uj?dHEk!chya+UeeJjxZBZzF1bI&D=;LUgYF8U)EYY^63_l`)G{NF*;$dfY5>#^EgC^03PdEfYK%a24kyTt4?T9 zFah{dPnr{ai9ga?1ZTHgtvLZtrN%)pj@>ic=A-7SkQjsrSiv$Hli(|y1!vqz{c^X^ zJ%zeeHK~fgG;E>lfpPeO1Q-v%9pnWRknsxfXjwwP8X7Rr4{Xqm3PAKjLlp3XmJgdY zNlF1FFakkt@)_KvFFMA-{Bj4#LnWk?^&cq6vF39n(M90VR7?D~KLgpPW`g zHa`#bj!qxplC{hXlwt`)xv*6w#LznMRX=Rv5%fj2En9UuheniV>(q`(=DZ9_te7|v zO&RCY@I%%e#AvPajzmD+a_wndTdOD&G1N>$MKk6x_o6%j)>KMioC6>ztY8{L$L3?z z$ZVGs9$zu-K-zs-SU^irf!LICTG6@r0|$_vh`?jA0tZZ2w8|roB97z$<%as7?QcO zJRx4uq^)qdSftUY&@^6c%F`RBs9EfWa)6|^m6Yd}I>Rz?se@xhj*9dFf7B^0V`;(W z2+(=oyrvm?<=N=Ra?m85C~kg&Mq@|6^4{wX$Dsd@x%c3Hq^?bZ{ zWb4t-KVOaWI$O|2z7qa^ncbjAjN z-r>g_yTZAA*wyL{dtt!oNwff)V;*d>BVOh1HLY@ZRzaoa9QBVU=D1NTqL>5MzhIsoy%8T#?9kkwViuYryRV(N0R09X0C@srD)fHxc= zj(=Bmw2y>G$S5532sEDebnaxm$rc2Jn_HekAlw#$)tY`_xqlKS&B+7o|*X$z$K#V)ZsSp%uSYm}A~nMWIqt zPUx3%KQ!h@J2ozd!`ZRM<4K08X=p6*cyy%~Edu7Rw^iG#dNTMY=4 zuJ_ve9SL+DGeOF;m?QcdEr{Nf;iwmFaloZzZ{yt(K3Q_OX5oe)gkI&gu%q^b8=Y6L zRy2H1wIU5y&lcl`oEfYyowTTZw0zKn;p?1Pv`~(Z>Cr687KnCeM0Q!hwgE8fti0O{P26Fwov@%W6GOvFYW zta4cz2pV3*gHIp_eS~WMitsHCL<`45)r7|MjO9VCeS8Y|;E0MlC#kY_BvO>YDiPtX ztuGh>GCkz`OaMn4ZW#i0HY|Z`It5>iI~w5Z+TgjtQ_eTkn@BR2YL%EcS0tFw#=gR* zG{9+~G)6N@;h`BFm=752x+g?;k+<@e@}@eF`yO7G_Vw{P)Arl%Zp!dGvCno)vdXwG zy7|@Qhmujm73!DjEmaxq+0G=iBsPweg80Cdm@JIjuD7`6JOu@2l;LMjxRd+PU0baU z@WUYxN{NME>H|hFZ=x7@uyoeB9N#3e$rWN7714m@r$t&27Lh*e?)Z2Sn`zFd2iZU$ zuvO_t==_i+tI_hXCue7Nd-63i7GV5J|l?( ztZjEq?h3&xRy4Dg8Ks3Tzm=sKe_Y-<)F11Qgfus!((*2&#N20WyK}s z1GK-^84qU$b4By6x%bB+6tPXl9ENUCK^OKyynrW=6~v)!lk};~0y!>mi`!3SOFL2Y z-9pubVZwTdeu!-;au44WX9PsbiPukny9O9>>%f3ZRQtp9uJtI8Str(|@5}$}$9?%; z>@_+%!G8BgQ_Ie#eZj9%YgDE@QIfY=C&crtM%CSvxOe1mq4{4|vv>w&_gxNcCTu|3t z>wTq&S{WQt8zkJdJ(prEnUA1v=<}Iu{g*kaZG3XA5R}3!SH70JhB(M7F=auDJJCMN z;K9);^&K)!tC_!DXLkG6+#}j{YgPemdu5+>CNoHFS#$-p!n$!?y6g8l43L9Ic_8PL zrfdgz$OQ@*;NzN;sTR8NllFkR8fdtE1jq%TNy~AKra*HY;2aezlE5Lb(A*+$-O?GE zi(u2v0fA8SK|)B!((rAn{EfjT6Dh7%QJCU-uvPX+_2cUef}7BzU5=N6O$icg8ux%( zq%}XSKOJoFMC2+2Xb`^wZdr1x&XSwOk3G5lHE=_t5E|Txi|%wy4>@hhN~rSVncUN6 z|Hm8RW|L?-C%GGM3rJVi!>(2YKZ^yLXDgw9c8_R4pY^~YTxo?nVJ5EC? z@mTZU{$>1^;WtP2^OtFIF>}dH5>#XJM=2<1!y}0?in6lUWR}=J3@7XWZ7k&@3otT? zsQ@>f;&au4elfyY1=txjH%B?K+U<`Vf>y_#+l^`z${O5XrtUvGHZ&+$lhzwFBEPj= z)1!LcSNj`PEVx#IqJpyC>VEx%hHb}qXNm+BSI{MXXXKpskrC{wAG%Gbi zyNly+Q@d>3Zf*rl&@$@PhQ_K6?H4mNoG^g`Hdd{mCn_fo#hESU!5OuF93Jki|jOfM?GBbe7C*vk-Qw7^#(=cZj`h$yCq)OvO2SMMBXeI@^ zDAkRSS29D*j$x1zt*6;Vx=u-7B&x2|v1TXWF*^@?A!gZV_l;1qy>76I4Y>eDpQG^z z&n(9GxgBz#1zl1sD_dkR$wLC2Ye!1Ms0K$@)5uKw1s&yKc{$=Qq65`gF0-VrZ=zRh ze)a+~*zlvzCJDXzLo~HfP{5TuG~L^uuG+P=sm|?&Y%khyW1>-QG-?XbMfF)w@7ehp zLl8~K9AvgE5`V>O(%{M2At+iOlndp3&DB1IlJ=;#tP8l4-WB|f7&I>RX!Bj@QPY)B zl5Hy2u4c=$DsH9#9{OZwUOG=LMuAYx8l2sG1~-A<{%NY#pY=T3sir78N@i%Iwz-1C z67DNaa|`vtkXbNzijrKTOw$pyxQGU!Ng6b*FHV0_xY<@!c3#;r#AvHv1%h%w=KtqNTd4!Y=&#>-5%ZK1v=BC1aEmg@TKPjWe?M>iUe3#JbGNIuR~=gq4K% zUz=rAG3?33M{=rd=p>xAO@x3ED^I+FvydfQ;b;)p4sLl`vsdBFw&B9vxORxzsYkq9 zmVjf1KP-Si25%8G)Cbtgy&`_@W_?4$QFA&VLM_Fket#@qB{i`{b)2mH-HM>$x1>+) zAf!to2<{q}DNzEop%e4X$?Y!nSiv@X9W_N;Ppym>Rn=YVb-CePlX~4>+GG4`c$;*D zVENL4D1OMGCe}ha0L9$xD=Yy{W}F?YtVyen?0KH@@)PFfz+dNw;zdkd8@= zr)g>y8x?V2k|wDK`m~q4|Kt|Q0pAMGkmqcmay9gXWG5opJZqxjE>_Y0FPcG7B>+ua zTW`$ObC33~Zp>GTn^W9L`6x@8bB`_^m49q>l32L^g~Q=vgw^hEKmUHUqa{g!{pGki zok?TeJKR6L`rR*<#>#ipvmR%CR{hk;Juj5nc?(8ZKEfB0ZecBR2)hQ5Sz%gO>@2c$ zL1j@P1+=|Qo7$yL>r`sHM0)87AyIS1Y7aS?Z*pqlUPMVIOu!y3rT=3|>(CpRq~Z&T zk&!(`{F!L0yRjN@NGnu0*w@eoB<{4)N*Pb6bOg=`N%#?2FSc!9gY5vyPqpvIR*Cr$ zc(C1_WK@wwOOBhqpUWl(I5hzwG--r0${^uIMqSx9=PcfAm$B#eE2=Mg?PE7nd%_?d;BajrJ0Y=Q35ZZ@m zI)e_rlN!OU2?M6iYpQX0Bze39004w?Yk?sSX7a793kJm}6?;MxTE85`O0jD)3hSGW z^vMTQ_2xFSApD7IxvKD|U=0*-I3TBmGz%bb5Rku7BT^{42@K;m_NTwzwg<`Q8~hvgB@13RfB5?8DY^Q3IPSy) zI&R!{Eky_Yxb-)$e?y6Kq90wM3q$*2#lL-VH;U{2_S>bg(8`cnJYt*XWujJ{lnoL2kf;LsP{?mVo! zB1_NmrR9gO+?;)~m@ii1npJ-D#+T@{4=b5OopHD4OMf3#9F5130$;8ei>vLAXZGbf z7}}Nh-^WPqy?*8(qXVmbz3!tEhj{eQxT{9wFlH*LFEou@^S2LP`a=8OrxlK)xRck- z@`iOxXgTg=(%3(=vh#@b7$fTF@#wLYzVDy-2K#S*dyxNdCqCIbH|9j_3oZHS`h?5) zc<$lKboE10Nlz~NhbvzVOQV%eAzF=J8Aj*1&GC3NUdeBChQrY`ci0~u!Nr-LZ> zPx;%??fgHX3{89E(RpslA>0SidVc50gP*oHUp{`a_wwPBpB_KR7p5QLv&WxDFFuS* zucLR9^|qr*_kkCPR(#bv0$`8*Ss7oQX%x^HeISJ;*l$4 zuKv2pazxe{f0tPW)kj@%nHj|HFBGoL?bL>uY38`)k4=Q^j8a~R^dSy`U;by+mEPvG3*>i?fkuy zlRPsSST|b-w|R21?$-XwpwwAiIn6>-%qv=-_WG03*WGc{nMRufK3qJU7N)NB7Ug*C#BJej>VglUcNl+58!Q#y>xaOS1R;0o9)W?KQWtQU60D6 zfa^np$?y?;Ra}ghj7$z<1`T4kWl027K zfO1#v+*zHR_w_l4sB|)p&eo&SFnY^Sx}8asE4PzxKB#oPQt-Gu7cMVeQRk;;+ihR? zPK8rQWISl+*E%QtH8KUqqvOt6=ish5x6^wxamcmg9vQy zt_)ZCgoX88N&D`+8lRpBx%QQdJOX0^k@$MmwyNi&;XyuqV=^6`tgJ#45$&z6UI)+D zGvMF6uKH#Q{>^_J@FQ^bEsnnr&}-@Mrg{R@7*pEai+iV##<>69%!YRUKB`_c&LyAx z@YMFI^lEiwb@fC00yMu|zhH9HsC_YEH}I>@xP2j=K00WBHG=dZvX#7lvP-?wi9SH` z)mOJKdstviz*VRBhJBbjY@+>D@S$)Jo%OqLxr1o(8Uo7~VlBL#v=f)8eP}XY5Yay~ znx~1v1cfuLtUIfCjNx<2XQKPVv;H)iY!2mRW$g5Me9Cymr`i{LPrmyOIEyp%^R+!X|I1ZU!q0htIW@Boq?rKT?2PDBh=}6u)$Gn{L3DdVYVCFPj;6L zQQYmaCd;b}-OmnbVZhT51rLk|oBNM8HZ!nLM^VXPYMpw!n|m)GJ>Gw`x4HXr^YOj= z+nWy-YR`f_erx;Q0iy@l>ll8C$7ee~O6 zH=>Sg7e*~={zIYD^(4_9j3&`8c)btF$GqP$vz0PXMO{4ZPgl|Lvv^^UrFob#>c=Um zCQUhWA-bH)xeCKVr!bC1^ydnj;kwKX4ZP6dlEsTimziKPs9Jct(kXS|5nH1PHA>Ub z>u8t=gE10J(m~403>xy-76+YahgK3X@M$^XkRyME$E?67az+ zc*2uJ1P(?=llJo$GqU5}g9k4+pFMl>?B({8@8)I`mGnmG#^~GKNX(Rd9<#9n<-ZjtF z)6TeaJXzUbMUP-~_usADLyf-x_JxZR(jD4k%qTtWPktI6MEGW+1N7MGXm>g$mlxLJ z*+NXG75SvRkyEH&_9B^UaO$*&nW2cuOo~1DOtR~ ziYyWy{<$K{BjfYzBRK^pcQHmK?$-O0mu5CyqOWH$ag(Of(-}3$+Q4kKIv(Si6qZWCC-qiJ+J*%+M;r|ojV=ux7jkif(4 zsJA`p9Ke^_U&Xc3f*Cm^5sd`m-@ONq9xs(d{>@l7zV~3~(c|4qUvOiZdj~i5=CgZy zkDfeUD(=!*#+}T*@Nxs+_M+ZC1CIDjH@rFN7?s?x;!3{xC(m{lDyER6az^w%6ee~O z_AHFVQjaC&JZG1Belkk=pCj-t(Ihi+Fqn~pf#hKD0$V+mThEqgn}u=QC68wLKn7(&`Om`HhfK6> z%c-VPB)zBVr|V?jPpRzt=_=VL+c|0V<}?vv9hZ4(O%qvjZjqN}U#D{K1gkss*#59G zUMJW=j}^vpq&;7?)C9KzU)lfL%em#gAacTPw&G8G(Nr#jgM0_ zKE57};>?pTwNNn{G9a}~2morK7J1q_e|YqDwzAKcXLfOv=#Z$E(s`imP9uet8wvTSh2278fy}cdhW< z<;oR)m^oG10Vr0kN)9j+GH%XrEJOs&Vs$y~E7pG-f0iy)_>Q;~uBIr1hZNJ-qCrkU zVG31A7EPgF=oU`D6hahb@BxQ0mk0d`3HIF{KD#vfpbQCAm!BpPITFK?S8DE|-nh7V zB{pp8g{>8hZ<59+CNnV#{9!S^PS?9;#S}Wud`Z>-`3;VXoVr&FuIu)x#vr{a)~fDJ zDN8jhoQ7T>52|-wky7#61=G=yaRL(6B#cK~C=GiW zy(mQQWx>}gLt>dp1av&ZU1~A4w6eq!&JjyEODw_VtH0HTH(kE?ud%&jbaRlw=b;jrEa(N!FtlVYG5NR%Fccdl#`)2Dmmh>3(yCl-B&he|$@sUzrPsXDYC3#Nnk#%uK zdY6fy`=iky>I})pI_#Vdrj{q=!tNWSS-keO9(wg6siqWAMan0U<*)|L`_Je%o1Hq2 zzF2yy($V_e-RZjlqdp;!uILC`_=5V$+x&+Di69qU8?2?jW=78dmB^~CCk0Dt>vuN> z98=xS_foiYt>hx#pA?k~bQa~?)=ms4VC&LjXEzUO12(76)ba&)LQ}psou0JU*3Qq* zOXtf7PEZ1~gp>=fskXLin+-nKV$6tOK^r;O{HvoqzN z+t2&sI^SrjHAC{>?MuSints(ldVKNiVi)kT?X7$2lnv)wm zCPUC0dE{tY!j7*_E{(#Tq<&^ii{&p8lY4TCUR+|^&oIrbUcDHMT&@=u_kg%4yv{Oo z`i}1$_O?#u_|E7OzC#{-G@lwjq$tgcpT>$PjMU}DJI3Q##;|inGA#V&InOiv;}XVF zWE!6Tq zY?us2aNGnIh^_eo%_IB1V34=j;lD_s=Vg!xe$aW>&cA{@U(bjjO8|r91sg+{D2xpO zUn7Sc1t~+!Xnoa~f;LuU|M6bB$s%8A9z>19!%D&=`io5Bu@PpiaM+t6W&e~dZm}wsJBhS`!Milv>O}o@yFW_oU0c2D3$tbI=!0}t_OSuD?t{ZR zjrUyR2ieAtX(<)8e$E*oFK&OmRw5I8O5Izx zR-$#=j`V1#`&GE0Z4sJzFVIl6I^zT}KU%&0&+9={Wd&La+5>!WYQ=^=UcY$P9?I5y z$ZUQkH4Qh*u`Ahu7xY$EZwG|~S72`fGIzH%Ivr1_-S@ToL-@A}Caz#Nf|(qsfY_jV zc+hzVCye=32j&PpcB7TGi|K&gY2P^rXbp7A_pZOQhhcDU?^&lD^ zO?%Hm-@ONdno-gNb69pLl@dqjFnQb@d^i6u|Mq|8|M_<38$OLyzPp3sRO&|k!AfT>EU(_?`G5QW{g40azx=!Z zURC(=)?6LEq+0*i|L~vw{eSee*aP3BT0Z!f|Ly;}KWWk+f7TnsuUXk87x!e9jKDgpcjXbKJJ~t|B?`sLJ#^w#c1OF3!k&jqP5V=6(5CkuR| z(}wu~j)o;|urA0OXYJvQdmd9#u5;^_Pkx1ip!pV6H`Q(Px<&kypSCNR|VXlDQ0QB*h^^$&98_-D!1wDU!FDe$Gt@>R4>otRm^1JE9npkfA6 z^mJqJ8VFWFv-uNJJZs9QR*S$z5Ma$6}v6-UrAWGnZk%I?Hpoxk?;h8%#pIQ1faN- zlnedIV`QVRu*@5vorzE3w6n`0_7}ic*vzG*l?<$$RKFMv2k)K?qm5pFfY>vSL28^_ zc&~W8L2Kdlyib~$Xo3d)cqD)Pu^fG~EoN6~uQOpFyS>plt^+roq`!<%RI{+SsN@od zQ#&M4kk|{>>mM9MWazAL3_xar>ye_2`0l+*6G+|h5)xsUx#LwE|IFLoR+}niU9JKY zzEO6(@Mduy7M`|-`3?VumUJSs)ZL$Kz9sv4*coW0NKuN~1Lz!O!A=WsgNR|O-JQ@v z_LUT)$@Fu^(LNN8d;oIKB+3cgsqlK1H|<@*n?BwQ1Jr%7>KNYswkv7^8nJkTeoOu=E(xS^sY798Ju_CO@vJi z5i^7JZ)RHILLz}EkgH9@Ub=0E< zkqTkSU>diPsfLs1_AbRUn2me2YF2~3SE=<9^+!fa#sH&m5Z8}^lxm*I7O&?pHCsS; zT`O%0;_A0M+I55kUiEu7P8-)Z=6lN`S7@4>HVv8H6o{m?^OGna-N%_i) z8O|mnHudGmFG1hnmZaHquQjJ&t|kv)mRJN zHLLpl+gcy1`lYj~cO%^EbMC)PQ|-;@I>#T5nB)Fr!oJCu?qmmoU-8Pq=~s{*(${9` znVf1b&0ZonBp)_LgF)wnT+~GB#6ssQlWBgX`mNJ23-+$f3Wg__2!=VOHCC8X_gwba z3h~hHn6bzsm$-TI;_|V1kxwe5%pWwNta|dzyyumfS^xjn1|`R4y79Dak|`L(OuDa+ zs5v~qnKockiwhnkuw+dSPwyWU;MQ-aS5(>KF}_#}Koqa3>jF6ThPFJk^SJ5=kaPyp z#cYJIV*6dhdCHPgp{@|gB8MfpLLAof2Vcny+w_egoZj4?uGM5doJD)1J!j}8DNA89eRDbv7q_`kLf6*`I0Wh2*#hh8c8&9K`g7HawL7QZ#v`)#rgyWq>!-zOd+<%R z$h7$si|Ydg890H#MH#jp{roeWI2+x3bO{$*qTa^lHd)q-ShB?1yqs9`m#p@){-lqL(g7eG8^T69xBLl24~SGm z2Ya0(?TqRiVv=*Mlm`%*gv2iNKGhUZSSIJ(D$4o=SVR-mE@j`u0>j6zjEZD+$8s>Y z*hI>OOa3*6bgo>%_Jxx&*=Fp0g4`NCh_PG8P&Q7-THQR5^C5;rG6MKZbT>XHvh-?n zz#&3xIzQu;Z9cjtlMRoL0_EP@V<%qhAfHy-v#*UUAMB&v6yLqXS<)Z&HP&Pj$(%Bd zlNocPeL_NLoSu-KmRCZYM1o;B5U29_L%|vB_Y$mU-*#MI@4!xz{pzuSk=2Tb3vVLw~$jva}o;<_BQ7@njD5u48x&bp%ak-8pOTOvmr+xGXhEvgUg9 zeD~e)tIOK}GdPXzj0|Mh zjwS%-BhnDve!ArIg%PuKX}T;I2F4y+-JS;c9kk5-_!bu8>tG)?n!`WE6cEwr!aaejJ&@E~TKaC#kc<^k$5 zIl)*$1RW6p>0JqGMFhmJ91)BXB8abMiJ;?&U`&(dm^;Ly(A&*Oqb!3+S&>K1{Ls-u zH{dExKr!saga|dEyoDG7c!`&ySW2MDC??>7gWj{aMi7HQ24Vf%L+S1swmbXiGX^aQ zxn#KUP6Kr0toUTiF`u`f>=ZO_cP3M{q9aY?5j`OrWIT}!Sx)jEh<={#&=t{qMj7w| zbb&?yv}@fo0l(<7?=57a#MGItLnt90>Ak^Vc9=8D{^iK#JvV@PL|+cMg#VIoNT@O) zuNn1@8w4E)GRK%!Wd z^omTwN&;}C>$nn%JyEdxGMwd-AN0{uoS*y4S?S)^8 z!`ngKL050BkH78Q?X<^^g`yuOHGg$QUT4yZw_#)u4g+w@V0Pd>(a?Sf%+ zhFyR^?bmn5zt33+&pzHlKtRqI2XP32hL_|a!PzHvC}+kHa1LQ_9}q;9PdH;xIQx0V zmPlJkUE>TwF5K)&P2B}4c`+0Q zzXrC)UGE6t%=N^^Q9M>%#GcR>F^ekyKH(X|H#Vf>4 z78OakWTE_DhB^Bmc{eU^XhuO^VHqppvP$kjQWFlB(KTbYI!KzyT=FI)MyHR#bJ!i) zP?9>Eu#p5B%Lb0k%&JnnyK`hm9hv303@S*&7qG|K7y*Mi<;?L5Cx5U~6|I#{1e%DB zKs256$98*GbOokI0C>Otv{eiFDkmmhFJ}to33bj8SOy<5pe<|ItVAWO;6=!jHEhPC zQhZMARtR8lgFb^>0+W>X<@BGI@GO}OACc!^G4)H!O^iN%opXSJ4{AxA(l^saVnbxw zU5?|A8Sw&oX8O8jy!P_KXcuAS*G4L_uY`iN>gs+(+X-!E@nB7OvHM9Fh+lLala~vP zg0a+ppO1p>!K+4)X68OvbZYFy2u-pV_M>&`#V$-jvwpjM^y{3YdVh(e`XrD11li51 zWc|#nMFpBjY#J($2T#&;+!>;kyNcek?AHGwrxq9OF@`nKO6S-{fi3D~_x9^3Iw^Jr zO3_bz{{3NhaEcGy#CaAx?iDYn&P+XZfkUYkfKJh{H1l$n01o-YdbgIzx_r7w03NMr z4CnV~ooX@uccS$fpGx6=LJ-@Xcg)Mt16J*DN?wc0;cR!Kf)DDn?^%+ID5w2xZ|_d%Llw|*XGQn+n-Xb>EO3Yh25HkFGJmQi>W zfhQ%aaGF)JK3AzeB;9z4-wCd*6MCK6f(l+n_5RQg-To_3kK! zzFe_AmrK7`{f2EFilw0v%Qp?!jnqAesT_VhJ>$t&#fa_ z3gj>n5LoQ+0>Iia!h|NM{8O9Di6tM zJp++6KMvhzhWlNTG{hH`&e@vq3PUE<2jdt?7J}%xJ_jJ9%t`rnz0Au)Uz|1FvRWW7 zF0uF|K(lX{uIe@u0P9qTCem$Ivhn4ygGyNAD><@gh}Uc_N;W5-Qo;69v`#HA z*zhL%Xn6@UYNdlO+oiuhjMks$i5vXhC%2~idXj&^sqg^@VXr^LwsTT?0$ezO8iSuB z4>-kwWLsHu`L(3fmb3}Q_D@kEc4cEFxQZ4v&PdKI{rYu_aYC8{!x{`$o^xUVA&=ha z@O80q*y4bAJ`9qS)XD*$o_OIsFPM6?z9O&`^1pT;{eXTbvr)#$Zaiq`n7=S1EL&_j zRq5Qw-7_zqAIwecN@^Jbi z5KF<54A|lo30RV12NtK$&4J|297u3d>a#@*<%bj^apBDX}1- z>uzR}n_^+Pr^do&u{ra^O;(>4l`CgqzQ4@P*B?!a;ZtP$7dVZk3G+*z>EP%rcl*LD zaB=lF!fN9Z0^d0PwVVOVPI7!|j=h?5B#_R)o;lbIh&eC7WjbAtd3hR#n8mYGOyxFQ zVE@T0Yi-Gcf6l^cQG+uIZ@hocmx7!#e}=`o2Pl&8=U5B@ek85`($3Y5FN&Gbz3+9# zS7u!W;Q=6A%1Qgrj@}q_liALV;`4hix5CTB+i?0ThsLw6m-Mc)P>M;2D1(|y0Q~*t zbYm%i-Gk+w@J-FDCzyd^xh{FM1cPhQFRbXxI^ffS$;Oc-YC@)iFlqv*B^~_q(-XeB zwX}n5A9X4*2rI_A}xx(MZMsl+U#6H&CkC3olk@TD5oy{BoNH82tRhm8vLgz z=efg7Uc#@@-RCdb&%cgvlPW>sjl2ILzW>?X{}$hW@9uw$?|*Uk(bT{H*xi4p=LrjP z$ZGcwu7fH=HBHc_rcD0q3k!J6Epi8^gf4R6O635JY$=bZy?V%p&BURWtW$VjhUjcP zrHlE6-;s)pF$ZG%!ui4M02neAo>^ena-*^zMbha`&z}6Wx9k*{^ew)lgBRSjus+qP zU6xBS`?ZVj{00&0DdXhKY_`E;Y#*kHof=vu9&Tw+(+4Cus*X?|3BS?gPKV5o)Sj@z z!SkzkIT1HTL;Srqc~i1EJA{Vjb9Q`Ca=adIzrmptHONXmZsC`(~nNxCEjgwrRnVa<}^Mo^#U;-|EXbdqZLuaKkrGfb1L60#4 zWoQ)^lFpvBtZmPVz4~E|rq>l_AV54Q#d$)T=R@ud#TzR`nS ziISSYvkr8ypZwH+vZG z$u!;enljkvull&*K`Ijcxn|GAH%u_NfA#Wu@%sd)W)XZCTtXPevie%(z3k>k9i zYPloWTu(YeP2YI3y4O^l&D5N0Nc*n|u@@d}Zg1{wepGvNEnL3MH5X~mtp$3tCB;6O z_)xR((2AGR-_tp6ct0~oB+s4six|B0P|(Fge;pptu-tbsj9;Z6#<|CCq9wBo1U)8;g$(uqc6)dJ%2na@^E<7 zX} zQ9?8%R?Lvh1bf(>oPLwvOgYM+`si9z$Hv?ZTFDq%mwk=MV=L9`!S>p4#A#zlLYFAO z+MM|;5lb`vE)gf|km^dt&)>#wJI?_A{68DOlQAE!8qTVYaWHSE85Uw{zoD<7y!wKM z*SjT#mt*r}UfS2>e6TeBKw{Tzc6_Q2xCRAr7yEc{-DQ(U5AD;Q$`8NFY`eFMM|1P( zlV^Ome95=U51t%q+llM>Tkq+z&zWZi9XIE?zrrXqD9qKq)}BF{QH~YbIK>)Jv!@cWiJt*w~Em2;0!Dp`;P~Ba2^b zNQU=Z{sM2u&%OAm=q~iXl;S{5AJ-G9iRK4_|atwwtfF+nd?R_j_&$}B6#f!cUo|JqMS57=V2#W z7yK!`FD-KCAL-gDM~Mm?zeL=73&jV0C>6+=w;+OUcN%x0cKpsC)S*$KYtTE;hZ$EC z$a(-cRt2HGK6~^ys?~d^lBGEQNRB1OL`r9$2$4=kMNymEzwJx$26lB$CR|BALGMxc zJY-I-!$%JclUHHy{8H@c`%+7=m&C42Ht)*QmN-dm$z8>#0mmo<4iA8pSprFT)72z@=OzPX3A@>tN6NEn zk@75qlxP1HDLO4enqlHv>T+OYp0ly@>6gE>4HmJ^=YplnU-p?@=_n7rpb@=q!l~D& zo$|%N1mo|)xKrP=T}ks}!%uu(KJw3>mmi;O!2w@!aO92#$|m&qxR2@R>9~K)KE1Q( zh0Y9fC%0%nwChKwfOFg&o5c${tlw`4U`$Io?5xJ!bl9jr9-Zf;AMJ5S|K@l+A{z6r z{#B;C-0|sTn)Bo8`X;~!Mi$qIEv@{- zj+sfm9Kbg7Y1_T2ZQKIE)6_{J6PZKYIWsTRv_bNv^|d6o`9at2kdlLVYXL+j{Z!i`ExgA`o?K3Z z&J7L>MvX=Joa>BDC~}cw5u|l4}3a^*m%?_*{4(|CHC!7AYQ{K5%|`@ zLFWWpS@+|+DVXD{apC!>Fku~KAQAhXmUO2jweaeaB_xzz(M+L_r5J-~4?Z(T;hzGZ z&z=7)`6YvnDS(;GPMZ3faOQbB(@dcq_m#Rk&Goe#GvQ<%x)plGhb#RO7QfRMlVkG! zTr=&HK3+YaN`dXO#ISbm$9k-&BwsD`7Gbl1`FiPV&9+#$ImNuYBEwHPO2gb_t8nv_ zBk@VGxY)nqn5A5yv5_Bh#U!7`E67T{uuxzn$bMfnNJbwgZPcka`+a5l%5Vag>*M=R z#RbP3yUZOddH*o=AztyB)=JP`XrJm!nsCsrd~~`8NE=*CfRrtUKc>-W5G^*kpVv7Nd1`Y?@K~P#Hs_6dJ!0|C74hUzt@FfPUgm(#5I%A#j(K?yiV+?p-x-gW4 z^<5e#c~b`;O!^1|Kq@KTI_7NCS!^UNV#4AZrnxn#b-C8`Sdn6NhW;}`{~c@3l% z`xAx)v+K@PF=nk)7{F{_V-T}PZ#3c?>G!yUd^Fnbi<_ObERCLl1AHEquf43ZC9#LOI{MaK28|lgl2P+7boS>1$p` zt-k$|1j>02qn3fP&i-2tl-iF6-rFE(YDY0rB4dLMHeX099HIy$U$m;CR-1*5EjtULe*n;FD3$4UJXRhM+3cBwC$n)jOG#hJJd{vGCk`pn|+>n zC-$^%o=90YPwZjcbe?%0ci*de?~!aDr!d~pZIs`h=#@jwPU5kZauR}pCH`>FaS}f6 zE=jnK4zDy@-16PbTAI9iqu#w{SMGV8HS7@3H<#NzqCn7<`NL8Mar^6N47% zV|&8vSPEvx_JCR77!T3G4&U~j9PD<5*Pv4uAXB#6hYymoW-|78{^XwEcrpc!CwBqI z`>PVRR+MMJEK<4^x^aqoxy)P{D_0V5re4{Jb?gNqy+A(#H{HMM>24Hx=#m>y;!G>g zSsU3!-6E87sjYaI+SIH14qmown}Z7=VtatP1FAesZ`YGXy)ltJwI{MXl|q)Mc0rbu z0C;$u7UsDd<+`Z#;Q&$y^@9l@{al(*Kep%EbIWvq)Y!*%S^EJ(ea||l=Oo&>h0_wF z)0i@)wmZrcjmDHI-TfXZa~J34&~-{!%Dp+TpktHf{c zyj6-`Q*Lz|i+*rwi0hSI&Z4zW`|TETS(i$AAw*enB}Aj4Uph(SmIDW-b4u##w3WdV zv19WmpE`Q+sZ&QzoH}y!;^AXQ4}bcJQ=h$fZhqnHpy?VN#!oGo!(?iNIvhCc+FLkv zcz)qNTeHch+8XH-JYpn`WqLh2?1MdGbz-y# zQ+nd;($cAu)&hs1Lt`7!L?5b!X7+p9XKQfr-0{WZPaI!3zVx{rI!rK?4u*WH-AXN1 z$qto#zo$)Yq^0(OSOq+{l4T$c-V{?#Yy-;et-Z$a6|^Ue0iDILiNMP0?r(5}X|@9A z4(RVfI4$K$b_2Oz@_mCxuN`GKcsA^CE0X3aK_8pSvbB?^V14I3`&2ono%bR3vQN4| zWb+f`On$uFOG2MQ@mU5EI>bQh##QcR{iwdwPGw(zDkz zzk18*emxNnJ9=_EFHP6?dqt9X5S-U5DQ2HZg}f(Yk3T-%A$KS@7Wrcpw>=%duK7i| zupit%f(&DT(8Oba%t-+Qgcy5b0Gq_lUeIq1L%%g%uJ0H6^%(k9px^tTp>Jp$5YI)u zge~(uh1EZ}An$uRk2C|?RF>_*j^~M~!1@kJd(6q+pQ1TIlVY+udFdGcxtJI%b~$vL zy&t+v6sTR|EBfG)Fob&`&eLA3CcfWFjNeB}Ww_6r%xE zA~xohyfL>AX#J{1CVkwI_tsx$&?w2Cx~~oy*nk&)JcL0Dt2e66Wieq~58QloCy7Ez zjF`6p=CDND$+jK32dngS z+A59xHWnq$Xg!r>S9m>ac1CwHsIEWkiRGu#GjsUB!M=iSx?Bk7!lr_@nO0SC90+a( z?nJ9mYhLQEePY+ue)Lh_;(V-Vnoof5cUI^59F+wPlCn4;XYS$f5ot&t0bY`DkmRh$ zuU)?q?p!Vc%T6nG9P#w;6piahEr<_6W8xk-Eb{n2-ACJ_`xr^vJ664C+8)_bKW*<= zCD8VCngW8Vo9}aVnH?nUTt8`#>|=0!?}fBSHh7QoB8Dx+v^5LulT7G&Cp^Nn z#*w_&<36$LAon2k`%>5Ur53o`DxPvS-@|LQ>gDCuRp&L4s0O3Yu5n(ha~Tu5_v36h zTti|A?&}QKkOYp{$G_ZbZ>AV+_E6}ayj*tBS#%eh>&__P;g5Qhab@3QcEODMSYn;` z`(+w3rC4ts^#)cqtW5%n0YLWq&iEc&kf*X;-pD>}{`jAodVT{Jvu9ke*waAdQ;DTb z%4~e!Frn_LD{6E#aXQhMk|)XPAWP7><42z!7)}4hY&#~NWOqkuWKNr9S><|mF8>?& z(k|+Aek_w*mQcUclnZb->l1qW440POn`8cFYeK<}8NwV~;tyVppvYRA|ZZHLi4hcYUL)Ygx^9TMXx$%7H((ckXh5>A=hh>S)(%Tu2-O9r~}F z-Sb}4XE3kh@94ZE3gZ|;>NugvO}@^J!Tk#_A(saJWM{)}RIEboUafv#E+JJuxQjc( zXx|H$0?mD{R{9oL!$(5{^Msc7xr2w177NV|SrwHCuh`ArOFAeVUi1SJG|IyY~k@ zw7Y(&%epL*Q;$1)ELiWzx(tU2l)NIft|*|2SBR*$Vm`caN+W@qK?k-eloC> zDV?O#x-@a*!laZc#JkmuC2bJ;ygeLWwWpV~ttR7&11 zvX3bt*4zkKIJ|R6y+U^bUp=rM_gG#}l+!U<&ZU`{% zukhYsB=-w_Yjz~)DS02^KG1J!R*Bs7AlJ3kW_{j^N#R`>L}Z%4xpv2|Z2$G}>@*yk z>7VI?9!ejSlaUM&xeF=SndS9M4ex22o~KZV?P3zK{h2|J$j|QS+4I?yXU}JM@$7Nw zbj1H2VD?{cnA?XZYoB+{W}ZZp8!4YEmoq`@sJ@c*Ph7FfNkCHKerGSSOx=r$dr(%@PUlLi z&2=U+xN5&u?s632UY488FAhA}^H_T)x1?}L8P%FDg4rKW?70l^(Zu&oxKXX@`q<8a z&04#@dhH^!TVaP@uQXC9)8_=ax8Dp@K^3( zcG9S)Dg)MEcar82WqFd|QLL9f?^d9gWl;=Tj&PSxd}c46>KJcY1fq-3Rbp4G$aBpH zUy%i@-K|#}wbPACS9cDYeNAh1oV6Ovub|_g!}yVCCAkXUS18BIQ7O$l(JYvNhDNpG92FypV=#*_wt*C+ANLPe3adD$JjoUz#7z z2k90yR628N;b?k)?AF1SH&hv!JTnx|pIth3@z|-wrJ>OV*oK-X<+ykJ}y^fwDRbd=Qt_us2FIK_kM1 zAn%=c2yitl|LkWikBVKqcYU2sIauI;#y=4_B@be^aeJypW4QpBai)X#>J#_0am6xxZNKmW z$a7ADx9)VOXjLgIRip2qGgJg0#U<2fW%C_l^2M#YBzu2vGE_dwuz61XaW;{V}6K3h3Xsz0h zOT<$(Cp3r7gy+_s%qP{$Ck|9T`H2Gz$;K9STM<`EtVGcBbmd71yelp^enhWHN*iiA)~=V1o5uxdi9`wn+hZwsVI=@EfUMi4hm+Tek{cqcL4yo@td+Oz#lwRK1MK5>zUynxbRZ8uD-@8jh zpfL>Hon^5RiK=c60ZD+@*=CYKuvxEOmKyg#CwI*8`L=jMUaqd5DmX4I~vV zgMNs+=b-;Z8-x6CWlyNBq@cF42h=_Qi0#P_S85+Aj<^=nR=k+&d%|cv1*7#nV3Z=+ zhbOfj3`gXss_#n44--#Z9i*(yJ)yRlg4*UDP>Ye_;lXS#%1U_Q2)F=n#|;A){Gc=p ze9rKdOlg2u_Jqro6kM)+^x%>x6X@qbnPB%ipaFgm;%9jf7}xd$#S z>F6F{a;6H-bPraBB5_Q39TZ4-RuqHI1{eDu*c*LUZ9@xmefLl}Q-jP>T0ozFV= z5>Gw}LpZ=~lY_yzO?Fb58TQ2?A7&Di#X;a++!MGLQ^38rCvYG7mTE6JrNk8!7WZ%o{&6n&14eKs&xCw2r5sb$kzK zNucR$j)Vdao>z9rF6(*aREk%&&QD!9q<`*-SMIg_I`mwx)+UcsV3x?j!OL1ZBl#!9 zy^|L6P&3%X29CqSKtHo5(9fiRer6v)f9O1PFZdnkRxTymvA$$|JM59Oe9b02*ejo2~=r7|`gvSt1t!Swtvm`?8rrqd}fo&GR_>E6_l zki#HJ!53el3r+6L`W_}(J?r5Wn~F~C39S<;Xr0&tT5+=<9t+d~OG4dVzi9UL6a(zP z@*NiVp;1bn7zEO>J%MyA1*BsiK_E$!Z?0VQurfD@4?n=9*PU%13^FU_*}1oCXzVE< zw?pS9ntd|yT?{XKu4o5^$*TQ?qrarO%yom-$&@yJ-9FbWJh!Mj6E;xn7_Vgr44=!YBu zcyh#xyXX-&NqN?alU~(>RqVb}o}^6myEu8c%cTY8Fp~EI=l2Q97~TEN;xS+?AAZO$ z?0jqn$#4Lus9}Bi%33&L^@DZjt_Gi55l`lR(2nRSq^G&BELZmmsua!MKeQeKtiqX9 zutrX0Ik@NpLO%$mEGNkzWnE0MusAu1BgOmj`rPMgyIUee86Udkj{VRE^FhW7F7l`* zLN5UTrxVKCnE2-oP{EY$9*DV9YUVJg(0ZABnPXPC*G-!-n%!frMMTlbMAok=gJf+* z(7+|+0_njjEA{3jyFkJ&Z2XK2FD_z%3*N1s%g~q0R(tI>%vwo9F!p%cb@{qNkQ&N^ zTe}K#X}V{3KcU_x?hY>5Z7|%Okv(-uH^P*!8~aeFje7Gke;M<74~C9EQm1@fI)sG4 zu-r}0CJ5{Oo4;9-xbFkG_AlKiCIO?53rD(*bs)ue%>cDS{^QEAu4$U@@1 z>hOhSSX$4+r_P=nj#}up`d}WGbYybh6gH&mU0gi=Ov=yHC(#XwmXex_i%*|AbL8Tg zqZ-YqXp;a7!wmw6yOTl=QV^Jpa;cy?UMQ__0X=bB9EaX$ymStKy<@hQ=n=FvMe_z zFY3{h!p=^&)rWfwv)2dc9~2~c%#PooI(l5C9vpODF>5Xn5}|R|T|la5UtAnSl;iwH z{mEvs+yl{1Q?d2c9}?Y(ED+b93DpdZ7tz)5%I zh$hYB%ZszuUHE6*lcDgJHB}F8VMqT72_+yQ$nC7FHXZ z8}=XrX=5?U-J@2Y1?QJ4mp&>O&*9#F@jc)*N%?dl*sln~EO|N3rO_8yz5j9;&S7y+ zbNleC6AuN)4-=2se$pw~_kih61#IfFyqLW1SB=;^T9+tXf03xRs9~>wqma~v5yF{t z&dEN*31@_|a$2eKLGVfAP+{1E82)~coS*()v+h9U=cd2J#OJFR- zj@C>q3wu43nZYZuiHl=v8v(qIk z_il`C>^4@Ne{%m}%iVtG&zpBXIDMp%+?h~QsvoCD#|OWe>_)%0&%-cHzenyIpZ#~< z+xF-In59#4_uep6$F{bK<&4&!t2<|)YRHU!xpu8H2AG|ZW_)K5M{%X|wF{(VdbU-^ zjg;NBZNf`gf(WZ45ID=d2zE_lDQwJp!Dq~WI;T?*68ePvZs8DOuKW~kwip3=&gaNA z!xcVzrvHrfoO`v&GK$ka<7mpe;l4K$@i^|+cr_aCff@PrD`pAtYwm0)NhO?Xv2#`s zeL#uR^TVh3Iu{ENd;eDYOl`fjSqqEpyh!48CZ}9~Vq)=;(PO>t9Zr0HPCQTWk8q9u zKVe;W_Vit-wuZ|Jn{eAF{?|H9BIxHYwsr+mhrQx+y?Q$)DdS)FE4Usc<9fgwMdD@u z-`gmrjv?+Bq|W(V8uNPwE_X)BV!M+j;`C!_%0W=c_uL#Cywx9_M4oiv_G6_kHYH-l z-_4?}IUIj6Uu228jsf%8pUewu-UKCdvr5EK3 zS)zu~VYnzT$>Zx&CRW4AK%v|SN|EV2)oi0r=h@?Q0PcSO=g|EJ5^40RPkOhI$&T|9 z8HOEube$e(_-C^qo{h>pP@dm}J&+RbaZi^MYiPPq#+Qm-&`P$<(N1ZlB@B$@EdS#Hu-xRE7)?xmhML0W%|U24ghKN)J= z$Z7&R*HfwP2->Vycd6ydZ)E!}BpTVbTpe^{Qr|^IH~KCr+WouKeIDF$Xs*^HKM=qi zPr)yB69s>Vb+dY|!i}t@so%Ld72n9F)4-2jIBPRqja9Z#o?WWD3O9Tn{GG>Oo>8<% z)QgTgcCP4a+{mW#V7AF&EGPMqUnTW$zp{F)9A0Sq{3fZ2lX$z`YLlpUhn_+)KHZl( zH!K)$hnhxqeFhiC6s{N;ISU6*UnO3r9h&!R)PeS&YaYbwVSRn}94!0ONpOL4`ajI& zB9)C!?RdAg?qdvaA3II@X?*zs8e6w67ZU))CUm0f4D3y)Fy#6_&kY0Tj^eSturPmm zku3U4M^7xKz~W*FNAw;1vfWjzr{@oUdiXQ*t+TE}?K4MDoLW+@eu9%u9v*gO?;rob zSED;gO;GjyJvqs+E}olT7?_ZFseDgFM&|sEp~bTKTVC$R+mkD`)k?2{Ik85Td*|?P z(>UMMZJgE1c)y_8kLXK7+^aJ+fTw-3IH6Vf(GL$_VU>eRJ2U}IL^TpO?Kbdi#wtlF zq&?)F?}}!ZjC(IP@3c?xdzSktJ4(<=CEW}*UiX{|8Ni=w>T(ZmHSlD`jR-D+q3yM` z_fr{jrty!?N|7G@gIcN9m8N2!o+PpV{b5y>Scvxvv+ABZ;^f)Jwc2Y?)ypTv4dfA3 z>4Z&78u7?IpIS~brm<`D=ocejrgb^Pm9#GI)^-VxKI-GcV}+gLG=GT(>^Y?1@j81D z13{@@#g+To5x<(I!)KyQoRb1qO?N$$-vVR?H2nA9Qh0oQgNP}C`NGzXt;M zaDPyQy$8(Kc7^$Un9ujMGK*Y4B0!$tN^;AI8!Lx;uaoI^ZE5Fn0upceh=6 z4j*&&;d>VSy-vygU{My2_aG|w#}#VbGqw@CucaMi4D|=aK?iJZVR>a!>fectQiv{% zWC~#|Q&|$~xGJPiHU~C=W^wX1UteT9J(=blT;9)g6^@n6H&+7V#uS<|Fx@NDexD&T z0`Z?635I4&0-gH`MBiK(^$1? zS0a8-E_PewO}M_!rJEQnxL$K(qkJ*8)Rj+VDXF=W3M_Z!C$MwcReI%Tupr84*sP^Y ziRE?|8&{)pty5mnlQtxs^0jU-Om@nrd3Hw6PrD3@GW(W4)pfbIDoy+AeV)osx}Tl$ z=bGH(f_m%3;HR56vYtDZKSmz#>@#MidwyxIf=f&?XC1e+njHL&WjdReChB;GXQ-=H zcqB#%tmU;y^X(Zohcqrr8$&FeT|Ll}Qj%`1xmv$8X;#W(Tw2VXbEzCAQk;0UB!lH=_%YcW`xMB=lr~oCCD!LNEP!^pOr|H$ceuT7aiiXB za;>X^ovoSAHV>Z99KaCE4S%GD)@E&jR3RLjSGmlwcnG%H&uxN z7ch$E99@U)R~~z8oRj6+Cl5ByS1wH2P{$q98mk>h-aR&%=Z47Ell7~$6%wkT zL~JxF)!NvBzn;uJ_OTbn{(AC!Zes4je?On+-*H|Y$Yws4&x}82O}J?X35xejYq8tr zY=K+;0_{W<1EKHwvDynSzwYV_;df2dLDu7Z-8v7yeKm^*)u{@re;=*NbE0`zhnAG~>%N z3Hp6}pjqe;YOwPa9o@SSctqzwALG|qk#M@w8B2{hyli8VYK|p=ULO7=Ktc}7&1uAC zk$q!{FLNB4;P~|s8p;aCi`*XC>ojzk@3Ey53l0;MaVZ$t*b>!X6vce6WVvOs*HCckGsZan@L~j zblo-Amc)u82Yq!vhR} za`egV7#`KYHv8GB)%iZ`k@hGzjEMVS>j<&O5yfL9TVKv3Tq)i?*0u7ke05a0Txopy z%Bb>QQeGKV-bl)8qslju^6IE^e9lcwS9ChLF;%*Pu(xv>W!vSFjd_v9ggJ}irOI!~ z?_;_)FOk&bZ@KOXiqvj~CLE&$4jolfJX+;CeZv%=s?qCjKzr298h7y}Z8Z982oqbW z;*AkqwEDVO>2JVyK^p*gy_m{^0=f#o_(fb>e|C4cOT^o{J-a$vL?4od1ZH#GmwD!~ zOP|Z^^XpGn*ZaSI=9%@)-M?iYj~q?_H}ypAbNzq=n#U_o>h28-2G_-gxP%#rRK~8? zSIQYFu@kkc)mkGXRXP2FTZ?h-$lz{KyYfWqYB`gOa#6l8tN)W~wAJjQ3YWR6*%X@S z>UyIIs;qUp8|4EBu3Wh?d8IhnYF|3Q9yNCWg*g-XmJar{6xCM_riby#Pl$6xygV^8 zJ6XulUuklBrnEUbS)83(E6z^N6gH(Ti|tZvQ#W==5x8pnPTbrOmrYM=fdn{ zX{Hd(7AB{eAgvb~v@$b0HBl%|PR-6v@GCbvQJ{RTutxcGp)os|pDRQZ%*~Xd*~zIX ztHlqMGrETRDB>g5b77j5EX}$uj!l&&OViX~5lehFJz1J{BRb&V`pJ*O8^rff1IDn~ zkO|72pC7E>$Uf6Lm48S$dZ~wBQW{6?#Y4wYH;fd#@&Kg}&E#0;e4|)mfv1G9`Pry6 zH#t`npyKQ}p5n2rjQ#krY@$@~mYGd%H4 zskk`-z^51Tg_+5@x!K9w)J(+tLLs8%*_o*-werFSRiDn!Q8+g}$1?*dPUfdom-l&4 zlkwW9X?=n4qXQwFy#A7iRX47uDk% zy@!MsQqt3Cq2CW3D{K%cqyWsNQUviAW<|ZZd{mg5EX@@Gb#8VR;1=cto0%E@odtcM zx?GX^h3Q5ScmZKZzEmwy8=x0N)YC9t&}CZ9=0OmcNMUMbA)hNw=BA^WIWT8hs4xRs z!7e6%`4osYS)4BLoG*edle49n2Ap%c5P=e5Eg~>r`n5v;(p7;2@YN1V>AlEgl9Ba^NiFRzw(cFmCe#i?knn^YK%WA5 zVU#6whg>92r>YP!L~jHnv?=7o#i2^8G%aedA252G!E6D1%*`0t7sT{u`8_*Znt(Bg zeHZ6u!Tjl>e?*vovAGH6Fgrz?(B14raRxRKp#@38*pKJeCkhM=N)xv)RnZw3M@}53 zWb%axx#wxjtC#{lhWyn@k?+)?t7^~B zpD41fc?QUrg<_T3#krz2H=7r6vmPRDp4A*|Bx$c8nse>>a@zL8(F9U+nbuf$oQjot z(G@F}CQDgGiQ_^wH-Y%g%}h(?<c^YuP&<&<$@&JE2#|Lgbs|Hj+ER-#(59GN$!V$qca0xBiq!9?9cMywe zx<>|pI*`H~K<6;Wm5U0e^6CQ-Vl5ixKul`=`E}56RybnAaHE(4Wy3J^Y&Fy4U{ze> zQuI`12Zsn`2aX4ht>_EcJIi$8J;erb;__Ht4_a*Ka0DId9o zKbn+}G$C9}%DF!*Y`c^F?y01Fq={laZ2~xR{JGOZJIU&i)#-tq zX)jmDvzHFW)A9RqZ)b2uLuX7fgLHrHaSS`LNuqMTeW5SHsLKo4um?Zsj9bIA zHl73SJfYS1VT}*ZcSd~6T^yl)lklbH$|$p8ZSoS9s12;b?MENAgCZVDW;pBvdLLyOL`WKeWDB4HFYe?ky#dRvd|CEgUVPF4{ja&WIZpSyth2xCu!z>YEQ z9U(Z4?jENp#i4~OWFLLB6$2`OIwJeJOfXJC+PTRvHyPT)k;Wm8hsL_+^B3q#zTCP> zWjsu}g=IH?BfH!;KLdKEyo}`)TVTh{(E65>ihy}s*4_~i&9s)E)gcz$x0rWrTwv|? zILb;AGi1uOs~0=hI-GxD(bn-p7f-!M!E7#*fC z3L!;nHR^i!obO)nPQx!uTKi`PFuI+P6&r4g1Z&6IVR zaj{WfuiKJ04}tY=xxuvy2j|=E%C*UQ$Nu8dYk&X|#t$XW14|w+xCa|n_f%bLpqweM zS31>J*H%1~<}M6$9t!dohNh4*h$m@T+lDXM^Hu(0YV5}I$YSVBzsX<7nz3#*b}81m zWxh81-%nsFn{0D>+=4>5;~+jQ%a?Q}Gmh0fd;Y?B`H>wL1{;3aSW+hgMTRNlEcO_+DtyD^EAFS7T9?I$#jGYkF0LaDsl}?vxgz?z9Llm=>sgnXt{&m+nE%ya;nMIhHL3#pAmBLI=-l z9OD5I7E9h$JQXh7Fcm`wn`xE8d)GAOYq-&AY*<62`LMJ!8 z8Ws=0*Rp#Jtd^cQkGq^&qC_itM4C^p+d>0qUPhJDjI{u*4JVs9WX>LqzjT^~;`uBI zL(eVA#zAS5+(EH&aD#PXBeJ3`1bdGaQ>oc_Y$O`%rGw}B{z8c5k<4y^rd;$C>I7j3G(?j(g^CymtvUJGal5`^X~ zAFOK-;mw7xQvGk8uTpk-yu8d*`^&-?X*%t%;XR#pV>-iHNS2w5Y6kJigxwbE+Iace zcvh}zo59t`ai%9*cEw?h;TosnxAQJt3BV~6s_J8|H(8Av>|>akVeqCBa?!(LjNbB$ z(-z6;|M#;o6VSNu9+GEE8MbLfZReA1-FY^`SuPC-o3@ZVw7q1^cRuxFw3deb4g zeG=Ee2WGv}rMxQFShuO8i9z;@H&Ui)j*N^U?DBZG+`@CS((HRF9t!&L39hZD`W8qC z5`Z-V(Eob;6=mNL)UGmfM2Op$BI`S1Mr=rrt^4|(CH!*5D!i9Se!|~ zHK9?0_h5O#Zl-;M?0d52 z_+{66eW#?5Z0y< zzB?{V@o$V%bl7I{&Wl(l7t89ys{qM@c@?M!WA}Pz*t7&~trgTwwk7>cD)GkTwnoxs z;F(|JmWIT>mUQEvHh@dN{mk2J*OYN}H#1)_V|i|}PW=(wWDRbzets>*O~QBCOgT_kUc^xj-SLUTfF{l{N-?DCd! z(@2_#7H{wlJl!{p9f3%Q)_O%&C*RAVVVfEJu3YoT)L)8^o0Rk*mBJn%k!M58*u^?* zB-b*vCtk*mEh9#1TSh{T?r$0EVHrb9T1IPI+;U(UD{e*I$~932EA8qUR}hK~auZ$O znpF?>&m4vSd>uv2F|Gcxs#_KODdR>gzyz5ys=9B=OglHY1~qgHGP%|0M*}!z(8}%u zjINg(*|p1Oo_I(e59Ys|@^{ehoxL62Cx1s9M9SBJvsTVbr)SpqGc#A(K%wGq?y$6_4f4x%$tq>pYteCscJNe{7CZaqm+%rcW5}cmLfRzFhKOZ`jG=vn8@a{DK51qf`(1jBh?ol~B zK&JT1nKy;{yM{|ip;)W}$$VbRJS`tCoC@%`o3Y0!+(rt3b(UjtJh!Ma#o_lf9)q}@ z;C?_UZ}gGX%*`Fc$tyRFzaM?hacYj|3w}=d(nRRfIhW?}6_9f&9s#*hBMdjk01KP) zC&(4?{KMrT2MUyMyvol^(YZN|%3D3*Y)TS0P-@w6VnkB@GV-sh&($oTLUBZb5 zuMgab`DjYbOzRtd%NKI?`E?vI@#84qK86>8;GlZvaH}ZI1(tZWC;&1+mIaKQF3wSo8y=&LiLP?F&JI||3L%u z;4YMk_%z``X>gpHD=;A7i~rCJOX{AdL2-F@=^cIMX6D?Zm0DYX31U=RT5P=GAPjjR z%K;UyWj79%Y6>?~jn76Y52F069N$W%ISSp=>>4fL5(FUfMS#lt=`}fWZsPI;?yfO~ z!pu4RnWy(Jg`S8b$AVv+*bsU$c2U&2VoDj!% z@8f||pNaFY8>qbdG$B{+O49#|n&IKaSymF!>4zy#OKW8Kv;8%D%&n4^N2_6LqaOw{ zM$8hTpFv5}29xOkGh1o7g}Z6z=VsROxO~o)W>av{6a!q6=^~M4=Vteu@4o%v6wfrI z=H19X+bUcgdOZ*c_kiM(-0mk$dhX3br#?TB6afl$v+~BwK{NTn0ytj4Hy;%(Un;>d zi)iESAM_VwHO{`sLAm_S<)RW0VCD2Dk7`84 zOdd&=$8X;~)6^V7Czl7m`7={IVKdH0jHOtdJ&Z>`L-N0Hv{j6ae7?iPoGWi0U5n4D zY0kSPTu7zdg&%U$rFZmM-qM;?g~hpFR#m0u&5J5)4OwX^Z%wd_s#MDFo02Zi<_a#k)zb7HXUnPzd#pEKc6FkK-}ukRj}57>Wi0S>oJptD%L4$?O|0EC-93$MqkXHpe5K z(&ki&u5oy0L0D9_ytX2YRmCG$#NZ-#{?ai-BeXxT6!I@;q%hEFan%wbimZ+K&a?3q zOW~gq6~MQM65RPD2GlZ2OPLI*Xu1(J~R3wF!5bE@~Sx zQz!wI0(&(c`L5HFb5rK6e zT0wMaB2$EtfO=Gv1%Vk6S%ZQ#RjR<8#i0G78V(5};@TymM%=%C#jT$lQVM!uDc!#@ zGz@VGiIHlkLjCIt3xs}Ykzz;zB(_FuX&mtdqz6N2!2Yo>Be4g*%ui#>P>2`tYI-A- zVfDeCxmjk2Y^8`*hj!T>7aX*SOmjt&mfBv=3Q}x$L_+LRSqFp#2+g8kSfC90u}25G zbA)x4@^j)4zzCXTAZ(wthz4gB!XOl=VarL|un6Gnu$PS}0ZBz{b!=iwkgQ>tH06TZ z0}DBY5Wp*-;YXOOkf%cz9z=aG z(Nm#lPxz(3g3a`1f#<@sqv|vb&VoS38CeqR@*X0hFQ4ue9+IeEX;pjcgy7rtv}q-| zui&8z|GwV)_N?M#gjk|D=ckXMf=$jXNVnvjw9vw4Q5aQx{si`c9Qt$)8v(L&X1W1y zM!qVPsyMSb1670K;0j?upa`}m3=NV2@F6f6iE2!L4lV&RW*ZC_k%?Vr!ha-J2QmLt=Tg+MR7M&4EW>hxzdy$r>`@|HZNb; zzn!E(VCfJ>lAL0F=CQ~2NKWy<0!&xh6@rqI@KXJL_=u@Nq_k3)rDwKs1mY z1!uOPl01qIe{zMnbI=A>)`e6BPK8J?F-`C?A475HWS7b7Gezy$S8g!AeE%4=e&ob{ zqnejiD^q<@&FhQDQpv=<1Kay!Jy3pi&b@0jQqCo)m%M%G2$*!8MnfQnA%D8CAiFrv zB}}<6fD($2{>&^8%`Vi;9TVP>K7`-ktz`w#wiP`EQcpFd$OU_uA|_!<@0 zwPl~!IA_i=%2_o!YpUHG1cltC6&ryKlk6rMh??P`M^k2S3#tQW<^!x`=p8n$sZASG zvEe37+o%dQV?Q#jnziQEj)v|5j~7o~8{&+8xafker|yZ{V|cVCog}7m;Eu3r@PM(Vim_kJ}$=tcVh`yjPtQiy19Dr zdaYTOs{^q^q;(^AVfp$>rL(r&sYnaNtZ zlXB)MmwY9;yQiEvU2Ct`I~`m~xMG+*LCJ5*_#GuL=%lVhk9Cr#$6wJ^c-dFg!e1Dq zMZu6|$fw-wlrx9pXXPI7?=38Ea8B!$_T`n3PuoKY?~dsG*dOGoMz zf(X?~~}eXKac&4 z>~|)Mvwh7ME$|p#uh*~ow~RZytX-|>QabWmx(8Cz);e5KSI(TYztI_CDqiTQuDv`{ z=1)W_JTl4gdm@h$pL@k)cv(nZ7Lu3gx+sFFf^_|fYeD_?lrUKpY|P&aB6jBRiW!i)K)z{xSr(5<-BaNjbA%W^#A&0Pc}C778!M|Yq$5wN zS2fMcxEHHHs!g)}XO{Gbm21>D4EK+aevXw3KYfP7%yIG@swwgkHY*LN;j&tDzgVZ{ zWz#jtW1KmwJL)aPBfawbjLTjOTkwGxForlJqdzNh=0uz%IkE-IShnH`<@4@<#7C98 zIC8&qo!qAG>*M;wOQ(9U0KSNL0EvSHfcnEDEWO@c>wz>+*=C?`|zjaGwmn=xy zvXJYwzfu^IP^r_Ak8wE@p2#;ytgmtnx)1b=OuX)AR9_9vM)gjl`zl~HQL7ns*Z56T zY(?WTB=lEmI>4x{XdP;bl*f)rQ5Z->Fs-$pjfmBsjGk?+HUA1)l}jSYK&vodL_rg_ z&OchcdV2-$(=IPgwbfb^J{(yGc|{)6XU5KiDWR>=*Ob`+p8e{XP_lgt;9_&TBNZkw|c#OE&X4@*+o; z>QEu9Eh0;guH8+Cehcv+*SbpaO9=0ws{ zmeT54ROv+U1LQIzR*~sx>C;^NDJ!(OYjC6kDJ+xfwgxn$@*-t4Su=$YuH@ z3`)4+$8cq>PUF=|6TE3$ipR!^O**4yA`mr$w6 zh$XfWE)#aW%3y*<$8xDA+@9Rqok)TI{PrzPMq*+b!7__&WPxtc>vmhv>>_EpBd6DK zF=kjwGPduI8bQw?-73I*qE@X4SnDiXucPpmPP7J?IvX_+O4O{?RytWnQoI&ujb}&o zb;%LEc&^^8_W&^CY@#Pr80KnJVH(gCD+pm_qvKH(im$O+Rjx%ab3$s*Zh)okf&Od6{2_Q4X|c~kDJk79Y`j9z@ybfuYMq?Z<9fPb2GiN zRufZUZ9P!gS#nE@K-cnXUIRlSqZE{4I6$KzTyjdFV@X2p4H}O1JGG76e0s0OZ9P}( z^cLFBTBp(uH2_pa03g6dB)i3D7|L?PZRkdvs9nFbCRW!b8T3H+s6YX^oVo$ex3)Xo zYapq|DAzb(64o4u*2u+}jn-<`tl(vx>Q>71TP>G!E(SoW1`r{Hpo;(%macDf6F>=( z5OFKHWaUPB=#^&N;7>+}z2yG}6evz@2{?eXb4%!;JJw2O?c8w~i=;hk^EO|8U`yT zSw_wS1^>Rax>`5t@Z%99G2R93d9~A_g=Jc2l`DjWi9*_vZ6LjS1J~nyqN?%@usjJX zT~&tm5#OQPfG*)PDY34fC8p`On1iLXs8UNA9ccrCz+zop&t4%|l3pNqNWF45lOA73 z^HPi&pYyL>RLV|FN|5$u(t*sc9Sul-5vVIjulW^}I;W)t6-{3%Yb@EBGvSG@sC@j0 z6dd-v=r*LJvHM!Jw^M3jazOB1WreYt;^m%1(C|sgCHu=a>`6(sz(?+Z-cg3>n}3ns zy=7vR$m)LDJ>dDftPP_~iGQAU zvfcqk*tXn5lj6fbzC8$QkbL{3%}MCd(6rKoF_~;6(F{R{k?;||U+2mv1cvHphY$#w zOCt0wdWA>RV&MB$1&*Q(2$GRiGzC2M1)O*XVaM{PY$U*q zUK-`=gShFoCpESpLj8cVQP`m%l~@g_fn1ZY)@mrncmTNxeg_q_!btk)SfD}cZ35iu zj)ODW$_({+3TTF5N;p&gz@oocOFY1dnw zNt9hW)(U9eed9F6%xMuF$Ftof<7FacSJA%U6nv})Z6ncFw0-1{|87HP+aj$%> z^z(FMmotPLgv9Lqwpsi>*+FB|iMP)tKe)c#64(nqoBW9E7dv4RCv|2^}Z)<(LV?-3%^+R4u96|*(L*pUQX)8tWhPcA{s&s@`7&CCyNmENj+mTx(`5G3pOGq6j@f6uV}a>263V%E9^ zSLoRY4YJZe;1>F0nkUytNPEl6`*KG@R z!|kLD-GK-;0j&Ybws5F(C~%v5Y2NXg!S)RuNA?i-X23p!#y+PKz71<-27{5kBwXiy z`boatPfubn_t%TDCJ*>vTe`lO8HY~5rTkY2lvVT$({VKIJl>m5>% zS(2!xd(8mjoAw{on;UEcr4HBpKz&a;)^+0uwXNMSqn(-#g2xZzBx=6aXs7A|pj$&f zmi`Yu9@f~5rr3oVJ*+q~A{^DdJ#?loZ>C>!j)!iuud!Ci% z$L$P5q~T!XaLH4PCt_i%QBUBu#$eN=|Pc+=j>RQ}*7XS&g%@ z73o;TZw*;IPerVpe-cpH>vofQpRwOjctHhsc4J34eveX1H9fDrAb>Glg09@(^af;b zm)LBD#tnjDZ6#0z38|IUUK>NwVmKJR9vI`!d~xU-^ikJJIH+N91Iapz#M70wtOD5E zeMcCTq&S9J&SdWnG{o)1V>Cz^@#~kGXnA-pcoE&a7GboLeS(@;WVNNCKIU0ttZ>uN zYG2=ll&#;ISHotjH_NjfT80nJ!hg*TN@r4?%QUYwgBQ7h<8G4bXu-0ZVgDu7HpoG+s7sS?JW zOx@?UGZ~evvd)K=amwQ;NcLNqd^${o*guG{cWr>${*6BAg_vTmAe%Vf>j)-{g-X2A9|xFA--h+{L!QUAoL$~A}P z_N7Degh~R{B$_c)lI+h{;GWJr3G)mO8J)Z0Iv|>L_C@!?ert!rPwjA|G_ot^U&q=& zftdfX-xlu$gnA480ZY9bv2acvoao?PwBugLnY_VycW7H<$Fr9e+?B`5l4fmcJEtyQ zd-646ohej^Ri|dlPYM2S6A~G)Gsg%jmCVeIT6^Z_sLh*t!F$1h$+|l8jfP*+xS|wb zx4Nv7Z>ic6_8jEQT*hS@*c7Zfg%Jiq5wwmdY24?D#22R~9;` zX^FCjdgT2l-N`MKWm`2Nn6_-@L&O~k-j&4xug(qe*HEtvg5d{X<)n{S{0j`dCEwn* z7A!fim9@+%OAX^Xz{wFN$;0l!7^mRR0>C`&DU-G9D>KKImQFLYHm+kQ&fq#`)=KoZ zt8iU2Y)1A&1>Fi#j8;$hCoD{@4J`d^8tgBgr>*7B^lId#&U~u19C6QY4-RpqwtTv$ zBZH@F%TQZqP0kJNYj%`{eCc%77}gU{EOOYsxOhxzJMVxQ>})}oA0X9$8^0pE3xS^~ z!K?)R+R=i*3wu;0`zuqc44yKd>TmdMrQxNiL-t()yR+OHpXlmm&n!rE1S#yHFHM3Y zAIQa($kF{8yOzF_$|FhkG!0IyNHXil6B?p1CXYhNkwv44gy5Lx!rmqiR*=j(AgN@T*&Dx!R_rA~4Zdcq>uks`s}Xt1Eruh*cVo7YnjV zA2yXdUa(wX=4%J7M{{!U}$DFxf{;gUny7k z3Swi>A5mNTat{Yc`9=3OQmQh(A)V8W9>V|dsWXc>p>Ysxn>++bAmcMNa?P5tSbw9i zF*8o0tJ3E;Xj#rAW<-I#=%sB+Lkn6>XD1HqBL3K~V+z;W*4@zTZ!jJhg0`9N!S?9P z__)2M3$Abxmp6-vdudg)jdz!!%Tz)Ot|~%~&5@i4*u(Jzx0YV2wYrKnsI|H(O;B3j z2D`w{ygTXDBYHJ{4(jl*^#xYje`SA!gJ$NE-3B7_7O?lr=0sNv4N!T2$Sa7^1F!edgyvQ< ztl~TZjR7oa&&DFT!elkEFNQrDWZ`X&f8%O(NC$0Z%fB&0l|P1x{wBT9or{w0e}fcu zG|sLW8b2+r<>}qAFcSq>RD?>#1^}0AEkl$ASGMEpbVdJSkh43MXssS^6U!g`E{VHR>w#oNl^JZreX$-$?bIp&{s6YbW%te>_3 zy7;SUCMov-`Qe_`l^3Qu_KyffHZ{w9ve;%P@}&QP&s&cJ;l5G^J5(WBJT_0msMhho;!*E?Z9@JWKBigK*Jd6jpb#(^|+<#!xLLt#v6G8z6->u|3vhnavT z@}PIlq3Rmbn0eF0f|wnKtXmX0GdhI%gkpT8#+5T7Q*2H_ts{%CG)8s*1Y2M+Cdgf0 z?rfiF!zy!Iybev|K5w{XzhdGV96&Pi`OYcRdMoIeVZL(p9^+0ABuu3-p42r=T^RtC z^(J3oH{G3kO1?hP!gY-~#QlYj!}_31$Abz_Vej&!ed_iv5VH6MMN*SZJ2q#&rIst# zZc91^7~nQOp%E(EMhLlXF+FP33C6?r+nV*D>8l_$npTra2Ee}6(uklD8<(*dw_wJF zJQCU#^{5VfVj9E;$Tq8XTw?=<6$?Q+NNQPX9o72nt$mvedbdwC95)lE9&74O!xCe2 zb`$-Dg6%jx#Vx&gPNPV8rN)L;M&5vYB2V+x^eh(L8zAFWHa&D-I~n&-z`fQul2K(aHa3XO%s#)iOHk(BfBDYcSN~JmU*ca_&fI?e#XEogwa`4J z%9k_S-}%z^tN+Y~Qqh;?%+@>K-g@I5`#cGapw^GSc=!9?*#6J2-g)EOt`PQeI*HQA z@bd1Df99&uhaF@Lgko-g?Mt`b{&}e4Lol~~_^0ikeo2!@b~a%x$ei16|Lv`}f1i5i z<1cT${nguVf8Fgb#Gu>`Lr=qzm$%>f&YeH~!`Am-V=y81a_i;q-g))4?XP}k`>XE? zsQvMm8-!xQU^$wpaAAsc7gpovzuWraE4SYK%B^>PN<$AM{BrBpuY?Io7Woj&JAeMx z)(`*b?yJAQ`$Y{IC+HA`>Bc)U4$~Jo1a@DANX)HQ-f*S2fArPuAOD%fv?xrb^us@~ z2t(1Bcfa-e?H_(G6tYPOv6$Om`QGif{!9Vu9*1IX|KSf?-*`FHj-xSezx|G0zy43R z{`6JZgPp(Coj<&B`&+-+`p>Uz{o=bc;vzEdyz-;1uYWsJB5L;%<#VGMo|bo(lVhwVrTY;h3pH=-1^FE+b@1T6v?CARd(y^-w(xQ+WW1) zd&wc9L*_;tn(0=`f13)--2Ul5Y`yz4Vd+ob;TvPXaUdq+{n9VDUjMTvUSAf%yJrsKP zTi?I)#v6|2brhpu%)LT0-8b9c{l(UwK?CRP{Naku-2VE{?tJ0rEMADm+#x)3>xb{& z{r*c^U;B=xfsrhZ(cJp^ckX`kPwbTjqb2XY_~O==-n#w$x3}H}IH{1yz^X&M9O1Z~f@kTR(nL8XDfnFke3|7dE-|<`=hq^WxUe{}o0;R~FtE$4%b;kGF5X{gcoU zWr~~(Kef+x;{VR?{$=ZxKO~1}u!T4N?)FbV5C2op;oTp+a_dij-g@=lOi7GG4{!hb zzu$WE%iG`iV`$Lgr!0KR+^RF%Kl*oue(TMz-}&OZ+poR4{nelR-*>)t=Z!zye*2s7 z1tISresk;1A8dW))jNOw;hk5%7V3Qd|GuODm`%TM8VnPQWmSLZpkJ<$VS~5c{psx= z{B00AeSw2pFMo-Z4Mom9eCtQAZU5vOx8C~U_7`8;`n&(U_2yTZ0Ta6W;un~~t#|)? z`&+N|MGgL+7ry|r+xnL;{NHzeaI|5u5ff*RNAzjogO1a0zxof%=s3*wo4?)u$u}`GuIuxyAHB8x{WsM7yFcA}<(I7J-4}mw=g(i-{_t^<`-{&`G?W=mtSP$+rNF4xy0y8)w?f#dHbvX^VVB`=a6#i*Pp-h z&o61Q-~MOF;O>wAY3t25Sqe90>TkXDhg1)W?t(SkjXS5$W z2i*1YH8-QJcfaYCrnjMp*J$AG&;C|$1p@DW9q8VA=LcKgc=PV}L50_XVi0Q#Y6Fft z&;lx!ieC98IAKwEx4#Vj{(FoP zTmSeq7jFk8Z@u)+*6V+y$f1UV|Ms{3c=yGhf)1h#qj?6t{ZBs$;6>Yu#Juyb>*U=%O8I@un+HUKIZvh}l>7V~D8v%jaFa4|g zb@$b`w%&SW`|tmee-jPF#oKAvBR;(Sg+Fe6>Ft3JlZd;!Z-4L3>pyqJPB|3Pp!GP# zW$PP%AIf};9g6tfpM5Wwv2-#Hf_>@hOn>{ue?=6S$HML3yuI~LXm@O@EZB}g+D_SMulI23JJYKY@;~arl;@d3hIO^K(X7e zzk2%{e+PKBUimd_6hyv@IQ`xmMAK1m69_-@)LvUlxteGPGxkJk)goeeZq!p z`zyZ?nGGlmemCnkibElF0sWi_APK2+@3;Q&TPGHfY^X+Q4;}z{=TF~6NW#h3nr?mL z>tl|(c8Q`3o$aq7nFI!6=bUWuI!A;ZtS@{nmil7v@4icvoWN`s0k$~;J7w)|HMK_kfK!-x#wqE|j_IIFl z?|`-S(tq6j?yvk$7wiUs+DoTc`66>`aqr>!j7D~p71>eP%0@>_1j%=w5t<1V73^VitR4$J(2C4#Aqf?pTZ7rdX*+{@5!%@ z(^0!!U)Hjw%q~ZG9%*#3f>9>kBNJgg zi%GS?LI$hLnO+zBcBNTg!FNOlHs0`Z;=`8;ODo@Jagkkw1M+(F=Bwn#@_;d82`&fi zHZG=Z_>mMWAvX@teHpPF8aixFEG|NHerZ=GQ+mqgBKt~sJ!En5Ht^U6!0*Q!x9J*s8dmCi@5xX^R4T=TqX_wJpLjo)(M~`0hiMGs@&fZmZrXsR-=Mlb! zqh9-wv550MlV@3HeF?PCI$7a83^XJ2XEi0zIRulzriF+cw9zaQ*TV5`$~ZI3|AU!k zFs+r1%9&@DD(fHy5q*~3ihlYHGzp>@Oy%RmGI>J{u7&n9G1Q#x^c+$J$7h`iAa?Nf zG3+yQ4NJ|UB*qx4L&zYjhmx8uG2yNV2Tol!dNnYHL^i@(JOkV@18EgHH-9AuGQM43 zhO#)7R~D5GJS|*hlLi_+i5Ey!rFiy7qDPo%zW^NE*AK}_bNM(0)Zq#vWfDoT(`EjW28t#55Tt=R$0_h7(|dNc{0w49koyj6|B?nO zPHVD(3&vm4K>Z~R6uulf^M{##WYR#LBCAuAbPjC<$SN`l;U}$IB#vcji8J`!(?H$) zRo9d#=W69_RL;|iXC-^^38Cs6v>a?yI4QApNo-V4^zacw*5gfsLWv+{uO!t+3JmUR z_E+VJnJPRvD^-#f>d6}Csx;&cRQQSar-fS36lp0Kr;hSq+nr#XLgb?>ndW8YDW?yj z!u92aveB|mBN9U$m1{P6WzdSeh3c^VwKu^;h0b7M&26OgppnW4;F?E?xnle!J=BLH zJ(TI?!G*)^z=sT4391g7v_c7*9@!(jK8}9hXN@`y8Ln0~`Pba$amMPAivzU}Pd)TI zzt09|Mx=)le%)VV4<$X6*9ggt1$p)>rb!~wpvmH2X7!xbXzIpCJ4F;u*W?qeKW|LH z2P;DN@y}o@J8UnBcQ$KEDg?~E@3vOZwXv10%U0H^?qVy`w)*C4J)zC=&EK{$_5{>* z9^8qoOgoaD0ix2_QikmUBuiP!jK4B1;j@r=&|FrLc`RD_-!Fb2j*R24t4V*O{E<$# zZ~(%*Frt2JFuVENrfe^-QHF+ajad;W|~M#u_HlPi@Ed}&%BbGZbwpiZxfn* z(Pu-u`P%&&(H82LD(jXZ_vUM)`PCTlDS|1U?UJSQ`HI4oP!|SGYjP)6&ho1)0%#i2 z#5;exeyOpOh0TpQnAjR?r1yn>vH$L9V3R0H_3BM*i~gmoV{Y`$BkCkxH!J_^9|37E zo{I1xWQr%uXDv?3{v5*9Ok|z<%~#X*HSk-eHS5;wZ>S;Za%agnee<`L=_R`P8u4@F z>oyx)H)VrcX_17wLv|8fy!L#wdGoh2d1HpV`CEde6GI$0h3W0yjBh4k6WbfnL&)p; zuBNwh)<01+^iLXIz~1Lb70hoexU0aF?JV&Kp6;wurGYuILzW!nb>%-+)${~LzY5}u zj{Kq%2G*C69X3RKmvgJKdSsA*eaJNFWiV+s2a>X*H;X0oU|cR0dymY4a;hRtEzz$? zbd3r7=gr@;%r+SPTxH2YPsRhxqzB{IhEKXe(8x3D60~d7yJclx07PB|Ax$$5)eN3A z(I6BB93=uzT2ODCZP0R4e>+gVB~!oo8u@{&9xz_7Lt#-Bc#~JDwQ}<{(7?<-V1!v~ z86lB5QG>M%Lr0ydXs+~x!S-2e592JOTEPciL!qXQgD~lKqQp1r1QFvpP+^odXlP0c z?A@_C1(RZQVEQvH)944t?y6dY`K~lZ8 z5s`7V(wrGaBwhFE-5ll(VR2i zJ&TjPe(h$yQ-lJ#o|)o8$g*=WJ3_bzE$wE%>v7uFZ^7##QuwIfhQ}M7>=Kj`bW`+) z9j$mrn;oT330`K4J>&UIBUtg~o8&jpyig|kGQ9I{*ob$6CAs-OO{@xfV&(|J|Mib` zB#3szh=k?Ja;1lGL#N;b7lB5qeP_Mwb3>a4yCk6yN*z2mq<0CcaQoLrUP8o#GUCUw zyRX+81Z`EUJ0L((ceguGmrnFKwU7?+MsPUn zW|71^~rn=t~FE3};zkQj*n@U9{CzyKzI4(OGO92y|wzobMdl zH*M2wvfYTvju)9|8`l$wRVnow(h11zje$fiQ1)6|2oiy!=t(6EZ{y07KsC7jINQf* z9oHbYO%oR=Lb(8Ghvx&S*9CUl3XoO88S)aVwCxkTN;J4(=(ESAP=fW-FqPN{E!P?L zOuraQh}ovw*exNvM)jV07~$hK{~X7HrXhhQ>w`XS8XZcHV;>qnDf_t$rp+cqa1`E* zP7d#_fBM309KwqGd;&)TfC5NJ!C}}JG}n1B|1HiFqOvfay{5|(FW@EqZyv!w3wEfav z@5cCz?B+p5A#-Qs7}tXly;v((Co7X=xg5(hi1qDZrOS-J@IpozDb@)d=Xa;PdSm?Y z?qucQCf3FE*>k&Jk=dMF8S7>elaP3c2xO%QjR1W{{Aov9bYlp z%C+)b``LfR=(W$DKFdq47@cg6b^QIJ-Qw9MFS%cIEc4l^)p?$KdY-Enbss5LjE-d% zHjgxT-mniF8^*-+N3398B81@Elt^*y6g;HW(!H z=~!H)1_m^)L=uxw0RV zdwZ~uJ+-VGvBv7yxW}&R5-TFC%l>6gFS|@#k=F+*8}$R&5J@~yIbcEbT$V-xf&-aJ zgfzlu3@bSV&vg*G!$6tm$ZLSFx=bWz#+u_m!p2ZY#!y*q_ckCDHz-tyNr?(yuUJ-f z=w>C8e8Fvv8)M@bTZCDTl|2*P*D=o11=}WMW5Ip zfIykhK6n6Z_5tA1UI4h10N~O`0RU+_aEJ02m5<@#D*Et;3lLWZn9}lIpjb{ovAi27 zJ~~W^#Ht@WL0l7~_DuNdUNE?tz~Ji6Fo@gxfVokc7!veH6UuxLtbb_$;Vc(PRbMh5&G{txG?rvnr<`4>{_cH#3*L(?$95Z6osKOY2m*`6?qYYb00{yQ z2gDGVoy~68`!Uw_e_*MlX;r`5Vl4Zl;aF!E) zI@{R%)vq>YLq#iioyI(^q5lLvm0mQ_M>syf(H9(S|6z`vs{F~&8#kM{;Qq+U(=QQooRc?{6t5> z!RW;thUEF?^(8L;<;J=B@BPcw9O$bg5=+)S`j9|8S_#CX_X|YA69v$p^iTUQ`-lB$ z|Ezz!K=nTsk~Hoa_Ls$QoTq^3LJ4q^+M(2h9zF;h)t0`;w8&|erzI_NoZEKcK6}r` z&(kz1EXLytfG@ud#gufME0n|>G$npdIH*4x?rvNs40MQ_-Zoo&O=|mveGYYd!b~~K zJ{t~Cmzry4ys*!tO1yXzLrQEh`VE(???Pt{ngv2HX_=!It>Ht`$fTvGDgABtF{+zL zbp%+$>!rS#ez3yx(C*bYA+tRN-=9VXa&?k+rdDs!fB<^>-qn%}iiEre-jdwMz>~VP zE_DjP#ZREqm-FP~l?G66KVtOHZmVk-7X(;!>YdYQ*L(tny>oMPX3M^;M+%M*ur4x? zZ7zZW1g^GLcSHfCGyXVSDTU>TKYDQem90b&3{9cqhpeIz;d{HWN&a+mV{`M(_VpVA z0q1`koqs5Pc0m+l6$T0qkNyhLZ-#*$jlaDlb3F`1SP$K>aji8I?TH)cV%sLx?guRH z5aH|VmHvl1JFn;!Jy$mRv*inY{(Sq_U(Eh-_VmSR@AcW~`D~ckH?X(1UcGvizw-Hu zi)UM9Q50LV`Lm3#ml~wu4M@F{!{HhdUw*-P%F`Zsd(Kt43o$S1a_oGM|As*?Xw|kX{bbf@J&Cda+$~4rBai;jywejm%_!K&&#k#S9#IY zb61qPpA!KoK9Hp0_a zq^d#Ql$5ttUEaDy8mdKlWc|rKXh4s$60txJ(zkKYRgWdl3Lkjp3-v6)Cp`kqDo*l3 zg&pj5f%ZZp0Z_xS+%FM?b_%l2aFsAX(<)HR*NMsow-HyZO5!S+trwf&a6)H=Y*^yD zd^n(bYt^aPv8r#=9?y2^T6Uw*Nb)W?^<##?8pA;-jToM;K5JJ5J|@}~ddPZzK6ND+o2 ztm{E;?_3QEg>@}hB4|huY%OCsZ;>`X@m%8|=2a8WN3KOq;dIrdk%YFbb{wo|QENz9 z5!+td0zkv2R_#XPhp}RVo@6Rh^r{ASNu~l~QBa~OcqFZ#m+rJg*yEtAgv1oR>ci>4 zwW!n{ZJ`{eHCk}L60=Wv97|*#-4)|Jpz3Nj5`ebZPn{W+=+9;%Xs%Zlc}Z_dhMJ_E zLB>zuS<4SYKz&5e5F{_ns4=Ah#Hd7d)Qlf=ehlcq+H66r4VI@r0ql`_sUw*J2|1K= z?H~Zg^?WDY$ZTkPjG%~~C@A2kDqj`#0$tQmLGS2L9gGw$$_@-;6fKIPF=B)g`?I2k zo5QEzeWC|?pXx<9ryVk<10cq$vjNHi<%*Inv2|*k0hNBtYz-ho4ZfAH_5(km!3sFg zhZ??Q=sM$hS7Z!jY5>@EY4)77F^Y?UYAU$EKrnPg)&^o>IHe9lEmmXIprb}@>1bP= z$lIp0V=m3=h<>T~kkCVqXAvq4ByA_8&z(Hfc9brvw zZ3%wlRY-YY6XA_LF$TWPo1Va>)}=w3xQiKqo~VMxHxpDD;32g@b7|$}m3Sc<(sGs5 zD2f6Mc+i@nkvj-8<_yQexvBKn$6KAhKmS{EM^;B0jMmML?(f|07!vD-2gUEa@6|Cc z$03g<+PbFUi4BLk=po#XM)cJ{k~V|lonG5_jK?rSPWG`cIJ48L5XcF-p^{ioA6dl5 zx0E2to#L70N}Dx{KS3F{dDRBIZe0@=dL0TLQ9sRC@JQb4%RGlUP zF_`;;gd{A{GrY&PJVlE$_)#~lpJ4TH0!xiJb=&+-62Lk&tP+N} zA&ZWvwTSsucSJSx552kCLkl<%knf4sZ!{^vKdkMN?sr=hBbEp}YMcf%Z_>Z@?poce zGn%DOYPT%oDQ3Pz3+PHqs*|pkQ`=KS5-h|wQ|H~)?5#5Y4L$IRLt9p}`aatgHm@_i zoz3>@lgVXv|2+Rh({Q%g@H#V~yJ@)Y?_3WU66<;Zj|DFu2M+&giZjzTaUb`kDt8>N zK*LDGpNh<}+9Jnc!~V;|)YJn%4s{R^2*eLbSQNChfnbJ>4;V(wXdDvEJc^=BkJX5z zG;~QOEjW=iL#msO+swMsY@7#(lge9qk_>|jaW8*bE?wa86-zpWuq?y2%lMHfG0pD z%@`ou9sx?61bzaP3VC8HXe5LZucR6=Ziur?Bp$T@449WoCt(>8v~+{pQpP!!uO_;K zaq<`rygp5YxFI-@idlMOz$XHS`-Tk#9O@4vg%6+7R!(kpT{Bt+xI&SEWB{vywdJf~ zs--(*4_(H|Ps8k9i-~XJN6*c(*|X0dWw*rfC{O#gXTxjubpH4~i%r|vy{E^Mr-!Z9 zanFBb<01zMbPqz&e)BD7<#D{y-rLWP1OKX2=^~PL<3xr>i-oN&Hb2Yv(za7J_;mocFT1x5tZQu9W|zN(+^ZwcG6^Ry zo}EDHizC|`sI7K=?N)ukZr88(fAfC6e=;+_{Lb0BYF%c&TfhDnNe&j+{CcGY8#5|f zJ4y}Bnc9{O4r6Ks^*X0i72TM8906%w{?QOh6U|7xh_IJpkGiI3QkaBp>sXIa<P?hl8KY#1yA{k*S2HHYJmCS~M%6 z7Lyw;h=w=Sh+$w9;EO z0a54=TwHi#fl*oWD0pCWr-XPQx?3oAL3d~d4@P*>MBFLbGAUoNQ6U1&ND|W$hy@_6 z3>Y|js%Qg^%?CI&#JomK(-#2OPZ`tt!MT@0gh zDr@4EFiy?wDB=a_Z06FkbVEE-6??^$7*2G7xReQ|QKc&fnh8dtNp}@Sws_RhM-eQO zOE}q1989-BN23V|IY6jvX^C2=rA7fBs{PO;lwLv&L>M(zY*~hS6`X_#)Gu*TMJ&Z7 ze51*j(()UL5^9~`N9L$Y<{R|;uqxTYV|4d}5dM^=dF7N)x@W;7CdW*x+n(KP%L zWjX~MODlrvd`#R}&ggMC)ncuo$`rI_-Nr7~Aih2Ab!tlTjI_+7+rgb}n7Fjgmo< z3_>{`RNQj_VA z=g$Y-Ym$F@w9Gj@c{ceofBx~9p7)!r z+y7ozSom#WIA|@jTfOdZVfb*h(7(9+jo*KKezQ>8>vz)k%calhuf2ZSeXV4xch~QA z)9z@vkap5L9)2CS7j~L==i|XuI#_6TFVd&q9>(eKo0ngf-yT!?)E@nMIqr0ZtwH*F zmy?-x)8Qz+cx`Bta-(ZT_I|O;-r(;2QWwqP^?9#3c(vbVzr8RXwL8P#Zia79czE6G z_uJj8_d7iwf1psiJ4y%L<_L0WcHVFE{{Hg+hDB&8y)z@{DlSo9B!3Do^lxHEv&||F!(uKqmz|&FdG!HW z=r@PM$KLBmp0wGwl{9?6^E=kb^ZUipr{>*0rq z+E`nf#;{QT;ri26ojCqIm4DyZY|V_^yPsN%g|X~6AI_TtqxYqi%{lb`e#LpS{a4lc z{d|36uIgY?cA>qr*?omfLIKl3W>=Yz``U=>$P*y6P#L9n0@IJocDC;CtIKOMAbuM= zvkm-A=X;Xd(z=>ozFbZ>@R50E)u(HIY}o&dy1!p+Znl1=^8mXHZ@*tIp3hLuN2Wj1 z%FhgBtNqlj)nnAQS-Sfe6#ofBm}%no)y?HEKQony3cqqbE66?q&Ak3!>ijQN{(bq& z#pb*g3QVzJzRcBOn=4;t_<$z=@do}{_kXSS?;9(ttMi(8jR8(6;FpU_GpgHLXfIa% z*)D&!9(-ecJ-}YfoeT3B?5u`3xN8sP zNO=VcQaA@`r}_Lbjq}Z--d4Xi7=5&{x5}!u+=%i%f& z>0R%peSkCX?IvA}&L5t8Bi<_Uj$PPK-&r5PMiUA?o%y4<6DOUY<%)Q7Ji30Rz=s6U zMRRrST~1Sw$ORt#`*LfgIj`=-k&`~P(hs=J%-Qss8)4EK>t^s;sn;f3u*;gOi!<7W zbG}Ijk7?_=`KkkGnqa$lHk%zp!K({m(yk=NYXhH@dTICHFNCA${X)aEIcQzKUv7j? z`2A8Bz1CP>X!CD;p!lHqs$;c4NJZW7;i`hGz2MyZvOM2bnE>m3pSB#6Z>}vXfKPn> z^0M5Q*VdNTeT}a_cBZV^n1rZCM9Fddfq;8kdRlu$P} z*5`WRKU%-FxHQL?@WI;ic<*1R8nE`z9JJ+)#=R}f{lB08(QV%O4q2lS_Q)DSTYHc; z8jNAUze!H|WSW=dKpu_r=50D?494A2`z~#q4|Yv z{gYZNjMJgQU?o=DG8I^5{FQKvdrv&U3r4VFo|+fRZ%Dgq1dn#(uH9`nKw2Yx8V#DQ zQKR1(qZ~Fa*w)BqeKVY{qv8P|wq6?)7^IhtjmFY+L0n&1!A|=;JPsR1H3z-nXwRWK z+kT&{LLaI+)6epo{p5uU{rCFXkQ;`El%ap4=YHzL2^oux_C;g;OKZKg)>>^0TWq>s zG)4o>1KD7JdL7SBfr9aQbC~Y41bA$B(LuVc?6o<#GRY|Z)=9fpqiY_eNQzRjZuDO zdfEjfPfLcOcdGQ7A7GY zzbzEiHQr{_K~l1)nV<&$wlEu2LdqOVhSZ6{^4mf|MdqcTN%A%oMWFYIajUm^kv61H zNBdYpKEy(J%x??dnKZvGOh;ja_q?`L-pR|HNR{7+1DT4>AYl@HqL)0}ftQKe|Jwoz zUmZwpgFLccA{1a^>+hfDEXjEc%$v(Sm(7V?N0Z1JMis@JI~3lgS7dq|j= z)x1oc1HUaytYmx6Lo0YI#4YhQF@S$F=T;8RDObR63*Xu1i4?IX$!%0&{szT3B;zFR zbsnTK^!TUWvVsWsZK1F6bDKU(X{epwq%ChGtKhmEc|nop2`6y_zsrPmwg&A!3Z0Y~ z)GbO#L+2-71I6e4+)+VlL)ysbx~mya8j{cn}y za=lUBkK(;@DWvX2``ahcwhDzxN9DLyI}X|P%Ad-@{E&{$Q>)V(rrJ4;n*&~frRYmP zf*Le?*Vcgcr|4DH1p}AIg&xeq72yWv{AVo zs*U-n3{H5jr=yAo;7nkvfy-qI8218q1Eb#6RVOWF*i*9hO+9%U zEZR%XyvjV{*%$nxQmIisI;tHt_G;Un%-{ZasI`n4Xsl(gr|8tn6nn!T8-?e7bI`m~ zQ+6Rd!Q)RGVU3}s8wp8W12y zc^gD@fs(Ao8&3k9k1S8LB2^Ed>e*UtJPDGGCqd5(PiOn`TTyOUetL#+PGYclw|3JD zhX$Zj0K+ip;fNr!nGGq_@{TDbE7phZMJDfB5FmhmQK_;oL})#aH7{jFrD|orUdUA< z-i-25bX=+J2i$$1*hp$8`&v7#FtkZyq2?Wj(|mM|Q^0R;zK&rOAMYjAix4ELkn zs43=XWpn5^reA&1tch&xOyE;U4BVP+B?YHtOs+9M`L6lYa5n}L4WH4lVdk#$tZ(gR zSxOe;YCLIKp!=%LLb@qoRS;s=@glzP-Up{Rd*LKVMRMERV z*Lkr{)sW$3cE0lx89yRU%R2DKS+vYg#wXMd-U%>tVhscYMOq;v!PNUFb5KA?V{U5I zHAX50-H|7Sk*O*D!#Tsx#n{6nc|5`g{*dlZpyYtgUhi4f)`#yq znVD{YIb^MPp`?S?g+i_H+aCTZX>22Ty6YG#er#WuGwM2RUtMdGd0)eZ@0q49HaIQEU!4ujtf13{oeS7Vgf+}(+6oH(E4Mcr=2Rvkq>$p8K=#IkgFQ%>` zJ%{Nr-fK$AiOo-IOG>rcK(|nW3^{ujo%b#aG(_;O%2^{7lRc$k6)XU9H7-<_Ee>j& zA$@t%JV~jd`%2977^;Q09nP&7k%e;YE^t?Z{!zM~!mTdCOUWiaNP&Q9kT79)jAMpS z{Gr*gcub!}n5pai4bRSHtLJ`mM_y@Jo zzPPZ$-CnUFF9og2ln%XHlu~$}P+tItC@|Y$YF`!^c>%CfC}?&b2~Sd|48yTz`whIo zv}80iw7MI@pG}HixT*XfJjv|*Rh{w-IN2i~|7xt`*KV%_L0t46jjY|=3q&^IosBT6 zH&C7L#nD6lTwpG36xvRw**EE(QBmFlm1INbiz94^O@zTO22P5#Cas(kHFHIJ_u^Ml z&1a#B#nR?whEJs)yCv?@<=5}BUH*ka(j;jk>oSa%l!ADjM2Wrulumjn=sVeZ4Yl$B zot4s#VeJtwea1IInp1@-XvnizPc@NT0j(f-1GUjxQXc>35 z+7fHBTBkvh{*sDHdY6}&fLR*hTYIRjDxWU|(s;jY4~C&BSXX!o;|mRj{wfN!w;J7x z>{*TwABTJ){?xpL74Q3N%|;QX;X?{9=P6u1J@EQd#T=44Wj3`$P%hCsj7{qt+(TLu zO&fqUEdx6b8j&F&Q*UxA95xuA9X)#kr<2ZU>!CetqmA+8ZW-~V7VIsXCp=C~hLU7_ z)0sCF4;}GnWM&d_5{E_dV^DcfpF$IkSEd7$zPp6j*+&qLNYj~BRk`N0Rl-$6PW4}|Q79EQt0{9@GRs%GBQ z?3h%L9p~vmSz^|ajmlCqtf?%$_$m+~@*<~r#{1Jtgu!)viW;;vt`0TC6&{?W4R~_5 z(^O$AwMyQox5uIr*<=N4D58U525+?{SB13^bvng#^YZje4eX%F<;@Jy!8Ky}^a5QV z{$p`ciN;PF`Z;oMF9ugwj_9x?|6yI}No-1;X=qc+5aCqmZW%i!U}hkqMCcFGvCw)x z9*x`%a961qHp%j8N-=3(WxDkR_P1FAqP#)#F>GsN_W@Zu6RlcqVr0XhWMM6%d{kk3 zZ!F~&WIS1tq5RZb+TB)XY{DSq(gnIX20_F3pWbLaGa#Igp|qGvjq-u8)trja*}S)h z)!w;#t=nK1t|DeEAn;>KqbuO3Am*avgc2D-;Y2>&Wi7bG0h6uU+ITdi3T4BNSq`E+ ziHC2dRv$4jV;R^W=Ahle?LKCtlt7#1^tqmp8g{6(6bg|P;8e^d6^s&ht*-H?^Y@&& z^V97m0z6OdmP&_(ma-&ru>urDUC0b6#qWYtoozc$+6q@nQO!HmECL!oNP>3 zuS((Qv_U$sV0n@~Q+bv%y3-m`IeyS*5AwiW-p#3SWKrzAx#J;!)yR~koWe5}Y%sX^ zZTOZ1N=Q0N^U~9=RzZUeE(|M{&$hf5oz=;dANWWwJeSIQ<>PYxTC7LzmYgMdBku3W zU!%gH3(thCw9TVjnjY!&E4#4WtF#_AG8)sb0aiv|j3NV8_Acjh@QpjkRZ5iV_C~2a zEv9W%_MkcnCI$m@S%15eridr*L(GWv(+U;=f?9-A2FHTq60(i1RC|ELD6`}0Zi`t~T5k)D5 zNwDJ?c5LRPSrQO24ytZu6CC)(65pl3urAxCt+_f^Ec{)HTRaF9I`fJJ)@R4vaZVHl z?R(qPlu+m(*(*m!jgx~?q!>u3?wB105#>?2TKmQ}ou@Rmj%wAc7`d|3#Jey)!-g_J zP7v8If!0C~l<<8U1)#wgr4vZ2#}z+`k!*~5A^myRyh5V=C^@ds{c#l22Ak^qRdT6Z zPmU@F+Sdpvb;h6U@Zu9isJe(%=`eUr2cLLh)`)|#sZ5X;ndTz9_!gW|=9JoL4v)v^ zx}q-2-tTp%6Y@6?y33|em>7MQ&I`SUJxk`K5jo6@V{CW(=9&BshFQ^LkVMTaKk&jW z@!Uc;zFvz7S_;cll$*`>*m5wrFFX{cNaMQ%RbEj}Ak$xX)LW9!3*8c0^SGzE(2AZ925tQ3f~=bs zlU-1BPQ93~(Odr}Ydr&PvO{n{xv^aNfx93R`BY_^qa ze99VZe5=$eab>S^EIrGYjYBjiwt0yTi;6Vy_OM={JeTspzYz2m30W&zGWqAtQ?oJi zzGXZm;4mYez*uHdz5m7(oljMtB7x~Prn06gX}nXp(-ptV-Z5A5wy%#w4CK7`MqZdHY`+$GQL&Hr*HcpF|K~o{i2tTLX)G z;9)li&b0qawi9Bu{KawayA8p9F!I&bbn94Q=~GR9f92JVcd$^Vx|6giWEE;F=T&!# zG5uM0iX~3DQ!GVun99KwcH#67Xq8MjZNvc1jLByqah z*yN-*;$#+Vb+)_l^9gG{XwwA5&nAf@gxoBeQUK`phev)uiZ}NaWh(iArPkA~Rc2IU zXj)hwA!xKthQ+jNGNGa!C<)KQ6fo`OQ+rxo)C`}NJtk;bs(Gl9mvNQL6xpC>>DlxwmGSy3 z{$rf&X<3SxYjIf#Z$wIPrmX2XZzN#>BZttk4dPGB*4@*xRd`yq`Mg%xo3xYtv>S=pZSW-{MAa{hbn@-;z&b}%E`y)Q&@43tT;$kra@vwyixNExMR*z z6@%#Bg3z|Tz-kT<>$*DdC@riz=HZ}PaZs%o99}IQy0kfG&Fcle)M9(N(1F9qLAC0j zTD5BPi-v{`idn;YaZ@;_rKeRZ@wDo|vCCtKE;iuI6b&s}L4%1sWo_$a)V#{b>uJ@Y zu6EeNBVM!arwWGFZ17oYddUgFby~Nd zp4OZY)~xu`nvZwQ#yht{Xx++Xt?Pwn_D%0J^GVd;nooGm@n!eTxRE?lFf?ktW{v6v zCorKPi8pNeP@l%DeDs(Q*Pz${cy`O{0a zP-9X|(rd=D$zEr|3$cri=t&jy*f=<<;l3=-Db+}h%BAxDaV6TTQ)5dOhu}LIuB-gh zX&N4DF$)sSYZb9RFELM>p6#TI>2&uJsO#zU#%mdu8h(1A8bd+aBAE}vewq1`Eh{sn z%zURD_OsM4S-&P`gr$kZkxiE=Wm61Dfj{JBP!{~^r_q6dTrYx>9s0!QR)0j9Gpl(_ zjvQ&$d8)l!LS$4GWM#3ydX^PT)V>AN`+L29T07DnfL@E*l6&78hbQHuv(S>zUT?V1 z+6Fd53KWa96Ic}X-z8`QW~aJv$l)qFkNWK`v$J%-!>uxbTnAN(@7iI=WOU(~NA?%3 zeD>sCaK95p88h!tz^v-fn3GoePEo+9p4A<~VmDgI7yH~q{86SRu$skrj6F2i9Sp&j zGEhx_5M8{&MBd0!ZLt<3l>LHgRhm|AW?ofoMIh3Hu~t2Zxq3mHm-1&`Rmym(9>n@C ztQ$vb#exM3DdgwN)i68#rZ$Yx=|Q~rre{iO2dsXktuMmV@MiOp%Sl>rl0 zJ7zgyqv%-|vg_B`au)1XAvQ*-#zO6yCthR*v6VRSrFue^EuI;+Gm_fgUUb0eC!9ys zI#reDE=gTRk)>$wg+108w_`}n3I=z{q_$k0H2HnHYLKBB&CQp9R@c%JG`YkWo`%m$ zV0GcGRm}25o|T(=^VJ-(N<<@Sac*H)s>PZ2%%==z9(Y7TpRV`)U|~}OQaEFwfeNwd zgOOU>(y$vd@9pVqwx8*{tb4gsc=~lPm02eSRb#GBjN`_fwBh%~>e&{^ETK60WMo4z zb3)o^)RSh%3Y(LvGbLFG3W$+#Vluy7EYzEmtcsqTRd<~w>Rx1XVWCLw2W95_3~B!4 zyX;jfp@KJLGf*lUW|LNCQVBqLBD1c0ulZ%yLN{M4#jjlADFiYnzKt+Rz_&Gd;R$BP z_9zdwJl!EX;MF4X+wL(cgoja_xLtL+k1BZ;NXi=__JwrqGt{}N-^1x1uW^}$SV?Xz z8Q9fYlUW549nM0vC9~>`gTLm zRS0C0#g1u180?5AJc42SHH$52ghLx#PKI>JF9N$xJMi!!K7QZ#d-Zm*wML`BS}l|x z{t zuyrf?Yj)uvXa zn$lGhQi&{@2+ic_`NXb_u=hM3$6KaY!*+y!$sqd5tfse%UmeNn)JTThw_-u&Qllqb zaZJ&!L&$!^2<%nXA}WJITy-$ZbQv2Us*hZ6LVEV@S|XH|2gS+H)D>B(6?+zKuojeD zd{k^vPx0^vc~)3#wt!|kD?g#@s{Tx&??+(k&P-lWy&i0|6(`5qCDC1u0=33@5({$= zW@R=%hsUJ1jFMU9Ho6ew=F?QTlBL@80-qTE5*}!TTZb&)9|N1ny0XEkrs-zxOw77d zyf;<_nVco)J>sF{Fc@#FV~$qlgk%wVJ{Ei23+k*lM)?3U_QQAq6fz+NQJ)Nq{01pK7w?YZ-L7UboL!{{#fb6z zjKx%{T~A8!{G31~9P82rCbF!_yBYSnWv*zoedCMnMKFhK>4)PmeysVVFCCQ{7esQt z_?aEW@ZM@^+h*&rETz1!s&1|);T&6p18sKKjc&avvFT{{hUmr5)mWp=tKDYz+|H}F zbW5rL!iu%~S8??kyTbXcU>tkq9BTF$F3F-oH{(z`jUxA*{r)<6()#zbN$`Y$uMyW>@6KQK`WNjLRY`0k*;xw#s`7q}bwO z50g>T$>x!?^dZ+AaZn*x%cHg(q0VR;i&#)~x(+Wn0qb3mo=Omza9`3@>gyxa83p8L zgcE8OUR6&kAZs*x_V$E0-T6r&Y-PW0$Pr^H4+I#Q6QXI?KUtdX>uKu4?JD{&lZ|F{*;s@;vZ>mlq+U#_V)j_UqA2*_(TB z%s*=W-4LV7p?lxRFz{#FB2=2}cJY$Mn}nl1#*QY(d?>(KPr_jA4jJAogeZIQtSUi1 zb|Nv$E+%B%PGUf2QUtllfF{MhOY?$?11T0NysH4qnhRTpmybLT3HR$)!HOblEaL>8 z5i}|Jg9ukt=Y9su{da^*7bE#!%|k7!BKq49`=p7e`#it?OvZHO;FFu(OmGUxwgdu3 zELMjOi?5n?U}JggjbX{Q;*!E%76lz+^Kvq@WYe;qXKGJy@^&d9<*gF<*w|_*fMH%| z?yFKcxXfFv%>&@fz{5fagu^-d$p)VRMf-WSH#n1{+lo>!Jsid9{a^nc(RzC_34~{D^tu{m^p=pjJgpOlOkL{QRrP? z!{od`K@rcuh^_-GK5Y)VSo|*UJ$h&=L((Iwv1gY~=sYqnH9b6Ecbp%T==desTjTLZS z9m?nL8%c?uJ2#>ZDJI4&q1(&aa7l#(@&jqcj0|E~0R4a~LCt{=(dcfEY^y=3{tP#$ zPsPy7M?IY)v20fncz`{(kTA|b%=YAJG+6e#-Mmosv^+d^ zd!sF#;ig3BDTj5Kg^6L$x9RB7bvhoLU8s3BTU}33*ad`jU}~7O26Fl7NrQ7y-|V9n znTQ%_TgE!S9*v|J-VLM}-bsX+_kx$JULRYXhnwCxu`b!C6%YJ^Kzs$)HaOe^dz|$P zo2+KvQ|FSKKkVeRKd>)nexYpTx^u+&u9$8~2f@M)vX16IXS;|-1H}yA4h*F62(fFg zYIxl9^qE#BWE~=6izaokRf*&W?<-A9y_Sdz=9Zd?V!AI0Qqt^PTnp46a0NbT*@W^N zOQAh&@0c>`w`CbitW2(RqgEfAisMic=pzOGPPn8Wl@3aGU|9S(8Av;_K6RY>g!Ngt zJxy%#D7`}IKtb{ojkdC(ZmEjiZdN`*)F{RE2)}9*UNRVkJ8mzV zosRVLx?RXsc&i(2YyY;e#hdLeYv43le2w^+jo)4dUof`myU2IVF8$l|si8X?PTQSM zMv;X^j(fqglZhPi5YTZrO(LW{QZoiunXwS|x}#yu&YjvGYc?jvPbBQjKqra$jRSs# zmQ{6r0Ot_6FyUl}yOpAMGewmd46W$|9e<_NrB^n=7Wy`pRhAA>FTj10T4>V!Of=(4 zWD)tpe%j)?q+$~xsZgJTcJ5s0KOf`pA|ND;A^6$LTt!KuruQO-HZco>85YX@$@Qe6 zoC%z)x_=Wv)q9$3Co6apRSvrmn2_N~;@xd|o(kBNE@T&osQ2O;*1K8?gc;^pyEOP! zy6TU<&_${^c_K-+G`sGJgdKRb1XIYjJEX#Mp5^xfXBQ?lpW40Qd%L3V7bX%Q<5BCZdqr4gITpEv+5OQ z;>k8a&RPGbO)B6-bnSPCzH3kj3Wbagsz!O)vB} z!0p(lZeUn1fT4ig&FBAt6#Hp0{!gRW=42V(&BxRtg!~`ITh1nvx}86%;TQPse-^_G zyx$g8SYXB`3yW&?<;P}q6&qW*aOMJ@qbPMjQ;D{l#%N9vKhc$mp9KUGBJmSHCzMP+ z*Tjr82A57-mTWRB${(-e&tPL@g)1f1Z&p56qp12hjgkwAyS@77I!#2XSfb6O6I;*C zU3Gm*IppG=)eI@EsQOe&J||IhCIJ`yX}#4no?&vJ6#AoXWJ$N>gU_3#oNp0Tz$8r7pf-GB}&rCMEACTyOFI1gOIAl>bDWIy| z-Fcrw{=FvkKHDE3e{fF51s|PXEcuUdx}x%RAB)wrVWRh_UpM@UH#>J(d8N+K>hwaL z{#6_b{tb8%{5Uf+0?nIvDUwI;&kus{Z)0VAgwZ~JVD~IMZbPL{hx=ZRVegb>ic`GsrQ9P`}zZn;_tPjUSkwRtLSdw z1B&L~%XjoXr+6HEfB^qqlX{<1e1e0#yQ+);O%qvk9c1klRb*_c$knB3FV~l$*xx`A zdBu!y_?S*I-uwU{o=b>q1H`gsD&^)(1}hfk^kZw1%DTu)y!LEna%iPFDPDLiG{^$X z8!RM07Lu{+^CE=-7TN>td5KpVER-&euh@2>$o$7wn#TUlfL3g-Fw{bcVjHr+1Dpya zift61=Z~q-O96a^$NAL?{aFi#Q6-X>A!z4vtmANyy54c``V`RyVPfKP<&z>2d%yMhF-{KG_7VqOFHTA{ z$Rw}geS@Lz(b(h>P@r8e@7A`#|U&rK%AS32ELHITZS|EWU1<^ltK?r>9!xV;kh*EyQM zeeP|SFOSq-da7ZLd}vJ3P^&s#GO;oKX;646f8I<)O&!V^O z0Q4ngjcZLhB{^`NM$6XGXJz^X1AQ~U!{jq8{SU)u{bpOtx&ADO-~g-(dfT7dU|`3( zKct=H$jjPD&i-HodwBHJv=6FoV76%-8wO9jb7Qtn(5IG*Pm*1Ux~=N8ZQ}7&NDboG zK(%bWF2;Rp;A615HJKaPpdDC@MGHQ7VlOA)N^J_44(E@7OIs};0awp8f};t%oGBa> z;N=Tp-{7@t;5raasz(}DOUcO}qAGc8qf>LHq0CQu&s>c_;LF)tL(8fz+t-` zEtOe02;g!;3;GK&LkBeMe=DDHJw(IUR!^2B7BHf^1hN6J+=s4d{ZI=4qF^v5UyF@2 z<;Q0A43e%1{WAug{5dwltnL*{QdKmOY{a|TP!%5F_Z`}Ytuj8=H%TIM%{I9(q*b$V zGx`%F>pX?IjbH@8C?r*E*mr_Bo!A;K7QUt@&E5#UVncu+8Nx<B&wO@A+zLkE7Yb^ReKajpgUsK_JZ2RI><3f-V)437dZ;y4vp&zA zI080AVqeMJeu|AqpoeBuaz>f)Q3ixGK_ss`+OLx`M4jvlm8D@~T(BQAOhCImh#`d2 z=&R9H&Wf326m*BcUhmZ_3rTc`BnL{-P^t+@D(sS=YUw@>;Ug>g(=57jwy4&={;9p? z3c%L<)yvmD3z8%jGIQfCXd^i<-@SDjJ6*NG9*!L1jG3VyGJ{&Q_n^PKiKXq8x<0ED z=2_jlwMor#D68yTz?l-b9UYdg zz6ufWjFfDLo$<9d5OD3q;2t>wq&H~`OMeaYVQh0i|6z`Q*ozJPM}3H`9P#=`j)0>z z*b`~1Fp$HDw;LZ*E*tcVb|cEpnhpYc#PG--|Op zA2?FL+)Z@5fES+7UsE&7z~vBmaf+P~e8H^hdMGJNnX<5VQUP1`Y6utD<0MzrkQ|I)bCURZk1@#m{j zviD%TJT?7h6yKPb2#dw{Je=r#u}2H8Lv zX%DujPzI?H%~@1oDN5NeflOubOQ+3=%GoYGn`L%WvY+T-*V+XGq7QM>p@-2JeS1rK zd{jfpL&@3$<&>^s2P+Zk9w6-3v%TTNft4 zKgA118g4nTA|{ZY1FrR8D^6&B#q7;!+35>vF^;YL#XQNh2x$2OGwm!hG5eA*3)1f;>K571rx$oL`xYzVnZ|srA5)?LUR73rI3_a-7GXnj7f_| zl1oLVc!K^S^c9qYn)I5nJyGX-@4PqseplF!d{g6CG9IG}2{ z2BfVfeIFG-uujY~^~A6w#H{?lyI5BD$h;MsRFzjSm1*l1Pva&{g8xB7TD9_{*u7a* zUNt1Cn%fWYi&VMfuxE3@2us1Hvx6`0;&@kc&HQ2Fw>F}nI0f;s;#@m8tN)q&KM5LD zsc*85SLdM8+e&Mu{G)N0L&X)>(nAsys}D&Et+x%IQO@1VxAD-D>LcSU->YKOs1*zdlKQTMjb^6=*(ZF~YUrP~6*0M|~+NN(_pwElRL?2T47aavp^T=Qqedwz= zPkLp3fl>U$OFIf(<%L`1)&tHUCLXQLG&WHr-2Hf$tXew|G{w&-&X0>p-1TpY$q#CV zKjVxfOe7bOEHFqPJu(c@oI`^c>l2Avg;_G?mMN5{9dj(pBNA2H`_gWylgjuip$F~{ zjGIRf4!9q5VV<}mvT2n^vQ`9M2eLn7)#T9klp71boS4QF;JX&L8LwIcwT^92R9R^` z^leuG)zDeCFHwJxS6U70HoR9A!_li47@A^ul@t}jrT@Pb z!@C0AzvYDgD~h4RZD=r`z)i&b9sRDn3ca>*++{a6Q_AIZi+koxuJK&)RU*W@8Te2! z9zOQNJpp4z7{fg22bAmQ0t{a#K2(E4++@-a7S;d$pVp&O;=+#2K?D|ka&7^)rEKIv z-I+kd-jPZy??~Z3ai6_&VjVD2W|*&cmaMHJH7>4H#H z?#8fyT;E;t3e45@U3;xE#wLrfD*g2(e%hvba`?P0ztoie3d?$1T?wAo*YsCMiyDbAc4xl!2^d>N%@X|u+#Q|>)hh`*Ji>1_kUhL$AJ;CIefRt6t5I-nBM0rW zR{B)auEIgl-Wa`yuZeoexG*wI@Cn84FJE+_(f6Nw|8XR;`=}}gH1}=c!B)x~jDA?G z)$Sds2Ltn-^Xk&a#&NI_n-Ht5$B11B{KUp}@PKcy9M#5&l+vhaqde%Bm^-Px($IF* zkap$hV69{rsI8X9+o%b>~RrrC?#>uzmDr`Ew-mGl^^Qp|JF zA;Q8HV5E}Pca3O|_cXZr?hZ-GQ9%{Gi}72EnYq5Oo3Xa9YVXiNyGu|76Ro4Cpc$Py za&}Rmn$frGEhn+e^JCPNTKCx$h2k*9N9W;B4g-NSu<{_nS^llPb<3@5myxq4rUehY zLgx0? zSEsIyIdulF)g0>l5jT;cb%U)C4#47tmo=wEf0L3Fb_mm99e2kQqA)LPhC z7>JA+S>k4|5MopM26uDL#kuNjrvR zXp<>rL#8y-MXKh!b-vKg3Jgz>7YnNLQi? z8-MPny{*vQl$wk8^YV2lZT!Fev@0rJbA=+_8OEa(kxa;;@~K zFes;Y*7qs?NQN_S-ENtcS56jHaI1t1SL0TM!Ni{`m|oc?UB#5bs=GI<&$3Ezq~RQ) z(ogENJ=ZgD_U3T$TP@A|>hs~}3R|()`~9kOCY?ICS2zs@qC^SO(lX#C42U%8F(L^b zn$yp>rpbw)31l2rMYYto zfk5JS$Q&1ys04$Z6`SY%4s%SAA#rySG;y{l4>H5oA5)EWvY3~by)RbldGEHWRr4Hw z@mLf#K&%@J`uKEYV3wJy>hz|7$QovJF0e)GI$=fFjHG57N6di>f{xv~~ zZ4c==*^2lst^Q_q+1Cc_9UF z=-aRe#AqldVeRv+=M5EeG*EA*oowzKD|SUH#3Fp6<|>ga8rz)FDzt7)NEuDmpb^6- zlZFcXxhX5Z6L6@)0hNM9FA1x2UCe|G2#dtgm1~NeFS&UIO3fImRCl|3h zuF;u8Hu}7pl+FfhB+OYl-)!YPIk3XYY1+!6`mN&p6h?WM;Ks2a<@%YDT9O^x96zZ= zTj`R`ad){UNL4iAQ%S_iamW~3D`qjDYG1a(9WkFb<7D4-#JWL{odU*7lqKTzi|sWL z*Ftlsl*gJV`S9C64W>Y`tU$}8GM2SfBC>KnThrsn;z z+H7fn*SLcimBYlFm*S%P444-2i%gW5LW*o#6y@$A>q8!HrI-=9E1wPO1V|gi1B(^g zUiO?*v7=Dd0!4S5l+991HQh~N@>vQ3ie`5aP)h4sT=n*?HAxsCjh%i2vd0z`r9qPh z@g0UhF9CwU7&34?2tURp;7CgGrcY8b%50xPplAAXltEW=MKhlNM^KmSNtQ}RytS1R zq1ecFcijf4NY7-!;f*8)b|zaL8+9^w&ka+i&74}GR8(bWnt@^m*~C*yMF&DF8*6Ie z#lYw~#g(*;Xjc(I+vm2;xm6`RTxqxws$hR$YeW+uU`@lT^bCR)1S^K0aNt8=$z$<$#-o3O!`yAo*hrVNVP^*=6$&@(N4Erbu+EW3zm39zN62 z6a|1-GU%0uC!!UF87I-mlO97+B|Ul4;)y6jr8eC#uD8_Hso|SRGqRdi7Gi@zXljB~ zGN?a+y`*$crAnzh*zX)EQ%pCJP!_A#$fGafhDr3vwl||ME+ugRD3R@W<8*+Rt3WL2 z$)(^-0fOZsqBUyKx!7VeBIFIIBN;SQkFpg_CPCta&=&fHN7#*D3Fmh-JoAT@BJ+fC z2b0)p65-LoJth%x0B?nQAXzoPA+7+|^*5W+!vUq>jz<73iX=I=)u!su%A87?AEPzU zNXko9DywV-en6NS<3GFheZ=oX`}hd(9F=Wd*!nxwiid+jcj1ptni%)11Ap}u_&8XQ zM;$R?`Vqd;)1(^@s}O#2HrU7aBKYIf5hX17@sI%XGcjEYCy7R7F*n7Qok-2m^MkQ3 z6Q>dGGl73#+%0-^>0>RLni{>xs!gIr?cmX(s%ypb*kst+2H+9a7aj+!0HS#+tJcuj z+AC1$!6K&5_^g@4E9%CuYPwt?BoM&Qp7Ehu2nPaP!15yhQ;8-a^G}xeWvegN5^Zj6 z9tjd(w!Ro;Z*Hvy3TFmiw&>Fe-3K|_;~afl&tM9 zS+@?5@xD?0qO!^Usy33M zQ_!P+)(v!aMuM1Op|oP`{6xpG{uH*W=B>YrjU(1gpeCK9@FulJa%N2;6tATT@JAPS zUo_V3<6HBOv}20YOPesFO(~lAl@zoGkC8K*0m|-3qG8=BSY{ZOmkcwUIx6tJnZ^#7 z)cb4qJk8-cp=o1l*7|zQmOjth;%2Hn*adpQ46yi}2=!n6-I@Xub&l;Vm-=JXSU`>+Z9}nB%dMi1efpl?5A0d5)rW|ivR02R4}}5UF`Y6&J|bI zLz+iWoA;CsMM?ZP?lsy^<;=vvh=`U6a<`E&BN;J~#{@=sTLMvNi!{yF0~sSW1Dm{A zuwYgqqCgBAr@32xSB#?SceihpQ0Zm zvBu)mb81$nQ}T4_7rXjwvFzp8q*Em$9N$+fT6R7Ww(LY#VS_6hs4(I|S`k|U0=6$X zZO}xI=K;^&{?oaW6b@&JS2&S?&6_Z`VP{9Ya@aqz5dYy8j86;l)+@7tqG_^|W9pUu zxUssK+?mPXO$2?ztUjS!<&g2}FyP0In?@Ea8r_$t@iNuplBvinL1r|JA6=Qi3V5Zh z+Z@Mo`rHT1%_WhkAtcYzI;16{D7K0uhRu2S!QaXJ=5t*Z` zO23ZkOUK69gR;sx%CuFxAvNM?AaUBvU%Tir>#F}o8{>K z8|!XQ0uLinOVtJIb(8Vnp_4X*;fhM+xnG>_AKg<*(01|^S5PcWjL2f1BStU{XBAVU ztfFH2gHBtmqI?a=P=mv0zw|a?fTD3RX$7z|pc+QAoE0x$Z@vlh&tGqSpu{YS5MWUN z?d2<0qvdWo$EcbhdHLE8$*Zy&WrsVEnyNCI&htp*#14|ae0`eEY?=fMYJt^WvI4zR z>{P(lKgB#{0KHRRBFkoCn~RjL{M@%Ozr{E(KQY8Pl|--eq-7h+MuHI&!_0pf6wNv_|sJQvM^S%xL**tY_uADEP^y!p2%2?98@q25c zu4pTm)BNckoe`NCl0;xyMP0f(xcu2Ym2_Rk@+5v$Dia!WHWu%r6g|!DLw*mHkmKAu zRUaD5qK{?8n_N9L09)uYq^g*6sc%NRGLiDfLrLJhaLq>7M5v&JI)84Z&0tWO#0+{} z$RUVLN^Yy9k~CD=`xA&5G^y(9qkBlFOE}D$h6(LdfGKW|a&);W;{NEGEe_{CuB+NQ z@q*w+1J)sy%nKVl-|`A8 zmc5>PKwQ6YB2dps2&?iGTNB)iVHv570LPaDOw?T@AvDffvXE^<+??5jztf?I(D(E< z1U8o%d|iijBmF7HU9W;O`w(CYvEmF6f29y>XY<*m^7Uf+ud6?+rTae|G1O|aEye1` zfmKx<2@2!&&SIY2!A6pJ8n!$fDag)=}`3s894~aR5v1 z$@I~(No9Y^c)+)|>wHGrP&R`8nN^rJI5)o;EOY`wb`~eYB|WhCH0IH~8dr9kF!t36 zeM!dPN0ehFn7SR~>(R3uMoIMIEi9f%Ea*m>Ly6lu9jv&)>EkCN!!e>6ITB3Mi#ELe z<{5)3qq|K?=}HPsUl3l%OUZ>qXw6~7HE&cQR>yrA(bb;@&})xUWOTMWw?~8U$yjK| zizVf4OT#NGQYN<_U4J&0C0cnfJaZ|EJ2vXstq);lu0t4Y2GhW-b2I#nq@5}QSvZA= zkiWlrS+HHb0BZ~n2w%&p_2sBq1`M=yj>L-t9vCfH$eT!eOZeR5X5AVlK^be-thHzFThBG4-inrsZN6pMF) z6wS2lTrcRsXoe=dLbzrq?Q!H;*Tf>(KrRg5G=iH_fPqFYm>EsFfpYH-h=Fg?LF)2e zh|-*RohdeI!=}j5@aP#{AXpc3A&G=R{-FxaW>k>LqSVBUbSwfGDgzmb5lstWg5+jeOXn(~xhP zlxADOEsw5aDkwyzQm~ca>c(wTygv#$=<6t4%TY*ALg9K5g+Uf(I6o zo^S|5V{_uMc+=orJD3oUX9nV_MJbIUx|d8ZUetYF)`ggbll+<^TW&-kHXTl3+~dwS z8g4w2!o=YxC+f1n!<^V*vB~N)B2MreY65Q1A&n&toMv1wD-aKtsA#YcMb@L97)d@h zpT)u(V^c>nLlc})CGtkte$yCy=Plx`DemUe-tdbsp5<}RR9rhO9IZ){A%rv$qgr8X zr+7wveR$Q*xh)Te*m~2*lATMz@5vpHw`bN>#~I)ZP>pkB3sMF1)_|?^b9YS$9ZWF%2v|eli&s$2&?J_!0>EJ54vppm&2Un_5 zel#~&#T0~5tF#p7=24eeA(_h^7FRvG-3EWw$C4dE6cS-;ZZM2=MH+(m)Hok!+bw_| zC!#hCS0&F&(UOlKl#yA$JP0TZE>CPOP2jQRB;Z~7@Vs#byGt_;F>5n(yqov89DQ-J zY2$dIp)WqNXSG+3*1Yp8JH4(Z*f(*4g1p2L1`?V$Q>1@$9X(*~?Whe+E337eEbLZ@ zA=c#1MlHkHcgDn+NR#ASA^a`6c0|5zO#GFgCXMAb$)cK4cygS1x|^C-FgS1~5y}-D z@Y5b)3zvvK8B1h=h!6uVB#E9gPX@=Dgda#%AnExQka5QK9cNU^?qD78V+IQRs>*Y4 z7q7Xycsa0Tm3on@AX?wX{Q$C~&AF4$HHpHFQoa9$+g)NtO72ZWY zEt90Dc#S0GtZ?5J9ozrLFcU1kj< z_L;ydX4#^j^9YM3Rmt2q3mjl#E4x^5S?A7wlyw2LTk$!l=Q~eA%MuD47@uknuJWLt zlDbgKJi^TUc01dDG1;RHbH1-qur1r>(Zn6Z*g^miNYkXb8`8SRiquZQb3FJCCJf$g z38GUUSD2K>mPNpUEnHzO7-H0XYT2;WS7fU)VCGsuCU8%e2R7Ts8tad2COs@K1(K2` zvuq&@z2wEIkgZR_h%j4qYJa%aLR8T8HAnbEMiaw?EkTu5Z>NtIVL&jDx;6rFSOm>C z*w6%Enx($xBD!Z1mUYzk)_uZmtrQU$w$+UXx`k2zjTfgWVKlgwumv@;N#X>*!|D`% zN7W3!4196tW7Eh8neETejZpk4`PeipIP$w`6fnG8o*G8*W3tIA*saH1@AVyE*_Ojw zy*y6$@+!`-t(w3R+o~|vA*!jhK>>PFaL5B?6glKlT8^-=VA z^rx(Q6y>wzTZKb*ERnOmTbkd=rQ3@cCs&i60nuOZ@Uuoaco?Es0s1%(OJyM8U}-J5 zmW`8|2={gUoIC}8d7-Qe|EKDj!Q`>J*pdiZj$s`_rd~KqXg2i2fdgTD&@-p{8470U zY-6sYYitHk9f>V*5K!03P&aneZGpN@e87qnn$6BQPCoA@TX$9b?UjV@r&K#`%tL#4 z6cpwHKD8&Bpez`raNCO1&OJjLa=*THS-z5Tmz3T6WV(A<3?fOzd66o)TGh+A2!7rB2Q39{vxqX z+()$w86XVGF9`=M4x>L*p2ICL$*LV@h)%mU$KAUN%|u7ffcz;$1xwoPU1-i7WCO!F z13Fw&Y9b^b8W_5Ymp#fx-CD@!pk&H&UP#htdi>iDB@_d|S|-2;ABOnoL=o+^T7itp0isY%SnpM85cr8x3 zN#QQ3ne})*zPBy@EbB>)SQl4-0itU~$Liw5?(N)VSWK^uVnVBjvUxGQ4UDG5zXwMA zdJ`~04F3!;qHA|cchjU|_yFUaCwNJKp=gz`-@_>u#8f44rdg0{Q<`NN%Q8O$py@_V zq;o6iFfo3~CiMtiJ(bf>EU-v;V4cJJ4bIdCNUlKpFowLJZ#4wFAP494QF_?ptmp1gpu>*_cS z!xc^61b}@C=B^NqKTC+rl1z2yEP{%UTtT{}mR{vPx`~%ky;SKn*~j+)Mh}U0;K!8c zGd$EGJ32#V*+iJTZn?H8TI~Py6wQtEb?x6a#ed=NKoPrPU2t2S0rv{=jjBN&2(mwU6&Nz zQa;9wVw3rvM`E3WUW>3ll7Dl;E|CoR#GPNxAV;g_73!ky?jZIJ6?T>=Zgvh+9pq)(va0V6cE%bj^n@HVkoIwU- zlp*IVq^yF#X4%=6183Kfi>L$SyJ9Q@s=i_Rj&8c(6u_!q8M7(Z_4c+LOXcH-K*$B$ z{xgLA9OVBMNhnQYM*h=7JzJ!b4;eq@&>V-%P=Z*wz9-!r#GIqx^%+HIH#+}HFhC`0 z4HT+IsxH>vjV^Ww0pAl?kA7Oi)=V@@|Nn~aG@r?l=x(`79C*NVArlis#~>&@7F z?lJsF<@vS6#FYt2kavKC9~@ZO>bLY(zHgyK zhU*s=T9TwS$}zugOzZ-$)lC(QnhSCgPEsiZdQZ5+1oFO(yM$u{`r2~~2ySmAYx)R9 zQeHo&ukam-6-5#xJ-%r{4O5cCXDP1yf_9z#WX;>wuAQB!;CG-8S=V^mQ&rOj57!M} zSrAsq4^y5H$Hq9n-JP?#w)f>Y4u@N-M01 zqgW?wL6|vKlb;%#S*w+YprqT}^~OL?345T&TVT&mNIdBYJ>_tje5Kp8(ct01(_`=* z@_B%gy1C_JQjG431J!I_jY@`NG=IoEU6iuN_YAHJ8gCQ^#GR5_UDffrj{Bu9qw5$7w z^J_NQ=sfbWHmZNZeJ!>tkoF8Dqqvg>UtgQF1Gr|~%^|;#%Q?iqe_?|d zguo$lH2PN6M=!w-cXD!+j48LoZGPku{2_O8-lp)Oe(4-^Ln38pSemBxhmEbnaulPQRt(JjggYv~yyAoaCU3S{4(iup?tFH=A_+UhXR=(>? zY1JGqTuON%kf}U_i}qI>lp)q`F@7+Itg>abqzWg5v)XY&he^NKT))tqb$?^IVKgm2 zLFnNwJ!8EVQ;cLmAhr1n6%uf?^`eH8LwxA$^(fpmBgl=G%Dr)K`M>cZ(54+EFP)3- zlcq#}bSPO=8u$fC_kIiL5)uaR<`)&sxdpVsEuglh&s_Y>yE5r3hvV5s^GiU#7B2yv ze3YpPmD;{lUHT&zKeSLk_^uk@ERNs+Rmb*LS?i=bQ7EiW9N3Ud&`i!u?gO*z@H@q# zz0qS_2zyWVg%ZhYJPX?7LEP#N>xr zef`AHcKl6hRvkGav{_etn8iX>>tLgB&*$-)T|Qse&HX_0CcD&CN+-G}UuC)s%sdDe zgJ~{d0_SUP6J!WX>t#d5f@ys7@a$h0(mtKF6C{$|lV}S`cnWRia_qhPH0_#0KYy9k z-e$4w@a;12ujAi0@qV~mb5ooO#M)g=U%bny3pa`RRLF*n4m&WXleViv{a46@F#2Wa z&3pt`|-K-R$l#bDE!S8v!f+6e+P8!B;hMdDeD_m?zb9R6Wb$%qH7TWK@*Y8v@$ z*eaOP16RHD!(8&&#ZB**C9Xq5fCJ?xtS~2!A|VDX{AISK@73^46MXdz`*D@>%RA~% z(6T1lk8#>OVBa{XG93v&ppI{A#pTy0LN#wFKKD(jH+!buuy-dYn;XEj8{gx2`-7@M zlY9n72F+m0pqQ&M)3}2QSkx<*?GmU+pr4Wi6Ue%aHQa9fVfoGAP*(#3eq%GlMd)KVQpLJr3CUq@>EmTv22m@5wgiQf7UmhVkn*clug*`MLHw`iiN_hihKXSS5 zPkpW66_Cj!S~FTDa@u)jGAK!fGa#Z|&j4{Z%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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

jD6s 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ℜM&joT@kCQKrZGf-gswXcJZaSu{nA0(9RRv$U_3 zTVr7aS~Z)tXJFVgFGEC@E2iHd?9ZgR%r-lMN6=qK*bN9{sv;QnTFBh|L?fIEhb0*% zXhI(IwjGrcjfjn9{%2i32b|hgY#VITEJJc9>#e`hlKY%DJNG&zJ36{?mlm2{dz$CA z=s8e+@!>b=RC4^WInqf02j6lES28jar2XK)IaRDkOPS91W~a@A$}j3)HN7u?F}pGH zO3s>X@1wcJU#3Jf8#B7Bg}XcaWt1wGtT-4snST8+jUzN9Ka%jfjj;aiTeG7u6?f`{ zpmuzM28}!501=#K>v@^#S_uhYeDLmE?(kADTV5{)sbUh-=<$tP)tXkcX|em2_yOaI z4hRtvdCSD)&3jwp@x#e(%kM@r{=QAqI)sbQT&h@D;6F;O9|`3|2?*aPgZui7W#m zoF7^ZBwqVT!I+I*5vlx}B1f4!`X`zC3aDe)$K4nZ7zY*f!t-3C)r`l1;5}dd~?lTK6;8rext1$4E@qRQ$bi6#@0 zbORIp*ghHZiLsQXvJpPHTi)jY6jQ!!E}5epk5wPV53HW^FRsEDcl2bR+b3~ew?=jnFOpMBJjn23 zjM`+p-ONYOOXThrKFTieII+v#xYwzsx*ycvY0q5%zqDCmnc0`1&ccLn5-UX++FwE25|JSTqy=bU(Fv$MY2jE$xd)K`V0{^RagbS zB%H>9l2!EJimsnxrDI4>DtVc2TjBlRw)#6&8V0ZZVk;LlnLILJXu^(FL@o2=+mmnA zT9{!UI)~_w`hKr{#b5NyED07-N2h!?zbQgifryugDEBZ-A$O+qezdBKCy(&6C3BXi zF1ld&F64u=a#cpD0lFB*x6-)ih9i7>euNK~euNL*tG4xRY-sL+edw=kcPv3vDU~2g z`m(Qj+fWC1Jq`3If%nAVjNdU+L+&}Q~w=Sau zS4B4SZ;XG=CCO{SaUgxuh<5Ba_UMQ0*d3d{h2Pk>L~)tFkhIv!-f=NNjcl=3SZb^hnM6ZRi5&!Tx?#Sn#fP{+CxK7F z?~trt3mAJfbauIljMfPP$;N8g(IRHhQ;8qS#?!=XSDNqGFd?{BIT;<2NuEDyOQ8;MpHo)(% z6NA@ifVq>R9mvt)>eO6-Znmls_+NvrX9p8_?xxF$3#cIA9L5A>{v*sHW`c`F2y_+{ z;)jygwi3SaTP1SvY#OSF8o*3jTo_=_4Pq{uY-N)d zR+{I>_cLsS^tAbT0XYhuwL4DK#Tyv#RNS>#Svx>_QM|lI`X7zg)?8nN(%H zV=uTnv>D}o9wUdB$CWJ#8J|w{ZTB*b0fXo2|}m4}?&O5C*= zgjGU@pq@8{%x6MU1?{D1#t*{#9Z`dQ_+b>R+Y&qan@rdsZ`Le6=$=K9giZEuPTdap zA&cVI0KesIUI|;qi^Lrc_^S+1 z#6JVypi5+ih;&SPRDy0T^H)G|2~rAoXZ)2#`pDn89H~2%XW(^EzX0;=4Iqz^t9>w-Q?=6>L#tc z(1xN+)!~qib1=)XqMMmz;b88EyRsexX4xt8nh75Pa}T5UHCnDXbUDt*`aTYBI9HA2 zx4a4F=VdTY1DGGe1n>EqgIVGDnxJm}HJG2VRA{7TPN-yW9eu?hi*D;&j?dw}7J3$| z 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 delta 36 pcmaEF``&hf4U3^^TH;2B*>WNvhMuvBfw_UXv7ug8v0iRs0RZTs3x5Cr diff --git a/priv/static/adminfe/static/js/chunk-15fa.34070731.js.map b/priv/static/adminfe/static/js/chunk-0558.75954137.js.map similarity index 99% rename from priv/static/adminfe/static/js/chunk-15fa.34070731.js.map rename to priv/static/adminfe/static/js/chunk-0558.75954137.js.map index d3830be7c7d904132753c3527505ebb70d324058..e9e2affb61fe6b9c7c3bab9917684ed7e47935f3 100644 GIT binary patch delta 28 jcmbQ&!8osjal>8?UISB83q5mFOH&g=WAn|YI6|xegUtwz delta 28 jcmbQ&!8osjal>8?UPIHgL_K2@19Jm&W5dm-I6|xeh_49Q diff --git a/priv/static/adminfe/static/js/chunk-0778.b17650df.js b/priv/static/adminfe/static/js/chunk-0778.b17650df.js new file mode 100644 index 0000000000000000000000000000000000000000..1a174cc1ef5d9abe1b66bbae42aefe917f05e8c5 GIT binary patch literal 9756 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 literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-876c.e4ceccca.js b/priv/static/adminfe/static/js/chunk-0961.ef33e81b.js similarity index 97% rename from priv/static/adminfe/static/js/chunk-876c.e4ceccca.js rename to priv/static/adminfe/static/js/chunk-0961.ef33e81b.js index 841ceb9dc9ef337eab98d10ec3de3a2333475895..e090bb93ca1c12523e6a62c72485fe31ec8dc23b 100644 GIT binary patch delta 36 pcmeyN{zH9&4U2)Lnc+rka%ysNa-v>Vv0iRs0RZiN3~K-Y diff --git a/priv/static/adminfe/static/js/chunk-876c.e4ceccca.js.map b/priv/static/adminfe/static/js/chunk-0961.ef33e81b.js.map similarity index 99% rename from priv/static/adminfe/static/js/chunk-876c.e4ceccca.js.map rename to priv/static/adminfe/static/js/chunk-0961.ef33e81b.js.map index 88976a4fe8716bf4460e6aa18912992041a7bd0a..97c6a4b5437165577654160d35e8437fcc055679 100644 GIT binary patch delta 28 kcmZ25i*dm$#tm^&yatwLhI*-K#>S}@hDn>VrM4OY0EhVrDgXcg delta 28 kcmZ25i*dm$#tm^&ycXtW$$F_K$*IZ7$%&h@rM4OY0FR#u>;M1& diff --git a/priv/static/adminfe/static/js/chunk-0d8f.6d50ff86.js b/priv/static/adminfe/static/js/chunk-0d8f.6d50ff86.js deleted file mode 100644 index 4b0945f5729d8c5a6c9b141cf3314925f2e7af7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33538 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 diff --git a/priv/static/adminfe/static/js/chunk-0d8f.6d50ff86.js.map b/priv/static/adminfe/static/js/chunk-0d8f.6d50ff86.js.map deleted file mode 100644 index da24cbef514e237fb624cf8b76413f22685aecec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116201 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 diff --git a/priv/static/adminfe/static/js/chunk-136a.c4719e3e.js b/priv/static/adminfe/static/js/chunk-136a.c4719e3e.js deleted file mode 100644 index 0c2f1a52e1a3a0bd0948aa0e09b76505a908fd99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19553 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 diff --git a/priv/static/adminfe/static/js/chunk-136a.c4719e3e.js.map b/priv/static/adminfe/static/js/chunk-136a.c4719e3e.js.map deleted file mode 100644 index 4b137fd49482a57fa3eafcdd8d7ffdc1e45f6d5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69090 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 diff --git a/priv/static/adminfe/static/js/chunk-22d2.a0cf7976.js b/priv/static/adminfe/static/js/chunk-22d2.a0cf7976.js new file mode 100644 index 0000000000000000000000000000000000000000..903f553b00ab80354c8f06b642ed99455ddf6f16 GIT binary patch literal 30624 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 literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-22d2.a0cf7976.js.map b/priv/static/adminfe/static/js/chunk-22d2.a0cf7976.js.map new file mode 100644 index 0000000000000000000000000000000000000000..68735ed263baf97d446ac0485dd949a24a163d9a GIT binary patch literal 103450 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 K+qrh_^ZyUfCGxZY literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-2b9c.cf321c74.js b/priv/static/adminfe/static/js/chunk-2b9c.cf321c74.js deleted file mode 100644 index f06da02689e1b032bdc69066f1b2b402f65f48cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28194 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 a`0#bl{1@F^|8#R>-GB4|WmRy_j{grC5!n_1 diff --git a/priv/static/adminfe/static/js/chunk-2b9c.cf321c74.js.map b/priv/static/adminfe/static/js/chunk-2b9c.cf321c74.js.map deleted file mode 100644 index 1ec750dd1ae7f39f7a2465b71d64335349c8f690..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95810 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 G@BcqRY}NJv diff --git a/priv/static/adminfe/static/js/chunk-3384.458ffaf1.js b/priv/static/adminfe/static/js/chunk-3384.458ffaf1.js new file mode 100644 index 0000000000000000000000000000000000000000..eb2b55d374b9df1ae2fa0120d4ec50d57db5ad70 GIT binary patch literal 23953 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 e;=O6eFjD;{_5tK+gP literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-3384.458ffaf1.js.map b/priv/static/adminfe/static/js/chunk-3384.458ffaf1.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0bb577aab36f0734561caf482991fa82768972a3 GIT binary patch literal 85906 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 literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-4011.67fb1692.js.map b/priv/static/adminfe/static/js/chunk-4011.67fb1692.js.map new file mode 100644 index 0000000000000000000000000000000000000000..6df398cbc049afdc07b00eeb8831a50aed160b1e GIT binary patch literal 397967 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 JgBv&A|9|gX3akJC literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-46ef.671cac7d.js b/priv/static/adminfe/static/js/chunk-46ef.671cac7d.js deleted file mode 100644 index 805cdea13fb17f2bb8e378d39781dd66816f6f97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7765 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 diff --git a/priv/static/adminfe/static/js/chunk-6b68.fbc0f684.js b/priv/static/adminfe/static/js/chunk-6b68.fbc0f684.js new file mode 100644 index 0000000000000000000000000000000000000000..bfdf936f8720ace8cde0ea0fa02b82c8ebb69d3a GIT binary patch literal 14790 zcmd^GZFAeW5&qs^p`e)zIiVOQX;N1nHRGI<>D|?r8z=5`#?@#j5|VhP03Hb1ab^AY zJ^=V8l8R|N&Pi!9c`*rqi`@r{-F*P-GGqb2bT8>7_Wbjo63*gb%d_k2vytt_X)?FY z&WJxx*?Ir<*nxPWO z1$7hYN$PrW><08A^eIGKP&wxTX0^a$HNA>3O4m{k;Lu_1IURbIZ6&VfE%Vh=t0l(sl zdQ?lP&GE!6T~Hirvcric#&Q!D{WnX2m^#+Mp_9`5;VUPpO+6 z27#8HI7_T67@Rpm&qb^X4VSu@h%|<#%>&{9LQuzjRNY0`)L?SD%N0B2pMtT zi=I4rL|wrnnw*KzlPAT*4dm5K-7t7G1kS<$6Qx!Nm;w>N9zUl$Yt19LCTYa~?hJY- zdn#{m0WVkgW8zkj3TQq~&;?7v>Ac8GNAcBsV}bR`BG0s-_m=_~+q1&$6}HY?#rH53 z)_gh6Zkp<-(8CrROV9pdm0M*tCu8~ zTm&aHp_OdNfb8awtAI!^a~j$gY~4n1(lS|soH0*Gi%i7(L((Of!{=-oip8Pt^Azc7 zxh34$5-RM?M)j2MAIC_kLpIw^3;kf`ulMSA3ond{MYc^Y8>s*gY!}a9%?FVS^3Pe-LmU}uDxZe=$IynH>0|+J~Fbh13=kK(< zv%Xz~DiVjrhuQ`6*Q1Ng`r3erTK_I0*1FW>Qj5L0m)=^g<`7*(Grjb#)go3Vc;@ZP zmG_tAbVN{}3V784$G4l66 zQthHThxMMAScv9*8ibGymUPD#7WohBWxvQ%r4kFODh#oJs}|6jsa4tb)1o=CNBIan zpyEs4^WYXQ`--6KD|^4A5lqsL?>ue1X=?^q3o|4|}E+OGR7`Nd6L9 zN$L-jaw2UY zCroTeKROFp_J3e88`;S%L{xnrRJ^uyqqBT%oo{RFwWxye{v4%zq$o|`ns@=OqaG)q z?7bnZSPxlLJBfHwMIJhqXoL?_E`0h+GQGqk8u0@5HWTdhXM(43n-pvBjl4y#%8svN zGi<(LSNGSRJXu7`J7!wo76)kJq?X-WpX{j^Dr>lT%J&g|bCPxU379ckXE1V}+xky6 zKx>bn+M)LiaHh`i#m9(iy&VCX7I?fc67M9^?mUAXhnjW~rz{E+9KYNVv>CUS7DDeN z;O;Yt9mibav0%bK?+DroX?GH4cana`@s%CBInf7mK32}o-v>w!+12-f(8d|J-G=A=rqc46Od6qo_;JV(btR(7y!KV#r(d{~nDKFF|=663h!1S$q6;3T-V z#Ld+BF>42E%t-RL=G7!HDEYxUspspQo$WcVMk92}?;Dl(lnPx#Vs-VY?UEAg>8smp zhIwB&Eb<*iG1I`Q|WulN7r{+6gyIR67o6E?5_ literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-6b68.fbc0f684.js.map b/priv/static/adminfe/static/js/chunk-6b68.fbc0f684.js.map new file mode 100644 index 0000000000000000000000000000000000000000..d1d728b80195167c0b5ac2340fc506eb45cb146e GIT binary patch literal 40172 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 S^N0T6#WDPlh3$of5B~?s2iXt+ literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-4ffb.0e8f3772.js b/priv/static/adminfe/static/js/chunk-6e81.3733ace2.js similarity index 85% rename from priv/static/adminfe/static/js/chunk-4ffb.0e8f3772.js rename to priv/static/adminfe/static/js/chunk-6e81.3733ace2.js index 5a7aa9f595ee50688557bfb672fbcbaf2733abb1..c888ce03f978fc0f6b761341a244d9a743fc5605 100644 GIT binary patch delta 86 zcmZ1=us~pf4U1W-h2ca8FX2?%Obw+f_wpzuO`T%fOuamf)QNMA7>hSvIL0OjmUMD6 iF;vpD21`v|&Ymg)(yC`{Zfu;GoNA<(RjikrSO5TbP#PTo delta 86 zcmZ1=us~pf4U0)yTGB)ZFX3X_Obw+f_wpzuO`TNROuamf;)!#O7*jW1IL0OjmUMD6 iF;vpD21`v|&Ymg)(yC{WYLRAaZf>NPRjikrSO5T?92(F7 diff --git a/priv/static/adminfe/static/js/chunk-4ffb.0e8f3772.js.map b/priv/static/adminfe/static/js/chunk-6e81.3733ace2.js.map similarity index 98% rename from priv/static/adminfe/static/js/chunk-4ffb.0e8f3772.js.map rename to priv/static/adminfe/static/js/chunk-6e81.3733ace2.js.map index 7c020768c3c45075690a911d5c90e07486de6b8f..63128dd6755bb4b6ad03a988cc5b2f06502f51a5 100644 GIT binary patch delta 25 gcmZp2Z*t%8m5awL)xuEE*xcASF*$WJBX^?&0B`yS(EtDd delta 25 gcmZp2Z*t%8m5awDEiFmUAk`wx*xY9b&j~J|B0} z_{MU4Z{z>|ldmuFzdttmPKrOTTkALN*>$`1%5U{<07p&)xZS;OZ}Oi3{h5N|1^*p; z6F;2^W=OY(q2QXtWeQ$xKlqa#A$C=mcKRaj@*%6zbWipv2Ix%v7(KUXD5B@Nu{K6nl{`(?#j+O zaY;85lh_YL(|0WRJ$rKGN|8&fL@TzDFPA}y?PBR}9!KDLYCHMv)6Pq~lUAb%1h1qk zW|K6NxiKq6UBWxd9N$Tu$O)VnPTPhnKG}p<;m5#x(k3mKo!8bc2U&XCNW^X93q0yD z%hIfw+r}}v(0~rb3}NS&i_bjYo2F6NXk#{kfRe61nZ)yEf;3=UVvhZ4cG-$cW@d!S z;^i{`w+ENX|F^wdhHGoGRs7pa4gUz9OX`!}xM|ZSNMNb-87VXHav{G&W04lJIdbZ5 z!+IC3CZ?{m9`5#uYQJqzjPs~<@#N*am1J84dv z38f&y6sv#>!}~0m`B6-9Lxj5|r$jmf+gTuTlR(7At6_5GSx-DKSX&D)X;vCIu$6OX zUJU;$?X!Z6UW_tT7x7@nyHRJ>gcsQ$U#)DNFUTUOQ1cIyp+!Ucl*| zRorgFjWf$eG2-$DGeh2o=|K!IRiF>W5~zxvP1ZyqjBI$qU676^X+rMNxjPfxG?jaW zlxfldd3JnpZmDt^`qDRxD*f{gusHLRzUWw%lS50vfPO;>&glPxBFiB8lMjN;)yko{ z3RKe0U6h}s-6$3hWm;o3fK05M)%_!vX(rrUQqe$wyP=pONv)hXRi5xrf+|?|`NnA| zGM|nKAJV=Xr~MDijBtnge@E+w<0#2BIZfLC2NU*$3$j zi$t!Jit~qJuJ2;ME8>pzTCLl1(h2Q4@BF=ex@5V0<&;uRSZ`^T|9weX*Wl68ZpiYP zfc?Vyf;p+ux^~p!27VI8;s7p)1Bf_R&UBo>U%a4co05%UAYG+UsPk(i2S-sXv1lA7 zob7fSKgXn@`*YQIA4d7ahdr9s8zDbpgU3lPMWj4V^HGS9!{V1DM`T^CDfY16lWNn@ zN`)MxAp$Q+v#}pX3qe^1u0Ea^O_^$tK@Xc^>wl!}_J~0?ttxkD-~HPZ7i3xE=nLPn|(_s5o7vC zZ01ON1y3!!CNiJ;w!kr{X}y0Nt|KqwG{cANX5spFGd7c#8m09)IJ~-lu(Kb=f~qb` zv2=gX3ETYnwmB4W1`yrr9%oRpc%OP{fDAs~(&NXJni5aWIk3Zl|W-`Q7{`A4pMBIY9@J;m>x*%_2WgD`cPvg5 zjqbdmQu>D8T}qlnwYv+Df5^)o%Po{sLS$7O1aV3SjdD~v?sxI^YJyAUCK~flpKw&p zM4lrfbm*HD^C0=VKj@fEf9A%6z^2a%P%3uMIlI-*(qaM~jKsVnT$R@yy-iN?8Z6}s zS0{TTxeAO%U9y%b-6*^-P`XJJj1qq=oN}j8h?C07hH2H0`woD$MwFrd!cZK=_%dc2 z-7^d4`38I&C8lmYwu%xDh5xcRJTQ$;8NVTvt;nyq+@*}NC(Zt zyR+O4zlTV8zaaxe5B=p1DKrd_;jdwG`izIOR=5C=Zgvk1z$|rabPJ--!)NbGqR}lA z)vh{@J`>fkoQV3v{V%1YToctXnSiK!b@IFoZ&(z~l;357;?^I%>QB|16`MjrY-EVLNy zp#~r)imnQFf04IBqTe4bIEWR%8>nLiaa{)SpFC~eDzx|2Fy=C%$w6N14fmNv@~{Dv z1vcKD@NlXA66ldT4twX!-P7)9fC$5VG1^nyy@-VyfcCUEKjJ{@X&o4VqBNObaqjKm zi-cx-+8ZV;jsTW;4!u<#HF3NhB22BO)(doMKhMGW3B@FH0{OtJ`eZxoCXLn z{3<(R|Lcb=+yLY+(cwX;g!i?x7$6oql7Yz<&rU8;?GXEYZHo#R zkoV4>Pu{BGfp%R3kS(?jH#sd0v@Hxk%07P{vu+1EB^rR{{yICuDHU@M^xOuRw|q+2 zo7olXeLw)OzrrF?)WyNzOv#9}q6|RJyLZ{=?ct71m0AOkqjo0|*TYD{t^~~9bFNbW zv(zvRlw3oycZUc;HJ>SNhVn!o9 zcLk7sp6|6eC62Um3_u0#)8v?Q&qxPtcGKq84W;l=aa1k59_%NK!$lYjlc4+&L9RLr54|AxwynysTDw9 zIM(|wi?-q(Yp*o`d98n(vs;d}*BXFy?tdO#Ft^sZ0VwufPp7Q&v5q|hkj~>P$@?B_ zog08c;3qcQuK-?d z4P(G?kp_#yIelEZ8;RCn1x$Q=?Staw#ySVR0$7H@XdT1LkZZ`KJS$WHsp#c+kB^ZP z+3J#6+VYH#GzwseHB3)Ya%JSf@qEU`Hq#z#0E(XY+d>cP=&695^49lfpScF+I&T?( z)V#6riX%7IYBm6Q@C*O)l~PfzJ=g%`!D8KK4d&W|4M582UtYdvZmk>x{E6ZDrxQLz z=YR6P4M3_|%$}b!H)`QLBY}tO@ns!iwi?QS;UrhT$TryqxlYXnpb-D|qOG^6L)-xL zxf6c8ea%zqZ=DK|lvY293(g->r&R-xdcS>`a?VCaN0o&dK>l(0bjFiQp<~D(^qp}! zn?6^wOZ}Z;0IDK~r+q!UJ}Vdi-{aO#nvU)co}N~gOD8#(zjfD zrOqScw+;c`HjIB)cz&5bx_Fm}&UBBARIjgA23asxDZzUwXrQvu*)3AQ4exuqe zyeMjU-n;!(SHOJlTm1gs*Y}DtMXgph_RfE8Z2Wg4Pm3%NCwL$N9bBA!@XTXT_hoOp O*WG$fhYiH=w(ei4=Jsu%@d9LRrZe5f5JD0{!jh#!o+;afU3iVF%$CW2f8TeGq*9el zmY(I#yKgc*xJpMlI-8D;R9ZeQTtt&39t{^Z?vxgi(R9*^l7)@;3zt!I9JYEJ)oQg; zO(w1CMI2ow)xoG8O~Mof8vRkH8V}piRpnwD{kFb-=k7u&Uu=lX4V0Mnqomp&wZo)a zX-Cb`bl8ea(etEO=o{*~``}^wPZVpmqF?gGzFt>8|F=k@SRyBc!DtW-Q^=wf_M;%V z9=3x2b8=ESIjL5D{;^n+)U`%~@o0!LN%a7d8>O4mG#w2+!9Q#_X9WLkCD+gH-pkkd zP37`MR3u*|bKyg2VHgh7wi>=n8iRNkH(E*3h_2E}*h(AY{aisJcz-l9IH`Z3~G@IeWI}k%(p-DH2(#HDZ zMED4YorXLmt|DbWS{q_hcFKRFFH@O}(NByI)gXc+fG>HfD zu$yd#?I+QdeTj$RG__m8^FC>9`VcNydKwblO}tFc;~q1>2T+1>awxLG<0$P)MnSPph9=Rt zAGWlHO)IQ4O2}T)j|HM0775YScr;1rQP03RelEk98I2v`sUIe3ZPH;DJ|1;rK7zwH znsX8*(>{x&@gSP)(#tYm9h4p+#k}qgFGjt{CPZOdMG7?ffMy)`_3;Qo*q%&A!oC!v zQcMN-36+=>gn%w2Owps9#lwhIhvRXd#*uVK(|%iP#Vct$jM0ZYH>8=g$@bM4Hp-Hg zg6(#PL?=;7YDZJDHi-ryT+Xm#c(y$f%f*S*qO^myDcvYJN=-T_~skFcppj+L}b5j~Zzh z$#=tHyB}?t=;09ZZgqEuU=evVv}jmG;^8b*GyXV@#Jvb%B4=y(eB~Cb5PN+Z2^=Sd_1y@Rk`pFcyadPKfkaqiyoc0Zy? zGnK8dVH{?|+CQxBVBP2!rmqdx2#ImFMlpeM0Es#A!B z>u4g7B%U9M5>5(UMnXCib-0| z69UN+=qh5I&4x_#p->9=aOvN&!-vuIQH8Cwm+YxdLBi*axHE;|7>8ZaWF&pKh_-=z~CgcMn&8nTz* zPenp$JW&_?DYtL3rwm%|vD=aiy-P1yJgp@6uf5~}?NyQop_iPveRxI-5$~(=Rs}#OI%gd#cQyQ)W*Y?Kwt!s-B)xPhX9_?<~EqIQkBUgu9h$-|^B{()*5d>1Zm|fz!Z1 zH85}*7$`3T$IC!3C#sE!)5b(KI&m6Jv^gctMiXTwam*yDjl^jqQEenn8;O#aIP#K@VtdI)OHra! zCTR566O&t?vmEY86_q%RBx*2;Gnhns*u-_O61!KbsWX0w_mJS2NF$XPer-Le_JyhI z3uQElLe4Fv{qk77l{~qEeVdr&RQ^(DZRw42iCixHXqlvdzjn~uLL7`&#I`gW zM7}1U3*M84Kh*oe@X!Rp!zgNN3B|_%xF(}GOwvd=tZyM_7mr3e(U7Ch(Zn03Orp-5 z)Im6*Od6b)h)DD0L}JWF%dw8gowhzyL8PmA4x5vywDupf2%2MBfG8}CHyNi23Z2d2 zbcPv%v@n6uznmjH7Xqf zyo01;EourSo3$N_U^jd0dC6gx{BeGA%jKw}8iz05M3t|Ft~Vulc?(K+YVVX@NvSK~ zvHonAp1I;rNq%ix{_Y6%rIv6=7D)Ze+Vj#rQua#6wSA;yHP?ZLV%e?L4R4PnWd|wX z%&`6jP(koo=y@YqwvcjnuO{_vOL`p?AS1=iI%>5oBqKq^&1BS1m}uo49&32KyRA61 zE~)}WMidBjW-8_*^6k{RNFZuH<8i9_c53NnE?ujXdPI0EPX(6hDEdT5q=aj=NO*ZF zDOa0FdbnA;zbVM6T2l(O@K>Lo(ZHXG#ZtFaI)U}tkz}EE z?XzkZGNZIqP^=IwUTWNx0>*e~^lBMeiWY!2L)$+Vn^Sp)!s&PuKlR#31ujVhzo;q7 z7kJ*QJq3mxttsBjY(UMdt1VfIepK;$R{TmRI{7 zu?T|(yi?m%SFj@pjLnH5u)XgIX_**$}phY)rLJrY{3GQ|p@JQjg_ra-k95`3xwa#k|}+cEaFQ(M^t z2L$Y+rh71Z>E1~7nL$mU`VDZ*m#aFm-rcON*Gr@A`VG9?V7p#h-Gk2SqwTf5y0qxJ zc1OZGz2#$~Mq5Rf3j<~cU_i8Vm&-kp0uTVc#3I>+ZV?0QOZu?3IN(V5AU)bD_?If+ z->1wj?WtCSYp1{Vv+qh+Kw8DZ=YzLPkzm`c9T3~0w)TtLu3rH{iEkyVycXt+sv}f2bZZ%Fcz3M@Zu%O^zO|1{{byPmCL65QdnzUf~!8DvxGS^J=AZb?ZA5#ZBFpca6Uz{uBs*)o0f zGtztKmn{=@A!Db$BQB+MA7oGKhCl$`ne-71^`T8?U7BTI^rBrIJEWTFe>4Ov4cM<} zM58%HPz)&`I+2i%#s{M6`%g^WF|e%Ly2Ba<3Ldd&8l->AIXpHTacyMf8tIVcGmWs? zQZd3FRvp&|lKKiNAVUL}v*u9u$L# zbg3x@SV$Tv4F-<{?)Nu)s%%vgjGu%gl5x6;7R=X<144%%H}B@EQ5&#BG}JQHT5R

C>)Wc0 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 diff --git a/priv/static/adminfe/static/js/chunk-87b3.3c11ef09.js.map b/priv/static/adminfe/static/js/chunk-87b3.3c11ef09.js.map deleted file mode 100644 index 6c6a85667abeef21b70ee7f07125fef19a47b8aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358904 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

sk|UiM-x(gS+*xuxr`@1!XWV6<-bJY7n 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 H=K22v0)?pf literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-d38a.a851004a.js.map b/priv/static/adminfe/static/js/chunk-d38a.a851004a.js.map new file mode 100644 index 0000000000000000000000000000000000000000..6779f6dc1e57a7e924a9af491da29c3cd3cb41ab GIT binary patch literal 81345 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 QTVLWO!?#v%-TM6h0LSrR$p8QV literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-e458.4e5aad44.js b/priv/static/adminfe/static/js/chunk-e458.4e5aad44.js new file mode 100644 index 0000000000000000000000000000000000000000..a02c83110f6e19f3d4b9281b8d4d2b77f8c9abec GIT binary patch literal 16756 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 M;L|}XQ}Gy zMHswHGSAK2T+^zmv!6P(b)WiU?%a>!ARN!FJ*dvb;WX;_@!Z6F3DmUa1I0bm?<{q`vAPKQv-C>()QV;FY4p4f8sM}?XG|7K>?_n_>doePyM9R_q(t3XAp1r@gNB&sPZQCZ`VH$nA0HM3r~U}F&)Hj z2`Awh3g-r1f1+aI^{6TRIS8)lvBv;0|7-X~aW{x39+<#m+z&5akQ3wi+#5~_ippL^ z!MUqU_<`kIti>gw;G-Z8z-N$Lq0uOuj>S|XKk0{E0_=O^?$F-~hKV1w@Pql3LbAi2 zn6ESRz36~VPl3vS2|2fXikNg7jM)e9m)ydbj64QE11hs#i0A#2GkBC+_%e(}-Vl1C z_U-c#{Yx78u@m`_d~@hi52sR!1Z@yFrN68o_*u|t4ZWCzYoBvH{`rxbdr87(o(#Q! zgy;s5P@Y(oPNpZrfUr)-!yp!Ap?Syehr=%OGY)Ii6>5opNjOhgbL0T{!D`ZHR#V4l z6v4?SL&BWH69jcU{`ezt=U+}DKj!cceyItEb^IOpWV4}n!hlALHF9^74GuZHs(GD6 z3^Me`y@ZtHbvk5bJdv~1;Ln}GNqC9h?Ayg!XMWT zwwWz{a*92g2B7J<=1rYq6%)m&r1;T0F|B(iPU}GUM}xqcgMLtiW88tu$yiK@24ibY zUo7EUOYpD;*tpi!DtfXsV}wRQPETpEeWI8M@Wd9VoL0zFF~X@e!fC)Dr-1=E6~d>M z>Zy3gX#}N6TY9q1@q=P=y+IAEnNF=Qor)ivT0iIsmYzk?qv5jN=yeUwo@lUV)z=G0 zwV|h7#r&|XMaG_$u`hP%Tch+v#=e!YFCz6VlYPO_PjO(}k&e`-Cqs)z_Ie|*tnw5P z1=bjWm>@`uTKLJrTg#k@7S5~|&cvP1tUC{+#lW^0(8yG83>>k+u0qWEojmMq;#)HQGq}!YHndLVIlGIK_PJXh@E$@+7 zBeK?r#G;Y4Xe`|+wmuq*FtHUT7Hh=T8nIX-w$_M+z1XrBe`FcrkA|aIxQx;1uOe+N z&uI($B!-HuMPhN7*g8xsBW!GkS6+zK8;Ny(URt5R3X$--f=aAz5*Z5Wq z71~ovdn#kc^g4}#`fPF7G38v0dv1+;S)0WERL2wZ!@ymMJ6&0Ky6zhu`N_1ykG`F9(PO|)p)A#?{xBuo2V*rhd*!aNJQU4JadQPlA!LBcD*tsuhO-A}MOrKSn% zpzlRZiU>(~IGJGC>TxHIu{n;4i+VLn%cp4P>-6>0p?jE5mrbi>gr^_gHi_M>NS_ghaPn?8UnnrEyWl50mLKW^p3KlD1KfvqsbuR(SaN0|26UW$K!-8l6 zPsK*;-0F6-*{rT^w3>^1&FXe5*j(CcRd=cIU9;6}RX^~*;X0LU^0S{l9?;`<6XgJT zMIf)6)qQR?T5oQn_>g}bHaDnplPa6snEsXLJuZ=F05zL0xaD58(|k@qy8`rrnVJdI zs`|`EZ{6Xe*?h@R`&CB#s(@loOAZ(BuK9yA{^;Hm04t;Gx1*EJN zlmOkh-gEgG_-%sQY=Zs{InY6K2TZ^fn@cX>;yP;JydO!w8&EI27%FcypWl((#X7(? zo6k~eJ5258GHNSCZIh|BV1gF>^KQa{Z4cC5+=|+xlp49nIcxC(|B}HQE`KfcSE^WD zCl?~i;m;DoEGx{JL$PCdX7kcC?BK_W{9rF7|AnuTrlHhL{258@2LB*? zY&RbmXbu@2ZY_8vK0T`<8a2UKuhqJK-V7O0Z`~M^urjudD)iYs2kK{Ux1f?Hgcs=?LQ=H7E`|%6u-YoBm$lIMw_eO=TQX02+A1Q+m$u~0jh!x)|R5AE-+oclDHu~9`ZpA!8%5F;%z9U z+x+91XoyLC6cWXLNpWCVyH&_TRI~Y58Uqa5>me`(lVXdL7*bs@8;kmQYG z19S}f0dIl08Fx5LY)C0@suZms@i4si+EE9O1!dagHb$kcf0K6%TB6ea207+*dn7%Rx^Qn( zq(J;9oe94Zc&Oh#-W{uY&~~I<6HJn*&@Az~M9Z?~%K9Uo2<&R-KNqkgUJb3RA38G3 zG%3lvyv@DX7?$El_4W3L#x+eFTI4O}pFK?aWynWIBYu=?EM|S>nGMpahMTR)I_sHK zN<2IDGN4Pr7SWz|s~=mf=6RRrHEuOiaSKfQi*?(c*r&NFc{u)|M~VgdSYGO-4V-4%l6^D|5BVcjv-UGSE-bxIw)ZiIFiE@$EkP5*@^n!#l`6XguwuJkn~;ktb( z^J<#?^2B*4Q}~hmp$!C75CcP5&tNS=he`~bZA2T9+9;H^`l~1VWwduGG;}#n0J;lD zt9i4_w@c{vuw^XGXiFXrhGkZ(Ns9?Rs2U3i#=WUqm;2I`jtZFNeOJuch_LdeF*rnNQjo&n@*nh!E+zJX?tIwA9`tOAtZE^?i zxd&XnfnHk8t2bQpkjS^1t8Zl~L6l_0L%YoQ1%xPi#%*`7NTFvopS0vN5YqKFw!B(c zoRc1IYIpgLk;L!Hs1u^e5%k(>j^y}kkGXr{lH?9UEq57{9Ll}scCQNUNSXUAujqFc zYdhEgZxBxj%<`@|W#hD()Azi_B#+o`_Kz4*a73!XVSyYRSl=^?H|_{zk{0g*%9gZj zRIzR8;KrUSr3*&d4rnzWioIlwhea^!7n=jE=KUk^MaCgL%i&K;nEP2^_*?z6K${))CvT z_d&Q@++c=y^Mk8(KallL^Zo z_!f+D4p%uKhcT;v8>P&;pZGv8B{HFOc2->4o`)uLv|)-pG-sFK?Nr*L2O)B2*;XFr8&Z8qTo@aQvkY3#T0mR+ma-(qux zzll<03+WKsORck)bVvrVW}f~mA~I)Be=a3ff92_qxC65;M=aQFBRK}Yk@PE#=i_&5 zcGB5}*~65LKRxL|>kqOkwJH&YLIzqG*KGO|ML{i{efSl#LGP5~NE()RFl&3#)v9R^ zmwJ~ezttAx$D4L&!NOomaf)<;Q?mch078{!-K2~B<;OU*91(B=6HiPYpeAI%2-pXEAY zPUckSA&_Kh%*eX#kWL1$BAAz%4kAC|HKHt)U@#-QzM-B?=A|Dv-tlOQ9LMnVvt&P= z0*S^HAPEdXetU;4G;LwzCSzcHQIr&RdPn3_i|c3ZDJ6F)aS2eSW*9o5_m8{E9GA(k zNik+*{K4H;77Lr{5RFH&FRK^_M{@WyE)Z5RfOlZCV|b2rTfHaKAF@(&kzQAU z&%n`x*2Gm@QO$bL=$y0O>@~nY*pm3VC|#Mz^wvK^=HsFGX(W63+V8L4%aOs)?hZfm zt_JhrG~0T{K=VowYP61t4ml@zyFE+g$qxJQGCB=xM58MXNt8MyqUEH z9b3(QPvU;*7$!w7$xbf_f#s-x=RT2$xs!~2vzrXvH;*gJK zEFm7yq_xG>rn-T;*3H(qO07}Shk0s{F%5cOUYhB5lLkF`@lMh#-YAVT8<}mJtM4Wa zxyJIH#BmPfON`?T%hX3kJGXSI`_jh|*C>*yCeX(b?5ERTAbik*P$bC(!7+V!V=*bX&>5fz!AO$2m5|y;jCZnT=?4rB%eT zPHM29!a-4d@#2WLcrFDt%ObBT@XjLylDEVkORF1AQz|oU%wVD*n;h^}Xk~SahjJq= zb-`3xk^?VS(F%u#SNoD9TIteP=kPLL#XAhZKakf^u>VBhyXgc;-nY4t>$IbKAU9dp zp2{$fC+pf1vz~VGf5p=Z6UUsVk@B04r%nHFd72X}(pA{VLVxN z47P%g4De>q*%Em_cG9wM2I(qy=Bq)}gMMz|s~t`NvBv3Kf==TsZgl$7@u23fJbYAN z@gI6#cV$IBh||nQ{N)=yaYBNlb1$kOzYFp*RGwB&r(@1#QCYZG`GabZ_~R*ka`jLC z(SM5H^=t+Zsp)VHX920VJOBH??fyR_Kbc13%EAu>Gjx)&-20{7S(xtz=kwJ+=)*8g z6|#10^U>7k6DFhw@uTCpPt|{awt3&Dyb`u;e`y{-pxQoPIG#H`9#{B($8-0&FkWCO zl7)HsEX|MW=3)Ncz55p8c<$cs_o^081;4ArO2o-|YLX{s{@(A^rLtBx$|nq$i0R|= zUCzH#>qX&oLUMqjErrH7f6Ce)$8(%O<#-NigW#kk5qOq}l4nH(T!SpGE=2q^O-)@I z-z%5@TX3VvUT(>bw*H>{aLSq6vcrwPBR3}R%`N#c&50xO#yfbVWX>sfL`g$a?4+E5 z$fm71o~ybpX_EB7F$=xSWV+enbUpL;s>gF~BA+slakyjhNO61Nm$Lh)=L3gL_+vUl zH5^k1k#A5HYca*rrz+)KHAL@KJDMwKEe(yx8HDIa(&d{!Mb)Qj znoWp88fz=X$bFUj=x~8a8l}Yds)odZDXVg#ntOj}DAiCP-fO9Z+Af>D3QUxE zDJvwGZ*2BxVX`Wfd#|Z2`Y&Z<(uiUcF~N&Vya6pa`Pb*%z_cr~zp2XvX*lV^$%Ng=(?H6dkNwqdx2joZ`Y})=p zek7J&t?H{wey+;Xr%x-3;#U}9b8`?xBr_WT!?T7}`j#HwUem;@J`Nq;5Q1m%;`Vw& z!s+xvMDc;r`HW6jm0g*Wy^u+)5v@b1*fR1^14`C+i|H8Qr>5xA>@u@vd6fSR zG>+%MB|S^uM!3TG#yR1*lDZZLRO@@cSC>;q{B%5~`8(Mn=)B>{{?<6geE;9SACHg6 zlCGlihpq#vg@&K7#t4weB1$TVl9kga9KkTPAL{jn{O9J2Yn)KFyc!AUM-3!%(?p|Z z@h=^G>F;lF!oM)OngNas8KuC#q!l$80^=W$*U08yMfFdVI^(IN-TaBtZazJWe>$G~ zXGJB{JQ^f~E&IoRoj5SYlf)lk{-5~&qQ%V2r>b~#Hc23GJwJF}+JMrhVwvd@*uAAeLbW0k=_f3NZh?j|d)Ck+SYNoL*DFvJ^R z-aL~WGZ-o18!XwbE6XK^zqG2t3#EVM88+)7u)9XmhyaB(5UQUbVVkbX?m|GP7_5+T z3fkf;Na(6%rVNrv^UDdCmBkH0m?krbILgb|=*cX*7gr=!>10!xZW;%x!0mb7Mjl?6 zX{W8$-~(o5f~FbIHB)7?D#6@L-M3O%bJr(%z|7jjg>n`t7E`)Naf-BS<`+~c{af-(Ms$0JKl>~ao?G1~wHht*sSuPwMvAam8c zjLKA-J`VP%3yFa&(@#oP8!7W^#+0JCX zOl4F)0aH9inXw`>A9vKAnSz_ZJ!{6zac81R(2-EQUdWKI8-k#r{w*b#Pdj9#tlZX8 zXY`M5A_e4@I<0o z@J%>m{yb~ov4b|4@Q1Nqq3JVFquiZHS7aJp)Q9oiCrIFDCtJtkCo;W+usS0y?uyEnC20E#zOS*gB()amaClp1bboIeEKul<|$n(Bxdu*kGyn`;uFY2#(^g`T(8FCfe<6tMcHsVl) z>vQIAhlTlPg-aLat9Dj=&!W!>X=ZodS~`Q*($&5sV)5Mi)-v&)aZ59RwlD+e`4CNT zSo}q~bdvZTBs0@b?$LRZ-A%S_Nm+VF=`{SiPWZVYL*ttn8*}Pngz09%T@Xu$O<@%? z{gFXPZwN_omizCvpS(o!)}8TbIIr$n-teXGcV(o$x!o3Byu$lNw`gbd(xQ7Vq`h)4 zx0+ZlDlS}8!EWxFuMoei_b%BUSuP|qZXyA#QvcfuwLl z5cΝ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 LnOmEi`}F?-th5^< literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/runtime.1b4f6ce0.js b/priv/static/adminfe/static/js/runtime.1b4f6ce0.js new file mode 100644 index 0000000000000000000000000000000000000000..6558531ba18c4cb854e2c1a9c609256d40dfd89c GIT binary patch literal 4032 zcmai1ZI9bF68?U_!pj2;5$19wzeutjAxMLKxS+irF1;`3GYXm_S4y;`OHti!ZTV1>l6fi8lbLJV&Gcz}`QrzZRc>-Vh_Dp#SdfIruGcz-U6PBoheRde9d-gSvt!kWanQ{h10>8fI;x59&xva^n-8 z1bhC*_UpJ?=Kzz51#S2KO_Edx2^e^=JixVqmZs&o$hq*;?JWr~5ef4cEnx?M14~+w zMcn|OTxz)FVk%|x2eI>OQa$Tw2mYW0b4JUhXFx#Q9pu_n{BhRCmV0-mP25m&$#;qr zyPJS?le#5-KCs({2-2RRr?5B8}A%0 zt~H-u5YH<0*B>!z!iO}hSOGoAILXxd$^;`L;4DB@t!UHiebyN&#GGP_)+ z%Sl(PpIsD%t7tOoZ$o!f-AF!BC{f~Z29Nb2FNHTipokqGjY+(V+jqSRyg(E!E-3o* z&v$5tRzVtaDSSjeez5PS{r_hF_+i?A1{Lx-_x&|!{v0#J*(v4Ar5MIr@DP)J8gF?z zjyEWxbSt7D_SrDr!ikp4D3)==hw&Cy_K>_$ki8wi3T3gZ>pXj^vDlh4$PpB*zJF3t;tW7g?%Zr>^3t(B7D8(Urn~-dvI`6 z+NVO4nGhBwNs?0|3ZNDVZF9Z4563+LD4;p#i`iev+?|JAwlxkIImL>`&wGzf?Gcph` zVauRuK3CK-13-^0S{i=6axkRx-4AZ7hkk^^a&5Tz@d1WTVVs`z{^DXf@0Z>1FnW^$7lHh>XE zgF(pXo{94@usyRmzx!O?p~Y+5DFP+}z6IZHxl?XWY`t;)mOJAxNaboZaz-0wkUVi; zhTn20i#Gv~>c}M>cSf7-W*tB*=sB;AKO42JQJJ6F+a#kg1w z;~jVM^_H>F$^D!=!$_V2pr>KHVlXT0`75I)M$ai;)qA=(1Rc5-*z8FCTDTL{t}cYZEW4JiT8 z;TRnuHjYj^cyd(~gcpLDU)s0iWiLN|m*qfs9XuSE1Dw}!A^1A*#9IWxxCCcLyLJEr zcfZO6AlM5u@Er=+0WnM6cX{2EJ(T z;^f|;&WR9dDQhQdAeUe%*3Rb!mg@o2Bi%S+dB!PnNG7}7gt|0Z!EuZ}Bm(|9uot80 zXcfqOUDm>=_MizNsLRY#A#)}AeB8~Ei%<{%4LcQL2YDc{>&`k+8J&zp!q1PJsaeH5oN z<6l0OTAg1Sa|I;Sz_P6?8{DMxPgm$dIwE1FY-+qVn{xJtQW>gb*=JO)N`_z$RdP#k xX_D<-LFz$ey8qkV-QQ=Wt_&AHL6!in@t=SHm~=%T4Nhwb4C~X+C4FG${{s(dAF2QV literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/runtime.1b4f6ce0.js.map b/priv/static/adminfe/static/js/runtime.1b4f6ce0.js.map new file mode 100644 index 0000000000000000000000000000000000000000..9295ac636662a5c452c5f9d36dad506c5e620b7f GIT binary patch literal 16879 zcmd^HTT|P}w*D&`KMbZ~jBN}y%$eFHgdv2G%aBa=Y@DKGSq2j$c`O-1GWqZOTbFLN zY%$5yc{mSeYH!@?UcGwV*HU*YUu*aABAcd3?O>--%hKf{inH3mW$hsz&BN%^!S?pH zHn&GtFt z_?%(rDgGQs%iQUhqH_^v>FgehHEOdsxz2CUm?l|{wc>F=NNH%k%xK{C=r)dWdS0Y? znm^8Cv~R-f^+WPzkN$%fo6n{Z(Ry{I;=WqMe=ets`05J1 zM5E=oAj5VAS!N}%SSI=Oj&Q}F=jkG+xxy(L#5N54IucKC?lSMUUafWbc(it_MU z;QTyaOh>S2JT79Ey`sLzA7`=Rp2;$Ri578~$BG@#YQJeROG6T2n!paz1zPdF5JN^1 zXGB&WEPLqphF`ef@dN-fN z%tOW<7>jPgMaHX(o4j1q29M%k`FRk#y1udd=uoDmNRnTaS6jZZNd*=U+DHE5`+j>TLqQ|! zoiO?nhJ8cBzF^kmz`%R{8}nZp{awic zX@11*F{72Gp99YsAv^YCMs{EpFtXox)h%i8F&x;lU~5&;g9cMA2N&x@;{&@ zz-(p*{eh~FKt3tXV}>6S&dwob6A~Z|7%7R1^d`C*Fgk`1+5k=hJQn;U6{0`zMfq;a$)O2{$e9f6|1d%n$cTEWwk+t7Ahys(ezfFiPTJBYAGL2H$!( zoE@=tNeFv~clz*wXOUbQE6v%VNI|;80^-M;QGsDpG^=}6&`+=Sfwjj}{$3#aAk9DE z*`qH>tGM`6^5r;=JjZj&c~F!K7}(V+ob9p@Dr ze$Wu&FN`5qaPUkP?=c5`hl5+96aG)*jQj|67R*R=-!3zAeTbDNB_i1iSBO*>d&5M& zZIB39z(NY;GIWGMHDFB)jAkin5WW-U`kov$F#dYV;X&D^2*+4NyOPBQ3?Uc>jDcc- z@57J@k4jFbof8Qxy?r5qscdPRQk_X}@6rAuF#~ae6hT(RXbJmUMt)M##|KP7R)JCa z{{{)c*&mj}mva$l%3nx<{ye$+^;s%Q(S02z{EunS06we-&X4usk64T(NBN%Qb zl>s8~uN941k+gCx)REu@nqW0-nq|l+DZp?>kc4UM9||LvQiZ<zQIv%>>Tv%g{D_OXQiUCp^9s7Fzfx_SdefuA1j{C^30=YIeA z_WJPg7&hShU#R97_;+GdtQIP~23m9dhh0U=C91aI3uN+ekr3?{Vtix|Qc}(ZjboG@ zMGOOwGD5N?6-KUOCR*H(SqQ{)@dTZU*={ z)o`StD<^7Cd{J#j82my%CmLJ3(#PxEOZ!27q>55eK9fETM}S~wJ!UGdPZ}|n-?6hH ztX6Q!@eV7I*onLsVEe2cC_>j1(Z%5{CEZ~q!baIK@D~#L%PRnanCJZYa1@B%Klp>s zM|l-EMe^wp!lv5w+uI|SitjJgG)Tr0ScniLKT3N{xfrj2>7f%(iqQMnMEnNK>DXSHZT>+>swJ!?FF?-;q^SPOn))3ajFfx`j|b2JZ@KpTX3E zFJj-s4{T3KAzd&%=S-&*#mbi2LBwn;U*e{~aQ&QllnMMk^5>!0BqQQry*O1lP_fw- z;`{Q$#`T#(kaDgT_E|DLSR{8LMmmR#B(d{?okQx!n*<4uG&4X6_Zs>UVw7wpn9Ph| z5c2T%)WiWbUM53d_{g~ZOp?KkaJT-Z+m(<+=6jMK-N=*4C**`Pk@A!x1C}It;XM#- z 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 HZG8PNKeSTC From 8cf3a32463856f91a4e64a5cd33b5538b67c25c9 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 30 Apr 2020 00:49:59 +0300 Subject: [PATCH 365/581] Add exlude_replies to OpenAPI spec for account timelines --- lib/pleroma/web/api_spec/operations/account_operation.ex | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 64e2e43c4..d3e8bd484 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -131,6 +131,7 @@ def statuses_operation do "Include statuses from muted acccounts." ), Operation.parameter(:exclude_reblogs, :query, BooleanLike, "Exclude reblogs"), + Operation.parameter(:exclude_replies, :query, BooleanLike, "Exclude replies"), Operation.parameter( :exclude_visibilities, :query, From 64bb72f98a91261158b36e63f6c9634ac9f423a6 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 13:57:47 +0200 Subject: [PATCH 366/581] Typo fix. --- lib/pleroma/web/activity_pub/utils.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 2d685ecc0..1a3b0b3c1 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -512,7 +512,7 @@ def get_latest_reaction(internal_activity_id, %{ap_id: ap_id}, emoji) do #### Announce-related helpers @doc """ - Retruns an existing announce activity if the notice has already been announced + Returns an existing announce activity if the notice has already been announced """ @spec get_existing_announce(String.t(), map()) :: Activity.t() | nil def get_existing_announce(actor, %{data: %{"id" => ap_id}}) do From 42ce7c5164326aa577bc7bd18e98c5d0a9d6fea5 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 14:13:08 +0200 Subject: [PATCH 367/581] ObjectValidator: Add actor fetcher. --- lib/pleroma/web/activity_pub/object_validator.ex | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index f476c6f72..016f6e7a2 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -46,8 +46,14 @@ def stringify_keys(object) do |> Map.new(fn {key, val} -> {to_string(key), val} end) end + def fetch_actor(object) do + with {:ok, actor} <- Types.ObjectID.cast(object["actor"]) do + User.get_or_fetch_by_ap_id(actor) + end + end + def fetch_actor_and_object(object) do - User.get_or_fetch_by_ap_id(object["actor"]) + fetch_actor(object) Object.normalize(object["object"]) :ok end From bd219ba7e884d694cc1c8747f0b48cd646821222 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 14:14:00 +0200 Subject: [PATCH 368/581] Transmogrifier Tests: Extract deletion tests. --- .../transmogrifier/delete_handling_test.exs | 106 ++++++++++++++++++ test/web/activity_pub/transmogrifier_test.exs | 77 ------------- 2 files changed, 106 insertions(+), 77 deletions(-) create mode 100644 test/web/activity_pub/transmogrifier/delete_handling_test.exs diff --git a/test/web/activity_pub/transmogrifier/delete_handling_test.exs b/test/web/activity_pub/transmogrifier/delete_handling_test.exs new file mode 100644 index 000000000..c15de5a95 --- /dev/null +++ b/test/web/activity_pub/transmogrifier/delete_handling_test.exs @@ -0,0 +1,106 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.Transmogrifier.DeleteHandlingTest do + use Oban.Testing, repo: Pleroma.Repo + use Pleroma.DataCase + + alias Pleroma.Activity + alias Pleroma.Object + alias Pleroma.Tests.ObanHelpers + alias Pleroma.User + alias Pleroma.Web.ActivityPub.Transmogrifier + + import Pleroma.Factory + import ExUnit.CaptureLog + + setup_all do + Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) + :ok + end + + test "it works for incoming deletes" do + activity = insert(:note_activity) + deleting_user = insert(:user) + + data = + File.read!("test/fixtures/mastodon-delete.json") + |> Poison.decode!() + + object = + data["object"] + |> Map.put("id", activity.data["object"]) + + data = + data + |> Map.put("object", object) + |> Map.put("actor", deleting_user.ap_id) + + {:ok, %Activity{actor: actor, local: false, data: %{"id" => id}}} = + Transmogrifier.handle_incoming(data) + + assert id == data["id"] + + # We delete the Create activity because base our timelines on it. + # This should be changed after we unify objects and activities + refute Activity.get_by_id(activity.id) + assert actor == deleting_user.ap_id + + # Objects are replaced by a tombstone object. + object = Object.normalize(activity.data["object"]) + assert object.data["type"] == "Tombstone" + end + + test "it fails for incoming deletes with spoofed origin" do + activity = insert(:note_activity) + + data = + File.read!("test/fixtures/mastodon-delete.json") + |> Poison.decode!() + + object = + data["object"] + |> Map.put("id", activity.data["object"]) + + data = + data + |> Map.put("object", object) + + assert capture_log(fn -> + :error = Transmogrifier.handle_incoming(data) + end) =~ + "[error] Could not decode user at fetch http://mastodon.example.org/users/gargron, {:error, :nxdomain}" + + assert Activity.get_by_id(activity.id) + end + + @tag capture_log: true + test "it works for incoming user deletes" do + %{ap_id: ap_id} = insert(:user, ap_id: "http://mastodon.example.org/users/admin") + + data = + File.read!("test/fixtures/mastodon-delete-user.json") + |> Poison.decode!() + + {:ok, _} = Transmogrifier.handle_incoming(data) + ObanHelpers.perform_all() + + refute User.get_cached_by_ap_id(ap_id) + end + + test "it fails for incoming user deletes with spoofed origin" do + %{ap_id: ap_id} = insert(:user) + + data = + File.read!("test/fixtures/mastodon-delete-user.json") + |> Poison.decode!() + |> Map.put("actor", ap_id) + + assert capture_log(fn -> + assert :error == Transmogrifier.handle_incoming(data) + end) =~ "Object containment failed" + + assert User.get_cached_by_ap_id(ap_id) + end +end diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 6057e360a..64e56d378 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -822,83 +822,6 @@ test "it works for incoming update activities which lock the account" do assert user.locked == true end - test "it works for incoming deletes" do - activity = insert(:note_activity) - deleting_user = insert(:user) - - data = - File.read!("test/fixtures/mastodon-delete.json") - |> Poison.decode!() - - object = - data["object"] - |> Map.put("id", activity.data["object"]) - - data = - data - |> Map.put("object", object) - |> Map.put("actor", deleting_user.ap_id) - - {:ok, %Activity{actor: actor, local: false, data: %{"id" => id}}} = - Transmogrifier.handle_incoming(data) - - assert id == data["id"] - refute Activity.get_by_id(activity.id) - assert actor == deleting_user.ap_id - end - - test "it fails for incoming deletes with spoofed origin" do - activity = insert(:note_activity) - - data = - File.read!("test/fixtures/mastodon-delete.json") - |> Poison.decode!() - - object = - data["object"] - |> Map.put("id", activity.data["object"]) - - data = - data - |> Map.put("object", object) - - assert capture_log(fn -> - :error = Transmogrifier.handle_incoming(data) - end) =~ - "[error] Could not decode user at fetch http://mastodon.example.org/users/gargron, {:error, :nxdomain}" - - assert Activity.get_by_id(activity.id) - end - - @tag capture_log: true - test "it works for incoming user deletes" do - %{ap_id: ap_id} = insert(:user, ap_id: "http://mastodon.example.org/users/admin") - - data = - File.read!("test/fixtures/mastodon-delete-user.json") - |> Poison.decode!() - - {:ok, _} = Transmogrifier.handle_incoming(data) - ObanHelpers.perform_all() - - refute User.get_cached_by_ap_id(ap_id) - end - - test "it fails for incoming user deletes with spoofed origin" do - %{ap_id: ap_id} = insert(:user) - - data = - File.read!("test/fixtures/mastodon-delete-user.json") - |> Poison.decode!() - |> Map.put("actor", ap_id) - - assert capture_log(fn -> - assert :error == Transmogrifier.handle_incoming(data) - end) =~ "Object containment failed" - - assert User.get_cached_by_ap_id(ap_id) - end - test "it works for incoming unannounces with an existing notice" do user = insert(:user) {:ok, activity} = CommonAPI.post(user, %{"status" => "hey"}) From 5839e67eb86d6d14b21222247ce8e113c3b26637 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 6 Feb 2020 18:01:12 +0300 Subject: [PATCH 369/581] return data only for updated emoji --- CHANGELOG.md | 7 +- docs/API/pleroma_api.md | 2 +- .../controllers/emoji_api_controller.ex | 93 +++++----- test/instance_static/add/shortcode.png | Bin 0 -> 95 bytes .../controllers/emoji_api_controller_test.exs | 162 ++++++++++-------- 5 files changed, 149 insertions(+), 115 deletions(-) create mode 100644 test/instance_static/add/shortcode.png diff --git a/CHANGELOG.md b/CHANGELOG.md index c0f1bcf57..a220c14f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -125,13 +125,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

API Changes -- **Breaking** EmojiReactions: Change endpoints and responses to align with Mastodon -- **Breaking** Admin API: `PATCH /api/pleroma/admin/users/:nickname/force_password_reset` is now `PATCH /api/pleroma/admin/users/force_password_reset` (accepts `nicknames` array in the request body) +- **Breaking:** EmojiReactions: Change endpoints and responses to align with Mastodon +- **Breaking:** Admin API: `PATCH /api/pleroma/admin/users/:nickname/force_password_reset` is now `PATCH /api/pleroma/admin/users/force_password_reset` (accepts `nicknames` array in the request body) - **Breaking:** Admin API: Return link alongside with token on password reset - **Breaking:** Admin API: `PUT /api/pleroma/admin/reports/:id` is now `PATCH /api/pleroma/admin/reports`, see admin_api.md for details - **Breaking:** `/api/pleroma/admin/users/invite_token` now uses `POST`, changed accepted params and returns full invite in json instead of only token string. -- **Breaking** replying to reports is now "report notes", enpoint changed from `POST /api/pleroma/admin/reports/:id/respond` to `POST /api/pleroma/admin/reports/:id/notes` +- **Breaking:** replying to reports is now "report notes", endpoint changed from `POST /api/pleroma/admin/reports/:id/respond` to `POST /api/pleroma/admin/reports/:id/notes` - Mastodon API: stopped sanitizing display names, field names and subject fields since they are supposed to be treated as plaintext +- **Breaking:** Pleroma API: `/api/pleroma/emoji/packs/:name/update_file` endpoint returns only updated emoji data. - Admin API: Return `total` when querying for reports - Mastodon API: Return `pleroma.direct_conversation_id` when creating a direct message (`POST /api/v1/statuses`) - Admin API: Return link alongside with token on password reset diff --git a/docs/API/pleroma_api.md b/docs/API/pleroma_api.md index 90c43c356..a7c7731ce 100644 --- a/docs/API/pleroma_api.md +++ b/docs/API/pleroma_api.md @@ -357,7 +357,7 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa * if the `action` is `update`, changes emoji shortcode (from `shortcode` to `new_shortcode` or moves the file (from the current filename to `new_filename`) * if the `action` is `remove`, removes the emoji named `shortcode` and it's associated file -* Response: JSON, updated "files" section of the pack and 200 status, 409 if the trying to use a shortcode +* Response: JSON, emoji shortcode with filename which was added/updated/deleted and 200 status, 409 if the trying to use a shortcode that is already taken, 400 if there was an error with the shortcode, filename or file (additional info in the "error" part of the response JSON) diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex index e01825b48..981bac4fa 100644 --- a/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex @@ -385,23 +385,35 @@ defp update_metadata_and_send(conn, full_pack, new_data, pack_file_p) do json(conn, new_data) end - defp get_filename(%{"filename" => filename}), do: filename - - defp get_filename(%{"file" => file}) do - case file do - %Plug.Upload{filename: filename} -> filename - url when is_binary(url) -> Path.basename(url) - end - end + defp get_filename(%Plug.Upload{filename: filename}), do: filename + defp get_filename(url) when is_binary(url), do: Path.basename(url) defp empty?(str), do: String.trim(str) == "" - defp update_file_and_send(conn, updated_full_pack, pack_file_p) do - # Write the emoji pack file - File.write!(pack_file_p, Jason.encode!(updated_full_pack, pretty: true)) + defp update_pack_file(updated_full_pack, pack_file_p) do + content = Jason.encode!(updated_full_pack, pretty: true) - # Return the modified file list - json(conn, updated_full_pack["files"]) + File.write!(pack_file_p, content) + end + + defp create_subdirs(file_path) do + if String.contains?(file_path, "/") do + file_path + |> Path.dirname() + |> File.mkdir_p!() + end + end + + defp pack_info(pack_name) do + dir = Path.join(emoji_dir_path(), pack_name) + json_path = Path.join(dir, "pack.json") + + json = + json_path + |> File.read!() + |> Jason.decode!() + + {dir, json_path, json} end @doc """ @@ -422,23 +434,25 @@ defp update_file_and_send(conn, updated_full_pack, pack_file_p) do # Add def update_file( conn, - %{"pack_name" => pack_name, "action" => "add", "shortcode" => shortcode} = params + %{"pack_name" => pack_name, "action" => "add"} = params ) do - pack_dir = Path.join(emoji_dir_path(), pack_name) - pack_file_p = Path.join(pack_dir, "pack.json") + shortcode = + if params["shortcode"] do + params["shortcode"] + else + filename = get_filename(params["file"]) + Path.basename(filename, Path.extname(filename)) + end - full_pack = Jason.decode!(File.read!(pack_file_p)) + {pack_dir, pack_file_p, full_pack} = pack_info(pack_name) with {_, false} <- {:has_shortcode, Map.has_key?(full_pack["files"], shortcode)}, - filename <- get_filename(params), + filename <- params["filename"] || get_filename(params["file"]), false <- empty?(shortcode), - false <- empty?(filename) do - file_path = Path.join(pack_dir, filename) - + false <- empty?(filename), + file_path <- Path.join(pack_dir, filename) do # If the name contains directories, create them - if String.contains?(file_path, "/") do - File.mkdir_p!(Path.dirname(file_path)) - end + create_subdirs(file_path) case params["file"] do %Plug.Upload{path: upload_path} -> @@ -451,8 +465,11 @@ def update_file( File.write!(file_path, file_contents) end - updated_full_pack = put_in(full_pack, ["files", shortcode], filename) - update_file_and_send(conn, updated_full_pack, pack_file_p) + full_pack + |> put_in(["files", shortcode], filename) + |> update_pack_file(pack_file_p) + + json(conn, %{shortcode => filename}) else {:has_shortcode, _} -> conn @@ -472,10 +489,7 @@ def update_file(conn, %{ "action" => "remove", "shortcode" => shortcode }) do - pack_dir = Path.join(emoji_dir_path(), pack_name) - pack_file_p = Path.join(pack_dir, "pack.json") - - full_pack = Jason.decode!(File.read!(pack_file_p)) + {pack_dir, pack_file_p, full_pack} = pack_info(pack_name) if Map.has_key?(full_pack["files"], shortcode) do {emoji_file_path, updated_full_pack} = pop_in(full_pack, ["files", shortcode]) @@ -494,7 +508,8 @@ def update_file(conn, %{ end end - update_file_and_send(conn, updated_full_pack, pack_file_p) + update_pack_file(updated_full_pack, pack_file_p) + json(conn, %{shortcode => full_pack["files"][shortcode]}) else conn |> put_status(:bad_request) @@ -507,10 +522,7 @@ def update_file( conn, %{"pack_name" => pack_name, "action" => "update", "shortcode" => shortcode} = params ) do - pack_dir = Path.join(emoji_dir_path(), pack_name) - pack_file_p = Path.join(pack_dir, "pack.json") - - full_pack = Jason.decode!(File.read!(pack_file_p)) + {pack_dir, pack_file_p, full_pack} = pack_info(pack_name) with {_, true} <- {:has_shortcode, Map.has_key?(full_pack["files"], shortcode)}, %{"new_shortcode" => new_shortcode, "new_filename" => new_filename} <- params, @@ -522,9 +534,7 @@ def update_file( new_emoji_file_path = Path.join(pack_dir, new_filename) # If the name contains directories, create them - if String.contains?(new_emoji_file_path, "/") do - File.mkdir_p!(Path.dirname(new_emoji_file_path)) - end + create_subdirs(new_emoji_file_path) # Move/Rename the old filename to a new filename # These are probably on the same filesystem, so just rename should work @@ -540,8 +550,11 @@ def update_file( end # Then, put in the new shortcode with the new path - updated_full_pack = put_in(updated_full_pack, ["files", new_shortcode], new_filename) - update_file_and_send(conn, updated_full_pack, pack_file_p) + updated_full_pack + |> put_in(["files", new_shortcode], new_filename) + |> update_pack_file(pack_file_p) + + json(conn, %{new_shortcode => new_filename}) else {:has_shortcode, _} -> conn diff --git a/test/instance_static/add/shortcode.png b/test/instance_static/add/shortcode.png new file mode 100644 index 0000000000000000000000000000000000000000..8f50fa02340e7e09e562f86e00b6e4bd6ad1d565 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^4Is=2Bp6=1#-sr$rjj7PU - File.write!(pack_file, original_content) + on_exit(fn -> + File.write!(pack_file, original_content) + end) - File.rm_rf!("#{@emoji_dir_path}/test_pack/blank_url.png") - File.rm_rf!("#{@emoji_dir_path}/test_pack/dir") - File.rm_rf!("#{@emoji_dir_path}/test_pack/dir_2") - end) + admin = insert(:user, is_admin: true) + %{conn: conn} = oauth_access(["admin:write"], user: admin) + {:ok, conn: conn} + end - admin = insert(:user, is_admin: true) - %{conn: conn} = oauth_access(["admin:write"], user: admin) + test "update file without shortcode", %{conn: conn} do + on_exit(fn -> File.rm_rf!("#{@emoji_dir_path}/test_pack/shortcode.png") end) - same_name = %{ - "action" => "add", - "shortcode" => "blank", - "filename" => "dir/blank.png", - "file" => %Plug.Upload{ - filename: "blank.png", - path: "#{@emoji_dir_path}/test_pack/blank.png" + assert conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "add", + "file" => %Plug.Upload{ + filename: "shortcode.png", + path: "#{Pleroma.Config.get([:instance, :static_dir])}/add/shortcode.png" + } + }) + |> json_response(200) == %{"shortcode" => "shortcode.png"} + end + + test "updating pack files", %{conn: conn} do + on_exit(fn -> + File.rm_rf!("#{@emoji_dir_path}/test_pack/blank_url.png") + File.rm_rf!("#{@emoji_dir_path}/test_pack/dir") + File.rm_rf!("#{@emoji_dir_path}/test_pack/dir_2") + end) + + same_name = %{ + "action" => "add", + "shortcode" => "blank", + "filename" => "dir/blank.png", + "file" => %Plug.Upload{ + filename: "blank.png", + path: "#{@emoji_dir_path}/test_pack/blank.png" + } } - } - different_name = %{same_name | "shortcode" => "blank_2"} + different_name = %{same_name | "shortcode" => "blank_2"} - assert (conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), same_name) - |> json_response(:conflict))["error"] =~ "already exists" + assert (conn + |> post(emoji_api_path(conn, :update_file, "test_pack"), same_name) + |> json_response(:conflict))["error"] =~ "already exists" - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), different_name) - |> json_response(200) == %{"blank" => "blank.png", "blank_2" => "dir/blank.png"} + assert conn + |> post(emoji_api_path(conn, :update_file, "test_pack"), different_name) + |> json_response(200) == %{"blank_2" => "dir/blank.png"} - assert File.exists?("#{@emoji_dir_path}/test_pack/dir/blank.png") + assert File.exists?("#{@emoji_dir_path}/test_pack/dir/blank.png") - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ - "action" => "update", - "shortcode" => "blank_2", - "new_shortcode" => "blank_3", - "new_filename" => "dir_2/blank_3.png" - }) - |> json_response(200) == %{"blank" => "blank.png", "blank_3" => "dir_2/blank_3.png"} + assert conn + |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ + "action" => "update", + "shortcode" => "blank_2", + "new_shortcode" => "blank_3", + "new_filename" => "dir_2/blank_3.png" + }) + |> json_response(200) == %{"blank_3" => "dir_2/blank_3.png"} - refute File.exists?("#{@emoji_dir_path}/test_pack/dir/") - assert File.exists?("#{@emoji_dir_path}/test_pack/dir_2/blank_3.png") + refute File.exists?("#{@emoji_dir_path}/test_pack/dir/") + assert File.exists?("#{@emoji_dir_path}/test_pack/dir_2/blank_3.png") - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ - "action" => "remove", - "shortcode" => "blank_3" - }) - |> json_response(200) == %{"blank" => "blank.png"} + assert conn + |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ + "action" => "remove", + "shortcode" => "blank_3" + }) + |> json_response(200) == %{"blank_3" => "dir_2/blank_3.png"} - refute File.exists?("#{@emoji_dir_path}/test_pack/dir_2/") + refute File.exists?("#{@emoji_dir_path}/test_pack/dir_2/") - mock(fn - %{ - method: :get, - url: "https://test-blank/blank_url.png" - } -> - text(File.read!("#{@emoji_dir_path}/test_pack/blank.png")) - end) + mock(fn + %{ + method: :get, + url: "https://test-blank/blank_url.png" + } -> + text(File.read!("#{@emoji_dir_path}/test_pack/blank.png")) + end) - # The name should be inferred from the URL ending - from_url = %{ - "action" => "add", - "shortcode" => "blank_url", - "file" => "https://test-blank/blank_url.png" - } + # The name should be inferred from the URL ending + from_url = %{ + "action" => "add", + "shortcode" => "blank_url", + "file" => "https://test-blank/blank_url.png" + } - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), from_url) - |> json_response(200) == %{ - "blank" => "blank.png", - "blank_url" => "blank_url.png" - } + assert conn + |> post(emoji_api_path(conn, :update_file, "test_pack"), from_url) + |> json_response(200) == %{ + "blank_url" => "blank_url.png" + } - assert File.exists?("#{@emoji_dir_path}/test_pack/blank_url.png") + assert File.exists?("#{@emoji_dir_path}/test_pack/blank_url.png") - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ - "action" => "remove", - "shortcode" => "blank_url" - }) - |> json_response(200) == %{"blank" => "blank.png"} + assert conn + |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ + "action" => "remove", + "shortcode" => "blank_url" + }) + |> json_response(200) == %{"blank_url" => "blank_url.png"} - refute File.exists?("#{@emoji_dir_path}/test_pack/blank_url.png") + refute File.exists?("#{@emoji_dir_path}/test_pack/blank_url.png") + end end test "creating and deleting a pack" do From db184a8eb495865334f47a24f8c5b1fec65450b6 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 14:37:14 +0200 Subject: [PATCH 370/581] DeleteValidator: Mastodon sends unaddressed deletes. --- .../object_validators/delete_validator.ex | 1 - test/web/activity_pub/object_validator_test.exs | 14 -------------- 2 files changed, 15 deletions(-) diff --git a/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex index 8dd5c19ad..0eb31451c 100644 --- a/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex @@ -32,7 +32,6 @@ def validate_data(cng) do |> validate_inclusion(:type, ["Delete"]) |> validate_same_domain() |> validate_object_presence() - |> validate_recipients_presence() end def validate_same_domain(cng) do diff --git a/test/web/activity_pub/object_validator_test.exs b/test/web/activity_pub/object_validator_test.exs index 64b9ee1ec..ab26d3501 100644 --- a/test/web/activity_pub/object_validator_test.exs +++ b/test/web/activity_pub/object_validator_test.exs @@ -59,20 +59,6 @@ test "it's invalid if the actor of the object and the actor of delete are from d assert {:actor, {"is not allowed to delete object", []}} in cng.errors end - - test "it's invalid if all the recipient fields are empty", %{ - valid_post_delete: valid_post_delete - } do - empty_recipients = - valid_post_delete - |> Map.put("to", []) - |> Map.put("cc", []) - - {:error, cng} = ObjectValidator.validate(empty_recipients, []) - - assert {:to, {"no recipients in any field", []}} in cng.errors - assert {:cc, {"no recipients in any field", []}} in cng.errors - end end describe "likes" do From 342f55fb92c723acf7f53de2dae390b72051c94b Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Sat, 28 Mar 2020 13:34:32 +0300 Subject: [PATCH 371/581] refactor emoji api with fixes --- lib/pleroma/emoji/pack.ex | 509 ++++++++++ .../controllers/emoji_api_controller.ex | 616 ++++-------- lib/pleroma/web/router.ex | 3 +- .../emoji/pack_bad_sha/blank.png | Bin 0 -> 95 bytes .../emoji/pack_bad_sha/pack.json | 13 + .../emoji/pack_bad_sha/pack_bad_sha.zip | Bin 0 -> 256 bytes .../instance_static/emoji/test_pack/pack.json | 16 +- .../emoji/test_pack_nonshared/pack.json | 5 +- .../controllers/emoji_api_controller_test.exs | 944 ++++++++++++------ 9 files changed, 1327 insertions(+), 779 deletions(-) create mode 100644 lib/pleroma/emoji/pack.ex create mode 100644 test/instance_static/emoji/pack_bad_sha/blank.png create mode 100644 test/instance_static/emoji/pack_bad_sha/pack.json create mode 100644 test/instance_static/emoji/pack_bad_sha/pack_bad_sha.zip diff --git a/lib/pleroma/emoji/pack.ex b/lib/pleroma/emoji/pack.ex new file mode 100644 index 000000000..21ed12c78 --- /dev/null +++ b/lib/pleroma/emoji/pack.ex @@ -0,0 +1,509 @@ +defmodule Pleroma.Emoji.Pack do + @derive {Jason.Encoder, only: [:files, :pack]} + defstruct files: %{}, + pack_file: nil, + path: nil, + pack: %{}, + name: nil + + @type t() :: %__MODULE__{ + files: %{String.t() => Path.t()}, + pack_file: Path.t(), + path: Path.t(), + pack: map(), + name: String.t() + } + + alias Pleroma.Emoji + + @spec emoji_path() :: Path.t() + def emoji_path do + static = Pleroma.Config.get!([:instance, :static_dir]) + Path.join(static, "emoji") + end + + @spec create(String.t()) :: :ok | {:error, File.posix()} | {:error, :empty_values} + def create(name) when byte_size(name) > 0 do + dir = Path.join(emoji_path(), name) + + with :ok <- File.mkdir(dir) do + %__MODULE__{ + pack_file: Path.join(dir, "pack.json") + } + |> save_pack() + end + end + + def create(_), do: {:error, :empty_values} + + @spec show(String.t()) :: {:ok, t()} | {:loaded, nil} | {:error, :empty_values} + def show(name) when byte_size(name) > 0 do + with {_, %__MODULE__{} = pack} <- {:loaded, load_pack(name)}, + {_, pack} <- validate_pack(pack) do + {:ok, pack} + end + end + + def show(_), do: {:error, :empty_values} + + @spec delete(String.t()) :: + {:ok, [binary()]} | {:error, File.posix(), binary()} | {:error, :empty_values} + def delete(name) when byte_size(name) > 0 do + emoji_path() + |> Path.join(name) + |> File.rm_rf() + end + + def delete(_), do: {:error, :empty_values} + + @spec add_file(String.t(), String.t(), Path.t(), Plug.Upload.t() | String.t()) :: + {:ok, t()} | {:error, File.posix()} | {:error, :empty_values} + def add_file(name, shortcode, filename, file) + when byte_size(name) > 0 and byte_size(shortcode) > 0 and byte_size(filename) > 0 do + with {_, nil} <- {:exists, Emoji.get(shortcode)}, + {_, %__MODULE__{} = pack} <- {:loaded, load_pack(name)} do + file_path = Path.join(pack.path, filename) + + create_subdirs(file_path) + + case file do + %Plug.Upload{path: upload_path} -> + # Copy the uploaded file from the temporary directory + File.copy!(upload_path, file_path) + + url when is_binary(url) -> + # Download and write the file + file_contents = Tesla.get!(url).body + File.write!(file_path, file_contents) + end + + files = Map.put(pack.files, shortcode, filename) + + updated_pack = %{pack | files: files} + + case save_pack(updated_pack) do + :ok -> + Emoji.reload() + {:ok, updated_pack} + + e -> + e + end + end + end + + def add_file(_, _, _, _), do: {:error, :empty_values} + + defp create_subdirs(file_path) do + if String.contains?(file_path, "/") do + file_path + |> Path.dirname() + |> File.mkdir_p!() + end + end + + @spec remove_file(String.t(), String.t()) :: + {:ok, t()} | {:error, File.posix()} | {:error, :empty_values} + def remove_file(name, shortcode) when byte_size(name) > 0 and byte_size(shortcode) > 0 do + with {_, %__MODULE__{} = pack} <- {:loaded, load_pack(name)}, + {_, {filename, files}} when not is_nil(filename) <- + {:exists, Map.pop(pack.files, shortcode)}, + emoji <- Path.join(pack.path, filename), + {_, true} <- {:exists, File.exists?(emoji)} do + emoji_dir = Path.dirname(emoji) + + File.rm!(emoji) + + if String.contains?(filename, "/") and File.ls!(emoji_dir) == [] do + File.rmdir!(emoji_dir) + end + + updated_pack = %{pack | files: files} + + case save_pack(updated_pack) do + :ok -> + Emoji.reload() + {:ok, updated_pack} + + e -> + e + end + end + end + + def remove_file(_, _), do: {:error, :empty_values} + + @spec update_file(String.t(), String.t(), String.t(), String.t(), boolean()) :: + {:ok, t()} | {:error, File.posix()} | {:error, :empty_values} + def update_file(name, shortcode, new_shortcode, new_filename, force) + when byte_size(name) > 0 and byte_size(shortcode) > 0 and byte_size(new_shortcode) > 0 and + byte_size(new_filename) > 0 do + with {_, %__MODULE__{} = pack} <- {:loaded, load_pack(name)}, + {_, {filename, files}} when not is_nil(filename) <- + {:exists, Map.pop(pack.files, shortcode)}, + {_, true} <- {:not_used, force or is_nil(Emoji.get(new_shortcode))} do + old_path = Path.join(pack.path, filename) + old_dir = Path.dirname(old_path) + new_path = Path.join(pack.path, new_filename) + + create_subdirs(new_path) + + :ok = File.rename(old_path, new_path) + + if String.contains?(filename, "/") and File.ls!(old_dir) == [] do + File.rmdir!(old_dir) + end + + files = Map.put(files, new_shortcode, new_filename) + + updated_pack = %{pack | files: files} + + case save_pack(updated_pack) do + :ok -> + Emoji.reload() + {:ok, updated_pack} + + e -> + e + end + end + end + + def update_file(_, _, _, _, _), do: {:error, :empty_values} + + @spec import_from_filesystem() :: {:ok, [String.t()]} | {:error, atom()} + def import_from_filesystem do + emoji_path = emoji_path() + + with {:ok, %{access: :read_write}} <- File.stat(emoji_path), + {:ok, results} <- File.ls(emoji_path) do + names = + results + |> Enum.map(&Path.join(emoji_path, &1)) + |> Enum.reject(fn path -> + File.dir?(path) and File.exists?(Path.join(path, "pack.json")) + end) + |> Enum.map(&write_pack_contents/1) + |> Enum.filter(& &1) + + {:ok, names} + else + {:ok, %{access: _}} -> {:error, :not_writable} + e -> e + end + end + + defp write_pack_contents(path) do + pack = %__MODULE__{ + files: files_from_path(path), + path: path, + pack_file: Path.join(path, "pack.json") + } + + case save_pack(pack) do + :ok -> Path.basename(path) + _ -> nil + end + end + + defp files_from_path(path) do + txt_path = Path.join(path, "emoji.txt") + + if File.exists?(txt_path) do + # There's an emoji.txt file, it's likely from a pack installed by the pack manager. + # Make a pack.json file from the contents of that emoji.txt file + + # FIXME: Copy-pasted from Pleroma.Emoji/load_from_file_stream/2 + + # Create a map of shortcodes to filenames from emoji.txt + File.read!(txt_path) + |> String.split("\n") + |> Enum.map(&String.trim/1) + |> Enum.map(fn line -> + case String.split(line, ~r/,\s*/) do + # This matches both strings with and without tags + # and we don't care about tags here + [name, file | _] -> + file_dir_name = Path.dirname(file) + + file = + if String.ends_with?(path, file_dir_name) do + Path.basename(file) + else + file + end + + {name, file} + + _ -> + nil + end + end) + |> Enum.filter(& &1) + |> Enum.into(%{}) + else + # If there's no emoji.txt, assume all files + # that are of certain extensions from the config are emojis and import them all + pack_extensions = Pleroma.Config.get!([:emoji, :pack_extensions]) + Emoji.Loader.make_shortcode_to_file_map(path, pack_extensions) + end + end + + @spec list_remote_packs(String.t()) :: {:ok, map()} + def list_remote_packs(url) do + uri = + url + |> String.trim() + |> URI.parse() + + with {_, true} <- {:shareable, shareable_packs_available?(uri)} do + packs = + uri + |> URI.merge("/api/pleroma/emoji/packs") + |> to_string() + |> Tesla.get!() + |> Map.get(:body) + |> Jason.decode!() + + {:ok, packs} + end + end + + @spec list_local_packs() :: {:ok, map()} + def list_local_packs do + emoji_path = emoji_path() + + # Create the directory first if it does not exist. This is probably the first request made + # with the API so it should be sufficient + with {:create_dir, :ok} <- {:create_dir, File.mkdir_p(emoji_path)}, + {:ls, {:ok, results}} <- {:ls, File.ls(emoji_path)} do + packs = + results + |> Enum.map(&load_pack/1) + |> Enum.filter(& &1) + |> Enum.map(&validate_pack/1) + |> Map.new() + + {:ok, packs} + end + end + + defp validate_pack(pack) do + if downloadable?(pack) do + archive = fetch_archive(pack) + archive_sha = :crypto.hash(:sha256, archive) |> Base.encode16() + + info = + pack.pack + |> Map.put("can-download", true) + |> Map.put("download-sha256", archive_sha) + + {pack.name, Map.put(pack, :pack, info)} + else + info = Map.put(pack.pack, "can-download", false) + {pack.name, Map.put(pack, :pack, info)} + end + end + + defp downloadable?(pack) do + # If the pack is set as shared, check if it can be downloaded + # That means that when asked, the pack can be packed and sent to the remote + # Otherwise, they'd have to download it from external-src + pack.pack["share-files"] && + Enum.all?(pack.files, fn {_, file} -> + File.exists?(Path.join(pack.path, file)) + end) + end + + @spec download(String.t()) :: {:ok, binary()} + def download(name) do + with {_, %__MODULE__{} = pack} <- {:exists?, load_pack(name)}, + {_, true} <- {:can_download?, downloadable?(pack)} do + {:ok, fetch_archive(pack)} + end + end + + defp fetch_archive(pack) do + hash = :crypto.hash(:md5, File.read!(pack.pack_file)) + + case Cachex.get!(:emoji_packs_cache, pack.name) do + %{hash: ^hash, pack_data: archive} -> + archive + + _ -> + create_archive_and_cache(pack, hash) + end + end + + defp create_archive_and_cache(pack, hash) do + files = ['pack.json' | Enum.map(pack.files, fn {_, file} -> to_charlist(file) end)] + + {:ok, {_, result}} = + :zip.zip('#{pack.name}.zip', files, [:memory, cwd: to_charlist(pack.path)]) + + ttl_per_file = Pleroma.Config.get!([:emoji, :shared_pack_cache_seconds_per_file]) + overall_ttl = :timer.seconds(ttl_per_file * Enum.count(files)) + + Cachex.put!( + :emoji_packs_cache, + pack.name, + # if pack.json MD5 changes, the cache is not valid anymore + %{hash: hash, pack_data: result}, + # Add a minute to cache time for every file in the pack + ttl: overall_ttl + ) + + result + end + + @spec download_from_source(String.t(), String.t(), String.t()) :: :ok + def download_from_source(name, url, as) do + uri = + url + |> String.trim() + |> URI.parse() + + with {_, true} <- {:shareable, shareable_packs_available?(uri)} do + # TODO: why do we load all packs, if we know the name of pack we need + remote_pack = + uri + |> URI.merge("/api/pleroma/emoji/packs/#{name}") + |> to_string() + |> Tesla.get!() + |> Map.get(:body) + |> Jason.decode!() + + result = + case remote_pack["pack"] do + %{"share-files" => true, "can-download" => true, "download-sha256" => sha} -> + {:ok, + %{ + sha: sha, + url: + URI.merge(uri, "/api/pleroma/emoji/packs/#{name}/download_shared") |> to_string() + }} + + %{"fallback-src" => src, "fallback-src-sha256" => sha} when is_binary(src) -> + {:ok, + %{ + sha: sha, + url: src, + fallback: true + }} + + _ -> + {:error, + "The pack was not set as shared and there is no fallback src to download from"} + end + + with {:ok, %{sha: sha, url: url} = pinfo} <- result, + %{body: archive} <- Tesla.get!(url), + {_, true} <- {:checksum, Base.decode16!(sha) == :crypto.hash(:sha256, archive)} do + local_name = as || name + + path = Path.join(emoji_path(), local_name) + + pack = %__MODULE__{ + name: local_name, + path: path, + files: remote_pack["files"], + pack_file: Path.join(path, "pack.json") + } + + File.mkdir_p!(pack.path) + + files = Enum.map(remote_pack["files"], fn {_, path} -> to_charlist(path) end) + # Fallback cannot contain a pack.json file + files = if pinfo[:fallback], do: files, else: ['pack.json' | files] + + {:ok, _} = :zip.unzip(archive, cwd: to_charlist(pack.path), file_list: files) + + # Fallback can't contain a pack.json file, since that would cause the fallback-src-sha256 + # in it to depend on itself + if pinfo[:fallback] do + save_pack(pack) + end + + :ok + end + end + end + + defp save_pack(pack), do: File.write(pack.pack_file, Jason.encode!(pack, pretty: true)) + + @spec save_metadata(map(), t()) :: {:ok, t()} | {:error, File.posix()} + def save_metadata(metadata, %__MODULE__{} = pack) do + pack = Map.put(pack, :pack, metadata) + + with :ok <- save_pack(pack) do + {:ok, pack} + end + end + + @spec update_metadata(String.t(), map()) :: {:ok, t()} | {:error, File.posix()} + def update_metadata(name, data) do + pack = load_pack(name) + + fb_sha_changed? = + not is_nil(data["fallback-src"]) and data["fallback-src"] != pack.pack["fallback-src"] + + with {_, true} <- {:update?, fb_sha_changed?}, + {:ok, %{body: zip}} <- Tesla.get(data["fallback-src"]), + {:ok, f_list} <- :zip.unzip(zip, [:memory]), + {_, true} <- {:has_all_files?, has_all_files?(pack.files, f_list)} do + fallback_sha = :crypto.hash(:sha256, zip) |> Base.encode16() + + data + |> Map.put("fallback-src-sha256", fallback_sha) + |> save_metadata(pack) + else + {:update?, _} -> save_metadata(data, pack) + e -> e + end + end + + # Check if all files from the pack.json are in the archive + defp has_all_files?(files, f_list) do + Enum.all?(files, fn {_, from_manifest} -> + List.keyfind(f_list, to_charlist(from_manifest), 0) + end) + end + + @spec load_pack(String.t()) :: t() | nil + def load_pack(name) do + pack_file = Path.join([emoji_path(), name, "pack.json"]) + + if File.exists?(pack_file) do + pack_file + |> File.read!() + |> from_json() + |> Map.put(:pack_file, pack_file) + |> Map.put(:path, Path.dirname(pack_file)) + |> Map.put(:name, name) + end + end + + defp from_json(json) do + map = Jason.decode!(json) + + struct(__MODULE__, %{files: map["files"], pack: map["pack"]}) + end + + defp shareable_packs_available?(uri) do + uri + |> URI.merge("/.well-known/nodeinfo") + |> to_string() + |> Tesla.get!() + |> Map.get(:body) + |> Jason.decode!() + |> Map.get("links") + |> List.last() + |> Map.get("href") + # Get the actual nodeinfo address and fetch it + |> Tesla.get!() + |> Map.get(:body) + |> Jason.decode!() + |> get_in(["metadata", "features"]) + |> Enum.member?("shareable_emoji_packs") + end +end diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex index 981bac4fa..9fa857474 100644 --- a/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex @@ -1,18 +1,15 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIController do use Pleroma.Web, :controller - alias Pleroma.Plugs.ExpectPublicOrAuthenticatedCheckPlug - alias Pleroma.Plugs.OAuthScopesPlug - - require Logger + alias Pleroma.Emoji.Pack plug( - OAuthScopesPlug, + Pleroma.Plugs.OAuthScopesPlug, %{scopes: ["write"], admin: true} when action in [ :create, :delete, - :save_from, + :download_from, :import_from_fs, :update_file, :update_metadata @@ -21,17 +18,10 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIController do plug( :skip_plug, - [OAuthScopesPlug, ExpectPublicOrAuthenticatedCheckPlug] + [Pleroma.Plugs.OAuthScopesPlug, Pleroma.Plugs.ExpectPublicOrAuthenticatedCheckPlug] when action in [:download_shared, :list_packs, :list_from] ) - defp emoji_dir_path do - Path.join( - Pleroma.Config.get!([:instance, :static_dir]), - "emoji" - ) - end - @doc """ Lists packs from the remote instance. @@ -39,17 +29,13 @@ defp emoji_dir_path do be done by the server """ def list_from(conn, %{"instance_address" => address}) do - address = String.trim(address) - - if shareable_packs_available(address) do - list_resp = - "#{address}/api/pleroma/emoji/packs" |> Tesla.get!() |> Map.get(:body) |> Jason.decode!() - - json(conn, list_resp) + with {:ok, packs} <- Pack.list_remote_packs(address) do + json(conn, packs) else - conn - |> put_status(:internal_server_error) - |> json(%{error: "The requested instance does not support sharing emoji packs"}) + {:shareable, _} -> + conn + |> put_status(:internal_server_error) + |> json(%{error: "The requested instance does not support sharing emoji packs"}) end end @@ -60,113 +46,44 @@ def list_from(conn, %{"instance_address" => address}) do a map of "pack directory name" to pack.json contents. """ def list_packs(conn, _params) do - # Create the directory first if it does not exist. This is probably the first request made - # with the API so it should be sufficient - with {:create_dir, :ok} <- {:create_dir, File.mkdir_p(emoji_dir_path())}, - {:ls, {:ok, results}} <- {:ls, File.ls(emoji_dir_path())} do - pack_infos = - results - |> Enum.filter(&has_pack_json?/1) - |> Enum.map(&load_pack/1) - # Check if all the files are in place and can be sent - |> Enum.map(&validate_pack/1) - # Transform into a map of pack-name => pack-data - |> Enum.into(%{}) + emoji_path = + Path.join( + Pleroma.Config.get!([:instance, :static_dir]), + "emoji" + ) - json(conn, pack_infos) + with {:ok, packs} <- Pack.list_local_packs() do + json(conn, packs) else {:create_dir, {:error, e}} -> conn |> put_status(:internal_server_error) - |> json(%{error: "Failed to create the emoji pack directory at #{emoji_dir_path()}: #{e}"}) + |> json(%{error: "Failed to create the emoji pack directory at #{emoji_path}: #{e}"}) {:ls, {:error, e}} -> conn |> put_status(:internal_server_error) |> json(%{ - error: - "Failed to get the contents of the emoji pack directory at #{emoji_dir_path()}: #{e}" + error: "Failed to get the contents of the emoji pack directory at #{emoji_path}: #{e}" }) end end - defp has_pack_json?(file) do - dir_path = Path.join(emoji_dir_path(), file) - # Filter to only use the pack.json packs - File.dir?(dir_path) and File.exists?(Path.join(dir_path, "pack.json")) - end + def show(conn, %{"name" => name}) do + name = String.trim(name) - defp load_pack(pack_name) do - pack_path = Path.join(emoji_dir_path(), pack_name) - pack_file = Path.join(pack_path, "pack.json") - - {pack_name, Jason.decode!(File.read!(pack_file))} - end - - defp validate_pack({name, pack}) do - pack_path = Path.join(emoji_dir_path(), name) - - if can_download?(pack, pack_path) do - archive_for_sha = make_archive(name, pack, pack_path) - archive_sha = :crypto.hash(:sha256, archive_for_sha) |> Base.encode16() - - pack = - pack - |> put_in(["pack", "can-download"], true) - |> put_in(["pack", "download-sha256"], archive_sha) - - {name, pack} + with {:ok, pack} <- Pack.show(name) do + json(conn, pack) else - {name, put_in(pack, ["pack", "can-download"], false)} - end - end + {:loaded, _} -> + conn + |> put_status(:not_found) + |> json(%{error: "Pack #{name} does not exist"}) - defp can_download?(pack, pack_path) do - # If the pack is set as shared, check if it can be downloaded - # That means that when asked, the pack can be packed and sent to the remote - # Otherwise, they'd have to download it from external-src - pack["pack"]["share-files"] && - Enum.all?(pack["files"], fn {_, path} -> - File.exists?(Path.join(pack_path, path)) - end) - end - - defp create_archive_and_cache(name, pack, pack_dir, md5) do - files = - ['pack.json'] ++ - (pack["files"] |> Enum.map(fn {_, path} -> to_charlist(path) end)) - - {:ok, {_, zip_result}} = :zip.zip('#{name}.zip', files, [:memory, cwd: to_charlist(pack_dir)]) - - cache_seconds_per_file = Pleroma.Config.get!([:emoji, :shared_pack_cache_seconds_per_file]) - cache_ms = :timer.seconds(cache_seconds_per_file * Enum.count(files)) - - Cachex.put!( - :emoji_packs_cache, - name, - # if pack.json MD5 changes, the cache is not valid anymore - %{pack_json_md5: md5, pack_data: zip_result}, - # Add a minute to cache time for every file in the pack - ttl: cache_ms - ) - - Logger.debug("Created an archive for the '#{name}' emoji pack, \ -keeping it in cache for #{div(cache_ms, 1000)}s") - - zip_result - end - - defp make_archive(name, pack, pack_dir) do - # Having a different pack.json md5 invalidates cache - pack_file_md5 = :crypto.hash(:md5, File.read!(Path.join(pack_dir, "pack.json"))) - - case Cachex.get!(:emoji_packs_cache, name) do - %{pack_file_md5: ^pack_file_md5, pack_data: zip_result} -> - Logger.debug("Using cache for the '#{name}' shared emoji pack") - zip_result - - _ -> - create_archive_and_cache(name, pack, pack_dir, pack_file_md5) + {:error, :empty_values} -> + conn + |> put_status(:bad_request) + |> json(%{error: "pack name cannot be empty"}) end end @@ -175,21 +92,15 @@ defp make_archive(name, pack, pack_dir) do to download packs that the instance shares. """ def download_shared(conn, %{"name" => name}) do - pack_dir = Path.join(emoji_dir_path(), name) - pack_file = Path.join(pack_dir, "pack.json") - - with {_, true} <- {:exists?, File.exists?(pack_file)}, - pack = Jason.decode!(File.read!(pack_file)), - {_, true} <- {:can_download?, can_download?(pack, pack_dir)} do - zip_result = make_archive(name, pack, pack_dir) - send_download(conn, {:binary, zip_result}, filename: "#{name}.zip") + with {:ok, archive} <- Pack.download(name) do + send_download(conn, {:binary, archive}, filename: "#{name}.zip") else {:can_download?, _} -> conn |> put_status(:forbidden) |> json(%{ - error: "Pack #{name} cannot be downloaded from this instance, either pack sharing\ - was disabled for this pack or some files are missing" + error: + "Pack #{name} cannot be downloaded from this instance, either pack sharing was disabled for this pack or some files are missing" }) {:exists?, _} -> @@ -199,22 +110,6 @@ def download_shared(conn, %{"name" => name}) do end end - defp shareable_packs_available(address) do - "#{address}/.well-known/nodeinfo" - |> Tesla.get!() - |> Map.get(:body) - |> Jason.decode!() - |> Map.get("links") - |> List.last() - |> Map.get("href") - # Get the actual nodeinfo address and fetch it - |> Tesla.get!() - |> Map.get(:body) - |> Jason.decode!() - |> get_in(["metadata", "features"]) - |> Enum.member?("shareable_emoji_packs") - end - @doc """ An admin endpoint to request downloading and storing a pack named `pack_name` from the instance `instance_address`. @@ -222,74 +117,24 @@ defp shareable_packs_available(address) do If the requested instance's admin chose to share the pack, it will be downloaded from that instance, otherwise it will be downloaded from the fallback source, if there is one. """ - def save_from(conn, %{"instance_address" => address, "pack_name" => name} = data) do - address = String.trim(address) - - if shareable_packs_available(address) do - full_pack = - "#{address}/api/pleroma/emoji/packs/list" - |> Tesla.get!() - |> Map.get(:body) - |> Jason.decode!() - |> Map.get(name) - - pack_info_res = - case full_pack["pack"] do - %{"share-files" => true, "can-download" => true, "download-sha256" => sha} -> - {:ok, - %{ - sha: sha, - uri: "#{address}/api/pleroma/emoji/packs/download_shared/#{name}" - }} - - %{"fallback-src" => src, "fallback-src-sha256" => sha} when is_binary(src) -> - {:ok, - %{ - sha: sha, - uri: src, - fallback: true - }} - - _ -> - {:error, - "The pack was not set as shared and there is no fallback src to download from"} - end - - with {:ok, %{sha: sha, uri: uri} = pinfo} <- pack_info_res, - %{body: emoji_archive} <- Tesla.get!(uri), - {_, true} <- {:checksum, Base.decode16!(sha) == :crypto.hash(:sha256, emoji_archive)} do - local_name = data["as"] || name - pack_dir = Path.join(emoji_dir_path(), local_name) - File.mkdir_p!(pack_dir) - - files = Enum.map(full_pack["files"], fn {_, path} -> to_charlist(path) end) - # Fallback cannot contain a pack.json file - files = if pinfo[:fallback], do: files, else: ['pack.json'] ++ files - - {:ok, _} = :zip.unzip(emoji_archive, cwd: to_charlist(pack_dir), file_list: files) - - # Fallback can't contain a pack.json file, since that would cause the fallback-src-sha256 - # in it to depend on itself - if pinfo[:fallback] do - pack_file_path = Path.join(pack_dir, "pack.json") - - File.write!(pack_file_path, Jason.encode!(full_pack, pretty: true)) - end - - json(conn, "ok") - else - {:error, e} -> - conn |> put_status(:internal_server_error) |> json(%{error: e}) - - {:checksum, _} -> - conn - |> put_status(:internal_server_error) - |> json(%{error: "SHA256 for the pack doesn't match the one sent by the server"}) - end + def download_from(conn, %{"instance_address" => address, "pack_name" => name} = params) do + with :ok <- Pack.download_from_source(name, address, params["as"]) do + json(conn, "ok") else - conn - |> put_status(:internal_server_error) - |> json(%{error: "The requested instance does not support sharing emoji packs"}) + {:shareable, _} -> + conn + |> put_status(:internal_server_error) + |> json(%{error: "The requested instance does not support sharing emoji packs"}) + + {:checksum, _} -> + conn + |> put_status(:internal_server_error) + |> json(%{error: "SHA256 for the pack doesn't match the one sent by the server"}) + + {:error, e} -> + conn + |> put_status(:internal_server_error) + |> json(%{error: e}) end end @@ -297,23 +142,27 @@ def save_from(conn, %{"instance_address" => address, "pack_name" => name} = data Creates an empty pack named `name` which then can be updated via the admin UI. """ def create(conn, %{"name" => name}) do - pack_dir = Path.join(emoji_dir_path(), name) + name = String.trim(name) - if not File.exists?(pack_dir) do - File.mkdir_p!(pack_dir) - - pack_file_p = Path.join(pack_dir, "pack.json") - - File.write!( - pack_file_p, - Jason.encode!(%{pack: %{}, files: %{}}, pretty: true) - ) - - conn |> json("ok") + with :ok <- Pack.create(name) do + json(conn, "ok") else - conn - |> put_status(:conflict) - |> json(%{error: "A pack named \"#{name}\" already exists"}) + {:error, :eexist} -> + conn + |> put_status(:conflict) + |> json(%{error: "A pack named \"#{name}\" already exists"}) + + {:error, :empty_values} -> + conn + |> put_status(:bad_request) + |> json(%{error: "pack name cannot be empty"}) + + {:error, _} -> + render_error( + conn, + :internal_server_error, + "Unexpected error occurred while creating pack." + ) end end @@ -321,11 +170,20 @@ def create(conn, %{"name" => name}) do Deletes the pack `name` and all it's files. """ def delete(conn, %{"name" => name}) do - pack_dir = Path.join(emoji_dir_path(), name) + name = String.trim(name) - case File.rm_rf(pack_dir) do - {:ok, _} -> - conn |> json("ok") + with {:ok, deleted} when deleted != [] <- Pack.delete(name) do + json(conn, "ok") + else + {:ok, []} -> + conn + |> put_status(:not_found) + |> json(%{error: "Pack #{name} does not exist"}) + + {:error, :empty_values} -> + conn + |> put_status(:bad_request) + |> json(%{error: "pack name cannot be empty"}) {:error, _, _} -> conn @@ -340,82 +198,23 @@ def delete(conn, %{"name" => name}) do `new_data` is the new metadata for the pack, that will replace the old metadata. """ def update_metadata(conn, %{"pack_name" => name, "new_data" => new_data}) do - pack_file_p = Path.join([emoji_dir_path(), name, "pack.json"]) - - full_pack = Jason.decode!(File.read!(pack_file_p)) - - # The new fallback-src is in the new data and it's not the same as it was in the old data - should_update_fb_sha = - not is_nil(new_data["fallback-src"]) and - new_data["fallback-src"] != full_pack["pack"]["fallback-src"] - - with {_, true} <- {:should_update?, should_update_fb_sha}, - %{body: pack_arch} <- Tesla.get!(new_data["fallback-src"]), - {:ok, flist} <- :zip.unzip(pack_arch, [:memory]), - {_, true} <- {:has_all_files?, has_all_files?(full_pack, flist)} do - fallback_sha = :crypto.hash(:sha256, pack_arch) |> Base.encode16() - - new_data = Map.put(new_data, "fallback-src-sha256", fallback_sha) - update_metadata_and_send(conn, full_pack, new_data, pack_file_p) + with {:ok, pack} <- Pack.update_metadata(name, new_data) do + json(conn, pack.pack) else - {:should_update?, _} -> - update_metadata_and_send(conn, full_pack, new_data, pack_file_p) - {:has_all_files?, _} -> conn |> put_status(:bad_request) |> json(%{error: "The fallback archive does not have all files specified in pack.json"}) + + {:error, _} -> + render_error( + conn, + :internal_server_error, + "Unexpected error occurred while updating pack metadata." + ) end end - # Check if all files from the pack.json are in the archive - defp has_all_files?(%{"files" => files}, flist) do - Enum.all?(files, fn {_, from_manifest} -> - Enum.find(flist, fn {from_archive, _} -> - to_string(from_archive) == from_manifest - end) - end) - end - - defp update_metadata_and_send(conn, full_pack, new_data, pack_file_p) do - full_pack = Map.put(full_pack, "pack", new_data) - File.write!(pack_file_p, Jason.encode!(full_pack, pretty: true)) - - # Send new data back with fallback sha filled - json(conn, new_data) - end - - defp get_filename(%Plug.Upload{filename: filename}), do: filename - defp get_filename(url) when is_binary(url), do: Path.basename(url) - - defp empty?(str), do: String.trim(str) == "" - - defp update_pack_file(updated_full_pack, pack_file_p) do - content = Jason.encode!(updated_full_pack, pretty: true) - - File.write!(pack_file_p, content) - end - - defp create_subdirs(file_path) do - if String.contains?(file_path, "/") do - file_path - |> Path.dirname() - |> File.mkdir_p!() - end - end - - defp pack_info(pack_name) do - dir = Path.join(emoji_dir_path(), pack_name) - json_path = Path.join(dir, "pack.json") - - json = - json_path - |> File.read!() - |> Jason.decode!() - - {dir, json_path, json} - end - @doc """ Updates a file in a pack. @@ -436,50 +235,33 @@ def update_file( conn, %{"pack_name" => pack_name, "action" => "add"} = params ) do - shortcode = - if params["shortcode"] do - params["shortcode"] - else - filename = get_filename(params["file"]) - Path.basename(filename, Path.extname(filename)) - end + filename = params["filename"] || get_filename(params["file"]) + shortcode = params["shortcode"] || Path.basename(filename, Path.extname(filename)) - {pack_dir, pack_file_p, full_pack} = pack_info(pack_name) - - with {_, false} <- {:has_shortcode, Map.has_key?(full_pack["files"], shortcode)}, - filename <- params["filename"] || get_filename(params["file"]), - false <- empty?(shortcode), - false <- empty?(filename), - file_path <- Path.join(pack_dir, filename) do - # If the name contains directories, create them - create_subdirs(file_path) - - case params["file"] do - %Plug.Upload{path: upload_path} -> - # Copy the uploaded file from the temporary directory - File.copy!(upload_path, file_path) - - url when is_binary(url) -> - # Download and write the file - file_contents = Tesla.get!(url).body - File.write!(file_path, file_contents) - end - - full_pack - |> put_in(["files", shortcode], filename) - |> update_pack_file(pack_file_p) - - json(conn, %{shortcode => filename}) + with {:ok, pack} <- Pack.add_file(pack_name, shortcode, filename, params["file"]) do + json(conn, pack.files) else - {:has_shortcode, _} -> + {:exists, _} -> conn |> put_status(:conflict) |> json(%{error: "An emoji with the \"#{shortcode}\" shortcode already exists"}) - true -> + {:loaded, _} -> conn |> put_status(:bad_request) - |> json(%{error: "shortcode or filename cannot be empty"}) + |> json(%{error: "pack \"#{pack_name}\" is not found"}) + + {:error, :empty_values} -> + conn + |> put_status(:bad_request) + |> json(%{error: "pack name, shortcode or filename cannot be empty"}) + + {:error, _} -> + render_error( + conn, + :internal_server_error, + "Unexpected error occurred while adding file to pack." + ) end end @@ -489,87 +271,74 @@ def update_file(conn, %{ "action" => "remove", "shortcode" => shortcode }) do - {pack_dir, pack_file_p, full_pack} = pack_info(pack_name) - - if Map.has_key?(full_pack["files"], shortcode) do - {emoji_file_path, updated_full_pack} = pop_in(full_pack, ["files", shortcode]) - - emoji_file_path = Path.join(pack_dir, emoji_file_path) - - # Delete the emoji file - File.rm!(emoji_file_path) - - # If the old directory has no more files, remove it - if String.contains?(emoji_file_path, "/") do - dir = Path.dirname(emoji_file_path) - - if Enum.empty?(File.ls!(dir)) do - File.rmdir!(dir) - end - end - - update_pack_file(updated_full_pack, pack_file_p) - json(conn, %{shortcode => full_pack["files"][shortcode]}) + with {:ok, pack} <- Pack.remove_file(pack_name, shortcode) do + json(conn, pack.files) else - conn - |> put_status(:bad_request) - |> json(%{error: "Emoji \"#{shortcode}\" does not exist"}) + {:exists, _} -> + conn + |> put_status(:bad_request) + |> json(%{error: "Emoji \"#{shortcode}\" does not exist"}) + + {:loaded, _} -> + conn + |> put_status(:bad_request) + |> json(%{error: "pack \"#{pack_name}\" is not found"}) + + {:error, :empty_values} -> + conn + |> put_status(:bad_request) + |> json(%{error: "pack name or shortcode cannot be empty"}) + + {:error, _} -> + render_error( + conn, + :internal_server_error, + "Unexpected error occurred while removing file from pack." + ) end end # Update def update_file( conn, - %{"pack_name" => pack_name, "action" => "update", "shortcode" => shortcode} = params + %{"pack_name" => name, "action" => "update", "shortcode" => shortcode} = params ) do - {pack_dir, pack_file_p, full_pack} = pack_info(pack_name) + new_shortcode = params["new_shortcode"] + new_filename = params["new_filename"] + force = params["force"] == true - with {_, true} <- {:has_shortcode, Map.has_key?(full_pack["files"], shortcode)}, - %{"new_shortcode" => new_shortcode, "new_filename" => new_filename} <- params, - false <- empty?(new_shortcode), - false <- empty?(new_filename) do - # First, remove the old shortcode, saving the old path - {old_emoji_file_path, updated_full_pack} = pop_in(full_pack, ["files", shortcode]) - old_emoji_file_path = Path.join(pack_dir, old_emoji_file_path) - new_emoji_file_path = Path.join(pack_dir, new_filename) - - # If the name contains directories, create them - create_subdirs(new_emoji_file_path) - - # Move/Rename the old filename to a new filename - # These are probably on the same filesystem, so just rename should work - :ok = File.rename(old_emoji_file_path, new_emoji_file_path) - - # If the old directory has no more files, remove it - if String.contains?(old_emoji_file_path, "/") do - dir = Path.dirname(old_emoji_file_path) - - if Enum.empty?(File.ls!(dir)) do - File.rmdir!(dir) - end - end - - # Then, put in the new shortcode with the new path - updated_full_pack - |> put_in(["files", new_shortcode], new_filename) - |> update_pack_file(pack_file_p) - - json(conn, %{new_shortcode => new_filename}) + with {:ok, pack} <- Pack.update_file(name, shortcode, new_shortcode, new_filename, force) do + json(conn, pack.files) else - {:has_shortcode, _} -> + {:exists, _} -> conn |> put_status(:bad_request) |> json(%{error: "Emoji \"#{shortcode}\" does not exist"}) - true -> + {:not_used, _} -> + conn + |> put_status(:conflict) + |> json(%{ + error: + "New shortcode \"#{new_shortcode}\" is already used. If you want to override emoji use 'force' option" + }) + + {:loaded, _} -> + conn + |> put_status(:bad_request) + |> json(%{error: "pack \"#{name}\" is not found"}) + + {:error, :empty_values} -> conn |> put_status(:bad_request) |> json(%{error: "new_shortcode or new_filename cannot be empty"}) - _ -> - conn - |> put_status(:bad_request) - |> json(%{error: "new_shortcode or new_file were not specified"}) + {:error, _} -> + render_error( + conn, + :internal_server_error, + "Unexpected error occurred while updating file in pack." + ) end end @@ -589,23 +358,12 @@ def update_file(conn, %{"action" => action}) do neither, all the files with specific configured extenstions will be assumed to be emojis and stored in the new `pack.json` file. """ + def import_from_fs(conn, _params) do - emoji_path = emoji_dir_path() - - with {:ok, %{access: :read_write}} <- File.stat(emoji_path), - {:ok, results} <- File.ls(emoji_path) do - imported_pack_names = - results - |> Enum.filter(fn file -> - dir_path = Path.join(emoji_path, file) - # Find the directories that do NOT have pack.json - File.dir?(dir_path) and not File.exists?(Path.join(dir_path, "pack.json")) - end) - |> Enum.map(&write_pack_json_contents/1) - - json(conn, imported_pack_names) + with {:ok, names} <- Pack.import_from_filesystem() do + json(conn, names) else - {:ok, %{access: _}} -> + {:error, :not_writable} -> conn |> put_status(:internal_server_error) |> json(%{error: "Error: emoji pack directory must be writable"}) @@ -617,44 +375,6 @@ def import_from_fs(conn, _params) do end end - defp write_pack_json_contents(dir) do - dir_path = Path.join(emoji_dir_path(), dir) - emoji_txt_path = Path.join(dir_path, "emoji.txt") - - files_for_pack = files_for_pack(emoji_txt_path, dir_path) - pack_json_contents = Jason.encode!(%{pack: %{}, files: files_for_pack}) - - File.write!(Path.join(dir_path, "pack.json"), pack_json_contents) - - dir - end - - defp files_for_pack(emoji_txt_path, dir_path) do - if File.exists?(emoji_txt_path) do - # There's an emoji.txt file, it's likely from a pack installed by the pack manager. - # Make a pack.json file from the contents of that emoji.txt fileh - - # FIXME: Copy-pasted from Pleroma.Emoji/load_from_file_stream/2 - - # Create a map of shortcodes to filenames from emoji.txt - File.read!(emoji_txt_path) - |> String.split("\n") - |> Enum.map(&String.trim/1) - |> Enum.map(fn line -> - case String.split(line, ~r/,\s*/) do - # This matches both strings with and without tags - # and we don't care about tags here - [name, file | _] -> {name, file} - _ -> nil - end - end) - |> Enum.filter(fn x -> not is_nil(x) end) - |> Enum.into(%{}) - else - # If there's no emoji.txt, assume all files - # that are of certain extensions from the config are emojis and import them all - pack_extensions = Pleroma.Config.get!([:emoji, :pack_extensions]) - Pleroma.Emoji.Loader.make_shortcode_to_file_map(dir_path, pack_extensions) - end - end + defp get_filename(%Plug.Upload{filename: filename}), do: filename + defp get_filename(url) when is_binary(url), do: Path.basename(url) end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index becce3098..0fcb517cf 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -221,12 +221,13 @@ defmodule Pleroma.Web.Router do delete("/:name", EmojiAPIController, :delete) # Note: /download_from downloads and saves to instance, not to requester - post("/download_from", EmojiAPIController, :save_from) + post("/download_from", EmojiAPIController, :download_from) end # Pack info / downloading scope "/packs" do get("/", EmojiAPIController, :list_packs) + get("/:name", EmojiAPIController, :show) get("/:name/download_shared/", EmojiAPIController, :download_shared) get("/list_from", EmojiAPIController, :list_from) diff --git a/test/instance_static/emoji/pack_bad_sha/blank.png b/test/instance_static/emoji/pack_bad_sha/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..8f50fa02340e7e09e562f86e00b6e4bd6ad1d565 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^4Is=2Bp6=1#-sr$rjj7PU7++V2?-CrektH&y2Pt+hC@XnZuhYzjGD_PDeO;RYuj`( zUAMu8(_j4f1g>LGSdR&<=@xdWn#IJs;|^bzfkATSK6P%elQ2Vo rHzSiAGcLzT0G$W{OBz8ml2chBPDOKOfHx}}NFgH-`UC0NAPxfnZrnv? literal 0 HcmV?d00001 diff --git a/test/instance_static/emoji/test_pack/pack.json b/test/instance_static/emoji/test_pack/pack.json index 5a8ee75f9..481891b08 100644 --- a/test/instance_static/emoji/test_pack/pack.json +++ b/test/instance_static/emoji/test_pack/pack.json @@ -1,13 +1,11 @@ { - "pack": { - "license": "Test license", - "homepage": "https://pleroma.social", - "description": "Test description", - - "share-files": true - }, - "files": { "blank": "blank.png" + }, + "pack": { + "description": "Test description", + "homepage": "https://pleroma.social", + "license": "Test license", + "share-files": true } -} +} \ No newline at end of file diff --git a/test/instance_static/emoji/test_pack_nonshared/pack.json b/test/instance_static/emoji/test_pack_nonshared/pack.json index b96781f81..93d643a5f 100644 --- a/test/instance_static/emoji/test_pack_nonshared/pack.json +++ b/test/instance_static/emoji/test_pack_nonshared/pack.json @@ -3,14 +3,11 @@ "license": "Test license", "homepage": "https://pleroma.social", "description": "Test description", - "fallback-src": "https://nonshared-pack", "fallback-src-sha256": "74409E2674DAA06C072729C6C8426C4CB3B7E0B85ED77792DB7A436E11D76DAF", - "share-files": false }, - "files": { "blank": "blank.png" } -} +} \ No newline at end of file diff --git a/test/web/pleroma_api/controllers/emoji_api_controller_test.exs b/test/web/pleroma_api/controllers/emoji_api_controller_test.exs index 6844601d7..6a0d7dd11 100644 --- a/test/web/pleroma_api/controllers/emoji_api_controller_test.exs +++ b/test/web/pleroma_api/controllers/emoji_api_controller_test.exs @@ -8,212 +8,309 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do import Tesla.Mock import Pleroma.Factory - @emoji_dir_path Path.join( - Pleroma.Config.get!([:instance, :static_dir]), - "emoji" - ) + @emoji_path Path.join( + Pleroma.Config.get!([:instance, :static_dir]), + "emoji" + ) setup do: clear_config([:auth, :enforce_oauth_admin_scope_usage], false) - test "shared & non-shared pack information in list_packs is ok" do - conn = build_conn() - resp = conn |> get(emoji_api_path(conn, :list_packs)) |> json_response(200) - - assert Map.has_key?(resp, "test_pack") - - pack = resp["test_pack"] - - assert Map.has_key?(pack["pack"], "download-sha256") - assert pack["pack"]["can-download"] - - assert pack["files"] == %{"blank" => "blank.png"} - - # Non-shared pack - - assert Map.has_key?(resp, "test_pack_nonshared") - - pack = resp["test_pack_nonshared"] - - refute pack["pack"]["shared"] - refute pack["pack"]["can-download"] - end - - test "listing remote packs" do - conn = build_conn() - - resp = - build_conn() - |> get(emoji_api_path(conn, :list_packs)) - |> json_response(200) - - mock(fn - %{method: :get, url: "https://example.com/.well-known/nodeinfo"} -> - json(%{links: [%{href: "https://example.com/nodeinfo/2.1.json"}]}) - - %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> - json(%{metadata: %{features: ["shareable_emoji_packs"]}}) - - %{method: :get, url: "https://example.com/api/pleroma/emoji/packs"} -> - json(resp) - end) - - assert conn - |> post(emoji_api_path(conn, :list_from), %{instance_address: "https://example.com"}) - |> json_response(200) == resp - end - - test "downloading a shared pack from download_shared" do - conn = build_conn() - - resp = - conn - |> get(emoji_api_path(conn, :download_shared, "test_pack")) - |> response(200) - - {:ok, arch} = :zip.unzip(resp, [:memory]) - - assert Enum.find(arch, fn {n, _} -> n == 'pack.json' end) - assert Enum.find(arch, fn {n, _} -> n == 'blank.png' end) - end - - test "downloading shared & unshared packs from another instance, deleting them" do - on_exit(fn -> - File.rm_rf!("#{@emoji_dir_path}/test_pack2") - File.rm_rf!("#{@emoji_dir_path}/test_pack_nonshared2") - end) - - mock(fn - %{method: :get, url: "https://old-instance/.well-known/nodeinfo"} -> - json(%{links: [%{href: "https://old-instance/nodeinfo/2.1.json"}]}) - - %{method: :get, url: "https://old-instance/nodeinfo/2.1.json"} -> - json(%{metadata: %{features: []}}) - - %{method: :get, url: "https://example.com/.well-known/nodeinfo"} -> - json(%{links: [%{href: "https://example.com/nodeinfo/2.1.json"}]}) - - %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> - json(%{metadata: %{features: ["shareable_emoji_packs"]}}) - - %{ - method: :get, - url: "https://example.com/api/pleroma/emoji/packs/list" - } -> - conn = build_conn() - - conn - |> get(emoji_api_path(conn, :list_packs)) - |> json_response(200) - |> json() - - %{ - method: :get, - url: "https://example.com/api/pleroma/emoji/packs/download_shared/test_pack" - } -> - conn = build_conn() - - conn - |> get(emoji_api_path(conn, :download_shared, "test_pack")) - |> response(200) - |> text() - - %{ - method: :get, - url: "https://nonshared-pack" - } -> - text(File.read!("#{@emoji_dir_path}/test_pack_nonshared/nonshared.zip")) - end) - + setup do admin = insert(:user, is_admin: true) + token = insert(:oauth_admin_token, user: admin) - conn = + admin_conn = build_conn() |> assign(:user, admin) - |> assign(:token, insert(:oauth_admin_token, user: admin, scopes: ["admin:write"])) + |> assign(:token, token) - assert (conn - |> put_req_header("content-type", "application/json") - |> post( - emoji_api_path( - conn, - :save_from - ), - %{ - instance_address: "https://old-instance", - pack_name: "test_pack", - as: "test_pack2" - } - |> Jason.encode!() - ) - |> json_response(500))["error"] =~ "does not support" + Pleroma.Emoji.reload() + {:ok, %{admin_conn: admin_conn}} + end - assert conn - |> put_req_header("content-type", "application/json") - |> post( - emoji_api_path( - conn, - :save_from - ), - %{ + test "GET /api/pleroma/emoji/packs", %{conn: conn} do + resp = conn |> get("/api/pleroma/emoji/packs") |> json_response(200) + + shared = resp["test_pack"] + assert shared["files"] == %{"blank" => "blank.png"} + assert Map.has_key?(shared["pack"], "download-sha256") + assert shared["pack"]["can-download"] + assert shared["pack"]["share-files"] + + non_shared = resp["test_pack_nonshared"] + assert non_shared["pack"]["share-files"] == false + assert non_shared["pack"]["can-download"] == false + end + + describe "POST /api/pleroma/emoji/packs/list_from" do + test "shareable instance", %{admin_conn: admin_conn, conn: conn} do + resp = + conn + |> get("/api/pleroma/emoji/packs") + |> json_response(200) + + mock(fn + %{method: :get, url: "https://example.com/.well-known/nodeinfo"} -> + json(%{links: [%{href: "https://example.com/nodeinfo/2.1.json"}]}) + + %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> + json(%{metadata: %{features: ["shareable_emoji_packs"]}}) + + %{method: :get, url: "https://example.com/api/pleroma/emoji/packs"} -> + json(resp) + end) + + assert admin_conn + |> post("/api/pleroma/emoji/packs/list_from", %{ + instance_address: "https://example.com" + }) + |> json_response(200) == resp + end + + test "non shareable instance", %{admin_conn: admin_conn} do + mock(fn + %{method: :get, url: "https://example.com/.well-known/nodeinfo"} -> + json(%{links: [%{href: "https://example.com/nodeinfo/2.1.json"}]}) + + %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> + json(%{metadata: %{features: []}}) + end) + + assert admin_conn + |> post("/api/pleroma/emoji/packs/list_from", %{ + instance_address: "https://example.com" + }) + |> json_response(500) == %{ + "error" => "The requested instance does not support sharing emoji packs" + } + end + end + + describe "GET /api/pleroma/emoji/packs/:name/download_shared" do + test "download shared pack", %{conn: conn} do + resp = + conn + |> get("/api/pleroma/emoji/packs/test_pack/download_shared") + |> response(200) + + {:ok, arch} = :zip.unzip(resp, [:memory]) + + assert Enum.find(arch, fn {n, _} -> n == 'pack.json' end) + assert Enum.find(arch, fn {n, _} -> n == 'blank.png' end) + end + + test "non existing pack", %{conn: conn} do + assert conn + |> get("/api/pleroma/emoji/packs/test_pack_for_import/download_shared") + |> json_response(:not_found) == %{ + "error" => "Pack test_pack_for_import does not exist" + } + end + + test "non downloadable pack", %{conn: conn} do + assert conn + |> get("/api/pleroma/emoji/packs/test_pack_nonshared/download_shared") + |> json_response(:forbidden) == %{ + "error" => + "Pack test_pack_nonshared cannot be downloaded from this instance, either pack sharing was disabled for this pack or some files are missing" + } + end + end + + describe "POST /api/pleroma/emoji/packs/download_from" do + test "shared pack from remote and non shared from fallback-src", %{ + admin_conn: admin_conn, + conn: conn + } do + mock(fn + %{method: :get, url: "https://example.com/.well-known/nodeinfo"} -> + json(%{links: [%{href: "https://example.com/nodeinfo/2.1.json"}]}) + + %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> + json(%{metadata: %{features: ["shareable_emoji_packs"]}}) + + %{ + method: :get, + url: "https://example.com/api/pleroma/emoji/packs/test_pack" + } -> + conn + |> get("/api/pleroma/emoji/packs/test_pack") + |> json_response(200) + |> json() + + %{ + method: :get, + url: "https://example.com/api/pleroma/emoji/packs/test_pack/download_shared" + } -> + conn + |> get("/api/pleroma/emoji/packs/test_pack/download_shared") + |> response(200) + |> text() + + %{ + method: :get, + url: "https://example.com/api/pleroma/emoji/packs/test_pack_nonshared" + } -> + conn + |> get("/api/pleroma/emoji/packs/test_pack_nonshared") + |> json_response(200) + |> json() + + %{ + method: :get, + url: "https://nonshared-pack" + } -> + text(File.read!("#{@emoji_path}/test_pack_nonshared/nonshared.zip")) + end) + + assert admin_conn + |> post("/api/pleroma/emoji/packs/download_from", %{ instance_address: "https://example.com", pack_name: "test_pack", as: "test_pack2" + }) + |> json_response(200) == "ok" + + assert File.exists?("#{@emoji_path}/test_pack2/pack.json") + assert File.exists?("#{@emoji_path}/test_pack2/blank.png") + + assert admin_conn + |> delete("/api/pleroma/emoji/packs/test_pack2") + |> json_response(200) == "ok" + + refute File.exists?("#{@emoji_path}/test_pack2") + + assert admin_conn + |> post( + "/api/pleroma/emoji/packs/download_from", + %{ + instance_address: "https://example.com", + pack_name: "test_pack_nonshared", + as: "test_pack_nonshared2" + } + ) + |> json_response(200) == "ok" + + assert File.exists?("#{@emoji_path}/test_pack_nonshared2/pack.json") + assert File.exists?("#{@emoji_path}/test_pack_nonshared2/blank.png") + + assert admin_conn + |> delete("/api/pleroma/emoji/packs/test_pack_nonshared2") + |> json_response(200) == "ok" + + refute File.exists?("#{@emoji_path}/test_pack_nonshared2") + end + + test "nonshareable instance", %{admin_conn: admin_conn} do + mock(fn + %{method: :get, url: "https://old-instance/.well-known/nodeinfo"} -> + json(%{links: [%{href: "https://old-instance/nodeinfo/2.1.json"}]}) + + %{method: :get, url: "https://old-instance/nodeinfo/2.1.json"} -> + json(%{metadata: %{features: []}}) + end) + + assert admin_conn + |> post( + "/api/pleroma/emoji/packs/download_from", + %{ + instance_address: "https://old-instance", + pack_name: "test_pack", + as: "test_pack2" + } + ) + |> json_response(500) == %{ + "error" => "The requested instance does not support sharing emoji packs" } - |> Jason.encode!() - ) - |> json_response(200) == "ok" + end - assert File.exists?("#{@emoji_dir_path}/test_pack2/pack.json") - assert File.exists?("#{@emoji_dir_path}/test_pack2/blank.png") + test "checksum fail", %{admin_conn: admin_conn} do + mock(fn + %{method: :get, url: "https://example.com/.well-known/nodeinfo"} -> + json(%{links: [%{href: "https://example.com/nodeinfo/2.1.json"}]}) - assert conn - |> delete(emoji_api_path(conn, :delete, "test_pack2")) - |> json_response(200) == "ok" + %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> + json(%{metadata: %{features: ["shareable_emoji_packs"]}}) - refute File.exists?("#{@emoji_dir_path}/test_pack2") + %{ + method: :get, + url: "https://example.com/api/pleroma/emoji/packs/pack_bad_sha" + } -> + %Tesla.Env{ + status: 200, + body: Pleroma.Emoji.Pack.load_pack("pack_bad_sha") |> Jason.encode!() + } - # non-shared, downloaded from the fallback URL + %{ + method: :get, + url: "https://example.com/api/pleroma/emoji/packs/pack_bad_sha/download_shared" + } -> + %Tesla.Env{ + status: 200, + body: File.read!("test/instance_static/emoji/pack_bad_sha/pack_bad_sha.zip") + } + end) - assert conn - |> put_req_header("content-type", "application/json") - |> post( - emoji_api_path( - conn, - :save_from - ), - %{ + assert admin_conn + |> post("/api/pleroma/emoji/packs/download_from", %{ instance_address: "https://example.com", - pack_name: "test_pack_nonshared", - as: "test_pack_nonshared2" + pack_name: "pack_bad_sha", + as: "pack_bad_sha2" + }) + |> json_response(:internal_server_error) == %{ + "error" => "SHA256 for the pack doesn't match the one sent by the server" } - |> Jason.encode!() - ) - |> json_response(200) == "ok" + end - assert File.exists?("#{@emoji_dir_path}/test_pack_nonshared2/pack.json") - assert File.exists?("#{@emoji_dir_path}/test_pack_nonshared2/blank.png") + test "other error", %{admin_conn: admin_conn} do + mock(fn + %{method: :get, url: "https://example.com/.well-known/nodeinfo"} -> + json(%{links: [%{href: "https://example.com/nodeinfo/2.1.json"}]}) - assert conn - |> delete(emoji_api_path(conn, :delete, "test_pack_nonshared2")) - |> json_response(200) == "ok" + %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> + json(%{metadata: %{features: ["shareable_emoji_packs"]}}) - refute File.exists?("#{@emoji_dir_path}/test_pack_nonshared2") + %{ + method: :get, + url: "https://example.com/api/pleroma/emoji/packs/test_pack" + } -> + %Tesla.Env{ + status: 200, + body: %{"test_pack" => Pleroma.Emoji.Pack.load_pack("test_pack")} |> Jason.encode!() + } + + %{ + method: :get, + url: "https://example.com/api/pleroma/emoji/packs/test_pack/download_shared" + } -> + %Tesla.Env{ + status: 200, + body: File.read!("test/instance_static/emoji/test_pack/pack.json") + } + end) + + assert admin_conn + |> post("/api/pleroma/emoji/packs/download_from", %{ + instance_address: "https://example.com", + pack_name: "test_pack", + as: "test_pack2" + }) + |> json_response(:internal_server_error) == %{ + "error" => + "The pack was not set as shared and there is no fallback src to download from" + } + end end describe "updating pack metadata" do setup do - pack_file = "#{@emoji_dir_path}/test_pack/pack.json" + pack_file = "#{@emoji_path}/test_pack/pack.json" original_content = File.read!(pack_file) on_exit(fn -> File.write!(pack_file, original_content) end) - admin = insert(:user, is_admin: true) - %{conn: conn} = oauth_access(["admin:write"], user: admin) - {:ok, - admin: admin, - conn: conn, pack_file: pack_file, new_data: %{ "license" => "Test license changed", @@ -224,11 +321,9 @@ test "downloading shared & unshared packs from another instance, deleting them" end test "for a pack without a fallback source", ctx do - conn = ctx[:conn] - - assert conn + assert ctx[:admin_conn] |> post( - emoji_api_path(conn, :update_metadata, "test_pack"), + "/api/pleroma/emoji/packs/test_pack/update_metadata", %{ "new_data" => ctx[:new_data] } @@ -244,7 +339,7 @@ test "for a pack with a fallback source", ctx do method: :get, url: "https://nonshared-pack" } -> - text(File.read!("#{@emoji_dir_path}/test_pack_nonshared/nonshared.zip")) + text(File.read!("#{@emoji_path}/test_pack_nonshared/nonshared.zip")) end) new_data = Map.put(ctx[:new_data], "fallback-src", "https://nonshared-pack") @@ -256,11 +351,9 @@ test "for a pack with a fallback source", ctx do "74409E2674DAA06C072729C6C8426C4CB3B7E0B85ED77792DB7A436E11D76DAF" ) - conn = ctx[:conn] - - assert conn + assert ctx[:admin_conn] |> post( - emoji_api_path(conn, :update_metadata, "test_pack"), + "/api/pleroma/emoji/packs/test_pack/update_metadata", %{ "new_data" => new_data } @@ -282,37 +375,241 @@ test "when the fallback source doesn't have all the files", ctx do new_data = Map.put(ctx[:new_data], "fallback-src", "https://nonshared-pack") - conn = ctx[:conn] - - assert (conn - |> post( - emoji_api_path(conn, :update_metadata, "test_pack"), - %{ - "new_data" => new_data - } - ) - |> json_response(:bad_request))["error"] =~ "does not have all" + assert ctx[:admin_conn] + |> post( + "/api/pleroma/emoji/packs/test_pack/update_metadata", + %{ + "new_data" => new_data + } + ) + |> json_response(:bad_request) == %{ + "error" => "The fallback archive does not have all files specified in pack.json" + } end end - describe "update_file/2" do + describe "POST /api/pleroma/emoji/packs/:pack_name/update_file" do setup do - pack_file = "#{@emoji_dir_path}/test_pack/pack.json" + pack_file = "#{@emoji_path}/test_pack/pack.json" original_content = File.read!(pack_file) on_exit(fn -> File.write!(pack_file, original_content) end) - admin = insert(:user, is_admin: true) - %{conn: conn} = oauth_access(["admin:write"], user: admin) - {:ok, conn: conn} + :ok end - test "update file without shortcode", %{conn: conn} do - on_exit(fn -> File.rm_rf!("#{@emoji_dir_path}/test_pack/shortcode.png") end) + test "create shortcode exists", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "add", + "shortcode" => "blank", + "filename" => "dir/blank.png", + "file" => %Plug.Upload{ + filename: "blank.png", + path: "#{@emoji_path}/test_pack/blank.png" + } + }) + |> json_response(:conflict) == %{ + "error" => "An emoji with the \"blank\" shortcode already exists" + } + end - assert conn + test "don't rewrite old emoji", %{admin_conn: admin_conn} do + on_exit(fn -> File.rm_rf!("#{@emoji_path}/test_pack/dir/") end) + + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "add", + "shortcode" => "blank2", + "filename" => "dir/blank.png", + "file" => %Plug.Upload{ + filename: "blank.png", + path: "#{@emoji_path}/test_pack/blank.png" + } + }) + |> json_response(200) == %{"blank" => "blank.png", "blank2" => "dir/blank.png"} + + assert File.exists?("#{@emoji_path}/test_pack/dir/blank.png") + + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "update", + "shortcode" => "blank", + "new_shortcode" => "blank2", + "new_filename" => "dir_2/blank_3.png" + }) + |> json_response(:conflict) == %{ + "error" => + "New shortcode \"blank2\" is already used. If you want to override emoji use 'force' option" + } + end + + test "rewrite old emoji with force option", %{admin_conn: admin_conn} do + on_exit(fn -> File.rm_rf!("#{@emoji_path}/test_pack/dir_2/") end) + + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "add", + "shortcode" => "blank2", + "filename" => "dir/blank.png", + "file" => %Plug.Upload{ + filename: "blank.png", + path: "#{@emoji_path}/test_pack/blank.png" + } + }) + |> json_response(200) == %{"blank" => "blank.png", "blank2" => "dir/blank.png"} + + assert File.exists?("#{@emoji_path}/test_pack/dir/blank.png") + + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "update", + "shortcode" => "blank2", + "new_shortcode" => "blank3", + "new_filename" => "dir_2/blank_3.png", + "force" => true + }) + |> json_response(200) == %{ + "blank" => "blank.png", + "blank3" => "dir_2/blank_3.png" + } + + assert File.exists?("#{@emoji_path}/test_pack/dir_2/blank_3.png") + end + + test "with empty filename", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "add", + "shortcode" => "blank2", + "filename" => "", + "file" => %Plug.Upload{ + filename: "blank.png", + path: "#{@emoji_path}/test_pack/blank.png" + } + }) + |> json_response(:bad_request) == %{ + "error" => "pack name, shortcode or filename cannot be empty" + } + end + + test "add file with not loaded pack", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/not_loaded/update_file", %{ + "action" => "add", + "shortcode" => "blank2", + "filename" => "dir/blank.png", + "file" => %Plug.Upload{ + filename: "blank.png", + path: "#{@emoji_path}/test_pack/blank.png" + } + }) + |> json_response(:bad_request) == %{ + "error" => "pack \"not_loaded\" is not found" + } + end + + test "remove file with not loaded pack", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/not_loaded/update_file", %{ + "action" => "remove", + "shortcode" => "blank3" + }) + |> json_response(:bad_request) == %{"error" => "pack \"not_loaded\" is not found"} + end + + test "remove file with empty shortcode", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/not_loaded/update_file", %{ + "action" => "remove", + "shortcode" => "" + }) + |> json_response(:bad_request) == %{ + "error" => "pack name or shortcode cannot be empty" + } + end + + test "update file with not loaded pack", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/not_loaded/update_file", %{ + "action" => "update", + "shortcode" => "blank4", + "new_shortcode" => "blank3", + "new_filename" => "dir_2/blank_3.png" + }) + |> json_response(:bad_request) == %{"error" => "pack \"not_loaded\" is not found"} + end + + test "new with shortcode as file with update", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "add", + "shortcode" => "blank4", + "filename" => "dir/blank.png", + "file" => %Plug.Upload{ + filename: "blank.png", + path: "#{@emoji_path}/test_pack/blank.png" + } + }) + |> json_response(200) == %{"blank" => "blank.png", "blank4" => "dir/blank.png"} + + assert File.exists?("#{@emoji_path}/test_pack/dir/blank.png") + + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "update", + "shortcode" => "blank4", + "new_shortcode" => "blank3", + "new_filename" => "dir_2/blank_3.png" + }) + |> json_response(200) == %{"blank3" => "dir_2/blank_3.png", "blank" => "blank.png"} + + refute File.exists?("#{@emoji_path}/test_pack/dir/") + assert File.exists?("#{@emoji_path}/test_pack/dir_2/blank_3.png") + + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "remove", + "shortcode" => "blank3" + }) + |> json_response(200) == %{"blank" => "blank.png"} + + refute File.exists?("#{@emoji_path}/test_pack/dir_2/") + + on_exit(fn -> File.rm_rf!("#{@emoji_path}/test_pack/dir") end) + end + + test "new with shortcode from url", %{admin_conn: admin_conn} do + mock(fn + %{ + method: :get, + url: "https://test-blank/blank_url.png" + } -> + text(File.read!("#{@emoji_path}/test_pack/blank.png")) + end) + + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "add", + "shortcode" => "blank_url", + "file" => "https://test-blank/blank_url.png" + }) + |> json_response(200) == %{ + "blank_url" => "blank_url.png", + "blank" => "blank.png" + } + + assert File.exists?("#{@emoji_path}/test_pack/blank_url.png") + + on_exit(fn -> File.rm_rf!("#{@emoji_path}/test_pack/blank_url.png") end) + end + + test "new without shortcode", %{admin_conn: admin_conn} do + on_exit(fn -> File.rm_rf!("#{@emoji_path}/test_pack/shortcode.png") end) + + assert admin_conn |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ "action" => "add", "file" => %Plug.Upload{ @@ -320,163 +617,176 @@ test "update file without shortcode", %{conn: conn} do path: "#{Pleroma.Config.get([:instance, :static_dir])}/add/shortcode.png" } }) - |> json_response(200) == %{"shortcode" => "shortcode.png"} + |> json_response(200) == %{"shortcode" => "shortcode.png", "blank" => "blank.png"} end - test "updating pack files", %{conn: conn} do - on_exit(fn -> - File.rm_rf!("#{@emoji_dir_path}/test_pack/blank_url.png") - File.rm_rf!("#{@emoji_dir_path}/test_pack/dir") - File.rm_rf!("#{@emoji_dir_path}/test_pack/dir_2") - end) + test "remove non existing shortcode in pack.json", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "remove", + "shortcode" => "blank2" + }) + |> json_response(:bad_request) == %{"error" => "Emoji \"blank2\" does not exist"} + end - same_name = %{ - "action" => "add", - "shortcode" => "blank", - "filename" => "dir/blank.png", - "file" => %Plug.Upload{ - filename: "blank.png", - path: "#{@emoji_dir_path}/test_pack/blank.png" - } - } - - different_name = %{same_name | "shortcode" => "blank_2"} - - assert (conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), same_name) - |> json_response(:conflict))["error"] =~ "already exists" - - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), different_name) - |> json_response(200) == %{"blank_2" => "dir/blank.png"} - - assert File.exists?("#{@emoji_dir_path}/test_pack/dir/blank.png") - - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ + test "update non existing emoji", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ "action" => "update", - "shortcode" => "blank_2", - "new_shortcode" => "blank_3", + "shortcode" => "blank2", + "new_shortcode" => "blank3", "new_filename" => "dir_2/blank_3.png" }) - |> json_response(200) == %{"blank_3" => "dir_2/blank_3.png"} + |> json_response(:bad_request) == %{"error" => "Emoji \"blank2\" does not exist"} + end - refute File.exists?("#{@emoji_dir_path}/test_pack/dir/") - assert File.exists?("#{@emoji_dir_path}/test_pack/dir_2/blank_3.png") - - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ - "action" => "remove", - "shortcode" => "blank_3" + test "update with empty shortcode", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "update", + "shortcode" => "blank", + "new_filename" => "dir_2/blank_3.png" }) - |> json_response(200) == %{"blank_3" => "dir_2/blank_3.png"} - - refute File.exists?("#{@emoji_dir_path}/test_pack/dir_2/") - - mock(fn - %{ - method: :get, - url: "https://test-blank/blank_url.png" - } -> - text(File.read!("#{@emoji_dir_path}/test_pack/blank.png")) - end) - - # The name should be inferred from the URL ending - from_url = %{ - "action" => "add", - "shortcode" => "blank_url", - "file" => "https://test-blank/blank_url.png" - } - - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), from_url) - |> json_response(200) == %{ - "blank_url" => "blank_url.png" + |> json_response(:bad_request) == %{ + "error" => "new_shortcode or new_filename cannot be empty" } + end - assert File.exists?("#{@emoji_dir_path}/test_pack/blank_url.png") - - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ - "action" => "remove", - "shortcode" => "blank_url" + test "undefined action", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "undefined" }) - |> json_response(200) == %{"blank_url" => "blank_url.png"} - - refute File.exists?("#{@emoji_dir_path}/test_pack/blank_url.png") + |> json_response(:bad_request) == %{ + "error" => "Unknown action: undefined" + } end end - test "creating and deleting a pack" do - on_exit(fn -> - File.rm_rf!("#{@emoji_dir_path}/test_created") - end) + describe "PUT /api/pleroma/emoji/packs/:name" do + test "creating and deleting a pack", %{admin_conn: admin_conn} do + assert admin_conn + |> put("/api/pleroma/emoji/packs/test_created") + |> json_response(200) == "ok" - admin = insert(:user, is_admin: true) - %{conn: conn} = oauth_access(["admin:write"], user: admin) + assert File.exists?("#{@emoji_path}/test_created/pack.json") - assert conn - |> put_req_header("content-type", "application/json") - |> put( - emoji_api_path( - conn, - :create, - "test_created" - ) - ) - |> json_response(200) == "ok" + assert Jason.decode!(File.read!("#{@emoji_path}/test_created/pack.json")) == %{ + "pack" => %{}, + "files" => %{} + } - assert File.exists?("#{@emoji_dir_path}/test_created/pack.json") + assert admin_conn + |> delete("/api/pleroma/emoji/packs/test_created") + |> json_response(200) == "ok" - assert Jason.decode!(File.read!("#{@emoji_dir_path}/test_created/pack.json")) == %{ - "pack" => %{}, - "files" => %{} - } + refute File.exists?("#{@emoji_path}/test_created/pack.json") + end - assert conn - |> delete(emoji_api_path(conn, :delete, "test_created")) - |> json_response(200) == "ok" + test "if pack exists", %{admin_conn: admin_conn} do + path = Path.join(@emoji_path, "test_created") + File.mkdir(path) + pack_file = Jason.encode!(%{files: %{}, pack: %{}}) + File.write!(Path.join(path, "pack.json"), pack_file) - refute File.exists?("#{@emoji_dir_path}/test_created/pack.json") + assert admin_conn + |> put("/api/pleroma/emoji/packs/test_created") + |> json_response(:conflict) == %{ + "error" => "A pack named \"test_created\" already exists" + } + + on_exit(fn -> File.rm_rf(path) end) + end + + test "with empty name", %{admin_conn: admin_conn} do + assert admin_conn + |> put("/api/pleroma/emoji/packs/ ") + |> json_response(:bad_request) == %{"error" => "pack name cannot be empty"} + end end - test "filesystem import" do + test "deleting nonexisting pack", %{admin_conn: admin_conn} do + assert admin_conn + |> delete("/api/pleroma/emoji/packs/non_existing") + |> json_response(:not_found) == %{"error" => "Pack non_existing does not exist"} + end + + test "deleting with empty name", %{admin_conn: admin_conn} do + assert admin_conn + |> delete("/api/pleroma/emoji/packs/ ") + |> json_response(:bad_request) == %{"error" => "pack name cannot be empty"} + end + + test "filesystem import", %{admin_conn: admin_conn, conn: conn} do on_exit(fn -> - File.rm!("#{@emoji_dir_path}/test_pack_for_import/emoji.txt") - File.rm!("#{@emoji_dir_path}/test_pack_for_import/pack.json") + File.rm!("#{@emoji_path}/test_pack_for_import/emoji.txt") + File.rm!("#{@emoji_path}/test_pack_for_import/pack.json") end) - conn = build_conn() - resp = conn |> get(emoji_api_path(conn, :list_packs)) |> json_response(200) + resp = conn |> get("/api/pleroma/emoji/packs") |> json_response(200) refute Map.has_key?(resp, "test_pack_for_import") - admin = insert(:user, is_admin: true) - %{conn: conn} = oauth_access(["admin:write"], user: admin) - - assert conn - |> post(emoji_api_path(conn, :import_from_fs)) + assert admin_conn + |> post("/api/pleroma/emoji/packs/import_from_fs") |> json_response(200) == ["test_pack_for_import"] - resp = conn |> get(emoji_api_path(conn, :list_packs)) |> json_response(200) + resp = conn |> get("/api/pleroma/emoji/packs") |> json_response(200) assert resp["test_pack_for_import"]["files"] == %{"blank" => "blank.png"} - File.rm!("#{@emoji_dir_path}/test_pack_for_import/pack.json") - refute File.exists?("#{@emoji_dir_path}/test_pack_for_import/pack.json") + File.rm!("#{@emoji_path}/test_pack_for_import/pack.json") + refute File.exists?("#{@emoji_path}/test_pack_for_import/pack.json") - emoji_txt_content = "blank, blank.png, Fun\n\nblank2, blank.png" + emoji_txt_content = """ + blank, blank.png, Fun + blank2, blank.png + foo, /emoji/test_pack_for_import/blank.png + bar + """ - File.write!("#{@emoji_dir_path}/test_pack_for_import/emoji.txt", emoji_txt_content) + File.write!("#{@emoji_path}/test_pack_for_import/emoji.txt", emoji_txt_content) - assert conn - |> post(emoji_api_path(conn, :import_from_fs)) + assert admin_conn + |> post("/api/pleroma/emoji/packs/import_from_fs") |> json_response(200) == ["test_pack_for_import"] - resp = build_conn() |> get(emoji_api_path(conn, :list_packs)) |> json_response(200) + resp = conn |> get("/api/pleroma/emoji/packs") |> json_response(200) assert resp["test_pack_for_import"]["files"] == %{ "blank" => "blank.png", - "blank2" => "blank.png" + "blank2" => "blank.png", + "foo" => "blank.png" } end + + describe "GET /api/pleroma/emoji/packs/:name" do + test "shows pack.json", %{conn: conn} do + assert %{ + "files" => %{"blank" => "blank.png"}, + "pack" => %{ + "can-download" => true, + "description" => "Test description", + "download-sha256" => _, + "homepage" => "https://pleroma.social", + "license" => "Test license", + "share-files" => true + } + } = + conn + |> get("/api/pleroma/emoji/packs/test_pack") + |> json_response(200) + end + + test "non existing pack", %{conn: conn} do + assert conn + |> get("/api/pleroma/emoji/packs/non_existing") + |> json_response(:not_found) == %{"error" => "Pack non_existing does not exist"} + end + + test "error name", %{conn: conn} do + assert conn + |> get("/api/pleroma/emoji/packs/ ") + |> json_response(:bad_request) == %{"error" => "pack name cannot be empty"} + end + end end From 95759310abb597275335936efa4a59615b16da6e Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Sat, 28 Mar 2020 13:55:17 +0300 Subject: [PATCH 372/581] docs update --- docs/API/pleroma_api.md | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/docs/API/pleroma_api.md b/docs/API/pleroma_api.md index a7c7731ce..49b75f5f9 100644 --- a/docs/API/pleroma_api.md +++ b/docs/API/pleroma_api.md @@ -330,6 +330,13 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa * Params: None * Response: JSON, "ok" and 200 status and the JSON hashmap of "pack name" to "pack contents" +## `GET /api/pleroma/emoji/packs/:name` +### Get pack.json for the pack +* Method `GET` +* Authentication: not required +* Params: None +* Response: JSON, pack json with `files` and `pack` keys with 200 status or 404 if the pack does not exist + ## `PUT /api/pleroma/emoji/packs/:name` ### Creates an empty custom emoji pack * Method `PUT` @@ -349,15 +356,17 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa * Method `POST` * Authentication: required * Params: - * if the `action` is `add`, adds an emoji named `shortcode` to the pack `pack_name`, - that means that the emoji file needs to be uploaded with the request + * if the `action` is `add`, adds an emoji file to the pack `pack_name`, (thus requiring it to be a multipart request) and be named `file`. + If `shortcode` is not specified, `shortcode` will be used from filename. There can also be an optional `filename` that will be the new emoji file name (if it's not there, the name will be taken from the uploaded file). * if the `action` is `update`, changes emoji shortcode - (from `shortcode` to `new_shortcode` or moves the file (from the current filename to `new_filename`) + (from `shortcode` to `new_shortcode` or moves the file (from the current filename to `new_filename`). + If new_shortcode is used in another emoji 409 status will be returned. If you want to override shortcode + pass `force` option with `true` value. * if the `action` is `remove`, removes the emoji named `shortcode` and it's associated file -* Response: JSON, emoji shortcode with filename which was added/updated/deleted and 200 status, 409 if the trying to use a shortcode +* Response: JSON, updated "files" section of the pack and 200 status, 409 if the trying to use a shortcode that is already taken, 400 if there was an error with the shortcode, filename or file (additional info in the "error" part of the response JSON) @@ -385,7 +394,7 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa * Method `POST` * Authentication: required * Params: - * `instance_address`: the address of the instance to download from + * `instance_address`: the address of the instance to get packs from * Response: JSON with the pack list, same as if the request was made to that instance's list endpoint directly + 200 status From f3070ddae5f4f7deda8365158e3750e5a575c222 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Sat, 28 Mar 2020 15:00:48 +0300 Subject: [PATCH 373/581] removing entry from changelog --- CHANGELOG.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a220c14f6..a8589bbdc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -125,14 +125,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
API Changes -- **Breaking:** EmojiReactions: Change endpoints and responses to align with Mastodon -- **Breaking:** Admin API: `PATCH /api/pleroma/admin/users/:nickname/force_password_reset` is now `PATCH /api/pleroma/admin/users/force_password_reset` (accepts `nicknames` array in the request body) +- **Breaking** EmojiReactions: Change endpoints and responses to align with Mastodon +- **Breaking** Admin API: `PATCH /api/pleroma/admin/users/:nickname/force_password_reset` is now `PATCH /api/pleroma/admin/users/force_password_reset` (accepts `nicknames` array in the request body) - **Breaking:** Admin API: Return link alongside with token on password reset - **Breaking:** Admin API: `PUT /api/pleroma/admin/reports/:id` is now `PATCH /api/pleroma/admin/reports`, see admin_api.md for details - **Breaking:** `/api/pleroma/admin/users/invite_token` now uses `POST`, changed accepted params and returns full invite in json instead of only token string. -- **Breaking:** replying to reports is now "report notes", endpoint changed from `POST /api/pleroma/admin/reports/:id/respond` to `POST /api/pleroma/admin/reports/:id/notes` +- **Breaking** replying to reports is now "report notes", endpoint changed from `POST /api/pleroma/admin/reports/:id/respond` to `POST /api/pleroma/admin/reports/:id/notes` - Mastodon API: stopped sanitizing display names, field names and subject fields since they are supposed to be treated as plaintext -- **Breaking:** Pleroma API: `/api/pleroma/emoji/packs/:name/update_file` endpoint returns only updated emoji data. - Admin API: Return `total` when querying for reports - Mastodon API: Return `pleroma.direct_conversation_id` when creating a direct message (`POST /api/v1/statuses`) - Admin API: Return link alongside with token on password reset From ddb757f7434c7216eec1b6ba4fa8b0b7a54157c1 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Sat, 28 Mar 2020 21:15:14 +0300 Subject: [PATCH 374/581] emoji api packs changes in routes with docs update --- docs/API/pleroma_api.md | 114 ++++---- lib/pleroma/emoji/pack.ex | 26 +- .../controllers/emoji_api_controller.ex | 170 ++++-------- lib/pleroma/web/router.ex | 23 +- .../controllers/emoji_api_controller_test.exs | 254 +++++++----------- 5 files changed, 231 insertions(+), 356 deletions(-) diff --git a/docs/API/pleroma_api.md b/docs/API/pleroma_api.md index 49b75f5f9..65d22980b 100644 --- a/docs/API/pleroma_api.md +++ b/docs/API/pleroma_api.md @@ -323,27 +323,47 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa * Params: None * Response: JSON, returns a list of Mastodon Conversation entities that were marked as read (200 - healthy, 503 unhealthy). -## `GET /api/pleroma/emoji/packs` -### Lists the custom emoji packs on the server +## `GET /api/pleroma/emoji/packs/import` +### Imports packs from filesystem * Method `GET` -* Authentication: not required +* Authentication: required * Params: None -* Response: JSON, "ok" and 200 status and the JSON hashmap of "pack name" to "pack contents" +* Response: JSON, returns a list of imported packs. -## `GET /api/pleroma/emoji/packs/:name` -### Get pack.json for the pack +## `GET /api/pleroma/emoji/packs/remote` +### Make request to another instance for packs list * Method `GET` -* Authentication: not required -* Params: None -* Response: JSON, pack json with `files` and `pack` keys with 200 status or 404 if the pack does not exist +* Authentication: required +* Params: + * `url`: url of the instance to get packs from +* Response: JSON with the pack list, hashmap with pack name and pack contents -## `PUT /api/pleroma/emoji/packs/:name` -### Creates an empty custom emoji pack -* Method `PUT` +## `POST /api/pleroma/emoji/packs/download` +### Download pack from another instance +* Method `POST` +* Authentication: required +* Params: + * `url`: url of the instance to download from + * `name`: pack to download from that instance +* Response: JSON, "ok" with 200 status if the pack was downloaded, or 500 if there were + errors downloading the pack + +## `POST /api/pleroma/emoji/packs/:name` +### Creates an empty pack +* Method `POST` * Authentication: required * Params: None * Response: JSON, "ok" and 200 status or 409 if the pack with that name already exists +## `PATCH /api/pleroma/emoji/packs/:name` +### Updates (replaces) pack metadata +* Method `POST` +* Authentication: required +* Params: + * `metadata`: metadata to replace the old one +* Response: JSON, updated "metadata" section of the pack and 200 status or 400 if there was a + problem with the new metadata (the error is specified in the "error" part of the response JSON) + ## `DELETE /api/pleroma/emoji/packs/:name` ### Delete a custom emoji pack * Method `DELETE` @@ -351,54 +371,50 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa * Params: None * Response: JSON, "ok" and 200 status or 500 if there was an error deleting the pack -## `POST /api/pleroma/emoji/packs/:name/update_file` -### Update a file in a custom emoji pack +## `POST /api/pleroma/emoji/packs/:name/files` +### Add new file to the pack * Method `POST` * Authentication: required * Params: - * if the `action` is `add`, adds an emoji file to the pack `pack_name`, - (thus requiring it to be a multipart request) and be named `file`. - If `shortcode` is not specified, `shortcode` will be used from filename. - There can also be an optional `filename` that will be the new emoji file name - (if it's not there, the name will be taken from the uploaded file). - * if the `action` is `update`, changes emoji shortcode - (from `shortcode` to `new_shortcode` or moves the file (from the current filename to `new_filename`). - If new_shortcode is used in another emoji 409 status will be returned. If you want to override shortcode - pass `force` option with `true` value. - * if the `action` is `remove`, removes the emoji named `shortcode` and it's associated file -* Response: JSON, updated "files" section of the pack and 200 status, 409 if the trying to use a shortcode - that is already taken, 400 if there was an error with the shortcode, filename or file (additional info - in the "error" part of the response JSON) + * `file`: uploaded file or link to remote file. + * `shortcode`: (*optional*) shortcode for new emoji, must be uniq for all emoji. If not sended, shortcode will be taken from original filename. + * `filename`: (*optional*) new emoji file name. If not specified will be taken from original filename. +* Response: JSON, list of files for updated pack (hasmap -> shortcode => filename) with status 200, either error status with error message. -## `POST /api/pleroma/emoji/packs/:name/update_metadata` -### Updates (replaces) pack metadata -* Method `POST` +## `PATCH /api/pleroma/emoji/packs/:name/files` +### Update emoji file from pack +* Method `PATCH` * Authentication: required * Params: - * `new_data`: new metadata to replace the old one -* Response: JSON, updated "metadata" section of the pack and 200 status or 400 if there was a - problem with the new metadata (the error is specified in the "error" part of the response JSON) + * `shortcode`: emoji file shortcode + * `new_shortcode`: new emoji file shortcode + * `new_filename`: new filename for emoji file + * `force`: (*optional*) with true value to overwrite existing emoji with new shortcode +* Response: JSON, list with updated files for updated pack (hasmap -> shortcode => filename) with status 200, either error status with error message. -## `POST /api/pleroma/emoji/packs/download_from` -### Requests the instance to download the pack from another instance -* Method `POST` +## `DELETE /api/pleroma/emoji/packs/:name/files` +### Delete emoji file from pack +* Method `DELETE` * Authentication: required * Params: - * `instance_address`: the address of the instance to download from - * `pack_name`: the pack to download from that instance -* Response: JSON, "ok" and 200 status if the pack was downloaded, or 500 if there were - errors downloading the pack + * `shortcode`: emoji file shortcode +* Response: JSON, list with updated files for updated pack (hasmap -> shortcode => filename) with status 200, either error status with error message. -## `POST /api/pleroma/emoji/packs/list_from` -### Requests the instance to list the packs from another instance -* Method `POST` -* Authentication: required -* Params: - * `instance_address`: the address of the instance to get packs from -* Response: JSON with the pack list, same as if the request was made to that instance's - list endpoint directly + 200 status +## `GET /api/pleroma/emoji/packs` +### Lists local custom emoji packs +* Method `GET` +* Authentication: not required +* Params: None +* Response: JSON, "ok" and 200 status and the JSON hashmap of pack name to pack contents -## `GET /api/pleroma/emoji/packs/:name/download_shared` +## `GET /api/pleroma/emoji/packs/:name` +### Get pack.json for the pack +* Method `GET` +* Authentication: not required +* Params: None +* Response: JSON, pack json with `files` and `pack` keys with 200 status or 404 if the pack does not exist + +## `GET /api/pleroma/emoji/packs/:name/archive` ### Requests a local pack from the instance * Method `GET` * Authentication: not required diff --git a/lib/pleroma/emoji/pack.ex b/lib/pleroma/emoji/pack.ex index 21ed12c78..eb50e52fa 100644 --- a/lib/pleroma/emoji/pack.ex +++ b/lib/pleroma/emoji/pack.ex @@ -102,9 +102,9 @@ defp create_subdirs(file_path) do end end - @spec remove_file(String.t(), String.t()) :: + @spec delete_file(String.t(), String.t()) :: {:ok, t()} | {:error, File.posix()} | {:error, :empty_values} - def remove_file(name, shortcode) when byte_size(name) > 0 and byte_size(shortcode) > 0 do + def delete_file(name, shortcode) when byte_size(name) > 0 and byte_size(shortcode) > 0 do with {_, %__MODULE__{} = pack} <- {:loaded, load_pack(name)}, {_, {filename, files}} when not is_nil(filename) <- {:exists, Map.pop(pack.files, shortcode)}, @@ -131,7 +131,7 @@ def remove_file(name, shortcode) when byte_size(name) > 0 and byte_size(shortcod end end - def remove_file(_, _), do: {:error, :empty_values} + def delete_file(_, _), do: {:error, :empty_values} @spec update_file(String.t(), String.t(), String.t(), String.t(), boolean()) :: {:ok, t()} | {:error, File.posix()} | {:error, :empty_values} @@ -249,8 +249,8 @@ defp files_from_path(path) do end end - @spec list_remote_packs(String.t()) :: {:ok, map()} - def list_remote_packs(url) do + @spec list_remote(String.t()) :: {:ok, map()} + def list_remote(url) do uri = url |> String.trim() @@ -269,8 +269,8 @@ def list_remote_packs(url) do end end - @spec list_local_packs() :: {:ok, map()} - def list_local_packs do + @spec list_local() :: {:ok, map()} + def list_local do emoji_path = emoji_path() # Create the directory first if it does not exist. This is probably the first request made @@ -315,8 +315,8 @@ defp downloadable?(pack) do end) end - @spec download(String.t()) :: {:ok, binary()} - def download(name) do + @spec get_archive(String.t()) :: {:ok, binary()} + def get_archive(name) do with {_, %__MODULE__{} = pack} <- {:exists?, load_pack(name)}, {_, true} <- {:can_download?, downloadable?(pack)} do {:ok, fetch_archive(pack)} @@ -356,15 +356,14 @@ defp create_archive_and_cache(pack, hash) do result end - @spec download_from_source(String.t(), String.t(), String.t()) :: :ok - def download_from_source(name, url, as) do + @spec download(String.t(), String.t(), String.t()) :: :ok + def download(name, url, as) do uri = url |> String.trim() |> URI.parse() with {_, true} <- {:shareable, shareable_packs_available?(uri)} do - # TODO: why do we load all packs, if we know the name of pack we need remote_pack = uri |> URI.merge("/api/pleroma/emoji/packs/#{name}") @@ -379,8 +378,7 @@ def download_from_source(name, url, as) do {:ok, %{ sha: sha, - url: - URI.merge(uri, "/api/pleroma/emoji/packs/#{name}/download_shared") |> to_string() + url: URI.merge(uri, "/api/pleroma/emoji/packs/#{name}/archive") |> to_string() }} %{"fallback-src" => src, "fallback-src-sha256" => sha} when is_binary(src) -> diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex index 9fa857474..83a7f03e8 100644 --- a/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex @@ -7,12 +7,15 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIController do Pleroma.Plugs.OAuthScopesPlug, %{scopes: ["write"], admin: true} when action in [ + :import, + :remote, + :download, :create, + :update, :delete, - :download_from, - :import_from_fs, + :add_file, :update_file, - :update_metadata + :delete_file ] ) @@ -22,14 +25,8 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIController do when action in [:download_shared, :list_packs, :list_from] ) - @doc """ - Lists packs from the remote instance. - - Since JS cannot ask remote instances for their packs due to CPS, it has to - be done by the server - """ - def list_from(conn, %{"instance_address" => address}) do - with {:ok, packs} <- Pack.list_remote_packs(address) do + def remote(conn, %{"url" => url}) do + with {:ok, packs} <- Pack.list_remote(url) do json(conn, packs) else {:shareable, _} -> @@ -39,20 +36,14 @@ def list_from(conn, %{"instance_address" => address}) do end end - @doc """ - Lists the packs available on the instance as JSON. - - The information is public and does not require authentication. The format is - a map of "pack directory name" to pack.json contents. - """ - def list_packs(conn, _params) do + def list(conn, _params) do emoji_path = Path.join( Pleroma.Config.get!([:instance, :static_dir]), "emoji" ) - with {:ok, packs} <- Pack.list_local_packs() do + with {:ok, packs} <- Pack.list_local() do json(conn, packs) else {:create_dir, {:error, e}} -> @@ -87,12 +78,8 @@ def show(conn, %{"name" => name}) do end end - @doc """ - An endpoint for other instances (via admin UI) or users (via browser) - to download packs that the instance shares. - """ - def download_shared(conn, %{"name" => name}) do - with {:ok, archive} <- Pack.download(name) do + def archive(conn, %{"name" => name}) do + with {:ok, archive} <- Pack.get_archive(name) do send_download(conn, {:binary, archive}, filename: "#{name}.zip") else {:can_download?, _} -> @@ -110,15 +97,8 @@ def download_shared(conn, %{"name" => name}) do end end - @doc """ - An admin endpoint to request downloading and storing a pack named `pack_name` from the instance - `instance_address`. - - If the requested instance's admin chose to share the pack, it will be downloaded - from that instance, otherwise it will be downloaded from the fallback source, if there is one. - """ - def download_from(conn, %{"instance_address" => address, "pack_name" => name} = params) do - with :ok <- Pack.download_from_source(name, address, params["as"]) do + def download(conn, %{"url" => url, "name" => name} = params) do + with :ok <- Pack.download(name, url, params["as"]) do json(conn, "ok") else {:shareable, _} -> @@ -138,9 +118,6 @@ def download_from(conn, %{"instance_address" => address, "pack_name" => name} = end end - @doc """ - Creates an empty pack named `name` which then can be updated via the admin UI. - """ def create(conn, %{"name" => name}) do name = String.trim(name) @@ -166,9 +143,6 @@ def create(conn, %{"name" => name}) do end end - @doc """ - Deletes the pack `name` and all it's files. - """ def delete(conn, %{"name" => name}) do name = String.trim(name) @@ -192,13 +166,8 @@ def delete(conn, %{"name" => name}) do end end - @doc """ - An endpoint to update `pack_names`'s metadata. - - `new_data` is the new metadata for the pack, that will replace the old metadata. - """ - def update_metadata(conn, %{"pack_name" => name, "new_data" => new_data}) do - with {:ok, pack} <- Pack.update_metadata(name, new_data) do + def update(conn, %{"name" => name, "metadata" => metadata}) do + with {:ok, pack} <- Pack.update_metadata(name, metadata) do json(conn, pack.pack) else {:has_all_files?, _} -> @@ -215,30 +184,11 @@ def update_metadata(conn, %{"pack_name" => name, "new_data" => new_data}) do end end - @doc """ - Updates a file in a pack. - - Updating can mean three things: - - - `add` adds an emoji named `shortcode` to the pack `pack_name`, - that means that the emoji file needs to be uploaded with the request - (thus requiring it to be a multipart request) and be named `file`. - There can also be an optional `filename` that will be the new emoji file name - (if it's not there, the name will be taken from the uploaded file). - - `update` changes emoji shortcode (from `shortcode` to `new_shortcode` or moves the file - (from the current filename to `new_filename`) - - `remove` removes the emoji named `shortcode` and it's associated file - """ - - # Add - def update_file( - conn, - %{"pack_name" => pack_name, "action" => "add"} = params - ) do + def add_file(conn, %{"name" => name} = params) do filename = params["filename"] || get_filename(params["file"]) shortcode = params["shortcode"] || Path.basename(filename, Path.extname(filename)) - with {:ok, pack} <- Pack.add_file(pack_name, shortcode, filename, params["file"]) do + with {:ok, pack} <- Pack.add_file(name, shortcode, filename, params["file"]) do json(conn, pack.files) else {:exists, _} -> @@ -249,7 +199,7 @@ def update_file( {:loaded, _} -> conn |> put_status(:bad_request) - |> json(%{error: "pack \"#{pack_name}\" is not found"}) + |> json(%{error: "pack \"#{name}\" is not found"}) {:error, :empty_values} -> conn @@ -265,44 +215,7 @@ def update_file( end end - # Remove - def update_file(conn, %{ - "pack_name" => pack_name, - "action" => "remove", - "shortcode" => shortcode - }) do - with {:ok, pack} <- Pack.remove_file(pack_name, shortcode) do - json(conn, pack.files) - else - {:exists, _} -> - conn - |> put_status(:bad_request) - |> json(%{error: "Emoji \"#{shortcode}\" does not exist"}) - - {:loaded, _} -> - conn - |> put_status(:bad_request) - |> json(%{error: "pack \"#{pack_name}\" is not found"}) - - {:error, :empty_values} -> - conn - |> put_status(:bad_request) - |> json(%{error: "pack name or shortcode cannot be empty"}) - - {:error, _} -> - render_error( - conn, - :internal_server_error, - "Unexpected error occurred while removing file from pack." - ) - end - end - - # Update - def update_file( - conn, - %{"pack_name" => name, "action" => "update", "shortcode" => shortcode} = params - ) do + def update_file(conn, %{"name" => name, "shortcode" => shortcode} = params) do new_shortcode = params["new_shortcode"] new_filename = params["new_filename"] force = params["force"] == true @@ -342,24 +255,35 @@ def update_file( end end - def update_file(conn, %{"action" => action}) do - conn - |> put_status(:bad_request) - |> json(%{error: "Unknown action: #{action}"}) + def delete_file(conn, %{"name" => name, "shortcode" => shortcode}) do + with {:ok, pack} <- Pack.delete_file(name, shortcode) do + json(conn, pack.files) + else + {:exists, _} -> + conn + |> put_status(:bad_request) + |> json(%{error: "Emoji \"#{shortcode}\" does not exist"}) + + {:loaded, _} -> + conn + |> put_status(:bad_request) + |> json(%{error: "pack \"#{name}\" is not found"}) + + {:error, :empty_values} -> + conn + |> put_status(:bad_request) + |> json(%{error: "pack name or shortcode cannot be empty"}) + + {:error, _} -> + render_error( + conn, + :internal_server_error, + "Unexpected error occurred while removing file from pack." + ) + end end - @doc """ - Imports emoji from the filesystem. - - Importing means checking all the directories in the - `$instance_static/emoji/` for directories which do not have - `pack.json`. If one has an emoji.txt file, that file will be used - to create a `pack.json` file with it's contents. If the directory has - neither, all the files with specific configured extenstions will be - assumed to be emojis and stored in the new `pack.json` file. - """ - - def import_from_fs(conn, _params) do + def import_from_filesystem(conn, _params) do with {:ok, names} <- Pack.import_from_filesystem() do json(conn, names) else diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 0fcb517cf..a7e1f2f57 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -214,25 +214,24 @@ defmodule Pleroma.Web.Router do scope "/packs" do pipe_through(:admin_api) - post("/import_from_fs", EmojiAPIController, :import_from_fs) - post("/:pack_name/update_file", EmojiAPIController, :update_file) - post("/:pack_name/update_metadata", EmojiAPIController, :update_metadata) - put("/:name", EmojiAPIController, :create) + get("/import", EmojiAPIController, :import_from_filesystem) + get("/remote", EmojiAPIController, :remote) + post("/download", EmojiAPIController, :download) + + post("/:name", EmojiAPIController, :create) + patch("/:name", EmojiAPIController, :update) delete("/:name", EmojiAPIController, :delete) - # Note: /download_from downloads and saves to instance, not to requester - post("/download_from", EmojiAPIController, :download_from) + post("/:name/files", EmojiAPIController, :add_file) + patch("/:name/files", EmojiAPIController, :update_file) + delete("/:name/files", EmojiAPIController, :delete_file) end # Pack info / downloading scope "/packs" do - get("/", EmojiAPIController, :list_packs) + get("/", EmojiAPIController, :list) get("/:name", EmojiAPIController, :show) - get("/:name/download_shared/", EmojiAPIController, :download_shared) - get("/list_from", EmojiAPIController, :list_from) - - # Deprecated: POST /api/pleroma/emoji/packs/list_from (use GET instead) - post("/list_from", EmojiAPIController, :list_from) + get("/:name/archive", EmojiAPIController, :archive) end end diff --git a/test/web/pleroma_api/controllers/emoji_api_controller_test.exs b/test/web/pleroma_api/controllers/emoji_api_controller_test.exs index 6a0d7dd11..d343256fe 100644 --- a/test/web/pleroma_api/controllers/emoji_api_controller_test.exs +++ b/test/web/pleroma_api/controllers/emoji_api_controller_test.exs @@ -41,7 +41,7 @@ test "GET /api/pleroma/emoji/packs", %{conn: conn} do assert non_shared["pack"]["can-download"] == false end - describe "POST /api/pleroma/emoji/packs/list_from" do + describe "GET /api/pleroma/emoji/packs/remote" do test "shareable instance", %{admin_conn: admin_conn, conn: conn} do resp = conn @@ -60,8 +60,8 @@ test "shareable instance", %{admin_conn: admin_conn, conn: conn} do end) assert admin_conn - |> post("/api/pleroma/emoji/packs/list_from", %{ - instance_address: "https://example.com" + |> get("/api/pleroma/emoji/packs/remote", %{ + url: "https://example.com" }) |> json_response(200) == resp end @@ -76,20 +76,18 @@ test "non shareable instance", %{admin_conn: admin_conn} do end) assert admin_conn - |> post("/api/pleroma/emoji/packs/list_from", %{ - instance_address: "https://example.com" - }) + |> get("/api/pleroma/emoji/packs/remote", %{url: "https://example.com"}) |> json_response(500) == %{ "error" => "The requested instance does not support sharing emoji packs" } end end - describe "GET /api/pleroma/emoji/packs/:name/download_shared" do + describe "GET /api/pleroma/emoji/packs/:name/archive" do test "download shared pack", %{conn: conn} do resp = conn - |> get("/api/pleroma/emoji/packs/test_pack/download_shared") + |> get("/api/pleroma/emoji/packs/test_pack/archive") |> response(200) {:ok, arch} = :zip.unzip(resp, [:memory]) @@ -100,7 +98,7 @@ test "download shared pack", %{conn: conn} do test "non existing pack", %{conn: conn} do assert conn - |> get("/api/pleroma/emoji/packs/test_pack_for_import/download_shared") + |> get("/api/pleroma/emoji/packs/test_pack_for_import/archive") |> json_response(:not_found) == %{ "error" => "Pack test_pack_for_import does not exist" } @@ -108,7 +106,7 @@ test "non existing pack", %{conn: conn} do test "non downloadable pack", %{conn: conn} do assert conn - |> get("/api/pleroma/emoji/packs/test_pack_nonshared/download_shared") + |> get("/api/pleroma/emoji/packs/test_pack_nonshared/archive") |> json_response(:forbidden) == %{ "error" => "Pack test_pack_nonshared cannot be downloaded from this instance, either pack sharing was disabled for this pack or some files are missing" @@ -116,7 +114,7 @@ test "non downloadable pack", %{conn: conn} do end end - describe "POST /api/pleroma/emoji/packs/download_from" do + describe "POST /api/pleroma/emoji/packs/download" do test "shared pack from remote and non shared from fallback-src", %{ admin_conn: admin_conn, conn: conn @@ -139,10 +137,10 @@ test "shared pack from remote and non shared from fallback-src", %{ %{ method: :get, - url: "https://example.com/api/pleroma/emoji/packs/test_pack/download_shared" + url: "https://example.com/api/pleroma/emoji/packs/test_pack/archive" } -> conn - |> get("/api/pleroma/emoji/packs/test_pack/download_shared") + |> get("/api/pleroma/emoji/packs/test_pack/archive") |> response(200) |> text() @@ -163,9 +161,9 @@ test "shared pack from remote and non shared from fallback-src", %{ end) assert admin_conn - |> post("/api/pleroma/emoji/packs/download_from", %{ - instance_address: "https://example.com", - pack_name: "test_pack", + |> post("/api/pleroma/emoji/packs/download", %{ + url: "https://example.com", + name: "test_pack", as: "test_pack2" }) |> json_response(200) == "ok" @@ -181,10 +179,10 @@ test "shared pack from remote and non shared from fallback-src", %{ assert admin_conn |> post( - "/api/pleroma/emoji/packs/download_from", + "/api/pleroma/emoji/packs/download", %{ - instance_address: "https://example.com", - pack_name: "test_pack_nonshared", + url: "https://example.com", + name: "test_pack_nonshared", as: "test_pack_nonshared2" } ) @@ -211,10 +209,10 @@ test "nonshareable instance", %{admin_conn: admin_conn} do assert admin_conn |> post( - "/api/pleroma/emoji/packs/download_from", + "/api/pleroma/emoji/packs/download", %{ - instance_address: "https://old-instance", - pack_name: "test_pack", + url: "https://old-instance", + name: "test_pack", as: "test_pack2" } ) @@ -242,7 +240,7 @@ test "checksum fail", %{admin_conn: admin_conn} do %{ method: :get, - url: "https://example.com/api/pleroma/emoji/packs/pack_bad_sha/download_shared" + url: "https://example.com/api/pleroma/emoji/packs/pack_bad_sha/archive" } -> %Tesla.Env{ status: 200, @@ -251,9 +249,9 @@ test "checksum fail", %{admin_conn: admin_conn} do end) assert admin_conn - |> post("/api/pleroma/emoji/packs/download_from", %{ - instance_address: "https://example.com", - pack_name: "pack_bad_sha", + |> post("/api/pleroma/emoji/packs/download", %{ + url: "https://example.com", + name: "pack_bad_sha", as: "pack_bad_sha2" }) |> json_response(:internal_server_error) == %{ @@ -275,23 +273,14 @@ test "other error", %{admin_conn: admin_conn} do } -> %Tesla.Env{ status: 200, - body: %{"test_pack" => Pleroma.Emoji.Pack.load_pack("test_pack")} |> Jason.encode!() - } - - %{ - method: :get, - url: "https://example.com/api/pleroma/emoji/packs/test_pack/download_shared" - } -> - %Tesla.Env{ - status: 200, - body: File.read!("test/instance_static/emoji/test_pack/pack.json") + body: Pleroma.Emoji.Pack.load_pack("test_pack") |> Jason.encode!() } end) assert admin_conn - |> post("/api/pleroma/emoji/packs/download_from", %{ - instance_address: "https://example.com", - pack_name: "test_pack", + |> post("/api/pleroma/emoji/packs/download", %{ + url: "https://example.com", + name: "test_pack", as: "test_pack2" }) |> json_response(:internal_server_error) == %{ @@ -301,7 +290,7 @@ test "other error", %{admin_conn: admin_conn} do end end - describe "updating pack metadata" do + describe "PATCH /api/pleroma/emoji/packs/:name" do setup do pack_file = "#{@emoji_path}/test_pack/pack.json" original_content = File.read!(pack_file) @@ -322,12 +311,7 @@ test "other error", %{admin_conn: admin_conn} do test "for a pack without a fallback source", ctx do assert ctx[:admin_conn] - |> post( - "/api/pleroma/emoji/packs/test_pack/update_metadata", - %{ - "new_data" => ctx[:new_data] - } - ) + |> patch("/api/pleroma/emoji/packs/test_pack", %{"metadata" => ctx[:new_data]}) |> json_response(200) == ctx[:new_data] assert Jason.decode!(File.read!(ctx[:pack_file]))["pack"] == ctx[:new_data] @@ -352,12 +336,7 @@ test "for a pack with a fallback source", ctx do ) assert ctx[:admin_conn] - |> post( - "/api/pleroma/emoji/packs/test_pack/update_metadata", - %{ - "new_data" => new_data - } - ) + |> patch("/api/pleroma/emoji/packs/test_pack", %{metadata: new_data}) |> json_response(200) == new_data_with_sha assert Jason.decode!(File.read!(ctx[:pack_file]))["pack"] == new_data_with_sha @@ -376,19 +355,14 @@ test "when the fallback source doesn't have all the files", ctx do new_data = Map.put(ctx[:new_data], "fallback-src", "https://nonshared-pack") assert ctx[:admin_conn] - |> post( - "/api/pleroma/emoji/packs/test_pack/update_metadata", - %{ - "new_data" => new_data - } - ) + |> patch("/api/pleroma/emoji/packs/test_pack", %{metadata: new_data}) |> json_response(:bad_request) == %{ "error" => "The fallback archive does not have all files specified in pack.json" } end end - describe "POST /api/pleroma/emoji/packs/:pack_name/update_file" do + describe "POST/PATCH/DELETE /api/pleroma/emoji/packs/:name/files" do setup do pack_file = "#{@emoji_path}/test_pack/pack.json" original_content = File.read!(pack_file) @@ -402,11 +376,10 @@ test "when the fallback source doesn't have all the files", ctx do test "create shortcode exists", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "add", - "shortcode" => "blank", - "filename" => "dir/blank.png", - "file" => %Plug.Upload{ + |> post("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank", + filename: "dir/blank.png", + file: %Plug.Upload{ filename: "blank.png", path: "#{@emoji_path}/test_pack/blank.png" } @@ -420,11 +393,10 @@ test "don't rewrite old emoji", %{admin_conn: admin_conn} do on_exit(fn -> File.rm_rf!("#{@emoji_path}/test_pack/dir/") end) assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "add", - "shortcode" => "blank2", - "filename" => "dir/blank.png", - "file" => %Plug.Upload{ + |> post("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank2", + filename: "dir/blank.png", + file: %Plug.Upload{ filename: "blank.png", path: "#{@emoji_path}/test_pack/blank.png" } @@ -434,11 +406,10 @@ test "don't rewrite old emoji", %{admin_conn: admin_conn} do assert File.exists?("#{@emoji_path}/test_pack/dir/blank.png") assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "update", - "shortcode" => "blank", - "new_shortcode" => "blank2", - "new_filename" => "dir_2/blank_3.png" + |> patch("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank", + new_shortcode: "blank2", + new_filename: "dir_2/blank_3.png" }) |> json_response(:conflict) == %{ "error" => @@ -450,11 +421,10 @@ test "rewrite old emoji with force option", %{admin_conn: admin_conn} do on_exit(fn -> File.rm_rf!("#{@emoji_path}/test_pack/dir_2/") end) assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "add", - "shortcode" => "blank2", - "filename" => "dir/blank.png", - "file" => %Plug.Upload{ + |> post("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank2", + filename: "dir/blank.png", + file: %Plug.Upload{ filename: "blank.png", path: "#{@emoji_path}/test_pack/blank.png" } @@ -464,12 +434,11 @@ test "rewrite old emoji with force option", %{admin_conn: admin_conn} do assert File.exists?("#{@emoji_path}/test_pack/dir/blank.png") assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "update", - "shortcode" => "blank2", - "new_shortcode" => "blank3", - "new_filename" => "dir_2/blank_3.png", - "force" => true + |> patch("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank2", + new_shortcode: "blank3", + new_filename: "dir_2/blank_3.png", + force: true }) |> json_response(200) == %{ "blank" => "blank.png", @@ -481,11 +450,10 @@ test "rewrite old emoji with force option", %{admin_conn: admin_conn} do test "with empty filename", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "add", - "shortcode" => "blank2", - "filename" => "", - "file" => %Plug.Upload{ + |> post("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank2", + filename: "", + file: %Plug.Upload{ filename: "blank.png", path: "#{@emoji_path}/test_pack/blank.png" } @@ -497,11 +465,10 @@ test "with empty filename", %{admin_conn: admin_conn} do test "add file with not loaded pack", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/not_loaded/update_file", %{ - "action" => "add", - "shortcode" => "blank2", - "filename" => "dir/blank.png", - "file" => %Plug.Upload{ + |> post("/api/pleroma/emoji/packs/not_loaded/files", %{ + shortcode: "blank2", + filename: "dir/blank.png", + file: %Plug.Upload{ filename: "blank.png", path: "#{@emoji_path}/test_pack/blank.png" } @@ -513,19 +480,13 @@ test "add file with not loaded pack", %{admin_conn: admin_conn} do test "remove file with not loaded pack", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/not_loaded/update_file", %{ - "action" => "remove", - "shortcode" => "blank3" - }) + |> delete("/api/pleroma/emoji/packs/not_loaded/files", %{shortcode: "blank3"}) |> json_response(:bad_request) == %{"error" => "pack \"not_loaded\" is not found"} end test "remove file with empty shortcode", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/not_loaded/update_file", %{ - "action" => "remove", - "shortcode" => "" - }) + |> delete("/api/pleroma/emoji/packs/not_loaded/files", %{shortcode: ""}) |> json_response(:bad_request) == %{ "error" => "pack name or shortcode cannot be empty" } @@ -533,22 +494,20 @@ test "remove file with empty shortcode", %{admin_conn: admin_conn} do test "update file with not loaded pack", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/not_loaded/update_file", %{ - "action" => "update", - "shortcode" => "blank4", - "new_shortcode" => "blank3", - "new_filename" => "dir_2/blank_3.png" + |> patch("/api/pleroma/emoji/packs/not_loaded/files", %{ + shortcode: "blank4", + new_shortcode: "blank3", + new_filename: "dir_2/blank_3.png" }) |> json_response(:bad_request) == %{"error" => "pack \"not_loaded\" is not found"} end test "new with shortcode as file with update", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "add", - "shortcode" => "blank4", - "filename" => "dir/blank.png", - "file" => %Plug.Upload{ + |> post("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank4", + filename: "dir/blank.png", + file: %Plug.Upload{ filename: "blank.png", path: "#{@emoji_path}/test_pack/blank.png" } @@ -558,11 +517,10 @@ test "new with shortcode as file with update", %{admin_conn: admin_conn} do assert File.exists?("#{@emoji_path}/test_pack/dir/blank.png") assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "update", - "shortcode" => "blank4", - "new_shortcode" => "blank3", - "new_filename" => "dir_2/blank_3.png" + |> patch("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank4", + new_shortcode: "blank3", + new_filename: "dir_2/blank_3.png" }) |> json_response(200) == %{"blank3" => "dir_2/blank_3.png", "blank" => "blank.png"} @@ -570,10 +528,7 @@ test "new with shortcode as file with update", %{admin_conn: admin_conn} do assert File.exists?("#{@emoji_path}/test_pack/dir_2/blank_3.png") assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "remove", - "shortcode" => "blank3" - }) + |> delete("/api/pleroma/emoji/packs/test_pack/files", %{shortcode: "blank3"}) |> json_response(200) == %{"blank" => "blank.png"} refute File.exists?("#{@emoji_path}/test_pack/dir_2/") @@ -591,10 +546,9 @@ test "new with shortcode from url", %{admin_conn: admin_conn} do end) assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "add", - "shortcode" => "blank_url", - "file" => "https://test-blank/blank_url.png" + |> post("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank_url", + file: "https://test-blank/blank_url.png" }) |> json_response(200) == %{ "blank_url" => "blank_url.png", @@ -610,9 +564,8 @@ test "new without shortcode", %{admin_conn: admin_conn} do on_exit(fn -> File.rm_rf!("#{@emoji_path}/test_pack/shortcode.png") end) assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "add", - "file" => %Plug.Upload{ + |> post("/api/pleroma/emoji/packs/test_pack/files", %{ + file: %Plug.Upload{ filename: "shortcode.png", path: "#{Pleroma.Config.get([:instance, :static_dir])}/add/shortcode.png" } @@ -622,51 +575,36 @@ test "new without shortcode", %{admin_conn: admin_conn} do test "remove non existing shortcode in pack.json", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "remove", - "shortcode" => "blank2" - }) + |> delete("/api/pleroma/emoji/packs/test_pack/files", %{shortcode: "blank2"}) |> json_response(:bad_request) == %{"error" => "Emoji \"blank2\" does not exist"} end test "update non existing emoji", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "update", - "shortcode" => "blank2", - "new_shortcode" => "blank3", - "new_filename" => "dir_2/blank_3.png" + |> patch("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank2", + new_shortcode: "blank3", + new_filename: "dir_2/blank_3.png" }) |> json_response(:bad_request) == %{"error" => "Emoji \"blank2\" does not exist"} end test "update with empty shortcode", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "update", - "shortcode" => "blank", - "new_filename" => "dir_2/blank_3.png" + |> patch("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank", + new_filename: "dir_2/blank_3.png" }) |> json_response(:bad_request) == %{ "error" => "new_shortcode or new_filename cannot be empty" } end - - test "undefined action", %{admin_conn: admin_conn} do - assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "undefined" - }) - |> json_response(:bad_request) == %{ - "error" => "Unknown action: undefined" - } - end end - describe "PUT /api/pleroma/emoji/packs/:name" do + describe "POST/DELETE /api/pleroma/emoji/packs/:name" do test "creating and deleting a pack", %{admin_conn: admin_conn} do assert admin_conn - |> put("/api/pleroma/emoji/packs/test_created") + |> post("/api/pleroma/emoji/packs/test_created") |> json_response(200) == "ok" assert File.exists?("#{@emoji_path}/test_created/pack.json") @@ -690,7 +628,7 @@ test "if pack exists", %{admin_conn: admin_conn} do File.write!(Path.join(path, "pack.json"), pack_file) assert admin_conn - |> put("/api/pleroma/emoji/packs/test_created") + |> post("/api/pleroma/emoji/packs/test_created") |> json_response(:conflict) == %{ "error" => "A pack named \"test_created\" already exists" } @@ -700,7 +638,7 @@ test "if pack exists", %{admin_conn: admin_conn} do test "with empty name", %{admin_conn: admin_conn} do assert admin_conn - |> put("/api/pleroma/emoji/packs/ ") + |> post("/api/pleroma/emoji/packs/ ") |> json_response(:bad_request) == %{"error" => "pack name cannot be empty"} end end @@ -728,7 +666,7 @@ test "filesystem import", %{admin_conn: admin_conn, conn: conn} do refute Map.has_key?(resp, "test_pack_for_import") assert admin_conn - |> post("/api/pleroma/emoji/packs/import_from_fs") + |> get("/api/pleroma/emoji/packs/import") |> json_response(200) == ["test_pack_for_import"] resp = conn |> get("/api/pleroma/emoji/packs") |> json_response(200) @@ -747,7 +685,7 @@ test "filesystem import", %{admin_conn: admin_conn, conn: conn} do File.write!("#{@emoji_path}/test_pack_for_import/emoji.txt", emoji_txt_content) assert admin_conn - |> post("/api/pleroma/emoji/packs/import_from_fs") + |> get("/api/pleroma/emoji/packs/import") |> json_response(200) == ["test_pack_for_import"] resp = conn |> get("/api/pleroma/emoji/packs") |> json_response(200) From 9855018425f073dec11e35e624185c6e939f33fb Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Sat, 28 Mar 2020 21:21:23 +0300 Subject: [PATCH 375/581] changelog entry --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8589bbdc..65dd1b9c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [unreleased] + +### Changed +
+ API Changes +- **Breaking:** Emoji API: changed methods and renamed routes. +
+ ### Removed - **Breaking:** removed `with_move` parameter from notifications timeline. From 36abeedf9fdd5f90c2c03a4366f8d2cc563f9386 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Mon, 30 Mar 2020 09:09:27 +0300 Subject: [PATCH 376/581] error rename --- lib/pleroma/emoji/pack.ex | 2 +- lib/pleroma/web/pleroma_api/controllers/emoji_api_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 eb50e52fa..242344374 100644 --- a/lib/pleroma/emoji/pack.ex +++ b/lib/pleroma/emoji/pack.ex @@ -188,7 +188,7 @@ def import_from_filesystem do {:ok, names} else - {:ok, %{access: _}} -> {:error, :not_writable} + {:ok, %{access: _}} -> {:error, :no_read_write} e -> e end end diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex index 83a7f03e8..7af9d38a1 100644 --- a/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex @@ -287,7 +287,7 @@ def import_from_filesystem(conn, _params) do with {:ok, names} <- Pack.import_from_filesystem() do json(conn, names) else - {:error, :not_writable} -> + {:error, :no_read_write} -> conn |> put_status(:internal_server_error) |> json(%{error: "Error: emoji pack directory must be writable"}) From 1c1b7e22afd25c5d1c4ff71d03a08ee39149fca1 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Mon, 30 Mar 2020 10:07:37 +0300 Subject: [PATCH 377/581] list of options for pack metadata --- docs/API/pleroma_api.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/API/pleroma_api.md b/docs/API/pleroma_api.md index 65d22980b..dc39c8b0b 100644 --- a/docs/API/pleroma_api.md +++ b/docs/API/pleroma_api.md @@ -361,6 +361,12 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa * Authentication: required * Params: * `metadata`: metadata to replace the old one + * `license`: Pack license + * `homepage`: Pack home page url + * `description`: Pack description + * `fallback-src`: Fallback url to download pack from + * `fallback-src-sha256`: SHA256 encoded for fallback pack archive + * `share-files`: is pack allowed for sharing (boolean) * Response: JSON, updated "metadata" section of the pack and 200 status or 400 if there was a problem with the new metadata (the error is specified in the "error" part of the response JSON) From 1fd40532aeac2c6988e2b439af1350cbf59cd697 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 31 Mar 2020 11:38:37 +0300 Subject: [PATCH 378/581] docs fix --- docs/API/pleroma_api.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/API/pleroma_api.md b/docs/API/pleroma_api.md index dc39c8b0b..0c4d5c797 100644 --- a/docs/API/pleroma_api.md +++ b/docs/API/pleroma_api.md @@ -345,6 +345,7 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa * Params: * `url`: url of the instance to download from * `name`: pack to download from that instance + * `as`: (*optional*) name how to save pack * Response: JSON, "ok" with 200 status if the pack was downloaded, or 500 if there were errors downloading the pack @@ -357,7 +358,7 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa ## `PATCH /api/pleroma/emoji/packs/:name` ### Updates (replaces) pack metadata -* Method `POST` +* Method `PATCH` * Authentication: required * Params: * `metadata`: metadata to replace the old one From 631e8c1febb32910a8e44c7c39790c9364620567 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 1 Apr 2020 13:57:27 +0300 Subject: [PATCH 379/581] docs update --- docs/API/pleroma_api.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/API/pleroma_api.md b/docs/API/pleroma_api.md index 0c4d5c797..b927be026 100644 --- a/docs/API/pleroma_api.md +++ b/docs/API/pleroma_api.md @@ -383,10 +383,10 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa * Method `POST` * Authentication: required * Params: - * `file`: uploaded file or link to remote file. + * `file`: file needs to be uploaded with the multipart request or link to remote file. * `shortcode`: (*optional*) shortcode for new emoji, must be uniq for all emoji. If not sended, shortcode will be taken from original filename. * `filename`: (*optional*) new emoji file name. If not specified will be taken from original filename. -* Response: JSON, list of files for updated pack (hasmap -> shortcode => filename) with status 200, either error status with error message. +* Response: JSON, list of files for updated pack (hashmap -> shortcode => filename) with status 200, either error status with error message. ## `PATCH /api/pleroma/emoji/packs/:name/files` ### Update emoji file from pack @@ -397,7 +397,7 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa * `new_shortcode`: new emoji file shortcode * `new_filename`: new filename for emoji file * `force`: (*optional*) with true value to overwrite existing emoji with new shortcode -* Response: JSON, list with updated files for updated pack (hasmap -> shortcode => filename) with status 200, either error status with error message. +* Response: JSON, list with updated files for updated pack (hashmap -> shortcode => filename) with status 200, either error status with error message. ## `DELETE /api/pleroma/emoji/packs/:name/files` ### Delete emoji file from pack @@ -405,7 +405,7 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa * Authentication: required * Params: * `shortcode`: emoji file shortcode -* Response: JSON, list with updated files for updated pack (hasmap -> shortcode => filename) with status 200, either error status with error message. +* Response: JSON, list with updated files for updated pack (hashmap -> shortcode => filename) with status 200, either error status with error message. ## `GET /api/pleroma/emoji/packs` ### Lists local custom emoji packs @@ -422,7 +422,7 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa * Response: JSON, pack json with `files` and `pack` keys with 200 status or 404 if the pack does not exist ## `GET /api/pleroma/emoji/packs/:name/archive` -### Requests a local pack from the instance +### Requests a local pack archive from the instance * Method `GET` * Authentication: not required * Params: None From 4dc5302f455e56d3c2cb669e8a70f52457690a86 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 15:26:23 +0200 Subject: [PATCH 380/581] Transmogrifier: Handle incoming deletes for non-user objects. --- .../web/activity_pub/object_validator.ex | 3 +- lib/pleroma/web/activity_pub/side_effects.ex | 12 ++++++++ .../web/activity_pub/transmogrifier.ex | 29 ++----------------- test/web/activity_pub/side_effects_test.exs | 23 +++++++++++++++ .../transmogrifier/delete_handling_test.exs | 6 ++-- 5 files changed, 42 insertions(+), 31 deletions(-) diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index 016f6e7a2..32f606917 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -11,8 +11,9 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do alias Pleroma.Object alias Pleroma.User - alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator alias Pleroma.Web.ActivityPub.ObjectValidators.DeleteValidator + alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator + alias Pleroma.Web.ActivityPub.ObjectValidators.Types @spec validate(map(), keyword()) :: {:ok, map(), keyword()} | {:error, any()} def validate(object, meta) diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 5981e7545..93698a834 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -28,6 +28,18 @@ def handle(%{data: %{"type" => "Like"}} = object, meta) do result end + # Tasks this handles: + # - Delete create activity + # - Replace object with Tombstone + # - Set up notification + def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, meta) do + with %Object{} = deleted_object <- Object.normalize(deleted_object), + {:ok, _, _} <- Object.delete(deleted_object) do + Notification.create_notifications(object) + {:ok, object, meta} + end + end + # Nothing to do def handle(object, meta) do {:ok, object, meta} diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 09119137b..855aab8d4 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -729,36 +729,13 @@ def handle_incoming( end end - # TODO: We presently assume that any actor on the same origin domain as the object being - # deleted has the rights to delete that object. A better way to validate whether or not - # the object should be deleted is to refetch the object URI, which should return either - # an error or a tombstone. This would allow us to verify that a deletion actually took - # place. def handle_incoming( - %{"type" => "Delete", "object" => object_id, "actor" => actor, "id" => id} = data, + %{"type" => "Delete"} = data, _options ) do - object_id = Utils.get_ap_id(object_id) - - with actor <- Containment.get_actor(data), - {:ok, %User{} = actor} <- User.get_or_fetch_by_ap_id(actor), - {:ok, object} <- get_obj_helper(object_id), - :ok <- Containment.contain_origin(actor.ap_id, object.data), - {:ok, activity} <- - ActivityPub.delete(object, local: false, activity_id: id, actor: actor.ap_id) do + with {:ok, %User{}} <- ObjectValidator.fetch_actor(data), + {:ok, activity, _} <- Pipeline.common_pipeline(data, local: false) do {:ok, activity} - else - nil -> - case User.get_cached_by_ap_id(object_id) do - %User{ap_id: ^actor} = user -> - User.delete(user) - - nil -> - :error - end - - _e -> - :error end end diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index 0b6b55156..eec9488e7 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -5,6 +5,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do use Pleroma.DataCase + alias Pleroma.Activity alias Pleroma.Notification alias Pleroma.Object alias Pleroma.Repo @@ -15,6 +16,28 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do import Pleroma.Factory + describe "delete objects" do + setup do + user = insert(:user) + {:ok, post} = CommonAPI.post(user, %{"status" => "hey"}) + object = Object.normalize(post) + {:ok, delete_data, _meta} = Builder.delete(user, object.data["id"]) + {:ok, delete, _meta} = ActivityPub.persist(delete_data, local: true) + %{user: user, delete: delete, post: post, object: object} + end + + test "it handles object deletions", %{delete: delete, post: post, object: object} do + # In object deletions, the object is replaced by a tombstone and the + # create activity is deleted + + {:ok, _delete, _} = SideEffects.handle(delete) + + object = Object.get_by_id(object.id) + assert object.data["type"] == "Tombstone" + refute Activity.get_by_id(post.id) + end + end + describe "like objects" do setup do poster = insert(:user) diff --git a/test/web/activity_pub/transmogrifier/delete_handling_test.exs b/test/web/activity_pub/transmogrifier/delete_handling_test.exs index c15de5a95..64c908a05 100644 --- a/test/web/activity_pub/transmogrifier/delete_handling_test.exs +++ b/test/web/activity_pub/transmogrifier/delete_handling_test.exs @@ -68,7 +68,7 @@ test "it fails for incoming deletes with spoofed origin" do |> Map.put("object", object) assert capture_log(fn -> - :error = Transmogrifier.handle_incoming(data) + {:error, _} = Transmogrifier.handle_incoming(data) end) =~ "[error] Could not decode user at fetch http://mastodon.example.org/users/gargron, {:error, :nxdomain}" @@ -97,9 +97,7 @@ test "it fails for incoming user deletes with spoofed origin" do |> Poison.decode!() |> Map.put("actor", ap_id) - assert capture_log(fn -> - assert :error == Transmogrifier.handle_incoming(data) - end) =~ "Object containment failed" + assert match?({:error, _}, Transmogrifier.handle_incoming(data)) assert User.get_cached_by_ap_id(ap_id) end From 1fb383f368b861d7aea77770ba7be6e3dfe3468e Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 15:42:30 +0200 Subject: [PATCH 381/581] DeleteValidator: Deleting a user is valid. --- lib/pleroma/web/activity_pub/builder.ex | 15 +++++++++++++-- .../object_validators/common_validations.ex | 11 +++++++++++ .../object_validators/delete_validator.ex | 2 +- test/web/activity_pub/object_validator_test.exs | 7 ++++++- 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/activity_pub/builder.ex b/lib/pleroma/web/activity_pub/builder.ex index 5cc46c3ea..1345a3a3e 100644 --- a/lib/pleroma/web/activity_pub/builder.ex +++ b/lib/pleroma/web/activity_pub/builder.ex @@ -12,9 +12,20 @@ defmodule Pleroma.Web.ActivityPub.Builder do @spec delete(User.t(), String.t()) :: {:ok, map(), keyword()} def delete(actor, object_id) do - object = Object.normalize(object_id) + object = Object.normalize(object_id, false) - to = (object.data["to"] || []) ++ (object.data["cc"] || []) + user = !object && User.get_cached_by_ap_id(object_id) + + to = + case {object, user} do + {%Object{}, _} -> + # We are deleting an object, address everyone who was originally mentioned + (object.data["to"] || []) ++ (object.data["cc"] || []) + + {_, %User{follower_address: follower_address}} -> + # We are deleting a user, address the followers of that user + [follower_address] + end {:ok, %{ diff --git a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex index e115d9526..d9a629a34 100644 --- a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex +++ b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex @@ -49,4 +49,15 @@ def validate_object_presence(cng, field_name \\ :object) do end end) end + + def validate_object_or_user_presence(cng, field_name \\ :object) do + cng + |> validate_change(field_name, fn field_name, object -> + if Object.get_cached_by_ap_id(object) || User.get_cached_by_ap_id(object) do + [] + else + [{field_name, "can't find object"}] + end + end) + end end diff --git a/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex index 0eb31451c..fa1713b50 100644 --- a/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex @@ -31,7 +31,7 @@ def validate_data(cng) do |> validate_required([:id, :type, :actor, :to, :cc, :object]) |> validate_inclusion(:type, ["Delete"]) |> validate_same_domain() - |> validate_object_presence() + |> validate_object_or_user_presence() end def validate_same_domain(cng) do diff --git a/test/web/activity_pub/object_validator_test.exs b/test/web/activity_pub/object_validator_test.exs index ab26d3501..83b21a9bc 100644 --- a/test/web/activity_pub/object_validator_test.exs +++ b/test/web/activity_pub/object_validator_test.exs @@ -15,14 +15,19 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do {:ok, post_activity} = CommonAPI.post(user, %{"status" => "cancel me daddy"}) {:ok, valid_post_delete, _} = Builder.delete(user, post_activity.data["object"]) + {:ok, valid_user_delete, _} = Builder.delete(user, user.ap_id) - %{user: user, valid_post_delete: valid_post_delete} + %{user: user, valid_post_delete: valid_post_delete, valid_user_delete: valid_user_delete} end test "it is valid for a post deletion", %{valid_post_delete: valid_post_delete} do assert match?({:ok, _, _}, ObjectValidator.validate(valid_post_delete, [])) end + test "it is valid for a user deletion", %{valid_user_delete: valid_user_delete} do + assert match?({:ok, _, _}, ObjectValidator.validate(valid_user_delete, [])) + end + test "it's invalid if the id is missing", %{valid_post_delete: valid_post_delete} do no_id = valid_post_delete From 417eed4a2b10b0a1fd916839ddb03d0345966123 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 15:57:27 +0200 Subject: [PATCH 382/581] SideEffects: Handle deletions. --- lib/pleroma/web/activity_pub/side_effects.ex | 22 ++++++++++++++++++-- test/web/activity_pub/side_effects_test.exs | 14 ++++++++++++- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 93698a834..ac1d4c222 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -7,6 +7,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do """ alias Pleroma.Notification alias Pleroma.Object + alias Pleroma.User alias Pleroma.Web.ActivityPub.Utils def handle(object, meta \\ []) @@ -33,10 +34,27 @@ def handle(%{data: %{"type" => "Like"}} = object, meta) do # - Replace object with Tombstone # - Set up notification def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, meta) do - with %Object{} = deleted_object <- Object.normalize(deleted_object), - {:ok, _, _} <- Object.delete(deleted_object) do + deleted_object = + Object.normalize(deleted_object, false) || User.get_cached_by_ap_id(deleted_object) + + result = + case deleted_object do + %Object{} -> + with {:ok, _, _} <- Object.delete(deleted_object) do + :ok + end + + %User{} -> + with {:ok, _} <- User.delete(deleted_object) do + :ok + end + end + + if result == :ok do Notification.create_notifications(object) {:ok, object, meta} + else + {:error, result} end end diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index eec9488e7..b3d0addc7 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -3,12 +3,15 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.SideEffectsTest do + use Oban.Testing, repo: Pleroma.Repo use Pleroma.DataCase alias Pleroma.Activity alias Pleroma.Notification alias Pleroma.Object alias Pleroma.Repo + alias Pleroma.User + alias Pleroma.Tests.ObanHelpers alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Builder alias Pleroma.Web.ActivityPub.SideEffects @@ -22,8 +25,10 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do {:ok, post} = CommonAPI.post(user, %{"status" => "hey"}) object = Object.normalize(post) {:ok, delete_data, _meta} = Builder.delete(user, object.data["id"]) + {:ok, delete_user_data, _meta} = Builder.delete(user, user.ap_id) {:ok, delete, _meta} = ActivityPub.persist(delete_data, local: true) - %{user: user, delete: delete, post: post, object: object} + {:ok, delete_user, _meta} = ActivityPub.persist(delete_user_data, local: true) + %{user: user, delete: delete, post: post, object: object, delete_user: delete_user} end test "it handles object deletions", %{delete: delete, post: post, object: object} do @@ -36,6 +41,13 @@ test "it handles object deletions", %{delete: delete, post: post, object: object assert object.data["type"] == "Tombstone" refute Activity.get_by_id(post.id) end + + test "it handles user deletions", %{delete_user: delete, user: user} do + {:ok, _delete, _} = SideEffects.handle(delete) + ObanHelpers.perform_all() + + refute User.get_cached_by_ap_id(user.ap_id) + end end describe "like objects" do From c9bfa51ea9c0048ffa4c0d3e28c196da2f38e384 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 15:58:37 +0200 Subject: [PATCH 383/581] Credo fixes. --- test/web/activity_pub/side_effects_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index b3d0addc7..fffe0ca38 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -10,8 +10,8 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do alias Pleroma.Notification alias Pleroma.Object alias Pleroma.Repo - alias Pleroma.User alias Pleroma.Tests.ObanHelpers + alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Builder alias Pleroma.Web.ActivityPub.SideEffects From fdd8e7f27697a7128e4e92020cdff6389c999acc Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 16:15:38 +0200 Subject: [PATCH 384/581] CommonAPI: Use common pipeline for deletions. --- lib/pleroma/web/activity_pub/side_effects.ex | 6 ++++-- lib/pleroma/web/common_api/common_api.ex | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index ac1d4c222..ef58fa399 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -30,7 +30,7 @@ def handle(%{data: %{"type" => "Like"}} = object, meta) do end # Tasks this handles: - # - Delete create activity + # - Delete and unpins the create activity # - Replace object with Tombstone # - Set up notification def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, meta) do @@ -40,7 +40,9 @@ def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, result = case deleted_object do %Object{} -> - with {:ok, _, _} <- Object.delete(deleted_object) do + with {:ok, _, activity} <- Object.delete(deleted_object), + %User{} = user <- User.get_cached_by_ap_id(deleted_object.data["actor"]) do + User.remove_pinnned_activity(user, activity) :ok end diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index d1efe0c36..7cb8e47d0 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -77,8 +77,8 @@ def delete(activity_id, user) do {:find_activity, Activity.get_by_id_with_object(activity_id)}, %Object{} = object <- Object.normalize(activity), true <- User.superuser?(user) || user.ap_id == object.data["actor"], - {:ok, _} <- unpin(activity_id, user), - {:ok, delete} <- ActivityPub.delete(object) do + {:ok, delete_data, _} <- Builder.delete(user, object.data["id"]), + {:ok, delete, _} <- Pipeline.common_pipeline(delete_data, local: true) do {:ok, delete} else {:find_activity, _} -> {:error, :not_found} From 14c667219334c492ae0549ad0f1e062085d7d412 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 16:49:41 +0200 Subject: [PATCH 385/581] AP C2S: Use common pipelin for deletes. --- lib/pleroma/web/activity_pub/activity_pub_controller.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub_controller.ex b/lib/pleroma/web/activity_pub/activity_pub_controller.ex index d625530ec..e68d0763e 100644 --- a/lib/pleroma/web/activity_pub/activity_pub_controller.ex +++ b/lib/pleroma/web/activity_pub/activity_pub_controller.ex @@ -414,7 +414,8 @@ defp handle_user_activity(%User{} = user, %{"type" => "Create"} = params) do defp handle_user_activity(%User{} = user, %{"type" => "Delete"} = params) do with %Object{} = object <- Object.normalize(params["object"]), true <- user.is_moderator || user.ap_id == object.data["actor"], - {:ok, delete} <- ActivityPub.delete(object) do + {:ok, delete_data, _} <- Builder.delete(user, object.data["id"]), + {:ok, delete, _} <- Pipeline.common_pipeline(delete_data, local: true) do {:ok, delete} else _ -> {:error, dgettext("errors", "Can't delete object")} From 4a487e4d0b744edac0d83306b80e4bd0cdef5358 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 30 Apr 2020 17:50:57 +0300 Subject: [PATCH 386/581] fix for auth check --- .../web/pleroma_api/controllers/emoji_api_controller.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex index 7af9d38a1..d276b96a4 100644 --- a/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex @@ -7,7 +7,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIController do Pleroma.Plugs.OAuthScopesPlug, %{scopes: ["write"], admin: true} when action in [ - :import, + :import_from_filesystem, :remote, :download, :create, @@ -22,7 +22,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIController do plug( :skip_plug, [Pleroma.Plugs.OAuthScopesPlug, Pleroma.Plugs.ExpectPublicOrAuthenticatedCheckPlug] - when action in [:download_shared, :list_packs, :list_from] + when action in [:archive, :show, :list] ) def remote(conn, %{"url" => url}) do From 2c4844237f294d27f58737f9694f77b1cfcb10e7 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Thu, 30 Apr 2020 18:19:51 +0300 Subject: [PATCH 387/581] Refactoring of :if_func / :unless_func plug options (general availability). Added tests for Pleroma.Web.Plug. --- .../plugs/ensure_authenticated_plug.ex | 17 +--- lib/pleroma/plugs/federating_plug.ex | 3 + .../activity_pub/activity_pub_controller.ex | 2 +- lib/pleroma/web/feed/user_controller.ex | 2 +- lib/pleroma/web/ostatus/ostatus_controller.ex | 2 +- .../web/static_fe/static_fe_controller.ex | 2 +- lib/pleroma/web/web.ex | 10 +- test/plugs/ensure_authenticated_plug_test.exs | 4 +- test/web/plugs/plug_test.exs | 91 +++++++++++++++++++ 9 files changed, 109 insertions(+), 24 deletions(-) create mode 100644 test/web/plugs/plug_test.exs diff --git a/lib/pleroma/plugs/ensure_authenticated_plug.ex b/lib/pleroma/plugs/ensure_authenticated_plug.ex index 9c8f5597f..9d5176e2b 100644 --- a/lib/pleroma/plugs/ensure_authenticated_plug.ex +++ b/lib/pleroma/plugs/ensure_authenticated_plug.ex @@ -19,22 +19,7 @@ def perform(%{assigns: %{user: %User{}}} = conn, _) do conn end - def perform(conn, options) do - perform = - cond do - options[:if_func] -> options[:if_func].() - options[:unless_func] -> !options[:unless_func].() - true -> true - end - - if perform do - fail(conn) - else - conn - end - end - - def fail(conn) do + def perform(conn, _) do conn |> render_error(:forbidden, "Invalid credentials.") |> halt() diff --git a/lib/pleroma/plugs/federating_plug.ex b/lib/pleroma/plugs/federating_plug.ex index 7d947339f..09038f3c6 100644 --- a/lib/pleroma/plugs/federating_plug.ex +++ b/lib/pleroma/plugs/federating_plug.ex @@ -19,6 +19,9 @@ def call(conn, _opts) do def federating?, do: Pleroma.Config.get([:instance, :federating]) + # Definition for the use in :if_func / :unless_func plug options + def federating?(_conn), do: federating?() + defp fail(conn) do conn |> put_status(404) diff --git a/lib/pleroma/web/activity_pub/activity_pub_controller.ex b/lib/pleroma/web/activity_pub/activity_pub_controller.ex index d625530ec..a909516be 100644 --- a/lib/pleroma/web/activity_pub/activity_pub_controller.ex +++ b/lib/pleroma/web/activity_pub/activity_pub_controller.ex @@ -34,7 +34,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do plug( EnsureAuthenticatedPlug, - [unless_func: &FederatingPlug.federating?/0] when action not in @federating_only_actions + [unless_func: &FederatingPlug.federating?/1] when action not in @federating_only_actions ) plug( diff --git a/lib/pleroma/web/feed/user_controller.ex b/lib/pleroma/web/feed/user_controller.ex index e27f85929..1b72e23dc 100644 --- a/lib/pleroma/web/feed/user_controller.ex +++ b/lib/pleroma/web/feed/user_controller.ex @@ -27,7 +27,7 @@ def feed_redirect(%{assigns: %{format: format}} = conn, _params) when format in ["json", "activity+json"] do with %{halted: false} = conn <- Pleroma.Plugs.EnsureAuthenticatedPlug.call(conn, - unless_func: &Pleroma.Web.FederatingPlug.federating?/0 + unless_func: &Pleroma.Web.FederatingPlug.federating?/1 ) do ActivityPubController.call(conn, :user) end diff --git a/lib/pleroma/web/ostatus/ostatus_controller.ex b/lib/pleroma/web/ostatus/ostatus_controller.ex index 6fd3cfce5..6971cd9f8 100644 --- a/lib/pleroma/web/ostatus/ostatus_controller.ex +++ b/lib/pleroma/web/ostatus/ostatus_controller.ex @@ -17,7 +17,7 @@ defmodule Pleroma.Web.OStatus.OStatusController do alias Pleroma.Web.Router plug(Pleroma.Plugs.EnsureAuthenticatedPlug, - unless_func: &Pleroma.Web.FederatingPlug.federating?/0 + unless_func: &Pleroma.Web.FederatingPlug.federating?/1 ) plug( diff --git a/lib/pleroma/web/static_fe/static_fe_controller.ex b/lib/pleroma/web/static_fe/static_fe_controller.ex index 7a35238d7..c3efb6651 100644 --- a/lib/pleroma/web/static_fe/static_fe_controller.ex +++ b/lib/pleroma/web/static_fe/static_fe_controller.ex @@ -18,7 +18,7 @@ defmodule Pleroma.Web.StaticFE.StaticFEController do plug(:assign_id) plug(Pleroma.Plugs.EnsureAuthenticatedPlug, - unless_func: &Pleroma.Web.FederatingPlug.federating?/0 + unless_func: &Pleroma.Web.FederatingPlug.federating?/1 ) @page_keys ["max_id", "min_id", "limit", "since_id", "order"] diff --git a/lib/pleroma/web/web.ex b/lib/pleroma/web/web.ex index 08e42a7e5..4f9281851 100644 --- a/lib/pleroma/web/web.ex +++ b/lib/pleroma/web/web.ex @@ -200,11 +200,17 @@ def skip_plug(conn) do @impl Plug @doc """ - If marked as skipped, returns `conn`, otherwise calls `perform/2`. + Before-plug hook that + * ensures the plug is not skipped + * processes `:if_func` / `:unless_func` functional pre-run conditions + * adds plug to the list of called plugs and calls `perform/2` if checks are passed + Note: multiple invocations of the same plug (with different or same options) are allowed. """ def call(%Plug.Conn{} = conn, options) do - if PlugHelper.plug_skipped?(conn, __MODULE__) do + if PlugHelper.plug_skipped?(conn, __MODULE__) || + (options[:if_func] && !options[:if_func].(conn)) || + (options[:unless_func] && options[:unless_func].(conn)) do conn else conn = diff --git a/test/plugs/ensure_authenticated_plug_test.exs b/test/plugs/ensure_authenticated_plug_test.exs index 689fe757f..4e6142aab 100644 --- a/test/plugs/ensure_authenticated_plug_test.exs +++ b/test/plugs/ensure_authenticated_plug_test.exs @@ -27,8 +27,8 @@ test "it continues if a user is assigned", %{conn: conn} do describe "with :if_func / :unless_func options" do setup do %{ - true_fn: fn -> true end, - false_fn: fn -> false end + true_fn: fn _conn -> true end, + false_fn: fn _conn -> false end } end diff --git a/test/web/plugs/plug_test.exs b/test/web/plugs/plug_test.exs new file mode 100644 index 000000000..943e484e7 --- /dev/null +++ b/test/web/plugs/plug_test.exs @@ -0,0 +1,91 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.PlugTest do + @moduledoc "Tests for the functionality added via `use Pleroma.Web, :plug`" + + alias Pleroma.Plugs.ExpectAuthenticatedCheckPlug + alias Pleroma.Plugs.ExpectPublicOrAuthenticatedCheckPlug + alias Pleroma.Plugs.PlugHelper + + import Mock + + use Pleroma.Web.ConnCase + + describe "when plug is skipped, " do + setup_with_mocks( + [ + {ExpectPublicOrAuthenticatedCheckPlug, [:passthrough], []} + ], + %{conn: conn} + ) do + conn = ExpectPublicOrAuthenticatedCheckPlug.skip_plug(conn) + %{conn: conn} + end + + test "it neither adds plug to called plugs list nor calls `perform/2`, " <> + "regardless of :if_func / :unless_func options", + %{conn: conn} do + for opts <- [%{}, %{if_func: fn _ -> true end}, %{unless_func: fn _ -> false end}] do + ret_conn = ExpectPublicOrAuthenticatedCheckPlug.call(conn, opts) + + refute called(ExpectPublicOrAuthenticatedCheckPlug.perform(:_, :_)) + refute PlugHelper.plug_called?(ret_conn, ExpectPublicOrAuthenticatedCheckPlug) + end + end + end + + describe "when plug is NOT skipped, " do + setup_with_mocks([{ExpectAuthenticatedCheckPlug, [:passthrough], []}]) do + :ok + end + + test "with no pre-run checks, adds plug to called plugs list and calls `perform/2`", %{ + conn: conn + } do + ret_conn = ExpectAuthenticatedCheckPlug.call(conn, %{}) + + assert called(ExpectAuthenticatedCheckPlug.perform(ret_conn, :_)) + assert PlugHelper.plug_called?(ret_conn, ExpectAuthenticatedCheckPlug) + end + + test "when :if_func option is given, calls the plug only if provided function evals tru-ish", + %{conn: conn} do + ret_conn = ExpectAuthenticatedCheckPlug.call(conn, %{if_func: fn _ -> false end}) + + refute called(ExpectAuthenticatedCheckPlug.perform(:_, :_)) + refute PlugHelper.plug_called?(ret_conn, ExpectAuthenticatedCheckPlug) + + ret_conn = ExpectAuthenticatedCheckPlug.call(conn, %{if_func: fn _ -> true end}) + + assert called(ExpectAuthenticatedCheckPlug.perform(ret_conn, :_)) + assert PlugHelper.plug_called?(ret_conn, ExpectAuthenticatedCheckPlug) + end + + test "if :unless_func option is given, calls the plug only if provided function evals falsy", + %{conn: conn} do + ret_conn = ExpectAuthenticatedCheckPlug.call(conn, %{unless_func: fn _ -> true end}) + + refute called(ExpectAuthenticatedCheckPlug.perform(:_, :_)) + refute PlugHelper.plug_called?(ret_conn, ExpectAuthenticatedCheckPlug) + + ret_conn = ExpectAuthenticatedCheckPlug.call(conn, %{unless_func: fn _ -> false end}) + + assert called(ExpectAuthenticatedCheckPlug.perform(ret_conn, :_)) + assert PlugHelper.plug_called?(ret_conn, ExpectAuthenticatedCheckPlug) + end + + test "allows a plug to be called multiple times (even if it's in called plugs list)", %{ + conn: conn + } do + conn = ExpectAuthenticatedCheckPlug.call(conn, %{an_option: :value1}) + assert called(ExpectAuthenticatedCheckPlug.perform(conn, %{an_option: :value1})) + + assert PlugHelper.plug_called?(conn, ExpectAuthenticatedCheckPlug) + + conn = ExpectAuthenticatedCheckPlug.call(conn, %{an_option: :value2}) + assert called(ExpectAuthenticatedCheckPlug.perform(conn, %{an_option: :value2})) + end + end +end From bef34568f0d005baabca266b99ac0f6e620e6899 Mon Sep 17 00:00:00 2001 From: eugenijm Date: Thu, 30 Apr 2020 15:02:35 +0300 Subject: [PATCH 388/581] Dismiss the follow request notification on rejection --- lib/pleroma/notification.ex | 10 ++++++++++ lib/pleroma/web/common_api/common_api.ex | 2 ++ test/notification_test.exs | 10 ++++++++++ 3 files changed, 22 insertions(+) diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index aaa675253..9a109dfab 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -261,6 +261,16 @@ def destroy_multiple(%{id: user_id} = _user, ids) do |> Repo.delete_all() end + def dismiss(%Pleroma.Activity{} = activity) do + Notification + |> where([n], n.activity_id == ^activity.id) + |> Repo.delete_all() + |> case do + {_, notifications} -> {:ok, notifications} + _ -> {:error, "Cannot dismiss notification"} + end + end + def dismiss(%{id: user_id} = _user, id) do notification = Repo.get(Notification, id) diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index d1efe0c36..4112e441a 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -7,6 +7,7 @@ defmodule Pleroma.Web.CommonAPI do alias Pleroma.ActivityExpiration alias Pleroma.Conversation.Participation alias Pleroma.FollowingRelationship + alias Pleroma.Notification alias Pleroma.Object alias Pleroma.ThreadMute alias Pleroma.User @@ -61,6 +62,7 @@ def reject_follow_request(follower, followed) do with %Activity{} = follow_activity <- Utils.fetch_latest_follow(follower, followed), {:ok, follow_activity} <- Utils.update_follow_state_for_all(follow_activity, "reject"), {:ok, _relationship} <- FollowingRelationship.update(follower, followed, :follow_reject), + {:ok, _notifications} <- Notification.dismiss(follow_activity), {:ok, _activity} <- ActivityPub.reject(%{ to: [follower.ap_id], diff --git a/test/notification_test.exs b/test/notification_test.exs index 6ad824c57..0e9ffcb18 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -362,6 +362,16 @@ test "it doesn't create a notification for follow-unfollow-follow chains" do notification_id = notification.id assert [%{id: ^notification_id}] = Notification.for_user(followed_user) end + + test "dismisses the notification on follow request rejection" do + clear_config([:notifications, :enable_follow_request_notifications], true) + user = insert(:user, locked: true) + follower = insert(:user) + {:ok, _, _, _follow_activity} = CommonAPI.follow(follower, user) + assert [notification] = Notification.for_user(user) + {:ok, _follower} = CommonAPI.reject_follow_request(follower, user) + assert [] = Notification.for_user(user) + end end describe "get notification" do From 143353432a562c49f4432e74a549321c5b43650d Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 17:52:29 +0200 Subject: [PATCH 389/581] StreamerTest: Separate deletion test. --- test/web/streamer/streamer_test.exs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/web/streamer/streamer_test.exs b/test/web/streamer/streamer_test.exs index 8b8d8af6c..3c0f240f5 100644 --- a/test/web/streamer/streamer_test.exs +++ b/test/web/streamer/streamer_test.exs @@ -210,6 +210,12 @@ test "it sends to public" do Worker.push_to_socket(topics, "public", activity) Task.await(task) + end + + test "works for deletions" do + user = insert(:user) + other_user = insert(:user) + {:ok, activity} = CommonAPI.post(other_user, %{"status" => "Test"}) task = Task.async(fn -> From 4500fdc04c528331f7289745dc08a34ce18d4da7 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 17:53:02 +0200 Subject: [PATCH 390/581] DeleteValidator: Add internal helper field after validation. --- .../object_validators/delete_validator.ex | 16 ++++++++++++++++ test/web/activity_pub/object_validator_test.exs | 4 +++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex index fa1713b50..951cc1414 100644 --- a/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex @@ -5,6 +5,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.DeleteValidator do use Ecto.Schema + alias Pleroma.Activity alias Pleroma.Web.ActivityPub.ObjectValidators.Types import Ecto.Changeset @@ -18,6 +19,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.DeleteValidator do field(:actor, Types.ObjectID) field(:to, Types.Recipients, default: []) field(:cc, Types.Recipients, default: []) + field(:deleted_activity_id) field(:object, Types.ObjectID) end @@ -26,12 +28,26 @@ def cast_data(data) do |> cast(data, __schema__(:fields)) end + def add_deleted_activity_id(cng) do + object = + cng + |> get_field(:object) + + with %Activity{id: id} <- Activity.get_create_by_object_ap_id(object) do + cng + |> put_change(:deleted_activity_id, id) + else + _ -> cng + end + end + def validate_data(cng) do cng |> validate_required([:id, :type, :actor, :to, :cc, :object]) |> validate_inclusion(:type, ["Delete"]) |> validate_same_domain() |> validate_object_or_user_presence() + |> add_deleted_activity_id() end def validate_same_domain(cng) do diff --git a/test/web/activity_pub/object_validator_test.exs b/test/web/activity_pub/object_validator_test.exs index 83b21a9bc..9e0589722 100644 --- a/test/web/activity_pub/object_validator_test.exs +++ b/test/web/activity_pub/object_validator_test.exs @@ -21,7 +21,9 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do end test "it is valid for a post deletion", %{valid_post_delete: valid_post_delete} do - assert match?({:ok, _, _}, ObjectValidator.validate(valid_post_delete, [])) + {:ok, valid_post_delete_u, _} = ObjectValidator.validate(valid_post_delete, []) + + assert valid_post_delete_u["deleted_activity_id"] end test "it is valid for a user deletion", %{valid_user_delete: valid_user_delete} do From c832d96fc9fc0b93befdf3a7064a8c9236e96d07 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 17:58:09 +0200 Subject: [PATCH 391/581] SideEffects: Stream out deletes. --- lib/pleroma/web/activity_pub/side_effects.ex | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index ef58fa399..d260e0069 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -9,6 +9,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do alias Pleroma.Object alias Pleroma.User alias Pleroma.Web.ActivityPub.Utils + alias Pleroma.Web.ActivityPub.ActivityPub def handle(object, meta \\ []) @@ -40,9 +41,12 @@ def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, result = case deleted_object do %Object{} -> - with {:ok, _, activity} <- Object.delete(deleted_object), + with {:ok, deleted_object, activity} <- Object.delete(deleted_object), %User{} = user <- User.get_cached_by_ap_id(deleted_object.data["actor"]) do User.remove_pinnned_activity(user, activity) + + ActivityPub.stream_out(object) + ActivityPub.stream_out_participations(deleted_object, user) :ok end From 315b773dd9fa185aef75b115efd90ac92113e6c3 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 17:58:31 +0200 Subject: [PATCH 392/581] ObjectValidator: Refactor. --- test/web/activity_pub/object_validator_test.exs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/web/activity_pub/object_validator_test.exs b/test/web/activity_pub/object_validator_test.exs index 9e0589722..1d3646487 100644 --- a/test/web/activity_pub/object_validator_test.exs +++ b/test/web/activity_pub/object_validator_test.exs @@ -21,9 +21,9 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do end test "it is valid for a post deletion", %{valid_post_delete: valid_post_delete} do - {:ok, valid_post_delete_u, _} = ObjectValidator.validate(valid_post_delete, []) + {:ok, valid_post_delete, _} = ObjectValidator.validate(valid_post_delete, []) - assert valid_post_delete_u["deleted_activity_id"] + assert valid_post_delete["deleted_activity_id"] end test "it is valid for a user deletion", %{valid_user_delete: valid_user_delete} do From 3d0dc58e2e0a84cb46df5339596205f7baceb0a4 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 18:10:36 +0200 Subject: [PATCH 393/581] SideEffectsTest: Test streaming. --- test/web/activity_pub/side_effects_test.exs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index fffe0ca38..f5c57d887 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -18,6 +18,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do alias Pleroma.Web.CommonAPI import Pleroma.Factory + import Mock describe "delete objects" do setup do @@ -33,9 +34,16 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do test "it handles object deletions", %{delete: delete, post: post, object: object} do # In object deletions, the object is replaced by a tombstone and the - # create activity is deleted + # create activity is deleted. - {:ok, _delete, _} = SideEffects.handle(delete) + with_mock Pleroma.Web.ActivityPub.ActivityPub, + stream_out: fn _ -> nil end, + stream_out_participations: fn _, _ -> nil end do + {:ok, delete, _} = SideEffects.handle(delete) + user = User.get_cached_by_ap_id(object.data["actor"]) + assert called(Pleroma.Web.ActivityPub.ActivityPub.stream_out(delete)) + assert called(Pleroma.Web.ActivityPub.ActivityPub.stream_out_participations(object, user)) + end object = Object.get_by_id(object.id) assert object.data["type"] == "Tombstone" From ab60ee17765ee9d7dcb69cbf9c0630b97d4f5a93 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 18:19:39 +0200 Subject: [PATCH 394/581] SideEffects: On deletion, reduce the User note count. --- lib/pleroma/web/activity_pub/side_effects.ex | 2 ++ test/web/activity_pub/side_effects_test.exs | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index d260e0069..4fec3a797 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -34,6 +34,7 @@ def handle(%{data: %{"type" => "Like"}} = object, meta) do # - Delete and unpins the create activity # - Replace object with Tombstone # - Set up notification + # - Reduce the user note count def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, meta) do deleted_object = Object.normalize(deleted_object, false) || User.get_cached_by_ap_id(deleted_object) @@ -45,6 +46,7 @@ def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, %User{} = user <- User.get_cached_by_ap_id(deleted_object.data["actor"]) do User.remove_pinnned_activity(user, activity) + {:ok, user} = ActivityPub.decrease_note_count_if_public(user, deleted_object) ActivityPub.stream_out(object) ActivityPub.stream_out_participations(deleted_object, user) :ok diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index f5c57d887..06b3400d8 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -32,15 +32,16 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do %{user: user, delete: delete, post: post, object: object, delete_user: delete_user} end - test "it handles object deletions", %{delete: delete, post: post, object: object} do + test "it handles object deletions", %{delete: delete, post: post, object: object, user: user} do # In object deletions, the object is replaced by a tombstone and the # create activity is deleted. - with_mock Pleroma.Web.ActivityPub.ActivityPub, + with_mock Pleroma.Web.ActivityPub.ActivityPub, [:passthrough], stream_out: fn _ -> nil end, stream_out_participations: fn _, _ -> nil end do {:ok, delete, _} = SideEffects.handle(delete) user = User.get_cached_by_ap_id(object.data["actor"]) + assert called(Pleroma.Web.ActivityPub.ActivityPub.stream_out(delete)) assert called(Pleroma.Web.ActivityPub.ActivityPub.stream_out_participations(object, user)) end @@ -48,6 +49,9 @@ test "it handles object deletions", %{delete: delete, post: post, object: object object = Object.get_by_id(object.id) assert object.data["type"] == "Tombstone" refute Activity.get_by_id(post.id) + + user = User.get_by_id(user.id) + assert user.note_count == 0 end test "it handles user deletions", %{delete_user: delete, user: user} do From 60db58a1c6a2f139960d3db19cba08a496e6ccf4 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 18:38:37 +0200 Subject: [PATCH 395/581] Credo fixes. --- lib/pleroma/web/activity_pub/side_effects.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 4fec3a797..cf31de120 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -8,8 +8,8 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do alias Pleroma.Notification alias Pleroma.Object alias Pleroma.User - alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.ActivityPub.Utils def handle(object, meta \\ []) From f1523f9acd61021d5026e8f8f991fa5c21f23b1f Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Thu, 30 Apr 2020 18:55:25 +0200 Subject: [PATCH 396/581] Increase tests on AP C2S Related: https://git.pleroma.social/pleroma/pleroma/-/issues/954 --- .../activity_pub_controller_test.exs | 70 ++++++++++++++----- 1 file changed, 53 insertions(+), 17 deletions(-) diff --git a/test/web/activity_pub/activity_pub_controller_test.exs b/test/web/activity_pub/activity_pub_controller_test.exs index eca526604..6b5913f95 100644 --- a/test/web/activity_pub/activity_pub_controller_test.exs +++ b/test/web/activity_pub/activity_pub_controller_test.exs @@ -765,51 +765,87 @@ test "it requires authentication if instance is NOT federating", %{ end end - describe "POST /users/:nickname/outbox" do - test "it rejects posts from other users / unauthenticated users", %{conn: conn} do - data = File.read!("test/fixtures/activitypub-client-post-activity.json") |> Poison.decode!() + describe "POST /users/:nickname/outbox (C2S)" do + setup do + [ + activity: %{ + "@context" => "https://www.w3.org/ns/activitystreams", + "type" => "Create", + "object" => %{"type" => "Note", "content" => "AP C2S test"}, + "to" => "https://www.w3.org/ns/activitystreams#Public", + "cc" => [] + } + ] + end + + test "it rejects posts from other users / unauthenticated users", %{ + conn: conn, + activity: activity + } do user = insert(:user) other_user = insert(:user) conn = put_req_header(conn, "content-type", "application/activity+json") conn - |> post("/users/#{user.nickname}/outbox", data) + |> post("/users/#{user.nickname}/outbox", activity) |> json_response(403) conn |> assign(:user, other_user) - |> post("/users/#{user.nickname}/outbox", data) + |> post("/users/#{user.nickname}/outbox", activity) |> json_response(403) end - test "it inserts an incoming create activity into the database", %{conn: conn} do - data = File.read!("test/fixtures/activitypub-client-post-activity.json") |> Poison.decode!() + test "it inserts an incoming create activity into the database", %{ + conn: conn, + activity: activity + } do user = insert(:user) - conn = + result = conn |> assign(:user, user) |> put_req_header("content-type", "application/activity+json") - |> post("/users/#{user.nickname}/outbox", data) - - result = json_response(conn, 201) + |> post("/users/#{user.nickname}/outbox", activity) + |> json_response(201) assert Activity.get_by_ap_id(result["id"]) + assert result["object"] + assert %Object{data: object} = Object.normalize(result["object"]) + assert object["content"] == activity["object"]["content"] end - test "it rejects an incoming activity with bogus type", %{conn: conn} do - data = File.read!("test/fixtures/activitypub-client-post-activity.json") |> Poison.decode!() + test "it inserts an incoming sensitive activity into the database", %{ + conn: conn, + activity: activity + } do user = insert(:user) + object = Map.put(activity["object"], "sensitive", true) + activity = Map.put(activity, "object", object) - data = - data - |> Map.put("type", "BadType") + result = + conn + |> assign(:user, user) + |> put_req_header("content-type", "application/activity+json") + |> post("/users/#{user.nickname}/outbox", activity) + |> json_response(201) + + assert Activity.get_by_ap_id(result["id"]) + assert result["object"] + assert %Object{data: object} = Object.normalize(result["object"]) + assert object["sensitive"] == activity["object"]["sensitive"] + assert object["content"] == activity["object"]["content"] + end + + test "it rejects an incoming activity with bogus type", %{conn: conn, activity: activity} do + user = insert(:user) + activity = Map.put(activity, "type", "BadType") conn = conn |> assign(:user, user) |> put_req_header("content-type", "application/activity+json") - |> post("/users/#{user.nickname}/outbox", data) + |> post("/users/#{user.nickname}/outbox", activity) assert json_response(conn, 400) end From 500f5ec14eb02cd1c5a07970a557756b590caab0 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 19:47:13 +0200 Subject: [PATCH 397/581] SideEffects: On deletion, reduce the reply count cache --- lib/pleroma/web/activity_pub/side_effects.ex | 6 ++++++ test/web/activity_pub/side_effects_test.exs | 22 ++++++++++++++------ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index cf31de120..39b0f384b 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -35,6 +35,7 @@ def handle(%{data: %{"type" => "Like"}} = object, meta) do # - Replace object with Tombstone # - Set up notification # - Reduce the user note count + # - TODO: Reduce the reply count def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, meta) do deleted_object = Object.normalize(deleted_object, false) || User.get_cached_by_ap_id(deleted_object) @@ -47,6 +48,11 @@ def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, User.remove_pinnned_activity(user, activity) {:ok, user} = ActivityPub.decrease_note_count_if_public(user, deleted_object) + + if in_reply_to = deleted_object.data["inReplyTo"] do + Object.decrease_replies_count(in_reply_to) + end + ActivityPub.stream_out(object) ActivityPub.stream_out_participations(deleted_object, user) :ok diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index 06b3400d8..ce34eed4c 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -23,19 +23,25 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do describe "delete objects" do setup do user = insert(:user) - {:ok, post} = CommonAPI.post(user, %{"status" => "hey"}) + other_user = insert(:user) + + {:ok, op} = CommonAPI.post(other_user, %{"status" => "big oof"}) + {:ok, post} = CommonAPI.post(user, %{"status" => "hey", "in_reply_to_id" => op}) object = Object.normalize(post) {:ok, delete_data, _meta} = Builder.delete(user, object.data["id"]) {:ok, delete_user_data, _meta} = Builder.delete(user, user.ap_id) {:ok, delete, _meta} = ActivityPub.persist(delete_data, local: true) {:ok, delete_user, _meta} = ActivityPub.persist(delete_user_data, local: true) - %{user: user, delete: delete, post: post, object: object, delete_user: delete_user} + %{user: user, delete: delete, post: post, object: object, delete_user: delete_user, op: op} end - test "it handles object deletions", %{delete: delete, post: post, object: object, user: user} do - # In object deletions, the object is replaced by a tombstone and the - # create activity is deleted. - + test "it handles object deletions", %{ + delete: delete, + post: post, + object: object, + user: user, + op: op + } do with_mock Pleroma.Web.ActivityPub.ActivityPub, [:passthrough], stream_out: fn _ -> nil end, stream_out_participations: fn _, _ -> nil end do @@ -52,6 +58,10 @@ test "it handles object deletions", %{delete: delete, post: post, object: object user = User.get_by_id(user.id) assert user.note_count == 0 + + object = Object.normalize(op.data["object"], false) + + assert object.data["repliesCount"] == 0 end test "it handles user deletions", %{delete_user: delete, user: user} do From 5da08c2b73f9ce1f369434fbd2c11092007e4910 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 19:53:30 +0200 Subject: [PATCH 398/581] SideEffects: Fix comment --- lib/pleroma/web/activity_pub/side_effects.ex | 2 +- test/user_test.exs | 28 +------------------- 2 files changed, 2 insertions(+), 28 deletions(-) diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 39b0f384b..139e609f4 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -35,7 +35,7 @@ def handle(%{data: %{"type" => "Like"}} = object, meta) do # - Replace object with Tombstone # - Set up notification # - Reduce the user note count - # - TODO: Reduce the reply count + # - Reduce the reply count def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, meta) do deleted_object = Object.normalize(deleted_object, false) || User.get_cached_by_ap_id(deleted_object) diff --git a/test/user_test.exs b/test/user_test.exs index 347c5be72..23afc605c 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -15,7 +15,6 @@ defmodule Pleroma.UserTest do use Pleroma.DataCase use Oban.Testing, repo: Pleroma.Repo - import Mock import Pleroma.Factory import ExUnit.CaptureLog @@ -1131,7 +1130,7 @@ test ".delete_user_activities deletes all create activities", %{user: user} do User.delete_user_activities(user) - # TODO: Remove favorites, repeats, delete activities. + # TODO: Test removal favorites, repeats, delete activities. refute Activity.get_by_id(activity.id) end @@ -1180,31 +1179,6 @@ test "it deletes a user, all follow relationships and all activities", %{user: u refute Activity.get_by_id(like_two.id) refute Activity.get_by_id(repeat.id) end - - test_with_mock "it sends out User Delete activity", - %{user: user}, - Pleroma.Web.ActivityPub.Publisher, - [:passthrough], - [] do - Pleroma.Config.put([:instance, :federating], true) - - {:ok, follower} = User.get_or_fetch_by_ap_id("http://mastodon.example.org/users/admin") - {:ok, _} = User.follow(follower, user) - - {:ok, job} = User.delete(user) - {:ok, _user} = ObanHelpers.perform(job) - - assert ObanHelpers.member?( - %{ - "op" => "publish_one", - "params" => %{ - "inbox" => "http://mastodon.example.org/inbox", - "id" => "pleroma:fakeid" - } - }, - all_enqueued(worker: Pleroma.Workers.PublisherWorker) - ) - end end test "get_public_key_for_ap_id fetches a user that's not in the db" do From 3b443cbc1dd79b0450e17192aa51a00282b54d2e Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 20:08:25 +0200 Subject: [PATCH 399/581] User: Use common pipeline to delete user activities --- lib/pleroma/user.ex | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index b451202b2..c780f99eb 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -29,7 +29,9 @@ defmodule Pleroma.User do alias Pleroma.UserRelationship alias Pleroma.Web alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.ActivityPub.Builder alias Pleroma.Web.ActivityPub.ObjectValidators.Types + alias Pleroma.Web.ActivityPub.Pipeline alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI.Utils, as: CommonUtils @@ -1427,8 +1429,6 @@ def perform(:force_password_reset, user), do: force_password_reset(user) @spec perform(atom(), User.t()) :: {:ok, User.t()} def perform(:delete, %User{} = user) do - {:ok, _user} = ActivityPub.delete(user) - # Remove all relationships user |> get_followers() @@ -1531,21 +1531,23 @@ def follow_import(%User{} = follower, followed_identifiers) }) end - def delete_user_activities(%User{ap_id: ap_id}) do + def delete_user_activities(%User{ap_id: ap_id} = user) do ap_id |> Activity.Queries.by_actor() |> RepoStreamer.chunk_stream(50) - |> Stream.each(fn activities -> Enum.each(activities, &delete_activity/1) end) + |> Stream.each(fn activities -> + Enum.each(activities, fn activity -> delete_activity(activity, user) end) + end) |> Stream.run() end - defp delete_activity(%{data: %{"type" => "Create"}} = activity) do - activity - |> Object.normalize() - |> ActivityPub.delete() + defp delete_activity(%{data: %{"type" => "Create", "object" => object}}, user) do + {:ok, delete_data, _} = Builder.delete(user, object) + + Pipeline.common_pipeline(delete_data, local: true) end - defp delete_activity(%{data: %{"type" => "Like"}} = activity) do + defp delete_activity(%{data: %{"type" => "Like"}} = activity, _user) do object = Object.normalize(activity) activity.actor @@ -1553,7 +1555,7 @@ defp delete_activity(%{data: %{"type" => "Like"}} = activity) do |> ActivityPub.unlike(object) end - defp delete_activity(%{data: %{"type" => "Announce"}} = activity) do + defp delete_activity(%{data: %{"type" => "Announce"}} = activity, _user) do object = Object.normalize(activity) activity.actor @@ -1561,7 +1563,7 @@ defp delete_activity(%{data: %{"type" => "Announce"}} = activity) do |> ActivityPub.unannounce(object) end - defp delete_activity(_activity), do: "Doing nothing" + defp delete_activity(_activity, _user), do: "Doing nothing" def html_filter_policy(%User{no_rich_text: true}) do Pleroma.HTML.Scrubber.TwitterText From 999d639873b70f75c340dbac3360d25bca27a998 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 20:13:47 +0200 Subject: [PATCH 400/581] ActivityPub: Remove `delete` function. This is handled by the common pipeline now. --- lib/pleroma/web/activity_pub/activity_pub.ex | 61 --------- test/web/activity_pub/activity_pub_test.exs | 137 ------------------- 2 files changed, 198 deletions(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 1f4a09370..51f002129 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -519,67 +519,6 @@ defp do_unfollow(follower, followed, activity_id, local) do end end - @spec delete(User.t() | Object.t(), keyword()) :: {:ok, User.t() | Object.t()} | {:error, any()} - def delete(entity, options \\ []) do - with {:ok, result} <- Repo.transaction(fn -> do_delete(entity, options) end) do - result - end - end - - defp do_delete(%User{ap_id: ap_id, follower_address: follower_address} = user, _) do - with data <- %{ - "to" => [follower_address], - "type" => "Delete", - "actor" => ap_id, - "object" => %{"type" => "Person", "id" => ap_id} - }, - {:ok, activity} <- insert(data, true, true, true), - :ok <- maybe_federate(activity) do - {:ok, user} - end - end - - defp do_delete(%Object{data: %{"id" => id, "actor" => actor}} = object, options) do - local = Keyword.get(options, :local, true) - activity_id = Keyword.get(options, :activity_id, nil) - actor = Keyword.get(options, :actor, actor) - - user = User.get_cached_by_ap_id(actor) - to = (object.data["to"] || []) ++ (object.data["cc"] || []) - - with create_activity <- Activity.get_create_by_object_ap_id(id), - data <- - %{ - "type" => "Delete", - "actor" => actor, - "object" => id, - "to" => to, - "deleted_activity_id" => create_activity && create_activity.id - } - |> maybe_put("id", activity_id), - {:ok, activity} <- insert(data, local, false), - {:ok, object, _create_activity} <- Object.delete(object), - stream_out_participations(object, user), - _ <- decrease_replies_count_if_reply(object), - {:ok, _actor} <- decrease_note_count_if_public(user, object), - :ok <- maybe_federate(activity) do - {:ok, activity} - else - {:error, error} -> - Repo.rollback(error) - end - end - - defp do_delete(%Object{data: %{"type" => "Tombstone", "id" => ap_id}}, _) do - activity = - ap_id - |> Activity.Queries.by_object_id() - |> Activity.Queries.by_type("Delete") - |> Repo.one() - - {:ok, activity} - end - @spec block(User.t(), User.t(), String.t() | nil, boolean()) :: {:ok, Activity.t()} | {:error, any()} def block(blocker, blocked, activity_id \\ nil, local \\ true) do diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index edd7dfb22..b93ee708e 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -1331,143 +1331,6 @@ test "creates an undo activity for the last block" do end end - describe "deletion" do - setup do: clear_config([:instance, :rewrite_policy]) - - test "it reverts deletion on error" do - note = insert(:note_activity) - object = Object.normalize(note) - - with_mock(Utils, [:passthrough], maybe_federate: fn _ -> {:error, :reverted} end) do - assert {:error, :reverted} = ActivityPub.delete(object) - end - - assert Repo.aggregate(Activity, :count, :id) == 1 - assert Repo.get(Object, object.id) == object - assert Activity.get_by_id(note.id) == note - end - - test "it creates a delete activity and deletes the original object" do - note = insert(:note_activity) - object = Object.normalize(note) - {:ok, delete} = ActivityPub.delete(object) - - assert delete.data["type"] == "Delete" - assert delete.data["actor"] == note.data["actor"] - assert delete.data["object"] == object.data["id"] - - assert Activity.get_by_id(delete.id) != nil - - assert Repo.get(Object, object.id).data["type"] == "Tombstone" - end - - test "it doesn't fail when an activity was already deleted" do - {:ok, delete} = insert(:note_activity) |> Object.normalize() |> ActivityPub.delete() - - assert {:ok, ^delete} = delete |> Object.normalize() |> ActivityPub.delete() - end - - test "decrements user note count only for public activities" do - user = insert(:user, note_count: 10) - - {:ok, a1} = - CommonAPI.post(User.get_cached_by_id(user.id), %{ - "status" => "yeah", - "visibility" => "public" - }) - - {:ok, a2} = - CommonAPI.post(User.get_cached_by_id(user.id), %{ - "status" => "yeah", - "visibility" => "unlisted" - }) - - {:ok, a3} = - CommonAPI.post(User.get_cached_by_id(user.id), %{ - "status" => "yeah", - "visibility" => "private" - }) - - {:ok, a4} = - CommonAPI.post(User.get_cached_by_id(user.id), %{ - "status" => "yeah", - "visibility" => "direct" - }) - - {:ok, _} = Object.normalize(a1) |> ActivityPub.delete() - {:ok, _} = Object.normalize(a2) |> ActivityPub.delete() - {:ok, _} = Object.normalize(a3) |> ActivityPub.delete() - {:ok, _} = Object.normalize(a4) |> ActivityPub.delete() - - user = User.get_cached_by_id(user.id) - assert user.note_count == 10 - end - - test "it creates a delete activity and checks that it is also sent to users mentioned by the deleted object" do - user = insert(:user) - note = insert(:note_activity) - object = Object.normalize(note) - - {:ok, object} = - object - |> Object.change(%{ - data: %{ - "actor" => object.data["actor"], - "id" => object.data["id"], - "to" => [user.ap_id], - "type" => "Note" - } - }) - |> Object.update_and_set_cache() - - {:ok, delete} = ActivityPub.delete(object) - - assert user.ap_id in delete.data["to"] - end - - test "decreases reply count" do - user = insert(:user) - user2 = insert(:user) - - {:ok, activity} = CommonAPI.post(user, %{"status" => "1", "visibility" => "public"}) - reply_data = %{"status" => "1", "in_reply_to_status_id" => activity.id} - ap_id = activity.data["id"] - - {:ok, public_reply} = CommonAPI.post(user2, Map.put(reply_data, "visibility", "public")) - {:ok, unlisted_reply} = CommonAPI.post(user2, Map.put(reply_data, "visibility", "unlisted")) - {:ok, private_reply} = CommonAPI.post(user2, Map.put(reply_data, "visibility", "private")) - {:ok, direct_reply} = CommonAPI.post(user2, Map.put(reply_data, "visibility", "direct")) - - _ = CommonAPI.delete(direct_reply.id, user2) - assert %{data: data, object: object} = Activity.get_by_ap_id_with_object(ap_id) - assert object.data["repliesCount"] == 2 - - _ = CommonAPI.delete(private_reply.id, user2) - assert %{data: data, object: object} = Activity.get_by_ap_id_with_object(ap_id) - assert object.data["repliesCount"] == 2 - - _ = CommonAPI.delete(public_reply.id, user2) - assert %{data: data, object: object} = Activity.get_by_ap_id_with_object(ap_id) - assert object.data["repliesCount"] == 1 - - _ = CommonAPI.delete(unlisted_reply.id, user2) - assert %{data: data, object: object} = Activity.get_by_ap_id_with_object(ap_id) - assert object.data["repliesCount"] == 0 - end - - test "it passes delete activity through MRF before deleting the object" do - Pleroma.Config.put([:instance, :rewrite_policy], Pleroma.Web.ActivityPub.MRF.DropPolicy) - - note = insert(:note_activity) - object = Object.normalize(note) - - {:error, {:reject, _}} = ActivityPub.delete(object) - - assert Activity.get_by_id(note.id) - assert Repo.get(Object, object.id).data["type"] == object.data["type"] - end - end - describe "timeline post-processing" do test "it filters broken threads" do user1 = insert(:user) From 32b8386edeec3e9b24123c3ccc81a22f1edd5a1c Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Apr 2020 21:23:18 +0200 Subject: [PATCH 401/581] DeleteValidator: Don't federate local deletions of remote objects. Closes #1497 --- .../web/activity_pub/object_validator.ex | 8 +- .../object_validators/delete_validator.ex | 20 ++++- lib/pleroma/web/activity_pub/pipeline.ex | 4 +- .../activity_pub/object_validator_test.exs | 17 +++- test/web/common_api/common_api_test.exs | 80 +++++++++++++++++++ 5 files changed, 119 insertions(+), 10 deletions(-) diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index 32f606917..479f922f5 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -19,11 +19,11 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do def validate(object, meta) def validate(%{"type" => "Delete"} = object, meta) do - with {:ok, object} <- - object - |> DeleteValidator.cast_and_validate() - |> Ecto.Changeset.apply_action(:insert) do + with cng <- DeleteValidator.cast_and_validate(object), + do_not_federate <- DeleteValidator.do_not_federate?(cng), + {:ok, object} <- Ecto.Changeset.apply_action(cng, :insert) do object = stringify_keys(object) + meta = Keyword.put(meta, :do_not_federate, do_not_federate) {:ok, object, meta} end end diff --git a/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex index 951cc1414..a2eff7b69 100644 --- a/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex @@ -6,6 +6,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.DeleteValidator do use Ecto.Schema alias Pleroma.Activity + alias Pleroma.User alias Pleroma.Web.ActivityPub.ObjectValidators.Types import Ecto.Changeset @@ -45,12 +46,17 @@ def validate_data(cng) do cng |> validate_required([:id, :type, :actor, :to, :cc, :object]) |> validate_inclusion(:type, ["Delete"]) - |> validate_same_domain() + |> validate_actor_presence() + |> validate_deletion_rights() |> validate_object_or_user_presence() |> add_deleted_activity_id() end - def validate_same_domain(cng) do + def do_not_federate?(cng) do + !same_domain?(cng) + end + + defp same_domain?(cng) do actor_domain = cng |> get_field(:actor) @@ -63,11 +69,17 @@ def validate_same_domain(cng) do |> URI.parse() |> (& &1.host).() - if object_domain != actor_domain do + object_domain == actor_domain + end + + def validate_deletion_rights(cng) do + actor = User.get_cached_by_ap_id(get_field(cng, :actor)) + + if User.superuser?(actor) || same_domain?(cng) do cng - |> add_error(:actor, "is not allowed to delete object") else cng + |> add_error(:actor, "is not allowed to delete object") end end diff --git a/lib/pleroma/web/activity_pub/pipeline.ex b/lib/pleroma/web/activity_pub/pipeline.ex index 7ccee54c9..017e39abb 100644 --- a/lib/pleroma/web/activity_pub/pipeline.ex +++ b/lib/pleroma/web/activity_pub/pipeline.ex @@ -29,7 +29,9 @@ def common_pipeline(object, meta) do defp maybe_federate(activity, meta) do with {:ok, local} <- Keyword.fetch(meta, :local) do - if local do + do_not_federate = meta[:do_not_federate] + + if !do_not_federate && local do Federator.publish(activity) {:ok, :federated} else diff --git a/test/web/activity_pub/object_validator_test.exs b/test/web/activity_pub/object_validator_test.exs index 1d3646487..412db09ff 100644 --- a/test/web/activity_pub/object_validator_test.exs +++ b/test/web/activity_pub/object_validator_test.exs @@ -52,9 +52,11 @@ test "it's invalid if the object doesn't exist", %{valid_post_delete: valid_post test "it's invalid if the actor of the object and the actor of delete are from different domains", %{valid_post_delete: valid_post_delete} do + valid_user = insert(:user) + valid_other_actor = valid_post_delete - |> Map.put("actor", valid_post_delete["actor"] <> "1") + |> Map.put("actor", valid_user.ap_id) assert match?({:ok, _, _}, ObjectValidator.validate(valid_other_actor, [])) @@ -66,6 +68,19 @@ test "it's invalid if the actor of the object and the actor of delete are from d assert {:actor, {"is not allowed to delete object", []}} in cng.errors end + + test "it's valid if the actor of the object is a local superuser", + %{valid_post_delete: valid_post_delete} do + user = + insert(:user, local: true, is_moderator: true, ap_id: "https://gensokyo.2hu/users/raymoo") + + valid_other_actor = + valid_post_delete + |> Map.put("actor", user.ap_id) + + {:ok, _, meta} = ObjectValidator.validate(valid_other_actor, []) + assert meta[:do_not_federate] + end end describe "likes" do diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 1758662b0..32d91ce02 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -9,11 +9,13 @@ defmodule Pleroma.Web.CommonAPITest do alias Pleroma.Object alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.ActivityPub.Transmogrifier alias Pleroma.Web.ActivityPub.Visibility alias Pleroma.Web.AdminAPI.AccountView alias Pleroma.Web.CommonAPI import Pleroma.Factory + import Mock require Pleroma.Constants @@ -21,6 +23,84 @@ defmodule Pleroma.Web.CommonAPITest do setup do: clear_config([:instance, :limit]) setup do: clear_config([:instance, :max_pinned_statuses]) + describe "deletion" do + test "it allows users to delete their posts" do + user = insert(:user) + + {:ok, post} = CommonAPI.post(user, %{"status" => "namu amida butsu"}) + + with_mock Pleroma.Web.Federator, + publish: fn _ -> nil end do + assert {:ok, delete} = CommonAPI.delete(post.id, user) + assert delete.local + assert called(Pleroma.Web.Federator.publish(delete)) + end + + refute Activity.get_by_id(post.id) + end + + test "it does not allow a user to delete their posts" do + user = insert(:user) + other_user = insert(:user) + + {:ok, post} = CommonAPI.post(user, %{"status" => "namu amida butsu"}) + + assert {:error, "Could not delete"} = CommonAPI.delete(post.id, other_user) + assert Activity.get_by_id(post.id) + end + + test "it allows moderators to delete other user's posts" do + user = insert(:user) + moderator = insert(:user, is_moderator: true) + + {:ok, post} = CommonAPI.post(user, %{"status" => "namu amida butsu"}) + + assert {:ok, delete} = CommonAPI.delete(post.id, moderator) + assert delete.local + + refute Activity.get_by_id(post.id) + end + + test "it allows admins to delete other user's posts" do + user = insert(:user) + moderator = insert(:user, is_admin: true) + + {:ok, post} = CommonAPI.post(user, %{"status" => "namu amida butsu"}) + + assert {:ok, delete} = CommonAPI.delete(post.id, moderator) + assert delete.local + + refute Activity.get_by_id(post.id) + end + + test "superusers deleting non-local posts won't federate the delete" do + # This is the user of the ingested activity + _user = + insert(:user, + local: false, + ap_id: "http://mastodon.example.org/users/admin", + last_refreshed_at: NaiveDateTime.utc_now() + ) + + moderator = insert(:user, is_admin: true) + + data = + File.read!("test/fixtures/mastodon-post-activity.json") + |> Jason.decode!() + + {:ok, post} = Transmogrifier.handle_incoming(data) + + with_mock Pleroma.Web.Federator, + publish: fn _ -> nil end do + assert {:ok, delete} = CommonAPI.delete(post.id, moderator) + assert delete.local + refute called(Pleroma.Web.Federator.publish(:_)) + end + + refute Activity.get_by_id(post.id) + end + end + test "favoriting race condition" do user = insert(:user) users_serial = insert_list(10, :user) From 92efb888c7b25692af205b1a4dbce0ae689c439b Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Fri, 1 May 2020 09:51:41 +0300 Subject: [PATCH 402/581] Made follow request notifications non-optional (removed config switch). --- CHANGELOG.md | 2 +- config/config.exs | 2 -- config/description.exs | 14 -------------- lib/pleroma/notification.ex | 11 +---------- test/notification_test.exs | 20 +------------------- 5 files changed, 3 insertions(+), 46 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 65dd1b9c2..97704917d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,7 +20,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Configuration: `:restrict_unauthenticated` setting, restrict access for unauthenticated users to timelines (public and federate), user profiles and statuses. - New HTTP adapter [gun](https://github.com/ninenines/gun). Gun adapter requires minimum OTP version of 22.2 otherwise Pleroma won’t start. For hackney OTP update is not required. - Mix task to create trusted OAuth App. -- Notifications: Added `follow_request` notification type (configurable, see `[:notifications, :enable_follow_request_notifications]` setting). +- Notifications: Added `follow_request` notification type. - Added `:reject_deletes` group to SimplePolicy
API Changes diff --git a/config/config.exs b/config/config.exs index 2e538c4be..a6c6d6f99 100644 --- a/config/config.exs +++ b/config/config.exs @@ -562,8 +562,6 @@ inactivity_threshold: 7 } -config :pleroma, :notifications, enable_follow_request_notifications: false - config :pleroma, :oauth2, token_expires_in: 600, issue_new_refresh_token: true, diff --git a/config/description.exs b/config/description.exs index 7fac1e561..9d8e3b93c 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2273,20 +2273,6 @@ } ] }, - %{ - group: :pleroma, - key: :notifications, - type: :group, - description: "Notification settings", - children: [ - %{ - key: :enable_follow_request_notifications, - type: :boolean, - description: - "Enables notifications on new follow requests (causes issues with older PleromaFE versions)." - } - ] - }, %{ group: :pleroma, key: Pleroma.Emails.UserEmail, diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 9a109dfab..98289af08 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -293,17 +293,8 @@ def create_notifications(%Activity{data: %{"to" => _, "type" => "Create"}} = act end end - def create_notifications(%Activity{data: %{"type" => "Follow"}} = activity) do - if Pleroma.Config.get([:notifications, :enable_follow_request_notifications]) || - Activity.follow_accepted?(activity) do - do_create_notifications(activity) - else - {:ok, []} - end - end - def create_notifications(%Activity{data: %{"type" => type}} = activity) - when type in ["Like", "Announce", "Move", "EmojiReact"] do + when type in ["Follow", "Like", "Announce", "Move", "EmojiReact"] do do_create_notifications(activity) end diff --git a/test/notification_test.exs b/test/notification_test.exs index 0e9ffcb18..601a6c0ca 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -312,9 +312,7 @@ test "it creates `follow` notification for approved Follow activity" do }) end - test "if `follow_request` notifications are enabled, " <> - "it creates `follow_request` notification for pending Follow activity" do - clear_config([:notifications, :enable_follow_request_notifications], true) + test "it creates `follow_request` notification for pending Follow activity" do user = insert(:user) followed_user = insert(:user, locked: true) @@ -333,21 +331,6 @@ test "if `follow_request` notifications are enabled, " <> assert %{type: "follow"} = NotificationView.render("show.json", render_opts) end - test "if `follow_request` notifications are disabled, " <> - "it does NOT create `follow*` notification for pending Follow activity" do - clear_config([:notifications, :enable_follow_request_notifications], false) - user = insert(:user) - followed_user = insert(:user, locked: true) - - {:ok, _, _, _activity} = CommonAPI.follow(user, followed_user) - refute FollowingRelationship.following?(user, followed_user) - assert [] = Notification.for_user(followed_user) - - # After request is accepted, no new notifications are generated: - assert {:ok, _} = CommonAPI.accept_follow_request(user, followed_user) - assert [] = Notification.for_user(followed_user) - end - test "it doesn't create a notification for follow-unfollow-follow chains" do user = insert(:user) followed_user = insert(:user, locked: false) @@ -364,7 +347,6 @@ test "it doesn't create a notification for follow-unfollow-follow chains" do end test "dismisses the notification on follow request rejection" do - clear_config([:notifications, :enable_follow_request_notifications], true) user = insert(:user, locked: true) follower = insert(:user) {:ok, _, _, _follow_activity} = CommonAPI.follow(follower, user) From ecf37b46d2c06c701da390eba65239984afe683f Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 1 May 2020 14:31:24 +0300 Subject: [PATCH 403/581] pagination fix for service users filters --- lib/pleroma/user/query.ex | 11 +++--- .../web/admin_api/admin_api_controller.ex | 29 +++----------- lib/pleroma/web/admin_api/search.ex | 1 + .../admin_api/admin_api_controller_test.exs | 38 ++++++++++++++++++- 4 files changed, 49 insertions(+), 30 deletions(-) diff --git a/lib/pleroma/user/query.ex b/lib/pleroma/user/query.ex index ac77aab71..3a3b04793 100644 --- a/lib/pleroma/user/query.ex +++ b/lib/pleroma/user/query.ex @@ -45,6 +45,7 @@ defmodule Pleroma.User.Query do is_admin: boolean(), is_moderator: boolean(), super_users: boolean(), + exclude_service_users: boolean(), followers: User.t(), friends: User.t(), recipients_from_activity: [String.t()], @@ -88,6 +89,10 @@ 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")) + end + defp compose_query({key, value}, query) when key in @equal_criteria and not_empty_string(value) do where(query, [u], ^[{key, value}]) @@ -98,7 +103,7 @@ defp compose_query({key, values}, query) when key in @contains_criteria and is_l end defp compose_query({:tags, tags}, query) when is_list(tags) and length(tags) > 0 do - Enum.reduce(tags, query, &prepare_tag_criteria/2) + where(query, [u], fragment("? && ?", u.tags, ^tags)) end defp compose_query({:is_admin, _}, query) do @@ -192,10 +197,6 @@ defp compose_query({:limit, limit}, query) do defp compose_query(_unsupported_param, query), do: query - defp prepare_tag_criteria(tag, query) do - or_where(query, [u], fragment("? = any(?)", ^tag, u.tags)) - end - defp location_query(query, local) do where(query, [u], u.local == ^local) |> where([u], not is_nil(u.nickname)) diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index 816c11e01..bfcc81cb8 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -392,29 +392,12 @@ def list_users(conn, params) do email: params["email"] } - with {:ok, users, count} <- Search.user(Map.merge(search_params, filters)), - {:ok, users, count} <- filter_service_users(users, count), - do: - conn - |> json( - AccountView.render("index.json", - users: users, - count: count, - page_size: page_size - ) - ) - end - - defp filter_service_users(users, count) do - filtered_users = Enum.reject(users, &service_user?/1) - count = if Enum.any?(users, &service_user?/1), do: length(filtered_users), else: count - - {:ok, filtered_users, count} - end - - defp service_user?(user) do - String.match?(user.ap_id, ~r/.*\/relay$/) or - String.match?(user.ap_id, ~r/.*\/internal\/fetch$/) + with {:ok, users, count} <- Search.user(Map.merge(search_params, filters)) do + json( + conn, + AccountView.render("index.json", users: users, count: count, page_size: page_size) + ) + end end @filters ~w(local external active deactivated is_admin is_moderator) diff --git a/lib/pleroma/web/admin_api/search.ex b/lib/pleroma/web/admin_api/search.ex index 29cea1f44..c28efadd5 100644 --- a/lib/pleroma/web/admin_api/search.ex +++ b/lib/pleroma/web/admin_api/search.ex @@ -21,6 +21,7 @@ def user(params \\ %{}) do query = params |> Map.drop([:page, :page_size]) + |> Map.put(:exclude_service_users, true) |> User.Query.build() |> order_by([u], u.nickname) diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index f80dbf8dd..e3af01089 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -18,6 +18,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do alias Pleroma.ReportNote alias Pleroma.Tests.ObanHelpers alias Pleroma.User + alias Pleroma.Web alias Pleroma.UserInviteToken alias Pleroma.Web.ActivityPub.Relay alias Pleroma.Web.CommonAPI @@ -737,6 +738,39 @@ 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") + insert_list(25, :user) + + assert %{"count" => 26, "page_size" => 10, "users" => users1} = + conn + |> get("/api/pleroma/admin/users?page=1&filters=", %{page_size: "10"}) + |> json_response(200) + + assert Enum.count(users1) == 10 + assert service1 not in [users1] + assert service2 not in [users1] + + assert %{"count" => 26, "page_size" => 10, "users" => users2} = + conn + |> get("/api/pleroma/admin/users?page=2&filters=", %{page_size: "10"}) + |> json_response(200) + + assert Enum.count(users2) == 10 + assert service1 not in [users2] + assert service2 not in [users2] + + assert %{"count" => 26, "page_size" => 10, "users" => users3} = + conn + |> get("/api/pleroma/admin/users?page=3&filters=", %{page_size: "10"}) + |> json_response(200) + + assert Enum.count(users3) == 6 + assert service1 not in [users3] + assert service2 not in [users3] + end + test "renders empty array for the second page", %{conn: conn} do insert(:user) @@ -3526,7 +3560,7 @@ test "errors", %{conn: conn} do end test "success", %{conn: conn} do - base_url = Pleroma.Web.base_url() + base_url = Web.base_url() app_name = "Trusted app" response = @@ -3547,7 +3581,7 @@ test "success", %{conn: conn} do end test "with trusted", %{conn: conn} do - base_url = Pleroma.Web.base_url() + base_url = Web.base_url() app_name = "Trusted app" response = From 5f42e6629d862f0a8dcbbd1527998685b6932d52 Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 1 May 2020 13:34:47 +0200 Subject: [PATCH 404/581] DeleteValidator: Only allow deletion of certain types. --- .../object_validators/common_validations.ex | 48 ++++++++++++------- .../object_validators/delete_validator.ex | 12 ++++- lib/pleroma/web/activity_pub/side_effects.ex | 1 + .../activity_pub/object_validator_test.exs | 19 ++++++++ 4 files changed, 63 insertions(+), 17 deletions(-) diff --git a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex index d9a629a34..4e6ee2034 100644 --- a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex +++ b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex @@ -28,7 +28,9 @@ def validate_recipients_presence(cng, fields \\ [:to, :cc]) do end end - def validate_actor_presence(cng, field_name \\ :actor) do + def validate_actor_presence(cng, options \\ []) do + field_name = Keyword.get(options, :field_name, :actor) + cng |> validate_change(field_name, fn field_name, actor -> if User.get_cached_by_ap_id(actor) do @@ -39,25 +41,39 @@ def validate_actor_presence(cng, field_name \\ :actor) do end) end - def validate_object_presence(cng, field_name \\ :object) do + def validate_object_presence(cng, options \\ []) do + field_name = Keyword.get(options, :field_name, :object) + allowed_types = Keyword.get(options, :allowed_types, false) + cng - |> validate_change(field_name, fn field_name, object -> - if Object.get_cached_by_ap_id(object) do - [] - else - [{field_name, "can't find object"}] + |> validate_change(field_name, fn field_name, object_id -> + object = Object.get_cached_by_ap_id(object_id) + + cond do + !object -> + [{field_name, "can't find object"}] + + object && allowed_types && object.data["type"] not in allowed_types -> + [{field_name, "object not in allowed types"}] + + true -> + [] end end) end - def validate_object_or_user_presence(cng, field_name \\ :object) do - cng - |> validate_change(field_name, fn field_name, object -> - if Object.get_cached_by_ap_id(object) || User.get_cached_by_ap_id(object) do - [] - else - [{field_name, "can't find object"}] - end - end) + def validate_object_or_user_presence(cng, options \\ []) do + field_name = Keyword.get(options, :field_name, :object) + options = Keyword.put(options, :field_name, field_name) + + actor_cng = + cng + |> validate_actor_presence(options) + + object_cng = + cng + |> validate_object_presence(options) + + if actor_cng.valid?, do: actor_cng, else: object_cng end end diff --git a/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex index a2eff7b69..256ac70b6 100644 --- a/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex @@ -42,13 +42,23 @@ def add_deleted_activity_id(cng) do end end + @deletable_types ~w{ + Answer + Article + Audio + Event + Note + Page + Question + Video + } def validate_data(cng) do cng |> validate_required([:id, :type, :actor, :to, :cc, :object]) |> validate_inclusion(:type, ["Delete"]) |> validate_actor_presence() |> validate_deletion_rights() - |> validate_object_or_user_presence() + |> validate_object_or_user_presence(allowed_types: @deletable_types) |> add_deleted_activity_id() end diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 139e609f4..52bd5179f 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -36,6 +36,7 @@ def handle(%{data: %{"type" => "Like"}} = object, meta) do # - Set up notification # - Reduce the user note count # - Reduce the reply count + # - Stream out the activity def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, meta) do deleted_object = Object.normalize(deleted_object, false) || User.get_cached_by_ap_id(deleted_object) diff --git a/test/web/activity_pub/object_validator_test.exs b/test/web/activity_pub/object_validator_test.exs index 412db09ff..7ab1c8ffb 100644 --- a/test/web/activity_pub/object_validator_test.exs +++ b/test/web/activity_pub/object_validator_test.exs @@ -1,6 +1,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do use Pleroma.DataCase + alias Pleroma.Object alias Pleroma.Web.ActivityPub.Builder alias Pleroma.Web.ActivityPub.ObjectValidator alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator @@ -26,6 +27,24 @@ test "it is valid for a post deletion", %{valid_post_delete: valid_post_delete} assert valid_post_delete["deleted_activity_id"] end + test "it is invalid if the object isn't in a list of certain types", %{ + valid_post_delete: valid_post_delete + } do + object = Object.get_by_ap_id(valid_post_delete["object"]) + + data = + object.data + |> Map.put("type", "Like") + + {:ok, _object} = + object + |> Ecto.Changeset.change(%{data: data}) + |> Object.update_and_set_cache() + + {:error, cng} = ObjectValidator.validate(valid_post_delete, []) + assert {:object, {"object not in allowed types", []}} in cng.errors + end + test "it is valid for a user deletion", %{valid_user_delete: valid_user_delete} do assert match?({:ok, _, _}, ObjectValidator.validate(valid_user_delete, [])) end From 51f1dbf0a2bf6b61fdef0be56fd8f20a40827100 Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 1 May 2020 14:05:25 +0200 Subject: [PATCH 405/581] User deletion mix task: Use common pipeline. --- lib/mix/tasks/pleroma/user.ex | 7 +++++-- test/tasks/user_test.exs | 18 +++++++++++++----- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex index 40dd9bdc0..da140ac86 100644 --- a/lib/mix/tasks/pleroma/user.ex +++ b/lib/mix/tasks/pleroma/user.ex @@ -8,6 +8,8 @@ defmodule Mix.Tasks.Pleroma.User do alias Ecto.Changeset alias Pleroma.User alias Pleroma.UserInviteToken + alias Pleroma.Web.ActivityPub.Builder + alias Pleroma.Web.ActivityPub.Pipeline @shortdoc "Manages Pleroma users" @moduledoc File.read!("docs/administration/CLI_tasks/user.md") @@ -96,8 +98,9 @@ def run(["new", nickname, email | rest]) do def run(["rm", nickname]) do start_pleroma() - with %User{local: true} = user <- User.get_cached_by_nickname(nickname) do - User.perform(:delete, user) + with %User{local: true} = user <- User.get_cached_by_nickname(nickname), + {:ok, delete_data, _} <- Builder.delete(user, user.ap_id), + {:ok, _delete, _} <- Pipeline.common_pipeline(delete_data, local: true) do shell_info("User #{nickname} deleted.") else _ -> shell_error("No local user #{nickname}") diff --git a/test/tasks/user_test.exs b/test/tasks/user_test.exs index 8df835b56..ab56f07c1 100644 --- a/test/tasks/user_test.exs +++ b/test/tasks/user_test.exs @@ -4,14 +4,17 @@ defmodule Mix.Tasks.Pleroma.UserTest do alias Pleroma.Repo + alias Pleroma.Tests.ObanHelpers alias Pleroma.User alias Pleroma.Web.OAuth.Authorization alias Pleroma.Web.OAuth.Token use Pleroma.DataCase + use Oban.Testing, repo: Pleroma.Repo - import Pleroma.Factory import ExUnit.CaptureIO + import Mock + import Pleroma.Factory setup_all do Mix.shell(Mix.Shell.Process) @@ -87,12 +90,17 @@ test "user is not created" do test "user is deleted" do user = insert(:user) - Mix.Tasks.Pleroma.User.run(["rm", user.nickname]) + with_mock Pleroma.Web.Federator, + publish: fn _ -> nil end do + Mix.Tasks.Pleroma.User.run(["rm", user.nickname]) + ObanHelpers.perform_all() - assert_received {:mix_shell, :info, [message]} - assert message =~ " deleted" + assert_received {:mix_shell, :info, [message]} + assert message =~ " deleted" + refute User.get_by_nickname(user.nickname) - refute User.get_by_nickname(user.nickname) + assert called(Pleroma.Web.Federator.publish(:_)) + end end test "no user to delete" do From ebbd9c7f369f986b7a66f66eddab91537c490c79 Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 1 May 2020 14:22:39 +0200 Subject: [PATCH 406/581] AdminAPIController: Refactor. --- lib/pleroma/web/admin_api/admin_api_controller.ex | 14 ++------------ test/web/admin_api/admin_api_controller_test.exs | 2 +- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index 816c11e01..c09584fd1 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -133,18 +133,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do action_fallback(:errors) - def user_delete(%{assigns: %{user: admin}} = conn, %{"nickname" => nickname}) do - user = User.get_cached_by_nickname(nickname) - User.delete(user) - - ModerationLog.insert_log(%{ - actor: admin, - subject: [user], - action: "delete" - }) - - conn - |> json(nickname) + def user_delete(conn, %{"nickname" => nickname}) do + user_delete(conn, %{"nicknames" => [nickname]}) end def user_delete(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index f80dbf8dd..c92715fab 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -156,7 +156,7 @@ test "single user", %{admin: admin, conn: conn} do assert ModerationLog.get_log_entry_message(log_entry) == "@#{admin.nickname} deleted users: @#{user.nickname}" - assert json_response(conn, 200) == user.nickname + assert json_response(conn, 200) == [user.nickname] end test "multiple users", %{admin: admin, conn: conn} do From 1ead5f49b8da941399fa2afadd40cd8beb8ccf8d Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 1 May 2020 14:30:39 +0200 Subject: [PATCH 407/581] AdminApiController: Use common pipeline for user deletion. --- .../web/admin_api/admin_api_controller.ex | 13 +++++++-- .../admin_api/admin_api_controller_test.exs | 28 +++++++++++++------ 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index c09584fd1..9a12da027 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -17,6 +17,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do alias Pleroma.User alias Pleroma.UserInviteToken alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.ActivityPub.Builder + alias Pleroma.Web.ActivityPub.Pipeline alias Pleroma.Web.ActivityPub.Relay alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.AdminAPI.AccountView @@ -138,8 +140,15 @@ def user_delete(conn, %{"nickname" => nickname}) do end def user_delete(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do - users = nicknames |> Enum.map(&User.get_cached_by_nickname/1) - User.delete(users) + users = + nicknames + |> Enum.map(&User.get_cached_by_nickname/1) + + users + |> Enum.each(fn user -> + {:ok, delete_data, _} = Builder.delete(admin, user.ap_id) + Pipeline.common_pipeline(delete_data, local: true) + end) ModerationLog.insert_log(%{ actor: admin, diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index c92715fab..35001ab4a 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -6,8 +6,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do use Pleroma.Web.ConnCase use Oban.Testing, repo: Pleroma.Repo - import Pleroma.Factory import ExUnit.CaptureLog + import Mock + import Pleroma.Factory alias Pleroma.Activity alias Pleroma.Config @@ -146,17 +147,26 @@ test "GET /api/pleroma/admin/users/:nickname requires " <> test "single user", %{admin: admin, conn: conn} do user = insert(:user) - conn = - conn - |> put_req_header("accept", "application/json") - |> delete("/api/pleroma/admin/users?nickname=#{user.nickname}") + with_mock Pleroma.Web.Federator, + publish: fn _ -> nil end do + conn = + conn + |> put_req_header("accept", "application/json") + |> delete("/api/pleroma/admin/users?nickname=#{user.nickname}") - log_entry = Repo.one(ModerationLog) + ObanHelpers.perform_all() - assert ModerationLog.get_log_entry_message(log_entry) == - "@#{admin.nickname} deleted users: @#{user.nickname}" + refute User.get_by_nickname(user.nickname) - assert json_response(conn, 200) == [user.nickname] + log_entry = Repo.one(ModerationLog) + + assert ModerationLog.get_log_entry_message(log_entry) == + "@#{admin.nickname} deleted users: @#{user.nickname}" + + assert json_response(conn, 200) == [user.nickname] + + assert called(Pleroma.Web.Federator.publish(:_)) + end end test "multiple users", %{admin: admin, conn: conn} do From aea781cbd8fb43f906c6022a8d2e0bf896008203 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 1 May 2020 16:31:05 +0300 Subject: [PATCH 408/581] credo fix --- test/web/admin_api/admin_api_controller_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index e3af01089..d798412e3 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -18,8 +18,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do alias Pleroma.ReportNote alias Pleroma.Tests.ObanHelpers alias Pleroma.User - alias Pleroma.Web alias Pleroma.UserInviteToken + alias Pleroma.Web alias Pleroma.Web.ActivityPub.Relay alias Pleroma.Web.CommonAPI alias Pleroma.Web.MediaProxy From a912f72a3674f80fe665db466295192b4dab82a9 Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 1 May 2020 15:54:38 +0200 Subject: [PATCH 409/581] Signature: Handle non-ap ids in key ids. Mastodon and Gab sometimes send the format `acct:name@server`. --- lib/pleroma/signature.ex | 18 +++++++++++++++--- test/signature_test.exs | 18 ++++++++++++++---- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/lib/pleroma/signature.ex b/lib/pleroma/signature.ex index 6b0b2c969..d01728361 100644 --- a/lib/pleroma/signature.ex +++ b/lib/pleroma/signature.ex @@ -8,6 +8,7 @@ defmodule Pleroma.Signature do alias Pleroma.Keys alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.ActivityPub.ObjectValidators.Types def key_id_to_actor_id(key_id) do uri = @@ -21,12 +22,23 @@ def key_id_to_actor_id(key_id) do uri end - URI.to_string(uri) + maybe_ap_id = URI.to_string(uri) + + case Types.ObjectID.cast(maybe_ap_id) do + {:ok, ap_id} -> + {:ok, ap_id} + + _ -> + case Pleroma.Web.WebFinger.finger(maybe_ap_id) do + %{"ap_id" => ap_id} -> {:ok, ap_id} + _ -> {:error, maybe_ap_id} + end + end end def fetch_public_key(conn) do with %{"keyId" => kid} <- HTTPSignatures.signature_for_conn(conn), - actor_id <- key_id_to_actor_id(kid), + {:ok, actor_id} <- key_id_to_actor_id(kid), {:ok, public_key} <- User.get_public_key_for_ap_id(actor_id) do {:ok, public_key} else @@ -37,7 +49,7 @@ def fetch_public_key(conn) do def refetch_public_key(conn) do with %{"keyId" => kid} <- HTTPSignatures.signature_for_conn(conn), - actor_id <- key_id_to_actor_id(kid), + {:ok, actor_id} <- key_id_to_actor_id(kid), {:ok, _user} <- ActivityPub.make_user_from_ap_id(actor_id), {:ok, public_key} <- User.get_public_key_for_ap_id(actor_id) do {:ok, public_key} diff --git a/test/signature_test.exs b/test/signature_test.exs index d5a2a62c4..a7a75aa4d 100644 --- a/test/signature_test.exs +++ b/test/signature_test.exs @@ -44,7 +44,8 @@ test "it returns key" do test "it returns error when not found user" do assert capture_log(fn -> - assert Signature.fetch_public_key(make_fake_conn("test-ap_id")) == {:error, :error} + assert Signature.fetch_public_key(make_fake_conn("https://test-ap-id")) == + {:error, :error} end) =~ "[error] Could not decode user" end @@ -64,7 +65,7 @@ test "it returns key" do test "it returns error when not found user" do assert capture_log(fn -> - {:error, _} = Signature.refetch_public_key(make_fake_conn("test-ap_id")) + {:error, _} = Signature.refetch_public_key(make_fake_conn("https://test-ap_id")) end) =~ "[error] Could not decode user" end end @@ -100,12 +101,21 @@ test "it returns error" do describe "key_id_to_actor_id/1" do test "it properly deduces the actor id for misskey" do assert Signature.key_id_to_actor_id("https://example.com/users/1234/publickey") == - "https://example.com/users/1234" + {:ok, "https://example.com/users/1234"} end test "it properly deduces the actor id for mastodon and pleroma" do assert Signature.key_id_to_actor_id("https://example.com/users/1234#main-key") == - "https://example.com/users/1234" + {:ok, "https://example.com/users/1234"} + end + + test "it calls webfinger for 'acct:' accounts" do + with_mock(Pleroma.Web.WebFinger, + finger: fn _ -> %{"ap_id" => "https://gensokyo.2hu/users/raymoo"} end + ) do + assert Signature.key_id_to_actor_id("acct:raymoo@gensokyo.2hu") == + {:ok, "https://gensokyo.2hu/users/raymoo"} + end end end From 3453e54e6b00ca2aced07746ad4cfc22ebc404fb Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 1 May 2020 15:58:47 +0200 Subject: [PATCH 410/581] MappedSignatureToIdentityPlug: Fix. --- lib/pleroma/plugs/mapped_signature_to_identity_plug.ex | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/plugs/mapped_signature_to_identity_plug.ex b/lib/pleroma/plugs/mapped_signature_to_identity_plug.ex index 84b7c5d83..f44d4dee5 100644 --- a/lib/pleroma/plugs/mapped_signature_to_identity_plug.ex +++ b/lib/pleroma/plugs/mapped_signature_to_identity_plug.ex @@ -13,8 +13,9 @@ defmodule Pleroma.Web.Plugs.MappedSignatureToIdentityPlug do def init(options), do: options defp key_id_from_conn(conn) do - with %{"keyId" => key_id} <- HTTPSignatures.signature_for_conn(conn) do - Signature.key_id_to_actor_id(key_id) + with %{"keyId" => key_id} <- HTTPSignatures.signature_for_conn(conn), + {:ok, ap_id} <- Signature.key_id_to_actor_id(key_id) do + ap_id else _ -> nil From 57b31e79c213e57b32b604c97a6d1555ed73bcdb Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Fri, 1 May 2020 17:59:29 +0300 Subject: [PATCH 411/581] Updated PleromaFE bundle to prevent notifications loading issue due to unsupported parameter (`with_move`). --- priv/static/index.html | 2 +- .../static/css/app.1055039ce3f2fe4dd110.css | 108 ----------- .../css/app.1055039ce3f2fe4dd110.css.map | 1 - .../static/css/app.613cef07981cd95ccceb.css | 5 + .../css/app.613cef07981cd95ccceb.css.map | 1 + ...s => vendors~app.18fea621d430000acc27.css} | 31 ++- .../vendors~app.18fea621d430000acc27.css.map | 1 + .../vendors~app.b2603a50868c68a1c192.css.map | 1 - .../static/font/fontello.1587147224637.woff2 | Bin 11544 -> 0 bytes ...7224637.eot => fontello.1588344944597.eot} | Bin 22444 -> 22444 bytes ...7224637.svg => fontello.1588344944597.svg} | 0 ...7224637.ttf => fontello.1588344944597.ttf} | Bin 22276 -> 22276 bytes ...24637.woff => fontello.1588344944597.woff} | Bin 13656 -> 13656 bytes .../static/font/fontello.1588344944597.woff2 | Bin 0 -> 11536 bytes ...7224637.css => fontello.1588344944597.css} | 12 +- .../static/js/2.0bcc7512986083cd9ecf.js | Bin 0 -> 2190 bytes .../static/js/2.0bcc7512986083cd9ecf.js.map | Bin 0 -> 7763 bytes .../static/js/2.f158cbd2b8770e467dfe.js | Bin 2169 -> 0 bytes .../static/js/2.f158cbd2b8770e467dfe.js.map | Bin 7927 -> 0 bytes .../static/js/app.3de9191d7fd30b4bf68c.js | Bin 0 -> 1071665 bytes .../static/js/app.3de9191d7fd30b4bf68c.js.map | Bin 0 -> 1626532 bytes .../static/js/app.def6476e8bc9b214218b.js | Bin 1045614 -> 0 bytes .../static/js/app.def6476e8bc9b214218b.js.map | Bin 1658859 -> 0 bytes .../js/vendors~app.5b7c43d835cad9e56363.js | Bin 0 -> 411232 bytes .../vendors~app.5b7c43d835cad9e56363.js.map | Bin 0 -> 1737936 bytes .../js/vendors~app.c5bbd3734647f0cc7eef.js | Bin 377395 -> 0 bytes .../vendors~app.c5bbd3734647f0cc7eef.js.map | Bin 1737985 -> 0 bytes priv/static/static/static-fe.css | 183 ------------------ priv/static/sw-pleroma.js | Bin 31329 -> 31752 bytes priv/static/sw-pleroma.js.map | Bin 142358 -> 143966 bytes 30 files changed, 29 insertions(+), 316 deletions(-) delete mode 100644 priv/static/static/css/app.1055039ce3f2fe4dd110.css delete mode 100644 priv/static/static/css/app.1055039ce3f2fe4dd110.css.map create mode 100644 priv/static/static/css/app.613cef07981cd95ccceb.css create mode 100644 priv/static/static/css/app.613cef07981cd95ccceb.css.map rename priv/static/static/css/{vendors~app.b2603a50868c68a1c192.css => vendors~app.18fea621d430000acc27.css} (92%) create mode 100644 priv/static/static/css/vendors~app.18fea621d430000acc27.css.map delete mode 100644 priv/static/static/css/vendors~app.b2603a50868c68a1c192.css.map delete mode 100644 priv/static/static/font/fontello.1587147224637.woff2 rename priv/static/static/font/{fontello.1587147224637.eot => fontello.1588344944597.eot} (98%) rename priv/static/static/font/{fontello.1587147224637.svg => fontello.1588344944597.svg} (100%) rename priv/static/static/font/{fontello.1587147224637.ttf => fontello.1588344944597.ttf} (99%) rename priv/static/static/font/{fontello.1587147224637.woff => fontello.1588344944597.woff} (98%) create mode 100644 priv/static/static/font/fontello.1588344944597.woff2 rename priv/static/static/{fontello.1587147224637.css => fontello.1588344944597.css} (89%) create mode 100644 priv/static/static/js/2.0bcc7512986083cd9ecf.js create mode 100644 priv/static/static/js/2.0bcc7512986083cd9ecf.js.map delete mode 100644 priv/static/static/js/2.f158cbd2b8770e467dfe.js delete mode 100644 priv/static/static/js/2.f158cbd2b8770e467dfe.js.map create mode 100644 priv/static/static/js/app.3de9191d7fd30b4bf68c.js create mode 100644 priv/static/static/js/app.3de9191d7fd30b4bf68c.js.map delete mode 100644 priv/static/static/js/app.def6476e8bc9b214218b.js delete mode 100644 priv/static/static/js/app.def6476e8bc9b214218b.js.map create mode 100644 priv/static/static/js/vendors~app.5b7c43d835cad9e56363.js create mode 100644 priv/static/static/js/vendors~app.5b7c43d835cad9e56363.js.map delete mode 100644 priv/static/static/js/vendors~app.c5bbd3734647f0cc7eef.js delete mode 100644 priv/static/static/js/vendors~app.c5bbd3734647f0cc7eef.js.map delete mode 100644 priv/static/static/static-fe.css diff --git a/priv/static/index.html b/priv/static/index.html index 66c9b53de..6af441737 100644 --- a/priv/static/index.html +++ b/priv/static/index.html @@ -1 +1 @@ -Pleroma
\ No newline at end of file +Pleroma
\ No newline at end of file diff --git a/priv/static/static/css/app.1055039ce3f2fe4dd110.css b/priv/static/static/css/app.1055039ce3f2fe4dd110.css deleted file mode 100644 index 1867ca81a..000000000 --- a/priv/static/static/css/app.1055039ce3f2fe4dd110.css +++ /dev/null @@ -1,108 +0,0 @@ -.with-load-more-footer { - padding: 10px; - text-align: center; - border-top: 1px solid; - border-top-color: #222; - border-top-color: var(--border, #222); -} -.with-load-more-footer .error { - font-size: 14px; -} -.tab-switcher { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; -} -.tab-switcher .contents { - -ms-flex: 1 0 auto; - flex: 1 0 auto; - min-height: 0px; -} -.tab-switcher .contents .hidden { - display: none; -} -.tab-switcher .contents.scrollable-tabs { - -ms-flex-preferred-size: 0; - flex-basis: 0; - overflow-y: auto; -} -.tab-switcher .tabs { - display: -ms-flexbox; - display: flex; - position: relative; - width: 100%; - overflow-y: hidden; - overflow-x: auto; - padding-top: 5px; - box-sizing: border-box; -} -.tab-switcher .tabs::after, .tab-switcher .tabs::before { - display: block; - content: ""; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - border-bottom: 1px solid; - border-bottom-color: #222; - border-bottom-color: var(--border, #222); -} -.tab-switcher .tabs .tab-wrapper { - height: 28px; - position: relative; - display: -ms-flexbox; - display: flex; - -ms-flex: 0 0 auto; - flex: 0 0 auto; -} -.tab-switcher .tabs .tab-wrapper .tab { - width: 100%; - min-width: 1px; - position: relative; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - padding: 6px 1em; - padding-bottom: 99px; - margin-bottom: -93px; - white-space: nowrap; - color: #b9b9ba; - color: var(--tabText, #b9b9ba); - background-color: #182230; - background-color: var(--tab, #182230); -} -.tab-switcher .tabs .tab-wrapper .tab:not(.active) { - z-index: 4; -} -.tab-switcher .tabs .tab-wrapper .tab:not(.active):hover { - z-index: 6; -} -.tab-switcher .tabs .tab-wrapper .tab.active { - background: transparent; - z-index: 5; - color: #b9b9ba; - color: var(--tabActiveText, #b9b9ba); -} -.tab-switcher .tabs .tab-wrapper .tab img { - max-height: 26px; - vertical-align: top; - margin-top: -5px; -} -.tab-switcher .tabs .tab-wrapper:not(.active)::after { - content: ""; - position: absolute; - left: 0; - right: 0; - bottom: 0; - z-index: 7; - border-bottom: 1px solid; - border-bottom-color: #222; - border-bottom-color: var(--border, #222); -} -.with-subscription-loading { - padding: 10px; - text-align: center; -} -.with-subscription-loading .error { - font-size: 14px; -} - -/*# sourceMappingURL=app.1055039ce3f2fe4dd110.css.map*/ \ No newline at end of file diff --git a/priv/static/static/css/app.1055039ce3f2fe4dd110.css.map b/priv/static/static/css/app.1055039ce3f2fe4dd110.css.map deleted file mode 100644 index 861ee8313..000000000 --- a/priv/static/static/css/app.1055039ce3f2fe4dd110.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./src/hocs/with_load_more/with_load_more.scss","webpack:///./src/components/tab_switcher/tab_switcher.scss","webpack:///./src/hocs/with_subscription/with_subscription.scss"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA,C","file":"static/css/app.1055039ce3f2fe4dd110.css","sourcesContent":[".with-load-more-footer {\n padding: 10px;\n text-align: center;\n border-top: 1px solid;\n border-top-color: #222;\n border-top-color: var(--border, #222);\n}\n.with-load-more-footer .error {\n font-size: 14px;\n}",".tab-switcher {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher .contents {\n -ms-flex: 1 0 auto;\n flex: 1 0 auto;\n min-height: 0px;\n}\n.tab-switcher .contents .hidden {\n display: none;\n}\n.tab-switcher .contents.scrollable-tabs {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n overflow-y: auto;\n}\n.tab-switcher .tabs {\n display: -ms-flexbox;\n display: flex;\n position: relative;\n width: 100%;\n overflow-y: hidden;\n overflow-x: auto;\n padding-top: 5px;\n box-sizing: border-box;\n}\n.tab-switcher .tabs::after, .tab-switcher .tabs::before {\n display: block;\n content: \"\";\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n border-bottom: 1px solid;\n border-bottom-color: #222;\n border-bottom-color: var(--border, #222);\n}\n.tab-switcher .tabs .tab-wrapper {\n height: 28px;\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n}\n.tab-switcher .tabs .tab-wrapper .tab {\n width: 100%;\n min-width: 1px;\n position: relative;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n padding: 6px 1em;\n padding-bottom: 99px;\n margin-bottom: -93px;\n white-space: nowrap;\n color: #b9b9ba;\n color: var(--tabText, #b9b9ba);\n background-color: #182230;\n background-color: var(--tab, #182230);\n}\n.tab-switcher .tabs .tab-wrapper .tab:not(.active) {\n z-index: 4;\n}\n.tab-switcher .tabs .tab-wrapper .tab:not(.active):hover {\n z-index: 6;\n}\n.tab-switcher .tabs .tab-wrapper .tab.active {\n background: transparent;\n z-index: 5;\n color: #b9b9ba;\n color: var(--tabActiveText, #b9b9ba);\n}\n.tab-switcher .tabs .tab-wrapper .tab img {\n max-height: 26px;\n vertical-align: top;\n margin-top: -5px;\n}\n.tab-switcher .tabs .tab-wrapper:not(.active)::after {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 7;\n border-bottom: 1px solid;\n border-bottom-color: #222;\n border-bottom-color: var(--border, #222);\n}",".with-subscription-loading {\n padding: 10px;\n text-align: center;\n}\n.with-subscription-loading .error {\n font-size: 14px;\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/css/app.613cef07981cd95ccceb.css b/priv/static/static/css/app.613cef07981cd95ccceb.css new file mode 100644 index 000000000..c1d5f8188 --- /dev/null +++ b/priv/static/static/css/app.613cef07981cd95ccceb.css @@ -0,0 +1,5 @@ +.with-load-more-footer{padding:10px;text-align:center;border-top:1px solid;border-top-color:#222;border-top-color:var(--border, #222)}.with-load-more-footer .error{font-size:14px} +.tab-switcher{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.tab-switcher .contents{-ms-flex:1 0 auto;flex:1 0 auto;min-height:0px}.tab-switcher .contents .hidden{display:none}.tab-switcher .contents.scrollable-tabs{-ms-flex-preferred-size:0;flex-basis:0;overflow-y:auto}.tab-switcher .tabs{display:-ms-flexbox;display:flex;position:relative;width:100%;overflow-y:hidden;overflow-x:auto;padding-top:5px;box-sizing:border-box}.tab-switcher .tabs::after,.tab-switcher .tabs::before{display:block;content:"";-ms-flex:1 1 auto;flex:1 1 auto;border-bottom:1px solid;border-bottom-color:#222;border-bottom-color:var(--border, #222)}.tab-switcher .tabs .tab-wrapper{height:28px;position:relative;display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto}.tab-switcher .tabs .tab-wrapper .tab{width:100%;min-width:1px;position:relative;border-bottom-left-radius:0;border-bottom-right-radius:0;padding:6px 1em;padding-bottom:99px;margin-bottom:-93px;white-space:nowrap;color:#b9b9ba;color:var(--tabText, #b9b9ba);background-color:#182230;background-color:var(--tab, #182230)}.tab-switcher .tabs .tab-wrapper .tab:not(.active){z-index:4}.tab-switcher .tabs .tab-wrapper .tab:not(.active):hover{z-index:6}.tab-switcher .tabs .tab-wrapper .tab.active{background:transparent;z-index:5;color:#b9b9ba;color:var(--tabActiveText, #b9b9ba)}.tab-switcher .tabs .tab-wrapper .tab img{max-height:26px;vertical-align:top;margin-top:-5px}.tab-switcher .tabs .tab-wrapper:not(.active)::after{content:"";position:absolute;left:0;right:0;bottom:0;z-index:7;border-bottom:1px solid;border-bottom-color:#222;border-bottom-color:var(--border, #222)} +.with-subscription-loading{padding:10px;text-align:center}.with-subscription-loading .error{font-size:14px} + +/*# sourceMappingURL=app.613cef07981cd95ccceb.css.map*/ \ No newline at end of file diff --git a/priv/static/static/css/app.613cef07981cd95ccceb.css.map b/priv/static/static/css/app.613cef07981cd95ccceb.css.map new file mode 100644 index 000000000..556e0bb0b --- /dev/null +++ b/priv/static/static/css/app.613cef07981cd95ccceb.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/hocs/with_load_more/with_load_more.scss","webpack:///./src/components/tab_switcher/tab_switcher.scss","webpack:///./src/hocs/with_subscription/with_subscription.scss"],"names":[],"mappings":"AAAA,uBAAuB,aAAa,kBAAkB,qBAAqB,sBAAsB,qCAAqC,8BAA8B,e;ACApK,cAAc,oBAAoB,aAAa,0BAA0B,sBAAsB,wBAAwB,kBAAkB,cAAc,eAAe,gCAAgC,aAAa,wCAAwC,0BAA0B,aAAa,gBAAgB,oBAAoB,oBAAoB,aAAa,kBAAkB,WAAW,kBAAkB,gBAAgB,gBAAgB,sBAAsB,uDAAuD,cAAc,WAAW,kBAAkB,cAAc,wBAAwB,yBAAyB,wCAAwC,iCAAiC,YAAY,kBAAkB,oBAAoB,aAAa,kBAAkB,cAAc,sCAAsC,WAAW,cAAc,kBAAkB,4BAA4B,6BAA6B,gBAAgB,oBAAoB,oBAAoB,mBAAmB,cAAc,8BAA8B,yBAAyB,qCAAqC,mDAAmD,UAAU,yDAAyD,UAAU,6CAA6C,uBAAuB,UAAU,cAAc,oCAAoC,0CAA0C,gBAAgB,mBAAmB,gBAAgB,qDAAqD,WAAW,kBAAkB,OAAO,QAAQ,SAAS,UAAU,wBAAwB,yBAAyB,wC;ACAtlD,2BAA2B,aAAa,kBAAkB,kCAAkC,e","file":"static/css/app.613cef07981cd95ccceb.css","sourcesContent":[".with-load-more-footer{padding:10px;text-align:center;border-top:1px solid;border-top-color:#222;border-top-color:var(--border, #222)}.with-load-more-footer .error{font-size:14px}",".tab-switcher{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.tab-switcher .contents{-ms-flex:1 0 auto;flex:1 0 auto;min-height:0px}.tab-switcher .contents .hidden{display:none}.tab-switcher .contents.scrollable-tabs{-ms-flex-preferred-size:0;flex-basis:0;overflow-y:auto}.tab-switcher .tabs{display:-ms-flexbox;display:flex;position:relative;width:100%;overflow-y:hidden;overflow-x:auto;padding-top:5px;box-sizing:border-box}.tab-switcher .tabs::after,.tab-switcher .tabs::before{display:block;content:\"\";-ms-flex:1 1 auto;flex:1 1 auto;border-bottom:1px solid;border-bottom-color:#222;border-bottom-color:var(--border, #222)}.tab-switcher .tabs .tab-wrapper{height:28px;position:relative;display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto}.tab-switcher .tabs .tab-wrapper .tab{width:100%;min-width:1px;position:relative;border-bottom-left-radius:0;border-bottom-right-radius:0;padding:6px 1em;padding-bottom:99px;margin-bottom:-93px;white-space:nowrap;color:#b9b9ba;color:var(--tabText, #b9b9ba);background-color:#182230;background-color:var(--tab, #182230)}.tab-switcher .tabs .tab-wrapper .tab:not(.active){z-index:4}.tab-switcher .tabs .tab-wrapper .tab:not(.active):hover{z-index:6}.tab-switcher .tabs .tab-wrapper .tab.active{background:transparent;z-index:5;color:#b9b9ba;color:var(--tabActiveText, #b9b9ba)}.tab-switcher .tabs .tab-wrapper .tab img{max-height:26px;vertical-align:top;margin-top:-5px}.tab-switcher .tabs .tab-wrapper:not(.active)::after{content:\"\";position:absolute;left:0;right:0;bottom:0;z-index:7;border-bottom:1px solid;border-bottom-color:#222;border-bottom-color:var(--border, #222)}",".with-subscription-loading{padding:10px;text-align:center}.with-subscription-loading .error{font-size:14px}"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/css/vendors~app.b2603a50868c68a1c192.css b/priv/static/static/css/vendors~app.18fea621d430000acc27.css similarity index 92% rename from priv/static/static/css/vendors~app.b2603a50868c68a1c192.css rename to priv/static/static/css/vendors~app.18fea621d430000acc27.css index a2e625f5e..ef783cbb3 100644 --- a/priv/static/static/css/vendors~app.b2603a50868c68a1c192.css +++ b/priv/static/static/css/vendors~app.18fea621d430000acc27.css @@ -1,11 +1,11 @@ /*! - * Cropper.js v1.4.3 + * Cropper.js v1.5.6 * https://fengyuanchen.github.io/cropperjs * * Copyright 2015-present Chen Fengyuan * Released under the MIT license * - * Date: 2018-10-24T13:07:11.429Z + * Date: 2019-10-04T04:33:44.164Z */ .cropper-container { @@ -16,7 +16,6 @@ .cropper-container { -ms-touch-action: none; touch-action: none; -webkit-user-select: none; - -moz-user-select: none; -ms-user-select: none; user-select: none; } @@ -56,14 +55,14 @@ .cropper-drag-box { .cropper-modal { background-color: #000; - opacity: .5; + opacity: 0.5; } .cropper-view-box { display: block; height: 100%; - outline-color: rgba(51, 153, 255, 0.75); outline: 1px solid #39f; + outline-color: rgba(51, 153, 255, 0.75); overflow: hidden; width: 100%; } @@ -71,7 +70,7 @@ .cropper-view-box { .cropper-dashed { border: 0 dashed #eee; display: block; - opacity: .5; + opacity: 0.5; position: absolute; } @@ -97,28 +96,28 @@ .cropper-center { display: block; height: 0; left: 50%; - opacity: .75; + opacity: 0.75; position: absolute; top: 50%; width: 0; } -.cropper-center:before, -.cropper-center:after { +.cropper-center::before, +.cropper-center::after { background-color: #eee; content: ' '; display: block; position: absolute; } -.cropper-center:before { +.cropper-center::before { height: 1px; left: -3px; top: 0; width: 7px; } -.cropper-center:after { +.cropper-center::after { height: 7px; left: 0; top: -3px; @@ -130,7 +129,7 @@ .cropper-line, .cropper-point { display: block; height: 100%; - opacity: .1; + opacity: 0.1; position: absolute; width: 100%; } @@ -176,7 +175,7 @@ .cropper-line.line-s { .cropper-point { background-color: #39f; height: 5px; - opacity: .75; + opacity: 0.75; width: 5px; } @@ -252,12 +251,12 @@ @media (min-width: 992px) { @media (min-width: 1200px) { .cropper-point.point-se { height: 5px; - opacity: .75; + opacity: 0.75; width: 5px; } } -.cropper-point.point-se:before { +.cropper-point.point-se::before { background-color: #39f; bottom: -50%; content: ' '; @@ -304,4 +303,4 @@ .cropper-disabled .cropper-point { } -/*# sourceMappingURL=vendors~app.b2603a50868c68a1c192.css.map*/ \ No newline at end of file +/*# sourceMappingURL=vendors~app.18fea621d430000acc27.css.map*/ \ No newline at end of file diff --git a/priv/static/static/css/vendors~app.18fea621d430000acc27.css.map b/priv/static/static/css/vendors~app.18fea621d430000acc27.css.map new file mode 100644 index 000000000..057d67d6a --- /dev/null +++ b/priv/static/static/css/vendors~app.18fea621d430000acc27.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./node_modules/cropperjs/dist/cropper.css"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wCAAwC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA","file":"static/css/vendors~app.18fea621d430000acc27.css","sourcesContent":["/*!\n * Cropper.js v1.5.6\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2019-10-04T04:33:44.164Z\n */\n\n.cropper-container {\n direction: ltr;\n font-size: 0;\n line-height: 0;\n position: relative;\n -ms-touch-action: none;\n touch-action: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.cropper-container img {\n display: block;\n height: 100%;\n image-orientation: 0deg;\n max-height: none !important;\n max-width: none !important;\n min-height: 0 !important;\n min-width: 0 !important;\n width: 100%;\n}\n\n.cropper-wrap-box,\n.cropper-canvas,\n.cropper-drag-box,\n.cropper-crop-box,\n.cropper-modal {\n bottom: 0;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.cropper-wrap-box,\n.cropper-canvas {\n overflow: hidden;\n}\n\n.cropper-drag-box {\n background-color: #fff;\n opacity: 0;\n}\n\n.cropper-modal {\n background-color: #000;\n opacity: 0.5;\n}\n\n.cropper-view-box {\n display: block;\n height: 100%;\n outline: 1px solid #39f;\n outline-color: rgba(51, 153, 255, 0.75);\n overflow: hidden;\n width: 100%;\n}\n\n.cropper-dashed {\n border: 0 dashed #eee;\n display: block;\n opacity: 0.5;\n position: absolute;\n}\n\n.cropper-dashed.dashed-h {\n border-bottom-width: 1px;\n border-top-width: 1px;\n height: calc(100% / 3);\n left: 0;\n top: calc(100% / 3);\n width: 100%;\n}\n\n.cropper-dashed.dashed-v {\n border-left-width: 1px;\n border-right-width: 1px;\n height: 100%;\n left: calc(100% / 3);\n top: 0;\n width: calc(100% / 3);\n}\n\n.cropper-center {\n display: block;\n height: 0;\n left: 50%;\n opacity: 0.75;\n position: absolute;\n top: 50%;\n width: 0;\n}\n\n.cropper-center::before,\n.cropper-center::after {\n background-color: #eee;\n content: ' ';\n display: block;\n position: absolute;\n}\n\n.cropper-center::before {\n height: 1px;\n left: -3px;\n top: 0;\n width: 7px;\n}\n\n.cropper-center::after {\n height: 7px;\n left: 0;\n top: -3px;\n width: 1px;\n}\n\n.cropper-face,\n.cropper-line,\n.cropper-point {\n display: block;\n height: 100%;\n opacity: 0.1;\n position: absolute;\n width: 100%;\n}\n\n.cropper-face {\n background-color: #fff;\n left: 0;\n top: 0;\n}\n\n.cropper-line {\n background-color: #39f;\n}\n\n.cropper-line.line-e {\n cursor: ew-resize;\n right: -3px;\n top: 0;\n width: 5px;\n}\n\n.cropper-line.line-n {\n cursor: ns-resize;\n height: 5px;\n left: 0;\n top: -3px;\n}\n\n.cropper-line.line-w {\n cursor: ew-resize;\n left: -3px;\n top: 0;\n width: 5px;\n}\n\n.cropper-line.line-s {\n bottom: -3px;\n cursor: ns-resize;\n height: 5px;\n left: 0;\n}\n\n.cropper-point {\n background-color: #39f;\n height: 5px;\n opacity: 0.75;\n width: 5px;\n}\n\n.cropper-point.point-e {\n cursor: ew-resize;\n margin-top: -3px;\n right: -3px;\n top: 50%;\n}\n\n.cropper-point.point-n {\n cursor: ns-resize;\n left: 50%;\n margin-left: -3px;\n top: -3px;\n}\n\n.cropper-point.point-w {\n cursor: ew-resize;\n left: -3px;\n margin-top: -3px;\n top: 50%;\n}\n\n.cropper-point.point-s {\n bottom: -3px;\n cursor: s-resize;\n left: 50%;\n margin-left: -3px;\n}\n\n.cropper-point.point-ne {\n cursor: nesw-resize;\n right: -3px;\n top: -3px;\n}\n\n.cropper-point.point-nw {\n cursor: nwse-resize;\n left: -3px;\n top: -3px;\n}\n\n.cropper-point.point-sw {\n bottom: -3px;\n cursor: nesw-resize;\n left: -3px;\n}\n\n.cropper-point.point-se {\n bottom: -3px;\n cursor: nwse-resize;\n height: 20px;\n opacity: 1;\n right: -3px;\n width: 20px;\n}\n\n@media (min-width: 768px) {\n .cropper-point.point-se {\n height: 15px;\n width: 15px;\n }\n}\n\n@media (min-width: 992px) {\n .cropper-point.point-se {\n height: 10px;\n width: 10px;\n }\n}\n\n@media (min-width: 1200px) {\n .cropper-point.point-se {\n height: 5px;\n opacity: 0.75;\n width: 5px;\n }\n}\n\n.cropper-point.point-se::before {\n background-color: #39f;\n bottom: -50%;\n content: ' ';\n display: block;\n height: 200%;\n opacity: 0;\n position: absolute;\n right: -50%;\n width: 200%;\n}\n\n.cropper-invisible {\n opacity: 0;\n}\n\n.cropper-bg {\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC');\n}\n\n.cropper-hide {\n display: block;\n height: 0;\n position: absolute;\n width: 0;\n}\n\n.cropper-hidden {\n display: none !important;\n}\n\n.cropper-move {\n cursor: move;\n}\n\n.cropper-crop {\n cursor: crosshair;\n}\n\n.cropper-disabled .cropper-drag-box,\n.cropper-disabled .cropper-face,\n.cropper-disabled .cropper-line,\n.cropper-disabled .cropper-point {\n cursor: not-allowed;\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/css/vendors~app.b2603a50868c68a1c192.css.map b/priv/static/static/css/vendors~app.b2603a50868c68a1c192.css.map deleted file mode 100644 index e7013b291..000000000 --- a/priv/static/static/css/vendors~app.b2603a50868c68a1c192.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./node_modules/cropperjs/dist/cropper.css"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wCAAwC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA","file":"static/css/vendors~app.b2603a50868c68a1c192.css","sourcesContent":["/*!\n * Cropper.js v1.4.3\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2018-10-24T13:07:11.429Z\n */\n\n.cropper-container {\n direction: ltr;\n font-size: 0;\n line-height: 0;\n position: relative;\n -ms-touch-action: none;\n touch-action: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.cropper-container img {\n display: block;\n height: 100%;\n image-orientation: 0deg;\n max-height: none !important;\n max-width: none !important;\n min-height: 0 !important;\n min-width: 0 !important;\n width: 100%;\n}\n\n.cropper-wrap-box,\n.cropper-canvas,\n.cropper-drag-box,\n.cropper-crop-box,\n.cropper-modal {\n bottom: 0;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.cropper-wrap-box,\n.cropper-canvas {\n overflow: hidden;\n}\n\n.cropper-drag-box {\n background-color: #fff;\n opacity: 0;\n}\n\n.cropper-modal {\n background-color: #000;\n opacity: .5;\n}\n\n.cropper-view-box {\n display: block;\n height: 100%;\n outline-color: rgba(51, 153, 255, 0.75);\n outline: 1px solid #39f;\n overflow: hidden;\n width: 100%;\n}\n\n.cropper-dashed {\n border: 0 dashed #eee;\n display: block;\n opacity: .5;\n position: absolute;\n}\n\n.cropper-dashed.dashed-h {\n border-bottom-width: 1px;\n border-top-width: 1px;\n height: calc(100% / 3);\n left: 0;\n top: calc(100% / 3);\n width: 100%;\n}\n\n.cropper-dashed.dashed-v {\n border-left-width: 1px;\n border-right-width: 1px;\n height: 100%;\n left: calc(100% / 3);\n top: 0;\n width: calc(100% / 3);\n}\n\n.cropper-center {\n display: block;\n height: 0;\n left: 50%;\n opacity: .75;\n position: absolute;\n top: 50%;\n width: 0;\n}\n\n.cropper-center:before,\n.cropper-center:after {\n background-color: #eee;\n content: ' ';\n display: block;\n position: absolute;\n}\n\n.cropper-center:before {\n height: 1px;\n left: -3px;\n top: 0;\n width: 7px;\n}\n\n.cropper-center:after {\n height: 7px;\n left: 0;\n top: -3px;\n width: 1px;\n}\n\n.cropper-face,\n.cropper-line,\n.cropper-point {\n display: block;\n height: 100%;\n opacity: .1;\n position: absolute;\n width: 100%;\n}\n\n.cropper-face {\n background-color: #fff;\n left: 0;\n top: 0;\n}\n\n.cropper-line {\n background-color: #39f;\n}\n\n.cropper-line.line-e {\n cursor: ew-resize;\n right: -3px;\n top: 0;\n width: 5px;\n}\n\n.cropper-line.line-n {\n cursor: ns-resize;\n height: 5px;\n left: 0;\n top: -3px;\n}\n\n.cropper-line.line-w {\n cursor: ew-resize;\n left: -3px;\n top: 0;\n width: 5px;\n}\n\n.cropper-line.line-s {\n bottom: -3px;\n cursor: ns-resize;\n height: 5px;\n left: 0;\n}\n\n.cropper-point {\n background-color: #39f;\n height: 5px;\n opacity: .75;\n width: 5px;\n}\n\n.cropper-point.point-e {\n cursor: ew-resize;\n margin-top: -3px;\n right: -3px;\n top: 50%;\n}\n\n.cropper-point.point-n {\n cursor: ns-resize;\n left: 50%;\n margin-left: -3px;\n top: -3px;\n}\n\n.cropper-point.point-w {\n cursor: ew-resize;\n left: -3px;\n margin-top: -3px;\n top: 50%;\n}\n\n.cropper-point.point-s {\n bottom: -3px;\n cursor: s-resize;\n left: 50%;\n margin-left: -3px;\n}\n\n.cropper-point.point-ne {\n cursor: nesw-resize;\n right: -3px;\n top: -3px;\n}\n\n.cropper-point.point-nw {\n cursor: nwse-resize;\n left: -3px;\n top: -3px;\n}\n\n.cropper-point.point-sw {\n bottom: -3px;\n cursor: nesw-resize;\n left: -3px;\n}\n\n.cropper-point.point-se {\n bottom: -3px;\n cursor: nwse-resize;\n height: 20px;\n opacity: 1;\n right: -3px;\n width: 20px;\n}\n\n@media (min-width: 768px) {\n .cropper-point.point-se {\n height: 15px;\n width: 15px;\n }\n}\n\n@media (min-width: 992px) {\n .cropper-point.point-se {\n height: 10px;\n width: 10px;\n }\n}\n\n@media (min-width: 1200px) {\n .cropper-point.point-se {\n height: 5px;\n opacity: .75;\n width: 5px;\n }\n}\n\n.cropper-point.point-se:before {\n background-color: #39f;\n bottom: -50%;\n content: ' ';\n display: block;\n height: 200%;\n opacity: 0;\n position: absolute;\n right: -50%;\n width: 200%;\n}\n\n.cropper-invisible {\n opacity: 0;\n}\n\n.cropper-bg {\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC');\n}\n\n.cropper-hide {\n display: block;\n height: 0;\n position: absolute;\n width: 0;\n}\n\n.cropper-hidden {\n display: none !important;\n}\n\n.cropper-move {\n cursor: move;\n}\n\n.cropper-crop {\n cursor: crosshair;\n}\n\n.cropper-disabled .cropper-drag-box,\n.cropper-disabled .cropper-face,\n.cropper-disabled .cropper-line,\n.cropper-disabled .cropper-point {\n cursor: not-allowed;\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/font/fontello.1587147224637.woff2 b/priv/static/static/font/fontello.1587147224637.woff2 deleted file mode 100644 index 6192c0f22c3638fc635ae06c158a6345731ceb33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11544 zcmV+zE$7mAPew8T0RR9104*2*4*&oF09OP604%)#0RR9100000000000000000000 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

#Q+1u7#+kOX?5ZfA%NRPB+(1qD&?5%2@# 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 delta 57 zcmZ3po^j23#tAme*Y(#-w136S-I29fhq2aKdX4_|cz&C&4BX5w7=Yl`{zY*xdh-#N G7eWAhM-|-w diff --git a/priv/static/static/font/fontello.1587147224637.svg b/priv/static/static/font/fontello.1588344944597.svg similarity index 100% rename from priv/static/static/font/fontello.1587147224637.svg rename to priv/static/static/font/fontello.1588344944597.svg diff --git a/priv/static/static/font/fontello.1587147224637.ttf b/priv/static/static/font/fontello.1588344944597.ttf similarity index 99% rename from priv/static/static/font/fontello.1587147224637.ttf rename to priv/static/static/font/fontello.1588344944597.ttf index ec6f7f9b47ead3494c58b530b7582b99b1062fff..b990cea9a4cc5969818f885dd184f4acf28ab775 100644 GIT binary patch delta 49 xcmZo!$JnxtaY7@rfk@QGmRe`&WbyCu{5D@1xS3xt0Ku(`FT!B-W*L_kLIAiO5)J?W delta 49 xcmZo!$JnxtaY7?AcSqL7mRe`&HTu`%`E9;3a5KMP0D@cl7sbKo%`z@8gaF5t5)J?W diff --git a/priv/static/static/font/fontello.1587147224637.woff b/priv/static/static/font/fontello.1588344944597.woff similarity index 98% rename from priv/static/static/font/fontello.1587147224637.woff rename to priv/static/static/font/fontello.1588344944597.woff index da56c9221a28baa37ae1cc647fb95d65e4bd9f42..93d102c6f40332c7aecb94b0b1ec83f3f24ba7a7 100644 GIT binary patch delta 67 zcmV-J0KEU$YS?O!!wE6~001@_Fcey`%(gEn diff --git a/priv/static/static/font/fontello.1588344944597.woff2 b/priv/static/static/font/fontello.1588344944597.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..bc4d4dadaa88771c738116e37935c8db40f6a930 GIT binary patch literal 11536 zcmV+rE$`BIPew8T0RR9104)#z4*&oF09OP604%rw0RR9100000000000000000000 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 Cq(3qM literal 0 HcmV?d00001 diff --git a/priv/static/static/fontello.1587147224637.css b/priv/static/static/fontello.1588344944597.css similarity index 89% rename from priv/static/static/fontello.1587147224637.css rename to priv/static/static/fontello.1588344944597.css index 48e6a5b3c..000c1207a 100644 --- a/priv/static/static/fontello.1587147224637.css +++ b/priv/static/static/fontello.1588344944597.css @@ -1,11 +1,11 @@ @font-face { font-family: "Icons"; - src: url("./font/fontello.1587147224637.eot"); - src: url("./font/fontello.1587147224637.eot") format("embedded-opentype"), - url("./font/fontello.1587147224637.woff2") format("woff2"), - url("./font/fontello.1587147224637.woff") format("woff"), - url("./font/fontello.1587147224637.ttf") format("truetype"), - url("./font/fontello.1587147224637.svg") format("svg"); + src: url("./font/fontello.1588344944597.eot"); + src: url("./font/fontello.1588344944597.eot") format("embedded-opentype"), + url("./font/fontello.1588344944597.woff2") format("woff2"), + url("./font/fontello.1588344944597.woff") format("woff"), + url("./font/fontello.1588344944597.ttf") format("truetype"), + url("./font/fontello.1588344944597.svg") format("svg"); font-weight: normal; font-style: normal; } diff --git a/priv/static/static/js/2.0bcc7512986083cd9ecf.js b/priv/static/static/js/2.0bcc7512986083cd9ecf.js new file mode 100644 index 0000000000000000000000000000000000000000..680c9f82a190572e8e90864044065dd174b83eb0 GIT binary patch literal 2190 zcmbVNZExE)5dOYjp|Dv;q7);$apFkOr?vw&tk|%ZPli#@6m7AgNr9x}1d9Iqj-1OUO+i=r|^4%PbOr9ALAqD zgA&)$rA`0W?o}1)e3E6~ch8m*Caek41mA9zNo%P#b;zf)thxQ?t;sVd>ENTSly5Y@ z%hRn-*IM4L>}@gH;&(AFq}bP* zp$K&yjZSw#R(Ts|_T}j$)XK9{AFPu=L>?ql2L6qRpFQDy9B6O_acWxuIH4tX$F6!G z5k~n02H*e(j~ik14}-7Dcmi@h3SO)wq>BS#p_T^YN5LR%U@L7`__d{2LtYxWPkvNd z;zd}3zQFVW8jzA4sV(2gvj)VaBh(!>TDScOr7RrdO(RW(5%gLj%A?3|wrjNI)n{2L zjv*f?Om66UIF!5YH5iJW%B>0*9S+M1(LktTeW@^k*iRCI5%*S0w&%`Z^nsfnLc&Af zq6UuiMMr?;cvJ7~NsM&O0W}0dgXAFyGyb4m9Mm;Ckj$0G)r_Kh4m9=UudA<81k4#H z*c>4|bSWIVB+I}~g_A&yPg-sx<)MGOh|AezdNseu=I=#y NCB>S3^=!+VzX4z(2IK$$ literal 0 HcmV?d00001 diff --git a/priv/static/static/js/2.0bcc7512986083cd9ecf.js.map b/priv/static/static/js/2.0bcc7512986083cd9ecf.js.map new file mode 100644 index 0000000000000000000000000000000000000000..488843d6a2002b4a186b3e693d6cb5923b91b1ff GIT binary patch literal 7763 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


_D*3SQ4?fwN-TNddmy2 zWd+Pr|LI|I#FbofQnpG1ZW>!8jQa$gVZGIc?W}b`IAb4E{IBO$=GR@BRrPZVffewz z!MbZ#|259nIW^O7L9^~B;}Q1GYH1stRB`|r!BZ4N=hkRtwkf|Q`j`RL6H-kvnWqVs(Xl~v)~She;| zpd{D6K*%KQ$R_;x1t@xh)K$Kv)Q?Np>>nO!=cWB)xUyVhw8<@!ZukIvA;`U4ZrQ3H zAt4XJ6*jhjcHm?8?t@hqRe~Gfgd@^j*3JY4iq*4h_6L3ZE6(ZG&E|AA$|an5#f(DQ z*nlBI2-jS~ztR^7 zu|zQL{cLhk)y+L-S$l^<&Pvi`{Yu+Py`L_`P4%WQG_IBG6^n~YGaHs_H~L(3`?T1L zI{S`gO3a6qlyJ%RfI;F1$dWl^WNviKz%V*s5f417yfcqyg9xb@1B8Yw_}6qG#@lfi zTE6JP6?cv>KqH^;?9a9a1#UX;y)!L|_C#>cR6EwFGfHIQ$s^ zX5*J}erScY?(PxL2_h2<5YFM3!~N+yd*^p;TGQV7)|QH8Cxhhh{D@GF?vg&A+`i4_ z;IC#8trSGUh0X@;bf7do#$Vg*{r=q_ zx7$Cy-s*h)_OATLdU)rES48x1 zDB5S8eQq1ZKiglTS$||6qdCf;;rS3B?a%qj{vMj0>E1cgZzk-&zt|cKuefAHvI#Ws z@(P299#?Pz(?M`t{M){?}MtjEg?~i+=$m z>_dY?I1q~>7niWb=IAb6p)Cnq9Q@WDhTnee`Dz^9-Dab&BSiOsqT)YeVcnh}BZx20 zrV{$sjvj$mC6iW>wP1W;5s{W2#FpIq#`GCR^P9N8>M0JXfT4Uw

!{G+gz<7h4h3 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 literal 0 HcmV?d00001 diff --git a/priv/static/static/js/app.3de9191d7fd30b4bf68c.js.map b/priv/static/static/js/app.3de9191d7fd30b4bf68c.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0643ca253157cd9e649282b518e1ad7a2b95e7d5 GIT binary patch literal 1626532 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

qLsxVGvVeEd6Nc&;tUnKYD?L)y2V6T z%U=rAGTzEVUo7@~3R4wFEuFpyJIp>%eZpB=T13O1*@%J9VDO*wIIMgG$ggF6Cc)0D z!WAeQifhi8cHjmUPFG%bn}FIf6+YkiZY{Q#%+q5$9{=#B<#CNWld;83DQOLH9V->> zV-UOfhVvUdEG+6Pj?D-J%)|GBE7!(N4V~3h#&xA1$VvHRv$xq1%~iA2xM}e8LF4kY zap}gFVZX)t6Wy_nSOWe~U)Hk)XE`JGL$&Wu=-~5P&u)@SaHPli2BS~4-8F5_DrT}n zCnzEO1(5*YMYw4We5k(2WG6x<2KO5_K-!N^DLJ%8V9BXwgTyQU-bu-DK z8D!ib^G{@=*J#8iW4sF_nBS929WK;)PIg-%>mDzEyXaR2C^YFj{{NhoZ<*FEV*8qgzFgF_!@yKZqyactzqVpU-q8pEsWP@$6QtN zNUIa9(RlgLi6e^|6L7y)?4#Ne(@~_>wO{yiBWx~OsD-NoFE#|gx}}sQKs^0;iUBz7 zu)eVp2{$+iMMX9SqcmK!?9Pj|b2i_34nU#n*^=eFV#&7cp8d=;2f|^y^_P|kkA#pf zr+fx3QdaI|5i*TUUdQ)C%p084=F>Q)*_^v|xqP6u|_y(HD>0=*=CK$ zJNri@hRQq}T4Sj~6F!plCS$a*wYlM!mR6^8IhO{wDbftF6=NLIJ!qf{K)E5 zfT-B(<*3)YL29gRrEHzfCTzTe>2aAG+#v?|tl4o&$LyA)L zPDOg>C97D3!$_Dwc&Q>b8b>fpF$#{01~YaTb|WEdJPtQJPJ#W)-`Y$hBG%2bB|cQO zQDV=@dwG!=u(}}qaW5SSkCKj)RAhqQWH)gsPE>-#Gz+3lIQ?V7@E$ReP#2P!3%ssV zPy^LKvgIwh!(p_pAu>vG&{4ex(ypiI`xh{9HhwJ``7P1guKJ&b)xj)oZ>AA7lc23W z?zl6>wpBf7&dh&7%#KoQZ1yB<>>2`Venf93*?6KXKuCA?Mu#pOn>G+cOZ7h!tn{S) z?eq#*fvH&Bb_82eVOOJhSTGliYy{26<68E0Pq$!}W7cdRPGiRuVs8raiPk3xw$T=o zy68hV#Q6#Up%|Pa)%xp!&crNkY)YH9nl)hA1A`t7C6v$hg2bSfGb9yrUpO=he-GYo zYLwVV&D^xX}B2kfIQBWGgpkAt}#>0jSB0W=kWNR(inf zK;RS^+N|YXL5u^UU+JO#^q69j_Oh5pCIZQx?2EO%i;DSxD3pJu z%j2){8rWujNvZv?io;UGA3nFNbFr|nb(K5!=APdL?nji}mK$UF&Df_qpOP(6$TE54 zR5Cvc>WYuG`pB>b-)R=U`vcgH;#Lb~NB&Lza4ZC<7IyuDn*jrmZ>ErEo3A`%om1FO z?el3Lsu0v{uZv=?X13xt~PGOEo$aA4MwM%L@h(Tg{yS_c{1 zoD8MHF*!dkHln$_wZ8e9FC+^^H)Wdl4~}{1=%fJ@j1U3{mXmc6S*peg3Qr?B7bl+Pbs^xNH(8wZ2 zAY@HdjHXJV?Z%wMEs{H(C#iYlhZvRZ%iPE$PHBB$Wy8I9K9^fvE-3@+MQ;27$XFwa zP}BhXMsT;vnhE9B0k6RI*C|8k9MF&wTIHLz5Sl$?Dcd8BnxC`W?0l}~3anYo zrpAQOq9_8%<0@rJj5VxzTgzeawE2qt7)U)JW=0*Q&_;a7Cq%7y2#0>f^EiZ3!3vqa zDc@w!fu&b*LbfoKnc6qS0-Ec|9Kg9C-go=(wS8(ytd@7J?}fHDk6?*V5-FIXSa4S! zkw{@)>e5GeSS@w13IJQFS;;)n@OunKCR1Qw)^qdJ6SAUn?PeheBMD_m3|22lGtEvD zp?5wHRghm5VJY)WxFv(589CI#lBu!_ONubz@)D0Q&F)4rdv?^eron;zvhx@m;2dknWL-$n{#8g&9kagN6_T^lguDDK`k0JfiQQLHnyHA1y#XZ+ZJ?pD&sN#d%)K(c3&8hIJL$~DdVZ+xSc=711U#{? zRw-njpflypRL!RHw`j%W&sp6TK-j1Brb8?Gnxk&881RQXv(JRZkI2>2*NPsf|SA~AU^HcN((nu?stUctpQn@uaxAd~XBqbX#h6+EL&Q}x~oB;EK$^@PS9AQt% z7qvFXTuTENSYUXhfJpw_h?7G-zZ2dv;I*p!SBX+9a!!h{qc!0pZ{c{j=C`eIzA*RE zXsn5*Krq)jUiwR6?2y#9H|l&O2JAD&4TAmD7=nf|lUhN#?#9(Dv-&Kp!>2XhWq>>F zhBL&7O^^hg`DANUf`uL2c}7c@>s@8H?Wn2u1|547#YE>-c2Dh$JolP>OK+&LLP+yf zabwRM_<>h$>^y;aj)x7oyr6OBQc#d{v0jdv0@*PtVnMW;=>mlaD+)j2-n)On7I2 zf>WM)5f1&MrlK=PGI1p0w3EeWx0Np3D5G~NI5&-tC!AcUWVJIN_H3*1XJoumcvEIL zzwr6=)cH62svI^S`wRpG;-qZH7QiB*ro(@6K(SlF=MrW1In{iD%*q8q_gYQqbs{~O zM^&^FJtRoT?z{vu8+S~~CYaB#lXiZ>wrVBiJ` z1QgVm>-aJm^BR$Gb;0!74)6d*3Pbos-}oTt)f?eT4U=pFboz{j4*en_FFM^Yhg|B9 z&{EW7|NF#9^R}2&2-9N%5{{S+8^o<+aW#y^#p$Rsy5V+?dj%n&h07_AdTKY?e-Nd| zC`>%-k(z|GUo%~45iF#AzjkIJdn#u!(W=qT7#)gjC+x*t-N47b2REx2l`X)oCJ_jG zpps7P5OVzNPBiKhM`?I2^!9>U3$WlU0Mownq?ckd+J zy?bYUdiPG-%DZ>U7{xB(spQXTXKR!zsP1h{xm2JT&fQsnG#hg*TJ~&zEXkfwRRaDB zGv<{b*LLDhd;8F2$4*Dc*uRm7`5`5IZXw=XL@Z)w2wHV_F;Nki17s|}LM<_bOhkGO zm)jHK_jnypsHruY-hR{Y+V-YE#XRk(?Ja!{FS&T_VoVl8tdTfeQT%aRhIx^+O=BFm z^xY(Lj>uebb$P0xOLzEJ8N1+dl7j1;DHqYbN+3gmQCTh?9pgfFbaiuYEMC}s477m& z#u<7RpUJx}i|U$cTptQ&6zLaOqqD1G*PO!l!$)KlFSgmj@)z#S2PBZx{j^VRcrlVX z^2G%6R&(FJm=qoSimB!=S4?t`x=m@g1g<2f{y@d_;5E3CC`V1iNxP6JrY?qSt}ha1 z3{43vE}e(o=KX*2lm00g>4=Sa;y->#t|z0An-d6Wk*oX#)Auu!U<62~Jj65a(2yXc zwQd6qWFbQ}iz2?p73k#P@~kT__7wpUmYe|_bHst@+b@^G6o)ht9ITS3aPTCRmf8zl zg74wkVy8d>Bl+P9bimh%tBKYUolXlGs|9mB%my?vIA5Wxz~DD5O9Y0^*>k)W7|%X= zznOW|w;=;s*OJ8}Z;qo9UzK(2EY)6+7kOu~bOSYxL0^NPASxG&*_SjONC}0om`ygR z7(ndVfz(k7hNT;88E?q&oR86&_=NDPUu`Hcw}>^0| z9iu?LZg#PPDzQS;X*#Xw;cazNT~a4vd&GNwHC+JGe#r)EdqA8YH(P}vbAm!g@!>X( zCXaBjaEBgUIGy#{qz8XTGn!V+gl0i=4Sm=5FWFm4o<&(gZq3M>CTrAkBL^GY8CsG5 zq_iFrkZ5q=kf@2upECPCJkYR)y=5G=TZF{{1n#-;;0UXSrLCA?m+Fd1x^`DgY1)Om zLR$AO^e%$##@j!Bw{N9zP}BU1P$ADR3l);+1$fds0^trIp?Lj|pyNYyQe zV$;uGNY?JTo)y-@iy511h07@GwQ?6%)-zYfZuP24p+whC<#U+WoZL0emE-fkZj0QiN(6-pTB!f>IOrL588RHT9Mys7XC$at^005vAA zl%1kQ7s@GNt(!x(szRyshVbUpH2`V(^?rr7RP$VZ>S=4J+STAS*rD_q4(H1zhR<|#|3iBKPg^rdB7l{dpDd_g<{1k zEVkQo2Ayi*J?MS&Blv4Y&9+tJ{lm4K&5!S`72{A)XMpr4eNsH2A8iMc2P8H#II`ES z?&(5JcO%)k__7-n|CG_`hf~jo*Dr(ylSnchDj?$=5*IL^P{9(nZsVr zMI$%kbTr4WHSjR}1ucMsDc5$EccCOw^aY%;Uq= zFb%`#vX#SBlWurj7LOFLWYUt&)8ZtaWJSBV} zK5<^=XT_XHDkrmebqe1c(S0ygu3#*pwzNNyFF}0>E7K0f%n(rq+JGz^R9#!Nj(zBLCtA{pz4N} zLyk8Yiy47f{R?w%vBsTWxxK}o8jCIH(IgvM;m+Xjd`&vWSqO%GGqX1iPns8$l*uhv zz|@gOFdZxDx@eY@<<7tE<}WP4?8Bizb;MC{IH>3DQ50oj@fxY->nV6b&G}7WL5&JCf&^{MKGM6 z=fxfJ}@zox%){}T-IPEInM)DkA$v!bmHh2GXzC?@3LaKY;%yHp~D2H@ncRfN< ze^Q7dLaNn5+QmRfvoO-{PrBcLMgVrUOuyh@5nQjdyNGQt_Ls?1l$pS%6<$Ijk5Sc; z=S0WP!Hu2*q0{EUL?JDqXZdRpj{a5=T=2HyY4tBN4IxG79xcSr0UI{O?>uJXj%=f2 zlC%q8T_~zk6T1iGo@7%m?vXG?g$VtWKV>$noiG(%%4WYhUQ6SrzC1TG{`2fLqW3Dlmz$L^|LNH?~xx>F45S=TA?>!R?VlE;7(%};8 zIXkIYf)joB&smmAPOgW&`@n*UN10G^61Yit2}iJnm>*f1-?4vNQrs9pnFIUkB3_E5 zhJV}I8Mm|YE~BOw6mx@Ux2ZE`JXu=62ZYJ&;z0PRWTD0Z@E07UR$J1e=Vk4>Kvfx!3f>$_6hRc z-Dj8@3-?16AGb}nUyCpCE+$a0j%m%%S)3IIQjOm`4^g?Y#^(imkI+Ubk(rYaljkX* z&#DHggGK{MX4zV|+KF>DdXZ_0V*tUo+}m;3u?>DMS)-Zypxd|cRKky=SpcXvs}j7!7@@PQyi3PIDRzur%7CO)u~V0w!Q;ylF^WX)uTUxsFl8jTmO z^RHgS_dE1dcq%k#&cRpuC@EPt1;r*}&3-x<#K>HczyLIZ7uTn_%Z5|`-g7KA;F6i0 zd*LsOJSE@{vw?-(>hN=k0|&G=MluB^61kvtcrtIA-nCcCERi;xFEd#1eKei+kMgP3 z58Z-YOWaWShd)m|KTSc=QcS$I77Ga`W0HcSLPu@qa(tqfimH)v$d?|Dtwwb$Izi0#Av zf|F%fA$%PHzisN7;%pZ*Y7_T-u@u)M(X5iOK2L!aRIdEDV25~V1W5CRCE83fKyq`3IhO6>%G@3hgpY=5qw-cTY-xNe+%DyH0C z6$k*+L17?q$-nC^!xN9L}=Xfo^Q4;LFxt>hGl0DFSJ>9d@I1- zz-S9>5KwgQE&|e*F#PJ4A2G&sb5ivoM3jo7iFDx4^iQ7f^5JW+8iYdop0x1%t2}0u zGy@`JVJ;2vSNzWrOZhCXwo@8u8%onlE$Xo?f5R?}O>{cG)2X>X%1^y~iST6m-Q?0& zk%738Z3TvBGo7VexO*RR_+z{{q3^}SuzQ}e_?J^7FAz$T`siyhvBieQH+#ZG3|*_x z9%0uUvMKc~BQ3VUKQgW)y^a<{g}$DBaZY129lKzWfW1H18tr$>+-K`CK-fL5@Urtz zwgNx006pf~xrUR9fA_{y4E?BTtiR&}v#=L_(&1>f&IxB)JDHC{2#lZKGrT)EIzfmqjb!nDKBm|dR!Fqh^S0}-)D z+{*DgV1cFU&HTKP25kE{Z?8Ph<4A zClHxsF=#u@@zKtr^dya#86k~HH)Ctkqf0TE=9x_3_aM`>%m|USjKz+z$l{Q|C?CsR zB6P&3qa_5dY1G3Jmn)kF7I}Yqu-3e|Xxy|vRa&1YdQ$(Z-TbS5ecd?WvC;nvwPE>y zo6rC8-~Z@TYW4T6N~KkKU$0btR%`FiDqjw&?;Dk?3jZz|HKpI`|K(p6{`yHN=aj46 zR~riV{!CNG)pLc1)z2}h@##WAD|qGrRCQWAv19|*I)C4+RKA?jVC{F+pjnHR)|oeR zru=5@{jH&rR4PgB{W(Y&ykYg9RIGgaDu8zusZCD}k5({2^@59#0Z} z>epccE!e1>XyPh1aka)kP5Iy(5{++4xU2q^jyO|UtDJ2azFzaLsxm{Lh`Z{)Xt4IZ zHWcy|Rj*y!xaXmssz%Z`pj4-QL9HDLs-sf*VpE;e1?^19yG)4T@=cxWojQ01XtyRj zYNtj+chxU~+MEWc)ZVWqs@O8Zn#93%oGuL!05%qNtEW+GTpJo+l=q-+oR2jZ#281= zoK@)@F;UxD4Qw zh49viH2@(4S(A45r;(DCIUm?^n^cV^8|v<|dat5!@`eWXD=FvywBXO`qqXV_3j784 zgH6w4^@oa_*<79pliH~h_^fL9&aEbM0O{{)?CX~qh1`Z9IDD~jx8~>;$n4e(&tluG zl3Jxw`x(n!KszT!HLcb5KoM@iXe=}vwT8ywq!KHN0oLC4ph8&8*|cWl+&t5$-U`+4 zRhzeF!&3mzWyXytm;s`X&hVNS?>n#tl@bP7f%?etYBnjoee##O_f%!k(KSX>1pXY# zFYUJ>Y*k}3?%)75>zue~t!sdcmwY*}Q4G}Jgxyj0 zUr*L%2V`mk;cf&`X)1mb5TS{0pB1L};4v`by|@squry)!-)upXB9!aa((RRi`G$4z z#b(4fGGUFQP=haP2~{q>`h*P`q=)K(;dARF`)m-%XL26|L`)J9inKGfeQ5UUeW1Yo1kG1LX(!f-v;W_W&Ik6u}H zB|?+`e9vxB`6u*G4?nOd)PSg#k^AM_!Af(EgAJ1Cv;u{()i#-v`oYQXO;xl8dOk~D z8Kk~Ep3ocXtJAzAWl0bh!XP=C?1n<~#<~hk3laNg>$_vi_3quOl;_m8dgLj(zxCY-TA|QeKNL2W0STY7@u`7d7j*xy5uqqty128_x1u%VK-D~RAq8c{=1=3) zV4W~{e*%m_A)%u|ys-`$4oCrakou)k=x`ts)QTIGhOI+8wr3jYXk%|yYJXY%f9d~; zwaJ>ZB*)-{B?Gi^NE6AP7|F2RsMrnDe^L3musuUk#0u^edcYQ7w8juXg^ao=Rz1l6 zQw#p;dxien$eOTaQ)2zCnE=huQMN+a{ueqltfJ%~m!h)K^grSK=asKVRqM$=St!JI zAv&_4z;iEd(h(zaPC}(=+$V&oX6gE8w0Y(vY$S4RG|Ruk>i4=yW0Ng3l^)j-0KIBG^)`L7Ik$B*tA6+Xxw& zLMQhIZP)*_0jQiySgM@ET2xs`we(Ml=xuMOCUR^UBRiiNS$+c%T2ubl-MS4q#3X8T zF^9^~r7hd@X8 zj9vlO6xPaxD?;Zc&itsFvi8Ui<=B4t|D!5Z_f#q~n@1>ZaHQ~6f>v)M?NX`{G-~x( z<ATRgnU@O7`d_1_hCw^2 zQMBEx#RqYM7_rs=~;hsUeoAZapkk436 zYx!Ubi-t~`4*?^s6WA?131ke53#+4o$o}&5L1Jv-Vfu`LvC_S_uGvWl*YqJE1HJxW zt5g$5dz23|_T|e5YyGQ`#b(8XB4RL8l?2!tCMpUG8y6~`MCVk8*w%OENG!_i{{MeiFELi283k)-8THzzf`-qbkWR4 z;G+H>xt#saS^ous7L&@VprAweRzz%HHW|~+kf9GhnY!Ea88@UW0)hOqT|E#G&4LxvNU2Qk*{ddt@q1T z?fb=mwLr~p){jSxbC91do{T5AlyYNbzWlb7^RK2fKA^=d4(bD5Rq$b@5;!6vqy!cbrcW(E1Yd#2uAJlJw^?t2l^!U$MrAXqd5 z)pF(-O4@p-31gV&l>AmXf5bE+WT4F-^lehzcXU1)uDt8*xFQ(rko~cGl*>N*9kXE} z>dKa9-hHN@_3bLWRiI%9jP_miyX_|DKR!$Jh0eA;d&gPF*mECb-KqCOZ1P!qR|_JN zEF}(Ov&pkQf_(1T?DZY7W>hgXha~Boy$r;e;I@N#GWO{7L;86)j9J&T2}TCm^;hVrMIP&zGE zDK=5~xH6YE*@gsik6 zY3}(3v#d@{j)3*{j_F#LtI zdO_*^LLQWdd3IEFy*z+|Q=2(+>hR~rNSn}E?Xw#rVmY;j{4pw)`v!G}asw&FH8An<7%{StShHb`3L!ite0HvGQ%asVGZD15w-cqI(W?x~V8e z!lZJ3RCD`K^P@vO@QTLzzhOs}oCZh?b4R(HxG8-6lSKyiu$8&O-!Y3ac;o7mv9Q44 zN6vMAoD1eJPO8+Q!qCrc-EO0bC@W>-zr5npxmZJeD;)8xvBJG`u}0Q5ilgeU^1{P& z@y0r9*z=3b@DH_3cU<3IWroAg%ztA)NLN_<3tQkHe=1&|qS~q9lye+7*ZTNbE2{pT zrDypJH$(e%<}>s2Ql$78tk}&!tbtAsWm01x10@%y|KZX{GE8{jfWN)b=g;0BWFp}d z7}l0&{_&Z$Rll!>=(Dc|Lw#hsL$Q$yPU}`R71) zM@~0k&)D~&-23d45O$5?eznv%KUE>PW@T2Df}jCrb!ZRJKG|?(;)AV(w$U6_vHB?=p(N23ump(>Q&;3~kYa~wu z%yD(*Y4bX*V*@9R+by29jIEGbpH;UU82dS#<|?qSr+U~R?(M8GZb`nKv2S6a7edb_ zF*Uyz3Ng*l_ih!FyvlrV6h?(IY-X&?QEl7HV3zd7H!hT7H(OSv24OtRH5UNW_yycl zeLIMa1v<~D9)4>l9N%jpEo~~mBu*RBn;4B>C#0fyHTJAQHdm=5Q!|%BDH4J*G5!wG zv{@M>zg%VxV*FRc^jeV6Kicum*IB+(w^OIFAU|=|r%79Q5%@bpw{^1TJQho`1nfu8 zT*~gm)Nc7;xcI;8jl19S@&65S%Ef>E{HEVqQq_lV{NlSlf=_Qsq(16WFfG03XPMGRnjQ3nXX!v;awVTv; zs?a3pT63qN-2BAG+|$@YpR1L|rPQgjFE;$9nf6WbNw$n2kf9rugUjdYowkUNm*Xl5 z5nx|d@sMy4U(p&HhpxgQS@on+b%TcXd}`G2-S(XGA6Ik?IRgVaV4FLqw#AG+b8=-I z?6HcuNVy+9cjmeCE3M|o>XB#uacbP@(KDZ}V9WL2)q7KAng9@$x!iF6d}R#E@X#jq ztL6rR<`2_N` z$#z@cH(xaWvPDz74or#_Da6^4X!8pIwb(;rVR?Dt7Z>zGmSF|wnK|lncO7s}^aXYx zxoyi)4p2O?<4{7@A6MGG9#0<~%F~${OZKYwW|xZ$la(k{;r`^e7Yky7Z{S}z+|x;M zb=xy{&dg-;p*k+Wzz7F1BH?3Sv6((I6u;Y0e?iLxkE7~=XC9t~EyOj=FC4T;q{r^; z`C-hqZMB^HP_SEgW*CYi@4WR;hgF{W$64UfkB;5b7wtaNn%fhbSQ>SpJFous>hR@nfV1AQNB5=6^*be)RMMv*NpDj-3BUS$V zWP{-&2~QoZr{GHimPrcI3#Ixq}_cx!}@lrp+zS`$NtIaNS48@#&K- zk9#Y6es@ibo%NSzt_fr;_-U2%WKCOfZ4YgMqC@xsEw1ec^$`=_u4fjP_D^L>w)D*6 z(q4*Xod2$Fc_t%zQ5j#~RUzbh<>9(@FXQ3pn$v)5k&Sr9+25G?v zm=4AaY*~W8%E<1%h_OM&zEppCsW&ZEA2-%&7`P&PIn?HW-nMXvVId#*s{8mwBOBPrXe*ZxB%U6szGFX-hpF+`Is&%86Ee)E@SK3y{t zu!4Kvyk8gj&qnw_6=y8Wkk249!iY;wGC@c4D%q*8CjMNV%P@C7x5!*D`>ZCZQr=Xv z{%0)dh>r}@TNl`ZIr+o2?UUQyr)M44)~6@my-yDf#vQYT#iD_F&zx4j?t6_LagIu2 z9Dr?Ei~w^IGUB#-95jChf4FG@$l-M`avnLDkJr8*0D!$1d!Ya!+5zZF;S2O)X7@*R zQ2-Ofliy+C*y8(QXN^}4tXwi4K6+PH_YaVi??o+SKQ(fi(J!y^oTky3OZ~q_6pgWLB(n#il)eqprO$@OMPc7puwR>M%*4a$L z)geDPeD};SuChYXN*Gt%D zuegzrdiruK3huUGjxL6S%F8L2VukOHFoeWIUIXk_5PK)w!%IXSH2oK;IR?}cCHKW~ zKLl8+M*eAZiv`=?Jcjus(sNSe+6@0{ZQg+Qc0Wv=<;Cr{13wP+G5U$CNwPhg1Ccq{ z(o_UJZA*0Uab&z3Pv5bIr2p;6?aRl)C5?RQxm}2z74N>-CgT8tKu~Fms!!xSJB%EE z@2oS4er2lLHM=Yw?0&t04rbtk_|Em(t|lvf+RG+K4nB4@dGq_c-{@jNDs27*6OsY+ zQF)p(&`3GnVnj)ga->24p^Z=VdKgN2gDe2*l_|qA7cwcs1ZfAh zr6Q7a?(`y+GLXs+O1eos(N|srGcp$1{GMPM1L7x$8LNkyDLLt%@uFp;e8o3GKt?Il zCi+(xRJCr_y^dcjI@Tc#woH zABID#5aEU~52B10^Bez^P)7=Q%yS40YT5i#+6t_?G0%a*>6|D!KM`5i zO2`C{d5#SEY4PNr@O|{$b9zq1T0`M+L285{VjV@KOWK4_`EK19pDQA4ibR&PIM?7u z*za}?e~5=-Va2Qsp?AF4d|X@bi@OBeBn}9;$&QAQ7|kbQij?1`qytWk!m+MpDz)Wk zryW)UKNCgVph6=GKL+PUS_fp69lFPh{VBa2h64o+VoO{}>J#}gg{bwX&n;xD5HX~M zp~b(eoG$~q&3UhjG!)<6$CjYui)Nc8_8KLE947J*iIYx-Ix2^hMf%&(HVBmwd8*DoBuchRj5`aR^2GA4ht zUDUcpDuy-b2o8qOM~$$NL+FVfd5z)*Jeu5`9HN&FxE>+)G;C|H=W<#o4bO-Mmap2#LtmMRPhz_I2n zMnIdaq9^+U89^SW6B+a^lp2=b=S3IiY|aVkYoBJLR7WUoUnO;ITXPG~Rb+E!L(#RN z&2t+H9q1ITzpLQNUF&qso*(%oxU&$Q%j)M%3Xw6jTxHt)FeQGogq7}WXGg7dlWvp+ z^HRo924FaEM0EiRVqNEuBtNz1th31%@!cu}$RaoVfnXb7JqDTbfe}_QI`^S{*O#CJ zd7qSo28${pn8hDN#>IKVVq*SFlJ`lr)TL=JoBMK`V>cji9&!@6ED`x{m|Pb0&82j< z08OMlTb`Ey!sNRmLVryVSg$_D_cp!#J;p9%be@}IY@}p<(^Xwy5$aPFps5oQVohQM zAf_t(bBN9TnFNhE#cIXb3AspEvgY9d5n}J#ZcGHHlY-boj2QFUJ?sX5muSj3>f+^WPoID(Ll@ad*+3*&+L59n;!K_e+h=pI@7VDR0`K8jBGlN{E^t4~gBsa}1} zZ#I>+Z+s-D%u4k&DuBPlMn#hxvR4&w*njYLNaPAKCEQ3=L!4$#YM}i>r5^WkN5t^) z!x;p1QxL?1VsW>5y*rhj75jVC9j^ofgqq zVTN2QP>^ljxbFXp$bbZfeNFa2hQdnmq|*w`%Wdk<_*0q+^!F56Aql7wr13i&I}Y zWW!*C2U|Zp$X>9a&W`BBya4Wr4B}jg^fw3deHx+FHWTr@sGtX4U9pencIhLDTNnOs zn@@OI3arbYVZe1Ugy=f!KKPN|trd83NuMPGkeFe$T;wM%E+TC6Rd8%P*uL099W&H- z^e~H791c}x!9SxDSNeFadf|OcZ5^k=Y03ZXU}8#MhhvTGW5KF2PA3&&@JB(P6l9D$V|^Xj zYK5_2GF&~o?ZyC*NTA2VS6@F!+C?z_Oc4m2KIX;YU!PM22oXk*dkP0)=HDLYNLcL- zi8hu>=3NpE6S0*|AL|$bPSDgbhctL+n$zW=$bo}w?@_T4%v$O}z{7}{Vm+UQby0l8 zabz#TAfdRM!PZyfKn)3wZr1*eu{juJM6F;2@atx(GkUP$shHqK_HvXTHX7+=MO%{EbUr9eb z_s~z+JukgwwqcXcSB3cIrFV_2Y-jU5XqVp?db51)Wv}$!RVrrY$F+BDF}=UU`>W2M zb(cg;#ixjfs+O2fpD&cKTm1oLlLeUi@mi1=hVF@Hq5f!;F6Gb3eYXF=78SF={rnAu zz2>WyC1E$T3B#dfzIfcV*v*aA9aA$4!!m&{_D*#Cgyf`QSxdWBdy1)c&ioWXWV=~w zQSO(fAyB{wDjCcU?gU=3mI^&DGcD6E75L(NS2?}i0U&r;7O1a=X2 zgHAp3mX%kRbZ)ZpsCHVlRcR-{W};%3pvk>c+C)OcX8K~Ahz5V}>u;DrTzzX}uku1Ec$>-XF>Z>eB%?6;mgVHTP!`voD3%? z)IbNmC${$`C@JQQjseAw1c#^0u$AFEO{^mgMqMYFq6=0AXL)45u5xI1BfFzeu0eq) z%6IuVPoV+cP39(DcfD!hA?P$GKefRXE3Y{URI>TYE~TtIGM7h$DGC&A%4|@3$uFot zp_?E=7vvFS+RR zWCVACZaDt4m%Z#<=2&0AypZ4O8L24I5TOBH=pyvNg&Lm_c64=3(h72Cd3JbV>?*H? zPUu`nzEeD_@h;u9XIpr%{m{O#sPDRDW=$Cd{! zPWUYM`SbgT=r)LG_A9%mJsI*gTiMLl*@9d>xV};e4M431L#NG1VFPc*dl>pZ-3(S# zRB3z4T195eMs{|WujV(qW(LKmdfEL`MTrMDDi7r&(}X}_PIzuB>uy{~KHCaIAh?HuA{jikL6RrWK9Tkz3G&%s zeG-~B4hZQpiyP~3@|-`nAUEj1dCpXe(w+X!@Wq!E2|=K4W!r7}n|nW}?Nw~9i0!_U zR%>LvpUbY=^j^ps__6h222bq!hm%Hj_mqD|r5Uqn*Aa48A`m{Ss zVaCrQQEKk?vc^+B>xM|z`I0GelQcBq_$4xb?$*@vxlmG$e~HMS8~3${DZ}G&k}t5WXlYeMo^yO1-6S)u_#ClKqpT{% z!p6Xe+0CBjI7LEL_SU<+qwt0Jr10c!R@-!FGyF|_I!D9dbJWVc44oPH0K zFM{&yK(6EctU?ea83q1i9NOv--@n2{`;%Oklq3g+?JJCJ!JFfR_22RWb3L+*O6 z63i%h`z4r(EXRNusmi51g4Cm6p1%jo6M=bkfSg#J$y0=>%5|^r+w;fRb4ioePq8Oi zCgh*nAPJQo*M-+c@C_t|W21~$7|Ll!>IjI$)?-?x|)z0qQ( zIecI-GJY|8+0>`ooa#LmGm}%k2V=Tp!0bO?%#9Xvr_jUs>$sg+e&1p)OW#VcDX_l$ z8Px?#fY~ZBQ7!@(b?2DU-*W=SLQr#Ke9~HNo7q<8J`hZCJvTiPc#)& zZW3Tt2%^A$=YzZWedHUu+saw|>mzy_awX8*&Hj>A+)|8f&B1H8l3L?oB0uOFz9;OA zJIptnlI+49;4{R4wO8@YR(vnDVxS-bwv*$xOXwJvFr$u|H#%qs5rTf*;bbxbP+SEUnAxuj z&h7HVeypfJhG(%6zf78gcWD<4%nqSutIFRLKd&64?Z1Knc}UuYxY29A;JgbRoeA|g z&KAC`&7ed13E!MZw@s=L7ba;`q(;2{mQc0=+fgK=x)^p*sS}}XaNL{YZm0QW<UO zmN=T=98nHB0M=12?$$O)30k`yS9y5jgnof&AwRLdet7zg0XZVE5C<$>{}}6bVEkO& zhpWg`0^)*lfi6)s>BNujtW&H-uaG`^ls7sfpAMP5>UbH3&zT~MXx5jrNc7yQeT7^p zmjf4{NE=9~@=x(43V2HQ$r+%kkR9lze=z}672jt+&KoN|9F*zaIN!_3&tD4fUtmdx*Kg zzl*rpBCKb#D9`fUxm|BkZ`uL+h_dFjqIX#UYz}q-c+Ovz%8y3af&JAaU!?2270)REa=c8=HP{t_wP?=Z{o^n}XagZkx((??D2Ode&gBh%mQoUbj2uP%2gd{xpP zc~NGs(cdKF=l+pO2c+j6h3zH%-Tnss?JVafJ0jp|_3|vyPy!O?#j1eN<*d)mTyUU* z30091uc_wOok_VKNfAXq$w`@%Ol4Yhd2((e5-Q8ivv*y%y`qE)*N$u-H(q`S;>#+; zCEcvPZ{s+j8p$t*(JgeI?2_r=f*5_owRt-tg-^Qml{0sn+5COQ!kw}}SdIZa{$-vFODj35gI?l;@^D#>B2+u3819tx+)5F)_C{`r?_ia(9d?}ivJAp)} z{NTbF!`5HHFcb?R8!693Poij*0d+!kQ}iynLSJ(9(uZch@2QgU?7OQZUOAp(`Ahw1 z(v}Jq7U0}d4TUGWN+Z!uQ3)v0NR>!Nx$x`vE&M#E%A>z<8ikb$rytf};Rk>H)HrbB5>wm7M}>mNI+t+@K})pUDA9g%+Oi36V-RPKB8s%z+E3s?EK zBRR5*w-rYgiUQE-Jlf{5U7&dyD#X^@2(W9w6VT8joJy%c|HIJJAIXqX=_642#DBWQ zg%S6xFOA{r2DmYJqm~$k@U1Ao)ZEP;Zu2h~+X%iyO|vvy{W^_@)|=E|HUMQ(r#ssYk`OddUyXOBAR~= z5p$~`V&M?JT3)GESCrIn=~dUM!DkCA#6a*!WNb}Z6Q#>75XxS!&=R&PN+aJY)T#R} zCQ~s|6OYhEV0P4~qg!@VkYG6y3poS?_2Q`9D6<9G9UD5IDEfe8V94W%3n6#B$ zwqn07TED$te~@s`v|m#~!tIX=4p=o3R~*nwdo)&Y3F!zSh56fmGj%wpJi_4W_A zfPQXf-kzRHJ)O0wn?5auR;LLBDBx~}T)qM-%t%`_iAHrg-G6Q>>k;uzI0V==r<#I z!J=vRP-PT598Bkk$-V6M0D3EZT}s(mAFXY@mT)*ODJ0SQ7W`c}RVt-K?;%H6UuDUc z#mJI7Uh-eVOO_(RSF*Jm&HnmoXapPgcBiOSxw{K&&h& zDZ$2hGyDSDIGC;LqkyXe*;k*clL2WdePB^n_%d@q%bbt)qP;__@70FN9k$l zI|qJ6PqW`E^i;-9q7`9HuvvS!nl+veI%O}n)IK)xIcPitM z=6|I|f%CaI8;?N^r*B(!@4)xPx5pd-xR)(|8?*h<%Do0oW&2NkamhoGog{Ep|MB+E z01gdNdfDt=W&2C%7H#V5(k-O-K)Q*a<0!4qEpaOlVW8)N&TOz+MWRm-Z*Q=!RJCgx zn+G(dV>cc|EZU8S@w}O8-o}~T(9b(I=VXt%wvQ^3zkjY4$(P)DJ3=jG2Mkfm><)~= zIfj`Xq!i&bt|O~@0R$5M^nufhXUZI(bh37St{U{foIoDm=hsf84faZ|)0m?ERF8fA z8Ti@GvJmfyH6RJKkJIX*arOCGwaa`vli%7|Oh)o=hCSc67Y{1LoB9Yq*K-wbrd-sPQr z&Cb4~SJK6Fx_l$`mm+)(@+_;+*HrIQ!^b=L@ zYzT4Cc|(TiC$#a*{S|}alrb?oLJ$H|f_G`_K=J?QEha5h9ZcQMZeQ}-NV?y=Q))je|Uo3U{XYhrnI|?3Hg5J^jM=mLyPe^|9+LeyIM&BM4gwxp-t64&E8OMqrz+&-you3ulOGhG4Ph0oF zTczW}$;qv3W%JvVOP)6?uE&&B-Ew~ErD5SQq>^P)b+onN6Ox~Qxv0mE7_BAwRApve zl~R&<)M^h1DLMi@rMzGC!Xeg0mr1dVEFB0s(GzRz(BHS6-EDq3+H$UOvyvSx0lohF zfZk39^u`-9BL-l33DCaeRKx3f9h zc!m?p-B|q)zw$rnNQ3eeK+U03fkUrP{cSMfW)^2L^{RmA;sR7LR~9Sy9vYPC-r zQT5dM1mU#4bK0<#o&N=S-cT$1mt#-&Z}=A?w%?2#?`8|i_Cdv)+4aVthH}Px{M?9w zuGrP*w8vo|4xDoq(>ngCH9dI`pV?!n8wvpU4yxwgG6#rI*K__ZwKLgVboCcI%rCnC z6J2@RSk%YYIeAxX(aaoLBam(jVVeyDduy>b^`po_H{B1&kDxbch@~6L3gFZ8H%{Z% zpBFiTVvcg(t7buu#bx2O$u5%xKDAaQai0gwvJUdiU>bcvTg=sWglac4B z1C;zK?=WA8jt+d2wg2gX=oT>`nOEaaMK?eCCISMahCZ4Ov7=gF=@yOkLtLT#TgO%L z3{YBeT=ldudR#SH)buS*wtab|lTIrRTE|06AXbWCIcTMmK5xzLOK>~Y-7?S6|Hdr^ zL!+D>unllL(xiQEMC-gg%yQa%<-j9*)0yFajXYcby!CkS=Ey{g`Xh4{4I}AZB1T>m z{gTdK|Hdh0EZfu1=#x^gU^}wUuQ_EGyfIKdGJq+X(Ie5P%vMc_&{i%t~HQ&y*rHY!9(hh;;YQLhFjrsg;PaL?oZlMMmfur`!rDnb-Utl})VKJW`uOqT1ZAqZIZ;T5#H|uNE+wNzl>y->c2~DUq6HA%W9Rtnk zBxt5fXpWXD&`9U@HC7cGRNGW%mzd-xX@}zaO08NxY!v84j^(xQ_+}?-1MiV9^CHv6h zs;PY`&#<*Ta{JzmYcK|)F)thpBdq zm5uwK{`Kl7RF&<=fQRCrXsT;16V1V@s2~tYF~6799z4Bi1=~jQ1-(mN{}`aPI)K@| zkD508;wg=1{S_yt)&Cm;T!cv4jZH}$y8gJdWgGS;cB-8E9n1 zgz;}WR}UYcV73>3dIWk-lTiIazk7ahf6FgAnZrZ-gNI}q(H5ZKRJ|k_?n*QJI$n~! zPyo%3YU_ys-y#{Spj47X#@?TiL}Dj%j}Jsxa9En@AcuAePXq4l!3bghI z1Ti^$tL_bW@8W)x(b&PLOi;fcJ(A=y(1pNE!q{7@-$MwM0>pw8V$lu1f_xyHI!Tlb z52R2PLSl5NVOjL+q3#F<(2;6%s3hJC^4JKnjU>pP1!7f@;gWpVY|fAswv+O@=KBTi zb^nPrhk;owm+P+GBj!5UN07+XFeujkufBB2h$=q5h!%hD%4tMXh(>?zDFAeoe^-;@ zpNFbo=Ek!^skomQ5g`4D5(c-l`iaTMjvf(cl=AtxDOdI=|0181F&XA0KZu4*Kmm*0 z^PKkthk+khvAWC@UlH9s#2x^v@RkPDea_Rkgk11(b!8sQLx{9Fp`ichO`}Z&L;g=* zb`vY_+Xotb=@pz$y>cH--)J1CPa(?#47bkW>K1EGqw%w&H4*>?-y)o12+F!N1?>W* zR%r*S>FIt6>&w2|$v*0pcAG=qP_|3XzHn;@w6!^1nVm|MaRbq9gqgTu({FU6>3sCs zcSkTnI8=T~*^6qLm#%}9&Kj(~OD!~@sY58+T&Z9zuHyo5m1n39kDH%>%C}{M%p?U_ zg}Z&(2&Ov|<7z-I>X|Oy0E(JEp~FC({uWT@ZviDY)?hv({he=r?^lIp${U*r79zE8kq2YiBl+HvdF){C{}HoZ}a z9(+GSCW&FjA)j(r%WN$P2U0d@QE8aSi4iR!azl5hU5TFxGT>GAj$FNF_wnX7^=eGk z0U+?RabvBfOQ?lSzQiAgc#%Ebm7X3X#)sF;ZKQrHBBrwd3^5Yg1exVeGkmGp^&_i# zZqCKB9QW%)c#`z99-&EiYy8xTHW_NOe!1$cmCx~r6$Bz*^iVOr#(I*pK8dCcjev5Mba{Bg^5P_q*aG&x1_(=k%#i;C zGxVQTH5#@g(5LIj%P9^~jql#sN7D&TVjyFI|G0=C5Psv3eK~9e8UF-wSVpLZ89=G| zI^FeF&hs|-T=NNtsQ3Uek?DZ!x?VYw5I3!9*Sx~RZ||KZetYM}4K7*zrmisFvZkbcBO4=qV%F7iolh6^EOz|0z+jPX>C3(EKSz01D z5!YeTGr^@;X5OCL$=t2;pOjaM0v8 zC?auBNV`9X2%w5+Lmi-h6A`p)>}$8@-=qiKRDtF9$I$>xJ(#r)4oC>ek<@8j>;DsB zI+jythrtCux@v}hqdDkr5XcRo6{@fQIA(xKmmpk}08P@4|0SlDc75oZpq?>J}Ue(rotadKqX(V9#mY}RVInCMbh#L?GFG{tjMW*9mE9!A8fd`Cv(0u!%~zr!};&R90PHSlom zlFQTg|zAE z(c3^%5GspEx9)5)wHB({rdzIu%G94%4iki6}yh;d~nb&WB z?^W)B-pM}e)y;Lno#LbVtT5dExLH>V5@dVXSG~HsPAF{j)yV+geB-SHz1mx!jzCa- z)(94k%)3E>07rI*LPXpm^S=!d)qFE^|5`|%zM!d!FvYtnaiTtlJMK8@@kQ!s#9P;E zBeJ`c34J-AAPYe$$Z8>+o?N!3zox;q7%O5Xq~FAI{ou~9hzS#ISj0GJqH;_LNMj+c zUMyuv0P&VAjF?)oN(QVd${Nvy8!=D{@^Ck^AYNF%bB(e}0(fh>L$Hx$Rca(kzY$a% z5jGyg;Xv7DtbpWte+6XSEAr;IR=|A`wU@Pu3E9O70hy3{?{VwXz7ZSOP!soUhE>l@ zST$E@^jA&IZ)Meozt91s`IM;*XiK+jm}K6Xn%jx`&d|kgO-+@AO1NU`iRk_vSRNgH zQE31zgG@Xn`ThzGGF_1ViPf~*69F1#PdOK7^uFkSFXEMSe1paNhDM_3lnh6iozuGH zEoJuMh#u&txf2q_fsLl5$1p*C@t3QZ_9Ps1Eg=6`f3eTa>t@O-tC*^z`{x`%D%Kxh z&`|4;4%Iilkg@kzQ%1HwziY&W91l+jRl>Qo%)ND+Dl0*ge2bjekP?y%l4o%I)jwAiKbOyb^p{C>hI!995Rnnr|B0s_Rd7RY?MWR6EA>c zQ4CIiKgOsNVBFUM3FSX@T@EGORoFI8!JlxF{1!pVkp{krI}Dwt?mW5drz`@XBmmHS z=0dHX1i*CEsGUXBwmVx}B_Vmp@FZVRU0`#XY=z8cvsM)2rtPdmQ#6eOGo$q6kLILd`K1yycTobwxd^Zswc0rM@ZR0?0HhrKM)1B>MY zUCDf#q?D(@#$uVLNa{)!vf@HIZPjp10hb=Q)y0PNk@j_jhjrO>zUFI69}66Dz5ZVBb8@iml0f1` z78kWWH0I*EMCsM$I)~v$H%wEEQ!>lN%QkN%4~v8Aqp!kTy>YKj7c<*P{^Vg9dH9;6 z@5_Wa8LQ!58*?spPo7rbf7}ouxyAu8-%!!#p**gwY=6s@6<;}bDKLm_LKhp0@yP^S z9K?YJ+cFTkL;~I~#VEH<=U(Ev?;#}3b=lYB5SP}#U)^2Gr-Lpz03&gw3JPY}KIVTB zb9_sGTgKorKH+7>tFsN3owNawP2p`BGBX*O{&xJM)rCVM=d2(dN@3P{!KuCqM5#_hWaS5%x74H2 zW!T`%P+~LgX;~>4t=cbKLz}%|98E7Lo;nka51c#2efw5*B(*||7Z>BA+j&I=_=j-} zM40?Ht5(_nTFIuYme`J{TBQi4Z@(j20B+Pp4*w~c30gf{mhHv+C$5m%Ai2NI@s;eQr3|mk8o!(j`SAD0yQXx+?aviG zm|KG{sxgMD>v*yj&#=S|WGw5KyC`ENIsJnSbSIo@be$bzgQmZt&24MoAy(&-8VV;h z`UPV}%!e13rt#{^LXkfF)ggWju4zD^jKVx&+hWYOwne0--^av6N@$^(5$de^Y5cw! zYfpg)%Et80Njj?}qL5j%7bPb3a+UN7Rs22J{K;pfMu}Tc{%T6;WUutWW_n4~!56Wo zW2a8gN?~J6)n695q*rx!P4=`t8^jYrco16=@SeQ7qaq69mh*~?6sP}fuVn>&`^?6} zlux&p?4jlc56~N>JuPRKp13L1WIQ0;lzE#`lTYX`L7EVJZCSW;<2|SxQ>ntM)z&r= z|3~5!W(B!AIh+hou2~)nd}L*#Kq@da8nYTe2^SnDAWs~f+F3Pn%iGXL@L7Ye!n;gm z8Wn4d#KEPZ&0c zq-e5#9?P#whmzS;TuRH3K7oy}-6R4lg?vr2c8FXMj$@+}@MC#X(INVSbjkg}GRhdQl2(cheo6Ht*8;DD8#j+p-X4I*r-#nX|D+ ziFU)xPX`B&5KTaGlR65w=gQ1sNWK2~LTAc$Vo4KOlF*@%85{PWBU5hHS*`Hbx-PhV zGBRbr{2xSS$-$+V5Pz_M-JR(-Fv2&G~`sj1nP9e?4H6|EeZ4Fvz(APDaYX>DO*2n zB5&S-5vY527Ka!;9Y-<2N!m54hW=?xaFr+0FNr!2 zf29Ot#Z~3I7wMuFkJk(FtR0E=+m&Qj)xZIaP4P`QDuK9UKLtexI}J>#k}~=mJTjV< zh$gO$*25h9{jvJWt2S0h?%yA+4|8p_syRHm&S7g**$nyp>`rNv$dCd?S*MwvfvNbn$&wgleo;^0 z5)U$YR{9R#QurwihLph7O3OsxFj_VC`A%Br=+vXqbujh0b+ZY6lQuNfiBsz7t%0@oTHO*>`5y0rzL`n}B^fONfhdvGKn9Wpcv>W87j=l2u^grx!Hd5DNt! zRzqH5c6jor0vkX1wf8(i=v+lA)Fra{_2j`e$x8pV323QQ5kd(yZ$U?Bu2(vdSRlUz zU2@U_LnF{(cp;_k^FVI6T3fRR64Pht{bJz;8{8)(@_ot|!(qDm%Pv9u zBV1C{U?8+PHd?C0^%ld01RNo!QYZFZuV0Oq_L?+f5}Ja9gN}wu`m;KKX=p+;>rbGi z&trcZEg|3kIa)~LYU3_)lCz+quRp}acV*p7!re1PrhI*+gWY;|pzg}u7-pS6fvdD# z|A>hG6t<53vblSc9|yIR+IAea$ah5mnX(39>sOM=#_Dbo014xehj!;Ir@52~by$Z7 za(v1>DsAn_zY*eO#Lyx{&ulykuacsb<`ZwT_CwSNQ85AU^$xtYh>y&)YU1m*A0HWp zIy9ZdK+UR?$30FKBy1qaY@T766pJgL{Jsn*cM>{DINE-6M*S#%`Yh>_8VFq$ul{?r-=xA&6FZ#hq<}zn`nl?C8kuK|zX4}`Jlt+!77p*41 zgjtq3CIfcjo-WzYwo`cobv`zp$L~6nzyHCsq>W9n87XM9g7XYf)4teR^ay8dk^;to zIBvfE?3EvN9(H6e9byQA_{dL)u-|&W zfic)!3DrzA5Yq1OT64Ow$ork_v!>pRViDCIyp4+HdE@Gk^?%h{yYbd@%*q*GK;0yr zF8tA5Qk-y>ryV@|&JuWAvC0Fz+;jR3fVA4z{>mU~Vk>5j4h@clU{?vU2gbo{|4DFg z**szsHY){qfk3wP$9z0!1U7%D16vf;T~W9;K=Wc{IH6f@rrAL=U1~0i8^X7W8Nm=} zLgXM7nbc_Y1s;91eHs8xc%#gMDXV1`?=GEK5=@^IbLzIASu7B(VL&;&^4Lfv4p-m3;Pq)pg~_^S z_!}Dk(|I@^-6cF0*p@GX|Bh4|TC5+tx$;nvmDn`Zyf96Vg0W&n%&Q_5`iSHki(Vf> z&G(1S1rel$QA#B7aFw6O(55GvcY4Rp`@2{rpBhR!v&D2gb!3*>JdRHU>R9k`p5zBV zf}Qp&>xId`aV|;3T=`b53)8n#j`7KOD}GL=<;UyCEJS-$YP6u^C_^cx^HhgY85OXV zxJ>R`=ZWcIix^sn?>Lv{LNMyc_Ote4p4MzUWWB*B`Z>|EJrRXVcy~lMZCLR#U*RwA zcyS%)OhLH`Lw++&^-t4U-pxze(irA7~##2VvP;N zH`;q~jY>#qZ+Cv3puNZU2`LT)SDUt-;5WMtJMbU%fsEC`qlYLzdovZE){TiO`4KyJ zZCc=$;m$+t$iZWDftx=RT~LfVAwMoHQBC4_e|g_MrBe2K$!cO(RM9PM1J1{Q^wM!c z810NRccaIZvp$g;TykT=p%xnfW9JBk!h#PiN^b*=xEesTF%mqOoEXsK{iK!_qNEmI zZk8FK==KjkS|v&pm1zO}ZEI_jp7N~DA%lpmcha^3s>af<-6=?v|2y-}pzXv}U2QJQ zku00@Z(t16lrP`K6}!P47HSW98kegiG;WCH=zbNyxOrkp10pla#}v;A|EIcr?DgoT zNibYgGZ^gRyPYKZ(F-s1OXjUmEve?APYdTi%m7nfSR1=fD}f>y{vfC=DCcYD8%?(#Vc3N4Xk?8N;}ZEmG?n<#@WR?mASk6T8m9@JD4} zB+wzmGN6I6H0&uDCA!P%>CGg9l5|>)KC(;0!GIC*Sj4SN6N=mpB`kvi=}gWiOVi!B zSFD}p!q)a41621cVj}4mN?OA=xDTSMh)%B{BCsXooic(41?K?mb!HcFDrV~hwQyosVYAC)=eIur&SA6FE8O^9Fj zw;|1`M-4+t7xlNh3Ih*~YREpcHM1t9XFYpX+lLJ-7KvHkkyTYvBM>_k|BJY0eQ5m6 zQ19tV5{L%(Xz`93>qbY$*SLn%>f^fdsq8_0R2=$>`(s+#6C>fu1)t-Js!oe{py#Md z9KTy*G1S1LAHhZhy)G#HmM%vvw|;POHwcf=8Db}$dMMnObe&@m!ahf(Lf`LXt)J;6 zalJ$x?sZ{jlhY*do!YfmUZjG&ldau0>W9!$-8zCHN^2*-+U~!4b|A<@?mi=ZV7L_JrtF`TThQBcjIbKhX6#{0=*drODanjA5Qi zwoY`53ss-Yx;4?sCU=ka-_>6!)j!t^b0<=)oV)*f#?Nxgx_K#5JxOefZi8o277=Cv z^(T4U)6%Bxr>N7>AXUpyN-HIiP;Hp9J7Kv01-AWSOZ8RTKw6-|JTy0XclsczRzbT1ugOEfZRO^%I zTE9aQng6-3<~S$9o`ga1b+qZloIDT0cYxSEC7O$B+29Hv{m12$FccgqWz9W)e0PyQ z9#lmTayLQ*7l)eOW^gtO4??JR4pXs}PX%ppcO0jq@0%;SK?lj;JwM4soA~@3xI&n%s*2j>I36kDB2FvEuVO2OP-ls#m`h>pe7JOPh`A9Pxp0@a5W@gTso7T{LHlhyA*Qo&7%`VTm@el+n(w zQ8rsOgOQ=tjvm69#Efl-TIW{^U5qL>+HP}63%E?~B=k|-L%KGEq{ttFj-!&sF|}1+ zq0si7j@c&d`v6a$)D}48+LaYcviSOAC*fwWG)+VlbXrZY=<%pB?&=_9t^>SoCv!bd})FqQtikS0y-}C(JF=vvEbNf zcwn5R{$=5B%+vL4;BP<=!#cj^Z8!w3j_s&y(&2Wyl2$>A?}&Hy6rW!$T@F|WMW0R` z=&kjME(Z}9I&kRVEKB2`k2Gs%U8Tz*J>B|AqEz42l_iAW0_BP77MJ6Cyvt!10d&6c zYPijPpq`3kI>C~z6gV}VZm1ORxJG&l9auTBX zLT=r%Q=$m9yid~enpQO2#G@>BwP(^1{!6l$i*4dk*j6%!TL;v!mi>@E)%zg@rbF|` zx&FP|p5^GxCrO&c;&xm+z3@R&n*2^D1DdPFeY`j-fYWmxvH4n@edhV&T+pB7-yX-k z1@n}x3FEE#0-wlw1V!YU;!kMX#I;Q6{0Cz-l}^q?6koAyg>zG+Yf&i>M8X@FVZ$aFVeY1qmO-Y;gDIFk{6c?$_uw>Mx|HJ-rq85Mvla_-%>v(8J$Gh z(v13#95P>S(dI>;ysm670rl`z1aRJ0?aGl~lUK|mSLryOW#0(p5qa?*-|67EKTE$~%iRrP zUyvHohkuWX)!3sn+pVLSPmQ#5zW5iF0d|__P3mR)?LFZNfm7#qajsO&kk$0`!`ypm zCuB3pl*BRD^5~k&%_)?{p&Ed0WjkBCJ&Q7-PK>-(s|CfJxyF%8OnL zZnfEh_JxzFyhYy>MP6i_^y-TMhYUd}CL6kvKY>Z)&vAi=-^tEX%NgmBf&(nf5BLqT%i?d)3)o6iKB9LgSi>?^r-$hKi;Th+LFURhnV8oF098!hsW=2FtV&aMuPVV#DJ$7WnvM@ALIf*4TqqBPQ&-4 z(3OcQ5Ts!uzT#yW?1~efo~Rr&s(Jc{NQPPvAvJG+#KYQNwY@6YB#~-ye3Cy0?gmb9 z8Cem^4aUT#`1ivQdJYBiPM!{~Jn{AJQ6-OU;Un(D|R!7-zwU(Z8 zvn(>m0{=kIw>f<))VQGExNjnZ^uzNPZAV;?KyPG^4eN|%pLxngZ1pl5ijY=u!TU`ci-1ZTbK)pbXU5v(3{MZ07OTmh#Rt}X?o+yJr$Mgvm zJ8`f?B zSW;^#nAKnA_=NkFOf_VShQdav2njI9%$2bC_yHhX2gWQLP$Xr)m0(oqRIdY;DQ+(* z=j>m2%IHIZtL6-j7lDIjcHWQ}$0S(vjc67q%DoiZOBJsxS^#2=vx3NhlQ1TIBBpEZ zFULWDS&Sm~a~EB9O0x-vw)t3`Mw`}(4rL(FiR6IDhHRx2%^@F7;%2__f@zp+t_^jn zE52RE6!p;{m9nq;U;r}Q^TnMJ+EGa~S_@ov*bLJSo6#VaM25$uRoSBq3^2=H`T%6- z;YU2ESQtO@ZhJQLoQ_jq@}FS4>}B7Di9OlM#liJB;Mla%pQ{14{I3GH@=X+eiuEK< z(>34cISD6GZ5??LO-p`i4MMz{e-V9C-xSEZH-vY&s$Vf?XoWfop%~__?B`g6kQn5@ z10kgf*Nqd~*ft6riXgk{eU8g-Pk+&jmxC`Z30>1WEsMy`ZDNqG5KdF~pW~LNaZdCd zs`|h}(;T=@I$zkR|0EJE<{PxN&~FJHxMup~OAPwGjMID3w|Kg-5X>ZSHp9)m4{+W+ z#(6`h3F>D{7+o_Hx&eH^K;+Kn^?|7=;WsW2!(N!rXTp<9lkyv0@pMy}&%wD937h9W zt`12lrA=!S#K-2Uf2&CKq@#YB z?34_(fiP@M4XXuV`5)X^;3!nKm!M9y9hlebPmg<*c>J+<{0s-O(WDi(2)4_nw1ZKPyMm-;&Tzb924A=sf_0+4H}cCPQ@^=XC$VU!G1!xoUA)lXmc%Oe;ht}zTAi5S0S z|9`k>*#$TfC!P{&#|8LtZ3jH!&;%d|Z!uCP8)YqOWIy%LI2%5e7f;O*Zj<~#_qV=1 z%QPn*{B%@kIcDtY z6g3b`D=X3bsfP966cgUviU;VZt!+)Wux}&;1xmU?33v-q*eIWI?7G8FL&7ON+i{T} zTfoifoJ40xDw13Mo6|Yg!Z3AXlV4@nYJOTl_+l6LvG@}e$s@s5{2W%A(ki?oadHkFZgU)gFNZgDWa0@0FkvDpp=O68f7&bvOtpRgkLCEb)r z_DZvxZDylTEDn46^7s9jeGev__^)n?@1|osoJ)>_K##$BzIvcLR{;}<+)-Tuu$YG6 zD#E-q63p2=&2_%MMV=!S7|#=wFjFCgEBSOX3Kr@9XR|NYKQlAlAW=Z!MbdhGf#8tw zNaF4^Cp4D!srbU3kQ{!HXzPUgxESn86h*RV>A=?Gb(}bkUIUSo|B*Tl#7Y0@f-5)< zYh4YNYXi|#1pq>7zQDg4oKtT4FHOZ0hg|c~p!9H)oU0e{kbed;jybT=?Ud+WaOZGq zA@Y5a5+=X6@<#Mb^vmLD<2f$4@eyywdOBBpBcf)!<}DpjpplJfXJNAP)c9cGTS(?* z%}^5>lok{Pg3Ry{p~(J?O9v!Z zH%;-R0*h>CBqtEgElhF9Mx|7ib%*ep<_Z${odv;jVG5tb33!ma5C0JPeM>@p*lK^F63xVhvw*0+n9nlW#lW^vhefojm2mXL^DT2?9)) z|E(ZMyDlE7s?$_@ZS5WTSo(A!KV5OZQQq6or^}>OeYUQ=3Z`|UwlOIkTNNn`GklW; z*UGSW5#cHamr$rO0W^D99flV+9&NU6X{&wggk67==C1N)mrh-9V2fj>O?^=35U%j;mX{g*hLRFUy??H6AsaJEHouM zMV*oCgq}TuWGqZ%fmFWVzi+z#MRM7}k;gIv=`XOzn`1%)mU0@q3b$sr-b+U;{kH** z@oPOaY_$%Lz=CY1xa8qC_>^`R0io=3tzfzs_!7244179eXkV;p|6==cZlw=vK zjWdB3AY~`s;i2hYmo0@&kd*VVE}Pu|*K?ZcxXr94aqp52vo5q-ht#0$# zQZ^8JE6a^4-J*X*8H6ZrfZVh5&#`cfl-QB0hpxQPkR^=Gz>0p|On?_;&AV zyU=Y9J~UEBLL^n@2Mnr@n9HGKsa@L0e(0Vo+^FJ)0qbqV7Snq({4dU)9XC$#eJ-*> zDb>;+olDn@WzHq$s`0sjk zKOBSd7Wv_cAEWb-uoHD_og=2jzy_@fv>fwE^sjIEf9sei3y^Le@xMM_Zp-3Pu_u@B zEvu6g<%yhmTYqB9wzy7IFkBFKk*0t9vP_y=-6HDzq=?}2%?6?{(%S3C3@0fr^aAT{ ziQf23ajhb&slxEtl8+uu+Q4*Zad_SDKT^qgC+383PMa@lx}Ya6yF1C%&PyP@cj&mx zu(@*ZVW0ZK1~n>ryPo+~<$M1o*fg+DqPJEXFQkKZ(j|9ool67f+i7|AQAGF%GI)Pt zE+5gRbDe~5rW`IB9dS`)wwHGCGEZ<^fo{q30IzwFzLsc^3UP0x;=W;ju;%kU$pQUe28v3F%&uUf z4+K zX-`p&>xWx3Eb8x%$CwbTsJ5~i^`Wh2E31t|In^kGoN%cGt%*uPnOeqFsa)b9=UI7S zTUB{{>+n%uIgTGTl8<%2feQ+gJW{*|vg_T6W$YUJup=%)G_?!g5sxhO6} zR-5vT8Lj~~s)n~V;tOwY0B7HM*I)=&BiGW6Z0^K7dm8CAIz3^RLI?76e78@Ilglp50~bq0?H3%O(ALS z#H|u`_?V&)M5gy0JM#IuR!KKvM}9cD$eVwWB5G$32ZsccTiN4*3d4(o$I_l8x=|0p zk}gnpNd5sy{EG>xJX`tK;G@5bXZ(2ixy;C&=BnvB%d6MM&xCSfA!-j{*5FTC>58rO zEgd5jpnEON8~zsx&hpvx%^d$@PrhQEr3evkUFWZa>p_cR(#_8^d!r`JEF<52G5tA)c3x7jk9I$YCc;;~pDrngf$$|M$kPN2O6Mz=-g z8I+%OPr*V3mVbh()n;5v@HYU5jDdUw$oXs8e!xoPUpHqH=m`x=POlQf2j_ND!r(eR zRQ1T3=gp-<#KE(Ndto?j*khESQs;@2cbpS3+|TCy#6s=T`+d%23$`?3ilHxI)AvAZ zSkFiKV}0J9rr3NzBla?SGlLZl-NNx3_vtxZM(&6fnx;Vb*(>*+EKA#DyZ4c)y&%@f z$E~>RO6?f=)H~-}si?uPScsk3wPzg9Zg%aP?ys;S*yGK!2>L(3spzl6$D}k~00aQ` zCG{)I8!#GQZlsoKGdu&!O4p5jnhRuE?p~THae75FCe#5O%Jd{(h|RuXEZKUivnEC* z7K`goS92!RTd(0RE(9^ier_;#k#W@I$KvKz_b7n4%vKy9-P4gb$i)y zOLF0aqG?MSI9<@EmxC_pGp)t*1AX=%K>ucT>9?+U3oPxFk}&)s-h9=))8SQQN6Tg<$b_F zvJp`5*hGNj8`vR|R^G>s%1?-i?PRM4a4G;~DeUfjQ4&ZZEvAq@gTDkQpirMA1#+I| z)UL~Jx#*jHNu`jcs=qOW!?BDtC^BaoT|QKqlXbzcw|TwWApsf8l)xk4wN&^;m6fcC zCxVIKj)DQ$?7p~6AlFxRTr5K-Jm#!?%Xn(f#lhpWuS7m2nl8VX7Ub|19E=eb>d%c` zQhkhDheujB?!m(j6&W)M)|rS>?q4S$-?PyPuECfH3|tlg_QG)dFZsxSJ+Er_6^jP5 zZP|&H%3j`tM4SXEq*V&O+Wz3uq#bTWz_PwE1FZ3sPVlu~ixp4}*)O)ml1uGi$=f>l zsyZ;+zi61Grw|Ejdao1>Q;-{8UvsuWtv^&g?U9Z?#z<eJ_~sX<`VDmcyqd7g@@U#U%N}MJ*U_1_+RCkFL?>m z3$LMA7Yi;j*~^~&)=Rv#`C55P&g;|ATj+?=%@RDiQ*mwtp7Yj{4|C6Z=mmy`pF8R5 z(^B3kwAMOEB{XTnjg{RxRyfm*R@%?5JKCum94CmhGoRq>zsL+u<*5Esw@`?Zr=lbk zamS~v#o<@*V(*J19D7)9cRBr>bSU1H}E{ zMu8mGmWntqcU~7N#3|g(;XoDw@hp+5)yIb07uuyQf1@Xo>Mh&bZ8r3DT}wV&H%WC) z5#^$T1mQ%3f4L~tUV3tp!C!F=5*pbyNPG`A7NaEPcE-HeQ!W}Un&$}$-#Ub~uA(cJ z+uWX$?=^3T7l61cLKSkJ^UL(g3I89;zalfTHnf^_eF$Qq!0Hmcs6J`s)Fk@eti)uP7W^{hU~^I38RLSsENp-IS2)iK-dBJtjFCq^p0I@a0xTS z|LnP*y0!;7Nbili{jJG5znlye{auhOd$JWbHNh4gI}1g6)OMvMA>t)og=qeS;BJdF zSthh^MR9hAG9CP)%i;nPk7>?78GoNbN`v=FMISXPidBtWJ+zP>(8(dMK7~{ zaE=GXueP8!Uh6=~_G+R&d7w>|ag_s9==hW;gFt-tNUpVcz)>)OM-pXqs8@sp+x+T^dOZ-h#V^FqcaqdC2m zwPk`1Jqm{$7pmIeDJh@gv)8Fit>RgH>k@EF0Fr>6Y%{*qMipNi)ZGnnF%L&sgCRzi z^E*C40XwHL^p27^aMm?PjP$jFtIh9LxAJdVNED{>dGbP{klBy(8U6ranT>!QDTo$l z`j+_LV1c+of{|y>$2iUm5#$A2zl?U~!AGBQ+V-7zURe*H#5p-^X()bjQ z+Xgytp|MDS<|cZA#BhuF#G14+f_dx19n$fxIFXe!L-qFsG0QH|j&E8I%U3y1)-})y zYR*8~iIDfo?)7vmVc}LnCXQn5&LxLiN?#P2L({$6M9n-5EG|>}NiPd#2&%O@-19-j zC5KRt;U4`O|7w3sr;sDsJ7Dt!&285|?&@H7`={;qp44{JEW2%88INp9VmG&qou1N0 zTZn~?>{HtuzGkDB+HJ`7I2SsbDAQ)+WqrrzHTKL4_-dlyb3`9&16KeQVqt^9EEUi( z$11dCw_A=D`2uvYJ@H1G9&5!ss17fX!yO~3)OZBS4|*=Xn{_W(QSxJcgQ;1_u}*q3FW1cuzu8C~c@4X2vZ`F$I~eZMII z_wcum>{9I5$zDCkOd8~9t%{r|t)6j=+ums=5Mfi70VX=QWPyhQjP2awTnWf=dyP!x zA4AV78UjIdIdC8xifm_Fcl#i6(O@hkFfI@Lds25aEyryo-hEl^5U&8_cdB*F)kvwY zlxE5T(XQ!82vb)YD91%ZoMRNIA~0O)C`$J8G&8C{-=(8%7f9#av!->glOHTFN`Kr; zy`TkF8{$Ppm`z0R7=y7J)CXb~(TlR@C&)WQX!f(4S*-$Tm^=oJ}Jp-;bd%V~D zsoIOZ{zY-!XB+yuxvV+;bs?Wo8FF(rCwAIgTl(6@5QECMoO46GBW^at%$6d8A6>*o zwIvC7&Q)4p{Y{8$MTrz#y2hl@_VxGdHWUU|#_`(5B|zx^3k!qd$Ah!#8;=S8BpZ^` zyVBE8agd32$D01bM)UmJy#-*DEA75Un3FJves>sP^M&u2WoMTEF@{THoA1_Ul!$I) z5u`^J`ConmRA#Vg(5F-X?ZsljagUDnz9AlC%W!ZY`UAqH}YJ4@~Sc zEm&;)xvPg{b2V3^o19?c`}T!t!#5JP*5-Ea7!yf)mb)0Z`>2BKf|?2~Dv;#XAYabI zxO?MLLCZnXdQ7shobWn`#A9dkLuVN%H1twH)0yXgF}>J{GB{+}Y2MO{by zkM0BgdR649InMZBh*&OnUO~N?Ji6L!OrneCvCW(=W^t>zx_g#CQ=_`JvfDj(dAtc^ zv$?qYScvDE%1{!FE;ejGV5$kC_NA#87(TSuUbt9OU`3Nsn@{d1-n~mCSK>lmGrWh@ z`)ZDmu-Br|i(2HwMK3d_xI$qOJ$POtWhkBo70WqAr-$S!6qj8o)=!yB&)%VF;SM*E zAADAxQ+GcdyX^g_vGI(ahvUDL0dn4wl=xga#k6TNkpjjhcY0#15}xH9;wLVXyKAgp zrWwmeL0a?RXb*6n{m4sW{W?9O*u4~O8M}|qM0~mTl-K6{{6b@02Ob5qD*AfD+cSR* zzTi+JFC1p8etxRaxGxutE|ui?To2x4hh-E-!5pdKT3CiK5oc9-RWqb05w>TU*w!}y z*E%OI0ioSCr5B7z6R6w1Is zX#zQ9(MwNVA+AN@DLd`VQ}oB-G@BM<1?zH^y;mKw;8ew2<@~P*%yld~!WB3`7KtJ1 z@kAFBrsJh@3eyb~?Ip-a+^ox`h56LjaH-<}`*EDf>NxzMv%{^A#$<vp~{~%34mrilb-LjE9`&T(+qNcPYK5f~V7E#^SX^*9{ebqC&QwM1*o|P;+w9HOd zkpKB3yIWSl?K`)7pS$~Z9~b0-d$#uS?i+jpAeBPGR7R(59u%xuF-OQv&1kjECyyBC zMkFu@pFYRf3%>j})p<6#DVfLLtkXY~xq#-c9WfJaj;+$a{28bhgm*s!dMRIzkf4t? z`msI!UOTcGgQXBhPG;_MA&3>~ROL+WRa?`eEPcN3Wf#zKyK4GILVXn_< zGl$n9+P@2%^&RD@TD3>})rn24RBc*x%Pp$|gKdX82MOTV9SSNKe=jw;#|&gyJ)%(J z*DJTTyL-;B+43R8TN1eju7Qv_%F_(;{NTatFsQ5XYWvXnc(H3Qx4#aQkTTE5gw zZ94nE8R^Fc$&6KEy-#x$8mv-Buxu>lB-*5i&NoiIEA53X6Q8OmM9sM7f@mzdL}C*- zSIQFYSlMg~d3~;cil+pQ_Kp5|sYvp)bxyWoVy42Z(W^Zzs^m z#Ya{n!KYjeBm|6M)Pa^V%qB7Ic;eVmwNXlvk^>J*;bRUA=ceR9iGQ~R)Cv_#DxirYhe4A&@(`ccy5O!QbA>J&rhfM+hdUudIqvwg)vO4MG?wVl? znpdDTPKE3mFk-STVmb(ycbcdVPc%%IVKY=|yRSon5yFO8_-5_17zTJ+Nc7{}<;cKCcJX(`7`Hbbr0MAVCtv49-FYhjo9n&LK{X97DWz zN>1*trD62CzXD|T1+V}mU3Seo)CNldZ1M&t0n>XNurv%V#e(ng%@e*g)Gr~8I+ zoI}zdt}3bpoP(4`s#fiQ00N51tU{eC+j@tg%^|5nAUGaX68)JIhHe=9CM{&rhQzXJ z#$bP#kp-}d|G+;8G7eD&*rrF#Oo&HxG2o3!hGcNJx!I%CR@W!*grqR5^l<8m9(%g< zvve?rrHdqZmB)sEuSlP&I36eRN)t>%jzXOBxO-@E&yj!(yMWwTfAaWCXyGtTe@zvO zsO0PNgM5*n8gsEGMjxU& zj{vvWVG@*)JFOzMYA+A(!(d};y!_Taxc%M7iRN#w)PPmSkm3jg(Gwy0`&tC}uTbk` zwf7QUeA2$JwYS*bBzDdmSlvAjvBM{sd#6Y^R=ufX3zlTVC(VWo92%z9#m5!TaN ze>V`57z~ywVeFGdvRwilHSE1u1$SpDH#roQiyD$82sMEHGhG;e7~xAX(Zgo?9JKiOd6E?n)_QdY@%>UQOu9F{ zT@jJs)}2J(KyZ}eln&ZS8R7yqO&1_V%q~GW2BT#pp&4>gm^dpYik4x-h46Zhqj2@j zt^tA4zbB6$;>u($vVu(Z4#w^=Tck}XcX^nEL*xA>5x)n=VOReajyaj<1hdRX(S1ob z!w4RxOdp6P8z2(L9vvw0=DAsea4@7h2?PHM6}}yBJ^F4l@UmhCRyVK4-D7C6iYG~% z5$;ZwI!6WM$1ikO?U{@^)bFR%WRZ}=2a|^|(;pz%)m`t-KLP8HGSE`Dx(Nfnfh3^N zIEjAr+gZ&YeTS6#NA!_QmAA+w1qMai<)u3)6@4t1(N`=`yZeld^; z?z_dqQ1wt~{lWC(yUd)LUi%{w?;q{gTN@R!tSt z-sy%L4IA;>xlS#7d)<%uc#;CkI|-PIL$jv$RrZsz*Hvm1u4~i?5Ta~vLV{%czNFBB z)|Id^z<3#Mki|a20Gcww{{kx}=O#_S;~vhSyp*#~dHS1gDjp`IbG?I9r3xxuu1Ov>AgqP4OWaf{{JPj z-)0B{U{{Pi)Y$tV!chZ|TRjgT}-1EX;z z)gx#Pf&LrOIF@7BL!9$4e#H<)!@?V>C+v=hpUv(9w|WE>q;FVDpI|4|QpjT@7GM|U z6sEd1NH}1&8g|3xg8t2W9OVgI*N5!awX&aer#U%#`DssG-U|Oh&d;pNRSjTAih+pCtG_8BkG%d2Pzr-fHPm4KVz!ns<3K~E+FS2C4a^DbA8-~3r%QDoq zZAZ&e1lV=VH{x8WjJeEQz0tE~SZRo8r?tzk%{YVLq8RhOw?z?E5S=uBS*g&P%EaDU z*o?Jym@@ch$F+!gb5P(kS)(O7IbHv=p@GWW(02S@j}ML23wB$yBcPdHJ!vh>5-u^$ zhX(}+uh=qG4tIaUGH`QwNn>N@zcjS8Ey{44z(1#hlZ!mlcoT3nZ?0BQw{+3rPwm>+ zX5Wqmr*YAVtNnll2+Rb3=C(G8L}RfqT7AMuQ~9GBbT_ZT{hQs2?FY_n*Gr$w$uu6* zH1(Ie&@Hz_k&r0V^)CLf9v%5*AsG!N6QRR3e=|SL;0a1?J(*Y% z*GNjqll5^WyGHWMG@WDCr+~8QIeiJ3a!{cHy{>YfSmT&})=l56x1pOgi|$XXGX^(P zNCB!JcQn0-LYtDw;*{L`ZH|uW*Gqe8PapGFMso7F=@LeZ-aKvyHOf(yut11;Fx%XM z80m`jCX3H=Wu59jAS!Je+>-0nriPy66XX8Dsoa%h1PHf+^OS`Y?e zV^h;PrJLjEaj#W`G?{AC=La!{4vlM*34vo`!sQ>mcm)_>oSL3b+1+Wqq>`E zUAfhltnSucwd{4x^KGGD-AYZnU6iE)g1Cl-t~sh!cc4i zlEZ-ea6>3W&swJ_bXSEez$e%H{nBb^w|1gzdegd8ijBGl2vGJ9YJ4mQ?FKtsuM(tW zpNSQDpiXGfy&2~>7Ng}f0D7S|E#(1D&x>A4%j*UyxTnlGD&|y@9HweUsAgVcslt-$ zfrWI%4PuseJJ%vQYi&?{lXJ`9K;ybS_^F%b(k1RP3nRcPEt+~=qjxG*3kgZtPNT6^ zdN}x5M*OPMGZ^%PEDiBk_u0~F%naONJ%H~x{nkp>>$+52trx}U&koeeBR=bppfdr# zVPm`|T(PMwX2tWX1H^5kqvI#LGFmfbrEVw1cQnQf)qKO|>bT$f4|=;eo^h+3nL2;2 zB<0+-<;RZrp5o(1S5tw@t=0~+60C<~dzEV?&8?@!jr|VZk@I!&CZCPo-PP~Kn?$l& zNoGtL3AiC=B=+7KaBJ7bo(_h_I)fc*bdXvb#L%KA$%QX*%GuF#@X`Wwb+hoK>2Gbrp!bY}h9{6duH zi&N|0tVaD@MC)Eo>USuPOuQE(DIjM#!>rlUeYSMglR!^KDb%_$0w=}^Dk6bvUG&lq}qgPLSGqeyRO%hTQ(E7(C+k&jr7(v7eYI-D>q~0n|Y)K-u39X-Yk7 zLdMD0_erxzKbv(0y*6~v*yJD#dGjDNR6Ga`Z8kU*k__FjOT#A0N{4ALO)M-xr~miPpi8HlPu(`MpyepB4Wz5 zYTyY97VXPJgl>wgDKolkj7*=#L~s)8vUOloANezVV8Z>jkzm5&@Pae+`i*k6Q<#hN z#wKp;u!NBo6OGDhbQX-h$svi7b>@JDnQ{XZEvw1YoN4Q&D)4f)%ipnU1FzKZ>c#yp z{qG#V^1jBL!$XY6Q?1kLg^*3#x=WUvC_X0j^WAiHl#_htqI<5=7L~G5{MvtCYY8~y z#I?(kmv~bLGOsZPKEo{C9XC(_7TZ2@C0pEYt?rx4IG!j zoNYHqZzj6y1^wHpSV&TecNz_|w`E#U%MHp^f;X$klc_VrxfK%XV@1(H$*zF0V~j~7 z-(%DS;J)u?WYJnAjO48MORp>hTJjpC%AJL&wLn#kk%u06F%9iZgZoi^tx+YtIhA*~3Otze z+$Gamj}G|Ij2c%dobz@M!8xb7&6VvMT;HvJb0?YDCh#5b;_}I?Lb}V3KzsE_SXwoW zx2sh}u--xk8og1&O<@k?e{=9j)NHLlDR7fvA#7*Q-`)`$Txd15?V8@OlH8u0+{|W9 z9Gs4LzojQth&8b#Lldqpu=@lG0I#|Z$=T_t0xUzem+P{iRpfz;u^8HdkZvRz){GC? zjp%bq!*eJe-Bl=0z-q#=;P#VTNt9Nu^|yM%`@P>3so)&U7L^OXw7igUiUEb7Jo+)RxJ9( zsnvpjqL$iI)3txo?vEeMKt8d97msRWOZME(SY$0d$@=wQ%^D!!~)#l1~_KR_QMpcF5HN7(Bb!#hUX7ty@NwHNp`tpPi6nMDU4Z6V= z&@w>HF!Wyv+)8I7w5&))$+e;K);1j-fj?99R3+6>z)AwufekHJrub~=V>UT-7Evfk z2nz^Q#+X8Chi7}!+F_EK5L`fNE_5-QCmO5!OtmoP(Lh#wYKM!Q5`@eTDY~`V2}MP= zEITcBp25(ndqh~EpYQ_C=7G*$FEq_;Kc8J%ZrZdZKZ*ebX}d0XiBW+Wp)8RitGP1D zt~8s!nmvJF)~NQszAc%}-Dv#pn$3gX%MDy7AGrx))SyvAL_j83<~MhIKM(={-NCg@ zSEry|sdIgv&9BIPRoI|MYN_QnOCGuqH^??K>NY3DUBA=i3#W_a1($q36oP4X0jukU0m6&>guq(^b@U(Sf4J};qwK*|1nw89778G;w6ACGzs{O{V)(>#A7Ug3ycMQTp zQH}EEeRhrP6^RJv`_1dYjY$F3%;hbFAb9ans_R?K;J~HrQF1n7VFbBK4coiG_I};- z+873_2W3}W8A7lATF-44yNWApTPDwe)Eb9H_CeG{jsmGZhDDt(qzIgZD(X+{w5qlI zW_wqQ+8lxo&z6eSrTSR8%jirI15UL!sU8_`JXQcz5z8jO(r3(6xCiI3Wdgo!@(7x* zbKn8G3)?9hSEPfp#r>PbPCoY}^SAMyF)0c$SqijVBdLjP*aw!q?iPnlP5Wfm0g#SE z5P5||WZyGY-XzD4E_6WwQLbm z8!s^w6XrZQdXxkTu2loJF>0_6L`Jz#NG~1)_{@6Yr)e3Xj7bWj8n={zUgYBkx`&~L zj}TVO+>B$PlFZo0QLE9j$oHVX2*PWNguWJYH6pXz^g%HdEt@3MYFewcGcK zja<7N1)%Twg?R992rm}ITXz1>M-dtjv?5S(d&&ZwAf(SNN*S|PPwTt2hS1eouOVH? zgN+k!fRu2((7+W;hM?%l9Fjk?#;&503IDCQH8NS*(m^f=`W>=bFLa;}FLCI`zj&sS z)+@3K4CvslwjLA73Mv{PmXGnk=@@s2nkFt;5Q4Q$-!zuRorc`?R=lc3Ihx{hl0}X= zg;$iGe{7+1Y)8x>SJ=2U`dD^|?o zv_=O_tdbJ4llQ!d`_M!wG|{CiZ=#p$bfF1F;RRRKqez>iEYz+bX|B6iyDZ49a?ZCV zv4Sq^%`&SHJS0A;h~sKLZJvB3I_Yd#1b)#-6m82S3cCVlCMhl={v~Mon>#)Q0;e5R z!$5zjb4^E8;F{F|0!la!k;ePM1M8(qP%{=QS{O_9qo8m1NmYh{b4$6?(*uL5f$}L z?`&+gq)1WF9#KCe##x?Q3Obz?vM&lp ztuLit#yHdoTOlEE%MkdNk>ivgCrBNZvz-9A4SwBS2u+~1Fs}n~s|z=v@IySa{ZySZ zN$~(Q%=ug$GgpF$`uYhqIUW&(hFM*9xK9x}U+_^ayNAeN7ARdi2gaDAGqFs24r`&q z9OpM8wBTd%J%|nE+CbK2F2RKq1ant`FrY_B@%WuaA1;annhe0E_rc_u4sI?>{4((O zH&mP!mf>=3dj~jD%S57FMjy7IaV_i&M4PrVSc)i{Qg*nKsC5-?y@Yl5ZfNP%kY!~1 z+R7t)xrD&ZuRS5#Y`ygqim<*kVJ~KC&2fe>V;V@l5s99BSj@npRLo%c#|*`4avvCe9>oe}_`ZJ33 zZT7n>SSk6f?kSURf7+AZ{9D=6GSBc!vJ0zA6KTscCmVAdCQq;Li9W}r-Vyyjre3BM zJXBNil}|!HP6=4C=k6D7z%c;Rv)mEL5vN26J_(xnrt&8+$8{xf_4}DBWqOS|lpR+IV>LBWjEL49&JIJo{cLD@b&jiSpkLYTBflv_^(EI5-VUf;;i9oTF zFdI3V-CLsAe~jvmK*%tCgYHwXJN`K_|9>lY*aqng?!3n@bN|QeL9^_r9y({JFKC%J zMw>=EYci9=!NucBHnriBq9!ec)ZIS!em}!o2$mb;FJ26=PNL!x;C-DxmnAreGoI~9`BO@{1O@C+GsW?`Vg!bfTzaS1y-87BCs z;pk(Y0`;^Yz)`|Z?ch}6g&bk3C7huJ?t-asp4SVTdMP1sL^WDZkdutWYHh}kCf8X~ zH1(F?TTfeD+T`yWvr3CR@M#3o63X123#$agMLTS9ht(Z7nRpxZU7qZaE4=Rb24TRl z53ljr@$(-q?W%+w*-Yt#gp=*)C_=aw}_+s2)B^9Y1v2wvO3eYj8a| zu**GJi_e+)sq#*tKX4FZ(?T$6>K>2hfeh+?Vt;H?iyep2TL@EaDekygri3j(#Bvl| zLk2>LCantbj~CL06y;G$54h1w5XH;Rldd$?N}hgc!!{bH#W3?*{0g)8g!BigTq~r0 zAx`I8pXCGcQYqys=*?mJV&#-am&0o{xI^;=ya6v%JMgMA9Q)0QQ$u6x0J^@P2 z_D8kIsmH)I5x`eYo=}iGQO*+Io`%XH{~y!=L*-mD(XX50CDdiMQD2t7$h^ybryigp z8(A2V=*cZs3vl@C;Ng$&GKj_`^hq&U5FnUdGKPSK_)qa6qgVVuNf8IKRSR#nYpd15 zz#B7Z+;t4_j#Ehom1Lk~ezkG+nX)(BdKUh5$x-98*nI!h@j(>zaWcSq*2JEyz7;!B zeg6gepmDHQPWn{6H{)ZZIb9#!O*HcV9YE>tats^L!gsnX4< z$rt$+lK%1uo(qGRSf$5MNnBPWmsSc3>~eOkO5^0&E4^5y*HCGFHIUM;b*8|161(rB zRoe>H#Jbhj8r7XsL2=b#Vj0M+Wuq_T5km_xfx1ML&*1}nb zE~}2khgZcXg*XC|-mH^As1U@xRqm^*HnwgaLN|rQZt|+g)%J~eDfj4%r_QY2bEsDg z_3pvEnIdw5ux(!AD6- z8C*}75ztOqSy5e~7}Q*sUv$Mog=#RWMQp-)&2o(H&Z|PKFt+-Zf}$nIktJ#}Es>(u z*=YI|N4ci-ECikN&_pH>N;W+>QY#Eh2oNW{jX%Nw{Ylj#6>BKI3EqUSqZEN5+h{lu z&}Wcd%kL;$1fV{EFK*)!XzO#G8ng5u*tx*1WTulyDOy|+)r(S zWb*>$6(!qaQ{?sK6gSy@VZ-)YjU6V9QCKS5-+{AQ6oelECz_J$ZDyWkY<`X=s2Lw3 zWYgl*eF!v@t80ts>H_ewU^6RoFM0^-re1;px@bQ7<{ur>25g_!Y&E)HMnlQFRZv8% zqfd++){eU+Hb(v~WNV>~UP9hPI;d%1tctH8K?B>LVf-XrY~dStKc0>aG8UX5`=x5; z1?)Hr8lAkDiph1ljskUlBa-$G=UQ7(@s;JkBo|}_wFEr=>@o2Cx(X|2*L)K>bi*P@ zF>X$#<@jaA$jyMCH(T7Vl~WzBF@GAnhq`IA`Tn5YHLcpHjpq{O-;%6V;{bs&qvnv_ zB~NpwzT5=wD=2%}dfXQHAOc53+L^h9k%W^l7*NWq^>`8hURBEly|gg}PO;G|(BRN6=igNir=hDgc$BKc;bGaFs~f(p)MNEr;i2l@`5*R&H+TT0jE+M zh;*+TAmxSy{fpk+De<%z$T1W=l%zO&HsjN!@{4NmX5VlV`T1(!UgNR}RooQ$MHoWu zcD8OFJ7l;wCt|t%YFM^kf8xXx;xYG+nw_^l#nXE$VCwmxw#gG?>5> zr4}>>8vzyEW73aU&Jbl22$u~C3E-_I3{?Ch2pq30>!>PmYNhd@gz4k1cs~Hx3m>S%nwvVUwTFcARy&-hkL}!ms-oV#>8xAWjDyahzAc$MQ>J==q?Q{ln0C_WkR*vAZ?o1nq4VP={( z+7Y82S9WZ;_deVQ^8!D9WAj7N8)ZH_Xv<>>^~jiJq)gp8qED@pNP1EEo!LA-_@1*~ zGDqw2h8y=-uGo(X6_bhC1aZA3%qUAYIk*2tldmipf-hCPT@{V4+&&xMQtBp}TDwop!# z_6}=pI%P?yzUjmO^YDh{^B#N`4sO367DMT) zC#J34`F%7CY$@J08DpJ@;|5~fJYLB6HT~fWEf;GuobJ7M?_q{p-(G>lP3pN*>EI`j zjV1SqxkmG+QZ-G}Cc_F0fmcb$R}%bEZeT^LPno#CLVyrX=3UIH-PCVr?$;8Wzm*qV z#V8HBiPYr0bQu?qX8{+v@=Wo^K~U|kc{siIUU>#hnAC-= zJtvQhFio8ZXLO&T&71h+6L~*s4BiszSL`9@$MZRXKQOZ%DZUV<c|;@K*+qDndUnA4$bADz2 z*zY4<{sGX*b-u66)y5=89y2DAY|S#f&XWHd5OxV4=|dK{LQHTao#O@M*VfHQ0d~_; zIez!vlLjngo-~WDm%nIkK||L zJuQY@5Js-Xs~FCC;Nct0fmUTN{ANVBNUFfYEH9C&=G`iX-8`uMFZwqF{(10k-eglm z=WFpxU?A@`Tc(2T9n^qZ4S#(}`Q>aL{>LEQN+EswBSt*SM zQ-~-&)vA`|t8*ZmS6k~uw0OSOu#+@&&5lHw@C|UPBCM z(ER4v5|h|Wg@TIxYu?@Ius;>vf;JBgVy9s=_JH|nE`yk8TW`LbwmWM7H@JTPxgPMb zJGkgOxP!0q?%aTCz>{aY3VPdn|ISx8K%Vy~Edt1-NxRD%NWeAC!XgQ}bo0f#m|4Sb z6Vw$>25m|!0y+;Fx^-z9Mxn`DYA?4qmsv;N^&!c+-&o)P<9PxLZ)}n0qxa3N)~4 z7T&Sfw0F@}s{LeW3ruL47r(cxWi`^~1X{-zw>%$f1KaR+{CZ6|Y~vP{{Y@F&mXBykrvB|g4&o%p5` zqe4D_HHg7iVz~dAN=z2XM`W>#YmrG#Cf}P!@oB*}X?4+s?>mhif{ydv;?!q^{e}As z??>SRcEu=eAuAtdu>L5Bfr0u7y)Ptu&-hkAyzfNvh^2&Okn}{&j^Z$ZqL!+&AYE(!)y{)vB1%dvPJh;)5Al^bwB-Xq$TANSM2~O07Onpw1_BUH{_hM) zPH3jKrYKpavup(~uu7k$k5E7IYmBDaJX(SGWak>?vf0ts1qp;4*pN8rj~P~=AHnOO zF38qYZMm@>sY%NrD-bI6D-;{%l#`Pr;R*#Y?ZI}VXVD7kWD+v=oU?icR`@Z0SRSJF zJKw&wu5Bu};7UH`5ho?cs?#TfCY|G)fL)%Q2T0<YlL_4 zyU_(?dFHYFVq+Z5o}E-`%#xc=3h=Z#7oYn_jDq-H(Ql@$=Ec}zSB5}a>Kfz!(oUKD z4@dftVK}3M{7AKe=Sa=wFbvXH^1@oe2o|VLn42Sm{^en|QjVz1|I0Dy=>sgK{0hH_J=I)ku|_M*o}5b!cE|EsUYGszqroc zVxDVj@iGzolrf@a9HaMor2IPm&Np@kb%b!lKaZ$fwn##NDI7#2Z5Hh+QT8u#u)61` zqd#cwT=#})+3VaAN)GBil`FT_b2waGa9q8&S~cQ&!w^(hUH{mTWH-;;;KMq+wie{s z%{;A{9yE;8hD(YA7;VL%SN-&SS9Ob@g$bW?{CDDHm>%_IBytA!+fMqbiTQdM6}4&`$lhJZjV_OrV1u8lzhYiv#vv7kMi>N9Y$9S=s$=^VP zY0!5r$;NA9*Aa1csE$nbnzPbkL@seX2$@Zb{XyjGo*Rq45$)?vOg+bAHrCDdZteo~ zj(I<6cAL%>aQFH(0i_v>(Cv2Crp3{(n&5#5wOD@@0yS>hFA31T^($I*3K&}*u<>k1 zJx=oQeTnM@59G2%Q9f6XCLK7*$i5Q#L(bb$x1T*8#Ve(B2P59i^AcGaQSMSeK+*Sa zuXNZf1vr!Y|wq|f13hWf1tEc5qc!yus{n2h(nP0|yKEojg&qdsN){F_BRJ|1bzZb&)ukAT%v2Qgad?JeuYj=Nxf94`>R1Y)pTz?2* z`)RpYpLoRngRX_tnH~_B3bbq=xKD2Rz+H6j8v$=uLuZM$6`CG;9O=!&^lQo8MVPjP ziwd8I{4d%XNX4Fo{3lgOlWWB+Ck#FCX5H($iGIQBz`6qbLfuneinnqmgNdqeFnBZB zh67tp;SU_2Fj9=PJ~Hn!yC_#NZ(Pfq)4U6>x%F1`3$Eug_@hW8jj}W@I;mhL1;b6| zUSDPUqQ^S9zmWN@)J-{ktv=hPL^t1%ygVu3d5wJ-b6I^XYZQAY1_*xmv`}VIFqUT8 zklp9E3xLfXT(IcsJRE)EcU6kZx*|~dxoHlCO`*LRapyxWGs*r5>4WSVEtsRCnK-$m zX2@zjSj6eKgv5;W*VtlMuKVjU8e){iZkQCDUCvaDtqL-iO?+h0X$?hFS_JYCZk%$F zx9!}rnflwwLsIoAt0e;tS@!(>r2^FFc+){^Y-rYWX#z;7arKga&s7Dz2P`fSTg?!; z_kBC~@mo8$EKIfY=Iva+@=Ja9JOzyaN~T4>Xd2vC?Lurc!X^l0wlg!k224ue<6sDG znh!pr^GO)lEkxOYt=@Zl5S1*s53B--LZt_YB=nt@8C+_3)1yc4#3*>GC4V6imST(p zcBx`h=l40LZeYdbS&b@26?v(cF-GNgNV9(*;%kUt2=5c*ry^nsRUg@7YR5=lnq|D6 z?Vh1s0=C6aB*lX&$R*n8pVGa77}b(C-Mm6r1bYGrp@&RWR9 zD10a+qD1$-lZQp4u*)J4v5gyV=m3m4v-fIh55XpEeW}Z<>ST=ZE%+Uu&MrRhDY=|8JAlX)* zC?NselR=5qT=P2Se8$xUkYSf3xMqOxELYaxv%I@n=NI%{YeAhyd$x_>dOOSv?nky@ z+nVj$>&JKi$0Bx2y%;NHiK^Se4iURM5L^oh*oyWM(UAK%4vh0y%o-lo4Oh)1S5T(7 zarJB#DwwVhy}4n_0U<(Q(r>SOYu;uyKb_@%<`?`1@wYjgR2JPLHcN&Lx;@+@tpi6rRe4Hsqh(i9B3GB(v z_1qUV9^Skg@(y(Kz*tMwR|OJ}*xAzWxGKQ78_NH^DqgCxWszopW=qMs-7?#^F~3a+fBCV+)Br1~ zjF_Nf)AS)0T3V0U{_{?j1E$i&)`g!!D%5FmcE8~}18V`Y_qESJYbPUH6eDg8v``AH zon*(Zx0w~l?HHu{0g0^*LsorV$h;cFedRg%0Sqa@ICT<0!?YYI3vj1gR#RO}DLmPR z{I_y~pi{mWrF8xZt<|9`xHyw)W^kBiGJHciGhu%9ypP7(?j=t$YADTFIr;tV7G!vA zj3?{If`eb1zSqG3qggj9->!Vy#_brk3}v~ZJ*pIch@>C_Krh><-NmJltl9bm6MSJ! z(hO^kzi%%q`asL4$X7bHn^zn>EeNAl|jT6+!w15@BNbX(|At zG$k5rn26D>BOXpi#s|#1CfR#-04^;o#|wTBM0VLR8s7!$T51AKA>1K*v=ouyIF<&f zt^^aythHs(;0VJ@Hlr$UrBM(m)5eht3r4(^*WM6jFWj9gPR1}?bL zsqRpyC+^aUWbf=!S#zmy(ASkgB_Wf6mf*cHl5?LWm1pgCXq&d$J!51b0B#Rk77Sfp zrQM1T(MEEU;>L^sFDA-8k}xEYVMgF3>`XqyOV^aWU(2ZQO%SF4LF(Fg{qWxL)v={e zu;l~G0jQ?ij6S-cW$P57awElc(|FPq88pmKQ1~=wfZUTz&8!!`4s) zp!hWcSVOhjDW-~XUgh{`yVzk*X}DPT`o>c()~t0gLI^Akhe9*ZJDoRXeCE=lE-pp& zE4_j<8#MeYqmEQCA$Y?ZJuiEgt=lb;EZ0$IE@v8Dq`NBGppL~vFe(mssc!oGY7y9z zePr2{LQ`(^5T0wggRHBFX)pfi7ayvJw&BCq2EpFm@v1?J4lUsptc5`R3YO~i z)K^CPuHegV#BWpfpe9UMJ^gmQ)_loq^(1eGmlUJa7h(zl(hpHn{}?s0f!aKu8ecqC z>ItTx*=M82j4Gf6;O^N+cVj!A!17tp?I(W0nqm)gE#C};EnBO$A1Bs~7G<0Ql}8^5 zN8Y2aZZZ{ZVcT_?z5G< zkImSje8qqT7f%VbVW%l51E$WICD8_pdLmLZQm|&p!UBcafta$RgYaWFJUG{r*6>() zt6pe_NtzY6W+`p}s)<94ULY#l@Ttdz4!{wng2c6@`mW7<(DR?s3WZ;V!Xc}dNz2Ys z!L$rueQPJpN!9k2K?)mHJlVpKl&38yQE7J-ogi3cTE=l3Ly&6QV=x=-bTm2xEX2Vq zyO>p6UGeT`yQ1Db9C8V{8kHNeMIlmT(X-{t)1mefatmNR@HmPmt(2v#Oh<zH*`duH#T{YCL#2EkN^IT{WNsu0Hf}J<;!*R)|4TiJcakC8h^oH z--tT_3uw-ohfR1N6D+AHHJYKQ``dssCXJ;)N@rBGeCZ;!^ekNkEkMjA8C3=W_*`vh zny^Acnp+kC9|h7AMhK)wYxR36faEq_Gexx@ry7~ipknF3WKp_O7dFmLFmM{Sm_NezxLOqq zoGriC-AZ}}%ki@r<8MsOzQbX)5gnA1Hxrb{kNPQA<>azm{cehc(`c4Z4?OIxCMT}V8ev{Ul?7{eqsm9< zcb*vjnH`h1EP%IP3SDlaHo=LcYY=9s%#*0`J$^o1OO&m8u8Zb_@BYdkj)a}UIC%ng zknn(rN8I0}CG$h0+*?KEDDY%kF-|U0NVQ2q)XerZ*4O=E%!0g$UWmIv2GhO6_0V&l zVqzP2@qqs{nDB;M;5Xu3MT^w2xp%q_pVgXLbN-=X;uN=Wj}LZeqO(8PmG92wt4=;` zV{H2=qLgh}?uz_qohP1knWG0@K#qqceg(rO(5Z19Uveva#tIgTmmvJH#RK2+ZU{X@ zN(#EeWa~K{QI}R(tAzx!3-po;L0BJznjZuud$mrX%;8^^iH?g*f|MghRb3aFswa26 z>Ubc+a}UpEYHD&=3`Fxmms!X=@LWjJ*m$D3Q&ur@3+Q_mKd&D`@4ba-Ov&PfxnK&6 zVbyj#-;XE(ixlJU!JAr`owWAvX+b-cHMbP>eM7TV6`(tO`>1eM1`~+Ocp7gT)Z~LCch7S+t}{fUZQHbPpgHnu@H@{ zXh{afc}s|ztR-$rY9WzmJ^ZEv6<#kn4y?epWMmXpo)YFTU)p)ZUo5N^g;++)g4A{vzWUpopbg0 zz)$j2oYriA$G0$QNXe6Wth=ztwG&)5`mS4;pplMbra*A%G9oMtD6?>SYrdE57Z>Fl zw5~GuZm}$-R3NHnmRFRl*>OnDqt&NI8KPD8N|Mw)^wt?4uW~+|?ri(Kc-bmz zIZVskWgxxIv|PgPglCA2l1033qV!3&^wEBoQRJ>Nn0X8_-qkzDZejn}n8@d7Qi!q} zq=m9#gKsCc6_E{`7@XXYR~nLIH;0~8p7_gzoXvW`m}F0yDZ=Jx%UD92(7eLG@ZsIt z#}^)X{eDGxGgc<77#4!NHvHr3rS9mSrV@~?I=$U2#O2*?;m^6`Ig9h;muNn|+iW)# z7cvHDDa@zv{pCZT$SyQ%SEo@bJsL<^yuExGZW;zJOi2*4qU2DQdU|Oz>7@?+@5E`F znEDodr29ADMH!BbYr7lPBLt*Lp86tMjCkMCiu#NnW#sS|{77)+XIJB~=X4N|{kijc z*P69Pwr#^_Dh6T+g4Y~M#JFVxMsOCQ&A(*D4FWi+@37~;#BN)Xx^uOtY_$2`Is#!Ck?8$y0Um)A<*R>E$c z3^VSw%F{Yz)4@0)zN|l|#+^ec7E^A(|mH4%AFP322{y^X8;P$0=7u5Nbh=(EQXKr0!~uA{^^c+gj{t} z_ZT0MbzO=84bH8W8<={O=U|-qcGnMIZLhFYuq$`5>W>{bh{goA65{^Gc%r{+b4S6m zlkYpuw;5vf;tpOT8~_|S-hcOg{86oE__*-Sf}*p(X?87D=!|e`1a4y?IzDhHgFss& z&0unLw`J?kj7`^TA>*<>y!>$DQez8X7$Sw1%F&tk1OhW1#HB^cVX0CC}Zko<6 znAy+1apGdq!0oSFuutM4?-lqJpI-sooBNRgD3n?s&`4UMBXz?J=W=rcQS2MbW)5iDN_vQu zAzP)N0ZV`=WqDfr$_m44>b5bui;MUjP{?orJWRgXof@0&kHETD`*8_1n>H*O#d9pY z02k$9kF~9ihLIjzfT#U$gwUz&??S75Zzz^HrRB*5!51u-@zu~AFpcduZY`KwZJ4Z` ziR$KiRa4Z$Xf_c_Y%0%`I!&V?f*yl89J*zKC!wxrx4+~($w~|cpe=^4l7vdKirf5> z2dR3dqwRw2i#L5|-5!L#?)eq_75H@+8+g_|24?Y5e6(zpcBrJu8HY+(O@a3~m`d*8 z1Z)af5nOJ#VuYaR9A)>0W~VGz4S^c8+*+t%9kG{hAn>s^F*m(^TNwR)w`|^5ASg z50VLKu_=yYj4KJl1=}7SZy3vLyeN+`c6+=>K=~o6uf|1Y3t>!MC)eSfLgF%ghwF@8 z5Z%$Quv_5lKX7IMY;)M77M>X$4ZkGg0Nw}11yU&fN^u&;tM!kH%emc(PyeX+W?Fo< zx;RYrJOHyrah7*6d0AaN2m3a~JA&Pf^&eu!S#fB8$14mfg+FS4jp7`Q$QFGX_3B1T z-MZqPV&U`_PJNEfY~GRsvwq_Fl%J-FCH`f%EHY|qYnPj*;=5^@7uQJB;$fOf@22VF z;$fP&qp&p4kBf(CDkaO)G%v1MN`VQ}wEJ$F=Ed`{hiNLko2GejpQW_@Fiqok(=@M; zZ(q}-%Tbjv+J!!7r56xBVT-t6=~vd7^mDVJ;ow812fg)42;#q z8B8%X8p4r~sR~%0Tx*IO95*1e8%IO-+nUrJ+Lf-#9J78gF4G46SpERp88)_f6G}iu z1#uelJ-CW~OR{z2L&avDbAoKK<9@@c{+&id4I}8Jupn^g+|sOubC|;V zezZCnn#S6%w4<3FT0O3q8k)R&4F4=M$#2s+Zd}C}x!i9A zGg~Wo;&{5<;P=y7$Nf?L2Z6iBG)k)${N}i6zW)T9Ho=555$~_khIKKKXR}(jQkb(A zkPxa|9aVjkW^Rzbg&7nK`@1VR@pJSa$*m+RFm0kf@wlUF`&S3Vg2`l3FHX;m^9Rk@ zL`p6Z(H5xAi@7;vIUW1q_NDa}U6~`s)sW*IPGx%4ExZKiem`y8#o!|G*9KWU;M@UH z?K;g6zf@=NJ?uyx3?AG-=%AS7!IGpU+O*DUaV)ruW)_qFsoIog#~5l`{8H)>lfUY!i8D@D%{bjZo>oo|e+%tk+j0Yly?xikL830(A>GzqdzbIvy%HQZ zmL`>{hqv+fM|vO%8cewb4ZV2GlLnO`hn6Pq-lnDIZEH2qDkonX#!d}7cAC|_pkKD`M@+^ zm>(RvEhA{GLy=5M%6Loh_>{4bip6%D22rDYrXs!A)THFfl--u@!V2{5Mu^;E*J&n+ zvNA}S+ThnXma~nleA&&Jnc{TT!ne&!%o8nOPwuAR6OID7lH$6@9DgTl3Us~&REfMD>}-)o~4AT1Zh3)$REOoHpLy zVCM%Cnv7hgZ3peI75&dv4?&kM9CK3JBg7H5!t8b3LqZHuP;}ER?z-d&p zx|>ZqP-fBU%rH6FaktLRc-Q|a#(Jae2BtQ~a2t;x3H}+zcl;xwDLb()43ZfRqZF=i z?%Y$=*1y$u;N%yH!V$3Y3mgAHy!+MFElrSl`Y>OhO}cx)(ZFtcop{ zc2oqiJqbnftB@TY06P-BWhnjO6kPaaznyCl>8_MI$RRoc837# z=F%=^X&;s@+%08n+ii(@c3Rcl#fi*lmjTbWaGz4noJ{k&tK2i0HMum3QK27T{9TW= zQM-!9N9z6ls8#abQ{IyGZY!sJjI5hk(Wj&1T~--*I|~%2J)vR%oa_diWOZ5YY<=y5VM18H(Q<9tHe54NW>b*7j)||0>r}JizN!zxwwC&vh^^T&L273Kd#G@+AHuOgvj=WQH@36Pq9Xj)Q*Nw2Eth?!8*gzG0 zuV054=C|fkkmZDT7lriDTpVof_fVB7w~GxJT-NU~x@N~LjGjlmra5E1I%T6Dy_z5V zxjzPUqly+7z)vQvF~RzJn6?AR2*gsuS9$IPJe=zJVb|(tUobrg{KbvIEs|2n;`$up z=p>M~Q4hq0d;CH(pL$ZL;zkJawQ49HqsAD%8IRKgO^M$0nBLE@bJ*N`vCdlq7L-$biHSLm-TG9&J{zunFhPj<=UT z=hHP#+}$anq99(K2WJtVhW8;vS2`w$&i;7B+lw?*a2k3)*=P&VW|)G77;`t8MfX*B z0-L~puE>jE#?S4!=*_!agTZBC6B^`0bLM9#!CfLZHw2;6RJ{6T`Au87s57(+QUAgj z{j>C|s9n4k5bX^oLid#z`!I5@27%y3N}`DBt(WMCuUE6;8Nn={uF^ud*6e}9{Pg-ZezD+B#+s^}VMEh( zzw+JKRTlDOQi00=x5p&tBYrSD$ctnzf>70JAR?{r4IP7-GaXxh!D<#^Z`QyRDfML{(n0~aKTs7ie6^kef%Ps55 zhrDX^g$6R7%?wai@tuD+`tic(i84b8^OHFR|GB|K3{GjpT0#*iCC_H)vb54svtWGH zea>!eL){=%rHs=7CtyKOT*{_RVTduB(=He4xDQWUD33Msg3^^j;J5Nx(t_pi&)>Z@ zyCz@>Vo^wMxS5?yOd;de1Y)ijDdUz$;hyWq4tBb#Bv{Ht45qxc+i`LHd35a2K6IV9yZ^>0btr zc5Ey#gaFVQzwEr%VI{2yOAfKrEV=0qokOLAmk5P&+2|Rg?7W0;-a`|~q>|hakTjgl z3D0fqsWn7S9~^Kgy2F_|I@M*1`|(7)UA*ZcJv0vrfMIN)(SXX<@;^8U%;X#2{zz%i;b?q55pQsccL0 zYo0`~9~&b(Vfv`U^#cn>fHee8Ijg+b+l_<(0ur$@7e#dos$d}@Oryb)0-+GRQ6oe? zs-R(&OCAu$`u@PCbgRAv`5><@o6Dskilg2igY-CU2&#uo5;~xyW(5Esq@cdgPJg-i|zST(|uUb{VWL+$Io0 z@QkZo({fd7p?V55mq>cX9&v}2nJ^uK*r&6YA=Sx{9em^_EJfy>r0&MujL)JY(QqU) zY$UG0U$*QP4K)jX%FdemyJ26a77lOmqms_5=r)?mTYhhJEU}yCzH2;OX53e+P=UZy z{+?fE<;F8cW8>zzBfux2z$3qO(2W)GOEsSCMRm6d)nt5`X@G>8v{{_C^h`M@a3_8V z6<_()c9B2T5`he_q9ZZWwz&$WwbO1_*S=EieSkhwZ7w6_`c7e7T^oOqQbnRA$H-f= z4{CCh>Z7=Aal87 zkz}1ritGKQtR(ZYT(S^b;tKD)oRwVeoxLm(WTwn|Xcm_|9?ru(>IUIZWCAmCE(SY~ z{4cQ;pB4DkJZlupUq2=uDut(UT2ROhQp<0=XJ3>U8R8)jhxAzT)&tj>ok%)-JxSYBM6H$VLMH;v&ux^#-1CEeiiV1y8H-q zrRBvj?k_;!0rZ`}4LYQI^Jkz#?~var*z@L`Ma27wOX)A5UjzEJzYV=l_n*Q4Dcvx# ztB+70xL6DSxc@rYz*W@Ue7_ClzT0t2Xxa&HDl^|)W^TtfeQ6%$*fd#Ay@Pu+>&8VN zlm~YTTM}#;>`B-pGb-oT{Y~>LI@iA4o94-B zkIfBi%UxBsOwl@K|Hb03_I=;e8StxTz5){iVNf$fIPY4I>>TBr`*X@axfha~D1sFOa2i?$2!KLNisE~aH5gJ+?SXMT}*qgeY^b*dMLrV|DD{I@%M zrR^*EpS*?6^g>I29UTRfoA2^&>Ur}|hsm6@aFwp=u0A9BcU4ufBjdV3Rn>F;LJ#vf zsksiiR=YF#c0PuG7`FzWyZe3f6Mn6S;h6?7ItX)j+js)+r~!&(hw)0)CM*WF`N7(V z1Q;}3S-t(KGDuQnZuHbmu7Lew()dbjJ~n+rwbCpoKdkfpNp zvpB^-%--XL?Ky8%HIfyp5b?g$ecB%mZqK9^xv|OPMddQL=IaBR^c^PK{&OK{&&Il7 zP?Hu(1o+rL3P>&~$X+x(x_2sSr~4Ahq?Y)ML_g`uWH;>#y;1qpA%8miptTH~1vMj2 z^41JwX$H#SRcPxfZHq63tFU9b4m+mnuw&|^)(rSw1W!caNs8P&$fCawg#IPVE0mX$ z1Ftp98!=*yF{>@NT#7nb{cCXNjlxAzgV;o`J0_mZ*d?s`)+xg0l#f_M)PU*Ye!07B zrCSASxc+2DL8a>mzD@q6GX}>vB4}E(l;Uj@sM2YN1XxmJ;x78tQ5rH?dc$t^Q z6D@9wOr@Zp{W$qCOhVUTFjkd6<|ezPopWPd*CRCNMw1xb_?$xeO-VV}b~jmI$zIPh zsXF-o&ky~%5A|>MrT&A-z45JE(!a>)pC)@8ZBB?^hgOp84W@RTDUj~}^K;*oB7Vn? z*GFH%kfTNaMdp5!v2MYZZRR;r_)0_HgyC(W#D~FeIk*2J6Ted;u;3b3IehdlWjC#U zkc)B2g(K zP_l>n+7}x7tzwMbVY7F`t!|xuq0w)abpF9vaUlEhmm2*8r%}Xq_pz^^eWi(i;#l+< zw^p~;cfQonH(>S89G!*1W54}MEB=55kDto79a#P3ODVORT@F0Ah|%Z=l#{-Pbp9fG zEsnO>ukcZEvVY@T{|k}*&I!9YuD}?-d-+nV{;tQw-{b1(gD<=D*H^LMZQ!i1Ngh`c zLUJr`@h`v1(8-LziYLkg{EorP_w5U<`0d^AY-(^&bF!Zi%k2w|e)FEWSD2A7dM>hj zq0!%Avsad2p-aoKk+F(eE6wndLgOxf+v);R_A@7FK_kvU)-(eW9U$VJY{B z^@fb4&gyz!%6jvl^QlKWpOS0+`qw(2dges>H9e6Y+6Bk2qS@W!UCm8Or}^D4<#qPJ z(1|wcHoNsNHT1Qy6r1cW$=lbuOR~)Y&5q7z#Oh{WO1j^2U6BZ*KJ=2psDGKQ%ySW% ze=VlUdb~y-V@6d{4gYz{ye<5rNRDodmaEh}acG zHnZ4FzSMQOFH7$K|C~#g`(MP{w<;kH0{2zXx&C$>1U4qbL3sNt4#F(~%kVl-*fM8x z<%{?l*}dqL$17Fu*HLD-i#m8G?uXC(tn{TU(_1%O6ub#zpMEW(-~PeG|6uF{ z0ot2cTB5JAhj||AD2}WzPV_?pLVuwp-|uiwt`o*y{PmTF-d)4froWcD+7!N)vF=r= zN;Z_P!VFd;;);DCvfr9vrrn;UChF8mgtO1?$so) zF)PZRNpC=yGet&AemryVMU+1h=qP~N3(?Iyg_WMhJcV!MmMBvTJ<4C>^v_=b#Peh`hRu*S(`wmteObrI+;hM?F9CK}7LNtZNd94VV;mWj$iG zlFc!0hm=QTKel?)_=$g1@0EHW@up|)(zUl(u|hQ!n!_UtO{u(Q33o-Awt@$I#@P%kaK5K$1S^@m=fJO$*@u-JbsjXK1Xw8T9mTfkR{ zN={-#YXhOpsDkj~B{X)dXtM#! zj%d%5@Mz&(sSDLwu;~gh6zFE)b>!B#%S>q ze+XhiSn`$`0eO~~N^gWx@Q%ojojOs7P=_2WMFy*n!Zn8MJl5C}h+ zT>JmXj*CsmKkMT5#y=zqsZ7bU94tzH13l2#_x)TcpQ>zFSxn~S(4wJQD0{(|oMpH; zrdy5Jh=le|4wl+mD0xds*rDRACfA3#l5mB5o3)EON*Y#x9745G@$dIQ$@~i?2P9M> zz^wnXT&wW>GtH+p#ITZAT4k;qN>R;(S(*W*n_}$@ZDrPANA%Uub#|={i22CUh}HNG z5e#CEn`og{Ur~$;!B))rsae?E4;s^nT~wPOxB}4w!bN8Z@<0|H5Rj1tSs*U9(ltq? zlRi@2&|uU2*8^tWuQusbffqgFy^TA?NFDiyBCwlmg0`S0(9JLoRA#*p51PEqhE(S5 z=u%7goMBg4w~Bx7OKA}Q&OxRLUZ`Ue2GL$u7y5yn&4&XkSge$FR9mP-VAXl0chF@$ z)l*f65lu;?l&gf~UFs^U)tFN(S=i?NXc;VwCC&j3 zh0Bn}amqZ6l=Jhx1mBfQN9tU#T<87d=6wk`!@P0|B^R)PPikb4S%L+xfd(_LVFgGO zgZlX&OuLjH6U-eG%sMSc9R<8e%vNIF8y~Vs(t_Rz9|7QmRg%#)>pI^Cfz1DY8|X@6 zJ?Ug%_?ovNtvJ7=mf*;+hL2Ak4itfT8-FpDtPKFj)A=~xMxH1>!w1OBw=ww}ZDer3 zzVmHN^KIPNMojyY!hb{u8_HAVMugSig)wfuz$_gy=WyP5Irn#AU6E@ zR=Bq^$H`SPp7zko+g&WCK#M9vSZmhK_j`Ig!Z555>TWK|L2G7O^RcdF^`u zF_`uZ_1q}qxhtc*YPd2Q3Mj`QYVxQe+lcK-==lfUAAi*|SzoT1W7#3CgAd2uV&I{ zht1?Kf&YLd0&VX60T9shEE_>X1xQRctvu04h8Aqd^Glg0q zY6>Bb!wt(n6}GBNb6vf7&C@UexIaW0SeT=%dc77*5VU@V=fk`T>R-CZRVCY`@o=I& zRyL$=WxjBBKWQN>oXeE;YO}l6`#$0EC=}8CzFYg>(|1RLPKd zXXY_wr%3j3E}K_rW8t{XUL;4u?0-}UiHNWZ0@-;GFzaWV8WLyZ+smpfOnvo^s820;MYvWJRc4ujUeAh{`o;eVPBStXzc((yYVEK(P zk`**vh(Fy1`Sip)ebe%7ssQq7P*IY$%!Ho&9_ITpwqrZo9QR167+N{mWsSd^G${u3 z)0A}z7=8+d`*_Baq@?GEg?9iC>xgAI*-CL&4rYK=52!t^w5`uKHTdlgljM0%%Bk<=+)8)UM$w8Am`Vm_s0_GeegK_{ad~ z(30|Nv236RjW8w3Meb9*Ci&?C!^}6aV!(?{)ULOyb1_uR*B3`w0QVJe^Q^U$FRj6S z05BxAfL_#yuoqy0CNaTX=3`y~@M06S>+aqhU^1=G>%YUVa=YXKUSBS~0^pU)K4sQ7 zFl$}x?8ev`dFhGBIsV#W$us$Gh`wE1alQQc#UGCKZZ9=vqg#zQP0J&1m~YS&HMk6B z@()I(jhE)ZmQ(9npFpv@x3R9CSDOTzft?|DwD}m+7*7p5U_IJ5S6R*(hiv*O!6}yx zL@(qWS!K7Gkl&uyp4Jdp?0D)>uZ|~}koaxfQj^ygpI|jdR0)FNgjW#TC>rP?7uzoQEd}LPZ;o2Tqpo*xew~WN9E5gudR6jnSS0 z774{w&$6AL40+G@8<&B#sKU7bMQU9qh^@Hi|CD0A(L%J*-=!2YibVhtpgvKTy|Oj< zv&%25br^42h08ZXMbZ3#;*=XU^hSL1cxCTSTapsy@gX}JpuHvKA>9A=R2`(`~qrd z?`L<%`aE!8g=BlaI#K7BmQI`*V>owlkD?U#-M1=%dJM?(-jGjm053p&z+8(Z>W8LVNM*0N1f_fQci&Iv0 zRu7A&=>(NjYziU28HMl$f$Hng<@u%~=7z3VB}Jb8D}+#gm>K$7@@fF+x>E z;6J?SrIgZT#{$LYNJZI>8F({%u^gza#g}5_nkXWLP?CiP`X-L+$GH5*)H41*MlFMV zApy%Fe}5YpB)^?h_yP|;ancZ>KsVP9HqN`)1hG*>pZ~!w+y$E0aGHRXuB3^yg_6^R z35xc)FSi0_jPvML^HY!3V`mOO!R%kLhWbHA_&?o6&S;kJJCciyZ6qsnJmrv=uO4lF zilku1>JR+#ZQ#W1QOsucE&2J(Z&u;OUtYiZ%Z}AHo;{4$QQNE_ionUe)3upKj|_)x z>*A+TpQ#(I-hJquUwHu7+ooV{Hw4Zv-;}L;=A%2ktDgN*A8i{$lQVU&eKq#e#P%aB znIfaa=A~f`)z#3oy=e73ZJ0N7A*M@HEh3i*J!@c#Nww4Px_3NSfDb)x7aEo%dQe_i zxIQ7RlV7FQhs_AB-tBOqnUIRyL!!R8RBtMWYweoQT59TYgv}2m91HY9e9sea-MoD{ zX3SW3>~GXsN2X~E_h0~s8d`D5l!H-T)(|!{V6q=g7tndx{%wEXj1fk)dwzvMMe)M$ z(Mz7ZGYKk{ese{kcF*s;9L{Eful`73hIwk=U?BW|W^(1#|2Mc{127pzw*1v<`PagV zy3Ul~SdD0{`V4V`??OCt^tA3yY%=Z`F5~<;vi!#lJDzDi$omi<9qHZNgwq2%#CE%|f&dj^y zDK5E1hzX*D?bu7!Rme!E5w)ht6V3rtxh#A%A{2KyLoW9Vh_rk|N8aQq$Vm#M)ke=_ z3(G^VnhKRb;K?!@-b zyKekOQy}Y-Cq%aNM6|IRA#P84QhVZbro#;tqgkryi4w;u4&p;oZ%xEJz#TMR*4nPfHp)KHh+_KJ(U(8%@nmgi7N!F7+FU9y|bUH7} zejl|q-BZSfdkMADP-90Zh^}S~N_ML16aUm~bNF^-aYvh0?#giYqK~epVkLStL}W z5g(N`;jjqB8@=U`<#Wq$Y8O5e!ca11c~GkLz%K}auK^((5@ZhIiGOUCrMe|r!L_|@ z%`*<6-!m=|*z>|Z9a_kP2=*D_1Cb5BXup&UmL_CO{#-IVYld5Wi98h zY9PJGX*G}2r2iODLq+zNg2*^13KdiH5@Q(AST?1cMIZqxEhTv@B!3UN)dl2&B#F1_ ze*vqk#Zo)~ONKLPKeO-er%rz6xN~Z7tZdCN3)X6Iz+RIZHeZ4r$_N+As7JP#D$mVv zj)iv&kH3YjzElG0UFoW>$+-WIyK~!0WLd)X13AY)L_{vDiV_iNL_E=Vh^QbUBI4oc z_xDF+VPWf>J$tRS_Za)8?JBY|BO~LSk&#I3rx2Gj1GE%xI5{BYX;=aRzUzcYkn5-^ zF9B%0Cj*5>gKcZuFS$r5#U>X%T;!@nDn{`V=N^&!p6oajZMJjy{3ad;ihHI3STD!V zW;5QzGgB1`Mo8RYMWe*{;FwaHf?gm^3igNVEM9v=u;&0tVShW|Hd zl2+mo3Ia?HKnM{i{m{Vb<&AcuQZG{Hnq7)CG(j_KljPPNn+^G8oJr9%T2&{RuH!qo z{JQ7}V>i-1piy9|WsXrpmNm;|}1C=iY{FMev$1}pz4yCeBgW;FI@YMU84 zZ1rR2 z+cemC=gT&GfXsd5e9>TCw%&e3S zYY2y436h3nB0oq{r&mwTQJ6*6)7&4;g*m-3O#)h3F4+}H=D+k_10R~jjHxBbo@M6W z$V0^FhmZ)I^I08aYuxwnQD9z0r-PS2i_0)HFlCH=ylG4}(8?$+YVd%KPV*5#I-3a; zt1zL^*l>%#^D$WkgN5b~-c8=)=?BPQ;@Fn3^WqfJ6&ajpfK%LD{+#IrhPpw~tb#E3 z-!=4u2{pt7^BZ~;vTf1HwB%;apajqm+0RY$D{5F-*oV`2j#PvwhS)8{)k#^)<_l{y z&%%U_K33o)KMkCktk3l1UqEw8+}8N3Y2>J|35+3R$*Z-84bXb0gIq+qa7Dz6yFq-< zn1F!8dXq5C{1~wx6R0K+j>=J73^=vOCBi|d!-#;=r}3MiHrX>2_9jkqW;I=?*-9jc zsoZb}pEH17VuD4uK@A^}?ICVJW07rF$zWuyX=J1@iJu&=_5C%E9%fptENmV zB=VWZ&!c{cJpe$>0xVm&3vgc{mMdwdnuM;Q$=p&P8m@&SqN5NCvD1F2Hacr6Fq9lB zDgua&M`W33pv=^nPLm;!YMmFRMYE+vPt;B!F-GfFe9_=t=5!poPZ!?XgU;i8d>%C? zppNJ69e*V^Y95T)??@>$EMT98o-Iz)Fv(=lVtxRZrvokx#?}9|dR3?>hnklcLjztQ zHen$y;q@7UHlUWHnfzpAw`x(Pch=B|rWwFLv?E2McnIV%e28uU^MwwCr^S|x5UZ5(N_NW@tpQdN~@Mu?7uAm&9|L0Ixe?L zJ1<6Ly=rcGqG9>y6F9#?%qi(C?Wh)IWK4iW)awhH?CCW!=7)quO?kJ#C+jsiT;TA?W7~>qeL|4%~kfr>d6|TIw1s$Ft`7Lo&S(tQ2D<> zFUBqnhza6}EDRcGXan(QGyp-J1pP5U9F)M{YO%L?0CxF<>6zJ!o}z6$;BRvk9b9%G zu^T@>y5Q)*syho`wS6s;gTV1yMmx!I9{+zL;pAa#Wwet%Ks}K1sb{6TsGHZ;s0SMb z>WRoLfEH9l0AU6Z@z8uDw7@FaL0tT6P*jMEulAd5n(r4|YFFPfE6ltzW5%m{!Wc+a z{kl37%zuyNH46;$=L>An*+3kQKDRog#Mw1%$v2W`W@ z_N>-PrM6*l*%xnK_|)93mXGG8+KpSVn%Qj}N;|C0OcU7O1&Mz*8%^M7Crk~9>Wvqh zo};W1k13wz8js*1L;a{Ye*e>v5X&b8--I*tsPCgCqiRhI@~}RCFbnk!?$_ZCH7WiZ zeNV7-jHR@$2KY9n$A1ZM98T@1uoNnJfSqFb50{@uoIqCpg%KMO$MoCS#E&L&e{_6A zO-y@6c1 zE1T-x9VatmVDVwTObP2opN2h)=AX~=GkEhEoNJ0C zXe;}%V9s;Raj72bRol+phuW~^Z<8g2p*5_!3vh=rgpe-Dz+{kyeg$m@Mm5?wqGQvG zcVueh!S=w|P?*L$&Fd zH`zP=ixY`y=h>Uw$1`&S_AnGVxBPv7%NC3eeGf34&H{o$2;PaHtELt9_v#b;CrYCtO-34To9{=~ze>*TI5`u&G$VdylZ980H z{v>!XdR=-ay@B@`g+!@-biV&P^RHbpM_gVl{H+zL`oW7@#33Y!L8PH@Y`YBTK}s{3 zf=ixF!PIA}^i;pvHUf4ORu#hy7!;n916=nj~a^ zP-sS-j(ja9GO(cty3uEMis)p{hdDZ7iWHqS zD*8gZvXUJ;z3fK`l>Wt<;OJ>h?s3bNdR}&0ps6%d=_IS*@J! z=E?N5@Ab6aYy$0DqTrfxmXuB=JiyH3B@r_9d&Bv8{nc!m$WGx*_)L+`LXCH04!YeS z*eW>Y$#FokcJ5teYR80_-m5<~n_v7^@!#5~zx+0j-?3{2MDfjyqFk?3CA>9V)1I5(Wj*tw~f!cv+r8qG+G~a-u%lxsM274oX)@LBb_AyWzA=(MZ9aWT$U)*)UZft z!&Fl1!3A6EZK!rFlhJI6BN94_4%A^*mPE!EyO^TGs2%!lZFoBAOQ2rmqf^m`V>HvB zY;I$>_5F;77f>q3&f=C`evH0`UyM@ZrQ8q|SNNiTYbo-{<%qv3bx0vSf5T1){{bu+ zDk?0dGhR3G)PKE=ckujg0CGF7@IU%2$Ge0ijh%Qpn-6RN3u==N<<&LW)#A5h3@swa zhN8CXd5DPWqmWj`f3NNk-p1iPTr@0=j5j>Yhqf|?&@5?vTcPHwTPR$%Car#M)@ z9OWA2-cA5U+xI9FoR3L-&$BW*pA4o&T!6mm&qJgWLyG_Z4sOEdX2f5O zZ4mT~hv)cLAL6SXJ+r~RgKel)&KBW~vGdOg8x9$AVWwnqu>);lWs_u7;eSkJ9xEAF zm}5)JEK@|)Hm#M_H;T*t9kt+)olZRq{s+BG<4vZcC3uR(xb(G%cM;l(w_3Uj5`i>7 z>qfthV{8myk;qT3x9bMiyRYAcXh9ziCr$#_FLYrqUM;txad3~sLLzO)Wki-R6fC|+ zq!!X=URxjwO|fko&Awa8I4%TA^@w1CxYYMHt^t5}fFOfL_+eB#+XdbAsK9m;L~vPg zMbUm?_7L#V41dlPKR>eeeexpVo1~52rmOaY{psFd4)J(S$y)&J3#xLWu6WtMHxxye zUbZti7NI2MWzl`KO&k4H5YxbfC!=e1!YyY4n+f?w*n_H+p`EUueG{fNHd@0zzT-cP z)1CN>laW7L1B`|f_;RK74Wf_|>;Xv29_?B7(NC?5>B;SI;;CX(doLBn2rUa>p0Wgu zX*xnb7)67alSeVFm#$39dYsRWt zI^^a7Q>U5nc?1eE@u#(ISd=tlt3b;zT90Jz^bZ57KL_C{o+6e&pe;!S*b)5&AJA^uM0Cs&GX)N79? zJMo6?WSKt{x!-AfDvcdl0LQsn^0)b{StYX*QdpR{WkIM;qT5+bi~8)Nob`!6@;Xc9ZdqIpG@3rt4ta91 z$$MtoksMEs4Jwc^L^3ht5GZcVoJ}s?`qG@ezjkT&bL1jW_f9ZYPOq7IRnnDmv19?j zJM5&+g9ZguNh%!**1oCjz+-Zi07CgjZWz4A8`qiUL%35*5owp##vBU-GA(yXT+NOYIj*g609`;`;QDZ#Q8kl_+i7b?qF^lKf2Hu=)0?BH7jvZG*_J8 z?}+HRaWmn62H`#b$!jVv0c!NjWUKU?|F!ZX1BIHT%sFUz>q$NW^lFjAqg@^l1rAAt zUW`bQ8JD{}2nIAHpUvV|LOlW95-IT$a|n&=mxcbCIdsRARybQ%_})p@X?D<`AhY79 zq4XF1D+&oeY9qW({t2DAo=_`I2H-GRaIE-GesWZdF&aX?pM_c)K!2GA?J0ts#F_YD zoLdBncixEzNIY2y>vO0*Ioarnyj?$>zTb&sYF7K5{{q@S>j!LoJ3(uQc9N6tH3hP9 z8E=8lm27-MkzH#l)W-ZzkBi zaM3&|cnon(s&>phcOhCqaAQOaLdHp^`Xp;U>)h1bnVeV+MER>=Eh}#Yv<1P6#MqbQ z1}|0NP}gN1QF&-@)CT9S7&Fxr`T$yU-djaUK_kidG;LB*d~bts6zJl4K^8eJj&H=%~O z8ZQ7y3TRW6&jAPdk5pFnP4-UvR1;Z=J2kuj+(W$QVYDPF*26ntxi(q1v8B=gu+xf8 zGc$?Kndb0e`te__B|(I1{k&RB2Hk6EEeqLNZrEB@vbBWZwU$?(*3t~rN?Z}D4`{roMflUU4CKNvy6I1pIeI^ud^{%=N{W%(aV91eRzhy|!Qz4quy`++>N zJrnGoHS%DgK>JYpTIPSShV*e^-&&^ov=+*|pI2Caplm&%qOfO{zFLx@hh=C*N+M5B z@VUpz&letgZrvdrfVx}0R6n7=q>!+mFB;edgCFmsmcMRp@%lH&E@TlKiTP1f*!bDw~b{Zq{K1)s07sdJDcuG`K(@H2$p%0C4+oDhdkdx7wFwtjX;v9mQ+i`&e1z!D_g&4 zWa5c~!AQHP0Ed2y94%Ksj-r|b&~KBuh09Lg?A%u|HX(+~%AsFvazrf(qtM^r-QusO zQ)nGY{vP|Gj_4E-0{NX%Af>)v*hk9LH}(^_> zm`{49)j0p3 zx5}vT1v_}wR;KJNR=%iC$rSu{_D)B9)zQfgo{x1hQj%83ymKWfr=$ z6Uy&LEThlC3?N0)`9a8e@dhVzSPUSWI<3S9hq_=x&(GFwun&eo5{42`C1WEiEM8j? zsSV?Wz|QRpi{m|W#0Zd8M1^Cgwa-Ylbb z$$EvZh5eFAvbu5_0Kp74mY2_eDD9S4bV<7(YQR3rtoCN{c0Yu5T{HRE;!qe zFx?K^xYZMmx5D+iD71SX8M`rYhHdJ$Be5xQAo!;-atYYXV~L41r2T28( zf_FJrZwo}2F8m%&Zams4x1}FlIn|o0^YG)7{fJ$~yM_yJO+Gm^<<_=0Mv_`rlfpoH zZcQ#V+qx@ZwX0uxc)6YwI`_4$8#eQ(we~Kqz2t`9t?QplL zMRaYcYM5#B%ti%=Ro&WSdc4uF;m}HW1{;+?@pn?dDW+ZDD1IwMF+=bf67fi*p;37o-IN5}%wVD9W;FsE-0{MOY zb1C*rp*U#~5l9D%gioy&l(b*nuBL5m+o`8PSTgW0`#V3TG2ji5WNItmh~OI@s|saYD;uxRtjdUOoy zrS+!+5^9>8eXpW~!?WhrlTpcF$C!BRad?9Sd~{xb481dpOSTO(*bS|GBZKbM2$!X< zTr;h$u4jYj9&8y{T>k$SZ#b_H%lxI0*8(Ug5RIN>Dy=XTPgIz2$QfW;cOKcW*|POp z^O#pTe!%AABSN%qHR!EYaOuWnb;jv$@pxSxz&xhx*BLim2x^o8Y^>1?4(D~jZy{d< zz4Q9)P!olBB*A=f+F&L`B=J;4vz+uZQQfRsVS2MqU;Tg$C2|B(@!&4R z%;wmTrI?4Uk~~>PLqqp&eZa;Ih7Q{lnqYq-Hf4C(urtQJCtLL7$_QagexC*$Xt?2Y z?pDM-fAw6jXolm0NtX9G`bq2FgYiK9YDdOI_A!D;FpOd%G5Q$!p^fq9c)V+vd`-jG zf`HFPWLMD+2N@Ho$_<$MsI)QxQMCjk?NjOqK4RbSyY_<6&tmXXk$a*e+N{#ao&SD1 z@xPtB4KwPP9ZV{_loj9=a_dZ(Zft7-_R@+m8|hapHr;2Rw_!U8Rnz3=r}b~s8wrkM z?h+I579DD4%qP4_G}<^-ixAQwKzeDO6ehu~O6s>pV<|)cvA0=V#zfUyxq?=~NF%fb zJJfgk)Joba4b6V-qa~X|d#Bk%0MmA z-RnO#3|*~T&-Gv(AZgu0$%x&80)?d7?_TOLYcpb3Lyd0fEwpN|X=ztrCSJt#RMg8F zVh4&t7QTWWk9=YU_{_HeOHQi||ExPb)b5nZn%GjOo5oY!v8lRDP<)6DMkvQ#pcaGA z#EWG(81(JBJ3)1hBurx+=|=YtD*#5O7l!K!5sH4&lkHKoRR2VCee%CuJkiv&)StrU-8fNL}y#%g@Hz z2C%Y{cxvPUer!}~yS!&YyRoY6@x9L+ivj^b=ay&H&hr-NSN$J?{YqY!EY;}2&>OA< zk2O&Z4HB@N|C}RtF{4<=iw{|_+0!bXmHcLzjO!l_i^zO@edfvMp z$kLrECT8Nxab*~NvK{JjYG&TH49lpDGbS_@j0^mz_=Id_gXnZ7f3re8HX58VwMqzPF- zOfN0^5FY1tu%`Qn)}+G^d&0r)^RqCoL>EFJrIfpJfw5mS7rW~d@i2k9PbliG%z3+OMcGSoubq72Xq9GQK5>*kt&6*XQwKZJfuDuD+|qxJ9L6q$j( z_WBB}HP_*?CLAcww_z*V#c&wj+q}m3csZaXc-4EbHoorO8`1w-tIq>?D>mbbF8s22 zBZ)*n1N(Q|GHa?a8IUD4CD zE@K~nqRBX?EyR|50Rf9}0FSC>7fEzMF05U|O!QEi{Hq@2Gm zqz?s0n)gtPHdp|B)Hc^4FwQR>x%se3znChEBm>9Ux4n=-)0n8(J5=oZSy@oZ?XM89 zQXCAGWyyW57h@}Oia}fn>y2@CD6hEmqK4_+i}#N zNknLGgbB0WS^lr;xHD3(fJkQkc3v1e1+3l1RWqK=U|8R3f94%fg!I{n67?|rIDUZF z2GpD~FdpLLiVZ!Bp+3V1^*#g5m1rj#rVaw zS{8xuWfuRTvAPAVSu#npoZe5ZdK=7)8FsX#h<{2QUOH#H5|2(K_Y&_H9A7fbG%Hu^ zH?j7)!0v0z67{J_XwA3clUr6U(PteGMU>j83*x}At9I!*kA;U<$Ka^HGV@q z{_|wmAj?li;20ye<=KlZfiZ&}VmSAm18t1S84?ZOc(Bt%=T82wzGZ@x6v3x+f#4Mm=o0 zE5$b+YClyoSn213%{u30YP&($o0!%KOll!s^R=X;uJP8~R@4smF5&PO zqK zf3I~(k{A93{4e^Ouln01z$%3@M?2BsEWW2hVwWZFajTw|t;bSbXKA+T?2vrjr7lCT zHObuTH}i@!L{kQljxpY<-tlfds`&Df)5Y@Ev6;T^xVnNh1PpMgKQK^@A06QFzOUeZ zTD5-1`vQ2h|N8*TrIJA3AxFWy#A)sBQn;9T*AM$C<{~UWP*;X$-q=}%HIa;oNARj{ z4at22+&2HzU#*(QdGzibzU^NW4Ayt_LH5HF)HUv26T-$ z#?+L}eiy%bXw@87j^p6gPLmsZ`c(@DHYk3WV=iO|Z&i~Tqqsom503mIm4;lvdF=^o z1B0m{iSkShWpeV}%3xHIO%LvzO5Up7XL0*7&@wd5bE$JHoH{i_$>`7P`t+WC7E4QT z;J6gl>vZo1YUo7MhSAr3<7#3^nl>aM?i;xAEZW!j8}a2A_$&T`zuVu(UofZ!x&}af z$10HX8~BrboHODZsEVby3~bY%^HtLZ{`nGfUKF;lMNGqZ56;fKYYFR z=!Ho#@zp%fuK~u3%!TB?wbF+4?!+#UaLHY=0%*2{;ycR?c3YT9`$MMc2u$tK$-VbZ zpb^qCVp_yYtBw+Q^j}c{CTB(fVwf8xZLh>(+42hV+ue4$qYFm>%y{nwER&x7erWXZ zc368i`glJS*}WaQ?eK;9_h6bMXZ}s%O|!Vy#ShDY-Q#=ZTD|9keRF`P2YwoJ!?{bx zys?Ro7FJ?ag&mTkk@B|uG%buHDy>_bCgM&amcNMB!fZPa1svTREs(*5LEf{f*Z2c! zIJK-UJ_qm5#18S+dNk$-jk z0XZ_%S!W(|M)zc|>fp9RvWU%f3p+y<3`pn`YqG^>Vz0M+^(nJkD1=&nqC+EIQ~|Wa0*MB-;5_EdbhM&*#LxcIsY*M-c8#nUNa0Wf z=&Q;AY?w`I1dreZKWs-@4TG9j-Fvbv+-{!D*grHa3uY2__bIPft+BP&$379*o1BEJ zTKLHV0hM@%uq+UI&XbO0LTnjzAe{M05nClK7?%zV<i{=DY1eVzqgQJ0!9N%7WhA(a;32LQ3%h z=IoMDs%efW=s;OT#{O=aISGL!6sBoM8(mf8Sb^Ds(hhNEMKTzS4EHVPr(ag@)fUO? z?vPQmjtXrJy`@SFEp6V<$+kShKbUv8f;KxQ zEynsc^QN#gvPg%hu^<#z$ddr`#z*_0;s4US=XMIMViVsq@B3BY4iJEUCOi7oTks8znz=eho8aB zNMaSeemA|z;Rn;QU#-dQ67RCvz4rejdGpAOdePj#f27W+EzG|KpPi#`7KTDuLzJg2 z%VG`kN$o#`oLUd8$h$%QR=Z1{b@(6C1_52*%<~sC6^yG7nnGZs^@RCwg7Oy`5%Ls4 zk_c=E)L4&fS{n5W$NgeVFD*;_l3d$Wi3gnQ@l8&)GU z;})`v2n?N-(dv+}6@sAy_imBtbo6TX_MN}&TaF!$04^61Bt>BfI=QvSxngsIx?I^d z08Y!#*N^Sh zr3yV-4=Yj#J?Jc+_n>g|H$7k^)vGC)8N=w7y&9a1I-x31Tunlp(^tQW>zC7|?$(9e ziBt3CKb8WH?*Riq_4UtXKG>J@4hxCL`UYQ2jCiE%5=_^_YcpsLd`BL4!Z#+Nx5tmn6uQ;(g5P&g0Tm?_qAjg+N$F< z8-{k>pZT9*Xk7bO7?ME-2a9$y5?I5~`?naHdNIAAbZ1}SsQS-1+Js{9P!`-OhzGd; zoD~0rV<*XXmceo_Z*tz+LARC}&YUK;72Li;LL_N1#8&_&A}p1|hoa%4qno(oPFF@U zIi7+e8q2*09H-N$VsqKq--=6rGM7dC-CVwsH0xe~ga+ac=NNWsgmY+rC?@0y&Fha$ zsUMAr%VRflxmx*8ru6>plztJ12+#E?y{%1YCHekTZl$mFC#KYn=1i#@JvI`LP0t%r z6puQ(0++rf9?V1f!q=}J?5^KhVz5V%RMQR((H&Wk&NZkMYzwh$$AWTdQN~Q!!fBak zBY&u9;nDVky=v`Xn9FqdEQN?YNDmn~n${H%5<-ltFc(9~@1b|3dLezZy0RgvA+=gp zZQ8x)#`o=87AKa#=3tk-%@05X~?L?=a`=mnLNu5}sR z;IF58Qh16RPv)5*6Zk~5*d@r(h>j0D!rRfl#qojAltiRjq)}UMj(F44f4K(afPG~o zGna$6q8}n%jykrY!vj@i=tt}zPzUm$aIJG04L$51XiIWH%?KX$4lE{`$}y}RyeN2? zXn>jxnYK9N$P~N=FH|5WlFb@+w>aVB?q4t5U}G!7@BQpqP_W_ZVXvMiC;!CUz`WTD zC47bz%T-ueFn5rO7FEi_&dA~kE^5zi=Zr`lHiUL8O|$>Z6EU0DWLp8`WKV}yfz?g} z^vLLht-~d-+(vBalZ!;PUsi3hyAgCdrHr;%6X$!VuWv(gN^Tk2L*l2laZ5Sg@QS%o zbIS;xVpL*+){~_HzWJfNzQVUGYRHpii&#Ck@9o&zxz#TpU@_Phd9LKVdGcN~(f231 ziy`23F8TVPsazIKY&kb5tZ&HLFxI|%u?S^fW!o6|e9J+_WMGixUdb7;Wm#aly)D?Z z7?~nh^B%N+FY|8$sRc6n!VSJstzx3zkm_pry|!sP{l4S&P8_?%*uOp`TC9R*Z~o6i~Cvu#nhUiN8cOBF=!r(2@2Lum;|e zR7LbqfX*is@GMaSGQ=;;Uw<@ZG(?yspH~yQft3$^%iwz`Uk1S0!I;+Pt@YNw&b-42 zlVlret4D{nN3)0z^=U$~`5?L=O27)(N^;X4aF)|CnGIS10!LtFY)0G2_c3bp0}4G+ ze8Gy!zphJmp;LiyR z7W`+yD6RXoC)Fkk4FNS%R z?AWTTIr#os5;x86*pGBk2aSyCa{_Yp8gvY`T-;J_5}P_Pl=En~Ad#e&JezA25giP;~_3pvf2>+BGMUWG}$^g=tLF~m$U)5k!U#P{HEAc)G8mE17(da zKewUZR@9n`AP*bQ98mz>19h)ha?DLIhJFaA=Z8$1kHj6I7ON5v>B4I{XL{3l!+1be zmQh)Mi$I+Qjmsuf8i!%_@Bni#LdHX*xA$16XYdavRn*ING4DJ+qKzB|w?*M)ma2%Q zfPB+xELdh5e6Jr7MQ8w7X{E$34ix0rCIB!=K%d4kC?+nN+VA$xok(qp!R*;CYHs{R z66!K!f|&S?CL)T;tCex>lfKCLKlwe?Qz8+RdbU%#>v{orBy9}_gaYUNm^+m5!$pcu z;qRcp5MU*!)R_7gp8)y_@DBK&)<%ZBLxr-EQhcVbT`T;|X@zVp7nM(I`62pqXqzQ( zNGw*sg`f_(1!0OIS`~-Yq6+GkkIx-irT4H#*#wDmX>XP_SB^8%ag+Y~(cu>oHrIKN zOG)UQU62(3IboVj!ENYIGh#oJk$G-Pi`mV>v3`UVnz{D>w>NXhY zY#dvcqxcFa$&=PK5R~bF)&Tb8M%j@`nt9KD%L2|Z)GFz#ga3eODgAcGVllaqo0tW> zW^x>(KDpR?y4J-I+!;piVMGQ-sz&4w_65H5G@a$gAiM!^u@8k2@ywr$RGd|h( zn||zIL8GLT57@?vzPCWPZd&#@c@q_>pF|gSwIf1crjS0Z(KgCJDwsEba{&q(MT9J? z-`V1?R`PXEm-jI0sw3WlI-L+i6hJ$leiqJj-A;NPh6&ZImv*qGDb>aa4ZC5;GFOff zSgdG^Dkh3^myGyw0Uu9eaqsu5Tl5~F8xU4UKhe%TD4qL zArmI*Bdt0CFWreRZ(H+crguDo8FueloT*xHaCn_|+_hSAVI5e4UPTjm+WAPE$H%LnVqo~B81kF-<;50$2Fx%7&g5DGYTwtJ|8wqn8J`=mTnT|!6T}@v0x3{4 zcz=Wdp;rrav@3MOxGvRhZ11PJjYy$ED4I#ixCp1EJTu-}dY|+0+}~Kz;`!5$uyam% zFF1-N0f9}wC!LE>6>qc9kMhbOMPCgs%b;k2NJA!3L3S|*d@cU1~0y^DXVp*$Nb>^m{+;Q`dC4=BO{G(^ZY|XuF3A4%vz>XKh7!& z`4_tBf3<*^y1$4l^l6WRP^{l;JaYcbbfJDSVZu!z9IN=B2&{)amI&QuJ{)pkzyai( zLxIeJt!5;ofo;5F{++>Ayla+R9&H#86#@^vxLjLjEWg$<&soLqISX3(-e~xng}K=> z=x~n+idNzx0t#S1nFCoP-He7&rqEr!k(AO7{g_f(;3MRJ{2N9Kv0lP^%S`e7*EP#C z_J}+ZOhbIt4_?Yv$OPYiZ-ol~U#<{o_y4;Udf}b})wL#HFm|WcOg;=N*rnw6P@w;z zDTR-6EQI#vrE;Jo*`{Wl=VBvO-Jd{%FVql(_dTyy`2EGz13u{b3$&qciqoHB4A0i{?e_6I|)8;i~M*h8VQ6= zx|FFAk1;=x5y(1qzCQbp5>6xx*)E_txW{%(#}B)>11U}>&idB|#?Mwv)-k6q%P~iF z7(X}`Hj2`8!|B^@mIPoR^14y=i}Pgo5m+~Hwp9M-#xJ$+zHz<|khiD>4h5Z)F32D1 zE`v<|({_h~w4_Z1b(1|qaedCODccxE;b*_GuaSaAhCrxznXNqky?VniZ$9QvSfQ^ysOxt$77a6qqYP}~3M zE{$XfsY7hZ2)fT`Gq{zzh!W^m-t$8|alCrvyPk~hp6`0=)WUP^%ACxBX@!rKVvVac z)uLT3?;D1580OY%fj*$$wY*dIi1Re!Gbyrgno-biUr{>_%WqISh@@(P9Tp?!K$r-d z_7DdbPcjTDIx4b9XISR#!4?mUt*ngX2c??z|1Aq>JhR{=1Qg;M-Fy?Bk8SC6=>jvJ zB)pZhnuNEyXhC}%q!m~ncdqH5saT(NqA`g;G5=@w^Qn+CNpyY13T^IP4%VU_YiKT5BEK!RzD)#_uyAO*j+d}5UN%A zbO!^)0V`h3`wy>AfOl;Y7`?dLH}R&2IGaWOimC9QCHqB4;~J4I8vSx3L)LZ^P0sH_ z^T)WuT8jeM&}sf=2CkbgycpMcTwvSJE6)caDRUh;GB*%Z-=-%KRI>yZ_3sq{7OPxV zEl=5m^5ItBdI{M_evD5rCDlHwqO(714b0gxC`xevAbdJpLZwJK~BS(fJ3&ffy~SElkM_f!ALV z=LW%DypEl9^l_e+(`W{a*RQxuvtf%1p;VR0$dmYeQ zqZq&05jJO8?yG>L0)Qx&-vF>`yYGG!>fHeRNSR)d+3#U%SXEsfM2`b==bJSaeGdHJ zwtepJX`ZWBP5FuD&BlWAWpO{mHuBbRlDz7W0p>JntuXg$EBmX4BL7!#-=FwOE9=R z$di_8?J7!|c1?677}V*>tbniG6hJqNQ2E0>((0$BaO>W);dE+6bV(g#aGax(Y4U7|5??P5`2vdS@=5O& zGf2yGE9ViT_{Qzc(^pJCxV39NV+yV=o(*IrJ#xdhtj+?vhkR7K7q*L~mWGVImE zv+v5`j5~F)@(f2Ep*1RhHgRAK;I)003AQ>7zk&Z3Dj&c;Y>NR6W&YSC9pc>^inrpU ziGdTfxg{NrWs1%?Z(yF!ZsPYqp=G~QCf+t~Y`qy@4b0rZRtFfpLLv->mL&n_>^YSgl`6Xj}?~n!_Y%h=J@TeY$8xz&1*Z}Cl@pSo|wIc4ARLe zY0P4YZAxK^cAk>UxwoXQ0%Ygq8eI9`bPic+9ZrslAd{8$=fl|*5c zodk*pGOnVwB|tjTv&yXrG7g3Fl%tVFy!Bg}?4RhEd^>&4vc z)?IRcws6ICgKzuXF={YA?48IFvUR|@He$c!KfDMsu&1PbAOtkzRRM8Nd4Q}`>_kNQ^sp&LCl>L!07g9Wux*2Wv5wj@an@s8ckPH6!6~h9=>LPcHa`@Atm`p0jKe>6eV=9n(biD9Lg++WiKb@jOqVsRRZEB-!u;5z58djJ=uUwYt(`DZLFDIQ@f za_g1sZW@P*&uIk5LRJLCC;HE5z(%MhI|N`+E34XviK?8dPZAA*Y+n*t+cdlix2asO zU8d5uD>gn4_P%SK=tdPy!>{20^9=c#hO0{awu_2bL>IEXihDh|<3 zCSWE_=c^(tpmye-;B7$qkXx$#-VR`CP zXbf{4qgGbA_5r(AGs-;TCDt~8dNyQJt>^?+LV`qRUN^RW?H})@Uwv#?J5^lcA?EBG zQV1^e&7x4hh*xzWiD8=;x!C@75o?Zt~I7 zs@LmW3(`IKrk2UZ`&hn+@D-r+Fx?$5iTqGbjo5xKx)OAQ7AK`xJim0)N%K1(V6_1g zO}Hop>&>_0w#+dNCp&}u&qf`ZPlcRo=u&FHv82KG>|XM+BKGLAzCCe@*M)(m}>k2GuaWd z+5=-_quSUTaa;2B@5T;c%6~idFY{(>4uGB@zbDjK!edC9yG9FVHn+d0gAKuhj61f5?M?%FTH~F27 zgBmP)pW*7L?>Oky_U1iyTv%0{qJLeaifC1>Zmx*pp!Eu=zp-o4j-HRWHira3ghMX} zu~GK3O=xNpy05h|y^x#G;{X1HekVTOjvkJdwVg1n9Nado7p8@TuxUNj8dFn^-!m)* z;GZz;FSG^IOlxn3Qk9YFMsKy&>>tL)$NH18f1yvt=JaJx8nbL;Z`V|t4{;Pk;@`9E zJhkkKV!{Eq6?xqm&j!^N+_+3IqiM+MP>sOyZ(|r8b8SXUVaV6>XX33#P%Y z$G^d7G_0EAz!i+)o!lxktt^{Yiwi33sl8O|*b`WFkpKxbPJ=jR#O#^t=>96 z=J5pghj3=pc&-{8Iswa;sUr&Gh#)F8f6k-(`h9#$6FK;P#J`5s0uhJ$pGO`7CmjUF zd$+90VYIMMpX!hC*gxgOj?yV8otOLc#BBJx*uO2s4=TX$ZlAu@H{zm~4E}L%_m~T7)y#a8IMXq^edEGVu~*+{tKXPy)Rj+PF;I8vqoni)paz-q9jKHj z@UVda%K!ko?p&CL{|#VoF6D=hDd;ocP77j&(0d_%fecy24f|Ia$6_2WwT7RhpHxi` z0o!w-U|C%3QINW!;#d6MWT!@Pq^)lVd19y3hC57@*1uGR;R19fm=xvM@JE>2LJ9pmn6Qyg0)f?0!JM@ zCCotXM6$~+8B4NPAdN4ly1;32b_Y7pRl8Y=B{!7PnxN@dNr{v~ zWs6N@5JTX}#% z5&5v{r)=kCtYgb6NuInuz+hpCL+K*jw!3&O?}Ta#LlLraDnUDh%;6XUft-Uw`{?$K zq)co_Nb#hs=3kp6Iv(FutbPA(4;dHr%lU~I0Omq4o&8O(TaV*I{xbchi@~V{*`PW7t=QkiX_?_XfZ`8D^Fgih48p4iy$fvd5^G}3E#$D zTn1i*?=s%j{!MMyxJmd$UfbEzA$A$Em-qnPB73bS)KjBdwnH9^hGf$dRj)+(KfM}E zmJkigjpM0tm}?r&Sp%5LGT~A`5M1X86^jz`-)H{nRLqrBl2G_07t;V1P*;vAnWGuz zeo<*;f+0u)dTXj9ke9n|I=#B_P3iEBr+!ei&VoPdzqv-^H@=6<}_{CE%+;VyK2PK@49?2tPNZ~V(P}TWH}HI8!r{faCj(+X0(?~&*EYosj@>E$B5LZ?9yIdoYxrt` zDk9n(o@3G(X?ck1{ReQ=DerLr?-ZL_rp;#S(WccVeF&&R7zZOmUuQG?Y@w2$DP}aC zq)-x@b`;E8Nhk<@70~;Y#2wo@0*A+Qv<=a;Ngq-iVszM6rZ6M7A1s~;kQ1vC#J_GGsD(a%mzUdqa@EmsMHYuzCa4c;v}pb_`P5l8dFio2Iq6`0>|Ejrv|O zZW9x>D}U2h-A|ERkDNQQ-lgV8aap0}D=wT)Me#A^;BXXMLfd^ybylH)_FvmzD@(@s zZt+SwT~Whj-%ZHuh<6DAwWDQA)bQL&=8kyXrj-m$CuLMnjJNxMT2r_+In?S!?ZT6m ztEQcmgtSwtC4C$z1<}WEMx1hx1AXb#mnI zzavTR^pvvV;xp@WUdzQj$Fd*XYVu6)CZ2CAx}y!|o0K~HI>u|~$bSa(-^tY4a5ieg zdmd?g-_VMzU_ngjouN`Q}Ya7xxUfb-}U@lz} zde+FqS77vk^4ZyzOeD|#vw7G9UMTc zcV3ec>EQ>^>i(~9j7|SFlEwKO8%5p`hlZ$?pHb^)YW6I^;ym9#AL0Yocg76 zbKqCoZ0tW3V)Nn9Vp!w3;bnT6%pn#g`)dL$psASfEF6~1=%?lqX7Y%b1HX~#MDz{P zO_Z2qxMYQYuw})<{d1WjQpo42rrL-ad!HsrUCkgvzT?tQaVZwB5%S?|YdI;cZ<(1O zHCpRuu_%!&@u^mHUP-cdFy~R(Vw(l{s~wF}_Z!T0`w>ua?^z*@>VpZ0pLy0kD!J_O zf**m6krAg!_2No}2kO!6(1gX=u~4Q=+=K#yZXQ1%VsZAS@srt&#$#tQEHlVb_Goha z$b+k3J&ws<8QRtxDs2*%=-+~A^m(GepeZgHM#uD35RBDs+ZJ(&T0mNQ9~MReDy;ln z*5W)m&RapvUJDm!$xl)5kK0$?!&s7lGkKvz!U$;`AN zJu;Xm)c7`cqYe6-{YMaQhb5EJm7wd44uzCyJPLPfU_Kn{f*Z{r!&hvYd{;8Gnmk!T zAGL+zs5yy!*I|X&6@nC@kZ6zuVRrQS(_@wv=9tB#6$$3r)NU1CDIc_&T>(i9fgm1z zXpMfse!g=yTj_ip?;ga^?S6dsFB#R`4#%hV|N3QtN_+@%yn`3hXBKfQQ%{ zApd-II{yeRsS23rDD*62<0YPlqJ5BbDIu0&gSrv)8NkX4z!5=#%QyN*#^`>OUi6&0 z;+)0{3^O`$yeiFnCCNS@!M(}>@r%Xt85NSVvQskU{2tt7QHMBkvf}9vdRfA)=sF6I zl&u_}_Tswi#ofeS7`niX+X%(`y#u=5ud(R?Ro7(*?dt?!{fz(Z)vQ1Hvk1KrVh z`wfdQD&*YS;??(9e5OmrP$rr{(Fh3f5}^XV`4(L!_eL06;Hpv^DvY``D4)3@`Qm+A#C3SVlA!!OEUm`wBk4@NHRD+(50h=YyNW%{ z_S|mRKi2H{11x7#BCIrHMhv*JzulBJ5s`3~M64WSKmTp$EFx}A?mm$sp$P$Oq)lmA z6w|mia&@<1twz z9S>R}eoxNKGx0;x)2tC`&@;Q+WaaH`n$hRZUVTP8P5qv~bisa+zi8=&pfsOlLV1Xl zyEhM?=yDDFMAvQ5M=QY6t*~9D2tT$Czcc#!@8^>+MAlw8i{MLm$Djh>O0vzXUUV#{ zs?%760o9%ku~yeR@Y6Wm^==5myeB%E!6ZB#m=X<$Crgn^y0@XvS6gjDw<4qm)_{qe z&irp%&wSqDGmaD)nRTR3fm4B30vF=lU3)_|v=&Bq$Z^{)D~APIv2rS?-Rxrs&9+W=`(jvGMks8>(Wu{<1xx@md{~*fZxFPQ~({ZlI;4y!O#`kV`T(m|O4Go%&h4 z!8fZ&K!tCZS~%?Kp%0cXB``-NC3ndh;Sv_@>(;M{;;hI{9;7C(f1(8|0QH0{d75I0 zi}c;D2wnH9?tQnI89#OdkeV1#zA?KJW~iyZs)3g4FKj}5+utb?<~A9zc>@?asS0KL z^px?#TD5LUj=x*}>UqRpR%#iK!wWXt_)I5jcL;ppM_fJ;)ijERlzyswYzs49yKKo% zZ|vgffo9$4%r+3tRg$P5UGRV$-FuBI%(+7bqYTjGibI-=;rqwFr`HCjECQlL_;Po( zMenGY>t{N4^=uQGI-vT333PAR*5^wSI$BtO>>2k7ieBqHRyJMrVYx$I_aJP8fBL?v z&~7QlS2)Ei{Q3F&k3~sBjj&JOSNwZ8zRUL)pTD;|NU>~e2BCo1rygtuWIt*KJL@wb zEifS(FW4v`EjtcO?eI)|NLCVT+E@m(Xo10pwmDe5z4djDhC&)YX0J1HP-C{ZI><=kIYBl5g||T2!wHjquVzp44=$?n7Xf`934pW`1DZ+pDqOnENGYT~(G-a%`f=t`uW z9&aepyQebhx(f4YU)5K~hy`Xy_?>@MjI{-g_x12(uf8|LdNYeF0X>a_P%S18_ENGa z3Ju(^d%?`3>lRq8fm_0cvsz$l-|Ai3hrcuiT(%*KR3Sxb*u2Pz!aTz}=_11m$%ajR zmRL1tiuUlRDToda$94y_>DeQ+5$#8ZFZkx0CNqY6r_f2%bt`kufA0XQc+t}&( zO+aS+N0!o!fgxINy?QXBeZ!JsMBPxJ0ZG_>vqRYDg-bXb16J6j0Xpl1LqIIbjz7ro zY!u=R%h%uBWHiM`Ko{Dj2fQ*NNeY2L!lEjHG8X z=DI@TBM&{9XKbu68*nj?Lv8{HW(_2;WPpS;M#Ce+68wAp_VPZ;#VQZzK3?W_W|dV3 zZ7geIZV?yLi3Zy|K;-XnNj3)ex}9SXChuq(&}*sIw@J7%)l+1379|JI2auZI+Fg2} zm4JsUoL^Eqh-OH4!H#mi*{$Ytzy8rT9JSg&J2xcGzyT0zA6V$lu7?)@Ky zpwarP0J^ zOS(T)M7;#5vE)}Wb5|?QUbQW_wxl>!W@??T&Xnq)Xb)rz7f<3_GX7UUjCdew=rUkf zGAK;?B>WfBn8m&Y{^5aY47vx{oSs-F8)gHv90;I={jXm@AZbi2zhE+(2w6{ zVbw}b2}MDQo>DTg<$tf0TOw_xuOx??PNb)=h&a)#Y9ol%wYunIB2i`$bS+}`7*lbD zzzH@49KP@MRI>aVrj1^s=!{X`m1aG7OhRWA3Hv3QT4!>qr7 zmFl4bpO{h?TKA|rFuVpiPdcw(%OIDqu;?D?P)?LHHgnH8yKooJ9Ro`*8>8(hdJE@O zJZ0LyWT%ssGSHRE^&ESMvzkcJ@C71{f3y3)!(3g)=?DaKC7s{W*da7pF5{AAgtG_9 z(=_&5-7p<1a;rJOx_*+f81vUt}x&-dc1IP0@;}qi^-?jGM zg8B^aa@x-{rPbE)&`f_pH+&zgmA_Y%_W=M?l$*8_ZS-w-Ue=rs!|GmzEp9HMf{|~N zdyF%Ju`qH!Y92~EuUOyJ)HT}!f9=*t*OU-NdMO&49tk)ZTySyn8fF|Wakew`GInto z-Bc=K8Gy>+2>Hjtchr!-t?BlMg_S(;z{^wh%u!HVIm>uHSG1Jg8j7cS3w`XrEeVwB zw=H+y+PWK?xhq`99~A?s`{gvKF;~+gv+x@ifGxqPx-%`(A)UOCay#uR?ttkm_v2` zFD-ig!$JW=y}$Of)(O2Zx#m58L4#7nYCS_DM2_6<%xt~`qy?oNe?0O8S)Qwh3-4hb zdKd+S+~E;JM+*!3G<8^@(J)>^45`CKu6-lgFUS9fy?5JcTWQ+14~UEb2Fzkpl7-_K zLL5Q}*&{$OVAfz3NB>`URZEs+%LZmL=kxyK+re0Fbyru{x~r=je$q1A+5PYg+BTcl zKD;=s_lwa!etuk6kuT7~m(CIWw#7RepLcnh>gh&Dh7CLITTu)155YzCGyZpjx^Hl0 zVK>MqI`t=(=hHdki&pvZ!9%R%lEa7QY_O^l55`tIWrRgL4d@wJ@3=UA;p~Z^?H>EX8Y>Ec1=u z_WE{t{2^~<+mub8NiS>BEW8(vX4pUmUsfDzfhg*zyM1N+@zpEn*tJj~qhZIT)k>f+ z=`aNG+RK2wD?SN4ellM11FyH?C(mbk=9?MbZkdR;(e?DTy}o9+`vQ50OmcF-AWwc? zBINay^`Pw*FEihxHC_QrCLn$|`R!?$0r5w;w;Ek9iQ$`?szAVdhaA3KKC20}t;jCde} za}b}hm8M=b43lB6Oz!R=UI?T4^91|Ym2Q^v8C)EBoO6U=`Kmk0L}O?4!MyNhZGdwa zHf58O^v4Z?7|0^vYkgGKF2dUv!3$Fx zyTJe+HD0qLO1oj1!mj%wAyj5_8ZY@j@C0+-@xy-j=r?vo=`PlVjkMcZA%G+9vr~SY zjP#o<*&AT+rKIm3z3rFmDfL(6#ReXX!OK~7Ag|B2wWzzHpzg5M0}c90S&ckfKXFAo z=L<&~rII)XzHgK-Z_8e49W5~=j8nGw&nU|Z$of^eOq~%q=pku zg=Xu3`!JE#T4D0Aect@N1CerL9 zd{gj>-tSER4eg?~&h60J_dLwRdsL_9#lsWh1=5gh$zGhVGJ@Ap1L%-;odLG&sBnPK(QAnn-v{ee%&>UH@8huAy?f1t2- zgl@_Eu;^XKh}B!Tq_dUt2fi*MF z-E;H^;igt@oBNA+8G7U*&L1I`^oYVLdfZnJ1X86+^a{3 z25YtT;W=&fldlW*cwZ#aQAIC(@`qjYXTI?UU`Y)$iQXWNf@E3oSkCbh#4L%ihGIY# z9b99yNyMCU#KLWGSs}@QBrq&jPAT+h!1!juUnZw~({tv@kV6=l0eAb%QDAs#!ci09 zC7(gIo*zwrFww}yHAW_Cz|!t?@|qqbA5M~MfTo9LeB;c9VFF3xV)Aeci7yP?1EN5E z;PV)RS9sR_^wWgU4I z6ZJsY{C{el1-LFmc+~eBx>?1T&-h`NRl0@U>sFFJ@jLVj<_z97ho zBycDka1Tg<2B0wNsu$NBA+XUzmsb{;(9@)aBBZ6r3Cn&9y4fcn$0o~JvCC{D< zuP31l1XyRw@x84bg*1oG6cv1gt1zH{%3dl5Udccw#vzz_&G^x9LVTB%@1q!)i|hKA zz(Wg;G|zSI4M7Mb{QVhNAvMlggFQN;Br)x@Ou?XAD!(2aKW^g@1H1TBU!=xz4GaIU z&epk-uS=cdFbv`c0|FaEONa+|8?W$>R?il8)qYOCl$(86-be@OZ>6XJs^^uccq~J; zk)==qf>EUY;Px0Y6$$WT2tsK>;6#LV6MI}Tz55i%nL1o_*Tu9`E4Yk~hAsJLd=Gs* zd5wS1*DwsPyfFOsZFnrP$e4NzAiMYBvF(8( z94z^6$YnD6aajJ5b1l5-sFO2G3qh7}BnIHO?TKGLq^COG0)F;via+%xG3orBUo=T0 zx9+g{cy7sE8sYBKFFm;DHY3RDGMT&R=uT!DqTbHP2r3+qyrAe-Y`HL^yd8c_m-^eCqp3TUwy~ z?Ljw~TG%l8daH`at)9SgACjvW)b_zd1Ne}v@;!|mQvIDFwLEI{c%=81TF;1l!1$zY zxMB&a?3{%$nYZLS@{I<`7l=hKmYzZ~Mhz;#^eO9?R0SCqW znB$zYg6eG}!9%~3P<6^gC110~a7 z%d23Ds#6%BoPmm+^B(DXq3%Xf4QGQ6a|pqMVCpL%?q#ty#G5H;OPthNbq`Tg#-{KGvuT z{H2?7%w&%m-9p4U$#t4`M(IjVL;UQkE{q0}{NM!oS+Y*V8?9w3@;gU;q04lG;sM4< z$hXbY4H}X`hHUE2!GKJzrzOiapX><*bpox9xYyDtmY_Y}fLF$TxBQG%5(JnNml67h z*=%=wlcSYpFDZ=?oA5yUZGv75gowac&16v~|ISf2WQ+;i-R?T77eGJBa7;GlyjC(T zS+>p(+N&RM-!!D(X2 zyxBz&X#Hy&lO+S;WQ`FQ!mqvg{L56yQjXh_5G+r7-r|48p6SzsNjF>Bq$P7q6>yMU z@ICrPhPCi%Vye@E;JWr1t#zduJHJ%h9WrN+M#)*-vsGsfn{I}2JU|w=w~ogKp6%e; zDjD#4s%;_N@t2Y18lX)(G)vX`6wg zT)lDhCVUS7Kx^!Bb5QIUfu{FPlg&#k5|MRP8u)ig2DL@SmsaicBH3@i?m&n|04}y( z+(qA+#0*s{!a@PuTV{Z2$WC~>_hE&FWhYI~%xmj?z(4FIjZbW85`o!bVq zZEm5Gk?|21KzpqZMZf)|*e(*_6n~&mwi=o0q2mA_PkNM~ukafeifFC^x z{dr)F!jgc1b9l(CMOHgQi-EZFxL`rBwmr9b4%W_lu#!DYFj z6T2$_^G1ZXZ0SoKI9(#I>B_=y6QG5wr_d%4tOJydcSrBXir%O*Rcg|ZDg^-X?lmg| zN=t;!IA?4QjgP=_W4(8!{jlhm8~2P@4Mn0JiyL;%i8Gs?q0MPL;G5ooI5azKSA_i; zVUbR2TXQ-f4M2|BH$Gz=FKUElmn_==!PPw5@hy|eJtJzB0Pt=`qHWS=Au3W+j zhp?2bk$j!w3nv|9g$2Ls^4X29k|GTv^IlOitVg>`Z!VrD5JCmB_w< z?=Kpw=LVk=RmB42MTpd|2zwDl#8SFA5G{OH(>-fS_YnGed>x<*Z#?n_His6F6X>FP zrDLi~Wwf$z=Hj+L-4j#n@x`o7!j3t@7Trj5L1`Ume*?Dd^`T95bi;@M_h^Cxf8D4A z9Q&^6Z7W0$?F3flYn@`{Pv~RL!XIdej2S74`Q#G{0JyVq!O#<4N1sEd%*bAcQqDL` zt#rsp#S#SrH030mp4znvp}=ZQ z=G?+DgIEMlLM~7Eq*Go-b`5RC>|~hAH6`ouxdnMt{tq*b{ZffZ>`2gi9b-1}7F+|> z6IBL^E>pCQthCV%`hjoZ#u2LJU@B}}_#SMhZ>I>0cZzhQP0&0SM?K3^;OLh%J#Fo< zMaAUTs7C1o9!Tiii4GQ5TDMl5d?nT)UH6EA9&KsT==!iH12G`*f4&rtDhg;;oXHyp6T*YD1%YYzjmfkQXm(nKRHNR6n<&q9D zC^c{ON8q>_D=W5)LYnP`-d1=^3rw4>)Ol1$x7#;=$$w#Os zvfn`PR@$liteyHNlE!u2HrY#yGGxFphitNsa9$Y3XPb3Uo^In~Hr*h`-R+U?@X%1W z^S88I(V_MwY}K*;i7H{dn0REpznpV~!m=2_{Z7-O3{+_~8D!icR1&(;2az0zEM@7{ z*9rPfij2y#XawDIjmZ9fyI@R`vR46`4xZgfR-#p5ilpv;{;T zXer#uTDLP2dR|Z@kY3-?`SrYv0qt!85rC(Yad7*?i5&Sh*wEI>cpo#cc(!Iz)JnWu zE5@xJ)>vT7t8{anf5y9nNt7fr87vgUu(cH4JK@t-g^>LqJ~aCunF~^PTuxzRoF((l z>F*RmgI17Jg`=7^un8AA*+?g(epf5nwyszsWwiHIMct=_<|!97^jYuZS}D*?TlTaC0{6nU;*l1mdw*2qqtcw7nGVTbS3eHS4?}bT#W|K6#Dk8zN762nsdeJZug~q7v$yH@f*6!6BNUCRRc&4#usewM+~?aITMODe54Vj3cSZhR{O@3)I1u zg-t>^6F@xhu*rdplm7sq6F8cYcbC?U*1gX9qK8rH0v?XT&WlCO%;!5cfZLasdA-Wd_?>lMIMpj^d~BxR*s) z3fww@yYV3MIe0PILi;c&4OQUog<>3yu@RCXkjA}}C;;oxf{3Y?_Ra|L1m_GwJif(q zqTSxSNv3w@yI|M3hErf3g0!&I?yAxr8Q)2#7;4jF>{D9moH+I~|8+x1E(|=1l&Qr* z7C@UAs=EJVe1=&_KZ+$H)OzDMoe)b5^TVMTp<>Pp`sl^e5d&4zJgCUl8h80 zb1U5}jAs5xv+L3IapX)6L{7#IccF(7KzF-fLq&E*r%0o7z&2KEEp5vkhH@Y_B%C2K8?Ey^Ev6-Y#^xAxH}m|F9sMa{qVr$1&JtAiZ}xKsD%tSd*r{bxN5EY|(6(H2+Lv zT;L;Lvu8buAtQP!5#;n6#i20PsgOjdju)uJw(jXK(tUJ_+7>nwX z&oA*CT=rl}x|J1zx}gRrHZK_pY*G_y?L}X(O9<22ty)4}c=1p})RbgQo2>;&#qaj& z-eo*IG!8Als?7pq(SEW=oVB<;b~M@@JB`;(`h25a1B0K$k9JWL`@T$N*rFUiPZyE} zuQ+BAFZRWdA_u0UjeJeGg{Uf&d%Zy@O?|abEh^Q{{6yw+{qfB5lrB2K{R!e+5vnI@ zV>o%`ft&JiG z+2Yu{d*moiS)7OXKVKb51<~4k+t+4Ir#_ALT$!kHFK*4W#rbs>KicAav%HD>SmhqE z;r=Y!?5cF`9);|UMMt~6C33zn!TVRqIiLj;T?TSKuadI@LQ^qDLZFVLw@DfZ#Vwk1 z5(X`zsq7E+D+Cv!gBrOU8{?Iv-ztloddUHIZj+dW;wgo6)76x_CZ?|!SIklBMXkup zk(diHVM>nZ+q&ZU``Z0?_ zdz#|kLtVHscgKHr2mnO_28>j!? zo*{9+a|VO3NIUvrif$O+7Mc2iaI=EE8>)y3E4VVW0CRDR^T}gCWhzl&nBlYj39bA0u+aFO;krWU%TfG7zKP7!6&Uu0R%}ME& z^c_jQx;kuPlJ7IlGm#59BgqjLFA0WWNr{+c@KYcy$EXTHu8oW2rNzYnCV$yO{>A<3 zff?|v;Q!hG^L8EOb!!Rn9*>DmBDPT;-PIP>NFCJa64YWu~HwwGQGTXESHqv5WbgKP6<4!AlTV_}%8 zYQkRhU1?2wn>w~&O55VW)LsaaeBhH@Vw@o`AQ6T ztUaa+hf7cF{CCb61_o&vVQkT*hWv~$M7RfoYZGHl(ZIvD{;{gj-hn!h?b`(f>M zkAoZH&42(9OFjapPaD$gzxB!qJK1{YB?MPr0|7VZ=@l#t)@#0Xg7pbC3~XooBJ|e? z{fz_h%r6+=OJqXraQ;w0+=Z8x!b`xZ2~#Fx2R)?od=m|Y4ta)1n17HKwnYrgT&f0z zwba$Bt}KrZ2&4eORlIhrr-k5I(Ni*k$iKCmRh~_dkd3+D?mF0?rfVe3V{gDf(s}x|rGd~x%jePXQ z^{t7q?7X@C5J?@3W6ajHN;f02b{pBj#Ot=!T0gGy6a|e)M3FK?j0oe@58;dxMuxYH zsy(Wj4~em&;*MF0eU=BWD->b_Jbyj z60~CKeBTJak}5h{l>mhhlR;6PxOW2-gaEz6{kLlQv#p%t;n$_A*?vnB4yR@ z*hWhoyCC(5nAnmnx@@SC0afjh>xT`oX-J^a>fbsKn` zB{&e#>!^Qn##zQG(ViO}C7{O6f@KPlu}1&VDxogpIyxy`S`)T+F0J(Y;qWIsu-8nl z$XKKKlr#8qUM?#?`@ZBwS#`digt2}cE(*&J!7q_w3#Xb#InGxXz{>%k`VD55!fiRl)!7wxe_ub2*rXXs5OQ% zpXfs8npL95^Ad6G`6ZN6B+_@yVGw`|iP>2-rys%NvZP#vd^k9{>T6ija-Os+ncw^& z%b!y*^_?2ci+GaT*80>=O$~;Y&8aQzzV86&{M44~ph&#S0;*IX8)8RNYi5k&LVz6G z2CzfN4+P1tKrG_!pihvP)$BD)%q!!V87e5UtBas+EYDKrg!oCDtA=F|$DWQBYt30~ zE*6QXA1h+hUS(H3x#2jBPPw-u-Pol?iJQnCB(J`un^)h2+PyyEGXnTOo@t7E&2^Sq z^7PjNpQz~lYfc#w$~x+kUDA!d;{+2dMqwh|b07WCC#Y?~vqZt-!_rxvI}3Y4?9EXO%?`rrj+Cv^0UnBF zs^3yjv@CbHfS7p=S{G!zlJ8bH(nHxX@VsJY(?chWvXq8v1=0>Zn5VL!tk3EQ z9)w+wP_N$8&8G*%KiQDkw>@%|di3|6!o2VJ^!)ev3muSRUqmGWdK`$+C|99*Ip4Lk zNgkx=vkDtCn+5VJLEpW-&fN&ik&t5;?SW5sb8h=8k%JWkxwQ$P3tUNW1z0lJuDo@7 zm=2h@XhBr;{rM`K6*=SJSug6hAc=i$lc3nVx5afncMX@yP zURpH|pz%YKlwW%iva6ej@Nx_5QTvW9hUDVMy$qO9CyI*@2A=c->WdR0noBtF_=i&Q z<-3AcWMO*7MuVtTKyX!zk+dNRuw7seco!HlaMqaKBf+;Ov=$ZTAbwS{s2Kq~euM1)lALnQi) z5SznW!c&g>fG71*pPmc8L2TWr^(zo3dKp40;9)}k@~o+Npk8ZQm`Ew$h(luGBq*t zDQ?8UHPCh$hfA-?nhs_-o(Net7wMw>^(AX&0pW(ozEN)&tu$T9r_)(_{lf~cGrBLx*)*nSo5>;lM zyw|-HmgBF~KnbEuSPwK?<*xTCMv2%-RF)BtZ{8Gz=(t$OMa!LKKzV?sUz9V@YX}#q zGOmE?Tr94H4z78u8{IQe@$%yM{#QH#Asw_8g|BsKxO!M$!?%j`4yFfGwLm3R_{x2deE0^-g+{kV*tdeKMk=8bdkww7c z=wa{RkO~D2NIyazDQ^$x;!G<#&t)T|AU-0>W3c$N8V z6FGwvF;RkDrj&C%QZ3|v(61FkZ)e!34&;0N#eu3V++QhTj21ytfH95w;^8dyl7T)?Q=#SVJe`h+4Bfy2%v8;?t zjOVzp@K@VLxBkNn{QOiAH?O13wNj3d<}}Gd2tblDX*6uAK;AMkBv2;zF@+aZyr2a)wAQITNLK*2sF>Cjnoem^j5-I1O3@jw6 z6fL>b=C*l4sv2R1Drg$C&;4wplPl&#*`cIG$b}?9mnhD9YvmY%DHQD89+r|-t48c` z@`IDQmG}?kVg8fwkLRfw1=X@~&LtV!;x>@I`&M12~~MmJlN6NX-;k!zNo@D zU&kHEg0oo#v35C4xB(}Zk-i<`+ah$grHdjd zL-LtQr)V0hGL?1|3xj^_)Zgdz&{Fkv@X0) zRn+ApWx~_g4+L9MO4!Y_d|g|RZoeeCwXPO@zYPg|=e|^1a=w|$c|7N|)L{+Ovtn*q z%D}1PBo?BB<8a9j68spQ8LgUNK*Y~;x~SDt_6s!yX;V25`eC`nDa}SK;-CXeT4*wP z0aCsRH{9=_Cw2ja;p!w_;8!NM*YH+{rvG-iTboJkUJ2opZC&I?0KJM;(~G|LkTD;Y zxv3_3(&?9m;`|CpP9N=nccMZ*mDas&1k3;@POOhujQg7rvrX z(&(c-A`?fI4)vv@i&5;xkWYMLBk3c2{7Kj(zctaJ`AvInp(P6Bb6f3io1<-J*?nPK z>%gY#@#0mM$kxUWIL@*C&t%To(*e|{_=Rj^X6;+XR=yROXdkwa?tIJl`0UB|JkI%4 zL2a*arScS_McXd7;*k&nit;kKR7J`p^0JH@m@Pz9s5zMP`N^HFlXfzaZx_u_k5TCh z^Xw5CmEwW?I3-lX;<>VY`AVNfU3-PDMUri+u%>AGif|LJ_7rx~cl-%n-sAuFd}7;% zM+V99S<(ntnNsPEU=?#Cs0D`9+n(^$yZ)w${SF&vH;jad-u|}E6m~H%tpA(%EO~83 zvygt`8<70~_{52Dti)=D`gY<1mWRco@CQ}0D*1LBUdBo%fc7HfN<>px8RqW{+_8D!M^VlacCSpS<}V}kM;>!B z?dbB(wvYE#$xstVve_mM@WV%U?u+)1^h(DHd2j_J6re*xxgQ?3F4_5aR1$Z;Gft_Q! zOGQ3D$LXb5!m>xnoaIq$n`;wUMk)S@FkLPjk38ks7FP~HD}!{7*pRUqe49uC>V;At z4TQKBRhE^0yfF>Y3#Zjc1q|IW?;T-Rw-`hnEB6j1(5=c|0J+KW&dRR|oeVL^uoss; z-VvFzegusa?HDw(W^|pNlGS8jNHF^zIWz%krFAwx%IfCYNBN9t+q5(lf&tG^x^BAq z^(Z}-BT~X>|4(C7ocL~xzPuHq;}aUpKavn-q1J4v zv+^by@eG-gtq{=QJ#e!3%J;Y~Y)yw{j|2f10||oH9G10F$d2P;3Ed~5x6jEtW6>$H zC${Uf2YkTJ=b6}E19_2Qmq2c%i!3Mo{9$moouqRTi z9ARic8W|lN+NH20b@LVIoo-aD3EF6Xcz_6h-q^Rcl_%`xKP@CtcRp5yzJsV~)kas6 z&G{f+%d^zBGPDYvttO@P%Z!FXgM(QOFiz(a9s1N2NMef9R##~;$@j~^T#~uRD3T12 zOy08<7NtLx>UwK0-n6!!JlgX^_X!(M2VpNuBFUew5n+M?djkkmpGN3hZN)+<6h;0% zOMusUoxC6f!c*KH?c(66NbH~B>j0xNkoedbLcJz;0a(54KE+wrncjNv45aNLpIs{4=v>C#$Ln|4Aw1DV!y!; z>hYYOv0{BcaNh5BY8xGi8nbGP_F%^5y{Gt!WP6o(aM*AkOwV9>n;X2M%c&78j8qYqczFvMcl_QBXv58T6s zf}{Nz^A1Taa=^;-#+C|D2$RoY!yw-|Ee5wWFJCaGB{Eq4ZbQ4!?x1~4e5xN?mU|e) zmQ^Tt;EVk%b!?(RSJ~-j&%)cr^%BPThHm0UjUPW^Sg3^g7qR=Y`=^l0s$>_S27E5SfucDr zQb75!I9w=iICsvhIUpraVqOu{3?dFm0tF(T_YK%bj5McWzp}!aFo-enaTbfu7&-J5 zDBnbyq+MW*(5o@>oEIq07&&Lvz{^!uEy?7uIlhlkt(d~@!&~PVSU$|r)~hhbb?;TY z;<5*CPW)%VbGBEEagB#e1dnf5_!hn`Vb~D^(WOiV3+#BXp{9jof%V`UF#(z4bPJbN zsyk$h7Yd~M#KMw|)?sV|KWrf~QPUrOV!4zGZX#M@YgUUW;(Ug?c%bW?8$fRDn8sIXc41n}*`&Z8f9(Fj?Rz<}QFoa!1=YRpOnNA6!4g!= zv2r^*I56d)+S#$J{j+q=86XP;fc&kc1tU%__~yu*nU}?M*5Ld34Z!KGM_IC#&$g?x zGjH~b{U4D@1i=d&LMJz_EzaZHU`}%0T#{tL?UT}T(ZM1IQ4XTcbxO38BUr?0bur)6`UT?^MEgdF_8h70YMylansubhuS*`!$!z@W_8;+KYMwVJ(4sCMWuS4G zOAET1gjcUHNW|>R_ZA!9U$uCA`VwD(ob8BXSUXWS@q2s`#k~4ewt9Cnygy;zCD4aa z-0x-}P+ub@9pXd3IM^%v26W-!YG_%7NR`tdnqk}=I{wPOS)f@QEAuPcro^^yZKH4p z(Z^vY%2zQ(Ke}{gqnSn54V!Z^)UZ;d8&_Z}Fut3SHW4O!9J~~|Nl3)eqXUCn+iUu! zlSo9J!vUtiWqa#422yv8&(W{Wc7)pWq6`S~!tMXTmap~}ah`rW50Q&nG6c8r#xCOv z_9^$HCEG4qjJM4Avi-ZQrVq9gcI+;2-r;~9J%$O)&DQx@==+C-noY|7mhMLeYkbbw z5~BOI!VB0r^ESj>yuXU)&7x5v)NkEcW0@qb&*P!}0;w$U&q1VvdwXPV**yxKGsZXY ziCemK59-{uLKzE6N&~ESc9ZYc{7)c-+F1<!G~?{OLF07m!y0 zU?*Bh_6;jY5$OV(S}z1J_ZDFarfT0!ux=&S8>FmPoWh1p`M>iCGbI$%zSL5U)_t#D zmN_#`FCWVWJVedDS|^8Op#rRiV0}OBu-d^yG!tPdSn;Cw-ZEdTseF<~NYcGI(mE+t z7^QdNb-_eT(=@d}yWVokRnLpbdysTUz0Rx*wFsBD*!U6$J5~+lP+g$mWgX=|6>bc* zO0r&FVf)F>{&(k))&{Ts=x8*6auub!MB3`(`}Q-Rc_ZsR+%3D^42~Xh3wDG>4nu~^ zGmbG2cV76kF8MS^31A(fCo?soJ)`OEdru}lL8mc?o0yVo*=xeK8Vi!p3?a(XUB_#| zZ^}$8jcf?W>>pVC3K=jJG26dv$VreNi-5HF1E0=#Sv&WmOV%RTa6is+5XQW?QUaNE z9=O6tLW6}CO6Z*PN?KOpajYl9;J6(eA`0p$^qfy4%l{YQm9qcA{l0tBYs@rwh+4Px zu#S(T$Ljbt!$)qZX0E?hZHCt*03Wk7y=8jR=;5q$GmJNGK97y0#hx*e1WSHuBp*q` zyilE zZ4bX1J*rdiYs4Nxy%~N_#;F~)0KZQGzYnklm^BOQ|0;%+4o1*l(>O8r2!$rex9W1S zz?cEYb74eVV%*rDh7Qiz*Wn(s95 za6P6~A zqzUmJLnxR~Zn9KoFplAjdPJc{Jtf=c80?l77$-zSS69OK!h>!)gU|zfvhIv90(__m zQU4gUb^3C-rBf!VL$+NT@M1faY_*Wv{@@WPX2KSnx!YRMG*yvq2vVDi=_WUaiw4!` z(<0$C+4w-5e4powezEL}_SY3+A>pND^Qfj-=PNkLTRr2`PU;SC_w(}456D3k8fte= zUAB2{t!{aH%}d`!?f%Nj1aQ_A@<~1;W@+ZbXkSYvt)*m<3_U+-q{@42o2F29KGfZX zB5SQrnCe_r0r~SI5`v47-I?ZYG9n?jQW5s<@ ztDfyn5Ydq)|E-OEaNqUrj+W`|P^Sn(9>tkcZ3hAY*wxo!}Bw5#w2PH0Sf563lkVxQv|OKyvP2LT%7>cU7F_|8<>*n`){b;$II3lT+8Qc`XvJJlkH%{o5I zEX*oakI?|d&Z}5`wVaY@m2RZ0sdV*G!M#j0SsZ(6LreJW;zlZ+GwQp0jrR zWI2Z0FQMJdoUx>N>22L`Y~$J5O0xeKdf*?T)Fv=h^jAxj7ficacZHIKcQ`F?6~Nr>Lm9=QY5Tii+1@xS{}p-c zRe1g<<#Fclhtv`oN#(7iS4bywGYY0oRV+h{f7qT?kAFh+%DW22tZ__X60ekkZ(!Mx zr1SrB8~0zfV5JF>#EGtI@3iVT^25z}OtOTrWwbSi?};9;GquS*Uy#PF4-Z@^Y{880 z@N9Cl#&$5zWdJ81{cbb=e~l0TvsJ7#`RrkM{rlB2&HWJ0i=8~dzT&LtmzC@bF6yUi zvMq4Hm0Q>SwP+5FSz((Jayr4uY{<tFl0L3duR=cj2TTg6F4~bsKODK}&Cr zb?!Gm;!R8V+Ug7lI!ZHX&z#as*DW1j&IQvcn|6m}3WXZLI^Au+@Z`(dqZ~pKKnMvz2E_UxL-PeN%4YBmYRu!PhZ`i(uyIt~%If9jq zr1>#{L*eU|QhnRek)S$usBBjMB~+00Fz$1bm!n-tqkK7=o?Jb8Mv&f-l%HfFM4GPmU<4+tG1LHAU51%^L(8oI;~F+mNA9Vbg0 z-w_F=vmHYW){ zl#Yicm&_zg%EQQWv?J&JDDA=N3_Xtjpc zJt4uvblZM`rCoWsWr;n7y}9W_)Z_90G0XpB76j9O!z`{YUd=Af4Aa=fH&BYy4nOaO z92|D`3q9QOwX7V1dXWSu_F!TmaB4x(@Ve}^YwxD>Skrqh=-(|T$8$q7r8BMw6=}>; z^QOZpIn_izO4%4jZ8oNtg7{9;cQ6*LHnLzDF>s_Iw#QASXU4^h}zAFzCP}6pmgR4kmQC$ zlP`wEDtu1He*(Tc;A0!%piv@hAm{~nc%IK!)ISj(Woll8G|F)up1=PJd_4qsmTKTR z<@db5^*VU|>H0B3K?EL;G5!cY7sd7Jzi++r^$z&)t+b**EeIy2EP-OwI&Q6p9%SGZ z-#3ArzvjX{tdkah8f%4Gq%tkbLD~XCm^}&ey+4~jSn?)rGH1bwDwEs-pg1Ly+ct0+ zIra$Hl!aqiCj2LVqpYs^ZFkO(mMpVqYI@6Vj!77ounTyO62dxwWse~|$q;3`RhrrQ zsjV?b{(|*$s7}hhi3GFJa6xOVIVE?NCinj6LbE&X%`%C7ckKZ~gQ$DPyG(>wj^L!C zjNr;9S?@~ro6UzGCxd=_wZuH(n=Ls-&bmg27 zb=L4BaiUnNvGUVm`-*1<&D*-tO>Ks3`c2Q-_f#L(q5o4pHD1<8zw5i$Wj~*0Ew~qe z%gXGohFOk_F%d~oNw``n(xkDO7^=i!1x7L8wE}@pz1(cEi!w3iEc-T2H(y)Bl;D`f z>7)Cb{sm6A!^jz@yE>c7>Be4V{Mu=;g(tIB)g`LgAe?@6pYGKAoo}@IDm29!=Sjm2@WhF7% zbm~ye+kePPfUx@?vCN_CP#Sl9%FV9U}#7ft21 zKRC0=h{`|N=Zxty`i}MqY&KG-|0%$xa1!CVp(IV%6ljl!@EE_p3Z-|;_4NjqY* z$5v2!+45cSPudml7Iww&?rnRxce|2rg>z{B*9}?YvZaV`u%FY9@59dzd`e8YrKo$T z6-(K$^=pmhHWN z{K>Ll7<=$3%*_<`Zo^BQEyYVJ5l;DVzaYm}_1cQubk%-0YOkVOcM5kYLuhy!EIcI} z!gLn+1cW22faqYavbH291h9DrC|T2f9H3XR4^B(i&JcAC_$Dawr+_`-DX1<#g^r`* zyR4NeK(~K5E`A6XdjS_=q8fq~KGqCAUz00>a3OLehk~lo)WD!BTxH9!p}HaY@rD0x z$IzVyk1tAsrE|z$G2|^}AtWO&_%x1`wCMZ8@w|8m_oBIk_<$LB?{_eoc#&T3;_J|D zNR|&7o>}U=d+8=g!!JSBN_tKTEWGhx1Kmu?#+{wv?&U;8RvriVv-!9vQRn)9e#il~ z2wU)lV;$3HKVb<+=S^(JYVppLT&-V)J}RBN11x?no*Uq6B|4>^j6mM)>G(O4^e!ST6 zuDdw2En1kTNyAPY*>!s=y9iM2a-Y%`Z;Ijji4oiB$j*6)NB$OhqQJ(YmPO($AD;DMB*tY@;3X)P`qvW}xcrCMlI@hKw{=Y@_pyOBt@U7dWcL@4p&gMh$X^nKP?KqA?Lx-OS9Q1( zI((ec;rz4?=i=nPHFm91U%XPV3aUpL|May=J=5_e0v0NafI}d|!)f-!7_e|8JG79H zE6PkUu9M|s5GHy%eF~ai%gig5rJ4qFpwOx96pj~hnR)I?l;Z*+46tLxtG65FVSyCJ z?*w3GkL%N)e%@=+xV?$vKDL$uIPeML=Bb5?0WZylL$=9@UlNmvK;920!Zl+l&SB{M zj!)s^(!UpapSfhuyrLZrTe6qXU%;rx2LI-gsTyF^YnF#~Uh4*g7A8|eD(_e_8+T{o zxX-QC0M0*IGWWi+L-O`587Q@J%0*mcgqxJ)Xzl3k)h8*gf`lkkk)~+(R`Thqq_LmS z`-^9teNVI~6qZhK7%XG_ShnWO-()plbC&^k!9qN*;|!YWU}bU`M+71OeH?-DDeA5L$KqdRy; z)fozlB?M^=Lfh(W|DI^dnSYE?^ow~9jz%*u{A6vW1Dq9KJ>gkPn)BX<^W{X)6jumU zj1(T-mD0AL>9z@bH=oDJYhqtUCxyi?zC4Y!pIP+hq;}q~llEHDX@dl5PeHMy$)!IG zX$gjApq$38jlT^ok>VtN)Ma$!ewlxHnY`HJg@kPyQJqS_M4fsL*zK)!m~f1|Xu}jGy^uFFMkE z4kP{~TMe2Blq)_#!ZBEvy$%(A{s1>5Tb9|i*8~Wgq)mpQ`pGhnQ01ea7+ANYq=WpY z^+mhYQo9Ql9iat#3&3sE+IjN2h#qWP^YQ{-rV->*Kv__H*Zx?tdy2egFgwr*2o|es zSllj=Yfe%TZI7f9SZq#a5iz4V?kdO9^8Yd7SUMmSZP6NYrn7tF)7Umf-+S_JTNRjk zQRgK&BOR`Q+^`T29Q+)u#GXomgPtEXE5ZJ7GM^d&+nKEFhU&&$&(yjh7XM4(IDr=Y)I55!g0p@6t9cUT9+bM}sacqzXlARO=vTkbE6;mac+5G2#dVz5<#f1Ej& zB|D`KtOX!(v)oolbR_J!_dk9gOa)9Ei?iuVz&*{mx6|o+Mz+zGf-aDRtWl02B0XR^ z`=h-`f|J=FBCER6nm-c3OD^*)GcBm?6 z6NF#N6{29pBJOO+n@b{k*VUpd+M)hE%KuII*OwZsTXVxG|I?fvC1}*f>?NN5aNyMV zSLxrvYu1(n)L&niwG4-=LzB?wY>_ee&nGH-KyZ%8-&zSf7U>?11(~{9gtHji7<}0F zKi5@&WT%vEf--zDYh~YM<4;Z5c2yTRCQFYb07K^Ii8tNS%uiz4Zb_AOIsKoqPf~#G zj??ghtw|+;e;YPHKQF-6jMt?M*5Y)L6k%WJGgGjvk4|70R?##zsHRQ04Q$oWc7)9(Yl>MpYw~x zx2_JfD%8VGM@*4n_SZ*Z@&ycw6|S|Pyv2@-s(J* zD2*m)eX#od*~o2Ibn)fF1IXH#CeJ`HTNgyh5EfmP$ZSV`gLT_q>*x*avPi#S!swpk zWP?*f89d1f`xZjVJc<{nyH{+uh$YYCMZ@-Lyu^wB9@i~PqCBMeeI>fglQ>d1{QVTK z^Id}cT+gv1js}GXOyo4q9?W?QO;8t-Sd?7iNCNTeGSZRPvy1A%L$^QYJzuPu9{a9# z5_M#3VLSkIXU$7V+GbAj?ZkI8w`4SaR27e%qq9;MpT0E7;Yg!RW8ZEcD^Oy00ZL4x z&-QRj56ud`Cw(ThJ9bmfDe+XY`hk3;H2P{ydwK{Vr?&NZEXn#~3GxFlI>Zv=I1$qT zoq#-~%BFq2@o>;L@19y3MuAW-ucdP)Ss@ZkF)QvCb^5ASa@n453&@N1$wzt>&Cbu+ zNTXLou6B%`yBFuJpVp@nXJDKvdf&2neKt|IB@V}G7l7Fi!;e11o>k;?gHQz6-MSXA^3Yh-`#3 zw+DU@3B(SPqSi&92 zMs>B!FOq;qsuv_xfBD0nFY+8F;Bv2h+TU(yY3??hD%Y_VLGIxTEUrEt5ZST}hkP1% zF2WC=!uLBqk7YXChX>F0Abr}Hlac>qoj-f$-KQYLANZ7|dWJ}3?py4mo56M;SfKoS z3x>o`Nv#!RB}sR^WE$5l7wepl$~Q$6Hx>%4ktuDd+RkPBVrWHMqA-P)9fl(9?x%-8MZerC2-aVNEw6wWImXr#6<9S>*u2V#vDqPK*RWe~aeC z!Y6l#m`qR0xV*Wn=ze<3DS8tWK%9FC^W_n+?hRLaoe$m3z2D9IVAO;^Z?UhW+(p<(e z+G)@Mq3!6h1?97dPi#kV3E+VOXK8fNdTi;IlXf&{y|nK5&vqn$M&ct~jr*EC_5KYK zySeTck0e9vT6AQcTx=X5Ju+Xw9wkRedCV$wx-d(ozW~AVr7s=P<~JRS6f-yJhF*O)RF)`n8jt;4dTodY6|iGb zw9w0%T{>tlAf#l?cCt!)lg7g$=nN8erWt3jDePQq8g_cOVRbU~bjj)z(U&NQ~ zmmTz1`=Wii3u$jt|E+TttT7)pIxzBPi=pAy%xpiRq7i+)`>-Zg408Yh#MdSGsER1Q zfR3{lA9xWO-pv+MIEIL?<7|0+BGIwM%L*?xO~_^T$qkZ4i+CO1@}D@*Cm0=oNd_!H zN=HybZuwl%o<*SS-F0}=Q3VfTeemj24(nZ*MGsQ4Ir*m=`qb+S;em1R- z<}@wa)uT-wVcb5(S60Qe!=_CdeM-M+%Iyui^d$N~UMkH{a?vG1U2AZ~r_B9G#ZM8~ zdylTTk3=heb@KobYhQ3;As4mUlAH#K$S?8Bk9C6+E$=V}OFKPlEkm8S#)^fcwhx0j z)ki{@rl6ya5D&2-`FL~}UotxX_=V%5b$l0%f>>;{?s$>N#{C|M=v=h#_CDV0iPZ4} z|1kTlA)#El{eD9%1{3Ju){ZnqKUPd_N9vKEAL1K(5%1nip{sa_*=yVz$HG;-3MJ6< zpmj=1UO6YSh=f+~kq?umTsdO@BAX2X7^CSav`jxYE>eG-@s(bhu_^}&-61k%@^28! zfl}~Zksi5LkzzbF+p_yp(nSj>ZAT75@_iWAY;q@yn4{p5*ylBr%Ba_|rd#fprT+2t z#?15@Sh8-6*qE<;r*a>JSN48}J{AB;OT?gt(P(?l5T~+0Mj^dL!zc&#Qt6HtBkYCN z=2Do8f`bY~VOPtTPwvDKO>4E%;>zMsRu)kR=+SZ5Teyzr{LIZ2KWO|@+hc%Lp5jGF zU^nVhkBH-TsQm2+$F5oEi1otx2lZ%gliOX1-H+K46(C}H=grpG5D8ec|6>-tT%kww z+|Fv~S&&Fm;7DN04wGxX7Z@!4vWsYF8dPf;RO|1A$}~7k16vXT%R%d-{bgEtM#P7! zmM(F=@Q7#N^YjaEkq+>*A@n?MxSIl%n|XYWzfS4nA>~D3ZWeN(6?KMb2Ilzo&&D@x z|D@3diTzlIFDdknwTyzoRZgRiwn^50Nw4_I`laorv$xBw-Y*V*2uG*jfwPw%B>>YU z#?@w)+Moq`CthRYBz|%V>*)tp8mo(Ci%zXX$Ip%VfXl3}v+z9tZMqKyttETJ5n{L{ z8E7~f*lnHY;Iq1$ZwoCaA2<7$zJjcL*E1HgxkvrPGaO*lLt=b*!pKK6bvI84(Mvzy zAHwnI=ZC{VNtHk%?Vovk!f%K>G^k{cS9@3FChs2P_Zc z^`OUgQQtG)p9366X`2u>kXiTI56D1-1Z@lN8Q$!)jw2FW@k@XBGO>wjmeJ_LSF;}?$v@D~R(eKId%r#$KC@T@$! z%qaDk2oy1E(3-nDvl+y)=W;{$Aj>L(=L_V#8X6|ME+7( z$VIal2A?#@`KMhw58`Lhf2ry2f&OlzY?YY7ipiL^L(RHwTme}A>fiJ_K|t+9_w>Xj z&8N-VFtnr|k@e1(Mo2A7FL%ouYw#v2_h^+jSy}K(@snqIJ7a{mUbP z7x_%;zN-T!qS?N0>=G9T(#}%+fYm~bxU0Eeb#+MsrbB<>56n&`)X~U++2FdiQtUUIn~gv$!OJ>^G~4$vZT6xkYxBIhxfI&Sy|AcI z2T^bxqX`gZFC?q%M9*7?vKClb)DG5nKOMlAn2CsN2)B`(dQb&NM3wjnP_d}(U{JtX zO3l8FZ(J|HT^!s>*Uhl|amzz`+|-Y4Ho?$;u;N8~t{;EWZ{m{7Dtd}nO-m7rkoHQx zKDf!U8%DB*08K#GL-*+ueN^8?Q_vEln*~vh`r`EX;ahWTKjPyxEC5N4G(zOK6*l;d>gjt?Kf%3i%o4t}z&?G8Ad^e=uz)&Kyre~Bl2Tcr5eLb1|j-GU2l1qxpx!Ra2~_~ z!tX#r-1|^Or+x)=Oeyu~0d6e~HWifk)n7XCTYh^o_Bxj>L(G0KKNLH_%;3JtfYE1L z5TYhQ{AH;Yn?lOYg%TeTu)tu|y}z$oTJu8KTqR+z7R^`ey?!fu$>Vu>KCXsYA}$HZf0^?{;Bt#~V)2l67Qgnu^;vw5 z_+V_y)%(dg3u4X+6Q#PCDFQAq+-NB>D9h{)+LqUP6|XaOGp1+)?vCAJ!6dSYJ$sD& zltyHzz!Rah;*|0=%}ylXW;1*#LtSmtoDBCG0*N_mLnQsWWZQ2#6D-AQ_g2j^(1S!HV`-j-rIjX&A$p;<(@!aSQ;raTd(2B54vLU-@bcey^CwF&SuraxOrb#XoZ> zZP zx;DAKUL9|Aopp51AgnftWaFddjV`iAms1*D@f(O_H~M$*D7-_Ri=V`d?fb9^5PlmRf7nZ2 z9%6_PFH$j3u31LI+{G6XOkzde((#VMf#Kwc+mX-yrQ4B(5VRH+J&`QUKyxXb7$*2A z7kWwy=t_YT?eEb8JkEnG>ATvS789{KrME(hQeyZq;>&Z-k=_XP?9A}OgU2SBg=pXe zOVV_5=h#{qC5MwjRba4~?bPTpJ`ArmLUrpEoF&akXC&YQg2@7RO~MoWn1P@NX4vi< zz9t_5xO)nlylQ>V7v9gHQWWHZ4Prei&u7tRXI>U2jq52iL*ZpHXPDCKp?L%VN03eD z>8RN`z!cd9qNCJ04w?CHLDU*SkHWIA^R+PB*{E_H8EAo0+4iT0x4`hf zwOIcYBYt{1>`EI8gcU=qiF(R6#TMx4SVn^AwRmFF$;J;bp0YTHGCS1rEUZ*Uvwnup zehTANesN(^`R#)7*xHs)5q^1qICDdM7$|j(&w{vG^2dd1&+lBSyQOYC7pS0)@5_Zd zoC2q@WDtc8L`GsVlMG`)9tiGY-4*$Cfs3tKI5C_v?z;l9WV7@*B z)G=sz@SyP4Jb_N}%N(D9t`Y*Y`8DBBmeK3gP~9JYL_8`m^~5JaX{-OsOzTJAWe=Hw z$slzTo)V{Oq%r(*kgXZ-EA&G&V%U24HPTH2tw(qp$elR-lB7)gXdC{atbGoBSW&Bk zt%=$M!}g%4=D~De)=NQb2t!3C@Ds0wI3u@`CNI2K<;-zoL;hN^=UhOAb;@)&^%nBZ zSTg<(MQ0Br57Ilc-*N3(*IlFbyxi=A?f7%Ziok*RB(E-OV$S49sdj-Nm?kBH>S6w@PBf8h!kjS+VU+h zKat^Ob$$g!__pQaSa(F6`d?YTnXI=MSWnU5f0^}iiB+r+GmWiDT8z$HwXAI6K?#c+ z&$e`di!%g2`Ci-vv6*>JmUxI#&V^f0I->{YM{dyOGA>vfwDdnC@lz2r*@{z8XNw9^)8fk_fTcdXQ| z)$5@-0f2mE`)`FN)Nh&L!o3;SUi_zac2ci~z1LFqjEW<(XeB4&qRSxj#W6Qdk6u?} zJp?{QmL-K90tizy_96?RQLk~$OJc*)D|1HFioDyul zcOy_K+Ua>8D( zuJyYKyJkXxXs1kw4R1|o_)jKumrrQ^jT3sauD-!)PVf{~9f5SbkE~!zK7Api`->khn0#!>w^$Z!<{(a`~3~5fT zyjo0S+eNs@d%3=?*mZ6({t33dZK#wVmzjE!-~{LB&G=qsv6kx#iq_-1MlY_>-}8PclJ>TWY~Nd`MRxssg0(y@fo7Z0M?sJ4NdM$H zkwc)}&uMd7VNSk7dS9KBmu0V=(;F1t85zO3=5jyV_njt?Qa!5j9?G843Dzu!;-;AA zb`9C#uog|6G?0#)hNd;p~6XkP7{-mvuR9HTGLxGjFDLGkY_{x>r@8nuXe#p0iE7Qh$(rHZKkV)4I* z#b2tO(<>JLlsWn0H>z{`bBn(;Ve!L`^Mu7W{+1Fi#_G^4+b%oCRcsaseR#C2f$e)w z37!xsdxZgf4no{ARLMFl)X|=+Yf|%H`Ao$s) z>nW|EPL*mpuMBOzBBpVp<$)|uC_`4^-5D{BcgviMJ4=nRTNgw?jLw;aFf+j;rAJ*W z{>w!}$=-a0NV?-?7fJKgY0dD->({AZTeulj4bGCelZT*h31}8q%7Lj3Gd#qWQ#Or} z9+;8~s6GfRN!eh9meN`Zr2Ym*T1Thnb8w3zOk{i$_#a@3+6wt73jG!_HN&%e1*RTz zOr8BbOf^fG%J((0*^Hwrr{zDT=G<|6hvRLcu3q2_z1EgV(ii;K;^NHMOL;|@@R`MN zP8w7fXGWN?p5C0f%#WGOnWXXC3Q2}ORp@O7XTHL@U0_NsEHA55n&I5Ofist&H!WNS z{y2gC1N?B_D96uB1wS+R@fG-4%<*&m_wdsIKczT zOEzFdv*%{C{6V$9%#t|q-By?6Z>fE@plv=(IoJAOUV_Gz{yhKXOY~NyzrxGT&8jX@ z(vW{o>2nZ0S7qy~WobD>w7f!jOIhs()YZ^mR(GRZ}+5d@iwevXT7(_zA#VHVfk$Jw+5 z4LzSG0}e1xW}H_z0Vlld(%_{!s~OUuUgy|+>(_{L#CFm`(rvY(ab~d1E6o2>Cgi;| zsuP+a3ErTQ@6kA-#0>m#j;Y5^h&0sWhYVVKTliV8;K#$ZwY~&kX_C`?iF5Gdh*0_R zlBApwmU{z!ZUMxbXA^h}hMe%G*mRUmFrg(3%~vqwds4L+BG@HEb{d8*z>pie%_@d; zws0k`W%M^-=o$>UEu2kY97Au8L%dt6I>SuCIF(~^E3scubu%1;S6GQxVB8mdwTkf> zR&+g^g_ux1o6Q$?SI#O^njwZ>u|ssjlw3`(SEuync8CTLk%O8|V4R5RG30^lDT@wL z3SrU93XW!oBJ`CeI*rlpz>y!7*WD^ZU&AXz>(U_#eM1xmc+H+V)`e9(K=S3b8$9-aU8u_7!XV0?x!3c=!ORQU+TU3i>TG432wi}89^bA>yFjHt5`l!qp@RGHKaafAkx zn4C7LXC~#MbWoj?Q`b8tHIp~4OT5vnOlpSwcm;1PqUi6L z3&muNVP#4)`12L!!U|IgUVU{+f6iQJG6x4Wo4~l3ujh=J<^tO|1#{u4f}IdfqN9J#d4Ch!&<%@m2ll1O~1;An>Qc!fxu14k~TArjxwmtIz%Ti@FGep&E0xV3&dudcB)YC^NR4nIrwp!S*qga&xH?E{?`}5STLK#IGX-A3%=WEFqGFD^^{+<8VXvJ`H(W3 z&x>5U=IGdXw(h6QB z_xzVHQ)%Pl6{*ZuyzFvhwK}nah^}SHeB3{^Gkr=b%;{f9g=vIxW+D$|tfhrim>Dwd z6;bdTu;|OVUd5tIlUfAUiydQBnql|XGqL?LKB0_-7ebQc z3+t2fN{L5bp)ntU+fjE`h1(T{$?#ed%g6mwJo@g)OzzW_bIILoHA=5JM)2aK-l)am zDc+|XvO2NgbIHoCon1cepCS)m&UXava{XN}rU;Al7SU!@VU+3s7zBd~HfJ@d{#JW;#ynx77*#Cu;rOCy#1q;t?;< zS*z~2``NZ(Z!oOG;%u5&2{dtEMPcv|{#~|m{r3*GsyWL23bsN{nG;ng1zRG-SC|oN z;LurUSjFPI&4^$)!yJ_ZxwCoedc(MUo^6-Oyv3BIQ>Vqk=a`b~UCEu28Sw`lG$0HP z2mhrL^U&*MPc4QD3adu?TsnsO1RdXvp%W_BJBD8V9)|A0OPG!rakUmr`858Nf_t|M zn`e8yRl!|l%E)CcqH_8TZglhvF9GB^D*s1H0G;G@s|?^%eilf^ z)zq*Wwc}NVt(X2ao_*vO$?B_Esk-b@t8&!!{c1L?t-ieOMB)MzEoZM*@Qe{Src=K>QdRfrnfv;|u#- zo#cp(!1_ssJp&vSLnp$wL#9dID{t-ExavaQlM<72U`d1Axr`fT`W!P&U$p7!G~e5& z8oid2QP6(?wQA#N@Fd4r%aeR9XRDKZ^IFze;SqElvXZ*x(t@1>W_kCcW|CvL{bx+l z)z5r&k|W&ydV&pg)=#j7{G}SngCT8EkO8xNtR>hnHbE|!rYohz>NH2}?bT1SR-G4; zJZq-e!$dWCGhm)a1r1o@%P~R&S4`7sbGbUr5ut(lX@;}XznYG?LHlx<9?7CR17`VL zyP7wn3#{ERO~?LZb(+CR^2%%VNiGpyVR*z{9SWV))gJWZK~o!%fL0yIMW(eV-E%V9 z6bQS=IV%IeB4>gq<{?pEARg)PzjL8brs{R;ICg^-~&{QrF5$@Nb;(gch4dSo8jU zR?5kR_%JI|q;;1bPuP9Mn-3V3R5x z>vta==K{(@u91r7q&IAOo|l?Mfa`9@%RzYaC0n`Q9Zcc!He(9s@ZzKt3(3uD-E;2- z_PSL>EUqx1ZB2YM4L`>qg7kXXozDd-<-2{f$p0XY&eWBcke=qReyfEqj$03+tY}ML z`nJ7eYi+BkHkOO983d_yUb^(IX8XGA+4^-Sy+OtZH{4&V@9e8?kFNk3n^F|DRG!Dp ztv&WjDD=^8+n`>Kp|aT+;d9+Hgf!{Y_RC4Gnm76dbFC9yRxh76x;y5tu$(p0d;OLTv)$k2kzM$*xfme#XH#lz zi)__THNd(Sk>?U06u2#y4Z)j&esEFP3mnn|)h-q~gu$XCaVN0VCcgE>I-t1wVpbD{-I9 z^FZqxD&Q=A_6LOxaJv#ME?W><`^x4$kiqEJEEHbFReu?Ymg>9P#S9ApQa{azdTjy6 ztqFez0C)8%lsOCq@a&Gc53h&3XxH>Zo{v<7Jd6onfN{T(ZW#GR-+X*4MS`R7YUoP1 z`BgX48&|>vWB3W=k{YQ?R@UCUnKMH$xInHLg_ne;E+_;TqAQIxCu z>%SwHBo&Np3Ty9VE>Wsgs9-Se#$p!Ls9Bangtue9tAVawW--O`#VSdz&JuzHNrM^4 zCoKiU3_bj_Ws)ktb8za5h25sVnBa-ec4Q>%-t(1+Hy3InJlXmwo8IZ4a$MjyWXh+6 z(Zt5JA+v0vT-8MXZO%hn(Uvar`Zki*fScYG?Zv~dE`8iRM5p6CJJafeG`pPf>3PYuy)GU zB1Nx;>~lSCjJzTaDY#A1LflxCjZAOHEssOguw0Q#j06c>>%}7zLndhvJLPKB5{JjZBaG%$yY+cH=OM=ORw8Vmrt&c8_kX`z1pSlM!WG1 zF~rUGTg-i@@nPe`R;$bN4oKzzp+pk%Prs@L)_$Y;2{>A7#`Vu+vxuWE_Dx3dPy0H# zSyr=EHCyv$db#(33-{WcBVt&2hu56RL4KJR^y9-!6JzOw$bvnh(GMU?HzvPZ-*=lf z(!RdlH0h@`!Tdf0w2kX;*60lLTLd!6jv{bvF8<(gcRIQFEsJ07ar#9?0O6Yg%*eh~D)k$&G z)8E@#s9m+{oODfU-o#k6T~d+Rz_r-yz`M#)DI>V{G51U4>F0P%k<#pa_1cd5@JcU1xSi+5OasdFw3v>e?ynfhOF zZS`E(1Cy{VLM`*GUl(G+JA%YK!Zg9gFCA?jEwqFx_fIZp!NY>cj7ZZG5>2g@c4z!1 zG83{ll*hvoZ;ScTN$)g^G`$$%Wq~+Hvwf_sMWlt8!elD;fZ#ZG5V9_0G}T0yi0h^* zht+9zCAeC9ur?QA7sb}qNz(ddf~&nY!=Mbn&H#MP4m8{gx8qPAe%w8s*Sp1bOYeSP z6IbXqng2=0Lt0%B9G=rL*$>vBgb8qf5%No|57c^5t#6v?cc`<~ylb8%N8C83Q7162 zP#D+E#dLO06t*>YWBk3p%)HkcO@qJHKJn^B?j z-pXH?eQUZ&`lXg2Y^*D;M8z=sIm^=4tf2%QC{|E4JxadQyot1BieIdwv-JV9@sfbI zJy~CAulZpAS>ZFJ-H&B{f&Y&aB`T22GDW6lq$(2}@RJV@*Xz09oPp&UI_<+(VBbRWrLaQ+dpp z-Avlq5Z3XM|5fG#Z~(d{;L@K1S5!9dbrL3Z+3uE1?j_e7nv%?RY-6o8hOLlYM-jHu zb(Vme-9~d#6K~ljLwaO<{dK{12sRL@hABCz3n@AnnsW=Idjka)MnIncp$+}3_*_8| z(ACIk@nvLv4Zv&jts9TAx%NIo_$bN@(SqjNUsr7*m2K}!8-Sx6WY-Ldi$8B)$I|Mzp-g?xDD%Uo&7iM-J{ushWXOb_5)0gVQ!Ug z(3zY%%r91UBc?CJyY3xju-_%mSTUgcX7$Y9K)g)`Ir5&N)kQ&sNuec$;Ejz*Yr{Z`1eUTz~Sc%pKacQ-(Y>E8KjPjWP z8ct1OY%uFvk;M%O$Gcln?P=fN%L<2h*s7L#^ZrJU7_$p*6b6ehm|`_R@avUb)Utij zwrO&kL42Qwh$1CUlPd+Dx227TW%e!L9MELrc3)cQWy4HtY9p0Hb50Dya1<+1$jb?Q zc?5BDY)X-$|HJii?s&)b8i{X|9uzzb;Y%P~M1EgEcp1Y!&qbL@Ccc+RG2&FB z?SCFKOW?pQlp($^v-1iI^~v6;hVU)XF~3zH58 z+O}_23D8`eFGA+f&JdAR6zI$^3)0hxxa^$2xdbnXG=kUCMZ-{b#>Z~P%vX>W2Nn8h z$ld#q4IPO+~=Tdkt&-wJ=VxJ2&(*Rbgv zLkR+Xx-y-D_5Ruk1%Ve7!28iQR=N5eHlvH(kgz!MB~v8mrJrX<8zZr!9aEB1SUaU$ z*o-#biex{G-rwC^9BF=xR3^uG)>0-nD`gzNS(${l^9Q!a1iDnxH%NpXLrI3o_tUVM zvv`B%FxQoTDp?m3*lkWt>=BoU&-KEaEa6BY{{z$1%(9%Oixe9Z z9Y(lpvJ#q&RMSi&AkL?>Tk9q=ZGDXX?Lc3^|AOtnhwoYX z@|G5Q^md?;=e0#C3cGtn0}D!EpC7unrloCS7q7#}p=9}l0Cf+8G#SX?J`F$l7|K-R zg|rtmnt9Gr{o2ORwu8GXwSw4KR0Q;H@CP~jM62-Q==Q;X*!(N-=QDdH{=)$p3_ony z2mjnq{QGj&;@{Rt_zymJG@Jhf=W?L!|5kYv2V=_? z>R9rqU>3idJj(6#kVig7zdUk}{=YyT-C;Di*D>uYJ6a+=ddPIj(z`m-YodpP53*@Z z1y7-hQL{T1&A;b|kxR}Wk(cmgzaR+yotv=Q zz);)!82d+UPLdl-7u0KQ}0mW5v@2Y+7yJoOIZ+&&Hkjc_`kM6c-AGzY*c!BQ3gtni2-4hg@8@`OZ z_xF?QBW2*7@_`$hhn5cYqV3)+0z((PijYGf6(S5P!pN&b=FCM@GySP1U_LsS`0(k2 zW-7$X3Y1*&mKC;W<{lpKnK- zwPkPfpT@I`q0!p#{rt0$D&}I_G|ZVD>v|#O{kLkE(3cWiG0$=UDGL)xat=XH!gev=8)DpuKgrEN%neY3clH^A zL*C%xzJh5l=f5Ms)-Mu9o2wxb{>VPBv+(lS5?urA)*EJv{kL76tpb7UGQ4HBahCso zvy~ZSNuQu5iy^*cZAoI-sjh8UmTy^GzkMM>v{IS%QTMmc_Wv)w<-9l|?=5Sq zh`~uxU0sfXH`pnD%j#ZHyoS>h!MWp^E+wVq+GCh92r25SGE-A|jIW?#ilH~j;c&2Q zUjN%%Y#f@q%4sJtxS7Nq`?qz61IWs4-t)HwU0Iy+BDwly4)5GngfJ&t&4XqvE#vFpBWvIko0NZf;bKAM=l1HPVQ?(dtLa-;6t_5hhR7=XQ&> zXipW@MsA{w>-miKE*Dk}dsCG?wp#Dfoupx_7~bU{808O`-wN!qn;RCs)XU>&qx}8Q za@H}lToA)8d4vBdUY`2!BF*|d8ZWgjN0p#*axBX7VTK|~#fOi~iDVbGlrr~RAaRov#dsI%Y42vb~bMU>*i zPENnL(6v#D(fk@V;2-eo6ci{zxXbxf2E+7dx~vLv7pg_C9RpD2OJ*MAIIX4V+}0f3 zBBaHuX?}!AuR<`&i_OO`VuMcB9UD*3U%28@=5|QKaPk~sUZ=c4O!|aT;Dqta|1bfv zR2_j>l)=$!flcjnnVXRIb3X@E;GWFaJN>^zCRWZTvX7w)5NCn{NF`wRxd5tn|m? zRSe3HdM@%Ry}&@rhv?zw;}?g6 zA-)igMyRBXIX;25skC7c_jP`B7L!HlK5aA}6U6Rr<0<(u?Pu?wR6+_de3d-&KM}?B zN1<

ZAR7xNJe$>1p$k|LFA++um{pdc^HA8fsDh!jMTBi23B$EA~C{!G5FlC5q^5 z5vobQF8^fv!78YvUV|rwdHSY7*Oz@G{MxD!T&EX^mxIQNN{h6;p22iLkrk-$UB+vj zT4%)#^{P+PI^lRczpUidca>mqM@$$@dsI5XcCZ2jzNH`aQx1879g)tb6YLflveo{` zOX=7m@0x5{E7o{P&(kSzs|byCf1WjGLeYIRUs%w>q^IcliID;#8c_>7(oSxf%m_O(EKk2?akl{s()PZ>z%}b>Wwy0CG-dK^7LQ#U_ zkE-E?K4R;1_UKn=&^5hIn(xvjjwdQOwR7bg)~vx2w@9f{Hzyuld7w9~ zfIB>hI4#$%x`F7_?m32=;_tp_*Pi~ecFPYc4wK${%jj{2hLSgwD$w^<;B14>b{Z|n zUyp2&+k&-aBC~5aqv+A5$_(IW?0m9z*N7U?p8c4n?8I8*=N<#^S|UgH1~k>u`%YsI zPCRKg4!#rrQL`zpnPf)=_5`*OO!xRiH~SqW-46>*ie4Ti4G?~ts3gOU{hR)L4${6^ zrDbE6WGIws7iggqs_wAfmQ37rc($}Jl}`wm9D_qqJ7PRma-T z_A*w4mqLN!fYy~)v2XxHQK$vZOnC6f!tuH4Aqe<~BuXJXQ7S`3^vqx0cMxQngiY=E ztB+WPNUJ;yI|r3*;6dNNoC$SyxJoSW(wVT*9h5o`zA~O|Y)(L9z~zS?jvy36g~`ss zvItduu^qQp4c>8GY~R_fU7>u~F?|r>qntEWGtC1nMeF1T%!TCgyoGWq8K|@xH6v2V z!n^}x+dk(j&?>5vINiUFwVpBNY@4NhllDBJ+YluV_S~{sNI^my#SM2C%5NI&)TEp- zr#$7Xyg4#>&9`j9pX@|(!9x-;9Z#A5F^T25auk~cl5w-q;>g3`aeWacOsozrI#Q(l z%#w(z4}-hhl!?S*+_f(cjLT3beAsIvgN=~0UR>xFczj%&SrxvITS2kjdwt&dpYY=h zwxI-sRoeNd_|XGE|0F-gG@Taivl6cVnH-tJDwfo7r@z6IF^Dr|oLl^7xH6xfWMhN? z{+KVL(@l9P{~e6!uHc%=%rT+2C`!{0(x&68NoR+5V@r)cLQVQ4?XXb`uh!J0$0M@q zTBK`>CIGz9HTzarsVYOnuB(q(xJFWKl=92Q7pLKF{|!dVTzV}cYl(U&u$e5czVKj; zHp^fY+pzIwdZsG*tF~pPhibH$ce$o80N`Dewb}B@yJ<7+6)t5LUA$JCRp*pjYhf=B zG!pYh{>?2uOAWHW_gDb_x3LyBf8mp_s)BY51noP~xa}Ay{a?>#9y_`tn)s-g{F7G_x}vMbt<| zUu3uI?%qc#2HhyM36B2@Z2Tz?O5NSO*_4RVkM9w&C5!qX>SuSuy*5V4VQgOa@k+(L&$?O1_Lc!In^|BJAfm zi&-BgOBNpJ_im)d`mEYQ=0GGZn9K9pZ%=Z+P2r&Ib$tl&Yj1az7Rv7Juq${WkgAh9K&xH zLoqi({?f>gS!}^=hoO=vqRw@aNH*pNDCIzw*P2E8{D06r!D@Sm{xnNqvrc!vK!=2B z`-KaC9^s2#ZLfJJDzX$zIw&a1dVp~ZP`Or7IH8W0T*GgweO6V~K9$xfFhDU{moHzH z>^wO78h!QGonN0=Rw_w`-B9ANsfjc!oNofrWQ)Z&s*bJQ$@As}mLtEle8Fmn7nTv) zD=Z@-dHfKhxVX4bOvGW1g><1+6oGYIkULXZlskli+p~kV@iSK~EZz~P3#%mNU)gq7 zV40=baS>Q{3Ga|n&gJ)g@+z#=8(wICl`U$y?IG9t^+6R~RiNPbIA~X@+k*Dd>^y>d zZYQSKja+UFFNL^s)NQ%6SiXzyGsm5yvxLV*>aVaIJ0iMnG=ph(*|EO-LN>&D?S)mX zZ@uK0Iky{o7KpLo*jz>v+$M4A&^JnN*}r1fwU;d0hJc~E^`wK+O)`2=y+0ewq&1t6 zGQ=-GsD5NcYs?8v=Y5}a4oS%Swr&s5W}{WITD$T9iKReU7Qx!JKlv;%x_$FG5@r^@ z0a{AEd%470^WN8YwK-0furRpwf_`bzUcNBr!T|6dr}m`7lnwBe8V$(u4L>k?*yP@= zcBA#|8*yAPB0+xh#pEDoK7rP5gt$*;R`rVNUmv(IC;k4Dfeu>-$E13+8%HGLl1p)! z%rBeD9F;M`-s`tJ1~zu#Mu8u?+0D3)AKxB0o{_(K=6V|lOqA04rh9*ArZ{lAI%WGw zT8s4i)NyzVyd5L+fSXUE8znSYl#aQ1o-tVsyN!<|LUg!|;)47fZY5JH1$T=GHIbgu zeez9CH2|CK=j41w=G1w@4)Zp9)xRQBM42F4q?wGB2(qPnc5Y0C8bVi}*ldiH2c~(O zh<9^5&Hon7uPv=JK>Pd2H%VMW#}`4xr3u<6Z>>(UX(HZOv_;j{cI)??-8%G14LWW9 zNxx14r&`VM7vzg+pm&hK6%(wKsQS_q86G`@#lmsiw{T@O#j{(F0xiengs@}v_l8mKYjBn67^eZT%sQy}K?#u(YNjZA^}D_%Kb8oBLhA9n}`bn(rma#vXE z&XVs;Z!hy#zi)WXRJYIl{Y!_Q+T%t2<4ORyum3)1%hos!f3a*&WOmC0x`-qmH<1FT zbvARKUlbU2Yu0dTY}+=!%6=D3Ws}oPKRt56r@8r7)17Z@k8NxP&=E0}*sEsbI)=cb zq;F>6=Qs+u3kN4li8$^mm8_IXU_Q=Gz6xvk=tXbxjVlzG(#)$zacihPcV6D^dwOJ6 z*M+{sf)B72&*FkV4S|l4Kc;9&X(tUKUfn;VU0*Uuq&P7z-&(6lE6E^%mESuwCLKIp zXlz`}o4yy>$I5s-{(%Min~Ct)^C%ej>~K8w4V>lO3<}(E$QAp7CsESHf2Gn^z+sJOT#A`A_{ne`TOfJ zT9R$Lu5@U;-?lQN1EM*c4}^lO$8^ui+VAVXzg|qh??-O6>+!eaO&^E5jtsiILLVlQ8w(0N5m!=zy*4IPiy_Ae4a;D44(W1|hp7i>d z*IGN)gL(Cm-pgxp!N1Rc0wLEaZ^?6&6`n)1G@*pp#^yZ3X$}kg)$hgly~JM-yCujq zuL=H|JmtsFNU~oiPbXRQ{Zy&X^s547o245%PjB3~R${TV*;z6j=604sj$Uj%rzaTn zIQ7MAI?v-%r5Y=qd6LdnKEvz`df*L=JyLN;rp}&6Bw0S7cN!<3f z#HT>L6^r_3fgVfW?fy1~}o4DhTsz6pd)+zLSMDb@h5Lw`?PfqkFc#+(m*YQ_bp z$x%GL&{&pK5NpRn6bd^aR&diy=-=+WdW1`~X*OA}7`WP@) zaX2%hPB_UjH7POjXzibp)#qp*!0YHlqq8eqZcJCYy8Nn_-J_p|=`)Z3mA6itM1S@h zv)18UV(uTdE!f8ArTzMBbTe~lafrKQmj7t2^nlgh((w+-?+eaO2(8P%^4Bcm{mL<< zwAom;0hUNG2MwRh!`)e|KFtRv~Y#OeU!V{+<=5Z7Re=O#sw z=~`yfgx!TDBmb>M{?bc}u$aE*8akYKu*b9RA+&0PvUqzB1gv|{nx^2y;c4GH{A>w*zU3(A0`k?I@v@FDmLkm&3$~Rz7 z31A8x4sB~X$)PO?CZJg&LJ=Pdoa{rvvztDDWb{h3VAdjs{{bf^Vr|ehEi-dUeytH4 zud?Lk{C6nEf)5w=Ufu$wAjUA7C77E(H`?*7!Uyv3B=zl)wU&)!fg+7*JZA#I3_469 znBqAOLm+Y`k)IM`Wh`vx417vv+|nm2ux~M?0Y@BjIBI7g31miLw9pqte?gMKpwd6# zR!uRgG~$tu?%$i_9<-YSH*mI9rQrO?Pdo(`u)$p5AzbR3Wn1@ zn0-HY>dfaf&0np@zX9U{uz573*9YYb9aS+41=>!^c0YREE5N#{j9v(Kn*o}b{n?F=W@3DR|B6oYFbGGDNz zAJN6K?FFhpWC3`7N$~YeC3CxtZ8cKH=6aBYAAHz8o>BK2W7E0+45)XBQFB52P=D$y zX>H+7NnM_DfD@DZh@Fz$mqJdkL-5sagx2lZoZI{*apR8GF;0X2C^5an13~@HrYBgU8zsa2lo-2OM0|gKMf-*A>*U5V zI?bN=eu5f6Xth?J*>ItEH;``?!Z-Uk)lNyeM_Cmc3kyN zVv#2b+T)jzC?(p;+Q1o=T^*L$w%A+87De$=#0I@tEt#;Dd>$k&uzRiJ31&TEg)00E z;H+7j<9_V{7l%dNWznYho9X#S6K9%O>+Fwa8f9mM5JS`JW*UZ^VI41Z8rB;op(LJk zJBj2|i{aAW%XQ*O7HNC$Z%e0Bl@=&Q6;AwIeTazZ6@(9>$&<~8i6$b^(R8^2{rmo6>*9}Q>IP$uw^zpC;NmG1s}vWdi@|qkTM^?pl+9b$O@p^R+*T10dF@;Ljb_jUbqpnIo)H+m)(&nUiXAmWR6}J3x zKg$-#l&Va&*uZ#kv@`R(-zEUiC?5R9Ht|e(S@u)bVI2UOjt}yZ$(t$YjBrze5rQXI zvgvcl08qO@bIZE+ihNGF=Gqer?fo9E8t(|eUl{o%dLMYg$se(eIEglOvL$B#~+LaXA>EtD{l9jnd8`MezMvyG8o-W>cj z2oWPCv^f)5OWk?G2`HcGWLBF8zcH1!A!ZvX^CQS<;#(E4!H-z+|1+PjCj=RZZ_9KK zN8ytc?X#)6br^miUOFo~_|HNaQh{c2?On^5%-Pz%DC7sCVybV|4hJHj<^JKd5 z*F2HNc^uQCA=x=B0|kj>Xg~3>Xk*IjoSaXpuhw+)kjU6hqqtFUpLg%O6UWKqq@@*Z zlYS%sGq`(%G1+gqZXO>>&VSbweaqm%M((AL1H0mz$>hYo+0!@s=3i|*N8>yGBEJrk z43GyN9I$VYE)wU+g^msbnDK!H*1f!w1WUgQKRjpJx6ND2W9Z)SwX@bd2ZDvK>9BKz zXyNl54-@)0Z(h;MdV{>J%|<7kMht?u%_|i`AP!5PYm=U^xc2lpU#YAEHr_6iYf>T` z&4ZrDQl}VMJacZrM;3JI7d@sc@%qqo;pRESB&=Ej2x0f=JKo;o`)G(es|?kRr-em? zP(?PK`{otHY&Cuh`h(6aKLF`VY=YQ#&5x6owv_J2(~N*F5%3~JeIc4o&zt?O*u=O=qRXZ(eX_m$r#o5Mu40qAbqP4<=Mb{ii>OlXun6XqKl)jue^FQTT< zDb=|Z_TOD?;p7@{5)DR%4kkahJ;kka2xy@X)$vh4Iw}ApqP4z?{xjf&`pOo~9NW`~ z2}+)eK^NIi5JGQl6RdM*TP}e>!xmI%3dT5tANdp%2u_#bQoV+oVc>PF4F2dB`slX^ z-2o$GljkpKTN#15Zx|dQGK+GBUc}~t`HLPTalnU1a_hQ!H7ON)XA0}&SeI!>GJMMj z$`1p0Y)+K{go}dA0*|})?NOh-;W|89d0Qy0tgk%(TgN)%PeeGtS6AqCr1kd}l$P^I zW<(f8X|=+L$i|Cc8|u}TP&UFIHbS>Hk(`iN>oKuSrF5^Ta=&M5nXZx)3d94G9FCB$ z%+Zzpq!GEbW5@8THW(DFV(RIS)5xx_aNVxqmfezEKBD&8# zk_SM#21vi1WIuTG%~Q%P2baj2wlK7a8uROd{U{m-y*oF;sNM$Do2V#8==!hq_%(rI z5rpgBxGiJjKOl7T-cF84>&6G z(d>CXT({e*ECP6%+=3x}#VJ4yd#>#WjFK}~cl?x01l^$2_MlNBa9F;3DFA+$o;JDK zJ)d;@=ZwEl`Pwq6)Ie|NEz${o@NnOHXjsomS$<5}&sk$D@;T`M%XftxwpY&sX@~rc zv=LMpL_-|)K<5uIGFB(C&;)j&Q8#_`4cchjOY4VJlYBsNZ+SRd{CqTVeKwYBjbca>!q|76sgw93 zrA4%3E-AG7UYg1_d)s!2QK1BtE6#=ZRIPnOOgaf#8GaSw1C6x&+E|4u3ul`UU0ZdP zH>UVXI0wo6kMBA&{1wF0Fuyod58L@=+Q3xuBt1XIFzyN$BOg%XvgIAAKR>c_sH_#f zl{gL|TauUp-MY~vB%#G?`lKDLAqlwgkz|IUvB)VT>5Q2qmrV~wPBJ0Dc9AB5wC{UO z!*j=Gs3b4{lwlEMy=1y5J)7H>J@(sXb0wFFlmUmy^l_GYCR9{D zCdSOsL8S~qJPLWIKW9mBrT;Y(+s!o_*!+O%w}dS^*U2dwq{}X`BCS)&-pkCnWm4Vn zPx^U&&md=M(=W$lKp2Jc$0 zxgka`1VN}PiV<$kN8h25JER(0SgZG$ltaau)&ioJ9HcDQ=#(T9;oEaP2%l2B^6?$@l&#OHwW#) zYx->obH6Y7AxN-}yi3Yug8fR!XGtdPzbS0Pudrp6Bn-(Y>NAG3Efi%If)%|l?r4@0 z7nrND=C1^ao9@EU7~9Abj69KnmJ7@P-Qz@qw{evlkhibwVC%UX zgXPl)6G((`vn1~&AO-G@xVG_{K#CR3yZuK&yvT5S#Q!v37u?fwT815`yh3nKnBblSr%1lvVL!RxzF@*& z(Sx+hAy2c|)>R?t_i7^8U-svvg(gCHzU1IiBKe2>*P?)*EXnAR0)7g*D}H{2MJ!Tx zF+JpS9Q0gF-BMI6 z4<(2>mo~i;J-sxxrQ-AMAt`+b_r;WDQFp3gAwpHYjH!4s{3erSKoqxzsZCK2;b4j- zL3U1i%G1H*kv>U(Uz_008_%KA)talpF^Z?{6e+(8a$WrxdYCl202BMMFET$1ef>wt zX^;Mta&LsUqR6f?_#w5&4x6QTz4TLfu(`k=C1tKag`Xrp<$o-il0J+Eb7?nBBH!_m zIl&S|_ufOM4C*AZxI5q4Nqg8ILqx>~3e~r+y%POW>p+E;ms?id(emW9v}80ZpSRU$ zVlSer?;#b{a6;Bab#jfEz^0ftkT(%w}n{9<<0%|KjBMB)#@*~p{rb^o*Q>PH=?-^;W zPln%qL3TTzZd~$LGiQGcxBW8ZMD_-CxEXkdjPqU^hntV@-OZO*PxFmu&!;}*@qvWG z5&uy)C;Z)Qw7=aKh2b4PwqkGI-1pC?(VV+sl@K-QXZrcY)ZAc;N146GZ1=c*69Qk0 z9g6`IK;T>__jdT%6Ry?1JMrCn#fpRw)*Br=U~8Obdnv+#=x)zi&w)|{f`s1Z zk&wpr0Zu-2f2GZ(CQHsTUNkdAWgZLU-Ne%0ZM1eiun&Fhv8cw{yeR++EK#9=5k#`- z3Y!3072%3~pH-0ES}~DwnDk=dwS?%{$7C5L%fvdT9zwa}z4X>BzJLTWeu%ny;4#gA zoqH1b_TrM0;F%pt-}qsTZY=z=ar8^SI(8Xb%ZxjVQLS6_@{4*sNzVA5RkGa)84S1| zmdL-R`y2p=#vtX0>d}Tz*dBZWz*K^h(`l?si=*1>hkMc$EwN>~ceLji0E4SbNGsDP z{P^)0il2lpRN3bVHt(>QwBAVNY>z_}MnxPV+*}FcD0Gl_~I9I-p<>9kC z)|^EY$B`Rn{Eu@Zl%0WL_4!D5J4lsuVpc0{*EW!2sivwoTWsnP-$m>T-s;j>E|^&2 z7xfA>Kzqx+x(+UyVIT(BpN#=^t<7fo`MOVWK41OIiqj9<;&fo8Wa*`vw-!Dv>N@e@ zKz|_H;EjYfDX-XZz;;zv@Hq68DKVZ5^Jt1g4)Q*-(fmHpu?BK8-zHQ&a2>Y2?*Lkh zlKz+DF$@U5zQ;%@AbD}yGQ%N9W{l-Ax&h&y&Vn-rEC7kQMW@OTu$%{euI%Omzn;Qi zJr%z-Itz9OvfDN%emg>dAkE1QdmLeK)R3y~W-wSWf!JD}?ezz*|r|>|!c6wlBlAXB{Lney)VqK^~t9u_@ zm9^MSPZHGy`>unA-2Tx?f0@0yYZLlq)OKrfcJt1+aom@ZW+WtKrgRj#_4uRMve8-5 zhtB;by9=8?PL)~6O=J=KU;XQCrhxDe>+Qx~G0sVgNc>mzkj9owFvd09fyKzMp7WRX z*h|=C95jj%V?VCIh<^{tV^%(&vB;pn>7(EblU3M+0Mgz*R7Wa9OQ&wwahIsZFkRD4 zlp7x=KC^?)Mhh0j9;$UHwMnsDm@%c~m-NdO&R8D!CmLz8*%ivNX#fk^wSGOD!U!)} zw7PwPOHD*-@07oIZGdXF(AOJ&myNmUj7H5e-Ml-J#RkkAN2d;x6JDWHxwjc z-3`pRbjOaeV4NzBIge43bIUQqMJi=$bv_#@&OGe`-xKTtr+HDCgT-j^#9zkNP9Hk1 z3$v_>q1INHqXCwZ2u|4F3(KeQ4bZO%UO)OMUy1kApM&pWj?9AcpfOzC*v@kO7}2BHZ{F{Nsw8Ri z9Y4p~qE&}-3k6|=Wv|&HM zX@usZK7x^^CqZBU8Qas*-n0cIs(u-te4`c1>tCd{nr1j@HwteLOG_CetuM#K6+Ce;hV>bjEo3o)e58*YK zqIJo34b#n1E14;|(+n`3k90;ynzPmh5<(k-dkztMCRX_^H3WqLgh7^P=^fe^M+_;@ zi=Tjvr>v`E-s8XDHx=5-axVG)$?T-l^tAH5<=Xll=@DVMZK6_k8)er1d~o|+;6Jza z7kPWg>@@8SZoe%&-P#9td;khIGL)D7_ZK%id*0`)x1L)IFbsy(vvoM-9j;$yL$f*( zNf4?qk=%2(gx{~V+BzkxP1yl)Hm}vVj*$w~LY%FaWaLs@9B{uOvcnIG)xP0tsIL93 zq33?^PWeV12!6fsv2k0OhX*#`K}df&H^oZmv8sKi$z{-GZl>M0bU{-f7cTn}O+D3L zftW9??S<|0unGJaUkDqn_iovw0f>^pIPVZ-P-fi%!g)$45kvFYx}BnGMJ))OUdn!a zrCh}K>8yQ$HEppljq|n2R?@bE5Na&*QF<9tAxHDAtYPLv%6N4G9tb^Q9$O5Ag|ac@-^?ox}T{+bO)2Uz$y2vmZE|13}9JiWErVC&f(s(_1h zN`Ky-n145xrB1XQ5Y6}=VwYi;5eHpD1Jd>hU3s% z7UIhnK<2f0t#jb2)rE|gtbQZ+Z5Ah z-uSsx8frl(7ep{E2GN~Ia=6p9l~ zfee7{BRXRx)(`nh%o(p%q@yyrjm-tO3*`NNTGb%kUkYlr8>{;tum~wlyF?D%Mq|07 z;+ji%qagmW`+pN^6hW~3c;SR^E}hn;x7>yf>BH9TL%@FO&GHFcS*r}Pnhhc{5K zZA}^sxG4bD3sl9Zf@_$o=fQF#o~Jse8x9vvvOR!|_Of)C5gu&Bt}~5a>&cz~c(|QOlInR~{gof_Ys zCSt5QT)mpb{QPPkiv=Z3L8O}E$;$L!AlI=&E`tg4fu#y70{s`u8DuG6aoDN^A?Wj$ zzp!PQ59q>**r_&bqCD9X*NYY)5@B8@Ol|Dl05<1)0D;)s1ZBI{JsG`aHM8M+;c z&?++&j#UIZ27<&0dZqW5SwW)?>C48JtZeU57ZKS&L#|(JV zRh7$V0-iq82|G2qeqt@YDyj&Eq~X^0%`Fs5r_-q}HBrP-&(f$$SN>=k9|Qf+Q5Lm6 z_n70U6)s(yvFl?Lp~E>M2r=6_1g3pa)n?;kx+IUO^P5a5eB`!o$ZT_LB?tQGl|Uc7 zBg}G&1@m+X=7z)kD`1{8L?0*AOvr)0eI?KeqrV%b4YxqOT!MPdp}tHE?Bng71;IV} zU2Z%fwewSLqBKz@q?xeMVN}AK)eBy*@;a0h1*$hMN%xjL5M@gSEcec-N1PVZ8zL&A z9*gL2-j4oq{?~_HNW6KnsC;i+;nANwDyN*Xz!NaFCjU74lcPP2a^8Gk^`yCu$)+7W zDJAy-+6*6IKB+q`*fUICgGcz!f!le*)OlzyvpbHcNxHe2=eZ{K%N* z_bop%S@rXdABsMjvjLZ+m0ubT`_y8q{tmilfKyt^3cHf+%5WCBl>w_V@L_caRI-Z6 zYo^&bN#No6^X@Vr#)+bZ$ryzY?Kn8G*J?M#$sLhEZla6D`fw~Kxd?0$GW^I40eprRfa&M$9I(uVZLc&b~-g0Z7h*y zWKYgkO~Evl+FEo^mg8U0oi@%nG%4-VIJSeyX=B+NiSN|Z8tD#2@I@oYMbA6-FXbnZ z28~IoQL7Nn;%^sUeD-xjsmiJ#+tv2V-GSit;xh6o6}6T5X?u{i!TekMK5IPE@_5EP z5#c^eyXDQjft-G1+X!{nsBd;mWQ^@MV(hHH`o8tbbA$N6P9#hwSG06drU|D+LIsZ} zRY7@ddhQ$Gu~s7Z-Y=fCFIx|^J!t&W-ob&_@chV{gj3izyYr+TZl9jYno}U9zL};6 z5wuTJ-9>l6?v}>Bimk|7t20xPc#ggWBJxay9}gbeQO%ZK>#o@=UV5Wj?R!b0-p z6U5bF`&dKH@S!aog5h#h-Y>hvy5ldjx9z{v-w*s2CTu@qTfms0GkGD$dVbzH=ZU}iPPGekdp)72 z?san(qc-rEemPP(PtTjR%g=t#da?Eri)49(5*X(ROa$56Hs9XSrwq#^qq{i<(~HNk_-3+Z-0!;g*w=` zp5;Uv|HB@b@>f^e8TszVH&6cJ#ts_t$)%lu++K26=M1LSo)RtB5FuLbl#MS|+X||5 zC%zfQ#f7VyzWIu12X^o{11`B!ZUg(U9Z3Tu&ulvLMN6CSLZ6rF;ki66FX3{_PHfD$ zR&*Y`^sg4sZ#bK+Uh{TI$C?(|+um#}B%L1n#z6dS%7sI$3{ad~_^I`r+@UnKsQ{)A z4%04n2!OAt;yxnOZYJDYviQ^bvi->}7Fe>KN4CP~-UexO=P{m9-*%gyU**{4>P&cL z{o0QumFUx@8j_pwEO`bm0#RhSL2Ji*ddvnlU*BL39Dv?)>%O5r*;&4BE?EZXzAabQ z=9C@BKK?C_gk>&Mq_A?k*_cLsF#oHiG zzVaG+uU-Oy7)7>2Z;#0nSq*FpvziRMcWx)pQZ9%QKf4Rvonaf!ri;wk<=6~sh0@?j zm#i38dxIN-$h-Khn;q0HZiYBQ^pJ#opFCWMYflk8n~js^`gBLFHkU0U4NK2Z^+X$e z`v`qu84m(UFBmMCl%=F61fFPok^u^bmp77B#6a``y=K$Cb@J(K~q0PanX3+FR;Db zqj&1*Ef}Bfsu+6bJedRQ0Q$%+u$zsC*7m#&O3Cj*bgm92lLeaWHfH$(Q=nz}BH!k1 z(Kv97IFYIG{V43_C4`|PLU7(E%lz(Rvx2l@b*>Am<63>umDIv2FmfhrF^W#S$W>2y zDa*`P$yHk-A*=hqO!yS$pv1ae;2G<6?h4!U#jp5*dPGUsN2)F`WT}V_oVQLaE3{B5 zV+s8bs3Fz=IYlgPHm2>&%G8S29#*H_#lY<`DAkzXCG3pVJNLL+0KGfy2%1_IE#D^b za{^quk`wM{lgZJzr>>=V$~ePh=RUj&Q957rwnef>zAe?g(7s34E|=*ZdUhNe+J+Au zT`u55Wl@A%zJLd~V#t1Ai;7CCTy>7S^r8nJEJH1C<@i#QmlZpq_;0KQM~0CK>fI{f zqW~D9J()~W#$~_p+!m2PwKt6OT);&2l#+falVh<0x~g5I^UbX4i3pI_fMQ4bNs$51 zk*jQi%cFS=-FZx=6xHZ)u6eU@{1LIlS3eB_qd}lFIeNk6l~htX`$iCuEE8A`2E@}x zGB`2bk=uAOS_#uKYe%NC%t%d7q>+`?z-#m}OS)l=x=0qPw|sSx-6gb&KH>Zg((8mp zHnEJgL7~yh^gg60jSl2mdpT`-Y<)k2vRS$7jzq~#$8M=!KO)b3goHpIz@joqDLG)J zjXF1OSeDkY6inT@Kag6vY*S%H-4jpMpCv$`tU~K|TfF#ekW2+6z0r`&>Z%`ZIu1{> z+Ns_yTAxdu)zhpy_&E3;e{toy9ZZswC!Zu?GZC`~LocJJ&h6M`&g`1!}pU0{>0ku;|ur@ zzfksf!RIy!2HBi?1MsISGXTHaxc;oQzWTgA4cmYvSIV;`r@F9kEHaHAQvxTspt!M> z@u*>_&qE#b1dr5bI7)Ab@@zMrZJ?*mT_a?#BF7EA1IScP-~*LM5MlEKt#=#q_UYW` zbz60ZaPX%GGF{`_WzKAFH74!biO(oC0Qbq5=R`kGES61>oQ z4*pam9iJ|eLcZU)wok9ti?-G^etJJox-Wb9WYe8YABkgbHy-(XyYXQE#)>QsS`lF? z<7b2$q6B5Evo^Lic&lDpPUmnm4zUR{wJ}pS8}kO@+TMb1{Ot>Fkd^;l7xC z%q9^iaJlwR-W9|=N;$(X*Z$NcUP+u{T4Nj4wUBvc?@L*bAZuu`f=FZ&_ao^c?v8{C zfgUYsWI1J4YANg0bx^JEHlQCX$Z?p68P#O-c4Xi0@ zp}kJ0xGK!k^@)$!PLkTpTeu+u7Y-Sk?CPl(MlOe0#uX||vvfBm>qztZZHUNVze}D8 zn*hPzAR&Cc_j-Rg4s*41B~kLP%p%`sJ&k3k|Q#c9XUag;MFnMh7mnI2J#=FqRg|I-?>(i0Jbe5|gtt%eYst#tn2%_|+i z#7e8b(n`zfHdA2W>YBUw=GD!n8HxR`UfqyEISy>2(iLclvy_v;Df4>HIwnd*ldb70 zzV{>WklvQGik#oGp_#llEE19V+`G-s5cCskE)8NjIrA1psto^NGh=K&SmK?zS|YR| zq2q2zer|uvLqnOqRb=gia_Bis>a$xM*dn49KFREkBAD0on3o3Vh4kx3T+Zd=(gB7N-3}v!6F}3*s+y*m=OWetG}Qk^Qh4=@ z4kY`BP3VFN$%tF5PN<-6|A`4X6tQ7pXf!9T=0X$+9VZ^aFFW&|zd2Esm>cqt5j+eD z6B)fe5Zo*+Yw#z``f3iJ<0Cfw$Kmi-FY9PRy$V8IuCD7J5NZ@Cd)18Ix~_s>BI2=j zT?y1k%nn=E!;e8wchz+bGx#m*y2M9pj=u^E;|icL<}`!b?CRx`kXVUW|6o#auw>Yz z@OogoJy#}FP=ebiGO^F2D51nNx55 z4*7(+?;JcsGUxCGK0hTT`^_wih4$T4GBc+;q*Wq29Y1e*y7*1K@BQ0lMN zS9`Tk!CL^2!}#g^yISl{RSB;UWO%Kv2*+<2;brcbc|BUokSYDP2rZ%plKcXGaaIa6 zu+Pj-SrnPOu*lXIX4L)+f>bEA#S%qFxja&{3i^*DUHUj^$0s|CcAPykU8eqP9S2+4 z!kh}Du4qt?rxt8R!%YGv}$S01{^ zuDcNuic^*vFuPRqRjd>%TPs@h0?Z0J9_p0Dg`Fc-v_PXp(;j}>GL;eonpzHcc)|V z>eOrBQV#Qjjk4q+S1(2}N^)|ua77T)Z)X;ex;1^EHv9hKWgUE)04LJP&Wq=Z98y#$ zdT;?+Mu=9+Sh1wEsv%w@*3J#Qa*)MOZ~0Lm>Cxgiv`&e6>rm=*g3;7En^Se|a!^Wo z!2{xh)ZZNISOVhN7q(yt1`=H9SCKGyg|5JZPd-%gbs&bhNru+iKh^2H1LvQy%4gZ> z`48>@I|Muj;N`#GyZudiXP zJBTLNiuZq?wVrC~pTwkI%UTO8WO#SZ-yt*KjkO{o{lZ#8?r7F3>VNnxsv~5ZI)&Y# zzqqO6m6dAk&s+?I*2w8=TqdnK?3^)u9*wOx_0%Lc^(>4`8Y6JUzD~Hk5nz{tRSK}@ z8tntGOhsWe<+QJUd?Up!_LZm9i_v8zjrj_XD0pJO)@FIi;=*I)e@ zHtAp(c3v2WV>**$eKVFP;A8Lp)J5~Sc+S^*3^Rgq)%yrtvpUFo`eP&FMbWupia0^_ z_Jblnjp1vAa2Rc_Kw=Y?*z_E}%Mz%QML=!<#FNfCCJUml2+1HrC6iC@rOpMAZ|g2Q zEUKhtoFR{Av=ogseFp<&M4goXd~WSr;3q~%0_1g;IeulF>8@!%+iLG(AgdO8LgsfB zNPclZ!9*cXr2jTo#=J`IeNS)7FWH&4%OCP?3Dv?`?eILye7xIt#cQT5{&)pOXuCg` zm-z(U4gcQ?RCi20>{V-T{BH%=aFY>J%LA{`Wt1@q=TD-ZlkD%V&FUQcq7oTHoyC5E z{ND)+I?rd>RX0d9>HLZ0oc~E?C??%swrz|-Tw$5hev)-R+{MqVpEoLN!5-4s6}2k( zY6<=Y=X+eqSF25P&J0gL9<*5y)!)UXA7(#{NGHqtAGf~|xft>sid|W3JHniro4+ev z`h6fy^gXi~Ru28=xjK&-CFU@)WiF~z8DZAf4x8sx%B6Qkwt3?s6eR@d0v~8%yTKZ zlSNJ^C74GCEF+yjf@LO?W-p{NFzlMo{;kfuCuQ`_HKWUcQyI3ZZuZyqmy4V?2M0LM zqD|p^AIS5@USS8*fz-yEUDgv;-M6K$-MJ~4x-eUPVZzs_d9E@nct4z0k&X#k@R0Jb zMTl*y(pn5ui;xc~3oP<%xRPf~PW>+>M^4;t*UhnYKiZ##Kb^L-WRExMX2I^UgfIxg zyofU1{fPk;hJNUl8G80p#?Y@>xj90Hg{7N+V`x=I21mZ+p!G46V~aeFgO@0AE(nH4 zAcHbwJB}ZL%=-=z8+#h+B$P_71foTbu;Nb1Fp3@FL*ybn`e)*vR3GE#??VjcO0O=# zwQ~ot2*<=skV&l`2}}kw|5TF5%ieDG9kh!1v36AMo$a7t=xspKn>;eTb}YzLDec zmib1W+~1uq2|mF6ruj;09dppMLeak2{U(a`JKr;kmXPR^Wf?`k+R$*qd%ym?vTSXC zxkL*I0azkjK{qx!fsQw!>uFh^peR zUiIT9G}^3PrCjb8wV`zuE=yk_R==qI{J(1%IJ15$_RA^5B9!{_%6Cp8xk-H- z*+J~g!z*A>+c~Cti+wPlouAkF_3XgpA;RwxdK5 zDA=BG7T_19Gf-^c)5AT!7gRXU8jA5n^R=#QyJ+*7jT5bn`fHz%4W_>t-3hBDm0C>U z(c)>hYv0i7YkNbP29fnVhsAgwwE;_q&3x&Hsikleozye3%bDfIi=w=&A4lg!4&i@~ zw&Vi`{gz%G rjPTB=dH_|T_vJr9mE$P3bKf6T6BwQBW)DOa%Uhs&%88gdkQv!e zx3e6G*K5kgfyi|)w5MMbHTwNRwOmqX)Hjf=jH$mk!HF*WnbK+MB_@~2x<1koa~a!~ zNoTb67fDTF1loipA8Iw4;ixJJd03IMacW-;vo$=(m?wPZ+MZ0T*ks};W8N|t_to-w z3E3Mn6sXJN$Y*z~-&H>6t5%>go9rv(^T0m-qI{lZ1M5FoJkKF>#7C!;WWdd)FCLOgpO&9LsnjtePWV6T5xJTHJM$)WQ##rHOM%|y%;bA1ZWfjH zQXtT9CNobl0KrDJJH0m81j)6XSbp4#<~L;2c{Stp$KST4H$k+{W~F~F-BRpa@mD+HW7sFHvhVlQUCuG(pBL>ff?tL$!x_Hk#fG(=M{^UsQ;<>`4o* z|5ShFkb+(NkmBv1NcqrMe@n_o@aK=E{GyxaW7^;~v?5pWKTyoSXgk&YUgNT?RV6&^ z9?5O~Mv51eymiUq{>#%jzXMcSsfSQ`~d9aNimEm44;OHd0B>efs@`v@Qa5 zt(9jox)5$w`|}IM__GV{SC>atJf%o_=GC+=Rf)KfRehzlq#_DdyO6r4HPkO&dPcnhiyUw%Lx@gO|h`_Unj1$f!kELsO2}7oRfAavL8^}c7ZZ(@O?|@o zPXrQ~!EyJ>iZ~m4U3RbS4EOOWB{X5N-l|vBd|1t{R|r=hC+z&Q->-1Io^>F6RKv3Y z89Hk6OAPpxy1MH7>(Raeuql_$&Ag*8db4TN{B&Rpk|kY;a3gDu%OY6z4eE~4xPAQ7 zC6g$u7~T_mOdd$y*=1{|FlMu(C2#F9Y)i}cB2t^Z5c%H#A*XaPqbt>}(;MM{j zVC3=lOOvl&Res*C$usfPJ;Sb*9Eqav5_P&z1YECAeaFm5nE^k#PrAM!zjG11@Al$~ z3U3DetJxvn%9I{hz4|0cb(XZxtmQ6t(l?=1l0?V+Fs7-%7eKq9LiVJxhCsHZj zj-eD29U%Lwj@ci$=tw;qbe4obQOpeGjU|kZ(qo*5oyLlZ7bpJtXfsC}JcM+bni}TM z8##QRAx9gr=WV`Ad`q-NzP1;DLhuJU98@x+eCI3|yCtSb+p7>b!bm`vDZ$r-b+Feuma1ej}0&ljXqk1b<~BO#6+ivb50k#;M{KUglA&%!h}|+3C?^)rao^z(e+~O&%z4##FSp9KPSsFY5W6dz`VYQd`67Dg%m!qt_aUh?#a}j?ep9jB_(9K3eWql$ z@a8gk&{Zd~2R7}7>6Gq-6|A3Luun!=~B}lnvK?-VCO6|Tw2SE z&W%SL?&G?R_6NCOw{e&4+__!J=V6ELDgI8a6m=OeXT_7P!f5M^Lgk^ODXG3}7G!sp zi)vW4jS^UxCz|`x>54w+IFye>(rCGMZ6(e*M=PfTDnoWs?%diBlj<0IAoGe&wi~y0 z)7edP^Ab5PLdq5x@?A_cEb)hXYxIEjlj&=E<1jfT7^Dv_oW0kU5DaLaNypFrBxSpC zaehtk7l`)f-Mx`8c*c4Xrg^o6))_IW7R8)Lk?H0z&&gjTVn zqLaXTmuDt}JlXy+NSRX50{tP0D$q~dd#V2BVFt!^DZZ!WV(|`S1!{^l#Z9V!i7Tvq z(J6wA?Cw^(uLTp0uESFqh9`GYYEhJr^ya+sj@L%AYsXp_KV1@_aF};iWQge>6zx}2 zrY131<*2hYg$Jko4^w8-{Lu8W(5X)Xy(y|N#0bY8FwMv3>-N-F3D-guF8jikuRmT1 z1bMu&oUH0oTGL#1X3Xm>5b7eZ1kLcH7)f(f!?T72wvMhvdo zXGbjd|M_*zIk>p4M(1MtBMZ~76&=1i^8&I^gG<3-e0)YfT!32G-wvLx-Fvg%4us;Y zBFZS@v?Ue1<7V0U_R9!BhB(e8X@DN$sMQ+MN5$wzV;V0%W|H_P`pREUvCSc?7 z@H!r(KKam5wVPWRa zRHM|_U7|E*$iV2k$|Atv@zSD%sR#(cspTD|Nr>*~%mBQ8gTPwArC==nF?{Z=GPPc8D zO+>rtWBB@jIl~2l%MG-NBjzv^f?Exge%k_byA}V*rD_cG8O_wOYz(kfoD&v`3 zk9#Ejh`U~*qHEleeZo`J()uOh&XwEwvqd3FVF!2miD%I?(hCr4e6PEmJQhF@7fctN zZSWt?_OaD$R;|s>FB1`0$U7Rp-QP~RSgtmV+6k5Yf6Qx*d=)u5eM)#-JIRE-44KfA z@9njwQFU93XBs`msagQ_t_%{|y|i(i)RG+;hK;B@tfqXVH#@1e^^>RT2)?1dsRkVA zlvs%H%_pEw{f^QJ*Xy@#17Ulxg7r7dj9P~3`+Bn(lLg&fFtm!k3h4HW(2C_w>AO(e zXm|i*34TXD@ARDSeH+uvnas%=b!7I5k)*i~m1bD!1mC5$UeAQwaF~r`Rb+|9y5!1PlIuv{NjKIVfh41*0Ri+x2Xp z4E>+Yf`w7FNvft}_5HtPvn-&`ee9z@(Ck4F|Fc?hm!vuWI@c!M4O7~??*PA&4$4n|9r8maNx=T_G;_PBMv-aJJ0Jg>wjN1 zy6qsg7S1fotn(Oq(og&)JT#f=hK~eE?qRVVI*wGC1G|V7leo2*F6TKk>35wTz*J>&NaK{O zgAWJk<~D)Gc4Iz?tfhOu9^E!@1$g@HmVM-IV}-;6B0+xNsqnM9WQifV@)cYhC8vOE zAtC}%-_H19#xw~Pzo%`Y%$l#h-VhEg&3b+MqIA!+hc}LCra3EbsC}AF5@EH@>Eg=; zxBsj+$O9mgQKnRVi~t}e5ctS+@5>ifuZc6-kn-C^@6u$G>-qMrqp z0yHvpVrh?1#7-j;k0)c1miWsQcb7}QThGZNssBj7uYzx5>v>1uxlc--4$FFx+}oiF zB|yv8B4n%BujP_7wk+OLo`yR~)VO;{2;PA8N?L;1Y!NW}Coa3*v~-Ei1C#;+_8$#j*oTQ7p0!02KP-cRe;=oL46Yc57=}S#-9Bs4J#MetU#;F2%jNco zFPCj|jdPtseV|OslwTp>P#txQw#@MLaZ05>?K%MCn9WBE#&{m*jBQ{SSSM1Ly~O3l zTseig-@?mL81pn58^ln>NDj2T)-ybBoT0wd$MvLlFjaR;QI$~pLCHxsKoO@E_hg~B zt_NB;M(v-UvlK9{K_M?m^qS6wfQgXRfUVh6R9W_!fWJp3+vmO#bG9Ft#ml4vBCMr3 z6iLnWL%gdZQp{}NlvsQSFk~bejv_dO`f{wM|-#ON>fZ&JR|d zk!pCrxvE=|F1w9Spm1B8Q-aZU^H%S6{r_Dy-R9Wo-e`QYMq3zIY|@H$&k%ReHD)Mw zRc;hL@q^`Xt7vPM!cwr8_RvVfG-bGUiKT`TGhC#cq+oXK1vb0Qdeg7&tk;WiRZ%`n zHSM)sOn)p|HdyESlRj!ad_rEN_sugCD8A)j`pzA@3V}=82coa3pb^s4Uv34 zqfFe!4u>DGW-qY}nD7djptRq9@cKG7Ev87j-G)P9TM|B-CxjB;7~gkiz^uzE;dqmy zbmYlb46?^vwRf9iltFf!SZ$xmxrIMH*E5Dy0PA{!=y{y$dH9r_dw@!2Kl!*%JoQ>cZTP(oD#xbnv*f~Rdk8_bqWK65qDpnFw@DtEgtMz3|FN@ zdoD3AXnmNH2ZQ!5<_VWib~(wvGX=z!sMJNM4^u|^9qMH?jli3OQ_1AoWErCn!2M@R z)4)!5>rO29>rO07>q>s%9AV1c9Q96k>nHg`?1FJ_(uCk;a$ZFFmE+gaM!oXV^B|AW zF@6Zf@ojILI=c_?6zVlSA~*YFgnxC+S7?j$(LR$DK)5h>QQvd@XD57y`A)`>Ml&Iw ze>PqJ*-~4H?CE^-&cGp_CdRmyqAmLFX+y|7M2+9mJ!l+K+Ux_HLTul2&BY zBx+@BA=UYdx$JJDncY)EsQm{~tE4=GSBSYagxGU>Em?1)9JHu25c1wM%@}rDe|ElB z)O3s)o4#uveo6MKlpJanh}q*E)1-~+9Vc;MqXZaaq|W-1B;6UZM7Jyp@oj@fZHHG3 zdLWJZXM;w0k5>%3FK+s?K_^g-6K>ufW|i;j(3|-Z193WR4M$XXeRY2kFBfkhdoYSB zv@-?AD*^HusWmj6Qz~!9dH=8(aFk zvx#IzX~Dt%b9Gqo*UVy!vlM8?=QY=iPoG^gK7V%2c(_h1SE^&4Jk(*SwW!9!MOh<1 zbRiAlzv-eok=JQBV!2*y6q@Y&3Q@iVE7_xu_Z)A6s5(R;L|cQ*6+S$WJx*7R#TyNa z0!0a0Im7OqCDX1`{a}zIVqjzqbk@k)2w2&wQ+8a*Q&NvPS13mw z;U%h+BvRbSsS*$(rBWBjbK3lY*Ji${?PFbAEiRSqiTBU8o@k^HEWWnBd9M5B!~)Oy zW`0GLP9X2^rk5+nG%BE4RZ<3mrqb?KtL7)smri5<^9e0EBl}AZz=7}7P2<*y zZ;tsZv|c3BR~DIAPB?z7Hz&LaOT*t>XK&8(H}jP@7kO`s{^mLR=888$(OI(WZyvKZ zH@xw1+oZi|O(qxDD{6e32;e)S^YT4rX(zbu@}7=pMl5A9>*;|vp!A^U&o8s*PdxXT zobqOykk$DS!tUMi|awv5(b%dSM>wJLLDNL-&3xaPuA|@H4ZcP-sVf}*SX*! z?6vkq9VBY8-^H-@FtFTe41@7N%w?ORnR3Z@xyJ494CD{Ff?e==SEbF6!aZnrMuBd3 ztY7j2(s7V%UZIz6*rwpc`XaQ2%nFMO(Z6rocbVzC;9Jj%$8i;?cUJJ=+%>||*J=8U zs0O0Ym~0pxqh?u14=4CKm%)ea%mKUFQ_BNpZ#_Gk6fD!QR0jey3>J4^-fvCE@Kgq@ zDYG|Twe>l(c(k9kIx<%7U(*v518cfTLc@?HC1TCn1Cxu~q|67k7b*pw7s_~^{vV$I z4xVQ~tn@0;DA99>{db_}5i;e~GRiNutL2Xx8HIJE`j;+m{!MybD&u+f-ROA)pT8Q< zu5AC$;&}qZ%6?_?yY*z?_#W_ zzgN@q47SY-KBFm}ep{(VZa_ZTYWdgk%zBHO|IEyZ+qYh0<{Y!U1vXlKx8-${>$S^K zBKtdjVH$es%_TpK@N$DIGd4NB$%~Ce4o(iSOcn^e^V%XU-FxqBlx=bXat}zpDkVPx&r24Pp<_z2v?BgSTzK>k+J%!gIr)1BLj~pW}d88Rdgy0ZMoFyeQ zUIZjM)3JP`GjH?g6VH4a%2UxOFX9u9hc}HmP05KTyCeFW|BYYHo~FbQWGV8VwY_su zr{2V#5x>|We?I99uXXx!IUxlZ0DVhbo2LX0ZATzIkO*JDuHO=$BV7Vm)93%k-kb2X zl_Yt)UqxNrcfgH{)p)6%ntmlAQy8<@K-n(4E+vEjfsn8yHoN`Z@AHqyJe!X2(pB9( z@9)<17@c!6BO@bY%gD$~PVi#7ZbulddbHzYa;-~hF-PM>uR@^^jP{FVhRo!MA9m|K zi|&=jxWV?g-gwOdL?Ilq{55M5f8>fN5f{%-wzbNKHPIg$WeuRfn5QmQy{v?CrfP7pGqO@xqREAEO0H`X|k8f~{)eNwa3 zs1LQ1VaT`FtkKUlAigek(n#&jkfr~k`V4DIBG6Tm4RuT$ne_VY0imiS8R|U`B$-?K zlO09(tk>~)!TB>I!mT#nSGU43$bQl#2(xtN`PcdH{abB}%wh|No1it; z`~21FO&2|&zk=SYJ+d9t8@4>SnLQlvR7X(laumo`wP{O9j>*-k(Xlv=oJ|whC zqu&qym#J{K13}jZ3}O5{V+%(y_F71Sy{owR+{zP2d!v;Q*_l+WxcKLeGy1kpczj9= zHSvURG#TrZC-@(CDvf94`BJOSX(Vvip$V)4{osk3WYp^BsI5I&GH&0P;jehVuEUur zwBd*7WD^77Q{A8r3wyTWdcLR|;`e9>&HV`hw5n?yF3I3}zNTW54V^E^h}coin|;oW zvn1hR-yeVxp0UwSGwN3>sa2jW{RFBP}f3l74&jQ z$znXHC1^pv<`RaIfqwOXra+UCR*gZ&wA+TM_w%$yTT3>v%A!}{I7U^uh*bnFX+ln0 zC#ms}8t`tXcFZWN^=G03IiUj3jfW&#BMF2ol8?PbvMp8NDz=!f(8AP36m|M14W89b zWO#rjYA@~c*TLcUg0SMyEI_+*LD`4q24&kV-Dprm5HHzO=TI{ z+mzHeW3AY7pIHaEp7`KsAM*UJ?__9`1Y=c6+Vn<}j>(_yCv6_%iO}Y8jr8(_ zu-u1{BaE|s0>L{Ghh`of0fg4Mt)#mQT-^=81vdh?<(NWsyN@+aQ0NxMRvu7-fD})x zJwpc=o8`KpoNR5BmywiLxpoBtzb;1YX{p6Y-SQ7-P;m2d*Cm z?kd8R!oKE#ZkbB8?Td{M?qqG;^0$Fj?G8K@{OTDVOZ`Ge%%Q9Hyg~Ib>420_?7-Q3 zBiD-o9k&jYHx__zozY0PF&!fn)x`3lw{`dUlF&mxnv7C1I-|n)P8^*+N+unhN9e{9 zQO`?(v;z*?7Rnn9u~vQ4KEpV!R(}cmI2RbD>~2$Snhg6cxf4V_f~J);vu?-Uahlwa z#Z^$ZrL@L~2g3ofRXsx`dsuvGK_NaKda%<)e$){Wb6DJN{>sV*T5bYD~D{-KD(vE9_;6n6fN`PFgS zR=jfMbaT%3rast&(jvG3*m;HPa>4D$wWV!rH{Y&bd_jVb_>iTtOw&I3hrs4zR98d5 z)DTs%*nv<})3eW{!S9~du3^K~>X9V8el)=RkoDJQm>atbCVcChO$J5U96G07@uc?H z`+$^Q)h~^Q<4ma~!tOBfuC9L288JNVWwLxuYwRhZc2gg!etvy9yEW-d{hAU9bDk14 zK=87~(|x}P@j~rAba!=b;I&`1P{F5gx`qW~)gIy8(1+2=JTuZ1tMO{)eQg4iJvO&| zHW5${Bz%P?+*4DjcK!KyLgXp>M|R8uKxnLg*U{qQ@hod4LJ+*C@ky1jG+gG#$F@bW z7#oP6;t^S`AaFSmF+!<+JV6!|e5N$tmQK!`tQBz3YW)N5Dd1zAo{07Dnz6|+G1Ciw zXfj@5J1K_Zlbzq8H*nN(EjOn&R@e*ku|;FCH-ol?I`O+CuMc(WOi9N*S>vlZE?0<% z&A*}JaL(4huiw%|U)}39Mg#6^FIfmhPXdEVlb>`PHimy2Q@cxQqdSSMXBeuPuVd@X zJ^&_M=EAJa<55Z7G3sI>d0WOzvia72kfM+;E`G~#l(R~iFbT3J&e;_4jQlxo5+TBp z`K?fCELnsai%o`{3`mPIU|Ja{4IpXSn~3ZmMr4nl<~sa2-66*d!TdrIlEQT2J)kq< zrsY5-XRczOhZ{@byQ`w*=e|)glOGezIRtaPnBBTPrad*RGp_pn;i%lmans z)0UabC5(OBzy;^ATAzgS8Ekr%=hM#(n~^J^OmOMRV|?tpQtj7IYl<;nVG5Y2^ zAK4&pJYfo~t~T^5sW4{R+wdUq1?aMu?o^Fy^vMEL3P8|4bw)ty(w{=%#-I++^hMJ z-wy-(-|eyF_IV{>vKj-1@WanF&M(3N3}QqCIWx702a+T(g4yteqc1&yC7ig@sm<96 zQ9P05RwD&NuPv@iMK+(<#t_$T!OV(Zjb7h;+JSEb8?K3sUYTc)cw2X*8shC5K6lC< zdtfRxOsU}XR-QzvE1|mUwrM*K>ObRPgfrjm)AjY<_e4WXm22otJKc~&Nr&$~6hYNQ zL=|S#GKV5aLf;?SP>$OI(|#E)cHdz#>-eRl2L^2%?>45?7@`X{U@<-~a6_H5?b3c> z#q(dv$mqH&rjvIW999$>D=cb?O2Cul{&(XE3lOp|enLYU zgpoe>^9_2OZ$KpJX{<5Br32#Fxob=6uraS5+rj0`j7>G|jEJ5ZLnHm1hPG(4`!7El zVU5GX4%CbJ+5t8(LVO2)MOKy~*R~LHpdauXXWxyFo zr&re&%$eDG%x*Y7?p*jsj>WL&4V-jduXB@~j80fAd1RYxw{GpMqjmP7af9bc?fTT5 z&Ygh;&Z--tLjCAHPXZjNp|=zs`sK9+(tmc%7r&Na7_D?{x$MqUG0unv&~Vbigo81# z_D0B^CD50O$}aHkRa=kPLvQiMt}xW*{<;nlscv~7EC!CsIGwq2Q%Bp)5OqXNKhutx^{`=P zatety>oW;k9kI-qIZSS7{#-aV<;pYA*BCu;#%U5l$Gk*m_G<%UF@4l<1rIHk3gE)b z7Ji~6s}~J6OhQ3lD4a7l$S!F0TR1j4kInl#seRzGJ?W`MkVi$QCDFkTCPc*rMYFWQd%9j0@@aFopMJ%=! z?1Y{eA`^=RQz(mIrZih$IwiO|@i;CHFBG`^L4_YSrDEMTyELU7TcEFPpZc3!G_G*0V;I>Gbw9dm}aiQuYPw$gs+WfD)6D~Br57<~rc1v3Fj zYF!|F7-K_60p;bpvlP%tjYB(9wB8^&i5|KJcu$CzK3mGo=A7HyjmL5$>zj|wFmrQg zeOvb1)=6H6&C;f2Gr~JxxOB3cy+-~s2X**;$fq2m#JH@v)2pQ?T_Vqb+2K<@OF0j2 zv#4gITMF|I(}~F$V{%^dXN>s-BzoPpP$(FWVs&?{6968cybFXJ&v-_eeAmzTkG}XJ z7Zu!I4UHeSXuM_V8wf#*u~F|^&XgIhazB<(k9gN6x#;Ek$pLQMi%D0%zi9Mo3$=5? z0#u@^4CBJUsA;y#cjL*KVC9teCOU%eHfWhwW1qCX+E`w(b&a+`ykJd@O1`PS#{!Ck zSqn7!tAk|)LnX)@yW{7&l2?Wf%hp;#zKpeGmr1<|uC+iJne5(*_3^hb>4jrxu?$}X z<33imo6<#w)Si+(s;`{l*35>{=9NpD9mYkZAqa^~9O&-^@uucl?!|ib66+?Eel{^0 z)U;wVx8k8rE2@vjjRiiSZRS?UzcCI5YWk(g2ROn$s12)flfuf^_`ruIi&E5JaGhdw zh>G(jI;W5U@a#UmWD_#pszCayy1kN4uH&>Nnm{Q4cuS13{`KEsXRVg7a~Ri;!Udjd zY^(f5p`y7OW<{7ha^Bf`Z0yGEWH$CMeo|274bcM(FTJ@%WRbL}t`qyrpd~oF!gBq1Xf<~9;H0yk&UV_Geao(U@%oy(oK2iWitdN46gQVpII`(&q7T5Vz{*_02tses~&=2l;>^qR)QX;F$$< z>Nxah*?RSsn_f{YPZeZmG{b>rJmimad4yjowUYB}XCR2YyPIu%0+>pRMv7V-`)EYvfrX>DV^_ACp5>fQcg`w?hU~#x2x6)JL zP4z$(T3%r;U*SZ-NaCi9!=oC}g!Sr)?Yr-UefRG@`udn!Se$l`Ndib7vnw9D?JRh_ zGJI_=oR~=VewiWiOFX1!l!KNS_IL_2o zwCGTn_p6b79|?qo0KpDDJGu%0&LaSr=b1(uqvJv1TOQDhVY<^} zksjS}^d9jONWb0llvyBLyE^0D6zaq(S#}SomzENGlxkdX7js+D;GOFF&V|E2jPNZi z_NG@3zZc<`mWuEP^(DLMa96qAd(W@1)i6IWUTCjSmuTN9@R#4Mo`62jQ{&u!llk{k$s@jdN?^E6m3Jf`UfN|$JGHXK(z)o z-Ce(QKr@T-4_CV@I$5V%Q=iUR0AwuIdI5(LTur0Cxym5f*5Y>3=opfIe9u3H=`k}R z!_*FcxB=B2@&;dB`3V0Kc;z94MM4li$alEx1Kn68PX@pFqP83oU@jT87hHgM#xe!& z;3I?fu-3eBXa^Z+d(|~#!yGU?=4TO>cpc!FFg4i)0;3X}d>umFAb?5x&xV$G(31W0jB?U5W>QCs2BtI=CI~|JMQcN7TT<;P>+N<`S8ub3t zqeq_oyL0_GUTSNSsN8#FuK<53fuAX;24X?AFszX>%PCKV<&B$5S(D7{;E&E5d10<# zZm}Yn4TgD|d-z#5T@$~vnoT~}I&gyaty=3Li3V$LZ-hAcPI7T3(z-7(LM0jKrgD~&BjJO+@@Qcw9s z19sG+9VEUZUsWkzcT}ID60+Ft#>#Zz#esEB-4>x@XK^UR17qvsycbQ5N+}XnqVJ%I z{GB{a1kQu6H((_?Pind(pK~N7v)W9Ynt2!eF4KQcR3SkIT$OOoS z;OoxlUj%FM%M*++aB^q#GeGit5)Sbgjt64?;9mN?^>^##!_dnU{(i2Po_d({lHwku z4ZK9h@gC-`?p}Rp%yXDrht^iBCxjcYgxm{?G69-piAa;hyFY-h7>I>2UO%`FlUOX> zOWTz|$~q1Nis__w%hdEmb<-5!R&;(IpuXfr5hIqD;VXXb`B=i;aVCl4BOiCdW z;dt8kP%k}=Hcdg4(D#V!GA1W0k2(8<5btxjrW@{>Zi*-mYbQ)5)nia#Reh;`Nwf$_ zda05-!Rrk~8B)}j(&kvud{J$5>wV_XsNL5p{l-f#(PjWB@$o>q2dKljwK!|cGuCrw zWG%6DFsT+xwj1*BwiwM*^Ow(pzucYN)-AOd(u?{-_7?0^FRb4CP;V~uC`Wh4aRJn< zwGNRox^`t1uS3O?5HinIEX(3-JgIvY=YrK=4E0aT>RZEP*F*nZPv?AOl^(}lPOP+} z;!UkB=;{->5E7_uC6zaQ8)D;mWa&lvOo_dv(06}sjEL&(_^rq5&%?%*_5QhL9QEfH z{MD#PJ}^&>Z3XB2f|>Obb`jtK{2ZO^QukaU$kgb9#LGRMvb|ww{Cox)D4euW<4?x3)f~{QmHLhOq9EF2yMZPNxasksFYnS zfE%}h+4m$#)d+5ePamZsbA9)$T|=~3A`3b7>fV!KB!Ue1tG=e>-E#Nn0Ut0d*DK4R zgxmZlQfpMOO{!+ha)&E>-LOKj;AFg|-}3u#(lmsDkeL?a%88^kiyNF5x^|hcKK~;xHK!7dd5>ggQr@b=8 z!DJEu)?DoFob-o&2{*lnE=b5 zMy|jlW#lQgKEV%8kMvcU<3a%0Jc~lFGu-eM+E_GUM2b5UN_J)ZK58jTln{@fOq6fX z(Ada!h7~eI(ddqus30N`K@t*Ny7x?570~S0y8Qa1S;Jep(^7qdrVc3%U#KiZn~*2; z2MPgv=GnZHguugyUnK++`7Kc>kdm&@*(G6_KfZ#El%I7bKfGm(<<00c0; zId-quf-KVlAq`Sj2iz5SXGVO#);Mc$;|bMPs|&hvnlRd<+Qp5QbyhgyhvWk?NI=O` z>TX#{6UOM}`pXC8HJQfefutF;i2OXTpDh(R4B=)XS*sUZtF1uX&j$6?RV}R4UvqRE zWU6o9gfrx>XIS1NcVzp9^cWdauBi)Sq4-f;1f&$lkbS6k$&}tBoxs3$I34S%Wudz< zxbxKDG^fV4vc&}VjD>v<>k^);?j?(V4tcpgU;!jVtm-c>d3cqCu%Q7bcX-G=7ZT0I zuzPi#?oW_WQR0v=y&P%@J>6S1Q%m}t+rIUla)fbD8;>}50)I8;aH!>2BeZNwtkoAj z0*f;>!Cie)KV=a#8MqD)@_HXwCet2yuY@p9Y@2xf=?A;~f#rAF6y=}a1SCZ=5`q7uEbuQf~blvw0>T2}H zVY+G1hS_#vgm+$#)ub?jg3D4By#o=Ck+HmEVTyqki&q{D6mx_X;h3;X?gCcjML7%9Z6Wv0MRHj2~xWX@aXxBGi9e zUU%J-8V3uTKUrJ$!%Ln$fKHmZESPeR;c4i&wBEH8jmzgV6fq4fsG}Qa~0VFE>TNWMPv&DsR$!hGo*9)Uwmf$`KD@-Npg^MJ;g_OEI zzm(y#OL%Mr_9Z-9WPIft89uXsN77$+^p1`3#Wyg{a3_f&H9E z5NwL_H*1_523?m8&coXC9y<>*!|;SveCB7Z{^g2{{!&e*V28xxEzq2)VP9xuurfEW zWSBi235cp?4VZtIFyc}Zi?;QSjZD0gVaFY7k*CQMsapKoC0iNw|DnDd>_M6LaE zus4qmRpkvZv1p_V=r8B6$EuNiBHr)8n_*d-t6h*`hKh1;5pme6uIN12wVytC9-hSY zF_~43*P?Isin_tIe9$k{*MG<n>e$<<>5r7a$h|lz0TOke;VA1H(RvzM# zqP~^I^Ry6YUWDjB|GCx3;vh#n{X~J>QdBaR4PE#bjLkV?ler7`B(hNvm6B797#p9& zV*oU~aV@&6!$~5PY+jfOW6(7TADbALL%T8D}nr z4l~taCrXIGw4Det9wB5{99-wK$$IDO#Qm7w`v6%V9zg=rOvP5SiGbrc7OCX)%;E@@ zc08UlWbcMp$=d7jVC{vKa?y3Tp+Q`;iN$g4BpVk)9BoIPUoPnB5~b@i8Twh+A`4e9 za!`ev!+MO#HQbo4-H?iSmkWJ=X0vhOw{N~*ZO_{#f&oWV;7fm~EoXh{{+4AuSNlLG z)4Hnrg5_H;GO^e8kw@eWtyi~6mB8U*uQAkg`+61~J?!RgG6k#eKD@E%w7hJ-^lCjj z>rWf%>c4zo%3v(Xtn_tW zN|%}9Rube8f+r>WTVkzKN|T1ytF!%mJ-1OMznMKmM&ix6I6@luV@<`#_&WyCc6Qgw zixW2Vt3*hfCwL=g=t1sfxS92_Cnj%cb84na{7N*+j5VL^H2v=Cshz@@-}dssZF4Sy z6#ICCC-sWMrR$HMr6Yc27pJ_Cllb%EhMMq@%mZUgbMjZ8Uy++Alsa}|igqj2k50X% zGx^I*nc;+^uD_bWBhw6#FarfY)aH0r?U3lC-B|T*Z5cDEx6B(E9PO-b96g3FU&VOJ zX&_xbo+4lUszx&ZD-Wl+|aA1un z5&CG|R_IahLMQ1rl6B}?@lMi?V_P_YBX&7A4*3%&x^&_GIkIno1~Q;76c^%>fpraz zUwI%b*B>x3wxu;Ao4p#4;@Aw^)z|0ozENh+bRWWoMQqFttPjF@oN2WnsXBLQwO8vf zBY1^lF9LQ*P{h&}$76=^U^fIsb}$%g3j{``7(_701|^@=Zw{?i9P=}>^K5SMqN_9O z8#nbuDmAMkgE6dcb=`&7xzr?>gypME!FhA)JC)8DbNNnciJh)X`V9V0!{@Y>E|CCX zyNLFJbCzpkc#McROX@FQPDT*(uY|YNo*tliR^0k83T5Y9vgP@WCw|?VDC!!O?XJl{Nse}G;q#SVj-SmX zDp+xw4c~nn*1)Z4kkZkSNv}y&b?d!_D%Kw2%7_;q@fT^$jAoc~hM~6wnd#T zbCJJ_L+BQG1FE4jRv+2!!$<&^t-DxEGj-e*VG{Uk9#NJ{fHw3fhFW^F-~t{2m&r*W zTEYZj>g%wwyhMpt&PzkwXraC^Q{2Dg(*Z0-qGB#{L;Lxjd0J2C%9srK)HHXyN;3KZ zaZ?f^Om?moA~koBG@MoL{SFP|jEgQ~GvrCiW?XH`WZ5ufr#zq>wu6~P+9SLwa*q7? zxl7-uWVM_*U>j3HW^A2@d}YFH=<K{NW z9D7kLD8PgjvN(&W;4MJ-@l5_puJ)y^eY`la9k(T%mWWRloGiRE(*syk4#_g-bOL>S z8JQ8EveE?yhuDExcJSIWhV#R}>=?DRhg27{MX!fl=@E(;*0hd@U}wH;xCv1QAGiTw zgmD;H#8_KdpL}}BHOH|pGL7aUF0#~_4RZes&NV&rGXx&)DPCW%K3vGo{+<(PW(N}k zM*BYd8-94|C@_=j)lPw-P6^^SE>>#`RXaD8>vBzk=$CVhm!6rzdC&P9*w4nO-e)PW zm7BYb!el^GKnTi3F+O{E&-=EP0|%kN84U=?&B_%EBwM+u90wpwYMW@f2A%J0>k0Kq3`56|iYXJV$9jJ;OinZ_)kZ2-D9&tHc2g{}V&YYXA^V&*lQ$8L}Yp%BnU z)8gF@66CW7rXColEE1`we-zx3JFIE^u8`T;n`3D~>RMYN05@pv8FmQaBs~#T%)CoEl}F7ISKNUtIUU!ybrL2q z@62Oj1Pw%QS5W}X&5Ky3OkdCQN&-kb zNN5kybwWzwPkDm!ttH|Z>iW#JX{N0?{>Enssp2&V*$E+n{A-ax1K3ojxKXpbfC9J7 z94Yc)5)9#l;iL$MDwadh7~ld^WFjW6p}4qgft&$(laFdmP@k#24h!(-48jJ(Gxx}% zEjz?Iqy~c(AeI16g><9yIa~iH5ORV&P`697wH~1FMfwkQot?E;?Q+TwM{m?$Ut!Ty zYeMQythZd(xeJMXOIP+Wp{oA5?ZhZ^ZZmq7yZv;*dljxxSvCeI3bv?_V$xY(mhg$n zoDOeld}y36$Xwf&;&oredlc;*e^F!PbB7l>!|71YJ$>e?aW+u&VN;fA%Vq;^)_JV9 zo`m`j`OCAdb-beW)j5(!TDfh%$)tUR^?R zWy>CWc^#|jy4!S>3>0V86uW6i(HOB>Um=Qp&7%z>pxuSm>zooKV$at+0v@|Lfi@tv zTpv>J1qXJi-UB*}RD@BIi@#Vqf1HqGpio`5(lwRNIJG2O z>B=j;Cmmvk!^~9aJv%=|($6G&fZ@r?yq!2dvU)?t5e%Uw$b8*C`FRGUS-mnamz-Fu z=D#FEg&VJG45P5tX=7IJ^Bdvo3oEaspFdc|d1$2e3O5aB`Q`V$j+m(xLBE$$_)iRj z$6s@e^5ge%ljp4BOkJl?u?iZ7G|NlBXe#ocb_;`ImabNgaj)MXZ=%)lO3+&m-7(JA zBZCe_hvg$Qxd5*wUY-t*;1mT#fE%CBSqV8jaVPs%XRPRG6~@*#y*HOJ3CLkLxhx=& zQ6+v6)BRBE^8<>q*_|U1JZp04vBg!}m;8k>u}eCmxpu`P2D4K;C88toIfr~mJZU`z zLbl9>2$uN)vAm7?lT}n!!HYd%2J$a;W4FRGD4lZmkVF6Yy+sro_o@X2stt=Q_*ano zf{YROIJns_h2+toF-US1`Zf1{+X8NDWggJLKfu7p^?P}YAu5yL8k|W7l69#KOR@9h zWRY*lS`iM}m_QK`wV3O5`#x2Cwr&Ybk@~snGlQ^M{{OZlm(T85ONKj;#j}O7(-sJ|=h3~#OmmzM z=j^&fo6q9iLt5Vh(Y46U3u9reqiDy`WxUG*XIes7jy<4?6dNaD7b2mXSF+E(V?86-LbFKgGyflE63$-r;}4rF8XVmJ5c#MVJHT&u|?)Czb!>Lqn-BE(RxtVrpQ zkL@u}PzqG^HI^)u(8+$Nj%)N%Zk759E5yFSpNQ?8l%Fe@|__wVy!mn49VbE53P+Pxdh;psslWSFE zaYfPU9W5T=J+d?K#nBL@02K6**njnYhl2^LCq%^16xI6=dD?N4X@ukKM#N%Q(%N`F z=j*k@ZCAt){i%{&*mwAtO>m8>j_>4j(xWa8h z-)C(&Xnp3XIR)#N^ER74{ppG=0FCPNCjYD-RHfKj*ZxYe{`Ku;i%&hMEs-8YIo6bU zi}IEoeq}e*Jcm-eLo-Vjn~RJ-1&KNGk_*9PcU~wL={c(ws>{_sNW*dMJy8O^mD*f? z&w@)S%xzH-XJVhtx0RuyQXq>vjxvO_OJ0G?FXl02^n$I+vR--H( zUZ`Cf%4;81K9G|N?oUrzp99iD`Q$Ob^-P~P8jAYWKLuhQGz^G#Tz#fDZk5VWSp*J4 zR9|`;4h_4Dnv;9<05E8Q)xpyn_>1Z7(+h$$pTSGQd8YH_#ZqUS{=LRQeq>96?|kj> z!dRc+rpwH_ZUI`rA#M?;IJ_aQ(O`>8>;C)-+JLk@s>@2T5C^o4`@#Hu!i;Lb%&F~iovr^udMtf&#N!%tsJBOC^W(2_p* zCFp}Uz6CX_4_;`8QnR}8`rMSn=BxY14Q{APFrN3t4ymR3!GdlvtiJGf!uV(A5zyn+ z0a(6n2HcVF_R;XMDY;ic$LVgI>W7HA>o|XkN=~Z7#)L37BZEH%TGiI6FKc=F7p9s< z>rd)u{`QT|0aW+T_$%VDHJ8y1w;F8p!q+~3#bsyc<(=y4Y5inmEh!nRzWZQk4}0sD z+D;fn_Tr_KJ4*uts-|6Dzt6IK{oo;iMo`>&#FcVtJ;rOXrfcCk0J=h8WmI2s;H5=7 zEMx+vCC(x_)fVc}YDjnehHUK zp3ek$fVn3=G3UyBQ*v-k`T9T~lRi#XPZTgKHk%-WF9Z!?+KXDmX$!l6iLw-cEyc7} z4<1d>a#?`Q1Yq9)juL>1`>~b;O7*JU8npESW@#Ke2~fl7dGbkSYUloP>zqNSP;bQu z1r3muOg}MSnJ4nkGEez$uu|q5jbxs{IVEzw0Ur;uv^1_IwX|fuf&3HfD4c2a{mSdY zK*;et4xNTi2P-7`D|5sY$o0zWK7D2=d@CuQhNMs@+cTDTdm38>PlK9I5lj@z^PpI? zZEN+XpjZs_+Fn#FOSXXZ><~^|`{|gdEuMzPWPKM6QpQIaJH8=tcBOmGZDecJ=WsSe z-g>%dfVSDux>DVH9aU;nP#TqS1@-z>s!-dTI*A{05L^$Qm*_G05_Ul5G7FDDuWAG8os{ zX z^kv^{4?Be!mi4`pz8g!T7q~J{YQA*3b-oKYj1OiLMf+mT941V1*ch$T4rD2fwXga2 z#mEHRvY=aifbi~6TJWcy`>)YxK6FzqGssqLbQOYmOKy3is+)G$2MlFE&AAt*h;?yRMy^n@dvth#yqhV3}XSbB1Gz zjBS&RxCoD#nRxY!)~`Va#*^=%pUiMk38UJnC%=#}2aplo1K!t7Z6ID*@dc?P{0&mX zejeGy*?zeu7b641jBr>*xUjt)o~3om?kj2xR+bM0b?@S}7}0Ca>-JUR)zEW|aHTL0 zQ$9_!XqWa!EBP;q+!ZH-a^X7BcfWl@1FI*E%Lh3{XVdQGJGm=NyNimBIq7E=-FiXM zY46C|OP_SBf9o&LiBr+RS3Uo`u4m|Sf|IJ(#*RB;4cx#BABRYcvMzf#KM3fVdwn~) zlAST#(V%k;m8a+51tmwgF(|0U(H8(gcnHT#LIoMQ`2rxa(CPH6*dP4At1kf3MBzo9 z6+ti;lz=q`hgtqABWaEpolt-9#@1IKHJ-4{l3~y?0J$-V0J@|n@PR8)W=yQ^8V(71 z0sm!kG1;>=XlUOO?YE8zC-Qgagul@CQSG7e)m>n5Fss8jKphjqH^+9vR(G3Nb_t;N6 zVk4X$hhzYW5CgMw+*WCqZv=fW^MqO3!lB|?hZTGvCJN^(+t(Kwmmc{Yco#$77bgoW zqm=j~B$j0Sk;RqQ9g?lV)zl~U>>QI>y>S0&^7M($>@C2wvbW~KhIPkdJ6A<%k$`E8 z2#mo}dyo0MRecI?Ya=SFJp^%;Gqn0M4j>(WV~!}x3)ue~-N44X_Pl@M-7^~6sc!td zEceeBAsTal6jhG#6A=N1T5`euZah=DeA-M%VM`=v=wyRe)lD+w6Ng}DSIPhMJBFRK z8LK+_T)$ywHa1XgE%g4GdFFQb4ChN}5Y4w>lwi3k@gZJSHA3|Rk9S8eWuE8-=W`)S zbxy&#!r`Z6lq5Lbw-MXFbK_j_x`k5;8uAPF9jnA6}s_~|h(&bj4;7l*nS zA=3#L{bTb26<|{skI2+Xt#4W6w)cRzH^Z=3{mJ&{TXuB4*wUp&s+Sn zPBOfRBWgX@KkEe5H7EyuF7Vz}us06DoX%10Aun;N&T9{BaNe_M(NH=oPu=aCZG6JD zv+e6`Um-Y?$FDdB$)`3buPhh8@!CUqugC}?f9V;NU*%Y$o0)8Yb3^B8bZffAW5^8Q zupl4!Jwp^Te2EN7K$NMCzd;NXHs-aG1tAF!yxsL}A4-GL+a-V7t3B|twiwq~_P2*; zKuUx|8&Y&{sP>#Z29L))L)IN*T+>Xp?_;U9gnH5}P0ejS;6XmV-J`X2!U7KBc%;no zwjnIP`HA0OJY#=gcuF9y@?=j;m#=o7Tc002Os8+v6A3mxw~E%RrZ(Jy0}^v7QeSc>9a>2jbKZhR6d>Wc3L>)tLxlSWP!i&_uMY zT+{lqCG*xTQN(8eIh0JI=IR#yv`It#WSe6uk#+W;IBB*z#C)XCEE(esJXPHoSVk-) zl-8jwoE9D4AQdqKNc~mPTK(k-u2lA|=Ir&CSD{QSE3(yJo)*d~qpAL~TX<_Tg_pg; zTg^i1FE280*OxaRatF1>Z;s{|Go%OtugxG}>WVRzu|}_O!po zp`&6CFsd$tw*KDlOD!3e6eI-txOV=)HekK4y$94~b! z^8i>ft~E+xlBL?|k_Ebb6U;H@$atSm&$>hy(5L?8j0gK74Yr~AAWG}xnMn2O47Ck9 zudi@$A?V&Uf1$z8H+Y76zU8l;mzm|Ozq%2K=j|TlgihbfKiBnN61L-O6QY;PkV|bo zG_utEsEzPnr{9gOnXWKz>Ju*21J>+bU4FMX}2y%#WIU36Tr}g=HX%G-FF#S@4l;y`jyd1yK)|Y_YY3ntI~WmQF5pY?X|=EP9**4(8>Axl|g&h z?_ODt-X@)an$v&lRQ@}b9?o{#z2niz-zuG%nUrMjMgb8(MU>ul5-9IRoulb3>&xuL zpg-!5ZZF!iC(Ys3b#Hsnzi1Cex3e0-=`gJA!@7oWm|%IY@?ZZI$2@*~8(R7`i^scB z?8ofIwDn0y+ZbdE;T_ofpX(|XFq;(QPo+$M~EH0Ym4_O)S^BpkMn+JgZM-R%rVp>}+? z;SyqlJc|nH-cA=j-LDj+@E`xEytP435gA0D_7oFUN%s*B}gUfbA1Em=dIpxd3-zukLh$MKN=9Pi#(8Klxa#2L!?P*3Wm|`f3 zoYnia@~0mWxqCVEj+)(J2EWMB1|{i6mLK1Z3ca5lUUWOH_H^g_@9$R@67GCAGQGhd zfbaf(FcSNN_WMip=>Gn6$-7z8{W%^eS1Kv%2kyxZcl?Mw*i95aiW{ymmNQ0(Iw^1( zIDQnDSph1#m5{^?N2s7EM=}G!1_oA+6)t;_rPH$^cWLYON1@vNO79Zh4|=?EF=z`$ z`*4n5M{V?c`!Iq*b)R>J?WAmI?0#iF_bOD#^`vgZf30XDZVl zKP4vQAOA?espPB``1tO-#dqKR@b0_$gI4R&^1|Yi#}DTpFSQPzv|C5-zDsKxbbOq5 z-+8yw;S?VP&YRGy5_A(oWPLM`<|oyqsVbeLplK_ep)6I(UwH`(43?Ualu{B9(|w7! zjuoD5-(2(uqhZt_Q9fbOI!biZ##`&PuOlkcV$h4rQKiHGdcpHC%x5WxTQcSd^Gz_h1~~NQ!94 z4C>cgHkFt+mPA|bU za@#8{yznODQ0e!&w+7CwxXHn+0S$W0-Xz*55l1YF+}@5{@n$rzR3a+K}QASOq6bZA0?8LyP3a8DhrmK;J_T!3bg(*Om1M8-}5=9XC9nUIZ zQY&Khf*t!9Jx;$sdW?QEJ8r`;@rl-8XR1PbVtlx86Rqvl)blW5OI>`XP8+onS)=6`~ zFo5FJ<>=`9$5WC2gkLB#>YTUxs8$@e#bn;1?^uFTXQtOG4nTlJOV!b6&^bUGPQUxE z*YCC3@4mZV<|WMnB#TSbtQow9gBCbVu*&(~!fZ~p3X=fz#z7nH(Z$Q4 zzjKIGGka+_&&;^4HBza}biLn;?FY)DMDeU>MGjY%Zp@|uHrVwsoDO4|BW)&10f4-$ z4966c_YV!>!WuPFhCC_}zZZL{ZwdK!nYq)VkwbHGC(NuS^pzj+*r(K|smk9gQ>fx0 z;g_k(4_?~J6gm+>BOP7*vn*h1VHQ!-_|j1Jc@{Rx6HI`NytC)+;jnou9H*Xp04Rv+ z6dsrLpGnC~WeSG?lXf`!?p<$MpRBg^j*ma^eMS>M!-^O8azduoVtc*jxiw}QNi7;@ zO)Tz&N?V)M4Vk<4Py!sV7%ym@dAsoIw4pvm*{t*l-APPB6Ulra-$)jMyrW=goEuUN zgNBH#8s%mB-p5SwanYLoSP>y0a{x1Szv4svL&c?|l2_TEn5`|&^Ixu;i69vT=t%M+ zNLEp#vzrZ^`9I! z%+7hgcN;xQL!hh$skDRL_AF&DAJpuC1sd${w}(z3?DA)OJt*mQuAgFfoba97^MiiZ zq8n3*+)YWt`Ip&Ie+P5hJKk*`r}f{BKGW;*%A&zlvwJBi^KMLKgetP~XTVOSL_kCn zfTCvtEK9mzv72buv$l=-kZ^lDFnr`$xVT;Uugby?j-V!`%{bBP5Rs0v-;PK9;POyo zk;z>fi(uh7L{3BB!QqFl)>Sw=%p-flLSqkp0IW@5y<~{;pcoZFa6fm2}`%>5m?^{DQ^J}Lg3CG9o-wQ~Whn%c-qJ+|FkMHF=5>*-nBH#xW zEf4(Wy*1P9T{K?vw=kXkm`z8y9JtIsH2Sd;*u{r=T8>MCVVM{YrhCJrKsl@R2=Y%M zaZQ46#$w}gYdA(;Nd-40$)dz3*WW*3{)Z+;Q-lyh9P_Mw3xjx<@0B{Rhv0j^Lb?0t zDDuSUQMW>1E*UPe>7fv}(gBbLBG$f*%7t63f)eBfp zXNcid-zLK+npA!$t-WEGdzXjfFsK+Axr~nvryX%vr3sVxLy_A4*1=>c9{3J*F?r!> zB1QXIin;*Z*VNFAPKFd;(#Z5!eebq4j*?4zesOs~n0jA<&Hep}xLttTyYJ@SeV4J{ zvQ#!*N`}s2F2mbiD~TG&kxSbODs6v%wl7CE){|GM{t@$GU9dfCQ0?X4aAgMlYqgWX zU)*K$y6RxiyamuTveCbO`|i8!lIy$gv|=^!lP%Hs2nt@mdzf3KqH5ZNFa4MVrY{3e zq%W+Lnk-rO^@h^2dGJG9C8O}I>XCmxAOrP zi0WP5n5jN&A6y#I92{a7Z|A>XTweZFfDG9GVfdTpm5-a3=LhYF$KFyR1OOG2uHarT!Pzt^o(r4r3+;t>ms zd{jkEcehryeyAuW(yI`B9G&1VYMP%k#k!jZAO1X5p|Q{kjMu~aRLB%3zz|E?QE15F z3)eh$uBFo|OjhG)f1)%E7&4!ZFRqS=V|C_dfmht_S_c7=KuK{QUt7HZNCeDStTocUe(H zrRBJ$axxlS41buLyS~1jyIJ!!M} zi!K|s_l=EEOj1~VO}oov_fthg`JT>8VI?F$;%8^0$XEW4kIgU&{3qrVd6HTA1yc~n zn^YSLZZVWX(r6@=G9=^GQoV8vwT6}X+4-d>i;vNjTBu3-rI6^zKR=j%uq-yA+Vx3u zgcvC*ao#-cka>fkN(D)-5VG$pYlN>c&02yDmg^gS<6RxJN7u6NqwBtp({Q%3H8{k5z+PVV z%t>qZ6jJ$WZTe?=Wq#cE)>P2Rr37!5NJMaRqCDIwG;u&OJu4dtCVTaqZ^=M3amZ59 z@qy@S;WiF#GHlaLQvspKL1~eLOp&+Uh5ME6qJ#^8|5NE6V2s~(X|RjC^aDQ+_}N5p zX9jkLbHC!`{}t0@Exna97#dCZOOTbjanL>-^jl{+ zK*<>Uw^+Mk2B%%Yq~2Bz`lC_*T-A#5Riwak?=EAjeu%{CKEv$L)4>jUvRHq**}XVv z)<{%5bWqcwW(0MQbq639)#0vOOs4oU`?&4`QX!DsQ$BGbXH1J(`b#GgMw4Otyz_m= z^VIOQeWIZbm(uF!SOe9+@a|=FY&1AgCXS9JT}jEQfLbZg0|9kPkHZ}^QD(!4qIznY zdYNeY;uxhQmGV1c76e)h3DN54@ydb=SIqzx#4oXTDsJA) z4w|joIqEP+ibkp2wX13z_suyQl7iAZ{*T_hsQ#~QQoSVIRph67%t?rgH zOX72BX7+srU~qzeifG<3+*mNhONNy{4+h7_2M4(bg1ex2tof);ADIJ`{%7X=6^@-rPEH><8n z_&E3f{`v3IZ=2sAy?b}~>&L}U_a;C5Wv)YpT)SoPM8-hG0PF8@LOu9Fk+WfYjbs}C z#yU7l#1HQ&!;k-t#|tdx3LK0VSn>h_Kor|T7X?eb)jh0e7G(3M>vm_rK8v`qL^|WV zb0gK6I$-E(OcD_skx&1hh+4FhQs_j8T-`c1mX?#x)VEkrFy`W0FF8KAmQJpZ#SsI+ zFkpFKDUkV2wR@HhumYE&zh3n z%nt6MXU1P2m%l#n*H*Ln>0U9&vP!N?#$yvt`MfLRWq7aUe?c!?63kv&#pqz(i^Xg4 z6iNF`{Iw+J8D{skuG#MOFON?G13Fk!N(L&0jI+^=aa}>}wF%7}&Q{h!1CADM({RLY z0>wdDfj7vuiu+eW0K6s(w`(qwqSgmprE<|nf)*pCyO)cIdon5R2~&&-lVSV)M7l(G zs@7*gquKkUaQZAJm5qhG}>yGu2yQVOcsl*h3xM_ z{CbE@r|flr*Cb@Ml;kLcD2J;~{e@M{0{N?p}|K~Y5lz0^2NCnQm$UXtL3iWBQvGwdvW?xBkm ziZ`i}Ry@EK5ej<09__Rc564aEPOt%@;@*3hDyR z3aC?;{POtCZE8B_fH-^NNLy>8U?Yh0GoeR=_BD6<%6m#eexQU&00nDq#e( z!zdLiwNCVYc2@#us*c+C<`|TJ{KF|- zDt9(RsHK~1ji2?WTpRu>f;XW4%GO5hXEK`?YC$Z5w$mF?<%bMCtj?_7<}nM?JykJ7 zJYL6M=PNm`!DjF$AtTbUhxgj~Ks?s?)f923WwLM#EBM=?5~TPquw-Pi4r^&SR`b$# zm)%E6lGR|#z(%N8$*X~pVnX*TmjN#&E4K#$uRI>DJ|<`X;)FD(IQm{X@_WGdXwYHW zFeDIm*^}h@_(WyruM1U(BgTUKj2|T%R+-4O5;`){;R?dz?&y`1j&hZCV1UwOG0MJ&tJT;i!McI!K{Gw#|(8?MvF6dXPmV(}M&T*W$zd+x{gWv!!SK z6ZZN*`@_S30f&&lj~yvgN^Ucuww{;T5+L9Z!4z;o z(VP%#^gY*sS;^qkN@AaYT8F-^zl0rpz8QT@XhUVEDMrK7?-g}a8d7?!9q?=6R0ZztXN7nPAv#D)Q zM1_@EB~tGXTV$vfieC&mSIt(UsRDR6%!Q)< zwZJ+p5?e^>OOxz}fh%cpHu*kQ6EDdOpf-FIdK0B2TO`&G+?otW!n7xZ!hnPzpjeyu zjAEWZv-pyB{uEwi{LFaon1mD!Tjk+ro&bpHNokK@2a?V!r zq5!3Yl`^k#Ff;FSpo{MdEll)<#y;d)8~Zxu7ELZuz@Wqn%DgHRE_a2p{!y#|UxcA> zU+C|D|2yG++u<0C#BsGL{)E{_YOiC5GV_r!0MT|Q{E>i;UkYt!7}KODKIe#?6)*kH zeM|%_X){V>p(!`V(JivpGOr4SqpxAb>>(CN)Sp|YarO5lR?ExGh6sQylMF*3V1n@q zHOdTE&1xE|wQ?r16R zaAc}x9F2@>EPCd#U&Z&{qNIv*vlKeO#(QROr+3tscfb@vhfUx!;x;r1Qe<6DJ2fR$ z$cb+ln@e6K?YwFq4Dpb)z@phfuE)9gLh?D-gg{Q;@^rXQB8%@JUm*d@r$6Z@W|E1K zkUwq?uQ9zpWj;HG2@&&%C$BRVVk{;1WkV#I$Jp19iMNc3={_mh&h^^IKLXs(}E8*xs0bt#?8pA?#t>VsMaO(+Q()Y$Efi z02yD26cKke_t~+mY0g+vrG?aXo)rR?S)2(+=7^kVtxzaDQ_KVI;dN<)bn4E}0f_Jl zffFx2F__5t4V)*X7$2aGWxpz*k|90{aroRo zo^!x~M^SU5NNQbfP*u#MtzqV&I(a~CJD)&U;|8>rS z0ikh+m(SC&cPT%`*f2?N?VFwEQF}-6;kq{b{^Kef87hyFNaV5TZ_|HG=j)Rh?nk^_7+crq=L z8#RmdyT1J<(KPPOpQCBfens{si)LW$xCoPIQN6GgAQOj#J9*vS?_KKn0c$TQRtPi% zunels`bwaB%;?xoflHORm&$?-v88OnMNe z(b2pGWQqzhynZ{S;&X^pr#Gdn^!qjkLij#f?2^bgq?9yA7tYb@W((wUfhO0eb5oc_nF;nIOzZ)!Vxb)i@ zAOLXBJNayWc&{bm(LrzMQq+A@p=axi?$XBK(mu5}r}Tw}o)jOAsxXB!JA%Ga#`+?4Ds9p|QC zDLTVVOh$yGvCGVS0xyndXQ)&lR@UMa%g^egcf`0+)h3947ED^JDA8l4%QZowZe`H& zgv)3ZnTklNfP7X7+^Hdwk2&bs>USuL@M&Vz5~ZDmocWvskrJa|MxsnjED)*ihbW*z zLXV?7Hjs%i_7U{QeE0la)K=MY_AXbrOdDn2Pivm6c*i*pInouIZC9?Fw>IC5 z=x03x6B0LNcYRh%72K`R>${2uGZXX1lm2FzHx-K#NIAi{tI1HX&|rp+DgcR-L?WM= zN3Sth>gXS;aL}*;sV3=eo(=>M4i!>#E>@0-La}yQ)>5)KU)@qXlBUNXhd_iJqcPCz z!)EMbtYVmHBi4$I__(A^r4f$MAWDFZZix!svGJzOTxY^eA~?!P;gEf&Hl!1h_YNd6 z9)ViP=TI#Y-b;_w7Sz00CFZ&&cRU|OvgLNBPRS=#r$wDX@9j^VRT6wj0$w7vggc$4 zJAI5AE1j0&LLuximCWvR2%^rsnhGIwoG~r_>$RJEThgR2aW><$Wl7BRNO4x$liBvk zyf^OntK~os5!+xCNgND*g6&&tKyQCl9$@k$R1&!xYAbAXx569;-KN+1a*;K{czR=U zK0RJ(CrXTcQwl<|r2F@;My@q)NM}?*Z|8X2w)hVy-d1j{*sm476BT3rLbIn zNpMy<_c`?a)Wj5wp|1lzr#_G39-{A_vO~!us1^B`KnMIpq`gMaBKayd#fe0>2jQA` za(wU&+M#%qoX!&0o#-83^3Vet*l-&+

%X zz7dAaC%aIc75&eH5)#Ge#~;3B0yNTt@?|NLF1Dwvr@m0xCy(M~;>+_9J+~q{G2`j^ zBHTdSxR{oCk8%bUGZ?q92jtX^kzk4sWWwdl(0Dxslz3y(F4BmDz)YMJS5!z5P{6;y z3h05LH8T5nxXui}u45b1r+!4Ij4Ve^^0VQy@)xGAWwG)_;+_&XgzFw{1fOVF=?Qf$ zry1Y|7pNx=Ke%6Ui2(XD09Ba{m$!3DC(&-{uarFCAv@J44@ZbWDCxy?0qe?1&);$( zvH@jd^7vu3SQ3;e*1L6giQ4`4W@2W(A`yc{qmrGPOBo@^dJ2Z_&6vozmKVC`nFgL5 zl&{!a8r;Gz4?$o{#Yo=mV`j-bHZtYXk%FZ+XwsSHWkR5N0jhVm{1NP7Bk>FC7o$sO z!cTQ-CwdP9%HFVkhwhm48VTQnss{WmhL8FZ{ixzvO!)l z21k2_h$J{e9gHHkdZ^W_*T=5Nf$1wU0EWFKK5EI9aHsoAFjk5DAiT%sV}LnY;G%fN z0+QT4d#7+eqhv;~qaH$HUM+Kzpo-nBQ(*nZmT8{7h~=J47OY1;Ebssv8C-j$6$0}X zxe!+WfpVfuCXfJcg}&nG1a zkSvMSGfJ2a;(%acOq@pU*i1Hh#=Nx%?eAbIUZ|5Vp9-T`e`-)7C=>qI4VEvd5%@ksesFMQ4~wq?nAbl zxa$;1uvih2CEXL$g2H1FYHOAW80cn8LWgv)C)jXA--(qN+iCe)H3bd(>H|EJMaMH8 zLa#BO^*Dv&^4^rs@746ton$uB)c?bmmS32EbS12CK0R5rw-b83?ub@oG#e!l9F~Ak z!fBaJ4#W;=&+8P5^A9`rzMg=pv#0}{o(7O15~D#jO~vEsX5`X9FnXI%@_KL)yGdL`JdxwS#8~6yALb5G(OCk&a zsY5MyBZ2DGbUrCwA#EOCAiaOOqji<1_x_02kzVye0Rz)1T<9pS{N+C->c*=rz)jg3 zo1zLPmdhxSnmIzm#~tzG{6su%Ka$KL!X83#y&0>7Bj!352J!vCw2ZGd;p!|hiY?F> z=paU6xDr-x1fgLpg=A-ECB0kR85M)+fAxZ#=gT3_lk_6<2{IAgoBqa$ibEY^@yVW4 z9WcfMh4b*deuFr;pt!7j$>f}q11?*Sfa8yzxu8cw>$>t@L6Vz_z(WCQg@8@`dD3`?-Qfpz0MZp%2&Xp zjSZz&IC#a#Scg+y9t3b`hUm!I@8!)7iq_mZ8J*;_K6%jc#jU|%2xpUIX;ldCblS9! zPw)Qm52JgdccU^>hGTfn)vy9I_eWO%p1O{E2vvt8m*}_){3nrM4)#kzrv~6e zr*vBp7V7c}36-A|lh;&Jh1^U1d@|)cDtt1aruWTDeagXy>=tqaEcv12O+M57WkCiC zg*OBUD9H^cO^+yNF0@CoOAYORo|nI9g7~>FHaeiGAw7@5gh`FZ3jy>BUzwgNi!s53 z{KlvRci1=48=q&_0os@YndZDwFrkfUritWsLoz>-dShOd)Q}C{_wKh+4H~711|J;F z&{JFRx6#&Q!*hzMMuzf;CM1v(o=JV$CeQ_e-7Q%FVqF5DWF8#mBsg8>nHDgWJj>tm z^XK+`k#^~=k#D*?6^Vi_Jo^6{u1c~T4oC7#a_Bwku3RDl2j`&a#$cw;T;6AbNK(Ql zUqz`tf`fw@*Ckfd_CvI=z>IFR8?rQ@MrTHG#k5mD6%Mn)Mkl`YM}=S`~9?po~x32^ainS`zQU z9laH$xyK6a)aKfzDb9Tl_Arq&uYv0PHx*k^U8l3=9#oVq>-SnFR_}e?V(kRQqzKq{ z?P&$3k5I;-z^uoKtSkmw9tEh-oy^&Ky~U+25$`j<+~|%-Zr+SdZn7(sjw!*xwuog$ z=Ao_1z#T$h`0k7iv~5HMzV8MP0JJR*ZiKinuV(T>gY^i^bZEot4vCDA`zw(dzkvv{ zQMAxnwL=0i)ka%T9RrIJU#ulQuyRAGJS2!_G{O7cJ#v=Oh3S5$Gq@Px1^S*O>g&Y& z%@eW~teIvBT$xXTq2yd)C}9~UFz2x3#s6uz2nqO*7mTvFle4gBwhv+7sqK-v9?i(d z(pIywfV$6&auo*oyQ8U+&e>_#a5>p$jx9UqH%;uG|9J}<_ra`1+qC4)i7```vkHyh zK{cibPVY}s6_PyYca6$pENs+Ho>k~8;d(<_N0-E% zr#`jvKgcN>$&>!+h2xm)oawCLqSD04M2!`g3TZ&ol{||S4!c;5*`CT3&$ZyW9ML)> zEYrGZWy~K+KC6M{OO1`gmSy5`SY@HwwJ%+LEvHFaQ}? zM3eq6;%Un{?Q1DQ-F*4+0h6)e4^VM|hN_{A=re`L`y2;`P@CK1SyAFFt5H2JIs^Wj!eotM`E|lx^oXe zVB$6vapIn5!wjoY#>#AOH+#m2D-m~wb@~kmjDv(z6sDmla;H%Y!6S6Uy~=O(5P+gy zq@|4LQoX$VaMwFsv340L!!UIJb6;@-+c3+I~0WJif<#rXu zlY#j-bCFrEI>TsLa#X+K1>M9=UAI#e>~Q4h_KC0=%u!@`6qI=nuPRKD{c{KGny6fN zg55rCk?fOX`^G6#@~QJJdejrY8MQP7rxV%uEt-<%wv?@L2Mo(R!P|yunfur=gGQ*j z?WRpTQvl&RBdTL&?m3-;_$@F6v#M^4!L;5nb1+~7)Naop&fWrZFiY_dZa1%ggWO%i zAW~z+lGEE@5@ufHosJkq1FNt%UajLBC1X|##5mrd=UcATVNMSvYFUiCtvd++@N~3* zGgp2}>}OLd*h#x%nI9QM!am04pIN}S__Y!RuM)sfTMyaP$=OS9(I8X2xUHX>y~;AA zkw|vqR%V#@HNr)+f;9V;*V+xEL7Jy7wR^mSO%Yn+1)29V(f%Y_)NGZRZ+f?ka_d?( zY+Pc{UHX6%;MdyDE!e&{^i6R7NN#7bK!%jOx}Kp`%or6nUxNy)fGn$s`FL|E7D>h4 z>iNFNZo$;W3MpA!jWJPXR;$jjRw0w1h%hoAuN49mPl7r-V=S3GBP`Oyb}A~$42I?? z)Xx7m&Nd9kcuWN~==o=obyQllvX55APyxA1=5Pn1w|8#Bu@17kMmr56id2fIBb=_Z zO&9T{zHhFjik-3jaA|mo+hzamz1;c!Vc;EJ&@KCS?x9$8~dD7egTp^D=9&VkXj{8HN_Zjg3g0!B`#_*N4aaJtcfq93^bUkqnRi36mq?6lZNH5m)Czo;B2nvL zbykeTf!dJ6(8&y@(abv;dTc!>(;R*-9{a662qP7w?=`jmzLE)P!0lKL`iry zk-gKC{E|Ntr}=$pEErm2vClAF3xd8%uIK6cXf4l zbv+Bc_0AiwMRfh#V-QITlCZcxqkde32e>w zDqxr@H3T!w2Z%Xxg7Fw++Bfp^Ks+Z~wJ zCCf_NCCZ`=iqB(FNcAU@o@;&^QArjtN4#WK86=^T9%fZRE@JjYN{$%@0nS7@1X_ZT z9I$iDfH5kGK;PmJReHCzH{9}#xzv2e0$bD%aBHxjaiW{D$nL)}9bo{`Ynu=QbP*~( z?Ua}ftTHKF{BJ>xW`|K1zPgpkuVz*9XK6)VvhSEZ2aVA-z>u zjV7!cdFrKBO>iC39X2I_5P_-nZ!J;jRgNXOv&E;<@^Q1?+?HL!$g|vG81F>U2FE3N z4F}p&hA)=3uk$z~F0SP?WB1lS%m`(3mZ_)Y%4ZqpR0!otJLhG`nNmuPs8uVg-nY6V z*h6UHrr^)DMTaVTarypfy7O5cY@cR!G|Y7E(e}H|kM?8L8M?+(?&-q)=yy2e6y;_9 zEIjB)38`}~qTU*=f7vUTh8ypgri7hc=FHM+P>R9(5~0IRb>*VwH5dahNSDM=H&Mzf z0TRQnXgG*Ocgam!cqiXColu&ae7K7OFowv#f^7n@DVLV- z=d+o_yNwy5C9Y;flpomDFJ3zDGUpw+f9dSk99Y&!X|2PmdQc@hartg|8E31L@)Xm) zVUE^hj-q@F*T5iEX8gZ<64!L+auSRV9VZL8#sk^YaQT{`ea6mpvrc7lmkbK2|03&! z2*o7c$xGxV%%@MrNJ*Eye(SPfFx)La>}0w-`eGk%@7z|&cJ_U@81~4%6HOY+ehUdB zkRpEAQz;~OxAHUdKx{Gb22>o#2d7$~mpMe8#Y_O1)No+Maq4BSw|FbvdMjzVZz^#3A-t1PNz?ahREsMY^Tg?1Y1yCfERAah@+limz-*C7d{#~V6`soe znAgsmaTO-d*|LWl%7YamC#9?sMq#hq(gS|MP4OX{{#G7N9`fe+1#()0&v-n_Pr=CO zm!5oqx#(!n>hym5t#k6Ny+lKjAq+&L3klr{QjnWU?CkTt8l18=>( zK3{#sv}p0#D_ZLx0 zJjFW3DcAxIJc7-u$V95bsNj@_n0(Kag^ZvSV3z(e#;DZC$}`8gsYH9KZ4un8f3%p@ zCSJ&1R09T%s~2I9i#Ef9K=#p=A~;I|8O@~IvpkxU%JiTdFjARQ=1@SwV$XLm>9w$2 zEERBLD)RY|!N>{w$3cI`{5s6R6wQ!ZK9${BIz)jH1%Fwl{ezX5WZP~S=8s<-R9n=( zQt&~dceo6J&?1CwSJ=p(gy6 z-a`hYm0C!u14Alx&JVKThLycEN!($7LjRVmZ_<~a&5ILAg=jRqmu(r7VV_ACqBARp zTEGK?7KHJ=BCjH|1{P0Kk*&n4BtYC~PG#`b?)}}n_j@;kQz>Ep_mwm_?!&MoB{pNj zsNkxvx6p`(P}#lxG8h-pSF2F$*lTNd6n!sd??-uD#Uc7;F)Am!J|@YV+pShhSc7Xj zR6k_Md4EXd!47}@4X&)Pqm$o{)LK}6Ln(>~^H6%=oKyJ;7SXRbX2Y}j(b@3I$McVj zj_?G0v^}KhceKaj_~BnNdq9%4fT%>ZBUvV{GkY2yPj-9w)8K%u2vvrKjS&Qs_7gec ztueBkO=MMu)4Xp>8TCt+4GTHp7T1y@t_mi`BGUFcLu1F_l#s~u@x|eZ^+y)k4hNZaUD61}G;-koT`L0y-%tUoGh?JuCUDz}Tj*$6( zi|;JxBW`f!Y9iPSE^!K=TtKsNA;OYe#d#!bRqB|1!R&I_bU?6HV6bOyLXKRu8C*)T zd{pFNhtwxXgip+7v}K2imI3YZ_PdAFA{TiPiaAbUqx{-nf71u%S+Y7 zQt?2KCG^i;n@T+{k%Ae#rOgnzep(cSO!#2Zn-|Z=FHGA9jDu?TM%PkYQ*{R6yI{sm z`?^tR>y`-0S5|_TKBO^~xH+;$hz9@L{<4gRBvp7!Ph4dtsteZf11Std+ZCd9ySWkk zIQaqGyb2dDNHxQpSE+Q70#{0{jTWkq< zm)%``7Bk~!m;GotwT)H8dR7ra#fZZ(Jynr8a1VT6Q6>=pSw(eHs(zzo5%<37cDuWO zdT=vj5dr3ZUpd5Z{4aQp9`a(m(VGb0qsoe+HyxhMBI&_K9MP)N=cg19Lee-~#`#G9 z^$DPiMm|+b)fRMr#;sL#_m?V7q$RyCT#K?q%mug;SG=61CF7J~(k|&$FJ<~~?EcRX z?-Qy4ll8o@?d%{hF0Jew38=dlPl#AXVS@dq(8XRhkHP)HKf+*DLSuv$6)1!5y^);l z8eSu?5fH_YkD;chw2V5i2`hkvox+f;8`@YSze&XXmqJiR-!QOpDnl7HZgw*y$Ayo) z^E5X(4Q=-&ZU}S?HqST5iUF!T1Wp@ij}}Ei@Qp5-Fq4LtMZ#w#>M9DV@rd9jMHBE? zS<)TE#e-uDjQcP8_x82GILSUgDszTHvXS+>4AfQbEYV5VrG{W;Rgk}VJOT5 zb;LVteZ(o~ocHnN{-CG0DG) z0Vyqts|u2Xmk(2+LlsBWrj$$U)hSx&j`HbDwIIq1l=!CdbZDz#^iFhj&D@hb6}&iv z!JhE{elD-Upit$xuwobv-ami!Vjoru5RpLY=1e6b1B@LfnuNk?(3SNL6Ajja92puH z5osw3oP?TN9eSsb$OE}^GZ zHK*0CI?+3ImWL*^bg06FXm^GyGmYHH0y$Ntf;prv->abQ4hI1Cr(L^7JA^Ny+;ZS# zCCd=Xj)>aACHmM`*sQs?bdL}^bUo#)KVUAEx9fo(N!WFxsXH$!>OsY(-SIiWmVSw4 zt5dyJH7jUU&MBk&3MagUZ@S+bVv;Thg^AXI#AbUe+p6@DCj+&8)%B&?*oDS^Wvy6A z1r{kg>NG&EZ#*rEUfEV#QNo4|l_8TaCY=Go`%d7Bs>BtFdz1&OTc1bB6P=*LPda{kIaqn{Hc?WK zt}vru7xMh3k;f&5c6FKJnu0^yTjk3Wy)}KM5UoPy8_D5nA%65OwAdmYWv*3PP_miY z$O^3AK-zZurR5?v@&fPCXXP|iTVhb_r<4~MDf>oLfHTAj4b~DBP`tjnm>{lwqeTQq z_wV2R=I-5ZZib1TNBl-SFrMiF`sVg6SiS0hV{n)zI#1CCikhPdb6B)T!=v^T?$pE6 zyiI2;iDlGuK@wn_q|y8K?KcVuam$KBC~U+7{|m$es#tVUVe76QscYH)cF{n|&Y;f9 zfXV>e?S?(^9!%fr>d?9oA;hM4;^~0>Mkq_DHbR7r5CLMa zSa$pWhWU{(ANbLFJ$X5TEEr+y)tlJ4@_2W6sJ-pFd;$i?*ToG^Yr2&tCP84LqRNyD z)>Mp`Q(sBU9E=G8RNIk{z71DQ^GAVd>@tkWrhTn;0VW_|14cSSzJ1VAvuF-rQCbUa4kh zp;XnrX1hUkGrBD|>DDH~=-^{R4d+yjQG54y_KM~Yw&S*`t+!&3<&hxVu@CZGA{oB?62Rz@R67Jk|d`ketxZ$1Sz&YmK;Q1_T&f4t=i z8X3dgBr><5>BeZ(Ju9qxt5SvD;HA9^?U|&lONQO#$Xd2a1$fz5##*G93T_Em_tXNy z`n<)hHE#)IGp3e=I@)4LtJC6GRuuDT>}3WJTuigwJNQ4LCyKk(=psTEZdO|*;+?@C zVwCI5c%0kX7IUb0%NTJOT$+Iz@*@p|B-G%GU~Fa%6VxUp8B0vO!@WDW@zxE|;Ur)% zGnq|?%y;-~*n7wQsxYGtLK}09nOYrd0h#i^0Cm zyI<{o_4N%2(j8#__mzWfJXM2;q8oA83gWQFE%8rqhuUwyW%9-{AoWf_B>JXodFomL zLx5T#)vC^}86~9Pt@5Vxe%{#e3Fd z+R`dlk%dW1!2S%pxa-p*&oZe%W)1jtoe|eEBCW(hHsbyv3%8@9lB6_rYlmW0iD=OfIACojWPRo78?IC^f#u#`~M#ySSud##3aD z@YP%?5rNxxA`jI}eDNKtY%~_#DKPhC^D*D8rtMBR=SZ%O{MuMsyQG_1&+1Yi>@J6e z^7$kKH2(W?tVCFWNAI;H1&onUZv&@(b~Ssl%*Urby^7iVsB(m5(zHL%KHGz;?qor9 zW9)BDn^rqmm_b_YsP8aT~3~8=X)R$`{E$f~Q4>jbqmnhIOrHffM=Nm5o$fWpKaHt`96mlB@*ax!@}(dv*6h;+sY{Ji|i!xzES zGV&ds1OUL)ZQQQ|K}|I(x5y+AU@+*6hQ3mPT1EJBGPwwfG9KI+L;O40l04JF{Bak4 zj*TJRN0Cz0dy47_qP`}fY=Zbb>h|EP*FT`?r5Ihd#9i_yj0gUyLqt~_GAK5Jf;$-v z!5Qxx?AwfvH)8Q}dn`sF=B=<$OC5N9=UIyX7xoTQBH_8a{rtJ59%r6oIT{%961c`BL={M|K-U}bnvt$UyIu6^B8>AO8eHrqy-D6>k7>Bt<603kz zH!`dBWL6g^6DB1dfW3#Cwg@gj$w2-U-MnHrt4OY@5N@>a>i*!H-o3lu+z=bC82KCd z)xK5HDd(^;=UOYb+hNKHeo71vx!PFSKUHd&OAhBdA;8;!b^ADGDPhi7>Yxukk8LXBrd&uA4| zQR#gZsYE=Ikrq|iA`8JqTuy-s`RH^&g=Dvd<+$SUX#3MC3<8XvXqAI<5v&`1WPWvY zXLt9Tua9nq*>l}A{Jw|h#z%VNBaP&vtL7U`oj;ban|81IWC|X8#)(6-b|sX04q>x0 z{rjt@KSC%f$DoGewEatM>5zwuPvCV(k@Vzx0=up`3@a9&Sd?oabj^G$NnkYm%H@X> zYdt#e4iTAjgt%MAX5@HscESWMSB0kas_?**Sb@~lfd(>x$76{X>iT(__lI5R&33nsWEiP_lJgwa>1q5xu2ZhKOD^(uwt? z69cpO*0!oC0a}IaN`Sc0+}6GO_wVI*zPcef=}OrDeVMF{h0VsohIh>Ma=WK^Elbv` zu~-?>#pic+n^dqc67RULLW>%8rwSH~(y^+N6kvA)U<&^JLYRSBOG#8hseV;lVh3z? zbZh03Pz5FeQKT^Fr6rk#T|(x31WOw+njycX1~Vh*HEV1WF6}d+1fm^|vmBha)OTrI z*|YVVS2!zlAm9Vn??s)UYgue~25|kp2rOFR|N8!FXrYx+ND09u;|rwjwe)0YRWf3B zCTF4`LqlozxaHxIpM=i+5d-XW=-w5-fLdv)6?Sl;82y}m)vev z61~kP#pM#VL^n1}^Lk7()a9o|XEH!e5;1gGn|ZDQxC#@!0Mw0UrXPIsb$;)g!3{~O zR5J@3rh23HixNA*0CEn$HlKvC(|I$7c|gU5$l!6+8E#6Gh^H~n)JKHNgHXEy_@Uz-D24L3Fkm; z$OcY-*y~W!*AZj3(sRk6?Qqr|3@Qvl$saRniO0T5Gb^e+AaXEx)a&80GE4dqqW_Hr z`n;(APBu1vZVa9u)`DFXHo2lTfSDS{->?O@xAAU-Z;cM?bd1^7B5NZ*{taic9%mwx zw>CQxLRp0eDc8TzjK`hsgYMnlz3$D>nTDv}a2xK_+!z^w7)*$)&!5{U`MU^Bmqbpr zf~uGo`NZlEC*xs4dK^BEoR2MF!E9eL^)_H_u)1?t z;K$_=)7YA0pH2q?W0=F+;A&7>sM|SX2T+;z^l&z`VE;Wwl66Gr8s`Vb80_lcJ&b zi)?`czSOQrQJ)oqi)(3CWwK*{OEq(y1Jst%V}c3f#bnwqo;aMYM9~I}T{M^D(zg3j zXl1Q7lQiPtOFGsy8xR;eO-5jASM5o+u+-qJZOrPfwZrsl)K)E8Ob|Ca$$tCIZU)9L zq_kFR%azt#ZMnqSsV!Tj_r*oaG;2y5jG1i?2>XZ9oZUie@nq-F(`Ie^wy2WR62)Xj z;|{W)xaH!%iu5LR`fRSc>s@tuip+u|eeGLs4Zu|{zzaa#=)3T}e!hDLp_6aMUASfz zHrL|KwfH)P@a6(y&ti9sivxypZ5|qyyyTzIu6b`H#0K`0$VAq`jMeAu_%Vj?Dxr*a zaMIeUcKUS;_t1;39XQ-*2Dqef{O#a(TrqVddMEPq(ru?-8^AW+-y>e57dVC|C(3Xa z5u(kz1nSHeKX~&ZH7H>VFpa=w5HAck{n|fhxs$uz z7%etIvQjs86#sLg6?Qdkesp$KP@R5WAns8eJQ~l1E{N!bz1ai;IuZH2k6aOH2PH0u z`YqCu(y+-c8|T_#V5oeq66r@sdck#6sXN4EDdbRWS_Sj25VuC&qkkeShlYvESox)I zw87dF$~d{d%rr$(sQM{dYRV&6SDf?Gn1Xq?8)ACq?bpla-j<|-{3GK$z4Z~xN>XJZ zgtR%p?Zx+0cKWBLrRTrbI43)3F#^yCTMY#RDsm{tU2QFT+|3>i}y7 zzt@BI0N@qzo*3b0fcIK?;96++a`5ZHx`%f~q*sUcx!}A;uzC$>H%fu)#JmBy3i8Y2 z{0#746;~_PSLLIOpt@!LuEj}Nq4yJ~yD7vZ_R{Ii6p81&Ofy~Ft zSs)8#Ne;;N=%r|wt_3rfaX@uQ(Jp*G2nm%R>(L5>nss}K%ew6C$j^#Yydq8(gmMjC zsZ1lSGX#r8WW2}{L)~w}(!9KtZaWshumDFO9qo6H5Nswk>ZpRU^-LuOfJ`(FIIyfJ zG4a-WMg92m#x(?abne@McV^ZQOIrkz)#!gFs|fCTw{AhO-YjPCM>hZ7tzJ=>RD9ow z%lYs>`Ep776bj{K$oesbj1-X&zxzO~gK-Wz=<{KZ|J-rP2nzQ3b~c^oJNza7L|Sst z9Tn!~WIpZXPrGMQR^ETSRUp{4>FSa_%tw$hOs3y45%WXoZ}Fw{^WmLat+tx-h^Aqs zU~gJ~71fikd80K=-CqA*|H0QXp)!{^NF`oDc{&#n#L*m4A7q+^c0>Y)2%D#czC!}G zRVI6ekgOv}Ez{F2as6x&7qy`~%Kq3^zp_pTWYMuDI(CtDM;+KpXF`t}8;~ohC{vJATiH@6oXu9Pgo$>Gq8L&+I4t8t z0D6v71P+>b!goVOe-=i3UjxhHByvBarM63EXCjA`sg$ks=6( zc`?f%ex$-o^)eDjAFR)`ds?_S_SyerTYufczlky@lVT>p^+i7u2LV>~&T=7&r58R* z?ULb%8Jswb5?m9TSo$qUah8OG02f#ndhj0i@;F$+m8bK#K9v}isHnJurgx5wOfeT}7KzhJP&AxGbcTaNh| zd}txdE5lG%!$B`Vq=hUn@els1SVC1-!Nv}1Jv%7MOJ=$Hnjwmo>@3uXVI4 z?cv!>&UN)3%>L*O=vznKqkQCe-*yt*DvW3?pc~DX?*8eU`*-g4?vsQ3{Q1)490+Y} z*i=R}bgKYMQ2*PclE;1EGj&2Pv8iHU6ubL4g@4KjL%m{LMv#OosG`9}($vJ}ntB<8 zMG^5#f}^ePQ{)aED4PQX`;uKN^6s>Ef{dn2>T80Y{Iyg!$>34Uw6LJ%@&b8OYM{bq zYkG+9$i}ZV8i5mFwrn0inHQLhHKVndOY92>3x>T{CKH-5MWYBx{jl3-^4Y79!~fW z!+-?}t~rG|O(A1$6{%p7T?yR2j`McqO$^eeIAIEnD!8FZfWohk8sZL#Y$$w)f&B0^ zQMZ5UhZOvdYx4SrfSlyItF6=d&88}jaudfe4rPs2tLxfD@*FPVa+Mj=6eoIJzzv^Y zP)&ct6<_AZLu9O#8K|~64Zec$^F?DIFCZMHlMn8#aIsS}&v0Rw&k%Lvd;2VUj3E(y zho+-dK!QIz4n?4Sios}VpO^W+=SZfKK#JztK!3D=O(kTXV_?sjoO-`I8ZpLOwNn$O zsY4J4{oalrV@S^?Ge%w)WG8wx4nMb}rx=dSmR;?P^o0`4w)++3RN6=2G<9vP%o1a& z8Jk@HGj8`6AI7%YbQF%P9X-WR#0axmU*ytWF76{}ysXMaDxFWAxape;m|OAsH20i- zKIqOzGYB}D+}ht}^>Pjmz#)V$IS~$SkW-iUU&4AAUY%KEHrbJ3AO;3DW?xsc{e)Jt zB;2AEqzDS~|FEu#WvX%p`4$4Qk~GKxRG{;6GMPP_NQ!m%c4b=#J~AA)L5y4GvTpC% zlqr~S$gfqt@WILqrhwr^1kh=nK#6IgpCJmP&IfqYdR5-@%_1 zm^MX| z!poM$z7p;-WAPnG4#Rc0?FQp({2pC)Ym3`L(@7-V`jXwEI_E#3v}L3!Xb3sCfPM@p z{^6uW3|>r8A(yzuis+xx_1)sV+`N7ba16F`jm9ji6SNq-3Ys~z3{(YgAqy9PDZLIr zy$pE1>dLa5TvHgk0AS@q05W10fjne=Mic@{+^Y?Q9c#`eNMRT>5`M%6WWEM1E$+N- zmgu_jfC1p@mjGzYTCOpjq!#F|lqnBdFTW4k{s~p=W(Vi2@{XFCd$(X zD5`u2+KlcAzFm=~7}XsR$y^F5U;*7t-?#WC*$2Jm1#P<*L7Rti7p!Sa8i-qySIOqU zuw#Wa^=1^bT7Dli{)@j3tU(CE_XiEy=b$0IF;u8PR!a3iY4Cl~-u`ZnhX5c4khp@} zslqe%t*Af{DbWad9L+grMR$>^xl+A=cJmNUYV+a=?p@|y16lDI-gn3l&kM@hPAf0s zTM>H}hX~{_G&rF96<7I?AyOZk1_7CNal8372x=q4U6|*q7#@#vb-drCnsts!tdsP>*)zOt82$d z2!O1j6D(D~(VDF?e= z8cv)U@@;T~FkeRAki9pzXOlDZ6{g!&d$)S+-~jSF2G^s)5*oGmAl=%gjT-;A$B*P@ zz~oI&jcaf`?vGLsr|k7;%r0k8o^{Vv9BnM!5IK+{*1!af=38P?6i81IEI{qdf_JUa z1S#(OfnYT>&*~2m*pCKFG%K9Wp5*uqtw?;Ci$$iwfsk#{$bXjAvX)mt)0eYChMVC% zrBawLTlfc=_C}_hGT}yjvClZom0Glzi;CF@Uk1e4ba)O-K9&21FlZFqDyQazuBMP} z)kG^8A6Hs)HEhhn@v(4ZYCu$B$?U9dII{IPvT^r(ZHCOlScM;pYu{*gtlvAj|6tJf z-XNc~!+=Nph8x>(W7ipt>UT>CQR2ox(E&3?UZj?ziCHbj*aTU`=2JxJosr{GMov>c z0j7x7rp?iC{4V6fX5_b=*3at6GC24s&%{V6G0%52pUo!Y<`Al?jQ=!GCZ~DxE;M z4aM2(pp{k-vza=yE8qpj!J}q(G+PccVb}gk*s)5RPl*&Ljjw`0IB4?s5)No~2TP>~Ygyo@Jxt3exv|6~uxeM6#RTjQ6XRzDP z)|Dr1$qCbTIF@M_CbwIo-X-{E*LY4(QG-iX46Wkw^7ESO?-DPLb)fa4WTW~$5jzPr%vO_gA; z5Ug@9qu2!5h4Q|+z(TYFk5$zrn^&QioOv~xbo;paS6$~WC?Ig!iLEb$mDmb1pUay- z!a&)Cyle4L%^p5{m~9y?T~Nw+aQU9Yc1&xj22lQ0dk;}^aQ6XDt+f(NT}~!_uQp*m zCHmvi2$XmTT2hIJz@E0w=EX_Fu{@?*JDE`mey~40AfEfq!^?om2SrOu9E>3dfykjZ zFPycS!RTyqd_2nkF4zwwH)h;AD;TrJg49PlTx}*7*Et14(;s=O1xp>GLEI}OoT@sW zaW29Z0<;jJ%Z$e%UVfD9=TfStLzx6n>_*VBo}fcXtOK87YB;gutm2p!09i%UQL28U zWgTDNMQns#enS$=2bkXoJ2t|O8!7CljW(;qjg;=llLTW`SZ5nmjWE528ByN0DufWh zLvc17-_LmL<5DH^i0*iJ3gJG&DGbNW0{0rSb1o)9N}ym4Q@ICrL&3<&G)FEeXrBH+ zch%b_m%PAY{%r~~bOc)n47#+eM5_SeWK1ns4}Mec(25OZ()c1jhxlgugZ{;>N1lIB zTl~iMx8^;pzRzH-1GgV>nZO5Q!Op8v$aPqNkXtZrsZ7R@3=4*;cJjk>q*8kQL4+S~ zZX@nSj=Rgww0rRkoEwIJ-n8#v5k1fMWOj5I!es5hUjSB)1$>22+J6A%-|hg1?xpZa z03Az{w1QB9^a}-?ju8I-oPb1;H@77;)X8LosYf9WyF4qLG(;E@5De;z4n>j9WH|U* z9?(ZKH;5=Tht9D&H^V{WmYD}OfDqh>vGjb<*g}o1?JvJ%XFBf;<{55oA4o-SFtP0H z&hEV(Qyt&%UJTB8nfPG+5Evrn+w5a7rzG-fN8j8wI7@cY_OXkg;!vbfb6&$ zcGXYW!?=bZh=fyGH@uUn5U?szn2j?#T_PsLa4(_s%LZA$xO5K?PLs?0ZK|KuoueYY z>~+UIq4`TXYLIiiOY-f`-Rtzkg!1!HgT8okJ20RSI-SFRplIVe|A#r37m)|lagGfb zo2Rh?{1Jj;1EiStJP1m#tgBv!(&Ub*IGIMCd!=vQYw1H)oXiIUxB*(*yddSA-3U=; zauJwOW)1N{-oXkvW1uCml+)X>fyQVd=4V3-(IhTYiMd2$DPB#Uh_DNnwdvz7gLKTy zo1IJ+apcRG3OQE-VMdSD3=`lXDRI3Z6GA`)iX@oQAn8-dKw$8@K7&)&^ zEU%YgQvr?^+C$vIY{wKJ{?$6}y{X7QwvOPV6{R5H%+eJP-mKP)e=_nE5s9CiYP)EwXrxDG54E z8$|1x3sC$bw4zPLV~Q{W^2;x>N7HHdedC^_yB;;RTg0$J6uCH8(-+DM(EoyK(w zoZoCZ?7=eWnaOruMB*Vqb}T19`7IsCAG>3>}OtS(bJUm650B;|UJ2zxc3g+}UErd~hX4<5S*ktX1 z0TlN?c1kax!U>9WC4u-5_0kC`ok%z(5oeDOFpHKANl_6|vIq^Qh`HdfuxLn5WgDT< znsQt+2;zeh!iZv8Y`a7@mT)i}70z5opsYXJpw)jNZT}ers5E}w#!3fp|9zUqdB*1VK?smgp^S-=;@Eq4e`8mo5a3Rp&)8X-ndpMfF z$`Pg%`iWi=qwaeE8Rfr9#edCl2_L){)dd8*xP6OwSH2-O&M^!mxxAzI69nvnll8@3 z24|Cr78QjB`q%8wHP#fGY~3y7BPZ<`D`MP7GouOar_p;kvm!;eSjk1uk7x0L74YV?uBW4G(3V7cVX@Ynbp+| z4VH-nTIzvpDqqT?mFy2e58hyDoK2>)OvC=`Zh&a~LS0On5r^Ns?#6HQE$z;OZ~D7m ze|1B0Ktz)s;@vLgO%8}naNW;1xNb_3PQDJx&rpwUUIl7&Wt6sK6}n{wKkitie3=<6 z!A*Q#x{bG`8;YLm%1&OUxrH7)QW$5qVCHGw7!Qh9qI-54XUTmME4J(SQ+2c;Q_pO; zhE=2qH58^e^w)I5wF%FEIC%MZ|JA|sXPqA(KY0a((Cg+dxU09-?=KJj_ID{z^Zln6 ztPQ@bxtpl{!}DLBneY5;!Nb;K*4>{VKqx*oAOe@)jGA~MzeExD+CII$^EPWzP%hu_ zBoG0JUcQS=%cr>O^oPCqNKBdq#A_A; z_En{HK-r{2NFLapb4Jr$lX|%_P zWhA|5_@-RZHp1xH_8aGSrE$?M*m#kJ*2WOojUA*55NPr&lkkyUX#Dau;{Xa>6^Y$PKnxUj<@ z&dvCJ_TpD)kin9pwlGIBtpGGcASn}8FT*_d-og5V>Ps{$upnTuk({V+pO5+|EwA#v zwuY-9Q__!TuW)sn(oh0-7duKQH?va^P&OH0e5RluX?B4DN;QPxxqy<{wyEQE18Knp zWr{=}UEDSi!0-a-$#z?JSe;3gq(6!&6Lkthu%LXiV%{Qw>De2ut87?ge-=o83_4XU zhmjgmxEP-0e}h76K9wk@ZqA^c8Xxi_RbdAGps0IT?GY_IB;g}Q;MM4cT+HRh!__O2 z1+Gu71#?eMw_rXpjM8+5xCVQ&_kaWyNT)z|OSb%x0`~~v>vT+98e(L&15KKY-S^wP zXt`!kxU`*UU0D>qv^LJdk}gITf#P_6#;CD^%tZ}T1$V0qZ`+thafnz_q<5zILysm| zaSGz#2W>_P;Gq(NYEEfk&i)(FA0U#)%d#Pmh(^#YOuWTB95mu-+Uv9!p0s&=a2h>9cMmu&GNVw+aBZA;p;-BjQL|u{w zJ)&95&a_#d>fB*p+7*VOm`qavmH$l_(xEZMG9f%-WD^B+N-xMp$SW>y zyH&{xznHdg+ZK+r?XHO4j*OAyUqP^FvFzFl4c=I&L-AwV z{Yo0Y#rW{8hp^1lcOX@#HC?;(jGoz(#e2a~nYO9)-wWr@f z0v%Co%RWb8e57#e6ydfBdOL%~6s&>Ucffp&}f!@Wvs1a8#P5Lefbf>_I10$dzx$2^yC?A6WzP0CyJ}G zVU%?26%YSI@&e$00_&d=qWs3%5cY3av?}8g9Gj6>u(%8WBF5CWluy$nUZ{>4E;w8UuBmsU0YScJ)X3Kj=Xrl82an-Q?P{ z3!d(|b(D}knF6hZ3V}!>Hg$mT+_I^!nj86#x$B0z&t)K21a??<0#>2bzfm z&hvFTR|jF4{-t?i*{KZMwb3Uc@?r3$bVp}#f17#IE z%yRuu!^DK$=Hl}Kfs^1(mURoGanxs+ib-_9Veh4Ue}e2;u87*TAU+Fgb_V03(=kph zR8Zpbp#LpGp|!GrivRQs4B`~Y8Ne`qCwbT50f%gvd;Eu{_098U?@oUAoBMZfi2Y@V z`itzKAVW-Y`n#tkVm zc$yKc(Do?ehI!^fC-d+UBcA3p?z5hVn#N64`N5j^O(YG<&qH!3d#Q)}FUt-m^8)_r zmuYruslt39DDaiuE!_y5I9Ga^b2E8~`z|@%<^<|MXuQBhix)qPLFubbV6|ZYgInRX zB9vE~Wf97gC@`MAjQ zag;Xa$#imh$c%Q*H&_`cBXTXG{5zdF#L}r(UPc@XbJi8>9%AeM0TvzN6fDX-WB2+x z+d`HeWIx=>-pW-!6MbKawG%~ySS7f9NPET%hz0|?ZhDT zxQJ}AS$|C`g**X)&++t8UmCB*a-FyLb z4gFY$g+x0>C>CR&>U5dvbrmhnGqegIZh#BsiXd4f20~`)5Qf$?d%hyDuxbnx2IH#$ zWFKNc)!3NJ^^t!3QC%CtJ_a9z#9R)pn;TOz1{Xx0tRtSZ53sLj0P>F#Xj$?eZZuJ! zRn|*6F-@UVKBpUI+{r#Ox?-cPR@M#J3&;dw*q;4lmyYnRhpQ+6!riyD9tG%168jWT zL1bD;<wHbSbKB&4d#7C@SA>ZTS(*V_@dLB#vtN)~A9k&Dp2B2kj#c&Dx`Z|x{4 z(YduAf-cuP`i2emyHf-y!aY0L9sQc>OWF+CLXkmE*h$pi^w5vMP|f= zXBA2^FZYp0{<5P#$tBJ*`V~hUQ(%l3tT!>j6DeVEyHNq5y$)g6P7=r)O)RWpDfE|& zZje_?WK}geCIYNM%X2(wUQD}ZFsyU#xroIRw&|shEM1+Qh7d={X>0#A9KH4U=D0hW zC&IGc+o1pm!L;Fwn+QUuX)lxjQ+Y2wT#jF^pQU_`F+gPHy;4|lsX}2^)b%iUzNE#F zVo1^j_zNP6FBXS=>e2si%?zRB$N=-#Nh@J052(n`x}P$k#;46Pk_@VNNxGTqMCDCN zNV80uk!!%so7?SD9(L?8wSwVFxJ#ZBn+zmO`nX8H;5XD{$_?cifh)D7eP95e;W>^P$+lX0=4~zwp_Bn{K#9}zhS^44(hl!zq#Ex zLUUmO(pS+4Mt*3TWpSos_oPg zRx*)d%A0pwXDs*+@P0i)@Ti_QrU(M9tDo%C$q`IW;XgcsB5XDpRd~Kq|N;0{jQi@42vI; z;VehA`2hJYn)NMJ<3>tjauZQ>^;o?-EdE|imS*Tqr>S;A$x^AIgwiFsPN@>mTuE75 zPaT&J2T`Yy&4bQhh>w7X9OJ?8xK$6(3{w=kLfUam?D~pWCRoCZV3#$9#bb>f9uP0- zCiUKUpe#=zP}!?@id)|X#8t@5d*k?#mTdqo?^1;Q+I6NIO}x%@n-HbGnd=MzC2AIG zJ%GpKeu-3;K|-qA$(2^$aI)uDgi-B0H8tG%o=m2vQ72`6RQ%g)aXk{A(n7ZEv8NtG z*wrF%@Yi~Eg2)5-ubUkWkFyg5Fx*2Rk1ZJV9nYC02#(6)r;S_Y80*GNPR1P*^-O3I zah;?07s4U}S1=OH5P9%ug5U)LTh0##N}`NiYE+*4=5>dC$R!(NK zvtqB^zPPw(oxbnGw6}*$M3eR(xJh@XQ2xoQ!dmk=6u3YuLqSG%Uj`2ZOeaXaVGty9 z#6cG{tYUIlMmiZzjIX$Lzm%vOFNjmH3}&4T$8a$FW!Og)mp^CstT%48#y^gp)9e>X zTNt`SfnW;{q5M4;=VgGo|CJwyaxNgRV??(#ZQrT~V!Lv`+?4==>r3#C=Si|NUp;V{ zCAj(emJJk~I{_Gd8En{QR}D@j;6US~=zP~~!*K-@bHdb6Qn7|jx;TTaaL;jq4S$#f zUE(mzP<3niKk##xy&+`Ef(m8~=Ad1w`>t%N=LTNbnkOjJB|AojcHMzVC_>3XedT<1 zx%Hb;SmeWAu>8SJruhsNz9-dV8w_EfhU`~MH+WBFG|a{^n^6_Q|{iLk|x^w1g{_U5=HS~g1@-P z5GnU_3fgP)QaZ%+sA-k=1fqn{SpT+z-*HH)$VbW7#q|So-IElou^&EwNiqy&IPE zX^HCCtB|!PltC{6MEr;X(Q;XKrDA)XW$q?OULE06E(l*B>v7TIW}=&oNyw}ZPKs>k zf}3N4YN}8pTIMPM4f|`O9dI2LM(}vwlb%*!Mt3~M*zCT841n=a8DJJxyA-($2L+P+ zq5~pvVPsd4kC-p;jzr*A_K!jpywpn=Z>j*O!XGa8CPU8_PRe1ffR!F$l+lgRlw)6> zh0E+wafmKi?0Pw5Y7cp}a_Fz9d*Oys5*J40q`8%Rf+8>rn$s)ttI4a$Sv1knrT*1K zGKZ9Us(QPqmLX!O&k!Y$c|*Isys^~|jFhZ6&`d@}f~Y`kDNCC*bCznG3n&^qQiM+5 z#dB=IB0Q()jWXmzRdp^sMlDLtb~0!K!Ih~ni6NS)pE9DQkGO%`oFf{ORR^zGK5J$C zOw>yGkZS}1sKZvWzd)=Nv=g*pQ6_stJVZ&<`k{Gt+|6ZyB?89VDG4k zBf95JGTaQl1A}P_jC>#@L`tI(7wUNnu9Rb#Zf!^thx$z^eVLh$?H@*D&wKD$4Ihmq z)eMur(Y8tkL+dokQHDJq&50W<+xL0|OaM!aB<${u+&tqT5U`tR-wi5nOUk zldp=AR-NNlz*pq%uw&7;cOK36iRxq@De6l&d&jPY|q5+Q*~ z0#RgXjdWqAIcp+E0x8T-O87Hj9+*abYR=3~5HYmIWj2&^3Rl~=j;>K@xrJMaXXG@x z{4x!8mk74MquQlTvX@3q*NC@PZG#t6*Mt?%E{!kxvIhR4>eyMD$V!S|@w`!oPo`vz z`V?RLkeju-x$vY|ZY{Rkm^NxG4s*`I50WyG*&5%DP+&UKSRD zS1Ez%sy@Jlm<_Bi@pn;O)riT<>{Xx9)<3b7p3#wg!4aMi1gt+FDRLn z@TP5l#1+JT%9n+~RYF*_o?3gA>*a{@hdj1{NH37K zR>a|6V-*QC%$~WDeW~o(b@7dY_8{E}ML`^IPGK0P2S%Tq#7F7;8MJUc2#t}QJ#0NZ zt)s#eE7sz>)Tl!!RzNj?i6hBJrMe2OBMJEILR!4NbPi zg1p7n0ugJ6ELy9WAHkQww`cOl=|>4*{Cv>Z`s>y?KlGd<~>StGauZ3$e;wdI3Z zC}nxIeAB)Ms|BTAztxeL>VC;2A;`LkzgTpdlL!xDdiHOCq6A(d=I=5OaGq#Ur)e%$+g41yW zG>!y`!H6%NZ`Tb^oK}L$Po}<~_3&fVJ`~fvlXW^^=Q5mRtfbP;(t{=5^fCAKDy>)u z;eK!CXIRKtMZXO@O@Wx)Z1L$?YuOFPS7hqZW;rzvd=p0bp`4UR0M3Iu?`tr35<$=! z6=LSQ1aXvRT?c*tf+}`b4=Bj~44_37Y6f#QFHU?D7D$a1s2#C8cUwqI57S@WiK|~L znA&mMaYaW4dV`@&oT@{OZB?y;m5bz{;xI?&3b!wEytf+WgVo0(3!~9K8TrpPaA7sD zZnp$YJQ2Ln>vKgY*b%8*$xQ zCu%Z`-I*>Geuqw$`R5lOwAV(kqe`KVXTSc_!WK=b)|HgH8sZbDTCkukh`4>9w8`U{ zP%(7;=Vb6Ev8@C+jkn~DBIFV|?ImITc$mQG%ka}{C!t7!TSYli3+P6xN$&3Metp0H zm87fKVY-TwZgEIEIZa@p*3W!DIioKVwqKXn;tqdFoum2DNK8ZbB>4qQy2k|$_0vMi ze!#_gxs)0)WmpTpAmn3m4mJvteJl9a>naq38->YdZ_~*OtqM`)vJaVy3WCzvCp_C| zWkM-YAJ<3I?VZiD?l^}}6aR&%sy@V@l<*>>1tlvYLD>GyBK(N<2Whqvk?s011ddJ${fwB)A zV8I;aOmHDLFCgLV4!KINy5fc`Athl(6H4>MOo)leDGnCtV|s`~?*A~dHZ33>#m<}C zNd2H{oL!>5KRJCdoxr{A!yBj_M{_84;=Wp$yZA)mUPoz&vhS zF7(^%BW0wf9}kVp*Kl*v>_?GqDqH-PqRDbB0#$Pf0a}qspwGD4?3>%`QZsL*e3*He z(LLy3fhI+g0kpkibGz?Z>|~8EzBmW(%3+&Q5Ao(>JoV-aCV~qXMXSoRC6=fi4w!JW zPGbpFX_bwwWkJfFIUu8w^k39snH173YSkG!W+p&5MhK|7 z4!Wth!XBF395p?n-5n{h2Jt$TH`V3b05~mriOq|TJK|{3KO9YFh4y3Kc>MvMve=(g zzrHgVJK}CYnX!#)84VEl6}MHqY4PW`Z^lNRAcT`T@wCzA0NO0L^(IF^ow3*HABtEZ z8pD{|;yHo>h(iEIW4PYi1LR>uVEf>WHV21Wyd&6Z=u~P_f@SV7WyBN)S6)UzD6L`N z=k|fwA7j%v{5T0ma1STC)udU6V}&3)fEA;)?dRa8W{af*t# ztIASZLAjC9E~Rw{x^JpM;`PDEt>lkFjg=3!1vpOq+#T&?;D+!wkQPy%1bS-N0?<-G ze3y&z2FneCB?>ZGLaQS9cDY0V&4_|yOoUzmJZD7e_yu!Sy+XjFT5)h0NFcE#6f5-g z!Yn7ojV2I$NYFtJH-1yoAMGSA8CK!+MLuf%d!A3@K!{hWvXS7eC&A+yv@Y7RuDPLuNnFLExe99) z*N;hn;iG$X8eAGh)ZaV_C{Thu}y zm;wf9{20Uf7kLxI{9tw` z-E2O(VPhPOT357n^D^mt!v~SO7+I0Eln~1cQE|Y=;|$6bZgUCoi`%KpMHL7aGPRH4 zUSi(4UBNsjSGoBXtxfZ;yvEFHw?fRbr+D+i)2}U&49gpR#Bj`Wl^)E8(p<{LRX(NS zaVX)5O=~WAf(a!f_0ZHtag5NucGvv7iTq2$Fw`fA7OWd;JEvThh%X4 z6YNH{7+*^y9|{)|-y2(}0Ms;*bhnJl7vv*)Rdtfi-i=kaQWhp zW^1Xz1Qu>v=akPPyyEOV{GbG1L6^RBv7j>S8B%nlHrFIuE1EOggzZCZvsLI}M`Te8 zD$$XD&ZnaWO!#Qon?@*G`?&3_`97k9Av8am(AlUJhpDkP&haLleV6TG z04`+dM+T(@!lDWMaNU?OlG%{Zs-#;#XMVla<1@ryFp(+Z@Sj6sh}YQB@uRb|+Q|zW zYc_d7f+w=w3Yx37X}wUFMGd(ghZ^$JmsDgC=JSEC^GMXHCdo!QMST=HiThf#!=$Gv zs$=K5n$G5u9=g3LQPTlM0OlkoCa`rDtu=OZl$EwW269fr`SME(B{QkV&6tyiAxD02 z_yQb^ueD$gvO|oniu-V3$5s-PAUhbbl}jV9QqkgWSm?3)V;3P_E+ZFr%0pvE_jFUq z!YZemUxG+X6+HwLPFXRd{)(S_=pr~$+HLifcopFM2OS{VW1#I4A}I05;I6b>Jk=GJ zD57PR^hA?j!)wbO3QP3Q53_IXxJ_LvaHTV*`a?u959W^=Md?~h43>DQqcb&wu~xM-aHxamJAZ~Y2yC)xIzoe z-+3>^))t_PZ_MQpCVaJKioE|;EAmpW*skD`XwszZrN+v$Q%U7sF?J@X6csqL$W726 zSd;s#h7|UQYBykVu3Zcv}f0QQwp!WNXZ5JR8v&L<5KC^TTYSpcBiBM%)b15{T=#bKJHdRKD zs`r=P8+o~rP<03Zj~mRW3%8=mIV(3H2m@T^(bO(WEhaXM=3tcnil_{w#kSzcuoamK zvX6_%5=He+9)xvT&>;tqLUZ*LgGW#4K$mSWb)pMkIqkT*&uCastxaIH!W-RDt&pW@ z)$A5lEoDoW5}QCp2%`;H)%vAyOB)IGT+;tJ(p44W`uf=9@RJKFeo@H+JR1Ywvt)@sq77h-8@l2fs^9V>>pRQLstSxq5%-+wb1Ep?t$2-?SCQ{yEIjT zhuiAt{VP^Tf|C0YdP((nJA6Jj8`_UW|cC$@&U;Yqxkm?lJznh)Wq$-p2fy zP2XFUBaV5*mxBVE6)u>1(kQwm?mGhP6YIRp3T&9QNlMv&74!gBVJ$_qsNb5r3naA) zmMCy=S%&p|WFRf1aa0))ANdy$(rua_LuIcS$@k?Ql!K7Pjv!i{?PT*a%3aL^aY{$6 zbM&(R0)ZNay?^BI;keZuRNMMPOx4feTux&Lm z&m}Gd3!& zVz12_?%T@HbsjuueO|S%I(q@MpLK1Sl7QeZZ+`MiJ2d5jLfFNG}k;JADse=M3+RT*?{sRR|(P0~W*q zYT0sJ0|8+M3*n076#(($cM}zSZ3Vx>X}e;3-E*vmsjQ|;+6zjq(Vo{&FVkkJ^jhsw z1h!n8u4LFA)Fk0##~aS-^Bu$SQxLxo7E;g;U3=-4Q>9yLSrP9}>Pb-7T@(Fb<2t=IHabxQV^1x~wF^9il zFYF)AKitZP<2fUVT?}U@+-ZihmOW)H8U>ukqBAj2FHp>=5Qrib2iYMw2SAk5-LeBX zD;3Mu!P!4C&vd{iC>Vrdo=$PmClJFNbUGbJY={kU-tlFeN2*rN$IR81ss`RTZ#{ed z!{g55XFu!e;`Ys5dWHl~+^Z=vNMHu+W%B>}0QXG0W2HtSgi8z{*Y0~%x=Z8tZ`q?42igAfXHO3Pmi=<@>hIa%t4FU6_RXtcMzu>N8!XsDx$eg^B+E7?N;j@5 z5Jlg<3_Jj-Kos8`0C98nK4y4;rv_OYzxb|ltT^sSJNKH9-kL2;sFRk_(Fc;07GNR<|pri_kF zveBhDLKe(~mxN6pYg2V%&6^FUIeUMWgYi(5iWrcElr5wb55acxK5j*Xl)=0%jE=ci zuEt`PZCbU5VjXDg{TB3*#p-+MY(+|4WG&lCi$rMYaRES(b=&}-KrV$#C-`*8KDwhr zUKjG?_c%X2f`;R#IkwThnTgc&V>)5h(VM+Q28U;pA1Pt2rp^N)!R`v=MTwky|y6C%!u@#N8L*6p2eM@CoP zExW3+^hdli8_bxfa~WS&V&=n?Cs+-u?WIJTb`lWWZ?MRd_ZjJi{u0?cFp! zqiD6YnDeY~opPeSxxL>VZ_SkB1P;YqiMt!txIcG|-F_M8w%g)0a&6cj;=E*Xgtkb8 z{~JiRJxCdD{(iGzdtt-x$@*VzVh+L6y@MyiwatlH5l~|YT#+&93fJ6;HL@u=v!oYp zEu^GV7A(5k&{cyVaHqo}Z{e!re1)>i@L$-CreI1LUu2#a+ei?3)-VfS_#j-Ay0eqF zA!9{~R@8|c?giwTZiPm&IMzhq`YjmNzl%nx5E$18cB~Y**^n^$!E6Tv91H36v#H~@ z1SuDzf(3{zKG64wEe<`pm7v@G8C$Ok9PM;o1LWtzsBqvcRBwAyPj?1N?RXf>W4X; zv1SXG7&p-wHghhYoO~0xD-n?jUN|?lhzQ*geamcqrVy&JkeLP?bAe1>!_SxM?Kub{ z3#Z)HwrXa_1gD2gTqYYZ1HFL4#5doQ3Pj9B3~EM=LQFZ9j|BS&Oo_??lPU#U-5xW9 zbhMTw&!EEhpzui9fSSCHMDGsuNJjK@%9Sw)aa|)Hz|J5*km(}nJYW>CPfbSW`QfZP z7(D9rpctQVd$RI-T;c4?$_;&tt&c2=Y-gsFY(4YokV1d_k%;Wzp4(g7turQylTNsb zQrbSTN_laJI)GOtjM$b_80C_}mg_ND6`$k1ADv%I7GfcbDL@La_6*GM!FVuPNX=K# zXwV9D2!QRotvk^^x`1z5N|V8j$P^TzoPG9$#3g5y_85;X(6aAr$t&Sh)U`O3etrMw z9AYMV<$26n$jDC68_glafe$Nv+dGh;{0c7L?OyhpwWJ<|+S}!tW69OqIi8%IXHx~?>0Q`dJzfb;0K;IvJcW6*i7Z%~8gQ!;O5B|1n$ zaAK=pX{#@_;(Jy4kf4JB5}Bw{Jw%Ov>j$({k8Jmy+;Y}EeldamJv@Ybp;$ubTWy_A z2Z&mNdKBe9q^P|r%_O`2U6`Fs`S-o>{Ir9M00xKNE89JLHS`itLR)IgRz&N&uOkko z!6Vt@jfT+nAW#*>+9z~P?`P<}yJFf}_!!@2BqH>4q)|GNTMv3sk5hAngpF5b&}3yM zhLU!0%cOH=c#$Kst}6@uu{SJUQ0y(sS~x-c=*^u-^=9ZLs~_lHhGTQVSqN8&7TbqY zoICL)p>vkJ;#>)h?{TRK{+NNO&U=@fd`XyK^2#R>>yNK?bQg>%OoD3Qh1#GRj9q?uj*B#TF()Obzy1 zI^^2J-qaU+CKwbSGg><4bu?1>xvV~j;m4DCF?t_>F+n6aAD(Q>_6ptcd)hpm=C^b^ z6>7~gH24fAB^NoC!dR9W*CH(#P#A%kXq<;X#sq;He5^8H?--IGc0s8u+8X&9)WNiP ze)kB-&xjGx4m1ME_XkEyC6fPSi9;hQPJXoFhTtRn#4VVAm2TCl78J-m%bDHU_$jn( zzzGgZ1}tJIC3Q?{Y76^Dn&=j~cOlD&j8}adtU7HE6Fb?-IyCX6E#tYU`ozlHuX&0u8kQAW&jr%kb**>Iz1+Gc-pAERdJHTEI< z6%ku@GK6%w6YXY}Q-EK0ULZ0T(xYoi3z*h5iJ(8W*>teW17j9fib;zGZhGc7_c-%2 z9|4rw+8 zU!szFPSh0Ek8yd(nCeR7Q&d)@(lv#v=H=Gfpr!&pci^jV5j7zawx8is%|a_R>!h#4@H_<|=&_Mox6AL~7z| zCvr!E?b;ltP^ps;pVLgj`$n*j2=A$HONB9_eGryzuEDq{>}=|8?k9$Yal?K0d_JS! zn=RfHPuM1o1HSdeUx-@?Dw%@D%>-!kWq$r1(Vn#RA16>4DrQ@4pK`0scu*bf3iD>a z3(;NL5nc5o7{avWBhXCkh1rbs)HCi@Xiy{cHH?S@UUI|ZF3Pt?CK4adi!GS6Lw|=% z5>Pudx3=Ym@@9;2F_c{ce}BcU9X!6|!8ncIk!<2O9_^*~0fvJw4w=Eb67ulH`cZJo z{i)8z^_&8u^F8gr#i$%U2w>RA;T$nT7+4%tJA#eQmE+PtI%L3bLXUG%Ds`vAb!kzU zJE=>y;!@5zoW>){*Yp)mJh}w%;It%&OG409w;*J#sHTP2O*!VNa7E6S*LvhLP$k%I zdwNRVx&m`m%*2lA83YdQo9r$i6>vOg?^~kAUdBA{q2v(v08J}9ms-k=xUA_dMq?Q& zp*D~CUt5PHKg%SX>R}he$>T%?j~RW4cnOT&fkBdD5|3JbD?Z2qId;bel0sp7lv1r| zPF3CM3?ITGI0kWWdc|X@06xnhx+i*7(23bz9RxWQ_av87`4bMoJqi~}Aa(Mrfn50` z_8WY{zoic{k9(Q?DSfg>8X7aEbfp5p@kJRMv_;`r=7u7$^{6rph3A$lW)2=Y_HZXF zk6O-|J=l-CqsZ0t=Lx^tvqd|rGifJJH*`{bOlUB-D4z{)4R}>unDj-w$sA&jgwFhQ z(nsuU90O3!s53?U0|J*Sq(vJ_p Vg1_ClU5Jo?#+SGEZr}d+e*pp{8t?!B literal 0 HcmV?d00001 diff --git a/priv/static/static/js/app.def6476e8bc9b214218b.js b/priv/static/static/js/app.def6476e8bc9b214218b.js deleted file mode 100644 index 1e6ced42d00cf29dd616d2a7b1725cb5098c99ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1045614 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쫍V~}~K{vGDx1q80&=A(eX1q0py?Qnx*+&$4RK1>k5(Z7V zU2+3-O$`2bbX7$+IPr!23~#s$jB9>QM>i&02E-lUke|kNC4=% z5tFU0DaUgAaE8L38lQJ(7)>#+-r)KxSz4JcS)_OQ%`>Wrk;G(kW-U+oAQKRfZBUgf zN$@ls9ZX?>AY7y4xjv-3KJ;IrPWA?fzf6e_PXF`h?qq{nugp9+@4{@*F;m%8sX(eK zw0*9my6d}8JE&`q;JQjZeR*u1{7m(dW~#!qF^ihlOm<3Mb@pWr9){0gtt4HCEfff4 zyqE~C%F>wLULgtYY;!KyVd90VmZn!?w(*mMRmaqmZJG_yTs99B*EO$H7OsQae8{ru zBe~6YS+Q?Y7Ma4*St7x)^sIBL^5Rjfi`4%rSd7ALUu%UexIbn6FO25==Jt(bUSX~F zG+0h@Un9k&j)P(x@DsVwAa-(cYABK!F$67KH#P6nvhI|B`5F2mSKq=dtdw}RCpfQ3 zYAFpo8U2e<|4fz;&NA` zHyLH)q`?4PaN+g&E{afLoD3_xxH})6dqc;hBv=!;S|jiY1C(&Ww+7m`@o66~3 zg9+EUq8l9Pxoe3{_0q9~Z_I>b&#kNQ-|kqChf#!=#(TG?FB~_VQHUF2D zYMdOr>yZ*>*q|SgR~l!(RN(Rcl{=H2j>w~*_#QG#azCiA@Bl}{S;26W+NRHV-n(ZJ zX*Ed`vx=T_wDWKvnm`2;F7XlauyH*Up4IQ39q-A_$wD&bWp$B=f@fnGsl}=FgYsUS zZfP4Uc8LQOO%X^PK(b&Hg&YK*!XknVK>>p;PM`V2ZZm8@Ebhh_Wdt{pS+ik<#jPP| z<>Z-%Ou3vZ$bUN+t6}Tvf%nvpRCEHEhHSH6N9Y}bsm>8)NvlZ)Z@`yKc1iceE!>3l z5@qEP^ar}Ff{n09dcd5Hf|pSR;vgmJzxEyBFBF4Fh<^HNqICh4%c^Wou4WGKY`p29 z;;H?#vE4avfYaf04)1$Ber|LXIP>z#3#|wo$=Za5W@oiDbKIO;8}@cZNNTzVqe4b~ z5JTbh&%CSxl;*6=Xb6{-_^8TZaE!;Cr7~dGYdShNp==6!w@=B{LvLweUcsyGE5t{> zMfzFM7h8liR1mq?ouEc1CytyhbCat?wHT3X6#dv z0WwrBM;txKoXdTEmqP)=tMs}s@$u~Zh%O{k03H$_{HabBsbjV|y@OCeBV-Nm7`b4F zbscDr6%dLn#oU2qTC>!&<6@w=;n0GXlW}&HlZt2SC|GgbwV7#xyRKz1RM9I&*r->LPi4_ zi60?4l}m!ix%$(LmMI+3>V`f!7mU1C#rhTNAjwL)B*9Qv#tbdM>L{6;GcnR2K~NL2 zV=$_wb#bwDM+;pRCK^UkxcI^#fMP{K1~K*61t?aHfIbM9cnett;S|OLW?r&G8!Yh# zzn~2q!=MlYZ29gkK)ozf;u_=-;SnTDDPXYASzmA4B_t~ss4S8)J3v1539HR}s4rXe zY>`lSlc}Ov5FslJ4HHPUX4Y0vECeUt1~dp0iuN)Oh|w{p;~Oa{2fZC7OQ)1oV94pc ziR!jVcv=WuF#jzcMay0;Nruoh3@4B+0+qYY5zc~gVIgm^p$qK;nOhN-U-?cpA93Hr z1fvjvM;mcmmc&Fd#8x1WLmjku$5AvhiGYE&(=v@-j|h8hZG%d=;TPa?%;8uxWJV$v z?5S`sK+t&Y=Vtpwe#cq|MGmI$)f41nUUZ(s9V)_gcu^eX6V&-}J&I`BITsh{whw8I zRz_zn?mh(sTrQ-MK}iG2;PA)0046$!PS(z%0YTwfKjJq5=?!QEvIatkrZl1U+GImc z`9RWd9Uexl0AX(a11VKyKq7cSyTqgHKz#PV`}akstMw-S&iJlQa=}ek_${1td5Idc zn&$>tk||Qr9V9mg*p}3u7@?A;@#d{GGbZgXLO`ogb6*lqPpoS2XFyhc zD`mId7T&GA@HM{*1h!v2SKg-H`(}2?^H6!;NJU%Kd6x&;Yk=(*RUXJ&zYB2&-}8*_ zGoAXi6zWh*lsxq4u*FWKQXi8a9Eudu)nPOq9M2d(97bP*o6$z~^0<3DM6CRLhF;k^ z>5?D)5~^vQEl*SKmo-QE%d>-Ru}{4W<=2$19Gp+lZr0P!OaA&nAR4Yx114OI$vtWj zi>p#0vi+@XVH-p+F>}0)jN|}1RF{%~!OSl>fA~;C*P{79EeCmX#VF4^=OhAACO^-y zb{+*cwdbQ?^y#cKOkHCxM|EGA72&!1fMLh)1dOiY(Aww5|H>$Zg^j>Lv zln%1aLYJ!KqJ5CU?$UzJ$u?(`Lb36DIzM8+=KCm!F>P?aM2lo*;LhEZPzKEqkDU0I zO`jZ!lZBLRG}i-ExO((VAS>_`drniBrX}^80Z4eAs!_JK)#aU~X)y*`nHu({CE|TC zWC*}ZYB#?g%B0abavsbm#z4jB+4H&{S+9;eML>kKLpYyFoPfB<0f8pqptf@JA4ruB zgD-Rz0(pWkbX=VOW=q|{(}Hw{qbGf0{DGTB+K_xNx^$o~CcdMzayDV4iY6Pbq3f4! zONHheRq$v|hCG~ag|e#7uXl2MpNT+o$XV|TsThHYr#5h1{RetWX%1+bE3KdUTWvrxO#p5z`G7 z5YGVrf`of_O3z7Jl7C&SY*CGYH>=H1YOu4Zo?hX|b{+fI(=pjCuJ$&!apS=6!lkYRs$4}n-?8$qd zKY9P(KY8zmPu~CjllOk{V;M^tw}l4NEvB$X!VANo}&uB~fZNS4$ZY+MQ= ztihx_fDPDS@PG}r@q`gzlX7B`ANWsN$kV-w`WO21U2E@s_Br=nNhZlRbiW8Aq;vM! zNe&y7c4`!C`9y(iPJ9ppv)5>S>FVEb#dtx!MoV%wFt{l3(JahH#m5=Vv zecN$R%QLLz16wOw!Uo(~p8cAiTG?9sCvSWA!s&ZAKi2MWKyz2r$ILZ`j621gKH@Mc zJSqR4?Z5jL-*Zta8OD^8Q(o@}Ggs~%*G-{N6yw4EnIFD855qkpS_-s}j{ zTw@-2ag2MXXYQT2xN`J!x-TnZEYHp^&wK)q+`n`fXbJDUGKLnyzuEoJ^iUCFc@}s9 zYQI{Z{RU7H)tyiRQYJTlo~_4zJK}%)Q5ZLnQ-B5^|KE)TD%+kth{P5kGmCv|Proa04QW1#C3*M2D@9Y!M zfW5mGKj^g_O-9%!JglEVs%1=87%naPq{K0^iX4^&LUcmtmYPH%C_eqz zXoAR0pvg>p?roz$pF5S{RW1$v@YlmzI>e!SAAIxR$d|b<cf@F+jiza{O@T!~0jh zU>{cwom-yej5#C_>2o7j%oU_)dpU(rwz`AJt7uUP&_?3I!X4k%1~m6zNqw~wk&C^J?fXN9OMMNaLL{4 zl)Lkw)lju00IEYKtY`K+!*xh1Cv$|6vNmWkYb!fTg$(Uw{?cg z7#=`4o%L`WFaUTRj1Jf{joD0s5B7g}@1u({Qge){m`Ol7P3(%Zj^#PvnqXclXkwfV zw7jl&a|_09=8RZz)Jsu_vLIZ+_S}002DD%f-&x=1tYcxe*h(yH()F!{4&8n0q7i10 z6DXZGFowmjW&8=wzv(=FdCqWX7V;Y+-Mr#SjvOUxz@p=?o!e}jks%^v6;SS9{%qxj zg28j6DnY^>kwmupZx}wX3(Wn9_<>FwuHX{DspZ*s;cLdb;#y5I=oVun$pMxq26Cgb zZ`knNMf$h~###3j!WotH7*$E#7RbtOST648BRsPcWsJ9sVi;4qNTkN+Nf1+w>1-XM-Kb7SS( zk5}%9uR?OTzd+q_6@cLV*&mkn+ne1}!;^z!=^ee^zwjqyFQ17uL53Y17iYJb-#z`& zgZJJwhc4QZ>gUEc(0JYDDPTzVZq1sc>YVL^*cuyASbk^<(E?nmt@(yDA)Ic1b7XXC z=dQAx+Pzat_f9ODOm?{3shJ}`EWLUE>#rh#hn7jOW$&@KygCTShoNu-fu%)|g)TtM z?l3KD(Rc6GEtfm{HV-wMV~i-x!@wXkdy^c@ywAQt}WSZN7Ph(bBtt=0B1 zs+oZQat)y)2D6iQ-{TxOsrd|xMF_iLZZFcVNx5`dyOAJ=m|Nf+UM_zZce=NcgC$pJ z6Bxu^x-JABC&-i_QbkgTU-_wYC~!V4GIwBOh-yGd8*bb!17)Rc+d3kp^nW2eT)0xd#tudJ=7ImZ@K>V}G&%U~AsSWjz? zDR9?~1R_PfA>|-&@xN2OpZiy@-#z(Ou_@^?xoPO$U%$O~eDU6uzuaBo=&s#6!*==> zic;7vR&7M7(vM3$qBw#e7eG-{QF8w5!bPO-pmfgKO9fI##?c#;_CCbU;qwweJ!Zj~ zqH0Nc0dQ8{c;~@6)A*%Fcbj0Q)tbQk_K%sGki;|=9cL~UthqP6hF%A>lex_g05WMt zXtC|Q2vO(uBural-(@o)EKAYSogI|u9F(&XRUc*VO3PZ8A=VQz-9GcELZl(64&(m$ z%Vw)d@<$NU;A%CSWlb{PQkZPKE(qO_7=@(v1yW#6kjiZ>>7YrtGw+x{C0STwBqHfA zdv+I$n>C?aJ**?8cbi;xA~G{UoX|2Hl(DxReB@r!rgpV`20NCPifQBy3XlW_w}9Fv z`=jz=oAGY;!xT`>4jq9u$aqonE^oQjG;nA@G^A9GqEYP**3i3$Pp$m*fN4OG4#q;8 zNp+BZ_0&r*|LV6-Ne#?uA4QAW5#vQOCch&i!Hzh0!CJD#ScgpB*-bQC?4L=@KD3nN zlk8#$cT#*T2)vgSA#PE%9+H_ER=&Klvj5<{x4wMv5lbPYzq8Fhj|l%}AzX}m-sU`e z?^71?xqk)=_~#LSVAjXOIvnXID54yktCQ%J81z16xp&{cc=z;m8a$Xgv~uA+di~*B ztQ2$)Zw|sEU8=*`cdP^wZ%l21P0-5u_^c^}Xi*3c???MkgeOm|X+{iW|Fk`2?W2|N z4m>!AR-87b^OZqbR)Q#gl0d2Rlk^JaF5{eAQ8wC+<|tAoGc2&dYZYHe8}KJLrsX;OJjhPIIy-_7%$*?R%S#cJF9x znKm=d?_YjN3z#I|Q~cW?5DpJvTCnBv3z=v3QsG<|07(Q?Z!NPqXcfLmCf0sJE>MNs z{K`Od?4$xvbZhL&k@u3Ryk=1H5KTgnMG~TQ$;@0;A)ay3h`JchFi_rIIHq}zkDx^M zkM8KN^eM&Uk-CZ-FZYFO_NA?E=JOxE{SHfc6q7kj%!4JVF=4O13fr`9lb5kx+pTFg zIu>uMHA*K|qQfcY!J!|09}9g=r8J93b@=|UF9O=q;&|^S;^eivrx5L!|6#54#=(^X ztn2E^xtn(nBEbfmbsT|a=iCa)8kc9z;I6SvUj)(eP<}z>(1K~R>?_FKFfEo9FW^ZV9NGri~B=x5kxHtkrL}`HUNqSR0 z>HB}Wy0XB+pv{bx>t_(sgAd+2xI8`}zWqD36+1w>9|F=Kno1J$YVOb}fD@sPa;Lkm2 z2N^{mcLdi2i?e@#a2LENT*}vkYm<-pS0pb9{7a zglT3}V9`Vcw;14Mu-k>*L_iDkNmmuj)Xef+W?~kd-rf9zbX%eF-RwKR+WJbqleTsB zo*ddjoKdK4qZMH5&LmEXyll%X6m<93&!h8w^$P{&&ZXs^j2g^kC%S?Qh1LZtyEjzdVg~Y;*%0CR|$0u1Ix}B`&Zu!~u+kwbtd)bjTm^n^O7|RdwnPe_(eYS6~%;1pVz4 zMt!8b^jv*nX60C69J%X!pLOPDJMX+P=GGcfaT(GM2m6W)^GpKsl>EwN?YXG^2QjU7 zi!7-Y9aBpBP?Y&1K`2GF3RcHvQ3%F7-b1Eidhvc*%I)CSC9^LqgdtP?j8Ggh+S2Rh zS_cAvz;zrJE3%L$zsF_*s)HgD%mRCw$497fevb@fuklSR%wO{rI#{)3^*UR|f;%}c zxPZwC@|CPnGI?3I^qerR)_-(>_n6O*1J!6KhG!)Ip`1JR%ElTehyxlA^OgD$u)Y` z#-YmSl&MAan!a{bJwuFd+`qj4{@YN#cUF$^F_L*^2^Kwt${ksr`^dCWWEgP57+1uM zC-0v}I=}X$IaSNfO!jBHFqhR}v~uwNT3vH>k%%jTSVX_;|fH{@< z2*b5XAoOTO0FfhP|8hN;%%Ld}g)p86*K}D+O%$m#FBx9RiVYnqA8GShC`KHaZvfV$ z42nS+%6YFASXsoJ{(gtV0rmmRU3qGLEiwobqAE2RGF^~F_q)Gv zea*BEg84a|E@+|x%i3W)_z?9FGT$qagTP+PJg2Sl^{(BA0^{Y9p3nuMDtsFu1lN(x zDyIJ%iPOi~)Jp?~2FQ5ek|0aiyF3fkV_t9Cym)@&?&DX`IryxF`GNSa zocaq2j|i{~sUYV&aa`TUP=J7im@)rk!CX18;EIHk8#7II)CF`;7&HPnDE(tkR;{0( zn!6X*dB=^`xX2s#Zhdk8G6XYBtJq`)&6>2R<(^o?pVe`jwYIrEdMgE0)F@CO@6D+j z$5>uhutg<0NPCC%k2;RdaW)i<>bwTqp^tEk97U#TbP@Q)Dv0Z`P`hx?5V!k=JI|1I zz0SjZ+o)Kgu2pW@23V5j3px=kMAvMJsi2A=<08@ap>3nDCH;`VrdgtmOo>Bl@Ly(c zt6TPVgapAsY}?YesV1{k@99=s!=QH)ThaLu@DMNT%7Ya^U#hFkm8pmaW{sXlwcxt% z8jS%Bv9hbg)AqXl8w8FV?q@y^mwfp=xCH0U8ka}bn2pLnG$6UpPz^puTey1)rtR$4-#Sadn5Hrz!hOs00q55?)o|onpliFB%Hvn1TSN95>F@0s`q{1tZSSd&>PgG zkACTVJ=%$Zwlkq z(AJ8<&X-@?gsL5gASaEs6gMn1Q&p3=p{!t=e(qVT-fY>IIQ4m()h8zXF+&XJz|Y6} z>8=Z{12=?h*lR}ID&=~dFUfA}@Wf?}6=7QZXzSZ(MISYxi05*p7ZIxV}=EFw;z-o%l{*A4}zT!nqKUKR}?X z!iz&m!{s?p6VH@|*htzDU+>XFm+V>H<(DWMRm%o?gt%BB1cB9I3k#lPugREEA}fzNeXf_OZym_8uV-ADbZ_LFgZ;aj!~We_h5k9Y|N#J1*aAE4%0fY#B?HmSBOg9i;=!6UeTAyX-RepKvZ= zn=j4ww(Fq_+a!JmloQ{HQGGw_&3aGp`W}6J~{S*;i|f?s)*#AGqv7H|U)VqNkVxQkquM z-4hcGVtF)F>u58dh@*6Y#0kAPW@mW~$uZA15Fi1!mED;!A&T>=%VX)I(INP$Lr?h) zyTb>P+vJw&Rwb~?V${;anJiEa)H7pOM-P4jyUKai>j3*~svc+#Nkob~7{DXRyoO-3 z=_fmt%uBfyl}%li>&sZLnX`&b&%6NORvMXoEZ+Y~t$`uHi_Q6feOGF&jtYW#Cm!-3 z=@6KXl7Wa4`tBl}8{OAcBSQ3l8hg7Mke zTqrC%Mq9}14t9Z!&S5&hqt=~=d_86YpESq^A72iI2s`K8*Rv$yGFnsMS?JMUStsV_ zM>hbzu$2U$tBvmE2-90bQy0dKqPXU7ay=0;{bl&SB3=>f>6Cwjdh!!fg);;zfHXSR zPbwm@M@4?DMeoTg!sg?tHD41(C{nXD8(;&}_=lxKHh+%fwjCRwr%iHl($&)&w*f54 zSa-k-PahJ4@spZwv8r>rDyl+-iBmFhNIboS_kt0Z79>@%;TM)?(f*Q3$=u5h`uF^@ z|4EkLL-(hz-@lk}Rx5$2g#GlJfp3Ogok0VjX)d zr`zVR@0C-6e=qNc$V8?n*hg6TczHklpVpB{wt467A%sNQ*fdgO9dWn*H7?>g3a@CF zi3rt&|56Kgk+m+|Xbd)#04#^s5{y7e7GQ!GwCOx+hMXa9vC9T$647RtXB{Fms+|G5 z0BE43p0W{b8CV5vCHJqO9m5UgqfhaOg@1%e`#vJ}Xir;E-I!1aZ6S!eOZRmTe=H z3G0VR^(Z~NcwaF&OHk|4c~UU7 zV{y^~v!86zer0IgzBe}Qpn=~zcspDb=~yQ~8-iIfHO2^#h4{=N}m{< zE)X-+w_k`Z=I=(w8lkv#JYkuRcSzqW!D)UjGS$zQS3&#xgPwk zGnCuE7PS^7uE>3z{3Byj2#d?JICnWgr(;mvKs9R2GespN!QI9Ls{@_1UvP$*#Yl7q z&Ibd4Y(d*0*Xbg=q|Y#%jG^yJx}7y|Q^(xzef`y64yIT`7QkUGJ4uGw!NMt!NPnUSMn_qW$wp~Qq2@m=UF(JQ-02_-Cn zPze|6phb7U$~Z-*w@e3U2;xD`bGUeB6>DBEjOmN#Ob<6Hm-ITnZDI(nVZAo_I_iZz z<)&zZDhW@SM*V?l;MYy@Luhp2;VbEb&;p!uXLt)2gZhIg!y9Alm8^JlyyQF z_QN+95hNKplRMykY>W=LltrxYgr5!~FG=L!nyNA1Pd?iwriGOQUqEHh)Ec^#>VHAj zpdz}u$i)gn|Nex#h#&WE5~K?5B4%NA()|GQ_$qaVUf}?qIU3+F6WRd3o!hAPBaUB+ zKPD##=dd&x;Q+IPkhR2qGzRv_l{COK`tj-0EOC8m@(B+c}Y)k6E^O9$soP9YAi zF<{=JIR2WQSmO#2kMe_zbmVSC;wD$0GF~Ka?A%EMnEePk92MHcwuZe2_+12&#LGNL z6lsif<>R?~Cywxdl#Z4MAW64!SdC2?)eQh)Oanew)c`p|&J`uc;Nt#!$VkX)Idr%o ztqK!P=Gp$pIBF0B`MV4&5jNwv96^iHv2uL;tH}A#0HSlpam1)W7pWV?$aqu#Aecgz z#ebSM(e8B?Jv?RULJ)odDCu8VCxuWef0?roheO%~BWNpc93UD-ws_4%OiqqHxA&nn zNER?HLNPnq#{P8`M)eut_J+K&N;;b!pNK$!K-EhJ`^ZBo~ZvD^lbqp37Nos7MCxlXeuFZVc~j?85^v4tV(92!b-7AIysB zNheP{O3Tr~%J8E2akt5Yi{(eOG6gB}GHEth_x%(5aB#i0rO)r7Yqrx*LV5+Y$nQ`( z6kSlAVJ{cczvPYXnZPkox+Jf&cim^B(IRCFLC84cvIFCk?5r+xrO2Y0>`z4%9U-m+ zju_8G3S3fbL_fgLFr^#OsBz?n+sHQg8XaExskaB!NkGHq6~AB&X!eI7TamtAwV7z~ zyac+B(bLIv!~xR!w^Mp*Vvs0vhq$EImuk~q6^=!#-91SLq{ zF4Xdq$WIXSnj$!{=yEAp%+NeA@Tc?4N;5Rzv3M_N6q^UJf{m40vBj_Zc9G!8x{&^1 z5|TCjJhNAMxJir*;y4zRv+e$+qxWvYj4Y9ZZcH;0kcy)utYZ#lgcJ*ZfqwuW*y=vl zB^s#11c40YeIyBDFrTFuFCgoElbe09A>fkiam*3SGsUd_*$zrGlDMJr-3ikig{!u_ z9-lHP2U+i2HcQPq9DR*HWm4x5B7gy$$Ip_JIkMBz2%Sd?&9-(=+(Z_w~>YMcQ?w&`uGPvd))AMH3WJ$QTs0QRIO0h3U~|zfl4dWZEp) zTV@hXE^tMWhm>2#CGxrmZLaT-O*?Nd)dJAr5-&EfbW?8TI~k*O2bwD>Acm~q3e$*L zs@ypw3<_J=i)x8t!Ckef#MtZhHS1wzsYhCeYp?ol60Vdh& zI3@YdJey^CNkqyMUIZ6o;)cYTy4EF2fn;ys0625*gN^L)|GWc#@EC?kn5BCm{fUA! zRMIFu#UL-suqMz0^2O!mO53m2zTOwI7nEO!d42kcwzra%y%E!y2mgRwwm>#ec%{w& zEe+L35wYQ+Z(jL0?19!T6~UOTr#n|T-Fvu?Ab4v*iCgeBR%x=Aoo0AgRMHi3;70}( zEGrxYTm25HQ|UPIVH-7kf?s^6ByROs{Y=MW(zea?|JhHj!|+XGr<;oG26g?j%4q3e z!r#V!cyILTckS}%GHau#E*=|BDL)JItzupAXP2oD>F1Q0R>Cn$~o*dJ;@iZrnV_t>NaTO{jcsoIE6hO4@(5$ zZ5Q|t*b`r>SXhFy3>_kx)eg#%23W7XKCJGIwRaq^?qN9%!~c91U68%oEY|w2%OpJ5 zk+YxLGELO6Vi*Gua4wjOVa?FR1PVJN3LV7f|_=j&!{;>3xj?W6^ z^lTTG>D`5KE!l2I)MT%|H}+8+NGV8_Nh((BW7p9=r0HT!aG@HU<_YMDvGEf#6bH^O z2J)l6hxt11mwb@eP{;R^IwXJv!miC}p~()cf7jS67a{b^i{!N!kMHZVqsnBI?j|mLY5=FO^?}?9$}q zu!m9VF+rY#y3+$t zT~O^tFpUO^w{Y!QaWBWy%w@jYbgYU25H9D|sU-3Y_!VD^69{5R#IxjjCgaPOf4z6{ z?7c%@-#u`cMgH)uf^k+(9DQ&eLlSB%At>ycvtqMTniPWdPg2a?ci;Ts+tZv&9+n%e z!+h+rD7+$CI8haCJ|WVqGs%8+Egn^LPKvdi8p2kHcpVr;-oZJ{^-B|a?j8RM!gT*K zKkd+z>%`=&4&xrHA_utT}0zEI`UgiVnG0mhSyB=!9-o!g~R4` zkgGVBkeSQV_m0a`9z$&OFdjZ#rNjRKS(G)9FGr=9;!=>NJW;LTB;*jPA)+WbWt`+U z1KrkIC!pl@3Fw2RAC7LO5K=jQiyj41M_Z^#XKcGKD=xxAc}#HQHe^2nQ)ki zYd%er#J~AiO^nEeQ-d^Exf`BaN`AYtIk-JSRVE^FC{?Kve6m^%Vzq(#xH~3DT>>vj zt34G{hp@f7My0|9X%bE=BS>@yR$oH#5q()2XNW#o(i5rH#4+`g$`@X(%0K-cr6jUb zq4PQ#Y1D2^m(Rl_Ds)aYEj3hES1=Ss?IlX`Vmmc;Z~Yi2@Mui z0n9sdkC^!v$5NAh;@Zm~afe33&l~PQ@sC8CDqHiGt0Tq#HLWjXa(%r>zmiFJ@^wlJ z7dv4D@v)BZZPV&ZLNM3c%6BItbyFu%la8N+ zo;p4hTH;vQ14C;{`FwP)HfS+cx$q)$py!d19)DE4qHF6Nfb&{fP z!Aq&%Ad)P>^y!4fwuNy$=CG0{@sTEpjZAk}$-H2BD1YRvNCSWQqzQ4ZCZa#YjRKdH z5)?@yxu*`tbaQoRH@qZ?)ztV%|1RocX~Xe>vEj%9p2vX@t81~KfaHK3G3`_{vdx!5q1%$i$Dvu0R2@o$e@|GUVeo+o4|w} z*-j-f$}W9Y5~i$`E#-A+&5o%Nw4c$DP0gQ8H=pn<8x#L!+N(xP?;hU)-l_^<?9f zqxg3!e>7Eod#XE{xpDRl6UGtk_~q&ge|Xj$uHY#o3lm4)+T;faVzrGnMx5G&!)~iI z2GC_H!oHbXCgO0s^4wTI93!*^zz#U5o{>95)o*kR&GUTzUG^SPDO~NI_WxHF->JDk z5pX!C^`qxC$HZ{8JvhGmW|n(QK0M4hP;MDL4c`#w*ei$PxO;+1_DH*vc5lbzu<5dd`>=(I=D%Ry^Gifo z$=paMaGy(dHg7t^3Xvy_=Rs%!b%X8(jELIuXanHDE7b8_>h% z_^jPYBIUy6QtAA@Pc^}`TxF%<2G?1lb8nRJV{;9PQ($J!_=24?(u%ca9}F+`smGHQ zvcdPEa-EhUUzOeG9SG?tdr`NIW77tg6z3;(q}vn~N(zwx>YXieT#`g58#{IY(7_0U zfOP`F&gue1J=mflK5^Wz z&-Rk-WZPJe;!$i^QeA|b`_jeJD8@Wtp%`rK^^Yj0XG0PH8S^=N0E&6O-2rKk4HCk{ z!Bs}WEogQ1>Mvd=(GCe=dKK8y>4<4Shv4|^CY0j30hQO-3v$66nWKA@*~`8Xz)1#m zSwi1DN~OJ+&e%^b)!Penx{UlxmME6*sl8GFlSx!%%k=>7U%!N&>9G__s23F$qDvC> zvlVKDgy@+rs<+Cv62jE=1@OtHKmZ^R*95DQ&iKc{@Taj0ytT7vFt$@_41)utqg|qV zX+1kr$POp-Cj%8Mdu|fKi1|o0_B1o(g8Hc5O=p3<$0O;6?3r~_0oNMYptWmPmAu=c z$Vk&f1z<`Jy-LyDR7L= z#10S>p%9Tp8Pn6A@GoaqJH`hUFjnftw)t1$btCqXQ$Xm^Xp+***Q+IoSGqKVqJ^{9 zqAs(FeVh|iMdA|nvfcIt92f|^t}f^B+g6w@CMT-~@>5pn`w@~hK48C-*|kt#$(W)c zj&pnm98@cW8s; zm>*TQ&%_2ui65z3h3HI_I7TEqa^1eDhchqcjv|Gq1}}03THOTpI5ZJD`c0z+!_t45 z0)ANQs6#3Y~yEUFe?|%-iEs$qOW3D^)DSp&B<7+ z7ib=m!%?$=&cP{Qb!cazXPT}0!e(1JZBJ^ufvSPFEo=^zihEZLG_H+_2Z5di@DC)D zQo_l2rj?jOSLdP544zIzf|C^vOv70VLnkp5g-v!TADCJz&_Kn0lbTWM_R zD^t|qC7g&1F?0fhLLxvhg#}?YLFRLT2e{-Yk$j+rY#0X$)G<(WUX!qo)S#WIhPsVg zY?`+HuPiU2KS^Jt1aGjwVu{&^<`SPGr(CzjVorP`wKe=_c|a$73XIRkP0^MqD`8n6 zwIs9(Jp-68>t~|1YgAV>S^y{^4)N3BvUf>Bksqc6o&(MJUO%ox$s|NIt2PZYw8B7M zeyVf#^R?60u$-XR3W1#RyAd5hLTYACqO1g&jbD$=lzu zv_fHyaI{#~X4r2f#E{1b#q54%k@PV++1S2ILK4x<&5;S*<$KKW!Bk6AL@fx1xQ>52 z#TJDrPUu|t;TLWWpt&E^^wJ_xuIfn3aqv$W#7jxkXAME%XN;nlH1$e#0X4-53Fp%)_b`k z-D=wlEXAJ0PPD_^!J&4t`CDYOEH$Pr#l~O^u>8(M36SYZM8M!%PJ3P7N1_;kuS>8J z4O1hnYxVfI)Nr)3u1zsJDXF_??l5!*`Z;U>n%%kwb*x%Z zWd}(B`K*X8j8}Sj@^ED`m-zZerKlm;w@)OlayW;ai@NIES?bZKK(cnFqK4Hl2T=+^ z9s2n#aNGtFc3v{t zg+OC7{NUUf9mcA@WxDHAvnSIn8_WYQh!~RbxrY$QGtVt64j#k-e4vIB1K~z zSa5qrBep2^1v`DmCL>wm8&Pml=+{OnYnlcH(0wg-5;KcUbDyV6aZNi-pcca(R|+ky zCNss3ue=9&N=>)arou?12G~pHjvrHBGomHxnXKGKS5#uNQ~-p3zCYkxHTp$L3!ijC z_S&^J^%;9B1<`9hb}O+d^0#2ZC*4<02_owkz&dJes$-`zwj55Dh0G$q@(;}BC#dCm zQ}D=mO9Pvu)EvbSIGbzRi{TnbG)6yzPM73agY@K<5xwF>{-Cm#uis;+(eg z8FgQ`PbXa{o;tN#c8HMIXrdPfV`z?v-Gm-NfJzo&WUOORy+-_7N_5)pV|#$QMlsFs zeZy5cZ3*xd4w2=cY#g@rx`B*ig$a190BZzd7zc9;?Kw`1sZqip2cwb%i!*JcdZ&QL z1DlP32+XjM0crgEs;b+t+YkxH1&xE46AT}vGA{P=%V(dGwu*&|-B#ylu7Dt@emh!> zm@Thtw{)`ne#kaq-J+gwPS(XHz-iDP`Hsno#?=K%q)jT>t9L=mMv z-O4wTsaOE}z|=WL;XmX9)YSoo@vCLHvMGr9*1F@f@Gnb-pDkIPbwvyh# zdA5vSXv5aC#lCkwo~rzXSo5`qq626gL(yMiSacc6h^}88wR5RS@J|5RRa(^cl!J?g z`1q`l=fD(n5V!zdI-Lb^k#Q&?ZFLaVqb}(H@zP(sLJ3C-# z2n4v1+l?J&U|+mt!yTb&{YRh%;SupuZ^C)RTIA7)PLBf7fy#=5M9g z3W|mRwlCY(0kVJ)a9m0&#&~P<&#u~-w+czqXAGpXp029`bIiw}6XKtVkc?f0GLvci z6fbp7qEcbC8juLWBRa5LzZHnMj``fpJj|@)+_cjO78h*4OV>w~CDt#mYJ0}Ean7(U zaitAcSj|3Vmz}@)?z1h41m{IoEB;HaLjrC9KCGD5P(V}_)`&z+FDijy4Sf@S1J_9hf8#wy`>^5u9PxuIw9gp7`r*s0TzFtbwB zV~^rms)RIplM~Gi8R0T{#&*6YnXM)0871%;RE5245}aXm9>R}sjDdF|?>U9zZ$R|0 zK`#f*`SH8|WP>^xHnz5q$2Xm#NKH*ZPnB1fXHHw!U+_~Ql>_8?$XvK28N>9m$5Q!% z7lhi)nL)QBwpQ@r^9O2Eh!A6T#GG!u!nLBS?gdo1$_Nqr|)<8rQO2hi#^QI+1#p#Dm zgyCs!gu+>{LM+y50^->y2|+hK)Eh!9Drhc-A6c?htA-9La^5DNDx?^D%J#0@N*FEM zQBD_!xZu?M6i(QE!}vXH432T@+=B>7hGnuy*K=B<^AZ8kgrVWJ&Yj`{8d-9iu+!|W zGi}ExB*|=H*-8l4^g^sb1tM|a?*2yq_K7|Hx}v|bsA|l@Q8^ix@O1vg!r+J&V z$oX|3@R|2p;1UVXkFN5%9EubmSwMFj;$UZHh7?y4F*k=Yy7****M&Tpi^Ua|cF6L#K5X zQJvKrl>7xp_>%!ILWWD(i2K0u`JP{8C2KP9=-s@mA!~|2;1|8yuMuG1V;#6kf1(<) z!Eqz?E}UtvGP0(q0lJc2h3;BUzX7Unq6AW-0f_H;OXH7GL>$;i8QFlfLNVlk;9&@i z);l7-MNJ_u564*O8s9!rCD}+o0!KEqUt>-iswZnm^kGL=c8Schti^H-0SVY&lO84i zLT&gNcSiIn+)W$UNLAVHJ#4tDY$nJ3JqpX33V9;P-I6BBNbFoK6`4I0HCGMd*{6Gls5H7fX`4f$ephJen21qp!i9%~s$TBJ}XgtB+82 zHnPc%51sV5CNG+a6aig?!o!ZR7nush!^*@wgq?kh8o53(0x3-X(tsGP3pIr$WGh-@ z{$799jB*>8LD|tdRcLJ)8CT5}2~7^g`8&}eI+Q@r;g^dlo=P8lY@Rr2kmyHwf!Yf2 z&{MQ3Wk!vPG?~6urP|&fv!^g7e(H*gU!*XFj6_D(p@2A3VN4J{WCCMSqBblAMCPXn3Lc${0HNKK`P|a;V0t#MgW^yS*XqS~ zO@F724-^{<0J`-bhKB4inJ`M&U8_{ALc_ll-{?VK7=|N&0mw7Mu_rj=7+HfoWDJB3 zNgOgln{(|#07v=Td4&iZSIDI~yomxFya}hmb{Gi6B|(?z2lmO{<^F2Ag8#*STp$Qr zEPZi#7OMa=fmHysQ6!XHW9-NoiJ*&DNaf6mft=X@gFI)rZmZK0&~ezllI56Lsa|Tg zVmlT~K+1Od%6Su)qa>K*z)Yb%bJ$*ZgP#oX(b{TWe1~wxa|CoZFBY0rQdAaF2#P+TT9ng7j4(9_uIuu54ySoT1-m1OrWFE zwxA4gewXZF7>)%FMU^AuyRAIY_Yx&#C0@wO84&A#faJ99mgqBfV zjtKF=R2JBHCFBSht)nuqAp$H?HvFFzxtx@w*-Uogs!u#G-1?pMfi*_Ze#ARTePPvK zYL5-=B!P3`HKa57R8 zIZ}ItT%lJSEb1NV8Z`M@c9@-7xoOr=1DTQWuX{}FlG!LZiSJCXr$aia9Z99yaSot# zk{3MAI0qg2{B_>HC~W$iGLNxa2e1j?T~)^ADF$mh^3pxxC*7LFA{q}@;q zNQE*iNO~8RMFJ;+g-!l|Koznjq~nRms{KNTNoPzPjfg!3` zNo6=jr|x=0qrJW0`w4G36&b)i!WU~qpeB!l}GlZ{~Pc~aHJ^dsVlw(eS zuOU|D4Q{k5Hyl9{ElM!Lsnn0)ElXl)WMV2X8%rtsR~bF(RZUqu^${}ebgisxFa+B~ zTyqMGse)`;{Onp>Idd-pd*^{k&D^0;*QNnZKom;Iu>pYr@T`*Gk1erm08Q7x2y!`H z!yw&^%R|@$Ljve{_;4avO-kP5VkF8G>lq-0Yw|y8Ei0;->dRUE-AYmBF3bya^yAf&)L-x*gCnF`e^2lG+d?f7^n|xcbcAO-98! zXBnaba1G~>_-Rv&^mkIYMHe7ZuvXgaHMVA8umOvbW$Xs&jM=3>>g4Z&D;H+b-%Vc7WBjXZd7YC2ZGM=2Alp(N417-sP6Nw3j%; zNXkVR!lNpsm%ZzB+YVfena_!WaE%a#;K}9qlfF6@ApwbXm=q*;6Rg7-6YQ>DeK{(S zIv-pkF>1++FxOtnuy6N4a1_LnHyWKVBg7Y+Z@3}w-K4uoad&>qclBNBUYyyOqZwRO zA*M@cOL+K5#hHWRZNP|)t5V3j3SaJwk$97Ekz1Vpv}cKClV1U4hxNe3O;89Q5)_vT z=z@lyo4J~8218x2CpP$~4>wM~^s zbuInewMnl!&VoN&eSl!3O`=Ky2?l5|&f)!AOr;5t5FpvE|_nPBgYrUGpcZKE39| z@VMkbE0}99m(~~Ud5AwqB9~%b#M85{)XXKr05BF86J)a}3dyq1YF+k51nZR7kghRY z&;UNpJ_3t@2^W$%WHWJdd?J&)c9GAG!!Do)8Cd>B{CPH$5J&&hRiai>Nr|V7&XR%+ z%_hTkc7$w(X`iw7UTB*YX7fye{<`X_lz=h0L)T%t48W);I@mRE$*-kg*{1lOKxJ!H zsdM(}gmGiFsjJ`l5v8;4iVRE_{3HVhqOmD;GVsUT{F3|-mP=np*jJGNY?*+aSv`R{ z3Gx>VSjF*u%Hp8JlgQrb4RD`c&{>I_il~(!6BIhJSVa4-#jCART&h2F z`aN7LZ54vzaW%QcilZOU+Gd75-sX*me zrfc9vokC2W2}b4ga>qYY-FO9T+XlAq3j=xI#khZ7U%FQvY@43Xko|hgrO&^6DQp90 zg7g4trg_Pvk6<5`RbPd>f69W`G34(nI2*>#A5|7xCn(zQYzLloHO}3^RVI=i^|3eb zXPf|VG_y7mWl2N$gMg?GkK3*}zWjELs z7RW!IKuJBp=y#nPCA-vmWwedMK#x#gi0@66wB@Srby`3hXNeq~5hY=%otbzLQ*qMH z6u}0j&XTG^ScFuI_Uck(yMD&`0S7MT2Mj@qLuhCYn13ae61WH@QZhd$CG4`Nq3upz zY*tl>-+1M1rqLTWqNrNk4JO$|HGpwDk^l`%*i2a{@D8?^1=?hhLpreG`kT7ac?idTrm9zSieUt>eer z@7*j`kI%QxpJ^XHjorm6cX&xLD3c_8!}fvTv}`$;sSO}`dU45ymkI``@_Ye{q^zom#2-Tj|?b*x+yvRJDQW*sa3f% zRC;aCUT=SRrG54o{hw%kb+c%Fz0msTdi&%B1}NHxFRUJcZL8#L=Ld^_r40kb^i9fY zKFpHa=Vs{B%zjo3mTp_KH@)rf=uQfaP5b})nCinnFSXAsN!yi)Fy!z1{ZnKX=4FvJ z;1es%7#^LNZ=afj?}yyyjC$hu>Pb4PaGv(b1vY$3QLpUzaB+Y8>;b<};+ZnCjW~0& zb!nb;<>ersQdLOI_g2oa_09!mA^xOt!~EL*=6YeE&{4fHJC6@JkI(Xwjjbyu?YylT zW9#sRHUpnKsIzWeInK1(pOSMjtHSv3t6L8jPZz6m%zeIf=8o;#XXob4B~ak=D5j?N8^6*1UkJed@^S%ynNro&m3|Snj~XFZZ`~L8np|arJ|f z55N4jJ%0f}(dJ}XJP2XgHm>3r{n0(4<2X{Z7fu%K_upt8I$k{d@(3$xUBAP&w+=6` z+RZ%EFvaSLEB>TgEyUL0+wH^W+GkE?J)8kmE**RL<>j_RU~qB7l85n=`66w8)zJxX zx6Ym{TE|Y?#$38n0s86%8n9EFcL}uiQits`-?q;j`G?XC*}rdeijD3*&(@{ut0#`K zT`9X2WRzk(|16rB0!pw{r4=# zwR-em>-rMg8ykfRVT}CA9SCNzX%#vlDAbOeBvfr6mdSelsrLKFiq_Hj_Tm*zvs!_Q z@6X(cb383Bj^ay)&v;F?{_NQ4W&^ofeSbgK%>I_d)WuEq5&bJp~YQn_T8m!z`2Tp(beZBkrcw=NI9Y7XW zKe)myGybXfe^5w5>-Ob`i$rR+|9qLL=y5#_ctAq-;o)DG4A*K+q9xrM3YWaCaJ%*9 zV$r(#r$Wg3>HY%34TUy#Rplz)C5bj`qFvcr`~8v)LA$v;RLkq_)L$RiVDlv@hrPY+ z6CWkvqUU{WpM9IdRzF5-EVD&6I1D<6*F=J1BJKzvt0(8%XORQTla4LQ&O)2KKgOLJ zr}*@wJk@4?i&?s3W9bb5FD!C#u{Dn|yjNmwb{GP>I?q1mQvA;g#P3oFk37&bbF&$( zua+WTXqhG=HaXlRx+aJr;vbSUiuUYhoLT*KHPx3leTc-6q*xt9`{WE#$m-dJ(8&`W zy#yzWe=mu^M-!GFI&Q$z9b%aKeEW?z*`3qvxijcUFjm9sGfPsP=5O+|czAO^2mz`) z!#3zU1I0Pno?mKzc)W8qnXL^Ou(EzF$N3Q7vwsE38??(#{_IK7m;8L8F9%xZE;2$j zWwX>lW^~{%Ac;VaD(81wEP)ZH%`vt<mtf>Dwe&mp2(9+2`hsMMNzd(ezGh5i@}Wd6ZmH6})45WaJ)rmw+SjLWGdZz^c){ zZeJ=Xa;`zH{jp^lMi46zET|1Yerq0MLOEDHqp(CgleCcdS@iV^tqQA3+LBN&YK};9 zx4^@)?iYPQo-|ns*SA@j7%WnPEphUZ5E)KO({9 z{bLdn>i|$&R_HNgaVc>>C)B#}G&VJvL?zwK;^XFELK*ybfHX#YLPoedh^uKx>Glit>7RbDM0JUnt zp$H&-yn?WYJPiM?xB4s?X#cq7h_|~D@Y#%C3f(i+`G8sW*-H2D_qLtV+FAL$x z3vjTLt*>q&M8L;nvKSqMM-MbdEBR_4LpB3#Y-8NEk~(Nf4YfXCI_d-|@KZ#k3#)IO zYaLw>O84y?+%eGy-TXkD0fNcIe)d?%7Aw@0_En~e^(V#uQbgIbTH!>-i)eSt4MLT) zuC5r1-_Ta3l%oCdf!0MRSdUN2oURF}dbbS;UE3cY1~8uYo%vLOw!N8V?l#$JOR9fSCg6-b{p;!R^TsjpzAz&auk{L=-XAIYRM!{}p*95Z#? zX?0&kCsr?K%%bbEP*9d0+uSAXXi~s~S`I9lK0e;ufe)2Eb#2`r2W=aX?p*seXIV)v z`tbG<+kw;PRzJL~T{;Y1s^%AU)kXG$k>+qDmd=y(5S~D``hLY0Z|8S(p4GX}Lz1dggG8fSU4{`EM}7Mu>LHWF{&oD@_5n^B8S(TyBp%T2%meD`q=8yy zTZSHb`+a83Q<2U+gU!97g$tsXhc4*w+b6HfvL}M`2A>uVAlkjU^Tz(LtPkOCQ+_lbkAo z-wku4#F1q+#9YRHmF6;lN))$lF4F-e-dCZN?#6_`Mh7Mjb~Sg)h-HFZ_%qP5C;vC} zJu{Qe9c0}0x5v@$HvOmZ@tr%jZTp$g88f<@re{rpd}yz}xgZ)XeHj_&X8Y0tEX@W> z8U3Ez@>n|)nT>0`aZ9~nk&;oW{msqQqt{#WM`SaT-eiNA731rL)rIS=s|OG?ZM5?U zi>%r-&&`Fo*xp9tNvytbqg^y8zIj8=-}dn%G9gPtm9OLK<(9rNL)#ON)h0{&!8j{Z z0SsCf-?nMt&R~V#B9D9nP`y|PY)%}|OhIoz&AOXCiDKEBU6NhKT!FR+?bGLIC#fb{ zU~2gQR~K%s9+~+$9U%=QU*%-P`RIg6^uRP7ylXoe!xPeAq%|zS6@Z0t8BcM2cK9um zb8nrbYVA|E+0rF>DuN7~v9yWFHL|EVAYmdp2ZZ$15~vBeFX0je6!P~eeHuzgx$TuE zS=zK#;`WsmA!8bXfX?_!KrjqZ%arz5Uw9GX52DeC!@9VXVHt;jH2Lt0MdJ--LJ{*f zRufI1^A}_#G{>sNGFV^0B$^8vh-y6ftx|PlAFvCuYLNmFm8HWmcZ9D{N}0A7u><- z4}ER&^Z1r0GOYZ=R40Wun;h z9`nSyRMH@l$xr=7<@-!LY*v=da@hj;7 z*$q>Ms>!?(E#!6AWL}Bl%I(;?eM(4%BWMKw3!`U3K%T*?Wjwt7u50q%Z~q|LW9qFV zch@R2#z-S~wC6`+{clR?wnrgx7xG&B>bEW^NTb&rQkOa-xaF_5ZvD@)bRisxLO%ZZ zp2ql~ZY!C(<}ys+F%K8t2||b4utY#jrpo(5@+Oy)-9hV#^Ns;Q_=viv-BS0{PrfcgBD4!)f%K;no&F`y zW`k#0`^Ap8&Au2|Pi_`;#~o&KMRJ38It)pC;aFIX$q;B#kxd(q3bLEwv1DQsX(a3f z5y`$XPjMgs3PMAsy$v#6{e~6ew)k?9fwU*mBw?cAm@)|oKIa&0A}_ccrKC!_tpro* z>lf&S^g#H+Vm4)__lpP?Va}SsoXNKMz0cf{A_GU3R#^#Pv5hJ7Z~3-Vd*xW5eNgss_TdPOTwBJ9V-EjdlQY!?=;EZ?b74ls9LpQXVQA9#f>l{i1 zOzecb=#}hPu@^pAz}VfZS?K&}qm%W{v7r7VQC%{n(tXI5RZ>o(CS3NbWHC%~AcUql zJcd40wceX{L5SiTN7#^nh){%cMfy+&?LuIH#R7t9n%9B-_zS>qLKe}(4xF|g&MpWu zR*xR*e(nUmQ}Y8Gtp~g-K_AFoi6R3#$?X7wRwvwLP@fbx(0H{kj zu*#E{nu4K`86Ewslp2tE%zz8i_9etl@~l^BSHjXD^Mn6G%I%DZez9rnwbJIcw>h|T zmq`09qBdX%m>wrbcZ=P`-6K9Q7}usfJriJJ&M|P(Kk*X5&I3$6r$rkJy=G_+#!XTG5c%0;jcR1#j8r-6(!UNw*-5Be5r#ELJ7Ch;V}y28lT`sl zs1m5Sr`wA+pv|RUObhS;vJ>B;0b4gm_P4*jQmmeOTi$V5%u1gS;&6yhd|MNG_-C9y z#6hDOxSK~JVG688nD+P*PAmnFjO;11jv$tshENT#ruF*=LPUl_dNZeUGWuDm)zM+2 zggT`xGBrVImF2a`TM=sdA+8=i+5-OyN)2 z7UEPt};ltzqN9wK2Op<0|c4eve!6Bn87?qdljS0fOfKzyJGJ|%deVY43 zHN3bQxf|FmjZ`*8m#>MX|4kfCFIy)-C3C2`WC1jw?@;z0qrqPT9{Y5 z78>lc$eWnAWx)_*`0#js6LeZ%h{H^c45HQlyqLyqGP<`ppl7e=e^`V6F5KDCm>QN` zd-j}QdG(Zq`-nEkh(#>^Q43lE#+{vW4mPdY;srj?%<`W)uH1S`i?S@6Xi1Q+aKgO_n zFjH?}w_0A)z4|SEzaE;kUGMy)X{3ukzZo6drGYCKe_m(~3^odo;kA7T z2h|HduQZ2u7Q06&Z9dc-Z#tjG$!51@UTzLeOp1DJCMgO!s`AB@I}7-g(96 zX+AJdgiU#Cb7Vk*#5hxZLH*ROtv}ObpU1|KdJ6V-2NRIVOUKIl2-PVUW2PST;c zjra4);6$-oec3aBAChX%n4-39y9^z-O08qrX(Z4idd zyc*(X&o?+K|D%8J;3UZ%C;e-4Qrg=B0z9Jg*{#o;{yj6Utw3Wt1aFzf#glF9#ME}d z^OnBfg$6n`MbLBL<8%~c!OmSSrUVB?>^B@XTy>=BaL$6O7qXro-MO>iZ$Oh9uE%=Kr3rGR{gZ(zH zla{>Tm$3w1`h5>g-7FF(R$y_{UJ{@>*(e4<)QO>~iC1O7LG9z#n1Fh_#Ykc#8{mXq z(IF2GHPmQgh)049h9;bSyOOl;3+=WJalOJ;$!YBb8~_3C`I@^S|7>#aDA$~}PmYdv z`*3pf@g0pJUQQJLQEimpbn94BuHa>Qa&!`J-pgeltVj!DV|cG^^C?%_ROhOod8b2U zKmxs{O|ux~+EL%LqvPX)5D0EQsIt+EO-=v^$gjEmemAn1-En()aCjTkNg}o`xjjER z)EI_91`52nG+)_&c3LV~CUC{AfO~ zo0iWEjyH!U@e~egPxLsu0{8nJJLqzFaA)!I;J^ez{Hx3`N$P$1L%aVboIu@e7Q%0% z@RO6A`B0O&n0Oj5zis_~X{cazpoWne_!s8Hp9Z@ zs?CMMugAlLK-g|qMQl>|C`yy@9vl>6ry4W?oLtd(9$r_lyW`CQTcRIS9tp)6 zyrSn}_x;-2^UVolNe_&Q0|=Ih-lz)bdYREfh@Bt0s>{t^l%jIg0DuOCAd~qLZG1?(M+5=8~6cGy1i8XFh8stn(79;x- zQml2A(uF4z_q6$gLu?W|`b6>DJ8B(P?>-Z7t+#Cx-{i&9Pyb54bh%vlGEpwYrX;svgiP87 z(ZK`I+{Vz*6p}gs_WTo1Jt64~)-@UH(h&3KVPDUfC=&K>#N_im-(P|-P3+?`qKT#> zVjKufCJ_K3ojq|saAK0MK3zRuuR}=>(4Np6Vvsf#WndiE#yC1;I%C>#PRu>s<9um~ zmcX*$*9Ce}Imp7abEu6CkK)EM(p}CC%^0g%h9u=h%`P7s3|BUBu;{`yVE_=TLj3W! z;*ZZcf0S+$_#>o1N=tcPH8AGQg{@XNjjyk1Kwm$kv^tFW<;=T%8BW5^A)tbFlxpv$hZzC6BfXsAHp37SSESK zpp>}#Ymz$D>v~*fHKH5dVw+ z6H+q(+CrWNxhQ9n=5$movOBDz>4q$lND2({(93v~>olw1!|m2pI{h*)%$m&tkhtdZ zW4;MjYcUg`-Ww4WA)aU;?HG1NpaaMWVuc!8%1g_vJ?#&iCYx=-h?E+Ja4Q*b`&~DC ziX|hqr7`t~gwoIGK^!t}zlDs~NIokf-%F@CA!k+JK4C-L*4MYVpbeQB&Lm0psb+}S-NZ07z?nUjtMd~) zX2m80xF zhDn7Zs8h(~(ilKoEF8g%@uELR-UAC|7Mu1dNQGdB>1E1bKi{u>IhsSXp!o1mZ)kGo zthdNUQA)k>ng(l?tXmO?Z3n{Bbd{f79EI9p`6*<#1t3K`3>mgb_!R(&$#0utH&|v2 zAb80xX9V+|Kg{m%XK#y5r2>p_>rLY{vvzJP*=ezu5Q@go&T)q1sc!R^VuSg*(oNc5 zM?*DGG%9#z{sMx$Rk}#qy|JwhmZ(dJ*sJ5WZs&_;!mizWlNbgj=?^T=?6Tc0hFvC_ z-+g^LTSqcBB6f-Y2r)6#anoZ`P=q-gjFt>791Rnn@LLUeH@uk~i97z>2#BdI3Rw`I z78%|o{eH7c#hg*he(;;|@0UP?O|Etc~-@5e_GD0Z9g1*@A$RyEeKx!A=zgg9`O&>kd0STP+{^TD`m zbF-}cGQ~77Hg`+_PXj^k(a!2jRt9_%w4!tcea4tY{}4<;8>S+s^-139m}Vq~o+36I z#dKe!_-z~xeVVUhviUf&^%BV~hOu2(=NVLC-5f8T{9k|Z8vhkzgF|kJbjMzQxGLiQ z6Nh@B5s4D)!m7ou$WHu@$Q~b8(<3~k6AMcGxXHgPKlmcp1&JGqONCpCLdhKnJsN95 zwU{YbwQX?3lrA06WOL_80Re)FnZ4P);#~;3DX@W@R~mJp=cz4IFo8oHi?N?bL_PFS zrRvNgeaW#`+H{a3|I{{0>nJ}2V*SgUj6W*_m(9K;;{Q-Q-Gn9%$QWFq+ zXGg~a`*Ud(JFd&P!!W3B83!O&d*G8$YQqV$b76RC?4DGta`$hPrJ(YGr17Nxhi??| zAXD;$ieFgk1PCsY>|{t_G})APH(mqcrgm=|A)6-Oyns&vSY{r>f?8J;j1-O=9C&wO zG)skGqX-?~F^^A-;i|{wBy!6&R2h4kX4o|6BK@;f-lxPD*V0)pIx1EyY|X=1VEc6? zcT3;*2gZPpWcf?>KrsU&XGnlJVr_f1U`s1kUA18Wgo1{}rX5e1Y9H3d$4%@B9qAHm zHNHD*d~M(aCx>tPWn{xdc0TNOoQ5zIY-PjaG2jO>PiDW#JYBLY{4O{;D>95pleyFr zI&nxw%zgI7b;&38Pa4N|d%qws7Qc^;5`%spQVe6~SA^sjhtdWOHKtQpK zWD?z^2jWp1%f=8}v#nD}0o$uRJOL&y&!y@ ziY#&MXFw@oQV;1(_pdt>PV_xT1avWJwrk-Re4W{pJi}m07F4%wPDzNBqJqO$))r4A z!Nyv6O7XIc=Kx+XqQArru`b!UDoH0`#3TDS05l7KZ$@MCLqJiW7W)W6Fhh|(+(VZ! zS;fm99D%7-+&#}V@lxRUT~bYK<$Bau9(5bqtHVh>?WQ^H&kO3`Bk4+2|EcED`O z!jjMcV}a6$pE{p%nHp>+ZX*g~FPR30h80Z`Wg}O~QUm>|Q9SjW<(u$#tT{_I@w9?P zaEI>UXfSf1Antk<(H{FslexOAU}U*zJc^ZMhUiU$QNV|(DFMWw`M>+izzr$$Ze5DL z9B)`pJ@JYF)KrNIbxZai4>l@xLncSumoA@ow3j%Z#-0JMN)8J3&4B`PeA1p=5S`SrmRSU0VzVKWUYxRY?g{{j;0}`a!UQNvNJ0&uozB)Br zytuE}YCh;M@@(jK+u+W>?p*j0%FRwa+{_xyM(gk?9lc3d$5>z?r!i^7I$a zjgAd+1}Ua8L4;07NHz*UYzi*SQi(UUnnOp0K!ZWWEjkLR5wI||J$T20)gdYB<& zgh{k`dGu{e@bmzrt}C*+)+Y!D>Tz<_lwvoSYG{r~pk(n2dxB*YA-% z0Xu+k5r`PtQzpr90Sqi4TgF5Joj^=1BnMbzeDs(G&;bR=Y|uRYerdNJ3y1g~mLY@)h862rF)X|;tplFq5z{de2TnUy%dGTDbwLvY8 zhimQ=a=@7-i%+qtifgfW`^_|=kwioO?#Q#HZ@ZJq3M0!84^OVjII$by5ddbdOtUR2P+w|TlA2)0UVc@%M=c-!*ve9(b{ydx;2KG z4@_9bFd&g|qbG`2@Ts7%pcd|$!s9?ti<^(i-WU~L!oX(mW*cG6Qxbo-9Uq(I6$RwZ9)jGC6lUHq z!(shq9H+WPl2D=zh;VUR*=9pE_QaT)egYYlDMr1)L}(fY%>l5YJMYAJselZP6B6QR z697nN>Om0!>}YKKMGX;YLgw*JL2UBSTLi$~=C=N^DH5^evteT~8oR?!Fa4bdQ8S~# zQgIhgUn~C!_CsNsQ;&N7lkjq4Xx~orfekgAIPk|B+s$YY-bQj0KF%_qga(pFE#|;J z4|z}GxFEl=4x;s`q|g}fi|mi#*4MoHM3qA5s3=FW5F^!=Xa#}?8IMBa7N}s(MiOg? z&%3-QQ=WDPBfHq6-8kW-Ok5Jx6peMlk&Q^lk&OoT23kHnGKf0aT)Zg1rcuX?v>K5^ z!rR?+hcq1mErUTcTeHV9v&mM03ez>ITfQOeTEkQV@gR^Y)vl*EDc`2E=}2wztay~7 zal>K$J}?crubdulnfB2B=OTTE=o-r^;Cg)YEf7il;rLU(i|eN%dr;wI2NA&p2C)&UF5-xBg(AL?o{?#D@@1vHgg0>#raS zAREz5FvSN5--NMe6M-%cq=OyMTF0$7tg zhgPP`5sFbVUrowB@*FmA5dznopl`{mY*H}~Ob~PNH_tt?bx&g`9#FTGBYz0ghiIu? z4Pt8Hz0y?rF@EZP(pIN!BG3H2&zzLOh0BRxzL#3Ta3ZuGjDr5ACEhoB}r z-qTdHc@)}=8F^w7n2#kR8AndSyQ^pd!HcM+JTnMO{PeCPsVD|;>PlXeV#u{WNGQex z1it9YTO-xTQzkAohZS3ZDiqd`*dv5eikxENjjSf?vKX@4wGH+esz+XtvYAa$DMrS) zUO=P{Si=!2zeot6!F@n`F%|oS+pYd6}tg95dcMR2{08#CLw2OAF&3;V(9*H zg?dWzG_W8fA;5`S?I!lgI@p}-nY$x%PYH&|a$cdgvS~po&4v}2qaNx0fs~Mu(Fw!| zi+_P}B7GV@HzubhicRB#fjZ~eIkZQ`NW(lGo|j{53Pdo_@o)o9Fy`iXg*#`(CZc!H zrFKF~c@@)i=<;patuC25*wTtI(j^?D?bu;V%G?|RLVg{cMt%pj25Bx2ynq2gJX%yt z6sOG55zH591AE-H$P;x~?4Y8Wg9fn&t{XW+o~wiFT^QCc`lyf@k?moH>i`cd-(&0$ z5(jtw13biX_izakKcwP5M8}x$@1JAk!8N+2PodqrL_CJ32s-7|APqwrfi-PwszbXM z5mPFzOx6Y>!AfH`-KTv zlV`(|)P@0Mf+o^Y=?}Ew0}WUve<2QpKP5BpK;|-CGv_IHxYVNhgp0orEq$XN*(3fA zo#+9b=t=gCc(K}4AIYmX<(G{?G`iDas}hb69j|&J)8a<*@$7ec^Jig9f2d*oaW)DM z;?sO^f6SKc3f&SN-LzZXJc_;AGwW3i^G?MJ$s|M5`qL4a8RLB**s|1K%HR2R+TR#> zM@Jx^+P#V95b_i(%btaC{h`M7$MI`EfL@2D)rWhVO>S7JM@%F_b42d+Hy!Cg_Qh0a zQhl@!eaJroaQimv&(KNwJNqC#%eO!eyXTTAWBiO@2#_uKA3EqEFlgxGZi6+1J# zeRg#piHrC-^F?ZdOvQye>1wrEko=-&v`A|6iQS%L`I9bZ1*$6q)}=6+zeMBByCI$* zEFxeymIb7z;G71FB{-UtB;kWAD&{f?DP-)?C@~1;WW=NFJ`;?ixUk3MFwmrtbHnU` zU-?FLbM*hE?QMJHyv{q%uTtUwD;go0N%CgF#q6NjB4t?=*UAo47{#+-ap9u5tQC ztROotFJOKPMMHYl9T?p+Jd=%3#tM$&l>-IE327i|<}P4O?IlM^#vuaYagp6OA&Riu z=VLZofe`2f!Mr6Y>-(6_Lb#13A5nQGTt~7BqK(*{70={Ha|VZ>6IUHc%?mYmYI%cF zb>~(%rJk13%0haH1pRqt&R< zp;d{ewpvk$C&Mq`Lv^54<##ro8#v40BOi9eebi?{SWgllDi7g3^`G6db|=*Sx2!EW-Y)9X~${y%twLNZ$_mVc0eC)r49e>{HXo(dB1t?Bj!tnReoeNf`Hhs+DBqz zygU`9l~Xqso85}nXlyqi`tzgMfQ*`rfQIsT#o(AF74qP|>e*`IZHrMOECE?|ev@)Q zP_rbBALwrrJBo}D(0vjC4EXBDy^SF}tci$CkG)4K>tARRBh*j@kK!*xOl^+PdLN5y zHBl)8)Q;9oX&cDQ&~ken9B91U(Xet6pmczkZd!&1Pur$i+Dg8O41&f@L*~U zmf?|MNC@r;w8CJ9(ij>h7HmCrl!03!%HiF-f z-&b}p&T!lXmn&akDY25EfwZYYe^NtFz#_5gK!la{q#N>7TB<|>Io&d0 z8kQ;wOEcD|v3p~65eP*-DMyNdMIbhr%9^GrisLKZg-2r8)1b+oMNHlJNgw+o@ryAn zkWfX9%Isi1A7Re}V6p#5GgmBvF`DGQVR!Cv++|GmT9C)+ge9?u#kI-71Y)35x4froD!8rP1(8JnS_UYvLcz2w zj9{2?Bq`WnYRmusQVY2KVg2jZFXgsHpaGFO60QZ?z!h8NuPzjAyOqV-sMvPpnhUh? zzbn^Vl#Tygx#mJ_{7>{F%iO#;9!-27+#Mp9P)_@^XD9t#HtP1_(P;muA09d+nHhdt z+z0zY(JK_kBw7wDsh_L5nuwPwm<%P#N(R!X>pIYMxrTulXM6yz%N4bpg1#0@LP;aDs)N%5VW%Mu1W z8Y`Bs_k4msQ8idphE3JSy82&olsl9d1AF(NK^QKNpW#)3c#U8&1jdTE&^epFTb}mL zCnL-y3~l^YStzKP3TA+L5lIPSPeSm~XnGEXpfNSRP=Q{=Ka_w{5il{arOIF!tWH)G z2E(*1DVRvjQ>^7TuRQ9rZ>JNNKIl{&*m-`Vx2`al)+E%8=;gX3z@~r59I;EXm>o7H zye459l67%9M>8Q~j~90*1I5k6u`iXb`iOmpxN46O;UOeZor--Zfnr*9sZBNDq;82u zKEt}i>QoeD@I;9zTl$lI?mgsm4#s=DE!>#-G|ya_>YMD?yQ60#bfkB6HrU!JzHy3t zS1DD0I=~q7m}$|Zp6>$n?81&xO{fesA^}0XhppZpQMyhi-*xZ5*qJIs79(Eh$!s3E zTQQH2eeeOo6(x-Y@K|Cm&4*Ez^f`7Lf*ey?>K%+!6)@;}DH0{1rmVvR3rp8F(I@<7 zZr<41MgpW|b*;NOik_nKj+uXq`eZwd@QQz^pikbtFG z`5T&fyWY^I?p0G{Wz`pJv)oco`0Ebc>63+7&;U$x5U61`!X7bA(bv<4Em|DQ@V*xf z@|W1bTY>L@a`R52Z1Z@zNW$P*kH}L#cPdQ+qCt^K9n}t|lta)1X08A&)FF6f7KSJu z*A2T=`I`UTIH-3M#|zwVl|n-#qE(q|HVJ-Q@)9=0HOUi&Z}1|^B=A=|*&m_WKzEBk zMp-8N^HWmvk3w)j1G1DP{~S)m5f<8ar;hDT7N8gHlz)W)eS}Da>T3R^_XJ#1cyuyR z>i^Nv{D582o@8USB>HXke89UYWxeMGg=q#5sKd0CF1E@%#$m z=xY@Th&)e<1l)G{fXc7hH3C#5pzU9nyr2KbbwbxpPn=m{$bffMG)n5 zt#|Rmiyvan@YkH~E$+_Ir3)kGDB)VspP+n#T<3L@@b9-GyFf>Z6=K>UKV`0e^-N?< z0olZx3g#(=Ya10Nr^tG&7R=e=jzWk=nDS*bjMb=!8tZvJ?e}*ro$tW@A!OQZ)qIo~ zF6_?$KB3%!W;|oA~z25o~+!#ttG7udawO^IRvP<}h7Uf*27IP#rOG1$f4S=ZNB+&=S zEd{lD6^_@M2*1!-iruQ7zc;!BRSDc7 z4Cwu*SW_bI20*y0w0r61)SO7Z(&cY=QN8MMhK7aF2pT5Jhv@@lm<8cWAOZ{r96H7U zcM?aEJC@jESvVr&9qmAq(2@_7+S;`1X5UAj_*C{h4~_y)Lzw7}6R=;h@W1``tjWPI z3GY&o+6nLd!$^4NDMo=tQn@FKKu1t%+as3p-4Wo^JYoK_OF1{DnH)ud3Mb%w)}qHF zR+3GF?%F(K4zj*wX1q&$t;oE-^*YPdx_N{Jg?U(VJ}^XS^mX~~+wv^-WcY$Sf9$G6 zs5amVJuOr?Pr*WH5*z{sVXymLcxu$)Q<(B0yhOADDgpQ60b;s-1Jf&V#J595F~(4c zI^gZp9W5Or7^(=(!8o;eIOdB{WzFO*cJUr?0?KJMP=* z;SdH&I9PRd&}*St4s#X3!fxVXFJziOoe*azePm0v6bK%Y7D1rqNeCC`nzk~+x6vZN zM9F#u0G`>(EF8Bqm}FGHukzpV_+x@(Ag}=5at3%&@K`u)8`i4Ei&@|W4B&N^=YUH2eH-K^VSYH)w*LUmrHg}0w3v0 zG9oG$d!RU5K-d~+Xpk7ZIjyuA6{WH?DNxx4?^bia7F4#a49k53;#c%5x+Yy@cLcHC z>+atAJn9enWQmwb$#^QErL42+oUHVctZJaOb~gYwo4L?2Y=Un;p2+GOKO(!j_P??= z#X33_W_i=@V-cNm4<-Rpbfq)T$g_6lHw`%$#egW)W_SFQ9SUacylL3GpdgS=jcT@Z zMc7i903K55oT#?BhETT1sGS1y^`%9TdjKor_XI-VjQNftwf5ot*Ew;Aop^WS~)J2&6{7Ok1)M7LdJM=>l6 zsYisSJA5P*>m6(~_Cwg{BBh^ZqD6dX8t`v%k5P(5Yd;I$M`pKnmy|*uy7DM%Qp}V& zjfs_sn>@8fG-hl5P;N|FC{rs_r_ppY6Wg;0@H~{whWNs|TGsHjIn&kTiFy7FDYPlBkYbC!VD_vfFv>3X#=O}%MJWWMS_}T3V}gw% z!_3*Myw#$III+t6nr*4dkN+R#m;z4GmB_3bM# z5jnyY8Y0J@g@D6}q*AE>0#h*@PP?=N7DRDUF|rllY1*nq6Rae?4bWi`KrAvxO9X^Z z$xl>=0y6|z8ZFE*VVGbLDH|T>23A}MKY(NeijQI->r*>EaR6Oa#Ku-|>_Bo|tr#(< z9z0Lf@Cs6 zSvNjTEC4=JxlCnRYQ0DXAZ$_4Q}{MA>-I53iyjCrxZoj(S1h}G7K|b))}fX@KWb0a z^jjXt!iOeq)`6{0g|%iZ{nGT?_7_VA?uN)d505)fdbzM$wkWF!La&qOD_LM8j=4OqxNx6lMLkU}nxjEp!cwtsT z*3Qm>@_{_t5UNp66u_X&T#3?%<&l^15Sy@F(fY8RmW#m&;@7Ai6f=P@Q#f=5W47p5JVQqM;3XsMcZg;3Fu;DHh!Ox{ z$kZ@_=7o{`l7!ty%!?JxPuXC_m15&93(TcJazYQC?f@Ow-78}`=k`@`HO@~ep1*oMe&!1K zB7CVu-@z|C$>18YI@=4_%H)jzUq#FD(t=JmZ#Q8~%B)`Cc0;gI-fp@uBqgPgq>V)N zWVe|CQlX5+eK5{Y*UsM6?8||O-{}x4jG5kIwwDy!&EK^Z8*6qafp-!8OB!!re=J?p zH1*)zj4%zPiNZ@jzz}=!R&6^ReMPV6COdemPdBNT{fFgrM8iUJl&UM2Qc$3pm&;~d z4edotYB9H0Z`tzEkcjH_xxJlMzg0)eoYydFi?Av3GQ_M-xq!Qhnk=$br1)+Z!?C52 zMi>*ex3L?$8T5n37P*3Rg9abIcf*9`idnEc$fW#=)k9r)J^Gjgg@_|D+KUjhzJW~} zO3YSet8u4&hFHlm(nt z$#xd-Jz`^8Yk^{OS+e5=NHj%WU?ImJbJ8UTnAj-s0&X_rz7Fty&W_}WSp|o1V?GocS)myK0!M4T|i6( zpO`l$D`V$~4FwzsLg;1zZ=nC_%2Q%ob|=akE!r*Hpz>uqg0<%J0@dJIK1Gs`k=5Bl z`0>7U#&A!N7R@*{H?S|@A0rn4b*PvmqS>U0*BB?Sjgqsff`?k!BYB9?ZO8P zB0r0rYM}8=DL|Fw&UzvhQtJSaZX9vV&yaDv`wAnJr0ueu>ytA+bOpQK2ay+v)f^~J z?~>f3HlwqrX|!jfYwU3wj=r|pW=*n2&H_(~3~@L3OeZZvg={6SN%e*zO(z%{e^c2R z6Uh4%3kDn<%3>I0qy7DVMuLU}h53>1^0+$s#*5L7FmcTO)e9s-%1mW;!3W?^|74Hc zrHdc%)nW%Bi@+f$S!?LW^>))36qB#g}wZB(?f-C#KpV?(}l z9ZpHZ_`t^i*}%l0i0?5OuifOV59NdRoMy}b_RF~r=KzK5MUjYh^UCBnR-YUsM?+|u zGARrk`5f-eZhugoWAA{4%Z8!o8Z-!O2^_dDu!#HZwM#^f9zQuA529ej!~TH^ejG3t z+F?p#Xk>XPRsR45Hhw)J$PD3yOULM|MBwsT2~D7+#u&1IRo_-hv_8AILlGp&^f$TS z{Nl3&=L}KmOHWM+Z0&|Mhw91eLzJz<7pSA{{{aOxp%n%2Z?F;F%ot=1u2iSJxMeFj zras5E-(Sp+d54xwza|J_dvruj4@i1I$s52>=U33fBb}*pB(9*B3yOOFICJIe@j7$Zz4b!-l17^|(fU z8{E;)ZYs`({IPO#qe#Vl@|0Q^5SV6N*@SXIOvuUsSEj@;4jo#}K68xk1PQV!z?doO z1S0VN$jrHykrg^3KH$`xAb*(3_^?v4dEQFRxoy6w91MMvcTHl>orC$uan8VTr7X_T zxjSKl54adcabhf!Nm#5Z7sGG1@V{<1gV*;){Yy!Xw23BRht1^&;fK&T+5Fm}8))E5 zIXk&5sGeX+GvpS&i_ft7iBb>z`Biy4q)`h+d(SUEmm99fzEe$!<%R51vT6h-+-@M^ z$h)>!yqWBPkmoW-ABHFjdJEI%`lN2Ciir8-L;*2*Y+(?)OA5ltufFr2-fHCD$SvyQ zJ)(*NhNq=jmQo?*(+L(^%tqgb2b4GQDP;mJTrt0~H)qWz%j7d6GmBic@0TwPgiAp~ zSx=Bvl`YZ0#DidWW?f8>f8(d5Uk5@*<>`lG>a;SU<|7L?%5Q=rARPRGosp1;HB1SU zapSy*S~kcxw1J`fa`|_-n3tZ!>b8dW%e-D5_$}Ym0ekRYkb*6nBVbew?ES@3xG9>Ccc2YoowOK_y<1p z047zpbb1kqN4pv*i#Qr;QoL7c$HqTKrPY1itj&=>qzV=NCURdx(iZ_mr-t z4eNKZ)ozO!b9yJ|J-GPAkIKFkg2$$HQ`eN2j(-rD$4nn^Z_a`Z5bo$)b()SHQiM7| zO)b$55+o6onVe9bVa4$6>*{|aUrE+I!eAN1;Lw`DuI}{}s9VUgG&y9~;7&^^bds5< z{n>K@t3cqAH9=7htS(56aP1QbB5(*HV|}?a7`wH)NMSx_okBmNim%veb%YkOpB4Owou6W;+ zt^iOsvbO2SWak9g0fI6|GdQ~V{5dL0+!Y^!i(_Ed$(3c9%U8EA+yqbB)^Z!JcjtEZ z?a5e6zl)&y?IZo@6Rv0;C90(>-f>!iInQ}>Q0{ZTH9E4UDWu}AayDVa{ftIhX>-5E zmF}jk!q1D(NVifDx?F8_VNJr{>V^h_R*K*1R`uB5G+b@Sijt-EjJO86weEKpkhAXst-f_q^=R{q2RK~k zFygHak7&18^|DD!bjc*62&9H9$zenF#+rfjFzgvg_#iD6bS=)L z4Lga-?^XGUh@1|>)*=*p8a>MrqCYgT9Z>k-;xn;h@PuWT9K}K?q8JvUlk0TdPLm2i zPuz=i3q_F7OQzJ4%oC2J#{SZ6jLwDL%c_fdsau`P2$3s+3H=aYp)w!mvhv`ZJXq_=vAj#vnaDvdykNeJdAL9Ra^z*)S+=H}+Q@+On> z7S~wVjL;-<_O22hgF_KAi=rZ~;l#^KoFSswRZlJZeM`m#P zSy(4HTU1M0wc`0V`?zeo)Oevy$!l6~8DJ|19!4ggLe*J+4Af5B48`4yqcK86-&Amx z^EO#5_cdsW;#!TYf!=j!mx)3#&7OfOv7Ws5*@6vb7jPlz#6lA1W}!JSiHUfDDtw1w zp=4+lBr2k7{6-0o8qBzv>siQ{*t`Z%kVu9Q?2(Vg*Z0zZ zRG5?im}F&kVWxV$oC0Lqst_Lzz*=!-^j+d^W$@E&(c?qREWUg}c2Cq=%b;OMWWCxE z6MLyv&8^WN%Q(y@f*_Y`qi-J-q094PR-WfB_!7)4;#Mpe-_h-~q5jvW-Bi+tQu2N3 zRV5U1azOA?#Qg~bb0*aQS0;6tbffA3SqM_eE5ipKOc`ZEg-y1wzzflCVInzDumW?DKrwNvrgQz^<($OyuOq{!N}gA@%eU1i0?B^RffiVar5-Yg zMD!%4vZt(^BWyzH*cw0p#}{a9lebbl-;G?)%q(hauuX<1%!PwieZUnutof{-(*zgf zteBxzWsEB6^RmHm7WU|si>4Raw`sYsf#S$eEAT@zlxn~CcD&G_`E&LALm!{UefO-pzC=Q(&d_Tn&jGIe0P`@+T znTl#^8XbWzGOdIO64_8la$428f)rS0M`z=X@>K`?U~#SW^sbIRzF{^MTfp05_kpV~ zrLJBwsD#$W4YOk0YBnkZ2hL;gv;~x^mCd9vjM$660mNF*o1ECY-0y7t*{Z3mZcl6D$e#0BTQuWt<5Fa|iiScUHvq?q z%4XCAS&wp~w;4)7$XC`O=-~4LcnAinHnP}D2+Zmn*)8oFs6_CNZm||SFHDfqVvs59 z8tR*uQ=_i{1Qzd$Ik4mM2{&XjMleCgf;6C@=-y*_BdfhcLpDjXw#DwMSxOuV57*(UMzz^jD8*uL`6X_cw|LgzLdzZ|e-hchM(6FQeamu1* zDbR1Q%z*Zmr8e&0d@r6@pMtQgyw5sjCX!L+ft9V1iIWmbbd$qHE>lE+^#6(mK_Z(A zuG6h3SXe=XbYAhHpp_V|VWV<2baQ@DYJJDGyjGo*-?n62yaw_ow6cAhTk19{$L;zy z+Kn@5*Q(0;R)Scmq$(qAb0JW*?(_14a2jGsa){*CuW7AHb0li$Y)cDu(C@?W?&?G9 za(pR4HzI^U#29`I3>2x4?xbXuGiZ2`r(N&7PNXb4s=s8g5^Y0?mlP+41^Y8uFA_ut zg^CkeCr)kN^v)w!b~=glUfvB`l2L93{A2Z8y6w7rhqXG?Jqk$Y-+UI(g6t!5Q@YN* zYZcjY+x5~2wKBBK7VZ8ka+x<;b`ZFyDNmk|@wAA(rst3fBd~>HQhun7*|Rb#i@Yoj z-Al0V+A2CLF6XwLQEoO$)^p!qK4l((g+6s9v9nu2s`DP~k3dpx@ROYaqMucTkWX)En{Q;M}T32hgr zqIeJXWy(cL2zG>l>5B`@4?zUG$=J#Ygcf{W&VNRHga-u=594(-T+Ds0U?W^&)&tr7 z#RWi@+*Y*QT_4oKebaVq6qs$Wnfb?;%Ll7UeU_9jJO~*Z5@;DBcI|49h!D<{COua0 zV8Zl(Q+RkwDwCZz5fhZwW~{gsyG--ze~lwZ^h6gAY%yxzt>##J36 zmUh{|7LTdex=F?7pwOgcN#Y0I7@!jxWnv<>*c{MR)Yv^@F!20iT>lX*aL6=46J%qD znMs1c+WW8J)dG7si**&z^Yj7xi!GU6i|M9yzoTpG5m*2Qo1;RVZ`w8Z+2HVEA7QfA zTd=i!qv;#C-SjJd5K_C-DAnzrdETwFXGZJOyvrswggR^^3|cL9%>YP^qbI7A9k*vU zCs*4pAJjtca7?|uS){k(mYP|L_odo(u=Q!*?#_kACliR2djd;>BFrzrSd0tp^z=yk z&MAY1kjBPsZV3$uCa>4t3VFbwLG*$H9wft|3qYG7uZ38WKr2=88|vIpqTW`4O}q#w<36xx(L+D$L*FZ>YN1xs&wCU5BJ0qj>Mi zeP%i6bGM?)hZqW44;WO)>#gu|F@Ua1>XwE?$l?(aB02S>+p=!VE9Oaf3y8gn{6w<4 zsoA1aAqYY_T|-&?oYeiy$=v=QLLcX)bZ$zQMk+UjiC9KY`NvBAfH%rt{ztWzSZ9qbK>vt~|0u_&T6u!Nog-Y8E=7(_JVxZj-pTi_N|G9PKPo@o9hMuoq1)Jmt7_f+V);5`H>iaMN&`y*m{cvUxJm1t?$Ssh zeUg$xsBx>TG*DY$^qCOTfgH@#7fKD>Wtm0XkQE~)j~xRNfG<3hTrBarB1`nMw6%03 zkzGMl{qRZIViameOUXD#ST(_g`V_;{wPyI_2BQ3pfCz(;C!qDc7&crI5)jKs4h0kS ztco-Yf_@U311J$Fnd3F<581yc??KT7ibXP&KbD~Y6QsN>J%HN6#V0uLn(_l(Rt4RA8+mi73c;p0-j&W}-g(r8p_I$K@5;M|q(@mecp&gx8aO77-&v2~M(>@A z&!Ma@e3ADbuDRMAI>0PS&pni>fE zVK4xD3=M-0Hstk~9EQfQ5dbQHPrnPgX~W@OARyxZB4O(`=XmfJsr#uop9fqLUQcr+@Of`xgtJ-U^u4Y0`P5# z!6rrEU8~YSjJ8;3;Lc=*`z6xF@t#qV2=PuNPBwbehWCyJQ$;+BoXC!*FN-OfZke(} zcsnw0imlUj`2nVlUAoVH1ZwLKL8Qdv(QXP$wOGOC_V(}H=-o3HwY&i*ZGhI$6nq5G zh7V|J4l)tK+D2@`Dj5+P7mk`sN)2qVcZ%v)B2#oU$140?q|*AY(puBrgd%GbKVq;f zPC68Vv@odgy>*oaXs7u#Z5^r6U70Emh?Cm^j46Mv(gTbcDsQPa(ApSAqqcwq0P)c{ zj&Yutm=+o@|8GCB8&$CpJ_#6r@5fOaIRNFV%6ajx{pL-j8Fok;+9@t@w|v*Vpq7kM zU`R);G6Q|iPLX+zf;A+-iAZ+C%yW(mji$aAhpI8BQQXQ)u8} zV0)5;a#i?BieN(EdIKFg5G$`jBhbz~;vq@ivXKgUfh>$3@pv2TRBYQu#2QE*qf5>f zxt>Bciqn$6wC%y9f7TwjGs5zzA{^3}+E#Z~Y2b%2y4PBGKPOdohc141_*gBw1R}nlEyjZFcbheG* zaqp}2WmA!01F*JXSi2%SjQLC&WKb&RZa)RpuAvwkh6(2jm9DAH7@gf;Ce=mGfEA zq}*1n4~Va|ZYdWZgG1G8%Jmz`uX{~7cP^DytxKx?l(ytx0s-1ml49Z~WG{c``&PGS z*`)iZbz8ZQ(J2;;A*zy>mOn+r*8^l9o51x2|IJ6^S$;Mi^5uBi`VbGw)Ar5U@tEB! z7naL}DfzG7R*qIw9<_$Up;w-^htp%di0jJbkal#nAC%rW2lFq8n1ZX++?nx=GH~# z*zMwXyHjn`eJJIj=1p?(A4$Q-Go<~8@D8VT){-0T0vv%vCONGN96@`qt2jw9R7Fkz zr0yr+w$r-q5$EX~DaembgdqL)73MMwv`DbbJE2Jj1F|`#o1Q}cT1F(mr=j>*8B+iki?g9f@;(*5Rz%XSU9k|4*M}`w!p!Y z1wyjbit->2p?3%k?miWd9Y!881Fb3%^83}~7Us4xo2V1g3iN0hFtbT6V||@w95Ez_CpBMEGiM6n{vpmc9)sGrWdW zzd(P59r{|6s&{8HP4C$PrG^6_$z69EADS*S7PZsYi(l5o7~7%fY}aM?i+A_U-E9Gu z*wWJO^iy$@5jP7jI+zf-?Rk~qm#-Objg5^VLL0*Nf|)^phEA@c22T<5?7Znc)wPiZ z#n1*8_GC%x6fF3J<$G$UGIVC&X(bPBO*(T$rXV`lNC;+8c81q44kn1TldkW3Uz?;SU#^Y-+--xsFE#yk;<#R|frI*A2 zsO;CurLesWSwiL?RqTk7Rj;F4^raL#k}%PIbLIDIz?tfu$ZNRj8tUpAtYM46g+(wL z@j)72@?Y14spXDTd_km^(`;Qxz1508Y3<*dGDkI`SNDWtBBS;XyM`^Ja|Lyj>aqTI zoaXD_OtB*qY&3t!L|*}e5^R(u#-@1=3-yjL4sjPXweH6Jl^0U;S6)cXUwI+*MDUg6 zGwOxZg#N?&S{G8Ej5%QYY&l^J2ePy^wmDe|!e%)Ed)LmE*v z!@|Y{S>oz?OfX8WA%1Z zp_F2hAq-?X+T(5o>QoG;=X0VF#;_A0R260Xos*Z}JH|ny$Kx48`_1sl4gmYBfAg1| zAxmh@?9r=FUVe|+utn!F$qydfK{jbMax7+D1Fw7M+t1$ zn!WnuZ0*->nlPU9pFRbvcc2k-LOd~>w=2MHp4)dj#7Tqw#WFG+5n7`^xqba?FrE?U zu^>Fhy<_3_6a7Pp3L{m!E2SdEv}S50esKdW5z)i2IY_PNb*ye~K?X>!Wrm)HS8JekaN z3IvgP6_3tdeV@vY?2PNlJrWBU@zXuIz}^!RkU)rG4zE7x?RZvKTD9ajsL9Ucl(RYK z(=0y2;#Ht-YqAewaEVHe>sL`#E?*teoev^NA7a`~=JfJUFj2Sa%xTIgYHKn<{YxMW zPs)Q7Z}r_1t__>AC&XM)>ZI7KYNua16B-Q% zaN^9^Pj+fFSuRfZ7$s)c+lnh2O)f-|d}=s46_Xy6WC2=BiedA!AM&{CoKVWM58**r zv$#-7(;eM7zJax+Tbk}Mu0rnBAmEMj6p%+&&W8=uBGB0hT_!REaB$p0EQgag90oCvJN+!%Jp!9f z`$C<4dO&QbMs->nbC1{)(#CKEuWY{XfrX(pg=RpxAY>MLfiif^HkP^VVUjtO*m}%7 zBrnADgsYxQzgb4NDe`7;8f*#(fG_OrnYaSS1n3(L4J%QMFXgBsRRG4fee*?#q{N## z$fT7aZg+%j9@vS{AS9g1UBQf}7hf1HOH2J#C7x~G# zwP;_fZr>whLaz4UDD9tS=3%SM@2n9qGE0TEk9W1n@juM8;>+y^Z^@yDVMfm z4FQc;pIp7(|3>fR^x_LN0rwLA%n#-iF_FB=@!8&5%KODkCF8X-o4IHTTp;)Mwiqu?g$q8|u zULlcT)ZdM_=XO!8C=&P%yQ*95_9=m`4Qkg1jCX_>?&(ddFrW}A>jLgVEoTNHJwQ0o zZ&Ado4ahy(F*tN+p)BAYXg%5IUK^@9N?IqR2|>VeBq~r-9T46}t?tEk#16Vb;HH?w z2||d3oBAog%@TndUR)od`09^2E09A{S>HapXh)zyX*A1L!X-D9H;+5Sm>KY}R4(xG z&KZ|_vH!{dLQa8~k{ttQIYs}DBP_2xKt3<7bwG^AIP<1ll}*fI zd{@O8&24V$w^pN{i7}*AWyoG24L~J6j!<$c#Cd^5bF^_dA(@V-Aoai2YZ?O4v_k0G z$GIG@O-aco0YymHIPF7D;ax-}9fkr5OdgpuzWg2*A0w?ZyI%c~5SHUB1M+Quuk&$9 zL?*XMd>6_ug2={8i^HrmhzCne$A)4UPRB{)tgf@=SSCc^THGBU?=HN*Y|%QR5;HO3 z7y7L!%NVGJW3~`Oj`5OGj1NyIkhFa~!Gw>nzmh|u665w8IO#bNOcNw!0D#u3i!R=W$`7RdgwO+? zjF%M62(HL%n}u?Vn*tuD8J8mdcdEDe5KkH<7TL{~{D1ZhS)8Bt(QRR%(1cgt*LI&G zJ`B(wC?I|=vH}lBpo1u`skHbI7l5`pcV0H1L7 z--qA5`u;aKiRGc&RTh`O5M~jK5?|{By6gIQGB|(vy_5Ypyr;@0d|5ziCm@7I78iB^ z5=3@YFfZ(FFT%Nkn_RvQn)h~IemXqYPEj)vTNM&7&?W6@2(6dioMjc)cZm6`8-l9{ zM;A8bKa)pAF4{VX&SvS$T3Im;p#;swAxri6S6jSbSj04|l@W7e_nl$#oNO!IUASCiOU5adoAd;&& z>yFS`r+Lt9tQrw1H#VDfk0`2gC|VA`dxY&`o}lTT;h>DKO>d8alwJb!tzp#?lj316 zE_wU9{)Lj(dXmz~Vc;jkC}FDZpJOPiI)Bl+iX*4dbh-6{X<-gGR&_p#yTMvli1V4E z{ZN-%OF@}V;76&a9+M5y$9S@_^>Fi>8}M(cA`GHdq}VSA3^IGgsTmjD4DJYRG%=PU zm3D_kj$s8yi(8 zHUuB1wd#DVZADN4I!}PYSzp?&)Y8MJ{hKdrIk^9DOZ#y`bdi7CPTBL*)BgB`;E0jD zhvjwQP!e0iW-VqE?Q?EV5NwgswOb82!6Je<9@0m&P7~)k%SG54i8m0Gz&QqS~emkaQ_62^w2_dXXdtzcN;&+wE&|s6~;;- zH2Y{F19=^#0L-D92Rjq(fZ8CIp2}#*EAjn9q+|epFsFPm7DS+oT@!?d2ucUB_B{}W z$85@t-nSrv2V+*R=mFjj5hrk)NzE59(Z51*?|1KPaIh>xSe8csie2+3QV?JWEHYM* z!~dp{F!t?9>68Sm0K^5e8*!1(CPOys15)nT*lHV-f<`vkQN597n=7u0;Sq&xH1lsn zRW84Rb^QK=w)Ju4{JnV+4#~t;FZo2}2OJFu08C5W`+5jwr}6g%kTd{snOI{+Z03l1 zRIP9?zjw`&rwTkd%A>}g5P%G$DX9`0*xD4E5Wm|Mb^YS3cNMj?F$AFkM9VV!=+A(%B}V2s zGN`S_rIc>Q4>olW!)2t(w)=f@x*}jK(jS}ZhsCcHr<9FlEGEPoOMmai>aw}m)fWa1 zWBXcv2b;CRw%(aryLxWdcpuHsShU^Y@6!Hg8u+v({b3hCY(k8lz3gqrt5oyKT*j*et+(|nH;8Du?O?jk0BDUPfv^?F~* z>TUtExHB>QNVmRPlzlaMAQ5Nt92KByUGIP?=7JrR8I_;kDnbqJTc2p9x{JPHTRQO$}jMN#8!YQgK zU-gp9>-YXPW(fJRdPDYC@?07SR3MEQxI9vEV>w!j25cjN+IGVj@&5x{Hsmb6w8OnR zvmRpMq;?;E|I%I}O|>HU1US;}_ys0V+>6JvKqx8O8G67Cs~v7A4*Uz84B8J_bv z#x-GMrl3exc|;J4KBVmLP}^E;EX}8dfDdV>wXyeUBpy){(1RfOrSpk;rv&&FzfpRs zc`KV_j;DPph7tO^O>R^#uzr+AXX3zh9pEJiUdL21Myl(tmGu2t?$45l${Dg?GkrwWDw(Jr_~BB zE1=_((y3rooz4x<-Q51DelOT+DKgycvCybsUOVieae*VAbUs%)x4G_pGdpiDd)Dgv zRu6u;#CZ$H1y7(9))5pBrmQ%{gDJWYq#YG;Wh+eg;FXidLQ|n4@cmuTMyA|VC4(X0 z&v83_XoSLU){^2tC_y>X6-8XtS@nk3^lX8idn$Sdu7uzZ!j(Q@sxI)s0WWCTsFnSX zf!X=t&JnCy!h3&zb|wrI>tOYkxU-arLJ;-o5LnJr;m z@HG@tdn3SXe4#h5ghK*CEJPKJu_+1qfYD&7&hUMQae&yJox8Vv=MietP|DIia$Zt4 z@YtK7ZE)q@)?Nsgu*D)C>8%LLRa>F7NYBmBU0S~r1*pIBBxvrQn>?B1?)Rd5SjeFTS-MZ_G5!1he zQ!7WwBE-@^?DzrCkQ%w; zQNfHHrOKSFKfn6UU+)r-^{emv6$dE7m0C`O9EK?x8msb;!_fo+Pt+nzTcmav+EdQU zMw8-bz#ZP*vnH}ngaty}6c5&6vA>Sc>W~(j9vh-(${aCD?;ScALO-5ZW%UDuAAW?L zJQb9CQkwjCJT4|!yGV=G&z^CYH*w5TQ(BYMfXNV*P}+G>sF7aLXHOfifMUwpkrwSb z!_^^szr+~=JnI?*;3h=Xox84~vO*##rwP_s*EVt10ambR)dsl8%VJ_Cf^4+J9~yRX#aT6v6ub;^Y$C7cssyhQ9ynjZ*j< zX1Aph%95A0Vj%gbkN6pRatL6@`?G z^{X%!6v3+1w1f#^ye>7ugi2J|(Rd`fa1PzZ`Ov#6K?5SyEu(DD*;xsUY`fEBWbRZ^ zzCW}p4^yq1rTd5sI7;qe700;?$&WB3=NIN+_lKu)j?3_G*{U*930mOus`|-~PY7Cqntm&ieZ>Fl7uNp5ZP4sNbcUA=KHN4U!+H1F>7M*fq!2 zw5X+%J2rvx9zP7HX=?%-)GC@Bt_y-K_NT;kb3qD|+n@GN?FetN>fTjI`&c?31exPd zW(uY*F@{D-yI+i6oMJ~cQ|rZY$rU)x4oCYEdnQBkTC45^bn}2wFxX&FLi1oiK{5cH zhP81_qEn&R(KZEW8#BYDeFB5S=9AzajI`<1!=#6df!HBP2||E`Ex&hhdl$MOq7tiZ z7z)0i1Cj&EyuQZhDC(GygE%0#+b3d)I*Q1UYGk3mW!tXYbhh79AdpNCvy&^mtA|9b zAB?{7cBcfhXd;C@6#tcBWmxj%X$|+3DQcE%R{dq`(h{ojwLR4t&1E4SC!1}hC0r9C zZ&EvWMtr40Xe1-Ef5N7Pej?{N_7?w@NQtjdGdx>Eq*-G!zDqCmwSqu}2<-d^$EwB~A{m<;cJM zj-b^lji%bIt{fPKtE{pAl_mu{+xT6ZV`k9#L>olq;+`1M)x(IY2EN+wm zqG<*Nb*Z?6JNA@nB`PODa?RsDNF%u?$UYjGj2&1<_5F4Y;-++RZns;}F|4=^>MZn2 z0qt8L@~JWtMNJ$Jf!9`8$P}8M#ZqLeQZbofQU_G+8Jt^Wn4BF$@muAQ8zGqD$U?O?r6O8_0#mYR z!39Rxm1RyY)UJ!Ni)=zr(nvw}P>EB(7`5o)M^2*}48q8l0?~)W@}qb0XuEuN<9OV7 zPU)_2G%4RjsueDr+S|d_pz9E)af*m=#?%*vc@*y9n^&%~i|1i0q=2$)%7kx7G{s=S z146(st;eUprKnQ$Fe2bmi~S%ha_z#xA1WY(v!Q66WC21Cs7xm#2EaHYJYMNE5(WOn zbh^8{v-1r*?B(@`+d{Nvwy~ROqTn?HN5$wXC6l5x=3rTX?P+RwQ<;!- zuBF-kE>=7ASwYxPazhhrCwhIz2Fdt{_x9D7k}i25!?Maqiy%o|8WK4S9f7H)bznrA zR~KG^Ea4FrIAj;aaF-2`iBs8uX;Z?u2_xVm=%xL=Yeex#jtQf?)_$tK+M#pYXo`Kb z^8iO~nV&$e;s5A-G|@=#-L{WiCod z6PSbNn`~qe)g7$ef(i}(V!UemLw_RQoKdK-Mw%ej7p5VRac-s%qol#c@z>^>&I zH%?*2AniG<8>py`hBd{ffT98R055-cDI+K+`=-1vEn6dLqXA0fdo0W|+{LJ-8Cncd z%}KI=cv`BrKT6IfI*Vmj1+gpSDiEue_CS&$))6ZEuO(9kMy;gHyOq5pL3vDtVD3GuxRv0LbpghO&z`Tm5!^elW{SCS-=uFLMcW z(&utmdGd7#AHH=%NyxbTCAzcnp|e4q?wI zMK<2{@7#`rV@bT{eH3F~d}NXQT5J{n7sEL{3xh1!$~h0@~Lht`mli&HpYA; zDd6CcNm*GSFaLyU;fPedQ>9EZxx>jW5aE!9PeD}?9Gp+`c>E%=MwsZ+x$>w>Rlh?)1tt{!sM@NqIqETS!yWfaE72TG+tQxz^0FME{C|F0(h`;nMlljp7N)RNQfiSH$}%)s_F&a|5ul+C9Uqf}{8*fB?lQUe-HhLGO; zx=f@;FF)mzj)gRi7R7`;3-qb@-`W0km|s^vGgT4*WDxcH#Px8<+?JvZ9p98ldW_|3 zNST1)WQT*?18WK(s-#!!u1!GH6ox@4zqjJRc;V>8+W`WaC^X*Dq4=a=q(Nu`rb2F3 zFnpmgb-X*b*@WdOrAZ|^vgr$`2*?KS8lTEXM(R8Osm2lZTSj-aD59OH%1N~bDPA(1 z@Q)HElfOUeFbwI!QY^}K0*_|L7hk;kM4|nH=tl1#LPehOyiMTR8}1Q6e|+_c_0Tg8 zSQ-KWRv~6Ima~muOeQy~(~XRRB37 z9V*UaLLm>#k#X&S^hn9B;4Tcuwjg2??H*7WjQ)_j3kCcZs9Q(es9Vv`_y}Udc%>gS6@%Q2nXOnX@GM6H|{`ReLNBZXEe7tfeD|WRm zKvlj~RDjyasVhR%s5B^L*Du&+J2g6)%lb;AI58=k`s*DB_xj`s^GWQ}e!)6*Mb=KA z&%8_8n-p_yV4^lfz1QGfJAN6dUTm<%NoJU+EpFEBWHuP>iB%yqwJ$e#j0CuE<3i0G z^es~OVl~;JPg(Y>1353w9IIE;hsk|)(!P#bzOCJ7R78H}y$mPF2~np6PZ1smf2N5z zwF{P)ydt;VW|_sXSH{`co=xf zmZTXap7(dyl=lVb0HVDU-Rn6Xx7`yoiCY&IaBR~7uc9DjtpR6_>5K~<-Y>Qss2s2o z_c=Tcix4ZLo*=>GVy6{DGeYM{JCSDqFh+%dZ;+Y&aDfZ)_CzsO3ZitwsO*VD3ziiNj~@^7V`eS)ke-P zn4cskqEPT{uef_5hmPszP+GIfA)IBsg9@|2xG4`fBfn!3sB+`NYWn2c7P{oAL?drF zl+$of%@R2Fv=X93($yet>q{0;?c&OXOM5B8ZBC!OW`UsHeG&#G(f}I!?1E8Jwh5x) z$AvJO2$(LGCwV18A(u*Lko=SWKXG+m6|+@HR?`p-&`FUHFJ(S=+AWNFwcYl&%JAxy zwebm~0$vJfRzX4Jo<&MijTCX;0t6D_{~SZQjTboE<2;pcatx`X7GqM}o^Dtufy$U7 z)J-}J;EEiVwGEW~q6|NtYj3;Uy{Dj0C8Vk*52P*>S$$}-M~G@fJ0kDcv?5Jr`d z3?4(k>#YmU?`s)-eC2}ZtOAc0T+XMXU}o=5=Q~MqSJsA5)h+0A_ud6qrxgcnhn+fh zc7?hr2V*8h2&l|r<*qAbw$kY;wv`Z@evM2Qv69Fhh^`{|{*H?3Bl_RGk|7NhxG>bc zDHXqc4+9qb2?i`3^AtT<+L3qwHx!5F0|r)${Ar=4Cp|w=rZJ zzlcVBL9qy}>ll=MtmvTTLIxyc|7_LIC$UNIyHA>17r|C`{@hJ9!<0h6Q6;Dr%2?;(Fr0`F1?Zulq-N*7^+3%hUF1;xSNP zu491MV3Fcls?MDZe){PEsnCyG<1&kp3jap)6)#Y80d_)%>^wLvE%Hg+u~2Sa*hidY zLGdsbgb2;k^00Jg{i-^Rk?&~OUJnnO+ZayH${DwAV>mhEfOOD{cQL3n3vtudXK?WD z^0>K*0imvQ7Xx=GF=xGR_tHI(zObSF&`nq0#z5MUfRXhed{Pw{OSfVT9ef>5NvHr|(k6lB@O zWf}r&qj-d9NeEW93L&q;%bm1lEh9n=CDoV5SvZQLQ&bwM$WmNff)F@Ccy8axaE}xU ziNb)Ry(xrSD0kXRag-m$$0YxbpeRf(URVial?%<9muLtfy0q_R_^?J;#*~3Ql)svN z2N8hEDHeq&MZ!H}1jHIC?4ta{$&1VuDT#F)`Q82D$gd<_W>rX@AEln7ZlP3VjuWS^ z>fcJ?lX24)C+KrA>l6pEWcQc?HzY(rk!ok%&*&#o!#TTn19C=&eSLe5+dqnlc3}-? zfTRl4L)pBX1*>JqEv6`l7F6DMmCL6PG+kn6 zZ)u-(9fb=Zi}SXwqiBvOe1)`1uOiLb7g8W(!b%B9V#_IV_wrMQ%?3Ql`zUCnx-SlL zbfXnFQ^Y`m=^O~)4x`tDm$MBE=DNtGG%!6%K^i1)2Pf7>Trp-5+nqW za6kbV;Irz~0rTZ93(;20dweU)N5lj0E7bzq&xxu_AV7sj4n*fS{&{M>oQ>0Zp6PKlD2X?Nths$vGW5W3pIVBxx+flWDM*&QM%` zQ-(ZknD<*3Wq^dx_e^c{VYKhc$XM3qb#zu}o5OvBz zkkP*7Vnczg4!5S#mk@rr$vZ?5Ew;KO#}qxH-jR`YxvG~GlvQ98UWG|d!NM?}_PrQE z&O3FU)xk_8hHa`0J)*>f-4YrQ_y+WA5hjL3L$gGj&CvJb(@`LL9ZO{c!X5@&#_A7y z3nZxZUdfmlrI;tTP=65NIXkmN5r&yGhpF8+0o zO6AnEa`jVNdqM)S1yh;0nXzr-RFlA_e;6ag?VQOLWp3V*xyLX zRE-*2CSl3KW{l-x!qL)mpalT2C!MT2qbXsI&oFcFMp#O`9^v9+f?{2UR6aHcse&?oGZ&z2+dU2YDWV*g z$bF#zNot&9deRIQ?m)R!??B5@(vXK$~#bQxzxX_m|~apwIvw~2VheH;@L@G z!Peh|e()DG8Va`Z5)>6T>^t??Ham%L#N4jC2qh8?rYMT-)>iZKDwJDNlWgS{Tf_X7 zg~8!C@=3e^>2@J<<*^7o#wB<`_@Z6Bq7VL*2HB6CF1lwi4q35atWgF5kr4!ls@)NO z+vf%)?(0-ccTYNG*eE+>S9pvcTyZm4(Pb^dBp-n|%FxVk4o{h(AwyAAL*y1hG%97y zqXXy^~~ zqA@!mT{`@OI0zgHNO&c73}=(Fp4|hi(uxsMn8~Xz>1SH+iTCRsHAXbCV?HSC;DX6B z&cK%?0Z=Ao4yujwatvh>}iNZtow*{+*ik2!+6J-X`R8v>RW zPzF+A1hxreo)V|lTGu7xa}2%aj7y=$-{i6{xq*l@CJ-^X`6fR^i&kHop_gCh+6-O# zd+{UddXWHAFV47seDQY|Kh+()^5{{tbU?vGl|`1}8e>6odj`=g=$E+d@b|Jew5Yde z#1L4^o=p^DT~xo{pL5*4r%m^8=>iOu7qtDnTCeitfS_to$BvyWIlaJH7!%E?(#G zfGd}wMf#LDcV6aDw>fTd(09W*D-SKTyvO`QxR!3B#Dy}u_*)fVTyvGdhSK%NiVTX2 z47MOQACC{!qkWITHYFqgFq!OqsU3SKCxY*R;r~6|EvXW#Q!EO@7H!-1En6r324Kq- zg1!tGxslU?27bWx?S^Ug^e}$Us4Adqp{e>ASB|*?>=TvjxI1S5M5i&S<3~Kc_;N=e zB=9a3Wx7pxA~BIFf$0;p;EF-~9x_*_R1{YdEC8(R(d$t}uBgSE1}^^N5$+US z+S?8Kf3bt%d4!Xo3UFaK(N&*iGOAW7ggF{cT>G%J&Fcp8=Y$-gdF0`+Nq}!)FX26B z6T&vU#dGd-A6)#$u334L%fUxn*r}idC&%ZxU~C{rkENF9c`Wxj&BQJh7jYMd@>@k% zEgzN1J@QjmO`Jz`^(lnV~@E`BK0>PAmj4Z?e=twnguMB4~7sOXO_ndKha9+pym%()Sf z5AuJJSOUs=S4jzV5JWWP9?a29Rj}930b;Cr+5|oO@bx}Qmqv2iqQgiHm`4y5!wl` zHYBwaao8{!ZNEXHs1IxP)^A3AAn0zwr_5N4t&*}AKVUu+fJ3B85(B|Aa9SLBCX`6M zPsfKM{SKvKbpKm^x68Ns1+x0pE-!@+N8dW>Y#2gTEr}*K7zoR?cOsdti$l!>gq)) zTY48Ne?V)2w)P;JJY+lV#r^PPSx|Ry1S@7;e zf`w9{n~55hOLBhnUnms1J(~C8ynFcZB`TK|1ux|?%kE1}7V3mrt|1FbfPrd*&8zgd zyhx~|@V}k>c2rV~9~uJPQ9#qF7-|(0vZXIH8Ya|yIAsVm?z(f{(Qjdr#I42GU2AY@ zs?&6HBrY&7#eLR;c?3js5VOc@_ftz?f}u(UK@saU+n7Zi`bKZt0nyqfLheq+06hLn zVwj%uf4+j^B&^n~L4AS1^7_zf`0`f>3eB-k%csbx8X(7ZF=g;O@bD#kMC zOHUzFc>FP}K*AEAG(|<|gVzlX=2Fx2A44raH1*=yGp9lOhYp&}M+l5rppK`qfYDK%UX6_FFCK?jrYy55Xtan=+Tw;M0 zEuF$>$I>xq+^D^QL`w0JH_6N^zEvk1If|u%=Vi;vvV$4TSnMzH)PxlU##%`kyIs3; zTZG?s34Oj#8<#48X%n{Kj})F4Lcx<2h|1^IT~F2h-g@o)jBd5IA15W`zTHo8+8Gspu*08NVzw1jz+!QtT-iZT1 zdf>(x4_l*?ET@=d`(>w;=G&!V8UwODUqDQR@n2S)@we$p8(HcSX9^1&WErl23n+$%fDwkvi zj1xyni!dJehz}t-HcFRw3%#2{B*AnREsL!WVIgyc%v33~rRxUO1~N;4>4U~vysoj# zktTF;>P4E7Ta{`LPwXk_SnnUe@?`kKnX3B&VzrPQ6`~@(HbffFu9mLc26E8Aiq<7t zXH>7$iz?V?NhZHR_7=-f>Wp(gL!JQ-WZxCHw$9h;ixAtDrEPEO^hQ5cSKz^cXc21W z)JV21j;#k3IGG=qCvLPQU5UbnU~lLYIYNyoDODp^jPilw#RSd^Bdn+z+0wehR%D2p zbj5;(G2+`nA?LtkI_Kyg`ck#~8$7FaDnFAot5X?rBdSb*hxtCJXI6&%=;8-dCI+ic zE`F%4?c$IR_=R;ymNW!`!VL|P>HJy4Ome{TQBopdg<$#aJC=hTnP;9wKq%8~Xw`jJCdnL*G2M6H|xyK$xs}3kzxx; zYgKaGlv3He>$wXMOO{2ezM^O{fC{7Mjc?41(u$kJTWMQYdzZEG-VK{fu0n#l4m$Bs zpqTkF$|2wZJlj+f8YrM8JyLL$rn2(Bf!XHbqS97py#~~my9daZu9%ox1`qn^W*{;smluLA{MohUGn=dPj2E$gblQ*v&?<#@OCK=Vtd%GUK*U8d z$>`!sQJTi@)+(0>hn-UA;~dG2dWl^O1@5Sp$Sg|HLd8$HEV~i->A@VCrfqQ*F%zQO z_bWM+csiLyjxT=F{MQ$liQttb+8@=8`n`Q^&@QiBe>w*WXXC>qpFgsB+tH5E&9^{4IUVghQ3MdJH$+n0fhlIz-GH>}_zoa%VmUt`O z5vB`=vD7m~83BOnL)piP4uIWMbrz;HFHRcJ0KCLlSn$qFt~&z6uUPy-{XNEyhudH7 zohr|pmO~#xCM&eI1VQmsKlJ+|Nh8&Yw6D3(K@#IVvt-m2tQ z@Ru<$H5@3>u&p=c+38{1$@-#cx`?sT|KH6^4k3A$*W*DmD*d zr$Nir;s`*&G;;*Rf~J2< z@DA1xqzpMG75{T-)tzR{QgX*mKJS;x?!eJHWp^Y8dWTgVC!4|=>j(2)hoZEwt!gLE&J;y0VPIKXCT zCfgFWwRQoVhdN?#?y#@WD}}6B`{)*gsY-|&tSkp}cTU*_nQb6tLWJa`I`6_%(HvpI zQ3b}~Ysr?OOid}6ZI94ftOdh5nHMXMvLSNnJhg|$*1%E+X6i$icJFk3fiO!?`kG#W zLZvJn%%!$mzfO$d_~Hi&pJC#Y9xNpcK~U{rrE@MXuq0Ai3Ml2A*#5m6$xNYFVNen$ z1r$T>N9JgW8fKzF!;q;mVh5mwm%|`!)VCYwl9DqU_-+!kMdNaDMb^)GDy*ugyE=-l znX%dep_gk5%}D%!R4w-woBt0gIzw?8iq0TBu|;+vUB?BC^JP`ZnUFUYw&-vN`O!jI zIU#@)+b%R-xa*;{W7pfyus0V6zE5z__ZdP{-20c!c#|lL6a+anvL=niJ&vy{F%=>uqIJT$%kL~16Ax|AkO(W@)h$3% z8c0T&g-w02(ZW!zmcPYW<*-?K#y*EOStP<`Me&(CDLmO4^Y%9WY)QbN zI0MABjWY!Fiv+n{?@CLf!NHN#$RRg|Zyzivcnn@fZc+iRwU~k+@L-EvPf2guT^sLfC|E#b8%aGCt=5>E(Y7_U%8t#wV*L~ zISd+domO0Ew8IhFMKT(HU$q#t0-1?ZYnRE`64B_ytJ=gK+Aivae8$;<-Rt51mY(lX_>!?dWG|V*JrE(Tn>@-<( zi|)&K-c-E^>!Ok%(K|p-9V|kS9yi4z{EBgq(N*uZGxWCzEP0kw8y$RgwiT4p|S zuy>SoxQADd7U@}*v$y592@|Ta8x%)fLJ$<@3~X*uwLmyd7%8|8s732m62H}Q?Aa^o zIHbnjjjGT_TLfBF%i$eGS=zhiQ?9dd83#|$zLl7SMO!~KG?cl8F*yA&b;en~LCrJr zgIBdy!^OW1O3SlSt|7g9QJJCm4w;Z1u*v0#fCHKh$Ux*|S#jpiLSY6^Qb0+jc`P0f ztdJxSx8Y0?%6Y8sjAs0Wkf?LZr>#wIUb7$0IB>sKiv)u5x>Q$q00PLGi<`@47-qjz zT_M`gvuWi|XyvUhlpV-VyeaAXZa4X(C2FvN>HkxAJ7k_gh+5{o{b zP$B1Lp+g+3NkWSrG$>jz)aMUHE0;xpyAa`yyP&<5YchcE$f&3I03mW}5UrHojSQnw z1qxUrL{$3pZzk~yF|3X9FJB#fV;C- zE=hr#AglMNvjm4dnDaLdp-|qqXOFb(F(<(QnKAe7%kR!c|40$mRwE|w+&03eUSQ^T z?jC^<{Ht|!)6VWrc46J;FTblGhe$0WnzDJ=xcHF-DGyA$PHydRRgT%kpC6?inCXWx zG{Xw!IFp;zFdJutiRM-}{6Bu5KVN=#$~q&L!ueU7WY1Fkc$e}7k?^6JRPo?S^O~ob zm(@Rc`Q6?FHfPi)E_8E_7&DmjOkYhCMtqfQ=Ys<(O=Ygr$>=&;K0VYN23ImeisbH7DjCk^uf5w7VW92w>k+6!DYZ#s7QMyL)2;eM{ZU8ANU4 zFxDk=Alv}|#IN1fKR`m0xWU$vuF9zRMRpk!?Ts4=RPq6obp0qCxmuN^IAYI*;*kod zUATGW;?K)(&a4wFf5P2L&vZs0_{K^9A3rU8LS7b0PvXT>ftNl%U~3>_fUTV{K7|2s zuEQSI6241jAE85BR{LExx2xnKD2$Ooh%%9Y4JE{J)NMheIWKtLG$;f*?lPmd?=-6o zag8V(5o|8F(+xgVslauSr<@ge+d67?R%?>b3Va^PL}#1F{JC@(7&K8Hlr5EO*q`qd6mQR8WtAjemYiU56@>$Ptp6wgZ-0dT*$IZ{l9Xs{g|YWRk7jCR9Siy(P<8%@w&>W z$dyM2*0FsGK;}Y3K^$1SMTn!)0^sRUm$Od956&anNwZNaoviv#A%@5DgNb?)1z{)@ z?#Zc-ShL_h-llq+NMDI)KAHdwrBO4>W;L|~gq>xC%_1 z9|%zg1;Fk^32{sE8VAn+%|>V0z%xLTfoRdugjen2eRru%q|)(T8iNgQzDSu8kq|{O z_>do^vM}gFSW~d4UXY2h*P>3h|4*_QnruE{il#GA@SYfpq^=V7mNGew=YVsSuqnHwy{N+TcAV?i&GCQzcdvi^)hBGvrSie+fB*WIuYdm4 zpS}Kj{{37%UjJ0Td$0fD^-uM`AHV+3uYba`e_(lyobdXu^n%7e>%IOjD@XVXzFftI z{xRV%H?O?@_g{VI_0L}aLc_iO*;k)@^=GUvC5qR7&1nCH_djMD`Hn1OPM&^x7rlOr zi8iWP>GA6?nd_f_^(Uo6_%3<#my2(peZjW8;GZzw=dXXt*M3sELK(S`Jm;vb(A${D zqL9Przl_BQOVR`l&WC$`u}wMpT7Qr zPyZ1cq$#MsPv)yXBnFF zue|`l7@^SOB7}SLZ1(G)Uw!@KZ)o2^ZLLg{PTl`VsN8TTA>!*VzWNUP_xEZ_vmE|A z9NbTPJcmNCLBE79wZOf*c%A0TW+CXC9R8BI{8VF$7$T|IfEQH~3<;knjQ%XAzG|^l z5)rl*08!Q18K|4_#Xg-J=BqztYkLNMVNOuEKP|f@*!nABu-E9%|AhbhWJMExogHGH z>w$DZw^?7Fz`(A<a_Ijd?_t-ZD++U?vtu=ZN@m^Ev@Yt~#e z1PGRkj?=orRvHfXLj~%3=aP^j&7-Zz$O64)`|@hbnn_6_@mkDrJ<8mG9re?@JAWKl zz0`uC1!%PI(yI9_BxMzcf(tOYKxP#z3C4#0_~{(^jVM>(Lxo0`wlG=>MrS7jM}pn> z+Jf60lxB4o?tILv8+R63>lhzRFFc$uYy}HIm|U;RjoU`?HQ9)BLW3|bMBWm*iEGyD zFx)w>RziG0UyE^HGPrpLoci<5%@UtQ9=rRrq15SixbfUA2DO2qP8~O{_YsrzDsKO;D9;XqdsarV)X6 z{wSi }hVD4VYZSSJ!zl@Zwm9{_uxQ@65Eey53JJz#{wsqf~5Z&bq-h3^i?W{6=D3!8YE4GdeCx@G{}x!gZYWArc9l}1D?h-M)_wgi$h zYoI4?Q!{|SafYNloo)k^o2zh80ocHuj~Kf$OU+Ky1a|EK=@9HO$sOx(k1bgn`XrID#^ zBgI7WvBLQ56JlT65~m70nI@A+vdL(H0AInO8Z2#KJPT8F;&YA0Kc=aq!CP#`f*P2d z!?q~gn zMbW4_v6W&voD(y5G#G-@H~>2e42X1TCRSndD;x5-KrkS+J%Uv$z_D|^lw(fw^uo2j zGORVL?0b!mR$yJ`B>}|=wyYL*AUkdc9~Ot=Pcfy;2czu1{%YX3oTy zQSddR)!X3UHTFo}4cbT1n{Ro9>sobGpPJWXq!_$ZV>;K0SvF2G6Peh z?ic|;zlBBne~9BKHbAFqqA0~ih-fgGr3wPZNyC?HynXR$R&ptSZJXC8o`8WEhDN zBM&EdOWwr-Om{wDw_*g>{4lS+ltplDaJqQurEvZTgJ)4;zhhRmiDh*>Xd-kY^A5vW z7}@&cD)LHJgwrPf(E?@7`4*{t&kRT^2Ll5kI|miZhSs7vHpisPWo7|wsZ(}ey#_v$ zM>`rLD6BMDRd#YBJc261X5Vum`CJLKyy_JDm4I1&Wj!^hSei$Qq_-3X3_&w#AsJmn zM~I|In#u9_mgRb+y;g*3C9gxY7$OSVw+Jn6L$pW}UwzCxnXxHK6YCnA#l{iQpt#n& z8e7{EPK2wIIX`Htce-TC2J_~-eS!IrKFD;rHT|ktDK0MxL`b~Y`bq1~d4M(rWe`2or@KtYKUbe4yHJM!-0TMu90gcHm$#mj@3N6WtRLs>p zHYlltE3x0}G`yllfYr-<7LKKcygLh-wd2~GHJ-M-n^@pT!9Q}fzwc;Fr&OWTSK5&ZKzxdGs3VKDvO_nUjd#6 zm4)pfDj4U?x>^r3h=CL= zi&lH<%x~+XA}Z{jm`aUdP2iG#_Zll;fm)geVch3I6B#P8sRcJ9vv+s{Stu_$wUvcV zv)t%#{*R_kg2gKe0YD~W){31_jVNlM4;%C*aib`?s!@&KkrTlnh**bE{UAKA;svpK z@CqZTr-u|!~1d_*fFp+=!-R7!;ZEX{4tW_mraX)1qp}6qgqri!-mt?q{C`oI-nj z6KvKnpi4{Uge?p-tN#UNWp;XmO3celF1!>q$7Dqov0RIdaAwHGi0Ro-=!OL15x!Kq z6DJzF9zi7N9C+;%WQIdByD_tzJ;EFz)1=|h>`oF>c7q_9v8O?md13N6Bo#P#jH&&p z(K(iK&D>D5r>tEGWTgb4^}?aVI+H61P#GWBp--2P$JbW(s!wN5J?uP9MXd}=c8&t( zUj`t~TC>+xL99C$aXepzRl3axVBz z;%fIKG&J9eRPgl$9k3A`fsTWR>#7l6MxY$>EzS>@vjSE06gw#-Aqos?w~tE+yjikp zHcC|y%T4uw1EZ~eT|#9n4v*xGuh_K8$-UE<;m~i2>E=^xEu&wZEGBT45#>Py63EfR z4>p7;1vn4q3sy5xN+1r>hodYY6U1)RZi=@|kB1NDIn#L}-dor|_))J5m{crlg) z@tQ{yENLL91|?`dtXvOM3lYApXuaB3*!n|hkeLmajg1nu!znFGvY?b6EJhf9XNmH3!x1b6MDEQAN z>!~2Nh6y#Go5|6?Sb3s`WZ0g76oeQQJm6inJXmRh%-+yGl;y^((3s0`tY}G(>P+rq zV6=w{z89s(?tBC}y$mW4MOo)?P&X1vklp#6FH$FCgqSr-UWE)sbI&e>bnIGg(%z>{ zeoBDpRF+%G9ZHQd@-`}|%_tw!0w7ld&q>zGdJ0Z&ZU7g1qc4c~*t?Jlg0p zOA&d8dd0II!ZfaFJb^>u$hbD9vf}}HbS*a36D+Zs{VhQUxRt%rD1KPOBMBV>5D^M4 zVe^rQiSgMzBcl__`#fy~TRxP`zua+g~HjZLqJ{dg;T;T^5EUOH6N17Tr z1>kd&Vjz}*i)1$&{)-hTVwYAROqFHpn%piErp}v1 zj5PL*;;J}5cpG5iiARvb)i@?!(F2+Ol#uKlFbK;P2V>0=_|2k}A;VP$sI8Zb`j^7< zh!&J>+bAaOG0^nTqI1dbG%lAQVlApJqtd!THz_zTd{j0y)#GGp_;!X=X;+^~ln6gf z!cN1J_6d!6@aTITMTKpF5XF4_Z$^l|MIsp^wc0_Ivo_HQbnvqgpr>|?2Vv{k2rfJ7 zLrd}@6dN;N;Tk_v4%y9sgsm0AGcNCYru@gz=}E)JI+rR6*GSF#G0oRZB%N*1LzJQi z(B%P(m1O9kTcXekVap5;0#=gkD=Y#fBN{FgAAvR`CScd#btyuj_yTFzF^-`}2-ol+ z6zuDB#w;)0WQ$n&YdBcupn>VaLaIco(up^3g@4!T>wY{vy?y(ZE$fqj=@FWVHi>Q- zYz9iG?WY?DYCr(J<$-3c*RozU=WPRmPjBG|AsN;Xg8=U?=&|J9zVJ5p0@7f#U_@ z18F9kK#1#>s|2})95-=TkYMG3{xNsQj2-T9952?VxQ;g7R+yz+fWyHPtW9tbTw31ZD5bzvqVfKKuWV)*vU@$WkiVG5O|_95n)-z z&;+hd=3PP_kEaC!_-g<+@yowgf6^>9{3=U!-@8}f#~n(m7hbhv=Bmt*=0vvpgbI0p z0agW!R_aiEt~A%#J^C#B%C1 zPs1R3YTG2Qz(BEhH3gcab9%sWcd&33%7TWyT@D+~yv+7Wp;3Nn#FF-{0N6uH3NRbv zDiJa#m$Y~#L^-l`GsBny8;C?MxV&cF*%ri8SSNBJ(#X+_J;o6jQUI^Ic_Uu<8vgMt z{g5>XLx{tWO8QTAEC9<~{_ZtByOM>RVTg|*#VG7Zb+8#ssGTrSd9q;ISS+A(MLW83 zl_HW1a!j*U$5zGqB zL>1?=B|A|NQRm3~S!m>p#kSZxCt0HAR;k#vSP9Zqz$yhH!2-q)+hSVP zn3=$^#DMRIZZ7K7=Ub+Esr9sKOSV)sQqo@J!+(Pb0iDW%w<3~%+Ncc6>Ut~~S(Y}m z6`m9cW_mM-Vc?HYN4mv$f-S^5Ju3lZvUk1i6Jg`|0ac+KfHZNP{hEE^9wdmkh0_)7Onsj5ZgD?)t8NhGYkDlsy_r#S5{rWu=dYDUhCg4!R(CzXMN z?bK7r65721>tx{@HbocmP~`mob?t~j5dh7fJsQ- zNKBFd<%~o?_?anV2i+&kwD;qaRVrbw0AwtUdB?J^8qH$`?TSK~FknnrLV<*DAA|u? zSW}=A4Yjwml9_khOn(DFEUkIx zceF9*=evW_E~&(3nNAk#Y?|3sKjX_QZF1gWHY2dfq(si)`&Og~jZZ6XRwKWL@R{_y z70j%Ys#2FkE)o$Ya}bxYUL15QAzoOxc|lIVx8pY2NIDhkMynP649rWV53qpw}g-OqBw!Z-@f#s!s(C3Y)$Z zrc|5&6~gaIDHa|;gXze~M?-nfQNBsX2&O7g2kygwu8fCsI~CUKF+^=NmHZrnfgM@y zyJ;&qg}d{5fKGUp*bCmJ__&Y8@uPG_L|B%MZz9w6wf0iy{Hv7&6&8bV*MBeL9mvq!DCX6fv+(;PcLIyC&Q~H#9Ad;Cqd@<*R;Q<>` z3c$o&Q*U0#;zq!0sRV^oP*he<3>I8AJ~kDiLjjmt)kR~H=!jL?gi<~PG7k}maKoO^ zo~etq+7KSj;FS`=GuopmaV{Bg+5!ZY#4`a0H++r$WN&c-FCwn|5S=68(`I2Oz$YQX z{qb-sGkD?hjohyC=z&tVk^W)xA#QU7ozR(sWP4V|B_{y^6B6a;%B~kIy<==>rk4}Z zm1HT2`c$^msmKEYvP_A<{gJD(k6p#G27p=>)rPKiy_Rd@wYL4|3LXCI$`gkgnoW8UlS|b?>-y_+uud8S z16S35<%Su5#<+yX5$>ODx@1p+YI zGG7ieP59<~kX}N&u?R!xseH*OU`h~)A4xIS0vE=Ccm<(1YgK;+tlUv&Hy)W4SY^ew-==W5sUVMybQI$?^UatCG?I_1YCk-#3|F+NwgKy? zwP6GDFP%ntNle%?Q*=yBA3`TO#?pfD2~AU+$ZOE@Bm+dAOJt+Q>*#qI z+B(WKC4%X{(D?uG3UH13HtV?wculRpfWH_3!)M5V@12g@b1D zMY#B*MZgGA$mCOIHTxy8dI07K=)%QmtJE%rjPC)3QQW?JU04uXnnp4L^!_lA5`ANS z9NTcw-ol0M`pO28Mvak0!?cu)vcq6YG&dm?nuuCMhKkG#e0JwB&nX)o0LGY7M)VA+ zluF`d6?5;nS-nqCNmCiwSYa`*{1%87-xCBOa|88cwW10#^8EqB$eT>90xK@cgH)U_ z1j}f&OlHpz$_wm1B*s@GN1kjf>|Rq4;Nn_qz{oircJ62_MW5 z$6jI;BT@s|>C#?%Zf7(VH4V0|G#M zaM|UOvQ3=yRMH|$p-hzt>No;$a0L^AaprBobjN<|VYS2J;#_WMKYSFc;2U4EE<22g zFa1m~qUCse914lWUO)@!O6K4&dNDDyTw~6?zgLb;(E!e1@Kj+;`ov5m@o=qxJA0(97SR|0k?pjM~PzW8Hq2Rk_{u<5)mP}u8OSG zXVm8&f%}X>M)1xzs(*SH#=U^IyrkG!XU|E*!)bwrFpT<-lORaRV7*ZE!ky2ackB;A z?-Ovx|_(;|~lrl-X?Ly#jEF06=Bc!nvW^qr#_oJFvzz>#m^X5VCw_1za??Lgn*!eun6 zF2?&LtTRJO1Er-aY_9P9TB4QTU;p(tgG2Sz$0lpxZq`~q3>O63ZwEh}WX$PGy^zjBTp4dM82$z6r} zVo3^qUQwEkNTJ|}ksz97wl!0?3!f?&e6!v988-Hx^%Cp~i@2fQGh0GI3r|dGvj15LRdeR37 zGzxyQ`WhA7;Op>Q?6P4l8%91iPy`2EFWA3l`M06>`0PZ- zI{q;NeC6)KCkB7>e7ko{>60z)P*_jEWLBT+b7o=g19ulb2im&}SK|v7;ycAW28Vqw zplu1v*{BA{_*TClZ|z@aKfwcFI8FKlpy@@PGBZ=1w~dQX`q)Bp zKCqMM=!A`VQk$sR*-E;B8DW=nfrCf5@_qcBfG|_x*Y)bwr8!MGe)%nKw%Jn z=LmB$GCX8>E~ijNk-_5x5fI$lW`u+*zD7a`8^MNcVx3l)5blGte0#;s@Z=%k$heVd z_yL~_J>_IxBHBg={?BZw{L5HHCw=N+vTgrbTUY@x0bz$-Wn6EP-OZw*U#>AUIc1l< zfD?8TkhYx;y`OvQ^j+_IN-P13qwHcXuf%}v%Y2!suck_QPiol;v5 zsLmOSKY~c`IoTkX7rcvujQk|9>RZtlsjdU?vPUP{7RROxzfC9%*($)6h}hxd(P@Co zdrcy+tp~^z?6zybbC!0LZf=imiTj1X;cdLKxM9llLM#fcJiz`>0C>%yE}XA2|7v&+3R?Jd(& z&vzy{VBmuy`dW{Swj3RF6)V~n3K7r^=wY_=HBiqyPX6LuA-q^@h_mJsXf;p-{h%r^ z#2;b3{n(2IHx6E%LxjB$YR&>ad%(g0k*U74f5DW29<~R zQ~W9k09Ihaj9m*nC?~?&BWJW5QOF63AN61@9y+Mv_?or_>49Wqa(ERST)unhB_kQp zMN}<%(TK+QZNc8ffil@lYd~kjB|Vs2bYQpR{5u(KUDfwLZ8dBLn+`0MRA81QmqCuG z-PRM-23zE>B^%P3;FM~k^7;CgF3+*~mf=d0wl#nE(r0@a*X5aXa+_brqZB%9ut+pQ zvHN{&>QJ;`5v?ngrcfE@RkRb{M?>;jXye_ek_yA2`(woY5hYmru9h zP6d8bUm$eCt=N%WHbRb4!AJp&_ztibx?vz{E21@^rcN)89bb1HqHu^lGP`G2r!61x zCxm?X&WDzW0A-2i>|Yq@69#9$oJ#TjoTq{;&&jNJ%pJ2k-81;sG?_5}@B7TU6yVU4 zQx1Pf@YRskJKWCE>F39$c1JB5IGFW1Y)CD}X2<)D6iU(BA{}=uM_kidcX#1rq>T3s ztC0SSoM#sF5h}V^fA-yN6yGxD7M1#_*bR)z-=Gn)kWA&B%Q@|q0og-+WtDoHiQ$7KUS8(4h+na2<$~+OdYP9}W+FR}zJQFalT=UK$q@3ijJ- z9#j@;jSt$Vk&Ju`9uV-kEqp62>;hs>8v*S=R@#Dyf8U*z%x8F@BDp^kQsY6IL8r-0 zE(4nBG-GcFBd#~lvq<*`02}5rIQ{SfeslkZW5Hr?ad(9q6V(~vB@}NP@ zLV}bm28+e!!=41rU|B8+@O6T6bf)M5COY?Aq_D3~#k~c4&Ydj9hYD7q%K?9M⁡c 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 Sf3(%Tz16*U1PuvQN&f@3L{&im diff --git a/priv/static/static/js/app.def6476e8bc9b214218b.js.map b/priv/static/static/js/app.def6476e8bc9b214218b.js.map deleted file mode 100644 index a03cad2581e5778e348727271bf6ac11c0e30edd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1658859 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�TW{d&zMieVk|?+s$97Mm^~$Jx!9~A47C8mZ=$R$ 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�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�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 MxsY#k6Rl4XHaG!{y1iubeM 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�d&gPV01eI@HBHEXU$(#WzPgL> z(a?dc)WzHarafW`)lQxmIg3}Yau0O7Vq9XIHIs5w=%azUz_q10pK8uP86iG!0+hyx z@g-}46o97Qs7%xnwsm>W=5*#l6j8SDz`RLM>*BxJuOA@{HRu<}F1fLP%BlS?YPkMYByTmln5Y?drY?1$@DV zwc=3YK<%m8i>Xs)Mg_OUBbm%UbLaOBKZ#=C7o!AAYoc(sZ%ddi`MoRRVD_$BX77^k z;maUrf7tu6b=C)7CQJH*59`XOkwi?$b)3=AFupW2*~l~Tzr`+xE%4(};%#FvG|Bp| zue(+@dlk)%C8lEC)`w_OvPUk4L&v(x^&(6*^!R*JI zuq6Glc<|ox)IdSv8f6aYA@;p|JLjbuaKGG)H zQ6@CUw)rXsoLsI$HtBX)-1qO7Kew`Z07MN`%=;01=etPy;D*aZ-0YljU)%t3(BWsp6 zz&fNHuA2%Z%V78`GpL(VTGe@-hrFYNp^rms0F2YL)JI1thh&@?gy!S@{|v0OFV}-r zxma35KnYUgBhtZ@4m01=9G28?go6D91#f1g)=i6ArMCGSzkd1rTUExLA<7x}UdETC zOpzAOL`O3T-~o=uJRYCM3fT$H`Ny+mK5HdMUgfJChf9E*o4jPpkcmj#&VB)B0qKF- zt!en_axzpd{D$eU$1aP}Nf65XCiqXc_*0N3&24m4V~I?K3>Q34zv0dFNUS5QUrvoQ z?j)upjFt^pAseN1hp|(~sdC4qJ@TH$p;wXn>UpNdOY>ZH`nM1_nTJc9Cs#$ZMdD7yPPHlXH5 zkXm|u5##T_d-gci>_!1othh@oj4NEqS)zQ@@nm;6mmEsp6tN&J%K2IWZ8Ut^3|B{$ z9+oibrl4xy+oI+|)K*#3$y?t)Z}54G76Bmr&cpj#lnN<36|$mch;^rHDIgT#Q{HLT zp8qC{qk33NAodP*n5fb;B^*TVq54LW0>lJX3Nj>JffZ!XKgOGZ!y@|f)hYcI%li=- zZpwQ8WppEqZZ^?$lMY60cMKmzHfL?s-j%G)xdn53JGjH$r)*gneuW!`J8lHDP1RfE zuG8S*kxnL z6q>svu%W=8;-HO}d$fk3A5y(8agXm@rJOm=WP|#EWp>q0%BY3%OQ1R z2wPo|94PKn0i=!>S3gB8 z5V(=digH3A;*&s8SL4Z>9Pdiv1|U_iNESLN&vK=Q!-XOsGGrePwKDqFaZU&;Dip!s97|34Z;@+i7 zAXP_rz!UpIw=(2~b!DZ!-&V`_&c$*Npp!2Xknw=G7Z3gB~kN-eaAj?b7UNDhqFw7y$x5?$9&j%PXFWlpCF zad<<>ZF7=gm=AFp1wCF53)|7{{Qf;`78>7uIa+lhB-VC+@&Ej-zs)iKdH72p32F<7 z2r6dYRf*T?6a;<45$Vq|cFLFS{=Kkl$`nAz`R?oUE(qkj_kjODzc=7LW(a~G~ZoK&S;>EuoFaCpg@gK&Ee}s$2dh0*tqN|I4mJ6Bn z|K`8pqNj_0lnYt?|K=Zy7yo#?_$T7Uf5JsyZT{1E@t?(u|2$s&lUzJgn|~@^{L}H` zpNSX$1s6lL`7h(ee-$tO>v-|caq+F%{I^_;b@9)0@mv@GLcI7FOOnKgEmxC0_h(F22`W|608G*W<;%5ikB%E*5I@zr~CHJzo4D z@#5d);ty)`e{%6o7yoy>_=mZ8WUKifan-S_e~YVEM{4$eaYdbMuKsPVW;3pSj3D!4 zgp?m6fcz*R5?uT!*s%+Nj9utE+Wa52!*-#KwF~W)T?jzBYNO4!3+=gGXdCT9+bEFv zF~ZJ|+E2mGkJ>A{&=v`Ze$>v`g*L=4v>|q(6}1a(V_%K6dv@`!#0xFI-O;Msg;xDn zYOE!)3mpZ!&XvyqCr^GIFIP5})<14k%qT7W|i5B`t9S*w?m_VV5RvW>OT?l^cLa<>Mf*+m8p9C9rA=t1BfsKycPXZFV5Rlk~VBF5_TbwunU2N@WD?43A+$T*o8pCE(8*GA(Uemf{lgV5^UIoV8bp18+IYs zunXZQyAY84PHzcF&U7Il5f=GLKq4&ilYqqT2uS`~cLXGMAt12}fy57bB#^KRfrKu8 z)Civ$AnL0_LE=w3yU%sje$v65*p<-1FKnv?aWgqAl@i1a64Lz`Mt=Vuf|0li(Qye# z_wQZfexI8Mx`BQ`7L>Fx zqiLctIg~b9UmA81-J_?Q|LD%`FYL*Y9?g%imgwr%z4JHrbZ*uZJSWMW?)Lg>ATV_H z6$M%&v=;{JeeZ-n#|{4UAMoc?e~b}QAGl7iUU1!D{op!+uN>Fr*rsNE|MX6$Gt=kC zosPck)s5Xb<$l!ZO!(2PH@|Y1hg=%_Unxc7D`TZ#ob-zemC>c?E<5hB>n?llvhOZb zRw-Scb>+#go?Sdkxu-h9cGevex>3ad7fRKb%YJo(d1vfg^MP;0gJbcl@R90%+R#6R zeH10>NJ;+cy?DqX`>Cwq$y9if*~(lPLh=;BY80y@S^0~U3J(6`Y^>))Ge&y_8w*>h zxwWz=jK7Rq?Nv8mBB$`ELR)svPLpRB_Uv~u@qk7xXW)sgfIs^(M*3n2BfZ$y>Z968 zo;6;=TVK!|@zz(qL9pZtpKVn8we!Hq9MNRBc{)RgSdOjXrawPBo1f1ogZXqmn_pos zsfZx3_!9sShy#+Z2pw4X{@MJ+i}}m>kKf|!{(An?x9RuQvt>EBdYl#VSyGRU8cB1N zT~ZhucBj+7PfHrFUeBA~J)7_R_zV!Q(ov(i)2;CC^?!rnMbMMux#s;ZU1mY{$#gbv zj{5VRNk8|=>}~c56U;st*RGPTxCJ{H_Q~_*`(!*v;vTCrz~O%RbAXLLk@Mk9175>5 z@u=E(y9kI6;TOU%_Z%4@1~hq2cNOm+Hc7aCqDBPaf}{>kYVXvTm@vZs8&0!<%gJFT zh}epLgsV#mvJ8&}ot0)edsndp13J2j6$K_a{x~4l?d+Ie7YFMqH@J)$A11c7X8R<8 z^-xe69Lxx<1vyu5WqxjeX_$X^Z!`1oX7h5-;*%4e$TPebJ;Ti#X^8}Q+Ab5nraT2g zTGGZC_d~(FYzg@FsJC@<6ag64v%#JX5iJ4 z-JHtd%+ISOe&Gp#1J+$xr_F9wOjPV~W#1GgZxVJqNTf{Ho{=z_plTMPY?DLYfjZ=c zCqfXQWDXEGCpeGl%wIaD&Mlevg+2CP?FKLF{8w5|f#h=XcE197;lJEl^`#tMS9~iE z{Ls}|fk|qo#sJkYz|Sqng2DnN>QtYgKBhcTSZ>z+h7$#{IW9T@1p%Jx^_IkSkgOpg z*xYeol@y`my?fzpd>5lic+Ci@W{5ob`=40XOY!#j;98FG7OF1YxPP*<9791!14_f;v-lMs~6=`n}_9KiLr~KNp%kF zp~|S#R{%cbK^56t#r=d{aexm!kK!=Y@iG>WMUMb~2lR>{iah!PLuI=|J*+>!u%&;M zGkAXMNM9OkV@Od1V6e}#$VghKnugO9S3(Dt5SFZR08C6><*1tPn5h6JdRSk$b!=J6 znKys-=8r3Od}+)CxM4zY0W_-QUT|g26o3%my@D^8&YeszxPmRR)r5VMpFadzU)UaO zZN;S(CbnXXv&sSnb;OVHz%3!n8;a2~Mj`^GL4J*GA`_f=vg65yJ`crZ2LU`QqY_h* zNUHz^JVCBew?b*M(xp*}noKhsz*YpKfnmb_TGU)$@JI#+$=;V(0!6bTX=ylK0_l;* z%fbvycv)Ol;$@ABcv*v0cv*NV#RIY+5eRD*_vKM^Y|Xokf>cs?6+K7OSBX1p?vvEL zwfG`)WzD^aHqZijPD-~Ic{kdH_n9m0!keTp06>y#pN2!OP@K`2%brD$?If23WIK5p zTxbi~NJU=ptuOHqh4zC!@+6`sp>PnE?~Sbad^hte_*R6`1h54& zaLE_hup@Q>zeEREU(1Cr+3Vpdjjf8OLe>@mghjg^=$;v;n>U*kV&LFO-54m-JahV9 zO3#hez=l25xcUgyCj#C(Wqde%lA`G~7@jgH9Hs2AIu+mrQ48hee41H_TllUvLieYvjOt%;{>rjBce!7X>M7`CfWGfS%4DD4U#7nZZ$^B4tQZi*mNpMJ}tmJ zdY4Ip1V~d5*g~Y#a<^z9lx|%l=j7GW1AKjm-4z=mR8`o<stWf+y&pFQ4gpl+Nkt5}7MwTmo7Sow7I;tF>*YiW`tXT%?zc@zjtNFW@; zI4ELVfUA}DdSKUx(PEpS?`G{YORD1OSFwT1NmcD1LG;hs#4^}*Nr5WNk>85EY6feo zaM8oLhb_u-aKTmbEfoWKih(mmc-a;{tE zt^F6r(CLbl8S|pN^S~oY?Fdv{+=YO=q-+B2Iazh-_gQ zV{EXL!$@74xN(ROi=uuHs@@WEJnT)msBp#(T0MI74m{TYr|w>DL`Vxc`}zs94)KW) z7AqQ!a252ckVS# zu1F>^_XuzE2sPt9+c$RmM7RIE9P7uI8(;F{i=Br`^W}n8a_ub2z05{m z3==asOsNdo)U1y_4wxEc9f7Ij_?0|JsLQ!cB2c~u#(}L_vsjca>)n(f6Sh_49V4M; z0iumf%=h`KH5?g5xgv44FB;s1l}oHbIqA3^2P^HNj=*TZJ^~qSRAuV;NtR#Jt9m=b zz20ZtnsgupM%YzsLjz`46g9yr8}hPnl?AvgT;*MbyB4nUuIOk1D_g`hAuBfk&Npaf z+3N~fc~_yR1+BcR4N=g_2G{&XHzYacs%WL}EX8hxXrBx{*Z1~-0)N#FEB~n=>Yql& zHOJ%Sp5t*QHmCS3@_5Ocl$%Q)C#+xcH1K%IqatTre3fw4$*UY^oqwKiyZILhvzxr| zjAQa7GLFf^$T%hsBjcDn^o(Qr#AJ$v9(5RAg@<`IKgnV#n_qapyy5yXX*q0u@>#}U zC(r(tFxbiC9HWaEEw~hf_2JRm6-M>9+AFs!9oAl3^uLz}O=19kcd&cU)C=FU{tgd* zYk$vH;8M4^W#i6P=wVPt97;M|`bBU3>U8n?e!!L2VO9QM-=&)|FM02)B2FF`%CcZ2eoPW5JHj=Ox*X}y}2%nS}Z+1dfp99{jELF zVSi}g>CdUv%?$|V5E6N3~F3`ReR4{oNZu23(iXj zKD6vPpZ%9OmH02MT6Yh=Yrkw?wBEK} zwj~63K5G41`{v+>Krr7`h5f*f%ikc3OwJCAwe$^hX##OJK46O{u*M;h@AzyMJl5-y} zj9?%cLMl<(`P_|u2(Oov9tek!L?(sn)L5FxOV^(EAe{{e({RtqFg>tLJhsr(VdGs~ zkXWxIfw29L7Y4Lj+-^b<+nsm!QHd|o4bh_uvz)-jp3A?9zbZLqOBVw+SeoF^a>sJMY2hayt))AwDZ>O5Y9YM8BUj zaOGn^fg2eD8pEWMY6~+_q6|!uj+(B{GPv~JGBifE$Zdjul$qNN5V~J2tuXWSlU3N( zL{{NEgBW&NNmYvB$QlBWwk=yhiL_;_En>-b6%0o#*(&(z$XlOEt!$vo{*Z#+0>m5w zP2R6sL1%{09JyMylqj^gJ^?;|Fd6m)rk{{6k@dxp%H$SyN&&}x>Os1MRG5)Jz4BS| zaeCGxt+mRMxG?=z^UiMFhf~)?U|MVwqYw=vTXtiHw(M3#Sa<8}yLO2yluX>f8Tjg5 z2knMe?6TB-$1p-dHgLVfC(dj2nj_LU$oIhCdvajYBTN_iES*jtiD5TGmXPhC8Set&TELp0ECEs+rnTk%h~}d zl={oo8}%C~jhdebXQMbUgxpbU=m6^!X$9bSVtTfRuQwDE)ewL2QF9L+M7&o!K-5!VqU%D z^2Ws~e01^n;OgGJ{^Nr;kBFvrUTN#|YW1Sasq~@JRxX>HS6#v}p4X1CCO@^S6{1v@ zWwqMxR!H%o_Rdo1YUS%oD{XW0jiosEDRhl_s6HXZ2VaV=F%MPTm4c0tu(XlWY7$@6 zt`HAR%4hho9@{jgv)0Y7(E{2xsUZ9a?Q_Zr`|O z#kXcPW-11ZTD>hcz(sm5xBvWsS?B>=eA^$njk}D&529r0P2UXO11ixwyLgN9<@V3A zxW|IN3&9RxpXPfHSjmHep_E$jr&Mg?-QbvmJD4_HfA{^fZ-4pryPsMcnA`O+UIWD$ z^~u&Ze}DesSsPLg8x#Yxb@3BgvU@?s4H(YK4O1Yg^_bb?m^Rs^GK2Qn-IK$_on3#*n-Y%P6WxnBX?bPMOS z%Gc#`=g3C-8Vvs%KG3MIz3=jI*`FDmO(m~(wkp+did;8q^vm7KXE{r3-muNAnj6E5 zr+r8>pbF9%!Tu{HOPmgwISe5;c@t#N*)A6#OtXlc87k2hc8z|c-(`mm^n%Fz!PQ{$ zfgn2cPBOE{c04CRT3uxVLGfe<>pkNR96RN?K4&nrQP;UCvXEn=j!`!TUaoNWz7*Ws zyqRWDs%6!#&#S?N?G7^?Ix0PJgtp zxbUN}Y9gHXPL|CC_<{UP$P|$)WVP}(UoKU5K zB1QEw8@~W9(PKJ>qHXu@ZJu_i0%YN5pAZ>|w0c0_JBc*=K0E#_UEhqVUlwtR%Our) zv92l*_>W=O>8MXc7Ob53A8+Syl(kdm+wX1XlTY8yHT$umX$-+QEpEqdxE9w^I}Ts~ z;;giiXT{C+-+nkl2RuLBs6o456b3Z1j^T7Vg^D+POJ4aIY!nQN-@n524ekB==uD^Z zN80@Vq|sBNggm9OgMY3ZULt&eAR>x(GDwH`6Amh++qRSm2tZR6AAr|B|KAeHXxg5i z&Mqpg&UR-T-}_eQl^p-M+^@91M((17CH^+*^9F{OO0m`H8!=hA-nrp{z1@G<*}^4t z-gwyTY?)nUE@9IW!qa!Ql-JQd6z06y0RRBnw9zeOYpGjD4H9+w?RlfqCuQ@f-r(oF z$;~DJ16C7d*0$<2Z?cLZo9BsG1=-Rm4-5#do=BE*6T9*t?S<_kKCnR(jM z+oHJA0kR$=LLTEeGN$wiTBY~_KLR-x2z(Ky!m&qQm4*j1X}sqL(8`R0H!7Ca$csyj ze~V2!?VGHJL#H@B{r}03^hWt}J}viijfn_l?;-5R1dR5-!a+&|irfTGW?DEkk!y&` zg$st?8Jb)503xhU z*#ir71s2MvAOOrmc*Wr>;U_2R&zp8%{Y;Xhg<686KRoXl1$4C8g>bl!I1O*tN_#;~ z;`GR=j8b%aPMIE5&FinlEHaflX8q1JYK6r`U~uoCW<@?;mj|1(>SB~|wKi0>@c?5W4nlCJwM%Xo2)wQ8v(t(y9(0T7}fkpxAMQmKw@gMmPjgouH{z(M=v&-ecx zk(rQ6O<;9j5R7^7@NoBV_lW$z|F|m_%kg~nkN>tbddNC}P|M<`U?;rQY#qD5t z^PkV3KmX_R*?d&=r}NQzQY@d}t&5)~^TDWCJfDm&o-fw3)p%MwAI_(@^I0)l{WO~| zri01&Yq9v}=jA`1{Wneh*TvwXn3PRi7n55?^L$iXj%UTmVoq%J_-{6{oQ#LX=xp9t zECx@uFYHTA*029w!?BnT(gKvw2U+%YUnZ!DtkpK7n5SE1)I!AgXQ(}tKv!U{Gi9d@^Lmin;+x}KQ-{w;dF4jWy$e!tBDM+7xU?0 zHC|2wkX8Jj!_V8`&tyCrtO{?%J9ZtBIa_GE^-q&32E*&8X7vLwt{!iT`Q=lUQ$Ky} zsm@9mRy?`4Qk}_Q`Q#F(qT^-v;&U`-G- zjMl?#n}?i^wj8{QcDC933FwPrI=|a?9DVldG047s1!2rVu{s-EZ8`p%;_=B{lZL*6 zNH4~-ZCjoei>oIm3Pt?;4f*%<^#4h0_Wyl;u^vxGbY|-sALQzHRC8 za;M_`)%;!YBPhmQmZ?9GG<38*6B_}T@zXL`ZhknwecX)*YlFA9 z;6JH{@$xlTutH#cYJGpeu;ykFAIGcf`FfQ^%<1xcWcHzGf{6X3OM_=0|U`P#Qni)ux$+^@5y?( zEw+!BXNV`Gt>mx_F5%<(Y_Qmt@b$+_uxK@xAhhi~5>wlycw@O7U(G%YCdl|t9IDbx z#0Wc2?vgxhZQPyU1XW9dTx&4dmIH+VDCuHb)cWUmImq;RyEDlT_C45EuG6-iKi3X! zZi@-)S+N`rp2mXzLPmJ*gYQpq{P~H5pFS@iezJt|(=F#-&cHg+MgEoxK3=w`w@;I5 zb+&-^aeU9G#uVS?{Fd-#IG7fb7F%V@vGuoSIV!pny;{OBw>#x$WCs^Q655vK2itu8 z_lJP*Ww_9kYzdn2^01g)ZO_4_i#cD7x88E&<@QpXX#b96M)FFzv9_FYe>g!?WOB2e zDD{Iq&B~WuZ@Z^WP>_MPBPI!BF6WDFWRxEa6QH8UI=hx2I9`pd8r$|b20E+MrN8QxwdRDQ>@EH zQ5@`aGURY;W$sgGlY5X%(pk2@thYaW7Aovryfq!|6}!ozLkX^L23xm(KAx?9-${;v zd^IK$NaWUiBIJdcL*x z#teKr-kl-fD!ZS@#<0wm#D(3|3d_Nz^oH9aov`M#*jm$UaJ3&+C_mRvnmjT9)W>Vo zfV*geR`cWa^kREmlc~lwqRPggCWFP+(JLlTDv|zcJ-Zs*J}>TMJYI3!FILYnCGIq#`EqYM0h^@w6iF2aSwp*TrJ|wAT9v z)oXS&nho<5WH?dXVLZ5>FK&v(Psxh% z)9qw^#ZIWXB|O#6?e)BvjUS%hF2;Aymn+nm!{;gOsj6xBS!uH^t_}wi&XR+xB92j< zZgRp?z3KclydJF5!KgZh)e@g<JKRJx%4(K=3};dh?DT>ZjwY>uu$W;q`j9t-{`N z(o-v$$IK#ZJ!qKZld{St#ovmfa3;TH!+uUG%M^WT0{?}KKf6Tn^|&6)>{9e)A(mg^ zb;O@)Cj%n5%~Pev%lS{gzWU>*7tfcA;d5Lio-{pd*4PRlH7}Zr<~RQ;*<`@$VmStlxy?a^_X-N=lQ2PP8-?MZ)fRB+g6dooh=5fNild* za>yN(wf2iivAxx@thU4HvaGX%CabKogVF{0Wq7j_5L{z70JzEylXv+YChqb(Oj_r- z&T==eB2E~mgZmxaEJBC9qh1Nq@X=s-Q#?roGD;5Ti{kBa7mGL(*-6baO}4e2kc7qC z*5aQ@(XxKz|n0Fr84s*{{c9?(c zKAR2pi(*^f*#0uv0UD#NH%G3r!+gv|d-LhmiX>Y!nvXjW20*r>-pPH0GIMKXilBUk zbhcB4&d#1~GE%%AOt!b`$LjB{)D3r`T`UzMiXXsgH^ncPD;TW-hqG<>SgNz-u%MLN+a)x6cJB5SXnlw2 za+cWYu1Myz8qTh(P_MHCt-D3zvh^7~RK`2k*pXms<88kZ)n?tg&h-{2pZZeRUbQ9K z^@sK{Y_fto7_78-?q!FS^J47e(^zxk-^pBs58;HP_D*$H^WEzt*fs3s^R$vRFOkf| zyBzzVIg@R@<|GR2DpzYULHQl4;k(P(;_3TTdDhEov}@h zJ=}7atmYI(r?F-6Fgnc_-TNo?_j$V2Hr&PDC~M%h9^APn0rq4)nKZTrmuj5Pz^rYj zk8NvjZO0*j%1Mv_VCspb-b;9FHJUhiPjOJq>~t2Mu8)rH25X0OPdY2&8qr4 z)m`9iWRHrSYK@n-5)^~u>{Qd#0o(IVl~Anf0*$HBP8H>nvQq^espFurQ?=Fne*}+R z(ers0ps%j5^694awtLPXZ0uZ3+ivGtv-#F)l6+_74PN7|>#dC^;oZ6Q%~|7~_0(I_ zLQTB4n{S=H1h-ue1J=i&-D_-p4DJiRcD!j)tFnDRrITc1o5wD)TwT`MN#kk%gk9Bf zu5?;lwI8-;>2mtq>B6$iEn7D)1dyF^+X|rk_Q#26e8&pi1%k_Nnxft={vTkYe6fq8 z^<*`^-P+?OS8FVX#f%&3TYHP+n6y~7ck_4cyHXD)zz|EH+MJvIDtEXw?pULGF=H^f zy?)XiWV63}q~DXRydr;8uNl4;|Fc2kBK&VRFyrbwhk$>({zb96FP`=t-kd+nl;0^S za54G!*KB-?0SQU!Nw)IC{-=ZC|GbHZ?QZb>co5^+|FDGxR;4jdg8bX-m>cLk>8<<2 zS>z_pXL#ZK`zx~KYH8!&ufAUV`{?wvIQPTJ51!V{{jl!r>1SwuSQq!?tsDS;+`!=B zf7SpuuC{si-qeKfAd?tk)i&~ zzsHk8tyO(1qv{0(-l}*|^%b{N`L}ncYsLhY%LVGVlo?u5RqcN`Z})q>(|)UaeAfQ+ ztluY9XJBP=G~(b`K#ocfsZE|WQ!Xtc2)Y2#Jw3vt|J8t(p5JMt_rHP6d@;tudoT%z zQt_I<;(_LnObA{SoN4pV{z~(J45(;xl zX=jPh?B)1sZHGak_xRDL9HXbSVs_jk?;F2DJK>T1<13+Le&cON3eBo5Rpeaci=BwB zMCB&Nzg4>NMsVtMx}6g7!Wu()(vBLp2}-N^fZTZQuSzcC-{>`WQ^) zRr%OK(WmRQ>;k<>NXEpM=n0I4Ww$&MqC}vhHuV&rQmy6pzCy7PX|v+Ko-bfBCVt&* zRPvTa*S0?&`lTRJM^$jY-8?@asl8atW6P`Q&TN0K6_6>Ef2cRwlfuso`LuNmIU$*Q zJ6Cug&SxpJp438>$u1(vPmJ)~m$o!fDMp>zos2qdB@FJy)NZm~i+b|{^uM3hAPncBg_p7~F7CxKDbO6_3pxkuucUt zD_16%biV?6ZKj*iC{tz2b73}WUGpv$Ev#=xK`P_HF;cz=CAeP%;WXT1b&rE?MX6lb zt8G2Eh9&DHSdl@Gw-2dO0#=!k#$+J~q>BFa=tb~b6cFuUaTfH_ipDBc3rsAYizCpS z!L^)mg<9RX~Z#oCFcaqTw%d;j5P~ie^WQL#;xTQTknE*JQQ6njMcu_ zlqWqZ?pAdFCK$p!Bc0z6#NV=EF^48)w+mI}w?poBQtF&+3K;h3rtH_8s!iLu7wnyQXlN4%`l z7|K+B83&GDyFEX5~u_N<%vH9f)_GGk&UJ1 zPHG7U!f|V^YzxFK!{X?BFDT<1XKHP5@41yF*0ap9$sI2oIrA$<)Mqi3U{KZ5n$>2L!Mf)wf^)bVxM~j|I#4o@h#rmNTPt1`|Op6o?`cDhrfY z7|1jB(Z*y#QPN*ag$Z(fVu55J&Ko^B;APE;DPpF!3prLPUb4? z#^q2+c=`A9~306u~RTVHyubNcuvO;76myWK6LO|AqlD9 z|Is00jodev_Q}eN2T+pI0 zt>)!6`gl>x7t;g)Njp(6)<(ss70aoJZ3g^L&T9_A^~a;=UmDql79}1dQ??ui`rOba z9IU(?*yv3>;Z06?65_V$4-P|=svULW!W3ybt}|9bVdo@}&bL_@VWHx*>sOr1H=KJb zQweArRpLoS0)0^f{nu4fNkHS-<(z+@x8=qWb_SwLZmRRo!;YC-ix1+kE-IjC0!f{Z zXA3YTSgOusvPLI^n;CJ*?w!NK^P|pjyISLTaEj7H%7f|(U59u@U+e65*dw_IguL6j{@ zrpDHb@__B`%!<+wjD}sb4Jt;R$#e}B>Mum1f_ zzis|rztqof`gtMgr+M1g2Z;LwJI5c|r@eN+mee~vX!ig7q{ee@Er}7Xu)1p|*mU^i zf~E-$RDf8Vf!W;Xesq{6>DrrfaV0u~h#!ILrHC=n2wX4k6rDbbO+Ajk@Eap|c+^BE zQv-HfOa^X+z}giEm^{;p6Yj4;K`MY6{2ub>@@6NTFNt3Zv(%dV=f4nLsCCr%v;U!S zcrJjkw)~1iFTWTeV9GNAaW&sBFn6m9kCgwsA7~^=atkT2QS52PdT`w13ug?Kz7|Ga z4W?6JHx>i`3j}@nix$kHX@0Apc$obN#OCrgO}lvEM+V3e9_AyrL11LMgr5Zz(+)WG z8i-V;th0GQwu}xlh&NIU+A<}U1c-+ujqZU4Sye}Q_JNqz&waY9qWCI+4Mu}o6&;K| zBeWYl7ih4qSG*PJ4PB(t2H`i?;vS^DIuYX^Ypr6-|{Oi2ayc6#8>n5rZ?g6%{elr zYgcq61Ef0Pn@hxkK?$^cDU%G=BC~FSr@negaR6j46bTOaHv6eZ+r7Fe2$+wg)+!OgjoE zD~*E5;6gAYIziI;dekE9i2J2E!4L4MfYvQCKcdGO4i=+)riKaTjj_)olrn^PWYoZ& z{BN_UQp=)w4rxNoZ-$Y3A}3wYA|zZtU~gM%m-SCV3i5E$@PqgSvjaRqbb)a1(jH^l z9p`8~rChW;og_3jE4&~045ANE@J625CqX^qNgZhZ$H?dPgCewVD%s+|k;smso!Q-- z*CT@tp$U}#MAVJ|lyf|ZAViv?+U*)r)R69mzDY=R+an_{2T`?&WSz<`Fg?lsOO$I1 zYxKfyE#;!>92SRZbV^ITrq-L|iWF&xl|@bYpJ z%J(@(%uG%@)m=nN#J&eJR$^?Ke)9UHw^*{Ic;@jiKZVMxiRu7hq%yV5Pyi&ER2e0k zh}Y>Tp5N;yxWMH{Pec-gTlhjD!4T>pHMU=nAf>N;YIn{jaJ0B`s-l|HBWaSMOOC_lmWMjp|=}>9pfz5p% z8&bmwi%`T9)iy!bgYIN|G;s%lnB3qDppsYU`aLSzEO$vHiHK!zi68#~9K z7CHDP3G7q|Ngk=)Y9gr+LRH(h&dDn9C9tEW5uN|CCb>^vaIYtn{gp+c&oUbQmeF*I z@Qe_;?ka;Nz&myd&6l^t3E%m_HUjg@OR$W9;MJ);aG#R=c0FNj3q2E^g5Q*^zl=`_ z-O5SG<&S=(wzNteoeI(?EK;%1I*1{m%MGX^sQk&7@O%8m1wd;`Y%2K=Xx%pp2j6_RNR^>pmbp5R^X*l>C|sizQ`SgZ_uMQCaKg2j-mCd z>ebrV3%Qs&RhRpzD+>jq)MP{??4w69X+`Z-3(Hat+)R=5oRP!hS*q>BV(2MyEv-@3 z&7Eqx9a$aX+%x35Ms#8wJ&7tU#dtb&X1|4U47JK&)$LML)JHGo$8(16i^I*GuLCQ} zTbMRbgw^{rRD!2%ayC=K3}~8-hOEVQvzCmGr-NE?>akDwMeGVybp*aKr!$&mk&WE8 zY*K~&CCSqxRXbT5@3Ra_)pvdjNzoYxWAM5QmehnFY?`}TDe(}`~ox8f<*J8PVt@!waBW>>YbBBHT5 z@{qFp*49(flpkctJ~Ie-70DOz54E3HDx1gP7Jidb(R^84 z*$A(U2oe&3pQTypdlNkRtqOE=HiwjOEbPDdCc#mbEM*W z(nh%;S$~s6yC;paH~rK0LHo}WV$lqNq!fku=w&B!dGym|xOgZeN+MbFQ3@?P+vIYr zLmLU{?0&^^OP4U6qh1L2B3J<)p-ZWHWN)(fOgIF1DS!(3B8SoNL24mlrL-gqmC^ot z=aCasI4c3T%p$y+pX(N1@=*w?pxsE%X@^H0Po8u}0sTu@Vl~9&WMCnE3D}WkO$bHt zCA-u?q}AS6Lnj$-dPSYbt|cg_R-N&vb)l~I>M-< zM5szFzs!_*GY-TZILfh=^!-dPnj5s9342RIQd5gjifCu%ldCC5j<{4Rq#criaHGW_ zlMc*PHNq3^=Df7sa`bRK6H-`aubo?q2lxl+!9`lo9s$>>4Kt)NN$A{-7|th+S*Cb7h0N=@mE{<- z<`d8;&1I>9v^YYl1n4vm-@#FAQ6ZQ<`%30=fVtOS6~X-OF{p+u>Sg~@can+|o+Su` z3}P3>HBNWlf~dT(2R5sOy_)+$o*GpIfp5DCWlh;tG=+#-4d#}|g8%I1L!V-w%Gh{` zTr?ilN^{Ehd+~HvA#v51SOsuTcB&|9K@sC;cB8Wnhq0zpNb}L2W%xUS3L@Xx^RYUm zP`D{;4$Lxq3RB4fFI`ue6!s$FvSxrGRjrLXPn`USydj4XacLh-gt|b$iE0n&AT(Ks4*C?`MnT9QWrnts;6yBZPmPYC zYtd4vY|J?>G+3HOPR;v8Do9li;2a@2Nqb)$htno#zrU7y4HzqaUoP9ICK#~6m#jS5 zZ@}HaW^wd(9Pg93&?JQ-c96~gTek8#$%oU37czaPprnD}>Oc&vq9PHJuZCJQcT-Y6 zbmcVuTbfAqiC(~*+!kS}J3Qz4>{L#>DjgjY!sRvD-|63^bv`?jI&ePIIwUuX`K)mf z#x`s{NcGdRvM@!%Cp6PJ2s8#M+>gl_q*_rzaJ3MSU_9b}IU+%drNzsblqPgoKpIM@ z1WA`GrNEGigwsb(WT&r8^8>C!13v9g>hOrK77Jh7W&zfrDVJALuvK8@ni+7Z{VFY% z!-t=;J9w<7CC`?e_U7#9@RtfhkWkrw6>&*>s!Wg}sD@;0<9bYMA<~z@OLi+x-?dWZ zSynTIxh93j63wu!QEwnP)qpN5=?mS(@TMkm#p3zoN>gS4nM`Z)bgrfdC6jZCi6*3A z^qFN}DxBL&($G1C<*r5%ippFN_ax6y+yK(9&MYsOJ#Z|F9Tm<^f;0Jhi5_^A>OGH? zyimOmNJ2m|%Gq!CG>)%ideusUofVL9(tEZbnG8Mn|K|0Hkel9w$Xrng?-}pQL|4Yk zpifzaQd5A4_QXkAVt+APeUO&09JN5O4wWI)4_6O%Z5Bc?(3JQpfLi8^W1$sgJ*DBn zYDpyKZm=4MX}6Z-owb=%x=+O<1qB?~`K>;G=1BVJpu&(ev3N+k99=YYy|ux=Y5j@Q zTAVXrxNhYF2bS$~jCHIP?m169A!*sl?>A8>j6_tgbla?16CqgoX#MiQj`1D(vBQ73SMP;)D)5{jDvsLGBAb81YaS7=L17cwGT#Kn> zsnHI|$ruzW7Q~gT!g2R$OGq7E)0>=TlYQnG)q_8b+q+e&;LxCu5~>IS*P$Q|LtNOa zLoX2nWxpl0ZuR&YwIoA@kF$=(+4Lu8Vqv78TWVd;!ylGYSUsRsi=^~XN8&)gJHaJg z1&s|^FeamxO38^HjPff6M6PWjCBPvxtYDVxIV<5#OETuR^JT$F&(=lEIKY8qEcRkE z-=#u36R8b5r-u+smR#H||2HCIwI$f@rntGoKD<9AUjBA_Z}9ygBK`(?63 z@O1xCbk;|RBl>~C(G;H7xH5??A_%le5VfQj*qB`(Ey*P1eT<~HzEBxTBV+L^MLqY$ z2no4UR!oL8{PXz5@TxXlIt#pt;Kl}@Ap~ZrW;U{Lzv_ZV?1GrRU(XFjoh(x;UJx%) z8gX76kvsM0gJ3|HGr90^v_UPDQZJ-Cd^^F~b8rf;JC zA8kunS!<+=9^HR^KsoI;KyABh7PVa1_dYdhNwU70vB&s_MJZ0~!MMmTzfYmEKnrS9 z>)K6`TBn9i6MsOKN*8Mr2>8g6dt7GWHO)I*S4xbn;V&KuLNv7A{Aw<#327_U6oOa? zFyoPw^C?;XOfs(7v8H%PShJ-zgz&6i#@r~3iqD)||J~OuQ6md;3PM)VW#I8`(s%Hn zI>k0&M4IXRcd0?K&{gLgN(K%Ygc|BMppEA1z|M_-lU6nz>6Ge=J>k>FFCH!axQ`O< zFnbLy@S~Au0tusy1d(yU`Lt+gWVO(B<9 z3PzPOii*Wz^?*yY2oe;yg#76)&un+z&OiA5lmM`vGumtg$57WmpQJv`H|Cg+GFhbj<-*eZ;OD!EeMGc15~F zu85N1v#d@~9ZQvW60m%B1m3y)#;do~kr7KiMFcfie>T*8u=aR>B^j*#3@f=1;VKU& zbCpWZt&$7g4IY!ZP7AmZPq#HS- z2=TBI2>`qdS9Plj{fYOb-{0np>B&oUJj)RT)-t?@a7vqy^l}K)sQK`6L`t5&fVMZ(0oW$%eF*SHcH%YxO^ zLgo@0PrSiTK;5;|cY9OxFk{<+0+@Dn9^l4Ti!De3=b~kG#{e*7b2guJFMxlTyW=n? z-{20SDA!w)^*$>&YTAtQ(gKb9-gBrx{MAeKmslbs1L6Z&Qh% z#D^>iz2)x>fBXEM^4H_i!(pc$7{nc8_ zCVizIWpxl63@V<>yw23mL0lrs5>>Z4p5~^x0_nmsl~U9yqcmWmkesV4PxONGFfxn! zPQhqF!z@PKFas$fyA*}ASxdsJVHX_EW>@N0ZEyvVvKflHrze5}@a1n+=9htnboocB zIG=T~PPx2wUa7PpOzIMeOAjnmlf`Jl7Sr5VioD2<;BCF9Ft z_=p2k2Bz+qV43o%54WhhLL)g#E2m}mg3o8QGetFT?HMhY=MXc{*4MZa)+tAAlu$E6 z)nhJXd@L?{8ClrrI(W7H_Kc7)CG6XcP6=-LBkwveOu=eB)AfDNki~-`C2r1!vjB1t zO7jv>h-Iq_w8-!$b{Gzyv1BUF0#%E_ou|MK9;CdI8KL(Xlk3oJH zl#GaxQ>`HOjI>ITlR;!p{$72xyzk4Y(6>aTdR(q_iwsfab0s#x*RdI5Ljn+SU9mv^ z31rxhd$=hr5WyqSR=KbQgkUp8-yakRi(*fxM{e4|+I)Gw>@>|ubrU@8U=ZbbDYVdM z)yXuD^Ir?wo{etVFlxRuu+-8FB)kwfzb9!2tFt92K;(*fVOAya`;%vLxK5#~Gg0&b zR=1Jx=h5Mt)yg+-Qi*E>vs`>`q}KQ(N~K4aGObK+$joQ3N3Q?bXaK-dZ2%pLgE{Ye z04&odZNs?#R2f-eFu}3trqHoZ8$s6%)h$zl80-^MswlF-HlK;KkTU1&0hMs57tb?D zGn7|GVO1s{su_)`Sk9MssT#h$eyFhorFdZ!*c3Ffw~IiGyWm6z5{LCax$s-YOYR>V zpGk?3c90ULm39uQwBuhbZFQqWGfw zhM7d~bJa#*8tH#f)qG!{)Ew+y_)w{Cp@HwltG~&ZS7oqdrH6)6BK25UnK_FEikJa$ zZM^&?R`nE{Uppjte~4>#AQ1Jne=GlAQdXAi8gZD6vT2;95-(Pn4$r=w9ybmN(xe`s z&{CbY-?m$4?R|o;&ktX7_ub)>_VIq__<&T9R35yVD8d0p4Iz#WITId}a@HB|QluL| z?iO(@34pq7qk1#Ej_p#ZHIQq8p3X~*ZNeF~mZ=*^;z{*Hp>VB^Zz-uvEp0v1GbXf- zB*_=eE!YzS5j8qOw3`Qs*V5XL6DfJ|*h=nGA^KRij5>on_fVgFZk1J2{wx0e#ou@& zK^r*)_ubLHa1ztu%@`_LrA+5v>(OpKGDQNdN;2e*8;K)Mb23-!kP9iRLR*&7F4kP@ z^TH^hS;mff-^Ax%HxmM3H`C}=33SEDM(buhwH%W1(GsweRF_iD?&mpCSY!s46Ns0z zm{S!|8n0y{hWlkd^{2|C3z(q{8jA4f6mAB}LcC5w#_GW-Hj)I!5Ot#2_3ahcxQpYW2pI|` z2QEj^w&9xe%Mv;uawN@Xsm?6d2`od;NN1%ppTL;}ZyBGU6w#s82fB_{rXc^9dr5lw zE`m9d++<^%$~cd);vivJE!xAiCZ(5iNHSy91LrZl_s57d{%V|=tDs*&1~VWiP&TOW zY*;m;JG5vS5{`!-`zXbbJt>a7!mmCp5q9yUkSN7o^efsPj5#FST)Q7yZ`omhem^zc zPYBw-#4-(~Oe-z3M;R&cCl=vs1HmC=i8rpKw29W$KO~ETP=JxR-%}BM!rQDrT5vuT zwYG_+%23Z~YYRihSM1TkqL;T_f;-E@u_;PsqeV>J|bgI&ex!lxe%_*W5Y6>TJSR;;rVrEpG750ki>Hl;IaGc^i0skcWdJ|YzlFH|S3 z{%1|qfR5_Kq8IJAfK-1dC8~tPmgK*(M3O>A23*WVoxuJQn~H{d)>fM1RfV+YEnewp zusLrDcX?iHkFrj*7F3#kEIsmc*Dx4mIjRbJQ6b`KtW(1p8!;~)$ElB-nx*|Z<%U)> zyfHTy$=zyp7zvKTo1^Nk9BYL#6`y90loKh#)z%|vgOFC+y($ya(Q>6`;oK#%N{mbW z)|1OIoy|)mLYPN!peJ+$>2g%*N;l0TRz@l-m$XRmdpWp9vQI=Mywd=A!azqnNit=V zX`J4*byQrU^`TmIXbJ*b!`y6KZqB(Pr3347il2;RnaCk<$Kku?jco(6kFD6eaSLH< zOZP&-{6Ef^5*cm>;SM{P+z)Jq#1K=IZv%(HzKlkPQu;^^QS}&0J;j%jWZhTp`eKFO zDWUKva21}D>3Ig-SqBJ_i8tWJ1g1+~1KKp+^Qsh@0NiHOSbwDzT&}0$L76edSK-oW zsQxOTDnRP|qIzY#<0|9~ZsXL_m?UEk#Y@GpRtt**_@oeCz*AgiGy+NtZ}J)`PgZ=M z2~Vy@WdnOS4u_1F{=-0o7TWGIf=QB2hez#UrswAX5{hNy+7m{XWpir1zJ`G0o$iu^ zOL=MLsvesxlX$u`xh!X2?(&6_s&tuz_*~W`Tu)~md+Cvr5mEX=#1I`;@L@-R@^4;MLh)dTCdOOV2Kx9?9|eUlPz0X8fas zo&zY6g7xLdhFfDTZ8opCHc+!zD|8sdQwD0x*q4EIB-kMImarX%Cy;JPYIGO4EAh{Y zY{Q5B_cg}Z@Ai`iU1@V*-h^t4Dp}@hYDHVkxKJZwS9e=ips|wNnBR7>A3}@6^#<1 z&jiKk#GxbE0nDfMs=b5qk@7vBi%Mr;^ha#P)K)}j1mPBhw3pffQ(?+hkjy>YaZTRx z|GmNNaX+PbkGxVTE8-O3Y>l2uCwUdjqPz?Ki$n+Xjw2%v^VVJo4Cnny9>djStH~%P zcCT*HL2y714=eU$%{qXm@J6jleA%-X7@2!$l`XRErE7L4c_pOo5pXDEj#p+dP}qu) zRimiHD8<5W7u{0ziV4N*(GN}Vj*=oP%!iQqca5%5L2jSQnhd@^<}hA&PRrS>3MHV{ zVseB&l$diG3#G~o8seRsko#>JUe8iFo(AaVn*rA0_&q~=Xvfm|(xVgoia>t)WG!8l zm*_VI@Z0dKI|Dh*;D}5b*Hq${c2r~xCM;0zRUY$INTXF5xsl{C7651+R<~+)DkM(w zdk*|TfNj9>K`RielOnM=DWc7tf_n;6crOFhEx!1fB;W;OD3?B>2~vKqVq+w_bh43v zV1TYfZAX(*OgPQ-Wv>e6Wjsvt)|6g|yF|TLgpk`t@TM?{yC#Y3O*+&}_jHFZAsobn z$X%d--Z3+(XuZ8|$fh0>okmH?8+EMg-_@znD9&+eo?zu;lw4#>cO4Z-icsz&4MrM% zr^nm4-H)g~hu(XWjGGn?9e6=(O6TylM3MCtaI@`t1+x<1^A)hmBsZ-#YD{ zl#%^Tuh9%kP~^Vp?C-aa%Y340E%JDNx6|uTyi7Uj?l(j>Bmb!TL0S6^v*@k2`|a0_^Fu!weaD+oLIzSXB3`ASnTXoS|%$K;6N!?CKClQ0}WTOL{%!KZ0&C934T)k#% ze7wdzaFSdEW!BOADkc?!H75Xs5enyE0}La|xg;s3aO;u+*i4CcYH;Ir@ar5Sc@^y9 zfP%v>HI>nwp-AxFxYz%`NXh`Pg3U`i4fnC<1?9TQtCOGW+ zNP#15YXD#6&6x1yEfY%DV5LMS^)ivNQ3#P6i*Mx=tcp3UEU4jOd$#k7!aA@CwgiLR zDwL+pKRrPZZ`+i5ZA=u)8mYS;CoQ4Ke8 zT(1~Snq&90bI>`~B(V)tTQ-P`p2C=gDoA2Fg_zu#R&#~InW$Gbh3Ol%6mQIH;NFPB zJ?+B6>#e{iRZ}_LJ5g#GQ4XeGEYoE>q)eCf7@gQTDtIYePs|0xPR_7?+JY26Y7sf= zf&yyX`@#d!22l#lHAbIV0zS`yf2D@4!>lCG>+H#YpLTA#c%L_Eik2IX_qg3o&Zp@( zFvtF+EbDpV3>qW}Jq%vjPUGhp&a&C%f zxh}P+fTHN{d-8|yYyG6u!;$M=L!E;Zul@B+ik%ruK-}79?)&e`zvmbk>XB$)kKtyD zSq00ya$=M#!zp(>D{EH4GOsKR^(@1z;|Y;K~96%JS> zr4g#zD5n!>ZFp=u+T;9~KpUngYFpRRdA(n6L7A^C>Ee7F1X-TlSE2EYo?mF&nCfM| zm*aT>oe777Ws?kycyh;n1J;lOat1skO>kPK6TB|yJ#F%~*+qX1*M>KSMoaA4f;TB zP^FX|ao;aXRe@=03JYJ7i-Bxi_N`*^fC#UoX;z+zYD5z$l*gK+Y;7IwNapNGVg zv-(US=1z)?r&6Vi*=!3v*+SSvpc+z$DfK7SA|A$aSBE{M2fm;%O(78&}o zQ9$u;3uJkohILAcMdAc)Ur3)5LVx8X@lB`grvmY?omS6oyhXnGonp#J8>6~rn6*#w zC5ZHRW~$&PvohGT04OM=@2^Hj*nnwciQU_X_pSX))ehgI88lKIe{nzHNF(g8#+bH{hUA8x;K^tk_0`f zL9}uef@Sg1a;5h9r?&Z*3lS^}E&aYn&WTu+xfrSi8dVGI$4x=ln4WOBfhAF1xQ2!J zbQR)-`SO@3T#6kEd?SDXgJU4|gw0E7B8EA}Cy5Y;;@Bgl6$LKxox(Ls|2qi}*Xj+( zLUDYvsPu=2*g7FO=-gveZsB7IuAos-XHyPM`SQs1dgkjaSV^rFCENeQ@rTdimIH~W zRJ$8e+buQ*>=kuEjuWKB1zpJQjW4+7Z(gwMbbH}ROJ0B=^A?$^(mNQ;CZW!<`RH?W z0w7O$$YYnfSg^RT_?i1yU)CsUN%^u!_alOLYQVggwQ;X3C zzmjL7dU`vb+#`RpjST!r=8|W`tocmfD4N2{hcw=&tmP1V2uDQLAqtZudANzgTAEz* z(^;Do9V*+c!{W{=t#+%APhRU?uYV?;sq^^A`hNQ(-!7{X0e6$Z+?4BLQ%!4*(}R7Q zb8|YoQT7bUjpZB_dLyf>qg^sd{pzd|#{v@n;LnP50YShyc=1cW*^=|0I&Qt$hbkv9 zw(*L_7a>70-6!`K*LbbEoWx=GpbTTiRr}&Z?*_Ba;{=X(jpMhvB8U6n+fGjVhcdwq*n0M6{`q6^!k2Js7uRbhOfz1@r3RJOn zOPiDAQ#|Q=d;t*(9UDtCuKdnpt&)FZul|&MxsWN7CFMhtR2IhYFKB-an42UaEe)U# zRpcP)__CG<16EDPam18yFdAl3AsE zs&iOmgz-8s~i@IlL6l7>z&Qa4yj#gy>d+37t#PM5)!L zs>P%#E4ib_Low|t4>5%yohjt6$3b0El+XBRCX##FrJ{8yR9^~Bt8TRB9P zRkV|Qvq6Vq`34z`dcqmCsdfs+k zpi?FMw7TauF^`h;@lxP>`HG)|7r$5XNtU<-&b)H~vMG_$w3tG-yn#({ltDu^(N0mS zwFb9?VJN%T@ibACEQVt334+z$rG}VSwZm}%DzW>!Obw%4@t0zwoP#;!q^pkaPZL{+ zQ{yQrTJDz$h`qb3S}c?XX-mpwI#?Sn<_H*##Z^o9M=-|bgJ_hmpIu&xPkzbFmO-Fl zZ)<{vK*aK$Qrr|Hg5MBbIg!cRs@8eIbO*W^Cyn z?CXKLGRbThSj&adj3Bjk?!CJT$Gn%~`+W8H<>Kl>1cqQ*J3=^ne!h=DM4dK7S!$D#t z$}J@m!YDBK>*LFbmu3RUWyl8_`27G z7ubkUp1KOzStr`@3vPHcvqMG1$y|AoC6%!WmKZsGu@DM{xda*_XpjzN#4G*AU*r+Y zl$`6ME?5jQ)F$zWPF#^{Nku_ztWHt&m6+YQD2m^HF-gJFsSmc=Eu<1*yjk1=Os2c& zW;;$!QX5MPp{0rf-vZgU$${DNd_pIE2u^AmnJ&V$M82~NbQ`h3=$r$zoi}`dkUq@L zbMoE%^Ph`{-qEeCW}7xH<^1AWIl_PD zl2H)(Be27oA;~|UQO*`(D1)rE~SzskUNwh0(N8A5Wp2oL4DHc6FP!Xsw%tf^!;$Cc7J6@zEJ+EefQ2IVp>#dcjCo0wLwW#X{=Jl9v>8iMz(t@V4AR+`z}&ZiibcZ)MMPH zkaHFdNyD8fjKX0HQ7AuBVIq_x^YqMzE=y25W0 zxlhIzYJ&&s!5ni?rS#{Q{Uw)p`fF!4{VcZB-HyX>0`n}O`ZMnHoD>rUHRQ*Q7 zn5e0V7HSfLze1{OWB)`oCaPiU=Tz%4RhLus=8w)!Rd}jC{0-5m;5SvvGqpTZ%Qk)c z(uz$yGY!%&kU=d z1QOJI0$QoPmEf{cdn>^u^t2lNN)4=BO|x99+FFIz>SHZru;aj;TDj8*?ltgxg&qX< zM`b)J`c)ZUmG)HwlGvdh5XRHKb4W61id#5OmTFEk>+t96%J{Zdiov=>AiZ;$;M)_O z|2CBdP=Z-~#Nn^3ncfVtTZixS@Zd|aaEL4SNC`Z)XYysk=0VUGFLXVe=#JB6iH0)L zAJ;DQb$CJ}?m?m9;9j>PIH{&XQVy1Reh@T11CN_SE~X~Ovo&fL{kO@9EBzL?%4?_( zL%#DHcj^Zhi}kH~61k4X;sOpy<)~}AzwgpeW}si;=t+eP)p{C><|x^CPO^A^SLi@% z7GBOdySfJCn=Lt+ax^FPiSA1ileTF*UoTTCDICC&`~^+%)@TR!yGFbPoWb1h5A+Zn z<>N7^?1?78C;XBHmsM3KJOg>gs|tKW+{A^YCN&n_J#zkulIX|iUdTYYzXB9N%Bpr8 zZl#36tF~-UawsSNSdno;&2kyib;&fS@$$PRpeK-uMbc2h#GzrEX_W{iRjqR zXs+~Bf`*ro_|v$sF`Ij@d7GT-Qsq==!~^iQ%IHxBJr6{h9ann zOEcvH=d+s`^Go$f0_iEN731Q!xwr>U&ky~E zyIF)ujH_UHa_}K%s=9*Tb}c62AJ&Cj`hG)@t4m&^6ut^TmoqG>w`iYLG2f}HvVj*^ zhIS&}ve%J_XX`vT!n*aTihSoJPMb#6>H!2t*$Uzfyyvag27%(RC_kED@5Yh#aiGVA zt?~JY{iuv9{am=nH0z7+2NP|OmQp#d=>dWz&Kg2LbVG6fYEPN>`mt%)bh@kPjedIi zY3pY^({oq^KswnI34K=dOg~8-ac5lWOSB{rAfoCO@TTJjj*$d9D!i{BzgK*$(20JI z^b^+q_^PwOb*jYI`bjq$lz6WA8~rr(^Fcpf_483bU-a`%KY!}Sk0Jl1&|Cey*AGg! z#r&%!$4`o1dSuq(tNnR~PGWPqiLCi5Pxrj}XUTsLEmDATk9|a{!RmL;%_h9bAJrIl z&V~A#fB5246EC1MUMo-<4qrB^rfaT!RcYyGPe1qiY3S!cKVALwB}nvLSG24zX{Rp? z?n_edYsvc(-TIPteDLW@V(Dx5nfsOwX(YtDCM?$k-L44xq5A6Sr>&pQ?pjZ`qy0(W z`~!k1aAk0k!EAB-5DsA7aP#xcTMC;p8h{Szq1BTbW?%UVZQHQ)v z@A$+3wqt`NeawXVFn)b;g^<^-8eP0Wnzl58Dw|ZFB0QO_F|DZQe)>vWOC#v%r>&pQ z`Z?3jzJ8ANbE2O^{T%7%R6nul^R2OSCB4y4)0ubLpxEDaF!-R9ulo6@pD+4(r=LId z6LyNkg^zn>O2u#_b^&{f-R3|f_!@{g7!?lG&R_Zgyqy^ae1dNkf3KfU`Y}pj2MB>u z7~tiJH!`$j@w)7s2X@Et5{Z@1cnKsCE_iR)wLl(^bfS(rYMvo&X7RbU!ggOd7M4%G zif-0EU!v+hiNtqr$7?$_9T<_lkWQ3z zte->ul=mA)xrrkszt+#Ge$MstMn6scKsWJHMdvS!b%Ym)>d}U&L{9SS#2b;SxbrrP ze^3`+_483b@AUJheh&1*nM`-=yehCXr||X}ck8}SAI!#JJA`Ai;5W&Csaam>)T7gl zT;nx2Dz$&#D)YU5KIsQGjlMq^4U#F_!89v_4N`li(Md9;v~7vp_2DX%&C1w{x$zh; z$M9UGfN1>}n1XLt0-*3_fYo#}z6m1NrGxl3sv05^4c5Ad5ArqKo(h)%y`BF}GKS@H zXd`anr4tnDP$?w(IIty`n zx0r2Lrn*$n8AW&98w3w&C%BOYql+)19gMPaD>FLKy8y3H|;Sa@1?J<}`Yjk9nU53DPhEE6G{(t(hWdp(SYo&K)d=W@PPSDAituvT*b5##W-Rt+sPH1HeN!Zo zT5QbPw-}N&APNTXQqngCnMJj@m!TMm_u{g30>a71Pi69DSX%Sh`Ry?fJd1|{xMDOe zKRr)t-?Wc5N~Cf%=9(t|FVJozNpoQp`5k;eiGGRMPbT>my1~eO8;Da*q6v0@QgjHe zr4H}435M5UzFx~YS>17n?C>~S7~P@h4kjlPcn2bJ`pl9@J=g5xFy@?8YBrCX>X^Gl zgT1*tf8|o@qv|6~eAOvfnPtnJjO5iy=oJTI%Ql+wNJH;G6hPINSc( z%R-XE(t+B^LXiWjw-kEgo5Tu%HWW3uZc`UFN9OiP)lxh@W}!f(YSD|&=YFU@bd$7EkMdpX z>K(nMy^20aK(oICvusQz>D0)0B`v0Dl%{bh1C!uRi5%jpOsEhmcOu5Bx-xM~9k+p0 z0M=6Ll(z^$CYU#LYJPf~qyQ%LaeH{$p&gl8Sy z5gjJiEJ9LDr+jsn1Vt6k(b{+MPT1OZ`l^8A7F9fOBhXb)a|Y;-X7ET(jD{>d=}QKI zTjn*TAA)1LQN*brKFlUAZS5AT9@?St(gkP*aFf)+%5H>BQ5h*RIAj?vE5f28PBVP3f)G#tV)k#oGwg-^}Bz;ry4sf5RK{UjQm3*?ki)O96G4=GJSgG znyJMh4l6a+t@P}@vSSW21Ziq;w5vuJ*p=I>(xv}V+0;?oZR5yVyOzc$Y95n=TJ%f# zAq&Z62yF+A8kVXcr7#j{X!_Lzv<6K?f=0OHl$d#8R~cg>rL+e8^V7F!<_1QZt;1@C zG62n9v?{KiYjMWjgE0@Q&(*m^ZOy0@UnKBoHMT~Es3Y1WF~l-m$B#soKQFCjTHo@# zUuwW#Nf7Z+G5%>pX$9xviTOKhr=jl#{ZK_=03b`x|CW&xE6_+?UfX03o$wQSp*xW0 z+H07csts+}ULfTl>q=1PwkeNCimfd$d90*ZZuNOX9#af2YG34XW&@#%K;#_yT|1{Aa^8``V8K-+#)TJY77jA;^Ii(~ zvvgYznwk3I0Y?odeNIs^b+RZL%i(yOG8dw{o8=eFCJT6D4^owv7;@dct>Vshj_;7U z(d9lw{=%-O_)hAUQB)no=)#3>2>lj-oO@NU>cvF@DmxADEd9;Ulw&XX+7p_#G3L-AmGNQF| zRqt>PMO_c)GktONIKbhs$;d-!NS#nl+>%^X)6rDZ;d)Iclr_^!UW`)L2h+Qf>D|yE zKYj+#KM{w)p3S?HQODm6zks;RBFO9`fay*R302gR{=>d_@zgcq?2!vtF`)>BLQ9+? z9Nb#cu5!}%f8y>r8X1osIx_}A0gQoX^K{mx5S%dgMAcf1ymlU8E?4zMR*F!oESFo@ z$V!nIZOu5+JntOtGoXzJ5kZdllIv`oU+ap{2ksSU_z_b8h8njEmxazpA@GJDze`&9 z_jwp_#Ya{R;?&SGT*dTYxmtq`-^p*)%HoJY592*$h=-{iUnk=K|B)u!Z$vEr@t^-# zzHS^9&w7nUukoziXmRgW{~Fu<9yH!Ho^=|HPKy@aygj9A z=|IIls_BuE#`|w+`i~ZsX!Z5EvfqDr*3Fap+>E5NXAG`!{&j9OyjE*w8N!t@~APrasb$_VeBQ3zeD%R(t^WS%$t=+oq~)ke00- z%hA$6Ups{<424#cCeikT2G!_H6#>bd7>nKdEiH4bygHkD`5?$i0!~3R|xHnP1tutY>_TWKda&Yksj32g&21RJ5yHDQbi6->O zl9K{D#qUAm)8`f){@F2VQBrLMzO!PU9;8Af9XSc#>sr$5XGg&C z?dqUvo_PriSydYT8p!0~bV;~x{Yg&?Rx33^(T^Zx>(T?bjlKNE|2k^t+~cb?vut_z zS1qkX<4AO=wTSKHZ3GF>v^0k!=f!vjM)h|}0r$v!r)jj_x?5E_I3=&qIn?h}ki)aC zP#A<{Ri8%}8qKGHrt{Z8;21aAF4K174SP>yz_g1UC~7)oU6dA!{T8G+SP7M`*;5|s zz{L5ZD0t)jUn(0@7ENq@-Va0`yQL5G)%Yk#H3pubNcq7psf>{SPYt}s+(g6v!#m~E z^N4wKJbKnw>|l+Fw!5>o;4p{Q5~mdY#RnfHJ-DZmc^ynUvr|Fuu$7Tk>V zb5A6Gn8cA2MfuvlXmb0(DUF`YR(R2b2vX6bJaF+2yIBBu6sc;w4`TO@He28x;OJ0O zgL)C1WUQey4%Aq~<2f-LTW22h8r({F)&|z94yJz7Va(~hNk+ZDSq*8sK?C2LoPk81 zxpBl`oHt`DuM;)a^0i*=TLNel35*(}SdT`pLBBK6Xc;Q43~Oh2%(a4ExgarGo%Zd1 z(BgMcN5P6w9W^?~Z=g%RHd`-RX2iV!)G$`~h2VYghoYArABq;GLisVCx3hg zpCBhoqiP*KX*~=D^FUz=P5hNsD2Qz& ztxF&}y7-r7c6ja*hT75PJD_nm3>HTDF4w7C;arsA;38;@sYEB3?x|rUkiY&K43*Ie zY{oiQgA%cSEUq*Dkn!pMcVJLF%}1E(aP zeDEfGWYH1Seskxv#y&pM#DM{5^5NObw{U{DPVqtvY2iIA2q<*Tfnhc#*&S7V|JGrP zI_gKXiMp*n+OC0E@J^gKM}Vv%jHwWmFQeIKu<(FzPu2Cf2~y<-5^3>h0*@bDp-xzW{{qo(=n6DnBM3ZB z^2To(RcizhVpJbP#QJ18rSWcV2;Vg!Jze%r%!q9xFqy8mFO=4Pt;+k2AUGQ{W9uPV zTqA&c(wfDe8bgn6>90QMdyn9pGr>2b{u-n92!kQ8L*F&_CqZF8Mm?awJpTIG#PXA< zC z^nz`4`u!ZE?A8kdQvGmY7%IaMeSw%TU~#0@U*6F$EiKpo&g|*oU}X@$WAuU+Ac2X( zWIzLpmW|G4fjT&U2|AR)859aKVi14ZECheG3H}i8k+vzH`~Lvgk+VR`+B*GxL6#06 z0hkc)<75cXT7L;RiEq@A@W&HbNPwinqbH~ES%&~h)^-t{)#+~JYkO(^mw}Qw z;LL3}_xx*HF!2$v(fQq6@V%hhI`xSncgU7^hc6+Vzc;U4x3e@7N(^X!Hm&O*GBf+3 z!0zK|gTuCZ%xBtmqkEEA{E?{dN1cuvpH3J<=OIvO}1$0x+N!!!wnI8VQBUjKrar1-CNp>1XOj3m2azXbG!5)6hit<8$7l>I3FFdRF0^^4& z-esx5koUhC$emv`J=osQj&>oHFv)X-A4c2x-E@Gb03!3+T8<%vO_}Q^94<~baP5u@N-d?7@C=hOd@v?u$o&E?uIYKCSMI(Hq;i@~6D==R}^bS42Q0*(HPl#VDn zC561dCBVIJbeNG+g71Ct8K5yNG?K0qK8^R!jh-~yUOg+tW&RQDV)xHIUTPamqlh&8C(V`C^ zNgpo~H25#JhUwGc1)E3Zz;5&{KE-htS4kgLy8TBh+VR4D zV)UqJpt~B8aru+sGekhq_6;_f;8WoT82iE9ysyv#VeGHKgHLsI7&qBb2aQW12Q9va z;A?mgd<{=f>p>t{=+CV?5A*%+Z#0h&!QP|bZ*N~eL+$qK+sEduQCuVfAz;O1`1cy- z%>s3OF8$I(D58t=BQ@@wX-YEN_nDni>wOd<`;bL#v;Y1`i`t069Q^SnFez61@7Ep? z7ZAXo%^GOBoA3o7YUWD9EMv4GZ#44l<|(3VkFtO?k*i633*OI{q$_5;|~a=@FZ z@gDsIdHb(IVErcN_hw7-)BJ7Yk>eff+Y)5eI zuC?lTjh7woPE~4OrnGfO()g!qAzPz6j(_4f&zlcX>#-wFG7!OK_1u%G`p3|g9%;~D zo3EnqOA{iHTdI)@@8zF?EW;bbFTsPmwlVyR^?4jPXkJofqdj{QT#)^Fw}0d52=c+m zXhY;48sXjYM}2f3J1pM8s~~XQkLiE`AU+Bj)8;F;6(`HdJ|s&hA5%Y{yb(k>lW|UX zXaWJ?o|=H>!#*Vjz(8QZQ1xFpVt!Mb89g-r!|Rpmc?nb3zo_|^sbHhKMcvSg$FP5^ z*OlN>Z{cI(V9~6PHu^~GkHk&4Ut5cBz@()#!##g5V9r_*8ES5S&E9%yvEm=kjV&X= z<6JOkPg)Tvv{U}N-6(9Be=K(F=@3Pt1ma0(I1&iEqKh`D ztVPI}%VIxR!}B=(z>Ldz~q%JKMkBfWs#;LFS;4gVbW0w#U|E zr8?rD7CBPGy?VpY&A(|_T2UGfDfF9$4bL9P_g%y1$)KVk|C~=d-wfIM(@9d8f77yo zFV#9N|I$iyXxcH2xJk2&IeZjGwO<9nD73V&K6-u0HY4MD|Cd;&Uqe4YS_73hzlGpD z3w7)mHM2C^mKu&!eQ2JNvE0%X3Q_n@SaW_c6tPJNVj{QNZrWz>IBNIUBZyinO->v0 z>K#Q6KA67bz97sMLU>y|51|FZLrVf{s!B_csj`pyIJ`$c{?^e{t)y*qf0Z75|KxeJ z;*r-z1%q$j+bF}wP}GlAE+ToL6dfKMLQ_f3qpWSgX_NDEr|}Y@*>gnINWu62^1mZf zP_$|Q1gWDfeau1QO(QV;bJ#v^1h0eZ5Pr`8kZmgtS8?tR6=(N9Jb=iySf8YocfWeJ z17MLre9-8^zJ}-&eii*~wPP&rfQO(ZsI>n2-OX*(VqrEqdGDS-V?v@G$hI{897KZc zv39Hj+GA5i&nE-NbTm;#v!|mt_63((S;^XgvuQaOQqZyaAo_m+V*cqULOl;sIze&FMI&&}5`hoMz60&tQ$SY2#u4$_JXR zl~N&I)YqkPbmRQ1Ca~`|-aYKYJZUn67BNzUT`hlU>PUm$*pqqXYP}$t|Lp`nw?4b< z5oA#F|8|D0hi07MyEIc`6#8dv;r5H>%+4_m>x<#0l_Kzr)w|@reKsjc)tHfAU0#9VIeNZ+2@gVbtu4m{2HdQO6~*E zAA(hm57Rj!VDj0v?{^GRmHGPQcwtyGUeg?j+3R;b!-a~0!T$N1dxg=V~JzK9m@4`rioJT^azz0}8k@JsN+ zaggY*YN>ttvtYb`^g^-L|Igl=H8-&|@4g?1H^L(}#JN(ph0zj12qBEQ^MvPl_NPC; z=Xt6%*oL*%yZ8Rb*%5~eqpq$YD>ExAr>Y+E#Co>l`$KQZHTsM40;9J0vDI~zXq@-e ziI;ru+|fz;*NEQphF1X;6tK+tN8@@Zy%+V{ymZfz6xY?+xC#x1G+@5O4b|hmU-iq} zUvydOqZKR_w7&D)ouks;HImqmsWxC6m0S#AhNu#HVn6Q5ERHLFXVt*<(D4O1V9@XL zW`vMd>tgY}AJ=CeJFDVX7@&N>d9jFAtXqscm+ZYPK0J#*7R}RF)s-hWxVDz@SlvuN zZWQ|({ueIRU`%rCKdAS6QcZ-V>b=BZ`_sGZx+Cil4_c3Hl43NCO(e9Ys)e*Ak<@;# zMtU=^{TEl#JzT>Wbek~sTrI|G^>)-7aa!!3t13m(eA%K>l{zE30*(`T>!t_O0y#{0 zSXE#!up$fSO_T)zy&HYFhvp+&k8Nq(?EnpdZf~AD_Fn-PZB9pX(ZD zXSD~;I=k8cd!ZpLlLsleHIIfCIXy4r2yHX&oXQl2_=hBX! zXk3H1ETu4EGGT^*%aSbfMlOl^m&YbRFZaZWy>r{?v|EgYOQ{4zey~&GWS;Yw9po91 zOb-L4dB+HrAzw;`*yE9|>vSc4)=ZF4B1XIo{beii3l;tbN_+Oay&@Oqs)&c)m){7$ zqquq*;dEEBnO>qDjjesd^TwTDy=@Qi4pK zvJxX}N)z+-I{Tz>ku{V^Xw#=FNKv2ckJQ!(bjP-SQoYY3VH$`hm8^YGod<}u-$_|n z2kJ01KCG%c!wb#x?ANyDa$Lo! z(wR3ifd`3&aF2c^Y`D(bPV4X&sT?r+U@6@`dY!(lPO>*7=jYITreGAa9AZH-qLT<7 z>PIOQJh0q%Jj`NdZv?eENPpP=0tHs?cPbEI_T*0kHcm47lIvZ7vE{RmJX9}AH7pg` z-6Exf{}>^NS@*##uy^pOBE=L4ss9SN2tvs6gOCHL8A&;4|HS3`eAwhGVr7&OelXYj z-cL1JtW1rk2+A@xnMyz3247u zAO6{sS!{O4qeInXb4fqrVS^BjAY&`zzrnHhS3~dgIM&x_!8M8r@eA)E6*rNZYL-QZ z`Kir7hUo@Ft+&2vYvg@@{v&VdPs<()yGUBiWkr2vIaifVW{O)|SflLOS2gk!F593o zJ(=_PsWn7+i;`qz?Ab6avv_W{+^r!*sk*hADZJ3?FY0~6*_&W`a8Siq?O=gwG!KAR zmVP!LEaLkZ#UmqC?~fy`7V?U9H-L8{YZoi4QLTRD%!aLUHaCB z6kTj|ZKrhi=8FsCVS7y3(-(jpv6lO-uei+NjpRZNE+sdRVh{n!qhXr36|yN3_B2Q zHjy~RyJdl8S1PVVdz4U-XnvxRj08~0&D!(guyG>tC1 zV7C&ytsOb*3~k%ej_%eG#PIn}ItMs1b8WG8f`!f1a9C+VZIZ&5s@2aPJp0k27ub%M z$c9AyYE3{IW_Y;|WzQO{%Eql96wvoZgt$DYaM5Tb&7x$>c#tLJtunKmsdB(4bUs92 z6JnzWAsR#JOgYF*({%jw9G+z(a}Rq(V_K7e1H=fOv$Z#x%3S-JbVY9juy*N}|12xo z2kjz9uj9@v+5k~Qs*EnA7e21D6+#9WAgiy~RQrwx4wV#xGLuar+S`VWI-D?BnAYf2 z2IZ7lOIr1*b>XhMJ**Gy8e6EBJ?P*}LcpeyfXxc+;r?jhtGbQu}cXmizg;S%0_0J<_p%hT`gPk63On@o< z-_@smqlY>Ik-dj`WM6tzE)-9X+Jf}*6=acR5ppGw;lXBHgRF5`gRGlrWWA|^tOtR7 zL^fV!)9di6`k4*T;`A8`#ma9{1^{amN!YXOXUjJ`4q|`yoIO|X;{B7PxHo6@EH~<3 z-;Mt4L?K4Kjdwy;9d->9jT(mo)<%?JaU_EKK*~LOrNUot$520BRco5Z12S$p zqD9JGzs1X|B;fRX>R@1~@Z+LrT~usD8dC;my%w24ZWv3;hU`c}LP>r-Li#pGQ?*6X znplfgtsUFOh%v=|*4LzEz5Ph8GF-J6jpYUDV5U0)q$cb66f+T^1en45KCr#}hzex- z&n}kb1kWQo(Gw-a3Kztl*_WF`X(VwWm!&iFE`so08v+8D))FP&(d$oH0EIH23!Or{ z&#VI>%fg}lT#Ommbkut2d?l)>DO*2S>&>jA?mM&j0M9H_KWNqw`^yewH#;RJ+CNeT z3_{@E0%9lX!HoJh>uo)>Fz!1$`|vNs9T+QV%loo40arqdKCy%}%gB4PKtdj9L8^2k zjS$hOI@jj?9!1c2$dkMxR?mmGrqFS<;BnwD+kD}2a$N8sCmBOfii z`;_ectk2pRNC-ytP#y|!iZ1uR2$`hB06`L~HI`PBC!i7Y0BEc>%^EkLU~#f#{d3hO zS${<~6mHcI|BwH*S~v5>KQ5Q0<|X8O*m;-4r1!>H=Z&{`77CKGClKVAlfxEJw-1bh z&S9|?1m@BgFN9?)V(61>nehXdUj}Dsfg+$_6rm)dGWelimX;0r*1n}FbviG7_s(ZR>^WOHql zX6~!cO2?DAP|pR-j4&)cPgU7}BG@23Wvz8%oc5sldTU|#D=`#?#fb4HiTDGf4$WiI z3pXV+e{1WdZ*uyIqU?Y3ZNbSa^uLmntTpUa3?fub!N82y&W_A4qeAvU_{ zSe+tN2cowB;OZ+TnAv5pXiIX_j zBqsH0e!iB_I8JJEy+j>YN$e2Ed9(}+g+=i~?^Ahs-WR9a%>DHyTtqYmtXQ>ttSl_R zO?cGVi=CgvS8OkM{Q=Cv1g-4u(MX9IjfIa}c1ULeq!E?)uWw)L*1}q{TzduC7=jF3 z;&fvh3(_DBh2`|2xX2%{O!c?bL!{{6q8H~8Y8?6%d_sF?OYWBfrSklhJW*FQ|EXjQG;rgw=l7rS`e>N{8FCMDPBxeym5@x+E_1LE2mz)tg^)ZJH zuc|Tak@*X2VJ>a7Z2FSM?fP({vySWmLox~ju&{vJlnkl=!ZZAbscTrKe)Gqv`vgJH zJ92Aw>Tu@l)JbxbL;w;L{vXL}Z5R!o8;e`17_IXvT2RM+VnSwa6-^gUVOCv9;V{3q zcF;yJppVvI0%q6riHe@!lX{)6!mH`EjddYd-0K=%b&1q3=^KBFIFGm>H3qn!#Sua{ zyK5P?gu~7iXky@}X9LgYScQh&FBunu*q)s^$07*-iN=$tA{n4L4(Hvto50n^ebFJt zMsJj(ei2o0xe$!UP$Xr|Q*R5yfhUavU?=Od7(w|&w3JL5=mSrJUW1Y~=Y_1ZwvtlQ zf@scSzK`;)+BpW}9b7>c;yiOYYcq{|tDI=c;NY<$pJMULlTe zr_O9BQBSM7NIXvGJk&%14PLx$Xn~9|%;=23oK~x7*-elt(_sw?U8rh;WwsN{2+a%0 zBVwOfGaMWabu8ts9dvJ%2-dhWyBlX`O*CAvH)%BF5=j^ZXI4)mDcjvl@tvd2FQ!Q1 z@+@>eMcEC9^4aIh?E4~Rb_v5CZPsYmyYeEDOrOm7xi|2A^0zzZN%M<8Wh;y1S-`)K zVphk;w1Ge-A7^{f!!;|7goVlKJ(8?b_@LMN%vv%r?cI1e(W7S*{h>J#d4qK?>aA&h zI-DNC%E9~kXgJLWI8(Hu-^5C;;^P#!pg+%;t&{Xm z0Era0nu;d9p|3fgWVcv2)~@9*uT({A|m0$+YzEt>$1FC z_^4H$ow#FK+D&DZyMt4kA&2MQpf9Vtf@vd6xrlf#Ops)*bX}e86Gr@ix0$Acq+s>! zU?!8wfZP>8g1P41^^2NBOLnixVezRqWLMG!`9{;EWnE23%YLQh|JMBF zqd_(46q*q3c!>)_RjdTA#>@VOmuOPIaIyjrtfQ!uPch$VhWLM|mH0FK#3-O*OZQhi zBm6c+O8OJR5@rzLZ@qTU#%mY#o|Z~md`9@PE&Wr%ukTtflp73qHtiH69%upaaz*1N zWYnD~3@_H8WSoi7$9*MC5e=Opv{!d)z&c`Otj-Ma+R}(8Z_5X4X2sjDDGc4mw4~&@ zbVL0XhRA~WU&GK#@%DdWX^=n<{)=O|k%w2ZdKIZ)BIR)EKNg5%V#uC&zA|pTGB)n~ zUnBJ3a@+`5aZ^HXUs^#U^j=vRMCX8Q^fbLPPQ<-TW=ID9zgQUyUK!Wq;6txrwy2#W z9X!!O>bJO?ffw-)$)zF&n@^TyT&L`v%yWRxNQ0w+t+#fMYTOm9#f`V>X#Lys26SHT zu_5FFuf}XbFJ@MbNL!0cq@`#$?0`b&m0mkJ&wwPl^Hzh(ulDb{vUu$yuGC#J!_M9~;K&iUeaIQoNe~29{4< zhlBpwiXk%_yw+(siMS-D`c&}lQ`Bw2T7NN7?N_Y7;W?6DQQE;bY!~=|j07=e??2*m z|K9aE6US3^i;5Him;dZ51M8tp^ib_07Pf=~N1PVch&VJIwuXu9SZ-w>!$XS|(Dc^Y zz%weDraz?uo|?`WjMmn{iwZY2y2hjja?+-I=(TQ1Ci~BT%Vz3}BcH?~KyP{^Oz+ED z6yE@^n4Q9|Xu^RZt3oT2qN_T-l1V$HaBVF!OAZ9iv&ge>D}fYtp=rl>|uJAIq+BOZc0LobktHj|qor4JBjO z>EI9Vy0Jos7G$N%e(Bhtb@8Fl|AnSlC;Xp1rEicsPfpJ+wGJvf#!(*A79{~8z!oEJ zT2amR7vNlLxouy&C6|*K4ky%oiIp`#C7|lpd#MBhN`GC}>fhRZ(+M@Z`S+L?;|-S7W*tpI{VZmFL_6tc7cUGW z{eyla6x@bD2ud8?_OPplV$wMdnP{TKed%jMe|$qlxs+mWTyPggDSQmhPIOxj)yJHD zxOP*mdR=%G70$l(l@gnxP#cE=r)xJ@QW^$Cu?y^&MK?U7103PJ+4OSSvY;dl37%c3 zidQsEIT8aWp?Nsk`80cW0AtcP)StG5Z1kO8q+Ma=P}z($FR3N zrxaXSu#o^|Y`Zd%9l&f~rv%rhSZgJIc&oJVkt)!{!}^b~Y*a74=qO{mF7id4AwyhW z`f+~gu|T7)r+x+)o1cNS0ECcJqrl+3vyCn;SRC_gt$X#gt*fqkM_!)+8#q;Y3Uvie z;nnQI5jRgw5Suf7(Oe6utSV*UGi_H8B=O%5Q0r8b*9DWTagRAH+@%F#`V%MfZ&X4Q zCKr(ztoCpzqa4I)xMjf@8qGdE7q5yHA$vcD4a9NK0-aja zS-xq{L6mTP(2E7cxZG;lDzS*`Z6H(lJFx11Jh+=tCXP zcG(2m&nGd!QA7*xJwr0cRsHFk2Tq<+Bx@rHBq^K^i3ob+SHLa0+VFj9zgUItBV?GZIrSoIbY?keVvwh8wevHhEV1#jl;x@8B@GI-gqV2C_$U2oIBgF$uezYHGC zB2oEX_AB98RfF~N<{-l#C^+$rwd(U|x^A66 z7KIwkIL+YC$~08o`h~Dj7uhh?k^FjIH1_c2g{n@Kd1jL`t;*NonE>Fi{rKCmaH&jK z2D@x!zvR4$iST3!D$U>irP3}MTWabjdJ(GVqqwuGh%^!K^~lZH6*vp z5>9WeEwp*7PLi?IyYxntIMy&Rl4fwvJu{2|jmWr}P${{1Ly)ZcCFYRAUkKDy^ zOZ#>H(ZE6g#>}`S7VN(m6Ekky(x%ZL#xy&6eTmnI|Bs2`17d$@=^^|_O~~^fx5S|P z7tmtnj$4ur^eXY$R!z`J#@&xi?H`*2VOY}iIEqqk)D z4p4>GdYLTMT$|M{o1DtCfhRK4W~DL+IY;_?U$*(F)&ZhZXqfl$oOFB-i7hO(&6XS> z?sT6)YgeUF_VB) zUg5D;J(djr=_sK9AY+}UpmR#dG~5|Ua)EszH!8Fket7-ujRt+zD zYtL+Es|$kou-l>fme0ta=R8gZC^ONd%8JU*F(8H}wGiEU$!1_!^{1==LekIQ90hBa z;q&P>*TJD%yd2XSi$ac%41=m=>?~gwgTAF zsm$SRiV8zanW76*ebKMR%W<@s=7k;6IxH(SjYAuOMOLKu0C5vmTFJ#3p?5GCYlbW+ zZ70DX@(WONCz^OseTwo z?n#-^D|!TuHq=u!(4;~ir@&Y%%AJZzcch>i!{cRu8&Q3|x~K~7%lgj_k^y4nOxBmi zwv`mY6tmS^*sPq_*cRN`fua(+Uh!pk(^RdnAUdI-ORj1=2}YTGDT+7@6}bXLE%Bt& zhR8g`UeUE9>Y+$94>j$6aEpvZSE^Zh`Ck~TFtPEh9^GwhNa&-I!j*CAxFiTIT;3=Q zs+!JbUPo|B;EXpV;lFIvr4RE#{!ES7ycGExB}#Bcgs|jP7Y5XSvv5syf|5F(8_KJG zmwp|!D=mw5nTX1yL4emfj7K8;lyng?t5Q)6TlP$%TOLd^B;8rRlUvGNX)c@E1RK1m zc@|q7dF3ht+Ns5iVlzd8I0I+iHZxU+*@oFx)dwfRg+k)k0;p6gxF{=LoLt ztEY=tJ2vZ|-Z=81YpRWSH7)hkwDG_4`}Exxh6Z~>Ukm`Mg~`NJo^8E3x6HMP9`h)o z2@OEtCj}vjSYtkoB|;JYs^_M8epmK6%@;SG{=?ZSaEm8pTt63IOMVG>*GztE)8LoO z42XXffk%qQxIwZu)Ii;a6?D$Gi3J%Z_9BZ5sSpok_froc{kb`_Q>GU_ctH2r$! z0=nSEILgqOQ`yd*tXA#`KR@=P_GKF{3r8=aOcpETE}h)xKQ>qf*(;t~K^}Zalw=%( zT~u=aE_%7^&4wgN%oN1_6Ds>>QMmnkF3PumPj_SqM0-uU)Gt0MZ!%;v=?%7k2jKV3 z$0_g{DX5nPov(m*T=YuSngXwgcK2Mc;@{I989dqxh*EzVJTzOqS($*h(5M^ks+4Qs zT(uUio5dc9!=BtT@EZE7xJW+No9@Wq(Oy85`qSW%wWBxZWdJk0mQvXx{W40%H1`!2 zj$0xVjN(B^ZM>(IVX{0`8bzS&B~RI;is|8T9<#g8R$zS@DDj_fKN{~wr3c`01qpV- zg_=$Fj2Bz#L+qgApMlZqx~Mpsa#_h`Zqw^J>{Qlgg9nXQ5E>dn0d-l*%C_U8viCGa zBG;s747}ytQjEB=rxmp)%QMa+SWGQ4Wa*J1DcjZDxyPw+ln@pJy*;TWpo<&F!@Z(? zs`o5`B1RJ3Q%g4~%R_iBI$D-QB+0wTnZ=@Rsk366HN9DoJnu~?`TO2XTm30Wcx6M7 zk}*S-7k-Rs`jv(9|NAl4Bc2Ox3Ibp8W0VSI$!Sslf60$gxb7y~%>Pw>jIsgU1@wjv z5j@kLi(;J=>9i1OFEO4i~sveYR8u55m#Iu$G_)Wf8LMA4*zo+j_6#%dfs zs_<-x*&Z|mhxaMWe2PT>Ev)!ASTDELqNUag@-*YB+hP`IQ;LWqcUt8+z1HTuy^xvv z3ff$!qbE|FH4Edv@yMc4A#Gn;Rq3BwQIVDjCFX2lcHK*$o^!gt>hA)i}0ODw4FVO^yQ{`Y!_DD*j=T z_=J zPa48St_Af>q99-GJU7#K@xxyt;%rKpDjGdt!RZcAFtr@zn)W7zN7oBH;d~ml=t?zX8l>HQt520;qnz z7UwiMtbjqcevazB6b~jr&Po(7(|w%YMgEw$BIV7hJ}kvKh~oG&{epqS}res$16_9I%Px7c}QDebK6{Q-R7Wzr>O3@I7GkS z=RZpT4nB%A%qorh_eDQ$M-&plEH)79p1QA*Kio za}*agNxGb0S9@wX{G}PLQpl_x`82b;3yC$U*sU>#!eU{M08uu%G0zq+w42BE5u}w~ z)nU5I&eGVvDxV1xqx7iH`|`;Z&EsWsJ6L=bM+E^MYXS3|311Us7X>Wrhd;CapxzDT zjCDw&tEc`CqC^l*WdFAjDUJRc%6R0A&wSMRzYRgDbK}gb`!ZZnVyWRQcN-G2%@!8Y zP(=ph^!+G@{X;h59jcJd!bph+u(yD-&2seBT;62zjCmm!&bGOfR%5-2vp;Pkg}+M_ z;8m>rsd;8tut;mM7^V%N4ZL&wz0OiVr}5 z6mj9-Q=^(19>4om&7}4O?W#Vtu*#Io{i5>}GfcfI z5xwymAxT1&OHxjubuqAt!^shf$F;^Fl_>n9nUm4-w{TUlcj;d9nzK^#Qe!D#!a=>? zDK!OrG1=6l8YM~CZF0ptL;sPIG^6kR4{hSV)Amfuzg5h}6e_Xj+!GW85|I?q%06tI z=Dx*t5mx5VT&EXzU*Rsx$)f!mj4*Vpf?1DkF#S*xlP%o!Cr8QJq_T()a=bCJp^!$E z!qGF~$l~TLO5#!u;D)Q!A}9XZ#lFcg$rs%gImVtXLeGL*SnFWAV{wUxIF4V8>skdg zC$5COLIyFUe?CUI1ooJL>l^}fCu;UEt!k+BHAnaq5?*^7A)b+7e}R0+@5A>MBS7 zU-60fZ4uwz(2CE;%u&4EVG@^wvdz|`VT$9d1aMW7It`IkQZk(wMzBnE#672aKb=5P zsN(V>*HxwX+4M6crHwkfFMWzP%Vy;A-=Ng^pApIdNo1LbXN@u`zX%wi!xVX5>C4o8 zrLS>$vET~n{=3eML-z=mq8iGK%-Oa!{3+OTl6Q5jL>SHdgL1mWb8B{ll{%M?Ue(+? zqBqGL9h51%DB3J8jN6JknKZb;X45qwLVRO?YQf|p*DdZ@qCcg?2~w8Cc-=N;mqsF3Nk& zu>cR;YEm{lBe@XYzoUBQi91pSRO&ns)jfuVk{` zH&>JOzPJ^li$AX-xXn5JFhhP%m*;q=%TW(Sk<^*}J>kHJHrF9BOJMjnpGTS0NrrRk zq&&h-w>ML3Y1hkVihW>`SLJdsqqxjmc#kkB*e~L(ENYA#6Vn9O+#|1w<}&s=t4?tn z7Y$}sd7+}=P`&hE9KX{i?lrw!UNYeJi%gck%1fs@vOvS)tJWL;Cbok9m$R(o)C#r6 zSCQI!&N)q&2Cx2E7P;n9wqE@VL0lov5$UE#=9;dYOR;BiT$Bd;}s~>bCDBf znW;W*e|iKroKgX%;3#RX>Z9cR%jvpggv9?|j&X*5;d3LRFfEQ>;XD5DK!g(*bPkUE zaryqtA&xxCJ=fX?1vhDmm==;bfY3pO=Z8_`?O$;kE`i zdfFBMdv_5AGgDLLqAF%f4fV^3<4F4mJcCNI1O4tKx5C`LV-hA%zvV%vD`s8UXimj! z(8l+cj>vA3EJBY(KiKo^%U}Dlnz)Yn(|s=9u09xld7Se{BMAFaLE+`0Y~`;rTG$K_=KV|9#+CJWcwv6hi_>~gj+NG|!b zX{Dwmvo?aY%u40C3BO%3Yg3=e%&%-c*jY9>Hnmq*d~Nt~m8<4vqYg&aZ%F^kT?Tm* zte?%O#vC^ns!LF`qz09EZd#T!gOY{QI3Cm}3|_V>6-17p=<1>Lyy)TfilSNyOIX%B zSCBS+NTA@WDDVFkLa%Y+D!_24OHV=0>BH7smeJ|95<(sxjM4MzsaZ#+u+W$}@2Pdx zPjf+mXq}fuVO|ZpN4uR?VkdE5p~1L#R%HIoo2H@osR5dcKLBO_dMjb;!TGlCj=#D# z(6_qJW(;m5K#?0>31z(-3wcW(j_S`wtBrauwMXlThq|AHQLoRpip04z^DUhh=3Dx2 zP?cTNa827b9@l@uLjE~ZL74kAh9H&rzBvsSMZ zz0$V;C=JguswZAl>!xT7L5Vv|LC{puaL-!3QX~kT)e;0*Jcs(mw8**gvoO)MnP_Rn zU(vd)%E>#A{zoQy*UnjiJ3g&D;k%iouPK#2Vve}ik_=1=qq$YEx!jVdnY`xJSi1UM z&K0?Z#Bx(lLp1gDdvgA0W&Y<$q~(ggWj(M!JFKqE)`MFw_|*kZ`@CELJQkrEvbYtB zo>n{=<%Ry6Dlz;~Cldrr(7r6WL~OPqI;18P(GjMM-o$bjB9I6AFY)3W)Gr*PnWyUX z%jxh=hADFR_q_%~MfgAOH7}3Lm_q1Tib|$!c~kt}7;{2I1a%oWMU9@S*Jb-J6e|#8 z%jsR|uN?9!sgkeZq9E5S!{`$vEoUgdC@z{HsPPZs9J7{B?m}#k~BGNwh}@6Uo_K%Bjc~85nsFr8fTg>OR+&#OCp9MbiP-#&gFJ` zYBVAJ#y_CSG5p)?%M;qZojJeQ_?lEZVV*WN?4&jX*Q;{AvP4-`a+=+SeR)!OF3Qfz zw&9sj69Ze73JYQy3Pe(q^dGS(X8ZWCdE%8hSlm|Kn`>VRzr(H4suX!wXeQ*mqI#G0 zpCz!PW>G1km!;U!u($@{1kJW6YMoQnsD>t2+4%Efa|u3qHs{|rJKIQCv$ic6whijC>$VWf9XfjDp*(m zceH4Lw~DFoBE@V^NdKKWT|#liP6+->*|eDuEu_(F=I0T z90y}t0&vgEErKn@W`Y^bCV3vyH4Bzg8^}Rhq$5qMn{S%}9?Ia7HrKJ{=dUkfjq@JBha5)RN*vKhz6Ri)o@6x=K1-JVl^M{$ZDROH}?1}%HOldORE`LiY!HbriVgb zgEI@sYeiBsp4AeD;_Gh&!|mNh5lyE%GQZw(36nf#>`~^5zY(QIzAFmv*{g~XtFf{G zeUixU+3#YGeeS9Otppu-n{u< zSm1U?j>(HTCwg91+|2M#ctCYBZtm=ji~1q7zbqE6*uzrSOAmEMu*D*o)-_d{xbe$( z6AlxHzFBUdzIU4N+_ItGuLw4bq4r?E-35YWD=q$0#O$o&r--Fl5frgB*)Ft7ibOI2 zLeuh7FH1!Ib=Q(A7}6pTOM;`>qV>BfX8;E8ER6>5cO*3j zeD;|}y#qTZb?3dF9&A|--dH!4TTi}7K-sTX)#}6BibcXj;LFvLpPgNxPZPCEMh0V` zmu+PXXT0gQGnT3DrqvDNxqyNJ1jC#Z-?d+>bCH+No;k*&?i z=@_T}dsw}7=5}A~$EOkKh#}avxOY+y*$e%X`Mb+ShjSmRC3{gi`@3qoUoj#8jwl5M z11f2xgQ4u+&GMN%LJhoobkDj%n1{}a=in5MEwI6b?%2)@+CU*sICF5z-M_E3VzZNA*0u5JDJ3$-(ERKF!oIjlexH@GAD02N(F!yW7jrM<&l z(HwP|+9)9q^C8ShyI-Vu(=CWMO?Ggci(%zbs;R|`zEjACsEmg8q_(1J#QO$V7Tj#Sqvot zP9}MQf-kP|A!=LP{b|^ScMWW2^uGefy_eC3fyOrrOkA-C_LjpTyH=%2`v2%^&xpC+ z({x-rpW0{*6%pP#`|x0tXI*`D7VX}HEB7wtP!pC54qF{p)ry2e_5Du1w_%ShIOBs1 z{$Ae*7Za_1sL_CRrcq%m5Ieec^DZ2(T?{jR@So$VzT$Jd*0=lNV58ml?YGD@&_Hm5 zNa1z1^^2K)$Immh7G7Ci^}*Vz*GK6zU0AyFiAnQ0E~{qE@yXXU4e`gyLc;&Pg~+!i zZaz*6koBYIFs$p#2nQ7z$RLlr8~_YYYSrB2LkMwrDd84Um?4rkC32iqeBFdbae=Ai zL|^Nsq}1v18K%4Hy|L@5ALVNm*OgS`but-XDzZ9+>Tgn2>ks-%0Fm+(bm!H&yHk#_H;jeQ(dU=kFrq_Yfy1Qf{vJ5s_7Vz(M=nqE@U-G1%{;3^6`Le{Ox0IpS z8tQ<}tNO$%x$re#uQX46Ei85I4fX|3jbTI7aU7UY+=)NPfjrXOCp@(bC$4(GokH4v zRjxnhgNcB_fh2u!a2>{Lyb450@@4&Tue&Z-eKXngfVsKqS`gk3@VOn?3N4X5?vpenx_}))eAK9;afVJCdKOPVtzM^_%FU~ZH##H z)aYDMoaQSrF6wjt0sS^a;5*ek?X>xe(q_|O^Xju^ldlCL&H7p+L zr;&GBAz5hEkBruSBbSf44M_c?!N}?=UvF?<)~;8pbHCa_Kne6EV`#jBVAc*Pi~1aG zeYR#T7|q4%!!*kHrYeoc%yzo=RGnE&89P_m74|3S0WoNaMvPl3{Vtz??7_E`7bP*$ zHw&nLYHTER^u4zMF<1TVF>_NF-=lF)iD(ofn(Nz^`0s&n^C+M;A_5**s&e7Q01cS= z>ijn!xioZ8k2Zs4?lqExqLFl8T|CB{^SgpEh=-cN83T;|DQ+aqSJ63)kXB*PA|1?YmpDGynjB(M8lZg%$OG7(|5Nh3`^rVlF=YCF1w>K z(T)q%j_QVN9k#=xOfw2QU!xa2llV7aPh@TWarEJjJw^Tv=hD-~|3XiThG}>J!(pwz-qSzB({k{1l%8J46Uwwc zwNo$radsr-!{Zw#>FMUx*-hM3f1=$x_q2JIp6*`l>7T*$CNN$638sJ6(|)#_t3UPh z&-m#uyY5YTdYzyC8J@T~4~%c#{RvOnCD5Lr-rOIlcj~_OtA}*9^eWO3JR@)Nf9xuH z(cmdPoxR!cOg9;yxJ2xmHdS0i+}1VYFuY2J^gx38vHYmqCj@v z{t2Xi)>9Oi?&_a<`ez(f^tkuw>2;3!XFbh_H|PG;(?64SxIy8~;Q`y#Zza?}>uEVX z9W^}_Z}cNllw~6Qr(N!uL^IZy@ysNGsw585-|}V?Es+XSZ!?%ZZ)>a0TUL{1%C}X2 z(MmCbLSTslSmD50)7P{YgZJ!)9 zD1*_;QYSTPDoTNVA~jJQs+Lw7@k!BV$A(g|(NNh{?d^u%CBML5vX z$yEV9ZZ$YJNcYtP)uYv*za!>zu1uW}YG~ouqW=uCL>ZD2brOhzji_K`xyt8oy!D?w z)Om?DSz6}CoTN+;#*nTAx_py!GI}%KWA!!_($Gl)BeemFOu2ipWhgj-0T|sIU+*{Csj#-79#;7lchOK$Jf~TDDE<754>;$s7CA$r{uY$eK*DAiM@bD1WSY#UYuK z4_*TR1t(p{mtzi4jH!)-AP0C&lv`6%vvb!kdG)tJvCnrOjDvw@twaNbM2xO}V?mo$60QNa!h+nI+tfn>h~MXAd2w1ms>KiP z#G}e(b!w}&b0)WL|EkXIaK(B-Gqm^fEFSgsj-}v7OAI@T)?}F?#feXdJrj-KT!&kI zLa2&-`9iTdM~xa!VlnPJHu0n~Ha*0epV)YS4h;pgU9|O&{Z!tP7TsxGRUbs)%WCrt zXrz-3>FG8q9i|cphiNhPAD-j9ly2D!`PG*9o_zQ?WuPV7%6LG!F71cXwy84Z9B;>8 zacwM)@_lf9od#Eg=ZZ(NtB@f0*@HVDJC97>x9ij(Rz%{Euvqw45ePg(@#R9xhAI$H7Drqaw4YY?XV z@YLo@;m!EPzcqIMkyoHs_WjI->Z^(v*=16H!_CC&86Q>qmrP?y%@V{sRoSo%j`G5z zcZ&@`4(t7YF#Ytv>F~$g$bh;z+%}5`lC@^ol-EQ*nF>M5-qI6o9pRTH0 zgzcrd`q6BDT&;NRH5XW4z?Wd|ZRmDsE=4Z~fadRwbcecioBt+na6RdTJSLD&3Q7Il zKSjHmGzLlqc-!tN6fz0oug>>ESrIag-nVVGvL~+DxUE{JAE2OQ*R{0@BDUsY*CTTm zeD?8i)B6`=WTc|5BGeySW-=Op=8Yqvo;7%B5*$`iT7dJtm7w9Nsoy>OY#82HKN>D5 zEYyK}HTt55!ehVA$#yN5zgi|#dTJ}`2Po)Z><Yo{19M(Q>(bvIKw#WHRxl94;HZM1z~r0C|6NKLgOsPWtZYOTFZ(*U^7${1 z%Xxahe&;aYI!Bi@A@zj9C)r}e_IFj_!$6&A%7H1KLr-Gs3*C@W@O-LE3TV-1K0GZI zou%0^W_Q5Vdg}vsW{ObSZiGqz=m7h`by1m;Gi>o|S!YZ3d=>4` z*$M?S;V)z6ORSY#^=8!c9HacJmHx=F8iBuDzqD~=IbZ)ckBHwBN!ve+1v{#CwY`&Y zV(swfshKmm9|je$;T;gk6r62Fgrnd3K#T@MY0EgRw7|yGhsLwXD;r1n+xvGCGGDWy(b173D z=y@PKOCec9YgJvb@77!1z^5M{BhN=k)Eu6ahPV8W2I~dNm-LwWz)W(*?LqXhp}Fs@ zQc0s_XISA0USQ8!Z=G{du-mfM`mGB-V2mnVlTSa!F=Ky#wZ|xI|MD)?$gBunTP=IB zRGeKahFWj!6N!jBWTepjDqMvA)z-XDtB3Irz?ozMw%=MU1gA}@0=0^i)Fn1$>5~Bzcfcv1uSbsc zD-yvjBcdefHIQuw!sr+efOS~S`}HR29eZ36P%ZlLHpvx4$cZ$ZS7+IKcZ@11is0LF zXI#b#8NKhKD(8k7#?hKBI}3NvYSdY^tuHqI7Q$)u>z!0>KIc`|U(vY_WitHdyiS|}shPOfhIZWZ>eo>` zAFlk}O28qyqgawaJPe53(9V#(BDos4-l5@#78R(+I%2zaYTB<&p=0mf!KU>S2lBtt zl5R#qMRc$8YB}4=@J!k`1SEM0?mR%lVyRmnj&kR3Ir_rv^2~_l@T-dR6as5Gw6{1l ziKIEiOek`ii^tuY7P@ ze6XdZcUqM#(zuAO;-8kXo6v>KEo~qR)j%?EzFPALIe4orA1eU-tdkqIsZWePR%>qz zS)Xelg)m*#j@UqfR2_GsI#a#OsWZ9(htu5z=nRBX3M5a>M7;jBc9}B_ATq{A8a`T| zu#v{Qi|Wz5Imfv0>YHlq%u2#_6Vh}dV-5NDbX^m(Tne0qDNUVNGqoAIwG2e@mL)|vV$-=p|9 z_3yDICHM}c$8>&7*-r>Rp+<82X$`3*^duR*@TakzlL_8k%&`YeWU}FMGSMthCK68v zPw0;dUhANH-PF`jVTFdA0?&Q9|RNidQ15~^&L2XPF}IY<-FP|;|_P7 zakPGr<3AqrM=>%=X2^q2suv5a{YMLI z+1m8*-s(uw7?c`jENFjk6NVLONM4Y2yZ&v8IN6~m{s+}-Hr-;itpp7_>d>SqxrL#I zq{%gc;wTc(SXoF$$a%$XqDI=y1q~lW(Brbycd~YjpqNnR2dRDFESrt|22y@I7(1@` zb}A>N*x1XVe(x>+56PsNHd6r=i_WBIb)qEn_5)+@E~fI&`6z1}l5X`6V{C&%@dDLZ z6MR=9fRjCe9FGOvy|fyuFgZ!hCu?NQ;TGC5klXj$z*>~hjhixUTBCs;RL35^{!p}v zgM4-_w zC(JQ2_9SZ2g>R;a)f&wc>DTJqE{ijguJp%ruBwx5K@$N=ckn6CSRnfdi6%LLh9JZ`FElAIJd zVsqVAj5UywM6_c*SGPs1OxHNG;2v)ix73+RCjIp#c8ZXAYXFB_y^B_sMF;x89 z%wG_8>B&Z1f~-eLk|{vr`yS_{{@Y|=wh>J^C$z>XjeX5y0Zqg6KsZxpnx)Jq(-U#Q zi>Z#W%d&Be-xqKQ!wR6Q^=x8nd+-BG%|7=)OObkqHYR)CudJSpq9oU=yitue`M-bS zcHQG`N;_vsaPN_PCeD^$7iJx3?xeS7%g?(AfzIPEy?PrpsA*6 z#eSzvNq!s`3=z6AuLXK57%SV9A|I@kY2C^SZ|lc-1Y^ccrvKoAGO|UT9JkhjJ%sUn z6bw9Dos$AI+^^L)r8&%7w;Ig*mXSe*M2~;J?)J+u2O@lCjxKb$5v)3OtI^#o=`>;J zGySfR?$r7S`+}E!(=N2T%)5ok%+b6n#5)&1Vb$y!NoBl3yhkxRIrb+Yrx6jY(Ro9> zxrTV|KQ1lF=X1)>rkcc(zHX9yS9c}cydjpj0YPWFpNV_aKNVrXVgRX~vQe&Igl7>$ zMzvm{o*`gaM%w?}4*?0ut+J=%kdl@E&Sd>qRx|F}PxhRSjsVlOM>^6Fk8h%Lm%Nz? z&zZYR2VI;&57o`o9AiP8SJ~aV=C87gbnb0k_aD3mbhNn*TUbPb*rH){p|Oalr6TWT z$$iP82I%XhkHYv=r$U#Wbbz7zBg|^i9dlw5X|g%tUA-|UU{o+R&GW;u< zXYyI?F{Ym@$MvrgczJY{q0)QQZE-&I6=8?GoQ^O>@T^Lz9+Zuo+*~M~QN5~{vZ`N* z*|E$dN!#3kd9QKe;l%H{MK2F*d31+r>Q1dkIo%x=l%~v;d{0v}YKPgr2HT{P zO~#xj{TUhxf1Zh~_)R|T76?e&=(awP)8lZE8c?x(cBp%xv#YHgf@a=+e-_>K+H6{| zhelVhSBzuqt?Htho0@vgCmc2@;d~>VkO<3ZY&(@aT;@`LwT%1t*QGasenbu*_RjL} zEi1~t{uc@E7&X?5z8_kvIj%6kz(olH&Q%oiSlo8^2DW!mgoq7JY#GsDtb7PT)}7eJ zoJcYxb0mgLbNC7SnLdj!25#oTr6{f*5re03cC zqtupYhcY-BBTr!f+}u0D4CXx$S~`EzUaNS*`YwJ1aRAMMANOPd7&?jp?!7H#)?Nw^ z)ujcHgl??mtLn@p8bcDTg^}?l@3w4;6_~Y>qa!*ILL1=0<{s06s(ej2i-v*RN>{dn`ms zr@4Q&zbqo?(#qFF$GHjYKQ;okbM4U>Hz*+I#@1NpM~ze>0-%i7gH9z*nV-96i~HjD zxwio6bEbk>v#~If?wxsPc&m+QVvLq-25##>Ht+D6H;@8ZdDs;Bzuvf{dk>2+x)S^8 zYlF*pgqE9_V;YA?9SA|Ta~?zu?H@*Z(Ira8kSdt}s}&cEP<8#S|Lez{G2r@TFZ~CZ zvf`*^3#b{6IyJt=yB6w)DLbjdDe>wI;t3LQKt$nXvsb^hTF`$J!5Eo7r-#tE-j*6f z+ntN7wVC>FqkrxM3;k19**M^^6pZ(oKyRlt=#YZr_S53?HzAk)YDFVzA6B`-Yx53N z4i$>I4^C%dF_*o&`iX9vsU5{=h!}38#PnP9Yfb>tf#xuJzqS9-MG~{(f@Hnf2qMy{ zec4$OM<4N=!&{hLCA|jEh#3G6gc`bg2?|yKE!JDd9~?*3*%Mxa5?;)t>!9#>eevfN zhd&OCzqU30V|$$=f{Z(JMDTD8pBU_?_!HeIC?SrBw`6(EpOfLd3mb0+*GuBG;@)?{ zkhoX*^mavoGx4J1xUFSNIR`7=uMzX|W%Y5+a9qqXZ10A7N+++b24mPeM+z#sbUwYnLP?EsX+F5-F0Vp`Gj`#u4zYT_M zA)Egc411CogQ$=7b^Q|R-hcLprEwn#2pJxSrOC;2rh|3MkFD5>UL&p1b*cm`2`jbP z6Jwt6Lj|Wzfx3LGe3_a)B&m0nj_rAcN?ThOvkmsB$&$aTZ@tzF5L_hiVtgy7U*LPu z^2nma>)*ohu3E8)TLfPh=L9Q_KO!79TZgnZQ&RWDUbBEJdm)#zWQktD%UaCDhQDLWNY32hgx!L+&A#+8g7 z{Q*3I4^RN^mmLzt^xH8R1mw8tJNsickM@iuGN#m1$nLu9E3RN2aGfhf$DJtSNDqu9 zKqoyW&uWWPq(XV=G3eH)kWtNYhaT`~=2t;S`Tj}9b&CcNH7xhLuB1J~PPL2$J|>F@ zH~~+Mn~pTQ0>OeML;o^sXac_@?`(Yt^~nTsyO=8_@vdC{)G)$xtT}~yeKKo1BZZpDwsmgx=9(FoUIO-Yf5BJETyg zeo-hY&h$KC4PHI{ng(R@3V7IPC9#~n2%WS+v<}cWGzxbz0o8baVuRqwFC{U#sDd3H z#c{{rs{|LmUr%fJ`wqWP*GY!`^wyJ-={o3YjJ4PFJi4n8%yaI~>s~dvxGy&ka8iH@ zTc87bk#QjzF-n{P2<&EnNYXu)70ir1Y{OZ-{3gRm)*$I2<{>J_vB$FefAp_|!j{a$ zV+IGZ;mx+{7y2#altI}nxeiG(b}mW)so#v+#nT|p))p(7&}4w#nkx<~&R^5()|ox+ zm}mIM*u#;Td#5UD@A8H@1=pQ>3&SBtJ!rJap>6nK@UX3?4n{Epjj#gs4g$+v3H1RR2=DhCvZ?vrI-LkgO1OY#VT(qf`-;OBu<;%Gus}nQdXAr;HnCt<2 z{rN5XqBe1L`12lG0;el|;;vH2;-iLt9bFq!J+3EU+Mf@8X#&clS>OIDa(FL4tZvQP z>pr(G*NFIxTS+ygGykV2Z2zChd*4{v(!0*0zE4vBS^yLthi~i+>deWpQ*Xy>-jBDS zgVTp}v|r}u?%|$5S07tO66;MP9;BaqV4}aw(;f@W$nNJd*PiEAZ(CFh^Z{?i?Z4xH zM*MYQufafvFjf49VmaI{tGQB9C9?cj0mLZZuZ3t-uD{CIvJk7k3THgT_t8J*36*HS zI!Unu1MjU%c1|f`q|LMZ-&YcA3zw!w_wPPw8CoLrM}Fm_8FKWM$=5%%gxa~ve&q98 zTNkC5Oa2d(SEb~d|CO=C^#_Jhd?F|rr}*A(c^b63R*FBiRy|Pn-JX^|HkUSx#{KGJ zu{pG5a&65SYrSR5z_Ti1Nhh=z%I2L;t`Q)avpVl{Ve9!w8YkW0#BF17KQ4m93Kj#b z-W!9k;ZKS6y;Hk3*U1*Z+ad-v$1O;o!PoXw%^?MpJ;WcFFtZ%RE6{_oTIsvO=R*z( zZd#j6z6gn3(t9xwv7AGr?!CErQ=1f7`LZvL>`KXmSpW$0FH0HoTRBiOeuw(h<`sg4 z0m$uMs*XIpF85C;hEL}#{?UW^v2!GGq?9Z{K5zLv^5!_`SpD~b1Drr}l5ed(HK@2r znjG>T50{16R4Kyws=5xVk2|2@fc9NETvwnLbeCvzNsy36ro_gnkBuM6K&6xV zv$ZN7NIt`3ZEa{WCKG&LgTmhfLNf)1gimWszJ-XSg)Fq?4{pj6vQMI6y){Cc?zg^n zU>lICqZM@C=Ne!BD^#_RJi#WEz?3|yzeF5K2(^)?miFd0lAe6SP zP03vFa8jkS6v)Z4WU8~_oQ zTxmlC!TMfj_q&Cr?`%W*3nJ6*iYnT&POD3PG4HE2a?vF6a#<1!JQ*@sNojUJS)Y)+B;jig7E=KfpAK^+gkUN(Kt>y6jD)k{DZ!TD4Z z&}yA-NPYd@I&nb<-_)2z6f9>Ue$l-awE4E^|JR3N`(kd*Ng;F?MRXJc=uwa$m(QwO zTa3-MThp(-eCV{dT$o4*-G6#5?=ks0)gd zmpN}LSj#2dgE{rCy?%z!9oEssa+A@m)sxNuZ)x^cPYYlcj2`=_zG6YDCmq@lr|5JB zeH91yb$Ocro!dDd@s3m$F{=<>fAIxdgAi_raAeXV3JY{mlA?terRz?%M#!oG_jogA8oaE5$a-i$Io+&%Xx<(k*ywNX+vtzA zy~B4~)d`8GT9ha0l1~V*)1FjkX@2eSO37GnlO)eU$+PMvz2)UFNf>&GnB6Y#{)=&? z)>V-Q4Q#|ZK<9wlIs_>w7;zRQ$Un4r*vlk>{jSBsUk;Oe2E))`&(ziC8ZG;?sW2{v z=-dq9nmyhyNY|V?T_iu3xGC8%gDbN%#$J*IkLA%N7+s|7&FovwO7r$1Oi|Kl+%nj&Z%7FRpC z`m)@UYpL=+SF7(tiM@kJ?gR+Vp36s-h?-ElMza5NYu6QXMHHYS;iASVVLm zY-C7_#b1Jtlfm$C(4yRqAdQ1w6v*MOuA)<*8}?dVeLJ8CI0L`o9b&lj-D^&8c)#z= zXt)^obZ!Vr(*AX5FnphplCuvlA?G=KAb4+6V^p?YQ-m|yfb}!4$_WyKRZC-O{gnM% z<08~d7U)^hAiE2Rv%S_|2m^|?Q$dp>7eIB-aIQ#XP_+K-w0K&M*e}!pf9A+$5_cbra-M} zuk$|VABm!yEfV(Zmjt{W&x<&n`h#Kwza?f`|CtB-Erq!Y+H5Bcw~e{^V6Hzk;JUx( z(rJB>@b7lGyT9G~)S8E10m*vPw}bdbv~Sd(AI;RNRqM1Qm2A&^k?WU-(`pIW#mc6~ zV3{YjJnbdyV!(P(mphMox_pNgoX8fWsCE3OM3frnM6-y`PTXYn3VwZ;CcavdrY_vw z-%>Zj1OM0I15Ydv$07b|`8a25P;Lk4=xi1o+T*Y%E&3~PBFK8GlyXYJKn3b*E*l#z zXA;qV?VHr~2jP^74Hh#~d6(DVy;|8df;Ue0em)=Bxp3|J$8u2>m99X<;PL1skLJganeyd}) zAIoT1M@7yXn0`H%Yd1CvGuT4zC2T`f&U?bhQAaM2z+?IppWS#0Vw3Ohm=`>QxD;6~ zKs2-6y<|xE3{L{3R?T%Ue_W@)^&`#>!}xs?+^WAS-&Rt?Z@%f6AbjiW;QHtK_)VkV z+xp0!LEfYAs6WQYmUU=_Bz8`;Jim3G!UF>(x{G3ZW^3Oi?^TdD?1}xV#e9R1!0~*< zK{8(dhJ5Q^Le+EfptZrp-8o;KS^74~(sG!$M#L-_rdvEXaSPFAWXlUjB?Ou>4`25j ziNR07EIadQg-cswvdb}>V-9{`P@=?)Q+$!jyvQA5MD6Immv4I5FhOhJ_(tJ!>Xpst zJl(m9=tm9h4b}yAo0k_})RjmkQ`xq|r!43tx&yw*w|s`K|KxlO6}5M>sjZC&Mv069mr#zzwkEt- zJuo&3K2BDvrPEt)Ga=bSw3yy{i$ik0%&>^;%tKj*j0OKlMfzUq{9rk-3K(CXx8WpU z>mYfE=(&NrIOr~HY5$3b7rsZyye5Y(qJ^P0grfKhbJ@yWeb~q`&;#kmp zSAw1%%^)e_jm-X*iEU!=(M2)ee-z;4%dBO1FBNdoxo{_)!)zyoN1b2334ta23lDc`>#<(gr^Gp{?x!JKCg z_sz~}_4k95mZ&+=cX&|=V!%I5^BgfPV-8}@N!eN_7|i88t+G{&&_-z4UqZAB1Gub- zP@Ggn18i7+9r2)f-Xbm#6EMaYM|}6*I7;;H8S?j}cN|Civc5PfQIRudK0(}L@FC&0 ze%D!GNi(%Q{rMcX+UQMz5BiJevny!8|%0jsuS6~0dQ$t*Xa~wwW#Ar} z_dtA5zbP_Lhink@Ka!DuTyvA5u<1t*ROVtsal=T?!XmC$yo&xhv+%|HM+@21?G}0B z$dIE-w<p@({KIk z>R34B{dmj<1@(vfmV7h40I_%V&U9DO6>hyAnWW~F>tr{PZk_iZ?u4hc_LVq95*yPCMC5fbs)e;3b&mK2!XFyrsB;cD$Hrt6*e z(XV=|A&(c&z$)LD?!R6^>)*1-ngzr9KdLz8f#}<>4nbPKb@CS|1%SuuC`OD%rXGKR zv9phC5-XHbA6+siC3voX2yIFdYR?(<9e)>~i4&`(q&_XDm)U-b`cj?frD%ai^}g}a z@U>RT*GBz+@M6U>ElngjzDDD>5b-rxa>do?``%mlX?0&nRk^i&@0h9-WuMWzHdu3{ za^roFpQ-P6ejPGv^o_kD!j?6~^@Fu?`O@I6H-LwayF#31k(jh9d<>d5Dk*| ziZ--AQvM7lD`welZ2f|fx$4;UdUkqs56$#^1~RPCg|lGBPOuj7+8UB(tK6I@zw=;= z?@LChY8X*`F31IJ31dp~3&w65;HEKa@}VX3=KjZ{>Nu!4H$d!1n#u#U)>~KWS3dmm zD2`I6(=4kG7Ku^rL-IY#?cPC_bMMS&21XI}nZYft?nn9s?KlPLu8j5MvDz0O3iIqa zh1b#zPn;FZy?J~4M?UU@#cye|r*93(WueaMlU%>OH%R0~vZ`Bd#mLOa-vUxWd|1{k z;cj#_anTzu>-x)6c(Ik+VCohrsL-_a-auelN<#1_QSfNGoi}<}{Ae6Or3V=Jq`J=@ zloHwvRzjFEmBAhFaYYgO>a{+UtJ1Ejat%!%$`dx9uMT1bY2X|J(why=#I3~#GH1vX zX5*Wq%29v|5tmFHUg%#~Xm-E&L2!RjaIb&9BkYSUdT2D7|DlGdi-Xml$*x;(jMf%4 zgaYwU=fECu^hV+RYre_BtTgz0&zsvb`Cqfuia}@7?@q2#?UMCOvPt4ZZ?#h(OZ3`{ zOP)V?Rq@~ifJnNRLa_E%xnanc3IMcP9LnENw``tw08sHa6NhCi(71nx_gwhu9k~1G z@UXHyJ#F>yM#yI%*T_{e!Eg7>;kH5U8&y;7B=OG*Fw+9!{Vn7C{h6@FlHk$-MMEU(qQT>Mv%6=G{eAUY0qYOL${% zsSi#U0Vv*TafSF&0vY@^2^QD)?rDTFGpRTIyR?xPv9*q~1HN8ZD~JJ25-pE(OXCeI zIb7<-@9Qc9Ypd1W8FM=lNxvd0AHL$uP;>vFKO1p--;rK^|Ysv6_6SfxR#npT3A zMg3V3NG)YQebE8%IL!9|IV#^T z$qal0;YJ9zeH%~7l(Cy}zEYO(|nBNmT78q{VF z2D86xW|vJ>1S8!*PFA%N=g07c7zDkUUBTYEB6%+38?ekhbA@_ zl>buyxN_c9_fr0i`jbCv@GPG~VKTC$@2WjU0n+t1J|?f;cu{}G6)8M>NOIaio6c+2A5IoDiJnxInI(Fr}U?Rme7lo?xW+Bl3qGZ$@5n*&e9)(f1bW6KUGO) z7jpR5+n4!7EXP~@%rLIK8Ac1 z6;Qt&23Nx){%1DbeFgxi-CXxDx&Ss6AF^u#+^-}P_1;*l_4#-nb$=1CP@VaC5A!Lf z#am5N`E3b+e`N0P(8j8pc2=aC($r#V@P140I`8BatbgV%sQz5mK}W`(ud4UrW#v+1 z!AaeGsGW1wU|mf=XdQ9uuwGwOt4v%7SmA#Nd7Z17x!BdjYRc;iXWG{+DOzy?wzPW3 z|LpqpnvI0kLupis+qv+Z8#qk1q~@@Ytdu7!<(=0dCTF~AIOd9<1(-07q5M&f*R}sT zb|(WH;pf$bh5n|sQc{}i1vy%C^l9KEroCon%fJX_9+DB{_N$jV&xH0hUvYT_WElF; zsCH+ z4bVMVT0=9P-(fkC3uwD1RSIC}Ph(Lkvz%f2%EyC{yL#v~g-Xc>Y1#F8-5k_ux4wVE zAboAueNQ5C^4pOy z+UIf*35Z3D-TqQCNFV()I=U2;gr-jU;Z*?GLftw4^Xv);=7;Lmok?i5+EVL59$5j* za95E>o?sGbBHUN1_HUpyOZ}>v<404VTC2za(3)gd?xvszP6C*R)^VgGO}pq8I3T~{ z4+MhstK`V0LjpF|XUH899XLc_s14O2qEt{RB*d0yg=1~5EQEcw6ZFz8Usp@w36FxR zDZb+wNupHt=fzg9kna!Gefla&375=iG_T|@$6ZZoB$p_h@Lg90>N&E<%YeRFvpZPZ zQOIC_CJFr7KjJtkx4lyU&Y0az_P&i9G-b(jv1tD~YO|A5w%u3|v`Qsw0(veun3ye@&FC2b6cTSY*i`r!UF6IAXkD0;qMK3iJqmTV zq@SBIa57kB1ZH6ck29;Ho|EOT`6Ly%8p^rFL^gfu9{-JN+-+0F`3fQFR=?XNMPJR| z!iKb%cD)p3bEwOsG!r1BrnnY)tzK9n4tXcDZ{R-h=+cwsGY@U}KiM}|azvN&ipFt| z+KLMpDAGhj$PHZw2^e{ck52>lsk7diTU%2lmdwUgVYqAl*Zb8l9O6V%+B_KSO-`DXqY3I^^a%$lxk!+%m|A| z$jm5Po^#IC%WCB~*#vqgiEktko^UfjFwTYrMgf9=;`8BDjgE(N%$e%l`7nu!rE15a zGM+=Jy`jq#mCPR-tKhidWVR$`AJcV$YIP2)BVZpSuz5rxuyyS!cY^vzP66Vz(b)}a z*hxe}x!PtWA@jVFdgX4zX)eK6n`=ylr|^sjpnGtkm8n`h2klGvj8(Lu^kC|=Wj-Rg zM#cPV-^v8*`#e1AosWk!HxkK3dt_Mys(lmEXbUxwgqqmNrXDCSf=q&A!PDhSQmX| zF!A?e$ysUZK0N7df0d}E3&=6$T;O`^x@2UVhVLpz3xC8v+d*fQ{E_RG#r7=0juOl^ z+@j*k#+PAxa!)i^$Sp}6O#{*$?J8Q_Q@*vEx&&QHm6MlM7V3BG3=qw6en83I_|775 zpWV^mar9ZxX%`kmlfT?LtA`xmtXqrTQW{@X>A0lZ^iEiPXa?KmY;iu{*Yh`tw&`W0 z%gS&)I7{loT%4I4&xlU@|5Ep6U2QDQy6z8Rjsc=)oGVpH$b~FqS;#WJ1DQ^A0)%LO z{dwLuveX%S&iQ?7?X!t4jC=(qiXviVeLeAa`4>Rft?K~IAs$`Q61bZIXk3TF9oIXct#TKj{Bx+n#}-tL z-mi0f6fzGAbN5qx8_13{BnI6wfra?K75x}ihjO=(xbxFjp#UVCynw=+bz~=s*1evP z!BT_BkP$B*T0CK`BXzBY9(q>`%Mv4Z^Z@xeB~*0NHLuPiny$5>eXz}!EWLLRngZiI zNE3pXu6G=5m=~!%}-K zyj(EFFFVEdlnIgQNx6=^2P(^IcS)u^t;s@xH~H)ps@9}7hTBkNUPF40R~_l)fVYQy zqJ&isbcTAh8$948iunfUbHx%gtKWOc-?<}gxgorjx}`?Sb+iBah1rLb`Y&=S(Li1u zZ>mR7Cg?E%j`6e27&;#U?SM-12X-fPFeunXbH_^Dpv)7X+{P zZAf`)SHB+ZwFMaHyyE0p~( z1YU=8K$BvUsOqF$@h)*vOD?ao7%J>J%tktbfXAePrznU-DsHnI>8gcAsCAE~xMqBk z4;|{WEg8O^w6)`2(n)^$5b^wNE@2Z5uIk1Q?N&|05zS_21GGXRkOxt$BZ^?BqkJQb zVRPYyQ7&X+A$1xcL3EAk!AhLjjIuO2#_H`TWtf;^wCF%KYYgO9wyJP4rBj}imGfk1 z|B!II3yfF70~l2MDFmHL&?Fhj)BEH{t+qj}eo92BR2X33G?zU%TdBr0)#25GlKb5d4!`R#{dcm~`=VUKTOo431N7QdEbgXM?)C>Na z&9z}DAs*=zGzdVv)3$I`|0O@ol6>b#-^Ib7B-7)(x?OU6(LK#xX4~s-tREtyvjcnBtok;)@o)P{p8Ra&jH1txROgYaAt1$@czKm^T1_Y6M%4+(Yvo$< zWyDi@MSXC?GS~`+3-?Zy`XYD4DGIsN7RBJGih?q*ZYXUJa7hQdr|P@~z%*l@l`Tz3 zgv;Fl3_{oSGPKVdmT>KR^R`CBqkWUHk1}ngcjvdE%)QX%w=z!6N0T^rA&rMwa1bL^ zSGH=Fkfo$rcb>GGUd97wfWb?~>(JQJK{4)vqK>#2wLwlamNe9?%UZM@w|h)WLp;4y z8q*2D2n*4UcG2oK(k@MlOQ%f5?;Le+t*yQ)3n;~X6x^Q|e=>OqfI}a`m;$~({P;_@ zEh^-vBZnd+8`X9kfeY~Ym-5_wTMRHZz$HRUi}_owgg3{qp!G&N~i#2+S!NO`OK!aDrp^V=m97(pXmlg1LVl!OZC-&Ak~r^zCJG zd(PO7h~E4KyH`nXz_O$|23OdAnNGigXypY`tw+OQpG>qQm7ZOc^?@ zbKDdy>wmPIBr5YFX}%R}E(QYk^UbY(K!FS7N+<*_cUR5*#Or(2CdVb>R&iU0{f40^ zt?N$TDAuP+#J|1T1;NU^uJw2F zv9X=7N&Z-^1R0~H+Xz39pTc-k0x^y{8FXDcc!Yb7$di>&i>BKX?OfoGjF$m*?)`+( zhF{#QKm#@S9B;X@sZi`%Eh;|7vKXhduKL zrFuI|L(BcZuchanOU!C0_(Q^HonI>W{2wh1IBn$R*j{K|xWzcMgqm7UzK9gs%Hx)n zyhsW7>l;qS+9jtl&FM)iXLC2o>l4FZ+{cf>2ko2~uC>p}G?ogu@mJ&M(UTtd_fV8-k2CBICjz!WEh-acP= zi)BUDnHaQOhN*I!4P95N8}JEX5|+HiQgz-^p?N1A%w6bbaqOeK9Q;KzKOK?#h9{d* z7h&Tm=4N_(pc7+N^%)*Df%maf)Nu-^*{%Vl}FJe$U|YKL3igx^R+$XNPUnn z>sTIXv$BtAt(`mJK?Mj-sv` z)lUcJTKlWo$2Gz9X7$rfhU<%_Jf=0ZO6WGbvR)nTO=<`(wzbY6Zy21<0XSE+Ogz$t z+@1UplED3gZ^QhTZ?ImH3h=G+Ydu)nlS%gDdd)*z&ov~8XC~Sg4V+DQn7u5oxW6*< zbEGjEzGsW>&e0_M@Q`bUXK%hX>OI^ZGBW^*od6tof-=N_i%q{+P#9jUJd}FE-S71T zBXQ?L?Etvz(s#Vojm3;y@D|S2S7EsH+$`n%fo9670_#)kYKCYrrX`(Hf(l=-4GI>e z-h`?T()cQAUpmrL7D_}QQH?^By;!)xu78<)Y{3jVZAqlXshnTL7N9)|mQ$?RJ_xTA zWOnJEj=~05fwwUha`iFHZn7=4_7HFIm|=D$C-Zud5@ofLDd{V-qJ_qDH1F56+>y?3 zz82iFsg^0EeMIBem(1%fD~oFMzPKd@|B}6mABblOKAKhU&1RIsnh+|L1Rx~o`G~tP zcw2}=b+T)c_VM)v zK?Jc}=ZaQlra$l}RbluyPn3c^jcWq(bQpk5sJoUGmq?*H6ckpx-UW|T3XMgJ^{mY# zZyvHOy5TbBda=nL`tW1VDJjoZOoRvmbT#sQ@>QL$N7N!Q4iNYlk#g&OQY33Vp6m%9 z*eu-hhl;yLqEhHBn*Hy|R zigxbfC~MP0vPFWc9@NqnI4V)Q%`YSPnKCal@sYy;PH~BO{nbm_y7mg-ni13N;u=j2 zM1nLUm@E%p0509dQ*xX^I9kPJ&M$!oHUn1ib4DPXnkV`1YSaCwU8v?%Oema$(zPN^ zn?UQu?N6x?-?^TGHenZ93TLdr*Mc!(^&4j|F<8IQZfM$cr`mqa6oW?H<9CprG^4DD zXkKUHngqzrh^w-Hd8;7uc`}7pJCEL6cTzNISoWW_Q7+?v9wWnj%22d!8(sbB$lD%i z&kW|*^MG~fUHL|h^Mu#M{P1T#kj(1g>^Ht?n2k zpa|2^&@n%2g}GozOqO$8y<}k4uz*6b<^3=x@ZA%-O6)-OClh7tuZ4nXG-`ZJFzfDRf{m7a>A(r`VJ5T7Z))C zt4{KArwApn15pI)I_r|oX@aTNB?NTY35DG0zMN+1pt0%b#dMcP%eOlge9}~v`-k!m z)~tI&7(3(V@WP_vo; zpj3c!o|I#3?9zIjRYK1I{}|#pzkzuOjMAbTMHNsK_k zu$t+hg3R#h5La8K(48?gxAVV|tzaXXpAYHfQi0~rX<5NxTK|GfCA0XQ@fgFXAt2-Y;yZgQ`g8wHtE;&Kau+&7X6VdAG)FEU&|lX z1WOCO#IWCtRlPlCD#%!mkOPO7>zZ+4HB>%}Tz4m^^;d8QSj_7fC=GEW)f%%Fv{FiB zHgv({!F=jF>aK8gqIFn4~#d6DxQTE4Uxs5YMD&Pjl& z2z~WbUk+AG{5i4XG~ChLAY+VJ5>#6zfU@^tR`#Uf{L=k8FD38xe(nA-bx(pETY=w`_*43S;Cl_xIBI4A{DVD zToRER(pNxJ%rJ&;83HM2!wF5udHqcin{yRg2HOCGPj^aF$lLOg2nE3cqkf##EQZs{ zXe#Y1PP?18U?XOYIGsr8j!bC}8CQ`p8cdnu<_^|cZ-gT$N~E|s!LeXLY)xzpCHOo} zuLzD2sw1&gm%SB(>ufM8;X`+gm=s8CfOC<7<#KQ5Mu&*SWg&vLemkm-&b z|FkrGE~@YNr#|zYuD-qkxRSoLgt9y7PG+h(#=}YNy#F6LjVPU=5}2e05nYVkowyhiZjZX@20&_`F$)vdjF6_Ox^0h>jNm>5e;=evgVgxB2XR9J3Z@uFUn5*a0ziD>h_u*vV zBuAjuOW3-9M3y72aMJFG#L4U4&jVWR<-X7^Lt&Sv0XIfEE<|K;@2o8a=6Dg@>_kRxkUVjzDOrtLqIx@;U8 zu>$CQ51F-e9RsYw7aQ0u(ZJyF;hS8G9im;MG- z-(_W?lD%_!CQH@b=G=(6%Y?EMXc4G}v(St!%Io&xAkn-J9Z+;cvl~{o&?I>1t{b8Q zl3)X|PM82-$bwgj?Ma&R>AH!Sq-r4=Fw8L5mWDU28EF%ciso!*`_Mf7=9#7`=iT)r?Pvhk@QxX zpGG7M?kHm_OUiQ}6P-HH`KdlDx`_@r&GWuG$_wK`KgxB*+p8zuZsGSnO0{IAk*$KA z2!$eA81c^n-Q+J0g5M|lolhrrmZ)~Hf2p^b{JN^yyK5tFVsNF4UM$WDX}Z<>g|`*2 zd3rkmclCPFfOHF`(??3cp^YO9XQTE^VLCfWl}Zaz#42IWw`7`rRlE+3*Z_Z`?WnPg z`v?W?(tQQ}kTSk22u%}jYRb)bL999m;?t0`GQ!#0vr^yxV1L#)+GLT5LTzn%vGZQi z_eWD&+J!rQ4CYaOZ$+!OVe!$E&8=KcjRXaq#}+>6l7)G=cApFvnMJuOn_983((EM- zWndtQ`M_mJJSjA2e12M-^|Oz_lVL3de$USuuU664!Y=2(oORrDd2$`B|IgFj_+Og# zJwza66i>O&!cxRmOE4@}5VZU*(66}Rl1Z(@*`(MLG6+`$LkTxER;-tz2;NyKu~*T* z*E2l_iom>Nvc{?`GqBeE4OU6Ny-O2hUmhVmo^11r+}g?Gn%ODR%LXLP0ci$)V51kZ z+nTvBa@0F68x(`vs9U&h*7q`4DvG219J>Sys2d{fpc**7mb*m73;F;|J=wU`e0h}0 zj+ITjElr<_9b++QPR&V{s+P%zlxha_o4yZ)yiETS{Hm$rF}5GWj2udg#fh%ki1PU^ zuOdg)XlW$!+irR*i*jYQ7y_qfJyAP8NsWk{IJt~XcyQI$g)MkD$|wc+|0pLWnG0`{ zm4oJ9vdF5Bv=p$|tx&&Y$^l2<#;0^^1?ww32(xjz9Py4?^V7qgqm5l$2HJD*Yoy$! z9PmT>)vK3{E}J}5p1~a+)g@|afpe6XX7y=b2D`icW;omQV%Eo8{V`+5lRUk>0Z#vr z9an1C6lRXcsZz;~BcD7s2b$ANzv_Vg%no88CP*S6T>=qW2;tl~dJeYPog^6_x{_mL_x&i_Ugk@0&TL?240Bx92E{*r;w(ge#dhok0`13b{dx6AC^ zIy^ceS}>T`joTFaB-j!jl5PvpvXO7wyg9|cMbTm#UbU?(v5kGHDm(j(SGgZ|v>PW$ zaR?F)V&PQb&p8fqZ@=)%OQ%Xj`ano`*=u}jlHf%|%XfSeWth^4gxIZjN-%mIo?|=^ z1CMqZ(RhR=w;$oZ^DNZf%|IYoz&dF!-MoYl#arn}H*(QSac9%1wSFH0>#(_%wjS$j zJBVXCcy&lal2;o@Sq7hO){wSad?LAVY8K;&n|(ojWgQ3l&n|T^ZxQONo#>AdAv0m6L`*y35g0DJAZI$2j8qQS7XH{{dN-W^T)IlZ_Xv$*>ZtoD=Pz?f43w`8OPL%NG!Jq0;D4*;{K&0 z7ww-sEmqFXGq=r@tUO-AWE*P9R7*?*n>u01n#V+{ofzBc19AbV>|4X>k+cE`w>5B- zpJBG7U`Uf-^JkSrfmCYnEgC!#Ledaunp)hVM=e*{zLbrQmK#lCT^D1_`c_=0&|*7U zM+Ax!!_?^l2Sarn$px=6ADEW=+{-+oG5(~gV4f}YR9zGT&RVZKeN4(H`In&?=|NXQ zxpsB0)>Pagg9p+Gc1B7g?%Rsth`(X7ik~E6zUu zoya3LMj%^|3iZ=)vxqI$hjOhnxm>Wf5-fCWEr{4o&n@NW5nbzLBlfou9b}!hu@fht z;loZOOW7P{Fo}M-Vv;QD{6=dg7-HKyo8jNdy~_W|8H#T%POeg0KK_GUPG$J=WIhse z$xUd(G+bu?+l&lpgRP{of`3|vYnyCgo6uab`Q$|z2$nt$uAY^}6ArhwC<3#^1c5Jk z90JKJnN^#fjFv@#GiW=>$|kPp<+n$mX|Z?V`LcA$+#vLrI~gUo0Ujd)T|HI92hXP} zvUqBThoJ%c+z^TRsa4re4Nj(+l2OA>YIO zByCB3r^Psb@@{9=^Hi%isTQjlYAs$kbtD#EIK<3Zr)<@)ZFx)k;u};q@Enq5kQ^lN zKj~gHeQ6hX>6&LY-+&&UA|1m!58my>f=jaIKlak?+%6U7=?$RdVfnO{1yuHaD)7ur=R;!OT=MGkb@pMw66YDvJ)Dadk8pEC%DZ);w<$Ltkzf$;FzMSA6eYbN5a^2EoH6LYRmbF`C)B4n!cDAnG9-3ajV!3FYL*+wYjc7SLSLLss!3rp4u zeuQc3H5Kp=NM-JgGD9w^>U2sxiim?8;{4DfB*YCfl3( zvz2YFMO)fkv$1Hf=(w1zj2UQQkFIAY*>xgbKmM$$0gLE>nXgC+6b1HVy@9 z*m{#(`bRl2H6lg@$!M~#umcfxd0=ws19p|hSn!^&M#9%}R?DTQ2Muhew{n~^77*ia zP9~Dk_y5E!ca+4j+DXSF3v=9Bp5tQK`5CS*&+sE9dX!%(lhBNrFCJUnWZTgDJeU*; zOnG~0z7tUrddoVJQaHeWjqmW5`5J4~U^+hF-pbzRYEVi}RE=*-HP)#CuTdx`bhVOQ zTB{@YLtRvYS2>Gjy6U#^ZU?2BgNpKM1xBtZt$Z;U*Q0e+L>ri$9Ir#vpo^3}=idcglv;I)tC)+n=v5CyLEY~!p@U4xnfsOuOq77F zOj8pxcCKjO5Q5N(?aIhpAu?Izr)Lz~-*++T!vMZt9=?~vf)wY>mpj8mfcT(T;??UH z=J&I0&x*ybLyel+Fu)1{l)X@J7T(ywXc0CQej1 zQcRYI9V(fWAG-$ZVM|f$QI2l6k&v{64R_|U+$akUmxg^Q7v6_hsn@C9?q1}S<72QX4Po4p(d+`|$r1ZHQ3=5?;eAtfprF5|` zKPP=)ZzUQnU!xc(zJbf_(JBR!+rrLQWYu8ObM)GmkJwp6V(7IL<4*PRA*DvP!0uX+ z#hxRA48=pX2?^;jlAX8RP>->Baa>6%XTaY{MU?3Y*LM}vqPSo^EUn68p^{qt-cBen z@<~Fzduws%tlS(Z?(&U-SXWdsc|;ZurgX(WXJV73BhqISZH2$sLN^_<_6RqPd<4Fh+#?O{ECz>@J%eRQ z`W1fFuAWuzv!+cZ62GqB)mNA^AiK&|WAaYOjk)}R5rEy{2WDkBigXnl2V{h~G1kcZ zFUzUR`#*4Pk9a0l-`Pw-2bE9Tmo(JlZ8hE)Vq6Q}@L_X8E1~Yr-!``*?-QDn5m=aW z&v7q<@kOlz%zajKZ=jW5KBDzw|(>S#k9F*V7Bwz&iU;vn_&n`A%CFcLn=SAv@TIJd9De;c@;1TGOzq6u#D)Ik0q z9&Jb}ir1giIq+48GP4#xuVvQzWCYYG8%mid*H^Yf0$sFoueDPP<1H8g^F{KnY;eyZ!j}zZHg%Hyc6HTV+tVL9Aiq$8_Zn)QOIv%We_UL>L z6TQjw*4)W%nyzn}$%yU|q z&%%1y0)kod~4gn<&F8El&9TO)Ov|6KFp^loBkFTsWH6?ut8ZftP1<&q8v29KH^ zo6=Z1ul|70#iMYTPB2Kc-@tg_f_IstL@`QHTc-%$-xFxo_(iNp*OcKpy9i2(D3hM2h(ox6Y1&>-3|h&|)jHE1&2707JJx1SHbS{F0GBC7Tp-oa|X zCYd@qfno?iU|w-%U;^g9fTNGq!qBQudzrl7sgT#8Vp$OrW7I%MJ_jZNu+3a<;!OS6 zJ$H25yFkC^&yB76N|ZaX85c3A0esuyCH+Ewsu~Wa?d?=G{LWjG{Y|eCNfDtKN|#4@ zshEm`GvuMM4YDs!TS9;<`HgYgH~9Ue`Fd=HBgJ2b2#Hx!7w2BSsD62FyQZ0ktk5XxxEE~l6YI7ADrJsY(|o}h^6AMr(9ZR zVx*!pbPfKKfQ7%}vCD&BTjbt3H4v}P{<^Jk5@u>cd~{gQQ8v7uF^W_3gEQ~?+xVl2 z=@`<5otiqhhx2NhuP|M%fMx;853DYTy)zjnVfh;B5Ly;13T6Q~{$}IizY$BC>k-vh z!>jBn(4#x#7gb}D?FNYr$|Ir;r&aB5$Lo_DkU{K^*UY+N+Wh7*Bdp1d#5W{;VzJ8U zk1(5ruC->4$@-TttE3xgEkp&g)~PMip9bYk%^?mt*C%+tad$wz7fPln~iS7OZl4R|ztwke{I({Bfo?vbRbjI;+XqPVo6# zMDo0$tx~o9pgOSMnA=5G38^q0Oj8h;Fmj4DiVH9LrzzGn(9p0mcP@Evkg@D%V(_{c z87=mP1T7kPQr9SDbq#T%p~SZIB*59Mp1o&}Za>N&8a!*+vua6`a~174Y0)z+w&UUW z5$n5H;sd{YBp8!pG~|U;R@br==x1yE71X9 z34zqWd=;{;%@ynu12|3YErt#b@rPic`}Y#F1kK;FaHNYC$lu_>VHBhDI`{dAc@2F6 z{)Lw?nEkcra;a~U%ly)mTRZFs3JxiPO-effkpD&tlndDE79 zwfzinRaEaHu^TpVzH)^CU!U38xq@DmDfB+zWq=qg16tx@Q$zUnCi(4|Xsv%IsYJfVDAwOg{4AmlW-y`}Lg*&H;19#o zFRHz#sCTk4&j)uf%&+qS!`i2Sjs_0-d^R#%X8rGw6f!yPGdW(1?W`FN+`$OnfxiIX z(zFwo&iBGMi>iWIw?ZEbKILX!9NJ?xb|FN*%KWN2pt~At#RNar9k}1nl72hy-Wyom zk=4K!Da5+f%06tB*4OsebDi%C9p`||p)!IuCKmi^7qKPwcUSVOxY*RH7eW(_5)&C{ zFVxh3mZL=I#w+*iQurUnE^Nv-AHZqn9Sl|%I@4A5Y~~C5Lc4+-fq%c^<~vX-lODVU zKRQ;gz-Y+OJPl>L)gr(1+kzYHAhITIY);Z#6Je+K6u1N+P$TwQ4DU=5 zf4io0DiK3lSAct4^f|UgL-U9E8DAxw3LrFDD7JW@FGF(w2WI8>S-87P)~nrzQx)hZ zMWVZj*b;YE#L`vv|HQvWevrJyZ)1O8dTNge$(uEgxftY{Z@#FuK!~hOD8g z`%iDty!LvWkl2f2`puo_9`1kth27Y1TAO{L-8$U@E=_cxi88p$Oh>y~!?B@MyhKtx zZ*lukh%IpmsS-Q_-)LG@g&UzN&Kjr0&?N->-!(3#k!u7J;CuPu;~a{_j`d1AR^+#g zV`;1ET_bR(hh)G3!=zun89PHd{V#1*u{r>?efFK2*6%l^CWQvzO-c#OfC?=FWcg{{ z!8VzCGY)P^=zy{ZT}uewBkYY5K24`Q3-+F+3i~PdLs_U2nox0X6<;P4aqOFWch-aP z(+NTv%01J6p_s3P2EhZXmbBJ@S^v~TZZ!cPDyai?3aHH_;m#z^X_WD|s{4RliLJgz z?Jmoxk!!h1SKhZ+&(0luiE8I=UlUDU$Vv{2$kQ=JQu}szBhXU(zsno;u;zvwHh1*s z;9~uK#a^{dVn1L68Q@uOp5Kfd_MbSgr}Hk39a<($r_FU0VzqIGv}(Gr`&T6=9f1m` z7Bs*4Sbd*up=-r_x_j|!vye4m-JGFL=ox0v^=|hEvBat4{O2z<*-Zbyf~Y?Kc7V|R zF9SrS`Yv^(u9iWE2;J=fn|Nqo^TIx(<$f}}PU233?z6FQ#}HGDH%qe{NEB%a(0XaX z39lSUfSuiV-h1^=M=66Wu9yL~Z^|~~@~PTq!SmG0*;~NF7brA9rFM0{>ODYL`Qe3F zVKu$w37YU$;Knw~?>_dtLME~Vu9=QKBR8TMMP&S=GfHtq$*yzdq8IwC;0D|iRLhR= zy8$0nMn73kcm-@-+z-MHd~i!)3@ z2nPWTEY;jDP=y7eOMdlitCZXr3&J~MXSp5wP`t_cLsb)L!Y}Or z6IhDMD{C(^AVQ#=EF`~;EA8~ zRAfZPHo?%aM~O(cHK6?PA(WbS+LN+ie9cdTTDlx|YIeqB6q@@0QG4X|fY3e3)>Ej0 zO#jA=O`UzE8=CJT642snd$bdK!#it`)qb*)pZ^qC^d=1c8Mec*JT zQp)JAQc6g-scSfj>h{-Sgg!_B&(|tvpiIdp58vj_K$T=gCwuzX3lCkLW9mv}WxVr5 zJNF!Q3w9%Z)rg*1O)l1r=ZEyHrBHYcmVw8)q5#(ZWJOtC^|g7vNCye5avjvwLXH=j z^vb0uKJ#1F8T5I~CJV(lVFaF_W!O=#*!-Bj&4M|;jCE?Q#P3Bm0(S(el9V2FF?W4b z+e%oPGImBgjPjBOr>$=z6={7dA0-QQf=;vP=-gXQ;S8kc?99YV5?0Y{JEi;8Hl+EL z>;oEvfXBB^B~2-sV~(q|uL4he;OzEHpqZ<{RZPGTE+$yazi;RW0yF3<@8yF_;GaIf z@rb4%@s4yAtU+&9b1er$iLWJUmZNeW|JE+^z#lQUG zuLA~Z=8Ks5TGLumprphmdK3uhyTxQX)3UuH0vLgCtF??ZJi@J)xmgKTHaFIikavhZGxiM1QYLN_k}=9$)0%PhF80SB#qTTC)!f6>r- z1~v&J{~ea1A57}QwD2VPx5&q+YWU*Hf|9-w_(C@qLfVS~#Bo^dgCg;tmjn ze9?GIq@TT=QBa*bu+mt{v1t&|VA%*`+xpjI!#(CT>jp!RD~zyPQ&u;u++hg_*uRvA;Y*^r;}4bN4JOPKVv(s>rwMVU1c~uS9^inSlRG|vuQ+^!snmv z?yXX_uC)8e4>`g?sn9;V{{6uW%O`6Gn9TI=htFa``w*&vz%g8cvsJbjrh`Gogoyqx-;NMr*Hb- zo$CAyV1#cSx0!+4=vhKRE5t2CC=l&D+Kr*LvS~oJQ*2K8+$7H*DJ3iUi$+^SV&NN& zhfSXJ5V=1v{`T`v{j?@OHI36N>oCZgP`gku8S#0!QDY=WYhLwks@_tbe+H{)2zJC) z9FBEOt*AM6X9|s?VkLGG?F|$H(IUOF5s!y<(gI|f0t}tGGF+pwOCg4MQt?Q;90XE7 z+_r4tS0W0@*nkcyte}H_s%h~g)L%K*OCuqTY5JRjM;02H4H{!3pgisa zbiu;W8h^KVjoQ~H)pFs3(UbQW+z7Px?5NYyz?u0(fu{_n`PVbh|D?0UU!arroo&Va zOw}LVvO~Q>iIRl`nQ~t9!a1)QPE-Ew9#G( zm831%r0bWn7pR8;_d{h*OTG575ri^brb~J+zWK5$4#NFgt6K%LsUee0luz`d>Y3}?1^-T1dm0NdK?Z=p>t)M@xog$x_fZby0PX>hI#PwiWga=w?`*JiDA z@vuy_4D3mlQm7&yDH=PkV$1KEI3V$0Q&n)PMsFlMuFI$AFr2MXH{- zaizh=3OqrZjjjIXi$~m-SMH2rP}>;)dzSXQeO+lZ`+9FQ2Wpy~8sL|60Os`5-J}$| zbxzWOO@H0z>UFYeiHVWMi|N!i&7l&9@m{X+=u17oE)8`vNT#nV!zka_^;t*#F19xA zvMI8nYeS(ki3wBqOZfg8Y@H2AXO3*I4c$?85y;h%Vm#$YE+gge11y?nf7Rw7{m6a0i9+&g+ z*W1_I?3t;9aQzf7wS_T7CBx%`5M*tZ>zDP%n92t<#UXg2sojA_-q{Jlm{BS(|3FdD zYmic7SFxTrd4UweY|pJU$Or>eS`+qsSOE1Q)Qadj5fmG}-UjlH5{IdTVw>=d zQRQwl-;0iJKst(vuis>vd%MrYsDSbS?#Cu}rHkdjyT>zoA8V@LRi zgXm>B?6}Cdh>MKBmr9N@XH&Y^=9gigmcx!CO&JKS*#(t%l>=I(m1~^R3>$iBYQ+3@ z)h56FXrmdnvL;sxQ{^*5!z3om+4jlhBCD^TmR#P6j4)UQ5*x8=-|ViJzhxMxG&NmM z!mn{lbj)Dsx3QYIpyHnR9N<)zL>^j7udhLB%PXL*qZ9MK&z(;EbTnoxNqco&733F7 zeJGNY_c9!@R4wJ!;4%8p@i%R^cYJ;1M@{2;c++@(avjl~_|pf1?6~@E6#m@Jzuxld zXU>)Ar1{rchTatiHX){t=Y|bUG8jQN+5H(y`;!ipu~2CY4EB20Gmf& zPp9E-p@~;NEi{G@uTWOGWZa6ljD#c)%_KCNVY%r!nJ_uD~DnNQy49*TPHo|mM;Rd6o&l0mYh4Lp;oTYW3g2GK^-?> zgTmn#Td95%RmEP@xY2&|Ra)(L@A%rAim;W7f*LToK{FUBZ?Zewh3JCl^Vm`B02Sd$ zd9OC=)oQjLs?uP@ujco}ua$A+!BZCMU-weRp`5T1ODJZB z=(*Oh`f;&)dk4)%(pUm-HGr`jn>^gEL?ztrjv`=_U2O=I$l_3jXSrE1{RhBqERNRw>v@lC> zL^Ip9`KGz$(>73>N6--ViPl1YUyOAtsaFp9D+b3<~^|d=Y*(bZ_m)W z;I5lpOH{S7gwRFkR|DdUN=(cZv{w}y*$%$mlINtX*P4$EJ^82WK!t93Ds>Ufv_yY= zM}|^f>TD{1|KNE~%dbEV>hI28gIz*{cyevwf+}OSo;3k7_tKc*1R+9Msw?r&EgfsTlx zs#gz1cI)A!p<#{4IDpwqwy(|E+q+zB{YZMrcDxm!hwkl%QhQz0xF)iWWx&h$jHd_i z4mqh-C;1s)zsuxxTbnLiyd`1*$j{zZ+}Bs}>03oorB&X`B|#2?bwCN+6bOFTag1?} z5s8u=kLR0mWUbWcwlX*v0+W~p(L|(&wFlbW!BbBO>khu%uTr&>(x=s zZQa*Aw^>`0SzFgmv^1(|T*_$xKhd}*Zi{&`u5=}%DVr_qMGZ`bW55Wz>76*U_#n%~ z5euvb(U1tdz88lnE*Vm%vHH_)wiM?)NNCitt0)QA#Cg@0FN^qBf5qvQgdh=5e`+Qv z790ZpQVzA_4;`aZq_6Os^cMnu_E&1z-g-=`DX7?>C`HYGGOoxrBC4FeWxjadk!%EW z#&Qjwm8St|1)Mlcp91|%$pKYUXth$=ERG>nV-eYgRyB034Ckasoh<>#UEhP!qAot(2BB4z#S&^Knl;4~brpJQcr zqE%fd%Up`BU|6CrB8)^Aj1j=Ll=Tu){N%W^q_jGP!s#6XP1teIFKg7@L16Jar?R&8 z%CMNO;&Y|4D!UTDDXW#PTmtYU)1#|G`7;v6H+_L%qBnOL57^{}Z@rA|5~`ov1a z#6?&!J{5&Gba}YYW0AEsghiHSS=H)F`VCc|1b1+6xIuLiibiONEGm!)|LRaWCJys| zIr#DBusLzG&UuP1mYjM*`4UPg_L%X_ojmkY7J+8utg$MIF43sowLlhRO6ycz&>zRB zAj;{w$o0nV-nXrDvXCx(!Vpbq#fk5j4RMkMhM1w5PV(LKtS&_Y0KuNwI`vriGag+-is0G=OvKB6ocN}_wxk(#(UxiC-H@o_6I zrN>W`af_`ecvhZ-qQK|uJ=U^GA}_cLCvc3diSoo8x(*0HlxQH#4nD}&VLn*%IrLTj zEp99B?7Xa&;D2X;WY&JSGrk~1enws?GOYLbRR;SZawlVKadBOk|DP%o=*PdL{C023SaHw#dP3pbZD+c?4mm_ z2>_8pu_gWkzCbqU6N42YkK<`+4hD>>#(`7R@GkL-79%LQ{hIm~+TeSEKX+>z%4k%( zVMOo<0UeFN*}ZMWo>6szfvU2sRFxZw|K;ga{;xEWRVS0In*aFPuLdU~nqa!XM{ZLr z-kz3+qjBS|vU;*DvD^C(=R#Fzo$J`~cqKSx@n!H^T4l81HFYH50HU)k&V;mCw|XF<^TY9=OK^6#Ahebjnu@G(C@DKgdT7*Nj2qC zrf1LRMa?p@(zJ9-A;_cunhL+AXTjx;Yj&d-jSWQZR8lG2!}O>^J6UpW)d1<{%?Blb zZdiIjKKr<7w{(8wk!l;YJc~{xp%ht0x;PO?xb$@2JgF{8muO- z!ERD_z4jh;Z}L?4nmH3UL6A=A$Er7S#rs*hy{=JNuIJX^Sxe1Ljjr>nObzHopc)qh zr}vxudeTA*TPcw*rMjb$O;?9-$W&*SUr;J8!yMUK)qMn`Xc+whxHpAgG9j_ z1`qrbs)BO*rYkoG@JcyP7w0KVzUP8?4?gP^Ifgc0&|xofK#RU=B_9P zlh&p8jC;P$Ee|QmTHo%FsJsa|KwxFGRiR4r^1>^c$? z+iz$Ehz2Y-uh}neJxV}5%C>?~OWGAeS$TqwYdp8kW`OMu_PmjCV!&_~T91f#(sm?U z;dHEuqSV9~3ZuQqcQ7C^+SfXXeS|0pP0w!N)_T4;r4K@5pC~s!=X+);hgasJS?8}{ z0%?SIGq^D?&@~1s-_*`PMk*;@-mer0{h2k3@WXkT!B=&xp#0$U}7-f>3UzYPPX-zL*-Nm zKBxJJ9SdzGKlGefcqClnO&MpT3`z{RyT|5c3WxF>H%XLKw^gxfPN-UflE}jxzD4z*&h zc1OX5nvpM>DGSh%UlWhq)nq$Js4bhXWrY|Uc27W8l=ud-E z3N-+ikLwB>@~FzHmtd=_&W-A__76uTRp>fP&^loq#2c27Pd&mbUJ< zSy|<^gs;ZqtX_SbT?L9#3rbEI<9g&n0tK19uzcrtP>{04h2uLljmNVut7txy9-_zrB5iR~Xe=C`7sXZ>FB4)&#X&_<%_4Z($vBNKmFOxLd*ahR zPN?SEBnn35XrA1qhJjqie~NA>Av{0V&B$m5_Nqr7vEP=gX~*%tRDBNSjy9JR6RC<~ zS=0rg*D__WlxpH#jE}ClZ!tEw?VZF5#K|QUwCOMp;P*_alE;f+l^0cs`^zvYyCQHIG2et4v@-w*Ct2GOg+F#N9gcOnv_d&?){X^78?nINwNM_#bq+9 zmWc(HO2IZLe;pKLA&yt=@;l(#2Ot@#;iSqoRt?&M_>LBg*lyyH1^;_8=f45?W$Y+I47op4X! z4s73R6%;Y8={A+szU$)lO~cbtTluprV>80tW})dxA{u?n{Y@9zkpSF-CtO@!W>FEz zx74R(dAz2f6W_!Cuh~h!|0UahrmxT? zWCCX6jq54MQB-%behg?k%cuI7Af&K4Lkb?MyF3M?H&NtX7O|tdSvxAAnVIa!P@S0E zHNR4D%Oo|;-H_a*f(e1#R1#Zot+Q&v#m@~!afbGjB7IC}S>r@})4KGaJFqC2l=cg0)nawg~|hG>bc zC6y&1+=ri_L?6$)$~0g+j2#(>L>gr&0pm){u+V;1l%`f&+Uqi|No{Fhx3F9)D+&!G zi7!vdi4$QyoJwkK`9Y}ZcZrj}hIkGupw=YcCxl%c1{RYVDc~OK+oe%p)h*>rv^HDL zXfEgeHISfLIwvb+1Ge$y+7hDnSv|FB(}h3KQ$NOysU%Qwia6@2z)?qM z1V`7TBx_Vpb~0U;OUttri}A*7=C5p5_~^h$e!Gq{>fwFOi2$i%r|x)r_i6+;dl~UT zAcpZj;m)edk;RrCjW;?L0omaoNmR&wLw6_K&B#wryGNEZ%u~DJUy?sqtatBSq(5>J zx8A1e!G~7NqNaTP8g>M&p2k%=z2N$tQX}4k3!G^SqF72+eUg^|7ANZ6I!>nlj>zJ0 z6{HmmN*ACR&r$G=HIQb=$!3Y}zvnnCoA|@JC)VOB0pXg8^R}I`%9oDkw%LRF+MDiJ zWVU9`xyS?ns#>Km3RXdy{=nE0N7XnGEoIqQ=e2}!E(xa#52(=Wk4ZQMN_an>JT$k( z8~#@?Lcl;?F+c%BJS@!HGhgNSbfd9Lr3#}*tc;gYDbfQ4Dt*); z_BT3gDkVGJr@)-=8WhU9Gs|&G#Nw1otVB)a^F34ztQyPfReqnL0JU2qpGWINj_X#q zV_;Dq(S=PwY?|A!#7#4}c)d`3R?;Qvo}h7cyUiVNQRu#U&Z66RdZFo&p_1cQ>QU>&Rw zO3logiE<4ak+l0Lofsk(9J~DIp6z8|$W`bOy)bAmicH)^=&hwJTT0TYckJ4Xm0cCPEAiga z-k{R~ZQ0o;B9+#&iBFUFViIP|Q!C?~#e|~L(uBuw5H9anYV~EQRYw4Nlfp#C_0nhd zkA}QLrWxr8NvmLo1I#w^IN_g8-~nN;^R@>U-Y(PkP@1kP|6y0Lu_(&RU0&_G*jAvq z_~mZ^A;hEG5Q8?+Ob4mZ*<=x7Mr^nYWv+15ihc-X8JA+ug}Z+V=htO8E81wj-E_AX zY0a4YYrWL#{|x7{D~^3*E8?tZ4U#~4BRZYLI-Mn(7?apleqUiybhh=Mb{5tbNEWSH z!2KB3V{>)9kJBIEM7OSn7VopDBEH)Fg;vbtbem3x$+M^XmNE^M4oKpBRql1b``rmTly^--_&}HZw|kXkT{5LKuRop| zBw-Pf@I&gs4>e2QegtX&*qdx=ufFN@!l50~1eN9w{)n9xoCUIiurB^?g@e&t2<3ku zDa$;ZB^YDpkpE13B%Sz0?uOAcC+DU|l5%pQ14$B1Q)2?>pIa`_O63Il{iVd1IEU&+ zFD7BXn1+Ngx~A`D;S`Xkg-`4>%TV$tPY*N^#pn8AFQX4!Z3GUH)PFiq+WsJg=h8T# zfnH1|jg0fjkJ5Y=--lrc*-k3=M>K%cyZl8{5OC*>FMBWTjCXGlO&Uf`sMb}bS|4f!F17apg z#>8Hm+2E6v4462vj4 zb4{Zok35=3^_J9HE`cs^nJ>z>WYb%gZ&xp+wLY+QCQwVp{EK|k8NM{Thin!3#$Xf~ zsbvT;7s(#~7o^-{SW@e8uSxq??6FmD6!B%jNhJfpu?Udp31;wGY&*ic6{Z0MKNg8s z%eJ@wOGILR7?>fIEgWZYDY1#*GJ6WY>PT7rf1h~7E_Iou(X*0Tf|M;R?w5$eu^T6) zh;$D3NG+k)o>!_2i4Y&C`)s&aHw)zm2RAEiGFPMEBU#{P>G*NxdnPP+a`~2Mht#H4FA{j&D4?F`2`IsjdPA`^y4yC%( zmis!asBh)k@rq$!p+D1UmpH1f`QYIq+tNOS!!vd+aOMFULTQX~SzzZ8EpTe6xXB)P zR6|NV>LVwVBbXHuFCSmm&gF1QYN3;AW3y&uhO2aqkVIw4Z6`c>{Xmp93XCiPZqW|1 zePvmxx`NqA_pgh*`gN?~o-|$qB=Tt@h~%V{mT$b)h;EXx<3$(tr3CdHIvFL>r8Q?e zh#<-~)ib<`Ie;MwKB|5h`&CgWh=HtB(TKBWFXzOL$_;!Hg>BLKV>GDT3DekewL@=& zfU%G|zSk(p_eBwl61;=WpLCgty(Qf z^NV*1y)yMZQ0N;J#9M(+aP(OtFcdW4#)z4hy<3GAOlENoO!*r*&*;dT3L}zH6QFm4o zK|C=r`8uILXpiJ5Rj^9_T@14oN7AerOWIB8$RV)aLziRq^bErJo_um%k6=dB zMdnamnSjGA)RfTJq9G`-Y%4CY4;PhPA5AU}q)C*Q;N!J;^j@xz9>ZL_X*%r~q%P4F zJ$Q-(IaV@N?GV{rKF8CUkNjq!y9iuFdjvX+$m1?+GIHEA26{QnOYGN355GlsCn3gc>6{4KrU+R#)A->@rYg_7=kc2`IxMG=Zi3 zIGtc8z@xQ~y`I5QRIi%Yy4uyf0}_o1-S?19OeGvLx11Ct0*~5YATAZ|Io0-FuEg#&asQ_mVz>9{}n>91W(y9#RyrTxa*j>`o9@2j^}o7O(LGbz={> zsiCyWy)k$q6AW{Bo5q{*YI?8|3Jw~z93GZK-3SL z=4C=4S`W;L-1FiUy}MrqtMZ{8p-y;#g6ngp0+sT$e+j47!c|OsDcEf=BcRBV;(~r>i9l(1zd(s76yzDH=H(z`KvL z=``TfM%yBBK2gXQBWkf0GwFoOV#9Lf3lxm|9oLX**yS?(I#*B#H6f4NMyFbY`$*1} zW!;Y_NGIg>1}BEZ#j*sqnH560elm@xxWY9q3u2VSnc-s=N0D+QB!^_NnmsX1oFjS? z`euhlf#3HFdKvcacWKOtlmEUl;FzmiL{_?VMd^Zy#d)60cC7d1fv1K!*W;s$n3~vT zOzkOlw~JF-!S`aNp_%E9KNKQ-!-U&^GqzUsF#Oq?@C;G7m9~Sm;OM|N{y z4#{*DTPLuZ??GmfGO2a{=H^mtXz8<3#MdVIl0auz5Tbx&atwPTvV#1UfMN)a423U% zA6j573DlrJxnEU$RjDjBi$s4ZvF()M@Ts*eHNHTI%qcQEj!zC>ic;8dPV;Z{7;_Wn z_)1a3_V8ZRap*=e)dNl{YB|z5uE-##vJ}X)$U(={5>tJP2@b+3tQ2~JW+h8Gsd{$C z`bD_`Q*kAPC9rNkgdBNOQ620y6f29K=FuVNtf*CWP{OzUpZq_CXBy?7bdLw0?Y`H_ zmC(i_l#P@35}zd6nye@Z?q}KtQ&?O8n6>vT;;@W1VzGtlY$T-RJO{m*8^g`wE<2YE zsE5CF^(ZvUuM1H3sEWA(%>$jY0;IptTX89T`2gB118CQjRha@aJv$UR?qfDc=Tyix z={b{YS%0DT-vP5(JzUL08IZ=J83vtWq87$aFN5TEr{R*y*!n6JvQa(7bglHkiKziN z%__t~i@h5l7TCxyV6rLXpF-PRnJfYMX?h)Duv}^HQVxRT*^o%!Arr9mjXsqwpjz03KyVN_oY(t*%eaL zy0Suic8HFtVylt)I?hf*!HiiUj|lyy5!R5jPr>w6XSHmz1hE$*_cZK0}d- zofiX85K|Jp)ivg3D*Xb4BpOk3Rl=i^Gpa^aiF7VX$|Z9!Z>L3+_Sf^%LOfWtt8ZDY zjg7U<4t05E1Ad#xyD5urtevs2z9E+@j)dM~8_PvMK`Zkg&d_a@0ogE6Z|echk>}#W zt8{9qwV4~XZgJDvy9=W8v}_DfKPwTj?7vqXL{q<~3ynqIe(EJH_dRe4zl#xnsjlAW zpo$+li>cl4AUq%k3+%D)8fJ*yVVrGDzPZtrko2692T}@gD{Q6Iu6^(89)sHI#{P5s zQAG!-mPr`PinQq5k7+MbPfJFKqox)40JiM1-QNt!$CKpw3xmR}(NAbFNn>39xR8dt z1wshZ<{D5#p2pHQ1!V>NCIDFT^b+B&0Pq5Z?P3H~>LaX*hW$Rw|M4f6>hZPn0!NLb zdP8$Bwa8Z8sHp$8gZgGPV1r}b4)9#zEKrba*JyG5iS1mVtdmxRwc|H9tLX;LDq%&; zDBXVLpynXBn1nmuWN@Mu71GRz8c^r!V!}+;*pkMo7sH+*8eFx0W#JTzDiR_G-d-SU zr_4?Xo2PBX*q(W%PDe;JA@Pe@N!`vz_41=Dr33!Z*Xq*S6e8eCir<;Go0wyeT#Ppn zjHdvr)#S>ir~O*9Abv<6H|)*c*bO>MG+Ne3gAr(U=vU>}rrbnNkg9NNCmM05G1nCU zYqV7<*~J7>O6xHmVz^fcW}&B4>w=-`U8cET^DCGQK`zzxe{WXQb&w=TM2Ghj)RqV{ z8+#e`c9)0~xsq6@fLKY3IERVrRA4=PYn0hmXNxy9ZF=t-VPdaeuS7L&5i%$741ta@ zM%=_h%u5bGwzpBSW@h0s5olCbzUtuF<228^kXXtmphgw!Vm^nVJkWVl*M<|`!e-vf zubx{e;@&_)apj$Qf5r>;nKK)vZbvG@7A_GkQ4=nEH!&Za+i4fxKd7MbhU|jp3 zqPv*6ryu-<+baM`=Lun@+yU671jk3fD{#fKUHXy)2ZVP?hBiYUaSdUaP1`4yvZ7zX zxcpQE39{I2UAZuaU^>Z80$3|lMlAd@1Y-=vIM&bO;W`#CuiC$ebx4RWg@i=9n&eC( zdsQoGlCJ43T2d<1NK!I1GVW{;C6^rb0uFoeDJ1VU>tfcWUUt%oi56AQ@F-sfwUItW zkO&+N*Bo=m_&Q_4TQo(J#oOGp(sbW_{|Y{~Ld^dPhK!_}8vXa9L)bLA98!RJv4%Dw zxhQ%Ls%{mJ1A*|?Z0p*RLc7`(j!~biH}5IsrdEWvyV+d?XrXOrN-3ziGj?qb-eiuc zrIe``*=ykI#9ys)V1%buWl%9LZ;o++Ja44;8`}rQ*`}JV8VSnEN6o4oWO+wnH%@Lfk>vb2G6 zF=&#!29V2r$JmjNy48#p56#~wzm8m4&)JKJMpwLx>I*i%Oq7OSNmBw?@~`_005}Pa zH`ZJhrC;#+Hg?`s4B#4$z2P}DvieWdDNXdAq%YM+`xWa=2`jJ8w2*nek5Q7XWf2!a zee&H>!uqi;=xY?dr2K)bDHLOTuKdHxdYx^b(W8!u==WIA^_Az5NSn8ybJ*A~V!S7n zbTu1S(NT|WA644#LQf}tjnbVryV1!_l8dua3G6$*DG!fa(ev0BrLyG@gZQ zg@KuE%13uR008F5V2|PxMusppoLtg1%iK?Cr%yQfpuJH&)rzy!u4&af%SykfLi-&oY26*#7akKlBvxxP`2^=80PmGO)c4^&Ux~%76Hr^LUINM~&9|DL^F<`6AfV z@nx7SS^^nu$^+eA45 zX8<(aUoNyh(AqExah@xFRY=*uMLk~mf&@ss6symVcFj!U?-g&T_cAZsZgy^lm(EbU ziR<6lOw(Ew<2tB5r12>VQ_J;aek>R>0!}Wym1vb;x4lU1iBc9dzQ!KABX4pIQ2dh# zsTH&RekH*-GUW_2>55vRQG&1Mprdwy)FiMQ>z(QH%;fBgPas^X4&DWI*LQuZW7Vvew3^l(_zRi?FI2&cOSleE5=mc}SK z$OuWVyDz7q=>kA-qz+dJfgiwm7EMdY-Uds-r_gNfW9mIAFXW?BPfc51yGF^D@4!0u z77#?E+Ho}Euf3Rsw<_~|0k%bWk#OZHRC*{AN0r25n6!d^ZP(!49sHyP1%q3t8W7>#Xuvf6TnXK%ZzoIzT5J-`Vj^xOYl`J zuUhnUGvJgDpo5ebB2d-5BPCjQ`+6a-O38?yYP_qA!0yb=Z9%=$!Eu^R3G@S4FYd|4Atfq;-s6ly5@Kf zhnc|9u0lh#tL5a5nYK2AyG>t@_SIec!Tbl6?$pyME1_wrQrs{`0_?px-dOEj@g$}0 zC+6I_4+lv!CP$+7tEFSfQ(kytpsk(I)iyZJ5z{_0lWG*YE`+=$mVXjm4R*w2)2SwSODz}4&Zo`rsQqTc+5yke*e0#dvxNCKFJOTR^WjQc)&(f+?o z+w~GVr?c1i?Yw(i+aFWf-R*BKOY*(u+FN z_)^vq$c(O83pW{Ea?yf70*>*^SJ;Z^&7|A0UI$6*`-AsWJ@T=s#We8a3bk4+QtPH3 z>UlX=4hentM$#wll0I>ZpAYrtW#nsc4$sgUIy3RGqbCLnv~JDr69w_+E@kDMFJo=e zJX6iICK<_MS?oatoY0)CyEZy@mwO<2$6nxyN4!D)3JBskoS@nl3=?2%nPY~6+DX0v z>CE;ryLK6wH${wne zsxoQ49r>-aIXy|=#$j2rn-%$gxqGwiHgaWM_kmPns28Piu9y@}(=<)flq}14>a4!+ z_4Mca{|JytS$0*;s=4;s+ZRqT6HOp`1OmX#xCl;tOx2Kx_?zN)>oZ^lAcnK?>|xSy zU}2LO%84Y>N4ZSqRV+YSDL3p1Bht1udu~RsvzZJnOQU0v?%!049_-sJbjwtv&O*DX zm_oqeEymL$6h)KU%bGysEw!iNQad+Av!vj$5Hgk8bw&NxMWm!Y!vr$5=IcpyZ(TIT z|8-1`S$d|%fpTSyFqkV2)f)T~8GEho8!whLi@+zt&(+=*q5disi2h(h$&QVY94uZ% z;tos9jI5_(JU8{t3ASH(L4sEIQVy06T}MB%#Jo>#X{-6(ylK^|Be>i1)lHDlAT&3Z z@FJynKc(X3kP})T%l+O%#i^;haq&>8OUNux(X9Y2Q#6pVxnj>rSr9!`)bNh0luFf@ zqa4S%zrAPk+jvi+46kkpC}Z8TaTTY^UZ@GM4Pi#AN1D{u(u<6)xS(!En}R*GlUy?J|Frhids#f$HIM-4wm0o&0?Ot8&5 zxz$4M(>adAm-bv{dl9XGIBhLSXU)1<;OSa=ERN;tgz3B&Amxo>1GTV4dG7sf9#N4$H#qu$1T4QzH4 z>Hw;NMe9cV2f(R9KN88yto8DeB#%piy zF)YClysP)!^vsSTHZjHuXt?$~px(PV#n?;l)AJ1y@s*B(bqnKj=QPgwA z$93+NHf^Jj?<(SrFwNI_KOU>YsMlGxUn}(u(~?U;SyC>?Wnuqk^dt{uP!YkoXw6x5 z5hog(S%yI`rq~Zgg`eMDG39q-xlFL`aMujT*gruWC&NDGS4W}7AMlx$f5*za^W(~x z;@T$phJe0pxg4(Y3pZ(d&6r_dUmkF_<5@X#a>pl^`O1J4proo#!XsTZtExecJA8N- zRo@>nLJEf^*wUed>OiH5@GMueyMnlPx~FjL=u9kzUzh3rdlvy_nwoQd34pzuYmM`| zI;tBIX50|yy1EP`422TyW-0n2bC^7V9UNf^2(*XW)Q#&lM=KdRZ18lteE4^x=MbDU zX3Kn~&Bz%jRnC@TL1uA>ZylB-r6J14INoSEOgw3Ay+3YSXxf;quSDZ9m6mWF%vN_X z1oK_Yt)8pLc(<*E_l$VtG2@{bEKYgU9=j?OCXVQlVhNmRY&j9VGN`1*Fh#&mc|w6< z6!sb?fjHi5ouHOBr76C1`nD>bhn}jd0oG?ITGtdu{=DZlsdX@4U7!LeZ6S8Q5CLbI9Xk0GxUy6OLAjm@zg#G8H5MiRCmEjax7CgQF-@vzLGqL z)=p&f*hW^#y(q{iv4wPjohV;s#Fvpo6{HyHawlr_DWb}xy2F8Fvgt?IxLr;I5{)AJ zYYf#4X=9myWBgx)w{=@$z;WBl=Cyfq>PV!M2-C{qv^FB_GkUhLD$Yyj?(4OIi2x3! zkvLW$x!fzVWCZmiYPo+K9KIPTDWfZ8YUub^267-S__m7gj{qOH;vlT%uHDVnk8tBq zP@-R?NsgRGidA30)PaMo#dwbJ9+|LtN|3I`7S$QSw5qM^PfLP% z?hAhGQIVFbP8J{nGYih|ADdrlLg!GJ6AH7gcJOfYF z8*wlKFw$4)nOOn?fyzXpl0vR3ib|_A$aZ1@Bp?1Jxau^fM#u+azy$ur zc|Q(kXH@gV8{9F-3U14ZKHbS=inh#L8TikY6Ks*B7aMI$((E6ScZJe>td95t!2Cj{ zCVq3rtr0lPhHvd?$KslN`MB*@=dILWkG5m#0l+X|WPxG{C}pd}DI(FX|L-4u7ZAe* zumlYDEY?C@1Si>@+&aUA$oKWRSMs?R1RTMlmH!oflnF+nIGaJwTVJ2fyqkA0D zQPb9w(?uo(G_rM4Z)BcuXphSdS7f$PnlISd$qY64{=D!#dI46)yBf1Pn|C#4+AZn; z#KXQDp%lUy3HLq~1Ywr3hQNaZB_Qynb!?L{dbFqY6LYf{`YM=PP{Pq?X(w5?V@P!` z^&aiPtKtUrnwLb-Zi4z|%ZHp=9>O}Rn>({OACF&y#h}P>*uTvNGKFO2_O-RzQqWJz zj{v=y@qH6HWlZT99MTdk%vZ}a#p`g4w7;VLjrQpCuj7wglJRTLt6`0F`ngGOJ41tBMt4U-o65v;G^)DWE< zD^1ZQ16y$x=UA^u(-_-(9x#nwl9SQ!EYd{DP)J3hmOwYs@zTIox6Wd$#qoI*o5r>u zOb*PaIIchE4z}2^A?SducP97dee>L%jxM~9G}2ctA{Jmq>|M&}5Ro?3MoHt?|(Slb7;`oP7;+$F4?YdCYUs;b?5K+#|Igx~w?efN~cG8+mneHIQ_1*X_2Qih@} z4XBr^>fV1O*a?6yI%|EipvStOvb;LqB2uE;T7(V3-P`9+@T&_u=)*bLqdTwi{bilH z;OOkuu}xm8W;>x_$2-e{G%q+EJ!56*m-!|_`}HMkZlrH{l=H0>NKJ|D`D;IStT26> zz>PF%UJbOwR|c_7+=EB&43KdU_m@C7yl6Gm&2L2Qkf{TufiuKA`@*BRU$V0?4;kV6 zce>9*4V882RV~l7zn{mNeTLovfT`_=+_E|1up6rMbvYK#O_7Ga8x>CmHxj$h^tWW6 zKW&<*G!EX_66~>&tnNSW<}5sOOmcp~owoE%ng>1Q{jEO2;II1=*jy5C@kYA$d$htW zc6Z}Ml)b&6#SxT|`h0Hm4C5qsGEc;h zakPJmBi@a$Dzbjx)~sTiJYov1H>9NKiMD{jxJ!-bhF`fWS*~z%PXMI zpLw-}|E&F{|8{fr-N|}*)h2!;Jjuh1TX^nJmT9c?fKLf-vvJe>X>}z$b-qKdt>*h} zTwju=(87xHHL8z%rGKDge)5Gf{6LiwjUnHzN9g0Gb?R8?=pwG=Vl57+v9@v{ppOQ3 zoN7|bs2HQrKN@0V{k!JTr%G6Z=HLL}hh-{a`C>e)BvGnvs$0jqLg9ls?TCK1BA}qW-AWRfG^tn1_-pF9LZ}3nl z{Kjf2*t==}*%B#ocGL|)(`~o3wBx>o`Hcmc1*2_J{}+COD{Ojy(!Xe>BrBMqmw z676o~6;YW2(tBq0=MQclxvG#2DYexo=bLTmbU4Fr>cg`ls*W8JC?udt4d!VuG(r*c zb~iaUR{_L-uu+5&BTCP-0;H*SDRWzSk)XMwzUT#PsFS4DJY0giADg|EwMXP@8;F}V|!X7==bIJ+m%If4jK?gsIaS*yh98yRMx?J`cDlAaLCt$0y% zv_U4e<5UB!&_-ZmAp&vMv58|V4AiWfTyT)%xmvUt?Q*LzReh?j=3~5tctZ-QCzgj5 zgkcsX=2>*+2}AsuoG5$pL5%OWB)v$?$FzOZpZgO(SG{EL{{UWupSdzC}+%!P^> zyg(6=K8}waKHAEMXT0jvD|MFkGTLt?Te(6J*k0_ug?FFQ0#52P37t^tGEY3|FBC2iJz!4zsx(@s@AK z`lbazi1;oV>d$M+$4DdNy7Oi`)=3IrsIf!r3pjEzAlG^Vz|Iq|V4mG)KT+c~@Cz)> zQFdqq2taclV?(joXEEkWtdMg2{$!3;x#Sm4P= zd$6QG3tX$L%~{aTpuvX(-8-mI)uHCd&;hZCBm2OiVst;ZBRb=2>y^HDF96d&xEcA~ zkQ6e>e}ky)cpvJ2FWRZwtf1K)$vCRZ?Amz2^PuNtQ;=8u(pOz_bdba_-ge|BMZ zzR>PYR*hd?K#$`iDvyCiKF8n?7xXEcReMZnXj}8qo_p z$5RK5@fbAB>bH6Dp%_%h>8(^^Q8k~Z1Rhs-I;#Fab-&M&bJY_7fxz?X7V4F;;69!ePL9;J%+dgy+`m!3u~4r`GS?MzE)m*j>_+>}AEmn7HKG z;)z5$7Jzt*;$D5;j+{j=8&Y3GvoeyFCL|8y+A0T~Gb*CFVvV?OD55-Yd>9B3R)Q^t zVF87(*44YlwZHfBmYk6;R93rj0&E9oN#NLuyrG2PcaVbgG*|Gm`pw1lPer+hp84S2 z=$DoDGh40Sgu5iIL&LFZJR)}JAl^fT0uWmA*4MFXMgCMJZ7pt*u{;T9|GGqOVzCKe zRXG+ctkFsw{8fbJ5S33;+eh*AM8E`DZ{8wC0Crf-?y0eju+-O;b`?=&r0*bZxl%8@ z7;2dWiRsHCLSX@L983_dhSz8X_X6=nQ1DV+;Pa?vF21cI1sI#NV&(er0)r6Zk*jl@ zB<{#oPKifPax!9>Y`vLHd3Q&^DF2w1xbFXV+G5Qw9M(wbnzPYk_8`8pz3b_^6_!*z zVy0Z$%h-Uf%mN5hNFlB8i{d`TZ*x8fF`(vZYLb;`WW{s0>}04Lp$W4bz0D?M2G1b5Ww zllaf+yZj}5hDsW%g1ggX(X zi8^wx;#VjH5c6QB?LJ#gtdG2Y^$I7QnK?t>e?U=jN)|FTXnyV;p*k}I6LUQX< z=%W6KHg^+gCTDu%HYBMqMIK}Gnkg7Fk)ts)NX(l5t671=@8JG*k|u%Fx9Cb7&w_hF zGY5g^weC`f3TOyZ4-&;zb7s9QwI_bjn7caP5QG^4aj6$30qE{KCBs>;= zqlH&3qp~)%LcHLl%2U9`ujaVZ=Z-KpC2Z$nk;ef8RpJ^K(4K)!-QuNkI@nbo7py=A zv6X-4m_v{R4R*72V<6n1RUExL%GpdOc=u zVGJC&y$N{7LzrO&Y`lUvZ2tS;o)&O*`1Lfn7%`w5FG_-!b4z9V5Mqy)YCi1!xYQ|v ze`L?oq{}Sig5dGGA!v>eSy{P6ub~5evFMLcMpZ!+>^!rN^;ohbBJ1E|?5sGi;$~4Y zt&=w6&H(fXt{1=YU+as<)z=aybD~ej;hZum0boTFZ@Pr6sIz&ms4g*XL-4Cr)VV#E zMQ@?wpIS3;sp|f;VA^FHw$>8&AojPXK&3GiqrZzPrc&n$%A;>`vd=mT~~gI zA+f%cye=ZQb^;(DlJm|+hUloLaD`Gm)NZ4?gRyDZz5VcV%6YXCvao482}R&w)U&L3 z_ywUpJZ}U8lWuh*tGm5LH{DfB{G{oTyaQfuKgp3|YivAxu0g7%NFJe#x1-*)ufIxb z?Z~(Jwzj7Z2G546_4$gY`;dRL9$pU%0sFVS2hQz>M|XN~8&Ad%OSFinFwfLIw(bE_jAaL;G%ZZC^dzM#_*` zr@Pon59794MzlDNkYsRXyduu0IB@hDz6GX293Xp%Nqc#NJ$tF11In0m3RYsub%Eps zw8p^UAGtM?Fv)*n^3#GS`DM-Szr;m&X{yrjZiiZ|2q@IBTs3POCz_k5VVLQfl5_M5 z7MKq*{ym|B1rypikE1J&D<6605Q?LZxd=jM>f4Je^{obHEDP2cN5-B&3+;W&2?#*L z3-CSNMcU6mS2YXr>v$V|#SjN~ywf)wkivxIrIqis4OH)+p$_PAvINJ(8eyKD#sP2k z`(tb1VE)peZOu4A;$WU3NX(eO?=-jYA&JQ}PeVF~I-cWaM$g3D{#|@Ei=V8&!QzL; zaO-me=96;^h^_D1gpuC-gxkO69eZEGU-NQuNc7(|N^pgan%> zxDgMq^U#v_E$RHT_-HTVqo^{)UqzOqifM(MDoyp{sJ%0Xxi{G&Bk0QwRVFKeEqXtx zSR(hxpeQ^s{yUNuefvb0yRcQ{5nuO!DVstg<+o-#I%h4hi zTr|NN&|~%Z5gp_aR$0tlgge(>a)CC-RjF-q1pJ7X9I~Zf(VUY;Xim7hvD>LLsPsKY zI6mP^?;^dWoKnSsHxoWvwMr_LVJ1v!o~cF64x7ousoLbmn6pvOE~4*prd-TI**>FL zLM%FvLZZq4UEH}4TwQvLRBK9D%GBwD&kE7S7R{}?9AphQW$2EqXM8k$f6h*D_z(dP zF#O6mYvXdy-VgXoF+) zckEV6s~g5zEj&iaz~*AGauf|@*#S-MBNTlRwwyoEdGA&ZWBxET;xUY4APfny3K1|F zArX*FG%uUOfp39Kvy}IL#B$99qhf?Rhfd;1S__2Xeg39EXv)8UJe%S(8%Ha*&A?A$`N|oX!wA5%bxo<{ zNee|Lr%C8bD%rlLABT?l#)gxEZj~(jFRVx1B*_@fM>+$Xn2_L2JD!aN3XRR{IJQ$h z-mVJbr^)orIyYE*jpQzI`l&Uz!xZhSI7f3XxH`v^n(!5b0@VIQT<7Jld1zuenpPz8 z`vgjKBcdQ60yXm~tf1tDgV$|jbZSapg~@-3b<8-`Dca2r%b8Gl z7A=>2(ZTAw=-@QS3zglS(JUzalZdhn?IYjt$c6Dd57i!k)UyU=Hjj{F+g{pvg@zOZ zB&KVNxekSoK)owM9|8>iQ>4g0g}nSzKHqtj!+itKC2f zUx&jGu69`D+dwtizs_xAYNdo5qF<8B9Qj}}%}tZ3-lhi?)`jDYfs~k<`gwy|pb?7P zhU!ffVGzP|uzYsVax@u#`)p_bnVQVB(|>7)$)FW1aFjs`+{DuTtT%Xc?(LMevtW`7 zYblg^^4;dTbV=$;Na|Vm7SDCp;2~5UC+TXiVZU>cMl6)F0Athu7d(mm;1EHb4vNL& zG_?6lFwksxKm4*%HBYItxVhLzX~e;D!Gzx6ib@Ba=NoA7B#8Rp{6PJhs59ein%^(e zv0UL>@H=^E>X@1AbY;QdQK$Y>kEs$uxun_>#V6vO;JC874-NObGvv_ZD$VYG3+1@m z_$la-NWIO$rfkF!a^N>?F4S*%zu$U zk4Cr=l3NI;eBJZ`oh8$agIGPT*rd{ajP}ztO5PXffz#lN96b3GA}!gULU)u65@vxU zL^5%zz|i&~W`V8r`-IQ3- zoljThRbe}}<92lsxe717T^LT*nsxyq3oEQ6F8FQB@Un`ITr@;tTptlTDAAbH{Re<)eTB_GwBR9$oN#3}h#lnnCcG3$m zo9FWS#34_|C)~bxt@>y2V$9HLI3+A>ZzoO2{CA@<%^m_Pq@S*aU#HXo*9>o0t6fqO zvw_5LUVBSA=At=VOfN|235706M-i*Ra~hPY@sA6B=;h_BUO4VbudnN6Z?fzyPmRl1 zxyzULJb}kCmN1zwL_P#?%5xYpsU7lUt%B4>Mr!pZb2p(mhg|?#iwuf(zJ8<|jqoYE zedcLc)bJHOx@BpLY*{E!92?N)C@U`U=;yP61)c{atS;v7sc}5y%R+-VYW;**nA-D* zPWd4^G+q@AyvIs0RDxQnQmCd>Bn^W+cD;sdVs_+9;GZSoLsKuYx}g!Sz3O1cU>k<{ zGHx|8jZqPx*c2P1;GTjCoeZZglQ(DMYvGU`Lv^$k!!2ZAB-B10zCzq;SGO{&uL7-( zCsM<-sLuv7!@3^$&(t}moA7WhvcuCfRq8Bpa>*x?Tko#2Tmjcm6^0(u5h#LEX9Y_l z_cWF)-Zea=kDxnb1^o$w(cp>|Ns7$pm}8!h5Ed-y1OuyOz}>tJSIUirg;diT$Qey* zEDfi#MqXDQ|6MCxu&UBx8>4eE(oPa-KO8;-Zt@n$0*!D2exx4HRH8Pquvyx_vfH5G}Q3&|$X8=Ni@CFUhNB4ZJoB1?PbPD!;JQmaL6|5nN5APOc4dJEn$ zlt63oReQ1IRusov3WQ`$RRT$~*Y+hYIgT%V4-Zmp+{BC5R&^}O8N5qFHs>6>_L~-# z+dYK;bUS9l2(N$`y zNNlm3FN@{7q9HNoQZ^U|!I!ryls0=%wbRI|t2~Wg5$!IPI@?bNZe|8?R5ucFHCsk9 zpVm>`T4J)>8QL;z0(dq%IGicWZ6P?~r`kH^X&s_|Egx;O?FmUT>T>}k3Mcm=eP{Xl zoTs|D%4W()36LBhq&N9`(&-J1t^SB>)G;%=FUW`P(*5L4-u59K2rd?e^e9flpEiiK zh6lr?zDZzfZHYhg8r8OT6Iw53F^$Q>p1>E9D1{9WVX25abQ;*TQ7bRzJAe{ zP7)Trlq~H5^WWyr*5Vvdl8`y~Qf=R(O>aEaA$~#B<)Q9%65Or5MR)+RcedsKEkA(j=ACMRcMFu7di2nd`0s8>e>a8Xp zEhZv#(X@t5-*xuOvHT-4y%$#hWeDv@lB*mT!r z9U{|1%-unTenplL9diqtyUXA1~5=>D10>&uA;O>j9FJ3{(GdB2_X&M28Y zf*&#Dwe<-(8?n#GOj&1Hv2eN`#qOuXU8MO~;c1Ks>rbH1Xs@xp@Q_@eK-AElM({tC z1NHS6%j_w)fwRV?rW<*iLe81ozV8>y2^ zrKTrs8STS9{R4edP+UC7^a_fnR!q~ER};Z>*{{6;FfbUWa2sdJff6!q;Q`SlE%Oa| zf%VtF^eK{#_f!`yWtmm4%)T07iahLP6r#SpLB#7=2&>zutDG(fC|0#pQE>`&B8d;r z&>%m7R+W0>>CdRgT1dKl&M=~=uF_JSqN=z;`m}JxGY*kkv5FKa6`a%43MWY}AL&iK zAvkNS7rf}2MHj|u>U8C?4rPb1S|CwEFkA<&CcPJJEr6$6P%St=y4U{((!<$^798=cBL*xUpkz++wP+%kOH4GSm9HB9vQHW4m62RJiG8qK zl6Hm9!V)z^OzV2J6Rj1N@K_^Cl0N%6{aH1p*uTk1VkefqR6D%1z^Z<;JJT4Rp|hD9 z)24PbxeseK8aqt3HgNMq1Tm`NxpFdoyJdOad)uc00C6vq@G%NQ23ne!}vmgP^ge1Ten z3Qf42HA)YE)?&Sd2=1TcEHRY#GwMC20xxOu^(OiXoItnDayxpaAsoUz9$spKRakw3 zzvTO4K1x5Q1AM}v&BFC5&&UBg!ATKv zPim+99+#CV2!&~_sorDI@lwCbVgh~UnAKb3zSdigSz{ctu)@~r@)Q`O-dPT2@@CwK z!7%Xt&#?URzuy3P36N&x?CPASn969qDp=zg^i+t#XyF-Nu7`b-1xpk?*8|SN=htBb zZc_l30Q)UfJaoZ-0|N>Q@<7$PJ7;g9UTMdwikv_YjpLqrYUeH?x#g+%?%^Tfc;tD2 zIQz>}zI^5xOybus`FgIDRjW_#ET)RFfJ|*DaBWTTbN@vs%`6}74wHiQ#@(KQ4(dw^&2@>X;0r&?S*9s zvWlM_Bm2wJ3=tI~)j^mwt+v_mZ&jK;Wg?CT; zM%gRDBS%NoQV|^jmk@Q71b%Z&Dr7vVVkudy=}Q`jRSJpW*RpV_6alVczlxD7ze_2S z(1fmHs;_Azq@}2jQZPC~C3TF;8*(5jPnL)>59WL)I@s{vyaXGF35=skLPp z)MdWC!i$SeLp2+Qi%+3nif)tO9=d!K!y_xtSq=rNR>g|~2`ICYv6G|=og zMv|OZH1!&GWU9=Vy9;-{<;io_Q)2xHLn!f<-sH>Hof| zdhQYDPy`Pt*uPM)k9-c#=qU?M<|V;yIztdF{**c7om8FaT?v6_Tb;UXhz?Q`{8ijK z9qf$^9jPDDyJ*Xzjxd>likF1)mFI!Fk`|lKuX0wReDPF@`+{PE2-{MG;dtDjLL~dQ zJOg9P*@!$~PC?aKU>Z!LNVNtqE!9)HW6Ww9I?b?&i9H#l*-6qqpFV8F6Vtq`0D^qM zQ=9N@O(xWbV(Y3SsnG9?@anbN`)br_p-LZ9XA9E_$)ud5;wF7#@sHFDVKN~_bFF$` zTFx)O)k#s!V&$t^Sr160n+(XDUFU;v6{m4GMpr86w9>gTD*VL1yw+$)jcJgek*A{n z6kWd$@6(lzY6=TA= ztL*gtpF)EWJdK9=W5@muPrkkuGm@C$frATT3$KSd!%%~Mc`|9)DqA0_`eJEBY~T?W zlPuZ%dA!N&zg3JPGHFs);}y{x3;6y!;c5g2t} z>sP`I^IGG8pocl{*1IXPMNEQ( z+Qz01o{LGVCce%gR8EXlPX^reROFX}aE+=}so7NTbBJ7+&XNXK$nb#T6(5X$FFC{z zi|TKz4O|9lUb5k5p3-cV(Qyc0WB3`ifLmappw(w8=m`tT3h2Y+jV_OqD)_1B_=9(> zPJ^p1!qh~#wk}{c5+;^PWy%B_07asi_Y(#x8urh9-@m!2?BS$gHAXo8MDjnKBg%Nq z2!b^9ej!jC(t!1hO>wo=@B*^x`~v&ameHU@>(ZQK-ZWSxnJd?)OSr#e0#P+h{#(e3% zxc#(m>KvmZMcbV7mN@jJ-O^;4ua5T))#ddP_CWHn%u@pOoQDe75m2+K z(lX)q5QA#>z(W-+j)?Ww_-AV5D*d#aE9T~gSjf(G1xJowmXpk61}Ey4@W_+Wfq9VHG8>*M&i=hNB45|?DWa!=YjBJWLu4EpmBe%!=A#>LeSyOh3K+a zVceG$iv=Ps5)i*!kl?j+Fz;j!B=t%@mR9;tHqa+L}kji#i641LVpyN9L|>f7RP99|h~{ z6(zyzm+WXvS6~ndtvS@mqK5>a_zbFCh4apoc>ECE&Lk# zpi$^WB}{9C+Kwp73mrXhP=iH7U=WD7}Z3c<>VTEk*XX#Y4UOyPJREwTAE~pXbm&(ETRHcDk@X z9}20hGdf&BdFsB>#ngfd__lRO@j;1&gb<`BdVQC9E|$AVxiBKt4UAai8K2 zquWiUJ0~pAn5yZ}cs06~oy_nQ#>&pX$!RVs{oCQ0&xNUr%y)dt1yU>NQv9|tbDZGJ zvz9L6%mz48Ehy7QY*WsS$S}eT7!%P%=>S*FEMS|DqAC@&@Ay3 zXKA;dnhB=HyI0j*kq;bRQ&Kf&X+b43ezC%9_a)=m$X2y~Q6LtXGi@^UL*@Q6&eCA( zUT`|b6Bbv2H?d>aId7>PqjkKqEXKDA>_JPjifpTfnGqc+MA5=yU1N9?WEtPdrZY5> zIYvf`O3fxxq}1(mrKY&agNykryj~=oCVU)mqVz0v`{-MQ6FD^Q4@UTN5H90Lg=7~= z+N0RLvVnJ*6?29cs2R&9ynrO^97WyToCNuhUT_HmU4fjJqP#{8V4H9SFWe(7YZ%U%kF(x|)`-skYK^_N&=?liz#Mgf- zd0dVfosLMH<_+&wn(ov8`KMZWh{#_iO=Z3meuKVolB^ofwfcgXC!|Dj7;e@gz87T= z=UT-OYR9Vq(?E|AEpb`US6x3~!-dz0z2wHkx7jF{^fI~jUrSCl>T};Qr_rfzGtPnUz}J*^mh9KXu5q9_zXj@0Y1gK z7KNs-F#ZTgG!Q|;k|SVl`yashF_emsQ%S8X7@D08?#c}&|2cBR*0`7EMe|H7Yy2|g zAaqY_H?@$HgoWhwKT8TO`15p4GeXWW zFFspt(~74`fMq4j_99BAT1j#fe}(2#;~8j>E)c9m4d}N`P^yK(ZaZf9@J@uM@v`PG z?XpBC=#32)@{FXkg1O+7CywVMgB9lpi27=v ztN_H`&nCCGy1s@J&Vx?%m#grSzWsctp3}cqyU1X~rAyamYgYQPC|p0!DyNDsar`H{ zJ4HA_BDOHvZV(r}j4Pen1)N{Dm>Uzw2bZ|M)nWnhCH)AA4?E`637(U%lJh4#+Sr`zfvN9F7kydGmMdN z|D;+=&svQ>V1_c0XJH(E5>m}O%*yxnPimd6w3mLGHEHv@Mx6p3YHBXzdJ>OOpXqR&!Z$*^ z4n0xD#PdB0RnA6{vNXkyycY5d*%Lnm;d6PZ`c`6#X_kKJ1J=+WWt$$)R6`fchULlY z{!;a#u5I_^<6O{zS?s550>7SGV(IDT)7LGDu?qZUP`XCT!Dm1!#{!;1b`AJ~r-oO4 zhZ@h9+Pb9oe%WERuTz|7hVl;3} zZi(XhwXno{dan)KT(j5kyv!!pEuB?Moc_W0*g@%cPt~%k97H`|o;OR#g;G|jF7#s# zXLG9F=?C%_yIi|`Tiuz;ht*l7AV7zAr`1EglQZ*!UAv;#wZx>gFU|mNu*ro`{yVO; z*p6E+1~+nP?klDxsuXvQZ_jJjbc^GwsQ~a)=8COObKCb$MAE)c z5wTn{3x1KDU-V!r@u{7=nGd#FrxlgBKKHx(IRas{O@~{vWP$M9<~lN1a64|Y8IrBd zAhvWfJ0Ev+Q#%ZD(bg5B0&|XL=wfSjDQd?~=H9Fn43|@@|EH>%w+?SM4g})pg33HS zw;st$qovK4ISskDtp7iB58YAwotD%1y0z?5>)+yhm;N(_yPVcorA*sMuzxy3zA0 zf>>gG5IT4ckOu0OJA4sYabQGChA@plaM9Kerd0wg?j+i=S=c%XDi0n(Cm&4`o;~D` zhlUS&H&+$NXuY(xj}6k_Ru}w1Ki`(*54XSFpXz7p-2+c`acUS_AJ^fT8)6_^kmUiwU`zKBomp15JwN{v) z(4+2E=>3>;Olfci@}{;pL7WMc1uCn$Ku-=Vm+ zxa2_Sndl{M1xCub$1N6-o&sI}N7-xGZ1J$UuN>9i{(4A$5ik$mwSOULBV62{4?z2;2g_x2}wU8W*d? zl4x1D03~tc%q;KJvauOHq%q1xdc1aX5q!u%w84)Ogsmn;1VVbd2InfXQR6CT)(SKT zVWVdhWl>#b?016ivby3Yw!&@2#;Hwfmvfn&#CZ6+N>>!=X}2-tB>0e(Ix zWG}E#NcMh0p~LDZbZ@XgbQ+O?JW(l68_H#0W+&=9(sn$C_%OdKhFJCgExF7p6+9wF z3mtX_RJ=!$P>>A-flpi99f>CXhL7#5o7&yyHI;rwiSbyBM{`RDE~>7Me%8F;veH?Q zdb7e47UuNe4#2=LE^7n6yD_<1&84a-Bm&BW(l)fT!x7KPb4FTLTAAF(t_f zu|aO>3<)(B5$NzA)YVhf_OzK&?UTx}Ff()nLtGV~Wz!~wTM$dLm)2=|xMvgs-;C!}_ z?yY8bU+s03jZQZ{Ia=N27;B{)tt>Ob+Y==0jAR_k)sdO0-CPPZ)jmsgSK(uhmZ3sK z*c71FK{Md?2+FEg#In7c2ZNNZZ^;>p94Dbbm6U7F4XAi-!rv9=6RN={Z)MVH&=1w4 zO&or#hO}}QWb==k@QxB)OrO>qGaepVCG@F+H@?00tSY#WdD(Z8D(+|+a_k-&mJot~ zq1ERK5Y$uS$~3Z%5R-*7EI$;FlRB?rAKj&yeEsvjXd|FI^6l3n(9v+u&HhR>)sGV? zS{o7a(E34Fn;73W7h=A+wdR7YZ$_YcZhg7KFwnF_uoa=iE@yj5hO*M=%2U(!w>TX8 zRcGz}Rh*y#+pfxr6J#e_d1v&cZ=z{gd*4*E3F|V`7b#LD7lMw%%Coly7u8~Q*H5UU zufCWAw8(UQ<60lo6ZvWJ2*Vfl44zeaw6RMP2A`C)H$X5>NLOYt@YQq)6MkL{C(4AO zBSon{*n1KTu}x%8oRSG?tqnM(7Bi`~GZkIx_K{2_|(E|a+> z1l}`|g#S#@-3NZ?>%v1i6A>KChN1ki7HqNrhDNlJCE^<+o*O$CT!;rF?<*s=`N{qU2@IzO! zv^GjV=X^wpJ(p>nRps?9uNl_CUAA%0liG*eWp4Nl^T0m(=q#p6{g(p`yiqAU2F~U3 zhn6UKGN~8zBfrkE* zhtlJKvTd^30^gURK5r}G11S2p-~&8>M#&vzpcyvAkvYbha62Xzl*4l|&|2GYUL6Gsvm*tsVZ+F=HS~v8xfs zRn5WrTeH~yz7}5~(phy9Gupv5Qxi1b#+99;7OImyWGbPT}A-Y+EqE<1SGzEWQdGyTmay9S9}uexJgGq z+m5*nqWHsyjm3Z?Cp=5yqP>%F3Wl@3YA)h)u?VV@#OVzl6?YVQT#2=9shs{T{OX(Q zwK*DqvXRYIXY$5+=5>4ut+J*To468U#UsoDzgEZkf`xJ^8eJhlzp%fxgha8qGS&xK zNGCeLJ17GIH_yPvYFi3RykgX!q}m|JCtH2Vtc|v3E1_OmGn)$yi(lqgtJTT+u+*)= zMZ4P;K33)Eer*hvwC{+Sb+wiar;hFylW1r%Ht|Z`!se`uYaE*G>}&-1%H5W($W!KU zK;W~@wXnO(EzRzLW;CDdJ{xpNZ9Q7#vmDLVT$I}^&B;9#UXfF^HyiDpte*lm?QyLC zl-eH^B&3etS&oKZerouhhNY<8>=CVj=fw$_sXdu`2<@-HJo>4%M_LOX-tC=4dq;l? zW?GT$hQT~1g!u|ln{IES9DowfKvG&$4nl0W{#ViQthE}d%!(mOS}zP_#YMVDdy%hn znA6AxRupYq4)t;!c;1=~Gop{Uys5Y2W9yx#jngWYj+huQkN9{OHGA_unrtX>ffaY} zLLc{@c}k3)O!$s0MqV52>qDg`S|8KxLlPNk@6>9K3wf5r6s_<0LcAWkjMIhEx9kY7 znm+_bb`V#g!FP4GH!cI1f{wV~DfGH{9O1ThE@Mb(-o1G>hDHCbkKxRb(tm9b*9-!t z-O-{9Mhu@qgV0?2c6}pa9z!dC-Nhn1k_aRuoxys<(tu(88^R4cC-F9RJR zrc&{!wXHL=X=km)_2!^_$PP~k?amIXOY9=J+Be^%)=5X<#Q}-_b$VBK%rO}GkJaV6|A4^s8fYq5HgdA(BkhF? zv*j;oTntKLwP2Bn)28z*3wys8)uZcsn$`Mt0)@eQ@Xw(o)SF;;C&$RV?r4L$=+SW2hxXQdAHx}Ln(CfV|B?) znX-4)13^DkeSy6M_90C{yHB%>iBa!7@#Ot*#lM-$zU5V=fhf+U9I-+3YizN3_^OVU zTVgdDe*ac|WKbh3ey?W6BjWL`$Ojn;SlGqkTS;S*a(rMdXd(Cn;NgEc_JTC%%}Q|@NPc+O==E^G@GAJW8rw6 z>9Z)lVC8gJeU5o8j2QE6!i4-?n{KaJ^VFu>0MAeWsUEt+@s}>S2#0fUtowyoN;|P4 z&`(*d`;airfbji~fIu4N-;5Y|jy@iXPDh&_4Dl#l)CMC-lxxF;QJUs>U*EBm8qBvV zPmV9+D7hOl(O4HkAa5gYSH?v%QjHYpjk;4 zc6bX2Lkg*zBTWtR2))y4QL?vC-G!YAC-|ZIz#OM7vb7vPryIpm_T^gU{8p2lwv|1~ zMjy43O1N$OnZM&ZW7hW*z7z9^*|CgZe4UH0KNJ8Nf24CajiaHe3LFqVDOITUBU5ARB|}hiJW;j})qK3*?i{cypMaG=eS|bb5O}wzcgTfD zE^L{24zczYr&>d88iPge#Xc}Ny3~wn1AZ!1uqZqA$X|=zu^&b~3qrOp9RoeyjC~&gZcJg64>h zAKF#hepr?x)F#Ow3rIa^6WQzOv2USWhjQr3R(15cd>cvNj26>(zDB5WVGUH!0ELbvRpBt-Mbxt`dt| zmdxUW;zi+Kd>%j&al2-66l21O+azWLxEip235iaKt#CJ{2DVa)dChvCYi`b8iIiSG*u2ekN3}cOS`A*?Qy$RIWj0wZY`sXDo5TAR!+#i|k>g6I1dD4* z3j)Wxij)r6W>peGYwZU2OPm2e4nNp1vt7@y_nsK+SOy;?VQo%>8nD_RPNYvj=Z_wH zLPO9_Q44-;Iw5_+rw6&cuMb;NffyfL25j_Nb;=*SfC4m4vXFk9RxDJ?V7W4K4A>L$ zQ(%NrfeT*NmyiHgSZ3s^q5610OZ<%Y6kuqiZS*)wq*{pbpjiTcUX}2~A$$u>wbVeh zO&yNV`Q|CS|88#9{vPVQ0^y}i&B|t>9MlkRMeI^8 z4CDkk_dPf7w|}UmX*4y@!BRl1`7<#_=Y|mu;1_u$@*B9mEI<${Fwft{I50AG$Glm= zBRsA${fx385}#iE&v_L80tA8d!J2jUSrzRTvKC0t=nVA0)@102Ig>ZDp;#s+a&J(b zyc^A2=9aSd#z~@;gH#ujzq9@Zf!K$mv8O1P%NKw|-?kX<~k)A2!9tBfJE1ibCls>9L zgIx7GcpSasDk&F45+8w;$}Hp4JTtiPWYZ82j-V9g)_l|KCZ#u7b)#_iDE17$+?q}M z&w(gKmT!@-F){+yQv}J*m~Nqo>!{?COk>4U{vR=&znnaJ6r*Z7Kg%5Dwnog1E}BXT!%;U zP;(UaidpR*Ui3}>;Z;rh$0-pE(?CwN|5ZYuptcy|j3-LuqRNT$a3I~S^OIo+9hs*> zxA_!yiNccs8?~ht2F)H~DUpR6DNG`wIUWy3uAr z3LUqWq{_R5zmz(_e;CuS|D&0B`ZpS4_b?oQz6&kFmRdNup=n5QSB0k*A0IJEO1wCB zcna=+!i8nT^@$79VBToTg5G%w^Nc$I(t7t<`URD*W|Tq7Ad=@F{dMIN&TY|NikqjIdZGSEcOp(+~{1X>TL1d->7qNkb{m;7^~_7>OYE zl-lWYg3Uk)@#AkyUOsz2lXobEaIeUsShasU^-W1vJ!^+|&A_15bC0&#A0xXp zOf10=&}}Rs0-G|@QjRh0sn-;nx4wAI*H)BLU$2b`Bb=X$l@~+4+|kCX20Q!pro7a* z8LLxnHfFey1$p)tQHkqTP#l3?42uh{RG!|U6kL2@r(mNjM_;WJhNSm;* zb#w6GYPi->)wWi01Sxwbu}svp0I90oL}RxY2;!e)p!oe_l8I?k(4?{^^uj= zW~YjhncMHZgW@mFKAz!4qz@F-<}#pd7<#_D77nO|4O5Ww15%VF_wg+)OY778l5y$Z za(K({XLM~}!H^gJpr>BE;3#X{Kg@lS!rq&5qS_ehuyJ@>@=)1N;^{%^%uY=A1D_WT zNz}!EHR7fTa!~?g7MTW6X*QI=BZC2&QJ9J>uHXlhUaa($3f^-BNZ&5uMoRCjAtW;K z&mk;>k1&cRa$+@QXX4dZp>u6Op=B!c_K$ppb-;hoI!Z5Gvj%?n!=aYRa&f_Y#k#1^-5g#*<@C#2>z;=HfhFfeo zHN)CN1JIS7DI=}@u~}G7B^3O%xQ{N`ZZ7QKd&0P>Q%b;6Z`HP?Wwp+!LY8gNB#~UT zR*0YyDh{Ab-B$NdMkV1I})8h=JNAvWP19k`XCV^57>l z^8*@<80eQ%M-IB$q#+3sR=%DwaP@N{}bN4*fnpS@BUBorViWH*j}_2%O=mIJq@w@Gh5z;cQRav0#|9me#S^HkpRPsqMUqmys z;3_QrSGdJ3&)M9zJ`}Snx9F8(b8hT zG_ys6g{Ni+OUNoE@rO`+jt;d37oeikY;1g;bM=`G78Lx~+D7`LGk8WQrZ-~dEnF3$ zY{8lWPg*~`(tZ*lmBEW+;G3Zcm}zH8a@icU)I8`8!wOJ|eO)F2bB?YEmuPG&Rx9nt zxN+!A+h{DD%{)NzaxCZsuCECFe)FU zqPn>bvZhJi}Rs!;n<5-t^I}2wx`v!9cmmY?z_`mIjY{4 zcDj|a|0|ZL+#4{=JzT%DM1AtupzYT)#uw7cui>0d80duQiH*tqC+D2^pWz4*Z8>;n zU>(0$1urzWefi3cH2vVSwm(tyCq2;lUKjB8_cDEn%$bOct;G)+g{SE7h$ndO+sJ|k zpZqvnb@5lfWPpq5#q6D}yO0bv=51FdV}MGBg+BhunEWLralG|;^*s=-eYKLftmdbU zNlZfiJL=)@J341)!CO&peLU%+6XeEv17K;fI}27N#P zyTq@zYvc#)H=KgrkEQUdwkM2|#ygjN{ueRI^~UEDV#EFB*@ijg;B?OH7mok5`4~rK zEoJ|%uiIcxlXc9+KWBlz>Fqw@-aG4N#_MNeMe!!}|8G+S*Iz#C_<=$5?2GApSUoS> zM1=zVpCj<>Rb`KH=IR#&w(0(BM&xf2n2oBYZ{BP&?JJgL#&r2{6Iq7h^pWuL|3^K$ z+s~h4>&L}s(`qNKD(mPD2-MR*q1ZzUze;|xJcZU?>?U4 zdx5v1w%*9K((DqneOn544M-v_!ADjMrQ*9yX6^;a146JYTK~H<%D?0U%zgYEuH(Z; z^V8ljb_quE1+A}a|9?}rFFypoEIs^le)*fCpOK78v7_yf^afBHS|1^9J?b^g3K1)w#&rI5IAuo~NSSxCuwa+7SH()u6o!-(RnhK|CElbf(3~2T<;C;rN5G;*O zrG|4F7OQBjwKx{VQSw|kISFnvbdHn%yqd_$e=IH57RbDpIU>{l=K2^hZ?6$*k-yhG zT>pF~EHqjz?I0JLgJvtOR>UJWU(lkjN6CDj@w3`Sg`aX`&f-A6q%~@bJdjAKFp76P z(#|;T1c276%pPUiy4`uDQEN7+)jhiS>xd-EXjaU1QnN|mFmE-lNB7HGVp*w)2<4wI z*WOe=E!PSgV*RVP!}zC!0ox>Lz(#}SP4yU~WBx(Cx562SiH0BH%KqiG$5is(=F_aD zH1+XwDRhiN$68i4Ov?B#kZW_I>Oufs@o39YOgSJVLPReGQyc^v(|}x zwl;2Jq7>2L)>mcuL|WW(%AH8P-RzvS9nn5CFjSmE@YBJVem6PUPEoHD1E0Eypo-VRm(xQ8m=k3gU_ z!gz%l|K*PSHOih=aYB-c;J)OHR7;4C_d^usMXWow#_P^kp$JFpCZOwKuI+hw5xoe$ zHKo-$@Z!4GuN&_^TnDv(A%>ZU`M*SJo~j~Jnb@%ZYIz}2;xx1O-eUHn-!l7OwF+n^7UyqTD-Nx#?^!xZ>WNh>ylbLl&V<&g z{weS7G#}U}cL**et(Wn*!x+He18sCYe~%H-+VGnTD-kf)$w3j!m^08jf1H!yx9i59 zS@$7(_{I8u9cE&MfSdv>^PsucXkGIMJs+|j+HQW^<>l7%dVJ+_n%nrg^K>7}rS-iY z?aVaQEP)mdj0*zf#Q3^Llvg_Xv7fqWOrx9p|6wi65Ai=(cRsYlarI=Vl)d6)@P5XY z%Ln#r9mjq)n(Kgk%s7!nAq8h zeNo(#rb42uZ)C+@Jv?PB1Z{5ZaRd!{g`@k*T$GOa zyfRLj-^4s^bb;hzR$S1F#Kcn*>cA)e>pWDkU*P{;Ga-(xj8l|ip_~19bfv~g&NkV^ zeajqYbUacX&<-Q*eandG-|>=xdI#AqdP=%Bg9KBe?MzI|I|n+h4X{Eie_%a98K74 zHE+d~jd$DVo0)gt?`V~DlH=;pabqUnkEkMA80m;S%5U5nfW|v*!=HKg?an-%UjrKU zu62BD-~P2ef*&A0>L`KXxWh&Z_BS;51$^tXzMOQl-R+dg%FOhKv(645&O5``H7;D^ zk{U+Iq^XOJHYQ(o_FmVxbB+6-YuvfUJvEqL*P(i#+d=aY5MF(F@`t(37p}q)UQF6W z(2wTn|MAF-ifns+>RTLgJn~|c^aV$hgj0o5lAj(3(gCTs0r)!N61%!P{u6UYtl*|P zb!%IVPe4S6yvs>goNRp89SGgGT~-)lV@01{q%YM<|M1C-a_~gJR&2Gj0l&1b+GRT{ zzcr&cY%LS9CuOP8THp`B-)iS%;sugZ1veXJ?TV>2xGO?(YA;fjy*8`7cF>TgkbOLk zJ1{tU(70K}bDL>#!aHWGv0j={8{{FWt!vEf9FE|2^N9sKv1=t+h;%?$sE02>sug)3 zV%=u{5(JGE!8wWmQ;A}=zDD*1-1yQ!xVY2oTM|3n1zP2x12UM@&Uv*MI&j>eHpr^2 z)*U#b#9-A0$KTZ#ujgAf-+Bt1lfzC zwhmdOrOnfLa!w0kCTwZfFd*EtA{AxpEW}X8oH1r`qC={ETs;7gFtHdDB>~X6gRMk0 z8;7ng-=XMe&g#LglQz16tKo|w_Ste59}jqS`SF{PxVoS^-g$QQQQ~k-#8cRfV}xQ) zE5`uQn>UiR73&f?pJ6#z1qZ*|y!j|8zWrD`R3)gkyrZ$0Z|*+sQRe=mH;Ko7_qDhe z(@u`qs@r_{2r3ZCk7Nf42;*;MCwa8t)|gs!n@?`-x!&5Uw!N}X!-d@1lSlfTBXwId zJNCI|UC4gbqFY+3w{*DcmX3A>yjxmyOH1{Zj(6SCi3_=<<&P-7L38C}9Dv~dPIv!M z=H8i0L5ps)5v5k^rOu<&MJYvWz-KGQMi$)!YT=5Y0B3;q*bmZrgro=Z6T}~EZyA2Q2Lx0T5!4F1940H}&H=ZM9=2|T13 zB>T}PO?U4ck&oT&&#i~JlQXV^+H1V(D>BXYbWbmR^pEe|SMH2oUVq)Ud3&lfj2AJQ zyaR;%1*mf5%;#o*3CzPNqh+3Ie}VX{S06LuZ!)N3K6BJBqnM0L?za%N`C=((b`B%F zyBvPnFqGc|nq$x$?9W6jV=rMgARkVuoK8$(8KA}6xHa>E^D!Jh4-mM74(1ihq#|mn z&}4*d_CfKb)|pf5bs|xxxx$I9qVKbP;?Z(wA+$6#?2xFNxg(JqqEkiMpKpV>lTATLWRP9{jw)3v!L>heuN?!Db&WgkAR?+S@i>2HPEz^< zXa(~qdQ<%FeWt-&0wVEdUj?#x73dG%CHqXIkl1jDh1leCiTLd92UFJ$ftf zdeyp&kOjvdNN-M2=_bf9mZU#c-;seI0e@q0IaN;xamVXNJ_v_S3Np;_k#keg|Mv; z*Jk8xB^@gV*4pQ2tb30?<4 z`6U0ny(~;6iG(zNz^1~$t;c?v2czWAPDjGL!=!Lrq#?=y?RkS2 zt$<~|`*TzWXq?rv>YSx2H5Z$3-{9BfY9X~s-TuM|X&I)II=ReB?X`YrWrkHh?+@KP z^!9;QY6FK4q9Tqusc5}fP!Jk&2Y-cTcD*Wb{p~Y}jHBlKWrd@tb;c9UdEaR+Tvq$q z4REq)7ySHnzP=r{*D0|7$~w2Hnp;|4>3X8|sq24((qAfS@m#vfxz*EMg?vp}_bv|f z^sYnF9mR(d|JDzQKfgxz@l18l-XKKF>$=)tx~^(`fK|P2<=In{(_DBzm1z^0Hdk&S<}mCW@j8$UJB zbpF(T*CW9b+ZQ^@Q5LT_k8tcI?J zbpC&axehe*ueqPwHm=O;rg#hfK6^K(xY)ld$_xEWalPvs-N#ktxbD7z<^Q&Q_-9i3 z8j*2>isoocLcQYs@1pMZV`h(@L>)pR2}sDkahK zcQe)RSW`~BPD(OY9*f_q^Ai8DE3nYX6iV*-V#trLQz#q3$^Vb1P~NU9%)Z{dHC2z+ zyEpP_-jCD$B8#l!_)%9!#NgOXrn}5Nc_odi7y{V|o*TSt#_!xv;e7RG z%H=Lhr|I!U%xp?Nsn(R4*W`blhga#N-3^&Xi92eh^>#4B3aAl>5;}u%r}^QfD)k;C zB6VCbLm`g3R^8Dco@<`G%2&p@&!>#{Km2OaPwLQ0ILUk7!>UsH|$u&!&4s60Mt;+~z5jDP!t0E%gV2ee2~0N2qsSjD+5tW-ghvuYCa7{@ASd}hFO zG-|uK+}hw=Ky_5lGCE!Vbk4lfO|b*F%P|EJ9E_6*_pahX_0cs?3VD5`9Oro#-wKy% zDX8b1rT5)>elwHeJ@SX>d5_C5$wInnJ&WXA&7BQIMlDQ&WN?;{%1#a^1ED(2;LJx+ z`y_|1jzoITdbUJ`P{FYIexyC69Tp~malW;n2ntIqI@$EYNYUWFPFf<;3qA*Nr`_a; zgwcE5R)z@AuoYJII*Bp<=SEIv7yd~%*9&t48_vg;^LBF=zKjt3LM;(FQ+;#*iDfQ*9Ql9PbvbDgp zix^{jzICtbO278cz;>^>_euE^L?BBvE4-C@XsW%7NSaXyplvljebT8Tg>g2Uhr^pn zXG4yfcWkSJIh}yy)i6R>af$|A?rDX}al5ABcws$gOfaG>rp5RuFRPaSpS`#1N~>Ag zwttXo3_noO@oX_CNC-hfkQlP3NK{lrR78LMbDU@OL@=7`y4JeaJ)U=rHygn@XMa>z zSJzipSCc2;sCpjU=KEMEo`+TQ58YoyVzqaUZ4XSrrx9-bflhIDX?D_|TdKE>Wp;Zl zbgv?hWlyIKSda<}0W)2Bl3q!t^N?-Fwu86#xR5YnV3xIn4_#B<8E);dcdG{Xy@y+A zC|(6FAQA$}&`ycVuj#q5t#qOUk8yy5Z#W!?EQ!&TBI2O4o0{5*8zbcF;R1B_XzPUg zNUWios;N%e;CbWE(rV~B zAG3*5i^axyys)9PO~|t|a<|Ktt@XGN^)Td;jCJieI)(K!M)P&e#DIrF3$!L@Z!{0EKGjhtEWQ3nz{d`ms*9i9rGhr-Gro9Vdl+hb*2FtE+Q1$H4Hd zpM-U^ILF~8Z%wBRbLCWfM80kXr@hVQ1Ow6dO3Fs7B$f7aWNS?=4og%46|Ie^dS{PR zlSB}LNR|ei>I?rRuf`_IKkzJ@yyT|Ue8q)C%Rw1z?Tg1gJ07iddEjE3K3GL7kac`o zcABg~A>gjF9+Yxqw%>UC?z4~NAXA*kOKekhAYnnGD$>ICc`Z29aD9&lep5S9i09Ur zZEB2$_3X|*mX8Z_HpF|Acuim1jXb#9-G)3%G{W%cPtcVO|dX^$mTlr$`VZ z;e1nGn#oOyJbTWj%n;!Bo(5`ZXo{H+M25Fnyo2O4F|J<10q4Qp<&~?O+PtoeI1oCC zQRz$6w&6Z&jWb$BX;7mP&^RnTMRM7Vxj9QvGQ3`M6IzucVum_8#bFzh`-zWVw98s= zyqlra(n)j6oiJ_{VkqW|l_3~vNa-vGEX_TBWlU>loG>gN=rDPO*cUWVXMy=~!QqH{#xrb9ZvAE#NLs*GE)MZm*rGi0uxDD1lo-DGKMn;kX zfBTUnXQe}3lLA&7n%8~+e{9rro=qXpWkFegnwAD+M8}UIP=CHqmwEph=qviye8TKc zU*C2sok^TyT}QJh6*Lz zd}mmQISZpv+JFhRo_0odWA|tvqfBz{ojnmK3t7)%5rmK7_P@d1&L{`k1W+#uEYwlHWOHbP}ty_rv=%b(x`@W#V(q+(IE`gw#Ya=L~mGTbn;!tYj?N6q-$ zy6~#Ct-?@@VE8OG9y3RpQnL(gzyo*k%lLBQD1kE{GU0Dl}}Q8wI7U&GWlnFF9Rn#Ap+c-2(C}AV*@LM*#X`w(dO)7Q28ww+rnyE4#s0@PcLx4hJTTiQ8<; zg>JHoI9QZZS=|MnS#-CCBxK^OrVnp_Q3OJDXRChj-~5OoR8h^CQPO}?sm4C$XEqc; z%SH06G~A$=ZjC`qX^_MS)i@Tgg-LmTGjAh|CAx`uLq_*f@Hf ze2e(*$f!$mj|W!h90#LGhldW&t(A3dm~0f9P>y@HcfsJVT;mtV89YxlZv65t^De$Jl;eb}6h&_k z6>0$f!KhEKG(WXU(Y)}xj86sdOFbNisB-r{yt}!C-!>*NhLrhUuszfABzs8%OBx@E z>XI&&Uch?jOnbyRD~LbaF+nEA6CKr9?0eFG55#Eoa~I0`*I+I*CruLTj=8?fcF@`q z`4kyc(z-c8gt-WVZdld%R9O!pQ#hr4OUy4FU@quJh@hX^*MhoactHz2hoV>dy4%{_ zf%M*EFspK2Ao>cBL3D4|@-FG;580acY8MEXI$^bSKOs~UtQ%BMHI=uSc?gIwc7&)9 zkY0{h;v6N?eO@TAY=dgao6BwS|` zl4A{htc|jq)ZRAbXyXK56F;46nxyHet|J!ec7ao*ZB05qE2#B_TKcTLBghF0L=1$l z5=^0XErxUp6IaUfH92LPLH=QBDJ0`9{7=CchB^=a0sLgvz741cQ@{m|)>U9)I5J#V zi_cMD0mL~0OGB$TjOHnu;96#w{4cnT2$?tlW2Xc&Gs)t`w5!j1O!+LJWoc`6rNy&K ze_5==D1;DNt?05N{Al&c^zqy1DYqpx`y%#=NA-rdM$N`3Jq^-)0ex z_J|okyEe0rVSDw9ylC_3hsEyP>qXTDFz)OMdZ)rbEnj4tOps77AO})D1mlM9F$YAA z;|kFLI^?*_f9)jj@My_|XK-TXs@&U0&ww91^wDCg-Dpo5905_Dn&UA+&?X-1cBE@cPHk04M^5kR^ z4r8ni%G8Q98zQGmC{qgBh+k%Uo)^@f(w4qcMJ1#pabY_5xOKz3^;q{btmV_qH*?(hoM%yurs*Q$Kx zZ-tosn6b&oh?S339E@|EXu6v@hF^LF-;FBV+*f%iCQR-Ln*GUMM|2q)~TTBp#m7Ir;;~t z(8LP#mN|oIdZqd==Eo@N&O)N0xCjJOVjLB)dE{`=E+};yg1mrLT$1gE1bO=6QqgPi zrByhO*IQDMTK~GDpR|u;pe`fEEN;rGrE0NEp%@Kp`!-hSepLKB$ zK(;99?t2i7x-x0a!|%|&$Js*c8r%my6@)(t^);4K_?K11lDw-O3#~G(mp~h!>cRiL z2d}yx9eN0_o!uQL&anwAQ;WqI3akOVM=mM#y0T0#>g_HF+4#QJeioYy_BYlxy&LJo z8r|C{1-2FygB+qyl4FTdy>lv#Bsgx-PDKR|80cy>811?9VmC+e6YtLaJ$wl@>x+xU zk%-RFagC=sA+MT#?rB~Knec0v7E6W9x>}R&oIO~54E%1vrOoVPnjR3a!oWShdaY*) zzdYxVPUHV9{?+rr_#iF**tjw~?*0pmN=1{UCrD_l0laM1Z)CT3LJxM`g*AeM`z-Dq z3JpSWKL=QDqLQy(tSDx%p%cT|^8eo2Fkv)U6GCLl>DyT!0OqlL1V^>C0o^F+rg-p= zNvJ!)?I%fMX*Hnosfpf>9a~W40MONO-Q?8Mp9psk!|=ce+~U?x;qo~vMG)}$nQG!@ zc1Jzlg1`=iH2w>3X7{}at}@|}D0EOyFEA~Q;F8IOG;Y{y6d|#rK*hRuc9mHr-Y^9X zf&?_3!K*KPk*fX9q3?!GW6BGQY>SOV+70uf%sNozb<5QTBVh#HxfgW9{p%e7%VGok zW~$vR#dc&f%2vd0(>?FsmK(ha;B)qe@( zoHKMf!+k>THXI)pJge#Dgr|7AyxH8m+V(nQASyBs2Tbb;WkL(-93`(_`T1~Qo1c87 z24*-F`^zILLtQm)eg?JQRM9aX^LxOm1A95R%oJr3oFO}`<|qYen~CN}GnMkfG#_Hd znz(nE9i~wLnLeA;1hJ8K=Qf;i&3$AUTP!rKh`2x`7hcIA9PaRo>NL&vC`8YVC|p4! z(vu`Y{ky)Qm@2e`dtWt*Cy1NxC+Z)Kl0UUao_{ZeNYlgZr|;YGBso6*R7uC08kck_ zfSEM*=Jw5JTEdc3)cN%not%J|lZ6HC^=Eh;{P&T15b4CzE>A<7=a}u)1$H-)B z_z%e$`%~c0(C>M9lg;Ao(@!WKrPeCyuBmz&n_hdki@@TsTF;>n!SsMPl;1X8^3zQ{ zunU)9oK;DJrAc|L9?C00Pre)(yDw^*E9IZ54>_7!<%epeU)ij7qUuKV_}Nuos?+QO zmEmEU4cBCy^-=@f14v=_xi0wab8FcQFFv`(sb*@j=< zR#RlraJpkPjWD%p61+0jYV$}+i||k11%q@1H42&=6S@`>XguA(NxUJx66WQ=s=#0e z3ezB-_@%{hX682VES=kY!2le;(|n_{Uu_1QdsPrCPCtUvFqZnIEX~6G!Wkpp)%MVo z0Hsq-Cd4kk?7sA69+#{0>>8v3h&9pPwv~bUE@}h~!SOT&kc#M;#+qe5Kzu*3%=r@W zc$-%8Qs1CnYw$cgzXf16fEz$3fYe(%0ViZNi}y4<&)2P$1T=Tf!Xw$2*pQ-&x2s3n zICKpdV;`DV;r`GRuX%-Z%8;OBe8dEGwQ#w2$Ep^2SQMuXTcJEcFaBn%v)WoH?0<8y zvVsJA*$3aXx@Zr9!T;amj_%s8`8%_Rt3GNr_DpK|!TY5k9V~EIFv~Pp<4){@b-3z6 zbn{A)Wr=wbjSHTJeEs}dDU))|w!9FN{C0nXU_r%xei^a0gUH-X_PFr((=s%X0C+?4 ztzE{Wj3n@&p*W`q^C^>A`jJ1SFGbq$aO8I#M1HnJV72XYFe#`fiH}SGf-S_q2e*>j0a_>>=7?BLVz&3rLo!9v1ZOd$l;CLoOJdSEWfv=RzPrKD*hm zhK-q^RXL*zaNc}Ozk25D_oNri>6D!P>`1W~(M@|oy;{N&J#V^l-)FCB5 zL%@Voc!ne~Dy}m)<)V|9Sct9jZ?21Jpc!PywIAE5OZES`yxPAGBbz|^cC??qq3Ec8 z#Gc!5|LzEv=Z`D&J?7C-NT0?$yaO>jlzTg}>xg>UGx9(N{aj?k zT2r;D4Pdqoh?z(JzrrPw+T{(i(U}|m8o_+3u#K9Cdg5ETPcIo0MY=;P>JGVRtp{Ul zt?>&!=fp4-?H;@YDw?@(7`fuh-Nz z1<=jVihoXh;~wG`_#&QH>qPNA(IBvaz8iNC$pntpM|1 zN`9qvcdFOYMu(QEVCjqrsMLDvP%RO z^Ab{I6O@7qNfDiLAQ=Rog4>@bAtH);D^aeF3)R2&bAutM371=v3UAvJcK4tm6fsb!aZ& zRj-JBI*L&C;=4n_=Cymiz4GsN<>9*>##! ze5s1Z;eyHuR|oJEwQ|yJscRQF-cQaX(FTGUJ)}`N{|=SG8*ykS`jm9kL={9VnRg=7 za)J;`IzjF0^jGjBR+V(l3epJ3OIg83*O*m7{g9?3aqsl{WIav#vdj>t|6Pvrwv*&I zfY9X0gTcoiz`SU1A=g0=>;2{P&0gYIKz3wodhq?7G(0hQYIO_wp(Sw4IVEXT4nS^=1=UszW3-s}zQvW8E7YKfo0DunOlcRg|&D<eOUKmTZ$69LD_-mn`3^Z69TU&d=d^+u}0`N{HD!Ph<9z>aKEm^&e*J>GcDFS z#U;kg5gQ>yyW#kog^#m!D_b3n3x@~Ywsu)W2$pZ9wb5zn7WHk2u%gZ1JM2|HqYmU1HgyFwC;3!t-*#8aD_7SAfToB#@G1_|OiP)vs4%j% ze{98L5}#d-q@3R)4k*)`AfSXnWQ;J#nP)ivG(X>S6ZIL)UW)%yI0S!0hEG z1)5vx5|&AW&CMk79*xyXN1MJJi*-mrn<)Vk3!CPaGE8<#mDOGct>V=MlfCCNZi(yI zKxt1LWza9g;vHWhUBr9D5{{TFHD2I18IWuqVM+3#Ss>gnBmaQbCh9nUfxrqx=AY&D z5F7sFS{qmzAn16LUn>(@P9lH(KgoZLnIy?>0zKePEng+Fmk}gG6K!ZpJ&Pbs*<_Y` z-?@v`^&81JM+<&AVekUgfr+Z!g*9m^|Fw@7K%zhzPyY3> z?g#Cn2uXV&3&-BixF3s68J%6LG}m}7RmrG0x!4bk3d(^rlMDV(u~lWO!2}B8y;v+L zDJt`3Xx@LG=DN&ClU0zL=#MBw9ew%SDB*w-c?7MH_7PG__o1=A8K5>(>tz3@h4VNg z(N9`=B!G?OZ94kqK#R-lj)-j*YY@T%1EQH8(Kr8=?tXo6f9Dq3W7GvTF$SLk?2(pX z0Ryc91uN3!s2T|Qt?UzJui!bDDnktfvY>dmnk=lhO+Qmy9G;~WyANnlT!b~Q$*rWm zK>_Qg#|0})^mVr5&Gk+=dy;p1l*tFA!fX7Bp_(dY*?M{{WfWlOK#ja)McW}Ii0;ET z10%_~o(F!a*?u-BGskj%&T*zw+H|pab%Uep!f|Pi1HI0CdDB(4J5;e2$4&J!L7*{w z_FC2ImY;BK0L6FvgVY=jBBmTcAv@>Wiz-Ii$vB=**0^3}TX zgHX{AwM%b3P0~q;2Rd^U1OYuf34b2>lnbyu25>Y`h~#TI1xkv?iTns%-eaeclHD2F zmBx{VBMku#LW4LQ0nyHc@G(wIrgcb%F2=mTHMTt`I0!*{VxOzh+0dF`%^f9`_^OQkD z?Kf^5`qmrkS|4nijo3iz&9@Cv?2bo|7P0Z4WbY?fQBxGMpYBe6#34e91O4Z5J!G?3 z5X-Ng;#HyaF#R0rh$4PW;m| zovLTW^NEUgJj5;=FqAqbq>FpyF|f(6+Sv9d<%!87?PK3)>Xo8Oe3tc!W_A;p=*qVQ z3_k#YSv{e3etM~O9DdAZCyq~Pd;l;|^W|zPxEE`@zaKNQgo-GtSsPW+Oa%JAhv{*7 z)@Ioi&Mbxz>L810Eqllw;IX_jq7RMeVIs$QI5|v)ohKh$c_l+6&Nw?yY-@&Is5VL_ z;1h4LD=b0bdk!NnbIwg5owLhF!DWJYyF%_(SIBpRbd$ZiL|9xNXgJAO)QFs;=TmhN zfv}+}ru;%kGZqv&F*?DQf4YJQl=*E1)hh}*iGci>38YK2OfQfC!t09SR_|C*>&0#4 zu^5-}K%fV8uuJ&g)Af>V#<&)xIC7M3>N^=j020l&{zX(I-nFufwpN$XB)E1ly}Mp_ zttTxCwnOLot=4%I0QaWhVF?X}$M$Pk2=ppT{N{)#PDX2gU#(K|czZ!%+dePu4DhJ2 znxuz_5c?aGL}^bFzOJZa?#uF)3Pgu3sa+`t+^9ep{P~+=eSlURDF3mJ?#M&;)OyHP z2>WBXNAy-L%RieJ4NSc*Pf2a3@vc!B^bR5F#F%{NYx|ehf=5T;XZyRHZm}e&E z)OmE6=B~+^nR)iIwA4PwQgh7RsauftPv5;*kY&yVnhAeOYSDHWSDqKEQxDlz=#|T_ zyu6lK@Cc2LRtq#WSo1I0RlLLolW37F>rR6;^dI?+IptGKR!XRs$9-ZNbNJt2hC=0I zptLvRmwb&F8tuxLSa{*6N*Ce{ClPGvE;LYe9_7p{#t~!eL-3!}m>O4^X3@Y+fW1<2 zsSWJBouUmnb;5VD^l(~q$)9j%hk24wGM#D+vDL>s0c+ILW zVlfZoh@(X3F1+sTeVcYQbH-|A7Dujj&`;IOHosu$6M~d=Oc-Y94d0Vy9U4b_nwlcu zQQ~MTOk?pR){C&vOd$>Z)M+Q(4S6E>6kMMbuO$)fBx1RbMo+BKk~+_daw&UEuRTBH z>w@%3S!vg!?mWlud1isq_g5kX;%)0Oeg|ed{%8%Q#&)lIk6m*!=YFcvRtwyY$jpd$ zqP^{Aq$#D3RKL0qSp(3vdfe= zf+(%fvpbuxBLWb{S-BKLPlf>VqYhl5VW6y0oZ@_n&~>xa44vp>le-yaxuykO0CvY8qg3&V9OdXPnjuEqz zi@@~;#xZ~wf$PXgt=#{exb@G|)wuNYw9g30$r5%a*txa%)ZNC6yM6@r(*OXzvY-_;vKJE~oj zxzD&Nmj+JM7rmexnnKJMJDcE`fB*bZR_8y&|7pJXwG3M4N{CaVutGl!l8#1SA>TEiSEO((EGY zaf$^X+m93j=<{qp6pKzei`EP!tsOk%o|sY1!OeE=i+6XkF@O0@BW?5EhVUo?HH(rP zoQLo<-DLO4U-SmDcYun{f^Vg3b{BBPx7SJBx7pbVIERMm**Zn73~h==_hMw{?5%sO z&EkK?f7w)x$!DvbNFY$r4q}bo%^6b#ljf_(N(JRpRUI5cI06UhPq|%$^ecoJA7N?2 zbi%XPS*;Xj&U{>mB!mMMc(SkYp&c(#+~i95_zV%Mmqtha5pBgn;{w1c95e0@euzV3 z{u63)lmFo%A{LICtD#wIjf;s31LFSPT6OBTFKM)bB0ML^~F zwsL+&nOZ2{-lT1MVtvYIxsiJEw;=h}i%ZCbC>#(uPPKZ;-tYZP6_DG9$PrGjh!h@h zd{N?@s$_ZLwX)MjYlzbgE;qB_?mjwyHtzt`q{Ri`npbc4jk1&|o_t`uyvx=+ z+iIKSkfdG}cJ60}Hs!={=Y;6{U30_ypmmE<12AP%37U+6Ia1U$qBY#lUfs=?h&S9` zi`qpid)AEVWl}p>sdkHYS>;V7FP4A|9u-;5mRZ!UkwKA}R-n}?2VbSUY5EiAb05vJlm=Z4!5U%;faBY# zO5JBst#TYX-&4l%2%&N>&<2J8;Q^-4ggRdGn?IA;pV~!O<+rsEJ)L!ar4{KJ9Wg;x zyuDrbp4zdTq#!M&FXn*>N$MUU34)z4PZ5ylvC=vC*NJ>+V`{7IM}AFR%dI>{Dc>$R8#nLalGmI^LPUQ7PL@ofe=g4uTBKrzv8gcs-5f z6|p>ecKjvY2g8?{_OkDw>U)V$^QSUC;ks>Ilolii3l(RO#-ZS6k?Yz5Uj%*rdO zAA_{fahCzR=dH5a0GQ}7P$u#!Crmu^ONHZ?^t{Kf^w|CMeB)<`z5njWF7S)87M4f0 zOASKH4vHQMr2YZ+tpxk`71%cl*bU(lwVF|(J*BQSoD||j*T2zHLX-I*8U9mOF`Z?e zG=It^A&o6R%M`NVo_UhvDR?<_xSn0qv#$=3YL%rYA+ zG-@mw*J`u`R^!*kj+m=Zyv7qn+Y#VYU`|aAd`eP?H+Q;%y+D^Q**pzSix39U8Bjm% z^}XN{ps}|c=5!<8!z%ddt$qDRx|5=<`{i~iHyZjzyHAir{S-VO3A8O2#_fp zipgzH!wkKlLFOp!ZI2UZd;AK^TB}T_0y^u=-{Ou%;hEtNE<$Hppy7%4Z2fS1$0&9Z zmj%^Lyy|Q7Ok+hevXi!WKju4~)d}A<^+ixXS!M_sobG^|F2e`he&I=^A|^sG>?|wX z28uUUZAqW++=Ig3PH}a(1;y(@Cki2sL$xO;HW`;H1R^*f1(}g!vlQ*C6uywJ$$>Bs zLey`vk#sa00wl+45VyGg(&uM(=l$7!J(d~_Y#erwV;Jw91&b1Hw+xW}nIGb2u(F{I(6FrZ`m0>dcJA^}TofR@ z{n`Oj27(U0>LiUH7$s&9<6xB7-lCd&p5Bhqp^Kg|{CWDgWA~J=VAwe%4XEC3AAU_2 zyZ0|R_9~=`_vp7!_nhdkxknFz-8{9eX{Yz=>OG>hR@piHq-ZB{LG&I~VE3@ER!Ihb zcrfE=8@(T|M@<$|3lj-doMCKdTz|*M=Hs3P5N&8Q=cjsUo3b&3Gw|S}N|TK372_Cu zeBN~?bZHj(Co%zw%}tU1A3bv}pKv!WY0xB`R$#Q*sU% zW|G;!or1+DuX8tfox5XZLAnu4C7r^#j!ue3p<5yGMV;CzezdgWaYsJ;1FS{^ZU zL!q!))IbI;%63XLqXCJj;uI50xJ%$hLM$y-hzXfcQ1930q7DH_;aNa+V1Vy1DnVRu z$fAEP4X}jl7WUCD?J11J8wrGi1H}PZ!edFl){^X~{Ypq`E0qzl;erihk4}wX-k!J- z_FI0huk7>qr1vSfjE+ktVt}Ujvh*IqK0n)BdLc|-X6r~Dw^8Cq{&E`u3zH!Hy{$)r zuisjlFgnoAHI!~=jYs%nN61DO+^L=a#=;A=?3T7PeVZ&3w4Uqi4jqrC+M2;Q-5&7_ z-52S4L ze=FB?-KJ$9yz^^cOYDSVSYXX7CSH$)#UmqwN!!eBQ1SVYf(GL=$X%{WZam=nTgll6n0cZ14iFicNbp754ROL(o+065KdY5%oxz*u8bt zHjEK`c1s9Y?Vx7Y&XAQRUCpiTX{1ai8Zu1hAiP5bQ8f};}=#$iSH__57`SY2aE z9IAyd3b>E1!YkC9n$<5XT*g4XK<18pooEkk33~XV%h~LeR{EUemCny@-|o@fBsUNO zRs$8?U}wH$(rbX>gbC+ofGvgmJ~4%rm<;rV7)i+5f7qE=5xrbw;!Wy>48Q8-cBvP6 zn*N7+Ift#$JjwBbJ8#je)M>4o{j5O0kXGi)0&TuQu^n>jrr6)`%DaTd1+O0zriO(u zHMnu5R*7ar9Dh-ZCSv=`T7eaa&6;b*A&&iJXjXPt#iS!5rMnk{YXb$!1eURS9*7RU zZ&DvNM7Rk(wTpt<76;xl{;U7kPkY{)*pmn4ra&8WK3*{>Gj@Z4ywHq?itjul>b@@zTk;0u3)4{@{D!f(E=9(_;{MFAc z*#R`2uB>M3vz}e(`6wl5VJ^?JKPgtpo3#t_XtE=O!67elP3!AgaI>vS^C%`iIr;Xn z<%FY$GvNyo0z=;9V4o8HAI!-m6x&0|1san~Al+2p({9aKewi?-OaCao!YSxsCwoQa zHQRD3a>Xw=LJJ+E#V#XWj!)sT91f5AHowr>S=(>NslM{W_H7G`mCyu@4&Lt{{-+T( zHoj>+Cv#aB2k=toDv{}yU`hu`EA1^u4b{~HuE*~ohI%h1r~$%|YN6ODWh29*obfCh z!hfZs*d5&yEA&ZsXTx(YUwRiP* zt#Fyqeq)2NsGow^Wq$I^>CmNFnlEMv{4&d@#F_6h+Yc?6*n+PJTDE|YZ(X{Az zHMaJz7_++9?S0GLUq-L}P$$CmJzn%~5<8`<=)9nZG|Q8$oGhGT9lj-pHOK+Ubmof| zkC(~e1YsH`p{M6ITVJ7b8!s$HusQ-|iX_$v)lb%Z5pX6kUk#jeVJh~QQVY;Qkc)o^6&dmJEZ zDCr1_(NT&bPW$wFi-%WytXgp>z)7@|W51Ars(wWQoONv{$*-Lv_kfp#oc=wLTOQ!b z*&XT{A5MaE4OpYc@_GnU-0iAi+sZ!p^z3p2M;?>UoAu0g0#6o)Jbfd?XjL>mp)S!h zEz9ssnftkNLofTWxr(O(We@~)t=Hxp&CztIgzHA3=d6SD^m?{ul(nZkarx5k~ zi;W8Tp#rR5XS->_5&3jDGw<#k_y?~nKLtTb5%_E*JjL)A+o=&#wrz&oLW9wXAuZVa zpxAKTLoUlXWk2%ZC8Tsq+p==lOOA3Vkov3I2*Q@J_u^QJI?2EN(wmN)zyr*KQmmZL z-l1CW?K|RBPvBnjg)+PHuB&(+EA=~opq8Sn-;48UjA5N{xmp-v1?c;$&&P#}U0d8# zt_cK={y{d4 z%LtEIvsn4`a~^`zv8tMQOf71)(BMV6artn%#Q0Y_yjL7|yVv#0i?r4M2l2$+D)~-m zNo|?i=?;_uBarL3gaac z(c-01xqO4I)Bqu47gqyqv16TfZ0xBqX+u_;fRxgGc{lhrJW8#dP+yk=mr&=_(C@T9jMKiAiX z0y)GfT?93z^Hawn3hFht{oBLn)bO>VZdCprxY!2??aB{0f;0)UCbk$}J9rbfh-UPv z?dD$>fr~3HqBt)K9QB`X;}+|O5-;^5gO$!LbXH@2L7$QPhnU|Yt=M}(zs2_CUqt<~ zEBtrEewANY2r2CF*O1Y7<9@kN;jiO<>ky{ejKJT7kIP^YLmd}@j35O~rIGOu0)LB3 z3;$8%FF{QfcHTrgEJA;EB`Ms~VdTHZ{K^>-zLq}+{bC=6p`Jo{@elpepx@evj764v zodTxcqJ5e8=;oh?`|1{Q%|^ugrrCH5HNQ9+5T5Y=KdC)}j<8s96*Mn+#{WuE`wbsj zC4@z%!+*?JCved_Z*$){pQtD^Yd63;d23wdilZQqb)@f7gciK9 zy-q!i>K-K$`J9hxTljBSfVUiudQ!pyrWqb zp-MRW^Hn-tD~!|=xHO0 zpb)C3O_v#GI`)4f&-6e6Fk4YZ0+gs`7tx*5JqCx}g-tuox1&h(Bn7NpnYyRD=!qTP z-Q`xwE;4f~zGK;~NIPQKF(j!{?aJIkdWs<(Phh()a?4RqN&+@hIg|l6t$IWLCfuHU zKv^E>!?=19MNd-=UA2JGLyzU^K=1Ct*Ldp)n{yINBS~MX7Up-^nMxF&eE2bay2-4t z@`-$xmF-O3cgAr|5)-$D(w?%z1B_-hNCk{>Gzc+ODB_SyD}B>tb+yyvc|*{B*PoLd z6Ru6B4@FkVz_{fXrCJB!!XV(`G^MU|JoVuXhL)W+@&JV!5#VZU#E3@qCvTNm0myhz z@2gK@XZrFr!ngJ3x0OFp$%Ts=dx^lHp{sSY3?Z)u+}2a*{%obsrD{uMm;R)hW=lv| z`g7=rKw6V+CH2?Gef+cvw`PL%K?6Dh7}c1}qMC)8XGM*?KBZU#N*1U9<(L?+7!QP( z@yE4<8jP&3dpuaJ;sG>(S>K|{*o}JLf@CS1Dt(y#Y*o6SH(@={R0s1#c*aZ-kI@ZE zylv~csutF4;BC(Y+TGu=YRIkv-Ltv{FxQE}Umi1VU!h*>LiTs39IE9OS8?-_Q2^FP zR^kzr0NYO;T2xyqhc~FRjSGg{BACP?k8=m}^>?BU<|-3Rm-OWe%sK#}VsW)=*XMV% zX9Hkho(bk$rGf602dZ@GPF`(pFw#)i17q8JS9$L95*@a>WUD zh5&eIp=y>>7iyIaBYs+UGihi;aElY9ArBd2?`%glhG*yj${l6np!($KBr=Q_ZF#)XQ&1%`=lwps0-AHDR!-hjdg6lhvGv$) zge+|vlJ0eo*_E>w+8uJ9-Fc@nj*5ngeUC~mxL??*)?`My%g$3o*Ll*}($H+(Q9>p4 zUqq9{pTd2kWSQa@aXnRg%WqnIVCdKN`CZ`qDSo~8)7)pFtJ6Jx>*TW3e12~{1V~+4 zV8)KimXA&DTo=3198B^6ueolOEGCJ|!1y%EW`XiYqx{Es1>@YU2Cz+b;1+Wm7$4=K z1Pc$=DB5>MqS7XHb<9Se;p1N(!>x$?K^k|VArYtXg2#~zXMh0tX{lWD1g1JVy!DFM z5ANy!D%P6I8A1{8MQG>BOiw#3aWn|63z#0oyO+MBry2RvTig<_&eW+s2CEzygc?VC z1khCgga}&8G3%B<@0NpSb@v$^Bfx8<3XhK-SSJ#!bT~Cmh%);WEGzZJjvieF@?ns? zYHx{`=bYaTNiit=Rp%#a@Z@HoQWgq~uN1bI89L|7#NmA|TSxB50Gv)BwI)DAKmF1f zqvyzPzFy`UA8>I8?Jmz$y(Vs&C@Zs+lRz-^EN^c5UguEf6AP)$N5zrW$0WsI|7@*Fj z8z8X*OPy_ya(3@EUyF6!Q-(rqXp#0s6G{`1ebITU>yUu@4h;)=+tEQ>dRM&EB0rc` z-&UMamRr|=PxSkgK)Vjmx(S&xD3TqH>c59V^US^--$o(3Z`WA?$4A(E!GWW(aB7T; zWM+%<1+tc~0#2PE;^8-}yv6VgBT1+vVqHWE75Bm|-hEC3A1@7DMK+8cR`Mo){QD@d zCf*OBCMqhLZV?h^KWKhn+3|*o(QDtE5gbctVQxiRXz&<@?KFvAfql(86b!Knjb;O_ z^T=Pj1sZ?=My5HJl`_DqAL8}AkbVgf<6SQVnx>h?Lt11?fJzG;eT5!>-tb#I6VH5F zJnNzh*4U?cwAP7d9cGZA<}!<-;3ler)n!f32(wK*RBK=FH3DoG zT-`r5ca4kQb|5S~KW;+^bPUvfe!qxVt0}7l=YL}(M_uM$UeH!iyN|}q0MPj4<|2+s zH-^($Ti1H)8jw9!rJgTv07uZR`?<6=Q|SpDkiMBe2Nku&vgNXXKn2g8*Fh>)Ps;r6 zo!TtT(_+3567q#;yG)~IgR!A-=E+Jrf>Y`6MVjH7>^$?VIcNj|K1D(X+zhsYP7c~ zbzr6YH<%MX>Aa$1A8W3d#p;2omggpj~a$w{K<0$ZE zPKl87@fUc@8}x2Nc_NJqLR*=8Gza<#h5jm-L+2Vx{8jIKPodufJmBfLDI3qBx_1m& zTWyleK2c*+%Z1Y2accL5U+88tv(oS2b6E-JZ1)0Lw*Z6*NhA_0ex+u`U51J?w6cJPFB^p~!9HmU;Jjb*QP8VFc zy^L@O8bK(6-UwZM@De$%3Wjy(b3x%pZCoLXYn2miU;Su2*qA@wMLZ$$dMU5Z@$J-y zkFWET%Sl<4IOWGA%Sknj_+{VTv6J2NB(AFbLJ;@2D}Duw9*&Y%3#NTGiuKLew&1PX zHz`C{ZeDru!XLG13c}d~a%}Rn3_aoIh3vz4R~YmI4iO~AdbD;+>(uCJor@ucOnZt& z(3+>kpbILW=#EEdBSM~S#I){bo}R`7zkKRk z1SJTN^lD5Kj29-VCa#gdfY7;$-$ofxu0^m$cmmXmt-_dShyTA%aEMSxW*$}KTtj6C zKlIc+cZ^JbC%Db(w+*0S9rquSUudP`79U$M^|%wpFrElMfQU#Hh>wA#{=cNYlwiQn zUEC~uYdP1JaZ`BM_Rdtt+FfzOMkCz=q5Nd{rTHA-#ew~f_a72=20K1I3c}R!Zmfy2 zf0{fIB7;+vv3K|5-QM!M^?0|o^zMW!m?_@ml5ML^u6)8>+j@DKUd}@v$uCelBC<{G z?>?DA_6&%#3A2rr&JDKLAx4?eCTdogsO~&gm@cWVm+~^z)y&>|&7}U`ZRYZ|nMNs3 zcQ1Bz$P|R2Iq?4vX#x<&B*1=cMyxtP6RMFl4wj+LrV5&^_nMjhp_x5vSTy6qBc;^L z_Iu4d{Gk~MZTfdJ(2}Nh%;Mx#f6SQpZI4hMKx6lkUpCakDLZib@>&PwB>c=FcW6>HDDIno_4X)7TqRd5MKAD<^3xP4X z#sAFka&oHt(Qchv2igBCq_eq zn-bRmfahs&Ee-A=E+@ER16Bj>G2_Tc4-Tc5!A;_1EusZog5^&!wkqAwQ*4R0`buGk z&&9RyvQcZ3TF}gfJ%#x-XMAY=DRw$NmZ|uIF-0n`V<*YQesjf3rBN3yFoHkqQ3Yb6OY8#i zaHW$gss(5L7=?>kI`GFsS8`oM3?G%MrmEzy^+fhA`hGg;Z9H@o6Iufo zeztyK9_*PpO^YRT<*#89c4(a)+e2Fl$H683RM|RF{aMPCQB zPHbdIvSFBaF{ z$bDesglW{*aE8`G6Fs@ueYYjbzJrpYCFWFL<*X;rcN|xoTivQ{$G%5#2u)B4w7LOA zEVCO2u)tDXlX*ujlwmcQN=WXadeSb$0_H3z*nD8pREu68~xzi3PYM zOxTr4Q7h#sty<>>$qmn_?nwls)VxF5sSI_mmU_MC_r%*TMhC94eq|S#=J`mk<^V+B z-v7!Q&jzm=Vd4>}zK>$0`Mdo^ISvJj&SLFvxiEZ42=o6nXWm0z0QgHtTyjf!_F)Go zv3?&~NP4fU=Os2i#fHm%Oh0o#Sr7qEB8Vo z#MDCcvqPW*Alw_L*ZEV#KP2Gv(T!8x*XmpxY{aYnrhid4(8oCeN&&Hr#+m+Vq(Ta$ zael14;ki1oOxCJngGdD*g~96s2oF@OrR2UZz(S{OWs}tegrfG0amia}S^EAGmS!(} zwlzz-@E5(Hy-}>8_)axaJe$#Rpvv9K$wjo(rKyXfH{K_#oY=9OMlK?Um9ip5FDhB9 zY}7aw=~E8())qb;d4|s7fR>Gm?uzAT>xv0LVm|k4*i`x0+Iz8X;JK%Yoo^SabR%+ErdcNZq zE#vDnJ>T<-FRy;|Mat1oJm8d>f>~I;VC)euu8y|(W!vi4C>Crwmq{>$YT|r;NGqxA>+apOgg&k)hR)Cib{sU~oIM~vI&R<lGt*QN zP6fT6`oK zj$iFe++;hUTsxAgal-=?I?fCFzo(pHOmDe7z+;GVk31ly9=N_hh?f>|7c1w)%3C>f zhcdMp<_Zhk1FO7yXXSZCo)p83(Zj>6#138(;LrTxFBxZX0nzbA__K?pI1UfOAgJTm zgn@JA-qh49czN*l$}utyDT^Qjg>iH<=t;nK`uSReE1rtx)^U0|qb z{!{U%D1Mn;MRC>$Ap&fhi4e#ZEu}cDxT_59i{1y23?N@ez!Z0j>1Fy@8|R^^U4oj6Mf`2VG>Wy5ICi-TVV0MCAS6O?=l55~VS`etCWv1L|ss~htmlrZaO zg<0=4S9m%~nydWlMlctq1QdSvv|eVn28v80LI_K&05-;OrO*=wG08cb!|0DAq$V9| ze8@-?r?);t4^qYJ@jpGs+t@xio=G3ag4}Zy-!WE<%wLR6puqVeBIjCg&7l8w>Qz$E z87})Ce6Nyo8b)3krMsqAT)RO)i6O$~1k1V|<)iAB0Um~Bp>U`+Z+Hi~8;Vmdyge!}T zl&b!1$z7KuJq9!nl8y^DAx?|%PZ#_gzYDxBpa+h=HmYg2wH2J*&z2?WIW2=%)Jeaq zr^k0kTeQ4M3!tgFky_F-J++JHv_4)Djz%)7r^i5#C4B-B6c^Gbp~TisKf2)tMe&bq zj9f90xDiz|E!@2-WdP4vlpuq5(c&3+GpB!^Dri&}m}yQS8YxU6JVM>mExNHT-o=%> zdqWw2G2w)rJR};j{5n2$--)P;!3_+_SpgOc^r8SHhV!trGFa3JC#i4fiScLz7&r4A znIO$X((*pr^*44Pp!%@il!=n!ze_+b@;53e*_*tGV}&k>EphdSGbccQhQ-r5P-vNr ztsi#0|3NHr>}i>JyX<_>aciO-lKfX3r|$YwOLn+6Kv)+;$nF3`nWEkOw2VU2)vcx! zkcvwrht(`;^IvF?HGp4DOfgI}K}0qK0TlhT0tD4>7Okp~<52Jdr6fV!3shh&Tz*tp zNfaazVi&=Q)ASYXSznbk!CyVF1nTb&;Rwk=XzA8Un&@7{$&~=asL~YS*`n4Iy`G9AgX)kV?tP z{>r8V%OKjkijr&~4mGIa5k{xhZo)nLrVnb8k0bRfeH{FCE~997wHFl~6(YzByx7&r zQvC>$cf313np8WiiWP%uo+sEC6iYd7$KA}*NP+*=ye(z>xLh@Tt7agDI`0Bv{fMzurYdyb&r~9ENKuZ0kR?P-us3!Ase$6+xE!- zskAOrtKwQHfWdYXti^Up65Uwq8evjNFOj3Ku(#8=fSqw2C(u30e14FInSd=eSN_;+ zl>g%bIw;Y?Tbw(LYMyW|8;=5Q-H@b$f9x?8ZWVZrJVmD-)#OQ#6-L;ywgpOO**KYcyA)(Sov3@cYH?g@85HKGT7xZ_-^cFi z-;(ZBk))E-@@XG{7xlj=>w^*R5-?Rx}dz|GZIE&f8hXtw8GV{%Q z&;I6O_S5(c5?G1ZPea_%>gQ#e{mJ~bfrspgClNwu{yl{o;?^MSF%bd>)#$BPj`!1S zmp||X=H5NX4+;u+b_{6!XamoZ=M|so56`C@p=u$H@P+SGE(_lMKFQ&l8z?f4@10wI z#hZ)gE1n6LmldLHk0wUDuUVwLeK-X$w;v3A8ISWsJFjpg?!icP2A4}HKo=AcPCUi8!!%|&j+R%uBn+Bx#BHLR~F%h&N8#G_b)icoVqE!J+iwOJCU_~i9upEaLV3H)xa3aL z6rRe>Y81c8u2+k1Me(aF4rYfrT$@)D%Y62%-q;<9z_EQvUVRT-`5`U((%hMPaiQrg z5r+PX3p0In9o)H5i70k}y9up0)ya31KSUnH)Y5BB#rfrzCP!!__D0V2gWz3l=|XSm z-CtjOr%t_s%P_I-U`)r#LB2#k3)FEU0|qmy#&YWi6Y9@bOD`}NrN`B9DD+{xFumh@ zi4GK|)CPQ0280bX&LH6Ql|*ts2i_IzH_So`_gmtF!cx6Z-Gd&Hl?7vQd}_CF#JyJ~ zI2o~xg+r?4UJ94o9~Vwq91FgRh!p31<)c`h5B2ouOEeb_yf^KxE`>zy3vLT{wMS_o zdD%dGs3*o6SP?28!bs@Hp!H@-iWczGk1;Jfd$>4xNpj<-UxD(~^P};+a`j%Nv0uH9 zT`8no+Cnb9qwajXPlAo0RaeM)iGPmsjbr5$;xa*F5nbsg37y1a`Ub6GRPNW{hZ@8 z`Y8LquZZC1FO14%jmk#lOQBH}xcj43S&ZbZt2jcg!pWyR0r^Xu=S?ozzpyHcRuiHZ zZsNE$FsQc;(h24YNAEw>BZwH9gh$9}0mOGAApi>i(MgO2B?xhXggR5UXTcnUR}QJN_jiCLz2kucI9d(KYe4{T+s=Oy88kh)46RMQX^yO zw0K%soQlnrXnb9V;A33aHuAtF%NG9jx)j*gFASRS9C|_^--m@|`VO(7ypNT8{1jV->L?BtG%$IhS2@ z&5;8cGD0{Wcb+KHnzIJ^x`a_2xp(2s=#(R0N8|C%g>4EG;S$$zyo7_bF2e_s_|7J# z7S=qyzTq|8|HpV5o{9_epZY!h_PJ)!`;!OW&~F?G!!cKr*yAS#PCm3WQ{N$I0o(Ac zr%q?l`EGvFm~+B`HQu_W7n?~NcpoO&T^xCEZ&HLb@LvxxjLci10B$0DdYwizV-n z%de`5diAWa%QnvB&Es{u(69$5HQxLFpK=m(;^M_p($0`E|Bq*7*S^v7VAIZ7I^l_Xt=jYILrNu2vN0U4+hh z9k2P|fv1v0yGd2jRHpPA@XLl7y5Dv06%YagKTui0t#yK zC9#{h4{o)E8^5OoxcDm!vkOw8_9~nYeT6|KNwi+dr>ia8@*Z;Kp3vnMb}q;O(XMc? z=CuWt`X%@!b zdr94F@GJR0N|qwsNW6-m9%{GnY3Vj}kss+4f*)9zM;GBP>L@J}nKJY5cgy`=G84y@ z=gXyjx9CTkr=`^IHot0Z{MxT>rK@e+S>q}al5~=CH{@bh#(A4f61sL%d*#&LUTSZ; z+#de)kJ=-NKJ9V1FSWNueIax`wRg^jj%4R-xxL!tAkcpg+mp)1s`um*eN2AYOTEze`$SlxzpbBwq20j@N#9Z50J-R=Wdz(*3kBthqHFPX*t9W#z`YOF4Zu zM}*<_D;uNg^V^ksQT=G;#=1)_tdAJ>ab<0}g|u?lKU}%7?otbrE9jIIz*kE!q?Nn> z;mVEGlv;SXax(hoaImPr7^y)I%mr5bv5Nsz9T)n zwX((jCafGapeV^e02JojC{AUB9|B|7!FS=zC$Xtn+FcgGyy3GaEur7ytVtGcy>%zQ zRc?0s`G5m~LSz^;alB+;IU4&VwKzfWolIVupj508&H+19BiOI;P@Q6MtEoqr7M_pq zv6Ht@*>6Ct3}h=6lv_AMZ~4HU4+2DETwMbtJRh$IYMN_d$LfYK_O>6ghs1^NX>`c&isPn_cWyLdM-+bg z+UTVE6yC7DEOL5YZnRfvmNWSSu|$t6`z3-EF^}2hia>3rSFBZVwv3B=l4B-GI-x9M z+qcz5;aUnu&82bKxXyP9@eQOW6|NKLmfR*+4D<^R(i7i0`u6SG9D;A`_uwL^S1{1W zc_~z@$iP_Xzs+AM4NQDsrjU2??{E;GVK1^(zD>YbudH{x0~$e)`LPPif3Gf)qG?_|&X;UO_0H`zomUJBOUN5&@%lsE)sSF`*}}G@mDbg^49>&Va-9+H?E-&m{GzyDWET;X*1F_($N>Z$zNBDB zY5$A`-X~XwR=4CJhuTdKU6&;4R%&(G*+h=8dQ zq(OiXiMw-BT0%uTu}?Idvf-qzwxmn8325dV^{3}MOVl@h>-BrImwsjKzRKw(`N^tJ z*w)a%Fwzm_zcdQK=8jxcc(+^#8zHK=0-6!4*LZ0Lz7TYBalte=-cp+eAVC5 zyCh>z=3o=#J!rtmWh_@cuij7*tZp&UzMX*l0Yc?fB>#JZ%F<(1#~ax$4pb6j^aoTn z4+~TVf#!dQKsoC*52t70{9KT#9O5FS#w)$@f1_-Q5ED12Awsou|mUC$JITm zt)nt)I_{ZJQL@r+!Hv!?&0yeV%*SOm;)ylHm^B|o9U-01TFeR83H>WGm7l#o1EeD= zVEx-@LQ`3fc-aMV$lyS9Sj3JO?JX@`wnAs7%Ep&sQj+kgDvg_l{LbRl9$}V(EE4$( zT|buy8(Hyn3etqUrPTnTbImmL)?fdf(0P5bL-?ZW;93EB3ol`)5F4lv+5oFv=s?%o zohSt10n2W8Ud2>mMQ{Fr3_F$P_hjd;oZzNUU5D!VWSKNrZ4E~QU1t^L0R+YsCj4Pk zpq-iTDAe!lo?|tPv-@|KA-65X`g}_>;S_xnp@c7S#GV8&zVYhPesIlIuPyrPRr0#8 z>{q5VM@w-7cKkfro!v=dtQ~Rj`LB50O|M(A!Lo5%UqaEVM~oNzF}480s; zVwv&S#~Y`&mJe(iJzK0u#MFOodd7zr;SF!WXdp3s?%0Q_LaHAKqU%;U)WWOqZc4~t z!(F5ev~;BEtM&0-?0GBx0?fHm*S-n|VBqOWup)|RuUEvaAjP!I|4t}Y;X^Nc>g(bn z`E@-F7d@DU7tt+m8eR=4i2%JK)~fKb7hZS1BKm#ol3hU0Q_uEPcfJ{%>&-G|2;4R1 zgL+OC@_iEAwSE)79k$L`hwV5@-GMm*_+~c8djrVzbmMAg-4U|wI4#|Q0kb;EHywnc z1w6ENky0;753;X@yLtaFdvCU#M$@e8UXZ>q)HjTMM3pcuV~jDvvV111L%oDLq^sZ0 z`$i@Lg#6k6nse>B*4REUs;X=wBO;^ANG1AtSlRv*!k+EX?KFn!9NxnCZqnJ(srU50 z%K=SR6+IGGETcD<6R0`P(S6FunXaA~SG~h$Z6S5bFrRv_#Z_it+Jxj&n`f)rlAh03 zw?7**+G`=bwH1p*jcN%!mliLIjc9T5J>Pq&#o@R`0#nr@*;YSGJXD!*5$Bo@OKx$P z0@cPn={=?QHsl}d)j}v)hc95Zm*s1HjfUHGj=Sy1X$Kv2r>9>YKG{J?s?MoN5dNbq zE;LbF@C}ceNqfyIlS&H7=-oyQb>85 z6%8UEO0;Tv#dv@jM4y^Dcf$7>!0r0>_f=DRFEBUtO2Tj8`+Zdk)8jfyWmSJ(-~JX; z+^&oLXf#5q>MMcE6#kGh5e5TrFf&eU4UnO9GxJLUL#l{w%c^6t&8xn_byckT#x-mpJGf(S(f-$uZb1`PH z1;(`Mr(5$d21p&}9;flY@qKAz5)uxT-*t5^hZMJrQcqj|%_xN(M<~Vpknf|^HRPrh zf@b*H#}aNh{X0foH0NRzTa`EhR6GZx;2Nf^A0zQzEJDJUmD+zZzT7Nq6Rgmx-!5zi zGFK+gU=YWecD3eMzuyxZ5n2>YEXbD6(e_*rtS>OHR()e(d*`o+s{FMPMDhsEtrMz2?P2`=u4U5dnD06cz2JJ84{=!CaluA|WFq$$(N z#F3aL{IstQ+#{tMm@E&}gQFa8bhC8TQ+wMDh_ew$^UU{q-z3z=to?oPgWVVv8#XncDs z`>}>|5sLSR&#{vy9gjU^f;(TDlFly!t%(v4THjv&??UT|T^!bPRpyER7h$!UhY))f ztjix*uUUpkW)3}E6myw&H7N3~=CymvoC!)YqFiM}`A?CQi!0U877hI|bG~+!%j?|t zjL14>&fNE9=1k!CzcA-1B%RS)a48CKA!`{&Yx8mR=EewgchmT05kgr&sX58|U~!En z4u8KQ;r)$~@ZlzqkZ3j`;mXZiB>c}sg!gdmFC~QkR-9VC^}2Eq!2jxo9}RK8!5`z) zaOl1tsPgWHZ_W4WuCd4RUEejnXCu*8vRm3}nk@y*>753f)olpv6Wci~ktk?2_e^sy zsTujTTJ_=C_AePko{I&?TBDo6K&#kX_crYnI}&>7$_YgDMTL`!+<7=9SGaDVuGhi` z+*R&O;jkL)JKII?E0#~`ZRia;t@4C4DRLWcRZaulh{?7n&o{u$L zD5_+WPrVl@coe{am26aU5{!?n^|@8B|Hu^*dG&gjO(&};p5bjT$;=eZ_8vbYhvAC~ z&ta=Jw@R`(#X-s5{dASZR0Tajot=}eMdP&)i4Pvt-k zgq!#s2#(#+W~)v~0*s2~aK~lCQpTDya(mEj=Tf3AP6>mh zy%N?Z*$IUw7pc&-?H9FKTQuit=;9`wLCwbKWqEQiPg5dvL)do+jHt0h;+_(YKpcP$q$)4mYdtQ$XO(p7xTN0%oLhbdb{Z@mZu()pwu3GSj-MOGwoq_0Z&E;ekt2H;TNR&HAv5w>HAfBKINC-l;anYZFBcjaR^z zRQ;?LG207Ox58lBuSJQR_hT;uGP(aB%N(te4prH6ahyv{gBJz@USgnE2d}OvOytM6 zM)i4qT(;(yl(OSrmpljY+#^tX67)qB700(~{DskWN7p+!K4rJQColVtYQ&p7VTG&a z38x8iTaV*aIJX7y;+@`8CJF!^r}1C*U0MDt0+@)jA102N(||tCDXsLJ%58B`-lx(z z8HCQl&$g{R0HpRsGS(zC)IUsmTz$A_$eQ&DAvkH)ryPydrdSPlr^eF3g4u-~6{`^h z(n(WHL$qa@Q)AdzsI4P{x+WgxD3fpbS&lLH#KTu3sEmiNLc&}u5#B2YF?WhiGl2=mziA}wLt}iJ;1Q@57v>S%YQJ;mG;BbRtxD~*E#{gq0un052I8t4&&8hU;UArONnFJQ>W(|zw&3%w0g@Zp3aKw z%asv*v1+42cd0S+?r%?ZSTvY-TA?YiDYr)gz0ERrKReka=HhS*)kjTNyn*SG9@$e#=v)`@4&yJmX*% zs6p*Uf20L>f1RC$*ZxW$v#YLBLbx0T7-*!3E#MGR9Aa@#$6UN_JV0L6y3c+f70`pQ zPYa|iC1ax&2!IcZ+H+t;M$1Q>G^%j2E;=P_bHE>Zk(Q{TC2H5dHxvVOS^P+HZ@w-G8MqHmwO7Be=wVU{1n&ue>a-(il<-;!z@&A*&v^fm42`NH<~y#=4*^|4I^x~ST@$4{v;x=UJ{>SAEbiM{UA zW!sObtPV2ZkX-+mu+*^=o0cK*ryD8}#8p{|$~f z95Q$^5a=X7fT~atG#UKRu$muf5bFw7#|0`ET;uCa?03OQrZ-D5xJ*Yu#JZ3k^=h>o z-Np94c`W$f{%QY z)9p1^m39ka)8t92j&(|H?q;LfMqJ7^5lgN%ffL+>p!pzEEqdvI-ZHa8*Y*#u2a7youV>(68yA; zuGt2lTCnmf(^Bt`#*(f>hq<8rlLH>9!J6y5Ef}T(txRi(uy?Ne#bnx6tafhh*iqMZnNAa=po5vAQaBhE#oho_xnJn{|@c-EJ=tN`@|fUWA{>R>+$V%uWjyV>)6? zGKRq8^)d!^c z+->FZheSDwEz50+-Rt8-H>ykFjx=5bw84j)2-`hadA4lb zzan0jW_p+L+g4g#$ygi5Q?GR>osDeR$h=a6oiov3dTxbQt4V%5F}26W@2B<<3!YBG zSGmv0$&gw2v60eM%^8bUoC#ncd%q{jct2Rp8JuBQ8e|-%C2^ib6J?*)M2Xj;y_;fr zLRInxz}|quBT|iRpu4k$QHEzn2%i)W!cpzNDl$y9S0H4`C99_Hu?jd&yvx{H_nTI8 zI`{!u!!EbUHO(^g-+4i<3GPjHOz7w8%()Rhd`by4dT~|>%yrd9H+TCUPn_Oe&)HoS z1KHS2=VFqAs?iA)%t$CBgg`BQ3lBCxbRiNVdt2=8qzljzJT`1@P4WnNF4WY3XiLyE zYr=haEu;?P70kvT5&v1A_KA5;ZC3uf1@xW`l{TCju>}yOW|InA-?4O|p{vZkMtL1VM zx^#E2W#8toeW;Hh*$h$^C1oEO421#VU_0kWs|bQH7ATF5W?{3biVs zmSVM&hGdPURq4*1M*VaBGy-`0S3c$RS6X)Y(im8_nv!!)F&zNJx9ecT=Zs9p=4=nb z_#j#sITRzwB&(dOOMn+eWwlX83{Qvct5%HSVqG6({u~Kon#4bP6xk+t4j*Pz`6`*S za@oRby?Gl3pK;Qt9GNO6Doa6`4JuDwjFiV>US=fDvKf~-{ZCI_48HvIai)k_Vh__3 zBIAC&#U|6Nf2uDdPN^j6V3}+jSpyw-l@8BgNKbAH@8y%H+~Dg!;|!d_z?+f&HAI}= znYkGj#NY!X?-H%pEUFNsoHd1w?xK7M$z(9MP5`rVULK4nY;KVMu)K*Qh^_RQ>y*Wm zrn}>t#h+9+^}ZSWYq}`kTr>?W5>IfhG)5+69FRn3NI|K=$U;HRyWn!GsT6Gy%3CX< zttphCmGWcgRNkXL%C&5E#D{DuYu5KIiBzLWH(AM|EBqfa}ohMR^gflGbHvcWq4bx!uj;if?RU*iLmkj2#93d0Oa* z2yjc*vJ0Qj`!AqG+SDnWS@P3pGWjK=$=)co{)5Femp8PLf5p&m!ELiCZ2yOkFeo9q zU!W}DZVtR^uMiN_@$zIQJ<3 zntII8&(E(bOpI#Ip*ir^>q)gkLqEvuzSeN9_{(?cg!C2 zOZox&l0f}F_u(}02%(ljy*yTEmF;Fw%reb0jG!8OqVt8w7?;)Kki$v(;p8ae#-Knq zHp^HqQe%k|oU^xTph?#bnU(w>5&fS>CSCxX2HEeE0(&z9%B;dCqfvS<;w1HWEMgMa zKL*)Dl-x#>siOpT=WA&W%d8S-FNU{&#nw}(qrIqI$M}aRs)Mmabb!n3BKo+PmbKq^b|ah$jhu)~%|`7~R`prwrwjmy+Gd zt=i#2^D3wDeorWyWKJODI#>C6j$`CF1tF#D71Oc-7r7=(RRPS)!(tl2&v^}T4vJ|} z0sDQbrvmKHH*qb`xIZDQ`%9|UVl4ACF2l#t=cG?%T+OIXTsHd6RJPvTR3K_ zr=(3U`SVQYc{e3!6jpLI&XGQ0zH9ypVY0KMWC4K=;O?QMq>2b9mVLXv7E3uJ&h0sR zVCT2u9At_?e^QbY_>n87u7+YEm9T*wW}L7y+`Gv6e<-M7geN^eYr*y;*I4(gknuPs z1a>|ZFFXQcq$!;A{tv+vMb=hp<`?iddAK zuRc?ZaN5VZ;^auPJCon7UoIhCgiooCegs zhPN79>uc-RsdXBYjfs3PW%#uIniDtn5c!<#-r*AVnNXPy2$0^M~RzN(q)mvD0<;v@gdwA*C8}3>4w%I zV@pcje$C-dI_Qz>L|>KWqFg2goZijc-H{ujs8%a~ooNV!(^ofyq$#8!OM#kOg+Q41 zIM1v^Snej&xBe-M!f(e{2kEdBpFD^Ty9@*ChT-F(V5z)`Em-R5;D`~lVu}w+xXRbZ z@+=|Rb3%m8XukUd;#tr<(0SXOlV^#q8kj~9(SgCfJ8lixSCd%rLOc}%lzqyPow)H2 z$N3qj&5h@t>T-bz93)+G>Rud6H?~rcEQ->qrG&Gpg|?F3D5o!P*q~*?`K-o*bu{JwrLSPRGow?G;p1cH$qou&7Ia9DY+{l4={ zt$jUE8UNk;s-vj&p2H$f3X@`Z1ux2I*%f?my!}`|Cf@o_-*fxHVczmzBhz@B>v|42 zR@D>#HNNTq_;%gLz;}me+G5#EU(mk}ujGF49Ua`|rV_h$NVf^R&Vp4&JL>hFc2ABvJ$r2ndaIPlrpcSK~cp%LTE75kZ&O)OEUBIL=NjP&;%SG(2 zb&M)3MXeEyOwDeXdAo2ufOJ!k(M7L2izy)N5}To(N#LfRxG}tQ6;BbQyzAT!L{|9a z9_^xJA$W8UQ8Ni|1xfeMtcum!5vwh8VZFr7$bh>H3#QPy4xVvYq*UacA(0Z`RAkt{ zv;n<*v{R#V_A{_8ZJ{{s7~?}xL-QuS^`?Asj+gEZwH%v{~ zs&ol%r~WI663M)@zhyexgHPhLJ}dLZR3TN9gJBfG$ce3L9Lnk zO0R)em%!?P{AO4Dig+ZwAXt9QVUv>Pkfd6lvNZRA&ZAvA_M=B!9n2@)qNe11bUra3 zvPdL@?}%S@5aDs<@uQ1&&X(f!sei|(LekqT*Jb@c00E44!KXeiZN9##eNb@xb?rm> z=uo2a=NgPpgUOc-CNe5L#`D{{+Enq60E&=|z- zx}_#mo?9}m&{Ox)oV!P&3!e6C;1rvIf}>han*JA*s2gK z*NZ%M84Z+B>_-S{T|!`JF<+06dRiU#bZ%2{dpXc1dcr#pJ*AH~@sXZjXt6(cIQqj} ztFKRNSWpFmT=4GOT_hK-{}T6Xd}2Fn$L?pibvH4YFwtWZc1nc%pUU+WlBG_NDq{{a zJSo=MpFx}UGeZKA&kFSh2ie=O&O?b2yibU=5*bOlTND6;!2*N;ITlH<6uyV{KWjw3 zTokYaRY(zz_5+s3Ibh8SYkzBB-G{~LG`Lc~hFrnRgR>Bj_iTo&kpozb1>Jy|FtTyX z@pMdG_L)YSue#TNP~_xaLUl<&YT#GK_Z4Q1@ZpVvTL*bkUrX%6$g18t(fN4NTUpD- z4V>}dIa0-@D_T8VPxZHylB#wYTFG5;5)se)3n6sv30s#IFlSO~d7*h-3?Q{e{q(B& zb;U)_u9_#MQ0%Fu%nP=ZAwhhUP6xPK{}7GyIfO$-Pndm&y%k@yIIP03r6^lYBCQPO zyKj>Iw{LRggV)MX*=<2A9N5LJvauxZuSTbSztB89-_oAJV1JAUhB+lSj=Ab}WTirx z8r8yv*7ZaEfnA67eUpAx2&MP6_%(ttg|5u%2K0=6LL8%QHp;QHZ*?SY?*QpixLj&HE>2@RLfWax{TBh+#wO6)TCSQ>>8Y#2cN@FsBkK+96C z9tlVGE<*+CD3Dv%t(Gf%62?UPZ6TxE6`&*e zJR$nAQ&n;v*{C7&ba>F)l9%%2aY|Tv!nDkdhM(woX1H#hTVx(Fq?1=OGPAvnRs zQ*7124ZLa2GK-Z^w+Ip!J~^2e`=t?z?D zT3hp^5fmn7c*n0GYkqT|UOojT$bG1x-0+()?dZQe z&vU;%yCqr{I4u<~cE2U(|Bc(60sX{+09?k^WfcHYoaJB;L_-)1mfmDRghD+eeey~x zI~nfX=`ZisvBlQ8Q+EES&`iSyZB#co{cc>~h9Xn}JUcH4qUm|p|CX(4Ok(_Zv(8mu z*9D1s0P$(DEZD*M6WE+02R^hZ0TDB3;BjR2L0y`9yJAg+_*dsQeJO_a4n=4K6#9L^ z=$j(|B?>`2vvDC?QE1Z|b!1?@DpIV0L;4~+n2vSOe5P;I>o1z^_L#hpWM;&=dX-W} zzmWwVV=HXueKzQ>{E=@R8^L10%gkz0Ucpl?hZQ)`Kyt-!ZOvzrxaSs2wFugL^l~2j zv(J7KAO-M|Cn~YY!T4a3l2%K8^9m9W$)jdHz5&hegQ-=E=K6DPH^Z#^7Z;n^X0N+% zH9a`1B7a5M>4LL2SF1@dTrKjAXURVjDEG@VZQtLny`O z^!XgY>!{wK3n9)6tjPPqJj5Y)oT@nZ5qrx{8fQ1VfMUwn52t6#n9Jikran0*y&O2b ztY)-Ex6D-Rsd;E-hCE5}gH>^alyC=i-f?TJDqV(2&L7##`zq3?eKu zS__$ej}ua~+2J%5Bi|z-Ekf{O;lows$7BF()rL-`y{C-r7)pkz&oLaby2eeaP zAL+PJzrHqVV!k?(dwwB?*CUQu!?+om;wI{Bj<_P1Ivb-Vsx}+va9fumQMgaw%KSRD zk&F)g`qrokg&$x}-ad`M!v6Am{Vb+B3$JxfqE08O)EFs*Ix)1tGil4|=H$7#A)7YS zfstzsA4cIUHRCud9(mO3bSgC&)biy^a?MHr4URM5$z_3_n11k{Y#dI9qtn}qwELx7 zHTy8{`2e|p4#3|%3-ADBHIFpR%IOHzPdl;e9VHeJ>Ba4waEl};3n@eWJ5IQQC zw3E1Pw0jPf#clHUbFBI|2Zn$O>1MVEM*wleQZefS&F?${sjiB!&fyrqZ=0)%ykWJw zx}(htq%5O2K4`WXhmx{m&9BljGINNxy}a-4)dr9{;(=ob;IqJ$;*wuvOl|zC#lGBK zp(tG9$Ms~PE{Px?JTJ;3FVZ?D$QQz}K)0r_0+{S9D zv8~z0M&rgvd?h;k9=?p;mRY=naiVmdG@y$mG?9M&e5r{6i@2H_oz)TaH>e34PDc9P zLs;RtHVE1G*T83l5i3DHsrlbS%*>@Q$HQEY=|C+_+V@|UnvyivmYQF5ZJItSOiNiC zegvaVAf7wn#ifAW!jhmTt8qXNqzM-JyUK&*sC=@l%CZ`$GDme*8#%R!ZpSG<9~oul zny{0T6E_aSPeODY_)1a(SH5n3KpK zV|PZrqEE&|@QLg3*jHJrbeG!j1y!zFzkO*wjc@u=QIOUO(;{vQAuyAwzTY7(Q1#$N zErWInM_GGev9;$uhP%F{u}a;S%Xd z^Sa_U&qj(QaCmh_j9nZc>X+;v43YNLw~*wpSJ4Xrc)7@$z=Qz&T4n6GpxsYdEC?H2 zd6<13$vQW-$T3W8MOUDu#+$!}&8)27un+6KL=@(Em}McU7JK!@t!8V}68Cv=5d!<( zB3h5AV+$iF;}~umi}q`FfQ^gopWq7N1n2^O4{Z*^pE_o{#POpJmi_^d=iuW%)l)I=^MKChY~Hj&XdcK}fF+VwDm_H0qx|smfL{T=u}L zO^4KmFZ{F&O<=j;E&bVD-blwT*cnbkm1P(-f%AVnq|x>@L*Nm}>eE#`bv0WY->)U> znCvv-hzx6lbk)G$M_oDsCO*E{b7Sd%Rb$CPC9yY!wAS$bTDGPUzoI=W?xAfAeNI_c zwmJqaeTd4~#v-~F<1R@4f=JIt10C-m+(-TEiw|DIYJ8O1OKPdVI=6$^B6x*S#ITKR z3pK@+g?oOVimqY4^gC_sm&JNmGoyt#9N7q}o|??DnSn!l?e72`g8*;>*~9`@6>q=e;Q+8aV*4>*x_A7_=#2#fvREP-#;oYV zq`3SiaF5m^J+!8Ag=RNZWT?ic@OG6kb@VcpBHpcR2dwpiTPV!0- zZX2cd4Do7+s*7&?1H|@N`45#+e{QA8)?%J$fGn;P@>XGcpM=ciT0rKCUp9!y;_wB6 z1|ayAsriLUFjwpU>BDZYymqQ=C+TJp{c*io^zQ&REmi%C8rRKV#cA}`xnS^SS*9}{ zH1196(QCC4^{WdClRbg)i(RTJ!r@o1w{||I`meW^!BQ$uP|HOqT2s_gZU*z-3g~tg zGqLpRyT>Oi2~9v5h+^1pGqen{fB!GF{qF^14d#?9Q4#;L)0wvZrUk;)mxG<9X%C+S zcVfTOX{8gC6Or5rTPSeB|3}CL=JkbGGfuGUt8lG(cuQT%oDwB^@EV7<%8JtBV>qp~ zsI9GUUam3UfGbeXnvWH7{^a?PvfK>)92kL15ZOUXtqU9Y-4k=g#3g)KM`RWP#Bf?S zzFg+2cvJP3CSqvR#dEH@X8&o-2RBpmQbXL8!&R@dW6(X0aITa$KvGnR37U1Qg2$5P zLyH(RsL3R9^z`A@(}QIgT}W4;aanMW`)=Kwg-2{Jd>fT3fwA0*F$(dWo9!lA;vRO0 zqQ-eXO85S~FvF6V!JS8GN(C5(>JjtTWR>pFk_Sg@Ve2;1W1#83*p>DBcLpW6u5hKGrjE%cm`MwAI5A7aM%y2 zaI=l2MO~(Gbj~qB@O-4w)pE3E--{m!Hdl=2nulv`Y)js zg1tsyxdtUDA=nadU^K8dMsr2TIzPP>BHo*5M5jlIG}aC!sQ^xIv4yIg)dWhQhW+92 zl)>=YXpehV2;>vq82MH zc?5E*w`z@w%zJ+`HjS=iybcr~WZa5(yMx#<)B4Ff8D3LMF7=Xe0Sp?00cj!sbnI+r~~mXxQ@=A}7B_cqIusM#N2Ix&ll z?1-93|L)0sw1WR{#*{l-hFN(POz%Fn^6qu~wlC;XYnBIp?e=l`U8N6+mmmO(RdL!2 zY4KQX0#=T?MeQ{3y%0xW38VvCE|b_W9;-(XnH+RVlJ#Jy008Ax7(COXObZm5JHm=P z1k3OfXF%v!GDC{y4ZsOF(8;lncnLU@`K zqA+ut0v@8Z{wg2`R0PzEs4_uxB_ z=5-HFXhPAjjd%?V$O(jbnTIf#Jj5KI0|)!dsmwoXgq2?uEAeOno4r;Ou+?Y$Uums; z{OGU$=e+~rC+A^^^UlZG)7<{xT`FSjGtxAeVOkm0fB(bYO%6B4>`>eBaR2{zdCmU_ zE{Nve&5$vZAea(wXkwX!a>)AsodAZVOb!;x7L!6GejUclyYv|4q{Nxo`0;PwO*R#E zefDEoZI1IG|2Mv4TYNL$nRo1rDfx?-ZUVypXD?I7F{E$+I1t{cmOak@JullN0V<@s zKrr1kevhoyAkIGH)d+Fmj$b$^dVw?=%giC4So-RY>;Z+ow8=k*JCrjiVDs@+v|u}@ zl}mJWNhs&>zN?ExkY}UnNq7MMu&T|bQPIQr!)k+b@rl&qsUPaUsfznj9=^RVj}c(I z0EFaLKoSE)r{!n{M4|Nk9z;t4A{^ra(akJ~QpDX{5S<2y{;=uTmR|+In>DV@CH6aC^vHn7|DHU;(OpkhbY72NJ!$#wokOWgHct`${ zPyxD2zf>?voPauSOKb%uM-gPEw_2U~K( zV1dfWmo2yKlRVsrVyS$!h~R;EL}z7jTd%Jeh~j#i7iI3`Hk?I~Z}N->rq;PNl_273 zFL<$W532NNx+8u82a2!=&4xs00uj!Q(8d_-ZL!3p4KuZX9-t&2J~)ApHP)YBF!lT4 znNy^0@5A16nEyMQJRd18IAF&HW)rqtXFjxqyE2%CmkXc&Y&rblI^0A#uV*aUoN`!B zqTI4qwHr$}ry$PaC|FBuDwa?sjeFy1-K<7*Uy8%gjH>$4MX8JjAl0tw2LP$kaTa#+ zO=_t2{ihJgrLeJ1VC~I3tWAcE-#L={uYRO?J`Ej*1TCt$o}UKB5sgyfj1FFf3q>+5 zhduS^T7v?Cr-8@HE*w;}aY3O67tyPcJKb&M57Oz(e;>kAVLxnG1c&qHh)S&i-lA@b zK<`r-*@XthLp=3u|7^=}@ z-a>~Oqg_`mP#$i*Tyou`hEUZ^S27?rc9x=oyC${-v=qs0#IFxRJ(in(x+-*t=CbIn z1@6wN(twVorjCkz{(mYyt1^^@%Sk&og)PTh#rCnr)xA52&fsPTBWrHBs_4@x@~NR&i88_x_>x@x5OMF>MjExr zAxV?9ayV@Gm>o{>5^BV-V+KriA18>z~stMtcJHbCZa6)QEXsS0+i;zO5_dFt<)YvK20=wDX5w zO2zQ<0k`hyi#jDKww9BmczL2sYs4i0;WNTWFbDfM{?GriKZ)Zw^vYRV(6Vj&u(qQo zKKRe3W)wGlRQmJ$(-%{e>3i4z?=QxRH!>7q{sfDCc}kG5ugbGh@>ob*YQx*Rj#E z{lu*ZwMu~;ub@Oh(O_oU@&SAgx3~I7ZM`-KAm=pb=%Q$FeWpRJ?Caq2I*%J{&>;GT z=s)dv1iJh02uPQ6q^jS1y4cQ$G_AXAOzJL6*rrMcOg)U4ck zug!W!$@A1(a`_gpRTI;Wxk80_y?gG1C*?2Uek1sPM4vUy9QuxCy)F#QBWiGZ)N9q( zeho;zpZJ$aU@GNCuXvj2`*y{3TCr(3uwh=0KAf0)^x&s@)V`)3PjipR`^O&T??*h~ z`XX>G6`J2k6K)|i)7S1!nnm}Po?ek>*~n8Fd6J6pZ^+a56vtR5S1uuh)sSXjMM|k; z(_tL=o~)3TIx0-AH(RV$c8GT##OR!bp#RQ-E2R^q-hMS=L1;I{{30%ggDTEZ zC)(uH;%Cmfc!2!(TiSeZxlD;*+$1FuLp9ULG$q2X?p(wfgCfGw_SfDzGok9+1pu&% zWTgUB4y{De2NQqN3U4Cxi%3vFcwOk$y~gUc)sZ*tZ%()WN^@@COEK9#vwYM3H?7TL zM2Wqw&F<^kJWs7n?JYqp#2~WJ#C(qiu?fQPwSifZg|{WYsUVVc$+cMj1K|O)CB>6T zbzkQt1h=Sf*J)ML7(aB=wjQ@IOQqzt2Dl5q*e7V?=P5QP>ZXX`P!&XFjS)&A$K%Ui z8SB=V85+Z$B(3XWGmdlhZfFPF8Xj%kE2bvr?H7%&5nS;b2CZ#OlX4SpP-uFOAOL5W zh*inc5kGcwGy?qhWlV!Qfu|8o#zaIYK))7f+DjQpT9UbU&$iD(Ywm6^S%sr$vUkNr zEKvKBU&T*rLrDR#rk;akiiU%4v#5Rq*F?ZAY^lzeCb5r&j4%!(4afq_~ za6$fB+RU5&er)%INUWNPWq!UNoc#5DVmbT4Y+m0dbl(p|$4ryjnL8NFhWRk3AXujG zZB4v9_P7q@&`^@j5NVz~b0TQ9h_hf@$s<7;x0Yj=hwT6 ziC9FF6in`@WYaTn9uzg!3i8*{*YeXjvY?lMk$&C?PeWJ>T*UvixPZ8LOz=Hr$-OU1 z5iOJn%w>*#+ZKaJo^xzG#8#!Y9>7Vk%5u>!C7Nt&uJs(Y zieyvL8Y(=C4%)V(Ulz|;Cs1RD7Uo)a(b)coXhhbmJH$Xpqcr9!t}nwQ)s->lt~j>~ zAdFKX#K}yVf?w?<+npJT$OoDoBm;{|&nvU!!e+ifJ0~ug2M(9t*9kH6d*lmi{wCaJ4oDd3L=o9Z)x6JWR$E5<#%E9)v>8IT@!|{bDuZ3dOX==do z3)6*Bm>cd31)=H%Oq{VPWhAEBHKZghkT=ADRb;nm-D49@$VW089;lmMD%x-i`u+G5 z2M7qmim8if<>=f{82fc-G1&eNaP z@w`P#Olb~2JO@GT=`h!sdV0s2I$Lwfn(CuF_0HDhJmywR63)&m?xv%hj5-qsNC zk}Wn&61RR5vm_bbQm6#u5dF#6eugXb*$7HGx+3ZRL{DM(jYx60#Ca-374YPdNNS1H@HRpMLE98mmsM5Mg zRYjA%v#}sE}55im39i#Y$i`j%&9q~ zV=%E2Z)HqP#nPajVTBj!$>D{aYv(=|rK`&m)s{9nU*Ad zwVMNb&xuc!_<`c%0-Y-*`og{z%%*$BFM^1L3fa<$Z>G1@s7!1$+Feg|)zbG>AK0G+ ziXB_P#VPHUSmzKWT)qcz$` zbxY}dQiGE;N_TSpfvFco z^iv04DST5bMV8y{V<4rh?AUuvaB89aau**ut4KM*m(Z0X&{}PIS7kcCHa!6|+49%? zS}`U~t2t4%v0OYe3Qab5a=GtEH=fQJzv+<}`^hff4AkAEhNjLcPjt=3FxkeNVY>~F zBBt#L#4ILSA$`#71m;$poOJ7LojhrQXIx*p_479Sk_6SIz=6GFd+RCClF|h1U>JgB zAt!2y7Q#Fh$L>$B1zM~agV=z2LlBI{;-r~xYbAE**`?Tj(iKZdk-1z7h9U(=xJ4(u z<>G#R;e{0^8QZ^(*t8aHOO?JWYGH|LrPkU~rr}{%Y|I*d>xmsk;{GDuY&^lg_}Hkf z1DzH$u@AM<*AuaieE5eOQ|e?`W9vhcu zcTya?G7EVG=bDZct`^I4S3Py&H4Z_BZ}%sHmyFzRM!J=ok*NOtTh5RU%7!jj3Wq6 zJcgyCx4>+*(xp+QLlScysS{rL=5Q@E)jNLGhT4RfH;V^*hx@9|e82na!3C0$)-&CC zvUKZV?Q2hIc?ON@1-*%en&dh0=IB)!A7Be$lj8KnWi!RXprwruE3Xg8V6JGm5< zt9l#VTAhve*6bm zb`MW1`H8QBgNXPRBM!UNZR@OI z^~1_`UG4;vmYBK&hEhml|Jiegxy-5f^s(MpDwC#hfQk0YsG-xD%p%q6n>0|ZHL(EC z?mO~CbGW?`n%Y6+k7{Ex#yXXg&0LgMwgo$sv5E{X^}eq!K9OgvQ(yh*eP~0M@d?h! zwdf<6$=9BvnS+gv#odL#7^P*U;sF=$;+fbF9t8^?*%v%X**Tp_By34~sL+2LI4o-= zZMB1)=R7E89>31hH#|=inf%uH26xax=mS2@i9cZ=ARq)^-399+YqEK;mW<`Kg}$p; z0ClTxY#*L`GBL34Pc%32CoPj>BcevzFZ_Zo(I|PbDA&!N$@oU7ALDm@{g(zw9pB;h zCAvvLrlAIeW7=UuZ;D4#lf`w}-E8Z6&f}lx6!N(#Q&8+!oKFYc4FW;&A%RPyr>>U3 z(*rpFNma={E4%BZ^2oy6F0m<@P4s-R>gIQl0P5c;wh$E|e>44L5_z)6*PKrCDF^gS5==q&yAon5aw^gRwD3mrpVbB?RZ^w78g} zr^WwC^km2irWv~!@HE{iluJ(=K&)T|Ht27qw4qrTag(7w;vec5^hrpbp83C zpqz;DKgL!f6#DBW*Pv(_?~1du{~KG|i^WE0G-P^-_3S-+pp;antK~gfA9y3H-Rcg$ z6V`skxDBAv+P93B_Vzcb=LfGnRv`+shM)za)c1e0GdOQ<7n$`4Y5fc=hH_r!;E9G3 zwuSp5bJ$hZhY@Pp<*yYAFcNt+${$`W1>7{ga;$;Z?Kc5qdZ{l#9cqK5PNI3U{RrIL z)x91KF$~TyLLi~hi1AW!lE0;f*m)xQqLs;lt6C>xRn%$X+d2~`k1Neq=OCGxnFj1> zVD<~V!`Xq1jHxyNNsJ^F9?Qk_d5d3=jw;=G3CPcg0zcGrWVa{p~@Ca+F6bEYLa$qCP1$QCCDH`mY_4 zpr&-3GNUpI?ID~?UOrTV`^)wXpqh@Gc*7uU2yBd;Vg9qqV=0fM-8*oX*9RGnWbwv6 zquD{ZVY>0tFA4N86(1$oKU9scfwteBv3&Npki^26BQu_im+GARl z>8G6RS*AzgClQYpt0KsOA=J-Jj34Tb`F)6cUDJ8rBhX>5{v#p|f1Vvut+8_*?ulIT z2HTgQxxNvj)#sRDgc$4Ou$VyO$|TcY3MSiKPboZdJ?_;5Sr>~K4(1}`@ZQTzF}aWS zWeboyN6@*%GNp{ukKSP0Pal)Z`6gl<{C!_p_QE!||DI;G$1IwhoMvYj-zWtqwIfeyII}nD&;*p+u3;yYv6nI5C zM)WI<`GlZG3J};Qk4?E+4B4-Q1?NDW;rB0Mi$5Otn0)J&&uGJ@h{pF^SZ|q4H$Q7B z#qqBARb%nJH!3&m1-dMh4Obw!M&qVnx<<7o5H&Wpb2F2jm52GQMkde&i^2yWB;|rc zSW51zN07_*Y+vW#jfNiNr`tQ2@X)NZm5yLV)00_)WjzdiGS2OaQHyB-vo@5-&u(z8 z0W-1RQSn__OnKH7j|#*pM9yfzs0Wj&sI_Y@FNJt zTTT0dolqF8@wfS_fvAX$8-Ku!*=Y*Ip@1N-uvE?E8OyllKrIa5_o=5RevQ;Bx=Ilh zwb9-1;WW`^D9{ebqC;Drt7Y_cm0XHOosnWtKBh(^kO+pMMqg|s{3XlTJ_aFrzb|u} z5mDr02VAY}3=$M18g3uH&fbavLQSkiFZ+I2&x7PkJ55TUpjitzM=rIQOTneNh%_3A zJ*%qaZ!l4$`aGB|csq2Sf`@CEyP!EXI|FYcC|J&1Va+K(K>&Fv2KfGfYIlvwufe$M zQ5l)iK#I!yqR)xStK-TF(U4IL#tnw7aAB_dz6ltwM0IZSnyAmVfoN*r@YyIg#<0zK z7-nz#+yJNYIE6MHoGlvVy22(&3E{B0EY7k=H$1l~AKC8XMk;3~__6s4)o%${( z{zY<6Tv5!B_RogF-%d~!d2Vyw7h{{1C!43r>VBUO+x3+LeV5ABL=1t}YQ?Hw^}_Po zeu|@LFmw=axxi;n`QAE&s09{d`pKou{M}w~*A|?9)g12G*)m7%_^CWR$5^I<7RJ6j zE|~FmQ=o%amJkSTXadoMOk4EPAeg}uTYOP6!2cg3F#yMLD7F`o zG;Paokt+~uyf>(xb*8KBXOH&C+F&jYZ(?&ju%zR(we^D~b$5V9+o^xA00ND-xd;UL zviue-*zM#Npf}AhQku4c@wSnop|4u`5Jla5t}wJOqJxk}%dK-~uI{jdz!J{3BLrx7 zst0T&aIwARu**;NaI>9y5W#-*LUkpk37EJ1(nHLxuPp}m*CX>{8;$It>9QgWs0=o3 ziyl>T8KR|FH(6hsvgY=b(?5igxPP8aje5US(6P~={l)q7*4gu zFL?DmBLm>jYp`s$z7OXSPMh{qi-WAd{k5e0rP^K=M$%6cNVDrF+ofDF<3p?zl}`0~#wRCrxn zCc}fy(P~mDc$v*jQv6!xoUQ!*nQgSfwxgB&RBbXh_aSP zB~so6?XOnV%bnHO&Z-eEPYp;GR;pau{|wzDZjMq+jP5hyi2ScRG+c_jQ>9WdT56y2 zt70`)gS!WY<)y?WgMat)S;QQ4&!_Z=>|I*ZaJA-D-Dg^xm2OpS)Hgr++_)UtwA^{* zB^Zq-XMDWp$>rE^0n0bf#8-tHH|2?hZP@^QkY&)u_p{)8lLn!Mklosk00aD*$WowS z#j#gKay#SL3%z%dO7u!#RlK%_+4w1UtH7ZD(z&pQc-3D{%{!Pfc1nVQgoMvgqT{MI zy3jJ=v4&`PL!2=vPH7XBot(QzFEpuT1SP1!eQ`0C_By`^M%H2)C+uQcp+FehS+u=_ zM-IPhFXzGt_P;cq6cw5*{I3%^houMr>Q!(eR?wxPbfgVUB%L4Hk4-cpSD>oXsK_0G z6grAi6`mHs8yfzQ7!Mlk-SSHZeg^f{w-|HPs#!YIUnC30XeJD<|`s(|l z_+JgIrxC94JJH~n6GG{!P+T$;jb6ByY)S-BMTS79cs{=C1IC6{#wuU4#oN-EJY^@ z#<8a1Nz#&j6g6pr`Y(~qQ!H|8z^7@d%$C@VsMHR~jf}>qrYf91nHzyg-;HJ&dPy1} z7=zy0LzYEIXclqlHKIHkMPrt=<>xH31s;q~e0Ca*?)rE2x*;lno62S(i$L!=#{ zR?fo}qDu3)w&o3-?cJ!?Noj9-IDTYhvjwBQ3|5=1vac(HO#?k4NFhvNKUU*ul2$fC zLm4LHi-^dPhqxD3qV&NT%?i!013lXzvR#F3xwZLGeOA{Lj$BJ%U*`&bOH^EdK!=)DvWf$RlvUe*Nyy7qZXuJPl(Go~H?#FjAoPZ_0$^;hx1VbrFu3=3o4$So6QC!a2*) z_8^=*UB!?BW#|mJJQeAtDGR14nr$N8%tboD`V35JhG{r>0`w95=2fVKaG@#XIvdo1 znS&Q$UHxv?kgv1tJr*gWs-!}N0HeAwobxgT0^`sWKBenqPJDWq6Rj_~+5<9nHplhX zpT%*eP8QvTGg@}!hHr@5x#taZ`dMF)nd^E6h*FK3Ki!$W(9F(R0@MafB!w0;w6)^q z!7TuMP>U(aBIUCzlesl-lmrn#05CjaOTmYT#T~irtK!8nZdbxxiWw#m=4zqIm^SNI z1)yLUgJLle+$n6wT!c~Js*5|;gWjIaO^%STu@}Ot#NMoEOd6!G;-;`E)bCt?++r@% zM`F_vX2%>OUwrXg@JG;Y&Sb&dBgAM|eTK`TT0<(nS?CdE_1Own)d_ry}y{;c8orvo8CACYw>Kr9cUgkLwC=CC}d#JCB(+V0MKl z-bqT!#H*Fi*T#q5Q&!qRF_YwpT?PB4b5h=fZr474Hq#{nNl;vn-L1iyK25jHM#E1x#|k{f7JoMp zYyiPRgj%R|TkIl`*-9Oz2Y(3BE}h_|Jvb4ge)$kqnKI1r^?pS9PTpEqEm$3iy)9yP zkR8;QLf53mH0#@;FfWZs{{hlw_qi(9)4UT=>=`dkibc11SKtw6YAw(SV^xyFuO$rM z>NZ8Bnw8>WA>{89e%UXOJm@<-V1puM7Yi?L%5qHY=1x-F+EOvp1IyI-k+g;MvMDR? z;zvt)cV#lFwq>gpv~?vWxCyLTkR(6-4iFLn1Qa=j`6Vf`n|W{E!36Aiz!zfPyY}&u zL+jQG_78?&eHVmkZ-t$sy5K#GW&afBT-EmnjnxF)nH0nk_C}%#4}Am7qO~z6)85CF z*yngFu>jvi?B&9|EYuK-p_JLP-bxfLwZJIZTf;uT8|F2apVtA2X? zB=PFu(>sZYRfRPJVqyxLvB#>9dK*#7?#U3K-wPJe?xW(9BC;f!z*AqQ8bKeC;(t*vPKq@!%%EMkV0v zptsD+P?HYM&DZws57l3HHP*kqZd*uuF;vAQf}|sdo-PCeS6% zW1mG9j_ZU%1fXw%UdJNyfO38y7JyVa3~7hS(ZbIYlMP9eAS1@xSuqS0%*Ipi5sSZA ztTMVolqScY56Fuw`g!qauyx9RbT+n3*_}FT4oHj!CYqy}-hhZVSV^ohq150{oGUcl z^-h8n3jnZoQ$?uwx)4c&lLK7C*$6+E7K%|V7R$jTyAQ#1c3%?fx{TYoyP5`VCX3q@ z9GGffpWSPRh3(Yu33p^pm9Dj;CzIzp@N3$#Fb15+h8nFEglvFLb~=sp55dTwK98X& z)XE85PB!3OXZ=B zN^QyFJiG^F@CQsI{cr#|3@lpl>g$ceZgON`IbxbD=pnn}c zij@c!Iu(uTMprGt8o!KV?}l;sIc(@_Fh1Nih-9`4=nlt#+;l9RvNf@hnsLVQRLd{t zZvruv6YH7^^%;egX^xU}UA!jx0@oQ>ivL=Pqnh1y6D*0OOlT=MW($FexpZp&Ex(>e z;oZ$cT4Ng?1 z$>OYiWW|@r9k7ft1PF!h#L$o}yddHRi?7ClgU>SOu|@qF0yPbP3%!}&_LEcf?%o@i zU=@WhgjqW4JaOtuWpJBgp*V<__o%^G-MY{4Md8?zPNoq#^b~tUdkwvpNm^<$6WWigB_y7GnQyH_6YjVwHX zcL#Hd3B_}JBW6IUWij2a1jZNIO1S-t6L67 z>8$Xp!g{8(BE4YY`7M>Sf@jF*tS7oxsIsZ)?nS&m&aYD=?G@O`Ydxf3S)az0bE!2- zsmo}^r4|ZQMIZ;&>|HT0M%GGT@5jXpm@x9huPLBd(?!G43!o5fvPnKj?``g^CIWxr zSE~Y10@0;7#X3U+aaO9DqydoLPMRIP{7;cSE(b~OLiuph9p2S-pzCfPWYB46hC+kh z8q4Kb#JqG)Q|ybLyU7 zq)=SVu59p>B4t{ih&X%CgD|-HHQu5-2YEeO$nNWYHC%aty+H5H7{>JV$bKh ztY|ob7cB3#pP>$3Is~#4M60WTsVl*>Vag(UkXMuvgD!t8M-|%$U+aS@kzcueL&%}% zTx;6AKo|#(ma4_#%0Xidg$-#qvaGK}V_grl^%$ajx{!gYn!}bM+g?lEMj6a%s0tsD zM=0{eemdd;C`zY}e2kbe2-4Lb%AFhlIG16c#RB&h9I%XtrjBF7f5Y*#7Xjf>ac$!= zQWA_;fS+b?xEwBi`F-L%n4f5Hi!T zP7tem>g=J8*|I{0n)4Wo823JuU#}T1bkiOWn`#{0H-ZEa82TanSYwHy-9hJQ>`Z7$EDrY^H#7WbuBGYW?th1X<33&nzxN~uocQXre3&mxM# zUF+bIdJQzy4Dx_D>=pxBKoQ_&w65M^hHhBc(64JelV+#ahCr~FJ%nO$Ucz{cy|1flp*^jW zw9Tby9pq^)0z~cCDka{n1UdYf?I*iRe5}R1Oox~50n2N7Fb-KWbz6RZid1b2a7qU2 zQ#;y9*$-06@@kD{Wo9_RySMzZBl+I8t77Kux5?*(PpqR5c=`(`j*`yYP03WcO0J?Rv(Ex) zYw{(NBs-pv9JEL`igjgL6xN^en>r><%IoT}-DxE?_wp+mf*yFMD*CUo(g1L-k5t{+ zS;}vAzeQMa+BqYSN3WKEAs}jH_-fc;=NXoFz8|Y&X8)#SBn(6dZQ#(S6_zpLpSoJo z@=$`O;(S)qvPkX?iIufpF4OkZUE;Midi{49qDJ=ygAt?xjx&QuSZdBHa7;2)J+C2# zG3`(#4pozEh66uY5(C;=<88a{#XoZjNZadA6O~J%OoAj0HOqy+$w9y&>0i z$`Qwgjuqk)l8;la`4S8>>A;BLNkoi$L0-Ryh=`P)3~RafJgdzR8AFH0F!vCU-+zG_ zh@$h<7DJ(YD_W+hvCdc9x5paWQOdcHR*z)n0tcVTz_@Wz%g~7F%0pA6YBFz{vB7Ww{D|>b&mdc4C9vFVU*Ko(-2Ycz>!E8a`CcIW$i_ox>fC=!e;j%@;bV%NoT@qSe$2PA79yexbepGQ=R*OzIDy&3DwP( zA;5)t-r@Yuh*yHc3T8gpC5@zY{kglb@4_z_Ui7H&SK|;Z9GL9ICm(GaI($rvENKk0 z(+{(CUEcr>#m%DpRh<{-ex(gTgLBtMj|`n5X>HZsHtDpKL-4cwy{0#Z=m< zA9D{U7nZ0ZK!U-BvnJ^qr77>C7 z5@0R>Ro`SN%k}d|eiN9;5i^MqfWEP_87BCuM$bZZ;wx0~>X0X3vJ`%$_GM7Sfq78- zj3?B-p@p^EPmODy;o~Q9soy*3!D-0}#8_?r(#qZz*MUpzWekV_mqMDyBXT_B2s7uf zIE_*6E^BF_g=a>~=k{$3Yv0C=cCcND_>NWKGiPmGtXe~x*OCo6VoFX+mbz2_S}o8c zeeK>;8jbMRNebn$1X^ABc0@3RhMLc8Iq<~8XmH_kV})@tRhx3ug?fuT@m86D^YY)Bm&N9PU*sUQ^?;Dhe}NMhMIPt$eU~cpHBtnhvs>C zZ^2Y^?bYu&L6bgwNC_a)N^7RWum~rV3`jSbJ}`yt(eJP5f;FMr+u|Wuk;$*S9_kXF z1Q;^}ZGp`@Yki_YP0B@Tj6@JU2`TaX2btU&$b>*499}yX?Jz#8#BKBx{+2{!$UvTa;3BKissF4V=!(&9~v&@Mai836&YyS}mO10P-!~a*|(jxN%It{%sIMdlkVMMzS1}SW2x=6O_u(XW*m$ip>sp3P;d* z?4I!}b<~W#1rn)r5;+KP0fkZ`IIzpS8WvifDLj4zi( z%p>vPBe&??kg0-NthEW`dqXd&H8n|aB)qWTt# zwm*d&Xe{sPYGy+AXlr~H?gdkvrvDJzM@QQT@f(9;EpV8zAfD;wq!_ox^6~z`l_uAR zY0+mt<|{$8qJj>=T?Q}SyNNM&h$t0K*L?20DVJ-#pUa3v=qO&Y>)@ARXh(VhzXV*B zyWNXo7^TlhQ_Jf_k^I$Mk72gg?<`OnolFBxxPWSk3CnVH1txoC7W1$M~E#4t{6ZDdrzYcRq2mLJJAVEyAxU2 zUVG&)S>nsXsjhXp&pT&caT3*l<=}L1;Z1A~e!%+rjgkW18t-V$M&0+pH$5PCE%Uzz z#DDf@`0a9jYv9ZuW}E1yU?!Vhqr~qwy@4Tm?9;B|u)w7%{3S{JvXWWGb=HYbG7XBYWbB0H7;|)~(l=a~2Y`;jjedPErU% zbg%biLz6&1rLdNx^77E5!X-NX+H88>Ka@2C3l8Ce0$1k=eO~h|hqp;7P%vD)hw1I> zHNf2@ol&en>Fj|^A?0?jUQ5%cv39*YL;nP899!_UlF93U;gpBl2B`l08QGQ~r*pEa z>yjP;(fUZeKYeqM#Cbk;K}-Ee3nf@$RFcq*<@m93$Rq0Y>Y*P|w1D7J=(|6p{=ySR zrD{<-XEJ)0@s6w<=`Cg2^$jEe2@#w8vVB|xT6$#VVg4x76VL#m=*8b)^ASqpM0C|J zjUpd&-h1HyretvUr$h%Dh0dtpGd-FbF(F1Cpe#Go*iELRURZh%KT>+XggA-SM;(o& zHJ%IohvBui3bz~gUJfT*Dr1Fqi7-VgO1090;&l;vEtgn@@-+!|ChjoQ9T&YVwnB?; zU21i?q#{HquMkB;mJZ=)u1Eopf29vgAUu=kFGLfST7$?lE}Fv$t6lCC+HE(3Eo0TMcCs}{d$ zavSAE`*XyBCrOQ`K<>`wbzkJ7N z0(=fuolWxFinC5!7iT{7-sL0Ov{#~x{F5ENu)xuW4K8Nq8UdheyB_(5+_|0*UO%NL zOVP|%<+KSCt?}fiS9Jma@wK;^Ne6GK$Z~PbY=F8*29E_vZ>J3z2l8iW(^S$9;x7oq zrI}r2myXWhI(Y5l(K1D)s71bY*7#-q{Tep?8fwL-j7H#8rw%+yC6sbW;RGwNOxVeRuEAa>00 z)EE@7`!Tv_Yb#6>`vg_F{vbxG)&MQLOb9BroZ^eZ$fuAN6+OH2IR9Vv-n6-mTzB98 zK%Oe^TRpENSy2>4Q5?tdIPVVupgCqcgAP9n> z;~wI)+D6Gg7y7t%$7iJwDX;iZl|PK~;Tsyabiiw^26Q(Os=PqeSdF-@pD;efq}pru zz*SCl;yg09QRpd56(@%cr>dBjk!)l><;eh8ZeO98ZO+jtqia9(z9uC(q80OBjp*BOISmdJ zu^usYaWY6AJp1L3wF1Hs!*MjMGdtD+rm?UgP4t(LiKam9M0rUYvTztiL{sQ6N+I>9 zU2F^rZ>aA|QN~)Re{wmP1Ctr zAoab(=m)hSGtF_gp~(y27sGKQ#!Pw;V^~*%4db^s?=|8mJ(6x==Ruti^{>Z8M;1D+ zQ-zr=sbBiRgAS9x6jkYucS9ooEKLhn6FM00oLAcxP|v`m!pCZL;j++%cNM7R5ITb1uv|4zNXV6}3Q8 z?4_lfa!0-D{)mNmf7$Z_z0ORs&j~>|9~&y<$yOQ`cc23VKfGp&=ZOK$!0~Vg!4e!S zpt1=@uw>wQv&Xv;8;eG-zw~78Ya zjYN9bxM9I97=_MH_v=y4BH<*y!6Qqn=&ouyyd|(0`)KnIn2LYshDUYmvCeCY7#`Li z@G(#R+o@mYyg3_^izz5kcVk!Hf*oBun=|tr zw!aCbB@ZWZDc*4)7m>SaKiRrb4~ne7%6|#J2IHUJ zxY;sSOu}I#`#OoOIKP@Vs&}G{M3xqKfQ0dubqeCQmmgs_dnXliPeU1+8q=J+y>WyWPMnM%`+(G z4h0_D4+iV>47ce-%Kb}>aoH4d3nN>OsO4;7R5$?!oD{JefS11oNZZ$c1<2$(9mMt3 zHVqJ?tpTk+Vm_arlgbwWV5Idq3xgK`*d++!Cq=rF8e5WeD1FGgODE;;yc3K6f*k<- z9y9R!r{MWAOw6DbGg^!-Pb+ICHMa-3hd;) zM;>?E>E7CP&nX%Ab?4aJR^EL!lt+?s!{-GpQ#;>pV!^p{opP?8IB#Rhs&eY;zb8b4 ze}_y@Mc0pR6FSd=Y^Rd#=l9{Xk$jKF=z7tv5c~`BmeLmA4vy3n#eQ zE0IV)%}xHy_pNI4Sc6tgP$5ro=c@zh71`VQ?m+W}*oXgl%5;LZVSTEfo#!WYRQG=E z00W4^qd(3NgLkWh&GHmopNlt5Y+{nG_(aEQ8&4pO71d(rDCULHF~4HYO4Kw^jUaQ} zE{bh6GAs-ZW1SG2V)##~bREHy(RvXwx8cbv%;0`G?wdDg_h&KK=&x8Sa5e&zywVox z^*!zLk!JtlA17e(Rr%JU7i!8+ zteIPva(7!FcI_?M(Knh!UioYAK>#pe^jbHHyAfTny_}=qv2sW;#v#1goL#YhWk~-X2Dfulx7IV-8N)*r3%|F7WJ?xA-qiNW2(>rJpjakypf5M<^L9M`>x6K^fmw z6I{V)2K?s)n9h%fKx8EQWYF4sr*THI3WAt~_WtldtD8L!GLNsvwncozXOBB0$$;Qe zvslEJ544@<#Nxw_;6L$|v<$IaONQXsNUMyaL&O=SH#aiM>qwzy*PsUpoNll1ipnQ_ z@3(HaheNRaixV#oYnIq4VZM}WT4L@og8$;%#v%h!Fn_SAgQ|+Ro99_FSbgEA4gm?; zF#7WrdlkW(igW>ly2w<#<0VX)@7(i`@e4S@seV>HgVxGgg!Y9=zN>=%p1xU755m9}w)1hV1;s+>1WNZ=Bprlv zW>5kx@LV_xRYYabQvw%1y>~#2BYF$!QNzmNgR*f`~2BednQHT!O4dQrr-lsk0|)zH4@8V%q#v)51)pf z(8{Lw<@UysIlALlLhD5e_*-+S1FuajqN@PSyY>~2XbqxC^l>`$e>lRY>tS%v%`#1} z_+6)Cz*gaKAvr|G{3;M`T*C(1O#yL4Ptxe$kB7VMSMhMGR+laAY?Tz~@;%A!GdoQ6 z4b#KWUD=Ikwd`gHSNLdm#3B2**nX;*-;3zft;_fwDS~uY zBUUk`AhGcRV0ge9&yyYvGPIGEQR{@AScH3~z33U_Wtb`2TIBqzVWtnUrDl%&i(#f& zg=8bP+SSv>5redj zWa`^F*{uuxND$RNw86$gNxl9b3IM&t4}wSk=;kn5uDXVBcd}^3#ys!{8g0ZZD%S2G*w(> z2+iDTt)XMOt;50k1s5=2zirLCa(PV5a&K8WC#-kH!mMP%PzdXvObpsza$xE$U9ZlT zvk86h-c$K1sTtkakmH=Sub6#$nnkOFNeD*gdrmM-*f>qPW$V2NG&d!UmD_V>V_<~sf|e%8^O5K8=sgM z55697>&Rb*n}0nQt?c zX(nP^w`SvaJz|>3XQPTRqiJ|VU=ycNq9O*Aj3LE0*?6i{^YZ5q?h~YUroE)_wz#Gl zXL;m`$Sa{URP)DGsF59IWtKFb+PiN@E{&j@2^?0PSWFrau_<{5Fyt^n0Py89&WLXr zS@2ON;VR+!Re_kE|) z7>>i7e#`-w6{!UZ&tFuWVAKrY=u&<*%+A)d-TF4@xRpvYF$i{9VyP!Ww zd^s;@@wF3Uc)8@tdok1X@T^MBc(C;egQDI3nSZ)5C4XbM@iLxTgM9K%=2!1VkZ1yd z9JuU4KUDZbOzSu8^VpnSUyP#@1Ldfsw(X^`EjKYd5eklGP(`S})AnVQ87;E|hluT3 z&M3u2Z4#kFWr&tC{;72e$bZesww7IK#=Oe+(jn7?8HwtV`BVPQYuekD8KmG>|C{}{ z?{V3~+6Ue7rk5HTy$Dv`nc^Mg?Wr5QKvDj!{%xmPHz9j*!9`q>QYhI-gqIoms@^73 z`KU;GDKkFw(<3Q`in3tB`92-3zo<{62;Hk9Rombw2T(a^7HAVylU1#KC{ zOC3?-(w*p`ZRNbsd&kVkIA#@b)Q%bGN1O@n?t|c(w$K6Gn&yxbT|b)Q7YaR%lH9Db zEh>Ioc`hX!0M`9*-?80EEP4E!#*x=_b36tHfsr=`pfKFy5x^rYmg`mxjqbOL#98l6 z813)q;l~YBRu9rdJnZs??B`a9SLs%|XJsi)#^EG9%OWLR>A|+n;4&0f9$@NzD2IS< zcn>8ztHEB5V#;h7WWblbEP1jJrO@~8i%?J_nxUq%*vw3H$ZY)f@1kS2?)kOLO}O`! z{X~c!h7KRtDK{!_H6nouBau5OqYqh3sV7TAQ#7b;W7(B!d;$V?Zeo{Y(#Yf_1He81`Iqd z1XVp#4vHHQo&x>v6>`t-pUn{b4~=K`x*ROspYhhh#(5YL<8@b5JQJf*>l(uCX7j0f z8%u8YnXo<$^6P!W`js!WBWju)1$!2-8_Ns^S>>_UHzFM>EcHIshjR);o#Oz!Arp$A zpUrQhap)Iayh8|&tJ8*4M$Tuv`^IcIBL>l4cnAu3p2C?+`8f|}ztL+xIl!tC=7Q8e zioWk*2a0BGq*K@S;xEO8eHKv|4U+)aw%J|#*_X#_lc8EPUZm8(md@wv*PU^MZAN>2 zouHxp=oNAk-Oo4B^Fb z17=baJQW1*O#hN#>_Ih=+}ZjicQ~Kmnh#RH9bQ-iztM+TbLqnfR4hx;w{U+9+;cl- z>-d)~G^FGqJL}1v1uF+f?zHAn*w9nGObYGbsm^B`1$N5*RYzhJACJ#Z(g(_fvbG~- zs0ixLQ>+Fayqc@^B{IS-Ez$FXV}ko!6y@^mBqIF=dAWs$-q%dXTx4VrTPK~LMzngX zZa^)uR8$YjGQLJcoN{b`IaJKwJgIW@4rhf1%Tjt=mU9g<9sMwpJ;1nEgS(R3Z#Fnd z$H~9fR{|*YC##1G3=}$Iq$At76?d;O9?)Xf?X0c-Ub0{ED^v$vl$0+7;vv>|TeFi8 z%B0%EO9g0?lE~}s{#+Vr5uzAD_N+Oq^nJH8!Kv;iSs2|@y<4-2Wz(LOeVtAJR5DY*(j$aTt7$-LQ)Y!je56bKiZ~4&xU(DW<9` z2y`p9o1)6$3hQBU?1W#QFWQers)s>O*Q`JAL`TJKAOLnEU`l62JA3JmB4{15m9zlo zkJzT#(MC8ibS>bT@;cMR&UK9%HAw?HUmp!Gc~3G>dCJMeV2U*A7rA1+_c(6R34y%P**H zlK;cxpLT7(zb2oqicSjh`CF0CzZ)HChLGw+OmH8-1l(qeojMbS-jd(5UhBn~Rm)lm zyDRT}v!@h+=5UA7#DIa^HJu-szq5ZB>q?z(1&dt)IMI|c&~aT{4hMP|1QA%A42aV` z8&WYAYQ^cpujgS{4m3p2&2kwNAB%E3V3-218m5u%>_(!7Gx58nl_JeC)6;w(k87{> z!R-xL@xX);cev>1hM7u>m~-;_gVKmjU$3<%txP;lVCjV}j+z-7XBmCdp5-4s zcCoPtrQn|;-Rk!IBz+1D9nhZ&K``Rqrt{%>yA^Mk(RqTC?9{C>pJHGBN-QT z#m`btIsL-RZtjhFES|7$qk*>&+F)n#+9R1HsQ$HA19a`KZH>=otEbdT^pV}sPSzPd zZY6v4rmar<;|l|@e;DhMjjVW>UW`e{7s=kc#HGl_YsG4C^N@Wpm@_y})2*a)D`+b1 zqrMwYQg4X%!G)boqgWio`4XJI(og!_uOBZ_5n)N34%Mtb?dWOryyK^b$XhoqxrF6l z`mV;_u2=M>JQXu5ry zowsPGGE!+i#dgK|bVLy>#y0sYfhb6rHvX`U{~UNpNVn2mctXR_OP0*vB85I0aSrc) z6e&1CPutICB-yOP(HTrWZXfa}FHL&AYX<)FATJLj{RNl4D4=Y`5 zeRMyRWF0FDv4eh(_0(_8f90N2^J;yGO7k*N?3~5+GS6yk#f`0P(IPiwasJ6HE~jEQ ze>bruCeECfKiWm%B5t(1#T&S}rND`%v&wy>wpI38T=ne-T`=a{zCpHYk679QNNFS3aqZcl@#*zuojZjR=5TQ{9ygfA^( z8o&pbjQ-7RBmd25TUf>Km830GNGoGRCktm-Vos;<#*Ud&8f?B5lFQ5?Zf4}}U?Nzb zYo)$8DzVZ=+UF*@oL)@6f9+3(u(?*y(uM6D}-JhjA%3huarG&Fy z#eo=Bx3DM=v-?;m-Fn$x#_h}d;Y!#hj#tN3b{3;oN!J-Ao5JO!eHcN6z3>+@RrOl$ z`ZrqNo@MQ8pI@V3e4}yEsLQ z6jbKelo#*>Ogl2xripiQKez#gW8UBt$ISmOOlTPEFErGV*tn)B8Hnoi}q z^WS*cT?>05)}?u-Xvv#y#V>~xtC`p;=%3r>(<+!|GGhZHU1*&+Y^Y1ZTTzt}7Uz+H zREqkzePb)KUM|xJX56oH9;PKs zUsu;Kx67D|#73?4NjtdvijNR21DY)HIxs6^T-aZK^)KeIam3B5e@!a;IzTMLlpHsp z5d{YQA5-{hAn7+w+mo|a@)3zpD2zpua51L0lXaBkGXYIF$)OahK)fF0Pp9aBGmz1YqW>A@quKXk`14liW^x~1$) zvWl%|rARWAW#tpUTDMj}49fknp2Qc_y;wPe|Npl|mThjfj>Q+scu@lUN}oM}q_ zQxOFyIwGjhHX8f5n$FTVsaX{a!)nCZs9^F`Ml5VMy5wXn>&&ujNtFw%c*5R)!8oN4t=4NTf7CY01p*xORt zkL@!;4uw2`)2OiFW$!`D@3u~H@oMe5KcdwaAlGEZatU5;Ypc#@=Nv~ z@igEj(_9lLUbhw_nacXio@Scs_N;B*jXdd?^USk(M=Y|W0vnnh)0GZ-T2MKzOKsSe z9E*YF%vn{J&-+%sFMm96zx-UAt5AE$%(S@qV|Vq3n57VIal?)19TQ!0Y%{=|}AYRcDJaVZNGY#m1=--as693>L9uFpXC)nh;b%h#V~ zxIQYOgEn;iF^c}Fk182i3;N1AB@L~VY^Enat4sT>%mZ<+4*2llV%hid?C@djhvTpI zc|ZK~*89DmKiqwgx=@VK+Se*}ed9Ar2WlR^ZK)He`e5sgv+>F08=1JRp)Mk%tR)fu zwZ(F0I%IbA7_)k{qt9ft*e+W_DmI?Q5ty|98It13TsXWo=K0kMKwdUAw8*c%dkxS@ zd;SW#`DkDS^+&D(o(j$`1Ka=hI$+^_SqKy>hlRd1K7Y>IvqaOrF|#mC zN8x+ZYcE>K@Z4R|bkojDGaI!q5P$$JAdXm=;ky#PSVR#G?p3jirR2`FIa#_&S#P$CJ>KhsdCv>cm7nUpTwx1 zSF)D+mn0eeoKWvwBc`FsRKzxLv z_l;QLR_6HC!I5qThinDSiq@Ap0G?bh*0le-atNQc(KB>PIU0kmw&|21sNV3B<7?7k zEI1oZW==GyqfSFPOiHLL!#8Xf3Cwue9p#mgmkNHBk(Ub6_+dK9W=o*l^)K5k&h*C8 zKHAN&yzR$dRxqE4vz;5oGUjgk`L~KS=uOHeI1Mt)ZgcjRmBIu26{K_HxY+NXvyr0C z9gx@OZ14}>wwIfxk}fEeaOWD5Q5Dx2-p+@mD8uX1l>@zoL~Co*<^7zPYkE3%%*f!Q z748&M6))GP)6V4O&4WU9Tl7<`gK_JZY7CMDNz#>wv})yGb&fHRG^ZhKXg(|3g39Cl6ld zTz8d_w^E$MM*Yy!f(AW?cR;l^BmYs^O9w_(%z`GcVFeD@eyzNiaVlas``O>;aBwoW z{dvL8Ipyqx_>|cy9EX|V{JMk$ZMA>J!Ul0xBo=ng^`kAeQLQp6sY0Mv9OtLtQ*kPQ z$@^-LX;~I1mVV5La${&x@pl-}dH)-XU|X>YoOsO$2;8D&_;K47p@kvuuj4@mWouYx z!E}293#w{byHShwwBP1{A|nxrZHdA~`#wb>wyPD#JmMneh9Klt_RF3Zy1iNkdj{ww zOSr0=F?{xT1gh{}cZ?CgwXc@%+KC; zq%?KM`Tq?iIpZ=1)#~h?Mv;*U%27YL8 zaq+*9i@8k}7hH8d)K%^$(FF4Kc}jXUPS@arv8O~c6x*9jGi6S?eM=#iV>vM=4T*e3 zyZtBFshn(#g50pp`)Aive>qO+UsmU_gY;s2u?B#6!~<50>I#Cl$_263P;hLC&A(8% zy56H~WZ$$`8w!Ddx_@!%3FE#0dXjy6GQg@?^+dTVd-c=tjsyUwDds_BI?z!=&lpV; zLdU7b1Wf;@3GnO%6~j8SC7Yo8uMwaNF~$TOrmHhVMk#TKp!%0)7gTa%%0uUVt0Qen zG=hZrTeAy=-ui?^@%%z1>#~nADaZdYQq1pP%pt$P`Yl@7jc-mb$}&2p<+MSIPF?>a z^C-^%u5$yU?DWGGTl&MW#~lenw;*LwalO?SLslN5F=prg<(O3`Bzw~@Fgsw|W^7$t zHZl8W*4t(0AMxy{fmzv4__x@VzlB-FvyGQLQ--i{Z_0nqz^pEjZkjWz-CqQTPF^8) z<8;x+^K5tzBG9H;|JqNTeU%_iG9D1aU8x9>&?A0_!Pjq0*42X1hqDwd&vH?Q&fxANNmFW~Jn+yl*i7)Ce=;QeuZMaqVWnEVE>yiEP#ZKrR_%0n2AlziPxdTzf_ z_Fv_*5*Uw{@yjpx9HVUDt8_p7Mrde__)*Kukk)?WA4>Qf_ico zLntD&?%R1XVIpbrQr1Y5_pdJc(Ix*?q;1vlo}EP5ZoSWb{ED!iD|8=d~kN^9)1K#6qhwO>nJ{IV| z&zQpg-xr-Hm^0Q=r!RQZm}z^9T2#J!Q-DC%gB~OtF&|q{?CJ1g{gl|D=49$oKpa_$uBTyMv$GwTeZGW@~KrA=Ng@Q`G2ER-<p=eAh4f zH|H_O8vNU)XvVJZxjSFeyyek{utu0h1Zms-hcEl}>To%KSfTWfZOK9Im}+<&0KpcIe{dW^ASBJ-FM;e@)D*W|YOR*39xhYbL27 z;m!+ce*3=R4)Lc<6$26#N|#5xt+!nmZ$o;;rkle?u^Xq_*oxZg|2&Amr~h|DaXpAE zGIRdp8;X?}fFMBz#{Z5Ria|3XQEN97XFlw~nqSqF_ZQypw=Uda=gecaJiCG~95-3SN@tM_LzI+)r8H^MPHoyrSMQVR2(E?`+-evU@E>wnI9eshJ^`BgOFD7z??2Cm z8|W^4Cz%lyv0b=vgNP#DltXxzOHt~7U!~X?Q_X;;x?1MbJ_Qu^S5og?29BdC-J~10 zuwozXX;^F)7^w^;!{~DNftc%V+Sdz)B7M|1u0DD$P1Zg3VPI?(EFa1 znlGIGCg6&H(i9DPITu-t=|q+~FFQgx<(OuC#b@Le_7&U?Ee?78t%^DyR1ppCsK;c_ za%Uosk?)>)fLMJP#GBFxBDJA&D#YCUF1EEssK|{d5bL~c}c2iaQQm*3MSzfAcf8X@2KN1*w;kJOhb8)(6G{@KN*5i9iA8|3a7-5`hvJAXysa5?|pZIS-j~&@J z1*P3Tmps%*$D4=&r%Z^N0+u)oUbLK4p(N^heb7R%k4{byn+ zL|dt60h?OSw?3*?&b^8#<^fZHZ4JP7-hee=>@c@ct%zSxnv2$cy!$T6`^+m4A=NVv zC2s9tPhcow-aWPt_uL{carSIqDNzFsy6a^6__bJn9NYH;rB-&w8K;vt=((dy#^^R= zB6@;`eY|nt35RqN9C846%5M28mJEjO^sgN}ZQo}96pIkNl!>zQW7Wwv8i%Qo2#c6_ zqitw+)6KkVw(k27uFTF_q)?ey7>4P(S&$i$ctJn&9Ng-)K6*tn*k@Otho4&B43^qd z#Ks46lE{j3UkSkPx75uDnMQ_p=-3zbX<6;Q+*vQxt~I@n+~bXFP4C)7rAW?}2-F9S zEorJBGwWJ)lKjTpCA^(4qdcJ6!x#k_5_G886oET@+~-yQrzZh>g+nC`bz7695D<3O z83p|dXX@;i&#QLcFI=c~n&vOR)xW>C=3`H3G(%1n8rnGdB1>pjtk}X1>bJhN zmIGuki!Cm~mwZLEcE~qBE&)Ta0hgd{w03;*bnu8q8MMBBbgq}R)=Z$Xd7srx-${Hr z?+=L^MH0W?EtoS$%$n4+F2kI-FAEHZU8D1sXS|A#9vt4c7ox`f<+-kJPCeB5?9pLo z#Z;1gR26=_BnzWhx6E6PNX)mV;`33|J)GqcW5H*Rf6T-;zeMkUtzczkU=Z32^H=dZ z8tVKx`+_q!PH^1QXU6Og)3EdGCr&1cgdtW55@g|OeR_JY2hJVR)jtka-POZGere>w z_fK$2Ph#-I)DJDg5JqmUZB4Zo8FajJGMV*Q)bv1>^i1FVL%|LvnTML{Ko#rXOI8?h zgqvJKE0(sen|~}I=a3^6Fo3E9y#`oQ29gD=Xa-^!Wz%N7Ms}AZ#l~M-^dtcP4gIQ(WS^Ie5a+=tr zPF3Ig8#FA#G{RE5tMu5uv_4Za!bq0$$l61BN{q6-u7r`}UOM&+5&`l6N9lCe`t31R z0Noofk*;41tv*=bS6c0s2?Hi{@A%!9cjF#F@%@fp5I_b+^mz~xshsFZGthdb)m0WP zdVQquA5}HQFXqT)Tf5182(~f*@^Q4pz=v8aD2ZqBty;vx%nEm<;Z#-(A~X8=Qc4!; zQv$sRdn9Spqwj6luE)FlJPX=-UjE^qD@t!jiA-Nwr6?O;o;$qt%s(!O+`nIoLl)%(2ydroR56gc2jczN;)UY2j>~D%^$b1Qftf~ zs2dMB{m(3 zt-lnCt(x(vCewoTSLiGXjFO-X%NsE=`b0)~WDL0Y5IyrTOo{%91`_f_M~rSrF2;lN zN|8a0CpfjPx3rI!hHo2EQk{3stz`sykHHx)nBqdNt%G3e3oIfmq8078dS@86s*pbe zc0QyVPu&tWT@9xPsvqN|#)OmJj&ZWH;hh&%fm2pg$7yCFXWquC3r=nq#(WAIGdqOs zr2ZWkFzY(yV*j28;D$<`0a{WW%%e%oNrYnFw3*w%eQ!2$h8bNEijix2*D=8PUJvcm z1dR+{w$G^;Y}VB(ou~9=t@Udf;AK@&YY?ctt_NC>ivF3=#6G(ZAIbU|l4P|eeUz7P ztRF@mzG{Pe!l1zFgWTqzX!T6{r=uYIpAQYo*uGfu)#kviG=GgjkRDEnxH}-WY{Zaw ztB#mmTeSWzV@jj5HK+y_nOf>&N&}}bv^J(r9o6E&j0%MAZypKzW@#uDSL` z+yEILNzx*$wd`b>B+I+|gT;bWE-MONa<*K57vL(>(qdaTC8@iZy%PwcyyCO+xo;oD z(3iByVR37rAOn2J&)rfugYWrO!$;;v|5V{jxJ(0^C-V}mIEyIg{Y9jrV+wo0VvkKL z2m+{59=a^YNN$R!z{`U(-m1kD<-ZBfa`d zbsE}@3qvWj$^DGL7u{Mk3}Q7{Vybdg*r47+c-P9N;;{QbZBfPgvgb4sb!l=_3BB&D zxfeZfde^@~p*DwAv01sj7!wMUc^?7Z;s%p7b0DO(e@WQLvKI0qohNsAv zkJcVgQuXL&Ceg7s32Ol?N%*gLdanVrVts=6FG~o)vw0!+p37cJ;%r86hS{wf{wbog=p|N4>{I2bLR24YiT48%6@p6AT~IxavBq&Nz=7rQRT{ImcyniEhSIum*41*p;7Hb8lnNkEqc zs6ie(%iTR&Hi48Bi4r+}=J1L&~;?be&a zmDt^LnzMjI07xMz08{Wn{nNMAfg-F02ZUWz&T7)H`ip?YI5lzn&4_E9uBUn*;m zC_e0uTU;za4ZH+|nOMoy@-S5R_$zm_Yetvx2P3TnDQK~@cWHHng|zz#W+ zJ(>5`Jvl0l3seJrb0YQ%f)%F|!6fl0*{aF&iBRsN$9u1LqqggCA`GSa$LtpYI5Vr- zE=z3c*%i)it-Kxt2{8rOoFsnvB~pcI5O24e@gyT=q+wW+(y zUiZ^JP)yqu)N_G))h32T1vOis8bT&2S*li0^An+jKhtjowfH6!Gj;{FT%a0!RbR4a zRY9#5D3-TlRtRbpFKPvbN7a;*LXcSjD3sKc|UZ5Jh7hXgJR#2A(s?nn5um*Kqpc-;0PT-KP>e4>dYspbv zBzmi$?h8}{FV)4>2^G|1fok9-D6E7E>bXF@stX5a1vOis82PpCwiwpH<_lP(yDf$_ zsKo-+tW204)I?{wfHnHaa#({}El>?A)g;T13jgT>)u_u7R)abuXXR^MAtEnoP|9ri zTBd~;#!c1YX@P3+Rdtc7b_|7`Ke;XfE-I+=Qr9cV$Ly}4E(=tHMyqN}=?d(+fHfFq zu<2Mlg-Se$G`!6zP*ie+sjBR@RMu!yd}Vj8g1RqI4PIz=V{KMJJr=0OJTI-Oc;gCe zDi$Y0Y|NS@S_d!GYI}aOHq6wjve^RF7?r}zJ2g28&KIbLSlcX`s#UgFz#5ztGY)FT z;c|g$C{7k4d)~pzCRYnoqsui!98Qo>%Gdu|T?ooq924pg7m=YFb*U@K5m~X~xIi_! zQh1TIse(G42qh)Vo=ydIJ`qZsaPVc~by=VqY!wt1OjXx)focek1+fNoTc8@)ixYgP z>bfsbjk+v|HK@k|^-2&IYEaJws)4;)T&h9M7N~|ySZ~&#<_lBQ$raCTB%f{MM^!0Wg`HE0yn zRjsbm0@dKEXpA_esO!8yVLR58fRz{#AQhFD1+Gz>C9DQ@U7#8oMVOK0wyNv4Ks9<& zbI}ND08r0*PPzyDv=K|HBKrJrSpk@mc-CP@-o-S8vaPtMO z(dpuC2gP@@OFzbv(00c(&cb$G zIcv12x-M!^#|5gvGIu5yu~p+lQChC70cJU?L7f+<2Kr*fT@C88KsC@;k3ZC)6#wrQ z8>(H3iU^YmuiFCEAkyg1)WGg1f~m5(8q{NfYA6HQ4huD?=K|G0UrAv^pMx-0@i3!RG!r;JH+5{ zldpzIY_3IJ#|5gpU9 zl`A!<`2y9z-=k!z2DVth8i+}N4s^SGPUp)73WZtgC(Bt4Y_)(jL__$W)S#vdR0A`s zvKrLk;v~tIFmmZ+h1hX{YM?J(9M>1C3Y4?VHW+JZtW|b8u`)s3)S%7_R6|M0F6P#U z3bD%q)#xN?pNAUMb%A=til-WsZnAql$SwUdHL&{v)*w>e-BbLUt!i0(V$Uscu|8oo(Ltpu4+)H1*$P6iAL@M zsRZo2Ks9Mk=R?QLCqJaMn7(MmT!qVF5ASoaWD`Gyq(IBEFw4v z*VX>4H>HP%*#6oxRID_=-m|+Wl9ftZw`GSw+kQ(l$1dc$LRlQNamQwYcklG|=%Yid zwQ0;%DZ~lxvo)yL9PZgwW3h9{SMT?_iioH%P-~b?Ib9x!NtkZ95k>`1*#Ob+8T%!! z2#z1LuVW9re-WV;CZ+3rbLGF$Vau!bjkkVu_t5Vkkkn`wtHHrqfYp@KWk2rhnPw_ z-Tbt1xNIpJ+_KZe{Ks8SH?j5ZH!NeXJ2wOyP|L>oNA=N`F3frj$=uhYYA9wl8M8cZ zhZ&=)I180NXs?iFk3NkJesBM-(l6@k6@G`>gud>?&+yALTRT`Rtv?qzfo$F41ylER|y(g^M_G8lVX*0@Qv>g$@zDi_}vpvYRVAEbAdltLh z14n~x#NTBc7Ze+=*nz=;AP*#eJE9c?bt|II&RNr^O!6;^Y&+-OrWnwf?z+VGbn=0f zl-RKlko(vCGBrGR4vn0HarzJE=H0sIk$svS!gGa4`}L*<>ecYO5T9u~6lh~HalO^P zur4Cim|svx&FX;dJ|yAbBM}m6S;gpSBH+MuecFy_!e}WsJ)o0!TT=rrsa8-$#!9#@ z#*B5&K}RVA0Y3d`;FFJsZ5*If#eQ1{a=lZwua5aM+Q?ee5TPuNp&3mv=%7lcNZ+?+ zliC>^yy|Q*l>>>hJPO0PPeOn|5Msb|4>8xUins&ZGJM{e&(d@JqMH#x>1=n5vykZu zxt5QeA`b3~ix81bm4sPDKB>e))Pqu?i9Fe9Nj{5EVm61V-u=)bT$%_k>n4~BKhN8X ziAE67`&O`j-~c*GVD!kZsF?x|My^jMJk&9{5yT4))CJqfS??Ik_2dU^1|#Cn;rS=D zCFA4d6X%BAfnCL!tU3De@Y62Z>FCp!MMqKv-+G6owgVhD3X`dS02is*JRX-MK;|6TrlR>zux7ip^a-Yk)n}orHl`TMG_!HR5Yul{L`{zljL`aF zdkWHl8Qs!-aElr`to@2JrFvi)&!4YmZyhChu0A-LkrygxuLE&EHw)+H1uKH$gGZ#5?KBD zu$@>H(Upxl=3Pqe1iy$JtzB?3N!r9Pe!@yDEa+Fn?-!kEE4qJnL!04o!c zQLqD`E`Y|)^xA^=0~9liye_mYXT$=Z$CNZWB~1jh4J7&$dTKL&BkuPdA|iOc@Iiud zcd;oLSVZUAm(!Y&!1^Y%JI7OEiptyMi|z-EE4r|v#3YZ_8`93{r4%uUnQUE+$kc}% zZvGIYBM&$3ygx_Z&4vcwoZ%OGeIeXNs`FI!vk|VX=|ra8G=TsRV4Xi|U5L9vU@A1} zE|wHuw-}Q>&ZA*C6vcVa`7jSJ#FMCMmE&lX8u~h zfD) z(AV#yg3*%;iYMU0338Rjrl!ERg!s>XfX`?&Mb zp>5~*4oIF`;^&*u} zq-97YEti?7C`Q0S9PD^O+-6e6L2Ix|nkgw}# z6U~xJ47_ z8;8c{+n>+Fo~i2lb!RexT%ZgW+m|6}uWG(n`_n_=%B1ahp~%#$QF9oYM$Uy+_lO6n zD~|{rN6=kznmaVzc0MQU@B}bM)|NTr^DPm%{{rj`FigZ9uc)-H#!x6#Tx1oVeO<*P zr?+yV;#Vu<1x^}HI*Hx#5lc5nHmMwY*#Vs6i!H1D6Gjs~h{1#sM1#5+QX zVxW$+UhaIpiEge8NiT6)E-IX(kXF}f^eKjf7j^xg=g5yI)WCB`tkbaurSK8=D1t2z zS?{-xu?;k39K@=BSE7UFJw=PU4%QZuR#07O|8Qfg#AOQKt0~C~3wo&*i*apHv=H&_ zNA1P<$Ho$;Xn{^m#Dmv>R2|Nw{o7>jjMq#(FB-M((~|u(H1NjijjSiFpj2*!r!v$A z&rIMVN4L)qTgzg{B@dT-HUVp-$luqY9 zRMGlM7^n7ZY-mJpvcMa)zH%*mED_>H%FfqQXi{I48!E57faOfGgpUcBR%vW>&TFR1 z?FTO?IzK2yuU)kn5a9WoL|}FzaG=0`DQ-58mKLYTdoJ6w_@~0SpKUV(^jf2@i^;ty ze(A!n?C%{xqN$_m^9v?&jgU)zIm5w;y_GQ5bqE7gcW0>>Oom$IBf{s)1_QYTXTv*Y0jT zcy7F=BoCL1N{d9-Z-Z4kmW4fph?npdhNn}ytXuD*yL%eKn)3u=)iaXtoFJIdBZO>7 zJ$NKN={TPbn2CSR@x}+bZL05>PpjJ5p{0zcER-r8m0HWkS9r;4&>9u`eUxF1KF!@QeiuB zyt4aaniyh_A*rM}&V=_`yP5)jw9bi30_(vAvHE5;D1N_;hrv-;Yt-NSj%6yiyL8{( z$M0YT8Qf|e|HS`h8~fyE>rh#Ns8Mbs8>mzm2Y+V(c6Vdk9=7G?6yOs}3=zbi&fYT* zdO0IE;O)b>VW} ze&R_Ta=)z>os8@I6?&X^)dcAqk%xk0);?~Ze=_Kqjpo5Q7Cto%`Gb{o8>a*XyWToH zX#e>v#}E53?{sdR=6%-W!}3bdH0B7$1Ch13q~tFJ#HIcZ_ZEzm)ZS*(;0C$& zc@0mDRwOv--$w(RHe&Xof_OEuib7rWTH9{-&(=H}HR5HuEw$|K>@|%-PzF^Egsi!& z33O*mmlR}DkiB=a(MDMjS~y-9|HnsdE${}di=+1TlO0SwJGVmu9z(}ybu57@yv=O~ zyDw6286Han%yp_(9ukf96YnIfpU1rzrMxBuy63UI#0*b~jhcDP-YtxPtxSS&`nY|M z(g$W3OMrg(`on&Z3j=4gJ3$$E3m8(pd6{Nq4oYPVk{?V+-CUW&Tj!CirIOkeAJ-nq zidbzwM14D#Zve3qjUrR`-`TU#+ICm^z;MdNe36UP3({^vF;*!uE;WE+;v5zH^-*)J z7{p|z2Ckc=j7mMRjFEh+9v1afUe%+I+N(n)s}4KhaGUDik_&Zb(O0Fu-@^-*(<0^j z?mYHeJeaN7Z3{4BXF4smaNHOhnv>c}+>-|raL0n!bSiyl3sWYAaftUA-k>jNGQ>1y zssE6aE(RST$(F*G;$=NX0HWAmmIy_b_BC&(_`l?LE<-Ic=^2gju>Wk~iy6P)dg2LH zw<)>!dU@@!v+)PED@k>DzjnbZ+TOu}5NfkbA}~lB^7QuT1fxw~ne}(LR<4~*NU3?c zZuM6~<7}+NFT3l4XSUXQlRElLc3PsmT(1i5wQAB^%t4!qoZU@Xn>az`+^Cyn5<}EA z+4{xt-n-?T+ioxyrE?#dWKe7O?FatBi*QcsErr*gSWH(#rg&z{IquMWASwvS-!`RPOPra|4=&HsR zMPZ(1-W*cbFdw%5my9Wm1Fgg)Ir64xFn)OAav4@6H7vHyIS7lqwSCE%~n^QIi)Un|u43i_oE9(pNYUNHk|a4Sa@f5y}_i zjtOI2{wBu$hAuXxo+5@^QE5}Ma76i9HA&2Qt|CXG27(dD{Y!KRrV-2?WKQtbH+Z^;wU<9s{+P_x6eA?BQt@t6FZ`C zg)P9WOahN*`g6mAoxN&@$Sz&AM@wF`u78*Z&u(k>x~&8oBoja4_giS@2*g* z`~+9+S&lTItC%yOn+&f~p_`u-4>6*%-5d)q`#1aAEf18B5!1hqcxM`kF55J(F2b5hZvv zkO)$}@~rpE{AvdGiZeRv5g7NJ^2?*3Ma`5qZ9f~8JHl`%x@)pl!CfM8?J%00V8ZOa?Ohwq%et;mHRlw%3N2>+()F{JtsubT-Pzn zW50#O?5YzMy$S!vN}JS&|DXRuFYgGS{_3o|xce9$z_}fh;ZJ7wqWzp*N8n(Ji$;r# zC-qpSyMG9Kp|d9gxKFwoBmrRI3*$a&Fk1-|F@Ob9`<473Z{B{0V38Uwt6oHOSDc?B zu@TNMYNB&vuz6#{k;QdCjz3VM(C4 zusU>hk6vtZXur4RiBGS)r+Cr zIKkr&6=tX2=;8fsmv&#!mtWvch3u*~W`y(mYt=-vkZ-8ogNXP|G0` zn91^sx!(eY7+qCSs2GDrfg`Ldj3!UJqjS3$yAC9Nvk5#As>Bps{dD2Sy=Y?)Lz|&7 zm6B%yLBGnO{^u4YVqgBhFgQs zB5x6QOvt%K#LSFF3Rm<3h)9+ zC0)eGnGNk77dCZMq63TZr%Fl^nJF@ZsXq^MFy+W$yckkwGlQ!!mio1B4$P7ibF&&8 zS#z|U^)1=E*}X~53zl9MDUqCoG=4hzd$;--4kULSkhd zvJ{%YdxRccf~Cm{m6Zs63SrN;g$&6P-Ja@50-~c$b0qL|;B}8PL6Uw<3H4jfqBzK_ z;>LsQ8>*IIItfrUaSJGUR{s+I#;`>qZ$~e6o|+0okWz6VrF8j|hr~^c!SDn)z;h#( zdi0nPQu)i5OiS*YM}k_jg5q?TaGh5AkJb*W5-Sx|a2ptK;FOOn5F=VlGI_?Y!~rDk?LVIoByI_@wKDh5XCVSf`d{OBtP9yUjtxq+Qdq67|kE&A(*!-Xet zv!u6xGm>_8RknA}rZz2m-1e^Q6=j*OFK5`ql3f#=S6zs9FIk0}m>!{}a^Sse@#@&F zlilg0S!pt9bziwNslI!}Z>)@t^UVprLEkd7x?ooLjZ+_sIo~hwD{fq7nG2SUmOfz& z-BJFOuNDc3@%41fW6PD{tg2H`Vsu=G(HyH^@-+&e=stDhp*Q=6nLYphtNC&kaK~TA z{9BXhVyUoQFf%+OHx-rL4(}3Qt25;gwt!kEtbD-C{ji+tVa@MH?K6BeLLxdqq|BBI zV)-_mrzBE$=VtvK?v}FJl(?+o01*qO!V%JapT>bks6NH|x!Ux!0PX3ivaB@jH zy>MsSPM|jlnvCA3XSI(diWKyqRvsUs7a#c5a|~?>oa~Q~Y!UesaTU3MegP%)&5AgQ z+FM8xUVv%n-cgU*$$?l$$5W_U4Rpia$n~bEslx`Uu1JzL`BOB1_|#aAmdRXYv7@CB zkC=vOJhhBIMw#O47BRJXk)oj z&H)3MuB)*~vuS$H1D)!ZVz_RRP6S7RVbjvr%UoP}W$oEd&ark({P9_aV{Hqd^6a(yr4TorOWB;E7+a}8c% zVUsXi+G>ORGWzB}a8Un_zs(hcbET&*O4)z z7XiM^DQsKn+dR>E$!$FrW)=E#)nH~T{#T%!%M_^6ze(Uu@E_>86nV&|Lme$szqu_C zqjrZq;|F1N9C6@f`c9g|vHL}GPMV){;>&|_SVl!?Xrn0YmBvq}(}W$7O>vBdU? z8gwpdf{(r#<_cp_u+KBOhK{jzM{kSiVwNgC4(JD7(}AArM~^(HXe`f>asx(nPkh^# zjPh>uoPaa+m$UhDuKsd9Ut$`n^&{s-&UyGau3du)HM#&~OdHRM;(0+a!bCGJ;}Hu{ z@ZP?OZLK);w!q4P4_;yP7UN-XhbIBC3ghyg2NhkSDdyZA(b8K^3|II?;!R+0HD6Bg zTNR(qmj|S(f@fjM9`c|%kNB0X`kZEBcIOGNE4G~`>>0n(-fU1HHB3yF9nG$*2$D6P z9u`M|C5#))L=vrD0U+{J{0#jrVO;GS4V`)n&$KSg(+85|1Y31eof5p=xw0 zA8x%Nia>gVss1CzlSR~T{6{i)&!nk`vIn4%kdZ$D7kM>NSBJ2W z#9dP|4+~W3NwT7hgC~lKn$!G##73iVc?1{1Kk%#PW8UjI$JO{UE^{%Q!0G^X{&XTZ z#jl>#7b<&}-)HmtOnyJl?-%(!5BPQG^800ezsm1C_W0HF zVt#*$?=fDV^QBq(a2s5hPP_JS;DTyE%(+aZoVLsjUNn(yn>A#~<4V2Za^_fk&^)&Y zJUooRrls_3*QBRv9p9LmOZWT~`#*YIL`L~_Cj71OFiA^W5TXB@ZdW|65}xph#0-=G ztRq#(H8tjpxD=$z*cLhI3qZUC9SgS9nm6o$RRiYUJKR}cyf$;h`Ixk0Dh}P_PZFp= zKR(T-8{BBA;>eqleyt0-QQEJJ-l+77W>wh&OAys}PHY4n5L@SWsnL$ns;Y15Xf4-} z+S*nzoJ#zds@ND@WJgx*ucm)(hF0~gD|aMJE)@|K6jO`y3E?lP2rx;+^v-NqfKSoPtWC5M1>qyC90L-93F?c;D#)>*%lYjto;a@f)p zjbjN~iCujb@~S*gzYalIh>32-1x%a^VQ`iZq`l6bfdt!YOB(H#U(v2-RZ?@9Y&5Yw2-O_m7A=wjp%xzA zQ-8?6P-j_K5j9hr%W@+v0~6lnajp;nS8ZUWpICk6yLg}?wG)4%y7-GC&5jdY1D(?%0g$$UPA*Su>c}J6^`=X(i?( zP9ckw!!SO_>t>b80vQ@W{FZR@pN8^q3)v485d)xHKe>@le2&Fk%^rl0r^%XNo)HPP z5;jHAk`@k$w%V6glJMx-Qz02;mGnn%ivo+;Has&D88ONh4TP)~2fR5(}(W;5xy`oO5qf_KnO$UNwA=kU)Zw~$9Qdy-seT619 z?FyH2kRD>R>)Uwa$qZS_Y3cffCwbBsid6!J_9 zRKGOsWi*yo=8+Wy8DNro}GUaruaJ_Az5zvBBPON`Y<(2jD(wT z^0-CVm)Qtg-VnPxf{E2tZ~9?96Bo6kKnHKw;2#Rtte>G5eXHRAXw2%|Z);^(;`1b%FS=1JG+6yaUuqbbQ$_2$J!2DW3)yXe8eTr+$?SIFocTm{ z$UqRE?0*O&En?E6W6}~5i*F!Fy>p*y|5)9-)wH`_F&i6CC347&X$b726M#{F5#S}P z=wUtGH5@K+3f%s<&cRPtdAkrx1Qd?oUG+sGDBjcT>PNl37%tbw3%obDn4V)kyJHEi z+icT!r8u;R3(kzAheSzE=3`27qDa%OjJp_eAw4fXiIZf)Q)Or2i<)&Nyb)*CcsXlQ z4&LX2C_3p5bZm(yS`YkcT~xfQ3*auaUuXe=sn{x?MMxsAWA=LOcm8wE?!U>^pN5x3 zu#&}Fyx028py_}KKWp^m8z_|WYC#yLS3uZ|?SD62bqhmK%t^Ovu3Mj-mo{eIh+{50 z10kllBEXNUs-N-@P8RZ@i&q>ps~QR-ie8olsz?2A3j=DZ7>a54uD| zYIQLxy4I>yk|mhq4T=ud2*eVufaI z75<<8id!n$l+&P={ugHw9hQM(&IGeU{I;=!Ms&^9; zU^GE4K@GSgPCFNf#r>Cd&3#0Lq+{D7c=eNLJIeJ-8Q|_`Q5$Nl?67Mqj<*rCb&!Uq_TdCS zlWWfT{5AeL(~1=biJB5#RrQZ&AH53JG5Ki?U)^^K1*NW+Y%#;n46hSxOgL^ zn}VKC!Fo1=)W&$wGBK(4Fqv5J=<5ReKf8)@5HCuvjH^fWsfhnXt*HecV=t3!*ot-f zmxuD8sgF4+Br5L0dla%do>$xl=89BUFzg}O@|fg?CM+TJFFwAgN&{W#C9M!eAvq4! z#&gy+1|N51xYtZcAy^m(!D$f2*v>$IB6({46raY2s?>CDQmkN$2qSHXsRZ%hM`!^vg{b~?U{Vvh$}>ykCX56psJ%DpsMuc! z7t3y_Mjs0Q$2>E*{^Ul-%~J#ygcPV7Z+RnP$`|Eeu@LLe_=IDPeeSCCy2QMb<8v-? zR#tDpM?FeQc-Ow*o$#1{)vZQRRLo@YH$Wt}b2tk0tN3M?i@;r0{GKn=k%Y*qZFV5_ z>N3`L;U#cUrTSG-SLA-=pRVi0TMxJJOW3#wSl3a8wIW+ps>(B=hdW|$^?S)GeylyJ zQJ065jARIGE)vEbe8J{RdeWVt3NxgGAuMh!;nmaIWq$QMRvRbyDfH!(U-2L!YZnOW zaV?VI7(nOggi`^vS$3a}Miz6zRE!BW1HUFF><*$AYWN&7nZ}yrWFa_t%5S{+KWIm60N<-g_lYt{o1uPCK5!+l%`zOQV z+)3K^6EH@HiiUy|C0E?@!<%FB&FFhNCv&fpJvcx{$fFv1{&nH7Sk%urp~aNhh;EJ9J~`B^LbV={gGJEO91+v=+^z@7^sb+D z+mpu3YNWNuT&$eJ5xTcTO&GD%2NF%jr}*SQ!2u*)%OAoX1sk)WLP0CAS*&XDGrZ;L z>oO0@+^BJ^!bUX1Ceg&z94t?CT z`@|wbkI$KQU@9)PdE7RYa96~pXkh&7X(Ev|>CPR`KmqepnB*|03pAwCkv9{|raIeI z|5R+LJ_mh`9)e1ZCI7j~iRKu)N=-z2MKo1W%Fc&BG#My%Qf-$g_@F7H-_OJQO0r$m zG=8Z9E@i@3VtXypJf)prROkb>m&?Gp*y|XdS(Xii45(_H2Kv$DsS?voNh1tT5}I?x zNyc8;V3b=yC1#_76a^jil7?7Lxl7+o4I*viff0aowuM#UA= zU)392$rmE+CY?nJ8COrd%!%ZZsxG86Ba)G0f1t!p>bnWr?`J3-f$qEV>=V%()unu9 zFb;_bgu+b!~KSN8$=q9y6nW{H#BK2_0S-JYl<}+E4 zT76*P(!!{)}XVXw8Ly1Qpd6 zq340Jl5Q=%NKrK_qnDGtC1yql1q+THW__`PYDK}A?U5_~EE%mU9?U$IDWa!F%D;u8 z4klSY@u50|RSx@DH<1lrwLHh2n9X>}AZENeH_xN`x3hccc1_jzB1%p-i0XC5%QvGD zUyaL2>A%K!q#=}Bqv=sIFVu7SbqsE_tC>%1$^DQU3`h;?X$~0cb*^)A&WQ?CZ46eq zNL9ZM&IvjeYI^(sGxu-pZQRHgFZ_X&=aEQ}lyoV{9*yI1JRVOb$=unFqa$@9b^P>u z{c0_AH)%Ql$@}h$eZyv>fkIWGP$(1%0QwMHu24X!S@^Spn>E{SGSZ*2gzgH2B6dfi zt2tdkBS18xYmn~g%5q-px_s6yUVz-W_XdR)k7nz_wIwuKXEsrht`{kZMVK_8R^4db z@tw(<>Iu;ryy_d7Wx?<;xVV5ywEHZTA@Tf`YNiz^k9-E3(l0Ed_T;96#=7=sXa9C4 zz!S&TRXvJv0Z-%hkAGO;5)P%_~uiD&>`T&)jsG}1C` zhl2&0h!w&_74wP7x2C(w_oa~Jn+ay7&Py_(L-v+ zzL*O&%JXC=`{xYdSL$POfXCtY_<&R*A_UbIZ^HcWMW-5i;49 z9Gx`+?K80wE={v7Ct?MeE>j9+NRZ5#39D+vb+(Y#O1L=^`o0NElFpjjlW|ghDaQ&|*Oe1gbGbDq~;2 z=R_`MREAvkU~ww2fWHiQn;k`v=AL|sx2tWxdQ?UjZxR|ar{?3>YB}dt7HX#AY4roV z)JP5ZIKWyF`czEycm+xn*3pcGAOB;K9KBcVfh<`h;_t}ud(o3|_Z1!XIVa}RyaT(| zPM{cPr^Vw%>zNVB))m`sDT8rCyB0+AN*cHueB#YZQj2M(AU)En*J|ze^vgm4oNO0t z#7Fh04QEdMD&zZwlZZPp=goO$ zS*n7&>VIH)yH=29$RehdLVA-Q!)`H*&`fM=$Mx#jfU*n~N5uoUtDru z1bdfZ+ce-K?BtIkhmN146&AL?b(Abx``8wI53)2csOY2!O1*fX-M4M~WJ)wNg44Hc z8^bQsz!w@fGeNGOk)a&#PW>aVz7ARKtH#J{H1_4VpVM0-O@7Pt`eaV zBw8dMkO*K-Dp{y<2>zhoMfEsq6+e&BA7{Ws*!{huQgf zvose*q052iG1|An(B|=u+Hk*m(kg9nLQnW7f0J6c^pvN(T!l#$?8*$wzDE|>$})JH z;6BL`X}w+Djl3uaPnM*p`~Jg`5kMyp4K~zIoQuU|8Px@`eo$?Z`2Mf2sDC~BR2jRO zCl&U1L;=J&n%NB8@f1aGWWK)h{B-QeobAA{e?zT>?rO2E*{>YrGD&(6!w_!FB52|r zF)o@~qAEj&tybNWo&%?4E&}2HOVK3LpSO8<#idTLBTllYGcOW&W!nOrS#2~$Ca1Eb z;Jz^&`TUwKD-FFBm-$}(={nL25s@Kxt-w-Rak*=_xYzsX5@?tH^xAGF&&8D|afj-j z!>!gc2c02@D?Lg5f0gEV))U-#Mj5$=Dy-nkpb z^WRsIvA9_s;1mttFENm4X|^3<D;)gsglnre$E-OaWwh(0uKtxUMM0l6Hnbje{(l5!vUApY-O=z z>^xC%DsAFap!jJWnvcda3zU5rYB7@Uy&z=nVnJxV+C9)s)7%xQlZUcVVZgU~JDLou z+Ws`GIa@=zw3};57fK(^TNDy>p9jQ6p8hn?n}^b-0_U2rK_dslfoS|HSIOMY70Mve z_Ljx^ZPUtK`NsfqCtP?o(|Qpo9F_<09F%*LrOa{8*i^J9U)j<^>EG+OjYRBNAyrMn z1M8E_>>}Y^3*N&!#4XU=y=BkeZ*} z4z{Co<}4&#*!kV2kxO-XY$u9>-kF}fw>j>{cSvtl0ta=&6@h@i_L25>Xr2og45=Jk z(N2!us^IOLsrI?DQKsATYGGS1McHB8wsaE|uZ&O%qklMVFs{V8l}BW@TDIqDcS}_&nh={q;#j5?$T^EK0hW-x6sI@v^MGk zr&aY^LS6f1F~>G+NLzeSbTDTgLtbKkwsJ*4XCXz~ng^}XPh|JgA4axW%3=7?S+v0B z3MxZtZHPf`jPW93qRNFt>Gh*~t#2`>xzKzVjHWgtH3@*8*rY4SP87)gb$@?WJI?lA zJ%QI;ncxoaB7K39v#WC7a>t#adzV_FS z|6!`fs+w1E$<$$M4 zK>&J&)#mRZDYkY&h(p48b#52v&F`(!AEVN<6uxzCSKsnW<0Fx3J<5yh5LkJwyB}F{rxo;(rg&x z+>7S9-WuLhyXCVvYVmA=Sn5eFBX>tdlh>P>ai`czRcb2l^}@G+Wd|i{eLGCHn0pRr zCKkSD9`7GK<4)O|PJ*7(;NN_>j8?zW6aI{nG1^H-?2vk8$8I8EkF~%~yLT3lCS72h zMMBvebd;>`ZONcRdX_3AWqLP1I0=CdO+#L|+n;|)@1AA`D2kzcGn7v>+}EhBC)Jq~ zr@vO?vgi*^?xU&`w2L#VwuJef6N+cUjdPvCPW3n92>t3d9OAt*)+`3gd@3`{Jm`lH zOtaY7rvbIyGZ*w`g?iy|v~^`Ud6Wr`Mi~1j|6P?JD}%3|WoW&dD~N)z+d5M(>$LV` zp4DX-d@5jH<;VNZP*>W`bBdm41zHHn8AG>7S3Un+n#qAgN3-C*Dfr6z)!l0TnTGL7 z*yZPHv6iIP8<++=na9wkE*cxi2PI3rCCFYW~&L~WV5RTKI?c2>UShK&r4(WY7qoeykn+AQ=jgRn7Wb=OT`mBs!h*+4Q!zD2 z-H7#bi!v_}vSx}HfrZPN(EpaGeJT(Jgwv_?X<-w7kVsoq#cjso{B!N2s88g-)C<^< z2wRJmw!`91Kvcgpo_@Dq!E4Yly9|uYaRm$>O!WdV5(^m}5kkk1%aG4j5bfiM1}|Dw zzAph?Icjbepbeg@VkI2~P@wlx6^ZohLaYhhI)c?XyGC!Ph-dAi;ZtpvetqNsjFO}5 zPbge1SoK#%VKt`eujZ#`*A2r7dD&5CA%lFGJQPAMq4K`KyLgx3w_-bBsbK&p{iq7X zlFIT=R&%orGT)>CD7EU8MaO?t$3OEp){LS6DA2`3S)UZ1{iFE0<2AELaCHG1(RS6? zdA3*bz*lYmD>4=PAwuj#o@&Jrs-pLrY|Ru6Px5nElkT{(7Cpq#+qHZd#?%^%8=t?a zCaf?b2tHDREP&X5q118VYKkfgRf5CUI8$=r>P}omWRTTE1|24WkjD9zy$^|4ACO1? zTgo<~$fmDZ(ZS(WgJEjK<}Ip2HZV9Qa!_w{p|jtss?~DmE+@`WTt*8*KvKk`S$9QG#>#k&Ck!81z%&Q#Q^~ z1EBkPYgneLXuP5;I(Us~Q>}snI>`?HHhnA5iMOl9qy97==+IP!(@Ag&u@ADs!Qfd> z;GYk$y0AVitYVt3VRfwzL@7A&e%Ilu7FvoKMHqb%ToDok5vZPQXwxhI=tbB#9- z9uxEXY*iq!C?!(V(8BQn_v1d;v>8>`Eb&>gK#h)EbY1ErvB9X)w8x;HH^jKNEbPZml*e2D?TzAFs=~8EJR~8!7{?ts*ii6aienj0c0zV>Vl#{ zfs#1}u{W;bN+?D~?D~KP8X?gG>7|QrPs`KL3UL|Cquwj2rNg6a!s#o1aHp6&x-Bmi zh(KeGf3L^r_d+)f7}#cNRrmJFl9PPFJe{QF6FgrlpmhD8mdSh^cWPvZI<3n*^GyT1 zwnfy5@{?o#B=vC7S))3{L4Xvo!6O2vV+d&ntt?ank}H(R?Lm_4kdkx0WH})wD;zC| zqNPO41!BgyBe(OE9uvb65%LO?m8k{Xzhg&|9-Kjf+3wUSd7Cq+0@yNBD=~<0K&iG6! zLBkzwIq?W{;W@^(3l}cdBeT!-qVJ%h?*N4lIg=piB|)qKVLS)&DD_hp-H z|3V+z_(eJtnzyVgbj=iRk+-3Nz0s&i${Pj`y7M-s!b+#P8xID?BCPo{ zqf*))h!)0Il}SF}!CDrs-zz>-n@r3?s}d@+1tx>;tsTMH>8iI9AM)w^F37GQ^FQ;k zBUTP!np`>swQF;?9}DtSd7r1-aog2O3-GPQO=O*5BtJ39o}k2Cn=!$4bJPijLz~wG zj(IrOM~Yu+rVh?2DLBG!v+icNV)rk33grxfi9U+n+LbMc7@l|mrSGA43FnFXmCKi? zg&8#58fEuFK{mGaS3|70WKXYwsnq+3kw-co|EyEVfVUL~*Gc9yGo2m)$)l+`IMbW} zeqVUsk8}v_Yq$H6%2dmd)b3bmf;Kc>GFhpj#?>9yjB`a!iD8ifUXv*@Jfno?sw~F0 zMOs!R_0Q9q?KmM9==u+|u8c~Vt=sQmBO;qQqWGl9X_yRAQRK$nO|frIt9?IAGdv7+ zzZdcP&v*}44NVOH|N&&VGvEG}RM&BYbQrDDX`p_8^H9}mv5^80P6D}}oi0eV8c zp_8gM`>;%E!8{faB`Q{lrry->K>;y9kJ&-><&%F+Utm>sxkdh{O@VkzP_V;@;x`8DL9zKvCsFbYGsF3?W9*_x@Sjppa0!T z^J{vuL`*P0MyS&8dp}nzYyE?2^#+i3d*p2{vY0)2JIL|DrbLUn+djWb^nS8bONw)sG(Ik?pGP*+<--nkTW6V2LVzsk7-|NhhZ&F`7Sv03B z{=j&zqv5*7Xs9%G_U9EpMVaqt?Fq!wfvxd-GeyvKY!w-r=ao@_cZ2WpcTKZmMXc-( zcSRoI{6E8830GRmU{}n^c?~fquUzIX!g{Y&V(`eKf`$m*wrrD+yj)Pg-g}@Z+0Eq% zrfA~35PJ^B>>QAnfmk`wG}p4m5S*-|8r2NV-Iy7r=Fu?)1sMK>$1e9|lW}zuHs|l5 z_NRJ6j;{qS+07_#`f`z~Igsgu$W&|TdSjt-qw@eMFFixWA;XHSNb!)6Nqhno7aE_? zg{PYy)7$A1q(k=ggZY;18yX$R{t%0#WhY(PwPq(oX0NvO3J!+3u`B{vBhuH!^q@s( zy*#FrR3YJ4>Jz-gTt-u}O; z-cBwvU9-qEMo~{^5WrM7gM0O{Ts>Ze7+Xzk3%x=B{$?10N3)>Kx%@CN(2sS44i(s{ z+>G96Ra5XPIRN}ZK~H<8s~?MBixk{h`v!KQXQ5BjUQJMiK(9kT)=(}?tWM{#G}{x$ z%3M7$H6(hgu#W2FFtT9HL-kT$tM@(y+vcQpE={sk-Y4auj7K*2RY)T3PEU2Os={hO zeWnQNgg+zVUP=^kk&CM=EJgq+w=F9UJWC1*+)SG`m9$&e-w%FQ)01yK=Uiz$J>|PX#;Z>54jU53uUakI)DwUUjo+9xh1%w|dkM<|9eIiq zgOd7bLQX=Qx|Oa;obV}#N4_W8|79dqS=IDT^S1W?bu;0#s!Bbw!Xc-=bB!}EyK=FD zAS01|4?AY*i3~zi+}5M_v~%rjm2PXY)N(TE9G+Bg;<&$wj(08jMCy;_0OnTGM4+00;$T-(~#}plO!#84y#BHBfx91jUy$zbu z#S}h7?umU>ifN%ti@=W1R|c>6E@jmfM-+8UTV87zhjqsaeI}b?*g$CS!HYeSJuN0e zmj!RN;^x;GMUhwWWZ{P05*T=X9l>thWJkP&V~cnSg21!ZAxLg#jZN0@R&NE*QF?75 ze;40UeUW^TVJKRK{Btyy1ptg%i$H%gkmYD~(i39B`(bFr3(BxsQS~e29J8p6C51tC z7`f?{=a0f72&4kn`dh-Yds$8!7`0##UEx7~>|UqkMJQQ_k%;F-80u7lVlYygT4UJw zqB)QaACy~lAPKpqu)_T5@7Csb5(Id4vap<7{8ZYIBQM}GHc&}A;!znlS{DIcCVG6l z6*?q^<`8A%Z2Kjucl@;=%dbuL;Ur@&5P-Va_Vh}7$;bl1Xy}oo09>{$bP=2gv<~1! z?B&a&hyajN2aoVr=#`J7ptz+c>C0rBNNe!@Tl#2(2t#7_#aW6yrB7Ujh&w%1w~vIo zPvVv)2z1bqo)m)8VVw`j=N^@pCquG^eQuESghwR|lK$z2b|=mDjx>~xswJOJaH0`o6aq|ou48M8(Dle%mEEWReed{WAA24F=me*V z)2pU|rEW!SH?e`4%~CDy2J$XN8qb-sqXCOOd#ajDH+eQTT`3|3_LZCwlG+ilCP(gx z5(_{#fyYpXfl&#;ynVeE0({+YPs-QUyY`~ZbnY~DhF@DM13tLr1DQugkaHo(S1zrG zBUj2z;YQ7_8oz9suGtF+#M4x%qjmaCVNjxzixVZHHm*W?5N_F@!@59eR1SDR9Wqeh zP|Ouh$3+@*+_rZQCK9@-vqrI=ld;>Q033TE9f5ode7ifwIl4ET$%)c)qlZW*}x3QCTg} z8W?E+4TT7>R1A*>ZhCFeo7ux(IqS#cXERo>SNq7RY!z5k6J4W!l^Ccpi**5=sM!7S zES-A2d)!QiS`l2YGafQ{(iM6Q-?j=y+NEWyH7F!i3N85}6-`M8e8}N8_>}R#2YS<) zpODc!8pSkg_#{2qMcQhJ&=%-sJ;XGKrQu!qtCm#;o5DMqd0p|gu563!hbK+tpANRa zx(BP)QX}-=rh5OUT4B^~WUY0I4Y3|cE|7cS`s(Nw7Hj3U)IjSZ;?A2btvJJ_25n2w zs<~G6+$b}UkkvZ*nx0$x+SJ;X3Pb96Yqc(}Sm-b>EVi@aw<0vn;z}EE2%6`hn|F>t zYG(zR*KJ$et+-r*h1j@@SaGdk`M=S?^3YJ-`f4`tEXz=J*t&T1te^ywjba)zN`B?u z`hufV9rx(UezbIBZ7u@CJ4b;QL$ds-88c*@(ok)MgEK3OvT7)rEX^x@Kt5&X zbIX3IHJQo|!*eG{7||D?oNLLMp5D@#v%YM}0Z@Pz+TC362lQTy>Xg8;Qtb(tD+Qn@ zGAO8hjvb9z;P;JPCZ-10D2xcmwNI}&T4QfAroTZtaN}{H310D zYx1|m#=XjK-W0y(?GVdQxq@rrR1K18fRxskDpWrJhvzP1W)62?da*)Y1d#RT!QaHD zyRf-mBr3lskU=7PCIq-cvc0KsI>=)Mjf)_}PA_W6pcE56?B<%3;+aCjDCFuWY7hBT zvI%1~59ITtw($ItSory;YM!?LgnX^TAWWxO>3&S`Of=}shv9pd()h*!BkVf_5B4GQ ztV)Lq3GvEaE8+$*X^}d)xMO0UZMEH`X*hubXQ9+VTn{PWgE`-yEmj(Zf(Z`@!<=n6 zj~8H2(Imc#0Bc1`vcK4!O%Vjh!r062W^*R6H&&_zB>;+$hw!3p)oX-M+e$^d4us6{ zwx)W|n)cZ4S~u>lhS=&Qg)cwTY=Mbizqb$##8$EPjTZy?(UNhort6WSo`iPPMe9&c z8gQ*oujLx2szh~WC(fx*0bZj`bpR$IxVd2gA!-O39p!a=eJ z^Gpac2i;Or13&JTdnr(=-jMfGB4%G2hoQhSS8}cr-C}Ut-`!9h)MH7@0+1J>`}^go zLze_GRe%0kbVQ{^SBy2NQOQ|s$DMBDIVE+ZB+`^Ulc&m4j^E_17BJJzH5P|GytG&a z?(~FH-02Cx7XH?Dwr)sBTw+iE$Z@x}iZ&P?D~R z1kZ~MSy#S@lE;d>>E4j$(1(&Evsy+e!sO_CSRqQA;Ev>sKS=S0kGPXXRD7D(RZzto=$~nX{ zUqjH+DNVeM?JSFascNd79yObVq}AqK-PBEOs1u%pcmut9x6By%>`;oxhNmh9F2$*K zA^=gIrD$MPVbM-yiqvEWdG?7#bI2c1-N((?bVEClV7P}*It4z&m$SZ;d|PfbC|>R8 zpl>_qbvvPf!&u3f4ls$6u;jBHJ>xl<%{;FT6q4=8nVrZ+xcg1+8s}N{sV4YTOV$Pd z#E}Bu6figc8u;RHR@5~bLa7@^v5T}o3v_O3p%BQv6lWYurqvYc_z^>JtFmFSIT8+Vh(q}z$kom> zaOZ9}U7K+k8r=(0nDZ-8s+D6iL!*=_Z7}~zoz?yA$C+lIR(-XZlE}yS)pKrJp&Ik9 zUABIrc7mGhAL|GK=_XCrVSD2F9XffWjVeg1{E$VUTPiM^!bE|DGz*Ub;w>uLKlkiofGIN|h{XwTomzwX8jp1o|AW+!k* z*er_!v%j6_l^TQzCX>lB;)C^+IU0xTc%5b7N$z zQPWBndQclN>|8`Pyz}&vjsmC_P+NJ*y&Csq73k3`cZZ!AtfXH(vJ7>v3ikZ~VoT(h zvsRz4D)^Ca3(PLP>8y1R@N)O~d9v_8&KZWvSQ?g~51KU;7a;;MUTdv!{JTw&U{3kp#iJ!{f7F`A+< zim;W_fpt&QDm>4tsxA|2EfCW_hq-dP3&q-;eAPZd4!)N|yf~{+fyLk5qr!?J{$cBA zp`ZtG>S!}H6zv0HO7BEpcFeC6b;5=<+rX3CqaELP|)a|p4nXsR^a z`o9aP=bQJW{H?d9(@-09be7T?!J z$5e(b#pd*YG{A;*eOIQ%z7JHM=Pd~{E5zl#f((yj8|ykE8n&9)Uc2Zu*?r(IEiw3( z=w0iPbIticrD0)tviKN{bGZr-CNu!;V}Ti_Rs-=#8_0NQ&4;9@z+1Z~6*V;|tv3IP z2VMCbOw>XPt%Sm-xtbcXi-ng8NrDQi24gLeE5fpq6-B2;gr0;kiaKg-+XQTBMF(ds zI7YKtwHh6MX}kmM)VA!xd`Mkv>>V=9Al*rVja9^C>ADN~hQOa74^T}55$)WPRBe~p zGX4%);Uy=+gGcFN`pRI^1O*Lafuj;PU{N^qq()X=xR~z$;AJ&GYzv3X9uKUtjo_rK zY&3LZN#9UKY7ir}4W9$B-;}0d-B3MkQCjldQ|&0OiNQwa96=GhECR)GgOI%VKren2&Y=af>D)&pc@$S{Z18) zZULTXf(`UGmb#^8F%eiF0oX*d4G?TwZCriJ)x6V|yO$xJ3N09Y67+11xgGl(EG&6#xV&o5q9CfG&13^HDxXG6;=%a4^H{s$W;%(4qY| za?Y>3V!V^qRS}ZUwfhakhP8r4Bc-*NOqFsf));zcyX9PCeJQ$(`Mgu{iG0VT&%EnB zAmkY2qxCaYrm5QKO;S+CHS6h2_1p82J7u@C#%l~_#Ht(D-Ews2K_=sMJT2Fs2mISo z78|f{bih$v z#Xhn(Ei$|$fvP21@cG!PJc2e845+G#cC<~n(^NNt$;+*t6qo2hNTe>scO~jDwr{~b z88BpD)%H<{8RJ%+>Q+_Rl%Eru-MT~1I^<>Y-Mr%M`1W=U>)L6@qgz91UiTAG2WAxi zsts8qFJ=%t31LC8_}F%XU#B6`H#}Nv!3F`0_lTXiH1~BHSf_Pm`yI`^>6oaSo$yjm zP-tU4oDb~qs~u5XT>a$MpteGBTT%|x&L-}q8z%)CS}BWDmcvZ|oCV(LM`y~1h^aO)<$YlP zzX(g;=c)`(MEyMJLvW*8*TJQ+JrxN6(hZ7r|9fT&nn7g9DJuqv^wrI%0? z&oVIyvCBLSDaO~$)B?lo8cswK7D+C^x9Zq5sN(@yNCyYNQNnX-c|A$YI#rh^aY#un zK4erW1Yw;z@RPvsdMwnK18xLCz#Il z2iBDx=||1^rNuyq+lX=0M)D^Ke^JCoPKyOp0T{a5NiaaHdx1KJDnG$R#CBof+wq6vUM#hgS#B`bS%l64SZ>Q1J39#CoT);-Kmim=$B9 z0xLBp#S4?s%9@q51m|f_DAdN#j+u4&wiM{xhIQVKy-h;L9Z+kWXtvLX(yg%U0thAY z_<(%uj%}~5^_!xU@Ad;yI$@Gj{DF@v%|F;FlY7{Q^!}sp>;f(ojX||ez4D2b;*9E% z&QLwOuU*gC@+U;*w_!~i(sMme`S+MvN6{OJQYaL1SOUIs@JPCH*U08lBGOi7$GfSh zoepjlH&%yW(Aw4${__ng)u$(Y`&~W=Cfs9eiaY}CeQXrlkx203)sDKqSn6z|i zQQ}S$8R}z6t7_`8ZoRg8#1QBQ`1FxI=PE3*~@{~Qm6mm=zxIJlzY!)cXtm8basn=3qsWTR&?X?CfS zmh8z2Mh})!9lThgh8>^3yJURK*kZe3~Grcw{Wx&coBJc?-;Z@vtZBr z-gmv}J9^5M42Mh61!IhgN&2(AB3#Zi)i(KOWxmv^k>2ih5871jL~~KtVkwo{1Lj|ELLOju%t z1FN-wOZ8fxheV@N>N&BsCDzvs8fE8sX;m2T5WtfMBw04aAHa<@ae*}j?sf<+$SG4< zm%cYd+t91eCgW1i!qQ@BRB4)HaU5AOKuPT5I4i3T7S8s$;l1uFM^m{DAOIU>y) zLpSq@M6y1{P4l29#IL`**9&fm?;4sEh(=f)g^K;FNllA%OgfJ+J%?A09=SM2okCisWvJwh899QyM^tGNT@)EgekhNVf?NIOl9(KSpMzn+-mKB z++}rdrfxS=w*!yrsSACf4z7l+UcIxfl?KXK6jXQlMcCPtI&&&7^>w)3(MatW{QM zJA2#59B(;htT;L{u?k%IDqXHGWWG{09iy((2E**Ts*DVLqd+479EEyNv~K z|EBEded#hQnw3UrTy=(Hdy{VKE)3sxq)~mqjbzt|k8Zqi_OpMOt6;X3ri5#j{?z?6 z9-O1KDI>7!M$WdOBpN9DGYi%2cp8c=&Nfz3)uT`@xLGf^t4$Up@3cf&8hmO4aYM?m z<9It;Cas(z_ZE^}Gq0*WzR93-s4lyw{s3iFYv%faaGHE)dctzuY|`b-%GhdMxp?fx z(rpt|IS}Eb-2~*LrK4E(<{_d&J>-27-#QE8BzKFoOkGLkbU?=N%b;Bg%Pm6vFI4C*kc$3Z z6rNAFk}GM2?SphGY4!5_$^R>%OWjH;5?QGC-EZyH1IaYq zW6&_r_^%tDLrc^4ailaxUkxlwQe6t5VA1$ znv*3$3tU~VPzW{cmtJ8)u_n_Og+NK3@|Q_zj$~(`Wv zw|sBad5l%IS2}xK;X>=LK&s47|0$GZ8PQf7T2tZ4XbdGA87(%Qep089T>Y3%V&|XZ zyG+ZK)^dIF^mSHsIc@E$l-^0+*|LX5Yc~#P9U9_DMwJqB+^L4$2iunydXh=>@lc=d zNeGE4&mpDnnFv8+#PFO!7Qx{wz-Dxgux*It`N1#GpkdYgJ3t zg2~tdeVRhIk6rUNq$$*BQ5-#ma;Osa#fY>VrvqtIZ#m5_?S6lY)N-tez z$AzwzMoDxweJdqd|IGtS5ywv?yqIo$BLcaedJW<0T;d^t0-qQGJ<{8e2U6Vt(0qQoSz=JFAh8DQ?seGfq~{9%yz6H+66zY_YDib z(8D!^egg)CV;t7Uv@*%Yb-+L;$jbqg1O^#v4+5Sf9?K>|C0)lhy3&)OGVPx6om?>b zR!=H3OZ#UpDT&}&S{IKbM1;O zEG};B_1Ln#n%fJx!L{oQ(?lOsZz@2XPXH-!5lgPSNFcw*Uj8WF<1|3t9DLLuk?g1+l)`pz}vjk{Py)1+pmi3|ce=FDgO0=-L*4`5x0D%K}r2|2S;j z$-UaqeSJN2fTDBcCH+L8bai##ySfSqhb+5}E7@*zi+05DItbcLYc$|!85s5xx3ekC z_3qkoPG0Rbrz(*}Bi%?r@@yyJ_QA=WIA(X{Lv)R~^SEshku?O{u1w{1?$FDsK?7>8 zo2r;kt$;;r(jf{_9FIip9GArN&WMj?QF!%NL2jg*Y<7Ymb~A;Skh-HM?iTBNWY0rQ*zqVJNxFgnc6A?{g5Mac%p6%V;InSAJ`;;9S7b#WZic%(TPxpwnx zK4WJ-)rKDT;n#JC|;y6QR-nQyC;eSxa3n1*-^1~26u$>9M< z@~w>!2xvomPsIUOxL8M;A;wfC!L*Uh)RXsQ6rkD0TMkfG*E-tN6OIMJ^RQ}~GOfl{ zRxv=l(DFM$E12IY*H_Ia6lzNK+xnWCcm)Q}mz%6O@PA|}D8Y9XztyI!u3c(`5_9QN zc!!|z{sU@M``tjTxql)Dv}k2PO2Z(_%7c*a!2)huDS#-%<4ZQf&u@=@7|X>vK6p-^ zQ(chama0~})+-JA*;fwo8##e6!Zuv^LHDQjclTz}3+s7i~wV^aMjgTLMY) zOi_wp(v~r_2oHAB8q|~}c@}tvWs^MCk_csc%h*H9vyO^Z`ftrtEOPmYmI-2Qv@lWr zwUQi;)z;)XF37WIT~i8TZtLz4p&N~+U@}dBd^{7WXd}G~siklNbM>__i@5Q{Of>Lk z$2&eb0L5uyIc>NGcQakBA5lwK>j$jXd?QM4$JQ7FlW2wa^J!Lj+S1iiy4;1*g>GS^ zNMd!cr&mU*EqS$;&C1mIP0f*%@n}!-MbFwbd(|!wyQNgS@>*}wED>gy{Tm7DYWvc- zcNieta_n4iFEMvx!J=n3NY8Q5)2DQr807{zu@yNTuGr5{JJ#8%tK?}Z6B7=e>RH9* zLFb*D8&yPG$6&2P4NlSktD{(fcZ;4z0t$j9MF>~*z|6EU+tG?T-!`+G9zBY+X2!X1 zCQd|8HEY`twHrdI1j;H5b;mKb$hFs*1#dFylG}eip6trZt)JkI8Ajk+1 ztemM6cvxR*>Q^bRNsM=jilCiy>x(zo6l>ChzISsqY=m>#hC^Pa;3~fnipGi z8V#(`3CLB=yfuCra-hWHeO%Rd+TnnZWbWJR3^<~1C6wy4wlgO-5Irf_bjNF%z~I`G zhIr_rQHL2G6sAbVvtZZ8l0uzXQPIJVTc~8aBG4UBU-*OzjO8%J%}UqqF0TzgfTPGg zTHFr8nyW-x3rZ1(K$#`}x>B)Y%1A_rn7~X2Z>1C*71C^4~d%Xz5!hgG5vKv3T zGcL4+3hb78LPI8*$Lby=b3;4NMV>9JQU@j>!@Ij>2vlB&+#0QczS@bt8b@E9$qonO z)7aw$$CcgxkCL(_^OX*Amj1meD||&Jd%e(NK~|l){N(n5(W@07ODD1uf zQpQG`Gyx;~38B={*`T=N71pdACW|{m!Jrw(Sz~4tHK@DHzY5cPy#R{Q0I^z1aEp4X zKFyksSuV|AQ2BZIQn??$RMK6f{WbzLGbs<+E%MdQZudwl0A7=D&v7waJ?d59Xe}4Yqoyn^5~&WB2WBkxWl3g)SXj>I(Fq z#9%ncT#$OD`ih}s$Y`*oPlX=*VyaBOZbk$U7R-l*soVokrF+P-Fed_ottJ-tHv22g z+yI506_({hXZyhSw+e+za^R~IqK9vVO+nkdArtOvLoPa1WQ-H;h*%VLLd zA1iAyj-R$GSI&Rbz=k<+n^7HLSr*f6>tv{s+g>%%;tA-U{a#!<{k?~(3}EfySo=bx zG49%tD2-Aw+%4Q})#Gj@X`r+lh0gvR-nn3a%&G@`&g{_lpr`=AYG=L+Fs)Y!YPR}c zT?-(7PmpcoPP;pVzr#xsLpxxT^%a0Uc{c9@LEAH^*T!x;bCSF|Dx8YbUX@8~0*x@O zB}o*25k=yu_kKTw70hkcNqWk+HsNSDkQRHEv7DI4Am1Fd4+_~Q(UM1j5oKI*HUL{y z!l;+x+wL@l2IRe-mC^mypcZL^WuB=3X0&Lv$RSo({u)4Dz~xrhQ$-rF*?ZL1pq#0* zA%Z%KfaG)>cmd#JH3{TziYNdHLNz{FyQt7W*s#L3OsoTlirLJnX(UNoCjmFpB&s+7 zc};zF#^Zg6*wT|+C(Gn6e1{Pk$05DI@Z&L|Fb@K8sB4vsW_j@t0=G&d;8~oYB3rNy z#Q0tgs=N!97IYe+7+F77Jr{Q8t#&o4XiZ{8Hx*kc-bNbmz0sCxnx)#LiKs3%tTz6! z+R;Wu165Qq=O#x#8buz`*e!Mz9B%$7c% z=1v@Lw~m}zoVxV&yLHjf#U~x}C+S-JRCd3Y-xT#gmoX5T6u?r@BM+T=z$eaRu8tO& zGJksltRixVjJ7*b^udpuqhR0;f%pzI)R2a4%2s8u&c0EB7jbwU>j_dz8PJfo(38y3 z<)zh-AFJ@4$gUJsF`pmTU`G2_#t|&6EZVpVE;C6Pw)irOQ9`k@6nrwIZ~nLR=;@u2 zcouT1+(t`w!4#HJ8x88M0;@q<*P@}JzW=p)YNr<>`PDcc9u)`h15+f=8vt2wFXFJ; zv>aAi5U#>SX=;rFzs88f-e$2$Y=M*Yv&e$Q-v2il`Yb0Syqf>xC58^ZA^>abzRbij z2Q&1`H|A`|{o>+@*6B)C=^%gF2FtWT6^rYu{-+hwHsfqj1u=I*%VbO%Et^zz$ldU> zF3?3DBdx6sNm3gE%eW1QshK71xhwA@IX2alJnP4mddRKBp%K}S#6v3{hL6dw)>M3O1cy@lBDd`=20?bwNUF(U|w($aun*QnzHPK>&m)@pXb|A$}E9%;k zPrA3XZs9ioq!Vo*CLXTE(wGiLD)JUqoK;Tg+f}U69jMqg&M4m##NJ~>K>*yPl6CD} zq@P*7w*P39!vGQ8;cZLnK|YZ}M$Z9@V)EK>SPebaf(98MwAGzvJJXYQdtjf0TB#(c zZEP<=ieH@cgv-gf$QxY>49rsho+Uo4AS-f?3Q9U`hxCixk1=&Ek1}{^gQ1V@(q0uS zLhTHOH!{(xsa#iloHmZebf-b-FL()c6lM3c|^asK2_fV({v7qJ3i0s-8T?c z^<&q2yUOw6MTF8#qjSlT|1EVKtDO6^yUQE9`OI%U*Kg%d5~^OMd-jYVZPsNj;{yCv zGKX&*QAC4W>j^oU8}lkJA&&${?WWcGdQTKD)75+I*xJl)y3Ad@E14q?ZKZEV>ygxJ z!rVcVP;yW|a7N}WG+?F`zD*;OXhCUOnVn-4TUwM-VXo@&nk0iq*k(k}9Gj}>Sx{2Q7?0$*uy|@V1x#r_N~d4&*B!}l+D@9t5{!KmeH3g& zE%yvT_`{7;JEVmGZw0$XcnwHMdp43^rQ2@jXhtHN>9E|d2M)Z`O2}HPjOU)FX^_Hd zT6G@x_fDd|Xue$1tvgl7w~X*Km0SJNq$PATUOO!m!2Ol;v-Z01dq5REHbTO>%O5Ri z0M%I};C)sbXslpQjayT8u;U?J=ORH}=XpLW-K-Z9-Xzts@~Nx7c%k+NR_4=f>u=@Z zM?PjKsjS8iWpjMt-gK{nx2WkG7e!=Ce1*^VdKw{q!3AsKF=+A*&^koc2kkTpTGoQn z1<}M9#3%$_TM5%TGGHt3*^W7=)eZRRj$={WQgt;ZgIODnG`j(X-g+!3j}Ds4obSSM z;M!e6t?4J*4sG9ZqHCB5F>1J9?V!6#E-8#(_1;)*C^@RIIb8jLVF!Y?)vVMQD+K%z z%uP8mNWO8n@L0(SHOpw9g~D?Unt(a`TG`Ls6s(KW|4x!Q8gQm$P;d9?=D4X{C4ZH< zwv*iIepJ1oWGHF|X_$U27ZWn2uzzx0$l1&DRLLN6EtSFhPIi->E8RBYD9TRD;AEKV zLk(@=<2;^J-EP9?Oj@6}T-%M1L1H~BVof2qSD!2I#=UVs1CV^DCouZVrC$(<<4*-f zf!bu)Qk_MjVrO{Yl_>LG@-fm{6IIHEP#p$Q8_rGux0_9P+wzB#Nj|N<;%B#X7@;Fa z$#Lsxy#Y;(|DN@r?t3D~g&E)+51wl++QG}I=a0&nGokYBIp1Og3hf@1toqKgaphW1 zsyfeene_93+6yRd^B~`2yle8^1Jm_pEXuj`Mwe*`g2%Lkf|7YX%4&Lh?QtV4y3#xz zSogM@&rZx`^KTlS(HoGFXT=W`9He(Cq~LwK6%SzmQr1@=X0Ey=Yqhg-r=@1#0`>Uxs(Fg>Lg=C#?PF=3NHB=G6_bnc!DKBlYf-CoKwzH*4XA~Qp-J1Dk z?AWP~%^Q1Ij3dMqbEpUd;Dw$L&U)~yug(i9m@Y~_Hy|6GIg*KnONINwS-vnSw&$9GPu1hi7n#y2X zQ?`f>$q|B>XKbgK5!+|3k7DZw z$bn6R#zdWLi`(W0^&Cq?Ugi#8&os5>>w^>(&-({&NUmm^NMn-NeD{B8xJB$>LL2Iu z7}k3K>Tuh#7GK)%+}1L_H{62QV7P^tDsKsH11tQ{5%=9!D=o8)Q691CN8h$3?XQl! zI9HIw7VHqy7;g$nyWO3Tkr#i8N8a`!o?%v#VcB!*J|3{nb(TSOQfVTZJ0mX(u2kBB z`!epb*7{XrW{W<~z`K>)M0Nrs18*Da_J;aUC;P#$=)d@5DTGdqaJ{u-6L z>v@f}0pT3ry-fdEG#xMX1PaXnBL+(lt^Ljt_$Ms`D<;-5(K+)SlYB2?iU_MBl3!3W zRr&n)qJ?9O!Mb%=&02UJt1}LhpX_QJ$Kci>WN^4$bg&M@9ZPXcfH2LPq@cgNGghW| z|7Gq=4xFu#UOKs*U*J!ZjBN4pLzn;F+^6~fQ$n>Jr8VgM#q6FnSZjZYe}(#U07O@7 zKR7f@-1m**$S-$}h#ZHtP0yJtxRWT@QpH(b8Pp_OFX>R1n@2cu{@bbwO{#(Twi7Q+>wKsj|u5L)iy0ST%vYq zaxSAb{lT5uttIA=`98-b(2TnYFWt-2c)3yKu%asL*THson`xGH4iqglhDv+Z3mw4F zPZO%RCrqi-&LnwrdeZV200ws~PZ&s@#3R;DS^{c)xY=+6ws-^?0o8E&iLt2^WPK|( z#F;#&RCuD!Q?yXoB3h$B?kGs7`;yhX)!kzC*;-FM30$-p7Q=bsa4a+ASiU+EiywQL zk5q2ABgbA+5Bs5@F?M}rPka^;$z8bnxz)5hPkx2NW=3~IQiy{FY zP4Jy+bQ~Bg%e}QPl;vyHl_<8+fMYSkvfQT7HN-t9u0#vlkWG%LP@U=mBb$UlNVaol z3|KYq61@>#gaMJx;+WgTV*8+JNr}0hR3fH8LE28vITBrXmi~CJnGGCwQ!%eWPmS~h zdeQD_#y4oycZvo#XN&%;(pmp?)Aqx9h!8K0PO+n{e&-0`t6yykP)YXmxuY1*XP+CF z699)_WGm1kvvyb=vfAv8n25jmMbN=L7xT&NewJ>^kolHp}0a0E1U0%F~uUr#6MNshu0@M zSsNf~XjE`DJR2SnMT17#`y-cuQ*78X=ok>mCly2~gS3HQMQBsSp3RJ1 zcRokd9ofXH8fHw1vRH-bvT{zNS^9&?I(#0jRwKA6+Z@**wQ|u`j%X^j)K3d}g zC^NDq2SiyzAo+Z6IO*Bdq9$hj7_Kh0*XjWE0F_;lZs7Q2iU|s%0L@ha`ZFHJ)Hrbz zs0_dXD_6hi;!+xErjE{&MHHTvp4CXObcxINMR*3~WVy>|VtLXVRGrF3{Vvdj`U+T` zB^L1oQD4=NMQ`M*z^3mf+%nyHB8`TH_8iSNk0xW}8p;XM(OI)YNpv<(G~Az3K_pdM zjc{L_+TERRZq}UZ@!vu~Cty?GpVbd<0@VPtmleLvJO~8#l_qbfh_(|mgytxs#H1#1 zYmNH%kcbYp_mRSp14L6YI!#6xUr4Pq=vS!M-+mG=oR9(Fddd^m8 zJVXb4Yn+FP!!90SEhJ(qd8%7&?JgGX#8$aqF*a8?$9aF{3e}TF6}KU-2_s2vz#I{M zr~Neu*HYs@GM^c+v zY@ZP`s3IsQVqzhAF8v6yI!^;E@v{e8P%Hd;RRD~l}TD(s$?!fxa^etv{^ppGBtObgGL@#J-^Bz&$$}S>^ zNYNzzg4_5D3aGq@Ad>Yeeo?yO+ZYUxmn+lCj1uzh0bL#i9=Z|*a;o`uyz;E!ixwWcFKNIo{nSZ&_D)o3 zqmjksTqLc?Ng$qkX?yjXu1Ek_W^so67irdI3xF4-YDTllkfMt-EL~;RdK)wU!ixbp za;@z&_ohQ_R4gKa96Q^9-ROPyt6bIl`MGiL@vrH~E|o&g;$DB#mO-s;{)2*T=gLu? zg+_1rRt66zb1T9$+hdM9B*Vh2NUT~x=tosDc=O}Y>7&Pr7Nl`!Gxs@e20vt%L!&NV zprodEyt$c$B1G%8Kt|vlE`Dv4xDsy zi5LKOK3A62dc!YK3ozy6ajeM`B{s7O->Z+3#Hzv-M(kHA3TOOj75lk45W_?nspl^1 zE{&vxLy%HYNKzuzUcOXQYlF)SuB&tJxPe$sq_#E%od^l$-xrC+8Oy(fK5xrLs|<>n z_A=s)L9QT85t(%>z1R|4cjoWQXwTdMKnt`RT9Co;yRCE>vdZ6G^S5tDvg#Oga>`WZ z&0_bY4oTbICPqZ^M;?hSmAQjn8JLDaK4q$*Q|*8`PVZSx z1JcV)l9iI(7n%gg!9xka{~u|~@^s&Jw1j(^ngzgjFHIVw{nVGpQq5N_6z;clsG0}y zW&~u=k#?f!mtr!$c841bX~7r$_^5Uv;NWwNhvxxdXF zlOW3@NsNK79gaYiLyX7l(e2V4TFTUczfssH@TbzERnJ($sCEQ&BsyZ&Q%b&Az6B_A zj945BWFo_jPd3(Fw!GyoO~C-68>@_|`EvKEYAfDNuWbT*!-)=JfvXnFvHW77y{R2b zfIQ86v-S-$Bg}(7GAy+-=$k`D$*{S2+|Eg#DKTbywV{B!A)9rbRm^B`*PeOKiSIi3 zKi2^@{}SxdugwWyIGLE~22)Q*3bR<{8F3_AqPwyiFSAWEltNeSWxFVzi6ryQEVXBxJbqA0bu77U{zn#{s6E7Ypj z%Y#D=IF~U~O9huxMKg+;3&iXS16Dj9@j6tC)sF)C`Wk_iJ>3@3 z!k?DTSdzMRH3$-ZqwYvUJZfHq2()nYejnvk6HskNvZF{0coPf2La^sC zxIUP^Pla8~Jbk7iC$_z;b>d{mbgb7pRs71lE*R#TW)dK}?r7g|J!@a@wJ`)*uPto# z-(c2_%+9wJ>v#>17E3umWG4z_b*YV=j^MZUb(Z+2D^IF#GnXtHi9n>tG|&5Y#r8Gh zqHxbOeOnrCt3!19Emp<=y=B4|pOlwuCs~@C2|?c1zbly@dujwZu@c6aS^hoqSe!Mg zRa>>#rNx92Q;4a5rpp>ZtD5LE-DSz=$WBp_rTV_}kU{I{z#6OufOPX>nxq>Ghhg37 z6c=fvEk6!h%$oL@0cU$VA#5nENum%ZU+bG4)TY~;LN?X;iU@LFW;-zV!2`+*JMOjH ziiE9(ptB_QQ#P1TEhe{Z=y7fnxrYieb6S+Q@&k6?ixp6r0~+UA{)1)L@mFp8$h!@# zq&vu=_IK!(L#&8u({?Opu0Z3oF_Z_#d$|gTVtX%k@}*-vyX);VAREfcDamJwc`r@C z&sm}yVybSrWwTHR7FI>_oI_?7h{y7pLPm2C^A44|&>4YS=0L}jWd>&{Yu|*?E?JrV z9(p&klG|4=xNqA|;>QS3|Fz`E_qN35A#aUKu;c954kUFu(2egs_k_=MRRvi8P-90x zhp-#zhyoCNw0;P8?(EfSC#&6NB7-Z8I@_+N_I|D52HDw(N!{|*8%^-u@ zUp*Q|PID2!;CrFtuiFw3a^*h_$OKl?@-ruMEvF6)ILbXCWsVLp5SR4=R+*7@7A|s-kK{nT!G4Nm- zPr`}M!5u3me+6=JgjSo$7T~4d@JqgUp;ek5=7amRm+YVf;6eR`BFjj6tHYagP8HzK z*RDSzc!kr0$mGknTqbprV^DVDBJ0JUW_pq}N-kUQI~sD~CaF13}1w%s#(A9D8?>x1W$IZ~WEqA1A+^m$7b*0ix%%*U_tM^#c)zL#SZ znurd2gt7PiijJ^P#Llq4Xpa=tYCh2Qfp&JvbC9nV9B2o_CB&4Lc+?XJI>?fiF096K zFF-b0ji*cGaO&}>=EP;QnuB|Bnxf=h%+5TrozD3ZlzW@Jty?9FM**7XDlX=hp>YY$ zW`N7#ofDbnHEX2}&eEE&9qoQAf0gj-?aX$3sSv=HGe zDkh2{N7OexlLxshNnA)+O1AmP zv3KME1cg5HoVgeR> zdWEufc;Q&_E?v($%NcI#AFrcnECR-<)#_ao)t8UjR*I#!xOiujv#*2Plp})P5G>a} zQzK|baTSU(Cg}{-@crGSIgn$Kre@x$=by0<$^E$j_#Oj|(V7rEDzv0y3!$qVv-t5FltY^RuL@K4eHx(?EO>`<=_-N#Pmd-Wi4o&8a- zr+?Jjox*MCsrP#Fbt~_qyg%q!CT8BpdEd_alb*KGo|7`^Ql?3n3qRWUGI-wT=_pff z=A+gtJyAl}d1pFGud3m8FFx^82cupL&RDyPvfhl5QFMplaT8f<&1BTal%&4p?ohew zC0^cpYZ#Md zgd%IpL&njW$U=16$WxhJ->qE%I>D9SWQ?q0x9tU0UMViCJJ(2Q7H1*#oQ_mz$_Y~$ zb}SpycQi!pX*gI6CRSIxzu;sOyF+nRy${TZgde?HxTDM-zpIF}yo<8QHW81ZY zL6rsj%BO-at;h2v2a4*JN01Jr)SM;$)x=fg3b6K5Q8^uHB)k0 zKQ%5`WQyc;Sj4>3B$tZuBlE4CW)R1)=Mg14NM_QyUG5#dkZVg;FgTwc9Lpb0`Sp&{ zA&{_86GLj-kA2;Iy0nG|juO1ARah8`5pL;44p(Xyo|KNvB;jWLn|1lx*Hs$n>00P3 zl;T-0bKB#EIy_9CpCr60Zt5aKJ3;8yI&KEkITe>aJk=AmdZTCcdMfZ(eV>uT?cbIh zjvbx%nBi=Y47l~=E1xma4oGRam0YqyWeU`Rn&*|;qE06xcfiqFZQJq~`}|0cC7FS2 z2S!oS8!)te0G?{S7c%#<#Ug*WvFS&Q37~fMgv&d5k5%xbY=GWO@`j$p zQK-Ar+7VA19Mv9{+*G}5LTkuyLyXjhRh#=}W z)yDAPOg>16+4SI>qtx1XKaIhyC-olZy_)t!a!JX!p8;kv+OZLPD{C0%5o^w(ErNT2~P^aQ<`{3xX<99*Qkb4eYV zQhcq3jU2_8Xa(!j$fcWOtc{TmUe~Mots64jCS+BfxsrPXqyAZ$$GxSH59G;dnv8&0 zQIr@L?HsQpK*UVY{x)dMmzW7f?}>d^T3)7%Dh71cI<>MrC>6uN`0jWxow>B$sz!dA zo8np%=@NT>5l?P4vhtHF-jg``QUy*UTdl)H zr0bj9CEy*iX|9}%DQzvJq&BTGER_hVc58u$1aMzUl|oC@MU(ESW@99$7v0DrV9s-^ zCwzL6(4*Vx#Ryn{l^=9eHQBC$-EBI4Vcyg$+Xf4k2Zo(@Rq{#;fZ)Z5Sgd#QBFPM0 zgXD)KkAl}tDm;;!m~OYBU_t7*)6|1bJI$iLD%0ohT|6@wD2m8V8X5Gc-557Q+B#gq z$h>y)Zg*(`YX|mZO1K?k0oswITp_{UeMmtRDIRm-r7u>XDx?; z)SYtFtPR4OabV-b!D;T0n*NX>^Oaob2yeFQ(9E~voR_KUjnFcU$D)u!zMeuFLI-Z{ zS6%%uTuuSLT<44*5ijxiWum~4LJ^Lh%eLz9Z4x5Epq$F<)zetJqS-J;Joo%aqPJDw)dPg*ojE zOisD9$$N4hdtS;5aL4j_QG4<7Qtkz)i0WwW)anI@s|9JM5g&B+^n`%YCavWVrB)83 zBn?UxaR>q^sr>yWwYg!5Q3u1Z42m!Ewdu?OYQ6tjkM?zqcj$`yr zH5!1}seGr1ja+?D)h_Q|&vvJiC&)G)dk9{}=zmls0YcRda$L#_0J^6RMLT+)dFZ~< zWu#!*@^h>!Ose*5cPclL?moyv3$U=LNjZ4BzZMAdXC@8Ehh^NNDH>mDuAr7<4tRYc zH65o{o!V%;RR1JX3AxRYqTH#c$_(4uEpofku+YDwC)L*v&T5Foc?~E-Y4OwOV#Q<@ zk+3wX>s&N{3ZqO4JLUXUs&_BzbQ%u<9JU24~1b3m1#l(C?31FSkw z2v7;>_P>|{?fxq^iQ-zo+PbIfUI67VQ$WyFntm$?9}}=64+z~rM}3MJpOToq0mXC> z!PbDU3UB_t4=;;H@72ce@5UGL9_^`6;SGlp{c!PSkU^hF;_ru+*!+&hg74Ua@xPPc+5Bk`@FRrSTCfzE0cyjnm-0I=Kd<@oyC%cH3 z-pM}Wl(y3YnK$rb!`_z*j_4)m!Y)Iba;Q1;8 z^VPM!Q|w9WJmTdSz-p1J1P`#s-jTHqcA?cFW&cEs^APOD-65*|^~vi;0R-@sD)=N$ zwTd2;uI5)f6wIkH^l)2TJ=#C~TZzesbAnVp{P)I3Eq$2EoTT?0OP#6RK2)#nQniT< z-ciNHt0(Kh?&F=dAW#IN9uJm^@E$N$cg@Fc))N}`2JP`qbN0g%Z!P$+E7pr4zL006 zS*UWq8|x{Y_YStjc>3gt8b%-9PV_-6IJ`KRI_q1atd!#`+U;n0u$h*`tQQaLPuerM z(ZR96{NLcrL4mtJI5YYmm~~LgW!`VJ0M%iARzud|=HYk1zm^3{bGyy9R}eq^TxuDY z_TjJX6I6c1m3Z5fhj_ewaPOVYZ;wUeZ~KS;JTa~H{&oNGC#ITj%b4Z3_&5J*yqKxc zg}jyos<(}_ob!(BQGB(?mR_aP#8Qy_^+NMQX_zg2rQOc;`b7 zaeKHU*vcmtU!i=SIxf^v26de4RTqr3I!1e?o?9JTdZkex5AUUy`bzHfCX(lehkLKI z(PgGAZ&a)FBHRQ>!%)<5;Fs2H-t515^CZjT_5SSdZ%%4{{NMdLbN%*U|4!>iQUdZE zyxu=M`mxNGPo#XVzZFJ!cydq-(6s{k@TeD6^6qTIm1)K0WoEEaBdL4l-9J`|9Bz)68h#`PgV2FMddmAqs)j~t9p&^bY>|$ z`j=h7@8>eJKki@u?eXBj+kLOx<G^4urSl`52)xjiVHhS*B% zMp|@`JpVGcJQwsMq40M9;??xvyo#uoxurk@!x)C1!{Jyw@LPc%KBWpptC;l8b4p%fG&UwG$Qf zBq=TFW>m++eRO^JO=H78o2%6g$$wLdOx^LKIQK!_>R9&}KGfSsZf*OtKYCm4jm5zZ z0hij6ixhlD5gz`#1kg^wojo&Dd1U?QMT&Bh-&fYAXR<9INGXyxbKys5`dPD=8tK#w zn+IN4E5DD!?%o{NR^7Lc<@Nla@2Ys`AgPLep+3cD07=%UssPQS80$A4J!&ESwJvK= z+iJ$GOh1E<8bs@ZjKlb_|F%EYpsR1buKdewF-JmtZZ4f4l<@w_05$vZ--YAHe|a1Q z=IBT1C1k29_%Ez4@!fp&W*9)X^>u z=9;P;s_MPcZCs#p`1;h0rdcJZf2g(0)OY*$uSM_S{?k9CQp)~$lrbW4e5&E>SKr+7 zbg)zQ>ib!#(~l2w!v1h~c=-4a&DP)SzkhT7gzVXL_}BiUQjyXft!(J|zGgV=y#85z z3K_$65liag#w?9Wm7rQ=&SL|qe^aW~ zQQl2jF}3TV91a@m(C4o|fX^!p>S(_|%#}kKS-;3yWHIlxd>Dn``%5GEk5n)hQ}j`? z3ls+TSL%vDIXl2Qlac#nU%#*SuM9>^5VG&D1LoY+!P_GhsbGVLvQS^Yq1wOg6ACH% zS@zbHR!yqr!yEAW*E{b5Wt3!!KvTPCKKjF_g`RJ;@^P?q0>uvhNvZ&Tx~`d%#`ZGC zbcd8H`ZSg7!NNr$qm!WS9F$r0{GN-L-tDQBI?hjbg2H4WsV6t`5(J9*=MDduQy`PT#jdD z_-ZyC{!#jb`OD!Uc`F2H{rdh z=#6LOG8$!*3e|Mh4jBBtG=ko$MSA?YC#JCc2!1r;AqD`IhSCB{5Jp_A2?EO~-U%#L zoQ6|U3xu>EFU}p4GhnijF%49^hYA5Q8a5lqTuj4gvD~3P2CzYt!>+>|U!sZct)_-p z9~%Y2frOAKDQSjbMDP@C8%9&)_!N{&eJ~rqnjca(@aP+`t`S)miJXDEV?^t}Jmm>Ob>KMHk+x zY^0@evd{8ZO<%iW;ttxa}!E-qzUgNdm(na=Q!= zP8#DjL6*u?$;RQc&DEmggs{bI%ss|}jd}ab7~FW3)Q>g6*G`xtMbj1%PJcCxHepj7 z(P>zHXc-0MrjN(*G4Ivp2~S&FE#;6!pjq(DT2iyR-ok#kn2|JlmQ<6q!HB`f67!B< zzL4-n^$tCP!oB$-zm>!2*lD;)H=n->dCsDaIz*7x&hv}D!|5x|F!Rn54pf!RguxD? zEdP{0c4G9pJH1IYbrj7I=o~0igmnwnx9bZFVwGt~B+KEL75Uv&H>^g;)5$QovWtro~=LoI;-8sS&Y2YXtB3dU6 zoJIzv16tr!*$6hcnwnm&#a0E3@667eA87H&n9gqxJjBs<;n%E(U7G~|#d59rzd1h| zQa-hVq(vzU%$A87`5VMf9;KJXFlu|dJoRisCE_m}z}P09qDNoS${>^qrLUCHN5*^f zVT6T#QRt_sO|eP|>N@4m?<++?LW8c&S5nUT$jeK&T{Xe`tNf>2EYTidXlP}!KMA{) z@CGFKdWQUHpV*vVG%5As`Y=3?z6F!GI z387PdG=RNUZi6$2-H&pn32#MvUO6#eCsvBn2}T!MOMgr^m2Xd5fx9`f$=qm z3czfgYe4~4|A~q5+!nntau<_}h)FbTFPi#iQ)t4_%4(?U!P-^4UkqMmL+G_3t9`Cm zB7q_ZAgt8TEK_`)QE1K>!&vqjgK-rFv#s_^;WG*<->XllK>>L)mfb!>3i;SPb>XKv zw~39S&5@Di=5S(94K;wNG@%_jN=<{-Ab}>gfPui_ZiXbvgwCS=quFMvGiw(y*oKa= zP|AWysHFc4n?nG!+&+oo$`-P<&cRmr( z^^5rW)jGD#`sJ&HG3jWcdAUiDTWO>pUGPh95B!M)pv`gZs59}c(X}Zs(#lKJH`C&$ zHeOTl>3*4+T*cTIt3Y-g^?hAsP#8Kl*|=Sc#SqBCx^u0-ZYc5hJ{CtoY35s`y>zsw zVBBDakXF{Qv@r}6c`AJqbu6?Tv&&QS-Dz6Ca6?7#v1lN~^GC_UGGznO$vG~}11S>`Rsb%LZks{sypB!J4z7FQoUp zuYE8oyFs-Y8VO5|0p9Ty`eu^nDO!Ir{a>hl;YX^;JPr5{*-)$i7n!4W1H?R*YS(zl&DErZ~L&C^vDmF_Bn@Z6tiCRucd4 z5}4fJ4s8GlKp)Glhu3m$K&+f1Ah1#DXFM@pAy~?GZ$e4sm3LYOnuZNJ7c!IAFao`j z1yb$31^Rwys8YQ4yAbv_1@fPUxVke0$l2|6CE8Z6$#}a~#BV}zaNMW*`w=13pCS82 zK=#dpS~s|8)i4n0YFS=w*8r=-*nM%~6{W_}WPhPh_Gi{o_hT-~Up)kIx}|gss2+8T zaiQ@uxqaM7LKD#RqKX1tJQ|EL`bnYV3AabVJ!lK$mD35Z^7us0G z)s9BKjAVn%?_fR?cG&B7}A1=obun(f~eg3Pc42Po3o1{^i)z zTqEPYQ5TVMR@!GWWyh5|{Eqc$^qlC|Mf@??jiVzhZLTH8e4etZfi*VvSe zow3%3@LrQTPi1Jf(~f9!CB3!w$kxRABpZ1PjzZcjdY-xZ}NpKopL{d6-xSu^q#sV*Lv zHhR6Y;L6+;?~1*K3~Qx|OG6dCV*wr`j$=SKk?A!3qnrtB!nOE8l0t`;z&!U7|*;3ccpZ2vhVTkI-1nA4L57>u5cZ{q~60ImTG{Ag=OHZ`&)%;S`lK1en zGoNCZGOC^m~q?v2lg;V2?;3NFgZ%u0N|bnH-L5@6U1 zrZ#$R7>^HAB(DHG@z~Uk$=JHr zf5@_m5Yb|M?J)>20RVlg0|;~jE#|NLJ8M(kRdKIrsSA1hk-{kvR!pv?k?--8@+MWv zcCA^^YkuEg&AVh?K}aL}n+id9>BtT$dv6lG%h~9RO~r?@j(W&YJb>s6wH43KpkE^6 zvB_s=9i>OZ`#6Xu$;XD9m=()G&AB7~_9H$T#!-2~rej~-=bUtl!m6(;Bky<~hX}$9 z%P=M1I5%`Q1t1W@^&1_ia~kQUp`^tPihpTkrNq^H71V&=qoEAlf83g z=fu7n`w;%uUm`-yi}_ETV~}f09j|Jzq;7tK>F|R02_V>Ipyt2_{$QB!uCnKN>XxmJ zWHep~Z8##R!8x?cCj2Viu7c!`pl|)Yq9mN&DQ5bmHA!LgMYPqNMgc$1e5aWy&Qzy*$a1?O;9+Al-5HustQB;e)eEhPl=b!4_sd4D264hR7g$lUBe8|EHJjKCit*8>f(# z-mLO{ZGMyYDfD?^pF(HdYQ2eqPz%;FaLn>aojsHixiaxE4nTg+?wlvx;3rcE?mM;_wFpnmF@sNlSx{1%W`)hZjHe;s@K}CJnT7 zGJxXxf&5@Jtz}1{8j@a$!9!@WUOVf#U+P#?O~Qg_VXOcsWoF9|>N;AD7$)kj%GWyM zLrGI^ZlzM%zr{QKS2A#RG!yAbqED}W9>pUEUGQYn(&T;4Bs{YF1-lUXHLnq+obt6Y z{;d7lN}d*UeV7(8yI(IXR_*w>X!Cg=6N(&~F6ZZkjnHFO7)R$wNX&?2K|lo6UTAXQ zO>{N>d@F0%ncuRrnc;U0=>ffb|{xdiNSBwwl!Kxiodf12^}|!cH+xx*Wgq7qBj+Eoa&pVg7J?m2r?bE zPJ`|#llXU&hn^xg@>R7JOGe$U$O+i6(Aodz1{vt9b zS#T#|FVH?Zu+k0FNGelnGm!I%erSt^4e2ha;Mqvz4i6PclVjy5(K_glk@a~r>gb1A zN{nXTxvsKD`i(ZHD~jwW7TXd&2~1qT&FEJ!(z}D_9?pCqRP)s(6@N`BVh+XwPUk+VHL^0;`b+r;V4qD zN51U0JXL$_cLlu+ePJq6+c>?0r@;sTp^iXW1x73~ldC-P#NC8Uv?Yi`H|~acpFuHj zfcB#-USVqZvQ^IcRW+hm%8z1Xeoi4gvDn&08LCk7-N6vzcp7=;ao5BzjGQ+w7>6O6 zkS^zgYaS}-tBmuwL}+e9!8VhEoT>Uj9F6}N7L2>jWnpm>Ae2KDdg{!7{PKKU3L+&3E<%Quf;^vt%pY3ZgH-hq5c-tbf0-Ro6FCAh=f<3-s5_+l(?0r?KX!^r7tytlH~zkG)@$cr5o;J96I(_HKG2p4&t!F%ZMPIoFUXLOaM*N7NEs2RQjiB4 zPE*OPgeoCuMRde)Is^s3y32=SwkBqNIknhh7R0QE8l{7;^5jZwUFULXogEb^29k>Ct9eAt{l3q3xduQV{sXG5yRRZwR{9pl?!_@#6N zG|*T((NstXKgoY%uQdmL)*M>n!l4D=CJ`Phue0`bNFqFf3~ppjx1(bhcuE31?s68g z5?{RSs|qrFJ9)rcjnqQnnlrW zKL1r#5m7S-iEs6$3ToPF2ha&VHt~kikMg0)-61gdVYFI!!Lhr4Dsvs#g;_lFUP~tT zR(vCtiN$6_Wyp|mP<{dlR+;UlP}bW=TA;=T?G8DHSNxK2W*==LsZZ2b{vtkiqG3YVy}#zJrtALEFhitX|8+hTHG<(n(Ds6Q>E(?=ZIJ z2Rb5C%=hD4rLG+K;ftwQ1hpqo_z3kysvX4lDm#tX9vtP~eg$-haN%n|?y9Apw|mGL zQHu7w=3!)6{SLfYIo848gUH8t5iv-9=lp9H5!!zF*Q{4P_m3PQ(8u#oH6!yj-JD^l zDCRra=-8QuEut%RM~)20PFl=;WIzCNCw+Ztt5qSxhJvK!9MuZ0ebo#{%mckHz){do zOAB+hf7;rguD)>V4l+PZ#84d}NQ!MCQX!-+ITnzh7G6K<>d<@q#pryg^kRhgbMSVt z#jXkXjj_R~lCbPbX%7kInx}jx=-m>8)Xr~7J3_)#GdD-y)r`%>nvvH7g>b(ar2oBE z$Qr-j3f|2>Zsk#^y&DWpYKNVP9Ig^(v0(WYOXjtRFv=%VRV|+cM4^zqp)-;mIS}lw zJ1$~n6Wv=dXTJVq*2U^r2V{$P=8!cC?Ov3rQRs?0fmDc^cdk&@%({{H2ub9%bQvS^ zIGvoa+288QQR^vM^ACK~+(ewT3Su77#Jt7U=W&QeV1t2kZ0aXoy|A3|{lEbc45JVY zVhP<)mVR~aul7L5Ng!G|GTP;S&p7KhKyIz9M;zUeDVB1!58S439-SE@uJjgS96`k| zWldAaSH|X2srNjHkO&X-9ZF@RfotTeD0EYqvRmOWRd1(AJOL7NeQH`yh?+eK3gb)8 zMj`b@Q_sjqh`uR}cNVcxfR{y<(wu_+#f2>bG(L?7ZY8SB;b*(L_fM{kyc6YV`!nMX zcvMyc6C+h!b|Oc$>`nXQ6Y>@I8{T)>4fThR2eg|5*o>oNv+0}dkfap0q*IqG_*@lB z{q5XD(${F>dg*}?4cYVKX*6!D=_<%66^3`k`x!)3?@%;Q$7?4m>&SBvyz)ceCSmpc z@?(xZ0H}3g?UPShTRB;(+2|X}yRY`nya|hTu4A5J5{)U%A=`|K=qyY=&C-d+kzS;& zdaQ6C;cT#BZk_2HBC3e{Y!tKy8NEZ`GG<($>V+3M~=V3E#d1@4{ff;?BGVe zU*KGDlz%Lk2n5(1@}jC71QAT;MCNEYiIpN4;4AqdHGmbSQJ#KGp+1ECtKp0t;Hvnc zNH^n{BsMObxutjGQD*g5o-AgN&o#Dug$N||hx-UbaqD>k;6smTFe|uhnJVYBt^Q<7 zRv!QM!vNq40J)H#`2<3riFFBUmRbohbTr1VCIbgb)0lN(OUa7EL1IUSZFLna>pCCC zT(cx`^`WIy#_-YOpCY`@V8cgXQqxDX?WZFe;dJ1lVeFciBpZsg7#JqxGlYk15x9pQ zyG$Xl%Z1%w>2o>+JV7hi79HQ5ng0T*Fktgxcv4j0R>~I%iKA#(nE%l3Q=*i6qz=OS zu3?LlCw@e+IUt6?pvq|j57a>mvgI)(4wwuX8Aq0^CNY)rW*KEoncE5+5?ze^q~Dm+ zcrPq*73{BqKV1!gRGKv`J$h}BOdw46jOjw`Fu0cTpWX262U2#HXSs-Gj_glPX6s{r zR)8fU%V$U+hRS>RGuuumQ~ZqNuYv3iHY9pfVAJQ$wT#73uxvM_XyZzha-)q=ll+Yi zI{?)lCr8y{KRkglz=B6gvGdad!ES0xqbPosM%#fFTR{=AfFC$8BSmMqMo6H^(2t)I z0ZDk}W_1x`;$KJ6pre=dVTUfsN? z`VV~gL1Um^I6@TKR7d$0)kn;Sy**ULuYRozhnKQ7(Y}3`YST}bg$y#_du|A z?)<*}8Z542?u@9O^Y?@3B4GZ*v`C03HH{&7V8MQHywP4mccg&b2C&m^gXq{Kzf`1} zLExID5&&Ej+oE!p-D{vqb#@e{5d?Yb&33K#MoB@zSfd0DYyK8lL(TgxNbj#800h7R z?}cx8w)whl{>+WIc6_L7~GGocj22v9Xvd~;z|HaqDd^*01(o;YnkwCUAX zq1P!0Ah6r4lzNu+@-vQp&xrDMaBfK?Hh2nJLlcJE1M7Db%@(#3n&Yq&=!cPbhQ~wD zUMsgUJOJdv1Ivq*Z;TA-^obH&fhf74A6&Gh6Qh3HWdZ3I-h6lkUXH*J@7dtbEKX2& z6%3;urAvo^^hpA#i3^9-rPLQZCBlF}WPbE+)n{hx&R6C4j|X@mcjuu4%b8`E9%l!(I*$zdR#d%_RM@FaS1 zgGrh%1jhKgd|^m1iGyimgpxE4tVYSQM&;`#hXI6G>)4he18#q6_K@F&oc#l#XYmUW zZRLCcv)!FuyKUR8fr-&Fv2gaR2DkND&?m0-P-X7$eDsa$c8fS3T6;C!P)oaFW;{fv zJ-$;C+|_G5^UtlvGpAh|m5M(xC#V4N{ipUJ@q6+agmp%yQ+Os5pN339FGdv7X!C@? zL~{ZEOp*v8I9qN*#NMHaXzzO>R&PS~9(Hb1Q7Hp$**mVMF)EOX_7al8h{GD3q4qJJ zM&E77t<0@vx%4~;+DAls2t{qdJk@46Yglm0tO=i+XaH1L?baL{E$wX`03k}k#I1N< zbip@KpfG&1Q3E5C7>h`ElU9!0-f2!2Mis<-H$G^Xck0rqyW~_ilKW8K%6F8W`=oxa z^GdpNXV)EE|5UbJiB=%`;vzrpeCT##V_0Rem}M?)vgOB$;(YWhtTPZ1qQUcLu2}9# z67I{~i=EDyq1I8+$kaNz_>oQp&w=qSYkwH^+=;Yh2v4l#VTw%#3A5hwwi|1Yf=-Tf z8WJ`92amIf&zXP`RZZdu7cW-C(v+T+?gLJwv(dZ48(>rjrkrLAT@ssJ{d)? z-hchXa3H?*%X~X8sQ3a_7>_fIaxz$xS(>iCXmnVZ{E)s!2a-F{>3 z1vYGAC*G?g>!ukFwi<0sd>;uY*bq8$Q_Ma0e?)?pO;#kx?h7)Sx!f9*wLi;7^>TMS?_R{MLpe~P@gz**ZOX6 zt+6NV`_EjrJ=@XBpagb0kB={({c7hQc8D55iUuu1##pRWj;njyc<(s+FYMaWg8Pa| zR)=+!4Y7*G{1Y}X77Z6oPF4mMLwL8+AT$c4Ua+3(nR6>@KaymYZXkK5)W$g28>au29Yt89R^8q0E zRDJmI*D;}5KU4_>v==RRb*|=dG8Zab{WdXit3&c90NfsWXRQHG(EDOr*5(j@U0dna zN=p#mhZ!h`E+gwK^%kR2xc0p+5e||>9yR;kJmU!gc#RXd_>71%V|W~<&qlNDyszK^ zOz`r;?Y&#q{-gUF8kz$`m_{q_ys-{Xk#zbB>B;axSd8Na3+mTu^Hb^t(Im{@t=jhdk}cJs5ilXj|u5LnHH zU|K+Tj-8(wuxoabmdx%b0~GV%BE#?-FA;ENS8+-i23#fTON*5psLeV3)S(!e0}VYY zhgo@;I4&b}#5HdA{u9|g_+^0)p2{_0+NJz;esQO=or&Xn zeF)EI%yw1)VyKn7_ego9K6MXl8hU}Ge7jWLVqX1eehb^w-3*GMy4SmKVAK9pMohNb zs4z6CX*U`AE7{odEgKEF3APi3H{AY^D2P_RW`1VLHgj*?7O!S-g~yUB31D9a2Xeh1 zSZ)xZ-1t#lA$!5xroLr3u4pH{6rLe`5Ibg0_6LVvKk_4bE&M>Rt1^x#f?*H|Glrrj zvCSPF?Bp`_DknCm>XU)12sA`c$6>LSCdN;qsTrzo{E+H%h;1n^ZEw1cp%7-8vxpuh z*34IwmNMuFuO?F_?l11YGsH{b)rl=qgG=jZBP5Qlr<+{IoRrWsaWArcD@)y`Q@jpn z3w8p@hoA#{;Ch{#D%9A<a+n2hb@;3M>$&bPMiD(YAHIQEytf`G*WI?ezfn)`7s|Z)s2p{MahM{5YrVPk?Er_pN)?)k=9A|~89g((H2Mw6$P-Mu9o*%p`izGyH^K>^%T-zq|zj4Z3dtdm?ab<{jnQ1MW9@q zgN9g_D(U6aa{O(X6NQ;_u&jh}7~iD*&eybdqK~rl7^f!|=zuUo;dkqoETcuu^ zUMYVReKUB^F=qj+20INIc;?0}jjZSg6^1@mImcOwiqq&OA)g&!0r!o$gp|41Y@N6F zXkTx1{)x?oXry)3sVL1^Z)IO3m^U4p{_9l{TW zM0mU>Vl3V||VFz7{ z9I)zf7;Nhk&(GC)Z%W~$`-`2=aSXzQbPK{IXf89m#c+agS7FBH$wbnCM- z*@So@TNvmCi`3Wzo5gE*x?IrU{w{-9k_C-iqZ*dYp0ON6$5GbQrL>T;iUuGipgok$!CkNkziO8nQD)AuEEWanz?$th!&6bHN82&$opppM{7hS#%OW07V-egXlpSJ zcVMfK*w(PIK>=Y2Y!rtf}(fH5eggubYwcas;M?#F&f?;aC>SU8iGJ++X<|dt7eq#JM$#4_>%0@6=f~1dI)1ijBpM6tV8vY&C_; zFXu2#`jKuLU$0zYZ66{WX`MaXyL>3(Mea3$r0kevGD5g7XXc_*GwW(@NI5L&3!|<|vNHCpA_FtO zBb?X%MQ%0HS(GdvbW8d8h*lMl$Q8j*Dr-y;40W4i_KVqyKV8HtV;#+!_38t=T}D2z zR@01Gq;j!wa`}L|Ecr+GIG0Y)kiZN-#cu~7;=GQG@K+b*CI2Hxy!oFM;|&Kwu8Ov4 z+9m-m4dOapDpa;9RtF%TEWpcqlbVw)cALQ%pNvhj+47{Vk{?g5mP){2lt(A4ig z9lgkPp@c2F7H3|gwI=bD@R@r>_0jSh<{Jb;sXNHD=&bJOu${IkTogB6v8HPzCBaWT zAUNC_X&P;1Y&?d5?I&j@)tMX7JGuo{BZ*Xk0oOun-B()W1A9f}%g>nQn^TrZ1K^?8 z6JsVoM$VNV-V@7h3@!xrT8#?=|J02MedEIO{@4xKNdTm&9zjb9625rbcF?zMv7g6v;i3hYCG%ro0;DyLl23FHWnCGOWy8H6ePz_diq0;At{&*+v>}5 zsKtBJ${8fIi+T3kxn?qj!yg(vx8sFAhjXJp$qM4?*@JW%8mvft;lQxv0}%H3u-t^?fl-uH3)NNIrpIejY028t#UFQg5w~U$I*rz!a~%uD32;8D~o=M zf2688(u6ChD*{nfSHz#&?Gw9YG*#79;DCb%Zk&?LUsU)V)YlhBWbF?*+wh36tg z&km1@qLMX+9Ge3w^ct`H1IKs)Q^@kRMWGWGiuKdgkTMbp)fevB`s3c|wSMG4-}VaJ z6sRA|v;{=o?=)xW2pa11*!z5PF8arP(q{E%GnQQ^*0d>PSR{5**c%D{J*=#(;pKr- z&MhE%p8nlT1FduCaNCazxSpSVCfG{=nz`&F(UD6;#fn7aO;@!m?(FVxSZA#$A_~+|Xj`I3O@>ilS_vIW_X76f?YK-{4C8w8an0V zJUMrM-{ZYzFhUGT0Qg|*aqg7X^JuAO6*IWm3QfZp_4+Cq7@w68M|*1-YUt7tI;=86 z#5#T;z`4A%@)E3^tvEPfv?Kk8<}!Y4v_9l+c96m^9S(O`h=4$N+!KpTnHXGjdfV-xp=E;lEcWIE!JSJ^9N!oB3B`s7>F~u@n zCbGqE_al2TL*6=NDT852d+NxI5PrO5Gq+}HW|Bx6!@=&a9WZljOkJI+;z^gKG0%jM z$y_-v_M#)J05uoxPl}}sI7V5Ix>y*hl5YQ$`hKzx{-apw2(1^DBy4Vqn zR>j&&_`KqY7?n3e|4Z?u5F({DDPj0kt*vI7x{OR~?4l&A24z-sx)vI+)(Ow$;qW;^ zkpwiveXEsM52CAW{8`rZz*dbm#?jpTOcfXry;K%31NEZh8%dUs5Z0n}+lZrT(aP3L zw#`@EParfZKN*L@dKVJ()TRe^T}Jf+;{nZ=wYf244%oA${CVM10BG%qJxas!TvM2#xSuY6t>JZb`KQC)K~?L@f8ZB(dguGOq7oPUtraxX7!__@B{x5ni;b`!oR1m zUPBhVEg+5EXeYge1^^BX)Q34kp~@?rBRgfW9ovi22%StQFLLyKU^4oN5Gv6k zJFVxpbCuR~!|RsH-)9n2nYwzv{6!#J6BEp97(PTF`(2HyHid);(5x=TW`MGeCcM(8 z*`g>l`{p#@)s?^^^A<{kk&<_GWn~t(lh{-=C90~t&9J-EXy*NpI1SKt z0Rf^wCN!91pJ+wq;N2DpecK0Si!)PMW8c*pi~Z^4-}WVVcK504&sV*5aml?E79l^ z9}adc=IPe0D(R_3c(~3DL)>?%LU}Ax0r)GP>@JYYc9E8H=~vT!JR*e#U8(NE>3fzP ziw4WC28KvEfVl5<-$Nx*~(stXAo)V%IP)HMGCqKR|~84jnJI8?sAH<4#I z2aXGg#*=guW{^vCG@dm7YD!&&ocR_tSsyqNM00TKw#n`uolws44iU(1TCPqHonIh8 zXjEF;EyV%f$RsfE?Pt}(M$t9JS~4S|7%ZH{1}l&?kvTAl^*ug(;&@SYb=)+9dxcty z2qwLfPF z1W3S5Rbkf=JHud9s*md(dDi8jdd?W%(WMss^)f#VyXz4&32Tb1H3~TW>~DjI>_U_C zXxBnMtszjcb(mFey1y4`O$EVcqfF^YOh%NRmw_GGnyM^>fKfU^m*a_4tw)cv>c-ugOP|^4c1Y(8N%Z{*?=kJPhKx+@ zJ&I)(U*jc~Y@;`zY{0f)QnM_gf$bo6$}wfy}wehV9>{uJG>8JDVw5bnuk z>@aMEYU$eLviLe_At`&x{xg*C3WyS&kUBHE5{fV!+GPi{Uqkx=M;b#6ebD&hST2oS zxBE?{+7QO54!iaxUJ$&*g8dOHu;X^9@RPyL3K(PJN3wSqS411saC&%>c$zszDGjj* zvY4!R^G<*3LuSKB){aIwezDD5N)9|z=ykC-=RndmLjl;i*`eZ@5-7>~sCo&k0@j5S zt%rLRZBPeij&?s_7_3W&Hq}@*48nJn2aY)2C@977W`)4RCKHF@#MW+bKkq~Ps*^8q zHAXT;0u?Pb1=`K#qN&m=uQa!07J0v=MWEwzJ@+-$QvidCf^Q@dNk*-O(748M5jFM< z5J)hB*jGi<$qkD+CVOB^~+yfrqKyEKAb8iJZ>FuG8gMuyBKGBA|&AUZ+; z#IA0?u4<0USggXIy`&MhjJG5fVh#k(ggfH#}!hN$e)U^I>B*u z7)?A(wKC-i?v+;^Tf7B1LXiyH&o;4qd2X5`!i#-PDh;zfQ3f-+te+uGVzgL9eIpc( zM!2qJw*8Z69gs~p+{%|S1kLVm{sBD#PRrxr&~{>lxC^og8>J3vO%`%Y(8BoHe?R(I z1KCi?Q5gN(nmFIoK#z(jVVtf*0xsv9F1b8Hg8^@_d|dDg7LT4$%75jsmZ2Bo%+ZUO zRV9B2FVZ!TQgW%~J}FB-bGb3SS6M#$9FblS>pIwnYbkmtE7c#aXC=Xd2@_cq`*RbDwYF}JU9SbQQ0-p8WvvKH3pC^LK)TCR3BykoztDA+1VU<^&@RvI~ zjv~7Z(^8z5QSr)ej1W5I@)5B`+t-Zk&itZ4gSqQIS;E5-(JPsI#?hijob44x9RcxM z{*|d|B+2}fDL*lFY1>-I;Gzlq_QUVM}*GeWVz%ZE8DE-2OY%PsLN><_>P>b_D zXmQd$_7M19T)l9bR1@;35$OaPi@<7)f<{F5I!fgm$A(&9FP08$40k8)wI5<_6nA(e z6(^&xmxMD3=~Uwi3WP=!n(l=KnR@^X7m2%xuM9MM@J~x#cT-!Wr@tD4+(>A;rQlAK|(=4a<+IMbI&N@A; zo%^$*-!^tYGK~(}Hl9O!R5*er(2o_ch=Gt|b{qIK?z?SZ;ub&>K51R;&*SZW+0*#I z4-J-e+mVKS=+Qt=k$I-M%*7KPJw+D_qf5)efuYzes8m?40a4vov~kM9Fgc|!M0SGT z2od=A>bv*&C%*uc;Vc@i%_xN3()L;{SYcT}QI;jeXezwLdy@DSo~=WY z@&=4hdqAUM{Un9l`Cz&vPWj}myBKi8n&Ykc}A}Y*kF_v&7QbvKq4 zi2GX)+ye)>)HL)CwM5O@iZp#)UOgF1WwH=jcPuvVuJnZILn8FtDScJrC9cDNwU5~- z8bSt90K&eE`v`RO@uryinqXsB@B7{8{Eh}a^0Qzi2?yFO!Pr+M99I*z6k*6P*2ERF z0Zxdv46HOmx~5%m#=_N5zC2=S6fBLI$PX9fa9F747mO63G1!G-UwWiRfLP7IqWRiA zx45XrK}WwT%Z=G9#_=K&`4CCVzWR&8P83={BYRqUw=?n@_W#>-}8M-O+Im#F5Y#XkBPM#VX<(1)Nh+yY}7YwFM0OT=132TlqJn_nspn^ja zt5w(SHppoh--M?Nx0$sSk)>|3K$<$3`u#&^$`c9TzW>1YVm@5vURiGpcE1@lwLs}x z1$}B*7j_-Eg&E#2OmJ`dfw%b9WUYpUZ`th)SEHRUjhb-=u~7@hK)`U)EnJ$=3KI&S zN>i_Z*BCrdyg$-WG*1D<1N0VA&cq#sRjRrTv%0j4+1NzX`)Yz}jl`GMa8oE8-`Wfs zAGx|J2Jz^y{_zB<^4k9IC}(SYZ~wPHKEfZdfK#UZamKN1`~Rz7{pRx&fUyQ!D& zFtc>79EhOPj!Bp%vbywBH?l#id~Eqq?Nd}7Z6N)T^l-Jlnt02tS0bbYx<|jI#cbOi z>}&37F8QFDrXi4hj=WL&TW1)-iVfV(t&eRi+HzKh&iU9n3=KnB_5_|}>S6EU^b zuEqgf04*-(g}0N~-3aDWfHuLARk$<$;SQANBzicse9&chCG#5xO_xx9x~x6hLj-|g zWo)+f&7D5^V2d|s>?#-zkI@X_bY6g1UDm5gfyV{s&33@RU(_j!*RYOK89|CdO($3aAGGKMamH>oO6fI3WcGg2Jrv4)^WInrQ!Emk_A~zpm zbP>_S)Bydn3n3gYN*SYJB|gBBPYN011Eq}4due7aKpY^Gic4M&qYM5`KClfsni{5U zQQJ*dUjk|~GqP%}ZBwSBrmc2}nJ$ye#N~{7#`YsfgjZYod^Zzi*j!0Z9!q@`^>Rk^ z*C{?Q;(VX@fZ@s9XhZA3`-S7H0qu40s}^#-&e)l}7OcTWcX~+BVLz~ENpG9RWFe8qmM58!87vJK&Ks<^XcsM(? z$Hf4kXBkLx)IR&TaTYR}&XQl^|4Ftw$UYNzjnRoXp;fdK`cuCd#R$!$c%zij!=nCj zDT$_OetMG_>^}>l`Q!g$lQI91mBExBhx6`BXn8X3?SBN8ZD0QGWd4&1{_?=zoyT8S<^R)U7A7AkA80{Za5!3t~K>Yzy>>A(wr%S|tr^Q{t-G9Ga zb?4{~$#AbHm+@=e_^prA49|sd$HIyjNxS?%m3N4xt`adE4WWw( zj{m{S3Ym_gOiJ6}#JFs3;_u5OCc+#+TL}^E+T^O8840_Tymx7V1?k3pq)A>KopQxf zmg*^_JCIr<3CS-+s4rwZC|QKXr@S9X+mlqV&R?QHm*w~Nn~Df;HG>DCnbuNEuZf78 zC*h3UAvaM-)p+z9DcYm(yXU`~efwR^1`#MIRU1pZfqsB2dVyFa&~l@?$#b2LXK}tg ziu&ufD$XR))36Hspr@U3&e)<2yH;A*)7sF093lsnkJ)W!5`wo^0I#rc%0hnzjqna;jb(ilYm? zjxc9l=F7JjLb;;EH2;!m{-08s{~d)UZVeEbLA1`<-T7 z*>&F?M-II@_LPaM`^diRjB{U%6#V<71)X4^Ks%S2!nBCGS#r!AP)0lQ!8|RsX)8F&t0b2(tCOAHW+R6{C|6}oTgQ>1L;D1m%-moj`=|`XR$8Mz zmh}Mpz{G0RLsx54x?JP8Hn0JW)rQpm`t_-QmR`yQ

  • 9%W6QV^*U-UoSZ=wr=PT< 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 rx2Dek>AOd1zV6|&s-`-K=#9la3VkB7MJ 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

    < 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�-nllT!0@0Fy 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

    ^KA8#j8ePwqIDNCj!vyvLoX9{L0 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

  • Jc?)Jr7vY0>qSrdZr|DJ!+$(Le~i+ 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

    eRJLL8|l3~2_U;?2N!lwgn-0nc7^v8zL zk(x~eHb{H`pNxFyRt~#lw6h)0mAISS*{{}KUWcSB5D-)0u$9j&PT1_*aM2bjBWaR* zS*Bln)Z9O&iLv}=|1MuOi6{P9Pjel0GC+(O(iShVi21$DTDgjoL(BU={V6FakCit% z^T6|plO~`7G)ObKKe9RFyxAjnuc7m=hOnLGluXUe&hbAIH*|8^oE>AO1nea1HrbWo z8e5@CgAhBZ7wjbLA95&M-*PM2fXvnb4)z&_bNx(2Ejtm~Ocmgmnve`D^PS}H5DQHo zL?Qd09$lM$WNXzF8v}G4?X=D?S2DN$0!)WQc8+f0)clKS;d&1}WPcOr)^qUFTdA3D z`e2PEadzR`pqHzZP1=dN^@YdO`PGUxxtF>^-n6j!l zN{}P%etyjUpsUWH-;+-fR(K}Bm=<{=+cWAw4}|mztfl+WZXg!skuDJdspLB_Cf1!b z9v)mu=>n%vF2gVu?p45y-N$ z-jy=?d4-At9;a|hoy4_(p$P7Umdsg}TWknuX%%`LkSD|78|%dVcXmiiv!YX*$$YU> z5Z`@gl}HS~&n_(;7-RXg0@6es>TD|GO5aBi*KExtw_7a8YYhOb)812QT=tqfI=0iq znK{j%7lFcOXKqtffr6174$O*;WxU(l+~$(IK>Fc!VJuV-9@C!;JttxA9nWL#%Fs}# zd-z!Ht_f+TA7hOoCD4568|7?ko(7Gvva<$J5iC99Rq-PXB|Gn7)o`K?d2Sa>Xri|! z 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

    ### Fixed diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index 6202c5a1a..23af08961 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -755,6 +755,17 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret - 400 Bad Request `"Invalid parameters"` when `status` is missing - On success: `204`, empty response +## `GET /api/pleroma/admin/statuses/:id` + +### Show status by id + +- Params: + - `id`: required, status id +- Response: + - On failure: + - 404 Not Found `"Not Found"` + - On success: JSON, Mastodon Status entity + ## `PUT /api/pleroma/admin/statuses/:id` ### Change the scope of an individual reported status diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index 816c11e01..ac661e515 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -93,7 +93,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do plug( OAuthScopesPlug, %{scopes: ["read:statuses"], admin: true} - when action in [:list_statuses, :list_user_statuses, :list_instance_statuses] + when action in [:list_statuses, :list_user_statuses, :list_instance_statuses, :status_show] ) plug( @@ -837,6 +837,16 @@ def list_statuses(%{assigns: %{user: _admin}} = conn, params) do |> render("index.json", %{activities: activities, as: :activity, skip_relationships: false}) end + def status_show(conn, %{"id" => id}) do + with %Activity{} = activity <- Activity.get_by_id(id) do + conn + |> put_view(StatusView) + |> render("show.json", %{activity: activity}) + else + _ -> errors(conn, {:error, :not_found}) + end + end + def status_update(%{assigns: %{user: admin}} = conn, %{"id" => id} = params) do with {:ok, activity} <- CommonAPI.update_activity_scope(id, params) do {:ok, sensitive} = Ecto.Type.cast(:boolean, params["sensitive"]) diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 5b00243e9..ef2239d59 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -188,6 +188,7 @@ defmodule Pleroma.Web.Router do post("/reports/:id/notes", AdminAPIController, :report_notes_create) delete("/reports/:report_id/notes/:id", AdminAPIController, :report_notes_delete) + get("/statuses/:id", AdminAPIController, :status_show) put("/statuses/:id", AdminAPIController, :status_update) delete("/statuses/:id", AdminAPIController, :status_delete) get("/statuses", AdminAPIController, :list_statuses) diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index 1862a9589..c3f3ad051 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -1620,6 +1620,25 @@ test "returns 403 when requested by anonymous" do end end + describe "GET /api/pleroma/admin/statuses/:id" do + test "not found", %{conn: conn} do + assert conn + |> get("/api/pleroma/admin/statuses/not_found") + |> json_response(:not_found) + end + + test "shows activity", %{conn: conn} do + activity = insert(:note_activity) + + response = + conn + |> get("/api/pleroma/admin/statuses/#{activity.id}") + |> json_response(200) + + assert response["id"] == activity.id + end + end + describe "PUT /api/pleroma/admin/statuses/:id" do setup do activity = insert(:note_activity) From 88a14da8172cde6316926b5fbaa2f55b6da6f080 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 5 May 2020 17:24:16 +0400 Subject: [PATCH 463/581] Add OpenAPI spec for InstanceController --- lib/pleroma/stats.ex | 2 +- .../api_spec/operations/instance_operation.ex | 169 ++++++++++++++++++ .../controllers/instance_controller.ex | 4 + .../controllers/instance_controller_test.exs | 6 +- 4 files changed, 177 insertions(+), 4 deletions(-) create mode 100644 lib/pleroma/web/api_spec/operations/instance_operation.ex diff --git a/lib/pleroma/stats.ex b/lib/pleroma/stats.ex index 8d2809bbb..6b3a8a41f 100644 --- a/lib/pleroma/stats.ex +++ b/lib/pleroma/stats.ex @@ -91,7 +91,7 @@ def calculate_stat_data do peers: peers, stats: %{ domain_count: domain_count, - status_count: status_count, + status_count: status_count || 0, user_count: user_count } } diff --git a/lib/pleroma/web/api_spec/operations/instance_operation.ex b/lib/pleroma/web/api_spec/operations/instance_operation.ex new file mode 100644 index 000000000..36a1a9043 --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/instance_operation.ex @@ -0,0 +1,169 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.InstanceOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + def show_operation do + %Operation{ + tags: ["Instance"], + summary: "Fetch instance", + description: "Information about the server", + operationId: "InstanceController.show", + responses: %{ + 200 => Operation.response("Instance", "application/json", instance()) + } + } + end + + def peers_operation do + %Operation{ + tags: ["Instance"], + summary: "List of connected domains", + operationId: "InstanceController.peers", + responses: %{ + 200 => Operation.response("Array of domains", "application/json", array_of_domains()) + } + } + end + + defp instance do + %Schema{ + type: :object, + properties: %{ + uri: %Schema{type: :string, description: "The domain name of the instance"}, + title: %Schema{type: :string, description: "The title of the website"}, + description: %Schema{ + type: :string, + description: "Admin-defined description of the Mastodon site" + }, + version: %Schema{ + type: :string, + description: "The version of Mastodon installed on the instance" + }, + email: %Schema{ + type: :string, + description: "An email that may be contacted for any inquiries", + format: :email + }, + urls: %Schema{ + type: :object, + description: "URLs of interest for clients apps", + properties: %{ + streaming_api: %Schema{ + type: :string, + description: "Websockets address for push streaming" + } + } + }, + stats: %Schema{ + type: :object, + description: "Statistics about how much information the instance contains", + properties: %{ + user_count: %Schema{ + type: :integer, + description: "Users registered on this instance" + }, + status_count: %Schema{ + type: :integer, + description: "Statuses authored by users on instance" + }, + domain_count: %Schema{ + type: :integer, + description: "Domains federated with this instance" + } + } + }, + thumbnail: %Schema{ + type: :string, + description: "Banner image for the website", + nullable: true + }, + languages: %Schema{ + type: :array, + items: %Schema{type: :string}, + description: "Primary langauges of the website and its staff" + }, + registrations: %Schema{type: :boolean, description: "Whether registrations are enabled"}, + # Extra (not present in Mastodon): + max_toot_chars: %Schema{ + type: :integer, + description: ": Posts character limit (CW/Subject included in the counter)" + }, + poll_limits: %Schema{ + type: :object, + description: "A map with poll limits for local polls", + properties: %{ + max_options: %Schema{ + type: :integer, + description: "Maximum number of options." + }, + max_option_chars: %Schema{ + type: :integer, + description: "Maximum number of characters per option." + }, + min_expiration: %Schema{ + type: :integer, + description: "Minimum expiration time (in seconds)." + }, + max_expiration: %Schema{ + type: :integer, + description: "Maximum expiration time (in seconds)." + } + } + }, + upload_limit: %Schema{ + type: :integer, + description: "File size limit of uploads (except for avatar, background, banner)" + }, + avatar_upload_limit: %Schema{type: :integer, description: "The title of the website"}, + background_upload_limit: %Schema{type: :integer, description: "The title of the website"}, + banner_upload_limit: %Schema{type: :integer, description: "The title of the website"} + }, + example: %{ + "avatar_upload_limit" => 2_000_000, + "background_upload_limit" => 4_000_000, + "banner_upload_limit" => 4_000_000, + "description" => "A Pleroma instance, an alternative fediverse server", + "email" => "lain@lain.com", + "languages" => ["en"], + "max_toot_chars" => 5000, + "poll_limits" => %{ + "max_expiration" => 31_536_000, + "max_option_chars" => 200, + "max_options" => 20, + "min_expiration" => 0 + }, + "registrations" => false, + "stats" => %{ + "domain_count" => 2996, + "status_count" => 15_802, + "user_count" => 5 + }, + "thumbnail" => "https://lain.com/instance/thumbnail.jpeg", + "title" => "lain.com", + "upload_limit" => 16_000_000, + "uri" => "https://lain.com", + "urls" => %{ + "streaming_api" => "wss://lain.com" + }, + "version" => "2.7.2 (compatible; Pleroma 2.0.50-536-g25eec6d7-develop)" + } + } + end + + defp array_of_domains do + %Schema{ + type: :array, + items: %Schema{type: :string}, + example: ["pleroma.site", "lain.com", "bikeshed.party"] + } + end +end diff --git a/lib/pleroma/web/mastodon_api/controllers/instance_controller.ex b/lib/pleroma/web/mastodon_api/controllers/instance_controller.ex index 237f85677..d8859731d 100644 --- a/lib/pleroma/web/mastodon_api/controllers/instance_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/instance_controller.ex @@ -5,12 +5,16 @@ defmodule Pleroma.Web.MastodonAPI.InstanceController do use Pleroma.Web, :controller + plug(OpenApiSpex.Plug.CastAndValidate) + plug( :skip_plug, [Pleroma.Plugs.OAuthScopesPlug, Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug] when action in [:show, :peers] ) + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.InstanceOperation + @doc "GET /api/v1/instance" def show(conn, _params) do render(conn, "show.json") diff --git a/test/web/mastodon_api/controllers/instance_controller_test.exs b/test/web/mastodon_api/controllers/instance_controller_test.exs index 2c7fd9fd0..90840d5ab 100644 --- a/test/web/mastodon_api/controllers/instance_controller_test.exs +++ b/test/web/mastodon_api/controllers/instance_controller_test.exs @@ -10,7 +10,7 @@ defmodule Pleroma.Web.MastodonAPI.InstanceControllerTest do test "get instance information", %{conn: conn} do conn = get(conn, "/api/v1/instance") - assert result = json_response(conn, 200) + assert result = json_response_and_validate_schema(conn, 200) email = Pleroma.Config.get([:instance, :email]) # Note: not checking for "max_toot_chars" since it's optional @@ -56,7 +56,7 @@ test "get instance stats", %{conn: conn} do conn = get(conn, "/api/v1/instance") - assert result = json_response(conn, 200) + assert result = json_response_and_validate_schema(conn, 200) stats = result["stats"] @@ -74,7 +74,7 @@ test "get peers", %{conn: conn} do conn = get(conn, "/api/v1/instance/peers") - assert result = json_response(conn, 200) + assert result = json_response_and_validate_schema(conn, 200) assert ["peer1.com", "peer2.com"] == Enum.sort(result) end From b5189d2c50929aa67293e2e39ca020bad43f5f8b Mon Sep 17 00:00:00 2001 From: minibikini Date: Thu, 30 Apr 2020 17:45:48 +0000 Subject: [PATCH 464/581] Apply suggestion to lib/pleroma/web/api_spec/operations/instance_operation.ex --- lib/pleroma/web/api_spec/operations/instance_operation.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/operations/instance_operation.ex b/lib/pleroma/web/api_spec/operations/instance_operation.ex index 36a1a9043..9407fa74d 100644 --- a/lib/pleroma/web/api_spec/operations/instance_operation.ex +++ b/lib/pleroma/web/api_spec/operations/instance_operation.ex @@ -26,7 +26,7 @@ def show_operation do def peers_operation do %Operation{ tags: ["Instance"], - summary: "List of connected domains", + summary: "List of known hosts", operationId: "InstanceController.peers", responses: %{ 200 => Operation.response("Array of domains", "application/json", array_of_domains()) From 3817f179d777058259324d2e300780da06cce460 Mon Sep 17 00:00:00 2001 From: minibikini Date: Fri, 1 May 2020 12:46:53 +0000 Subject: [PATCH 465/581] Apply suggestion to lib/pleroma/web/api_spec/operations/instance_operation.ex --- lib/pleroma/web/api_spec/operations/instance_operation.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/operations/instance_operation.ex b/lib/pleroma/web/api_spec/operations/instance_operation.ex index 9407fa74d..5644cb54d 100644 --- a/lib/pleroma/web/api_spec/operations/instance_operation.ex +++ b/lib/pleroma/web/api_spec/operations/instance_operation.ex @@ -46,7 +46,7 @@ defp instance do }, version: %Schema{ type: :string, - description: "The version of Mastodon installed on the instance" + description: "The version of Pleroma installed on the instance" }, email: %Schema{ type: :string, From 42a4a863f159b863ec4617fc47697e11f92ff956 Mon Sep 17 00:00:00 2001 From: minibikini Date: Fri, 1 May 2020 12:46:56 +0000 Subject: [PATCH 466/581] Apply suggestion to lib/pleroma/web/api_spec/operations/instance_operation.ex --- lib/pleroma/web/api_spec/operations/instance_operation.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/operations/instance_operation.ex b/lib/pleroma/web/api_spec/operations/instance_operation.ex index 5644cb54d..880bd3f1b 100644 --- a/lib/pleroma/web/api_spec/operations/instance_operation.ex +++ b/lib/pleroma/web/api_spec/operations/instance_operation.ex @@ -42,7 +42,7 @@ defp instance do title: %Schema{type: :string, description: "The title of the website"}, description: %Schema{ type: :string, - description: "Admin-defined description of the Mastodon site" + description: "Admin-defined description of the Pleroma site" }, version: %Schema{ type: :string, From ec1e4b4f1acb81fc36b396e7f58f67928dc6a0df Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 5 May 2020 17:40:00 +0400 Subject: [PATCH 467/581] Add OpenAPI spec for FollowRequestController --- .../operations/follow_request_operation.ex | 65 +++++++++++++++++++ .../controllers/follow_request_controller.ex | 5 +- .../follow_request_controller_test.exs | 6 +- 3 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 lib/pleroma/web/api_spec/operations/follow_request_operation.ex diff --git a/lib/pleroma/web/api_spec/operations/follow_request_operation.ex b/lib/pleroma/web/api_spec/operations/follow_request_operation.ex new file mode 100644 index 000000000..ac4aee6da --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/follow_request_operation.ex @@ -0,0 +1,65 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.FollowRequestOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.Account + alias Pleroma.Web.ApiSpec.Schemas.AccountRelationship + + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + def index_operation do + %Operation{ + tags: ["Follow Requests"], + summary: "Pending Follows", + security: [%{"oAuth" => ["read:follows", "follow"]}], + operationId: "FollowRequestController.index", + responses: %{ + 200 => + Operation.response("Array of Account", "application/json", %Schema{ + type: :array, + items: Account, + example: [Account.schema().example] + }) + } + } + end + + def authorize_operation do + %Operation{ + tags: ["Follow Requests"], + summary: "Accept Follow", + operationId: "FollowRequestController.authorize", + parameters: [id_param()], + security: [%{"oAuth" => ["follow", "write:follows"]}], + responses: %{ + 200 => Operation.response("Relationship", "application/json", AccountRelationship) + } + } + end + + def reject_operation do + %Operation{ + tags: ["Follow Requests"], + summary: "Reject Follow", + operationId: "FollowRequestController.reject", + parameters: [id_param()], + security: [%{"oAuth" => ["follow", "write:follows"]}], + responses: %{ + 200 => Operation.response("Relationship", "application/json", AccountRelationship) + } + } + end + + defp id_param do + Operation.parameter(:id, :path, :string, "Conversation ID", + example: "123", + required: true + ) + end +end diff --git a/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex b/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex index 25f2269b9..748b6b475 100644 --- a/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex @@ -10,6 +10,7 @@ defmodule Pleroma.Web.MastodonAPI.FollowRequestController do alias Pleroma.Web.CommonAPI plug(:put_view, Pleroma.Web.MastodonAPI.AccountView) + plug(Pleroma.Web.ApiSpec.CastAndValidate) plug(:assign_follower when action != :index) action_fallback(:errors) @@ -21,6 +22,8 @@ defmodule Pleroma.Web.MastodonAPI.FollowRequestController do %{scopes: ["follow", "write:follows"]} when action != :index ) + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.FollowRequestOperation + @doc "GET /api/v1/follow_requests" def index(%{assigns: %{user: followed}} = conn, _params) do follow_requests = User.get_follow_requests(followed) @@ -42,7 +45,7 @@ def reject(%{assigns: %{user: followed, follower: follower}} = conn, _params) do end end - defp assign_follower(%{params: %{"id" => id}} = conn, _) do + defp assign_follower(%{params: %{id: id}} = conn, _) do case User.get_cached_by_id(id) do %User{} = follower -> assign(conn, :follower, follower) nil -> Pleroma.Web.MastodonAPI.FallbackController.call(conn, {:error, :not_found}) |> halt() diff --git a/test/web/mastodon_api/controllers/follow_request_controller_test.exs b/test/web/mastodon_api/controllers/follow_request_controller_test.exs index d8dbe4800..44e12d15a 100644 --- a/test/web/mastodon_api/controllers/follow_request_controller_test.exs +++ b/test/web/mastodon_api/controllers/follow_request_controller_test.exs @@ -27,7 +27,7 @@ test "/api/v1/follow_requests works", %{user: user, conn: conn} do conn = get(conn, "/api/v1/follow_requests") - assert [relationship] = json_response(conn, 200) + assert [relationship] = json_response_and_validate_schema(conn, 200) assert to_string(other_user.id) == relationship["id"] end @@ -44,7 +44,7 @@ test "/api/v1/follow_requests/:id/authorize works", %{user: user, conn: conn} do conn = post(conn, "/api/v1/follow_requests/#{other_user.id}/authorize") - assert relationship = json_response(conn, 200) + assert relationship = json_response_and_validate_schema(conn, 200) assert to_string(other_user.id) == relationship["id"] user = User.get_cached_by_id(user.id) @@ -62,7 +62,7 @@ test "/api/v1/follow_requests/:id/reject works", %{user: user, conn: conn} do conn = post(conn, "/api/v1/follow_requests/#{other_user.id}/reject") - assert relationship = json_response(conn, 200) + assert relationship = json_response_and_validate_schema(conn, 200) assert to_string(other_user.id) == relationship["id"] user = User.get_cached_by_id(user.id) From 7e7a3e15449792581412be002f287c504e3449a6 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 14 Apr 2020 18:36:32 +0400 Subject: [PATCH 468/581] Add OpenAPI spec for FilterController --- lib/pleroma/filter.ex | 9 +- .../api_spec/operations/filter_operation.ex | 89 +++++++++++++++++++ lib/pleroma/web/api_spec/schemas/filter.ex | 51 +++++++++++ .../api_spec/schemas/filter_create_request.ex | 30 +++++++ .../api_spec/schemas/filter_update_request.ex | 41 +++++++++ .../web/api_spec/schemas/filters_response.ex | 40 +++++++++ .../controllers/filter_controller.ex | 54 +++++------ .../web/mastodon_api/views/filter_view.ex | 6 +- test/filter_test.exs | 10 +-- .../controllers/filter_controller_test.exs | 55 ++++++++++-- 10 files changed, 340 insertions(+), 45 deletions(-) create mode 100644 lib/pleroma/web/api_spec/operations/filter_operation.ex create mode 100644 lib/pleroma/web/api_spec/schemas/filter.ex create mode 100644 lib/pleroma/web/api_spec/schemas/filter_create_request.ex create mode 100644 lib/pleroma/web/api_spec/schemas/filter_update_request.ex create mode 100644 lib/pleroma/web/api_spec/schemas/filters_response.ex diff --git a/lib/pleroma/filter.ex b/lib/pleroma/filter.ex index 7cb49360f..4d61b3650 100644 --- a/lib/pleroma/filter.ex +++ b/lib/pleroma/filter.ex @@ -89,11 +89,10 @@ def delete(%Pleroma.Filter{id: filter_key} = filter) when is_nil(filter_key) do |> Repo.delete() end - def update(%Pleroma.Filter{} = filter) do - destination = Map.from_struct(filter) - - Pleroma.Filter.get(filter.filter_id, %{id: filter.user_id}) - |> cast(destination, [:phrase, :context, :hide, :expires_at, :whole_word]) + def update(%Pleroma.Filter{} = filter, params) do + filter + |> cast(params, [:phrase, :context, :hide, :expires_at, :whole_word]) + |> validate_required([:phrase, :context]) |> Repo.update() end end diff --git a/lib/pleroma/web/api_spec/operations/filter_operation.ex b/lib/pleroma/web/api_spec/operations/filter_operation.ex new file mode 100644 index 000000000..0d673f566 --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/filter_operation.ex @@ -0,0 +1,89 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.FilterOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Helpers + alias Pleroma.Web.ApiSpec.Schemas.Filter + alias Pleroma.Web.ApiSpec.Schemas.FilterCreateRequest + alias Pleroma.Web.ApiSpec.Schemas.FiltersResponse + alias Pleroma.Web.ApiSpec.Schemas.FilterUpdateRequest + + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + def index_operation do + %Operation{ + tags: ["apps"], + summary: "View all filters", + operationId: "FilterController.index", + security: [%{"oAuth" => ["read:filters"]}], + responses: %{ + 200 => Operation.response("Filters", "application/json", FiltersResponse) + } + } + end + + def create_operation do + %Operation{ + tags: ["apps"], + summary: "Create a filter", + operationId: "FilterController.create", + requestBody: Helpers.request_body("Parameters", FilterCreateRequest, required: true), + security: [%{"oAuth" => ["write:filters"]}], + responses: %{200 => Operation.response("Filter", "application/json", Filter)} + } + end + + def show_operation do + %Operation{ + tags: ["apps"], + summary: "View all filters", + parameters: [id_param()], + operationId: "FilterController.show", + security: [%{"oAuth" => ["read:filters"]}], + responses: %{ + 200 => Operation.response("Filter", "application/json", Filter) + } + } + end + + def update_operation do + %Operation{ + tags: ["apps"], + summary: "Update a filter", + parameters: [id_param()], + operationId: "FilterController.update", + requestBody: Helpers.request_body("Parameters", FilterUpdateRequest, required: true), + security: [%{"oAuth" => ["write:filters"]}], + responses: %{ + 200 => Operation.response("Filter", "application/json", Filter) + } + } + end + + def delete_operation do + %Operation{ + tags: ["apps"], + summary: "Remove a filter", + parameters: [id_param()], + operationId: "FilterController.delete", + security: [%{"oAuth" => ["write:filters"]}], + responses: %{ + 200 => + Operation.response("Filter", "application/json", %Schema{ + type: :object, + description: "Empty object" + }) + } + } + end + + defp id_param do + Operation.parameter(:id, :path, :string, "Filter ID", example: "123", required: true) + end +end diff --git a/lib/pleroma/web/api_spec/schemas/filter.ex b/lib/pleroma/web/api_spec/schemas/filter.ex new file mode 100644 index 000000000..fc5480b71 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/filter.ex @@ -0,0 +1,51 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.Filter do + alias OpenApiSpex.Schema + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "Filter", + type: :object, + properties: %{ + id: %Schema{type: :string}, + phrase: %Schema{type: :string, description: "The text to be filtered"}, + context: %Schema{ + type: :array, + items: %Schema{type: :string, enum: ["home", "notifications", "public", "thread"]}, + description: "The contexts in which the filter should be applied." + }, + expires_at: %Schema{ + type: :string, + format: :"date-time", + description: + "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire.", + nullable: true + }, + irreversible: %Schema{ + type: :boolean, + description: + "Should matching entities in home and notifications be dropped by the server?" + }, + whole_word: %Schema{ + type: :boolean, + description: "Should the filter consider word boundaries?" + } + }, + example: %{ + "id" => "5580", + "phrase" => "@twitter.com", + "context" => [ + "home", + "notifications", + "public", + "thread" + ], + "whole_word" => false, + "expires_at" => nil, + "irreversible" => true + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/filter_create_request.ex b/lib/pleroma/web/api_spec/schemas/filter_create_request.ex new file mode 100644 index 000000000..f2a475b12 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/filter_create_request.ex @@ -0,0 +1,30 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.FilterCreateRequest do + alias OpenApiSpex.Schema + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "FilterCreateRequest", + allOf: [ + %OpenApiSpex.Reference{"$ref": "#/components/schemas/FilterUpdateRequest"}, + %Schema{ + type: :object, + properties: %{ + irreversible: %Schema{ + type: :bolean, + description: + "Should the server irreversibly drop matching entities from home and notifications?", + default: false + } + } + } + ], + example: %{ + "phrase" => "knights", + "context" => ["home"] + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/filter_update_request.ex b/lib/pleroma/web/api_spec/schemas/filter_update_request.ex new file mode 100644 index 000000000..e703db0ce --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/filter_update_request.ex @@ -0,0 +1,41 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.FilterUpdateRequest do + alias OpenApiSpex.Schema + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "FilterUpdateRequest", + type: :object, + properties: %{ + phrase: %Schema{type: :string, description: "The text to be filtered"}, + context: %Schema{ + type: :array, + items: %Schema{type: :string, enum: ["home", "notifications", "public", "thread"]}, + description: + "Array of enumerable strings `home`, `notifications`, `public`, `thread`. At least one context must be specified." + }, + irreversible: %Schema{ + type: :bolean, + description: + "Should the server irreversibly drop matching entities from home and notifications?" + }, + whole_word: %Schema{type: :bolean, description: "Consider word boundaries?", default: true} + # TODO: probably should implement filter expiration + # expires_in: %Schema{ + # type: :string, + # format: :"date-time", + # description: + # "ISO 8601 Datetime for when the filter expires. Otherwise, + # null for a filter that doesn't expire." + # } + }, + required: [:phrase, :context], + example: %{ + "phrase" => "knights", + "context" => ["home"] + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/filters_response.ex b/lib/pleroma/web/api_spec/schemas/filters_response.ex new file mode 100644 index 000000000..8c56c5982 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/filters_response.ex @@ -0,0 +1,40 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.FiltersResponse do + require OpenApiSpex + alias Pleroma.Web.ApiSpec.Schemas.Filter + + OpenApiSpex.schema(%{ + title: "FiltersResponse", + description: "Array of Filters", + type: :array, + items: Filter, + example: [ + %{ + "id" => "5580", + "phrase" => "@twitter.com", + "context" => [ + "home", + "notifications", + "public", + "thread" + ], + "whole_word" => false, + "expires_at" => nil, + "irreversible" => true + }, + %{ + "id" => "6191", + "phrase" => ":eurovision2019:", + "context" => [ + "home" + ], + "whole_word" => true, + "expires_at" => "2019-05-21T13:47:31.333Z", + "irreversible" => false + } + ] + }) +end diff --git a/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex b/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex index 7fd0562c9..dd13a8a09 100644 --- a/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex @@ -10,67 +10,69 @@ defmodule Pleroma.Web.MastodonAPI.FilterController do @oauth_read_actions [:show, :index] + plug(Pleroma.Web.ApiSpec.CastAndValidate) plug(OAuthScopesPlug, %{scopes: ["read:filters"]} when action in @oauth_read_actions) plug( OAuthScopesPlug, %{scopes: ["write:filters"]} when action not in @oauth_read_actions ) + + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.FilterOperation @doc "GET /api/v1/filters" def index(%{assigns: %{user: user}} = conn, _) do filters = Filter.get_filters(user) - render(conn, "filters.json", filters: filters) + render(conn, "index.json", filters: filters) end @doc "POST /api/v1/filters" - def create( - %{assigns: %{user: user}} = conn, - %{"phrase" => phrase, "context" => context} = params - ) do + def create(%{assigns: %{user: user}, body_params: params} = conn, _) do query = %Filter{ user_id: user.id, - phrase: phrase, - context: context, - hide: Map.get(params, "irreversible", false), - whole_word: Map.get(params, "boolean", true) + phrase: params.phrase, + context: params.context, + hide: params.irreversible, + whole_word: params.whole_word # expires_at } {:ok, response} = Filter.create(query) - render(conn, "filter.json", filter: response) + render(conn, "show.json", filter: response) end @doc "GET /api/v1/filters/:id" - def show(%{assigns: %{user: user}} = conn, %{"id" => filter_id}) do + def show(%{assigns: %{user: user}} = conn, %{id: filter_id}) do filter = Filter.get(filter_id, user) - render(conn, "filter.json", filter: filter) + render(conn, "show.json", filter: filter) end @doc "PUT /api/v1/filters/:id" def update( - %{assigns: %{user: user}} = conn, - %{"phrase" => phrase, "context" => context, "id" => filter_id} = params + %{assigns: %{user: user}, body_params: params} = conn, + %{id: filter_id} ) do - query = %Filter{ - user_id: user.id, - filter_id: filter_id, - phrase: phrase, - context: context, - hide: Map.get(params, "irreversible", nil), - whole_word: Map.get(params, "boolean", true) - # expires_at - } + params = + params + |> Map.from_struct() + |> Map.delete(:irreversible) + |> Map.put(:hide, params.irreversible) + |> Enum.reject(fn {_key, value} -> is_nil(value) end) + |> Map.new() - {:ok, response} = Filter.update(query) - render(conn, "filter.json", filter: response) + # TODO: add expires_in -> expires_at + + with %Filter{} = filter <- Filter.get(filter_id, user), + {:ok, %Filter{} = filter} <- Filter.update(filter, params) do + render(conn, "show.json", filter: filter) + end end @doc "DELETE /api/v1/filters/:id" - def delete(%{assigns: %{user: user}} = conn, %{"id" => filter_id}) do + def delete(%{assigns: %{user: user}} = conn, %{id: filter_id}) do query = %Filter{ user_id: user.id, filter_id: filter_id diff --git a/lib/pleroma/web/mastodon_api/views/filter_view.ex b/lib/pleroma/web/mastodon_api/views/filter_view.ex index 97fd1e83f..8d5c381ec 100644 --- a/lib/pleroma/web/mastodon_api/views/filter_view.ex +++ b/lib/pleroma/web/mastodon_api/views/filter_view.ex @@ -7,11 +7,11 @@ defmodule Pleroma.Web.MastodonAPI.FilterView do alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.MastodonAPI.FilterView - def render("filters.json", %{filters: filters} = opts) do - render_many(filters, FilterView, "filter.json", opts) + def render("index.json", %{filters: filters} = opts) do + render_many(filters, FilterView, "show.json", opts) end - def render("filter.json", %{filter: filter}) do + def render("show.json", %{filter: filter}) do expires_at = if filter.expires_at do Utils.to_masto_date(filter.expires_at) diff --git a/test/filter_test.exs b/test/filter_test.exs index b2a8330ee..63a30c736 100644 --- a/test/filter_test.exs +++ b/test/filter_test.exs @@ -141,17 +141,15 @@ test "updating a filter" do context: ["home"] } - query_two = %Pleroma.Filter{ - user_id: user.id, - filter_id: 1, + changes = %{ phrase: "who", context: ["home", "timeline"] } {:ok, filter_one} = Pleroma.Filter.create(query_one) - {:ok, filter_two} = Pleroma.Filter.update(query_two) + {:ok, filter_two} = Pleroma.Filter.update(filter_one, changes) assert filter_one != filter_two - assert filter_two.phrase == query_two.phrase - assert filter_two.context == query_two.context + assert filter_two.phrase == changes.phrase + assert filter_two.context == changes.context end end diff --git a/test/web/mastodon_api/controllers/filter_controller_test.exs b/test/web/mastodon_api/controllers/filter_controller_test.exs index 97ab005e0..41a290eb2 100644 --- a/test/web/mastodon_api/controllers/filter_controller_test.exs +++ b/test/web/mastodon_api/controllers/filter_controller_test.exs @@ -5,8 +5,15 @@ defmodule Pleroma.Web.MastodonAPI.FilterControllerTest do use Pleroma.Web.ConnCase + alias Pleroma.Web.ApiSpec + alias Pleroma.Web.ApiSpec.Schemas.Filter + alias Pleroma.Web.ApiSpec.Schemas.FilterCreateRequest + alias Pleroma.Web.ApiSpec.Schemas.FiltersResponse + alias Pleroma.Web.ApiSpec.Schemas.FilterUpdateRequest alias Pleroma.Web.MastodonAPI.FilterView + import OpenApiSpex.TestAssertions + test "creating a filter" do %{conn: conn} = oauth_access(["write:filters"]) @@ -15,7 +22,10 @@ test "creating a filter" do context: ["home"] } - conn = post(conn, "/api/v1/filters", %{"phrase" => filter.phrase, context: filter.context}) + conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/filters", %{"phrase" => filter.phrase, context: filter.context}) assert response = json_response(conn, 200) assert response["phrase"] == filter.phrase @@ -23,6 +33,7 @@ test "creating a filter" do assert response["irreversible"] == false assert response["id"] != nil assert response["id"] != "" + assert_schema(response, "Filter", ApiSpec.spec()) end test "fetching a list of filters" do @@ -53,9 +64,11 @@ test "fetching a list of filters" do assert response == render_json( FilterView, - "filters.json", + "index.json", filters: [filter_two, filter_one] ) + + assert_schema(response, "FiltersResponse", ApiSpec.spec()) end test "get a filter" do @@ -72,7 +85,8 @@ test "get a filter" do conn = get(conn, "/api/v1/filters/#{filter.filter_id}") - assert _response = json_response(conn, 200) + assert response = json_response(conn, 200) + assert_schema(response, "Filter", ApiSpec.spec()) end test "update a filter" do @@ -82,7 +96,8 @@ test "update a filter" do user_id: user.id, filter_id: 2, phrase: "knight", - context: ["home"] + context: ["home"], + hide: true } {:ok, _filter} = Pleroma.Filter.create(query) @@ -93,7 +108,9 @@ test "update a filter" do } conn = - put(conn, "/api/v1/filters/#{query.filter_id}", %{ + conn + |> put_req_header("content-type", "application/json") + |> put("/api/v1/filters/#{query.filter_id}", %{ phrase: new.phrase, context: new.context }) @@ -101,6 +118,8 @@ test "update a filter" do assert response = json_response(conn, 200) assert response["phrase"] == new.phrase assert response["context"] == new.context + assert response["irreversible"] == true + assert_schema(response, "Filter", ApiSpec.spec()) end test "delete a filter" do @@ -120,4 +139,30 @@ test "delete a filter" do assert response = json_response(conn, 200) assert response == %{} end + + describe "OpenAPI" do + test "Filter example matches schema" do + api_spec = ApiSpec.spec() + schema = Filter.schema() + assert_schema(schema.example, "Filter", api_spec) + end + + test "FiltersResponse example matches schema" do + api_spec = ApiSpec.spec() + schema = FiltersResponse.schema() + assert_schema(schema.example, "FiltersResponse", api_spec) + end + + test "FilterCreateRequest example matches schema" do + api_spec = ApiSpec.spec() + schema = FilterCreateRequest.schema() + assert_schema(schema.example, "FilterCreateRequest", api_spec) + end + + test "FilterUpdateRequest example matches schema" do + api_spec = ApiSpec.spec() + schema = FilterUpdateRequest.schema() + assert_schema(schema.example, "FilterUpdateRequest", api_spec) + end + end end From 46aae346f8530d4b9933b8e718e9578a96447f0a Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Mon, 27 Apr 2020 23:54:11 +0400 Subject: [PATCH 469/581] Move single used schemas to Filter operation schema --- .../api_spec/operations/filter_operation.ex | 158 ++++++++++++++++-- lib/pleroma/web/api_spec/schemas/filter.ex | 51 ------ .../api_spec/schemas/filter_create_request.ex | 30 ---- .../api_spec/schemas/filter_update_request.ex | 41 ----- .../web/api_spec/schemas/filters_response.ex | 40 ----- .../controllers/filter_controller.ex | 7 +- .../web/mastodon_api/views/filter_view.ex | 4 +- .../controllers/filter_controller_test.exs | 49 +----- 8 files changed, 158 insertions(+), 222 deletions(-) delete mode 100644 lib/pleroma/web/api_spec/schemas/filter.ex delete mode 100644 lib/pleroma/web/api_spec/schemas/filter_create_request.ex delete mode 100644 lib/pleroma/web/api_spec/schemas/filter_update_request.ex delete mode 100644 lib/pleroma/web/api_spec/schemas/filters_response.ex diff --git a/lib/pleroma/web/api_spec/operations/filter_operation.ex b/lib/pleroma/web/api_spec/operations/filter_operation.ex index 0d673f566..53e57b46b 100644 --- a/lib/pleroma/web/api_spec/operations/filter_operation.ex +++ b/lib/pleroma/web/api_spec/operations/filter_operation.ex @@ -6,10 +6,6 @@ defmodule Pleroma.Web.ApiSpec.FilterOperation do alias OpenApiSpex.Operation alias OpenApiSpex.Schema alias Pleroma.Web.ApiSpec.Helpers - alias Pleroma.Web.ApiSpec.Schemas.Filter - alias Pleroma.Web.ApiSpec.Schemas.FilterCreateRequest - alias Pleroma.Web.ApiSpec.Schemas.FiltersResponse - alias Pleroma.Web.ApiSpec.Schemas.FilterUpdateRequest def open_api_operation(action) do operation = String.to_existing_atom("#{action}_operation") @@ -23,7 +19,7 @@ def index_operation do operationId: "FilterController.index", security: [%{"oAuth" => ["read:filters"]}], responses: %{ - 200 => Operation.response("Filters", "application/json", FiltersResponse) + 200 => Operation.response("Filters", "application/json", array_of_filters()) } } end @@ -33,9 +29,9 @@ def create_operation do tags: ["apps"], summary: "Create a filter", operationId: "FilterController.create", - requestBody: Helpers.request_body("Parameters", FilterCreateRequest, required: true), + requestBody: Helpers.request_body("Parameters", create_request(), required: true), security: [%{"oAuth" => ["write:filters"]}], - responses: %{200 => Operation.response("Filter", "application/json", Filter)} + responses: %{200 => Operation.response("Filter", "application/json", filter())} } end @@ -47,7 +43,7 @@ def show_operation do operationId: "FilterController.show", security: [%{"oAuth" => ["read:filters"]}], responses: %{ - 200 => Operation.response("Filter", "application/json", Filter) + 200 => Operation.response("Filter", "application/json", filter()) } } end @@ -58,10 +54,10 @@ def update_operation do summary: "Update a filter", parameters: [id_param()], operationId: "FilterController.update", - requestBody: Helpers.request_body("Parameters", FilterUpdateRequest, required: true), + requestBody: Helpers.request_body("Parameters", update_request(), required: true), security: [%{"oAuth" => ["write:filters"]}], responses: %{ - 200 => Operation.response("Filter", "application/json", Filter) + 200 => Operation.response("Filter", "application/json", filter()) } } end @@ -86,4 +82,146 @@ def delete_operation do defp id_param do Operation.parameter(:id, :path, :string, "Filter ID", example: "123", required: true) end + + defp filter do + %Schema{ + title: "Filter", + type: :object, + properties: %{ + id: %Schema{type: :string}, + phrase: %Schema{type: :string, description: "The text to be filtered"}, + context: %Schema{ + type: :array, + items: %Schema{type: :string, enum: ["home", "notifications", "public", "thread"]}, + description: "The contexts in which the filter should be applied." + }, + expires_at: %Schema{ + type: :string, + format: :"date-time", + description: + "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire.", + nullable: true + }, + irreversible: %Schema{ + type: :boolean, + description: + "Should matching entities in home and notifications be dropped by the server?" + }, + whole_word: %Schema{ + type: :boolean, + description: "Should the filter consider word boundaries?" + } + }, + example: %{ + "id" => "5580", + "phrase" => "@twitter.com", + "context" => [ + "home", + "notifications", + "public", + "thread" + ], + "whole_word" => false, + "expires_at" => nil, + "irreversible" => true + } + } + end + + defp array_of_filters do + %Schema{ + title: "ArrayOfFilters", + description: "Array of Filters", + type: :array, + items: filter(), + example: [ + %{ + "id" => "5580", + "phrase" => "@twitter.com", + "context" => [ + "home", + "notifications", + "public", + "thread" + ], + "whole_word" => false, + "expires_at" => nil, + "irreversible" => true + }, + %{ + "id" => "6191", + "phrase" => ":eurovision2019:", + "context" => [ + "home" + ], + "whole_word" => true, + "expires_at" => "2019-05-21T13:47:31.333Z", + "irreversible" => false + } + ] + } + end + + defp create_request do + %Schema{ + title: "FilterCreateRequest", + allOf: [ + update_request(), + %Schema{ + type: :object, + properties: %{ + irreversible: %Schema{ + type: :bolean, + description: + "Should the server irreversibly drop matching entities from home and notifications?", + default: false + } + } + } + ], + example: %{ + "phrase" => "knights", + "context" => ["home"] + } + } + end + + defp update_request do + %Schema{ + title: "FilterUpdateRequest", + type: :object, + properties: %{ + phrase: %Schema{type: :string, description: "The text to be filtered"}, + context: %Schema{ + type: :array, + items: %Schema{type: :string, enum: ["home", "notifications", "public", "thread"]}, + description: + "Array of enumerable strings `home`, `notifications`, `public`, `thread`. At least one context must be specified." + }, + irreversible: %Schema{ + type: :bolean, + description: + "Should the server irreversibly drop matching entities from home and notifications?" + }, + whole_word: %Schema{ + type: :bolean, + description: "Consider word boundaries?", + default: true + } + # TODO: probably should implement filter expiration + # expires_in: %Schema{ + # type: :string, + # format: :"date-time", + # description: + # "ISO 8601 Datetime for when the filter expires. Otherwise, + # null for a filter that doesn't expire." + # } + }, + required: [:phrase, :context], + example: %{ + "phrase" => "knights", + "context" => ["home"] + } + } + end end diff --git a/lib/pleroma/web/api_spec/schemas/filter.ex b/lib/pleroma/web/api_spec/schemas/filter.ex deleted file mode 100644 index fc5480b71..000000000 --- a/lib/pleroma/web/api_spec/schemas/filter.ex +++ /dev/null @@ -1,51 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.Filter do - alias OpenApiSpex.Schema - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "Filter", - type: :object, - properties: %{ - id: %Schema{type: :string}, - phrase: %Schema{type: :string, description: "The text to be filtered"}, - context: %Schema{ - type: :array, - items: %Schema{type: :string, enum: ["home", "notifications", "public", "thread"]}, - description: "The contexts in which the filter should be applied." - }, - expires_at: %Schema{ - type: :string, - format: :"date-time", - description: - "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire.", - nullable: true - }, - irreversible: %Schema{ - type: :boolean, - description: - "Should matching entities in home and notifications be dropped by the server?" - }, - whole_word: %Schema{ - type: :boolean, - description: "Should the filter consider word boundaries?" - } - }, - example: %{ - "id" => "5580", - "phrase" => "@twitter.com", - "context" => [ - "home", - "notifications", - "public", - "thread" - ], - "whole_word" => false, - "expires_at" => nil, - "irreversible" => true - } - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/filter_create_request.ex b/lib/pleroma/web/api_spec/schemas/filter_create_request.ex deleted file mode 100644 index f2a475b12..000000000 --- a/lib/pleroma/web/api_spec/schemas/filter_create_request.ex +++ /dev/null @@ -1,30 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.FilterCreateRequest do - alias OpenApiSpex.Schema - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "FilterCreateRequest", - allOf: [ - %OpenApiSpex.Reference{"$ref": "#/components/schemas/FilterUpdateRequest"}, - %Schema{ - type: :object, - properties: %{ - irreversible: %Schema{ - type: :bolean, - description: - "Should the server irreversibly drop matching entities from home and notifications?", - default: false - } - } - } - ], - example: %{ - "phrase" => "knights", - "context" => ["home"] - } - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/filter_update_request.ex b/lib/pleroma/web/api_spec/schemas/filter_update_request.ex deleted file mode 100644 index e703db0ce..000000000 --- a/lib/pleroma/web/api_spec/schemas/filter_update_request.ex +++ /dev/null @@ -1,41 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.FilterUpdateRequest do - alias OpenApiSpex.Schema - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "FilterUpdateRequest", - type: :object, - properties: %{ - phrase: %Schema{type: :string, description: "The text to be filtered"}, - context: %Schema{ - type: :array, - items: %Schema{type: :string, enum: ["home", "notifications", "public", "thread"]}, - description: - "Array of enumerable strings `home`, `notifications`, `public`, `thread`. At least one context must be specified." - }, - irreversible: %Schema{ - type: :bolean, - description: - "Should the server irreversibly drop matching entities from home and notifications?" - }, - whole_word: %Schema{type: :bolean, description: "Consider word boundaries?", default: true} - # TODO: probably should implement filter expiration - # expires_in: %Schema{ - # type: :string, - # format: :"date-time", - # description: - # "ISO 8601 Datetime for when the filter expires. Otherwise, - # null for a filter that doesn't expire." - # } - }, - required: [:phrase, :context], - example: %{ - "phrase" => "knights", - "context" => ["home"] - } - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/filters_response.ex b/lib/pleroma/web/api_spec/schemas/filters_response.ex deleted file mode 100644 index 8c56c5982..000000000 --- a/lib/pleroma/web/api_spec/schemas/filters_response.ex +++ /dev/null @@ -1,40 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.FiltersResponse do - require OpenApiSpex - alias Pleroma.Web.ApiSpec.Schemas.Filter - - OpenApiSpex.schema(%{ - title: "FiltersResponse", - description: "Array of Filters", - type: :array, - items: Filter, - example: [ - %{ - "id" => "5580", - "phrase" => "@twitter.com", - "context" => [ - "home", - "notifications", - "public", - "thread" - ], - "whole_word" => false, - "expires_at" => nil, - "irreversible" => true - }, - %{ - "id" => "6191", - "phrase" => ":eurovision2019:", - "context" => [ - "home" - ], - "whole_word" => true, - "expires_at" => "2019-05-21T13:47:31.333Z", - "irreversible" => false - } - ] - }) -end diff --git a/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex b/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex index dd13a8a09..21dc374cd 100644 --- a/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex @@ -35,7 +35,7 @@ def create(%{assigns: %{user: user}, body_params: params} = conn, _) do context: params.context, hide: params.irreversible, whole_word: params.whole_word - # expires_at + # TODO: support `expires_in` parameter (as in Mastodon API) } {:ok, response} = Filter.create(query) @@ -57,13 +57,12 @@ def update( ) do params = params - |> Map.from_struct() |> Map.delete(:irreversible) - |> Map.put(:hide, params.irreversible) + |> Map.put(:hide, params[:irreversible]) |> Enum.reject(fn {_key, value} -> is_nil(value) end) |> Map.new() - # TODO: add expires_in -> expires_at + # TODO: support `expires_in` parameter (as in Mastodon API) with %Filter{} = filter <- Filter.get(filter_id, user), {:ok, %Filter{} = filter} <- Filter.update(filter, params) do diff --git a/lib/pleroma/web/mastodon_api/views/filter_view.ex b/lib/pleroma/web/mastodon_api/views/filter_view.ex index 8d5c381ec..aeff646f5 100644 --- a/lib/pleroma/web/mastodon_api/views/filter_view.ex +++ b/lib/pleroma/web/mastodon_api/views/filter_view.ex @@ -7,8 +7,8 @@ defmodule Pleroma.Web.MastodonAPI.FilterView do alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.MastodonAPI.FilterView - def render("index.json", %{filters: filters} = opts) do - render_many(filters, FilterView, "show.json", opts) + def render("index.json", %{filters: filters}) do + render_many(filters, FilterView, "show.json") end def render("show.json", %{filter: filter}) do diff --git a/test/web/mastodon_api/controllers/filter_controller_test.exs b/test/web/mastodon_api/controllers/filter_controller_test.exs index 41a290eb2..f29547d13 100644 --- a/test/web/mastodon_api/controllers/filter_controller_test.exs +++ b/test/web/mastodon_api/controllers/filter_controller_test.exs @@ -5,15 +5,8 @@ defmodule Pleroma.Web.MastodonAPI.FilterControllerTest do use Pleroma.Web.ConnCase - alias Pleroma.Web.ApiSpec - alias Pleroma.Web.ApiSpec.Schemas.Filter - alias Pleroma.Web.ApiSpec.Schemas.FilterCreateRequest - alias Pleroma.Web.ApiSpec.Schemas.FiltersResponse - alias Pleroma.Web.ApiSpec.Schemas.FilterUpdateRequest alias Pleroma.Web.MastodonAPI.FilterView - import OpenApiSpex.TestAssertions - test "creating a filter" do %{conn: conn} = oauth_access(["write:filters"]) @@ -27,13 +20,12 @@ test "creating a filter" do |> put_req_header("content-type", "application/json") |> post("/api/v1/filters", %{"phrase" => filter.phrase, context: filter.context}) - assert response = json_response(conn, 200) + assert response = json_response_and_validate_schema(conn, 200) assert response["phrase"] == filter.phrase assert response["context"] == filter.context assert response["irreversible"] == false assert response["id"] != nil assert response["id"] != "" - assert_schema(response, "Filter", ApiSpec.spec()) end test "fetching a list of filters" do @@ -59,7 +51,7 @@ test "fetching a list of filters" do response = conn |> get("/api/v1/filters") - |> json_response(200) + |> json_response_and_validate_schema(200) assert response == render_json( @@ -67,8 +59,6 @@ test "fetching a list of filters" do "index.json", filters: [filter_two, filter_one] ) - - assert_schema(response, "FiltersResponse", ApiSpec.spec()) end test "get a filter" do @@ -85,8 +75,7 @@ test "get a filter" do conn = get(conn, "/api/v1/filters/#{filter.filter_id}") - assert response = json_response(conn, 200) - assert_schema(response, "Filter", ApiSpec.spec()) + assert response = json_response_and_validate_schema(conn, 200) end test "update a filter" do @@ -115,11 +104,10 @@ test "update a filter" do context: new.context }) - assert response = json_response(conn, 200) + assert response = json_response_and_validate_schema(conn, 200) assert response["phrase"] == new.phrase assert response["context"] == new.context assert response["irreversible"] == true - assert_schema(response, "Filter", ApiSpec.spec()) end test "delete a filter" do @@ -136,33 +124,6 @@ test "delete a filter" do conn = delete(conn, "/api/v1/filters/#{filter.filter_id}") - assert response = json_response(conn, 200) - assert response == %{} - end - - describe "OpenAPI" do - test "Filter example matches schema" do - api_spec = ApiSpec.spec() - schema = Filter.schema() - assert_schema(schema.example, "Filter", api_spec) - end - - test "FiltersResponse example matches schema" do - api_spec = ApiSpec.spec() - schema = FiltersResponse.schema() - assert_schema(schema.example, "FiltersResponse", api_spec) - end - - test "FilterCreateRequest example matches schema" do - api_spec = ApiSpec.spec() - schema = FilterCreateRequest.schema() - assert_schema(schema.example, "FilterCreateRequest", api_spec) - end - - test "FilterUpdateRequest example matches schema" do - api_spec = ApiSpec.spec() - schema = FilterUpdateRequest.schema() - assert_schema(schema.example, "FilterUpdateRequest", api_spec) - end + assert json_response_and_validate_schema(conn, 200) == %{} end end From 32ca9f2c59369c15905f665bee3c759ae963ff91 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 28 Apr 2020 16:25:13 +0400 Subject: [PATCH 470/581] Render mastodon-like errors in FilterController --- lib/pleroma/web/mastodon_api/controllers/filter_controller.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex b/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex index 21dc374cd..abbf0ce02 100644 --- a/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex @@ -17,7 +17,7 @@ defmodule Pleroma.Web.MastodonAPI.FilterController do OAuthScopesPlug, %{scopes: ["write:filters"]} when action not in @oauth_read_actions ) - + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.FilterOperation @doc "GET /api/v1/filters" From 3a45952a3a324e5fb823e9bdf3ffe19fb3923cb3 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 5 May 2020 17:44:46 +0400 Subject: [PATCH 471/581] Add OpenAPI spec for ConversationController --- lib/pleroma/conversation/participation.ex | 4 +- .../operations/conversation_operation.ex | 61 +++++++++++++++++++ .../web/api_spec/schemas/conversation.ex | 41 +++++++++++++ lib/pleroma/web/api_spec/schemas/status.ex | 7 ++- .../controllers/conversation_controller.ex | 5 +- .../conversation_controller_test.exs | 22 +++---- 6 files changed, 125 insertions(+), 15 deletions(-) create mode 100644 lib/pleroma/web/api_spec/operations/conversation_operation.ex create mode 100644 lib/pleroma/web/api_spec/schemas/conversation.ex diff --git a/lib/pleroma/conversation/participation.ex b/lib/pleroma/conversation/participation.ex index 215265fc9..51bb1bda9 100644 --- a/lib/pleroma/conversation/participation.ex +++ b/lib/pleroma/conversation/participation.ex @@ -128,7 +128,7 @@ def for_user(user, params \\ %{}) do |> Pleroma.Pagination.fetch_paginated(params) end - def restrict_recipients(query, user, %{"recipients" => user_ids}) do + def restrict_recipients(query, user, %{recipients: user_ids}) do user_binary_ids = [user.id | user_ids] |> Enum.uniq() @@ -172,7 +172,7 @@ def for_user_with_last_activity_id(user, params \\ %{}) do | last_activity_id: activity_id } end) - |> Enum.filter(& &1.last_activity_id) + |> Enum.reject(&is_nil(&1.last_activity_id)) end def get(_, _ \\ []) diff --git a/lib/pleroma/web/api_spec/operations/conversation_operation.ex b/lib/pleroma/web/api_spec/operations/conversation_operation.ex new file mode 100644 index 000000000..475468893 --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/conversation_operation.ex @@ -0,0 +1,61 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.ConversationOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.Conversation + alias Pleroma.Web.ApiSpec.Schemas.FlakeID + + 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{ + tags: ["Conversations"], + summary: "Show conversation", + security: [%{"oAuth" => ["read:statuses"]}], + operationId: "ConversationController.index", + parameters: [ + Operation.parameter( + :recipients, + :query, + %Schema{type: :array, items: FlakeID}, + "Only return conversations with the given recipients (a list of user ids)" + ) + | pagination_params() + ], + responses: %{ + 200 => + Operation.response("Array of Conversation", "application/json", %Schema{ + type: :array, + items: Conversation, + example: [Conversation.schema().example] + }) + } + } + end + + def mark_as_read_operation do + %Operation{ + tags: ["Conversations"], + summary: "Mark as read", + operationId: "ConversationController.mark_as_read", + parameters: [ + Operation.parameter(:id, :path, :string, "Conversation ID", + example: "123", + required: true + ) + ], + security: [%{"oAuth" => ["write:conversations"]}], + responses: %{ + 200 => Operation.response("Conversation", "application/json", Conversation) + } + } + end +end diff --git a/lib/pleroma/web/api_spec/schemas/conversation.ex b/lib/pleroma/web/api_spec/schemas/conversation.ex new file mode 100644 index 000000000..d8ff5ba26 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/conversation.ex @@ -0,0 +1,41 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.Conversation do + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.Account + alias Pleroma.Web.ApiSpec.Schemas.Status + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "Conversation", + description: "Represents a conversation with \"direct message\" visibility.", + type: :object, + required: [:id, :accounts, :unread], + properties: %{ + id: %Schema{type: :string}, + accounts: %Schema{ + type: :array, + items: Account, + description: "Participants in the conversation" + }, + unread: %Schema{ + type: :boolean, + description: "Is the conversation currently marked as unread?" + }, + # last_status: Status + last_status: %Schema{ + allOf: [Status], + description: "The last status in the conversation, to be used for optional display" + } + }, + example: %{ + "id" => "418450", + "unread" => true, + "accounts" => [Account.schema().example], + "last_status" => Status.schema().example + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/status.ex b/lib/pleroma/web/api_spec/schemas/status.ex index aef0588d4..42e9dae19 100644 --- a/lib/pleroma/web/api_spec/schemas/status.ex +++ b/lib/pleroma/web/api_spec/schemas/status.ex @@ -86,7 +86,12 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do properties: %{ content: %Schema{type: :object, additionalProperties: %Schema{type: :string}}, conversation_id: %Schema{type: :integer}, - direct_conversation_id: %Schema{type: :string, nullable: true}, + direct_conversation_id: %Schema{ + type: :integer, + nullable: true, + description: + "The ID of the Mastodon direct message conversation the status is associated with (if any)" + }, emoji_reactions: %Schema{ type: :array, items: %Schema{ diff --git a/lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex b/lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex index c44641526..f35ec3596 100644 --- a/lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex @@ -13,9 +13,12 @@ defmodule Pleroma.Web.MastodonAPI.ConversationController do action_fallback(Pleroma.Web.MastodonAPI.FallbackController) + plug(Pleroma.Web.ApiSpec.CastAndValidate) plug(OAuthScopesPlug, %{scopes: ["read:statuses"]} when action == :index) plug(OAuthScopesPlug, %{scopes: ["write:conversations"]} when action != :index) + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.ConversationOperation + @doc "GET /api/v1/conversations" def index(%{assigns: %{user: user}} = conn, params) do participations = Participation.for_user_with_last_activity_id(user, params) @@ -26,7 +29,7 @@ def index(%{assigns: %{user: user}} = conn, params) do end @doc "POST /api/v1/conversations/:id/read" - def mark_as_read(%{assigns: %{user: user}} = conn, %{"id" => participation_id}) do + def mark_as_read(%{assigns: %{user: user}} = conn, %{id: participation_id}) do with %Participation{} = participation <- Repo.get_by(Participation, id: participation_id, user_id: user.id), {:ok, participation} <- Participation.mark_as_read(participation) do diff --git a/test/web/mastodon_api/controllers/conversation_controller_test.exs b/test/web/mastodon_api/controllers/conversation_controller_test.exs index 801b0259b..04695572e 100644 --- a/test/web/mastodon_api/controllers/conversation_controller_test.exs +++ b/test/web/mastodon_api/controllers/conversation_controller_test.exs @@ -36,7 +36,7 @@ test "returns a list of conversations", %{user: user_one, conn: conn} do res_conn = get(conn, "/api/v1/conversations") - assert response = json_response(res_conn, 200) + assert response = json_response_and_validate_schema(res_conn, 200) assert [ %{ @@ -91,18 +91,18 @@ test "filters conversations by recipients", %{user: user_one, conn: conn} do "visibility" => "direct" }) - [conversation1, conversation2] = - conn - |> get("/api/v1/conversations", %{"recipients" => [user_two.id]}) - |> json_response(200) + assert [conversation1, conversation2] = + conn + |> get("/api/v1/conversations?recipients[]=#{user_two.id}") + |> json_response_and_validate_schema(200) assert conversation1["last_status"]["id"] == direct5.id assert conversation2["last_status"]["id"] == direct1.id [conversation1] = conn - |> get("/api/v1/conversations", %{"recipients" => [user_two.id, user_three.id]}) - |> json_response(200) + |> get("/api/v1/conversations?recipients[]=#{user_two.id}&recipients[]=#{user_three.id}") + |> json_response_and_validate_schema(200) assert conversation1["last_status"]["id"] == direct3.id end @@ -126,7 +126,7 @@ test "updates the last_status on reply", %{user: user_one, conn: conn} do [%{"last_status" => res_last_status}] = conn |> get("/api/v1/conversations") - |> json_response(200) + |> json_response_and_validate_schema(200) assert res_last_status["id"] == direct_reply.id end @@ -154,12 +154,12 @@ test "the user marks a conversation as read", %{user: user_one, conn: conn} do [%{"id" => direct_conversation_id, "unread" => true}] = user_two_conn |> get("/api/v1/conversations") - |> json_response(200) + |> json_response_and_validate_schema(200) %{"unread" => false} = user_two_conn |> post("/api/v1/conversations/#{direct_conversation_id}/read") - |> json_response(200) + |> json_response_and_validate_schema(200) 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 == 0 @@ -175,7 +175,7 @@ test "the user marks a conversation as read", %{user: user_one, conn: conn} do [%{"unread" => true}] = conn |> get("/api/v1/conversations") - |> json_response(200) + |> json_response_and_validate_schema(200) assert User.get_cached_by_id(user_one.id).unread_conversation_count == 1 assert User.get_cached_by_id(user_two.id).unread_conversation_count == 0 From b34debe61540cf845ccf4ac93066e45a1d9c8f85 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 5 May 2020 16:17:09 +0200 Subject: [PATCH 472/581] Undoing: Move undoing reactions to the pipeline everywhere. --- lib/pleroma/web/activity_pub/activity_pub.ex | 25 --------- lib/pleroma/web/activity_pub/side_effects.ex | 8 +++ .../web/activity_pub/transmogrifier.ex | 27 +-------- lib/pleroma/web/common_api/common_api.ex | 8 ++- .../controllers/pleroma_api_controller.ex | 3 +- test/web/activity_pub/activity_pub_test.exs | 56 ------------------- test/web/activity_pub/side_effects_test.exs | 30 +++++++++- test/web/common_api/common_api_test.exs | 3 +- .../pleroma_api_controller_test.exs | 10 +++- 9 files changed, 57 insertions(+), 113 deletions(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index daad4d751..c94af3b5f 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -373,31 +373,6 @@ defp do_react_with_emoji(user, object, emoji, options) do end end - @spec unreact_with_emoji(User.t(), String.t(), keyword()) :: - {:ok, Activity.t(), Object.t()} | {:error, any()} - def unreact_with_emoji(user, reaction_id, options \\ []) do - with {:ok, result} <- - Repo.transaction(fn -> do_unreact_with_emoji(user, reaction_id, options) end) do - result - end - end - - defp do_unreact_with_emoji(user, reaction_id, options) do - with local <- Keyword.get(options, :local, true), - activity_id <- Keyword.get(options, :activity_id, nil), - user_ap_id <- user.ap_id, - %Activity{actor: ^user_ap_id} = reaction_activity <- Activity.get_by_ap_id(reaction_id), - object <- Object.normalize(reaction_activity), - unreact_data <- make_undo_data(user, reaction_activity, activity_id), - {:ok, activity} <- insert(unreact_data, local), - {:ok, object} <- remove_emoji_reaction_from_object(reaction_activity, object), - :ok <- maybe_federate(activity) do - {:ok, activity, object} - else - {:error, error} -> Repo.rollback(error) - end - end - @spec announce(User.t(), Object.t(), String.t() | nil, boolean(), boolean()) :: {:ok, Activity.t(), Object.t()} | {:error, any()} def announce( diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 8ed91e257..d58df9394 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -45,5 +45,13 @@ def handle_undoing(%{data: %{"type" => "Like"}} = object) do end end + def handle_undoing(%{data: %{"type" => "EmojiReact"}} = object) do + with %Object{} = reacted_object <- Object.get_by_ap_id(object.data["object"]), + {:ok, _} <- Utils.remove_emoji_reaction_from_object(object, reacted_object), + {:ok, _} <- Repo.delete(object) do + :ok + end + end + def handle_undoing(object), do: {:error, ["don't know how to handle", object]} end diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index a60b27bea..94849b5f5 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -806,28 +806,6 @@ def handle_incoming( end end - def handle_incoming( - %{ - "type" => "Undo", - "object" => %{"type" => "EmojiReact", "id" => reaction_activity_id}, - "actor" => _actor, - "id" => id - } = data, - _options - ) do - with actor <- Containment.get_actor(data), - {:ok, %User{} = actor} <- User.get_or_fetch_by_ap_id(actor), - {:ok, activity, _} <- - ActivityPub.unreact_with_emoji(actor, reaction_activity_id, - activity_id: id, - local: false - ) do - {:ok, activity} - else - _e -> :error - end - end - def handle_incoming( %{ "type" => "Undo", @@ -865,10 +843,11 @@ def handle_incoming( def handle_incoming( %{ "type" => "Undo", - "object" => %{"type" => "Like"} + "object" => %{"type" => type} } = data, _options - ) do + ) + when type in ["Like", "EmojiReact"] do with {:ok, activity, _} <- Pipeline.common_pipeline(data, local: false) do {:ok, activity} end diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index a670ea5bc..067ac875e 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -170,7 +170,7 @@ def unfavorite(id, user) do %Object{} = note <- Object.normalize(activity, false), %Activity{} = like <- Utils.get_existing_like(user.ap_id, note), {:ok, undo, _} <- Builder.undo(user, like), - {:ok, activity, _} <- Pipeline.common_pipeline(undo, local: false) do + {:ok, activity, _} <- Pipeline.common_pipeline(undo, local: true) do {:ok, activity} else {:find_activity, _} -> {:error, :not_found} @@ -189,8 +189,10 @@ def react_with_emoji(id, user, emoji) do end def unreact_with_emoji(id, user, emoji) do - with %Activity{} = reaction_activity <- Utils.get_latest_reaction(id, user, emoji) do - ActivityPub.unreact_with_emoji(user, reaction_activity.data["id"]) + with %Activity{} = reaction_activity <- Utils.get_latest_reaction(id, user, emoji), + {:ok, undo, _} <- Builder.undo(user, reaction_activity), + {:ok, activity, _} <- Pipeline.common_pipeline(undo, local: true) do + {:ok, activity} else _ -> {:error, dgettext("errors", "Could not remove reaction emoji")} diff --git a/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex b/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex index 1bdb3aa4d..4aa5c1dd8 100644 --- a/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex @@ -98,7 +98,8 @@ def unreact_with_emoji(%{assigns: %{user: user}} = conn, %{ "id" => activity_id, "emoji" => emoji }) do - with {:ok, _activity, _object} <- CommonAPI.unreact_with_emoji(activity_id, user, emoji), + with {:ok, _activity} <- + CommonAPI.unreact_with_emoji(activity_id, user, emoji), activity <- Activity.get_by_id(activity_id) do conn |> put_view(StatusView) diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index 797af66a0..cb2d41f0b 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -939,62 +939,6 @@ test "reverts emoji reaction on error" do end end - describe "unreacting to an object" do - test_with_mock "sends an activity to federation", Federator, [:passthrough], [] do - Config.put([:instance, :federating], true) - user = insert(:user) - reactor = insert(:user) - {:ok, activity} = CommonAPI.post(user, %{"status" => "YASSSS queen slay"}) - assert object = Object.normalize(activity) - - {:ok, reaction_activity, _object} = ActivityPub.react_with_emoji(reactor, object, "🔥") - - assert called(Federator.publish(reaction_activity)) - - {:ok, unreaction_activity, _object} = - ActivityPub.unreact_with_emoji(reactor, reaction_activity.data["id"]) - - assert called(Federator.publish(unreaction_activity)) - end - - test "adds an undo activity to the db" do - user = insert(:user) - reactor = insert(:user) - {:ok, activity} = CommonAPI.post(user, %{"status" => "YASSSS queen slay"}) - assert object = Object.normalize(activity) - - {:ok, reaction_activity, _object} = ActivityPub.react_with_emoji(reactor, object, "🔥") - - {:ok, unreaction_activity, _object} = - ActivityPub.unreact_with_emoji(reactor, reaction_activity.data["id"]) - - assert unreaction_activity.actor == reactor.ap_id - assert unreaction_activity.data["object"] == reaction_activity.data["id"] - - object = Object.get_by_ap_id(object.data["id"]) - assert object.data["reaction_count"] == 0 - assert object.data["reactions"] == [] - end - - test "reverts emoji unreact on error" do - [user, reactor] = insert_list(2, :user) - {:ok, activity} = CommonAPI.post(user, %{"status" => "Status"}) - object = Object.normalize(activity) - - {:ok, reaction_activity, _object} = ActivityPub.react_with_emoji(reactor, object, "😀") - - with_mock(Utils, [:passthrough], maybe_federate: fn _ -> {:error, :reverted} end) do - assert {:error, :reverted} = - ActivityPub.unreact_with_emoji(reactor, reaction_activity.data["id"]) - end - - object = Object.get_by_ap_id(object.data["id"]) - - assert object.data["reaction_count"] == 1 - assert object.data["reactions"] == [["😀", [reactor.ap_id]]] - end - end - describe "announcing an object" do test "adds an announce activity to the db" do note_activity = insert(:note_activity) diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index 61ef72742..abcfdfa2f 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -23,10 +23,38 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do {:ok, post} = CommonAPI.post(poster, %{"status" => "hey"}) {:ok, like} = CommonAPI.favorite(user, post.id) + {:ok, reaction, _} = CommonAPI.react_with_emoji(post.id, user, "👍") + {:ok, undo_data, _meta} = Builder.undo(user, like) {:ok, like_undo, _meta} = ActivityPub.persist(undo_data, local: true) - %{like_undo: like_undo, post: post, like: like} + {:ok, undo_data, _meta} = Builder.undo(user, reaction) + {:ok, reaction_undo, _meta} = ActivityPub.persist(undo_data, local: true) + + %{ + like_undo: like_undo, + post: post, + like: like, + reaction_undo: reaction_undo, + reaction: reaction + } + end + + test "a reaction undo removes the reaction from the object", %{ + reaction_undo: reaction_undo, + post: post + } do + {:ok, _reaction_undo, _} = SideEffects.handle(reaction_undo) + + object = Object.get_by_ap_id(post.data["object"]) + + assert object.data["reaction_count"] == 0 + assert object.data["reactions"] == [] + end + + test "deletes the original reaction", %{reaction_undo: reaction_undo, reaction: reaction} do + {:ok, _reaction_undo, _} = SideEffects.handle(reaction_undo) + refute Activity.get_by_id(reaction.id) end test "a like undo removes the like from the object", %{like_undo: like_undo, post: post} do diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index bc0c1a791..0664b7f90 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -295,10 +295,11 @@ test "unreacting to a status with an emoji" do {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) {:ok, reaction, _} = CommonAPI.react_with_emoji(activity.id, user, "👍") - {:ok, unreaction, _} = CommonAPI.unreact_with_emoji(activity.id, user, "👍") + {:ok, unreaction} = CommonAPI.unreact_with_emoji(activity.id, user, "👍") assert unreaction.data["type"] == "Undo" assert unreaction.data["object"] == reaction.data["id"] + assert unreaction.local end test "repeating a status" do diff --git a/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs b/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs index 61a1689b9..299dbad41 100644 --- a/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs +++ b/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs @@ -3,12 +3,14 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do + use Oban.Testing, repo: Pleroma.Repo use Pleroma.Web.ConnCase alias Pleroma.Conversation.Participation alias Pleroma.Notification alias Pleroma.Object alias Pleroma.Repo + alias Pleroma.Tests.ObanHelpers alias Pleroma.User alias Pleroma.Web.CommonAPI @@ -41,7 +43,9 @@ test "DELETE /api/v1/pleroma/statuses/:id/reactions/:emoji", %{conn: conn} do other_user = insert(:user) {:ok, activity} = CommonAPI.post(user, %{"status" => "#cofe"}) - {:ok, activity, _object} = CommonAPI.react_with_emoji(activity.id, other_user, "☕") + {:ok, _reaction, _object} = CommonAPI.react_with_emoji(activity.id, other_user, "☕") + + ObanHelpers.perform_all() result = conn @@ -52,7 +56,9 @@ test "DELETE /api/v1/pleroma/statuses/:id/reactions/:emoji", %{conn: conn} do assert %{"id" => id} = json_response(result, 200) assert to_string(activity.id) == id - object = Object.normalize(activity) + ObanHelpers.perform_all() + + object = Object.get_by_ap_id(activity.data["object"]) assert object.data["reaction_count"] == 0 end From a3bb2e5474ee068bf375b24df8906e51654c9699 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 5 May 2020 16:42:34 +0200 Subject: [PATCH 473/581] Undoing: Move undoing announcements to the pipeline everywhere. --- lib/pleroma/user.ex | 10 +--- lib/pleroma/web/activity_pub/activity_pub.ex | 28 ----------- lib/pleroma/web/activity_pub/side_effects.ex | 8 ++++ .../web/activity_pub/transmogrifier.ex | 21 +-------- lib/pleroma/web/common_api/common_api.ex | 9 ++-- .../controllers/status_controller.ex | 6 +-- test/notification_test.exs | 2 +- test/web/activity_pub/activity_pub_test.exs | 46 ------------------- test/web/activity_pub/side_effects_test.exs | 26 ++++++++++- .../transmogrifier/undo_handling_test.exs | 5 +- 10 files changed, 45 insertions(+), 116 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 0136ba119..aa675a521 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1554,7 +1554,7 @@ defp delete_activity(%{data: %{"type" => "Create"}} = activity) do |> ActivityPub.delete() end - defp delete_activity(%{data: %{"type" => "Like"}} = activity) do + defp delete_activity(%{data: %{"type" => type}} = activity) when type in ["Like", "Announce"] do actor = activity.actor |> get_cached_by_ap_id() @@ -1564,14 +1564,6 @@ defp delete_activity(%{data: %{"type" => "Like"}} = activity) do Pipeline.common_pipeline(undo, local: true) end - defp delete_activity(%{data: %{"type" => "Announce"}} = activity) do - object = Object.normalize(activity) - - activity.actor - |> get_cached_by_ap_id() - |> ActivityPub.unannounce(object) - end - defp delete_activity(_activity), do: "Doing nothing" def html_filter_policy(%User{no_rich_text: true}) do diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index c94af3b5f..be3d72c82 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -402,34 +402,6 @@ defp do_announce(user, object, activity_id, local, public) do end end - @spec unannounce(User.t(), Object.t(), String.t() | nil, boolean()) :: - {:ok, Activity.t(), Object.t()} | {:ok, Object.t()} | {:error, any()} - def unannounce( - %User{} = actor, - %Object{} = object, - activity_id \\ nil, - local \\ true - ) do - with {:ok, result} <- - Repo.transaction(fn -> do_unannounce(actor, object, activity_id, local) end) do - result - end - end - - defp do_unannounce(actor, object, activity_id, local) do - with %Activity{} = announce_activity <- get_existing_announce(actor.ap_id, object), - unannounce_data <- make_unannounce_data(actor, announce_activity, activity_id), - {:ok, unannounce_activity} <- insert(unannounce_data, local), - :ok <- maybe_federate(unannounce_activity), - {:ok, _activity} <- Repo.delete(announce_activity), - {:ok, object} <- remove_announce_from_object(announce_activity, object) do - {:ok, unannounce_activity, object} - else - nil -> {:ok, object} - {:error, error} -> Repo.rollback(error) - end - end - @spec follow(User.t(), User.t(), String.t() | nil, boolean()) :: {:ok, Activity.t()} | {:error, any()} def follow(follower, followed, activity_id \\ nil, local \\ true) do diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index d58df9394..146d30ac1 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -53,5 +53,13 @@ def handle_undoing(%{data: %{"type" => "EmojiReact"}} = object) do end end + def handle_undoing(%{data: %{"type" => "Announce"}} = object) do + with %Object{} = liked_object <- Object.get_by_ap_id(object.data["object"]), + {:ok, _} <- Utils.remove_announce_from_object(object, liked_object), + {:ok, _} <- Repo.delete(object) do + :ok + end + end + def handle_undoing(object), do: {:error, ["don't know how to handle", object]} end diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 94849b5f5..afa171448 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -768,25 +768,6 @@ def handle_incoming( end end - def handle_incoming( - %{ - "type" => "Undo", - "object" => %{"type" => "Announce", "object" => object_id}, - "actor" => _actor, - "id" => id - } = data, - _options - ) do - with actor <- Containment.get_actor(data), - {:ok, %User{} = actor} <- User.get_or_fetch_by_ap_id(actor), - {:ok, object} <- get_obj_helper(object_id), - {:ok, activity, _} <- ActivityPub.unannounce(actor, object, id, false) do - {:ok, activity} - else - _e -> :error - end - end - def handle_incoming( %{ "type" => "Undo", @@ -847,7 +828,7 @@ def handle_incoming( } = data, _options ) - when type in ["Like", "EmojiReact"] do + when type in ["Like", "EmojiReact", "Announce"] do with {:ok, activity, _} <- Pipeline.common_pipeline(data, local: false) do {:ok, activity} end diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index 067ac875e..fc8246871 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -107,9 +107,12 @@ def repeat(id, user, params \\ %{}) do def unrepeat(id, user) do with {_, %Activity{data: %{"type" => "Create"}} = activity} <- - {:find_activity, Activity.get_by_id(id)} do - object = Object.normalize(activity) - ActivityPub.unannounce(user, object) + {:find_activity, Activity.get_by_id(id)}, + %Object{} = note <- Object.normalize(activity, false), + %Activity{} = announce <- Utils.get_existing_announce(user.ap_id, note), + {:ok, undo, _} <- Builder.undo(user, announce), + {:ok, activity, _} <- Pipeline.common_pipeline(undo, local: true) do + {:ok, activity} else {:find_activity, _} -> {:error, :not_found} _ -> {:error, dgettext("errors", "Could not unrepeat")} diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex index 2a5eac9d9..12e3ba15e 100644 --- a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex @@ -206,9 +206,9 @@ def reblog(%{assigns: %{user: user}} = conn, %{"id" => ap_id_or_id} = params) do end @doc "POST /api/v1/statuses/:id/unreblog" - def unreblog(%{assigns: %{user: user}} = conn, %{"id" => ap_id_or_id}) do - with {:ok, _unannounce, %{data: %{"id" => id}}} <- CommonAPI.unrepeat(ap_id_or_id, user), - %Activity{} = activity <- Activity.get_create_by_object_ap_id_with_object(id) do + def unreblog(%{assigns: %{user: user}} = conn, %{"id" => activity_id}) do + with {:ok, _unannounce} <- CommonAPI.unrepeat(activity_id, user), + %Activity{} = activity <- Activity.get_by_id(activity_id) do try_render(conn, "show.json", %{activity: activity, for: user, as: :activity}) end end diff --git a/test/notification_test.exs b/test/notification_test.exs index 7d5b82993..09714f4c5 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -758,7 +758,7 @@ test "repeating an activity results in 1 notification, then 0 if the activity is assert length(Notification.for_user(user)) == 1 - {:ok, _, _} = CommonAPI.unrepeat(activity.id, other_user) + {:ok, _} = CommonAPI.unrepeat(activity.id, other_user) assert Enum.empty?(Notification.for_user(user)) end diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index cb2d41f0b..2c3d354f2 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -1008,52 +1008,6 @@ test "does not add an announce activity to the db if the announcer is not the au end end - describe "unannouncing an object" do - test "unannouncing a previously announced object" do - note_activity = insert(:note_activity) - object = Object.normalize(note_activity) - user = insert(:user) - - # Unannouncing an object that is not announced does nothing - {:ok, object} = ActivityPub.unannounce(user, object) - refute object.data["announcement_count"] - - {:ok, announce_activity, object} = ActivityPub.announce(user, object) - assert object.data["announcement_count"] == 1 - - {:ok, unannounce_activity, object} = ActivityPub.unannounce(user, object) - assert object.data["announcement_count"] == 0 - - assert unannounce_activity.data["to"] == [ - User.ap_followers(user), - object.data["actor"] - ] - - assert unannounce_activity.data["type"] == "Undo" - assert unannounce_activity.data["object"] == announce_activity.data - assert unannounce_activity.data["actor"] == user.ap_id - assert unannounce_activity.data["context"] == announce_activity.data["context"] - - assert Activity.get_by_id(announce_activity.id) == nil - end - - test "reverts unannouncing on error" do - note_activity = insert(:note_activity) - object = Object.normalize(note_activity) - user = insert(:user) - - {:ok, _announce_activity, object} = ActivityPub.announce(user, object) - assert object.data["announcement_count"] == 1 - - with_mock(Utils, [:passthrough], maybe_federate: fn _ -> {:error, :reverted} end) do - assert {:error, :reverted} = ActivityPub.unannounce(user, object) - end - - object = Object.get_by_ap_id(object.data["id"]) - assert object.data["announcement_count"] == 1 - end - end - describe "uploading files" do test "copies the file to the configured folder" do file = %Plug.Upload{ diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index abcfdfa2f..00241320b 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -22,8 +22,8 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do user = insert(:user) {:ok, post} = CommonAPI.post(poster, %{"status" => "hey"}) {:ok, like} = CommonAPI.favorite(user, post.id) - {:ok, reaction, _} = CommonAPI.react_with_emoji(post.id, user, "👍") + {:ok, announce, _} = CommonAPI.repeat(post.id, user) {:ok, undo_data, _meta} = Builder.undo(user, like) {:ok, like_undo, _meta} = ActivityPub.persist(undo_data, local: true) @@ -31,15 +31,37 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do {:ok, undo_data, _meta} = Builder.undo(user, reaction) {:ok, reaction_undo, _meta} = ActivityPub.persist(undo_data, local: true) + {:ok, undo_data, _meta} = Builder.undo(user, announce) + {:ok, announce_undo, _meta} = ActivityPub.persist(undo_data, local: true) + %{ like_undo: like_undo, post: post, like: like, reaction_undo: reaction_undo, - reaction: reaction + reaction: reaction, + announce_undo: announce_undo, + announce: announce } end + test "an announce undo removes the announce from the object", %{ + announce_undo: announce_undo, + post: post + } do + {:ok, _announce_undo, _} = SideEffects.handle(announce_undo) + + object = Object.get_by_ap_id(post.data["object"]) + + assert object.data["announcement_count"] == 0 + assert object.data["announcements"] == [] + end + + test "deletes the original announce", %{announce_undo: announce_undo, announce: announce} do + {:ok, _announce_undo, _} = SideEffects.handle(announce_undo) + refute Activity.get_by_id(announce.id) + end + test "a reaction undo removes the reaction from the object", %{ reaction_undo: reaction_undo, post: post diff --git a/test/web/activity_pub/transmogrifier/undo_handling_test.exs b/test/web/activity_pub/transmogrifier/undo_handling_test.exs index bf2a6bc5b..281cf5b0d 100644 --- a/test/web/activity_pub/transmogrifier/undo_handling_test.exs +++ b/test/web/activity_pub/transmogrifier/undo_handling_test.exs @@ -125,11 +125,8 @@ test "it works for incoming unannounces with an existing notice" do {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) assert data["type"] == "Undo" - assert object_data = data["object"] - assert object_data["type"] == "Announce" - assert object_data["object"] == activity.data["object"] - assert object_data["id"] == + assert data["object"] == "http://mastodon.example.org/users/admin/statuses/99542391527669785/activity" end From 92caae592338a3ca307686e7644f2de18bb57ce5 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 5 May 2020 18:00:37 +0200 Subject: [PATCH 474/581] Undoing: Move undoing blocks to the pipeline everywhere. --- lib/pleroma/web/activity_pub/activity_pub.ex | 21 -------- lib/pleroma/web/activity_pub/side_effects.ex | 12 +++++ .../web/activity_pub/transmogrifier.ex | 51 ++++++------------- lib/pleroma/web/activity_pub/utils.ex | 49 ------------------ lib/pleroma/web/common_api/common_api.ex | 8 +++ .../controllers/account_controller.ex | 3 +- test/web/activity_pub/activity_pub_test.exs | 34 +------------ test/web/activity_pub/side_effects_test.exs | 25 ++++++++- .../transmogrifier/undo_handling_test.exs | 4 +- test/web/activity_pub/utils_test.exs | 28 ---------- 10 files changed, 63 insertions(+), 172 deletions(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index be3d72c82..78e8c0cbe 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -532,27 +532,6 @@ defp do_block(blocker, blocked, activity_id, local) do end end - @spec unblock(User.t(), User.t(), String.t() | nil, boolean()) :: - {:ok, Activity.t()} | {:error, any()} | nil - def unblock(blocker, blocked, activity_id \\ nil, local \\ true) do - with {:ok, result} <- - Repo.transaction(fn -> do_unblock(blocker, blocked, activity_id, local) end) do - result - end - end - - defp do_unblock(blocker, blocked, activity_id, local) do - with %Activity{} = block_activity <- fetch_latest_block(blocker, blocked), - unblock_data <- make_unblock_data(blocker, blocked, block_activity, activity_id), - {:ok, activity} <- insert(unblock_data, local), - :ok <- maybe_federate(activity) do - {:ok, activity} - else - nil -> nil - {:error, error} -> Repo.rollback(error) - end - end - @spec flag(map()) :: {:ok, Activity.t()} | {:error, any()} def flag( %{ diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 146d30ac1..3fad6e4d8 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -9,6 +9,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do alias Pleroma.Notification alias Pleroma.Object alias Pleroma.Repo + alias Pleroma.User alias Pleroma.Web.ActivityPub.Utils def handle(object, meta \\ []) @@ -61,5 +62,16 @@ def handle_undoing(%{data: %{"type" => "Announce"}} = object) do end end + def handle_undoing( + %{data: %{"type" => "Block", "actor" => blocker, "object" => blocked}} = object + ) do + with %User{} = blocker <- User.get_cached_by_ap_id(blocker), + %User{} = blocked <- User.get_cached_by_ap_id(blocked), + {:ok, _} <- User.unblock(blocker, blocked), + {:ok, _} <- Repo.delete(object) do + :ok + end + end + def handle_undoing(object), do: {:error, ["don't know how to handle", object]} end diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index afa171448..65ae643ed 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -787,40 +787,6 @@ def handle_incoming( end end - def handle_incoming( - %{ - "type" => "Undo", - "object" => %{"type" => "Block", "object" => blocked}, - "actor" => blocker, - "id" => id - } = _data, - _options - ) do - with %User{local: true} = blocked <- User.get_cached_by_ap_id(blocked), - {:ok, %User{} = blocker} <- User.get_or_fetch_by_ap_id(blocker), - {:ok, activity} <- ActivityPub.unblock(blocker, blocked, id, false) do - User.unblock(blocker, blocked) - {:ok, activity} - else - _e -> :error - end - end - - def handle_incoming( - %{"type" => "Block", "object" => blocked, "actor" => blocker, "id" => id} = _data, - _options - ) do - with %User{local: true} = blocked = User.get_cached_by_ap_id(blocked), - {:ok, %User{} = blocker} = User.get_or_fetch_by_ap_id(blocker), - {:ok, activity} <- ActivityPub.block(blocker, blocked, id, false) do - User.unfollow(blocker, blocked) - User.block(blocker, blocked) - {:ok, activity} - else - _e -> :error - end - end - def handle_incoming( %{ "type" => "Undo", @@ -828,7 +794,7 @@ def handle_incoming( } = data, _options ) - when type in ["Like", "EmojiReact", "Announce"] do + when type in ["Like", "EmojiReact", "Announce", "Block"] do with {:ok, activity, _} <- Pipeline.common_pipeline(data, local: false) do {:ok, activity} end @@ -852,6 +818,21 @@ def handle_incoming( end end + def handle_incoming( + %{"type" => "Block", "object" => blocked, "actor" => blocker, "id" => id} = _data, + _options + ) do + with %User{local: true} = blocked = User.get_cached_by_ap_id(blocked), + {:ok, %User{} = blocker} = User.get_or_fetch_by_ap_id(blocker), + {:ok, activity} <- ActivityPub.block(blocker, blocked, id, false) do + User.unfollow(blocker, blocked) + User.block(blocker, blocked) + {:ok, activity} + else + _e -> :error + end + end + def handle_incoming( %{ "type" => "Move", diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 2d685ecc0..95fb382f0 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -562,45 +562,6 @@ def make_announce_data( |> maybe_put("id", activity_id) end - @doc """ - Make unannounce activity data for the given actor and object - """ - def make_unannounce_data( - %User{ap_id: ap_id} = user, - %Activity{data: %{"context" => context, "object" => object}} = activity, - activity_id - ) do - object = Object.normalize(object) - - %{ - "type" => "Undo", - "actor" => ap_id, - "object" => activity.data, - "to" => [user.follower_address, object.data["actor"]], - "cc" => [Pleroma.Constants.as_public()], - "context" => context - } - |> maybe_put("id", activity_id) - end - - def make_unlike_data( - %User{ap_id: ap_id} = user, - %Activity{data: %{"context" => context, "object" => object}} = activity, - activity_id - ) do - object = Object.normalize(object) - - %{ - "type" => "Undo", - "actor" => ap_id, - "object" => activity.data, - "to" => [user.follower_address, object.data["actor"]], - "cc" => [Pleroma.Constants.as_public()], - "context" => context - } - |> maybe_put("id", activity_id) - end - def make_undo_data( %User{ap_id: actor, follower_address: follower_address}, %Activity{ @@ -688,16 +649,6 @@ def make_block_data(blocker, blocked, activity_id) do |> maybe_put("id", activity_id) end - def make_unblock_data(blocker, blocked, block_activity, activity_id) do - %{ - "type" => "Undo", - "actor" => blocker.ap_id, - "to" => [blocked.ap_id], - "object" => block_activity.data - } - |> maybe_put("id", activity_id) - end - #### Create-related helpers def make_create_data(params, additional) do diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index fc8246871..2a1eb7f37 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -24,6 +24,14 @@ defmodule Pleroma.Web.CommonAPI do require Pleroma.Constants require Logger + def unblock(blocker, blocked) do + with %Activity{} = block <- Utils.fetch_latest_block(blocker, blocked), + {:ok, unblock_data, _} <- Builder.undo(blocker, block), + {:ok, unblock, _} <- Pipeline.common_pipeline(unblock_data, local: true) do + {:ok, unblock} + end + end + def follow(follower, followed) do timeout = Pleroma.Config.get([:activitypub, :follow_handshake_timeout]) diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 61b0e2f63..2b208ddab 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -356,8 +356,7 @@ def block(%{assigns: %{user: blocker, account: blocked}} = conn, _params) do @doc "POST /api/v1/accounts/:id/unblock" def unblock(%{assigns: %{user: blocker, account: blocked}} = conn, _params) do - with {:ok, _user_block} <- User.unblock(blocker, blocked), - {:ok, _activity} <- ActivityPub.unblock(blocker, blocked) do + with {:ok, _activity} <- CommonAPI.unblock(blocker, blocked) do render(conn, "relationship.json", user: blocker, target: blocked) else {:error, message} -> json_response(conn, :forbidden, %{error: message}) diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index 2c3d354f2..7824095c7 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -1114,7 +1114,7 @@ test "creates an undo activity for a pending follow request" do end end - describe "blocking / unblocking" do + describe "blocking" do test "reverts block activity on error" do [blocker, blocked] = insert_list(2, :user) @@ -1136,38 +1136,6 @@ test "creates a block activity" do assert activity.data["actor"] == blocker.ap_id assert activity.data["object"] == blocked.ap_id end - - test "reverts unblock activity on error" do - [blocker, blocked] = insert_list(2, :user) - {:ok, block_activity} = ActivityPub.block(blocker, blocked) - - with_mock(Utils, [:passthrough], maybe_federate: fn _ -> {:error, :reverted} end) do - assert {:error, :reverted} = ActivityPub.unblock(blocker, blocked) - end - - assert block_activity.data["type"] == "Block" - assert block_activity.data["actor"] == blocker.ap_id - - assert Repo.aggregate(Activity, :count, :id) == 1 - assert Repo.aggregate(Object, :count, :id) == 1 - end - - test "creates an undo activity for the last block" do - blocker = insert(:user) - blocked = insert(:user) - - {:ok, block_activity} = ActivityPub.block(blocker, blocked) - {:ok, activity} = ActivityPub.unblock(blocker, blocked) - - assert activity.data["type"] == "Undo" - assert activity.data["actor"] == blocker.ap_id - - embedded_object = activity.data["object"] - assert is_map(embedded_object) - assert embedded_object["type"] == "Block" - assert embedded_object["object"] == blocked.ap_id - assert embedded_object["id"] == block_activity.data["id"] - end end describe "deletion" do diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index 00241320b..f41a7f3c1 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -9,6 +9,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do alias Pleroma.Notification alias Pleroma.Object alias Pleroma.Repo + alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Builder alias Pleroma.Web.ActivityPub.SideEffects @@ -24,6 +25,8 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do {:ok, like} = CommonAPI.favorite(user, post.id) {:ok, reaction, _} = CommonAPI.react_with_emoji(post.id, user, "👍") {:ok, announce, _} = CommonAPI.repeat(post.id, user) + {:ok, block} = ActivityPub.block(user, poster) + User.block(user, poster) {:ok, undo_data, _meta} = Builder.undo(user, like) {:ok, like_undo, _meta} = ActivityPub.persist(undo_data, local: true) @@ -34,6 +37,9 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do {:ok, undo_data, _meta} = Builder.undo(user, announce) {:ok, announce_undo, _meta} = ActivityPub.persist(undo_data, local: true) + {:ok, undo_data, _meta} = Builder.undo(user, block) + {:ok, block_undo, _meta} = ActivityPub.persist(undo_data, local: true) + %{ like_undo: like_undo, post: post, @@ -41,10 +47,27 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do reaction_undo: reaction_undo, reaction: reaction, announce_undo: announce_undo, - announce: announce + announce: announce, + block_undo: block_undo, + block: block, + poster: poster, + user: user } end + test "deletes the original block", %{block_undo: block_undo, block: block} do + {:ok, _block_undo, _} = SideEffects.handle(block_undo) + refute Activity.get_by_id(block.id) + end + + test "unblocks the blocked user", %{block_undo: block_undo, block: block} do + blocker = User.get_by_ap_id(block.data["actor"]) + blocked = User.get_by_ap_id(block.data["object"]) + + {:ok, _block_undo, _} = SideEffects.handle(block_undo) + refute User.blocks?(blocker, blocked) + end + test "an announce undo removes the announce from the object", %{ announce_undo: announce_undo, post: post diff --git a/test/web/activity_pub/transmogrifier/undo_handling_test.exs b/test/web/activity_pub/transmogrifier/undo_handling_test.exs index 281cf5b0d..6f5e61ac3 100644 --- a/test/web/activity_pub/transmogrifier/undo_handling_test.exs +++ b/test/web/activity_pub/transmogrifier/undo_handling_test.exs @@ -176,9 +176,7 @@ test "it works for incoming unblocks with an existing block" do {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) assert data["type"] == "Undo" - assert data["object"]["type"] == "Block" - assert data["object"]["object"] == user.ap_id - assert data["actor"] == "http://mastodon.example.org/users/admin" + assert data["object"] == block_data["id"] blocker = User.get_cached_by_ap_id(data["actor"]) diff --git a/test/web/activity_pub/utils_test.exs b/test/web/activity_pub/utils_test.exs index b0bfed917..b8d811c73 100644 --- a/test/web/activity_pub/utils_test.exs +++ b/test/web/activity_pub/utils_test.exs @@ -102,34 +102,6 @@ test "works with an object has tags as map" do end end - describe "make_unlike_data/3" do - test "returns data for unlike activity" do - user = insert(:user) - like_activity = insert(:like_activity, data_attrs: %{"context" => "test context"}) - - object = Object.normalize(like_activity.data["object"]) - - assert Utils.make_unlike_data(user, like_activity, nil) == %{ - "type" => "Undo", - "actor" => user.ap_id, - "object" => like_activity.data, - "to" => [user.follower_address, object.data["actor"]], - "cc" => [Pleroma.Constants.as_public()], - "context" => like_activity.data["context"] - } - - assert Utils.make_unlike_data(user, like_activity, "9mJEZK0tky1w2xD2vY") == %{ - "type" => "Undo", - "actor" => user.ap_id, - "object" => like_activity.data, - "to" => [user.follower_address, object.data["actor"]], - "cc" => [Pleroma.Constants.as_public()], - "context" => like_activity.data["context"], - "id" => "9mJEZK0tky1w2xD2vY" - } - end - end - describe "make_like_data" do setup do user = insert(:user) From 0a1394cc1a38ce66b1b30d728856ae891aa3d7b0 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 5 May 2020 20:14:22 +0400 Subject: [PATCH 475/581] Add OpenAPI spec for PollController --- .../web/api_spec/operations/poll_operation.ex | 76 +++++++++++++++++++ lib/pleroma/web/api_spec/schemas/poll.ex | 62 +++++++++++++-- .../controllers/poll_controller.ex | 8 +- .../controllers/poll_controller_test.exs | 38 +++++++--- 4 files changed, 162 insertions(+), 22 deletions(-) create mode 100644 lib/pleroma/web/api_spec/operations/poll_operation.ex diff --git a/lib/pleroma/web/api_spec/operations/poll_operation.ex b/lib/pleroma/web/api_spec/operations/poll_operation.ex new file mode 100644 index 000000000..b953323e9 --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/poll_operation.ex @@ -0,0 +1,76 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.PollOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.ApiError + alias Pleroma.Web.ApiSpec.Schemas.FlakeID + alias Pleroma.Web.ApiSpec.Schemas.Poll + + import Pleroma.Web.ApiSpec.Helpers + + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + def show_operation do + %Operation{ + tags: ["Polls"], + summary: "View a poll", + security: [%{"oAuth" => ["read:statuses"]}], + parameters: [id_param()], + operationId: "PollController.show", + responses: %{ + 200 => Operation.response("Poll", "application/json", Poll), + 404 => Operation.response("Error", "application/json", ApiError) + } + } + end + + def vote_operation do + %Operation{ + tags: ["Polls"], + summary: "Block a domain", + parameters: [id_param()], + operationId: "PollController.vote", + requestBody: vote_request(), + security: [%{"oAuth" => ["write:statuses"]}], + responses: %{ + 200 => Operation.response("Poll", "application/json", Poll), + 422 => Operation.response("Error", "application/json", ApiError), + 404 => Operation.response("Error", "application/json", ApiError) + } + } + end + + defp id_param do + Operation.parameter(:id, :path, FlakeID, "Poll ID", + example: "123", + required: true + ) + end + + defp vote_request do + request_body( + "Parameters", + %Schema{ + type: :object, + properties: %{ + choices: %Schema{ + type: :array, + items: %Schema{type: :integer}, + description: "Array of own votes containing index for each option (starting from 0)" + } + }, + required: [:choices] + }, + required: true, + example: %{ + "choices" => [0, 1, 2] + } + ) + end +end diff --git a/lib/pleroma/web/api_spec/schemas/poll.ex b/lib/pleroma/web/api_spec/schemas/poll.ex index 0474b550b..c62096db0 100644 --- a/lib/pleroma/web/api_spec/schemas/poll.ex +++ b/lib/pleroma/web/api_spec/schemas/poll.ex @@ -11,26 +11,72 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Poll do OpenApiSpex.schema(%{ title: "Poll", - description: "Response schema for account custom fields", + description: "Represents a poll attached to a status", type: :object, properties: %{ id: FlakeID, - expires_at: %Schema{type: :string, format: "date-time"}, - expired: %Schema{type: :boolean}, - multiple: %Schema{type: :boolean}, - votes_count: %Schema{type: :integer}, - voted: %Schema{type: :boolean}, - emojis: %Schema{type: :array, items: Emoji}, + expires_at: %Schema{ + type: :string, + format: :"date-time", + nullable: true, + description: "When the poll ends" + }, + expired: %Schema{type: :boolean, description: "Is the poll currently expired?"}, + multiple: %Schema{ + type: :boolean, + description: "Does the poll allow multiple-choice answers?" + }, + votes_count: %Schema{ + type: :integer, + nullable: true, + description: "How many votes have been received. Number, or null if `multiple` is false." + }, + voted: %Schema{ + type: :boolean, + nullable: true, + description: + "When called with a user token, has the authorized user voted? Boolean, or null if no current user." + }, + emojis: %Schema{ + type: :array, + items: Emoji, + description: "Custom emoji to be used for rendering poll options." + }, options: %Schema{ type: :array, items: %Schema{ + title: "PollOption", type: :object, properties: %{ title: %Schema{type: :string}, votes_count: %Schema{type: :integer} } - } + }, + description: "Possible answers for the poll." } + }, + example: %{ + id: "34830", + expires_at: "2019-12-05T04:05:08.302Z", + expired: true, + multiple: false, + votes_count: 10, + voters_count: nil, + voted: true, + own_votes: [ + 1 + ], + options: [ + %{ + title: "accept", + votes_count: 6 + }, + %{ + title: "deny", + votes_count: 4 + } + ], + emojis: [] } }) end diff --git a/lib/pleroma/web/mastodon_api/controllers/poll_controller.ex b/lib/pleroma/web/mastodon_api/controllers/poll_controller.ex index af9b66eff..db46ffcfc 100644 --- a/lib/pleroma/web/mastodon_api/controllers/poll_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/poll_controller.ex @@ -15,6 +15,8 @@ defmodule Pleroma.Web.MastodonAPI.PollController do action_fallback(Pleroma.Web.MastodonAPI.FallbackController) + plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug( OAuthScopesPlug, %{scopes: ["read:statuses"], fallback: :proceed_unauthenticated} when action == :show @@ -22,8 +24,10 @@ defmodule Pleroma.Web.MastodonAPI.PollController do plug(OAuthScopesPlug, %{scopes: ["write:statuses"]} when action == :vote) + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PollOperation + @doc "GET /api/v1/polls/:id" - def show(%{assigns: %{user: user}} = conn, %{"id" => id}) do + def show(%{assigns: %{user: user}} = conn, %{id: id}) do with %Object{} = object <- Object.get_by_id_and_maybe_refetch(id, interval: 60), %Activity{} = activity <- Activity.get_create_by_object_ap_id(object.data["id"]), true <- Visibility.visible_for_user?(activity, user) do @@ -35,7 +39,7 @@ def show(%{assigns: %{user: user}} = conn, %{"id" => id}) do end @doc "POST /api/v1/polls/:id/votes" - def vote(%{assigns: %{user: user}} = conn, %{"id" => id, "choices" => choices}) do + def vote(%{assigns: %{user: user}, body_params: %{choices: choices}} = conn, %{id: id}) do with %Object{data: %{"type" => "Question"}} = object <- Object.get_by_id(id), %Activity{} = activity <- Activity.get_create_by_object_ap_id(object.data["id"]), true <- Visibility.visible_for_user?(activity, user), diff --git a/test/web/mastodon_api/controllers/poll_controller_test.exs b/test/web/mastodon_api/controllers/poll_controller_test.exs index 88b13a25a..d8f34aa86 100644 --- a/test/web/mastodon_api/controllers/poll_controller_test.exs +++ b/test/web/mastodon_api/controllers/poll_controller_test.exs @@ -24,7 +24,7 @@ test "returns poll entity for object id", %{user: user, conn: conn} do conn = get(conn, "/api/v1/polls/#{object.id}") - response = json_response(conn, 200) + response = json_response_and_validate_schema(conn, 200) id = to_string(object.id) assert %{"id" => ^id, "expired" => false, "multiple" => false} = response end @@ -43,7 +43,7 @@ test "does not expose polls for private statuses", %{conn: conn} do conn = get(conn, "/api/v1/polls/#{object.id}") - assert json_response(conn, 404) + assert json_response_and_validate_schema(conn, 404) end end @@ -65,9 +65,12 @@ test "votes are added to the poll", %{conn: conn} do object = Object.normalize(activity) - conn = post(conn, "/api/v1/polls/#{object.id}/votes", %{"choices" => [0, 1, 2]}) + conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/polls/#{object.id}/votes", %{"choices" => [0, 1, 2]}) - assert json_response(conn, 200) + assert json_response_and_validate_schema(conn, 200) object = Object.get_by_id(object.id) assert Enum.all?(object.data["anyOf"], fn %{"replies" => %{"totalItems" => total_items}} -> @@ -85,8 +88,9 @@ test "author can't vote", %{user: user, conn: conn} do object = Object.normalize(activity) assert conn + |> put_req_header("content-type", "application/json") |> post("/api/v1/polls/#{object.id}/votes", %{"choices" => [1]}) - |> json_response(422) == %{"error" => "Poll's author can't vote"} + |> json_response_and_validate_schema(422) == %{"error" => "Poll's author can't vote"} object = Object.get_by_id(object.id) @@ -105,8 +109,9 @@ test "does not allow multiple choices on a single-choice question", %{conn: conn object = Object.normalize(activity) assert conn + |> put_req_header("content-type", "application/json") |> post("/api/v1/polls/#{object.id}/votes", %{"choices" => [0, 1]}) - |> json_response(422) == %{"error" => "Too many choices"} + |> json_response_and_validate_schema(422) == %{"error" => "Too many choices"} object = Object.get_by_id(object.id) @@ -126,15 +131,21 @@ test "does not allow choice index to be greater than options count", %{conn: con object = Object.normalize(activity) - conn = post(conn, "/api/v1/polls/#{object.id}/votes", %{"choices" => [2]}) + conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/polls/#{object.id}/votes", %{"choices" => [2]}) - assert json_response(conn, 422) == %{"error" => "Invalid indices"} + assert json_response_and_validate_schema(conn, 422) == %{"error" => "Invalid indices"} end test "returns 404 error when object is not exist", %{conn: conn} do - conn = post(conn, "/api/v1/polls/1/votes", %{"choices" => [0]}) + conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/polls/1/votes", %{"choices" => [0]}) - assert json_response(conn, 404) == %{"error" => "Record not found"} + assert json_response_and_validate_schema(conn, 404) == %{"error" => "Record not found"} end test "returns 404 when poll is private and not available for user", %{conn: conn} do @@ -149,9 +160,12 @@ test "returns 404 when poll is private and not available for user", %{conn: conn object = Object.normalize(activity) - conn = post(conn, "/api/v1/polls/#{object.id}/votes", %{"choices" => [0]}) + conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/polls/#{object.id}/votes", %{"choices" => [0]}) - assert json_response(conn, 404) == %{"error" => "Record not found"} + assert json_response_and_validate_schema(conn, 404) == %{"error" => "Record not found"} end end end From 6ba25d11973e56008e5d674313421197ff418d6d Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 5 May 2020 23:19:16 +0400 Subject: [PATCH 476/581] Add Attachment schema --- .../web/api_spec/schemas/attachment.ex | 68 +++++++++++++++++++ .../web/api_spec/schemas/scheduled_status.ex | 53 +++++++++++++++ lib/pleroma/web/api_spec/schemas/status.ex | 18 +---- 3 files changed, 123 insertions(+), 16 deletions(-) create mode 100644 lib/pleroma/web/api_spec/schemas/attachment.ex create mode 100644 lib/pleroma/web/api_spec/schemas/scheduled_status.ex diff --git a/lib/pleroma/web/api_spec/schemas/attachment.ex b/lib/pleroma/web/api_spec/schemas/attachment.ex new file mode 100644 index 000000000..c146c416e --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/attachment.ex @@ -0,0 +1,68 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.Attachment do + alias OpenApiSpex.Schema + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "Attachment", + description: "Represents a file or media attachment that can be added to a status.", + type: :object, + requried: [:id, :url, :preview_url], + properties: %{ + id: %Schema{type: :string}, + url: %Schema{ + type: :string, + format: :uri, + description: "The location of the original full-size attachment" + }, + remote_url: %Schema{ + type: :string, + format: :uri, + description: + "The location of the full-size original attachment on the remote website. String (URL), or null if the attachment is local", + nullable: true + }, + preview_url: %Schema{ + type: :string, + format: :uri, + description: "The location of a scaled-down preview of the attachment" + }, + text_url: %Schema{ + type: :string, + format: :uri, + description: "A shorter URL for the attachment" + }, + description: %Schema{ + type: :string, + nullable: true, + description: + "Alternate text that describes what is in the media attachment, to be used for the visually impaired or when media attachments do not load" + }, + type: %Schema{ + type: :string, + enum: ["image", "video", "audio", "unknown"], + description: "The type of the attachment" + }, + pleroma: %Schema{ + type: :object, + properties: %{ + mime_type: %Schema{type: :string, description: "mime type of the attachment"} + } + } + }, + example: %{ + id: "1638338801", + type: "image", + url: "someurl", + remote_url: "someurl", + preview_url: "someurl", + text_url: "someurl", + description: nil, + pleroma: %{mime_type: "image/png"} + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/scheduled_status.ex b/lib/pleroma/web/api_spec/schemas/scheduled_status.ex new file mode 100644 index 000000000..f0bc4ee3c --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/scheduled_status.ex @@ -0,0 +1,53 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.ScheduledStatus do + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope + alias Pleroma.Web.ApiSpec.Schemas.Poll + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "ScheduledStatus", + description: "Represents a status that will be published at a future scheduled date.", + type: :object, + required: [:id, :scheduled_at, :params], + properties: %{ + id: %Schema{type: :string}, + scheduled_at: %Schema{type: :string, format: :"date-time"}, + media_attachments: %Schema{type: :array, format: :"date-time"}, + params: %Schema{ + type: :object, + required: [:text, :visibility], + properties: %{ + text: %Schema{type: :string, nullable: true}, + media_ids: %Schema{type: :array, nullable: true, items: %Schema{type: :string}}, + sensitive: %Schema{type: :boolean, nullable: true}, + spoiler_text: %Schema{type: :string, nullable: true}, + visibility: %Schema{type: VisibilityScope, nullable: true}, + scheduled_at: %Schema{type: :string, format: :"date-time", nullable: true}, + poll: %Schema{type: Poll, nullable: true}, + in_reply_to_id: %Schema{type: :string, nullable: true} + } + } + }, + example: %{ + id: "3221", + scheduled_at: "2019-12-05T12:33:01.000Z", + params: %{ + text: "test content", + media_ids: nil, + sensitive: nil, + spoiler_text: nil, + visibility: nil, + scheduled_at: nil, + poll: nil, + idempotency: nil, + in_reply_to_id: nil + }, + media_attachments: [] + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/status.ex b/lib/pleroma/web/api_spec/schemas/status.ex index aef0588d4..d44636a48 100644 --- a/lib/pleroma/web/api_spec/schemas/status.ex +++ b/lib/pleroma/web/api_spec/schemas/status.ex @@ -5,6 +5,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do alias OpenApiSpex.Schema alias Pleroma.Web.ApiSpec.Schemas.Account + alias Pleroma.Web.ApiSpec.Schemas.Attachment alias Pleroma.Web.ApiSpec.Schemas.Emoji alias Pleroma.Web.ApiSpec.Schemas.FlakeID alias Pleroma.Web.ApiSpec.Schemas.Poll @@ -50,22 +51,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do language: %Schema{type: :string, nullable: true}, media_attachments: %Schema{ type: :array, - items: %Schema{ - type: :object, - properties: %{ - id: %Schema{type: :string}, - url: %Schema{type: :string, format: :uri}, - remote_url: %Schema{type: :string, format: :uri}, - preview_url: %Schema{type: :string, format: :uri}, - text_url: %Schema{type: :string, format: :uri}, - description: %Schema{type: :string}, - type: %Schema{type: :string, enum: ["image", "video", "audio", "unknown"]}, - pleroma: %Schema{ - type: :object, - properties: %{mime_type: %Schema{type: :string}} - } - } - } + items: Attachment }, mentions: %Schema{ type: :array, From 332e016bcdbda5dca90d916bc62a9c67544b5323 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 5 May 2020 23:42:18 +0400 Subject: [PATCH 477/581] Add OpenAPI spec for ScheduledActivityController --- .../scheduled_activity_operation.ex | 96 +++++++++++++++++++ .../web/api_spec/schemas/scheduled_status.ex | 7 +- .../scheduled_activity_controller.ex | 12 ++- test/support/helpers.ex | 8 +- .../scheduled_activity_controller_test.exs | 34 ++++--- .../mastodon_api/views/status_view_test.exs | 8 +- 6 files changed, 144 insertions(+), 21 deletions(-) create mode 100644 lib/pleroma/web/api_spec/operations/scheduled_activity_operation.ex diff --git a/lib/pleroma/web/api_spec/operations/scheduled_activity_operation.ex b/lib/pleroma/web/api_spec/operations/scheduled_activity_operation.ex new file mode 100644 index 000000000..fe675a923 --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/scheduled_activity_operation.ex @@ -0,0 +1,96 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.ScheduledActivityOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.ApiError + alias Pleroma.Web.ApiSpec.Schemas.FlakeID + alias Pleroma.Web.ApiSpec.Schemas.ScheduledStatus + + 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{ + tags: ["Scheduled Statuses"], + summary: "View scheduled statuses", + security: [%{"oAuth" => ["read:statuses"]}], + parameters: pagination_params(), + operationId: "ScheduledActivity.index", + responses: %{ + 200 => + Operation.response("Array of ScheduledStatus", "application/json", %Schema{ + type: :array, + items: ScheduledStatus + }) + } + } + end + + def show_operation do + %Operation{ + tags: ["Scheduled Statuses"], + summary: "View a single scheduled status", + security: [%{"oAuth" => ["read:statuses"]}], + parameters: [id_param()], + operationId: "ScheduledActivity.show", + responses: %{ + 200 => Operation.response("Scheduled Status", "application/json", ScheduledStatus), + 404 => Operation.response("Error", "application/json", ApiError) + } + } + end + + def update_operation do + %Operation{ + tags: ["Scheduled Statuses"], + summary: "Schedule a status", + operationId: "ScheduledActivity.update", + security: [%{"oAuth" => ["write:statuses"]}], + parameters: [id_param()], + requestBody: + request_body("Parameters", %Schema{ + type: :object, + properties: %{ + scheduled_at: %Schema{ + type: :string, + format: :"date-time", + description: + "ISO 8601 Datetime at which the status will be published. Must be at least 5 minutes into the future." + } + } + }), + responses: %{ + 200 => Operation.response("Scheduled Status", "application/json", ScheduledStatus), + 404 => Operation.response("Error", "application/json", ApiError) + } + } + end + + def delete_operation do + %Operation{ + tags: ["Scheduled Statuses"], + summary: "Cancel a scheduled status", + security: [%{"oAuth" => ["write:statuses"]}], + parameters: [id_param()], + operationId: "ScheduledActivity.delete", + responses: %{ + 200 => Operation.response("Empty object", "application/json", %Schema{type: :object}), + 404 => Operation.response("Error", "application/json", ApiError) + } + } + end + + defp id_param do + Operation.parameter(:id, :path, FlakeID, "Poll ID", + example: "123", + required: true + ) + end +end diff --git a/lib/pleroma/web/api_spec/schemas/scheduled_status.ex b/lib/pleroma/web/api_spec/schemas/scheduled_status.ex index f0bc4ee3c..0520d0848 100644 --- a/lib/pleroma/web/api_spec/schemas/scheduled_status.ex +++ b/lib/pleroma/web/api_spec/schemas/scheduled_status.ex @@ -4,8 +4,9 @@ defmodule Pleroma.Web.ApiSpec.Schemas.ScheduledStatus do alias OpenApiSpex.Schema - alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope + alias Pleroma.Web.ApiSpec.Schemas.Attachment alias Pleroma.Web.ApiSpec.Schemas.Poll + alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope require OpenApiSpex @@ -17,7 +18,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.ScheduledStatus do properties: %{ id: %Schema{type: :string}, scheduled_at: %Schema{type: :string, format: :"date-time"}, - media_attachments: %Schema{type: :array, format: :"date-time"}, + media_attachments: %Schema{type: :array, items: Attachment}, params: %Schema{ type: :object, required: [:text, :visibility], @@ -47,7 +48,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.ScheduledStatus do idempotency: nil, in_reply_to_id: nil }, - media_attachments: [] + media_attachments: [Attachment.schema().example] } }) end diff --git a/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex b/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex index 899b78873..1719c67ea 100644 --- a/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex @@ -11,17 +11,21 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityController do alias Pleroma.ScheduledActivity alias Pleroma.Web.MastodonAPI.MastodonAPI - plug(:assign_scheduled_activity when action != :index) - @oauth_read_actions [:show, :index] + plug(Pleroma.Web.ApiSpec.CastAndValidate) plug(OAuthScopesPlug, %{scopes: ["read:statuses"]} when action in @oauth_read_actions) plug(OAuthScopesPlug, %{scopes: ["write:statuses"]} when action not in @oauth_read_actions) + plug(:assign_scheduled_activity when action != :index) action_fallback(Pleroma.Web.MastodonAPI.FallbackController) + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.ScheduledActivityOperation + @doc "GET /api/v1/scheduled_statuses" def index(%{assigns: %{user: user}} = conn, params) do + params = Map.new(params, fn {key, value} -> {to_string(key), value} end) + with scheduled_activities <- MastodonAPI.get_scheduled_activities(user, params) do conn |> add_link_headers(scheduled_activities) @@ -35,7 +39,7 @@ def show(%{assigns: %{scheduled_activity: scheduled_activity}} = conn, _params) end @doc "PUT /api/v1/scheduled_statuses/:id" - def update(%{assigns: %{scheduled_activity: scheduled_activity}} = conn, params) do + def update(%{assigns: %{scheduled_activity: scheduled_activity}, body_params: params} = conn, _) do with {:ok, scheduled_activity} <- ScheduledActivity.update(scheduled_activity, params) do render(conn, "show.json", scheduled_activity: scheduled_activity) end @@ -48,7 +52,7 @@ def delete(%{assigns: %{scheduled_activity: scheduled_activity}} = conn, _params end end - defp assign_scheduled_activity(%{assigns: %{user: user}, params: %{"id" => id}} = conn, _) do + defp assign_scheduled_activity(%{assigns: %{user: user}, params: %{id: id}} = conn, _) do case ScheduledActivity.get(user, id) do %ScheduledActivity{} = activity -> assign(conn, :scheduled_activity, activity) nil -> Pleroma.Web.MastodonAPI.FallbackController.call(conn, {:error, :not_found}) |> halt() diff --git a/test/support/helpers.ex b/test/support/helpers.ex index e68e9bfd2..26281b45e 100644 --- a/test/support/helpers.ex +++ b/test/support/helpers.ex @@ -40,12 +40,18 @@ defmacro __using__(_opts) do clear_config: 2 ] - def to_datetime(naive_datetime) do + def to_datetime(%NaiveDateTime{} = naive_datetime) do naive_datetime |> DateTime.from_naive!("Etc/UTC") |> DateTime.truncate(:second) end + def to_datetime(datetime) when is_binary(datetime) do + datetime + |> NaiveDateTime.from_iso8601!() + |> to_datetime() + end + def collect_ids(collection) do collection |> Enum.map(& &1.id) diff --git a/test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs b/test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs index f86274d57..1ff871c89 100644 --- a/test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs +++ b/test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs @@ -24,19 +24,19 @@ test "shows scheduled activities" do # min_id conn_res = get(conn, "/api/v1/scheduled_statuses?limit=2&min_id=#{scheduled_activity_id1}") - result = json_response(conn_res, 200) + result = json_response_and_validate_schema(conn_res, 200) assert [%{"id" => ^scheduled_activity_id3}, %{"id" => ^scheduled_activity_id2}] = result # since_id conn_res = get(conn, "/api/v1/scheduled_statuses?limit=2&since_id=#{scheduled_activity_id1}") - result = json_response(conn_res, 200) + result = json_response_and_validate_schema(conn_res, 200) assert [%{"id" => ^scheduled_activity_id4}, %{"id" => ^scheduled_activity_id3}] = result # max_id conn_res = get(conn, "/api/v1/scheduled_statuses?limit=2&max_id=#{scheduled_activity_id4}") - result = json_response(conn_res, 200) + result = json_response_and_validate_schema(conn_res, 200) assert [%{"id" => ^scheduled_activity_id3}, %{"id" => ^scheduled_activity_id2}] = result end @@ -46,12 +46,12 @@ test "shows a scheduled activity" do res_conn = get(conn, "/api/v1/scheduled_statuses/#{scheduled_activity.id}") - assert %{"id" => scheduled_activity_id} = json_response(res_conn, 200) + assert %{"id" => scheduled_activity_id} = json_response_and_validate_schema(res_conn, 200) assert scheduled_activity_id == scheduled_activity.id |> to_string() res_conn = get(conn, "/api/v1/scheduled_statuses/404") - assert %{"error" => "Record not found"} = json_response(res_conn, 404) + assert %{"error" => "Record not found"} = json_response_and_validate_schema(res_conn, 404) end test "updates a scheduled activity" do @@ -74,22 +74,32 @@ test "updates a scheduled activity" do assert job.args == %{"activity_id" => scheduled_activity.id} assert DateTime.truncate(job.scheduled_at, :second) == to_datetime(scheduled_at) - new_scheduled_at = Timex.shift(NaiveDateTime.utc_now(), minutes: 120) + new_scheduled_at = + NaiveDateTime.utc_now() + |> Timex.shift(minutes: 120) + |> Timex.format!("%Y-%m-%dT%H:%M:%S.%fZ", :strftime) res_conn = - put(conn, "/api/v1/scheduled_statuses/#{scheduled_activity.id}", %{ + conn + |> put_req_header("content-type", "application/json") + |> put("/api/v1/scheduled_statuses/#{scheduled_activity.id}", %{ scheduled_at: new_scheduled_at }) - assert %{"scheduled_at" => expected_scheduled_at} = json_response(res_conn, 200) + assert %{"scheduled_at" => expected_scheduled_at} = + json_response_and_validate_schema(res_conn, 200) + assert expected_scheduled_at == Pleroma.Web.CommonAPI.Utils.to_masto_date(new_scheduled_at) job = refresh_record(job) assert DateTime.truncate(job.scheduled_at, :second) == to_datetime(new_scheduled_at) - res_conn = put(conn, "/api/v1/scheduled_statuses/404", %{scheduled_at: new_scheduled_at}) + res_conn = + conn + |> put_req_header("content-type", "application/json") + |> put("/api/v1/scheduled_statuses/404", %{scheduled_at: new_scheduled_at}) - assert %{"error" => "Record not found"} = json_response(res_conn, 404) + assert %{"error" => "Record not found"} = json_response_and_validate_schema(res_conn, 404) end test "deletes a scheduled activity" do @@ -115,7 +125,7 @@ test "deletes a scheduled activity" do |> assign(:user, user) |> delete("/api/v1/scheduled_statuses/#{scheduled_activity.id}") - assert %{} = json_response(res_conn, 200) + assert %{} = json_response_and_validate_schema(res_conn, 200) refute Repo.get(ScheduledActivity, scheduled_activity.id) refute Repo.get(Oban.Job, job.id) @@ -124,6 +134,6 @@ test "deletes a scheduled activity" do |> assign(:user, user) |> delete("/api/v1/scheduled_statuses/#{scheduled_activity.id}") - assert %{"error" => "Record not found"} = json_response(res_conn, 404) + assert %{"error" => "Record not found"} = json_response_and_validate_schema(res_conn, 404) end end diff --git a/test/web/mastodon_api/views/status_view_test.exs b/test/web/mastodon_api/views/status_view_test.exs index 6791c2fb0..451723e60 100644 --- a/test/web/mastodon_api/views/status_view_test.exs +++ b/test/web/mastodon_api/views/status_view_test.exs @@ -402,11 +402,17 @@ test "attachments" do pleroma: %{mime_type: "image/png"} } + api_spec = Pleroma.Web.ApiSpec.spec() + assert expected == StatusView.render("attachment.json", %{attachment: object}) + OpenApiSpex.TestAssertions.assert_schema(expected, "Attachment", api_spec) # If theres a "id", use that instead of the generated one object = Map.put(object, "id", 2) - assert %{id: "2"} = StatusView.render("attachment.json", %{attachment: object}) + result = StatusView.render("attachment.json", %{attachment: object}) + + assert %{id: "2"} = result + OpenApiSpex.TestAssertions.assert_schema(result, "Attachment", api_spec) end test "put the url advertised in the Activity in to the url attribute" do From 06c69c0a0a03d7797213fc520b6bf24fab65a7e3 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 6 May 2020 14:18:19 +0400 Subject: [PATCH 478/581] Fix description --- lib/pleroma/web/api_spec/operations/poll_operation.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/operations/poll_operation.ex b/lib/pleroma/web/api_spec/operations/poll_operation.ex index b953323e9..e15c7dc95 100644 --- a/lib/pleroma/web/api_spec/operations/poll_operation.ex +++ b/lib/pleroma/web/api_spec/operations/poll_operation.ex @@ -33,7 +33,7 @@ def show_operation do def vote_operation do %Operation{ tags: ["Polls"], - summary: "Block a domain", + summary: "Vote on a poll", parameters: [id_param()], operationId: "PollController.vote", requestBody: vote_request(), From bd261309cc27ebf5d2f78ea3c1474fe71ae8046d Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 6 May 2020 15:08:38 +0300 Subject: [PATCH 479/581] added `unread_notifications_count` for `/api/v1/accounts/verify_credentials` --- docs/API/differences_in_mastoapi_responses.md | 1 + lib/pleroma/notification.ex | 8 +++++ .../web/mastodon_api/views/account_view.ex | 29 ++++++++++++++++--- .../controllers/account_controller_test.exs | 3 ++ .../mastodon_api/views/account_view_test.exs | 18 ++++++++++++ 5 files changed, 55 insertions(+), 4 deletions(-) diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index 8d1da936f..6d37d9008 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -61,6 +61,7 @@ Has these additional fields under the `pleroma` object: - `deactivated`: boolean, true when the user is deactivated - `allow_following_move`: boolean, true when the user allows automatically follow moved following accounts - `unread_conversation_count`: The count of unread conversations. Only returned to the account owner. +- `unread_notifications_count`: The count of unread notifications. Only returned to the account owner. ### Source diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 7fd1b2ff6..c135306ca 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -36,6 +36,14 @@ defmodule Pleroma.Notification do timestamps() end + @spec unread_notifications_count(User.t()) :: integer() + def unread_notifications_count(%User{id: user_id}) do + from(q in __MODULE__, + where: q.user_id == ^user_id and q.seen == false + ) + |> Repo.aggregate(:count, :id) + end + def changeset(%Notification{} = notification, attrs) do notification |> cast(attrs, [:seen]) diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index b4b61e74c..420bd586f 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -36,9 +36,11 @@ def render("index.json", %{users: users} = opts) do end def render("show.json", %{user: user} = opts) do - if User.visible_for?(user, opts[:for]), - do: do_render("show.json", opts), - else: %{} + if User.visible_for?(user, opts[:for]) do + do_render("show.json", opts) + else + %{} + end end def render("mention.json", %{user: user}) do @@ -221,7 +223,7 @@ defp do_render("show.json", %{user: user} = opts) do fields: user.fields, bot: bot, source: %{ - note: (user.bio || "") |> String.replace(~r(
    ), "\n") |> Pleroma.HTML.strip_tags(), + note: prepare_user_bio(user), sensitive: false, fields: user.raw_fields, pleroma: %{ @@ -253,8 +255,17 @@ defp do_render("show.json", %{user: user} = opts) do |> maybe_put_follow_requests_count(user, opts[:for]) |> maybe_put_allow_following_move(user, opts[:for]) |> maybe_put_unread_conversation_count(user, opts[:for]) + |> maybe_put_unread_notification_count(user, opts[:for]) end + defp prepare_user_bio(%User{bio: ""}), do: "" + + defp prepare_user_bio(%User{bio: bio}) when is_binary(bio) do + bio |> String.replace(~r(
    ), "\n") |> Pleroma.HTML.strip_tags() + end + + defp prepare_user_bio(_), do: "" + defp username_from_nickname(string) when is_binary(string) do hd(String.split(string, "@")) end @@ -350,6 +361,16 @@ defp maybe_put_unread_conversation_count(data, %User{id: user_id} = user, %User{ defp maybe_put_unread_conversation_count(data, _, _), do: data + defp maybe_put_unread_notification_count(data, %User{id: user_id}, %User{id: user_id} = user) do + Kernel.put_in( + data, + [:pleroma, :unread_notifications_count], + Pleroma.Notification.unread_notifications_count(user) + ) + end + + defp maybe_put_unread_notification_count(data, _, _), do: data + defp image_url(%{"url" => [%{"href" => href} | _]}), do: href defp image_url(_), do: nil end diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index b9da7e924..256a8b304 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -1196,12 +1196,15 @@ test "returns lists to which the account belongs" do describe "verify_credentials" do test "verify_credentials" do %{user: user, conn: conn} = oauth_access(["read:accounts"]) + [notification | _] = insert_list(7, :notification, user: user) + Pleroma.Notification.set_read_up_to(user, notification.id) conn = get(conn, "/api/v1/accounts/verify_credentials") response = json_response_and_validate_schema(conn, 200) assert %{"id" => id, "source" => %{"privacy" => "public"}} = response assert response["pleroma"]["chat_token"] + assert response["pleroma"]["unread_notifications_count"] == 6 assert id == to_string(user.id) end diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index 85fa4f6a2..5fb162141 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -466,6 +466,24 @@ test "shows unread_conversation_count only to the account owner" do :unread_conversation_count ] == 1 end + + test "shows unread_count only to the account owner" do + user = insert(:user) + insert_list(7, :notification, user: user) + other_user = insert(:user) + + user = User.get_cached_by_ap_id(user.ap_id) + + assert AccountView.render( + "show.json", + %{user: user, for: other_user} + )[:pleroma][:unread_notifications_count] == nil + + assert AccountView.render( + "show.json", + %{user: user, for: user} + )[:pleroma][:unread_notifications_count] == 7 + end end describe "follow requests counter" do From 3c42caa85c51b4eaa447d6aafcfaa0bfceaa9beb Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 6 May 2020 16:20:47 +0300 Subject: [PATCH 480/581] apache chain issue fix --- installation/pleroma-apache.conf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/installation/pleroma-apache.conf b/installation/pleroma-apache.conf index b5640ac3d..0d627f2d7 100644 --- a/installation/pleroma-apache.conf +++ b/installation/pleroma-apache.conf @@ -32,9 +32,8 @@ CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on - SSLCertificateFile /etc/letsencrypt/live/${servername}/cert.pem + SSLCertificateFile /etc/letsencrypt/live/${servername}/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/${servername}/privkey.pem - SSLCertificateChainFile /etc/letsencrypt/live/${servername}/fullchain.pem # Mozilla modern configuration, tweak to your needs SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 From d7537a37c77dfef469106f12f0dd3649aad197da Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 6 May 2020 08:55:09 -0500 Subject: [PATCH 481/581] Add :chat to cheatsheet --- docs/configuration/cheatsheet.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 705c4c15e..2524918d4 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -8,6 +8,10 @@ For from source installations Pleroma configuration works by first importing the To add configuration to your config file, you can copy it from the base config. The latest version of it can be viewed [here](https://git.pleroma.social/pleroma/pleroma/blob/develop/config/config.exs). You can also use this file if you don't know how an option is supposed to be formatted. +## :chat + +* `enabled` - Enables the backend chat. Defaults to `true`. + ## :instance * `name`: The instance’s name. * `email`: Email used to reach an Administrator/Moderator of the instance. From 4b00eb93fe2cef97a5570b9cc6e6844898d31b9a Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 6 May 2020 18:04:16 +0300 Subject: [PATCH 482/581] fix for syslog compile with updated rebar3 --- mix.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.lock b/mix.lock index ee9d93bfb..28287cf97 100644 --- a/mix.lock +++ b/mix.lock @@ -37,7 +37,7 @@ "ex_const": {:hex, :ex_const, "0.2.4", "d06e540c9d834865b012a17407761455efa71d0ce91e5831e86881b9c9d82448", [:mix], [], "hexpm", "96fd346610cc992b8f896ed26a98be82ac4efb065a0578f334a32d60a3ba9767"}, "ex_doc": {:hex, :ex_doc, "0.21.3", "857ec876b35a587c5d9148a2512e952e24c24345552259464b98bfbb883c7b42", [:mix], [{:earmark, "~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "0db1ee8d1547ab4877c5b5dffc6604ef9454e189928d5ba8967d4a58a801f161"}, "ex_machina": {:hex, :ex_machina, "2.3.0", "92a5ad0a8b10ea6314b876a99c8c9e3f25f4dde71a2a835845b136b9adaf199a", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "b84f6af156264530b312a8ab98ac6088f6b77ae5fe2058305c81434aa01fbaf9"}, - "ex_syslogger": {:hex, :ex_syslogger, "1.5.0", "bc936ee3fd13d9e592cb4c3a1e8a55fccd33b05e3aa7b185f211f3ed263ff8f0", [:mix], [{:poison, ">= 1.5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:syslog, "~> 1.0.5", [hex: :syslog, repo: "hexpm", optional: false]}], "hexpm", "f3b4b184dcdd5f356b7c26c6cd72ab0918ba9dfb4061ccfaf519e562942af87b"}, + "ex_syslogger": {:hex, :ex_syslogger, "1.5.2", "72b6aa2d47a236e999171f2e1ec18698740f40af0bd02c8c650bf5f1fd1bac79", [:mix], [{:poison, ">= 1.5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:syslog, "~> 1.1.0", [hex: :syslog, repo: "hexpm", optional: false]}], "hexpm", "ab9fab4136dbc62651ec6f16fa4842f10cf02ab4433fa3d0976c01be99398399"}, "excoveralls": {:hex, :excoveralls, "0.12.2", "a513defac45c59e310ac42fcf2b8ae96f1f85746410f30b1ff2b710a4b6cd44b", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "151c476331d49b45601ffc45f43cb3a8beb396b02a34e3777fea0ad34ae57d89"}, "fast_html": {:hex, :fast_html, "1.0.3", "2cc0d4b68496266a1530e0c852cafeaede0bd10cfdee26fda50dc696c203162f", [:make, :mix], [], "hexpm", "ab3d782b639d3c4655fbaec0f9d032c91f8cab8dd791ac7469c2381bc7c32f85"}, "fast_sanitize": {:hex, :fast_sanitize, "0.1.7", "2a7cd8734c88a2de6de55022104f8a3b87f1fdbe8bbf131d9049764b53d50d0d", [:mix], [{:fast_html, "~> 1.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f39fe8ea08fbac17487c30bf09b7d9f3e12472e51fb07a88ffeb8fd17da8ab67"}, @@ -102,7 +102,7 @@ "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.5", "6eaf7ad16cb568bb01753dbbd7a95ff8b91c7979482b95f38443fe2c8852a79b", [:make, :mix, :rebar3], [], "hexpm", "13104d7897e38ed7f044c4de953a6c28597d1c952075eb2e328bc6d6f2bfc496"}, "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.0.6", "995970c9aa7feb380ac493302138e308d6e04fd57da95b439a6df5bb3bf75076", [:rebar3], [], "hexpm", "769ddfabd0d2a16f3f9c17eb7509951e0ca4f68363fb26f2ee51a8ec4a49881a"}, + "syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"}, "telemetry": {:hex, :telemetry, "0.4.1", "ae2718484892448a24470e6aa341bc847c3277bfb8d4e9289f7474d752c09c7f", [:rebar3], [], "hexpm", "4738382e36a0a9a2b6e25d67c960e40e1a2c95560b9f936d8e29de8cd858480f"}, "tesla": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/tesla.git", "61b7503cef33f00834f78ddfafe0d5d9dec2270b", [ref: "61b7503cef33f00834f78ddfafe0d5d9dec2270b"]}, "timex": {:hex, :timex, "3.6.1", "efdf56d0e67a6b956cc57774353b0329c8ab7726766a11547e529357ffdc1d56", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5 or ~> 1.0.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "f354efb2400dd7a80fd9eb6c8419068c4f632da4ac47f3d8822d6e33f08bc852"}, From 57736c18332b0017e01d90e56547af1f5f830b7a Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 6 May 2020 16:30:05 -0500 Subject: [PATCH 483/581] Privacy option affects all push notifications, not just Direct Messages --- lib/pleroma/web/push/impl.ex | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/push/impl.ex b/lib/pleroma/web/push/impl.ex index a9f893f7b..7f80bb0c9 100644 --- a/lib/pleroma/web/push/impl.ex +++ b/lib/pleroma/web/push/impl.ex @@ -106,14 +106,13 @@ def build_content(notification, actor, object, mastodon_type \\ nil) def build_content( %{ - activity: %{data: %{"directMessage" => true}}, user: %{notification_settings: %{privacy_option: true}} - }, + } = notification, actor, _object, - _mastodon_type + mastodon_type ) do - %{title: "New Direct Message", body: "@#{actor.nickname}"} + %{title: format_title(notification, mastodon_type), body: "@#{actor.nickname}"} end def build_content(notification, actor, object, mastodon_type) do From a2580adc91ac757e47b88839f5fb723fb15305b1 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 6 May 2020 16:42:27 -0500 Subject: [PATCH 484/581] Hide the sender when privacy option is enabled --- lib/pleroma/web/push/impl.ex | 4 ++-- test/web/push/impl_test.exs | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/push/impl.ex b/lib/pleroma/web/push/impl.ex index 7f80bb0c9..691725702 100644 --- a/lib/pleroma/web/push/impl.ex +++ b/lib/pleroma/web/push/impl.ex @@ -108,11 +108,11 @@ def build_content( %{ user: %{notification_settings: %{privacy_option: true}} } = notification, - actor, + _actor, _object, mastodon_type ) do - %{title: format_title(notification, mastodon_type), body: "@#{actor.nickname}"} + %{body: format_title(notification, mastodon_type)} end def build_content(notification, actor, object, mastodon_type) do diff --git a/test/web/push/impl_test.exs b/test/web/push/impl_test.exs index b2664bf28..3de911810 100644 --- a/test/web/push/impl_test.exs +++ b/test/web/push/impl_test.exs @@ -209,8 +209,7 @@ test "returns info content for direct message with enabled privacy option" do object = Object.normalize(activity) assert Impl.build_content(notif, actor, object) == %{ - body: "@Bob", - title: "New Direct Message" + body: "New Direct Message" } end From 3d0c567fbc3506770fdac5f1269c45b244928747 Mon Sep 17 00:00:00 2001 From: Maksim Date: Thu, 7 May 2020 08:14:54 +0000 Subject: [PATCH 485/581] Pleroma.Web.TwitterAPI.TwoFactorAuthenticationController -> Pleroma.Web.PleromaAPI.TwoFactorAuthenticationController --- config/config.exs | 13 +- config/description.exs | 56 ++++ config/test.exs | 13 + docs/API/admin_api.md | 9 + docs/API/pleroma_api.md | 44 ++- docs/configuration/cheatsheet.md | 9 +- lib/pleroma/mfa.ex | 156 +++++++++ lib/pleroma/mfa/backup_codes.ex | 31 ++ lib/pleroma/mfa/changeset.ex | 64 ++++ lib/pleroma/mfa/settings.ex | 24 ++ lib/pleroma/mfa/token.ex | 106 ++++++ lib/pleroma/mfa/totp.ex | 86 +++++ .../plugs/ensure_authenticated_plug.ex | 14 + lib/pleroma/user.ex | 8 + .../web/admin_api/admin_api_controller.ex | 14 + lib/pleroma/web/auth/pleroma_authenticator.ex | 4 +- lib/pleroma/web/auth/totp_authenticator.ex | 45 +++ lib/pleroma/web/common_api/utils.ex | 1 + lib/pleroma/web/oauth/mfa_controller.ex | 97 ++++++ lib/pleroma/web/oauth/mfa_view.ex | 8 + lib/pleroma/web/oauth/oauth_controller.ex | 48 ++- lib/pleroma/web/oauth/token/clean_worker.ex | 38 +++ lib/pleroma/web/oauth/token/response.ex | 9 + .../two_factor_authentication_controller.ex | 133 ++++++++ lib/pleroma/web/router.ex | 15 + .../templates/o_auth/mfa/recovery.html.eex | 24 ++ .../web/templates/o_auth/mfa/totp.html.eex | 24 ++ .../remote_follow/follow_mfa.html.eex | 13 + .../controllers/remote_follow_controller.ex | 47 ++- mix.exs | 1 + mix.lock | 33 +- ...factor_authentication_settings_to_user.exs | 9 + .../20190508193213_create_mfa_tokens.exs | 16 + .../static/fonts/element-icons.535877f.woff | Bin 28200 -> 0 bytes .../static/fonts/element-icons.732389d.ttf | Bin 55956 -> 0 bytes test/mfa/backup_codes_test.exs | 11 + test/mfa/totp_test.exs | 17 + test/mfa_test.exs | 53 +++ test/plugs/ensure_authenticated_plug_test.exs | 25 ++ test/support/builders/user_builder.ex | 1 + test/support/factory.ex | 12 +- test/user_search_test.exs | 1 + .../admin_api/admin_api_controller_test.exs | 33 ++ test/web/auth/pleroma_authenticator_test.exs | 43 +++ test/web/auth/totp_authenticator_test.exs | 51 +++ test/web/oauth/mfa_controller_test.exs | 306 ++++++++++++++++++ test/web/oauth/oauth_controller_test.exs | 77 +++++ ..._factor_authentication_controller_test.exs | 260 +++++++++++++++ .../remote_follow_controller_test.exs | 116 +++++++ 49 files changed, 2184 insertions(+), 34 deletions(-) create mode 100644 lib/pleroma/mfa.ex create mode 100644 lib/pleroma/mfa/backup_codes.ex create mode 100644 lib/pleroma/mfa/changeset.ex create mode 100644 lib/pleroma/mfa/settings.ex create mode 100644 lib/pleroma/mfa/token.ex create mode 100644 lib/pleroma/mfa/totp.ex create mode 100644 lib/pleroma/web/auth/totp_authenticator.ex create mode 100644 lib/pleroma/web/oauth/mfa_controller.ex create mode 100644 lib/pleroma/web/oauth/mfa_view.ex create mode 100644 lib/pleroma/web/oauth/token/clean_worker.ex create mode 100644 lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex create mode 100644 lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex create mode 100644 lib/pleroma/web/templates/o_auth/mfa/totp.html.eex create mode 100644 lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex create mode 100644 priv/repo/migrations/20190506054542_add_multi_factor_authentication_settings_to_user.exs create mode 100644 priv/repo/migrations/20190508193213_create_mfa_tokens.exs delete mode 100644 priv/static/adminfe/static/fonts/element-icons.535877f.woff delete mode 100644 priv/static/adminfe/static/fonts/element-icons.732389d.ttf create mode 100644 test/mfa/backup_codes_test.exs create mode 100644 test/mfa/totp_test.exs create mode 100644 test/mfa_test.exs create mode 100644 test/web/auth/pleroma_authenticator_test.exs create mode 100644 test/web/auth/totp_authenticator_test.exs create mode 100644 test/web/oauth/mfa_controller_test.exs create mode 100644 test/web/pleroma_api/controllers/two_factor_authentication_controller_test.exs diff --git a/config/config.exs b/config/config.exs index ca9bbab64..e703c1632 100644 --- a/config/config.exs +++ b/config/config.exs @@ -238,7 +238,18 @@ account_field_value_length: 2048, external_user_synchronization: true, extended_nickname_format: true, - cleanup_attachments: false + cleanup_attachments: false, + multi_factor_authentication: [ + totp: [ + # digits 6 or 8 + digits: 6, + period: 30 + ], + backup_codes: [ + number: 5, + length: 16 + ] + ] config :pleroma, :extensions, output_relationships_in_statuses_by_default: true diff --git a/config/description.exs b/config/description.exs index 1b2afebef..39e094082 100644 --- a/config/description.exs +++ b/config/description.exs @@ -919,6 +919,62 @@ key: :external_user_synchronization, type: :boolean, description: "Enabling following/followers counters synchronization for external users" + }, + %{ + key: :multi_factor_authentication, + type: :keyword, + description: "Multi-factor authentication settings", + suggestions: [ + [ + totp: [digits: 6, period: 30], + backup_codes: [number: 5, length: 16] + ] + ], + children: [ + %{ + key: :totp, + type: :keyword, + description: "TOTP settings", + suggestions: [digits: 6, period: 30], + children: [ + %{ + key: :digits, + type: :integer, + suggestions: [6], + description: + "Determines the length of a one-time pass-code, in characters. Defaults to 6 characters." + }, + %{ + key: :period, + type: :integer, + suggestions: [30], + description: + "a period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds." + } + ] + }, + %{ + key: :backup_codes, + type: :keyword, + description: "MFA backup codes settings", + suggestions: [number: 5, length: 16], + children: [ + %{ + key: :number, + type: :integer, + suggestions: [5], + description: "number of backup codes to generate." + }, + %{ + key: :length, + type: :integer, + suggestions: [16], + description: + "Determines the length of backup one-time pass-codes, in characters. Defaults to 16 characters." + } + ] + } + ] } ] }, diff --git a/config/test.exs b/config/test.exs index cbf775109..e38b9967d 100644 --- a/config/test.exs +++ b/config/test.exs @@ -56,6 +56,19 @@ ignore_hosts: [], ignore_tld: ["local", "localdomain", "lan"] +config :pleroma, :instance, + multi_factor_authentication: [ + totp: [ + # digits 6 or 8 + digits: 6, + period: 30 + ], + backup_codes: [ + number: 2, + length: 6 + ] + ] + config :web_push_encryption, :vapid_details, subject: "mailto:administrator@example.com", public_key: diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index 23af08961..c455047cc 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -409,6 +409,7 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret ### Get a password reset token for a given nickname + - Params: none - Response: @@ -427,6 +428,14 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret - `nicknames` - Response: none (code `204`) +## PUT `/api/pleroma/admin/users/disable_mfa` + +### Disable mfa for user's account. + +- Params: + - `nickname` +- Response: User’s nickname + ## `GET /api/pleroma/admin/users/:nickname/credentials` ### Get the user's email, password, display and settings-related fields diff --git a/docs/API/pleroma_api.md b/docs/API/pleroma_api.md index b927be026..5895613a3 100644 --- a/docs/API/pleroma_api.md +++ b/docs/API/pleroma_api.md @@ -70,7 +70,49 @@ Request parameters can be passed via [query strings](https://en.wikipedia.org/wi * Response: JSON. Returns `{"status": "success"}` if the account was successfully disabled, `{"error": "[error message]"}` otherwise * Example response: `{"error": "Invalid password."}` -## `/api/pleroma/admin/`… +## `/api/pleroma/accounts/mfa` +#### Gets current MFA settings +* method: `GET` +* Authentication: required +* OAuth scope: `read:security` +* Response: JSON. Returns `{"enabled": "false", "totp": false }` + +## `/api/pleroma/accounts/mfa/setup/totp` +#### Pre-setup the MFA/TOTP method +* method: `GET` +* Authentication: required +* OAuth scope: `write:security` +* Response: JSON. Returns `{"key": [secret_key], "provisioning_uri": "[qr code uri]" }` when successful, otherwise returns HTTP 422 `{"error": "error_msg"}` + +## `/api/pleroma/accounts/mfa/confirm/totp` +#### Confirms & enables MFA/TOTP support for user account. +* method: `POST` +* Authentication: required +* OAuth scope: `write:security` +* Params: + * `password`: user's password + * `code`: token from TOTP App +* Response: JSON. Returns `{}` if the enable was successful, HTTP 422 `{"error": "[error message]"}` otherwise + + +## `/api/pleroma/accounts/mfa/totp` +#### Disables MFA/TOTP method for user account. +* method: `DELETE` +* Authentication: required +* OAuth scope: `write:security` +* Params: + * `password`: user's password +* Response: JSON. Returns `{}` if the disable was successful, HTTP 422 `{"error": "[error message]"}` otherwise +* Example response: `{"error": "Invalid password."}` + +## `/api/pleroma/accounts/mfa/backup_codes` +#### Generstes backup codes MFA for user account. +* method: `GET` +* Authentication: required +* OAuth scope: `write:security` +* Response: JSON. Returns `{"codes": codes}`when successful, otherwise HTTP 422 `{"error": "[error message]"}` + +## `/api/pleroma/admin/` See [Admin-API](admin_api.md) ## `/api/v1/pleroma/notifications/read` diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 2524918d4..707d7fdbd 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -907,12 +907,18 @@ config :auto_linker, * `runtime_dir`: A path to custom Elixir modules (such as MRF policies). - ## :configurable_from_database Boolean, enables/disables in-database configuration. Read [Transfering the config to/from the database](../administration/CLI_tasks/config.md) for more information. +### Multi-factor authentication - :two_factor_authentication +* `totp` - a list containing TOTP configuration + - `digits` - Determines the length of a one-time pass-code in characters. Defaults to 6 characters. + - `period` - a period for which the TOTP code will be valid in seconds. Defaults to 30 seconds. +* `backup_codes` - a list containing backup codes configuration + - `number` - number of backup codes to generate. + - `length` - backup code length. Defaults to 16 characters. ## Restrict entities access for unauthenticated users @@ -930,6 +936,7 @@ Restrict access for unauthenticated users to timelines (public and federate), us * `local` * `remote` + ## Pleroma.Web.ApiSpec.CastAndValidate * `:strict` a boolean, enables strict input validation (useful in development, not recommended in production). Defaults to `false`. diff --git a/lib/pleroma/mfa.ex b/lib/pleroma/mfa.ex new file mode 100644 index 000000000..d353a4dad --- /dev/null +++ b/lib/pleroma/mfa.ex @@ -0,0 +1,156 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.MFA do + @moduledoc """ + The MFA context. + """ + + alias Comeonin.Pbkdf2 + alias Pleroma.User + + alias Pleroma.MFA.BackupCodes + alias Pleroma.MFA.Changeset + alias Pleroma.MFA.Settings + alias Pleroma.MFA.TOTP + + @doc """ + Returns MFA methods the user has enabled. + + ## Examples + + iex> Pleroma.MFA.supported_method(User) + "totp, u2f" + """ + @spec supported_methods(User.t()) :: String.t() + def supported_methods(user) do + settings = fetch_settings(user) + + Settings.mfa_methods() + |> Enum.reduce([], fn m, acc -> + if method_enabled?(m, settings) do + acc ++ [m] + else + acc + end + end) + |> Enum.join(",") + end + + @doc "Checks that user enabled MFA" + def require?(user) do + fetch_settings(user).enabled + end + + @doc """ + Display MFA settings of user + """ + def mfa_settings(user) do + settings = fetch_settings(user) + + Settings.mfa_methods() + |> Enum.map(fn m -> [m, method_enabled?(m, settings)] end) + |> Enum.into(%{enabled: settings.enabled}, fn [a, b] -> {a, b} end) + end + + @doc false + def fetch_settings(%User{} = user) do + user.multi_factor_authentication_settings || %Settings{} + end + + @doc "clears backup codes" + def invalidate_backup_code(%User{} = user, hash_code) do + %{backup_codes: codes} = fetch_settings(user) + + user + |> Changeset.cast_backup_codes(codes -- [hash_code]) + |> User.update_and_set_cache() + end + + @doc "generates backup codes" + @spec generate_backup_codes(User.t()) :: {:ok, list(binary)} | {:error, String.t()} + def generate_backup_codes(%User{} = user) do + with codes <- BackupCodes.generate(), + hashed_codes <- Enum.map(codes, &Pbkdf2.hashpwsalt/1), + changeset <- Changeset.cast_backup_codes(user, hashed_codes), + {:ok, _} <- User.update_and_set_cache(changeset) do + {:ok, codes} + else + {:error, msg} -> + %{error: msg} + end + end + + @doc """ + Generates secret key and set delivery_type to 'app' for TOTP method. + """ + @spec setup_totp(User.t()) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()} + def setup_totp(user) do + user + |> Changeset.setup_totp(%{secret: TOTP.generate_secret(), delivery_type: "app"}) + |> User.update_and_set_cache() + end + + @doc """ + Confirms the TOTP method for user. + + `attrs`: + `password` - current user password + `code` - TOTP token + """ + @spec confirm_totp(User.t(), map()) :: {:ok, User.t()} | {:error, Ecto.Changeset.t() | atom()} + def confirm_totp(%User{} = user, attrs) do + with settings <- user.multi_factor_authentication_settings.totp, + {:ok, :pass} <- TOTP.validate_token(settings.secret, attrs["code"]) do + user + |> Changeset.confirm_totp() + |> User.update_and_set_cache() + end + end + + @doc """ + Disables the TOTP method for user. + + `attrs`: + `password` - current user password + """ + @spec disable_totp(User.t()) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()} + def disable_totp(%User{} = user) do + user + |> Changeset.disable_totp() + |> Changeset.disable() + |> User.update_and_set_cache() + end + + @doc """ + Force disables all MFA methods for user. + """ + @spec disable(User.t()) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()} + def disable(%User{} = user) do + user + |> Changeset.disable_totp() + |> Changeset.disable(true) + |> User.update_and_set_cache() + end + + @doc """ + Checks if the user has MFA method enabled. + """ + def method_enabled?(method, settings) do + with {:ok, %{confirmed: true} = _} <- Map.fetch(settings, method) do + true + else + _ -> false + end + end + + @doc """ + Checks if the user has enabled at least one MFA method. + """ + def enabled?(settings) do + Settings.mfa_methods() + |> Enum.map(fn m -> method_enabled?(m, settings) end) + |> Enum.any?() + end +end diff --git a/lib/pleroma/mfa/backup_codes.ex b/lib/pleroma/mfa/backup_codes.ex new file mode 100644 index 000000000..2b5ec34f8 --- /dev/null +++ b/lib/pleroma/mfa/backup_codes.ex @@ -0,0 +1,31 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.MFA.BackupCodes do + @moduledoc """ + This module contains functions for generating backup codes. + """ + alias Pleroma.Config + + @config_ns [:instance, :multi_factor_authentication, :backup_codes] + + @doc """ + Generates backup codes. + """ + @spec generate(Keyword.t()) :: list(String.t()) + def generate(opts \\ []) do + number_of_codes = Keyword.get(opts, :number_of_codes, default_backup_codes_number()) + code_length = Keyword.get(opts, :length, default_backup_codes_code_length()) + + Enum.map(1..number_of_codes, fn _ -> + :crypto.strong_rand_bytes(div(code_length, 2)) + |> Base.encode16(case: :lower) + end) + end + + defp default_backup_codes_number, do: Config.get(@config_ns ++ [:number], 5) + + defp default_backup_codes_code_length, + do: Config.get(@config_ns ++ [:length], 16) +end diff --git a/lib/pleroma/mfa/changeset.ex b/lib/pleroma/mfa/changeset.ex new file mode 100644 index 000000000..9b020aa8e --- /dev/null +++ b/lib/pleroma/mfa/changeset.ex @@ -0,0 +1,64 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.MFA.Changeset do + alias Pleroma.MFA + alias Pleroma.MFA.Settings + alias Pleroma.User + + def disable(%Ecto.Changeset{} = changeset, force \\ false) do + settings = + changeset + |> Ecto.Changeset.apply_changes() + |> MFA.fetch_settings() + + if force || not MFA.enabled?(settings) do + put_change(changeset, %Settings{settings | enabled: false}) + else + changeset + end + end + + def disable_totp(%User{multi_factor_authentication_settings: settings} = user) do + user + |> put_change(%Settings{settings | totp: %Settings.TOTP{}}) + end + + def confirm_totp(%User{multi_factor_authentication_settings: settings} = user) do + totp_settings = %Settings.TOTP{settings.totp | confirmed: true} + + user + |> put_change(%Settings{settings | totp: totp_settings, enabled: true}) + end + + def setup_totp(%User{} = user, attrs) do + mfa_settings = MFA.fetch_settings(user) + + totp_settings = + %Settings.TOTP{} + |> Ecto.Changeset.cast(attrs, [:secret, :delivery_type]) + + user + |> put_change(%Settings{mfa_settings | totp: Ecto.Changeset.apply_changes(totp_settings)}) + end + + def cast_backup_codes(%User{} = user, codes) do + user + |> put_change(%Settings{ + user.multi_factor_authentication_settings + | backup_codes: codes + }) + end + + defp put_change(%User{} = user, settings) do + user + |> Ecto.Changeset.change() + |> put_change(settings) + end + + defp put_change(%Ecto.Changeset{} = changeset, settings) do + changeset + |> Ecto.Changeset.put_change(:multi_factor_authentication_settings, settings) + end +end diff --git a/lib/pleroma/mfa/settings.ex b/lib/pleroma/mfa/settings.ex new file mode 100644 index 000000000..2764b889c --- /dev/null +++ b/lib/pleroma/mfa/settings.ex @@ -0,0 +1,24 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.MFA.Settings do + use Ecto.Schema + + @primary_key false + + @mfa_methods [:totp] + embedded_schema do + field(:enabled, :boolean, default: false) + field(:backup_codes, {:array, :string}, default: []) + + embeds_one :totp, TOTP, on_replace: :delete, primary_key: false do + field(:secret, :string) + # app | sms + field(:delivery_type, :string, default: "app") + field(:confirmed, :boolean, default: false) + end + end + + def mfa_methods, do: @mfa_methods +end diff --git a/lib/pleroma/mfa/token.ex b/lib/pleroma/mfa/token.ex new file mode 100644 index 000000000..25ff7fb29 --- /dev/null +++ b/lib/pleroma/mfa/token.ex @@ -0,0 +1,106 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.MFA.Token do + use Ecto.Schema + import Ecto.Query + import Ecto.Changeset + + alias Pleroma.Repo + alias Pleroma.User + alias Pleroma.Web.OAuth.Authorization + alias Pleroma.Web.OAuth.Token, as: OAuthToken + + @expires 300 + + schema "mfa_tokens" do + field(:token, :string) + field(:valid_until, :naive_datetime_usec) + + belongs_to(:user, User, type: FlakeId.Ecto.CompatType) + belongs_to(:authorization, Authorization) + + timestamps() + end + + def get_by_token(token) do + from( + t in __MODULE__, + where: t.token == ^token, + preload: [:user, :authorization] + ) + |> Repo.find_resource() + end + + def validate(token) do + with {:fetch_token, {:ok, token}} <- {:fetch_token, get_by_token(token)}, + {:expired, false} <- {:expired, is_expired?(token)} do + {:ok, token} + else + {:expired, _} -> {:error, :expired_token} + {:fetch_token, _} -> {:error, :not_found} + error -> {:error, error} + end + end + + def create_token(%User{} = user) do + %__MODULE__{} + |> change + |> assign_user(user) + |> put_token + |> put_valid_until + |> Repo.insert() + end + + def create_token(user, authorization) do + %__MODULE__{} + |> change + |> assign_user(user) + |> assign_authorization(authorization) + |> put_token + |> put_valid_until + |> Repo.insert() + end + + defp assign_user(changeset, user) do + changeset + |> put_assoc(:user, user) + |> validate_required([:user]) + end + + defp assign_authorization(changeset, authorization) do + changeset + |> put_assoc(:authorization, authorization) + |> validate_required([:authorization]) + end + + defp put_token(changeset) do + changeset + |> change(%{token: OAuthToken.Utils.generate_token()}) + |> validate_required([:token]) + |> unique_constraint(:token) + end + + defp put_valid_until(changeset) do + expires_in = NaiveDateTime.add(NaiveDateTime.utc_now(), @expires) + + changeset + |> change(%{valid_until: expires_in}) + |> validate_required([:valid_until]) + end + + def is_expired?(%__MODULE__{valid_until: valid_until}) do + NaiveDateTime.diff(NaiveDateTime.utc_now(), valid_until) > 0 + end + + def is_expired?(_), do: false + + def delete_expired_tokens do + from( + q in __MODULE__, + where: fragment("?", q.valid_until) < ^Timex.now() + ) + |> Repo.delete_all() + end +end diff --git a/lib/pleroma/mfa/totp.ex b/lib/pleroma/mfa/totp.ex new file mode 100644 index 000000000..1407afc57 --- /dev/null +++ b/lib/pleroma/mfa/totp.ex @@ -0,0 +1,86 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.MFA.TOTP do + @moduledoc """ + This module represents functions to create secrets for + TOTP Application as well as validate them with a time based token. + """ + alias Pleroma.Config + + @config_ns [:instance, :multi_factor_authentication, :totp] + + @doc """ + https://github.com/google/google-authenticator/wiki/Key-Uri-Format + """ + def provisioning_uri(secret, label, opts \\ []) do + query = + %{ + secret: secret, + issuer: Keyword.get(opts, :issuer, default_issuer()), + digits: Keyword.get(opts, :digits, default_digits()), + period: Keyword.get(opts, :period, default_period()) + } + |> Enum.filter(fn {_, v} -> not is_nil(v) end) + |> Enum.into(%{}) + |> URI.encode_query() + + %URI{scheme: "otpauth", host: "totp", path: "/" <> label, query: query} + |> URI.to_string() + end + + defp default_period, do: Config.get(@config_ns ++ [:period]) + defp default_digits, do: Config.get(@config_ns ++ [:digits]) + + defp default_issuer, + do: Config.get(@config_ns ++ [:issuer], Config.get([:instance, :name])) + + @doc "Creates a random Base 32 encoded string" + def generate_secret do + Base.encode32(:crypto.strong_rand_bytes(10)) + end + + @doc "Generates a valid token based on a secret" + def generate_token(secret) do + :pot.totp(secret) + end + + @doc """ + Validates a given token based on a secret. + + optional parameters: + `token_length` default `6` + `interval_length` default `30` + `window` default 0 + + Returns {:ok, :pass} if the token is valid and + {:error, :invalid_token} if it is not. + """ + @spec validate_token(String.t(), String.t()) :: + {:ok, :pass} | {:error, :invalid_token | :invalid_secret_and_token} + def validate_token(secret, token) + when is_binary(secret) and is_binary(token) do + opts = [ + token_length: default_digits(), + interval_length: default_period() + ] + + validate_token(secret, token, opts) + end + + def validate_token(_, _), do: {:error, :invalid_secret_and_token} + + @doc "See `validate_token/2`" + @spec validate_token(String.t(), String.t(), Keyword.t()) :: + {:ok, :pass} | {:error, :invalid_token | :invalid_secret_and_token} + def validate_token(secret, token, options) + when is_binary(secret) and is_binary(token) do + case :pot.valid_totp(token, secret, options) do + true -> {:ok, :pass} + false -> {:error, :invalid_token} + end + end + + def validate_token(_, _, _), do: {:error, :invalid_secret_and_token} +end diff --git a/lib/pleroma/plugs/ensure_authenticated_plug.ex b/lib/pleroma/plugs/ensure_authenticated_plug.ex index 9d5176e2b..3fe550806 100644 --- a/lib/pleroma/plugs/ensure_authenticated_plug.ex +++ b/lib/pleroma/plugs/ensure_authenticated_plug.ex @@ -15,6 +15,20 @@ def init(options) do end @impl true + def perform( + %{ + assigns: %{ + auth_credentials: %{password: _}, + user: %User{multi_factor_authentication_settings: %{enabled: true}} + } + } = conn, + _ + ) do + conn + |> render_error(:forbidden, "Two-factor authentication enabled, you must use a access token.") + |> halt() + end + def perform(%{assigns: %{user: %User{}}} = conn, _) do conn end diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 323eb2a41..a6f51f0be 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -20,6 +20,7 @@ defmodule Pleroma.User do alias Pleroma.Formatter alias Pleroma.HTML alias Pleroma.Keys + alias Pleroma.MFA alias Pleroma.Notification alias Pleroma.Object alias Pleroma.Registration @@ -190,6 +191,12 @@ defmodule Pleroma.User do # `:subscribers` is deprecated (replaced with `subscriber_users` relation) field(:subscribers, {:array, :string}, default: []) + embeds_one( + :multi_factor_authentication_settings, + MFA.Settings, + on_replace: :delete + ) + timestamps() end @@ -927,6 +934,7 @@ def get_cached_by_nickname_or_id(nickname_or_id, opts \\ []) do end end + @spec get_by_nickname(String.t()) :: User.t() | nil def get_by_nickname(nickname) do Repo.get_by(User, nickname: nickname) || if Regex.match?(~r(@#{Pleroma.Web.Endpoint.host()})i, nickname) do diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index 80a4ebaac..9f1fd3aeb 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -10,6 +10,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do alias Pleroma.Activity alias Pleroma.Config alias Pleroma.ConfigDB + alias Pleroma.MFA alias Pleroma.ModerationLog alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.ReportNote @@ -61,6 +62,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do :right_add, :right_add_multiple, :right_delete, + :disable_mfa, :right_delete_multiple, :update_user_credentials ] @@ -674,6 +676,18 @@ def force_password_reset(%{assigns: %{user: admin}} = conn, %{"nicknames" => nic json_response(conn, :no_content, "") end + @doc "Disable mfa for user's account." + def disable_mfa(conn, %{"nickname" => nickname}) do + case User.get_by_nickname(nickname) do + %User{} = user -> + MFA.disable(user) + json(conn, nickname) + + _ -> + {:error, :not_found} + end + end + @doc "Show a given user's credentials" def show_user_credentials(%{assigns: %{user: admin}} = conn, %{"nickname" => nickname}) do with %User{} = user <- User.get_cached_by_nickname_or_id(nickname) do diff --git a/lib/pleroma/web/auth/pleroma_authenticator.ex b/lib/pleroma/web/auth/pleroma_authenticator.ex index cb09664ce..a8f554aa3 100644 --- a/lib/pleroma/web/auth/pleroma_authenticator.ex +++ b/lib/pleroma/web/auth/pleroma_authenticator.ex @@ -19,8 +19,8 @@ def get_user(%Plug.Conn{} = conn) do {_, true} <- {:checkpw, AuthenticationPlug.checkpw(password, user.password_hash)} do {:ok, user} else - error -> - {:error, error} + {:error, _reason} = error -> error + error -> {:error, error} end end diff --git a/lib/pleroma/web/auth/totp_authenticator.ex b/lib/pleroma/web/auth/totp_authenticator.ex new file mode 100644 index 000000000..98aca9a51 --- /dev/null +++ b/lib/pleroma/web/auth/totp_authenticator.ex @@ -0,0 +1,45 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.Auth.TOTPAuthenticator do + alias Comeonin.Pbkdf2 + alias Pleroma.MFA + alias Pleroma.MFA.TOTP + alias Pleroma.User + + @doc "Verify code or check backup code." + @spec verify(String.t(), User.t()) :: + {:ok, :pass} | {:error, :invalid_token | :invalid_secret_and_token} + def verify( + token, + %User{ + multi_factor_authentication_settings: + %{enabled: true, totp: %{secret: secret, confirmed: true}} = _ + } = _user + ) + when is_binary(token) and byte_size(token) > 0 do + TOTP.validate_token(secret, token) + end + + def verify(_, _), do: {:error, :invalid_token} + + @spec verify_recovery_code(User.t(), String.t()) :: + {:ok, :pass} | {:error, :invalid_token} + def verify_recovery_code( + %User{multi_factor_authentication_settings: %{enabled: true, backup_codes: codes}} = user, + code + ) + when is_list(codes) and is_binary(code) do + hash_code = Enum.find(codes, fn hash -> Pbkdf2.checkpw(code, hash) end) + + if hash_code do + MFA.invalidate_backup_code(user, hash_code) + {:ok, :pass} + else + {:error, :invalid_token} + end + end + + def verify_recovery_code(_, _), do: {:error, :invalid_token} +end diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 6540fa5d1..793f2e7f8 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -402,6 +402,7 @@ defp shortname(name) do end end + @spec confirm_current_password(User.t(), String.t()) :: {:ok, User.t()} | {:error, String.t()} def confirm_current_password(user, password) do with %User{local: true} = db_user <- User.get_cached_by_id(user.id), true <- AuthenticationPlug.checkpw(password, db_user.password_hash) do diff --git a/lib/pleroma/web/oauth/mfa_controller.ex b/lib/pleroma/web/oauth/mfa_controller.ex new file mode 100644 index 000000000..e52cccd85 --- /dev/null +++ b/lib/pleroma/web/oauth/mfa_controller.ex @@ -0,0 +1,97 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.OAuth.MFAController do + @moduledoc """ + The model represents api to use Multi Factor authentications. + """ + + use Pleroma.Web, :controller + + alias Pleroma.MFA + alias Pleroma.Web.Auth.TOTPAuthenticator + alias Pleroma.Web.OAuth.MFAView, as: View + alias Pleroma.Web.OAuth.OAuthController + alias Pleroma.Web.OAuth.Token + + plug(:fetch_session when action in [:show, :verify]) + plug(:fetch_flash when action in [:show, :verify]) + + @doc """ + Display form to input mfa code or recovery code. + """ + def show(conn, %{"mfa_token" => mfa_token} = params) do + template = Map.get(params, "challenge_type", "totp") + + conn + |> put_view(View) + |> render("#{template}.html", %{ + mfa_token: mfa_token, + redirect_uri: params["redirect_uri"], + state: params["state"] + }) + end + + @doc """ + Verification code and continue authorization. + """ + def verify(conn, %{"mfa" => %{"mfa_token" => mfa_token} = mfa_params} = _) do + with {:ok, %{user: user, authorization: auth}} <- MFA.Token.validate(mfa_token), + {:ok, _} <- validates_challenge(user, mfa_params) do + conn + |> OAuthController.after_create_authorization(auth, %{ + "authorization" => %{ + "redirect_uri" => mfa_params["redirect_uri"], + "state" => mfa_params["state"] + } + }) + else + _ -> + conn + |> put_flash(:error, "Two-factor authentication failed.") + |> put_status(:unauthorized) + |> show(mfa_params) + end + end + + @doc """ + Verification second step of MFA (or recovery) and returns access token. + + ## Endpoint + POST /oauth/mfa/challenge + + params: + `client_id` + `client_secret` + `mfa_token` - access token to check second step of mfa + `challenge_type` - 'totp' or 'recovery' + `code` + + """ + def challenge(conn, %{"mfa_token" => mfa_token} = params) do + with {:ok, app} <- Token.Utils.fetch_app(conn), + {:ok, %{user: user, authorization: auth}} <- MFA.Token.validate(mfa_token), + {:ok, _} <- validates_challenge(user, params), + {:ok, token} <- Token.exchange_token(app, auth) do + json(conn, Token.Response.build(user, token)) + else + _error -> + conn + |> put_status(400) + |> json(%{error: "Invalid code"}) + end + end + + # Verify TOTP Code + defp validates_challenge(user, %{"challenge_type" => "totp", "code" => code} = _) do + TOTPAuthenticator.verify(code, user) + end + + # Verify Recovery Code + defp validates_challenge(user, %{"challenge_type" => "recovery", "code" => code} = _) do + TOTPAuthenticator.verify_recovery_code(user, code) + end + + defp validates_challenge(_, _), do: {:error, :unsupported_challenge_type} +end diff --git a/lib/pleroma/web/oauth/mfa_view.ex b/lib/pleroma/web/oauth/mfa_view.ex new file mode 100644 index 000000000..e88e7066b --- /dev/null +++ b/lib/pleroma/web/oauth/mfa_view.ex @@ -0,0 +1,8 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.OAuth.MFAView do + use Pleroma.Web, :view + import Phoenix.HTML.Form +end diff --git a/lib/pleroma/web/oauth/oauth_controller.ex b/lib/pleroma/web/oauth/oauth_controller.ex index 685269877..7c804233c 100644 --- a/lib/pleroma/web/oauth/oauth_controller.ex +++ b/lib/pleroma/web/oauth/oauth_controller.ex @@ -6,6 +6,7 @@ defmodule Pleroma.Web.OAuth.OAuthController do use Pleroma.Web, :controller alias Pleroma.Helpers.UriHelper + alias Pleroma.MFA alias Pleroma.Plugs.RateLimiter alias Pleroma.Registration alias Pleroma.Repo @@ -14,6 +15,7 @@ defmodule Pleroma.Web.OAuth.OAuthController do alias Pleroma.Web.ControllerHelper alias Pleroma.Web.OAuth.App alias Pleroma.Web.OAuth.Authorization + alias Pleroma.Web.OAuth.MFAController alias Pleroma.Web.OAuth.Scopes alias Pleroma.Web.OAuth.Token alias Pleroma.Web.OAuth.Token.Strategy.RefreshToken @@ -121,7 +123,8 @@ def create_authorization( %{"authorization" => _} = params, opts \\ [] ) do - with {:ok, auth} <- do_create_authorization(conn, params, opts[:user]) do + with {:ok, auth, user} <- do_create_authorization(conn, params, opts[:user]), + {:mfa_required, _, _, false} <- {:mfa_required, user, auth, MFA.require?(user)} do after_create_authorization(conn, auth, params) else error -> @@ -179,6 +182,22 @@ defp handle_create_authorization_error( |> authorize(params) end + defp handle_create_authorization_error( + %Plug.Conn{} = conn, + {:mfa_required, user, auth, _}, + params + ) do + {:ok, token} = MFA.Token.create_token(user, auth) + + data = %{ + "mfa_token" => token.token, + "redirect_uri" => params["authorization"]["redirect_uri"], + "state" => params["authorization"]["state"] + } + + MFAController.show(conn, data) + end + defp handle_create_authorization_error( %Plug.Conn{} = conn, {:account_status, :password_reset_pending}, @@ -231,7 +250,8 @@ def token_exchange(%Plug.Conn{} = conn, %{"grant_type" => "authorization_code"} json(conn, Token.Response.build(user, token, response_attrs)) else - _error -> render_invalid_credentials_error(conn) + error -> + handle_token_exchange_error(conn, error) end end @@ -244,6 +264,7 @@ def token_exchange( {:account_status, :active} <- {:account_status, User.account_status(user)}, {:ok, scopes} <- validate_scopes(app, params), {:ok, auth} <- Authorization.create_authorization(app, user, scopes), + {:mfa_required, _, _, false} <- {:mfa_required, user, auth, MFA.require?(user)}, {:ok, token} <- Token.exchange_token(app, auth) do json(conn, Token.Response.build(user, token)) else @@ -270,13 +291,20 @@ def token_exchange(%Plug.Conn{} = conn, %{"grant_type" => "client_credentials"} {:ok, token} <- Token.exchange_token(app, auth) do json(conn, Token.Response.build_for_client_credentials(token)) else - _error -> render_invalid_credentials_error(conn) + _error -> + handle_token_exchange_error(conn, :invalid_credentails) end end # Bad request def token_exchange(%Plug.Conn{} = conn, params), do: bad_request(conn, params) + defp handle_token_exchange_error(%Plug.Conn{} = conn, {:mfa_required, user, auth, _}) do + conn + |> put_status(:forbidden) + |> json(build_and_response_mfa_token(user, auth)) + end + defp handle_token_exchange_error(%Plug.Conn{} = conn, {:account_status, :deactivated}) do render_error( conn, @@ -434,7 +462,8 @@ def registration_details(%Plug.Conn{} = conn, %{"authorization" => auth_attrs}) def register(%Plug.Conn{} = conn, %{"authorization" => _, "op" => "connect"} = params) do with registration_id when not is_nil(registration_id) <- get_session_registration_id(conn), %Registration{} = registration <- Repo.get(Registration, registration_id), - {_, {:ok, auth}} <- {:create_authorization, do_create_authorization(conn, params)}, + {_, {:ok, auth, _user}} <- + {:create_authorization, do_create_authorization(conn, params)}, %User{} = user <- Repo.preload(auth, :user).user, {:ok, _updated_registration} <- Registration.bind_to_user(registration, user) do conn @@ -500,8 +529,9 @@ defp do_create_authorization( %App{} = app <- Repo.get_by(App, client_id: client_id), true <- redirect_uri in String.split(app.redirect_uris), {:ok, scopes} <- validate_scopes(app, auth_attrs), - {:account_status, :active} <- {:account_status, User.account_status(user)} do - Authorization.create_authorization(app, user, scopes) + {:account_status, :active} <- {:account_status, User.account_status(user)}, + {:ok, auth} <- Authorization.create_authorization(app, user, scopes) do + {:ok, auth, user} end end @@ -515,6 +545,12 @@ defp get_session_registration_id(%Plug.Conn{} = conn), do: get_session(conn, :re defp put_session_registration_id(%Plug.Conn{} = conn, registration_id), do: put_session(conn, :registration_id, registration_id) + defp build_and_response_mfa_token(user, auth) do + with {:ok, token} <- MFA.Token.create_token(user, auth) do + Token.Response.build_for_mfa_token(user, token) + end + end + @spec validate_scopes(App.t(), map()) :: {:ok, list()} | {:error, :missing_scopes | :unsupported_scopes} defp validate_scopes(%App{} = app, params) do diff --git a/lib/pleroma/web/oauth/token/clean_worker.ex b/lib/pleroma/web/oauth/token/clean_worker.ex new file mode 100644 index 000000000..2c3bb9ded --- /dev/null +++ b/lib/pleroma/web/oauth/token/clean_worker.ex @@ -0,0 +1,38 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.OAuth.Token.CleanWorker do + @moduledoc """ + The module represents functions to clean an expired OAuth and MFA tokens. + """ + use GenServer + + @ten_seconds 10_000 + @one_day 86_400_000 + + alias Pleroma.MFA + alias Pleroma.Web.OAuth + alias Pleroma.Workers.BackgroundWorker + + def start_link(_), do: GenServer.start_link(__MODULE__, %{}) + + def init(_) do + Process.send_after(self(), :perform, @ten_seconds) + {:ok, nil} + end + + @doc false + def handle_info(:perform, state) do + BackgroundWorker.enqueue("clean_expired_tokens", %{}) + interval = Pleroma.Config.get([:oauth2, :clean_expired_tokens_interval], @one_day) + + Process.send_after(self(), :perform, interval) + {:noreply, state} + end + + def perform(:clean) do + OAuth.Token.delete_expired_tokens() + MFA.Token.delete_expired_tokens() + end +end diff --git a/lib/pleroma/web/oauth/token/response.ex b/lib/pleroma/web/oauth/token/response.ex index 6f4713dee..0e72c31e9 100644 --- a/lib/pleroma/web/oauth/token/response.ex +++ b/lib/pleroma/web/oauth/token/response.ex @@ -5,6 +5,7 @@ defmodule Pleroma.Web.OAuth.Token.Response do @moduledoc false + alias Pleroma.MFA alias Pleroma.User alias Pleroma.Web.OAuth.Token.Utils @@ -32,5 +33,13 @@ def build_for_client_credentials(token) do } end + def build_for_mfa_token(user, mfa_token) do + %{ + error: "mfa_required", + mfa_token: mfa_token.token, + supported_challenge_types: MFA.supported_methods(user) + } + end + defp expires_in, do: Pleroma.Config.get([:oauth2, :token_expires_in], 600) end diff --git a/lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex b/lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex new file mode 100644 index 000000000..eb9989cdf --- /dev/null +++ b/lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex @@ -0,0 +1,133 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.PleromaAPI.TwoFactorAuthenticationController do + @moduledoc "The module represents actions to manage MFA" + use Pleroma.Web, :controller + + import Pleroma.Web.ControllerHelper, only: [json_response: 3] + + alias Pleroma.MFA + alias Pleroma.MFA.TOTP + alias Pleroma.Plugs.OAuthScopesPlug + alias Pleroma.Web.CommonAPI.Utils + + plug(OAuthScopesPlug, %{scopes: ["read:security"]} when action in [:settings]) + + plug( + OAuthScopesPlug, + %{scopes: ["write:security"]} when action in [:setup, :confirm, :disable, :backup_codes] + ) + + @doc """ + Gets user multi factor authentication settings + + ## Endpoint + GET /api/pleroma/accounts/mfa + + """ + def settings(%{assigns: %{user: user}} = conn, _params) do + json(conn, %{settings: MFA.mfa_settings(user)}) + end + + @doc """ + Prepare setup mfa method + + ## Endpoint + GET /api/pleroma/accounts/mfa/setup/[:method] + + """ + def setup(%{assigns: %{user: user}} = conn, %{"method" => "totp"} = _params) do + with {:ok, user} <- MFA.setup_totp(user), + %{secret: secret} = _ <- user.multi_factor_authentication_settings.totp do + provisioning_uri = TOTP.provisioning_uri(secret, "#{user.email}") + + json(conn, %{provisioning_uri: provisioning_uri, key: secret}) + else + {:error, message} -> + json_response(conn, :unprocessable_entity, %{error: message}) + end + end + + def setup(conn, _params) do + json_response(conn, :bad_request, %{error: "undefined method"}) + end + + @doc """ + Confirms setup and enable mfa method + + ## Endpoint + POST /api/pleroma/accounts/mfa/confirm/:method + + - params: + `code` - confirmation code + `password` - current password + """ + def confirm( + %{assigns: %{user: user}} = conn, + %{"method" => "totp", "password" => _, "code" => _} = params + ) do + with {:ok, _user} <- Utils.confirm_current_password(user, params["password"]), + {:ok, _user} <- MFA.confirm_totp(user, params) do + json(conn, %{}) + else + {:error, message} -> + json_response(conn, :unprocessable_entity, %{error: message}) + end + end + + def confirm(conn, _) do + json_response(conn, :bad_request, %{error: "undefined mfa method"}) + end + + @doc """ + Disable mfa method and disable mfa if need. + """ + def disable(%{assigns: %{user: user}} = conn, %{"method" => "totp"} = params) do + with {:ok, user} <- Utils.confirm_current_password(user, params["password"]), + {:ok, _user} <- MFA.disable_totp(user) do + json(conn, %{}) + else + {:error, message} -> + json_response(conn, :unprocessable_entity, %{error: message}) + end + end + + def disable(%{assigns: %{user: user}} = conn, %{"method" => "mfa"} = params) do + with {:ok, user} <- Utils.confirm_current_password(user, params["password"]), + {:ok, _user} <- MFA.disable(user) do + json(conn, %{}) + else + {:error, message} -> + json_response(conn, :unprocessable_entity, %{error: message}) + end + end + + def disable(conn, _) do + json_response(conn, :bad_request, %{error: "undefined mfa method"}) + end + + @doc """ + Generates backup codes. + + ## Endpoint + GET /api/pleroma/accounts/mfa/backup_codes + + ## Response + ### Success + `{codes: [codes]}` + + ### Error + `{error: [error_message]}` + + """ + def backup_codes(%{assigns: %{user: user}} = conn, _params) do + with {:ok, codes} <- MFA.generate_backup_codes(user) do + json(conn, %{codes: codes}) + else + {:error, message} -> + json_response(conn, :unprocessable_entity, %{error: message}) + end + end +end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 281516bb8..7a171f9fb 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -132,6 +132,7 @@ defmodule Pleroma.Web.Router do post("/users/follow", AdminAPIController, :user_follow) post("/users/unfollow", AdminAPIController, :user_unfollow) + put("/users/disable_mfa", AdminAPIController, :disable_mfa) delete("/users", AdminAPIController, :user_delete) post("/users", AdminAPIController, :users_create) patch("/users/:nickname/toggle_activation", AdminAPIController, :user_toggle_activation) @@ -258,6 +259,16 @@ defmodule Pleroma.Web.Router do post("/follow_import", UtilController, :follow_import) end + scope "/api/pleroma", Pleroma.Web.PleromaAPI do + pipe_through(:authenticated_api) + + get("/accounts/mfa", TwoFactorAuthenticationController, :settings) + get("/accounts/mfa/backup_codes", TwoFactorAuthenticationController, :backup_codes) + get("/accounts/mfa/setup/:method", TwoFactorAuthenticationController, :setup) + post("/accounts/mfa/confirm/:method", TwoFactorAuthenticationController, :confirm) + delete("/accounts/mfa/:method", TwoFactorAuthenticationController, :disable) + end + scope "/oauth", Pleroma.Web.OAuth do scope [] do pipe_through(:oauth) @@ -269,6 +280,10 @@ defmodule Pleroma.Web.Router do post("/revoke", OAuthController, :token_revoke) get("/registration_details", OAuthController, :registration_details) + post("/mfa/challenge", MFAController, :challenge) + post("/mfa/verify", MFAController, :verify, as: :mfa_verify) + get("/mfa", MFAController, :show) + scope [] do pipe_through(:browser) diff --git a/lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex b/lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex new file mode 100644 index 000000000..750f65386 --- /dev/null +++ b/lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex @@ -0,0 +1,24 @@ +<%= if get_flash(@conn, :info) do %> + +<% end %> +<%= if get_flash(@conn, :error) do %> + +<% end %> + +

    Two-factor recovery

    + +<%= form_for @conn, mfa_verify_path(@conn, :verify), [as: "mfa"], fn f -> %> +
    + <%= label f, :code, "Recovery code" %> + <%= text_input f, :code %> + <%= hidden_input f, :mfa_token, value: @mfa_token %> + <%= hidden_input f, :state, value: @state %> + <%= hidden_input f, :redirect_uri, value: @redirect_uri %> + <%= hidden_input f, :challenge_type, value: "recovery" %> +
    + +<%= submit "Verify" %> +<% end %> +
    "> + Enter a two-factor code + diff --git a/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex b/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex new file mode 100644 index 000000000..af6e546b0 --- /dev/null +++ b/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex @@ -0,0 +1,24 @@ +<%= if get_flash(@conn, :info) do %> + +<% end %> +<%= if get_flash(@conn, :error) do %> + +<% end %> + +

    Two-factor authentication

    + +<%= form_for @conn, mfa_verify_path(@conn, :verify), [as: "mfa"], fn f -> %> +
    + <%= label f, :code, "Authentication code" %> + <%= text_input f, :code %> + <%= hidden_input f, :mfa_token, value: @mfa_token %> + <%= hidden_input f, :state, value: @state %> + <%= hidden_input f, :redirect_uri, value: @redirect_uri %> + <%= hidden_input f, :challenge_type, value: "totp" %> +
    + +<%= submit "Verify" %> +<% end %> +"> + Enter a two-factor recovery code + diff --git a/lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex b/lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex new file mode 100644 index 000000000..adc3a3e3d --- /dev/null +++ b/lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex @@ -0,0 +1,13 @@ +<%= if @error do %> +

    <%= @error %>

    +<% end %> +

    Two-factor authentication

    +

    <%= @followee.nickname %>

    + +<%= form_for @conn, remote_follow_path(@conn, :do_follow), [as: "mfa"], fn f -> %> +<%= text_input f, :code, placeholder: "Authentication code", required: true %> +
    +<%= hidden_input f, :id, value: @followee.id %> +<%= hidden_input f, :token, value: @mfa_token %> +<%= submit "Authorize" %> +<% end %> diff --git a/lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex b/lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex index 89da760da..521dc9322 100644 --- a/lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex @@ -8,10 +8,12 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowController do require Logger alias Pleroma.Activity + alias Pleroma.MFA alias Pleroma.Object.Fetcher alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.User alias Pleroma.Web.Auth.Authenticator + alias Pleroma.Web.Auth.TOTPAuthenticator alias Pleroma.Web.CommonAPI @status_types ["Article", "Event", "Note", "Video", "Page", "Question"] @@ -68,6 +70,8 @@ defp is_status?(acct) do # POST /ostatus_subscribe # + # adds a remote account in followers if user already is signed in. + # def do_follow(%{assigns: %{user: %User{} = user}} = conn, %{"user" => %{"id" => id}}) do with {:fetch_user, %User{} = followee} <- {:fetch_user, User.get_cached_by_id(id)}, {:ok, _, _, _} <- CommonAPI.follow(user, followee) do @@ -78,9 +82,33 @@ def do_follow(%{assigns: %{user: %User{} = user}} = conn, %{"user" => %{"id" => end end + # POST /ostatus_subscribe + # + # step 1. + # checks login\password and displays step 2 form of MFA if need. + # def do_follow(conn, %{"authorization" => %{"name" => _, "password" => _, "id" => id}}) do - with {:fetch_user, %User{} = followee} <- {:fetch_user, User.get_cached_by_id(id)}, + with {_, %User{} = followee} <- {:fetch_user, User.get_cached_by_id(id)}, {_, {:ok, user}, _} <- {:auth, Authenticator.get_user(conn), followee}, + {_, _, _, false} <- {:mfa_required, followee, user, MFA.require?(user)}, + {:ok, _, _, _} <- CommonAPI.follow(user, followee) do + redirect(conn, to: "/users/#{followee.id}") + else + error -> + handle_follow_error(conn, error) + end + end + + # POST /ostatus_subscribe + # + # step 2 + # checks TOTP code. otherwise displays form with errors + # + def do_follow(conn, %{"mfa" => %{"code" => code, "token" => token, "id" => id}}) do + with {_, %User{} = followee} <- {:fetch_user, User.get_cached_by_id(id)}, + {_, _, {:ok, %{user: user}}} <- {:mfa_token, followee, MFA.Token.validate(token)}, + {_, _, _, {:ok, _}} <- + {:verify_mfa_code, followee, token, TOTPAuthenticator.verify(code, user)}, {:ok, _, _, _} <- CommonAPI.follow(user, followee) do redirect(conn, to: "/users/#{followee.id}") else @@ -94,6 +122,23 @@ def do_follow(%{assigns: %{user: nil}} = conn, _) do render(conn, "followed.html", %{error: "Insufficient permissions: follow | write:follows."}) end + defp handle_follow_error(conn, {:mfa_token, followee, _} = _) do + render(conn, "follow_login.html", %{error: "Wrong username or password", followee: followee}) + end + + defp handle_follow_error(conn, {:verify_mfa_code, followee, token, _} = _) do + render(conn, "follow_mfa.html", %{ + error: "Wrong authentication code", + followee: followee, + mfa_token: token + }) + end + + defp handle_follow_error(conn, {:mfa_required, followee, user, _} = _) do + {:ok, %{token: token}} = MFA.Token.create_token(user) + render(conn, "follow_mfa.html", %{followee: followee, mfa_token: token, error: false}) + end + defp handle_follow_error(conn, {:auth, _, followee} = _) do render(conn, "follow_login.html", %{error: "Wrong username or password", followee: followee}) end diff --git a/mix.exs b/mix.exs index beb05aab9..6d65e18d4 100644 --- a/mix.exs +++ b/mix.exs @@ -176,6 +176,7 @@ defp deps do {:quack, "~> 0.1.1"}, {:joken, "~> 2.0"}, {:benchee, "~> 1.0"}, + {:pot, "~> 0.10.2"}, {:esshd, "~> 0.1.0", runtime: Application.get_env(:esshd, :enabled, false)}, {:ex_const, "~> 0.2"}, {:plug_static_index_html, "~> 1.0.0"}, diff --git a/mix.lock b/mix.lock index 28287cf97..4792249d7 100644 --- a/mix.lock +++ b/mix.lock @@ -2,8 +2,7 @@ "accept": {:hex, :accept, "0.3.5", "b33b127abca7cc948bbe6caa4c263369abf1347cfa9d8e699c6d214660f10cd1", [:rebar3], [], "hexpm", "11b18c220bcc2eab63b5470c038ef10eb6783bcb1fcdb11aa4137defa5ac1bb8"}, "auto_linker": {:git, "https://git.pleroma.social/pleroma/auto_linker.git", "95e8188490e97505c56636c1379ffdf036c1fdde", [ref: "95e8188490e97505c56636c1379ffdf036c1fdde"]}, "base62": {:hex, :base62, "1.2.1", "4866763e08555a7b3917064e9eef9194c41667276c51b59de2bc42c6ea65f806", [:mix], [{:custom_base, "~> 0.2.1", [hex: :custom_base, repo: "hexpm", optional: false]}], "hexpm", "3b29948de2013d3f93aa898c884a9dff847e7aec75d9d6d8c1dc4c61c2716c42"}, - "base64url": {:hex, :base64url, "0.0.1", "36a90125f5948e3afd7be97662a1504b934dd5dac78451ca6e9abf85a10286be", [:rebar], [], "hexpm"}, - "bbcode": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/bbcode.git", "f2d267675e9a7e1ad1ea9beb4cc23382762b66c2", [ref: "v0.2.0"]}, + "bbcode": {:hex, :bbcode, "0.1.1", "0023e2c7814119b2e620b7add67182e3f6019f92bfec9a22da7e99821aceba70", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "5a981b98ac7d366a9b6bf40eac389aaf4d6e623c631e6b6f8a6b571efaafd338"}, "bbcode_pleroma": {:hex, :bbcode_pleroma, "0.2.0", "d36f5bca6e2f62261c45be30fa9b92725c0655ad45c99025cb1c3e28e25803ef", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "19851074419a5fedb4ef49e1f01b30df504bb5dbb6d6adfc135238063bebd1c3"}, "benchee": {:hex, :benchee, "1.0.1", "66b211f9bfd84bd97e6d1beaddf8fc2312aaabe192f776e8931cb0c16f53a521", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}], "hexpm", "3ad58ae787e9c7c94dd7ceda3b587ec2c64604563e049b2a0e8baafae832addb"}, "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"}, @@ -19,38 +18,33 @@ "cowboy": {:hex, :cowboy, "2.7.0", "91ed100138a764355f43316b1d23d7ff6bdb0de4ea618cb5d8677c93a7a2f115", [:rebar3], [{:cowlib, "~> 2.8.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.7.1", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "04fd8c6a39edc6aaa9c26123009200fc61f92a3a94f3178c527b70b767c6e605"}, "cowlib": {:hex, :cowlib, "2.8.0", "fd0ff1787db84ac415b8211573e9a30a3ebe71b5cbff7f720089972b2319c8a4", [:rebar3], [], "hexpm", "79f954a7021b302186a950a32869dbc185523d99d3e44ce430cd1f3289f41ed4"}, "credo": {:hex, :credo, "1.1.5", "caec7a3cadd2e58609d7ee25b3931b129e739e070539ad1a0cd7efeeb47014f4", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "d0bbd3222607ccaaac5c0340f7f525c627ae4d7aee6c8c8c108922620c5b6446"}, - "crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"}, "crypt": {:git, "https://github.com/msantos/crypt", "1f2b58927ab57e72910191a7ebaeff984382a1d3", [ref: "1f2b58927ab57e72910191a7ebaeff984382a1d3"]}, "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, "db_connection": {:hex, :db_connection, "2.2.1", "caee17725495f5129cb7faebde001dc4406796f12a62b8949f4ac69315080566", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm", "2b02ece62d9f983fcd40954e443b7d9e6589664380e5546b2b9b523cd0fb59e1"}, "decimal": {:hex, :decimal, "1.8.1", "a4ef3f5f3428bdbc0d35374029ffcf4ede8533536fa79896dd450168d9acdf3c", [:mix], [], "hexpm", "3cb154b00225ac687f6cbd4acc4b7960027c757a5152b369923ead9ddbca7aec"}, "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, "earmark": {:hex, :earmark, "1.4.3", "364ca2e9710f6bff494117dbbd53880d84bebb692dafc3a78eb50aa3183f2bfd", [:mix], [], "hexpm", "8cf8a291ebf1c7b9539e3cddb19e9cef066c2441b1640f13c34c1d3cfc825fec"}, - "ecto": {:hex, :ecto, "3.4.0", "a7a83ab8359bf816ce729e5e65981ce25b9fc5adfc89c2ea3980f4fed0bfd7c1", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "5eed18252f5b5bbadec56a24112b531343507dbe046273133176b12190ce19cc"}, + "ecto": {:hex, :ecto, "3.4.2", "6890af71025769bd27ef62b1ed1925cfe23f7f0460bcb3041da4b705215ff23e", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3959b8a83e086202a4bd86b4b5e6e71f9f1840813de14a57d502d3fc2ef7132"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, "ecto_sql": {:hex, :ecto_sql, "3.3.4", "aa18af12eb875fbcda2f75e608b3bd534ebf020fc4f6448e4672fcdcbb081244", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4 or ~> 3.3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5eccbdbf92e3c6f213007a82d5dbba4cd9bb659d1a21331f89f408e4c0efd7a8"}, "esshd": {:hex, :esshd, "0.1.1", "d4dd4c46698093a40a56afecce8a46e246eb35463c457c246dacba2e056f31b5", [:mix], [], "hexpm", "d73e341e3009d390aa36387dc8862860bf9f874c94d9fd92ade2926376f49981"}, "eternal": {:hex, :eternal, "1.2.1", "d5b6b2499ba876c57be2581b5b999ee9bdf861c647401066d3eeed111d096bc4", [:mix], [], "hexpm", "b14f1dc204321429479c569cfbe8fb287541184ed040956c8862cb7a677b8406"}, - "ex2ms": {:hex, :ex2ms, "1.5.0", "19e27f9212be9a96093fed8cdfbef0a2b56c21237196d26760f11dfcfae58e97", [:mix], [], "hexpm"}, "ex_aws": {:hex, :ex_aws, "2.1.1", "1e4de2106cfbf4e837de41be41cd15813eabc722315e388f0d6bb3732cec47cd", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "1.6.3 or 1.6.5 or 1.7.1 or 1.8.6 or ~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8", [hex: :jsx, repo: "hexpm", optional: true]}, {:poison, ">= 1.2.0", [hex: :poison, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "06b6fde12b33bb6d65d5d3493e903ba5a56d57a72350c15285a4298338089e10"}, "ex_aws_s3": {:hex, :ex_aws_s3, "2.0.2", "c0258bbdfea55de4f98f0b2f0ca61fe402cc696f573815134beb1866e778f47b", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "0569f5b211b1a3b12b705fe2a9d0e237eb1360b9d76298028df2346cad13097a"}, "ex_const": {:hex, :ex_const, "0.2.4", "d06e540c9d834865b012a17407761455efa71d0ce91e5831e86881b9c9d82448", [:mix], [], "hexpm", "96fd346610cc992b8f896ed26a98be82ac4efb065a0578f334a32d60a3ba9767"}, - "ex_doc": {:hex, :ex_doc, "0.21.3", "857ec876b35a587c5d9148a2512e952e24c24345552259464b98bfbb883c7b42", [:mix], [{:earmark, "~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "0db1ee8d1547ab4877c5b5dffc6604ef9454e189928d5ba8967d4a58a801f161"}, + "ex_doc": {:hex, :ex_doc, "0.21.2", "caca5bc28ed7b3bdc0b662f8afe2bee1eedb5c3cf7b322feeeb7c6ebbde089d6", [:mix], [{:earmark, "~> 1.3.3 or ~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "f1155337ae17ff7a1255217b4c1ceefcd1860b7ceb1a1874031e7a861b052e39"}, "ex_machina": {:hex, :ex_machina, "2.3.0", "92a5ad0a8b10ea6314b876a99c8c9e3f25f4dde71a2a835845b136b9adaf199a", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "b84f6af156264530b312a8ab98ac6088f6b77ae5fe2058305c81434aa01fbaf9"}, "ex_syslogger": {:hex, :ex_syslogger, "1.5.2", "72b6aa2d47a236e999171f2e1ec18698740f40af0bd02c8c650bf5f1fd1bac79", [:mix], [{:poison, ">= 1.5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:syslog, "~> 1.1.0", [hex: :syslog, repo: "hexpm", optional: false]}], "hexpm", "ab9fab4136dbc62651ec6f16fa4842f10cf02ab4433fa3d0976c01be99398399"}, "excoveralls": {:hex, :excoveralls, "0.12.2", "a513defac45c59e310ac42fcf2b8ae96f1f85746410f30b1ff2b710a4b6cd44b", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "151c476331d49b45601ffc45f43cb3a8beb396b02a34e3777fea0ad34ae57d89"}, - "fast_html": {:hex, :fast_html, "1.0.3", "2cc0d4b68496266a1530e0c852cafeaede0bd10cfdee26fda50dc696c203162f", [:make, :mix], [], "hexpm", "ab3d782b639d3c4655fbaec0f9d032c91f8cab8dd791ac7469c2381bc7c32f85"}, - "fast_sanitize": {:hex, :fast_sanitize, "0.1.7", "2a7cd8734c88a2de6de55022104f8a3b87f1fdbe8bbf131d9049764b53d50d0d", [:mix], [{:fast_html, "~> 1.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f39fe8ea08fbac17487c30bf09b7d9f3e12472e51fb07a88ffeb8fd17da8ab67"}, + "fast_html": {:hex, :fast_html, "1.0.1", "5bc7df4dc4607ec2c314c16414e4111d79a209956c4f5df96602d194c61197f9", [:make, :mix], [], "hexpm", "18e627dd62051a375ef94b197f41e8027c3e8eef0180ab8f81e0543b3dc6900a"}, + "fast_sanitize": {:hex, :fast_sanitize, "0.1.6", "60a5ae96879956dea409a91a77f5dd2994c24cc10f80eefd8f9892ee4c0c7b25", [:mix], [{:fast_html, "~> 1.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "b73f50f0cb522dd0331ea8e8c90b408de42c50f37641219d6364f0e3e7efd22c"}, "flake_id": {:hex, :flake_id, "0.1.0", "7716b086d2e405d09b647121a166498a0d93d1a623bead243e1f74216079ccb3", [:mix], [{:base62, "~> 1.2", [hex: :base62, repo: "hexpm", optional: false]}, {:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "31fc8090fde1acd267c07c36ea7365b8604055f897d3a53dd967658c691bd827"}, - "floki": {:hex, :floki, "0.25.0", "b1c9ddf5f32a3a90b43b76f3386ca054325dc2478af020e87b5111c19f2284ac", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "631f4e627c46d5ecd347df5a2accdaf0621c77c3693c5b75a8ad58e84c61f242"}, + "floki": {:hex, :floki, "0.26.0", "4df88977e2e357c6720e1b650f613444bfb48c5acfc6a0c646ab007d08ad13bf", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "e7b66ce7feef5518a9cd9fc7b52dd62a64028bd9cb6d6ad282a0f0fc90a4ae52"}, "gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm", "29bd14a88030980849c7ed2447b8db6d6c9278a28b11a44cafe41b791205440f"}, - "gen_stage": {:hex, :gen_stage, "0.14.3", "d0c66f1c87faa301c1a85a809a3ee9097a4264b2edf7644bf5c123237ef732bf", [:mix], [], "hexpm"}, - "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"}, "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"}, @@ -59,37 +53,34 @@ "joken": {:hex, :joken, "2.2.0", "2daa1b12be05184aff7b5ace1d43ca1f81345962285fff3f88db74927c954d3a", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "b4f92e30388206f869dd25d1af628a1d99d7586e5cf0672f64d4df84c4d2f5e9"}, "jose": {:hex, :jose, "1.10.1", "16d8e460dae7203c6d1efa3f277e25b5af8b659febfc2f2eb4bacf87f128b80a", [:mix, :rebar3], [], "hexpm", "3c7ddc8a9394b92891db7c2771da94bf819834a1a4c92e30857b7d582e2f8257"}, "jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"}, - "libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm"}, "makeup": {:hex, :makeup, "1.0.0", "671df94cf5a594b739ce03b0d0316aa64312cee2574b6a44becb83cd90fb05dc", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "a10c6eb62cca416019663129699769f0c2ccf39428b3bb3c0cb38c718a0c186d"}, "makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "d4b316c7222a85bbaa2fd7c6e90e37e953257ad196dc229505137c5e505e9eff"}, "meck": {:hex, :meck, "0.8.13", "ffedb39f99b0b99703b8601c6f17c7f76313ee12de6b646e671e3188401f7866", [:rebar3], [], "hexpm", "d34f013c156db51ad57cc556891b9720e6a1c1df5fe2e15af999c84d6cebeb1a"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, "mime": {:hex, :mime, "1.3.1", "30ce04ab3175b6ad0bdce0035cba77bba68b813d523d1aac73d9781b4d193cf8", [:mix], [], "hexpm", "6cbe761d6a0ca5a31a0931bf4c63204bceb64538e664a8ecf784a9a6f3b875f1"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, - "mochiweb": {:hex, :mochiweb, "2.18.0", "eb55f1db3e6e960fac4e6db4e2db9ec3602cc9f30b86cd1481d56545c3145d2e", [:rebar3], [], "hexpm"}, "mock": {:hex, :mock, "0.3.4", "c5862eb3b8c64237f45f586cf00c9d892ba07bb48305a43319d428ce3c2897dd", [:mix], [{:meck, "~> 0.8.13", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "e6d886252f1a41f4ba06ecf2b4c8d38760b34b1c08a11c28f7397b2e03995964"}, "mogrify": {:hex, :mogrify, "0.6.1", "de1b527514f2d95a7bbe9642eb556061afb337e220cf97adbf3a4e6438ed70af", [:mix], [], "hexpm", "3bc928d817974fa10cc11e6c89b9a9361e37e96dbbf3d868c41094ec05745dcd"}, "mox": {:hex, :mox, "0.5.1", "f86bb36026aac1e6f924a4b6d024b05e9adbed5c63e8daa069bd66fb3292165b", [:mix], [], "hexpm", "052346cf322311c49a0f22789f3698eea030eec09b8c47367f0686ef2634ae14"}, - "myhtmlex": {:git, "https://git.pleroma.social/pleroma/myhtmlex.git", "ad0097e2f61d4953bfef20fb6abddf23b87111e6", [ref: "ad0097e2f61d4953bfef20fb6abddf23b87111e6", submodules: true]}, "nimble_parsec": {:hex, :nimble_parsec, "0.5.3", "def21c10a9ed70ce22754fdeea0810dafd53c2db3219a0cd54cf5526377af1c6", [:mix], [], "hexpm", "589b5af56f4afca65217a1f3eb3fee7e79b09c40c742fddc1c312b3ac0b3399f"}, - "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, "oban": {:hex, :oban, "1.2.0", "7cca94d341be43d220571e28f69131c4afc21095b25257397f50973d3fc59b07", [:mix], [{:ecto_sql, "~> 3.1", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ba5f8b3f7d76967b3e23cf8014f6a13e4ccb33431e4808f036709a7f822362ee"}, "open_api_spex": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/open_api_spex.git", "b862ebd78de0df95875cf46feb6e9607130dc2a8", [ref: "b862ebd78de0df95875cf46feb6e9607130dc2a8"]}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "0.12.4", "8dd29ed783f2e12195d7e0a4640effc0a7c37e6537da491f1db01839eee6d053", [:mix], [], "hexpm", "595d09db74cb093b1903381c9de423276a931a2480a46a1a5dc7f932a2a6375b"}, - "phoenix": {:hex, :phoenix, "1.4.13", "67271ad69b51f3719354604f4a3f968f83aa61c19199343656c9caee057ff3b8", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ab765a0feddb81fc62e2116c827b5f068df85159c162bee760745276ad7ddc1b"}, + "phoenix": {:hex, :phoenix, "1.4.12", "b86fa85a2ba336f5de068549de5ccceec356fd413264a9637e7733395d6cc4ea", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "58331ade6d77e1312a3d976f0fa41803b8f004b2b5f489193425bc46aea3ed30"}, "phoenix_ecto": {:hex, :phoenix_ecto, "4.1.0", "a044d0756d0464c5a541b4a0bf4bcaf89bffcaf92468862408290682c73ae50d", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "c5e666a341ff104d0399d8f0e4ff094559b2fde13a5985d4cb5023b2c2ac558b"}, "phoenix_html": {:hex, :phoenix_html, "2.14.0", "d8c6bc28acc8e65f8ea0080ee05aa13d912c8758699283b8d3427b655aabe284", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "b0bb30eda478a06dbfbe96728061a93833db3861a49ccb516f839ecb08493fbb"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "1.1.2", "496c303bdf1b2e98a9d26e89af5bba3ab487ba3a3735f74bf1f4064d2a845a3e", [:mix], [], "hexpm", "1f13f9f0f3e769a667a6b6828d29dec37497a082d195cc52dbef401a9b69bf38"}, "phoenix_swoosh": {:hex, :phoenix_swoosh, "0.2.0", "a7e0b32077cd6d2323ae15198839b05d9caddfa20663fd85787479e81f89520e", [:mix], [{:phoenix, "~> 1.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.2", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 0.1", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "ebf1bfa7b3c1c850c04929afe02e2e0d7ab135e0706332c865de03e761676b1f"}, - "plug": {:hex, :plug, "1.9.0", "8d7c4e26962283ff9f8f3347bd73838e2413fbc38b7bb5467d5924f68f3a5a4a", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "9902eda2c52ada2a096434682e99a2493f5d06a94d6ac6bcfff9805f952350f1"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.1.2", "8b0addb5908c5238fac38e442e81b6fcd32788eaa03246b4d55d147c47c5805e", [:mix], [{:cowboy, "~> 2.5", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "7d722581ce865a237e14da6d946f92704101740a256bd13ec91e63c0b122fc70"}, - "plug_crypto": {:hex, :plug_crypto, "1.1.2", "bdd187572cc26dbd95b87136290425f2b580a116d3fb1f564216918c9730d227", [:mix], [], "hexpm", "6b8b608f895b6ffcfad49c37c7883e8df98ae19c6a28113b02aa1e9c5b22d6b5"}, + "plug": {:hex, :plug, "1.8.3", "12d5f9796dc72e8ac9614e94bda5e51c4c028d0d428e9297650d09e15a684478", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "164baaeb382d19beee0ec484492aa82a9c8685770aee33b24ec727a0971b34d0"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.1.1", "a196e4f428d7f5d6dba5ded314cc55cd0fbddf1110af620f75c0190e77844b33", [:mix], [{:cowboy, "~> 2.5", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "15a3c34ffaccef8a0b575b8d39ab1b9044586d7dab917292cdc44cf2737df7f2"}, + "plug_crypto": {:hex, :plug_crypto, "1.0.0", "18e49317d3fa343f24620ed22795ec29d4a5e602d52d1513ccea0b07d8ea7d4d", [:mix], [], "hexpm", "73c1682f0e414cfb5d9b95c8e8cd6ffcfdae699e3b05e1db744e58b7be857759"}, "plug_static_index_html": {:hex, :plug_static_index_html, "1.0.0", "840123d4d3975585133485ea86af73cb2600afd7f2a976f9f5fd8b3808e636a0", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "79fd4fcf34d110605c26560cbae8f23c603ec4158c08298bd4360fdea90bb5cf"}, "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, "postgrex": {:hex, :postgrex, "0.15.3", "5806baa8a19a68c4d07c7a624ccdb9b57e89cbc573f1b98099e3741214746ae4", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "4737ce62a31747b4c63c12b20c62307e51bb4fcd730ca0c32c280991e0606c90"}, - "prometheus": {:hex, :prometheus, "4.5.0", "8f4a2246fe0beb50af0f77c5e0a5bb78fe575c34a9655d7f8bc743aad1c6bf76", [:mix, :rebar3], [], "hexpm", "679b5215480fff612b8351f45c839d995a07ce403e42ff02f1c6b20960d41a4e"}, + "pot": {:hex, :pot, "0.10.2", "9895c83bcff8cd22d9f5bc79dfc88a188176b261b618ad70d93faf5c5ca36e67", [:rebar3], [], "hexpm", "ac589a8e296b7802681e93cd0a436faec117ea63e9916709c628df31e17e91e2"}, + "prometheus": {:hex, :prometheus, "4.4.1", "1e96073b3ed7788053768fea779cbc896ddc3bdd9ba60687f2ad50b252ac87d6", [:mix, :rebar3], [], "hexpm", "d39f2ce1f3f29f3bf04f915aa3cf9c7cd4d2cee2f975e05f526e06cae9b7c902"}, "prometheus_ecto": {:hex, :prometheus_ecto, "1.4.3", "3dd4da1812b8e0dbee81ea58bb3b62ed7588f2eae0c9e97e434c46807ff82311", [:mix], [{:ecto, "~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "8d66289f77f913b37eda81fd287340c17e61a447549deb28efc254532b2bed82"}, "prometheus_ex": {:hex, :prometheus_ex, "3.0.5", "fa58cfd983487fc5ead331e9a3e0aa622c67232b3ec71710ced122c4c453a02f", [:mix], [{:prometheus, "~> 4.0", [hex: :prometheus, repo: "hexpm", optional: false]}], "hexpm", "9fd13404a48437e044b288b41f76e64acd9735fb8b0e3809f494811dfa66d0fb"}, "prometheus_phoenix": {:hex, :prometheus_phoenix, "1.3.0", "c4b527e0b3a9ef1af26bdcfbfad3998f37795b9185d475ca610fe4388fdd3bb5", [:mix], [{:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.3 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "c4d1404ac4e9d3d963da601db2a7d8ea31194f0017057fabf0cfb9bf5a6c8c75"}, diff --git a/priv/repo/migrations/20190506054542_add_multi_factor_authentication_settings_to_user.exs b/priv/repo/migrations/20190506054542_add_multi_factor_authentication_settings_to_user.exs new file mode 100644 index 000000000..8b653c61f --- /dev/null +++ b/priv/repo/migrations/20190506054542_add_multi_factor_authentication_settings_to_user.exs @@ -0,0 +1,9 @@ +defmodule Pleroma.Repo.Migrations.AddMultiFactorAuthenticationSettingsToUser do + use Ecto.Migration + + def change do + alter table(:users) do + add(:multi_factor_authentication_settings, :map, default: %{}) + end + end +end diff --git a/priv/repo/migrations/20190508193213_create_mfa_tokens.exs b/priv/repo/migrations/20190508193213_create_mfa_tokens.exs new file mode 100644 index 000000000..da9f8fabe --- /dev/null +++ b/priv/repo/migrations/20190508193213_create_mfa_tokens.exs @@ -0,0 +1,16 @@ +defmodule Pleroma.Repo.Migrations.CreateMfaTokens do + use Ecto.Migration + + def change do + create table(:mfa_tokens) do + add(:user_id, references(:users, type: :uuid, on_delete: :delete_all)) + add(:authorization_id, references(:oauth_authorizations, on_delete: :delete_all)) + add(:token, :string) + add(:valid_until, :naive_datetime_usec) + + timestamps() + end + + create(unique_index(:mfa_tokens, :token)) + end +end diff --git a/priv/static/adminfe/static/fonts/element-icons.535877f.woff b/priv/static/adminfe/static/fonts/element-icons.535877f.woff deleted file mode 100644 index 02b9a2539e425a7a8c244faba92527602be76212..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28200 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
    %#5t+7yTm^Z{)9pPFdh-)p? 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, <<_::bytes-size(4)>>] = codes + end +end diff --git a/test/mfa/totp_test.exs b/test/mfa/totp_test.exs new file mode 100644 index 000000000..50153d208 --- /dev/null +++ b/test/mfa/totp_test.exs @@ -0,0 +1,17 @@ +defmodule Pleroma.MFA.TOTPTest do + use Pleroma.DataCase + + alias Pleroma.MFA.TOTP + + test "create provisioning_uri to generate qrcode" do + uri = + TOTP.provisioning_uri("test-secrcet", "test@example.com", + issuer: "Plerome-42", + digits: 8, + period: 60 + ) + + assert uri == + "otpauth://totp/test@example.com?digits=8&issuer=Plerome-42&period=60&secret=test-secrcet" + end +end diff --git a/test/mfa_test.exs b/test/mfa_test.exs new file mode 100644 index 000000000..94bc48c26 --- /dev/null +++ b/test/mfa_test.exs @@ -0,0 +1,53 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2018 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.MFATest do + use Pleroma.DataCase + + import Pleroma.Factory + alias Comeonin.Pbkdf2 + alias Pleroma.MFA + + describe "mfa_settings" do + test "returns settings user's" do + user = + insert(:user, + multi_factor_authentication_settings: %MFA.Settings{ + enabled: true, + totp: %MFA.Settings.TOTP{secret: "xx", confirmed: true} + } + ) + + settings = MFA.mfa_settings(user) + assert match?(^settings, %{enabled: true, totp: true}) + end + end + + describe "generate backup codes" do + test "returns backup codes" do + user = insert(:user) + + {:ok, [code1, code2]} = MFA.generate_backup_codes(user) + updated_user = refresh_record(user) + [hash1, hash2] = updated_user.multi_factor_authentication_settings.backup_codes + assert Pbkdf2.checkpw(code1, hash1) + assert Pbkdf2.checkpw(code2, hash2) + end + end + + describe "invalidate_backup_code" do + test "invalid used code" do + user = insert(:user) + + {:ok, _} = MFA.generate_backup_codes(user) + user = refresh_record(user) + assert length(user.multi_factor_authentication_settings.backup_codes) == 2 + [hash_code | _] = user.multi_factor_authentication_settings.backup_codes + + {:ok, user} = MFA.invalidate_backup_code(user, hash_code) + + assert length(user.multi_factor_authentication_settings.backup_codes) == 1 + end + end +end diff --git a/test/plugs/ensure_authenticated_plug_test.exs b/test/plugs/ensure_authenticated_plug_test.exs index 4e6142aab..a0667c5e0 100644 --- a/test/plugs/ensure_authenticated_plug_test.exs +++ b/test/plugs/ensure_authenticated_plug_test.exs @@ -24,6 +24,31 @@ test "it continues if a user is assigned", %{conn: conn} do end end + test "it halts if user is assigned and MFA enabled", %{conn: conn} do + conn = + conn + |> assign(:user, %User{multi_factor_authentication_settings: %{enabled: true}}) + |> assign(:auth_credentials, %{password: "xd-42"}) + |> EnsureAuthenticatedPlug.call(%{}) + + assert conn.status == 403 + assert conn.halted == true + + assert conn.resp_body == + "{\"error\":\"Two-factor authentication enabled, you must use a access token.\"}" + end + + test "it continues if user is assigned and MFA disabled", %{conn: conn} do + conn = + conn + |> assign(:user, %User{multi_factor_authentication_settings: %{enabled: false}}) + |> assign(:auth_credentials, %{password: "xd-42"}) + |> EnsureAuthenticatedPlug.call(%{}) + + refute conn.status == 403 + refute conn.halted + end + describe "with :if_func / :unless_func options" do setup do %{ diff --git a/test/support/builders/user_builder.ex b/test/support/builders/user_builder.ex index fcfea666f..0d0490714 100644 --- a/test/support/builders/user_builder.ex +++ b/test/support/builders/user_builder.ex @@ -11,6 +11,7 @@ def build(data \\ %{}) do bio: "A tester.", ap_id: "some id", last_digest_emailed_at: NaiveDateTime.truncate(NaiveDateTime.utc_now(), :second), + multi_factor_authentication_settings: %Pleroma.MFA.Settings{}, notification_settings: %Pleroma.User.NotificationSetting{} } diff --git a/test/support/factory.ex b/test/support/factory.ex index 495764782..c8c45e2a7 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -33,7 +33,8 @@ def user_factory do bio: sequence(:bio, &"Tester Number #{&1}"), last_digest_emailed_at: NaiveDateTime.utc_now(), last_refreshed_at: NaiveDateTime.utc_now(), - notification_settings: %Pleroma.User.NotificationSetting{} + notification_settings: %Pleroma.User.NotificationSetting{}, + multi_factor_authentication_settings: %Pleroma.MFA.Settings{} } %{ @@ -422,4 +423,13 @@ def marker_factory do last_read_id: "1" } end + + def mfa_token_factory do + %Pleroma.MFA.Token{ + token: :crypto.strong_rand_bytes(32) |> Base.url_encode64(padding: false), + authorization: build(:oauth_authorization), + valid_until: NaiveDateTime.add(NaiveDateTime.utc_now(), 60 * 10), + user: build(:user) + } + end end diff --git a/test/user_search_test.exs b/test/user_search_test.exs index cb847b516..17c63322a 100644 --- a/test/user_search_test.exs +++ b/test/user_search_test.exs @@ -172,6 +172,7 @@ test "works with URIs" do |> Map.put(:search_rank, nil) |> Map.put(:search_type, nil) |> Map.put(:last_digest_emailed_at, nil) + |> Map.put(:multi_factor_authentication_settings, nil) |> Map.put(:notification_settings, nil) assert user == expected diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index 7ab7cc15c..4697af50e 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -14,6 +14,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do alias Pleroma.Config alias Pleroma.ConfigDB alias Pleroma.HTML + alias Pleroma.MFA alias Pleroma.ModerationLog alias Pleroma.Repo alias Pleroma.ReportNote @@ -1278,6 +1279,38 @@ test "PATCH /api/pleroma/admin/users/:nickname/toggle_activation", %{admin: admi "@#{admin.nickname} deactivated users: @#{user.nickname}" end + describe "PUT disable_mfa" do + test "returns 200 and disable 2fa", %{conn: conn} do + user = + insert(:user, + multi_factor_authentication_settings: %MFA.Settings{ + enabled: true, + totp: %MFA.Settings.TOTP{secret: "otp_secret", confirmed: true} + } + ) + + response = + conn + |> put("/api/pleroma/admin/users/disable_mfa", %{nickname: user.nickname}) + |> json_response(200) + + assert response == user.nickname + mfa_settings = refresh_record(user).multi_factor_authentication_settings + + refute mfa_settings.enabled + refute mfa_settings.totp.confirmed + end + + test "returns 404 if user not found", %{conn: conn} do + response = + conn + |> put("/api/pleroma/admin/users/disable_mfa", %{nickname: "nickname"}) + |> json_response(404) + + assert response == "Not found" + 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") diff --git a/test/web/auth/pleroma_authenticator_test.exs b/test/web/auth/pleroma_authenticator_test.exs new file mode 100644 index 000000000..7125c5081 --- /dev/null +++ b/test/web/auth/pleroma_authenticator_test.exs @@ -0,0 +1,43 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.Auth.PleromaAuthenticatorTest do + use Pleroma.Web.ConnCase + + alias Pleroma.Web.Auth.PleromaAuthenticator + import Pleroma.Factory + + setup do + password = "testpassword" + name = "AgentSmith" + user = insert(:user, nickname: name, password_hash: Comeonin.Pbkdf2.hashpwsalt(password)) + {:ok, [user: user, name: name, password: password]} + end + + test "get_user/authorization", %{user: user, name: name, password: password} do + params = %{"authorization" => %{"name" => name, "password" => password}} + res = PleromaAuthenticator.get_user(%Plug.Conn{params: params}) + + assert {:ok, user} == res + end + + test "get_user/authorization with invalid password", %{name: name} do + params = %{"authorization" => %{"name" => name, "password" => "password"}} + res = PleromaAuthenticator.get_user(%Plug.Conn{params: params}) + + assert {:error, {:checkpw, false}} == res + end + + test "get_user/grant_type_password", %{user: user, name: name, password: password} do + params = %{"grant_type" => "password", "username" => name, "password" => password} + res = PleromaAuthenticator.get_user(%Plug.Conn{params: params}) + + assert {:ok, user} == res + end + + test "error credintails" do + res = PleromaAuthenticator.get_user(%Plug.Conn{params: %{}}) + assert {:error, :invalid_credentials} == res + end +end diff --git a/test/web/auth/totp_authenticator_test.exs b/test/web/auth/totp_authenticator_test.exs new file mode 100644 index 000000000..e08069490 --- /dev/null +++ b/test/web/auth/totp_authenticator_test.exs @@ -0,0 +1,51 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.Auth.TOTPAuthenticatorTest do + use Pleroma.Web.ConnCase + + alias Pleroma.MFA + alias Pleroma.MFA.BackupCodes + alias Pleroma.MFA.TOTP + alias Pleroma.Web.Auth.TOTPAuthenticator + + import Pleroma.Factory + + test "verify token" do + otp_secret = TOTP.generate_secret() + otp_token = TOTP.generate_token(otp_secret) + + user = + insert(:user, + multi_factor_authentication_settings: %MFA.Settings{ + enabled: true, + totp: %MFA.Settings.TOTP{secret: otp_secret, confirmed: true} + } + ) + + assert TOTPAuthenticator.verify(otp_token, user) == {:ok, :pass} + assert TOTPAuthenticator.verify(nil, user) == {:error, :invalid_token} + assert TOTPAuthenticator.verify("", user) == {:error, :invalid_token} + end + + test "checks backup codes" do + [code | _] = backup_codes = BackupCodes.generate() + + hashed_codes = + backup_codes + |> Enum.map(&Comeonin.Pbkdf2.hashpwsalt(&1)) + + user = + insert(:user, + multi_factor_authentication_settings: %MFA.Settings{ + enabled: true, + backup_codes: hashed_codes, + totp: %MFA.Settings.TOTP{secret: "otp_secret", confirmed: true} + } + ) + + assert TOTPAuthenticator.verify_recovery_code(user, code) == {:ok, :pass} + refute TOTPAuthenticator.verify_recovery_code(code, refresh_record(user)) == {:ok, :pass} + end +end diff --git a/test/web/oauth/mfa_controller_test.exs b/test/web/oauth/mfa_controller_test.exs new file mode 100644 index 000000000..ce4a07320 --- /dev/null +++ b/test/web/oauth/mfa_controller_test.exs @@ -0,0 +1,306 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2018 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.OAuth.MFAControllerTest do + use Pleroma.Web.ConnCase + import Pleroma.Factory + + alias Pleroma.MFA + alias Pleroma.MFA.BackupCodes + alias Pleroma.MFA.TOTP + alias Pleroma.Repo + alias Pleroma.Web.OAuth.Authorization + alias Pleroma.Web.OAuth.OAuthController + + setup %{conn: conn} do + otp_secret = TOTP.generate_secret() + + user = + insert(:user, + multi_factor_authentication_settings: %MFA.Settings{ + enabled: true, + backup_codes: [Comeonin.Pbkdf2.hashpwsalt("test-code")], + totp: %MFA.Settings.TOTP{secret: otp_secret, confirmed: true} + } + ) + + app = insert(:oauth_app) + {:ok, conn: conn, user: user, app: app} + end + + describe "show" do + setup %{conn: conn, user: user, app: app} do + mfa_token = + insert(:mfa_token, + user: user, + authorization: build(:oauth_authorization, app: app, scopes: ["write"]) + ) + + {:ok, conn: conn, mfa_token: mfa_token} + end + + test "GET /oauth/mfa renders mfa forms", %{conn: conn, mfa_token: mfa_token} do + conn = + get( + conn, + "/oauth/mfa", + %{ + "mfa_token" => mfa_token.token, + "state" => "a_state", + "redirect_uri" => "http://localhost:8080/callback" + } + ) + + assert response = html_response(conn, 200) + assert response =~ "Two-factor authentication" + assert response =~ mfa_token.token + assert response =~ "http://localhost:8080/callback" + end + + test "GET /oauth/mfa renders mfa recovery forms", %{conn: conn, mfa_token: mfa_token} do + conn = + get( + conn, + "/oauth/mfa", + %{ + "mfa_token" => mfa_token.token, + "state" => "a_state", + "redirect_uri" => "http://localhost:8080/callback", + "challenge_type" => "recovery" + } + ) + + assert response = html_response(conn, 200) + assert response =~ "Two-factor recovery" + assert response =~ mfa_token.token + assert response =~ "http://localhost:8080/callback" + end + end + + describe "verify" do + setup %{conn: conn, user: user, app: app} do + mfa_token = + insert(:mfa_token, + user: user, + authorization: build(:oauth_authorization, app: app, scopes: ["write"]) + ) + + {:ok, conn: conn, user: user, mfa_token: mfa_token, app: app} + end + + test "POST /oauth/mfa/verify, verify totp code", %{ + conn: conn, + user: user, + mfa_token: mfa_token, + app: app + } do + otp_token = TOTP.generate_token(user.multi_factor_authentication_settings.totp.secret) + + conn = + conn + |> post("/oauth/mfa/verify", %{ + "mfa" => %{ + "mfa_token" => mfa_token.token, + "challenge_type" => "totp", + "code" => otp_token, + "state" => "a_state", + "redirect_uri" => OAuthController.default_redirect_uri(app) + } + }) + + target = redirected_to(conn) + target_url = %URI{URI.parse(target) | query: nil} |> URI.to_string() + query = URI.parse(target).query |> URI.query_decoder() |> Map.new() + assert %{"state" => "a_state", "code" => code} = query + assert target_url == OAuthController.default_redirect_uri(app) + auth = Repo.get_by(Authorization, token: code) + assert auth.scopes == ["write"] + end + + test "POST /oauth/mfa/verify, verify recovery code", %{ + conn: conn, + mfa_token: mfa_token, + app: app + } do + conn = + conn + |> post("/oauth/mfa/verify", %{ + "mfa" => %{ + "mfa_token" => mfa_token.token, + "challenge_type" => "recovery", + "code" => "test-code", + "state" => "a_state", + "redirect_uri" => OAuthController.default_redirect_uri(app) + } + }) + + target = redirected_to(conn) + target_url = %URI{URI.parse(target) | query: nil} |> URI.to_string() + query = URI.parse(target).query |> URI.query_decoder() |> Map.new() + assert %{"state" => "a_state", "code" => code} = query + assert target_url == OAuthController.default_redirect_uri(app) + auth = Repo.get_by(Authorization, token: code) + assert auth.scopes == ["write"] + end + end + + describe "challenge/totp" do + test "returns access token with valid code", %{conn: conn, user: user, app: app} do + otp_token = TOTP.generate_token(user.multi_factor_authentication_settings.totp.secret) + + mfa_token = + insert(:mfa_token, + user: user, + authorization: build(:oauth_authorization, app: app, scopes: ["write"]) + ) + + response = + conn + |> post("/oauth/mfa/challenge", %{ + "mfa_token" => mfa_token.token, + "challenge_type" => "totp", + "code" => otp_token, + "client_id" => app.client_id, + "client_secret" => app.client_secret + }) + |> json_response(:ok) + + ap_id = user.ap_id + + assert match?( + %{ + "access_token" => _, + "expires_in" => 600, + "me" => ^ap_id, + "refresh_token" => _, + "scope" => "write", + "token_type" => "Bearer" + }, + response + ) + end + + test "returns errors when mfa token invalid", %{conn: conn, user: user, app: app} do + otp_token = TOTP.generate_token(user.multi_factor_authentication_settings.totp.secret) + + response = + conn + |> post("/oauth/mfa/challenge", %{ + "mfa_token" => "XXX", + "challenge_type" => "totp", + "code" => otp_token, + "client_id" => app.client_id, + "client_secret" => app.client_secret + }) + |> json_response(400) + + assert response == %{"error" => "Invalid code"} + end + + test "returns error when otp code is invalid", %{conn: conn, user: user, app: app} do + mfa_token = insert(:mfa_token, user: user) + + response = + conn + |> post("/oauth/mfa/challenge", %{ + "mfa_token" => mfa_token.token, + "challenge_type" => "totp", + "code" => "XXX", + "client_id" => app.client_id, + "client_secret" => app.client_secret + }) + |> json_response(400) + + assert response == %{"error" => "Invalid code"} + end + + test "returns error when client credentails is wrong ", %{conn: conn, user: user} do + otp_token = TOTP.generate_token(user.multi_factor_authentication_settings.totp.secret) + mfa_token = insert(:mfa_token, user: user) + + response = + conn + |> post("/oauth/mfa/challenge", %{ + "mfa_token" => mfa_token.token, + "challenge_type" => "totp", + "code" => otp_token, + "client_id" => "xxx", + "client_secret" => "xxx" + }) + |> json_response(400) + + assert response == %{"error" => "Invalid code"} + end + end + + describe "challenge/recovery" do + setup %{conn: conn} do + app = insert(:oauth_app) + {:ok, conn: conn, app: app} + end + + test "returns access token with valid code", %{conn: conn, app: app} do + otp_secret = TOTP.generate_secret() + + [code | _] = backup_codes = BackupCodes.generate() + + hashed_codes = + backup_codes + |> Enum.map(&Comeonin.Pbkdf2.hashpwsalt(&1)) + + user = + insert(:user, + multi_factor_authentication_settings: %MFA.Settings{ + enabled: true, + backup_codes: hashed_codes, + totp: %MFA.Settings.TOTP{secret: otp_secret, confirmed: true} + } + ) + + mfa_token = + insert(:mfa_token, + user: user, + authorization: build(:oauth_authorization, app: app, scopes: ["write"]) + ) + + response = + conn + |> post("/oauth/mfa/challenge", %{ + "mfa_token" => mfa_token.token, + "challenge_type" => "recovery", + "code" => code, + "client_id" => app.client_id, + "client_secret" => app.client_secret + }) + |> json_response(:ok) + + ap_id = user.ap_id + + assert match?( + %{ + "access_token" => _, + "expires_in" => 600, + "me" => ^ap_id, + "refresh_token" => _, + "scope" => "write", + "token_type" => "Bearer" + }, + response + ) + + error_response = + conn + |> post("/oauth/mfa/challenge", %{ + "mfa_token" => mfa_token.token, + "challenge_type" => "recovery", + "code" => code, + "client_id" => app.client_id, + "client_secret" => app.client_secret + }) + |> json_response(400) + + assert error_response == %{"error" => "Invalid code"} + end + end +end diff --git a/test/web/oauth/oauth_controller_test.exs b/test/web/oauth/oauth_controller_test.exs index f2f98d768..7a107584d 100644 --- a/test/web/oauth/oauth_controller_test.exs +++ b/test/web/oauth/oauth_controller_test.exs @@ -6,6 +6,8 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do use Pleroma.Web.ConnCase import Pleroma.Factory + alias Pleroma.MFA + alias Pleroma.MFA.TOTP alias Pleroma.Repo alias Pleroma.User alias Pleroma.Web.OAuth.Authorization @@ -604,6 +606,41 @@ test "redirects with oauth authorization, " <> end end + test "redirect to on two-factor auth page" do + otp_secret = TOTP.generate_secret() + + user = + insert(:user, + multi_factor_authentication_settings: %MFA.Settings{ + enabled: true, + totp: %MFA.Settings.TOTP{secret: otp_secret, confirmed: true} + } + ) + + app = insert(:oauth_app, scopes: ["read", "write", "follow"]) + + conn = + build_conn() + |> post("/oauth/authorize", %{ + "authorization" => %{ + "name" => user.nickname, + "password" => "test", + "client_id" => app.client_id, + "redirect_uri" => app.redirect_uris, + "scope" => "read write", + "state" => "statepassed" + } + }) + + result = html_response(conn, 200) + + mfa_token = Repo.get_by(MFA.Token, user_id: user.id) + assert result =~ app.redirect_uris + assert result =~ "statepassed" + assert result =~ mfa_token.token + assert result =~ "Two-factor authentication" + end + test "returns 401 for wrong credentials", %{conn: conn} do user = insert(:user) app = insert(:oauth_app) @@ -735,6 +772,46 @@ test "issues a token for `password` grant_type with valid credentials, with full assert token.scopes == app.scopes end + test "issues a mfa token for `password` grant_type, when MFA enabled" do + password = "testpassword" + otp_secret = TOTP.generate_secret() + + user = + insert(:user, + password_hash: Comeonin.Pbkdf2.hashpwsalt(password), + multi_factor_authentication_settings: %MFA.Settings{ + enabled: true, + totp: %MFA.Settings.TOTP{secret: otp_secret, confirmed: true} + } + ) + + app = insert(:oauth_app, scopes: ["read", "write"]) + + response = + build_conn() + |> post("/oauth/token", %{ + "grant_type" => "password", + "username" => user.nickname, + "password" => password, + "client_id" => app.client_id, + "client_secret" => app.client_secret + }) + |> json_response(403) + + assert match?( + %{ + "supported_challenge_types" => "totp", + "mfa_token" => _, + "error" => "mfa_required" + }, + response + ) + + token = Repo.get_by(MFA.Token, token: response["mfa_token"]) + assert token.user_id == user.id + assert token.authorization_id + end + test "issues a token for request with HTTP basic auth client credentials" do user = insert(:user) app = insert(:oauth_app, scopes: ["scope1", "scope2", "scope3"]) diff --git a/test/web/pleroma_api/controllers/two_factor_authentication_controller_test.exs b/test/web/pleroma_api/controllers/two_factor_authentication_controller_test.exs new file mode 100644 index 000000000..d23d08a00 --- /dev/null +++ b/test/web/pleroma_api/controllers/two_factor_authentication_controller_test.exs @@ -0,0 +1,260 @@ +defmodule Pleroma.Web.PleromaAPI.TwoFactorAuthenticationControllerTest do + use Pleroma.Web.ConnCase + + import Pleroma.Factory + alias Pleroma.MFA.Settings + alias Pleroma.MFA.TOTP + + describe "GET /api/pleroma/accounts/mfa/settings" do + test "returns user mfa settings for new user", %{conn: conn} do + token = insert(:oauth_token, scopes: ["read", "follow"]) + token2 = insert(:oauth_token, scopes: ["write"]) + + assert conn + |> put_req_header("authorization", "Bearer #{token.token}") + |> get("/api/pleroma/accounts/mfa") + |> json_response(:ok) == %{ + "settings" => %{"enabled" => false, "totp" => false} + } + + assert conn + |> put_req_header("authorization", "Bearer #{token2.token}") + |> get("/api/pleroma/accounts/mfa") + |> json_response(403) == %{ + "error" => "Insufficient permissions: read:security." + } + end + + test "returns user mfa settings with enabled totp", %{conn: conn} do + user = + insert(:user, + multi_factor_authentication_settings: %Settings{ + enabled: true, + totp: %Settings.TOTP{secret: "XXX", delivery_type: "app", confirmed: true} + } + ) + + token = insert(:oauth_token, scopes: ["read", "follow"], user: user) + + assert conn + |> put_req_header("authorization", "Bearer #{token.token}") + |> get("/api/pleroma/accounts/mfa") + |> json_response(:ok) == %{ + "settings" => %{"enabled" => true, "totp" => true} + } + end + end + + describe "GET /api/pleroma/accounts/mfa/backup_codes" do + test "returns backup codes", %{conn: conn} do + user = + insert(:user, + multi_factor_authentication_settings: %Settings{ + backup_codes: ["1", "2", "3"], + totp: %Settings.TOTP{secret: "secret"} + } + ) + + token = insert(:oauth_token, scopes: ["write", "follow"], user: user) + token2 = insert(:oauth_token, scopes: ["read"]) + + response = + conn + |> put_req_header("authorization", "Bearer #{token.token}") + |> get("/api/pleroma/accounts/mfa/backup_codes") + |> json_response(:ok) + + assert [<<_::bytes-size(6)>>, <<_::bytes-size(6)>>] = response["codes"] + user = refresh_record(user) + mfa_settings = user.multi_factor_authentication_settings + assert mfa_settings.totp.secret == "secret" + refute mfa_settings.backup_codes == ["1", "2", "3"] + refute mfa_settings.backup_codes == [] + + assert conn + |> put_req_header("authorization", "Bearer #{token2.token}") + |> get("/api/pleroma/accounts/mfa/backup_codes") + |> json_response(403) == %{ + "error" => "Insufficient permissions: write:security." + } + end + end + + describe "GET /api/pleroma/accounts/mfa/setup/totp" do + test "return errors when method is invalid", %{conn: conn} do + user = insert(:user) + token = insert(:oauth_token, scopes: ["write", "follow"], user: user) + + response = + conn + |> put_req_header("authorization", "Bearer #{token.token}") + |> get("/api/pleroma/accounts/mfa/setup/torf") + |> json_response(400) + + assert response == %{"error" => "undefined method"} + end + + test "returns key and provisioning_uri", %{conn: conn} do + user = + insert(:user, + multi_factor_authentication_settings: %Settings{backup_codes: ["1", "2", "3"]} + ) + + token = insert(:oauth_token, scopes: ["write", "follow"], user: user) + token2 = insert(:oauth_token, scopes: ["read"]) + + response = + conn + |> put_req_header("authorization", "Bearer #{token.token}") + |> get("/api/pleroma/accounts/mfa/setup/totp") + |> json_response(:ok) + + user = refresh_record(user) + mfa_settings = user.multi_factor_authentication_settings + secret = mfa_settings.totp.secret + refute mfa_settings.enabled + assert mfa_settings.backup_codes == ["1", "2", "3"] + + assert response == %{ + "key" => secret, + "provisioning_uri" => TOTP.provisioning_uri(secret, "#{user.email}") + } + + assert conn + |> put_req_header("authorization", "Bearer #{token2.token}") + |> get("/api/pleroma/accounts/mfa/setup/totp") + |> json_response(403) == %{ + "error" => "Insufficient permissions: write:security." + } + end + end + + describe "GET /api/pleroma/accounts/mfa/confirm/totp" do + test "returns success result", %{conn: conn} do + secret = TOTP.generate_secret() + code = TOTP.generate_token(secret) + + user = + insert(:user, + multi_factor_authentication_settings: %Settings{ + backup_codes: ["1", "2", "3"], + totp: %Settings.TOTP{secret: secret} + } + ) + + token = insert(:oauth_token, scopes: ["write", "follow"], user: user) + token2 = insert(:oauth_token, scopes: ["read"]) + + assert conn + |> put_req_header("authorization", "Bearer #{token.token}") + |> post("/api/pleroma/accounts/mfa/confirm/totp", %{password: "test", code: code}) + |> json_response(:ok) + + settings = refresh_record(user).multi_factor_authentication_settings + assert settings.enabled + assert settings.totp.secret == secret + assert settings.totp.confirmed + assert settings.backup_codes == ["1", "2", "3"] + + assert conn + |> put_req_header("authorization", "Bearer #{token2.token}") + |> post("/api/pleroma/accounts/mfa/confirm/totp", %{password: "test", code: code}) + |> json_response(403) == %{ + "error" => "Insufficient permissions: write:security." + } + end + + test "returns error if password incorrect", %{conn: conn} do + secret = TOTP.generate_secret() + code = TOTP.generate_token(secret) + + user = + insert(:user, + multi_factor_authentication_settings: %Settings{ + backup_codes: ["1", "2", "3"], + totp: %Settings.TOTP{secret: secret} + } + ) + + token = insert(:oauth_token, scopes: ["write", "follow"], user: user) + + response = + conn + |> put_req_header("authorization", "Bearer #{token.token}") + |> post("/api/pleroma/accounts/mfa/confirm/totp", %{password: "xxx", code: code}) + |> json_response(422) + + settings = refresh_record(user).multi_factor_authentication_settings + refute settings.enabled + refute settings.totp.confirmed + assert settings.backup_codes == ["1", "2", "3"] + assert response == %{"error" => "Invalid password."} + end + + test "returns error if code incorrect", %{conn: conn} do + secret = TOTP.generate_secret() + + user = + insert(:user, + multi_factor_authentication_settings: %Settings{ + backup_codes: ["1", "2", "3"], + totp: %Settings.TOTP{secret: secret} + } + ) + + token = insert(:oauth_token, scopes: ["write", "follow"], user: user) + token2 = insert(:oauth_token, scopes: ["read"]) + + response = + conn + |> put_req_header("authorization", "Bearer #{token.token}") + |> post("/api/pleroma/accounts/mfa/confirm/totp", %{password: "test", code: "code"}) + |> json_response(422) + + settings = refresh_record(user).multi_factor_authentication_settings + refute settings.enabled + refute settings.totp.confirmed + assert settings.backup_codes == ["1", "2", "3"] + assert response == %{"error" => "invalid_token"} + + assert conn + |> put_req_header("authorization", "Bearer #{token2.token}") + |> post("/api/pleroma/accounts/mfa/confirm/totp", %{password: "test", code: "code"}) + |> json_response(403) == %{ + "error" => "Insufficient permissions: write:security." + } + end + end + + describe "DELETE /api/pleroma/accounts/mfa/totp" do + test "returns success result", %{conn: conn} do + user = + insert(:user, + multi_factor_authentication_settings: %Settings{ + backup_codes: ["1", "2", "3"], + totp: %Settings.TOTP{secret: "secret"} + } + ) + + token = insert(:oauth_token, scopes: ["write", "follow"], user: user) + token2 = insert(:oauth_token, scopes: ["read"]) + + assert conn + |> put_req_header("authorization", "Bearer #{token.token}") + |> delete("/api/pleroma/accounts/mfa/totp", %{password: "test"}) + |> json_response(:ok) + + settings = refresh_record(user).multi_factor_authentication_settings + refute settings.enabled + assert settings.totp.secret == nil + refute settings.totp.confirmed + + assert conn + |> put_req_header("authorization", "Bearer #{token2.token}") + |> delete("/api/pleroma/accounts/mfa/totp", %{password: "test"}) + |> json_response(403) == %{ + "error" => "Insufficient permissions: write:security." + } + end + end +end diff --git a/test/web/twitter_api/remote_follow_controller_test.exs b/test/web/twitter_api/remote_follow_controller_test.exs index 5ff8694a8..f7e54c26a 100644 --- a/test/web/twitter_api/remote_follow_controller_test.exs +++ b/test/web/twitter_api/remote_follow_controller_test.exs @@ -6,11 +6,14 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do use Pleroma.Web.ConnCase alias Pleroma.Config + alias Pleroma.MFA + alias Pleroma.MFA.TOTP alias Pleroma.User alias Pleroma.Web.CommonAPI import ExUnit.CaptureLog import Pleroma.Factory + import Ecto.Query setup do Tesla.Mock.mock(fn env -> apply(HttpRequestMock, :request, [env]) end) @@ -160,6 +163,119 @@ test "returns success result when user already in followers", %{conn: conn} do end end + describe "POST /ostatus_subscribe - follow/2 with enabled Two-Factor Auth " do + test "render the MFA login form", %{conn: conn} do + otp_secret = TOTP.generate_secret() + + user = + insert(:user, + multi_factor_authentication_settings: %MFA.Settings{ + enabled: true, + totp: %MFA.Settings.TOTP{secret: otp_secret, confirmed: true} + } + ) + + user2 = insert(:user) + + response = + conn + |> post(remote_follow_path(conn, :do_follow), %{ + "authorization" => %{"name" => user.nickname, "password" => "test", "id" => user2.id} + }) + |> response(200) + + mfa_token = Pleroma.Repo.one(from(q in Pleroma.MFA.Token, where: q.user_id == ^user.id)) + + assert response =~ "Two-factor authentication" + assert response =~ "Authentication code" + assert response =~ mfa_token.token + refute user2.follower_address in User.following(user) + end + + test "returns error when password is incorrect", %{conn: conn} do + otp_secret = TOTP.generate_secret() + + user = + insert(:user, + multi_factor_authentication_settings: %MFA.Settings{ + enabled: true, + totp: %MFA.Settings.TOTP{secret: otp_secret, confirmed: true} + } + ) + + user2 = insert(:user) + + response = + conn + |> post(remote_follow_path(conn, :do_follow), %{ + "authorization" => %{"name" => user.nickname, "password" => "test1", "id" => user2.id} + }) + |> response(200) + + assert response =~ "Wrong username or password" + refute user2.follower_address in User.following(user) + end + + test "follows", %{conn: conn} do + otp_secret = TOTP.generate_secret() + + user = + insert(:user, + multi_factor_authentication_settings: %MFA.Settings{ + enabled: true, + totp: %MFA.Settings.TOTP{secret: otp_secret, confirmed: true} + } + ) + + {:ok, %{token: token}} = MFA.Token.create_token(user) + + user2 = insert(:user) + otp_token = TOTP.generate_token(otp_secret) + + conn = + conn + |> post( + remote_follow_path(conn, :do_follow), + %{ + "mfa" => %{"code" => otp_token, "token" => token, "id" => user2.id} + } + ) + + assert redirected_to(conn) == "/users/#{user2.id}" + assert user2.follower_address in User.following(user) + end + + test "returns error when auth code is incorrect", %{conn: conn} do + otp_secret = TOTP.generate_secret() + + user = + insert(:user, + multi_factor_authentication_settings: %MFA.Settings{ + enabled: true, + totp: %MFA.Settings.TOTP{secret: otp_secret, confirmed: true} + } + ) + + {:ok, %{token: token}} = MFA.Token.create_token(user) + + user2 = insert(:user) + otp_token = TOTP.generate_token(TOTP.generate_secret()) + + response = + conn + |> post( + remote_follow_path(conn, :do_follow), + %{ + "mfa" => %{"code" => otp_token, "token" => token, "id" => user2.id} + } + ) + |> response(200) + + assert response =~ "Wrong authentication code" + refute user2.follower_address in User.following(user) + end + end + describe "POST /ostatus_subscribe - follow/2 without assigned user " do test "follows", %{conn: conn} do user = insert(:user) From 9491ba3e49450e80cd1c21358c01e4e06e3d881d Mon Sep 17 00:00:00 2001 From: href Date: Thu, 7 May 2020 09:13:32 +0000 Subject: [PATCH 486/581] Streamer rework --- lib/pleroma/application.ex | 9 +- lib/pleroma/web/activity_pub/activity_pub.ex | 32 +- .../web/mastodon_api/websocket_handler.ex | 47 +- lib/pleroma/web/streamer/ping.ex | 37 -- lib/pleroma/web/streamer/state.ex | 82 --- lib/pleroma/web/streamer/streamer.ex | 250 ++++++- lib/pleroma/web/streamer/streamer_socket.ex | 35 - lib/pleroma/web/streamer/supervisor.ex | 37 -- lib/pleroma/web/streamer/worker.ex | 208 ------ test/integration/mastodon_websocket_test.exs | 7 +- test/notification_test.exs | 18 +- test/support/builders/activity_builder.ex | 10 +- test/support/conn_case.ex | 6 +- test/support/data_case.ex | 6 +- test/web/streamer/ping_test.exs | 36 - test/web/streamer/state_test.exs | 54 -- test/web/streamer/streamer_test.exs | 618 +++++++----------- 17 files changed, 535 insertions(+), 957 deletions(-) delete mode 100644 lib/pleroma/web/streamer/ping.ex delete mode 100644 lib/pleroma/web/streamer/state.ex delete mode 100644 lib/pleroma/web/streamer/streamer_socket.ex delete mode 100644 lib/pleroma/web/streamer/supervisor.ex delete mode 100644 lib/pleroma/web/streamer/worker.ex delete mode 100644 test/web/streamer/ping_test.exs delete mode 100644 test/web/streamer/state_test.exs diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 308d8cffa..a00bc0624 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -173,7 +173,14 @@ defp chat_enabled?, do: Config.get([:chat, :enabled]) defp streamer_child(env) when env in [:test, :benchmark], do: [] defp streamer_child(_) do - [Pleroma.Web.Streamer.supervisor()] + [ + {Registry, + [ + name: Pleroma.Web.Streamer.registry(), + keys: :duplicate, + partitions: System.schedulers_online() + ]} + ] end defp chat_child(_env, true) do diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 099df5879..8baaf97ac 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -170,12 +170,6 @@ def insert(map, local \\ true, fake \\ false, bypass_actor_check \\ false) when BackgroundWorker.enqueue("fetch_data_for_activity", %{"activity_id" => activity.id}) - Notification.create_notifications(activity) - - conversation = create_or_bump_conversation(activity, map["actor"]) - participations = get_participations(conversation) - stream_out(activity) - stream_out_participations(participations) {:ok, activity} else %Activity{} = activity -> @@ -198,6 +192,15 @@ def insert(map, local \\ true, fake \\ false, bypass_actor_check \\ false) when end end + def notify_and_stream(activity) do + Notification.create_notifications(activity) + + conversation = create_or_bump_conversation(activity, activity.actor) + participations = get_participations(conversation) + stream_out(activity) + stream_out_participations(participations) + end + defp create_or_bump_conversation(activity, actor) do with {:ok, conversation} <- Conversation.create_or_bump_for(activity), %User{} = user <- User.get_cached_by_ap_id(actor), @@ -274,6 +277,7 @@ defp do_create(%{to: to, actor: actor, context: context, object: object} = param _ <- increase_poll_votes_if_vote(create_data), {:quick_insert, false, activity} <- {:quick_insert, quick_insert?, activity}, {:ok, _actor} <- increase_note_count_if_public(actor, activity), + _ <- notify_and_stream(activity), :ok <- maybe_federate(activity) do {:ok, activity} else @@ -301,6 +305,7 @@ def listen(%{to: to, actor: actor, context: context, object: object} = params) d additional ), {:ok, activity} <- insert(listen_data, local), + _ <- notify_and_stream(activity), :ok <- maybe_federate(activity) do {:ok, activity} end @@ -325,6 +330,7 @@ def accept_or_reject(type, %{to: to, actor: actor, object: object} = params) do %{"to" => to, "type" => type, "actor" => actor.ap_id, "object" => object} |> Utils.maybe_put("id", activity_id), {:ok, activity} <- insert(data, local), + _ <- notify_and_stream(activity), :ok <- maybe_federate(activity) do {:ok, activity} end @@ -344,6 +350,7 @@ def update(%{to: to, cc: cc, actor: actor, object: object} = params) do }, data <- Utils.maybe_put(data, "id", activity_id), {:ok, activity} <- insert(data, local), + _ <- notify_and_stream(activity), :ok <- maybe_federate(activity) do {:ok, activity} end @@ -365,6 +372,7 @@ defp do_react_with_emoji(user, object, emoji, options) do reaction_data <- make_emoji_reaction_data(user, object, emoji, activity_id), {:ok, activity} <- insert(reaction_data, local), {:ok, object} <- add_emoji_reaction_to_object(activity, object), + _ <- notify_and_stream(activity), :ok <- maybe_federate(activity) do {:ok, activity, object} else @@ -391,6 +399,7 @@ defp do_unreact_with_emoji(user, reaction_id, options) do unreact_data <- make_undo_data(user, reaction_activity, activity_id), {:ok, activity} <- insert(unreact_data, local), {:ok, object} <- remove_emoji_reaction_from_object(reaction_activity, object), + _ <- notify_and_stream(activity), :ok <- maybe_federate(activity) do {:ok, activity, object} else @@ -413,6 +422,7 @@ defp do_unlike(actor, object, activity_id, local) do {:ok, unlike_activity} <- insert(unlike_data, local), {:ok, _activity} <- Repo.delete(like_activity), {:ok, object} <- remove_like_from_object(like_activity, object), + _ <- notify_and_stream(unlike_activity), :ok <- maybe_federate(unlike_activity) do {:ok, unlike_activity, like_activity, object} else @@ -442,6 +452,7 @@ defp do_announce(user, object, activity_id, local, public) do announce_data <- make_announce_data(user, object, activity_id, public), {:ok, activity} <- insert(announce_data, local), {:ok, object} <- add_announce_to_object(activity, object), + _ <- notify_and_stream(activity), :ok <- maybe_federate(activity) do {:ok, activity, object} else @@ -468,6 +479,7 @@ defp do_unannounce(actor, object, activity_id, local) do with %Activity{} = announce_activity <- get_existing_announce(actor.ap_id, object), unannounce_data <- make_unannounce_data(actor, announce_activity, activity_id), {:ok, unannounce_activity} <- insert(unannounce_data, local), + _ <- notify_and_stream(unannounce_activity), :ok <- maybe_federate(unannounce_activity), {:ok, _activity} <- Repo.delete(announce_activity), {:ok, object} <- remove_announce_from_object(announce_activity, object) do @@ -490,6 +502,7 @@ def follow(follower, followed, activity_id \\ nil, local \\ true) do defp do_follow(follower, followed, activity_id, local) do with data <- make_follow_data(follower, followed, activity_id), {:ok, activity} <- insert(data, local), + _ <- notify_and_stream(activity), :ok <- maybe_federate(activity) do {:ok, activity} else @@ -511,6 +524,7 @@ defp do_unfollow(follower, followed, activity_id, local) do {:ok, follow_activity} <- update_follow_state(follow_activity, "cancelled"), unfollow_data <- make_unfollow_data(follower, followed, follow_activity, activity_id), {:ok, activity} <- insert(unfollow_data, local), + _ <- notify_and_stream(activity), :ok <- maybe_federate(activity) do {:ok, activity} else @@ -540,6 +554,7 @@ defp do_block(blocker, blocked, activity_id, local) do with true <- outgoing_blocks, block_data <- make_block_data(blocker, blocked, activity_id), {:ok, activity} <- insert(block_data, local), + _ <- notify_and_stream(activity), :ok <- maybe_federate(activity) do {:ok, activity} else @@ -560,6 +575,7 @@ defp do_unblock(blocker, blocked, activity_id, local) do with %Activity{} = block_activity <- fetch_latest_block(blocker, blocked), unblock_data <- make_unblock_data(blocker, blocked, block_activity, activity_id), {:ok, activity} <- insert(unblock_data, local), + _ <- notify_and_stream(activity), :ok <- maybe_federate(activity) do {:ok, activity} else @@ -594,6 +610,7 @@ def flag( with flag_data <- make_flag_data(params, additional), {:ok, activity} <- insert(flag_data, local), {:ok, stripped_activity} <- strip_report_status_data(activity), + _ <- notify_and_stream(activity), :ok <- maybe_federate(stripped_activity) do User.all_superusers() |> Enum.filter(fn user -> not is_nil(user.email) end) @@ -617,7 +634,8 @@ def move(%User{} = origin, %User{} = target, local \\ true) do } with true <- origin.ap_id in target.also_known_as, - {:ok, activity} <- insert(params, local) do + {:ok, activity} <- insert(params, local), + _ <- notify_and_stream(activity) do maybe_federate(activity) BackgroundWorker.enqueue("move_following", %{ diff --git a/lib/pleroma/web/mastodon_api/websocket_handler.ex b/lib/pleroma/web/mastodon_api/websocket_handler.ex index 5652a37c1..6ef3fe2dd 100644 --- a/lib/pleroma/web/mastodon_api/websocket_handler.ex +++ b/lib/pleroma/web/mastodon_api/websocket_handler.ex @@ -12,6 +12,11 @@ defmodule Pleroma.Web.MastodonAPI.WebsocketHandler do @behaviour :cowboy_websocket + # Cowboy timeout period. + @timeout :timer.seconds(30) + # Hibernate every X messages + @hibernate_every 100 + @streams [ "public", "public:local", @@ -25,9 +30,6 @@ defmodule Pleroma.Web.MastodonAPI.WebsocketHandler do ] @anonymous_streams ["public", "public:local", "hashtag"] - # Handled by periodic keepalive in Pleroma.Web.Streamer.Ping. - @timeout :infinity - def init(%{qs: qs} = req, state) do with params <- :cow_qs.parse_qs(qs), sec_websocket <- :cowboy_req.header("sec-websocket-protocol", req, nil), @@ -42,7 +44,7 @@ def init(%{qs: qs} = req, state) do req end - {:cowboy_websocket, req, %{user: user, topic: topic}, %{idle_timeout: @timeout}} + {:cowboy_websocket, req, %{user: user, topic: topic, count: 0}, %{idle_timeout: @timeout}} else {:error, code} -> Logger.debug("#{__MODULE__} denied connection: #{inspect(code)} - #{inspect(req)}") @@ -57,7 +59,13 @@ def init(%{qs: qs} = req, state) do end def websocket_init(state) do - send(self(), :subscribe) + Logger.debug( + "#{__MODULE__} accepted websocket connection for user #{ + (state.user || %{id: "anonymous"}).id + }, topic #{state.topic}" + ) + + Streamer.add_socket(state.topic, state.user) {:ok, state} end @@ -66,19 +74,24 @@ def websocket_handle(_frame, state) do {:ok, state} end - def websocket_info(:subscribe, state) do - Logger.debug( - "#{__MODULE__} accepted websocket connection for user #{ - (state.user || %{id: "anonymous"}).id - }, topic #{state.topic}" - ) + def websocket_info({:render_with_user, view, template, item}, state) do + user = %User{} = User.get_cached_by_ap_id(state.user.ap_id) - Streamer.add_socket(state.topic, streamer_socket(state)) - {:ok, state} + unless Streamer.filtered_by_user?(user, item) do + websocket_info({:text, view.render(template, user, item)}, %{state | user: user}) + else + {:ok, state} + end end def websocket_info({:text, message}, state) do - {:reply, {:text, message}, state} + # If the websocket processed X messages, force an hibernate/GC. + # We don't hibernate at every message to balance CPU usage/latency with RAM usage. + if state.count > @hibernate_every do + {:reply, {:text, message}, %{state | count: 0}, :hibernate} + else + {:reply, {:text, message}, %{state | count: state.count + 1}} + end end def terminate(reason, _req, state) do @@ -88,7 +101,7 @@ def terminate(reason, _req, state) do }, topic #{state.topic || "?"}: #{inspect(reason)}" ) - Streamer.remove_socket(state.topic, streamer_socket(state)) + Streamer.remove_socket(state.topic) :ok end @@ -136,8 +149,4 @@ defp expand_topic("list", params) do end defp expand_topic(topic, _), do: topic - - defp streamer_socket(state) do - %{transport_pid: self(), assigns: state} - end end diff --git a/lib/pleroma/web/streamer/ping.ex b/lib/pleroma/web/streamer/ping.ex deleted file mode 100644 index 7a08202a9..000000000 --- a/lib/pleroma/web/streamer/ping.ex +++ /dev/null @@ -1,37 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.Streamer.Ping do - use GenServer - require Logger - - alias Pleroma.Web.Streamer.State - alias Pleroma.Web.Streamer.StreamerSocket - - @keepalive_interval :timer.seconds(30) - - def start_link(opts) do - ping_interval = Keyword.get(opts, :ping_interval, @keepalive_interval) - GenServer.start_link(__MODULE__, %{ping_interval: ping_interval}, name: __MODULE__) - end - - def init(%{ping_interval: ping_interval} = args) do - Process.send_after(self(), :ping, ping_interval) - {:ok, args} - end - - def handle_info(:ping, %{ping_interval: ping_interval} = state) do - State.get_sockets() - |> Map.values() - |> List.flatten() - |> Enum.each(fn %StreamerSocket{transport_pid: transport_pid} -> - Logger.debug("Sending keepalive ping") - send(transport_pid, {:text, ""}) - end) - - Process.send_after(self(), :ping, ping_interval) - - {:noreply, state} - end -end diff --git a/lib/pleroma/web/streamer/state.ex b/lib/pleroma/web/streamer/state.ex deleted file mode 100644 index 999550b88..000000000 --- a/lib/pleroma/web/streamer/state.ex +++ /dev/null @@ -1,82 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.Streamer.State do - use GenServer - require Logger - - alias Pleroma.Web.Streamer.StreamerSocket - - @env Mix.env() - - def start_link(_) do - GenServer.start_link(__MODULE__, %{sockets: %{}}, name: __MODULE__) - end - - def add_socket(topic, socket) do - GenServer.call(__MODULE__, {:add, topic, socket}) - end - - def remove_socket(topic, socket) do - do_remove_socket(@env, topic, socket) - end - - def get_sockets do - %{sockets: stream_sockets} = GenServer.call(__MODULE__, :get_state) - stream_sockets - end - - def init(init_arg) do - {:ok, init_arg} - end - - def handle_call(:get_state, _from, state) do - {:reply, state, state} - end - - def handle_call({:add, topic, socket}, _from, %{sockets: sockets} = state) do - internal_topic = internal_topic(topic, socket) - stream_socket = StreamerSocket.from_socket(socket) - - sockets_for_topic = - sockets - |> Map.get(internal_topic, []) - |> List.insert_at(0, stream_socket) - |> Enum.uniq() - - state = put_in(state, [:sockets, internal_topic], sockets_for_topic) - Logger.debug("Got new conn for #{topic}") - {:reply, state, state} - end - - def handle_call({:remove, topic, socket}, _from, %{sockets: sockets} = state) do - internal_topic = internal_topic(topic, socket) - stream_socket = StreamerSocket.from_socket(socket) - - sockets_for_topic = - sockets - |> Map.get(internal_topic, []) - |> List.delete(stream_socket) - - state = Kernel.put_in(state, [:sockets, internal_topic], sockets_for_topic) - {:reply, state, state} - end - - defp do_remove_socket(:test, _, _) do - :ok - end - - defp do_remove_socket(_env, topic, socket) do - GenServer.call(__MODULE__, {:remove, topic, socket}) - end - - defp internal_topic(topic, socket) - when topic in ~w[user user:notification direct] do - "#{topic}:#{socket.assigns[:user].id}" - end - - defp internal_topic(topic, _) do - topic - end -end diff --git a/lib/pleroma/web/streamer/streamer.ex b/lib/pleroma/web/streamer/streamer.ex index 814d5a729..5ad4aa936 100644 --- a/lib/pleroma/web/streamer/streamer.ex +++ b/lib/pleroma/web/streamer/streamer.ex @@ -3,53 +3,241 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Streamer do - alias Pleroma.Web.Streamer.State - alias Pleroma.Web.Streamer.Worker + require Logger + + alias Pleroma.Activity + alias Pleroma.Config + alias Pleroma.Conversation.Participation + alias Pleroma.Notification + alias Pleroma.Object + alias Pleroma.User + alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.ActivityPub.Visibility + alias Pleroma.Web.CommonAPI + alias Pleroma.Web.StreamerView - @timeout 60_000 @mix_env Mix.env() + @registry Pleroma.Web.StreamerRegistry - def add_socket(topic, socket) do - State.add_socket(topic, socket) + def registry, do: @registry + + def add_socket(topic, %User{} = user) do + if should_env_send?(), do: Registry.register(@registry, user_topic(topic, user), true) end - def remove_socket(topic, socket) do - State.remove_socket(topic, socket) + def add_socket(topic, _) do + if should_env_send?(), do: Registry.register(@registry, topic, false) end - def get_sockets do - State.get_sockets() + def remove_socket(topic) do + if should_env_send?(), do: Registry.unregister(@registry, topic) end - def stream(topics, items) do - if should_send?() do - Task.async(fn -> - :poolboy.transaction( - :streamer_worker, - &Worker.stream(&1, topics, items), - @timeout - ) + def stream(topics, item) when is_list(topics) do + if should_env_send?() do + Enum.each(topics, fn t -> + spawn(fn -> do_stream(t, item) end) end) end + + :ok end - def supervisor, do: Pleroma.Web.Streamer.Supervisor + def stream(topic, items) when is_list(items) do + if should_env_send?() do + Enum.each(items, fn i -> + spawn(fn -> do_stream(topic, i) end) + end) - defp should_send? do - handle_should_send(@mix_env) - end - - defp handle_should_send(:test) do - case Process.whereis(:streamer_worker) do - nil -> - false - - pid -> - Process.alive?(pid) + :ok end end - defp handle_should_send(:benchmark), do: false + def stream(topic, item) do + if should_env_send?() do + spawn(fn -> do_stream(topic, item) end) + end - defp handle_should_send(_), do: true + :ok + end + + def filtered_by_user?(%User{} = user, %Activity{} = item) do + %{block: blocked_ap_ids, mute: muted_ap_ids, reblog_mute: reblog_muted_ap_ids} = + User.outgoing_relationships_ap_ids(user, [:block, :mute, :reblog_mute]) + + recipient_blocks = MapSet.new(blocked_ap_ids ++ muted_ap_ids) + recipients = MapSet.new(item.recipients) + domain_blocks = Pleroma.Web.ActivityPub.MRF.subdomains_regex(user.domain_blocks) + + with parent <- Object.normalize(item) || item, + true <- + Enum.all?([blocked_ap_ids, muted_ap_ids], &(item.actor not in &1)), + true <- item.data["type"] != "Announce" || item.actor not in reblog_muted_ap_ids, + true <- Enum.all?([blocked_ap_ids, muted_ap_ids], &(parent.data["actor"] not in &1)), + true <- MapSet.disjoint?(recipients, recipient_blocks), + %{host: item_host} <- URI.parse(item.actor), + %{host: parent_host} <- URI.parse(parent.data["actor"]), + 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 + else + _ -> true + end + end + + def filtered_by_user?(%User{} = user, %Notification{activity: activity}) do + filtered_by_user?(user, activity) + end + + defp do_stream("direct", item) do + recipient_topics = + User.get_recipients_from_activity(item) + |> Enum.map(fn %{id: id} -> "direct:#{id}" end) + + Enum.each(recipient_topics, fn user_topic -> + Logger.debug("Trying to push direct message to #{user_topic}\n\n") + push_to_socket(user_topic, item) + end) + end + + defp do_stream("participation", participation) do + user_topic = "direct:#{participation.user_id}" + Logger.debug("Trying to push a conversation participation to #{user_topic}\n\n") + + push_to_socket(user_topic, participation) + end + + defp do_stream("list", item) do + # filter the recipient list if the activity is not public, see #270. + recipient_lists = + case Visibility.is_public?(item) do + true -> + Pleroma.List.get_lists_from_activity(item) + + _ -> + Pleroma.List.get_lists_from_activity(item) + |> Enum.filter(fn list -> + owner = User.get_cached_by_id(list.user_id) + + Visibility.visible_for_user?(item, owner) + end) + end + + recipient_topics = + recipient_lists + |> Enum.map(fn %{id: id} -> "list:#{id}" end) + + Enum.each(recipient_topics, fn list_topic -> + Logger.debug("Trying to push message to #{list_topic}\n\n") + push_to_socket(list_topic, item) + end) + end + + defp do_stream(topic, %Notification{} = item) + when topic in ["user", "user:notification"] do + Registry.dispatch(@registry, "#{topic}:#{item.user_id}", fn list -> + Enum.each(list, fn {pid, _auth} -> + send(pid, {:render_with_user, StreamerView, "notification.json", item}) + end) + end) + end + + defp do_stream("user", item) do + Logger.debug("Trying to push to users") + + recipient_topics = + User.get_recipients_from_activity(item) + |> Enum.map(fn %{id: id} -> "user:#{id}" end) + + Enum.each(recipient_topics, fn topic -> + push_to_socket(topic, item) + end) + end + + defp do_stream(topic, item) do + Logger.debug("Trying to push to #{topic}") + Logger.debug("Pushing item to #{topic}") + push_to_socket(topic, item) + end + + defp push_to_socket(topic, %Participation{} = participation) do + rendered = StreamerView.render("conversation.json", participation) + + Registry.dispatch(@registry, topic, fn list -> + Enum.each(list, fn {pid, _} -> + send(pid, {:text, rendered}) + end) + end) + end + + defp push_to_socket(topic, %Activity{ + data: %{"type" => "Delete", "deleted_activity_id" => deleted_activity_id} + }) do + rendered = Jason.encode!(%{event: "delete", payload: to_string(deleted_activity_id)}) + + Registry.dispatch(@registry, topic, fn list -> + Enum.each(list, fn {pid, _} -> + send(pid, {:text, rendered}) + end) + end) + end + + defp push_to_socket(_topic, %Activity{data: %{"type" => "Delete"}}), do: :noop + + defp push_to_socket(topic, item) do + anon_render = StreamerView.render("update.json", item) + + Registry.dispatch(@registry, topic, fn list -> + Enum.each(list, fn {pid, auth?} -> + if auth? do + send(pid, {:render_with_user, StreamerView, "update.json", item}) + else + send(pid, {:text, anon_render}) + end + end) + end) + end + + defp thread_containment(_activity, %User{skip_thread_containment: true}), do: true + + defp thread_containment(activity, user) do + if Config.get([:instance, :skip_thread_containment]) do + true + else + ActivityPub.contain_activity(activity, user) + end + end + + # In test environement, only return true if the registry is started. + # In benchmark environment, returns false. + # In any other environment, always returns true. + cond do + @mix_env == :test -> + def should_env_send? do + case Process.whereis(@registry) do + nil -> + false + + pid -> + Process.alive?(pid) + end + end + + @mix_env == :benchmark -> + def should_env_send?, do: false + + true -> + def should_env_send?, do: true + end + + defp user_topic(topic, user) + when topic in ~w[user user:notification direct] do + "#{topic}:#{user.id}" + end + + defp user_topic(topic, _) do + topic + end end diff --git a/lib/pleroma/web/streamer/streamer_socket.ex b/lib/pleroma/web/streamer/streamer_socket.ex deleted file mode 100644 index 7d5dcd34e..000000000 --- a/lib/pleroma/web/streamer/streamer_socket.ex +++ /dev/null @@ -1,35 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.Streamer.StreamerSocket do - defstruct transport_pid: nil, user: nil - - alias Pleroma.User - alias Pleroma.Web.Streamer.StreamerSocket - - def from_socket(%{ - transport_pid: transport_pid, - assigns: %{user: nil} - }) do - %StreamerSocket{ - transport_pid: transport_pid - } - end - - def from_socket(%{ - transport_pid: transport_pid, - assigns: %{user: %User{} = user} - }) do - %StreamerSocket{ - transport_pid: transport_pid, - user: user - } - end - - def from_socket(%{transport_pid: transport_pid}) do - %StreamerSocket{ - transport_pid: transport_pid - } - end -end diff --git a/lib/pleroma/web/streamer/supervisor.ex b/lib/pleroma/web/streamer/supervisor.ex deleted file mode 100644 index bd9029bc0..000000000 --- a/lib/pleroma/web/streamer/supervisor.ex +++ /dev/null @@ -1,37 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.Streamer.Supervisor do - use Supervisor - - def start_link(opts) do - Supervisor.start_link(__MODULE__, opts, name: __MODULE__) - end - - def init(args) do - children = [ - {Pleroma.Web.Streamer.State, args}, - {Pleroma.Web.Streamer.Ping, args}, - :poolboy.child_spec(:streamer_worker, poolboy_config()) - ] - - opts = [strategy: :one_for_one, name: Pleroma.Web.Streamer.Supervisor] - Supervisor.init(children, opts) - end - - defp poolboy_config do - opts = - Pleroma.Config.get(:streamer, - workers: 3, - overflow_workers: 2 - ) - - [ - {:name, {:local, :streamer_worker}}, - {:worker_module, Pleroma.Web.Streamer.Worker}, - {:size, opts[:workers]}, - {:max_overflow, opts[:overflow_workers]} - ] - end -end diff --git a/lib/pleroma/web/streamer/worker.ex b/lib/pleroma/web/streamer/worker.ex deleted file mode 100644 index f6160fa4d..000000000 --- a/lib/pleroma/web/streamer/worker.ex +++ /dev/null @@ -1,208 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.Streamer.Worker do - use GenServer - - require Logger - - alias Pleroma.Activity - alias Pleroma.Config - alias Pleroma.Conversation.Participation - alias Pleroma.Notification - alias Pleroma.Object - alias Pleroma.User - alias Pleroma.Web.ActivityPub.ActivityPub - alias Pleroma.Web.ActivityPub.Visibility - alias Pleroma.Web.CommonAPI - alias Pleroma.Web.Streamer.State - alias Pleroma.Web.Streamer.StreamerSocket - alias Pleroma.Web.StreamerView - - def start_link(_) do - GenServer.start_link(__MODULE__, %{}, []) - end - - def init(init_arg) do - {:ok, init_arg} - end - - def stream(pid, topics, items) do - GenServer.call(pid, {:stream, topics, items}) - end - - def handle_call({:stream, topics, item}, _from, state) when is_list(topics) do - Enum.each(topics, fn t -> - do_stream(%{topic: t, item: item}) - end) - - {:reply, state, state} - end - - def handle_call({:stream, topic, items}, _from, state) when is_list(items) do - Enum.each(items, fn i -> - do_stream(%{topic: topic, item: i}) - end) - - {:reply, state, state} - end - - def handle_call({:stream, topic, item}, _from, state) do - do_stream(%{topic: topic, item: item}) - - {:reply, state, state} - end - - defp do_stream(%{topic: "direct", item: item}) do - recipient_topics = - User.get_recipients_from_activity(item) - |> Enum.map(fn %{id: id} -> "direct:#{id}" end) - - Enum.each(recipient_topics, fn user_topic -> - Logger.debug("Trying to push direct message to #{user_topic}\n\n") - push_to_socket(State.get_sockets(), user_topic, item) - end) - end - - defp do_stream(%{topic: "participation", item: participation}) do - user_topic = "direct:#{participation.user_id}" - Logger.debug("Trying to push a conversation participation to #{user_topic}\n\n") - - push_to_socket(State.get_sockets(), user_topic, participation) - end - - defp do_stream(%{topic: "list", item: item}) do - # filter the recipient list if the activity is not public, see #270. - recipient_lists = - case Visibility.is_public?(item) do - true -> - Pleroma.List.get_lists_from_activity(item) - - _ -> - Pleroma.List.get_lists_from_activity(item) - |> Enum.filter(fn list -> - owner = User.get_cached_by_id(list.user_id) - - Visibility.visible_for_user?(item, owner) - end) - end - - recipient_topics = - recipient_lists - |> Enum.map(fn %{id: id} -> "list:#{id}" end) - - Enum.each(recipient_topics, fn list_topic -> - Logger.debug("Trying to push message to #{list_topic}\n\n") - push_to_socket(State.get_sockets(), list_topic, item) - end) - end - - defp do_stream(%{topic: topic, item: %Notification{} = item}) - when topic in ["user", "user:notification"] do - State.get_sockets() - |> Map.get("#{topic}:#{item.user_id}", []) - |> Enum.each(fn %StreamerSocket{transport_pid: transport_pid, user: socket_user} -> - with %User{} = user <- User.get_cached_by_ap_id(socket_user.ap_id), - true <- should_send?(user, item) do - send(transport_pid, {:text, StreamerView.render("notification.json", socket_user, item)}) - end - end) - end - - defp do_stream(%{topic: "user", item: item}) do - Logger.debug("Trying to push to users") - - recipient_topics = - User.get_recipients_from_activity(item) - |> Enum.map(fn %{id: id} -> "user:#{id}" end) - - Enum.each(recipient_topics, fn topic -> - push_to_socket(State.get_sockets(), topic, item) - end) - end - - defp do_stream(%{topic: topic, item: item}) do - Logger.debug("Trying to push to #{topic}") - Logger.debug("Pushing item to #{topic}") - push_to_socket(State.get_sockets(), topic, item) - end - - defp should_send?(%User{} = user, %Activity{} = item) do - %{block: blocked_ap_ids, mute: muted_ap_ids, reblog_mute: reblog_muted_ap_ids} = - User.outgoing_relationships_ap_ids(user, [:block, :mute, :reblog_mute]) - - recipient_blocks = MapSet.new(blocked_ap_ids ++ muted_ap_ids) - recipients = MapSet.new(item.recipients) - domain_blocks = Pleroma.Web.ActivityPub.MRF.subdomains_regex(user.domain_blocks) - - with parent <- Object.normalize(item) || item, - true <- - Enum.all?([blocked_ap_ids, muted_ap_ids], &(item.actor not in &1)), - true <- item.data["type"] != "Announce" || item.actor not in reblog_muted_ap_ids, - true <- Enum.all?([blocked_ap_ids, muted_ap_ids], &(parent.data["actor"] not in &1)), - true <- MapSet.disjoint?(recipients, recipient_blocks), - %{host: item_host} <- URI.parse(item.actor), - %{host: parent_host} <- URI.parse(parent.data["actor"]), - 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 - true - else - _ -> false - end - end - - defp should_send?(%User{} = user, %Notification{activity: activity}) do - should_send?(user, activity) - end - - def push_to_socket(topics, topic, %Participation{} = participation) do - Enum.each(topics[topic] || [], fn %StreamerSocket{transport_pid: transport_pid} -> - send(transport_pid, {:text, StreamerView.render("conversation.json", participation)}) - end) - end - - def push_to_socket(topics, topic, %Activity{ - data: %{"type" => "Delete", "deleted_activity_id" => deleted_activity_id} - }) do - Enum.each(topics[topic] || [], fn %StreamerSocket{transport_pid: transport_pid} -> - send( - transport_pid, - {:text, %{event: "delete", payload: to_string(deleted_activity_id)} |> Jason.encode!()} - ) - end) - end - - def push_to_socket(_topics, _topic, %Activity{data: %{"type" => "Delete"}}), do: :noop - - def push_to_socket(topics, topic, item) do - Enum.each(topics[topic] || [], fn %StreamerSocket{ - transport_pid: transport_pid, - user: socket_user - } -> - # Get the current user so we have up-to-date blocks etc. - if socket_user do - user = User.get_cached_by_ap_id(socket_user.ap_id) - - if should_send?(user, item) do - send(transport_pid, {:text, StreamerView.render("update.json", item, user)}) - end - else - send(transport_pid, {:text, StreamerView.render("update.json", item)}) - end - end) - end - - @spec thread_containment(Activity.t(), User.t()) :: boolean() - defp thread_containment(_activity, %User{skip_thread_containment: true}), do: true - - defp thread_containment(activity, user) do - if Config.get([:instance, :skip_thread_containment]) do - true - else - ActivityPub.contain_activity(activity, user) - end - end -end diff --git a/test/integration/mastodon_websocket_test.exs b/test/integration/mastodon_websocket_test.exs index bd229c55f..109c7b4cb 100644 --- a/test/integration/mastodon_websocket_test.exs +++ b/test/integration/mastodon_websocket_test.exs @@ -12,17 +12,14 @@ defmodule Pleroma.Integration.MastodonWebsocketTest do alias Pleroma.Web.CommonAPI alias Pleroma.Web.OAuth + @moduletag needs_streamer: true, capture_log: true + @path Pleroma.Web.Endpoint.url() |> URI.parse() |> Map.put(:scheme, "ws") |> Map.put(:path, "/api/v1/streaming") |> URI.to_string() - setup_all do - start_supervised(Pleroma.Web.Streamer.supervisor()) - :ok - end - def start_socket(qs \\ nil, headers \\ []) do path = case qs do diff --git a/test/notification_test.exs b/test/notification_test.exs index 601a6c0ca..5c85f3368 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -162,14 +162,18 @@ test "does not create a notification for subscribed users if status is a reply" @tag needs_streamer: true test "it creates a notification for user and send to the 'user' and the 'user:notification' stream" do user = insert(:user) - task = Task.async(fn -> assert_receive {:text, _}, 4_000 end) - task_user_notification = Task.async(fn -> assert_receive {:text, _}, 4_000 end) - Streamer.add_socket("user", %{transport_pid: task.pid, assigns: %{user: user}}) - Streamer.add_socket( - "user:notification", - %{transport_pid: task_user_notification.pid, assigns: %{user: user}} - ) + task = + Task.async(fn -> + Streamer.add_socket("user", user) + assert_receive {:render_with_user, _, _, _}, 4_000 + end) + + task_user_notification = + Task.async(fn -> + Streamer.add_socket("user:notification", user) + assert_receive {:render_with_user, _, _, _}, 4_000 + end) activity = insert(:note_activity) diff --git a/test/support/builders/activity_builder.ex b/test/support/builders/activity_builder.ex index 6e5a8e059..7c4950bfa 100644 --- a/test/support/builders/activity_builder.ex +++ b/test/support/builders/activity_builder.ex @@ -21,7 +21,15 @@ def build(data \\ %{}, opts \\ %{}) do def insert(data \\ %{}, opts \\ %{}) do activity = build(data, opts) - ActivityPub.insert(activity) + + case ActivityPub.insert(activity) do + ok = {:ok, activity} -> + ActivityPub.notify_and_stream(activity) + ok + + error -> + error + end end def insert_list(times, data \\ %{}, opts \\ %{}) do diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex index 91c03b1a8..b23918dd1 100644 --- a/test/support/conn_case.ex +++ b/test/support/conn_case.ex @@ -139,7 +139,11 @@ defp ensure_federating_or_authenticated(conn, url, user) do end if tags[:needs_streamer] do - start_supervised(Pleroma.Web.Streamer.supervisor()) + start_supervised(%{ + id: Pleroma.Web.Streamer.registry(), + start: + {Registry, :start_link, [[keys: :duplicate, name: Pleroma.Web.Streamer.registry()]]} + }) end {:ok, conn: Phoenix.ConnTest.build_conn()} diff --git a/test/support/data_case.ex b/test/support/data_case.ex index 1669f2520..ba8848952 100644 --- a/test/support/data_case.ex +++ b/test/support/data_case.ex @@ -40,7 +40,11 @@ defmodule Pleroma.DataCase do end if tags[:needs_streamer] do - start_supervised(Pleroma.Web.Streamer.supervisor()) + start_supervised(%{ + id: Pleroma.Web.Streamer.registry(), + start: + {Registry, :start_link, [[keys: :duplicate, name: Pleroma.Web.Streamer.registry()]]} + }) end :ok diff --git a/test/web/streamer/ping_test.exs b/test/web/streamer/ping_test.exs deleted file mode 100644 index 5df6c1cc3..000000000 --- a/test/web/streamer/ping_test.exs +++ /dev/null @@ -1,36 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.PingTest do - use Pleroma.DataCase - - import Pleroma.Factory - alias Pleroma.Web.Streamer - - setup do - start_supervised({Streamer.supervisor(), [ping_interval: 30]}) - - :ok - end - - describe "sockets" do - setup do - user = insert(:user) - {:ok, %{user: user}} - end - - test "it sends pings", %{user: user} do - task = - Task.async(fn -> - assert_receive {:text, received_event}, 40 - assert_receive {:text, received_event}, 40 - assert_receive {:text, received_event}, 40 - end) - - Streamer.add_socket("public", %{transport_pid: task.pid, assigns: %{user: user}}) - - Task.await(task) - end - end -end diff --git a/test/web/streamer/state_test.exs b/test/web/streamer/state_test.exs deleted file mode 100644 index a755e75c0..000000000 --- a/test/web/streamer/state_test.exs +++ /dev/null @@ -1,54 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.StateTest do - use Pleroma.DataCase - - import Pleroma.Factory - alias Pleroma.Web.Streamer - alias Pleroma.Web.Streamer.StreamerSocket - - @moduletag needs_streamer: true - - describe "sockets" do - setup do - user = insert(:user) - user2 = insert(:user) - {:ok, %{user: user, user2: user2}} - end - - test "it can add a socket", %{user: user} do - Streamer.add_socket("public", %{transport_pid: 1, assigns: %{user: user}}) - - assert(%{"public" => [%StreamerSocket{transport_pid: 1}]} = Streamer.get_sockets()) - end - - test "it can add multiple sockets per user", %{user: user} do - Streamer.add_socket("public", %{transport_pid: 1, assigns: %{user: user}}) - Streamer.add_socket("public", %{transport_pid: 2, assigns: %{user: user}}) - - assert( - %{ - "public" => [ - %StreamerSocket{transport_pid: 2}, - %StreamerSocket{transport_pid: 1} - ] - } = Streamer.get_sockets() - ) - end - - test "it will not add a duplicate socket", %{user: user} do - Streamer.add_socket("activity", %{transport_pid: 1, assigns: %{user: user}}) - Streamer.add_socket("activity", %{transport_pid: 1, assigns: %{user: user}}) - - assert( - %{ - "activity" => [ - %StreamerSocket{transport_pid: 1} - ] - } = Streamer.get_sockets() - ) - end - end -end diff --git a/test/web/streamer/streamer_test.exs b/test/web/streamer/streamer_test.exs index 3c0f240f5..ee530f4e9 100644 --- a/test/web/streamer/streamer_test.exs +++ b/test/web/streamer/streamer_test.exs @@ -12,13 +12,9 @@ defmodule Pleroma.Web.StreamerTest do alias Pleroma.User alias Pleroma.Web.CommonAPI alias Pleroma.Web.Streamer - alias Pleroma.Web.Streamer.StreamerSocket - alias Pleroma.Web.Streamer.Worker @moduletag needs_streamer: true, capture_log: true - @streamer_timeout 150 - @streamer_start_wait 10 setup do: clear_config([:instance, :skip_thread_containment]) describe "user streams" do @@ -29,69 +25,35 @@ defmodule Pleroma.Web.StreamerTest do end test "it streams the user's post in the 'user' stream", %{user: user} do - task = - Task.async(fn -> - assert_receive {:text, _}, @streamer_timeout - end) - - Streamer.add_socket( - "user", - %{transport_pid: task.pid, assigns: %{user: user}} - ) - + Streamer.add_socket("user", user) {:ok, activity} = CommonAPI.post(user, %{"status" => "hey"}) - - Streamer.stream("user", activity) - Task.await(task) + assert_receive {:render_with_user, _, _, ^activity} + refute Streamer.filtered_by_user?(user, activity) end test "it streams boosts of the user in the 'user' stream", %{user: user} do - task = - Task.async(fn -> - assert_receive {:text, _}, @streamer_timeout - end) - - Streamer.add_socket( - "user", - %{transport_pid: task.pid, assigns: %{user: user}} - ) + Streamer.add_socket("user", user) other_user = insert(:user) {:ok, activity} = CommonAPI.post(other_user, %{"status" => "hey"}) {:ok, announce, _} = CommonAPI.repeat(activity.id, user) - Streamer.stream("user", announce) - Task.await(task) + 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 - task = - Task.async(fn -> - assert_receive {:text, _}, @streamer_timeout - end) - - Streamer.add_socket( - "user", - %{transport_pid: task.pid, assigns: %{user: user}} - ) - + Streamer.add_socket("user", user) Streamer.stream("user", notify) - Task.await(task) + assert_receive {:render_with_user, _, _, ^notify} + refute Streamer.filtered_by_user?(user, notify) end test "it sends notify to in the 'user:notification' stream", %{user: user, notify: notify} do - task = - Task.async(fn -> - assert_receive {:text, _}, @streamer_timeout - end) - - Streamer.add_socket( - "user:notification", - %{transport_pid: task.pid, assigns: %{user: user}} - ) - + Streamer.add_socket("user:notification", user) Streamer.stream("user:notification", notify) - Task.await(task) + assert_receive {:render_with_user, _, _, ^notify} + refute Streamer.filtered_by_user?(user, notify) end test "it doesn't send notify to the 'user:notification' stream when a user is blocked", %{ @@ -100,18 +62,12 @@ test "it doesn't send notify to the 'user:notification' stream when a user is bl blocked = insert(:user) {:ok, _user_relationship} = User.block(user, blocked) - task = Task.async(fn -> refute_receive {:text, _}, @streamer_timeout end) - - Streamer.add_socket( - "user:notification", - %{transport_pid: task.pid, assigns: %{user: user}} - ) + Streamer.add_socket("user:notification", user) {:ok, activity} = CommonAPI.post(user, %{"status" => ":("}) - {:ok, notif} = CommonAPI.favorite(blocked, activity.id) + {:ok, _} = CommonAPI.favorite(blocked, activity.id) - Streamer.stream("user:notification", notif) - Task.await(task) + refute_receive _ end test "it doesn't send notify to the 'user:notification' stream when a thread is muted", %{ @@ -119,45 +75,50 @@ test "it doesn't send notify to the 'user:notification' stream when a thread is } do user2 = insert(:user) - task = Task.async(fn -> refute_receive {:text, _}, @streamer_timeout end) - - Streamer.add_socket( - "user:notification", - %{transport_pid: task.pid, assigns: %{user: user}} - ) - {:ok, activity} = CommonAPI.post(user, %{"status" => "super hot take"}) - {:ok, activity} = CommonAPI.add_mute(user, activity) - {:ok, notif} = CommonAPI.favorite(user2, activity.id) + {:ok, _} = CommonAPI.add_mute(user, activity) - Streamer.stream("user:notification", notif) - Task.await(task) + Streamer.add_socket("user:notification", user) + + {:ok, favorite_activity} = CommonAPI.favorite(user2, activity.id) + + refute_receive _ + assert Streamer.filtered_by_user?(user, favorite_activity) end - test "it doesn't send notify to the 'user:notification' stream' when a domain is blocked", %{ + test "it sends favorite to 'user:notification' stream'", %{ user: user } do user2 = insert(:user, %{ap_id: "https://hecking-lewd-place.com/user/meanie"}) - task = Task.async(fn -> refute_receive {:text, _}, @streamer_timeout end) + {:ok, activity} = CommonAPI.post(user, %{"status" => "super hot take"}) + Streamer.add_socket("user:notification", user) + {:ok, favorite_activity} = CommonAPI.favorite(user2, activity.id) - Streamer.add_socket( - "user:notification", - %{transport_pid: task.pid, assigns: %{user: user}} - ) + assert_receive {:render_with_user, _, "notification.json", notif} + assert notif.activity.id == favorite_activity.id + refute Streamer.filtered_by_user?(user, notif) + end + + test "it doesn't send the 'user:notification' stream' when a domain is blocked", %{ + user: user + } do + user2 = insert(:user, %{ap_id: "https://hecking-lewd-place.com/user/meanie"}) {:ok, user} = User.block_domain(user, "hecking-lewd-place.com") {:ok, activity} = CommonAPI.post(user, %{"status" => "super hot take"}) - {:ok, notif} = CommonAPI.favorite(user2, activity.id) + Streamer.add_socket("user:notification", user) + {:ok, favorite_activity} = CommonAPI.favorite(user2, activity.id) - Streamer.stream("user:notification", notif) - Task.await(task) + refute_receive _ + assert Streamer.filtered_by_user?(user, favorite_activity) end test "it sends follow activities to the 'user:notification' stream", %{ user: user } do user_url = user.ap_id + user2 = insert(:user) body = File.read!("test/fixtures/users_mock/localhost.json") @@ -169,47 +130,24 @@ test "it sends follow activities to the 'user:notification' stream", %{ %Tesla.Env{status: 200, body: body} end) - user2 = insert(:user) - task = Task.async(fn -> assert_receive {:text, _}, @streamer_timeout end) + Streamer.add_socket("user:notification", user) + {:ok, _follower, _followed, follow_activity} = CommonAPI.follow(user2, user) - Process.sleep(@streamer_start_wait) - - Streamer.add_socket( - "user:notification", - %{transport_pid: task.pid, assigns: %{user: user}} - ) - - {:ok, _follower, _followed, _activity} = CommonAPI.follow(user2, user) - - # We don't directly pipe the notification to the streamer as it's already - # generated as a side effect of CommonAPI.follow(). - Task.await(task) + assert_receive {:render_with_user, _, "notification.json", notif} + assert notif.activity.id == follow_activity.id + refute Streamer.filtered_by_user?(user, notif) end end - test "it sends to public" do + test "it sends to public authenticated" do user = insert(:user) other_user = insert(:user) - task = - Task.async(fn -> - assert_receive {:text, _}, @streamer_timeout - end) + Streamer.add_socket("public", other_user) - fake_socket = %StreamerSocket{ - transport_pid: task.pid, - user: user - } - - {:ok, activity} = CommonAPI.post(other_user, %{"status" => "Test"}) - - topics = %{ - "public" => [fake_socket] - } - - Worker.push_to_socket(topics, "public", activity) - - Task.await(task) + {:ok, activity} = CommonAPI.post(user, %{"status" => "Test"}) + assert_receive {:render_with_user, _, _, ^activity} + refute Streamer.filtered_by_user?(user, activity) end test "works for deletions" do @@ -217,37 +155,32 @@ test "works for deletions" do other_user = insert(:user) {:ok, activity} = CommonAPI.post(other_user, %{"status" => "Test"}) - task = - Task.async(fn -> - expected_event = - %{ - "event" => "delete", - "payload" => activity.id - } - |> Jason.encode!() + Streamer.add_socket("public", user) - assert_receive {:text, received_event}, @streamer_timeout - assert received_event == expected_event - end) + {:ok, _} = CommonAPI.delete(activity.id, other_user) + activity_id = activity.id + assert_receive {:text, event} + assert %{"event" => "delete", "payload" => ^activity_id} = Jason.decode!(event) + end - fake_socket = %StreamerSocket{ - transport_pid: task.pid, - user: user - } + test "it sends to public unauthenticated" do + user = insert(:user) - {:ok, activity} = CommonAPI.delete(activity.id, other_user) + Streamer.add_socket("public", nil) - topics = %{ - "public" => [fake_socket] - } + {:ok, activity} = CommonAPI.post(user, %{"status" => "Test"}) + activity_id = activity.id + assert_receive {:text, event} + assert %{"event" => "update", "payload" => payload} = Jason.decode!(event) + assert %{"id" => ^activity_id} = Jason.decode!(payload) - Worker.push_to_socket(topics, "public", activity) - - Task.await(task) + {:ok, _} = CommonAPI.delete(activity.id, user) + assert_receive {:text, event} + assert %{"event" => "delete", "payload" => ^activity_id} = Jason.decode!(event) end describe "thread_containment" do - test "it doesn't send to user if recipients invalid and thread containment is enabled" do + test "it filters to user if recipients invalid and thread containment is enabled" do Pleroma.Config.put([:instance, :skip_thread_containment], false) author = insert(:user) user = insert(:user) @@ -262,12 +195,10 @@ test "it doesn't send to user if recipients invalid and thread containment is en ) ) - task = Task.async(fn -> refute_receive {:text, _}, 1_000 end) - fake_socket = %StreamerSocket{transport_pid: task.pid, user: user} - topics = %{"public" => [fake_socket]} - Worker.push_to_socket(topics, "public", activity) - - Task.await(task) + Streamer.add_socket("public", user) + Streamer.stream("public", activity) + assert_receive {:render_with_user, _, _, ^activity} + assert Streamer.filtered_by_user?(user, activity) end test "it sends message if recipients invalid and thread containment is disabled" do @@ -285,12 +216,11 @@ test "it sends message if recipients invalid and thread containment is disabled" ) ) - task = Task.async(fn -> assert_receive {:text, _}, 1_000 end) - fake_socket = %StreamerSocket{transport_pid: task.pid, user: user} - topics = %{"public" => [fake_socket]} - Worker.push_to_socket(topics, "public", activity) + Streamer.add_socket("public", user) + Streamer.stream("public", activity) - Task.await(task) + assert_receive {:render_with_user, _, _, ^activity} + refute Streamer.filtered_by_user?(user, activity) end test "it sends message if recipients invalid and thread containment is enabled but user's thread containment is disabled" do @@ -308,255 +238,168 @@ test "it sends message if recipients invalid and thread containment is enabled b ) ) - task = Task.async(fn -> assert_receive {:text, _}, 1_000 end) - fake_socket = %StreamerSocket{transport_pid: task.pid, user: user} - topics = %{"public" => [fake_socket]} - Worker.push_to_socket(topics, "public", activity) + Streamer.add_socket("public", user) + Streamer.stream("public", activity) - Task.await(task) + assert_receive {:render_with_user, _, _, ^activity} + refute Streamer.filtered_by_user?(user, activity) end end describe "blocks" do - test "it doesn't send messages involving blocked users" do + test "it filters messages involving blocked users" do user = insert(:user) blocked_user = insert(:user) {:ok, _user_relationship} = User.block(user, blocked_user) + Streamer.add_socket("public", user) {:ok, activity} = CommonAPI.post(blocked_user, %{"status" => "Test"}) - - task = - Task.async(fn -> - refute_receive {:text, _}, 1_000 - end) - - fake_socket = %StreamerSocket{ - transport_pid: task.pid, - user: user - } - - topics = %{ - "public" => [fake_socket] - } - - Worker.push_to_socket(topics, "public", activity) - - Task.await(task) + assert_receive {:render_with_user, _, _, ^activity} + assert Streamer.filtered_by_user?(user, activity) end - test "it doesn't send messages transitively involving blocked users" do + test "it filters messages transitively involving blocked users" do blocker = insert(:user) blockee = insert(:user) friend = insert(:user) - task = - Task.async(fn -> - refute_receive {:text, _}, 1_000 - end) - - fake_socket = %StreamerSocket{ - transport_pid: task.pid, - user: blocker - } - - topics = %{ - "public" => [fake_socket] - } + Streamer.add_socket("public", blocker) {:ok, _user_relationship} = User.block(blocker, blockee) {:ok, activity_one} = CommonAPI.post(friend, %{"status" => "hey! @#{blockee.nickname}"}) - Worker.push_to_socket(topics, "public", activity_one) + assert_receive {:render_with_user, _, _, ^activity_one} + assert Streamer.filtered_by_user?(blocker, activity_one) {:ok, activity_two} = CommonAPI.post(blockee, %{"status" => "hey! @#{friend.nickname}"}) - Worker.push_to_socket(topics, "public", activity_two) + assert_receive {:render_with_user, _, _, ^activity_two} + assert Streamer.filtered_by_user?(blocker, activity_two) {:ok, activity_three} = CommonAPI.post(blockee, %{"status" => "hey! @#{blocker.nickname}"}) - Worker.push_to_socket(topics, "public", activity_three) - - Task.await(task) + assert_receive {:render_with_user, _, _, ^activity_three} + assert Streamer.filtered_by_user?(blocker, activity_three) end end - test "it doesn't send unwanted DMs to list" do - user_a = insert(:user) - user_b = insert(:user) - user_c = insert(:user) + describe "lists" do + test "it doesn't send unwanted DMs to list" do + user_a = insert(:user) + user_b = insert(:user) + user_c = insert(:user) - {:ok, user_a} = User.follow(user_a, user_b) + {:ok, user_a} = User.follow(user_a, user_b) - {:ok, list} = List.create("Test", user_a) - {:ok, list} = List.follow(list, user_b) + {:ok, list} = List.create("Test", user_a) + {:ok, list} = List.follow(list, user_b) - {:ok, activity} = - CommonAPI.post(user_b, %{ - "status" => "@#{user_c.nickname} Test", - "visibility" => "direct" - }) + Streamer.add_socket("list:#{list.id}", user_a) - task = - Task.async(fn -> - refute_receive {:text, _}, 1_000 - end) + {:ok, _activity} = + CommonAPI.post(user_b, %{ + "status" => "@#{user_c.nickname} Test", + "visibility" => "direct" + }) - fake_socket = %StreamerSocket{ - transport_pid: task.pid, - user: user_a - } + refute_receive _ + end - topics = %{ - "list:#{list.id}" => [fake_socket] - } + test "it doesn't send unwanted private posts to list" do + user_a = insert(:user) + user_b = insert(:user) - Worker.handle_call({:stream, "list", activity}, self(), topics) + {:ok, list} = List.create("Test", user_a) + {:ok, list} = List.follow(list, user_b) - Task.await(task) + Streamer.add_socket("list:#{list.id}", user_a) + + {:ok, _activity} = + CommonAPI.post(user_b, %{ + "status" => "Test", + "visibility" => "private" + }) + + refute_receive _ + end + + test "it sends wanted private posts to list" do + user_a = insert(:user) + user_b = insert(:user) + + {:ok, user_a} = User.follow(user_a, user_b) + + {:ok, list} = List.create("Test", user_a) + {:ok, list} = List.follow(list, user_b) + + Streamer.add_socket("list:#{list.id}", user_a) + + {:ok, activity} = + CommonAPI.post(user_b, %{ + "status" => "Test", + "visibility" => "private" + }) + + assert_receive {:render_with_user, _, _, ^activity} + refute Streamer.filtered_by_user?(user_a, activity) + end end - test "it doesn't send unwanted private posts to list" do - user_a = insert(:user) - user_b = insert(:user) + describe "muted reblogs" do + test "it filters muted reblogs" do + user1 = insert(:user) + user2 = insert(:user) + user3 = insert(:user) + CommonAPI.follow(user1, user2) + CommonAPI.hide_reblogs(user1, user2) - {:ok, list} = List.create("Test", user_a) - {:ok, list} = List.follow(list, user_b) + {:ok, create_activity} = CommonAPI.post(user3, %{"status" => "I'm kawen"}) - {:ok, activity} = - CommonAPI.post(user_b, %{ - "status" => "Test", - "visibility" => "private" - }) + Streamer.add_socket("user", user1) + {:ok, announce_activity, _} = CommonAPI.repeat(create_activity.id, user2) + assert_receive {:render_with_user, _, _, ^announce_activity} + assert Streamer.filtered_by_user?(user1, announce_activity) + end - task = - Task.async(fn -> - refute_receive {:text, _}, 1_000 - end) + test "it filters reblog notification for reblog-muted actors" do + user1 = insert(:user) + user2 = insert(:user) + CommonAPI.follow(user1, user2) + CommonAPI.hide_reblogs(user1, user2) - fake_socket = %StreamerSocket{ - transport_pid: task.pid, - user: user_a - } + {:ok, create_activity} = CommonAPI.post(user1, %{"status" => "I'm kawen"}) + Streamer.add_socket("user", user1) + {:ok, _favorite_activity, _} = CommonAPI.repeat(create_activity.id, user2) - topics = %{ - "list:#{list.id}" => [fake_socket] - } + assert_receive {:render_with_user, _, "notification.json", notif} + assert Streamer.filtered_by_user?(user1, notif) + end - Worker.handle_call({:stream, "list", activity}, self(), topics) + test "it send non-reblog notification for reblog-muted actors" do + user1 = insert(:user) + user2 = insert(:user) + CommonAPI.follow(user1, user2) + CommonAPI.hide_reblogs(user1, user2) - Task.await(task) + {:ok, create_activity} = CommonAPI.post(user1, %{"status" => "I'm kawen"}) + Streamer.add_socket("user", user1) + {:ok, _favorite_activity} = CommonAPI.favorite(user2, create_activity.id) + + assert_receive {:render_with_user, _, "notification.json", notif} + refute Streamer.filtered_by_user?(user1, notif) + end end - test "it sends wanted private posts to list" do - user_a = insert(:user) - user_b = insert(:user) - - {:ok, user_a} = User.follow(user_a, user_b) - - {:ok, list} = List.create("Test", user_a) - {:ok, list} = List.follow(list, user_b) - - {:ok, activity} = - CommonAPI.post(user_b, %{ - "status" => "Test", - "visibility" => "private" - }) - - task = - Task.async(fn -> - assert_receive {:text, _}, 1_000 - end) - - fake_socket = %StreamerSocket{ - transport_pid: task.pid, - user: user_a - } - - Streamer.add_socket( - "list:#{list.id}", - fake_socket - ) - - Worker.handle_call({:stream, "list", activity}, self(), %{}) - - Task.await(task) - end - - test "it doesn't send muted reblogs" do - user1 = insert(:user) - user2 = insert(:user) - user3 = insert(:user) - CommonAPI.hide_reblogs(user1, user2) - - {:ok, create_activity} = CommonAPI.post(user3, %{"status" => "I'm kawen"}) - {:ok, announce_activity, _} = CommonAPI.repeat(create_activity.id, user2) - - task = - Task.async(fn -> - refute_receive {:text, _}, 1_000 - end) - - fake_socket = %StreamerSocket{ - transport_pid: task.pid, - user: user1 - } - - topics = %{ - "public" => [fake_socket] - } - - Worker.push_to_socket(topics, "public", announce_activity) - - Task.await(task) - end - - test "it does send non-reblog notification for reblog-muted actors" do - user1 = insert(:user) - user2 = insert(:user) - user3 = insert(:user) - CommonAPI.hide_reblogs(user1, user2) - - {:ok, create_activity} = CommonAPI.post(user3, %{"status" => "I'm kawen"}) - {:ok, favorite_activity} = CommonAPI.favorite(user2, create_activity.id) - - task = - Task.async(fn -> - assert_receive {:text, _}, 1_000 - end) - - fake_socket = %StreamerSocket{ - transport_pid: task.pid, - user: user1 - } - - topics = %{ - "public" => [fake_socket] - } - - Worker.push_to_socket(topics, "public", favorite_activity) - - Task.await(task) - end - - test "it doesn't send posts from muted threads" do + test "it filters posts from muted threads" do user = insert(:user) user2 = insert(:user) + Streamer.add_socket("user", user2) {:ok, user2, user, _activity} = CommonAPI.follow(user2, user) - {:ok, activity} = CommonAPI.post(user, %{"status" => "super hot take"}) - - {:ok, activity} = CommonAPI.add_mute(user2, activity) - - task = Task.async(fn -> refute_receive {:text, _}, @streamer_timeout end) - - Streamer.add_socket( - "user", - %{transport_pid: task.pid, assigns: %{user: user2}} - ) - - Streamer.stream("user", activity) - Task.await(task) + {:ok, _} = CommonAPI.add_mute(user2, activity) + assert_receive {:render_with_user, _, _, ^activity} + assert Streamer.filtered_by_user?(user2, activity) end describe "direct streams" do @@ -568,22 +411,7 @@ test "it sends conversation update to the 'direct' stream", %{} do user = insert(:user) another_user = insert(:user) - task = - Task.async(fn -> - assert_receive {:text, received_event}, @streamer_timeout - - assert %{"event" => "conversation", "payload" => received_payload} = - Jason.decode!(received_event) - - assert %{"last_status" => last_status} = Jason.decode!(received_payload) - [participation] = Participation.for_user(user) - assert last_status["pleroma"]["direct_conversation_id"] == participation.id - end) - - Streamer.add_socket( - "direct", - %{transport_pid: task.pid, assigns: %{user: user}} - ) + Streamer.add_socket("direct", user) {:ok, _create_activity} = CommonAPI.post(another_user, %{ @@ -591,42 +419,47 @@ test "it sends conversation update to the 'direct' stream", %{} do "visibility" => "direct" }) - Task.await(task) + assert_receive {:text, received_event} + + assert %{"event" => "conversation", "payload" => received_payload} = + Jason.decode!(received_event) + + assert %{"last_status" => last_status} = Jason.decode!(received_payload) + [participation] = Participation.for_user(user) + assert last_status["pleroma"]["direct_conversation_id"] == participation.id end test "it doesn't send conversation update to the 'direct' stream when the last message in the conversation is deleted" do user = insert(:user) another_user = insert(:user) + Streamer.add_socket("direct", user) + {:ok, create_activity} = CommonAPI.post(another_user, %{ "status" => "hi @#{user.nickname}", "visibility" => "direct" }) - task = - Task.async(fn -> - assert_receive {:text, received_event}, @streamer_timeout - assert %{"event" => "delete", "payload" => _} = Jason.decode!(received_event) + create_activity_id = create_activity.id + assert_receive {:render_with_user, _, _, ^create_activity} + assert_receive {:text, received_conversation1} + assert %{"event" => "conversation", "payload" => _} = Jason.decode!(received_conversation1) - refute_receive {:text, _}, @streamer_timeout - end) + {:ok, _} = CommonAPI.delete(create_activity_id, another_user) - Process.sleep(@streamer_start_wait) + assert_receive {:text, received_event} - Streamer.add_socket( - "direct", - %{transport_pid: task.pid, assigns: %{user: user}} - ) + assert %{"event" => "delete", "payload" => ^create_activity_id} = + Jason.decode!(received_event) - {:ok, _} = CommonAPI.delete(create_activity.id, another_user) - - Task.await(task) + refute_receive _ end test "it sends conversation update to the 'direct' stream when a message is deleted" do user = insert(:user) another_user = insert(:user) + Streamer.add_socket("direct", user) {:ok, create_activity} = CommonAPI.post(another_user, %{ @@ -636,35 +469,30 @@ test "it sends conversation update to the 'direct' stream when a message is dele {:ok, create_activity2} = CommonAPI.post(another_user, %{ - "status" => "hi @#{user.nickname}", + "status" => "hi @#{user.nickname} 2", "in_reply_to_status_id" => create_activity.id, "visibility" => "direct" }) - task = - Task.async(fn -> - assert_receive {:text, received_event}, @streamer_timeout - assert %{"event" => "delete", "payload" => _} = Jason.decode!(received_event) - - assert_receive {:text, received_event}, @streamer_timeout - - assert %{"event" => "conversation", "payload" => received_payload} = - Jason.decode!(received_event) - - assert %{"last_status" => last_status} = Jason.decode!(received_payload) - assert last_status["id"] == to_string(create_activity.id) - end) - - Process.sleep(@streamer_start_wait) - - Streamer.add_socket( - "direct", - %{transport_pid: task.pid, assigns: %{user: user}} - ) + assert_receive {:render_with_user, _, _, ^create_activity} + assert_receive {:render_with_user, _, _, ^create_activity2} + assert_receive {:text, received_conversation1} + assert %{"event" => "conversation", "payload" => _} = Jason.decode!(received_conversation1) + assert_receive {:text, received_conversation1} + assert %{"event" => "conversation", "payload" => _} = Jason.decode!(received_conversation1) {:ok, _} = CommonAPI.delete(create_activity2.id, another_user) - Task.await(task) + assert_receive {:text, received_event} + assert %{"event" => "delete", "payload" => _} = Jason.decode!(received_event) + + assert_receive {:text, received_event} + + assert %{"event" => "conversation", "payload" => received_payload} = + Jason.decode!(received_event) + + assert %{"last_status" => last_status} = Jason.decode!(received_payload) + assert last_status["id"] == to_string(create_activity.id) end end end From cdca62e8d4772240c513acc08a627d2f0ee0eed4 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 6 May 2020 19:20:26 +0400 Subject: [PATCH 487/581] Add schema for Tag --- lib/pleroma/web/api_spec/schemas/status.ex | 12 ++-------- lib/pleroma/web/api_spec/schemas/tag.ex | 27 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 10 deletions(-) create mode 100644 lib/pleroma/web/api_spec/schemas/tag.ex diff --git a/lib/pleroma/web/api_spec/schemas/status.ex b/lib/pleroma/web/api_spec/schemas/status.ex index 7a804461f..2572c9641 100644 --- a/lib/pleroma/web/api_spec/schemas/status.ex +++ b/lib/pleroma/web/api_spec/schemas/status.ex @@ -9,6 +9,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do alias Pleroma.Web.ApiSpec.Schemas.Emoji alias Pleroma.Web.ApiSpec.Schemas.FlakeID alias Pleroma.Web.ApiSpec.Schemas.Poll + alias Pleroma.Web.ApiSpec.Schemas.Tag alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope require OpenApiSpex @@ -106,16 +107,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do replies_count: %Schema{type: :integer}, sensitive: %Schema{type: :boolean}, spoiler_text: %Schema{type: :string}, - tags: %Schema{ - type: :array, - items: %Schema{ - type: :object, - properties: %{ - name: %Schema{type: :string}, - url: %Schema{type: :string, format: :uri} - } - } - }, + tags: %Schema{type: :array, items: Tag}, uri: %Schema{type: :string, format: :uri}, url: %Schema{type: :string, nullable: true, format: :uri}, visibility: VisibilityScope diff --git a/lib/pleroma/web/api_spec/schemas/tag.ex b/lib/pleroma/web/api_spec/schemas/tag.ex new file mode 100644 index 000000000..e693fb83e --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/tag.ex @@ -0,0 +1,27 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.Tag do + alias OpenApiSpex.Schema + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "Tag", + description: "Represents a hashtag used within the content of a status", + type: :object, + properties: %{ + name: %Schema{type: :string, description: "The value of the hashtag after the # sign"}, + url: %Schema{ + type: :string, + format: :uri, + description: "A link to the hashtag on the instance" + } + }, + example: %{ + name: "cofe", + url: "https://lain.com/tag/cofe" + } + }) +end From dc4a448f4863e7d69c55d39273575fb3463c6c3c Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Thu, 7 May 2020 14:04:48 +0400 Subject: [PATCH 488/581] Add OpenAPI spec for SearchController --- .../api_spec/operations/account_operation.ex | 5 +- .../api_spec/operations/search_operation.ex | 207 ++++++++++++++++++ .../controllers/search_controller.ex | 24 +- .../controllers/search_controller_test.exs | 78 +++---- 4 files changed, 264 insertions(+), 50 deletions(-) create mode 100644 lib/pleroma/web/api_spec/operations/search_operation.ex diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 470fc0215..70069d6f9 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -556,11 +556,12 @@ defp update_creadentials_request do } end - defp array_of_accounts do + def array_of_accounts do %Schema{ title: "ArrayOfAccounts", type: :array, - items: Account + items: Account, + example: [Account.schema().example] } end diff --git a/lib/pleroma/web/api_spec/operations/search_operation.ex b/lib/pleroma/web/api_spec/operations/search_operation.ex new file mode 100644 index 000000000..ec1ae5dcf --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/search_operation.ex @@ -0,0 +1,207 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.SearchOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.AccountOperation + alias Pleroma.Web.ApiSpec.Schemas.Account + alias Pleroma.Web.ApiSpec.Schemas.BooleanLike + alias Pleroma.Web.ApiSpec.Schemas.FlakeID + alias Pleroma.Web.ApiSpec.Schemas.Status + alias Pleroma.Web.ApiSpec.Schemas.Tag + + import Pleroma.Web.ApiSpec.Helpers + + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + def account_search_operation do + %Operation{ + tags: ["Search"], + summary: "Search for matching accounts by username or display name", + operationId: "SearchController.account_search", + parameters: [ + Operation.parameter(:q, :query, %Schema{type: :string}, "What to search for", + required: true + ), + Operation.parameter( + :limit, + :query, + %Schema{type: :integer, default: 40}, + "Maximum number of results" + ), + Operation.parameter( + :resolve, + :query, + %Schema{allOf: [BooleanLike], default: false}, + "Attempt WebFinger lookup. Use this when `q` is an exact address." + ), + Operation.parameter( + :following, + :query, + %Schema{allOf: [BooleanLike], default: false}, + "Only who the user is following." + ) + ], + responses: %{ + 200 => + Operation.response( + "Array of Account", + "application/json", + AccountOperation.array_of_accounts() + ) + } + } + end + + def search_operation do + %Operation{ + tags: ["Search"], + summary: "Search results", + security: [%{"oAuth" => ["read:search"]}], + operationId: "SearchController.search", + deprecated: true, + parameters: [ + Operation.parameter( + :account_id, + :query, + FlakeID, + "If provided, statuses returned will be authored only by this account" + ), + Operation.parameter( + :type, + :query, + %Schema{type: :string, enum: ["accounts", "hashtags", "statuses"]}, + "Search type" + ), + Operation.parameter(:q, :query, %Schema{type: :string}, "The search query", required: true), + Operation.parameter( + :resolve, + :query, + %Schema{allOf: [BooleanLike], default: false}, + "Attempt WebFinger lookup" + ), + Operation.parameter( + :following, + :query, + %Schema{allOf: [BooleanLike], default: false}, + "Only include accounts that the user is following" + ), + Operation.parameter( + :offset, + :query, + %Schema{type: :integer}, + "Offset" + ) + | pagination_params() + ], + responses: %{ + 200 => Operation.response("Results", "application/json", results()) + } + } + end + + def search2_operation do + %Operation{ + tags: ["Search"], + summary: "Search results", + security: [%{"oAuth" => ["read:search"]}], + operationId: "SearchController.search2", + parameters: [ + Operation.parameter( + :account_id, + :query, + FlakeID, + "If provided, statuses returned will be authored only by this account" + ), + Operation.parameter( + :type, + :query, + %Schema{type: :string, enum: ["accounts", "hashtags", "statuses"]}, + "Search type" + ), + Operation.parameter(:q, :query, %Schema{type: :string}, "What to search for", + required: true + ), + Operation.parameter( + :resolve, + :query, + %Schema{allOf: [BooleanLike], default: false}, + "Attempt WebFinger lookup" + ), + Operation.parameter( + :following, + :query, + %Schema{allOf: [BooleanLike], default: false}, + "Only include accounts that the user is following" + ) + | pagination_params() + ], + responses: %{ + 200 => Operation.response("Results", "application/json", results2()) + } + } + end + + defp results2 do + %Schema{ + title: "SearchResults", + type: :object, + properties: %{ + accounts: %Schema{ + type: :array, + items: Account, + description: "Accounts which match the given query" + }, + statuses: %Schema{ + type: :array, + items: Status, + description: "Statuses which match the given query" + }, + hashtags: %Schema{ + type: :array, + items: Tag, + description: "Hashtags which match the given query" + } + }, + example: %{ + "accounts" => [Account.schema().example], + "statuses" => [Status.schema().example], + "hashtags" => [Tag.schema().example] + } + } + end + + defp results do + %Schema{ + title: "SearchResults", + type: :object, + properties: %{ + accounts: %Schema{ + type: :array, + items: Account, + description: "Accounts which match the given query" + }, + statuses: %Schema{ + type: :array, + items: Status, + description: "Statuses which match the given query" + }, + hashtags: %Schema{ + type: :array, + items: %Schema{type: :string}, + description: "Hashtags which match the given query" + } + }, + example: %{ + "accounts" => [Account.schema().example], + "statuses" => [Status.schema().example], + "hashtags" => ["cofe"] + } + } + end +end diff --git a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex index cd49da6ad..0e0d54ba4 100644 --- a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex @@ -5,7 +5,7 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do use Pleroma.Web, :controller - import Pleroma.Web.ControllerHelper, only: [fetch_integer_param: 2, skip_relationships?: 1] + import Pleroma.Web.ControllerHelper, only: [skip_relationships?: 1] alias Pleroma.Activity alias Pleroma.Plugs.OAuthScopesPlug @@ -18,6 +18,8 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do require Logger + plug(Pleroma.Web.ApiSpec.CastAndValidate) + # Note: Mastodon doesn't allow unauthenticated access (requires read:accounts / read:search) plug(OAuthScopesPlug, %{scopes: ["read:search"], fallback: :proceed_unauthenticated}) @@ -25,7 +27,9 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do plug(RateLimiter, [name: :search] when action in [:search, :search2, :account_search]) - def account_search(%{assigns: %{user: user}} = conn, %{"q" => query} = params) do + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.SearchOperation + + def account_search(%{assigns: %{user: user}} = conn, %{q: query} = params) do accounts = User.search(query, search_options(params, user)) conn @@ -36,7 +40,7 @@ def account_search(%{assigns: %{user: user}} = conn, %{"q" => query} = params) d def search2(conn, params), do: do_search(:v2, conn, params) def search(conn, params), do: do_search(:v1, conn, params) - defp do_search(version, %{assigns: %{user: user}} = conn, %{"q" => query} = params) do + defp do_search(version, %{assigns: %{user: user}} = conn, %{q: query} = params) do options = search_options(params, user) timeout = Keyword.get(Repo.config(), :timeout, 15_000) default_values = %{"statuses" => [], "accounts" => [], "hashtags" => []} @@ -44,7 +48,7 @@ defp do_search(version, %{assigns: %{user: user}} = conn, %{"q" => query} = para result = default_values |> Enum.map(fn {resource, default_value} -> - if params["type"] in [nil, resource] do + if params[:type] in [nil, resource] do {resource, fn -> resource_search(version, resource, query, options) end} else {resource, fn -> default_value end} @@ -68,11 +72,11 @@ defp do_search(version, %{assigns: %{user: user}} = conn, %{"q" => query} = para defp search_options(params, user) do [ skip_relationships: skip_relationships?(params), - resolve: params["resolve"] == "true", - following: params["following"] == "true", - limit: fetch_integer_param(params, "limit"), - offset: fetch_integer_param(params, "offset"), - type: params["type"], + resolve: params[:resolve], + following: params[:following], + limit: params[:limit], + offset: params[:offset], + type: params[:type], author: get_author(params), for_user: user ] @@ -135,7 +139,7 @@ defp with_fallback(f, fallback \\ []) do end end - defp get_author(%{"account_id" => account_id}) when is_binary(account_id), + defp get_author(%{account_id: account_id}) when is_binary(account_id), do: User.get_cached_by_id(account_id) defp get_author(_params), do: nil diff --git a/test/web/mastodon_api/controllers/search_controller_test.exs b/test/web/mastodon_api/controllers/search_controller_test.exs index 11133ff66..02476acb6 100644 --- a/test/web/mastodon_api/controllers/search_controller_test.exs +++ b/test/web/mastodon_api/controllers/search_controller_test.exs @@ -27,8 +27,8 @@ test "it returns empty result if user or status search return undefined error", capture_log(fn -> results = conn - |> get("/api/v2/search", %{"q" => "2hu"}) - |> json_response(200) + |> get("/api/v2/search?q=2hu") + |> json_response_and_validate_schema(200) assert results["accounts"] == [] assert results["statuses"] == [] @@ -54,8 +54,8 @@ test "search", %{conn: conn} do results = conn - |> get("/api/v2/search", %{"q" => "2hu #private"}) - |> json_response(200) + |> get("/api/v2/search?#{URI.encode_query(%{q: "2hu #private"})}") + |> json_response_and_validate_schema(200) [account | _] = results["accounts"] assert account["id"] == to_string(user_three.id) @@ -68,8 +68,8 @@ test "search", %{conn: conn} do assert status["id"] == to_string(activity.id) results = - get(conn, "/api/v2/search", %{"q" => "天子"}) - |> json_response(200) + get(conn, "/api/v2/search?q=天子") + |> json_response_and_validate_schema(200) [status] = results["statuses"] assert status["id"] == to_string(activity.id) @@ -89,8 +89,8 @@ test "excludes a blocked users from search results", %{conn: conn} do conn |> assign(:user, user) |> assign(:token, insert(:oauth_token, user: user, scopes: ["read"])) - |> get("/api/v2/search", %{"q" => "Agent"}) - |> json_response(200) + |> get("/api/v2/search?q=Agent") + |> json_response_and_validate_schema(200) status_ids = Enum.map(results["statuses"], fn g -> g["id"] end) @@ -107,8 +107,8 @@ test "account search", %{conn: conn} do results = conn - |> get("/api/v1/accounts/search", %{"q" => "shp"}) - |> json_response(200) + |> get("/api/v1/accounts/search?q=shp") + |> json_response_and_validate_schema(200) result_ids = for result <- results, do: result["acct"] @@ -117,8 +117,8 @@ test "account search", %{conn: conn} do results = conn - |> get("/api/v1/accounts/search", %{"q" => "2hu"}) - |> json_response(200) + |> get("/api/v1/accounts/search?q=2hu") + |> json_response_and_validate_schema(200) result_ids = for result <- results, do: result["acct"] @@ -130,8 +130,8 @@ test "returns account if query contains a space", %{conn: conn} do results = conn - |> get("/api/v1/accounts/search", %{"q" => "shp@shitposter.club xxx "}) - |> json_response(200) + |> get("/api/v1/accounts/search?q=shp@shitposter.club xxx") + |> json_response_and_validate_schema(200) assert length(results) == 1 end @@ -146,8 +146,8 @@ test "it returns empty result if user or status search return undefined error", capture_log(fn -> results = conn - |> get("/api/v1/search", %{"q" => "2hu"}) - |> json_response(200) + |> get("/api/v1/search?q=2hu") + |> json_response_and_validate_schema(200) assert results["accounts"] == [] assert results["statuses"] == [] @@ -173,8 +173,8 @@ test "search", %{conn: conn} do results = conn - |> get("/api/v1/search", %{"q" => "2hu"}) - |> json_response(200) + |> get("/api/v1/search?q=2hu") + |> json_response_and_validate_schema(200) [account | _] = results["accounts"] assert account["id"] == to_string(user_three.id) @@ -194,8 +194,8 @@ test "search fetches remote statuses and prefers them over other results", %{con results = conn - |> get("/api/v1/search", %{"q" => "https://shitposter.club/notice/2827873"}) - |> json_response(200) + |> get("/api/v1/search?q=https://shitposter.club/notice/2827873") + |> json_response_and_validate_schema(200) [status, %{"id" => ^activity_id}] = results["statuses"] @@ -212,10 +212,12 @@ test "search doesn't show statuses that it shouldn't", %{conn: conn} do }) capture_log(fn -> + q = Object.normalize(activity).data["id"] + results = conn - |> get("/api/v1/search", %{"q" => Object.normalize(activity).data["id"]}) - |> json_response(200) + |> get("/api/v1/search?q=#{q}") + |> json_response_and_validate_schema(200) [] = results["statuses"] end) @@ -228,8 +230,8 @@ test "search fetches remote accounts", %{conn: conn} do conn |> assign(:user, user) |> assign(:token, insert(:oauth_token, user: user, scopes: ["read"])) - |> get("/api/v1/search", %{"q" => "mike@osada.macgirvin.com", "resolve" => "true"}) - |> json_response(200) + |> get("/api/v1/search?q=mike@osada.macgirvin.com&resolve=true") + |> json_response_and_validate_schema(200) [account] = results["accounts"] assert account["acct"] == "mike@osada.macgirvin.com" @@ -238,8 +240,8 @@ test "search fetches remote accounts", %{conn: conn} do test "search doesn't fetch remote accounts if resolve is false", %{conn: conn} do results = conn - |> get("/api/v1/search", %{"q" => "mike@osada.macgirvin.com", "resolve" => "false"}) - |> json_response(200) + |> get("/api/v1/search?q=mike@osada.macgirvin.com&resolve=false") + |> json_response_and_validate_schema(200) assert [] == results["accounts"] end @@ -254,16 +256,16 @@ test "search with limit and offset", %{conn: conn} do result = conn - |> get("/api/v1/search", %{"q" => "2hu", "limit" => 1}) + |> get("/api/v1/search?q=2hu&limit=1") - assert results = json_response(result, 200) + assert results = json_response_and_validate_schema(result, 200) assert [%{"id" => activity_id1}] = results["statuses"] assert [_] = results["accounts"] results = conn - |> get("/api/v1/search", %{"q" => "2hu", "limit" => 1, "offset" => 1}) - |> json_response(200) + |> get("/api/v1/search?q=2hu&limit=1&offset=1") + |> json_response_and_validate_schema(200) assert [%{"id" => activity_id2}] = results["statuses"] assert [] = results["accounts"] @@ -279,13 +281,13 @@ test "search returns results only for the given type", %{conn: conn} do assert %{"statuses" => [_activity], "accounts" => [], "hashtags" => []} = conn - |> get("/api/v1/search", %{"q" => "2hu", "type" => "statuses"}) - |> json_response(200) + |> get("/api/v1/search?q=2hu&type=statuses") + |> json_response_and_validate_schema(200) assert %{"statuses" => [], "accounts" => [_user_two], "hashtags" => []} = conn - |> get("/api/v1/search", %{"q" => "2hu", "type" => "accounts"}) - |> json_response(200) + |> get("/api/v1/search?q=2hu&type=accounts") + |> json_response_and_validate_schema(200) end test "search uses account_id to filter statuses by the author", %{conn: conn} do @@ -297,8 +299,8 @@ test "search uses account_id to filter statuses by the author", %{conn: conn} do results = conn - |> get("/api/v1/search", %{"q" => "2hu", "account_id" => user.id}) - |> json_response(200) + |> get("/api/v1/search?q=2hu&account_id=#{user.id}") + |> json_response_and_validate_schema(200) assert [%{"id" => activity_id1}] = results["statuses"] assert activity_id1 == activity1.id @@ -306,8 +308,8 @@ test "search uses account_id to filter statuses by the author", %{conn: conn} do results = conn - |> get("/api/v1/search", %{"q" => "2hu", "account_id" => user_two.id}) - |> json_response(200) + |> get("/api/v1/search?q=2hu&account_id=#{user_two.id}") + |> json_response_and_validate_schema(200) assert [%{"id" => activity_id2}] = results["statuses"] assert activity_id2 == activity2.id From f57fa2a00df2d93eba53c1ff3ab5c7d5fabb8308 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 7 May 2020 12:43:30 +0200 Subject: [PATCH 489/581] Notifications: Simplify recipient calculation for some Activities. Fixes the 'getting notfications for other people's posts' bug. --- lib/pleroma/notification.ex | 29 ++++++++++++++++++++++------- test/notification_test.exs | 24 ++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 98289af08..b14e7c843 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -339,13 +339,7 @@ def get_notified_from_activity(activity, local_only \\ true) def get_notified_from_activity(%Activity{data: %{"type" => type}} = activity, local_only) when type in ["Create", "Like", "Announce", "Follow", "Move", "EmojiReact"] do - potential_receiver_ap_ids = - [] - |> Utils.maybe_notify_to_recipients(activity) - |> Utils.maybe_notify_mentioned_recipients(activity) - |> Utils.maybe_notify_subscribers(activity) - |> Utils.maybe_notify_followers(activity) - |> Enum.uniq() + potential_receiver_ap_ids = get_potential_receiver_ap_ids(activity) potential_receivers = User.get_users_from_set(potential_receiver_ap_ids, local_only) @@ -363,6 +357,27 @@ def get_notified_from_activity(%Activity{data: %{"type" => type}} = activity, lo def get_notified_from_activity(_, _local_only), do: {[], []} + # For some actitivies, only notifity the author of the object + def get_potential_receiver_ap_ids(%{data: %{"type" => type, "object" => object_id}}) + when type in ~w{Like Announce EmojiReact} do + case Object.get_cached_by_ap_id(object_id) do + %Object{data: %{"actor" => actor}} -> + [actor] + + _ -> + [] + end + end + + def get_potential_receiver_ap_ids(activity) do + [] + |> Utils.maybe_notify_to_recipients(activity) + |> Utils.maybe_notify_mentioned_recipients(activity) + |> Utils.maybe_notify_subscribers(activity) + |> Utils.maybe_notify_followers(activity) + |> Enum.uniq() + end + @doc "Filters out AP IDs domain-blocking and not following the activity's actor" def exclude_domain_blocker_ap_ids(ap_ids, activity, preloaded_users \\ []) diff --git a/test/notification_test.exs b/test/notification_test.exs index 5c85f3368..509ca0b0b 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -12,6 +12,8 @@ defmodule Pleroma.NotificationTest do alias Pleroma.Notification alias Pleroma.Tests.ObanHelpers alias Pleroma.User + alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.ActivityPub.Builder alias Pleroma.Web.ActivityPub.Transmogrifier alias Pleroma.Web.CommonAPI alias Pleroma.Web.MastodonAPI.NotificationView @@ -601,6 +603,28 @@ test "it does not send notification to mentioned users in likes" do assert other_user not in enabled_receivers end + test "it only notifies the post's author in likes" do + user = insert(:user) + other_user = insert(:user) + third_user = insert(:user) + + {:ok, activity_one} = + CommonAPI.post(user, %{ + "status" => "hey @#{other_user.nickname}!" + }) + + {:ok, like_data, _} = Builder.like(third_user, activity_one.object) + + {:ok, like, _} = + like_data + |> Map.put("to", [other_user.ap_id | like_data["to"]]) + |> ActivityPub.persist(local: true) + + {enabled_receivers, _disabled_receivers} = Notification.get_notified_from_activity(like) + + assert other_user not in enabled_receivers + end + test "it does not send notification to mentioned users in announces" do user = insert(:user) other_user = insert(:user) From 3f867d8e9bf970e180153b411d5924f15c490046 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 7 May 2020 10:48:09 +0000 Subject: [PATCH 490/581] Apply suggestion to lib/pleroma/web/api_spec/operations/search_operation.ex --- lib/pleroma/web/api_spec/operations/search_operation.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/operations/search_operation.ex b/lib/pleroma/web/api_spec/operations/search_operation.ex index ec1ae5dcf..6ea00a9a8 100644 --- a/lib/pleroma/web/api_spec/operations/search_operation.ex +++ b/lib/pleroma/web/api_spec/operations/search_operation.ex @@ -44,7 +44,7 @@ def account_search_operation do :following, :query, %Schema{allOf: [BooleanLike], default: false}, - "Only who the user is following." + "Only include accounts that the user is following" ) ], responses: %{ From 8ae4d64d475405f8ff98868b80fc71fbe74b45bc Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 7 May 2020 11:01:52 +0000 Subject: [PATCH 491/581] Apply suggestion to lib/pleroma/notification.ex --- lib/pleroma/notification.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index b14e7c843..af49fd713 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -357,7 +357,7 @@ def get_notified_from_activity(%Activity{data: %{"type" => type}} = activity, lo def get_notified_from_activity(_, _local_only), do: {[], []} - # For some actitivies, only notifity the author of the object + # For some activities, only notify the author of the object def get_potential_receiver_ap_ids(%{data: %{"type" => type, "object" => object_id}}) when type in ~w{Like Announce EmojiReact} do case Object.get_cached_by_ap_id(object_id) do From 9c3c142c32b027addd7b729229820f8b2bf76994 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 7 May 2020 14:35:29 +0300 Subject: [PATCH 492/581] Restore mix.lock after 2FA merge It downgraded a bunch of deps, including plug. Which resulted in errors since pleroma was using a feature plug didn't support at the time. --- mix.lock | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/mix.lock b/mix.lock index 4792249d7..c400202b7 100644 --- a/mix.lock +++ b/mix.lock @@ -2,7 +2,8 @@ "accept": {:hex, :accept, "0.3.5", "b33b127abca7cc948bbe6caa4c263369abf1347cfa9d8e699c6d214660f10cd1", [:rebar3], [], "hexpm", "11b18c220bcc2eab63b5470c038ef10eb6783bcb1fcdb11aa4137defa5ac1bb8"}, "auto_linker": {:git, "https://git.pleroma.social/pleroma/auto_linker.git", "95e8188490e97505c56636c1379ffdf036c1fdde", [ref: "95e8188490e97505c56636c1379ffdf036c1fdde"]}, "base62": {:hex, :base62, "1.2.1", "4866763e08555a7b3917064e9eef9194c41667276c51b59de2bc42c6ea65f806", [:mix], [{:custom_base, "~> 0.2.1", [hex: :custom_base, repo: "hexpm", optional: false]}], "hexpm", "3b29948de2013d3f93aa898c884a9dff847e7aec75d9d6d8c1dc4c61c2716c42"}, - "bbcode": {:hex, :bbcode, "0.1.1", "0023e2c7814119b2e620b7add67182e3f6019f92bfec9a22da7e99821aceba70", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "5a981b98ac7d366a9b6bf40eac389aaf4d6e623c631e6b6f8a6b571efaafd338"}, + "base64url": {:hex, :base64url, "0.0.1", "36a90125f5948e3afd7be97662a1504b934dd5dac78451ca6e9abf85a10286be", [:rebar], [], "hexpm"}, + "bbcode": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/bbcode.git", "f2d267675e9a7e1ad1ea9beb4cc23382762b66c2", [ref: "v0.2.0"]}, "bbcode_pleroma": {:hex, :bbcode_pleroma, "0.2.0", "d36f5bca6e2f62261c45be30fa9b92725c0655ad45c99025cb1c3e28e25803ef", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "19851074419a5fedb4ef49e1f01b30df504bb5dbb6d6adfc135238063bebd1c3"}, "benchee": {:hex, :benchee, "1.0.1", "66b211f9bfd84bd97e6d1beaddf8fc2312aaabe192f776e8931cb0c16f53a521", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}], "hexpm", "3ad58ae787e9c7c94dd7ceda3b587ec2c64604563e049b2a0e8baafae832addb"}, "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"}, @@ -18,33 +19,38 @@ "cowboy": {:hex, :cowboy, "2.7.0", "91ed100138a764355f43316b1d23d7ff6bdb0de4ea618cb5d8677c93a7a2f115", [:rebar3], [{:cowlib, "~> 2.8.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.7.1", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "04fd8c6a39edc6aaa9c26123009200fc61f92a3a94f3178c527b70b767c6e605"}, "cowlib": {:hex, :cowlib, "2.8.0", "fd0ff1787db84ac415b8211573e9a30a3ebe71b5cbff7f720089972b2319c8a4", [:rebar3], [], "hexpm", "79f954a7021b302186a950a32869dbc185523d99d3e44ce430cd1f3289f41ed4"}, "credo": {:hex, :credo, "1.1.5", "caec7a3cadd2e58609d7ee25b3931b129e739e070539ad1a0cd7efeeb47014f4", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "d0bbd3222607ccaaac5c0340f7f525c627ae4d7aee6c8c8c108922620c5b6446"}, + "crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"}, "crypt": {:git, "https://github.com/msantos/crypt", "1f2b58927ab57e72910191a7ebaeff984382a1d3", [ref: "1f2b58927ab57e72910191a7ebaeff984382a1d3"]}, "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, "db_connection": {:hex, :db_connection, "2.2.1", "caee17725495f5129cb7faebde001dc4406796f12a62b8949f4ac69315080566", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm", "2b02ece62d9f983fcd40954e443b7d9e6589664380e5546b2b9b523cd0fb59e1"}, "decimal": {:hex, :decimal, "1.8.1", "a4ef3f5f3428bdbc0d35374029ffcf4ede8533536fa79896dd450168d9acdf3c", [:mix], [], "hexpm", "3cb154b00225ac687f6cbd4acc4b7960027c757a5152b369923ead9ddbca7aec"}, "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, "earmark": {:hex, :earmark, "1.4.3", "364ca2e9710f6bff494117dbbd53880d84bebb692dafc3a78eb50aa3183f2bfd", [:mix], [], "hexpm", "8cf8a291ebf1c7b9539e3cddb19e9cef066c2441b1640f13c34c1d3cfc825fec"}, - "ecto": {:hex, :ecto, "3.4.2", "6890af71025769bd27ef62b1ed1925cfe23f7f0460bcb3041da4b705215ff23e", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3959b8a83e086202a4bd86b4b5e6e71f9f1840813de14a57d502d3fc2ef7132"}, + "ecto": {:hex, :ecto, "3.4.0", "a7a83ab8359bf816ce729e5e65981ce25b9fc5adfc89c2ea3980f4fed0bfd7c1", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "5eed18252f5b5bbadec56a24112b531343507dbe046273133176b12190ce19cc"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, "ecto_sql": {:hex, :ecto_sql, "3.3.4", "aa18af12eb875fbcda2f75e608b3bd534ebf020fc4f6448e4672fcdcbb081244", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4 or ~> 3.3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5eccbdbf92e3c6f213007a82d5dbba4cd9bb659d1a21331f89f408e4c0efd7a8"}, "esshd": {:hex, :esshd, "0.1.1", "d4dd4c46698093a40a56afecce8a46e246eb35463c457c246dacba2e056f31b5", [:mix], [], "hexpm", "d73e341e3009d390aa36387dc8862860bf9f874c94d9fd92ade2926376f49981"}, "eternal": {:hex, :eternal, "1.2.1", "d5b6b2499ba876c57be2581b5b999ee9bdf861c647401066d3eeed111d096bc4", [:mix], [], "hexpm", "b14f1dc204321429479c569cfbe8fb287541184ed040956c8862cb7a677b8406"}, + "ex2ms": {:hex, :ex2ms, "1.5.0", "19e27f9212be9a96093fed8cdfbef0a2b56c21237196d26760f11dfcfae58e97", [:mix], [], "hexpm"}, "ex_aws": {:hex, :ex_aws, "2.1.1", "1e4de2106cfbf4e837de41be41cd15813eabc722315e388f0d6bb3732cec47cd", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "1.6.3 or 1.6.5 or 1.7.1 or 1.8.6 or ~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8", [hex: :jsx, repo: "hexpm", optional: true]}, {:poison, ">= 1.2.0", [hex: :poison, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "06b6fde12b33bb6d65d5d3493e903ba5a56d57a72350c15285a4298338089e10"}, "ex_aws_s3": {:hex, :ex_aws_s3, "2.0.2", "c0258bbdfea55de4f98f0b2f0ca61fe402cc696f573815134beb1866e778f47b", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "0569f5b211b1a3b12b705fe2a9d0e237eb1360b9d76298028df2346cad13097a"}, "ex_const": {:hex, :ex_const, "0.2.4", "d06e540c9d834865b012a17407761455efa71d0ce91e5831e86881b9c9d82448", [:mix], [], "hexpm", "96fd346610cc992b8f896ed26a98be82ac4efb065a0578f334a32d60a3ba9767"}, - "ex_doc": {:hex, :ex_doc, "0.21.2", "caca5bc28ed7b3bdc0b662f8afe2bee1eedb5c3cf7b322feeeb7c6ebbde089d6", [:mix], [{:earmark, "~> 1.3.3 or ~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "f1155337ae17ff7a1255217b4c1ceefcd1860b7ceb1a1874031e7a861b052e39"}, + "ex_doc": {:hex, :ex_doc, "0.21.3", "857ec876b35a587c5d9148a2512e952e24c24345552259464b98bfbb883c7b42", [:mix], [{:earmark, "~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "0db1ee8d1547ab4877c5b5dffc6604ef9454e189928d5ba8967d4a58a801f161"}, "ex_machina": {:hex, :ex_machina, "2.3.0", "92a5ad0a8b10ea6314b876a99c8c9e3f25f4dde71a2a835845b136b9adaf199a", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "b84f6af156264530b312a8ab98ac6088f6b77ae5fe2058305c81434aa01fbaf9"}, "ex_syslogger": {:hex, :ex_syslogger, "1.5.2", "72b6aa2d47a236e999171f2e1ec18698740f40af0bd02c8c650bf5f1fd1bac79", [:mix], [{:poison, ">= 1.5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:syslog, "~> 1.1.0", [hex: :syslog, repo: "hexpm", optional: false]}], "hexpm", "ab9fab4136dbc62651ec6f16fa4842f10cf02ab4433fa3d0976c01be99398399"}, "excoveralls": {:hex, :excoveralls, "0.12.2", "a513defac45c59e310ac42fcf2b8ae96f1f85746410f30b1ff2b710a4b6cd44b", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "151c476331d49b45601ffc45f43cb3a8beb396b02a34e3777fea0ad34ae57d89"}, - "fast_html": {:hex, :fast_html, "1.0.1", "5bc7df4dc4607ec2c314c16414e4111d79a209956c4f5df96602d194c61197f9", [:make, :mix], [], "hexpm", "18e627dd62051a375ef94b197f41e8027c3e8eef0180ab8f81e0543b3dc6900a"}, - "fast_sanitize": {:hex, :fast_sanitize, "0.1.6", "60a5ae96879956dea409a91a77f5dd2994c24cc10f80eefd8f9892ee4c0c7b25", [:mix], [{:fast_html, "~> 1.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "b73f50f0cb522dd0331ea8e8c90b408de42c50f37641219d6364f0e3e7efd22c"}, + "fast_html": {:hex, :fast_html, "1.0.3", "2cc0d4b68496266a1530e0c852cafeaede0bd10cfdee26fda50dc696c203162f", [:make, :mix], [], "hexpm", "ab3d782b639d3c4655fbaec0f9d032c91f8cab8dd791ac7469c2381bc7c32f85"}, + "fast_sanitize": {:hex, :fast_sanitize, "0.1.7", "2a7cd8734c88a2de6de55022104f8a3b87f1fdbe8bbf131d9049764b53d50d0d", [:mix], [{:fast_html, "~> 1.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f39fe8ea08fbac17487c30bf09b7d9f3e12472e51fb07a88ffeb8fd17da8ab67"}, "flake_id": {:hex, :flake_id, "0.1.0", "7716b086d2e405d09b647121a166498a0d93d1a623bead243e1f74216079ccb3", [:mix], [{:base62, "~> 1.2", [hex: :base62, repo: "hexpm", optional: false]}, {:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "31fc8090fde1acd267c07c36ea7365b8604055f897d3a53dd967658c691bd827"}, - "floki": {:hex, :floki, "0.26.0", "4df88977e2e357c6720e1b650f613444bfb48c5acfc6a0c646ab007d08ad13bf", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "e7b66ce7feef5518a9cd9fc7b52dd62a64028bd9cb6d6ad282a0f0fc90a4ae52"}, + "floki": {:hex, :floki, "0.25.0", "b1c9ddf5f32a3a90b43b76f3386ca054325dc2478af020e87b5111c19f2284ac", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "631f4e627c46d5ecd347df5a2accdaf0621c77c3693c5b75a8ad58e84c61f242"}, "gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm", "29bd14a88030980849c7ed2447b8db6d6c9278a28b11a44cafe41b791205440f"}, + "gen_stage": {:hex, :gen_stage, "0.14.3", "d0c66f1c87faa301c1a85a809a3ee9097a4264b2edf7644bf5c123237ef732bf", [:mix], [], "hexpm"}, + "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"}, "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"}, @@ -53,34 +59,38 @@ "joken": {:hex, :joken, "2.2.0", "2daa1b12be05184aff7b5ace1d43ca1f81345962285fff3f88db74927c954d3a", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "b4f92e30388206f869dd25d1af628a1d99d7586e5cf0672f64d4df84c4d2f5e9"}, "jose": {:hex, :jose, "1.10.1", "16d8e460dae7203c6d1efa3f277e25b5af8b659febfc2f2eb4bacf87f128b80a", [:mix, :rebar3], [], "hexpm", "3c7ddc8a9394b92891db7c2771da94bf819834a1a4c92e30857b7d582e2f8257"}, "jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"}, + "libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm"}, "makeup": {:hex, :makeup, "1.0.0", "671df94cf5a594b739ce03b0d0316aa64312cee2574b6a44becb83cd90fb05dc", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "a10c6eb62cca416019663129699769f0c2ccf39428b3bb3c0cb38c718a0c186d"}, "makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "d4b316c7222a85bbaa2fd7c6e90e37e953257ad196dc229505137c5e505e9eff"}, "meck": {:hex, :meck, "0.8.13", "ffedb39f99b0b99703b8601c6f17c7f76313ee12de6b646e671e3188401f7866", [:rebar3], [], "hexpm", "d34f013c156db51ad57cc556891b9720e6a1c1df5fe2e15af999c84d6cebeb1a"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, "mime": {:hex, :mime, "1.3.1", "30ce04ab3175b6ad0bdce0035cba77bba68b813d523d1aac73d9781b4d193cf8", [:mix], [], "hexpm", "6cbe761d6a0ca5a31a0931bf4c63204bceb64538e664a8ecf784a9a6f3b875f1"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, + "mochiweb": {:hex, :mochiweb, "2.18.0", "eb55f1db3e6e960fac4e6db4e2db9ec3602cc9f30b86cd1481d56545c3145d2e", [:rebar3], [], "hexpm"}, "mock": {:hex, :mock, "0.3.4", "c5862eb3b8c64237f45f586cf00c9d892ba07bb48305a43319d428ce3c2897dd", [:mix], [{:meck, "~> 0.8.13", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "e6d886252f1a41f4ba06ecf2b4c8d38760b34b1c08a11c28f7397b2e03995964"}, "mogrify": {:hex, :mogrify, "0.6.1", "de1b527514f2d95a7bbe9642eb556061afb337e220cf97adbf3a4e6438ed70af", [:mix], [], "hexpm", "3bc928d817974fa10cc11e6c89b9a9361e37e96dbbf3d868c41094ec05745dcd"}, "mox": {:hex, :mox, "0.5.1", "f86bb36026aac1e6f924a4b6d024b05e9adbed5c63e8daa069bd66fb3292165b", [:mix], [], "hexpm", "052346cf322311c49a0f22789f3698eea030eec09b8c47367f0686ef2634ae14"}, + "myhtmlex": {:git, "https://git.pleroma.social/pleroma/myhtmlex.git", "ad0097e2f61d4953bfef20fb6abddf23b87111e6", [ref: "ad0097e2f61d4953bfef20fb6abddf23b87111e6", submodules: true]}, "nimble_parsec": {:hex, :nimble_parsec, "0.5.3", "def21c10a9ed70ce22754fdeea0810dafd53c2db3219a0cd54cf5526377af1c6", [:mix], [], "hexpm", "589b5af56f4afca65217a1f3eb3fee7e79b09c40c742fddc1c312b3ac0b3399f"}, + "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, "oban": {:hex, :oban, "1.2.0", "7cca94d341be43d220571e28f69131c4afc21095b25257397f50973d3fc59b07", [:mix], [{:ecto_sql, "~> 3.1", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ba5f8b3f7d76967b3e23cf8014f6a13e4ccb33431e4808f036709a7f822362ee"}, "open_api_spex": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/open_api_spex.git", "b862ebd78de0df95875cf46feb6e9607130dc2a8", [ref: "b862ebd78de0df95875cf46feb6e9607130dc2a8"]}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "0.12.4", "8dd29ed783f2e12195d7e0a4640effc0a7c37e6537da491f1db01839eee6d053", [:mix], [], "hexpm", "595d09db74cb093b1903381c9de423276a931a2480a46a1a5dc7f932a2a6375b"}, - "phoenix": {:hex, :phoenix, "1.4.12", "b86fa85a2ba336f5de068549de5ccceec356fd413264a9637e7733395d6cc4ea", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "58331ade6d77e1312a3d976f0fa41803b8f004b2b5f489193425bc46aea3ed30"}, + "phoenix": {:hex, :phoenix, "1.4.13", "67271ad69b51f3719354604f4a3f968f83aa61c19199343656c9caee057ff3b8", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ab765a0feddb81fc62e2116c827b5f068df85159c162bee760745276ad7ddc1b"}, "phoenix_ecto": {:hex, :phoenix_ecto, "4.1.0", "a044d0756d0464c5a541b4a0bf4bcaf89bffcaf92468862408290682c73ae50d", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "c5e666a341ff104d0399d8f0e4ff094559b2fde13a5985d4cb5023b2c2ac558b"}, "phoenix_html": {:hex, :phoenix_html, "2.14.0", "d8c6bc28acc8e65f8ea0080ee05aa13d912c8758699283b8d3427b655aabe284", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "b0bb30eda478a06dbfbe96728061a93833db3861a49ccb516f839ecb08493fbb"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "1.1.2", "496c303bdf1b2e98a9d26e89af5bba3ab487ba3a3735f74bf1f4064d2a845a3e", [:mix], [], "hexpm", "1f13f9f0f3e769a667a6b6828d29dec37497a082d195cc52dbef401a9b69bf38"}, "phoenix_swoosh": {:hex, :phoenix_swoosh, "0.2.0", "a7e0b32077cd6d2323ae15198839b05d9caddfa20663fd85787479e81f89520e", [:mix], [{:phoenix, "~> 1.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.2", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 0.1", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "ebf1bfa7b3c1c850c04929afe02e2e0d7ab135e0706332c865de03e761676b1f"}, - "plug": {:hex, :plug, "1.8.3", "12d5f9796dc72e8ac9614e94bda5e51c4c028d0d428e9297650d09e15a684478", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "164baaeb382d19beee0ec484492aa82a9c8685770aee33b24ec727a0971b34d0"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.1.1", "a196e4f428d7f5d6dba5ded314cc55cd0fbddf1110af620f75c0190e77844b33", [:mix], [{:cowboy, "~> 2.5", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "15a3c34ffaccef8a0b575b8d39ab1b9044586d7dab917292cdc44cf2737df7f2"}, - "plug_crypto": {:hex, :plug_crypto, "1.0.0", "18e49317d3fa343f24620ed22795ec29d4a5e602d52d1513ccea0b07d8ea7d4d", [:mix], [], "hexpm", "73c1682f0e414cfb5d9b95c8e8cd6ffcfdae699e3b05e1db744e58b7be857759"}, + "plug": {:hex, :plug, "1.9.0", "8d7c4e26962283ff9f8f3347bd73838e2413fbc38b7bb5467d5924f68f3a5a4a", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "9902eda2c52ada2a096434682e99a2493f5d06a94d6ac6bcfff9805f952350f1"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.1.2", "8b0addb5908c5238fac38e442e81b6fcd32788eaa03246b4d55d147c47c5805e", [:mix], [{:cowboy, "~> 2.5", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "7d722581ce865a237e14da6d946f92704101740a256bd13ec91e63c0b122fc70"}, + "plug_crypto": {:hex, :plug_crypto, "1.1.2", "bdd187572cc26dbd95b87136290425f2b580a116d3fb1f564216918c9730d227", [:mix], [], "hexpm", "6b8b608f895b6ffcfad49c37c7883e8df98ae19c6a28113b02aa1e9c5b22d6b5"}, "plug_static_index_html": {:hex, :plug_static_index_html, "1.0.0", "840123d4d3975585133485ea86af73cb2600afd7f2a976f9f5fd8b3808e636a0", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "79fd4fcf34d110605c26560cbae8f23c603ec4158c08298bd4360fdea90bb5cf"}, "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, "postgrex": {:hex, :postgrex, "0.15.3", "5806baa8a19a68c4d07c7a624ccdb9b57e89cbc573f1b98099e3741214746ae4", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "4737ce62a31747b4c63c12b20c62307e51bb4fcd730ca0c32c280991e0606c90"}, "pot": {:hex, :pot, "0.10.2", "9895c83bcff8cd22d9f5bc79dfc88a188176b261b618ad70d93faf5c5ca36e67", [:rebar3], [], "hexpm", "ac589a8e296b7802681e93cd0a436faec117ea63e9916709c628df31e17e91e2"}, - "prometheus": {:hex, :prometheus, "4.4.1", "1e96073b3ed7788053768fea779cbc896ddc3bdd9ba60687f2ad50b252ac87d6", [:mix, :rebar3], [], "hexpm", "d39f2ce1f3f29f3bf04f915aa3cf9c7cd4d2cee2f975e05f526e06cae9b7c902"}, + "prometheus": {:hex, :prometheus, "4.5.0", "8f4a2246fe0beb50af0f77c5e0a5bb78fe575c34a9655d7f8bc743aad1c6bf76", [:mix, :rebar3], [], "hexpm", "679b5215480fff612b8351f45c839d995a07ce403e42ff02f1c6b20960d41a4e"}, "prometheus_ecto": {:hex, :prometheus_ecto, "1.4.3", "3dd4da1812b8e0dbee81ea58bb3b62ed7588f2eae0c9e97e434c46807ff82311", [:mix], [{:ecto, "~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "8d66289f77f913b37eda81fd287340c17e61a447549deb28efc254532b2bed82"}, "prometheus_ex": {:hex, :prometheus_ex, "3.0.5", "fa58cfd983487fc5ead331e9a3e0aa622c67232b3ec71710ced122c4c453a02f", [:mix], [{:prometheus, "~> 4.0", [hex: :prometheus, repo: "hexpm", optional: false]}], "hexpm", "9fd13404a48437e044b288b41f76e64acd9735fb8b0e3809f494811dfa66d0fb"}, "prometheus_phoenix": {:hex, :prometheus_phoenix, "1.3.0", "c4b527e0b3a9ef1af26bdcfbfad3998f37795b9185d475ca610fe4388fdd3bb5", [:mix], [{:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.3 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "c4d1404ac4e9d3d963da601db2a7d8ea31194f0017057fabf0cfb9bf5a6c8c75"}, From 788b7e7bbd2732e2af72adad1a660cf363486c6b Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 7 May 2020 14:52:37 +0200 Subject: [PATCH 493/581] Merge fixes. --- lib/pleroma/user.ex | 13 +-- .../web/activity_pub/object_validator.ex | 6 +- .../object_validators/common_validations.ex | 2 +- .../activity_pub/object_validator_test.exs | 1 - test/web/activity_pub/transmogrifier_test.exs | 107 ------------------ 5 files changed, 10 insertions(+), 119 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 921bdd93a..2a6a23fec 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1557,16 +1557,13 @@ def delete_user_activities(%User{ap_id: ap_id} = user) do defp delete_activity(%{data: %{"type" => "Create", "object" => object}}, user) do {:ok, delete_data, _} = Builder.delete(user, object) - Pipeline.common_pipeline(delete_data, local: true) + Pipeline.common_pipeline(delete_data, local: user.local) end - defp delete_activity(%{data: %{"type" => type}} = activity) when type in ["Like", "Announce"] do - actor = - activity.actor - |> get_cached_by_ap_id() - - {:ok, undo, _} = Builder.undo(actor, activity) - Pipeline.common_pipeline(undo, local: true) + defp delete_activity(%{data: %{"type" => type}} = activity, user) + when type in ["Like", "Announce"] do + {:ok, undo, _} = Builder.undo(user, activity) + Pipeline.common_pipeline(undo, local: user.local) end defp delete_activity(_activity, _user), do: "Doing nothing" diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index 8e043287d..1f0431b36 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -21,8 +21,10 @@ def validate(object, meta) def validate(%{"type" => "Undo"} = object, meta) do with {:ok, object} <- - object |> UndoValidator.cast_and_validate() |> Ecto.Changeset.apply_action(:insert) do - object = stringify_keys(object |> Map.from_struct()) + object + |> UndoValidator.cast_and_validate() + |> Ecto.Changeset.apply_action(:insert) do + object = stringify_keys(object) {:ok, object, meta} end end diff --git a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex index 2ada9f09e..aeef31945 100644 --- a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex +++ b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex @@ -48,7 +48,7 @@ def validate_object_presence(cng, options \\ []) do cng |> validate_change(field_name, fn field_name, object_id -> - object = Object.get_cached_by_ap_id(object_id) || Activity.get_by_ap_id(object) + object = Object.get_cached_by_ap_id(object_id) || Activity.get_by_ap_id(object_id) cond do !object -> diff --git a/test/web/activity_pub/object_validator_test.exs b/test/web/activity_pub/object_validator_test.exs index 4d90a0cf3..174be5ec6 100644 --- a/test/web/activity_pub/object_validator_test.exs +++ b/test/web/activity_pub/object_validator_test.exs @@ -107,7 +107,6 @@ test "it's invalid if the object doesn't exist", %{valid_post_delete: valid_post {:error, cng} = ObjectValidator.validate(missing_object, []) assert {:object, {"can't find object", []}} in cng.errors - assert length(cng.errors) == 1 end test "it's invalid if the actor of the object and the actor of delete are from different domains", diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index ae5d3bf92..4fd6c8b00 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -685,113 +685,6 @@ test "it works for incoming update activities which lock the account" do assert user.locked == true end - test "it works for incoming deletes" do - activity = insert(:note_activity) - deleting_user = insert(:user) - - data = - File.read!("test/fixtures/mastodon-delete.json") - |> Poison.decode!() - - object = - data["object"] - |> Map.put("id", activity.data["object"]) - - data = - data - |> Map.put("object", object) - |> Map.put("actor", deleting_user.ap_id) - - {:ok, %Activity{actor: actor, local: false, data: %{"id" => id}}} = - Transmogrifier.handle_incoming(data) - - assert id == data["id"] - refute Activity.get_by_id(activity.id) - assert actor == deleting_user.ap_id - end - - test "it fails for incoming deletes with spoofed origin" do - activity = insert(:note_activity) - - data = - File.read!("test/fixtures/mastodon-delete.json") - |> Poison.decode!() - - object = - data["object"] - |> Map.put("id", activity.data["object"]) - - data = - data - |> Map.put("object", object) - - assert capture_log(fn -> - :error = Transmogrifier.handle_incoming(data) - end) =~ - "[error] Could not decode user at fetch http://mastodon.example.org/users/gargron, {:error, :nxdomain}" - - assert Activity.get_by_id(activity.id) - end - - @tag capture_log: true - test "it works for incoming user deletes" do - %{ap_id: ap_id} = - insert(:user, ap_id: "http://mastodon.example.org/users/admin", local: false) - - data = - File.read!("test/fixtures/mastodon-delete-user.json") - |> Poison.decode!() - - {:ok, _} = Transmogrifier.handle_incoming(data) - ObanHelpers.perform_all() - - refute User.get_cached_by_ap_id(ap_id) - end - - test "it fails for incoming user deletes with spoofed origin" do - %{ap_id: ap_id} = insert(:user) - - data = - File.read!("test/fixtures/mastodon-delete-user.json") - |> Poison.decode!() - |> Map.put("actor", ap_id) - - assert capture_log(fn -> - assert :error == Transmogrifier.handle_incoming(data) - end) =~ "Object containment failed" - - assert User.get_cached_by_ap_id(ap_id) - end - - test "it works for incoming unannounces with an existing notice" do - user = insert(:user) - {:ok, activity} = CommonAPI.post(user, %{"status" => "hey"}) - - announce_data = - File.read!("test/fixtures/mastodon-announce.json") - |> Poison.decode!() - |> Map.put("object", activity.data["object"]) - - {:ok, %Activity{data: announce_data, local: false}} = - Transmogrifier.handle_incoming(announce_data) - - data = - File.read!("test/fixtures/mastodon-undo-announce.json") - |> Poison.decode!() - |> Map.put("object", announce_data) - |> Map.put("actor", announce_data["actor"]) - - {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - - assert data["type"] == "Undo" - assert object_data = data["object"] - assert object_data["type"] == "Announce" - assert object_data["object"] == activity.data["object"] - - assert object_data["id"] == - "http://mastodon.example.org/users/admin/statuses/99542391527669785/activity" - end - test "it works for incomming unfollows with an existing follow" do user = insert(:user) From d11eea62b139ce16d7dffbd574947b2550df238f Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 7 May 2020 15:09:37 +0200 Subject: [PATCH 494/581] Credo fixes --- lib/pleroma/web/activity_pub/object_validator.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index 1f0431b36..4782cd8f3 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -13,8 +13,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do alias Pleroma.User alias Pleroma.Web.ActivityPub.ObjectValidators.DeleteValidator alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator - alias Pleroma.Web.ActivityPub.ObjectValidators.UndoValidator alias Pleroma.Web.ActivityPub.ObjectValidators.Types + alias Pleroma.Web.ActivityPub.ObjectValidators.UndoValidator @spec validate(map(), keyword()) :: {:ok, map(), keyword()} | {:error, any()} def validate(object, meta) From eb1f2fcbc62735a6e1a24c7c5591061d9391e808 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 7 May 2020 16:13:24 +0300 Subject: [PATCH 495/581] Streamer: Fix wrong argument order when rendering activities to authenticated user Closes #1747 --- lib/pleroma/web/mastodon_api/websocket_handler.ex | 2 +- lib/pleroma/web/views/streamer_view.ex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/websocket_handler.ex b/lib/pleroma/web/mastodon_api/websocket_handler.ex index 6ef3fe2dd..e2ffd02d0 100644 --- a/lib/pleroma/web/mastodon_api/websocket_handler.ex +++ b/lib/pleroma/web/mastodon_api/websocket_handler.ex @@ -78,7 +78,7 @@ def websocket_info({:render_with_user, view, template, item}, state) do user = %User{} = User.get_cached_by_ap_id(state.user.ap_id) unless Streamer.filtered_by_user?(user, item) do - websocket_info({:text, view.render(template, user, item)}, %{state | user: user}) + websocket_info({:text, view.render(template, item, user)}, %{state | user: user}) else {:ok, state} end diff --git a/lib/pleroma/web/views/streamer_view.ex b/lib/pleroma/web/views/streamer_view.ex index 443868878..237b29ded 100644 --- a/lib/pleroma/web/views/streamer_view.ex +++ b/lib/pleroma/web/views/streamer_view.ex @@ -25,7 +25,7 @@ def render("update.json", %Activity{} = activity, %User{} = user) do |> Jason.encode!() end - def render("notification.json", %User{} = user, %Notification{} = notify) do + def render("notification.json", %Notification{} = notify, %User{} = user) do %{ event: "notification", payload: From ea01e647df4466975b9382f123f0a2aa35ebfe76 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 7 May 2020 09:13:43 -0500 Subject: [PATCH 496/581] Test Direct, Public, and Favorite notifications with privacy option --- test/web/push/impl_test.exs | 60 +++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/test/web/push/impl_test.exs b/test/web/push/impl_test.exs index 3de911810..b855d72ba 100644 --- a/test/web/push/impl_test.exs +++ b/test/web/push/impl_test.exs @@ -193,7 +193,7 @@ test "renders title for create activity with direct visibility" do end describe "build_content/3" do - test "returns info content for direct message with enabled privacy option" do + test "hides details for notifications when privacy option enabled" do user = insert(:user, nickname: "Bob") user2 = insert(:user, nickname: "Rob", notification_settings: %{privacy_option: true}) @@ -211,9 +211,35 @@ test "returns info content for direct message with enabled privacy option" do assert Impl.build_content(notif, actor, object) == %{ body: "New Direct Message" } + + {:ok, activity} = + CommonAPI.post(user, %{ + "visibility" => "public", + "status" => " "public", + "status" => + "Lorem ipsum dolor sit amet, consectetur :firefox: adipiscing elit. Fusce sagittis finibus turpis." + }) + + notif = insert(:notification, user: user2, activity: activity) + + actor = User.get_cached_by_ap_id(notif.activity.data["actor"]) + object = Object.normalize(activity) + + assert Impl.build_content(notif, actor, object) == %{ + body: + "@Bob: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce sagittis fini...", + title: "New Mention" + } + + {:ok, activity} = CommonAPI.favorite(user, activity.id) + + notif = insert(:notification, user: user2, activity: activity) + + actor = User.get_cached_by_ap_id(notif.activity.data["actor"]) + object = Object.normalize(activity) + + assert Impl.build_content(notif, actor, object) == %{ + body: "@Bob has favorited your post", + title: "New Favorite" + } end end end From a081135365c2b9d7bc81ee84baffbc3c2be68e8c Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Fri, 8 May 2020 12:06:24 +0300 Subject: [PATCH 497/581] revert mix.lock --- mix.lock | 54 ++++++++++++++++++++++++++---------------------------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/mix.lock b/mix.lock index 11234ae14..c400202b7 100644 --- a/mix.lock +++ b/mix.lock @@ -2,8 +2,8 @@ "accept": {:hex, :accept, "0.3.5", "b33b127abca7cc948bbe6caa4c263369abf1347cfa9d8e699c6d214660f10cd1", [:rebar3], [], "hexpm", "11b18c220bcc2eab63b5470c038ef10eb6783bcb1fcdb11aa4137defa5ac1bb8"}, "auto_linker": {:git, "https://git.pleroma.social/pleroma/auto_linker.git", "95e8188490e97505c56636c1379ffdf036c1fdde", [ref: "95e8188490e97505c56636c1379ffdf036c1fdde"]}, "base62": {:hex, :base62, "1.2.1", "4866763e08555a7b3917064e9eef9194c41667276c51b59de2bc42c6ea65f806", [:mix], [{:custom_base, "~> 0.2.1", [hex: :custom_base, repo: "hexpm", optional: false]}], "hexpm", "3b29948de2013d3f93aa898c884a9dff847e7aec75d9d6d8c1dc4c61c2716c42"}, - "base64url": {:hex, :base64url, "0.0.1", "36a90125f5948e3afd7be97662a1504b934dd5dac78451ca6e9abf85a10286be", [:rebar], [], "hexpm", "fab09b20e3f5db886725544cbcf875b8e73ec93363954eb8a1a9ed834aa8c1f9"}, - "bbcode": {:hex, :bbcode, "0.1.1", "0023e2c7814119b2e620b7add67182e3f6019f92bfec9a22da7e99821aceba70", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "5a981b98ac7d366a9b6bf40eac389aaf4d6e623c631e6b6f8a6b571efaafd338"}, + "base64url": {:hex, :base64url, "0.0.1", "36a90125f5948e3afd7be97662a1504b934dd5dac78451ca6e9abf85a10286be", [:rebar], [], "hexpm"}, + "bbcode": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/bbcode.git", "f2d267675e9a7e1ad1ea9beb4cc23382762b66c2", [ref: "v0.2.0"]}, "bbcode_pleroma": {:hex, :bbcode_pleroma, "0.2.0", "d36f5bca6e2f62261c45be30fa9b92725c0655ad45c99025cb1c3e28e25803ef", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "19851074419a5fedb4ef49e1f01b30df504bb5dbb6d6adfc135238063bebd1c3"}, "benchee": {:hex, :benchee, "1.0.1", "66b211f9bfd84bd97e6d1beaddf8fc2312aaabe192f776e8931cb0c16f53a521", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}], "hexpm", "3ad58ae787e9c7c94dd7ceda3b587ec2c64604563e049b2a0e8baafae832addb"}, "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"}, @@ -19,47 +19,47 @@ "cowboy": {:hex, :cowboy, "2.7.0", "91ed100138a764355f43316b1d23d7ff6bdb0de4ea618cb5d8677c93a7a2f115", [:rebar3], [{:cowlib, "~> 2.8.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.7.1", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "04fd8c6a39edc6aaa9c26123009200fc61f92a3a94f3178c527b70b767c6e605"}, "cowlib": {:hex, :cowlib, "2.8.0", "fd0ff1787db84ac415b8211573e9a30a3ebe71b5cbff7f720089972b2319c8a4", [:rebar3], [], "hexpm", "79f954a7021b302186a950a32869dbc185523d99d3e44ce430cd1f3289f41ed4"}, "credo": {:hex, :credo, "1.1.5", "caec7a3cadd2e58609d7ee25b3931b129e739e070539ad1a0cd7efeeb47014f4", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "d0bbd3222607ccaaac5c0340f7f525c627ae4d7aee6c8c8c108922620c5b6446"}, - "crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "48e513299cd28b12c77266c0ed5b1c844368e5c1823724994ae84834f43d6bbe"}, + "crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"}, "crypt": {:git, "https://github.com/msantos/crypt", "1f2b58927ab57e72910191a7ebaeff984382a1d3", [ref: "1f2b58927ab57e72910191a7ebaeff984382a1d3"]}, "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, "db_connection": {:hex, :db_connection, "2.2.1", "caee17725495f5129cb7faebde001dc4406796f12a62b8949f4ac69315080566", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm", "2b02ece62d9f983fcd40954e443b7d9e6589664380e5546b2b9b523cd0fb59e1"}, "decimal": {:hex, :decimal, "1.8.1", "a4ef3f5f3428bdbc0d35374029ffcf4ede8533536fa79896dd450168d9acdf3c", [:mix], [], "hexpm", "3cb154b00225ac687f6cbd4acc4b7960027c757a5152b369923ead9ddbca7aec"}, "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, - "earmark": {:hex, :earmark, "1.4.2", "3aa0bd23bc4c61cf2f1e5d752d1bb470560a6f8539974f767a38923bb20e1d7f", [:mix], [], "hexpm", "5e8806285d8a3a8999bd38e4a73c58d28534c856bc38c44818e5ba85bbda16fb"}, - "ecto": {:hex, :ecto, "3.4.2", "6890af71025769bd27ef62b1ed1925cfe23f7f0460bcb3041da4b705215ff23e", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3959b8a83e086202a4bd86b4b5e6e71f9f1840813de14a57d502d3fc2ef7132"}, + "earmark": {:hex, :earmark, "1.4.3", "364ca2e9710f6bff494117dbbd53880d84bebb692dafc3a78eb50aa3183f2bfd", [:mix], [], "hexpm", "8cf8a291ebf1c7b9539e3cddb19e9cef066c2441b1640f13c34c1d3cfc825fec"}, + "ecto": {:hex, :ecto, "3.4.0", "a7a83ab8359bf816ce729e5e65981ce25b9fc5adfc89c2ea3980f4fed0bfd7c1", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "5eed18252f5b5bbadec56a24112b531343507dbe046273133176b12190ce19cc"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, "ecto_sql": {:hex, :ecto_sql, "3.3.4", "aa18af12eb875fbcda2f75e608b3bd534ebf020fc4f6448e4672fcdcbb081244", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4 or ~> 3.3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5eccbdbf92e3c6f213007a82d5dbba4cd9bb659d1a21331f89f408e4c0efd7a8"}, - "esshd": {:hex, :esshd, "0.1.0", "6f93a2062adb43637edad0ea7357db2702a4b80dd9683482fe00f5134e97f4c1", [:mix], [], "hexpm", "98d0f3c6f4b8a0333170df770c6fe772b3d04564fb514c1a09504cf5ab2f48a5"}, + "esshd": {:hex, :esshd, "0.1.1", "d4dd4c46698093a40a56afecce8a46e246eb35463c457c246dacba2e056f31b5", [:mix], [], "hexpm", "d73e341e3009d390aa36387dc8862860bf9f874c94d9fd92ade2926376f49981"}, "eternal": {:hex, :eternal, "1.2.1", "d5b6b2499ba876c57be2581b5b999ee9bdf861c647401066d3eeed111d096bc4", [:mix], [], "hexpm", "b14f1dc204321429479c569cfbe8fb287541184ed040956c8862cb7a677b8406"}, "ex2ms": {:hex, :ex2ms, "1.5.0", "19e27f9212be9a96093fed8cdfbef0a2b56c21237196d26760f11dfcfae58e97", [:mix], [], "hexpm"}, "ex_aws": {:hex, :ex_aws, "2.1.1", "1e4de2106cfbf4e837de41be41cd15813eabc722315e388f0d6bb3732cec47cd", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "1.6.3 or 1.6.5 or 1.7.1 or 1.8.6 or ~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8", [hex: :jsx, repo: "hexpm", optional: true]}, {:poison, ">= 1.2.0", [hex: :poison, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "06b6fde12b33bb6d65d5d3493e903ba5a56d57a72350c15285a4298338089e10"}, "ex_aws_s3": {:hex, :ex_aws_s3, "2.0.2", "c0258bbdfea55de4f98f0b2f0ca61fe402cc696f573815134beb1866e778f47b", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "0569f5b211b1a3b12b705fe2a9d0e237eb1360b9d76298028df2346cad13097a"}, "ex_const": {:hex, :ex_const, "0.2.4", "d06e540c9d834865b012a17407761455efa71d0ce91e5831e86881b9c9d82448", [:mix], [], "hexpm", "96fd346610cc992b8f896ed26a98be82ac4efb065a0578f334a32d60a3ba9767"}, - "ex_doc": {:hex, :ex_doc, "0.21.2", "caca5bc28ed7b3bdc0b662f8afe2bee1eedb5c3cf7b322feeeb7c6ebbde089d6", [:mix], [{:earmark, "~> 1.3.3 or ~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "f1155337ae17ff7a1255217b4c1ceefcd1860b7ceb1a1874031e7a861b052e39"}, + "ex_doc": {:hex, :ex_doc, "0.21.3", "857ec876b35a587c5d9148a2512e952e24c24345552259464b98bfbb883c7b42", [:mix], [{:earmark, "~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "0db1ee8d1547ab4877c5b5dffc6604ef9454e189928d5ba8967d4a58a801f161"}, "ex_machina": {:hex, :ex_machina, "2.3.0", "92a5ad0a8b10ea6314b876a99c8c9e3f25f4dde71a2a835845b136b9adaf199a", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "b84f6af156264530b312a8ab98ac6088f6b77ae5fe2058305c81434aa01fbaf9"}, - "ex_syslogger": {:hex, :ex_syslogger, "1.5.0", "bc936ee3fd13d9e592cb4c3a1e8a55fccd33b05e3aa7b185f211f3ed263ff8f0", [:mix], [{:poison, ">= 1.5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:syslog, "~> 1.0.5", [hex: :syslog, repo: "hexpm", optional: false]}], "hexpm", "f3b4b184dcdd5f356b7c26c6cd72ab0918ba9dfb4061ccfaf519e562942af87b"}, + "ex_syslogger": {:hex, :ex_syslogger, "1.5.2", "72b6aa2d47a236e999171f2e1ec18698740f40af0bd02c8c650bf5f1fd1bac79", [:mix], [{:poison, ">= 1.5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:syslog, "~> 1.1.0", [hex: :syslog, repo: "hexpm", optional: false]}], "hexpm", "ab9fab4136dbc62651ec6f16fa4842f10cf02ab4433fa3d0976c01be99398399"}, "excoveralls": {:hex, :excoveralls, "0.12.2", "a513defac45c59e310ac42fcf2b8ae96f1f85746410f30b1ff2b710a4b6cd44b", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "151c476331d49b45601ffc45f43cb3a8beb396b02a34e3777fea0ad34ae57d89"}, - "fast_html": {:hex, :fast_html, "1.0.1", "5bc7df4dc4607ec2c314c16414e4111d79a209956c4f5df96602d194c61197f9", [:make, :mix], [], "hexpm", "18e627dd62051a375ef94b197f41e8027c3e8eef0180ab8f81e0543b3dc6900a"}, - "fast_sanitize": {:hex, :fast_sanitize, "0.1.6", "60a5ae96879956dea409a91a77f5dd2994c24cc10f80eefd8f9892ee4c0c7b25", [:mix], [{:fast_html, "~> 1.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "b73f50f0cb522dd0331ea8e8c90b408de42c50f37641219d6364f0e3e7efd22c"}, + "fast_html": {:hex, :fast_html, "1.0.3", "2cc0d4b68496266a1530e0c852cafeaede0bd10cfdee26fda50dc696c203162f", [:make, :mix], [], "hexpm", "ab3d782b639d3c4655fbaec0f9d032c91f8cab8dd791ac7469c2381bc7c32f85"}, + "fast_sanitize": {:hex, :fast_sanitize, "0.1.7", "2a7cd8734c88a2de6de55022104f8a3b87f1fdbe8bbf131d9049764b53d50d0d", [:mix], [{:fast_html, "~> 1.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f39fe8ea08fbac17487c30bf09b7d9f3e12472e51fb07a88ffeb8fd17da8ab67"}, "flake_id": {:hex, :flake_id, "0.1.0", "7716b086d2e405d09b647121a166498a0d93d1a623bead243e1f74216079ccb3", [:mix], [{:base62, "~> 1.2", [hex: :base62, repo: "hexpm", optional: false]}, {:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "31fc8090fde1acd267c07c36ea7365b8604055f897d3a53dd967658c691bd827"}, - "floki": {:hex, :floki, "0.26.0", "4df88977e2e357c6720e1b650f613444bfb48c5acfc6a0c646ab007d08ad13bf", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "e7b66ce7feef5518a9cd9fc7b52dd62a64028bd9cb6d6ad282a0f0fc90a4ae52"}, + "floki": {:hex, :floki, "0.25.0", "b1c9ddf5f32a3a90b43b76f3386ca054325dc2478af020e87b5111c19f2284ac", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "631f4e627c46d5ecd347df5a2accdaf0621c77c3693c5b75a8ad58e84c61f242"}, "gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm", "29bd14a88030980849c7ed2447b8db6d6c9278a28b11a44cafe41b791205440f"}, - "gen_stage": {:hex, :gen_stage, "0.14.3", "d0c66f1c87faa301c1a85a809a3ee9097a4264b2edf7644bf5c123237ef732bf", [:mix], [], "hexpm", "8453e2289d94c3199396eb517d65d6715ef26bcae0ee83eb5ff7a84445458d76"}, - "gen_state_machine": {:hex, :gen_state_machine, "2.0.5", "9ac15ec6e66acac994cc442dcc2c6f9796cf380ec4b08267223014be1c728a95", [:mix], [], "hexpm", "5cacd405e72b2609a7e1f891bddb80c53d0b3b7b0036d1648e7382ca108c41c8"}, - "gettext": {:hex, :gettext, "0.17.1", "8baab33482df4907b3eae22f719da492cee3981a26e649b9c2be1c0192616962", [:mix], [], "hexpm", "f7d97341e536f95b96eef2988d6d4230f7262cf239cda0e2e63123ee0b717222"}, + "gen_stage": {:hex, :gen_stage, "0.14.3", "d0c66f1c87faa301c1a85a809a3ee9097a4264b2edf7644bf5c123237ef732bf", [:mix], [], "hexpm"}, + "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"}, "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.1", "2ce5bf6e535cd0ab02e905ba8c276580bab80052c5c549f53ddea52d72e81f33", [:mix], [{:hackney, "~> 1.15 and >= 1.15.2", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "89149056039084024a284cd703b2d1900d584958dba432132cb21ef35aed7487"}, + "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"}, "inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm", "64a2d30189704ae41ca7dbdd587f5291db5d1dda1414e0774c29ffc81088c1bc"}, "jason": {:hex, :jason, "1.2.0", "10043418c42d2493d0ee212d3fddd25d7ffe484380afad769a0a38795938e448", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "116747dbe057794c3a3e4e143b7c8390b29f634e16c78a7f59ba75bfa6852e7f"}, - "joken": {:hex, :joken, "2.1.0", "bf21a73105d82649f617c5e59a7f8919aa47013d2519ebcc39d998d8d12adda9", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "eb02df7d5526df13063397e051b926b7006d5986d66f399eefc474f560cdad6a"}, - "jose": {:hex, :jose, "1.9.0", "4167c5f6d06ffaebffd15cdb8da61a108445ef5e85ab8f5a7ad926fdf3ada154", [:mix, :rebar3], [{:base64url, "~> 0.0.1", [hex: :base64url, repo: "hexpm", optional: false]}], "hexpm", "6429c4fee52b2dda7861ee19a4f09c8c1ffa213bee3a1ec187828fde95d447ed"}, + "joken": {:hex, :joken, "2.2.0", "2daa1b12be05184aff7b5ace1d43ca1f81345962285fff3f88db74927c954d3a", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "b4f92e30388206f869dd25d1af628a1d99d7586e5cf0672f64d4df84c4d2f5e9"}, + "jose": {:hex, :jose, "1.10.1", "16d8e460dae7203c6d1efa3f277e25b5af8b659febfc2f2eb4bacf87f128b80a", [:mix, :rebar3], [], "hexpm", "3c7ddc8a9394b92891db7c2771da94bf819834a1a4c92e30857b7d582e2f8257"}, "jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"}, - "libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm", "1feaf05ee886815ad047cad7ede17d6910710986148ae09cf73eee2989717b81"}, + "libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm"}, "makeup": {:hex, :makeup, "1.0.0", "671df94cf5a594b739ce03b0d0316aa64312cee2574b6a44becb83cd90fb05dc", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "a10c6eb62cca416019663129699769f0c2ccf39428b3bb3c0cb38c718a0c186d"}, "makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "d4b316c7222a85bbaa2fd7c6e90e37e953257ad196dc229505137c5e505e9eff"}, "meck": {:hex, :meck, "0.8.13", "ffedb39f99b0b99703b8601c6f17c7f76313ee12de6b646e671e3188401f7866", [:rebar3], [], "hexpm", "d34f013c156db51ad57cc556891b9720e6a1c1df5fe2e15af999c84d6cebeb1a"}, @@ -71,41 +71,39 @@ "mogrify": {:hex, :mogrify, "0.6.1", "de1b527514f2d95a7bbe9642eb556061afb337e220cf97adbf3a4e6438ed70af", [:mix], [], "hexpm", "3bc928d817974fa10cc11e6c89b9a9361e37e96dbbf3d868c41094ec05745dcd"}, "mox": {:hex, :mox, "0.5.1", "f86bb36026aac1e6f924a4b6d024b05e9adbed5c63e8daa069bd66fb3292165b", [:mix], [], "hexpm", "052346cf322311c49a0f22789f3698eea030eec09b8c47367f0686ef2634ae14"}, "myhtmlex": {:git, "https://git.pleroma.social/pleroma/myhtmlex.git", "ad0097e2f61d4953bfef20fb6abddf23b87111e6", [ref: "ad0097e2f61d4953bfef20fb6abddf23b87111e6", submodules: true]}, - "nimble_parsec": {:hex, :nimble_parsec, "0.5.1", "c90796ecee0289dbb5ad16d3ad06f957b0cd1199769641c961cfe0b97db190e0", [:mix], [], "hexpm", "00e3ebdc821fb3a36957320d49e8f4bfa310d73ea31c90e5f925dc75e030da8f"}, + "nimble_parsec": {:hex, :nimble_parsec, "0.5.3", "def21c10a9ed70ce22754fdeea0810dafd53c2db3219a0cd54cf5526377af1c6", [:mix], [], "hexpm", "589b5af56f4afca65217a1f3eb3fee7e79b09c40c742fddc1c312b3ac0b3399f"}, "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, "oban": {:hex, :oban, "1.2.0", "7cca94d341be43d220571e28f69131c4afc21095b25257397f50973d3fc59b07", [:mix], [{:ecto_sql, "~> 3.1", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ba5f8b3f7d76967b3e23cf8014f6a13e4ccb33431e4808f036709a7f822362ee"}, "open_api_spex": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/open_api_spex.git", "b862ebd78de0df95875cf46feb6e9607130dc2a8", [ref: "b862ebd78de0df95875cf46feb6e9607130dc2a8"]}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "0.12.4", "8dd29ed783f2e12195d7e0a4640effc0a7c37e6537da491f1db01839eee6d053", [:mix], [], "hexpm", "595d09db74cb093b1903381c9de423276a931a2480a46a1a5dc7f932a2a6375b"}, - "phoenix": {:hex, :phoenix, "1.4.10", "619e4a545505f562cd294df52294372d012823f4fd9d34a6657a8b242898c255", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "256ad7a140efadc3f0290470369da5bd3de985ec7c706eba07c2641b228974be"}, - "phoenix_ecto": {:hex, :phoenix_ecto, "4.0.0", "c43117a136e7399ea04ecaac73f8f23ee0ffe3e07acfcb8062fe5f4c9f0f6531", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "fe15d9fee5b82f5e64800502011ffe530650d42e1710ae9b14bc4c9be38bf303"}, - "phoenix_html": {:hex, :phoenix_html, "2.13.3", "850e292ff6e204257f5f9c4c54a8cb1f6fbc16ed53d360c2b780a3d0ba333867", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "8b01b3d6d39731ab18aa548d928b5796166d2500755f553725cfe967bafba7d9"}, + "phoenix": {:hex, :phoenix, "1.4.13", "67271ad69b51f3719354604f4a3f968f83aa61c19199343656c9caee057ff3b8", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ab765a0feddb81fc62e2116c827b5f068df85159c162bee760745276ad7ddc1b"}, + "phoenix_ecto": {:hex, :phoenix_ecto, "4.1.0", "a044d0756d0464c5a541b4a0bf4bcaf89bffcaf92468862408290682c73ae50d", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "c5e666a341ff104d0399d8f0e4ff094559b2fde13a5985d4cb5023b2c2ac558b"}, + "phoenix_html": {:hex, :phoenix_html, "2.14.0", "d8c6bc28acc8e65f8ea0080ee05aa13d912c8758699283b8d3427b655aabe284", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "b0bb30eda478a06dbfbe96728061a93833db3861a49ccb516f839ecb08493fbb"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "1.1.2", "496c303bdf1b2e98a9d26e89af5bba3ab487ba3a3735f74bf1f4064d2a845a3e", [:mix], [], "hexpm", "1f13f9f0f3e769a667a6b6828d29dec37497a082d195cc52dbef401a9b69bf38"}, "phoenix_swoosh": {:hex, :phoenix_swoosh, "0.2.0", "a7e0b32077cd6d2323ae15198839b05d9caddfa20663fd85787479e81f89520e", [:mix], [{:phoenix, "~> 1.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.2", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 0.1", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "ebf1bfa7b3c1c850c04929afe02e2e0d7ab135e0706332c865de03e761676b1f"}, "plug": {:hex, :plug, "1.9.0", "8d7c4e26962283ff9f8f3347bd73838e2413fbc38b7bb5467d5924f68f3a5a4a", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "9902eda2c52ada2a096434682e99a2493f5d06a94d6ac6bcfff9805f952350f1"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.1.0", "b75768153c3a8a9e8039d4b25bb9b14efbc58e9c4a6e6a270abff1cd30cbe320", [:mix], [{:cowboy, "~> 2.5", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "6cd8ddd1bd1fbfa54d3fc61d4719c2057dae67615395d58d40437a919a46f132"}, - "plug_crypto": {:hex, :plug_crypto, "1.0.0", "18e49317d3fa343f24620ed22795ec29d4a5e602d52d1513ccea0b07d8ea7d4d", [:mix], [], "hexpm", "73c1682f0e414cfb5d9b95c8e8cd6ffcfdae699e3b05e1db744e58b7be857759"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.1.2", "8b0addb5908c5238fac38e442e81b6fcd32788eaa03246b4d55d147c47c5805e", [:mix], [{:cowboy, "~> 2.5", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "7d722581ce865a237e14da6d946f92704101740a256bd13ec91e63c0b122fc70"}, + "plug_crypto": {:hex, :plug_crypto, "1.1.2", "bdd187572cc26dbd95b87136290425f2b580a116d3fb1f564216918c9730d227", [:mix], [], "hexpm", "6b8b608f895b6ffcfad49c37c7883e8df98ae19c6a28113b02aa1e9c5b22d6b5"}, "plug_static_index_html": {:hex, :plug_static_index_html, "1.0.0", "840123d4d3975585133485ea86af73cb2600afd7f2a976f9f5fd8b3808e636a0", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "79fd4fcf34d110605c26560cbae8f23c603ec4158c08298bd4360fdea90bb5cf"}, "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, "postgrex": {:hex, :postgrex, "0.15.3", "5806baa8a19a68c4d07c7a624ccdb9b57e89cbc573f1b98099e3741214746ae4", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "4737ce62a31747b4c63c12b20c62307e51bb4fcd730ca0c32c280991e0606c90"}, "pot": {:hex, :pot, "0.10.2", "9895c83bcff8cd22d9f5bc79dfc88a188176b261b618ad70d93faf5c5ca36e67", [:rebar3], [], "hexpm", "ac589a8e296b7802681e93cd0a436faec117ea63e9916709c628df31e17e91e2"}, - "prometheus": {:hex, :prometheus, "4.4.1", "1e96073b3ed7788053768fea779cbc896ddc3bdd9ba60687f2ad50b252ac87d6", [:mix, :rebar3], [], "hexpm", "d39f2ce1f3f29f3bf04f915aa3cf9c7cd4d2cee2f975e05f526e06cae9b7c902"}, + "prometheus": {:hex, :prometheus, "4.5.0", "8f4a2246fe0beb50af0f77c5e0a5bb78fe575c34a9655d7f8bc743aad1c6bf76", [:mix, :rebar3], [], "hexpm", "679b5215480fff612b8351f45c839d995a07ce403e42ff02f1c6b20960d41a4e"}, "prometheus_ecto": {:hex, :prometheus_ecto, "1.4.3", "3dd4da1812b8e0dbee81ea58bb3b62ed7588f2eae0c9e97e434c46807ff82311", [:mix], [{:ecto, "~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "8d66289f77f913b37eda81fd287340c17e61a447549deb28efc254532b2bed82"}, "prometheus_ex": {:hex, :prometheus_ex, "3.0.5", "fa58cfd983487fc5ead331e9a3e0aa622c67232b3ec71710ced122c4c453a02f", [:mix], [{:prometheus, "~> 4.0", [hex: :prometheus, repo: "hexpm", optional: false]}], "hexpm", "9fd13404a48437e044b288b41f76e64acd9735fb8b0e3809f494811dfa66d0fb"}, "prometheus_phoenix": {:hex, :prometheus_phoenix, "1.3.0", "c4b527e0b3a9ef1af26bdcfbfad3998f37795b9185d475ca610fe4388fdd3bb5", [:mix], [{:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.3 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "c4d1404ac4e9d3d963da601db2a7d8ea31194f0017057fabf0cfb9bf5a6c8c75"}, "prometheus_plugs": {:hex, :prometheus_plugs, "1.1.5", "25933d48f8af3a5941dd7b621c889749894d8a1082a6ff7c67cc99dec26377c5", [:mix], [{:accept, "~> 0.1", [hex: :accept, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}, {:prometheus_process_collector, "~> 1.1", [hex: :prometheus_process_collector, repo: "hexpm", optional: true]}], "hexpm", "0273a6483ccb936d79ca19b0ab629aef0dba958697c94782bb728b920dfc6a79"}, "quack": {:hex, :quack, "0.1.1", "cca7b4da1a233757fdb44b3334fce80c94785b3ad5a602053b7a002b5a8967bf", [:mix], [{:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: false]}, {:tesla, "~> 1.2.0", [hex: :tesla, repo: "hexpm", optional: false]}], "hexpm", "d736bfa7444112eb840027bb887832a0e403a4a3437f48028c3b29a2dbbd2543"}, - "quantum": {:hex, :quantum, "2.3.4", "72a0e8855e2adc101459eac8454787cb74ab4169de6ca50f670e72142d4960e9", [:mix], [{:calendar, "~> 0.17", [hex: :calendar, repo: "hexpm", optional: true]}, {:crontab, "~> 1.1", [hex: :crontab, repo: "hexpm", optional: false]}, {:gen_stage, "~> 0.12", [hex: :gen_stage, repo: "hexpm", optional: false]}, {:swarm, "~> 3.3", [hex: :swarm, repo: "hexpm", optional: false]}, {:timex, "~> 3.1", [hex: :timex, repo: "hexpm", optional: true]}], "hexpm", "6de553ba9ac0668d3728b699d5065543f3e40c854154017461ee8c09038752da"}, "ranch": {:hex, :ranch, "1.7.1", "6b1fab51b49196860b733a49c07604465a47bdb78aa10c1c16a3d199f7f8c881", [:rebar3], [], "hexpm", "451d8527787df716d99dc36162fca05934915db0b6141bbdac2ea8d3c7afc7d7"}, "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"}, - "swarm": {:hex, :swarm, "3.4.0", "64f8b30055d74640d2186c66354b33b999438692a91be275bb89cdc7e401f448", [:mix], [{:gen_state_machine, "~> 2.0", [hex: :gen_state_machine, repo: "hexpm", optional: false]}, {:libring, "~> 1.0", [hex: :libring, repo: "hexpm", optional: false]}], "hexpm", "94884f84783fc1ba027aba8fe8a7dae4aad78c98e9f9c76667ec3471585c08c6"}, "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.0.6", "995970c9aa7feb380ac493302138e308d6e04fd57da95b439a6df5bb3bf75076", [:rebar3], [], "hexpm", "769ddfabd0d2a16f3f9c17eb7509951e0ca4f68363fb26f2ee51a8ec4a49881a"}, + "syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"}, "telemetry": {:hex, :telemetry, "0.4.1", "ae2718484892448a24470e6aa341bc847c3277bfb8d4e9289f7474d752c09c7f", [:rebar3], [], "hexpm", "4738382e36a0a9a2b6e25d67c960e40e1a2c95560b9f936d8e29de8cd858480f"}, "tesla": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/tesla.git", "61b7503cef33f00834f78ddfafe0d5d9dec2270b", [ref: "61b7503cef33f00834f78ddfafe0d5d9dec2270b"]}, "timex": {:hex, :timex, "3.6.1", "efdf56d0e67a6b956cc57774353b0329c8ab7726766a11547e529357ffdc1d56", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5 or ~> 1.0.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "f354efb2400dd7a80fd9eb6c8419068c4f632da4ac47f3d8822d6e33f08bc852"}, From 6acbe45eb211286e747143f6bd6edaa5c2126657 Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 8 May 2020 11:30:31 +0200 Subject: [PATCH 498/581] Builder: Extract common features of likes and reactions. --- lib/pleroma/web/activity_pub/builder.ex | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/builder.ex b/lib/pleroma/web/activity_pub/builder.ex index f6544d3f5..922a444a9 100644 --- a/lib/pleroma/web/activity_pub/builder.ex +++ b/lib/pleroma/web/activity_pub/builder.ex @@ -12,7 +12,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do @spec emoji_react(User.t(), Object.t(), String.t()) :: {:ok, map(), keyword()} def emoji_react(actor, object, emoji) do - with {:ok, data, meta} <- like(actor, object) do + with {:ok, data, meta} <- object_action(actor, object) do data = data |> Map.put("content", emoji) @@ -64,6 +64,17 @@ def delete(actor, object_id) do @spec like(User.t(), Object.t()) :: {:ok, map(), keyword()} def like(actor, object) do + with {:ok, data, meta} <- object_action(actor, object) do + data = + data + |> Map.put("type", "Like") + + {:ok, data, meta} + end + end + + @spec object_action(User.t(), Object.t()) :: {:ok, map(), keyword()} + defp object_action(actor, object) do object_actor = User.get_cached_by_ap_id(object.data["actor"]) # Address the actor of the object, and our actor's follower collection if the post is public. @@ -85,7 +96,6 @@ def like(actor, object) do %{ "id" => Utils.generate_activity_id(), "actor" => actor.ap_id, - "type" => "Like", "object" => object.data["id"], "to" => to, "cc" => cc, From 4d71c4b8051d5cf54f37903091aed7f4d5c1ddd9 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Fri, 8 May 2020 12:33:01 +0300 Subject: [PATCH 499/581] fixed 'source' object in verify_credentials --- lib/pleroma/web/mastodon_api/views/account_view.ex | 5 ++++- test/web/mastodon_api/views/account_view_test.exs | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 420bd586f..b7cdb52b1 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -261,7 +261,10 @@ defp do_render("show.json", %{user: user} = opts) do defp prepare_user_bio(%User{bio: ""}), do: "" defp prepare_user_bio(%User{bio: bio}) when is_binary(bio) do - bio |> String.replace(~r(
    ), "\n") |> Pleroma.HTML.strip_tags() + bio + |> String.replace(~r(
    ), "\n") + |> Pleroma.HTML.strip_tags() + |> HtmlEntities.decode() end defp prepare_user_bio(_), do: "" diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index 5fb162141..375f0103a 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -31,7 +31,7 @@ test "Represent a user account" do nickname: "shp@shitposter.club", name: ":karjalanpiirakka: shp", bio: - "valid html. a
    b
    c
    d
    f", + "valid html. a
    b
    c
    d
    f '&<>\"", inserted_at: ~N[2017-08-15 15:47:06.597036], emoji: %{"karjalanpiirakka" => "/file.png"} }) @@ -46,7 +46,7 @@ test "Represent a user account" do followers_count: 3, following_count: 0, statuses_count: 5, - note: "valid html. a
    b
    c
    d
    f", + note: "valid html. a
    b
    c
    d
    f '&<>"", url: user.ap_id, avatar: "http://localhost:4001/images/avi.png", avatar_static: "http://localhost:4001/images/avi.png", @@ -63,7 +63,7 @@ test "Represent a user account" do fields: [], bot: false, source: %{ - note: "valid html. a\nb\nc\nd\nf", + note: "valid html. a\nb\nc\nd\nf '&<>\"", sensitive: false, pleroma: %{ actor_type: "Person", From f1274c3326207ecba5086ee28f721b43a29eb14c Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 8 May 2020 11:41:13 +0200 Subject: [PATCH 500/581] Transmogrifier tests: Remove double tests. --- test/web/activity_pub/transmogrifier_test.exs | 81 ------------------- 1 file changed, 81 deletions(-) diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 14c0f57ae..d783f57d2 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -325,87 +325,6 @@ test "it cleans up incoming notices which are not really DMs" do assert object_data["cc"] == to end - test "it works for incoming emoji reaction undos" do - user = insert(:user) - - {:ok, activity} = CommonAPI.post(user, %{"status" => "hello"}) - {:ok, reaction_activity} = CommonAPI.react_with_emoji(activity.id, user, "👌") - - data = - File.read!("test/fixtures/mastodon-undo-like.json") - |> Poison.decode!() - |> Map.put("object", reaction_activity.data["id"]) - |> Map.put("actor", user.ap_id) - - {:ok, activity} = Transmogrifier.handle_incoming(data) - - assert activity.actor == user.ap_id - assert activity.data["id"] == data["id"] - assert activity.data["type"] == "Undo" - end - - test "it returns an error for incoming unlikes wihout a like activity" do - user = insert(:user) - {:ok, activity} = CommonAPI.post(user, %{"status" => "leave a like pls"}) - - data = - File.read!("test/fixtures/mastodon-undo-like.json") - |> Poison.decode!() - |> Map.put("object", activity.data["object"]) - - assert Transmogrifier.handle_incoming(data) == :error - end - - test "it works for incoming unlikes with an existing like activity" do - user = insert(:user) - {:ok, activity} = CommonAPI.post(user, %{"status" => "leave a like pls"}) - - like_data = - File.read!("test/fixtures/mastodon-like.json") - |> Poison.decode!() - |> Map.put("object", activity.data["object"]) - - {:ok, %Activity{data: like_data, local: false}} = Transmogrifier.handle_incoming(like_data) - - data = - File.read!("test/fixtures/mastodon-undo-like.json") - |> Poison.decode!() - |> Map.put("object", like_data) - |> Map.put("actor", like_data["actor"]) - - {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - - assert data["actor"] == "http://mastodon.example.org/users/admin" - assert data["type"] == "Undo" - assert data["id"] == "http://mastodon.example.org/users/admin#likes/2/undo" - assert data["object"] == "http://mastodon.example.org/users/admin#likes/2" - end - - test "it works for incoming unlikes with an existing like activity and a compact object" do - user = insert(:user) - {:ok, activity} = CommonAPI.post(user, %{"status" => "leave a like pls"}) - - like_data = - File.read!("test/fixtures/mastodon-like.json") - |> Poison.decode!() - |> Map.put("object", activity.data["object"]) - - {:ok, %Activity{data: like_data, local: false}} = Transmogrifier.handle_incoming(like_data) - - data = - File.read!("test/fixtures/mastodon-undo-like.json") - |> Poison.decode!() - |> Map.put("object", like_data["id"]) - |> Map.put("actor", like_data["actor"]) - - {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - - assert data["actor"] == "http://mastodon.example.org/users/admin" - assert data["type"] == "Undo" - assert data["id"] == "http://mastodon.example.org/users/admin#likes/2/undo" - assert data["object"] == "http://mastodon.example.org/users/admin#likes/2" - end - test "it works for incoming emoji reactions" do user = insert(:user) {:ok, activity} = CommonAPI.post(user, %{"status" => "hello"}) From 7e9aaa0d0221311d831161d977c8b0e2a55b3439 Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 8 May 2020 11:43:07 +0200 Subject: [PATCH 501/581] Transmogrifier tests: Remove more double tests. --- test/web/activity_pub/transmogrifier_test.exs | 37 ------------------- 1 file changed, 37 deletions(-) diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index d783f57d2..2914c90ea 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -325,43 +325,6 @@ test "it cleans up incoming notices which are not really DMs" do assert object_data["cc"] == to end - test "it works for incoming emoji reactions" do - user = insert(:user) - {:ok, activity} = CommonAPI.post(user, %{"status" => "hello"}) - - data = - File.read!("test/fixtures/emoji-reaction.json") - |> Poison.decode!() - |> Map.put("object", activity.data["object"]) - - {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - - assert data["actor"] == "http://mastodon.example.org/users/admin" - assert data["type"] == "EmojiReact" - assert data["id"] == "http://mastodon.example.org/users/admin#reactions/2" - assert data["object"] == activity.data["object"] - assert data["content"] == "👌" - end - - test "it reject invalid emoji reactions" do - user = insert(:user) - {:ok, activity} = CommonAPI.post(user, %{"status" => "hello"}) - - data = - File.read!("test/fixtures/emoji-reaction-too-long.json") - |> Poison.decode!() - |> Map.put("object", activity.data["object"]) - - assert {:error, _} = Transmogrifier.handle_incoming(data) - - data = - File.read!("test/fixtures/emoji-reaction-no-emoji.json") - |> Poison.decode!() - |> Map.put("object", activity.data["object"]) - - assert {:error, _} = Transmogrifier.handle_incoming(data) - end - test "it works for incoming announces" do data = File.read!("test/fixtures/mastodon-announce.json") |> Poison.decode!() From 0e1bda55e856cd97b82ed393b719653872c93e34 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Fri, 8 May 2020 21:33:56 +0300 Subject: [PATCH 502/581] PleromaFE bundle dropping requirement for embedded account relationships in statuses / notifications. https://git.pleroma.social/pleroma/pleroma-fe/-/commit/7a0e554daf843fe9e98053e79ec0114c380ededb --- priv/static/index.html | 2 +- .../static/font/fontello.1588419330867.woff | Bin 13836 -> 0 bytes .../static/font/fontello.1588419330867.woff2 | Bin 11712 -> 0 bytes ...9330867.eot => fontello.1588947937982.eot} | Bin 22752 -> 22976 bytes ...9330867.svg => fontello.1588947937982.svg} | 2 ++ ...9330867.ttf => fontello.1588947937982.ttf} | Bin 22584 -> 22808 bytes .../static/font/fontello.1588947937982.woff | Bin 0 -> 13988 bytes .../static/font/fontello.1588947937982.woff2 | Bin 0 -> 11816 bytes ...9330867.css => fontello.1588947937982.css} | 14 ++++++++------ priv/static/static/fontello.json | 6 ++++++ ...9fca99e19.js => 2.18e4adec273c4ce867a8.js} | Bin 2190 -> 2190 bytes ...9.js.map => 2.18e4adec273c4ce867a8.js.map} | Bin 7763 -> 7763 bytes .../static/js/app.996428ccaaaa7f28cb8d.js | Bin 0 -> 1079195 bytes .../static/js/app.996428ccaaaa7f28cb8d.js.map | Bin 0 -> 1643581 bytes .../static/js/app.fa89b90e606f4facd209.js | Bin 1075836 -> 0 bytes .../static/js/app.fa89b90e606f4facd209.js.map | Bin 1635217 -> 0 bytes ...js => vendors~app.561a1c605d1dfb0e6f74.js} | Bin 411233 -> 411235 bytes .../vendors~app.561a1c605d1dfb0e6f74.js.map | Bin 0 -> 1737881 bytes .../vendors~app.8aa781e6dd81307f544b.js.map | Bin 1737947 -> 0 bytes priv/static/sw-pleroma.js | Bin 31752 -> 31752 bytes 20 files changed, 17 insertions(+), 7 deletions(-) delete mode 100644 priv/static/static/font/fontello.1588419330867.woff delete mode 100644 priv/static/static/font/fontello.1588419330867.woff2 rename priv/static/static/font/{fontello.1588419330867.eot => fontello.1588947937982.eot} (90%) rename priv/static/static/font/{fontello.1588419330867.svg => fontello.1588947937982.svg} (98%) rename priv/static/static/font/{fontello.1588419330867.ttf => fontello.1588947937982.ttf} (90%) create mode 100644 priv/static/static/font/fontello.1588947937982.woff create mode 100644 priv/static/static/font/fontello.1588947937982.woff2 rename priv/static/static/{fontello.1588419330867.css => fontello.1588947937982.css} (88%) rename priv/static/static/js/{2.1c407059cd79fca99e19.js => 2.18e4adec273c4ce867a8.js} (80%) rename priv/static/static/js/{2.1c407059cd79fca99e19.js.map => 2.18e4adec273c4ce867a8.js.map} (98%) create mode 100644 priv/static/static/js/app.996428ccaaaa7f28cb8d.js create mode 100644 priv/static/static/js/app.996428ccaaaa7f28cb8d.js.map delete mode 100644 priv/static/static/js/app.fa89b90e606f4facd209.js delete mode 100644 priv/static/static/js/app.fa89b90e606f4facd209.js.map rename priv/static/static/js/{vendors~app.8aa781e6dd81307f544b.js => vendors~app.561a1c605d1dfb0e6f74.js} (87%) create mode 100644 priv/static/static/js/vendors~app.561a1c605d1dfb0e6f74.js.map delete mode 100644 priv/static/static/js/vendors~app.8aa781e6dd81307f544b.js.map diff --git a/priv/static/index.html b/priv/static/index.html index 4fac5c100..b37cbaa67 100644 --- a/priv/static/index.html +++ b/priv/static/index.html @@ -1 +1 @@ -Pleroma
    \ No newline at end of file +Pleroma
    \ No newline at end of file diff --git a/priv/static/static/font/fontello.1588419330867.woff b/priv/static/static/font/fontello.1588419330867.woff deleted file mode 100644 index 2bf4cbc16bfaf89c8e663c3ecdfdea1728fe781d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13836 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 adN{Y<|J>^Vp>Qot4UGdp^rZL;0Q?_|L~vFB diff --git a/priv/static/static/font/fontello.1588419330867.woff2 b/priv/static/static/font/fontello.1588419330867.woff2 deleted file mode 100644 index a31bf3f29df33e61b0472ae87e44d05efe32d05a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11712 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 delta 477 zcmX@Gneo9!Mz#kL3=9?#6WPpIisc>LCOUN2S1~X!1~4!%geB)D7WCBLUkBu`U|?YR zm0VV$!1n*&7X}6&1)#h_T0wel*Te~tK)wS519w4sVsQabTmZQbuxrzYg%`$)j>?c`(Y*!y3UnL{Aq~dH}*#DbA0gypYa`KZC z_e?!y%)sCl0_2zECRP+M_VF$Q@=pNy3VDgSsb}Yk0}XV0!N9iqgb62WF&A&1&&u~GcbHIfnWv;28PWE?48z|mpZ>^l5um8FOKK8`O3h}4D=8K z!>!9)TVeF%4Q}R)mXlw&-JN{Wy@Inx-W=?B%gufs+{{3UDDR@p=e##FZf^Ir + + diff --git a/priv/static/static/font/fontello.1588419330867.ttf b/priv/static/static/font/fontello.1588947937982.ttf similarity index 90% rename from priv/static/static/font/fontello.1588419330867.ttf rename to priv/static/static/font/fontello.1588947937982.ttf index 7dc4f108b7be4e5c132da254f00e70a6463d8102..443801c4fc0b48e45cf0ae16472319b6b95eb52a 100644 GIT binary patch delta 720 zcmZuuT}V@57=FI*?3|gKHPm#%m}~ybv_L8p#R4;6Gz@kY!ah4eSWnkypksCldSHVNb>+^oqwFlZDyx-3rC2FdepdFh zM$N2^Xk*%h7S@V+&X4PhT4~2st>!iEa4?!x{#F{b%KoqN%RD1`X#+{sIAUT=V-VPJ9W=b^6Y0kA3caPeE?f|r(1nT7vGyh|3Z3KT1rcIOV&F)DGoAutQ3k7}&D>~eFo-&Iu`a#X+{c_P&62&_YEhbf0vMFe{TBc89*DS>NjB&w{diC(edgVZb*f%TvCA0+a7Wc|71JMlQ3)Z^z>S zy)oQRq(5xb2W6hfB^c4eWJ2v7-{F=wZvTr*M^62QK`7UrzqM_N{=@v>q=yaVmC4U+ sE+6z=Yp`2?wBMz)_JKp{2cJQpcq@?RY*?KRs!S3yawr{9t5aU%9~x-Cj{pDw delta 495 zcmbQSiE+mU#tF*xRSXP_0SpWbVad6P1wHlm*8%w}7#LW7C6|>bu>Jq{g@M6G0VuDK zR*;_CHE}{Dknh02z+I4@SX=-U7Xb1lfHX&XPGy?Ok43Hw3~Wmn80_*gQWH}ojUs_^ zt|CBrvkagB`$-lc+tmliSINjNsW{sg_WveO0A$dUoc!d(JyTB^GcdS?0Qn`ki4_Hm zeZ0$n{1ZUFLSABS>e;#CKm*-gFfcHkEyyn}S$Y1K76XIl4j@0SpeVKAsiXED28Qqr z6MsZA&Ym2?nC|YyzzEdL!05uj3})#7X)d60F9sGykh|3w6c|_-*j}i-P=8_c!sJ8$ zhm#*3e0cid^M`*Qg+5ArwEO7z(dA>xWELjP$@)xMs*FG#c~Dru0D?uBaB>qLF^Yeh*z_bBG0)fS59+qw<@uv(7AAy*`oPpt!2?R4(FfeT1!PaTL`LEM^ zCK)#e`Qmtfo39Mq%s?+QFxxcR=1B@Y0vQ;sA6 diff --git a/priv/static/static/font/fontello.1588947937982.woff b/priv/static/static/font/fontello.1588947937982.woff new file mode 100644 index 0000000000000000000000000000000000000000..e96fea75766b8087fd2e064329a1e21500d2e522 GIT binary patch literal 13988 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 X|4Xk6sLZuE1q3D#oGa-A5YYbt*N?ji literal 0 HcmV?d00001 diff --git a/priv/static/static/font/fontello.1588947937982.woff2 b/priv/static/static/font/fontello.1588947937982.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..50318a6703694b2888e6be5f00b39e91435e3105 GIT binary patch literal 11816 zcmV+@F4xg_Pew8T0RR9104^v14*&oF09hCS04>k}0RR9100000000000000000000 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 Wp?_x}4h)=p4)p!;5VXmQ10De4ugL!Z literal 0 HcmV?d00001 diff --git a/priv/static/static/fontello.1588419330867.css b/priv/static/static/fontello.1588947937982.css similarity index 88% rename from priv/static/static/fontello.1588419330867.css rename to priv/static/static/fontello.1588947937982.css index 198eff184..d3d77a8b5 100644 --- a/priv/static/static/fontello.1588419330867.css +++ b/priv/static/static/fontello.1588947937982.css @@ -1,11 +1,11 @@ @font-face { font-family: "Icons"; - src: url("./font/fontello.1588419330867.eot"); - src: url("./font/fontello.1588419330867.eot") format("embedded-opentype"), - url("./font/fontello.1588419330867.woff2") format("woff2"), - url("./font/fontello.1588419330867.woff") format("woff"), - url("./font/fontello.1588419330867.ttf") format("truetype"), - url("./font/fontello.1588419330867.svg") format("svg"); + src: url("./font/fontello.1588947937982.eot"); + src: url("./font/fontello.1588947937982.eot") format("embedded-opentype"), + url("./font/fontello.1588947937982.woff2") format("woff2"), + url("./font/fontello.1588947937982.woff") format("woff"), + url("./font/fontello.1588947937982.ttf") format("truetype"), + url("./font/fontello.1588947937982.svg") format("svg"); font-weight: normal; font-style: normal; } @@ -137,6 +137,8 @@ .icon-arrow-curved::before { content: "\e822"; } .icon-link::before { content: "\e823"; } +.icon-share::before { content: "\f1e0"; } + .icon-user::before { content: "\e824"; } .icon-ok::before { content: "\e827"; } diff --git a/priv/static/static/fontello.json b/priv/static/static/fontello.json index 5963b68b4..7f0e7cdd5 100755 --- a/priv/static/static/fontello.json +++ b/priv/static/static/fontello.json @@ -346,6 +346,12 @@ "code": 59427, "src": "fontawesome" }, + { + "uid": "4aad6bb50b02c18508aae9cbe14e784e", + "css": "share", + "code": 61920, + "src": "fontawesome" + }, { "uid": "8b80d36d4ef43889db10bc1f0dc9a862", "css": "user", diff --git a/priv/static/static/js/2.1c407059cd79fca99e19.js b/priv/static/static/js/2.18e4adec273c4ce867a8.js similarity index 80% rename from priv/static/static/js/2.1c407059cd79fca99e19.js rename to priv/static/static/js/2.18e4adec273c4ce867a8.js index 14018d92ab84186c7fe80b765c529fcb50ebce38..d191aa852fe1c32896605718d9019b33b3b3ba46 100644 GIT binary patch delta 73 zcmeAZ>=T?|&1gQ+Mw-!LVuUxN@x&!cK-O_NMx%|-T$vaxH|sDjU}7}ie3o@NlaxiO cNn%QBvXQxQvPp8Pg_(Jxg=T?|&1gE&Mw-!VVuUxN$;2f}K-O_NM&pgoT$vcnH|sDjU}7}ge3o@NlT@;a cfw_UHWpawSWmV!Z diff --git a/priv/static/static/js/2.1c407059cd79fca99e19.js.map b/priv/static/static/js/2.18e4adec273c4ce867a8.js.map similarity index 98% rename from priv/static/static/js/2.1c407059cd79fca99e19.js.map rename to priv/static/static/js/2.18e4adec273c4ce867a8.js.map index cfee79ea8cd351017ddd2c6f8fbf6f4899e66322..a7f98bfef87cae26f6c1ef7e006013a98feabe3a 100644 GIT binary patch delta 32 ncmca?bJ=FYT~1+(RFlM%)MO)b<7AWMR0}inM2pQIIFm&H%w!9K delta 32 ncmca?bJ=FYT~6U-69aPtQ_JKObIY{kL`%z5L(9z{IFm&H#8C?= diff --git a/priv/static/static/js/app.996428ccaaaa7f28cb8d.js b/priv/static/static/js/app.996428ccaaaa7f28cb8d.js new file mode 100644 index 0000000000000000000000000000000000000000..00f3a28e008b2676b0ef891c50f761c696c9c4c1 GIT binary patch literal 1079195 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%0Ai*ep*<(VCmH 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≈Y8YK&DqLS;^Y~N@?Z=#3w;` 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

    1cL4 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%0D-7uz&H?e;pkx=i40T9VSF4=X*Y8307XUu!T^o~ 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� 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

    |l&P6_bPr2kA)b`&ue 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%0DZii|>Qt>>@Whiqa)^;O=^ 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 adeO6AmhXr=_a5B&@$OxG9j!A7rvC$uV~I8Z diff --git a/priv/static/adminfe/static/js/chunk-88c9.e3583744.js.map b/priv/static/adminfe/static/js/chunk-88c9.e3583744.js.map deleted file mode 100644 index 20e503d0c633b4e7eda94948db6a3f78d548fc31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92387 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 diff --git a/priv/static/adminfe/static/js/chunk-970d.2457e066.js b/priv/static/adminfe/static/js/chunk-970d.2457e066.js new file mode 100644 index 0000000000000000000000000000000000000000..0f99d835e6fabf9afe148ffddff88e4a9552a5d7 GIT binary patch literal 26608 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 literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-970d.2457e066.js.map b/priv/static/adminfe/static/js/chunk-970d.2457e066.js.map new file mode 100644 index 0000000000000000000000000000000000000000..6896407b0d80225bf8a6f452960bbc462aa7981b GIT binary patch literal 100000 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 B<^%u$ literal 0 HcmV?d00001 diff --git a/priv/static/adminfe/static/js/chunk-cf57.3e45f57f.js b/priv/static/adminfe/static/js/chunk-cf57.3e45f57f.js deleted file mode 100644 index 2b4fd918f45d545b6ff3ab7f795810df2c9a5ae2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29728 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