From 9eea80002673eb1359a2d4369c65a89c42c2f707 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 28 May 2020 10:16:09 -0500 Subject: [PATCH 001/236] Refactor notification settings --- CHANGELOG.md | 3 ++ docs/API/pleroma_api.md | 7 ++--- lib/pleroma/notification.ex | 29 ++++++------------- lib/pleroma/user/notification_setting.ex | 14 ++++----- lib/pleroma/web/api_spec/schemas/account.ex | 14 ++++----- test/notification_test.exs | 17 +++-------- .../mastodon_api/views/account_view_test.exs | 7 ++--- test/web/twitter_api/util_controller_test.exs | 16 +++++----- 8 files changed, 41 insertions(+), 66 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dabc2a85a..fba236608 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
API Changes - **Breaking:** Emoji API: changed methods and renamed routes. +- **Breaking:** Notification Settings API for suppressing notification + now supports the following controls: `from_followers`, `from_following`, + and `from_strangers`.
### Removed diff --git a/docs/API/pleroma_api.md b/docs/API/pleroma_api.md index 70d4755b7..2cb0792db 100644 --- a/docs/API/pleroma_api.md +++ b/docs/API/pleroma_api.md @@ -287,10 +287,9 @@ See [Admin-API](admin_api.md) * Method `PUT` * Authentication: required * Params: - * `followers`: BOOLEAN field, receives notifications from followers - * `follows`: BOOLEAN field, receives notifications from people the user follows - * `remote`: BOOLEAN field, receives notifications from people on remote instances - * `local`: BOOLEAN field, receives notifications from people on the local instance + * `from_followers`: BOOLEAN field, receives notifications from followers + * `from_following`: BOOLEAN field, receives notifications from people the user follows + * `from_strangers`: BOOLEAN field, receives notifications from people without an established relationship * `privacy_option`: BOOLEAN field. When set to true, it removes the contents of a message from the push notification. * Response: JSON. Returns `{"status": "success"}` if the update was successful, otherwise returns `{"error": "error_msg"}` diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 7eca55ac9..ca556f0bb 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -459,10 +459,9 @@ def exclude_thread_muter_ap_ids(ap_ids, %Activity{} = activity) do def skip?(%Activity{} = activity, %User{} = user) do [ :self, - :followers, - :follows, - :non_followers, - :non_follows, + :from_followers, + :from_following, + :from_strangers, :recently_followed ] |> Enum.find(&skip?(&1, activity, user)) @@ -476,9 +475,9 @@ def skip?(:self, %Activity{} = activity, %User{} = user) do end def skip?( - :followers, + :from_followers, %Activity{} = activity, - %User{notification_settings: %{followers: false}} = user + %User{notification_settings: %{from_followers: false}} = user ) do actor = activity.data["actor"] follower = User.get_cached_by_ap_id(actor) @@ -486,9 +485,9 @@ def skip?( end def skip?( - :non_followers, + :from_strangers, %Activity{} = activity, - %User{notification_settings: %{non_followers: false}} = user + %User{notification_settings: %{from_strangers: false}} = user ) do actor = activity.data["actor"] follower = User.get_cached_by_ap_id(actor) @@ -496,25 +495,15 @@ def skip?( end def skip?( - :follows, + :from_following, %Activity{} = activity, - %User{notification_settings: %{follows: false}} = user + %User{notification_settings: %{from_following: false}} = user ) do actor = activity.data["actor"] followed = User.get_cached_by_ap_id(actor) User.following?(user, followed) end - def skip?( - :non_follows, - %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 - # 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"] diff --git a/lib/pleroma/user/notification_setting.ex b/lib/pleroma/user/notification_setting.ex index 4bd55e139..e47ac4cab 100644 --- a/lib/pleroma/user/notification_setting.ex +++ b/lib/pleroma/user/notification_setting.ex @@ -10,20 +10,18 @@ defmodule Pleroma.User.NotificationSetting do @primary_key false embedded_schema do - field(:followers, :boolean, default: true) - field(:follows, :boolean, default: true) - field(:non_follows, :boolean, default: true) - field(:non_followers, :boolean, default: true) + field(:from_followers, :boolean, default: true) + field(:from_following, :boolean, default: true) + field(:from_strangers, :boolean, default: true) field(:privacy_option, :boolean, default: false) end def changeset(schema, params) do schema |> cast(prepare_attrs(params), [ - :followers, - :follows, - :non_follows, - :non_followers, + :from_followers, + :from_following, + :from_strangers, :privacy_option ]) end diff --git a/lib/pleroma/web/api_spec/schemas/account.ex b/lib/pleroma/web/api_spec/schemas/account.ex index d54e2158d..ed90ef3db 100644 --- a/lib/pleroma/web/api_spec/schemas/account.ex +++ b/lib/pleroma/web/api_spec/schemas/account.ex @@ -57,10 +57,9 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do notification_settings: %Schema{ type: :object, properties: %{ - followers: %Schema{type: :boolean}, - follows: %Schema{type: :boolean}, - non_followers: %Schema{type: :boolean}, - non_follows: %Schema{type: :boolean}, + from_followers: %Schema{type: :boolean}, + from_following: %Schema{type: :boolean}, + from_strangers: %Schema{type: :boolean}, privacy_option: %Schema{type: :boolean} } }, @@ -123,10 +122,9 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do "unread_conversation_count" => 0, "tags" => [], "notification_settings" => %{ - "followers" => true, - "follows" => true, - "non_followers" => true, - "non_follows" => true, + "from_followers" => true, + "from_following" => true, + "from_strangers" => true, "privacy_option" => false }, "relationship" => %{ diff --git a/test/notification_test.exs b/test/notification_test.exs index 37c255fee..fd59aceb5 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -237,19 +237,19 @@ test "it disables notifications from followers" do follower = insert(:user) followed = - insert(:user, notification_settings: %Pleroma.User.NotificationSetting{followers: false}) + insert(:user, notification_settings: %Pleroma.User.NotificationSetting{from_followers: false}) User.follow(follower, followed) {:ok, activity} = CommonAPI.post(follower, %{status: "hey @#{followed.nickname}"}) refute Notification.create_notification(activity, followed) end - test "it disables notifications from non-followers" do + test "it disables notifications from strangers" do follower = insert(:user) followed = insert(:user, - notification_settings: %Pleroma.User.NotificationSetting{non_followers: false} + notification_settings: %Pleroma.User.NotificationSetting{from_strangers: false} ) {:ok, activity} = CommonAPI.post(follower, %{status: "hey @#{followed.nickname}"}) @@ -258,7 +258,7 @@ test "it disables notifications from non-followers" do test "it disables notifications from people the user follows" do follower = - insert(:user, notification_settings: %Pleroma.User.NotificationSetting{follows: false}) + insert(:user, notification_settings: %Pleroma.User.NotificationSetting{from_following: false}) followed = insert(:user) User.follow(follower, followed) @@ -267,15 +267,6 @@ test "it disables notifications from people the user follows" do refute Notification.create_notification(activity, follower) end - test "it disables notifications from people the user does not follow" do - follower = - insert(:user, notification_settings: %Pleroma.User.NotificationSetting{non_follows: false}) - - followed = insert(:user) - {:ok, activity} = CommonAPI.post(followed, %{status: "hey @#{follower.nickname}"}) - refute Notification.create_notification(activity, follower) - end - test "it doesn't create a notification for user if he is the activity author" do activity = insert(:note_activity) author = User.get_cached_by_ap_id(activity.data["actor"]) diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index 487ec26c2..2e01689ff 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -94,10 +94,9 @@ test "Represent the user account for the account owner" do user = insert(:user) notification_settings = %{ - followers: true, - follows: true, - non_followers: true, - non_follows: true, + from_followers: true, + from_following: true, + from_strangers: true, privacy_option: false } diff --git a/test/web/twitter_api/util_controller_test.exs b/test/web/twitter_api/util_controller_test.exs index ad919d341..1133107f4 100644 --- a/test/web/twitter_api/util_controller_test.exs +++ b/test/web/twitter_api/util_controller_test.exs @@ -191,7 +191,7 @@ test "it imports blocks with different nickname variations", %{conn: conn} do test "it updates notification settings", %{user: user, conn: conn} do conn |> put("/api/pleroma/notification_settings", %{ - "followers" => false, + "from_followers" => false, "bar" => 1 }) |> json_response(:ok) @@ -199,10 +199,9 @@ test "it updates notification settings", %{user: user, conn: conn} do user = refresh_record(user) assert %Pleroma.User.NotificationSetting{ - followers: false, - follows: true, - non_follows: true, - non_followers: true, + from_followers: false, + from_following: true, + from_strangers: true, privacy_option: false } == user.notification_settings end @@ -215,10 +214,9 @@ test "it updates notification privacy option", %{user: user, conn: conn} do user = refresh_record(user) assert %Pleroma.User.NotificationSetting{ - followers: true, - follows: true, - non_follows: true, - non_followers: true, + from_followers: true, + from_following: true, + from_strangers: true, privacy_option: true } == user.notification_settings end From 4c82f657c5aaba6aacbc8ef927c1727509195839 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 28 May 2020 13:22:28 -0500 Subject: [PATCH 002/236] Formatting --- test/notification_test.exs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/notification_test.exs b/test/notification_test.exs index fd59aceb5..a1a7cee2a 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -237,7 +237,9 @@ test "it disables notifications from followers" do follower = insert(:user) followed = - insert(:user, notification_settings: %Pleroma.User.NotificationSetting{from_followers: false}) + insert(:user, + notification_settings: %Pleroma.User.NotificationSetting{from_followers: false} + ) User.follow(follower, followed) {:ok, activity} = CommonAPI.post(follower, %{status: "hey @#{followed.nickname}"}) @@ -258,7 +260,9 @@ test "it disables notifications from strangers" do test "it disables notifications from people the user follows" do follower = - insert(:user, notification_settings: %Pleroma.User.NotificationSetting{from_following: false}) + insert(:user, + notification_settings: %Pleroma.User.NotificationSetting{from_following: false} + ) followed = insert(:user) User.follow(follower, followed) From d4b20c96c4030ebb5eb908dc6efcf45be7a8355d Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 28 May 2020 15:34:11 -0500 Subject: [PATCH 003/236] Migrate old notification settings to new variants --- ...439_users_update_notification_settings.exs | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 priv/repo/migrations/20200528160439_users_update_notification_settings.exs diff --git a/priv/repo/migrations/20200528160439_users_update_notification_settings.exs b/priv/repo/migrations/20200528160439_users_update_notification_settings.exs new file mode 100644 index 000000000..561f7a2c4 --- /dev/null +++ b/priv/repo/migrations/20200528160439_users_update_notification_settings.exs @@ -0,0 +1,43 @@ +defmodule Pleroma.Repo.Migrations.UsersUpdateNotificationSettings do + use Ecto.Migration + + def up do + execute( + "UPDATE users SET notification_settings = notification_settings - 'followers' || jsonb_build_object('from_followers', notification_settings->'followers') +where notification_settings ? 'followers' +and local" + ) + + execute( + "UPDATE users SET notification_settings = notification_settings - 'follows' || jsonb_build_object('from_following', notification_settings->'follows') +where notification_settings ? 'follows' +and local" + ) + + execute( + "UPDATE users SET notification_settings = notification_settings - 'non_followers' || jsonb_build_object('from_strangers', notification_settings->'non_followers') +where notification_settings ? 'non_followers' +and local" + ) + end + + def down do + execute( + "UPDATE users SET notification_settings = notification_settings - 'from_followers' || jsonb_build_object('followers', notification_settings->'from_followers') +where notification_settings ? 'from_followers' +and local" + ) + + execute( + "UPDATE users SET notification_settings = notification_settings - 'from_following' || jsonb_build_object('follows', notification_settings->'from_following') +where notification_settings ? 'from_following' +and local" + ) + + execute( + "UPDATE users SET notification_settings = notification_settings - 'from_strangers' || jsonb_build_object('non_follows', notification_settings->'from_strangers') +where notification_settings ? 'from_strangers' +and local" + ) + end +end From fd5e797379155e5a85deb88dc79f8fbca483948e Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 26 Jun 2020 11:24:28 -0500 Subject: [PATCH 004/236] Simplify notification filtering settings further --- CHANGELOG.md | 5 +-- docs/API/pleroma_api.md | 4 +- lib/pleroma/notification.ex | 28 ++---------- lib/pleroma/user/notification_setting.ex | 8 +--- lib/pleroma/web/api_spec/schemas/account.ex | 8 +--- ...439_users_update_notification_settings.exs | 43 ------------------- test/notification_test.exs | 28 +----------- .../mastodon_api/views/account_view_test.exs | 4 +- test/web/twitter_api/util_controller_test.exs | 10 ++--- 9 files changed, 15 insertions(+), 123 deletions(-) delete mode 100644 priv/repo/migrations/20200528160439_users_update_notification_settings.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index 82915dcfb..1d835fee2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,9 +17,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). API Changes - **Breaking:** Emoji API: changed methods and renamed routes. -- **Breaking:** Notification Settings API for suppressing notification - now supports the following controls: `from_followers`, `from_following`, - and `from_strangers`. +- **Breaking:** Notification Settings API for suppressing notifications + has been simplified down to `block_from_strangers`.
diff --git a/docs/API/pleroma_api.md b/docs/API/pleroma_api.md index 9ad1f5c1b..6d8a88a44 100644 --- a/docs/API/pleroma_api.md +++ b/docs/API/pleroma_api.md @@ -287,9 +287,7 @@ See [Admin-API](admin_api.md) * Method `PUT` * Authentication: required * Params: - * `from_followers`: BOOLEAN field, receives notifications from followers - * `from_following`: BOOLEAN field, receives notifications from people the user follows - * `from_strangers`: BOOLEAN field, receives notifications from people without an established relationship + * `block_from_strangers`: BOOLEAN field, blocks notifications from accounts you do not follow * `privacy_option`: BOOLEAN field. When set to true, it removes the contents of a message from the push notification. * Response: JSON. Returns `{"status": "success"}` if the update was successful, otherwise returns `{"error": "error_msg"}` diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 9d09cf082..8a28a1821 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -550,9 +550,7 @@ def skip?(%Activity{} = activity, %User{} = user) do [ :self, :invisible, - :from_followers, - :from_following, - :from_strangers, + :block_from_strangers, :recently_followed ] |> Enum.find(&skip?(&1, activity, user)) @@ -572,35 +570,15 @@ def skip?(:invisible, %Activity{} = activity, _) do end def skip?( - :from_followers, + :block_from_strangers, %Activity{} = activity, - %User{notification_settings: %{from_followers: false}} = user - ) do - actor = activity.data["actor"] - follower = User.get_cached_by_ap_id(actor) - User.following?(follower, user) - end - - def skip?( - :from_strangers, - %Activity{} = activity, - %User{notification_settings: %{from_strangers: false}} = user + %User{notification_settings: %{block_from_strangers: true}} = user ) do actor = activity.data["actor"] follower = User.get_cached_by_ap_id(actor) !User.following?(follower, user) end - def skip?( - :from_following, - %Activity{} = activity, - %User{notification_settings: %{from_following: false}} = user - ) do - actor = activity.data["actor"] - followed = User.get_cached_by_ap_id(actor) - User.following?(user, followed) - end - # 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"] diff --git a/lib/pleroma/user/notification_setting.ex b/lib/pleroma/user/notification_setting.ex index e47ac4cab..ffe9860de 100644 --- a/lib/pleroma/user/notification_setting.ex +++ b/lib/pleroma/user/notification_setting.ex @@ -10,18 +10,14 @@ defmodule Pleroma.User.NotificationSetting do @primary_key false embedded_schema do - field(:from_followers, :boolean, default: true) - field(:from_following, :boolean, default: true) - field(:from_strangers, :boolean, default: true) + field(:block_from_strangers, :boolean, default: false) field(:privacy_option, :boolean, default: false) end def changeset(schema, params) do schema |> cast(prepare_attrs(params), [ - :from_followers, - :from_following, - :from_strangers, + :block_from_strangers, :privacy_option ]) end diff --git a/lib/pleroma/web/api_spec/schemas/account.ex b/lib/pleroma/web/api_spec/schemas/account.ex index ed90ef3db..91bb1ba88 100644 --- a/lib/pleroma/web/api_spec/schemas/account.ex +++ b/lib/pleroma/web/api_spec/schemas/account.ex @@ -57,9 +57,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do notification_settings: %Schema{ type: :object, properties: %{ - from_followers: %Schema{type: :boolean}, - from_following: %Schema{type: :boolean}, - from_strangers: %Schema{type: :boolean}, + block_from_strangers: %Schema{type: :boolean}, privacy_option: %Schema{type: :boolean} } }, @@ -122,9 +120,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do "unread_conversation_count" => 0, "tags" => [], "notification_settings" => %{ - "from_followers" => true, - "from_following" => true, - "from_strangers" => true, + "block_from_strangers" => false, "privacy_option" => false }, "relationship" => %{ diff --git a/priv/repo/migrations/20200528160439_users_update_notification_settings.exs b/priv/repo/migrations/20200528160439_users_update_notification_settings.exs deleted file mode 100644 index 561f7a2c4..000000000 --- a/priv/repo/migrations/20200528160439_users_update_notification_settings.exs +++ /dev/null @@ -1,43 +0,0 @@ -defmodule Pleroma.Repo.Migrations.UsersUpdateNotificationSettings do - use Ecto.Migration - - def up do - execute( - "UPDATE users SET notification_settings = notification_settings - 'followers' || jsonb_build_object('from_followers', notification_settings->'followers') -where notification_settings ? 'followers' -and local" - ) - - execute( - "UPDATE users SET notification_settings = notification_settings - 'follows' || jsonb_build_object('from_following', notification_settings->'follows') -where notification_settings ? 'follows' -and local" - ) - - execute( - "UPDATE users SET notification_settings = notification_settings - 'non_followers' || jsonb_build_object('from_strangers', notification_settings->'non_followers') -where notification_settings ? 'non_followers' -and local" - ) - end - - def down do - execute( - "UPDATE users SET notification_settings = notification_settings - 'from_followers' || jsonb_build_object('followers', notification_settings->'from_followers') -where notification_settings ? 'from_followers' -and local" - ) - - execute( - "UPDATE users SET notification_settings = notification_settings - 'from_following' || jsonb_build_object('follows', notification_settings->'from_following') -where notification_settings ? 'from_following' -and local" - ) - - execute( - "UPDATE users SET notification_settings = notification_settings - 'from_strangers' || jsonb_build_object('non_follows', notification_settings->'from_strangers') -where notification_settings ? 'from_strangers' -and local" - ) - end -end diff --git a/test/notification_test.exs b/test/notification_test.exs index d7df9c36c..d8cb9360a 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -236,44 +236,18 @@ test "it creates a notification for an activity from a muted thread" do assert Notification.create_notification(activity, muter) end - test "it disables notifications from followers" do - follower = insert(:user) - - followed = - insert(:user, - notification_settings: %Pleroma.User.NotificationSetting{from_followers: false} - ) - - User.follow(follower, followed) - {:ok, activity} = CommonAPI.post(follower, %{status: "hey @#{followed.nickname}"}) - refute Notification.create_notification(activity, followed) - end - test "it disables notifications from strangers" do follower = insert(:user) followed = insert(:user, - notification_settings: %Pleroma.User.NotificationSetting{from_strangers: false} + notification_settings: %Pleroma.User.NotificationSetting{block_from_strangers: true} ) {:ok, activity} = CommonAPI.post(follower, %{status: "hey @#{followed.nickname}"}) refute Notification.create_notification(activity, followed) end - test "it disables notifications from people the user follows" do - follower = - insert(:user, - notification_settings: %Pleroma.User.NotificationSetting{from_following: false} - ) - - followed = insert(:user) - User.follow(follower, followed) - follower = Repo.get(User, follower.id) - {:ok, activity} = CommonAPI.post(followed, %{status: "hey @#{follower.nickname}"}) - refute Notification.create_notification(activity, follower) - end - test "it doesn't create a notification for user if he is the activity author" do activity = insert(:note_activity) author = User.get_cached_by_ap_id(activity.data["actor"]) diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index 572830194..b6d820b3f 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -96,9 +96,7 @@ test "Represent the user account for the account owner" do user = insert(:user) notification_settings = %{ - from_followers: true, - from_following: true, - from_strangers: true, + block_from_strangers: false, privacy_option: false } diff --git a/test/web/twitter_api/util_controller_test.exs b/test/web/twitter_api/util_controller_test.exs index 1133107f4..da3f6fa61 100644 --- a/test/web/twitter_api/util_controller_test.exs +++ b/test/web/twitter_api/util_controller_test.exs @@ -191,7 +191,7 @@ test "it imports blocks with different nickname variations", %{conn: conn} do test "it updates notification settings", %{user: user, conn: conn} do conn |> put("/api/pleroma/notification_settings", %{ - "from_followers" => false, + "block_from_strangers" => true, "bar" => 1 }) |> json_response(:ok) @@ -199,9 +199,7 @@ test "it updates notification settings", %{user: user, conn: conn} do user = refresh_record(user) assert %Pleroma.User.NotificationSetting{ - from_followers: false, - from_following: true, - from_strangers: true, + block_from_strangers: true, privacy_option: false } == user.notification_settings end @@ -214,9 +212,7 @@ test "it updates notification privacy option", %{user: user, conn: conn} do user = refresh_record(user) assert %Pleroma.User.NotificationSetting{ - from_followers: true, - from_following: true, - from_strangers: true, + block_from_strangers: false, privacy_option: true } == user.notification_settings end From 69848d5c97c9e5d4c14fb5613eb174cb81d5026d Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 26 Jun 2020 12:45:46 -0500 Subject: [PATCH 005/236] Rename notification "privacy_option" setting --- docs/API/pleroma_api.md | 2 +- .../tasks/pleroma/notification_settings.ex | 18 +++++++++--------- lib/pleroma/user/notification_setting.ex | 4 ++-- lib/pleroma/web/api_spec/schemas/account.ex | 4 ++-- lib/pleroma/web/push/impl.ex | 2 +- ...359_rename_notification_privacy_option.exs | 19 +++++++++++++++++++ test/user/notification_setting_test.exs | 4 ++-- .../mastodon_api/views/account_view_test.exs | 2 +- test/web/push/impl_test.exs | 8 ++++---- test/web/twitter_api/util_controller_test.exs | 8 ++++---- 10 files changed, 45 insertions(+), 26 deletions(-) create mode 100644 priv/repo/migrations/20200626163359_rename_notification_privacy_option.exs diff --git a/docs/API/pleroma_api.md b/docs/API/pleroma_api.md index 6d8a88a44..5bd38ad36 100644 --- a/docs/API/pleroma_api.md +++ b/docs/API/pleroma_api.md @@ -288,7 +288,7 @@ See [Admin-API](admin_api.md) * Authentication: required * Params: * `block_from_strangers`: BOOLEAN field, blocks notifications from accounts you do not follow - * `privacy_option`: BOOLEAN field. When set to true, it removes the contents of a message from the push notification. + * `hide_notification_contents`: BOOLEAN field. When set to true, it removes the contents of a message from the push notification. * Response: JSON. Returns `{"status": "success"}` if the update was successful, otherwise returns `{"error": "error_msg"}` ## `/api/pleroma/healthcheck` diff --git a/lib/mix/tasks/pleroma/notification_settings.ex b/lib/mix/tasks/pleroma/notification_settings.ex index 7d65f0587..00f5ba7bf 100644 --- a/lib/mix/tasks/pleroma/notification_settings.ex +++ b/lib/mix/tasks/pleroma/notification_settings.ex @@ -3,8 +3,8 @@ defmodule Mix.Tasks.Pleroma.NotificationSettings do @moduledoc """ Example: - > mix pleroma.notification_settings --privacy-option=false --nickname-users="parallel588" # set false only for parallel588 user - > mix pleroma.notification_settings --privacy-option=true # set true for all users + > mix pleroma.notification_settings --hide-notification-contents=false --nickname-users="parallel588" # set false only for parallel588 user + > mix pleroma.notification_settings --hide-notification-contents=true # set true for all users """ @@ -19,16 +19,16 @@ def run(args) do OptionParser.parse( args, strict: [ - privacy_option: :boolean, + hide_notification_contents: :boolean, email_users: :string, nickname_users: :string ] ) - privacy_option = Keyword.get(options, :privacy_option) + hide_notification_contents = Keyword.get(options, :hide_notification_contents) - if not is_nil(privacy_option) do - privacy_option + if not is_nil(hide_notification_contents) do + hide_notification_contents |> build_query(options) |> Pleroma.Repo.update_all([]) end @@ -36,15 +36,15 @@ def run(args) do shell_info("Done") end - defp build_query(privacy_option, options) do + defp build_query(hide_notification_contents, options) do query = from(u in Pleroma.User, update: [ set: [ notification_settings: fragment( - "jsonb_set(notification_settings, '{privacy_option}', ?)", - ^privacy_option + "jsonb_set(notification_settings, '{hide_notification_contents}', ?)", + ^hide_notification_contents ) ] ] diff --git a/lib/pleroma/user/notification_setting.ex b/lib/pleroma/user/notification_setting.ex index ffe9860de..7d9e8a000 100644 --- a/lib/pleroma/user/notification_setting.ex +++ b/lib/pleroma/user/notification_setting.ex @@ -11,14 +11,14 @@ defmodule Pleroma.User.NotificationSetting do embedded_schema do field(:block_from_strangers, :boolean, default: false) - field(:privacy_option, :boolean, default: false) + field(:hide_notification_contents, :boolean, default: false) end def changeset(schema, params) do schema |> cast(prepare_attrs(params), [ :block_from_strangers, - :privacy_option + :hide_notification_contents ]) end diff --git a/lib/pleroma/web/api_spec/schemas/account.ex b/lib/pleroma/web/api_spec/schemas/account.ex index 91bb1ba88..71d402b18 100644 --- a/lib/pleroma/web/api_spec/schemas/account.ex +++ b/lib/pleroma/web/api_spec/schemas/account.ex @@ -58,7 +58,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do type: :object, properties: %{ block_from_strangers: %Schema{type: :boolean}, - privacy_option: %Schema{type: :boolean} + hide_notification_contents: %Schema{type: :boolean} } }, relationship: AccountRelationship, @@ -121,7 +121,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do "tags" => [], "notification_settings" => %{ "block_from_strangers" => false, - "privacy_option" => false + "hide_notification_contents" => false }, "relationship" => %{ "blocked_by" => false, diff --git a/lib/pleroma/web/push/impl.ex b/lib/pleroma/web/push/impl.ex index cdb827e76..16368485e 100644 --- a/lib/pleroma/web/push/impl.ex +++ b/lib/pleroma/web/push/impl.ex @@ -104,7 +104,7 @@ def build_content(notification, actor, object, mastodon_type \\ nil) def build_content( %{ - user: %{notification_settings: %{privacy_option: true}} + user: %{notification_settings: %{hide_notification_contents: true}} } = notification, _actor, _object, diff --git a/priv/repo/migrations/20200626163359_rename_notification_privacy_option.exs b/priv/repo/migrations/20200626163359_rename_notification_privacy_option.exs new file mode 100644 index 000000000..06d7f7272 --- /dev/null +++ b/priv/repo/migrations/20200626163359_rename_notification_privacy_option.exs @@ -0,0 +1,19 @@ +defmodule Pleroma.Repo.Migrations.RenameNotificationPrivacyOption do + use Ecto.Migration + + def up do + execute( + "UPDATE users SET notification_settings = notification_settings - 'privacy_option' || jsonb_build_object('hide_notification_contents', notification_settings->'privacy_option') +where notification_settings ? 'privacy_option' +and local" + ) + end + + def down do + execute( + "UPDATE users SET notification_settings = notification_settings - 'hide_notification_contents' || jsonb_build_object('privacy_option', notification_settings->'hide_notification_contents') +where notification_settings ? 'hide_notification_contents' +and local" + ) + end +end diff --git a/test/user/notification_setting_test.exs b/test/user/notification_setting_test.exs index 95bca22c4..308da216a 100644 --- a/test/user/notification_setting_test.exs +++ b/test/user/notification_setting_test.exs @@ -8,11 +8,11 @@ defmodule Pleroma.User.NotificationSettingTest do alias Pleroma.User.NotificationSetting describe "changeset/2" do - test "sets valid privacy option" do + test "sets option to hide notification contents" do changeset = NotificationSetting.changeset( %NotificationSetting{}, - %{"privacy_option" => true} + %{"hide_notification_contents" => true} ) assert %Ecto.Changeset{valid?: true} = changeset diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index b6d820b3f..ce45cb9e9 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -97,7 +97,7 @@ test "Represent the user account for the account owner" do notification_settings = %{ block_from_strangers: false, - privacy_option: false + hide_notification_contents: false } privacy = user.default_scope diff --git a/test/web/push/impl_test.exs b/test/web/push/impl_test.exs index b48952b29..15de5e853 100644 --- a/test/web/push/impl_test.exs +++ b/test/web/push/impl_test.exs @@ -238,9 +238,9 @@ test "builds content for chat messages with no content" do } end - test "hides details for notifications when privacy option enabled" do + test "hides contents of notifications when option enabled" do user = insert(:user, nickname: "Bob") - user2 = insert(:user, nickname: "Rob", notification_settings: %{privacy_option: true}) + user2 = insert(:user, nickname: "Rob", notification_settings: %{hide_notification_contents: true}) {:ok, activity} = CommonAPI.post(user, %{ @@ -284,9 +284,9 @@ test "hides details for notifications when privacy option enabled" do } end - test "returns regular content for notifications with privacy option disabled" do + test "returns regular content when hiding contents option disabled" do user = insert(:user, nickname: "Bob") - user2 = insert(:user, nickname: "Rob", notification_settings: %{privacy_option: false}) + user2 = insert(:user, nickname: "Rob", notification_settings: %{hide_notification_contents: false}) {:ok, activity} = CommonAPI.post(user, %{ diff --git a/test/web/twitter_api/util_controller_test.exs b/test/web/twitter_api/util_controller_test.exs index da3f6fa61..b8ddadb50 100644 --- a/test/web/twitter_api/util_controller_test.exs +++ b/test/web/twitter_api/util_controller_test.exs @@ -200,20 +200,20 @@ test "it updates notification settings", %{user: user, conn: conn} do assert %Pleroma.User.NotificationSetting{ block_from_strangers: true, - privacy_option: false + hide_notification_contents: false } == user.notification_settings end - test "it updates notification privacy option", %{user: user, conn: conn} do + test "it updates notification settings to enable hiding contents", %{user: user, conn: conn} do conn - |> put("/api/pleroma/notification_settings", %{"privacy_option" => "1"}) + |> put("/api/pleroma/notification_settings", %{"hide_notification_contents" => "1"}) |> json_response(:ok) user = refresh_record(user) assert %Pleroma.User.NotificationSetting{ block_from_strangers: false, - privacy_option: true + hide_notification_contents: true } == user.notification_settings end end From 76313e81627f4563ba2d3bf9f7bb5e6b8a20975b Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 26 Jun 2020 12:48:05 -0500 Subject: [PATCH 006/236] Document breaking change of hide_notification_details setting --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d835fee2..1d640f292 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - **Breaking:** Emoji API: changed methods and renamed routes. - **Breaking:** Notification Settings API for suppressing notifications has been simplified down to `block_from_strangers`. +- **Breaking:** Notification Settings API option for hiding push notification + contents has been renamed to `hide_notification_contents`
From ce85db41a30d95555bbd44d8931c4a3a357938d8 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 26 Jun 2020 14:35:04 -0500 Subject: [PATCH 007/236] Lint --- test/web/push/impl_test.exs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/web/push/impl_test.exs b/test/web/push/impl_test.exs index 15de5e853..aeb5c1fbd 100644 --- a/test/web/push/impl_test.exs +++ b/test/web/push/impl_test.exs @@ -240,7 +240,9 @@ test "builds content for chat messages with no content" do test "hides contents of notifications when option enabled" do user = insert(:user, nickname: "Bob") - user2 = insert(:user, nickname: "Rob", notification_settings: %{hide_notification_contents: true}) + + user2 = + insert(:user, nickname: "Rob", notification_settings: %{hide_notification_contents: true}) {:ok, activity} = CommonAPI.post(user, %{ @@ -286,7 +288,9 @@ test "hides contents of notifications when option enabled" do test "returns regular content when hiding contents option disabled" do user = insert(:user, nickname: "Bob") - user2 = insert(:user, nickname: "Rob", notification_settings: %{hide_notification_contents: false}) + + user2 = + insert(:user, nickname: "Rob", notification_settings: %{hide_notification_contents: false}) {:ok, activity} = CommonAPI.post(user, %{ From 8daacc911498d827fd68ea3d34eb1be9ae4a1ffe Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 23 Jun 2020 14:17:23 -0500 Subject: [PATCH 008/236] AutoLinker --> Linkify, update to latest version https://git.pleroma.social/pleroma/elixir-libraries/linkify --- CHANGELOG.md | 1 + config/config.exs | 18 ++++++-------- config/description.exs | 26 +++++++++++++------- docs/configuration/cheatsheet.md | 35 +++++++++++++-------------- lib/pleroma/config/config_db.ex | 2 +- lib/pleroma/formatter.ex | 26 +++++++++++--------- lib/pleroma/web/rich_media/helpers.ex | 4 +-- mix.exs | 4 +-- mix.lock | 2 +- 9 files changed, 63 insertions(+), 55 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 71963d206..4d3bda99e 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/). - MFR policy to set global expiration for all local Create activities - OGP rich media parser merged with TwitterCard - Configuration: `:instance, rewrite_policy` moved to `:mrf, policies`, `:instance, :mrf_transparency` moved to `:mrf, :transparency`, `:instance, :mrf_transparency_exclusions` moved to `:mrf, :transparency_exclusions`. Old config namespace is deprecated. +- **Breaking:** Configuration: `:auto_linker, :opts` moved to `:pleroma, Pleroma.Formatter`. Old config namespace is deprecated.
API Changes diff --git a/config/config.exs b/config/config.exs index 5aad26e95..a74a6a5ba 100644 --- a/config/config.exs +++ b/config/config.exs @@ -520,16 +520,14 @@ federator_outgoing: 5 ] -config :auto_linker, - opts: [ - extra: true, - # TODO: Set to :no_scheme when it works properly - validate_tld: true, - class: false, - strip_prefix: false, - new_window: false, - rel: "ugc" - ] +config :pleroma, Pleroma.Formatter, + class: false, + rel: "ugc", + new_window: false, + truncate: false, + strip_prefix: false, + extra: true, + validate_tld: :no_scheme config :pleroma, :ldap, enabled: System.get_env("LDAP_ENABLED") == "true", diff --git a/config/description.exs b/config/description.exs index f54ac2a2a..204de8324 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2157,44 +2157,52 @@ ] }, %{ - group: :auto_linker, - key: :opts, + group: :pleroma, + key: Pleroma.Formatter, type: :group, - description: "Configuration for the auto_linker library", + description: + "Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs.", children: [ %{ key: :class, type: [:string, false], - description: "Specify the class to be added to the generated link. Disable to clear", + description: "Specify the class to be added to the generated link. Disable to clear.", suggestions: ["auto-linker", false] }, %{ key: :rel, type: [:string, false], - description: "Override the rel attribute. Disable to clear", + description: "Override the rel attribute. Disable to clear.", suggestions: ["ugc", "noopener noreferrer", false] }, %{ key: :new_window, type: :boolean, - description: "Link urls will open in new window/tab" + description: "Link URLs will open in new window/tab." }, %{ key: :truncate, type: [:integer, false], description: - "Set to a number to truncate urls longer then the number. Truncated urls will end in `..`", + "Set to a number to truncate URLs longer then the number. Truncated URLs will end in `...`", suggestions: [15, false] }, %{ key: :strip_prefix, type: :boolean, - description: "Strip the scheme prefix" + description: "Strip the scheme prefix." }, %{ key: :extra, type: :boolean, - description: "Link urls with rarely used schemes (magnet, ipfs, irc, etc.)" + description: "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" + }, + %{ + key: :validate_tld, + type: [:atom, :boolean], + description: + "Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)", + suggestions: [:no_scheme, true] } ] }, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 6759d5e93..22b28d423 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -908,30 +908,29 @@ Configure OAuth 2 provider capabilities: ### :uri_schemes * `valid_schemes`: List of the scheme part that is considered valid to be an URL. -### :auto_linker +### Pleroma.Formatter -Configuration for the `auto_linker` library: +Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs. -* `class: "auto-linker"` - specify the class to be added to the generated link. false to clear. -* `rel: "noopener noreferrer"` - override the rel attribute. false to clear. -* `new_window: true` - set to false to remove `target='_blank'` attribute. -* `scheme: false` - Set to true to link urls with schema `http://google.com`. -* `truncate: false` - Set to a number to truncate urls longer then the number. Truncated urls will end in `..`. -* `strip_prefix: true` - Strip the scheme prefix. -* `extra: false` - link urls with rarely used schemes (magnet, ipfs, irc, etc.). +* `class` - specify the class to be added to the generated link (default: `false`) +* `rel` - specify the rel attribute (default: `ugc`) +* `new_window` - adds `target="_blank"` attribute (default: `false`) +* `truncate` - Set to a number to truncate URLs longer then the number. Truncated URLs will end in `...` (default: `false`) +* `strip_prefix` - Strip the scheme prefix (default: `false`) +* `extra` - link URLs with rarely used schemes (magnet, ipfs, irc, etc.) (default: `true`) +* `validate_tld` - Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for urls without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't) (default: `:no_scheme`) Example: ```elixir -config :auto_linker, - opts: [ - scheme: true, - extra: true, - class: false, - strip_prefix: false, - new_window: false, - rel: "ugc" - ] +config :pleroma, Pleroma.Formatter, + class: false, + rel: "ugc", + new_window: false, + truncate: false, + strip_prefix: false, + extra: true, + validate_tld: :no_scheme ``` ## Custom Runtime Modules (`:modules`) diff --git a/lib/pleroma/config/config_db.ex b/lib/pleroma/config/config_db.ex index 1a89d8895..f8141ced8 100644 --- a/lib/pleroma/config/config_db.ex +++ b/lib/pleroma/config/config_db.ex @@ -156,7 +156,7 @@ defp only_full_update?(%ConfigDB{group: group, key: key}) do {:quack, :meta}, {:mime, :types}, {:cors_plug, [:max_age, :methods, :expose, :headers]}, - {:auto_linker, :opts}, + {:linkify, :opts}, {:swarm, :node_blacklist}, {:logger, :backends} ] diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index 02a93a8dc..0c450eae4 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -10,11 +10,15 @@ defmodule Pleroma.Formatter do @link_regex ~r"((?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~%:/?#[\]@!\$&'\(\)\*\+,;=.]+)|[0-9a-z+\-\.]+:[0-9a-z$-_.+!*'(),]+"ui @markdown_characters_regex ~r/(`|\*|_|{|}|[|]|\(|\)|#|\+|-|\.|!)/ - @auto_linker_config hashtag: true, - hashtag_handler: &Pleroma.Formatter.hashtag_handler/4, - mention: true, - mention_handler: &Pleroma.Formatter.mention_handler/4, - scheme: true + defp linkify_opts do + Pleroma.Config.get(Pleroma.Formatter) ++ + [ + hashtag: true, + hashtag_handler: &Pleroma.Formatter.hashtag_handler/4, + mention: true, + mention_handler: &Pleroma.Formatter.mention_handler/4 + ] + end def escape_mention_handler("@" <> nickname = mention, buffer, _, _) do case User.get_cached_by_nickname(nickname) do @@ -80,19 +84,19 @@ def hashtag_handler("#" <> tag = tag_text, _buffer, _opts, acc) do @spec linkify(String.t(), keyword()) :: {String.t(), [{String.t(), User.t()}], [{String.t(), String.t()}]} def linkify(text, options \\ []) do - options = options ++ @auto_linker_config + options = linkify_opts() ++ options if options[:safe_mention] && Regex.named_captures(@safe_mention_regex, text) do %{"mentions" => mentions, "rest" => rest} = Regex.named_captures(@safe_mention_regex, text) acc = %{mentions: MapSet.new(), tags: MapSet.new()} - {text_mentions, %{mentions: mentions}} = AutoLinker.link_map(mentions, acc, options) - {text_rest, %{tags: tags}} = AutoLinker.link_map(rest, acc, options) + {text_mentions, %{mentions: mentions}} = Linkify.link_map(mentions, acc, options) + {text_rest, %{tags: tags}} = Linkify.link_map(rest, acc, options) {text_mentions <> text_rest, MapSet.to_list(mentions), MapSet.to_list(tags)} else acc = %{mentions: MapSet.new(), tags: MapSet.new()} - {text, %{mentions: mentions, tags: tags}} = AutoLinker.link_map(text, acc, options) + {text, %{mentions: mentions, tags: tags}} = Linkify.link_map(text, acc, options) {text, MapSet.to_list(mentions), MapSet.to_list(tags)} end @@ -111,9 +115,9 @@ def mentions_escape(text, options \\ []) do if options[:safe_mention] && Regex.named_captures(@safe_mention_regex, text) do %{"mentions" => mentions, "rest" => rest} = Regex.named_captures(@safe_mention_regex, text) - AutoLinker.link(mentions, options) <> AutoLinker.link(rest, options) + Linkify.link(mentions, options) <> Linkify.link(rest, options) else - AutoLinker.link(text, options) + Linkify.link(text, options) end end diff --git a/lib/pleroma/web/rich_media/helpers.ex b/lib/pleroma/web/rich_media/helpers.ex index 1729141e9..747f2dc6b 100644 --- a/lib/pleroma/web/rich_media/helpers.ex +++ b/lib/pleroma/web/rich_media/helpers.ex @@ -11,10 +11,10 @@ defmodule Pleroma.Web.RichMedia.Helpers do @spec validate_page_url(URI.t() | binary()) :: :ok | :error defp validate_page_url(page_url) when is_binary(page_url) do - validate_tld = Application.get_env(:auto_linker, :opts)[:validate_tld] + validate_tld = Pleroma.Config.get([Pleroma.Formatter, :validate_tld]) page_url - |> AutoLinker.Parser.url?(scheme: true, validate_tld: validate_tld) + |> Linkify.Parser.url?(validate_tld: validate_tld) |> parse_uri(page_url) end diff --git a/mix.exs b/mix.exs index b638be541..c773a3162 100644 --- a/mix.exs +++ b/mix.exs @@ -167,9 +167,7 @@ defp deps do {:floki, "~> 0.25"}, {:timex, "~> 3.5"}, {:ueberauth, "~> 0.4"}, - {:auto_linker, - git: "https://git.pleroma.social/pleroma/auto_linker.git", - ref: "95e8188490e97505c56636c1379ffdf036c1fdde"}, + {:linkify, "~> 0.1.0"}, {:http_signatures, git: "https://git.pleroma.social/pleroma/http_signatures.git", ref: "293d77bb6f4a67ac8bde1428735c3b42f22cbb30"}, diff --git a/mix.lock b/mix.lock index 5ad49391d..458cda6cf 100644 --- a/mix.lock +++ b/mix.lock @@ -1,6 +1,5 @@ %{ "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"]}, @@ -62,6 +61,7 @@ "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"}, + "linkify": {:hex, :linkify, "0.1.0", "a2d35de64271c7fbbc7d8773adb9f595592b7fbaa581271c7733f39d3058bfa4", [:mix], [], "hexpm", "d3140ef8dbdcc53ef93a6a5374c11fffe0189f00d132161e9d020a417780bee7"}, "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"}, From 33e62856367b2789fa287830676edd843ad0e5d4 Mon Sep 17 00:00:00 2001 From: Angelina Filippova Date: Thu, 9 Jul 2020 01:33:23 +0300 Subject: [PATCH 009/236] Update types for :headers and :options settings in MediaProxy Invalidation group --- config/description.exs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/config/description.exs b/config/description.exs index 370af80a6..337f0d307 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1791,15 +1791,20 @@ }, %{ key: :headers, - type: {:list, :tuple}, - description: "HTTP headers of request.", + type: {:keyword, :string}, + description: "HTTP headers of request", suggestions: [{"x-refresh", 1}] }, %{ key: :options, type: :keyword, - description: "Request options.", - suggestions: [params: %{ts: "xxx"}] + description: "Request options", + children: [ + %{ + key: :params, + type: {:keyword, :string} + } + ] } ] }, From cc7153cd828afef1564b58649875b5529c078054 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Thu, 9 Jul 2020 19:07:07 +0200 Subject: [PATCH 010/236] user: Add support for custom emojis in profile fields --- lib/pleroma/user.ex | 18 ++++++++++---- .../update_credentials_test.exs | 24 +++++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 9d1314f81..19b361b88 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -527,11 +527,21 @@ defp parse_fields(value) do end defp put_emoji(changeset) do - bio = get_change(changeset, :bio) - name = get_change(changeset, :name) + emojified_fields = [:bio, :name, :raw_fields] + + if Enum.any?(changeset.changes, fn {k, _} -> k in emojified_fields end) do + bio = Emoji.Formatter.get_emoji_map(get_field(changeset, :bio)) + name = Emoji.Formatter.get_emoji_map(get_field(changeset, :name)) + + emoji = Map.merge(bio, name) + + emoji = + changeset + |> get_field(:raw_fields) + |> Enum.reduce(emoji, fn x, acc -> + Map.merge(acc, Emoji.Formatter.get_emoji_map(x["name"] <> x["value"])) + end) - 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 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 b55bb76a7..ee5ec9053 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 @@ -344,6 +344,30 @@ test "update fields", %{conn: conn} do ] end + test "emojis in fields labels", %{conn: conn} do + fields = [ + %{"name" => ":firefox:", "value" => "is best 2hu"}, + %{"name" => "they wins", "value" => ":blank:"} + ] + + account_data = + conn + |> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) + |> json_response_and_validate_schema(200) + + assert account_data["fields"] == [ + %{"name" => ":firefox:", "value" => "is best 2hu"}, + %{"name" => "they wins", "value" => ":blank:"} + ] + + assert account_data["source"]["fields"] == [ + %{"name" => ":firefox:", "value" => "is best 2hu"}, + %{"name" => "they wins", "value" => ":blank:"} + ] + + assert [%{"shortcode" => "blank"}, %{"shortcode" => "firefox"}] = account_data["emojis"] + end + test "update fields via x-www-form-urlencoded", %{conn: conn} do fields = [ From 6b9210e886e16f806563f20ac82c0fe56f12a615 Mon Sep 17 00:00:00 2001 From: Angelina Filippova Date: Fri, 10 Jul 2020 03:07:55 +0300 Subject: [PATCH 011/236] Update type for :groups setting --- config/description.exs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/description.exs b/config/description.exs index 337f0d307..c2cd40587 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2527,7 +2527,7 @@ %{ key: :styling, type: :map, - description: "a map with color settings for email templates.", + description: "A map with color settings for email templates.", suggestions: [ %{ link_color: "#d8a070", @@ -2633,7 +2633,7 @@ }, %{ key: :groups, - type: {:keyword, :string, {:list, :string}}, + type: {:keyword, {:list, :string}}, description: "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name" <> " and the value is the location or array of locations. * can be used as a wildcard.", From ac9f18de11d3d0583dfae3c6b25c56828357624a Mon Sep 17 00:00:00 2001 From: Angelina Filippova Date: Fri, 10 Jul 2020 03:32:53 +0300 Subject: [PATCH 012/236] Update type for :replace settings --- config/description.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/description.exs b/config/description.exs index c2cd40587..0a0a8e95c 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1601,7 +1601,7 @@ }, %{ key: :replace, - type: [{:tuple, :string, :string}, {:tuple, :regex, :string}], + type: {:keyword, :string, :regex}, description: "A list of tuples containing {pattern, replacement}. Each pattern can be a string or a regular expression.", suggestions: [{"foo", "bar"}, {~r/foo/iu, "bar"}] From 93e494ec212b5bb6aae31a3b43304ed230d095e2 Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 10 Jul 2020 14:10:44 +0200 Subject: [PATCH 013/236] ActivityPub: Don't rename a clashing nickname with the same ap id. --- lib/pleroma/web/activity_pub/activity_pub.ex | 23 +++++++++-- test/web/activity_pub/activity_pub_test.exs | 42 ++++++++++++++++++++ 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 8da5cf938..bc7b5d95a 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1376,13 +1376,28 @@ def fetch_and_prepare_user_from_ap_id(ap_id) do end end - def maybe_handle_clashing_nickname(nickname) do - with %User{} = old_user <- User.get_by_nickname(nickname) do - Logger.info("Found an old user for #{nickname}, ap id is #{old_user.ap_id}, renaming.") + def maybe_handle_clashing_nickname(data) do + nickname = data[:nickname] + + with %User{} = old_user <- User.get_by_nickname(nickname), + {_, false} <- {:ap_id_comparison, data[:ap_id] == old_user.ap_id} do + Logger.info( + "Found an old user for #{nickname}, the old ap id is #{old_user.ap_id}, new one is #{ + data[:ap_id] + }, renaming." + ) old_user |> User.remote_user_changeset(%{nickname: "#{old_user.id}.#{old_user.nickname}"}) |> User.update_and_set_cache() + else + {:ap_id_comparison, true} -> + Logger.info( + "Found an old user for #{nickname}, but the ap id #{data[:ap_id]} is the same as the new user. Race condition? Not changing anything." + ) + + _ -> + nil end end @@ -1398,7 +1413,7 @@ def make_user_from_ap_id(ap_id) do |> User.remote_user_changeset(data) |> User.update_and_set_cache() else - maybe_handle_clashing_nickname(data[:nickname]) + maybe_handle_clashing_nickname(data) data |> User.remote_user_changeset() diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index b988e4437..1658f20da 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -2056,4 +2056,46 @@ test "creates an activity expiration for local Create activities" do assert [%{activity_id: ^id_create}] = Pleroma.ActivityExpiration |> Repo.all() end end + + describe "handling of clashing nicknames" do + test "renames an existing user with a clashing nickname and a different ap id" do + orig_user = + insert( + :user, + local: false, + nickname: "admin@mastodon.example.org", + ap_id: "http://mastodon.example.org/users/harinezumigari" + ) + + %{ + nickname: orig_user.nickname, + ap_id: orig_user.ap_id <> "part_2" + } + |> ActivityPub.maybe_handle_clashing_nickname() + + user = User.get_by_id(orig_user.id) + + assert user.nickname == "#{orig_user.id}.admin@mastodon.example.org" + end + + test "does nothing with a clashing nickname and the same ap id" do + orig_user = + insert( + :user, + local: false, + nickname: "admin@mastodon.example.org", + ap_id: "http://mastodon.example.org/users/harinezumigari" + ) + + %{ + nickname: orig_user.nickname, + ap_id: orig_user.ap_id + } + |> ActivityPub.maybe_handle_clashing_nickname() + + user = User.get_by_id(orig_user.id) + + assert user.nickname == orig_user.nickname + end + end end From 02b2747d420962445691d4bdbe171d95e7656e89 Mon Sep 17 00:00:00 2001 From: Angelina Filippova Date: Sat, 11 Jul 2020 04:17:21 +0300 Subject: [PATCH 014/236] Update types for :params, :match_actor and :replace settings --- config/description.exs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/description.exs b/config/description.exs index 0a0a8e95c..7f3ef535c 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1521,7 +1521,7 @@ children: [ %{ key: :match_actor, - type: :map, + type: {:map, {:list, :string}}, description: "Matches a series of regular expressions against the actor field", suggestions: [ %{ @@ -1601,7 +1601,7 @@ }, %{ key: :replace, - type: {:keyword, :string, :regex}, + type: {:list, :tuple}, description: "A list of tuples containing {pattern, replacement}. Each pattern can be a string or a regular expression.", suggestions: [{"foo", "bar"}, {~r/foo/iu, "bar"}] @@ -1802,7 +1802,7 @@ children: [ %{ key: :params, - type: {:keyword, :string} + type: {:map, :string} } ] } From 98c56ff4771cba8037fd28d412337bee7a60bc95 Mon Sep 17 00:00:00 2001 From: Angelina Filippova Date: Sat, 11 Jul 2020 04:32:44 +0300 Subject: [PATCH 015/236] Remove :regex from types --- config/description.exs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/description.exs b/config/description.exs index 7f3ef535c..6ef329807 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1587,14 +1587,14 @@ children: [ %{ key: :reject, - type: [:string, :regex], + type: [:string], description: "A list of patterns which result in message being rejected. Each pattern can be a string or a regular expression.", suggestions: ["foo", ~r/foo/iu] }, %{ key: :federated_timeline_removal, - type: [:string, :regex], + type: [:string], description: "A list of patterns which result in message being removed from federated timelines (a.k.a unlisted). Each pattern can be a string or a regular expression.", suggestions: ["foo", ~r/foo/iu] From 62fc8eab0dfd3f4c60c8f36fd3a544d6785ff2c6 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Sat, 11 Jul 2020 07:20:35 +0300 Subject: [PATCH 016/236] fix reset confirmation email in admin section --- lib/pleroma/application_requirements.ex | 18 ++++++++++ lib/pleroma/user.ex | 22 +++++++----- .../controllers/admin_api_controller.ex | 23 +++++------- test/application_requirements_test.exs | 36 +++++++++++++++++++ test/user_test.exs | 12 ++++++- .../controllers/admin_api_controller_test.exs | 4 +++ 6 files changed, 91 insertions(+), 24 deletions(-) diff --git a/lib/pleroma/application_requirements.ex b/lib/pleroma/application_requirements.ex index 88575a498..f0f34734e 100644 --- a/lib/pleroma/application_requirements.ex +++ b/lib/pleroma/application_requirements.ex @@ -16,6 +16,7 @@ defmodule VerifyError, do: defexception([:message]) @spec verify!() :: :ok | VerifyError.t() def verify! do :ok + |> check_confirmation_accounts! |> check_migrations_applied!() |> check_rum!() |> handle_result() @@ -24,6 +25,23 @@ def verify! do defp handle_result(:ok), do: :ok defp handle_result({:error, message}), do: raise(VerifyError, message: message) + # Checks account confirmation email + # + def check_confirmation_accounts!(:ok) do + if Pleroma.Config.get([:instance, :account_activation_required]) && + not Pleroma.Config.get([Pleroma.Emails.Mailer, :enabled]) do + Logger.error( + "To use confirmation an user account need to enable and setting mailer.\nIf you want to start Pleroma anyway, set\nconfig :pleroma, :instance, account_activation_required: false\nOtherwise setup and enable mailer." + ) + + {:error, "Confirmation account: Mailer is disabled"} + else + :ok + end + end + + def check_confirmation_accounts!(result), do: result + # Checks for pending migrations. # def check_migrations_applied!(:ok) do diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index b9989f901..711258ac7 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -709,21 +709,25 @@ def post_register_action(%User{} = user) do end end - def try_send_confirmation_email(%User{} = user) do - if user.confirmation_pending && - Config.get([:instance, :account_activation_required]) do - user - |> Pleroma.Emails.UserEmail.account_confirmation_email() - |> Pleroma.Emails.Mailer.deliver_async() - + @spec try_send_confirmation_email(User.t()) :: {:ok, :enqueued | :noop} + def try_send_confirmation_email(%User{confirmation_pending: true} = user) do + if Config.get([:instance, :account_activation_required]) do + send_confirmation_email(user) {:ok, :enqueued} else {:ok, :noop} end end - def try_send_confirmation_email(users) do - Enum.each(users, &try_send_confirmation_email/1) + def try_send_confirmation_email(_), do: {:ok, :noop} + + @spec send_confirmation_email(Uset.t()) :: User.t() + def send_confirmation_email(%User{} = user) do + user + |> Pleroma.Emails.UserEmail.account_confirmation_email() + |> Pleroma.Emails.Mailer.deliver_async() + + user end def needs_update?(%User{local: true}), do: false diff --git a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex index e5f14269a..c10181bae 100644 --- a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex @@ -616,29 +616,24 @@ def reload_emoji(conn, _params) do end def confirm_email(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do - users = nicknames |> Enum.map(&User.get_cached_by_nickname/1) + users = Enum.map(nicknames, &User.get_cached_by_nickname/1) User.toggle_confirmation(users) - ModerationLog.insert_log(%{ - actor: admin, - subject: users, - action: "confirm_email" - }) + ModerationLog.insert_log(%{actor: admin, subject: users, action: "confirm_email"}) json(conn, "") end def resend_confirmation_email(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do - users = nicknames |> Enum.map(&User.get_cached_by_nickname/1) + users = + Enum.map(nicknames, fn nickname -> + nickname + |> User.get_cached_by_nickname() + |> User.send_confirmation_email() + end) - User.try_send_confirmation_email(users) - - ModerationLog.insert_log(%{ - actor: admin, - subject: users, - action: "resend_confirmation_email" - }) + ModerationLog.insert_log(%{actor: admin, subject: users, action: "resend_confirmation_email"}) json(conn, "") end diff --git a/test/application_requirements_test.exs b/test/application_requirements_test.exs index 481cdfd73..8c92be290 100644 --- a/test/application_requirements_test.exs +++ b/test/application_requirements_test.exs @@ -9,6 +9,42 @@ defmodule Pleroma.ApplicationRequirementsTest do alias Pleroma.Repo + describe "check_confirmation_accounts!" do + setup_with_mocks([ + {Pleroma.ApplicationRequirements, [:passthrough], + [ + check_migrations_applied!: fn _ -> :ok end + ]} + ]) do + :ok + end + + setup do: clear_config([:instance, :account_activation_required]) + + test "raises if account confirmation is required but mailer isn't enable" do + Pleroma.Config.put([:instance, :account_activation_required], true) + Pleroma.Config.put([Pleroma.Emails.Mailer, :enabled], false) + + assert_raise Pleroma.ApplicationRequirements.VerifyError, + "Confirmation account: Mailer is disabled", + fn -> + capture_log(&Pleroma.ApplicationRequirements.verify!/0) + end + end + + test "doesn't do anything if account confirmation is disabled" do + Pleroma.Config.put([:instance, :account_activation_required], false) + Pleroma.Config.put([Pleroma.Emails.Mailer, :enabled], false) + assert Pleroma.ApplicationRequirements.verify!() == :ok + end + + test "doesn't do anything if account confirmation is required and mailer is enabled" do + Pleroma.Config.put([:instance, :account_activation_required], true) + Pleroma.Config.put([Pleroma.Emails.Mailer, :enabled], true) + assert Pleroma.ApplicationRequirements.verify!() == :ok + end + end + describe "check_rum!" do setup_with_mocks([ {Pleroma.ApplicationRequirements, [:passthrough], diff --git a/test/user_test.exs b/test/user_test.exs index 9788e09d9..21c03b470 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -17,6 +17,7 @@ defmodule Pleroma.UserTest do import Pleroma.Factory import ExUnit.CaptureLog + import Swoosh.TestAssertions setup_all do Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) @@ -385,9 +386,11 @@ test "fetches correct profile for nickname beginning with number" do password_confirmation: "test", email: "email@example.com" } + setup do: clear_config([:instance, :autofollowed_nicknames]) setup do: clear_config([:instance, :welcome_message]) setup do: clear_config([:instance, :welcome_user_nickname]) + setup do: clear_config([:instance, :account_activation_required]) test "it autofollows accounts that are set for it" do user = insert(:user) @@ -421,7 +424,14 @@ test "it sends a welcome message if it is set" do assert activity.actor == welcome_user.ap_id end - setup do: clear_config([:instance, :account_activation_required]) + test "it sends a confirm email" do + Pleroma.Config.put([:instance, :account_activation_required], true) + + cng = User.register_changeset(%User{}, @full_user_data) + {:ok, registered_user} = User.register(cng) + ObanHelpers.perform_all() + assert_email_sent(Pleroma.Emails.UserEmail.account_confirmation_email(registered_user)) + end test "it requires an email, name, nickname and password, bio is optional when account_activation_required is enabled" do Pleroma.Config.put([:instance, :account_activation_required], true) diff --git a/test/web/admin_api/controllers/admin_api_controller_test.exs b/test/web/admin_api/controllers/admin_api_controller_test.exs index c2433f23c..b734a34a5 100644 --- a/test/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/web/admin_api/controllers/admin_api_controller_test.exs @@ -9,6 +9,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do import ExUnit.CaptureLog import Mock import Pleroma.Factory + import Swoosh.TestAssertions alias Pleroma.Activity alias Pleroma.Config @@ -1721,6 +1722,9 @@ test "it resend emails for two users", %{conn: conn, admin: admin} do "@#{admin.nickname} re-sent confirmation email for users: @#{first_user.nickname}, @#{ second_user.nickname }" + + ObanHelpers.perform_all() + assert_email_sent(Pleroma.Emails.UserEmail.account_confirmation_email(first_user)) end end From 0eeeaa37e80f82025658b30455bde45ece0f9c0b Mon Sep 17 00:00:00 2001 From: Angelina Filippova Date: Sun, 12 Jul 2020 01:38:16 +0300 Subject: [PATCH 017/236] Update types in MRF Keyword group --- config/description.exs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/config/description.exs b/config/description.exs index 6ef329807..90fa9e8e4 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1069,6 +1069,7 @@ }, %{ key: :webhook_url, + label: "Webhook URL", type: :string, description: "Configure the Slack incoming webhook", suggestions: ["https://hooks.slack.com/services/YOUR-KEY-HERE"] @@ -1587,14 +1588,14 @@ children: [ %{ key: :reject, - type: [:string], + type: {:list, :string}, description: "A list of patterns which result in message being rejected. Each pattern can be a string or a regular expression.", suggestions: ["foo", ~r/foo/iu] }, %{ key: :federated_timeline_removal, - type: [:string], + type: {:list, :string}, description: "A list of patterns which result in message being removed from federated timelines (a.k.a unlisted). Each pattern can be a string or a regular expression.", suggestions: ["foo", ~r/foo/iu] From b3764423251c963a5ca007517189f556bfe95155 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Sat, 11 Jul 2020 10:36:36 +0300 Subject: [PATCH 018/236] MediaProxy whitelist setting now supports hosts with scheme added deprecation warning about using bare domains --- CHANGELOG.md | 1 + config/description.exs | 4 +- config/test.exs | 5 + docs/configuration/cheatsheet.md | 9 +- lib/pleroma/config/deprecation_warnings.ex | 15 +- lib/pleroma/plugs/http_security_plug.ex | 47 ++++-- lib/pleroma/web/media_proxy/media_proxy.ex | 26 ++-- test/config/deprecation_warnings_test.exs | 8 + test/plugs/http_security_plug_test.exs | 90 ++++++++--- .../media_proxy_controller_test.exs | 134 +++++++++++------ test/web/media_proxy/media_proxy_test.exs | 142 ++++++------------ 11 files changed, 282 insertions(+), 199 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e928528a..42149a2d2 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/). - MFR policy to set global expiration for all local Create activities - OGP rich media parser merged with TwitterCard - Configuration: `:instance, rewrite_policy` moved to `:mrf, policies`, `:instance, :mrf_transparency` moved to `:mrf, :transparency`, `:instance, :mrf_transparency_exclusions` moved to `:mrf, :transparency_exclusions`. Old config namespace is deprecated. +- Configuration: `:media_proxy, whitelist` format changed to host with scheme (e.g. `http://example.com` instead of `example.com`). Domain format is deprecated.
API Changes diff --git a/config/description.exs b/config/description.exs index b0cc8d527..432705307 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1775,8 +1775,8 @@ %{ key: :whitelist, type: {:list, :string}, - description: "List of domains to bypass the mediaproxy", - suggestions: ["example.com"] + description: "List of hosts with scheme to bypass the mediaproxy", + suggestions: ["http://example.com"] } ] }, diff --git a/config/test.exs b/config/test.exs index d45c36b7b..abcf793e5 100644 --- a/config/test.exs +++ b/config/test.exs @@ -113,6 +113,11 @@ config :pleroma, :instances_favicons, enabled: true +config :pleroma, Pleroma.Uploaders.S3, + bucket: nil, + streaming_enabled: true, + public_endpoint: nil + if File.exists?("./config/test.secret.exs") do import_config "test.secret.exs" else diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 1a0603892..f7885c11d 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -252,6 +252,7 @@ This section describe PWA manifest instance-specific values. Currently this opti * `background_color`: Describe the background color of the app. (Example: `"#191b22"`, `"aliceblue"`). ## :emoji + * `shortcode_globs`: Location of custom emoji files. `*` can be used as a wildcard. Example `["/emoji/custom/**/*.png"]` * `pack_extensions`: A list of file extensions for emojis, when no emoji.txt for a pack is present. Example `[".png", ".gif"]` * `groups`: Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the groupname and the value the location or array of locations. `*` can be used as a wildcard. Example `[Custom: ["/emoji/*.png", "/emoji/custom/*.png"]]` @@ -260,13 +261,14 @@ This section describe PWA manifest instance-specific values. Currently this opti memory for this amount of seconds multiplied by the number of files. ## :media_proxy + * `enabled`: Enables proxying of remote media to the instance’s proxy * `base_url`: The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts. * `proxy_opts`: All options defined in `Pleroma.ReverseProxy` documentation, defaults to `[max_body_length: (25*1_048_576)]`. -* `whitelist`: List of domains to bypass the mediaproxy +* `whitelist`: List of hosts with scheme to bypass the mediaproxy (e.g. `https://example.com`) * `invalidation`: options for remove media from cache after delete object: - * `enabled`: Enables purge cache - * `provider`: Which one of the [purge cache strategy](#purge-cache-strategy) to use. + * `enabled`: Enables purge cache + * `provider`: Which one of the [purge cache strategy](#purge-cache-strategy) to use. ### Purge cache strategy @@ -278,6 +280,7 @@ Urls of attachments pass to script as arguments. * `script_path`: path to external script. Example: + ```elixir config :pleroma, Pleroma.Web.MediaProxy.Invalidation.Script, script_path: "./installation/nginx-cache-purge.example" diff --git a/lib/pleroma/config/deprecation_warnings.ex b/lib/pleroma/config/deprecation_warnings.ex index 0a6c724fb..026871c4f 100644 --- a/lib/pleroma/config/deprecation_warnings.ex +++ b/lib/pleroma/config/deprecation_warnings.ex @@ -54,6 +54,7 @@ def warn do check_hellthread_threshold() mrf_user_allowlist() check_old_mrf_config() + check_media_proxy_whitelist_config() end def check_old_mrf_config do @@ -65,7 +66,7 @@ def check_old_mrf_config do move_namespace_and_warn(@mrf_config_map, warning_preface) end - @spec move_namespace_and_warn([config_map()], String.t()) :: :ok + @spec move_namespace_and_warn([config_map()], String.t()) :: :ok | nil def move_namespace_and_warn(config_map, warning_preface) do warning = Enum.reduce(config_map, "", fn @@ -84,4 +85,16 @@ def move_namespace_and_warn(config_map, warning_preface) do Logger.warn(warning_preface <> warning) end end + + @spec check_media_proxy_whitelist_config() :: :ok | nil + def check_media_proxy_whitelist_config do + whitelist = Config.get([:media_proxy, :whitelist]) + + if Enum.any?(whitelist, &(not String.starts_with?(&1, "http"))) do + Logger.warn(""" + !!!DEPRECATION WARNING!!! + Your config is using old format (only domain) for MediaProxy whitelist option. Setting should work for now, but you are advised to change format to scheme with port to prevent possible issues later. + """) + end + end end diff --git a/lib/pleroma/plugs/http_security_plug.ex b/lib/pleroma/plugs/http_security_plug.ex index 7d65cf078..c363b193b 100644 --- a/lib/pleroma/plugs/http_security_plug.ex +++ b/lib/pleroma/plugs/http_security_plug.ex @@ -108,31 +108,48 @@ defp csp_string do |> :erlang.iolist_to_binary() end + defp build_csp_from_whitelist([], acc), do: acc + + defp build_csp_from_whitelist([last], acc) do + [build_csp_param_from_whitelist(last) | acc] + end + + defp build_csp_from_whitelist([head | tail], acc) do + build_csp_from_whitelist(tail, [[?\s, build_csp_param_from_whitelist(head)] | acc]) + end + + # TODO: use `build_csp_param/1` after removing support bare domains for media proxy whitelist + defp build_csp_param_from_whitelist("http" <> _ = url) do + build_csp_param(url) + end + + defp build_csp_param_from_whitelist(url), do: url + defp build_csp_multimedia_source_list do media_proxy_whitelist = - Enum.reduce(Config.get([:media_proxy, :whitelist]), [], fn host, acc -> - add_source(acc, host) - end) - - media_proxy_base_url = build_csp_param(Config.get([:media_proxy, :base_url])) - - upload_base_url = build_csp_param(Config.get([Pleroma.Upload, :base_url])) - - s3_endpoint = build_csp_param(Config.get([Pleroma.Uploaders.S3, :public_endpoint])) + [:media_proxy, :whitelist] + |> Config.get() + |> build_csp_from_whitelist([]) captcha_method = Config.get([Pleroma.Captcha, :method]) + captcha_endpoint = Config.get([captcha_method, :endpoint]) - captcha_endpoint = build_csp_param(Config.get([captcha_method, :endpoint])) + base_endpoints = + [ + [:media_proxy, :base_url], + [Pleroma.Upload, :base_url], + [Pleroma.Uploaders.S3, :public_endpoint] + ] + |> Enum.map(&Config.get/1) - [] - |> add_source(media_proxy_base_url) - |> add_source(upload_base_url) - |> add_source(s3_endpoint) + [captcha_endpoint | base_endpoints] + |> Enum.map(&build_csp_param/1) + |> Enum.reduce([], &add_source(&2, &1)) |> add_source(media_proxy_whitelist) - |> add_source(captcha_endpoint) end defp add_source(iodata, nil), do: iodata + defp add_source(iodata, []), do: iodata defp add_source(iodata, source), do: [[?\s, source] | iodata] defp add_csp_param(csp_iodata, nil), do: csp_iodata diff --git a/lib/pleroma/web/media_proxy/media_proxy.ex b/lib/pleroma/web/media_proxy/media_proxy.ex index 6f35826da..dfbfcea6b 100644 --- a/lib/pleroma/web/media_proxy/media_proxy.ex +++ b/lib/pleroma/web/media_proxy/media_proxy.ex @@ -60,22 +60,28 @@ defp local?(url), do: String.starts_with?(url, Pleroma.Web.base_url()) defp whitelisted?(url) do %{host: domain} = URI.parse(url) - mediaproxy_whitelist = Config.get([:media_proxy, :whitelist]) + mediaproxy_whitelist_domains = + [:media_proxy, :whitelist] + |> Config.get() + |> Enum.map(&maybe_get_domain_from_url/1) - upload_base_url_domain = - if !is_nil(Config.get([Upload, :base_url])) do - [URI.parse(Config.get([Upload, :base_url])).host] + whitelist_domains = + if base_url = Config.get([Upload, :base_url]) do + %{host: base_domain} = URI.parse(base_url) + [base_domain | mediaproxy_whitelist_domains] else - [] + mediaproxy_whitelist_domains end - whitelist = mediaproxy_whitelist ++ upload_base_url_domain - - Enum.any?(whitelist, fn pattern -> - String.equivalent?(domain, pattern) - end) + domain in whitelist_domains end + defp maybe_get_domain_from_url("http" <> _ = url) do + URI.parse(url).host + end + + defp maybe_get_domain_from_url(domain), do: domain + def encode_url(url) do base64 = Base.url_encode64(url, @base64_opts) diff --git a/test/config/deprecation_warnings_test.exs b/test/config/deprecation_warnings_test.exs index 548ee87b0..555661a71 100644 --- a/test/config/deprecation_warnings_test.exs +++ b/test/config/deprecation_warnings_test.exs @@ -54,4 +54,12 @@ test "move_namespace_and_warn/2" do assert Pleroma.Config.get(new_group2) == 2 assert Pleroma.Config.get(new_group3) == 3 end + + test "check_media_proxy_whitelist_config/0" do + clear_config([:media_proxy, :whitelist], ["https://example.com", "example2.com"]) + + assert capture_log(fn -> + Pleroma.Config.DeprecationWarnings.check_media_proxy_whitelist_config() + end) =~ "Your config is using old format (only domain) for MediaProxy whitelist option" + end end diff --git a/test/plugs/http_security_plug_test.exs b/test/plugs/http_security_plug_test.exs index 63b4d3f31..2297e3dac 100644 --- a/test/plugs/http_security_plug_test.exs +++ b/test/plugs/http_security_plug_test.exs @@ -4,17 +4,12 @@ defmodule Pleroma.Web.Plugs.HTTPSecurityPlugTest do use Pleroma.Web.ConnCase + alias Pleroma.Config alias Plug.Conn - setup do: clear_config([:http_securiy, :enabled]) - setup do: clear_config([:http_security, :sts]) - setup do: clear_config([:http_security, :referrer_policy]) - describe "http security enabled" do - setup do - Config.put([:http_security, :enabled], true) - end + setup do: clear_config([:http_security, :enabled], true) test "it sends CSP headers when enabled", %{conn: conn} do conn = get(conn, "/api/v1/instance") @@ -29,7 +24,7 @@ test "it sends CSP headers when enabled", %{conn: conn} do end test "it sends STS headers when enabled", %{conn: conn} do - Config.put([:http_security, :sts], true) + clear_config([:http_security, :sts], true) conn = get(conn, "/api/v1/instance") @@ -38,7 +33,7 @@ test "it sends STS headers when enabled", %{conn: conn} do end test "it does not send STS headers when disabled", %{conn: conn} do - Config.put([:http_security, :sts], false) + clear_config([:http_security, :sts], false) conn = get(conn, "/api/v1/instance") @@ -47,23 +42,19 @@ test "it does not send STS headers when disabled", %{conn: conn} do end test "referrer-policy header reflects configured value", %{conn: conn} do - conn = get(conn, "/api/v1/instance") + resp = get(conn, "/api/v1/instance") - assert Conn.get_resp_header(conn, "referrer-policy") == ["same-origin"] + assert Conn.get_resp_header(resp, "referrer-policy") == ["same-origin"] - Config.put([:http_security, :referrer_policy], "no-referrer") + clear_config([:http_security, :referrer_policy], "no-referrer") - conn = - build_conn() - |> get("/api/v1/instance") + resp = get(conn, "/api/v1/instance") - assert Conn.get_resp_header(conn, "referrer-policy") == ["no-referrer"] + assert Conn.get_resp_header(resp, "referrer-policy") == ["no-referrer"] end - test "it sends `report-to` & `report-uri` CSP response headers" do - conn = - build_conn() - |> get("/api/v1/instance") + test "it sends `report-to` & `report-uri` CSP response headers", %{conn: conn} do + conn = get(conn, "/api/v1/instance") [csp] = Conn.get_resp_header(conn, "content-security-policy") @@ -74,10 +65,67 @@ test "it sends `report-to` & `report-uri` CSP response headers" do assert reply_to == "{\"endpoints\":[{\"url\":\"https://endpoint.com\"}],\"group\":\"csp-endpoint\",\"max-age\":10886400}" end + + test "default values for img-src and media-src with disabled media proxy", %{conn: conn} do + conn = get(conn, "/api/v1/instance") + + [csp] = Conn.get_resp_header(conn, "content-security-policy") + assert csp =~ "media-src 'self' https:;" + assert csp =~ "img-src 'self' data: blob: https:;" + end + end + + describe "img-src and media-src" do + setup do + clear_config([:http_security, :enabled], true) + clear_config([:media_proxy, :enabled], true) + clear_config([:media_proxy, :proxy_opts, :redirect_on_failure], false) + end + + test "media_proxy with base_url", %{conn: conn} do + url = "https://example.com" + clear_config([:media_proxy, :base_url], url) + assert_media_img_src(conn, url) + end + + test "upload with base url", %{conn: conn} do + url = "https://example2.com" + clear_config([Pleroma.Upload, :base_url], url) + assert_media_img_src(conn, url) + end + + test "with S3 public endpoint", %{conn: conn} do + url = "https://example3.com" + clear_config([Pleroma.Uploaders.S3, :public_endpoint], url) + assert_media_img_src(conn, url) + end + + test "with captcha endpoint", %{conn: conn} do + clear_config([Pleroma.Captcha.Mock, :endpoint], "https://captcha.com") + assert_media_img_src(conn, "https://captcha.com") + end + + test "with media_proxy whitelist", %{conn: conn} do + clear_config([:media_proxy, :whitelist], ["https://example6.com", "https://example7.com"]) + assert_media_img_src(conn, "https://example7.com https://example6.com") + end + + # TODO: delete after removing support bare domains for media proxy whitelist + test "with media_proxy bare domains whitelist (deprecated)", %{conn: conn} do + clear_config([:media_proxy, :whitelist], ["example4.com", "example5.com"]) + assert_media_img_src(conn, "example5.com example4.com") + end + end + + defp assert_media_img_src(conn, url) do + conn = get(conn, "/api/v1/instance") + [csp] = Conn.get_resp_header(conn, "content-security-policy") + assert csp =~ "media-src 'self' #{url};" + assert csp =~ "img-src 'self' data: blob: #{url};" end test "it does not send CSP headers when disabled", %{conn: conn} do - Config.put([:http_security, :enabled], false) + clear_config([:http_security, :enabled], false) conn = get(conn, "/api/v1/instance") diff --git a/test/web/media_proxy/media_proxy_controller_test.exs b/test/web/media_proxy/media_proxy_controller_test.exs index d61cef83b..d4db44c63 100644 --- a/test/web/media_proxy/media_proxy_controller_test.exs +++ b/test/web/media_proxy/media_proxy_controller_test.exs @@ -4,82 +4,118 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do use Pleroma.Web.ConnCase - import Mock - alias Pleroma.Config - setup do: clear_config(:media_proxy) - setup do: clear_config([Pleroma.Web.Endpoint, :secret_key_base]) + import Mock + + alias Pleroma.Web.MediaProxy + alias Pleroma.Web.MediaProxy.MediaProxyController + alias Plug.Conn setup do on_exit(fn -> Cachex.clear(:banned_urls_cache) end) end test "it returns 404 when MediaProxy disabled", %{conn: conn} do - Config.put([:media_proxy, :enabled], false) + clear_config([:media_proxy, :enabled], false) - assert %Plug.Conn{ + assert %Conn{ status: 404, resp_body: "Not Found" } = get(conn, "/proxy/hhgfh/eeeee") - assert %Plug.Conn{ + assert %Conn{ status: 404, resp_body: "Not Found" } = get(conn, "/proxy/hhgfh/eeee/fff") end - test "it returns 403 when signature invalidated", %{conn: conn} do - Config.put([:media_proxy, :enabled], true) - Config.put([Pleroma.Web.Endpoint, :secret_key_base], "00000000000") - path = URI.parse(Pleroma.Web.MediaProxy.encode_url("https://google.fn")).path - Config.put([Pleroma.Web.Endpoint, :secret_key_base], "000") + describe "" do + setup do + clear_config([:media_proxy, :enabled], true) + clear_config([Pleroma.Web.Endpoint, :secret_key_base], "00000000000") + [url: MediaProxy.encode_url("https://google.fn/test.png")] + end - assert %Plug.Conn{ - status: 403, - resp_body: "Forbidden" - } = get(conn, path) + test "it returns 403 for invalid signature", %{conn: conn, url: url} do + Pleroma.Config.put([Pleroma.Web.Endpoint, :secret_key_base], "000") + %{path: path} = URI.parse(url) - assert %Plug.Conn{ - status: 403, - resp_body: "Forbidden" - } = get(conn, "/proxy/hhgfh/eeee") + assert %Conn{ + status: 403, + resp_body: "Forbidden" + } = get(conn, path) - assert %Plug.Conn{ - status: 403, - resp_body: "Forbidden" - } = get(conn, "/proxy/hhgfh/eeee/fff") - end + assert %Conn{ + status: 403, + resp_body: "Forbidden" + } = get(conn, "/proxy/hhgfh/eeee") - test "redirects on valid url when filename invalidated", %{conn: conn} do - Config.put([:media_proxy, :enabled], true) - Config.put([Pleroma.Web.Endpoint, :secret_key_base], "00000000000") - url = Pleroma.Web.MediaProxy.encode_url("https://google.fn/test.png") - invalid_url = String.replace(url, "test.png", "test-file.png") - response = get(conn, invalid_url) - assert response.status == 302 - assert redirected_to(response) == url - end + assert %Conn{ + status: 403, + resp_body: "Forbidden" + } = get(conn, "/proxy/hhgfh/eeee/fff") + end - test "it performs ReverseProxy.call when signature valid", %{conn: conn} do - Config.put([:media_proxy, :enabled], true) - Config.put([Pleroma.Web.Endpoint, :secret_key_base], "00000000000") - url = Pleroma.Web.MediaProxy.encode_url("https://google.fn/test.png") + test "redirects on valid url when filename is invalidated", %{conn: conn, url: url} do + invalid_url = String.replace(url, "test.png", "test-file.png") + response = get(conn, invalid_url) + assert response.status == 302 + assert redirected_to(response) == url + end - with_mock Pleroma.ReverseProxy, - call: fn _conn, _url, _opts -> %Plug.Conn{status: :success} end do - assert %Plug.Conn{status: :success} = get(conn, url) + test "it performs ReverseProxy.call with valid signature", %{conn: conn, url: url} do + with_mock Pleroma.ReverseProxy, + call: fn _conn, _url, _opts -> %Conn{status: :success} end do + assert %Conn{status: :success} = get(conn, url) + end + end + + test "it returns 404 when url is in banned_urls cache", %{conn: conn, url: url} do + MediaProxy.put_in_banned_urls("https://google.fn/test.png") + + with_mock Pleroma.ReverseProxy, + call: fn _conn, _url, _opts -> %Conn{status: :success} end do + assert %Conn{status: 404, resp_body: "Not Found"} = get(conn, url) + end end end - test "it returns 404 when url contains in banned_urls cache", %{conn: conn} do - Config.put([:media_proxy, :enabled], true) - Config.put([Pleroma.Web.Endpoint, :secret_key_base], "00000000000") - url = Pleroma.Web.MediaProxy.encode_url("https://google.fn/test.png") - Pleroma.Web.MediaProxy.put_in_banned_urls("https://google.fn/test.png") + describe "filename_matches/3" do + test "preserves the encoded or decoded path" do + assert MediaProxyController.filename_matches( + %{"filename" => "/Hello world.jpg"}, + "/Hello world.jpg", + "http://pleroma.social/Hello world.jpg" + ) == :ok - with_mock Pleroma.ReverseProxy, - call: fn _conn, _url, _opts -> %Plug.Conn{status: :success} end do - assert %Plug.Conn{status: 404, resp_body: "Not Found"} = get(conn, url) + assert MediaProxyController.filename_matches( + %{"filename" => "/Hello%20world.jpg"}, + "/Hello%20world.jpg", + "http://pleroma.social/Hello%20world.jpg" + ) == :ok + + assert MediaProxyController.filename_matches( + %{"filename" => "/my%2Flong%2Furl%2F2019%2F07%2FS.jpg"}, + "/my%2Flong%2Furl%2F2019%2F07%2FS.jpg", + "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg" + ) == :ok + + assert MediaProxyController.filename_matches( + %{"filename" => "/my%2Flong%2Furl%2F2019%2F07%2FS.jp"}, + "/my%2Flong%2Furl%2F2019%2F07%2FS.jp", + "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg" + ) == {:wrong_filename, "my%2Flong%2Furl%2F2019%2F07%2FS.jpg"} + end + + test "encoded url are tried to match for proxy as `conn.request_path` encodes the url" do + # conn.request_path will return encoded url + request_path = "/ANALYSE-DAI-_-LE-STABLECOIN-100-D%C3%89CENTRALIS%C3%89-BQ.jpg" + + assert MediaProxyController.filename_matches( + true, + request_path, + "https://mydomain.com/uploads/2019/07/ANALYSE-DAI-_-LE-STABLECOIN-100-DÉCENTRALISÉ-BQ.jpg" + ) == :ok end end end diff --git a/test/web/media_proxy/media_proxy_test.exs b/test/web/media_proxy/media_proxy_test.exs index 69d2a71a6..72885cfdd 100644 --- a/test/web/media_proxy/media_proxy_test.exs +++ b/test/web/media_proxy/media_proxy_test.exs @@ -5,38 +5,33 @@ defmodule Pleroma.Web.MediaProxyTest do use ExUnit.Case use Pleroma.Tests.Helpers - import Pleroma.Web.MediaProxy - alias Pleroma.Web.MediaProxy.MediaProxyController - setup do: clear_config([:media_proxy, :enabled]) - setup do: clear_config(Pleroma.Upload) + alias Pleroma.Web.Endpoint + alias Pleroma.Web.MediaProxy describe "when enabled" do - setup do - Pleroma.Config.put([:media_proxy, :enabled], true) - :ok - end + setup do: clear_config([:media_proxy, :enabled], true) test "ignores invalid url" do - assert url(nil) == nil - assert url("") == nil + assert MediaProxy.url(nil) == nil + assert MediaProxy.url("") == nil end test "ignores relative url" do - assert url("/local") == "/local" - assert url("/") == "/" + assert MediaProxy.url("/local") == "/local" + assert MediaProxy.url("/") == "/" end test "ignores local url" do - local_url = Pleroma.Web.Endpoint.url() <> "/hello" - local_root = Pleroma.Web.Endpoint.url() - assert url(local_url) == local_url - assert url(local_root) == local_root + local_url = Endpoint.url() <> "/hello" + local_root = Endpoint.url() + assert MediaProxy.url(local_url) == local_url + assert MediaProxy.url(local_root) == local_root end test "encodes and decodes URL" do url = "https://pleroma.soykaf.com/static/logo.png" - encoded = url(url) + encoded = MediaProxy.url(url) assert String.starts_with?( encoded, @@ -50,86 +45,44 @@ test "encodes and decodes URL" do test "encodes and decodes URL without a path" do url = "https://pleroma.soykaf.com" - encoded = url(url) + encoded = MediaProxy.url(url) assert decode_result(encoded) == url end test "encodes and decodes URL without an extension" do url = "https://pleroma.soykaf.com/path/" - encoded = url(url) + encoded = MediaProxy.url(url) assert String.ends_with?(encoded, "/path") assert decode_result(encoded) == url end test "encodes and decodes URL and ignores query params for the path" do url = "https://pleroma.soykaf.com/static/logo.png?93939393939&bunny=true" - encoded = url(url) + encoded = MediaProxy.url(url) assert String.ends_with?(encoded, "/logo.png") assert decode_result(encoded) == url end test "validates signature" do - secret_key_base = Pleroma.Config.get([Pleroma.Web.Endpoint, :secret_key_base]) + encoded = MediaProxy.url("https://pleroma.social") - on_exit(fn -> - Pleroma.Config.put([Pleroma.Web.Endpoint, :secret_key_base], secret_key_base) - end) - - encoded = url("https://pleroma.social") - - Pleroma.Config.put( - [Pleroma.Web.Endpoint, :secret_key_base], + clear_config( + [Endpoint, :secret_key_base], "00000000000000000000000000000000000000000000000" ) [_, "proxy", sig, base64 | _] = URI.parse(encoded).path |> String.split("/") - assert decode_url(sig, base64) == {:error, :invalid_signature} - end - - test "filename_matches preserves the encoded or decoded path" do - assert MediaProxyController.filename_matches( - %{"filename" => "/Hello world.jpg"}, - "/Hello world.jpg", - "http://pleroma.social/Hello world.jpg" - ) == :ok - - assert MediaProxyController.filename_matches( - %{"filename" => "/Hello%20world.jpg"}, - "/Hello%20world.jpg", - "http://pleroma.social/Hello%20world.jpg" - ) == :ok - - assert MediaProxyController.filename_matches( - %{"filename" => "/my%2Flong%2Furl%2F2019%2F07%2FS.jpg"}, - "/my%2Flong%2Furl%2F2019%2F07%2FS.jpg", - "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg" - ) == :ok - - assert MediaProxyController.filename_matches( - %{"filename" => "/my%2Flong%2Furl%2F2019%2F07%2FS.jp"}, - "/my%2Flong%2Furl%2F2019%2F07%2FS.jp", - "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg" - ) == {:wrong_filename, "my%2Flong%2Furl%2F2019%2F07%2FS.jpg"} - end - - test "encoded url are tried to match for proxy as `conn.request_path` encodes the url" do - # conn.request_path will return encoded url - request_path = "/ANALYSE-DAI-_-LE-STABLECOIN-100-D%C3%89CENTRALIS%C3%89-BQ.jpg" - - assert MediaProxyController.filename_matches( - true, - request_path, - "https://mydomain.com/uploads/2019/07/ANALYSE-DAI-_-LE-STABLECOIN-100-DÉCENTRALISÉ-BQ.jpg" - ) == :ok + assert MediaProxy.decode_url(sig, base64) == {:error, :invalid_signature} end test "uses the configured base_url" do - clear_config([:media_proxy, :base_url], "https://cache.pleroma.social") + base_url = "https://cache.pleroma.social" + clear_config([:media_proxy, :base_url], base_url) url = "https://pleroma.soykaf.com/static/logo.png" - encoded = url(url) + encoded = MediaProxy.url(url) - assert String.starts_with?(encoded, Pleroma.Config.get([:media_proxy, :base_url])) + assert String.starts_with?(encoded, base_url) end # Some sites expect ASCII encoded characters in the URL to be preserved even if @@ -140,7 +93,7 @@ test "preserve ASCII encoding" do url = "https://pleroma.com/%20/%21/%22/%23/%24/%25/%26/%27/%28/%29/%2A/%2B/%2C/%2D/%2E/%2F/%30/%31/%32/%33/%34/%35/%36/%37/%38/%39/%3A/%3B/%3C/%3D/%3E/%3F/%40/%41/%42/%43/%44/%45/%46/%47/%48/%49/%4A/%4B/%4C/%4D/%4E/%4F/%50/%51/%52/%53/%54/%55/%56/%57/%58/%59/%5A/%5B/%5C/%5D/%5E/%5F/%60/%61/%62/%63/%64/%65/%66/%67/%68/%69/%6A/%6B/%6C/%6D/%6E/%6F/%70/%71/%72/%73/%74/%75/%76/%77/%78/%79/%7A/%7B/%7C/%7D/%7E/%7F/%80/%81/%82/%83/%84/%85/%86/%87/%88/%89/%8A/%8B/%8C/%8D/%8E/%8F/%90/%91/%92/%93/%94/%95/%96/%97/%98/%99/%9A/%9B/%9C/%9D/%9E/%9F/%C2%A0/%A1/%A2/%A3/%A4/%A5/%A6/%A7/%A8/%A9/%AA/%AB/%AC/%C2%AD/%AE/%AF/%B0/%B1/%B2/%B3/%B4/%B5/%B6/%B7/%B8/%B9/%BA/%BB/%BC/%BD/%BE/%BF/%C0/%C1/%C2/%C3/%C4/%C5/%C6/%C7/%C8/%C9/%CA/%CB/%CC/%CD/%CE/%CF/%D0/%D1/%D2/%D3/%D4/%D5/%D6/%D7/%D8/%D9/%DA/%DB/%DC/%DD/%DE/%DF/%E0/%E1/%E2/%E3/%E4/%E5/%E6/%E7/%E8/%E9/%EA/%EB/%EC/%ED/%EE/%EF/%F0/%F1/%F2/%F3/%F4/%F5/%F6/%F7/%F8/%F9/%FA/%FB/%FC/%FD/%FE/%FF" - encoded = url(url) + encoded = MediaProxy.url(url) assert decode_result(encoded) == url end @@ -151,56 +104,49 @@ test "preserve non-unicode characters per RFC3986" do url = "https://pleroma.com/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-._~:/?#[]@!$&'()*+,;=|^`{}" - encoded = url(url) + encoded = MediaProxy.url(url) assert decode_result(encoded) == url end test "preserve unicode characters" do url = "https://ko.wikipedia.org/wiki/위키백과:대문" - encoded = url(url) + encoded = MediaProxy.url(url) assert decode_result(encoded) == url end end describe "when disabled" do - setup do - enabled = Pleroma.Config.get([:media_proxy, :enabled]) - - if enabled do - Pleroma.Config.put([:media_proxy, :enabled], false) - - on_exit(fn -> - Pleroma.Config.put([:media_proxy, :enabled], enabled) - :ok - end) - end - - :ok - end + setup do: clear_config([:media_proxy, :enabled], false) test "does not encode remote urls" do - assert url("https://google.fr") == "https://google.fr" + assert MediaProxy.url("https://google.fr") == "https://google.fr" end end defp decode_result(encoded) do [_, "proxy", sig, base64 | _] = URI.parse(encoded).path |> String.split("/") - {:ok, decoded} = decode_url(sig, base64) + {:ok, decoded} = MediaProxy.decode_url(sig, base64) decoded end describe "whitelist" do - setup do - Pleroma.Config.put([:media_proxy, :enabled], true) - :ok - end + setup do: clear_config([:media_proxy, :enabled], true) test "mediaproxy whitelist" do - Pleroma.Config.put([:media_proxy, :whitelist], ["google.com", "feld.me"]) + clear_config([:media_proxy, :whitelist], ["https://google.com", "https://feld.me"]) url = "https://feld.me/foo.png" - unencoded = url(url) + unencoded = MediaProxy.url(url) + assert unencoded == url + end + + # TODO: delete after removing support bare domains for media proxy whitelist + test "mediaproxy whitelist bare domains whitelist (deprecated)" do + clear_config([:media_proxy, :whitelist], ["google.com", "feld.me"]) + url = "https://feld.me/foo.png" + + unencoded = MediaProxy.url(url) assert unencoded == url end @@ -211,17 +157,17 @@ test "does not change whitelisted urls" do media_url = "https://mycdn.akamai.com" url = "#{media_url}/static/logo.png" - encoded = url(url) + encoded = MediaProxy.url(url) assert String.starts_with?(encoded, media_url) end test "ensure Pleroma.Upload base_url is always whitelisted" do media_url = "https://media.pleroma.social" - Pleroma.Config.put([Pleroma.Upload, :base_url], media_url) + clear_config([Pleroma.Upload, :base_url], media_url) url = "#{media_url}/static/logo.png" - encoded = url(url) + encoded = MediaProxy.url(url) assert String.starts_with?(encoded, media_url) end From 4347d2de5eb609bbfa1a206a5de5df925d3a0696 Mon Sep 17 00:00:00 2001 From: href Date: Sun, 12 Jul 2020 17:23:33 +0200 Subject: [PATCH 019/236] Config/Docs: Expand behaviour suggestions at runtime --- config/description.exs | 14 ++------- lib/pleroma/application.ex | 1 + lib/pleroma/docs/generator.ex | 31 +++++++++++++------ lib/pleroma/docs/json.ex | 21 ++++++++----- lib/pleroma/docs/markdown.ex | 5 +++ .../controllers/config_controller.ex | 4 +-- test/docs/generator_test.exs | 12 ++----- 7 files changed, 47 insertions(+), 41 deletions(-) diff --git a/config/description.exs b/config/description.exs index b0cc8d527..61d1d055e 100644 --- a/config/description.exs +++ b/config/description.exs @@ -23,18 +23,14 @@ key: :uploader, type: :module, description: "Module which will be used for uploads", - suggestions: [Pleroma.Uploaders.Local, Pleroma.Uploaders.S3] + suggestions: {:list_behaviour_implementations, Pleroma.Uploaders.Uploader} }, %{ key: :filters, type: {:list, :module}, description: "List of filter modules for uploads. Module names are shortened (removed leading `Pleroma.Upload.Filter.` part), but on adding custom module you need to use full name.", - suggestions: - Generator.list_modules_in_dir( - "lib/pleroma/upload/filter", - "Elixir.Pleroma.Upload.Filter." - ) + suggestions: {:list_behaviour_implementations, Pleroma.Upload.Filter} }, %{ key: :link_name, @@ -1404,11 +1400,7 @@ type: [:module, {:list, :module}], description: "A list of MRF policies enabled. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name.", - suggestions: - Generator.list_modules_in_dir( - "lib/pleroma/web/activity_pub/mrf", - "Elixir.Pleroma.Web.ActivityPub.MRF." - ) + suggestions: {:list_behaviour_implementations, Pleroma.Web.ActivityPub.MRF} }, %{ key: :transparency, diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 84f3aa82d..b68a373a4 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -42,6 +42,7 @@ def start(_type, _args) do Pleroma.ApplicationRequirements.verify!() setup_instrumenters() load_custom_modules() + Pleroma.Docs.JSON.compile() adapter = Application.get_env(:tesla, :adapter) diff --git a/lib/pleroma/docs/generator.ex b/lib/pleroma/docs/generator.ex index e0fc8cd02..a671a6278 100644 --- a/lib/pleroma/docs/generator.ex +++ b/lib/pleroma/docs/generator.ex @@ -6,16 +6,21 @@ def process(implementation, descriptions) do implementation.process(descriptions) end - @spec list_modules_in_dir(String.t(), String.t()) :: [module()] - def list_modules_in_dir(dir, start) do - with {:ok, files} <- File.ls(dir) do - files - |> Enum.filter(&String.ends_with?(&1, ".ex")) - |> Enum.map(fn filename -> - module = filename |> String.trim_trailing(".ex") |> Macro.camelize() - String.to_atom(start <> module) - end) - end + @spec list_behaviour_implementations(behaviour :: module()) :: [module()] + def list_behaviour_implementations(behaviour) do + :code.all_loaded() + |> Enum.filter(fn {module, _} -> + # This shouldn't be needed as all modules are expected to have module_info/1, + # but in test enviroments some transient modules `:elixir_compiler_XX` + # are loaded for some reason (where XX is a random integer). + if function_exported?(module, :module_info, 1) do + module.module_info(:attributes) + |> Keyword.get_values(:behaviour) + |> List.flatten() + |> Enum.member?(behaviour) + end + end) + |> Enum.map(fn {module, _} -> module end) end @doc """ @@ -87,6 +92,12 @@ defp humanize(entity) do else: string end + defp format_suggestions({:list_behaviour_implementations, behaviour}) do + behaviour + |> list_behaviour_implementations() + |> format_suggestions() + end + defp format_suggestions([]), do: [] defp format_suggestions([suggestion | tail]) do diff --git a/lib/pleroma/docs/json.ex b/lib/pleroma/docs/json.ex index d1cf1f487..feeb4320e 100644 --- a/lib/pleroma/docs/json.ex +++ b/lib/pleroma/docs/json.ex @@ -1,5 +1,19 @@ defmodule Pleroma.Docs.JSON do @behaviour Pleroma.Docs.Generator + @external_resource "config/description.exs" + @raw_config Pleroma.Config.Loader.read("config/description.exs") + @raw_descriptions @raw_config[:pleroma][:config_description] + @term __MODULE__.Compiled + + @spec compile :: :ok + def compile do + :persistent_term.put(@term, Pleroma.Docs.Generator.convert_to_strings(@raw_descriptions)) + end + + @spec compiled_descriptions :: Map.t() + def compiled_descriptions do + :persistent_term.get(@term) + end @spec process(keyword()) :: {:ok, String.t()} def process(descriptions) do @@ -13,11 +27,4 @@ def process(descriptions) do {:ok, path} end end - - def compile do - with config <- Pleroma.Config.Loader.read("config/description.exs") do - config[:pleroma][:config_description] - |> Pleroma.Docs.Generator.convert_to_strings() - end - end end diff --git a/lib/pleroma/docs/markdown.ex b/lib/pleroma/docs/markdown.ex index 68b106499..da3f20f43 100644 --- a/lib/pleroma/docs/markdown.ex +++ b/lib/pleroma/docs/markdown.ex @@ -68,6 +68,11 @@ defp print_suggestion(file, suggestion, as_list \\ false) do IO.write(file, " #{list_mark}`#{inspect(suggestion)}`\n") end + defp print_suggestions(file, {:list_behaviour_implementations, behaviour}) do + suggestions = Pleroma.Docs.Generator.list_behaviour_implementations(behaviour) + print_suggestions(file, suggestions) + end + defp print_suggestions(_file, nil), do: nil defp print_suggestions(_file, ""), do: nil diff --git a/lib/pleroma/web/admin_api/controllers/config_controller.ex b/lib/pleroma/web/admin_api/controllers/config_controller.ex index 7f60470cb..0df13007f 100644 --- a/lib/pleroma/web/admin_api/controllers/config_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/config_controller.ex @@ -9,8 +9,6 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do alias Pleroma.ConfigDB alias Pleroma.Plugs.OAuthScopesPlug - @descriptions Pleroma.Docs.JSON.compile() - plug(Pleroma.Web.ApiSpec.CastAndValidate) plug(OAuthScopesPlug, %{scopes: ["write"], admin: true} when action == :update) @@ -25,7 +23,7 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.ConfigOperation def descriptions(conn, _params) do - descriptions = Enum.filter(@descriptions, &whitelisted_config?/1) + descriptions = Enum.filter(Pleroma.Docs.JSON.compiled_descriptions(), &whitelisted_config?/1) json(conn, descriptions) end diff --git a/test/docs/generator_test.exs b/test/docs/generator_test.exs index 9c9f4357b..b32918a69 100644 --- a/test/docs/generator_test.exs +++ b/test/docs/generator_test.exs @@ -13,21 +13,13 @@ defmodule Pleroma.Docs.GeneratorTest do key: :uploader, type: :module, description: "", - suggestions: - Generator.list_modules_in_dir( - "lib/pleroma/upload/filter", - "Elixir.Pleroma.Upload.Filter." - ) + suggestions: {:list_behaviour_implementations, Pleroma.Upload.Filter} }, %{ key: :filters, type: {:list, :module}, description: "", - suggestions: - Generator.list_modules_in_dir( - "lib/pleroma/web/activity_pub/mrf", - "Elixir.Pleroma.Web.ActivityPub.MRF." - ) + suggestions: {:list_behaviour_implementations, Pleroma.Web.ActivityPub.MRF} }, %{ key: Pleroma.Upload, From 133004e22d74e7cdfd13a69f88b509b395985a5d Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Sun, 12 Jul 2020 10:38:07 -0500 Subject: [PATCH 020/236] Improve database config migration and add documentation --- docs/configuration/howto_database_config.md | 127 ++++++++++++++++++++ lib/mix/tasks/pleroma/config.ex | 5 +- 2 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 docs/configuration/howto_database_config.md diff --git a/docs/configuration/howto_database_config.md b/docs/configuration/howto_database_config.md new file mode 100644 index 000000000..b39b75bd4 --- /dev/null +++ b/docs/configuration/howto_database_config.md @@ -0,0 +1,127 @@ +# How to activate Pleroma in-database configuration +## Explanation + +The configuration of Pleroma has traditionally been managed with a config file, e.g. `config/prod.secret.exs`. This method requires a restart of the application for any configuration changes to take effect. We have made it possible to control most settings in the AdminFE interface after running a migration script. + +## Migration to database config + +1. Stop your Pleroma instance and edit your Pleroma config to enable database configuration: + + ``` + config :pleroma, configurable_from_database: true + ``` + +2. Run the mix task to migrate to the database. You'll receive some debugging output and a few messages informing you of what happened. + + ``` + $ mix pleroma.config migrate_to_db + + 10:04:34.155 [debug] QUERY OK source="config" db=1.6ms decode=2.0ms queue=33.5ms idle=0.0ms +SELECT c0."id", c0."key", c0."group", c0."value", c0."inserted_at", c0."updated_at" FROM "config" AS c0 [] +Migrating settings from file: /home/pleroma/config/dev.secret.exs + + 10:04:34.240 [debug] QUERY OK db=4.5ms queue=0.3ms idle=92.2ms +TRUNCATE config; [] + + 10:04:34.244 [debug] QUERY OK db=2.8ms queue=0.3ms idle=97.2ms +ALTER SEQUENCE config_id_seq RESTART; [] + + 10:04:34.256 [debug] QUERY OK source="config" db=0.8ms queue=1.4ms idle=109.8ms +SELECT c0."id", c0."key", c0."group", c0."value", c0."inserted_at", c0."updated_at" FROM "config" AS c0 WHERE ((c0."group" = $1) AND (c0."key" = $2)) [":pleroma", ":instance"] + + 10:04:34.292 [debug] QUERY OK db=2.6ms queue=1.7ms idle=137.7ms +INSERT INTO "config" ("group","key","value","inserted_at","updated_at") VALUES ($1,$2,$3,$4,$5) RETURNING "id" [":pleroma", ":instance", <<131, 108, 0, 0, 0, 1, 104, 2, 100, 0, 4, 110, 97, 109, 101, 109, 0, 0, 0, 7, 66, 108, 101, 114, 111, 109, 97, 106>>, ~N[2020-07-12 15:04:34], ~N[2020-07-12 15:04:34]] + Settings for key instance migrated. + Settings for group :pleroma migrated. + ``` + +3. It is recommended to backup your config file now. + ``` + cp config/dev.secret.exs config/dev.secret.exs.orig + ``` + +4. Now you can edit your config file and strip it down to the only settings which are not possible to control in the database. e.g., the Postgres and webserver (Endpoint) settings cannot be controlled in the database because the application needs the settings to start up and access the database. + + ⚠️ **THIS IS NOT REQUIRED** + + Any settings in the database will override those in the config file, but you may find it less confusing if the setting is only declared in one place. + + A non-exhaustive list of settings that are only possible in the config file include the following: + +* config :pleroma, Pleroma.Web.Endpoint +* config :pleroma, Pleroma.Repo +* config :pleroma, configurable_from_database +* config :pleroma, :database, rum_enabled +* config :pleroma, :connections_pool + +Here is an example of a server config stripped down after migration: + +``` +use Mix.Config + +config :pleroma, Pleroma.Web.Endpoint, + url: [host: "cool.pleroma.site", scheme: "https", port: 443] + + +config :pleroma, Pleroma.Repo, + adapter: Ecto.Adapters.Postgres, + username: "pleroma", + password: "MySecretPassword", + database: "pleroma_prod", + hostname: "localhost" + +config :pleroma, configurable_from_database: true +``` + +5. Start your instance back up and you can now access the Settings tab in AdminFE. + + +## Reverting back from database config + +1. Stop your Pleroma instance. + +2. Run the mix task to migrate back from the database. You'll receive some debugging output and a few messages informing you of what happened. + + ``` + $ mix pleroma.config migrate_from_db + + 10:26:30.593 [debug] QUERY OK source="config" db=9.8ms decode=1.2ms queue=26.0ms idle=0.0ms +SELECT c0."id", c0."key", c0."group", c0."value", c0."inserted_at", c0."updated_at" FROM "config" AS c0 [] + + 10:26:30.659 [debug] QUERY OK source="config" db=1.1ms idle=80.7ms +SELECT c0."id", c0."key", c0."group", c0."value", c0."inserted_at", c0."updated_at" FROM "config" AS c0 [] +Database configuration settings have been saved to config/dev.exported_from_db.secret.exs +``` + +3. The in-database configuration still exists, but it will not be used if you remove `config :pleroma, configurable_from_database: true` from your config. + +## Debugging + +### Clearing database config +You can clear the database config by truncating the `config` table in the database. e.g., + +``` +psql -d pleroma_dev +pleroma_dev=# TRUNCATE config; +TRUNCATE TABLE +``` + +Additionally, every time you migrate the configuration to the database the config table is automatically truncated to ensure a clean migration. + +### Manually removing a setting +If you encounter a situation where the server cannot run properly because of an invalid setting in the database and this is preventing you from accessing AdminFE, you can manually remove the offending setting if you know which one it is. + +e.g., here is an example showing a minimal configuration in the database. Only the `config :pleroma, :instance` settings are in the table: + +``` +psql -d pleroma_dev +pleroma_dev=# select * from config; + id | key | value | inserted_at | updated_at | group +----+-----------+------------------------------------------------------------+---------------------+---------------------+---------- + 1 | :instance | \x836c0000000168026400046e616d656d00000007426c65726f6d616a | 2020-07-12 15:33:29 | 2020-07-12 15:33:29 | :pleroma +(1 row) +pleroma_dev=# delete from config where key = ':instance'; +DELETE 1 +``` + +Now the `config :pleroma, :instance` settings have been removed from the database. \ No newline at end of file diff --git a/lib/mix/tasks/pleroma/config.ex b/lib/mix/tasks/pleroma/config.ex index d5129d410..343438add 100644 --- a/lib/mix/tasks/pleroma/config.ex +++ b/lib/mix/tasks/pleroma/config.ex @@ -83,7 +83,7 @@ defp create(group, settings) do defp migrate_from_db(opts) do if Pleroma.Config.get([:configurable_from_database]) do - env = opts[:env] || "prod" + env = Mix.env() config_path = if Pleroma.Config.get(:release) do @@ -105,6 +105,7 @@ defp migrate_from_db(opts) do :ok = File.close(file) System.cmd("mix", ["format", config_path]) + shell_info("Database configuration settings have been exported to config/#{env}.exported_from_db.secret.exs") else migration_error() end @@ -112,7 +113,7 @@ defp migrate_from_db(opts) do defp migration_error do shell_error( - "Migration is not allowed in config. You can change this behavior by setting `configurable_from_database` to true." + "Migration is not allowed in config. You can change this behavior by setting `config :pleroma, configurable_from_database: true`" ) end From 0871e8b8feb9f88a67ce12f8780691f41dae79a2 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Sun, 12 Jul 2020 10:43:24 -0500 Subject: [PATCH 021/236] Make the query more precise --- docs/configuration/howto_database_config.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/configuration/howto_database_config.md b/docs/configuration/howto_database_config.md index b39b75bd4..e4ddc190c 100644 --- a/docs/configuration/howto_database_config.md +++ b/docs/configuration/howto_database_config.md @@ -120,8 +120,8 @@ pleroma_dev=# select * from config; ----+-----------+------------------------------------------------------------+---------------------+---------------------+---------- 1 | :instance | \x836c0000000168026400046e616d656d00000007426c65726f6d616a | 2020-07-12 15:33:29 | 2020-07-12 15:33:29 | :pleroma (1 row) -pleroma_dev=# delete from config where key = ':instance'; +pleroma_dev=# delete from config where key = ':instance' and group = ':pleroma'; DELETE 1 ``` -Now the `config :pleroma, :instance` settings have been removed from the database. \ No newline at end of file +Now the `config :pleroma, :instance` settings have been removed from the database. From 46b123cded5f572851652cecedcce22aa87b97e7 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Sun, 12 Jul 2020 10:59:12 -0500 Subject: [PATCH 022/236] Still allow passing the arg, but fallback to MIX_ENV --- lib/mix/tasks/pleroma/config.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mix/tasks/pleroma/config.ex b/lib/mix/tasks/pleroma/config.ex index 343438add..38c6a6f1d 100644 --- a/lib/mix/tasks/pleroma/config.ex +++ b/lib/mix/tasks/pleroma/config.ex @@ -83,7 +83,7 @@ defp create(group, settings) do defp migrate_from_db(opts) do if Pleroma.Config.get([:configurable_from_database]) do - env = Mix.env() + env = opts[:env] || Mix.env() config_path = if Pleroma.Config.get(:release) do From a62f17da17fbebf817796b0278060abe2829c903 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 12 Jul 2020 19:11:30 -0500 Subject: [PATCH 023/236] Add `approval_pending` field to User --- lib/pleroma/user.ex | 2 ++ .../20200712234852_add_approval_pending_to_users.exs | 9 +++++++++ test/user_test.exs | 5 +++++ 3 files changed, 16 insertions(+) create mode 100644 priv/repo/migrations/20200712234852_add_approval_pending_to_users.exs diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index b9989f901..25c63fc44 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -106,6 +106,7 @@ defmodule Pleroma.User do field(:locked, :boolean, default: false) field(:confirmation_pending, :boolean, default: false) field(:password_reset_pending, :boolean, default: false) + field(:approval_pending, :boolean, default: false) field(:confirmation_token, :string, default: nil) field(:default_scope, :string, default: "public") field(:domain_blocks, {:array, :string}, default: []) @@ -262,6 +263,7 @@ def binary_id(%User{} = user), do: binary_id(user.id) @spec account_status(User.t()) :: account_status() def account_status(%User{deactivated: true}), do: :deactivated def account_status(%User{password_reset_pending: true}), do: :password_reset_pending + def account_status(%User{approval_pending: true}), do: :approval_pending def account_status(%User{confirmation_pending: true}) do if Config.get([:instance, :account_activation_required]) do diff --git a/priv/repo/migrations/20200712234852_add_approval_pending_to_users.exs b/priv/repo/migrations/20200712234852_add_approval_pending_to_users.exs new file mode 100644 index 000000000..f7eb8179b --- /dev/null +++ b/priv/repo/migrations/20200712234852_add_approval_pending_to_users.exs @@ -0,0 +1,9 @@ +defmodule Pleroma.Repo.Migrations.AddApprovalPendingToUsers do + use Ecto.Migration + + def change do + alter table(:users) do + add(:approval_pending, :boolean) + end + end +end diff --git a/test/user_test.exs b/test/user_test.exs index 9788e09d9..040f532fe 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -1342,6 +1342,11 @@ test "returns :deactivated for deactivated user" do user = insert(:user, local: true, confirmation_pending: false, deactivated: true) assert User.account_status(user) == :deactivated end + + test "returns :approval_pending for unapproved user" do + user = insert(:user, local: true, confirmation_pending: false, approval_pending: true) + assert User.account_status(user) == :approval_pending + end end describe "superuser?/1" do From 51ab8d0128970dd7458e93578acb36c20b1c185c Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 12 Jul 2020 20:14:57 -0500 Subject: [PATCH 024/236] Add `account_approval_required` instance setting --- config/config.exs | 1 + config/description.exs | 5 +++++ docs/configuration/cheatsheet.md | 1 + lib/pleroma/web/mastodon_api/views/instance_view.ex | 1 + .../mastodon_api/controllers/instance_controller_test.exs | 1 + 5 files changed, 9 insertions(+) diff --git a/config/config.exs b/config/config.exs index 6fc84efc2..791740663 100644 --- a/config/config.exs +++ b/config/config.exs @@ -205,6 +205,7 @@ registrations_open: true, invites_enabled: false, account_activation_required: false, + account_approval_required: false, federating: true, federation_incoming_replies_max_depth: 100, federation_reachability_timeout_days: 7, diff --git a/config/description.exs b/config/description.exs index b0cc8d527..e57379dee 100644 --- a/config/description.exs +++ b/config/description.exs @@ -665,6 +665,11 @@ type: :boolean, description: "Require users to confirm their emails before signing in" }, + %{ + key: :account_approval_required, + type: :boolean, + description: "Require users to be manually approved by an admin before signing in" + }, %{ key: :federating, type: :boolean, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index f796330f1..94389152e 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -33,6 +33,7 @@ To add configuration to your config file, you can copy it from the base config. * `registrations_open`: Enable registrations for anyone, invitations can be enabled when false. * `invites_enabled`: Enable user invitations for admins (depends on `registrations_open: false`). * `account_activation_required`: Require users to confirm their emails before signing in. +* `account_approval_required`: Require users to be manually approved by an admin before signing in. * `federating`: Enable federation with other instances. * `federation_incoming_replies_max_depth`: Max. depth of reply-to activities fetching on incoming federation, to prevent out-of-memory situations while fetching very long threads. If set to `nil`, threads of any depth will be fetched. Lower this value if you experience out-of-memory crashes. * `federation_reachability_timeout_days`: Timeout (in days) of each external federation target being unreachable prior to pausing federating to it. diff --git a/lib/pleroma/web/mastodon_api/views/instance_view.ex b/lib/pleroma/web/mastodon_api/views/instance_view.ex index 5deb0d7ed..243067a73 100644 --- a/lib/pleroma/web/mastodon_api/views/instance_view.ex +++ b/lib/pleroma/web/mastodon_api/views/instance_view.ex @@ -39,6 +39,7 @@ def render("show.json", _) do pleroma: %{ metadata: %{ account_activation_required: Keyword.get(instance, :account_activation_required), + account_approval_required: Keyword.get(instance, :account_approval_required), features: features(), federation: federation(), fields_limits: fields_limits() diff --git a/test/web/mastodon_api/controllers/instance_controller_test.exs b/test/web/mastodon_api/controllers/instance_controller_test.exs index cc880d82c..8a4183283 100644 --- a/test/web/mastodon_api/controllers/instance_controller_test.exs +++ b/test/web/mastodon_api/controllers/instance_controller_test.exs @@ -38,6 +38,7 @@ test "get instance information", %{conn: conn} do } = result assert result["pleroma"]["metadata"]["account_activation_required"] != nil + assert result["pleroma"]["metadata"]["account_approval_required"] != nil assert result["pleroma"]["metadata"]["features"] assert result["pleroma"]["metadata"]["federation"] assert result["pleroma"]["metadata"]["fields_limits"] From e4e557781877c7c3e4f6197cc52963025485dbb3 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 12 Jul 2020 20:15:27 -0500 Subject: [PATCH 025/236] Prevent unapproved users from logging in --- lib/pleroma/web/oauth/oauth_controller.ex | 10 ++++++++ test/web/oauth/oauth_controller_test.exs | 30 ++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/oauth/oauth_controller.ex b/lib/pleroma/web/oauth/oauth_controller.ex index 7683589cf..61fe81d33 100644 --- a/lib/pleroma/web/oauth/oauth_controller.ex +++ b/lib/pleroma/web/oauth/oauth_controller.ex @@ -337,6 +337,16 @@ defp handle_token_exchange_error(%Plug.Conn{} = conn, {:account_status, :confirm ) end + defp handle_token_exchange_error(%Plug.Conn{} = conn, {:account_status, :approval_pending}) do + render_error( + conn, + :forbidden, + "Your account is awaiting approval.", + %{}, + "awaiting_approval" + ) + end + defp handle_token_exchange_error(%Plug.Conn{} = conn, _error) do render_invalid_credentials_error(conn) end diff --git a/test/web/oauth/oauth_controller_test.exs b/test/web/oauth/oauth_controller_test.exs index d389e4ce0..ec5b78750 100644 --- a/test/web/oauth/oauth_controller_test.exs +++ b/test/web/oauth/oauth_controller_test.exs @@ -19,7 +19,10 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do key: "_test", signing_salt: "cooldude" ] - setup do: clear_config([:instance, :account_activation_required]) + setup do + clear_config([:instance, :account_activation_required]) + clear_config([:instance, :account_approval_required]) + end describe "in OAuth consumer mode, " do setup do @@ -995,6 +998,31 @@ test "rejects token exchange for user with confirmation_pending set to true" do } end + test "rejects token exchange for valid credentials belonging to an unapproved user and approval is required" do + Pleroma.Config.put([:instance, :account_approval_required], true) + password = "testpassword" + + user = insert(:user, password_hash: Pbkdf2.hash_pwd_salt(password), approval_pending: true) + + refute Pleroma.User.account_status(user) == :active + + app = insert(:oauth_app) + + conn = + build_conn() + |> post("/oauth/token", %{ + "grant_type" => "password", + "username" => user.nickname, + "password" => password, + "client_id" => app.client_id, + "client_secret" => app.client_secret + }) + + assert resp = json_response(conn, 403) + assert %{"error" => _} = resp + refute Map.has_key?(resp, "access_token") + end + test "rejects an invalid authorization code" do app = insert(:oauth_app) From bcfd38c8f3ecd2620bae7fc756ffc3f4bbe2b89e Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 12 Jul 2020 21:31:13 -0500 Subject: [PATCH 026/236] Make a user unapproved when registering with `account_approval_required` on --- lib/pleroma/user.ex | 14 ++++++++++++++ test/user_test.exs | 21 +++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 25c63fc44..e84900c4f 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -634,8 +634,16 @@ def register_changeset(struct, params \\ %{}, opts \\ []) do opts[:need_confirmation] end + need_approval? = + if is_nil(opts[:need_approval]) do + Config.get([:instance, :account_approval_required]) + else + opts[:need_approval] + end + struct |> confirmation_changeset(need_confirmation: need_confirmation?) + |> approval_changeset(need_approval: need_approval?) |> cast(params, [ :bio, :raw_bio, @@ -2145,6 +2153,12 @@ def confirmation_changeset(user, need_confirmation: need_confirmation?) do cast(user, params, [:confirmation_pending, :confirmation_token]) end + @spec approval_changeset(User.t(), keyword()) :: Changeset.t() + def approval_changeset(user, need_approval: need_approval?) do + params = if need_approval?, do: %{approval_pending: true}, else: %{approval_pending: false} + cast(user, params, [:approval_pending]) + end + def add_pinnned_activity(user, %Pleroma.Activity{id: id}) do if id not in user.pinned_activities do max_pinned_statuses = Config.get([:instance, :max_pinned_statuses], 0) diff --git a/test/user_test.exs b/test/user_test.exs index 040f532fe..e57453982 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -516,6 +516,27 @@ test "it creates confirmed user if :confirmed option is given" do end end + describe "user registration, with :account_approval_required" do + @full_user_data %{ + bio: "A guy", + name: "my name", + nickname: "nick", + password: "test", + password_confirmation: "test", + email: "email@example.com" + } + setup do: clear_config([:instance, :account_approval_required], true) + + test "it creates unapproved user" do + changeset = User.register_changeset(%User{}, @full_user_data) + assert changeset.valid? + + {:ok, user} = Repo.insert(changeset) + + assert user.approval_pending + end + end + describe "get_or_fetch/1" do test "gets an existing user by nickname" do user = insert(:user) From 2aac92e9e05ba76903795cdddea652d7e444e701 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Mon, 13 Jul 2020 14:27:25 +0200 Subject: [PATCH 027/236] Transmogrifier.fix_in_reply_to/2: Use warn for non-fatal fail to get replied-to post --- lib/pleroma/web/activity_pub/transmogrifier.ex | 2 +- test/web/activity_pub/transmogrifier_test.exs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 884646ceb..168422c93 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -176,7 +176,7 @@ def fix_in_reply_to(%{"inReplyTo" => in_reply_to} = object, options) |> Map.drop(["conversation"]) else e -> - Logger.error("Couldn't fetch #{inspect(in_reply_to_id)}, error: #{inspect(e)}") + Logger.warn("Couldn't fetch #{inspect(in_reply_to_id)}, error: #{inspect(e)}") object end else diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index f7b7d1a9f..fd8e7f24f 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -160,7 +160,7 @@ test "it does not crash if the object in inReplyTo can't be fetched" do assert capture_log(fn -> {:ok, _returned_activity} = Transmogrifier.handle_incoming(data) - end) =~ "[error] Couldn't fetch \"https://404.site/whatever\", error: nil" + end) =~ "[warn] Couldn't fetch \"https://404.site/whatever\", error: nil" end test "it works for incoming notices" do From ce243b107ffaf79fee0377998320d90c30dd77e0 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Mon, 13 Jul 2020 14:23:03 +0200 Subject: [PATCH 028/236] Use Logger.info for {:reject, reason} --- lib/pleroma/object/fetcher.ex | 4 ++++ lib/pleroma/web/activity_pub/activity_pub.ex | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/lib/pleroma/object/fetcher.ex b/lib/pleroma/object/fetcher.ex index 3e2949ee2..e74c87269 100644 --- a/lib/pleroma/object/fetcher.ex +++ b/lib/pleroma/object/fetcher.ex @@ -124,6 +124,10 @@ def fetch_object_from_id!(id, options \\ []) do {:error, "Object has been deleted"} -> nil + {:reject, reason} -> + Logger.info("Rejected #{id} while fetching: #{inspect(reason)}") + nil + e -> Logger.error("Error while fetching #{id}: #{inspect(e)}") nil diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index bc7b5d95a..a4db1d87c 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1370,6 +1370,10 @@ def fetch_and_prepare_user_from_ap_id(ap_id) do Logger.debug("Could not decode user at fetch #{ap_id}, #{inspect(e)}") {:error, e} + {:error, {:reject, reason} = e} -> + Logger.info("Rejected user #{ap_id}: #{inspect(reason)}") + {:error, e} + {:error, e} -> Logger.error("Could not decode user at fetch #{ap_id}, #{inspect(e)}") {:error, e} From e1908a5270d7b060238c9bc8bcd2808c705c27d9 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Mon, 13 Jul 2020 08:39:56 -0500 Subject: [PATCH 029/236] Pick up env for both source and OTP installs --- lib/mix/tasks/pleroma/config.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mix/tasks/pleroma/config.ex b/lib/mix/tasks/pleroma/config.ex index 38c6a6f1d..7e2164181 100644 --- a/lib/mix/tasks/pleroma/config.ex +++ b/lib/mix/tasks/pleroma/config.ex @@ -83,7 +83,7 @@ defp create(group, settings) do defp migrate_from_db(opts) do if Pleroma.Config.get([:configurable_from_database]) do - env = opts[:env] || Mix.env() + env = opts[:env] || Pleroma.Config.get(:env) config_path = if Pleroma.Config.get(:release) do From 442fe3cd45edceda746e8c62056670c4d698aa0f Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Mon, 13 Jul 2020 09:56:05 -0500 Subject: [PATCH 030/236] Show examples for both OTP and source --- docs/configuration/howto_database_config.md | 24 +++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docs/configuration/howto_database_config.md b/docs/configuration/howto_database_config.md index e4ddc190c..ded9a2eb3 100644 --- a/docs/configuration/howto_database_config.md +++ b/docs/configuration/howto_database_config.md @@ -13,9 +13,21 @@ The configuration of Pleroma has traditionally been managed with a config file, 2. Run the mix task to migrate to the database. You'll receive some debugging output and a few messages informing you of what happened. + **Source:** + ``` $ mix pleroma.config migrate_to_db + ``` + or + + **OTP:** + + ``` + $ ./bin/pleroma_ctl config migrate_to_db + ``` + + ``` 10:04:34.155 [debug] QUERY OK source="config" db=1.6ms decode=2.0ms queue=33.5ms idle=0.0ms SELECT c0."id", c0."key", c0."group", c0."value", c0."inserted_at", c0."updated_at" FROM "config" AS c0 [] Migrating settings from file: /home/pleroma/config/dev.secret.exs @@ -82,9 +94,21 @@ config :pleroma, configurable_from_database: true 2. Run the mix task to migrate back from the database. You'll receive some debugging output and a few messages informing you of what happened. + **Source:** + ``` $ mix pleroma.config migrate_from_db + ``` + + or + + **OTP:** + + ``` + $ ./bin/pleroma_ctl config migrate_from_db + ``` + ``` 10:26:30.593 [debug] QUERY OK source="config" db=9.8ms decode=1.2ms queue=26.0ms idle=0.0ms SELECT c0."id", c0."key", c0."group", c0."value", c0."inserted_at", c0."updated_at" FROM "config" AS c0 [] From d1cd3f4ec06214dc85e11dca30f193ee7d093488 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Mon, 13 Jul 2020 10:32:17 -0500 Subject: [PATCH 031/236] Lint --- lib/mix/tasks/pleroma/config.ex | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/mix/tasks/pleroma/config.ex b/lib/mix/tasks/pleroma/config.ex index 7e2164181..904c5a74b 100644 --- a/lib/mix/tasks/pleroma/config.ex +++ b/lib/mix/tasks/pleroma/config.ex @@ -105,7 +105,10 @@ defp migrate_from_db(opts) do :ok = File.close(file) System.cmd("mix", ["format", config_path]) - shell_info("Database configuration settings have been exported to config/#{env}.exported_from_db.secret.exs") + + shell_info( + "Database configuration settings have been exported to config/#{env}.exported_from_db.secret.exs" + ) else migration_error() end From b221b640a2dd443e3c2274b16ed5b62566329d09 Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 13 Jul 2020 22:19:13 +0300 Subject: [PATCH 032/236] Transmogrifier: filtering weirdness in address fields --- .../web/activity_pub/transmogrifier.ex | 14 ++++++----- test/web/activity_pub/transmogrifier_test.exs | 23 +++++++++++++++++++ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 884646ceb..f37bcab3e 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -62,15 +62,17 @@ def fix_summary(%{"summary" => _} = object) do def fix_summary(object), do: Map.put(object, "summary", "") def fix_addressing_list(map, field) do - cond do - is_binary(map[field]) -> - Map.put(map, field, [map[field]]) + addrs = map[field] - is_nil(map[field]) -> - Map.put(map, field, []) + cond do + is_list(addrs) -> + Map.put(map, field, Enum.filter(addrs, &is_binary/1)) + + is_binary(addrs) -> + Map.put(map, field, [addrs]) true -> - map + Map.put(map, field, []) end end diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index f7b7d1a9f..248b410c6 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -774,6 +774,29 @@ test "it correctly processes messages with non-array cc field" do assert [user.follower_address] == activity.data["to"] end + test "it correctly processes messages with weirdness in address fields" do + user = insert(:user) + + message = %{ + "@context" => "https://www.w3.org/ns/activitystreams", + "to" => [nil, user.follower_address], + "cc" => ["https://www.w3.org/ns/activitystreams#Public", ["¿"]], + "type" => "Create", + "object" => %{ + "content" => "…", + "type" => "Note", + "attributedTo" => user.ap_id, + "inReplyTo" => nil + }, + "actor" => user.ap_id + } + + assert {:ok, activity} = Transmogrifier.handle_incoming(message) + + assert ["https://www.w3.org/ns/activitystreams#Public"] == activity.data["cc"] + assert [user.follower_address] == activity.data["to"] + end + test "it accepts Move activities" do old_user = insert(:user) new_user = insert(:user) From 5ddf0415c4fd6021422eb38b4625c01ad27582c5 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 14 Jul 2020 00:22:12 -0500 Subject: [PATCH 033/236] Accept `reason` in POST /api/v1/accounts and store in DB --- lib/pleroma/user.ex | 4 +- lib/pleroma/web/twitter_api/twitter_api.ex | 1 + ...43918_add_registration_reason_to_users.exs | 9 +++ .../controllers/account_controller_test.exs | 70 +++++++++++++++++++ 4 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 priv/repo/migrations/20200714043918_add_registration_reason_to_users.exs diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index e84900c4f..51ccf6ffa 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -107,6 +107,7 @@ defmodule Pleroma.User do field(:confirmation_pending, :boolean, default: false) field(:password_reset_pending, :boolean, default: false) field(:approval_pending, :boolean, default: false) + field(:registration_reason, :string, default: nil) field(:confirmation_token, :string, default: nil) field(:default_scope, :string, default: "public") field(:domain_blocks, {:array, :string}, default: []) @@ -653,7 +654,8 @@ def register_changeset(struct, params \\ %{}, opts \\ []) do :password, :password_confirmation, :emoji, - :accepts_chat_messages + :accepts_chat_messages, + :registration_reason ]) |> validate_required([:name, :nickname, :password, :password_confirmation]) |> validate_confirmation(:password) diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index 5cfb385ac..4ff021b82 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -19,6 +19,7 @@ def register_user(params, opts \\ []) do |> Map.put(:nickname, params[:username]) |> Map.put(:name, Map.get(params, :fullname, params[:username])) |> Map.put(:password_confirmation, params[:password]) + |> Map.put(:registration_reason, params[:reason]) if Pleroma.Config.get([:instance, :registrations_open]) do create_user(params, opts) diff --git a/priv/repo/migrations/20200714043918_add_registration_reason_to_users.exs b/priv/repo/migrations/20200714043918_add_registration_reason_to_users.exs new file mode 100644 index 000000000..fa02fded4 --- /dev/null +++ b/priv/repo/migrations/20200714043918_add_registration_reason_to_users.exs @@ -0,0 +1,9 @@ +defmodule Pleroma.Repo.Migrations.AddRegistrationReasonToUsers do + use Ecto.Migration + + def change do + alter table(:users) do + add(:registration_reason, :string) + 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 9c7b5e9b2..28d21371a 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -885,6 +885,7 @@ test "blocking / unblocking a user" do end setup do: clear_config([:instance, :account_activation_required]) + setup do: clear_config([:instance, :account_approval_required]) test "Account registration via Application", %{conn: conn} do conn = @@ -949,6 +950,75 @@ test "Account registration via Application", %{conn: conn} do assert token_from_db.user.confirmation_pending end + test "Account registration via app with account_approval_required", %{conn: conn} do + Pleroma.Config.put([:instance, :account_approval_required], true) + + conn = + 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" + }) + + 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", %{ + grant_type: "client_credentials", + client_id: client_id, + client_secret: client_secret + }) + + assert %{"access_token" => token, "refresh_token" => refresh, "scope" => scope} = + json_response(conn, 200) + + assert token + token_from_db = Repo.get_by(Token, token: token) + assert token_from_db + assert refresh + assert scope == "read write follow" + + conn = + build_conn() + |> put_req_header("content-type", "multipart/form-data") + |> put_req_header("authorization", "Bearer " <> token) + |> post("/api/v1/accounts", %{ + username: "lain", + email: "lain@example.org", + password: "PlzDontHackLain", + bio: "Test Bio", + agreement: true, + reason: "I'm a cool dude, bro" + }) + + %{ + "access_token" => token, + "created_at" => _created_at, + "scope" => ^scope, + "token_type" => "Bearer" + } = json_response_and_validate_schema(conn, 200) + + token_from_db = Repo.get_by(Token, token: token) + assert token_from_db + token_from_db = Repo.preload(token_from_db, :user) + assert token_from_db.user + + assert token_from_db.user.confirmation_pending + assert token_from_db.user.approval_pending + + assert token_from_db.user.registration_reason == "I'm a cool dude, bro" + end + test "returns error when user already registred", %{conn: conn, valid_params: valid_params} do _user = insert(:user, email: "lain@example.org") app_token = insert(:oauth_token, user: nil) From 3062f86613696419f4716a53c3272ceef1b2b119 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Tue, 14 Jul 2020 07:31:21 +0300 Subject: [PATCH 034/236] added generated `pleroma.env` --- .gitignore | 2 + .../CLI_tasks/release_environments.md | 9 +++ docs/installation/otp_en.md | 7 +- installation/pleroma.service | 2 + lib/mix/tasks/pleroma/release_env.ex | 64 +++++++++++++++++++ test/tasks/release_env_test.exs | 30 +++++++++ 6 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 docs/administration/CLI_tasks/release_environments.md create mode 100644 lib/mix/tasks/pleroma/release_env.ex create mode 100644 test/tasks/release_env_test.exs diff --git a/.gitignore b/.gitignore index 599b52b9e..6ae21e914 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,8 @@ erl_crash.dump # variables. /config/*.secret.exs /config/generated_config.exs +/config/*.env + # Database setup file, some may forget to delete it /config/setup_db.psql diff --git a/docs/administration/CLI_tasks/release_environments.md b/docs/administration/CLI_tasks/release_environments.md new file mode 100644 index 000000000..36ab43864 --- /dev/null +++ b/docs/administration/CLI_tasks/release_environments.md @@ -0,0 +1,9 @@ +# Generate release environment file + +```sh tab="OTP" + ./bin/pleroma_ctl release_env gen +``` + +```sh tab="From Source" +mix pleroma.release_env gen +``` diff --git a/docs/installation/otp_en.md b/docs/installation/otp_en.md index e4f822d1c..e115c2297 100644 --- a/docs/installation/otp_en.md +++ b/docs/installation/otp_en.md @@ -121,6 +121,9 @@ chown -R pleroma /etc/pleroma # Run the config generator su pleroma -s $SHELL -lc "./bin/pleroma_ctl instance gen --output /etc/pleroma/config.exs --output-psql /tmp/setup_db.psql" +# Run the environment file generator. +su pleroma -s $SHELL -lc "./bin/pleroma_ctl release_env gen" + # Create the postgres database su postgres -s $SHELL -lc "psql -f /tmp/setup_db.psql" @@ -131,7 +134,7 @@ su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate" # su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate --migrations-path priv/repo/optional_migrations/rum_indexing/" # Start the instance to verify that everything is working as expected -su pleroma -s $SHELL -lc "./bin/pleroma daemon" +su pleroma -s $SHELL -lc "export $( cat /opt/pleroma/config/pleroma.env | xargs); ./bin/pleroma daemon" # Wait for about 20 seconds and query the instance endpoint, if it shows your uri, name and email correctly, you are configured correctly sleep 20 && curl http://localhost:4000/api/v1/instance @@ -200,6 +203,7 @@ rc-update add pleroma # Copy the service into a proper directory cp /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service + # Start pleroma and enable it on boot systemctl start pleroma systemctl enable pleroma @@ -275,4 +279,3 @@ This will create an account withe the username of 'joeuser' with the email addre ## Questions Questions about the installation or didn’t it work as it should be, ask in [#pleroma:matrix.org](https://matrix.heldscal.la/#/room/#freenode_#pleroma:matrix.org) or IRC Channel **#pleroma** on **Freenode**. - diff --git a/installation/pleroma.service b/installation/pleroma.service index 5dcbc1387..ee00a3b7a 100644 --- a/installation/pleroma.service +++ b/installation/pleroma.service @@ -17,6 +17,8 @@ Environment="MIX_ENV=prod" Environment="HOME=/var/lib/pleroma" ; Path to the folder containing the Pleroma installation. WorkingDirectory=/opt/pleroma +; Path to the environment file. the file contains RELEASE_COOKIE and etc +EnvironmentFile=/opt/pleroma/config/pleroma.env ; Path to the Mix binary. ExecStart=/usr/bin/mix phx.server diff --git a/lib/mix/tasks/pleroma/release_env.ex b/lib/mix/tasks/pleroma/release_env.ex new file mode 100644 index 000000000..cbbbdeff6 --- /dev/null +++ b/lib/mix/tasks/pleroma/release_env.ex @@ -0,0 +1,64 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Mix.Tasks.Pleroma.ReleaseEnv do + use Mix.Task + import Mix.Pleroma + + @shortdoc "Generate Pleroma environment file." + @moduledoc File.read!("docs/administration/CLI_tasks/release_environments.md") + + def run(["gen" | rest]) do + {options, [], []} = + OptionParser.parse( + rest, + strict: [ + force: :boolean, + path: :string + ], + aliases: [ + p: :path, + f: :force + ] + ) + + env_path = + get_option( + options, + :path, + "Environment file path", + "config/pleroma.env" + ) + |> Path.expand() + + proceed? = + if File.exists?(env_path) do + get_option( + options, + :force, + "Environment file is exist. Do you want overwritten the #{env_path} file? (y/n)", + "n" + ) === "y" + else + true + end + + if proceed? do + do_generate(env_path) + + shell_info( + "The file generated: #{env_path}.\nTo use the enviroment file need to add the line ';EnvironmentFile=#{ + env_path + }' in service file (/installation/pleroma.service)." + ) + end + end + + def do_generate(path) do + content = "RELEASE_COOKIE=#{Base.encode32(:crypto.strong_rand_bytes(32))}" + + File.mkdir_p!(Path.dirname(path)) + File.write!(path, content) + end +end diff --git a/test/tasks/release_env_test.exs b/test/tasks/release_env_test.exs new file mode 100644 index 000000000..519f1eba9 --- /dev/null +++ b/test/tasks/release_env_test.exs @@ -0,0 +1,30 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Mix.Tasks.Pleroma.ReleaseEnvTest do + use ExUnit.Case + import ExUnit.CaptureIO, only: [capture_io: 1] + + @path "config/pleroma.test.env" + + def do_clean do + if File.exists?(@path) do + File.rm_rf(@path) + end + end + + setup do + do_clean() + on_exit(fn -> do_clean() end) + :ok + end + + test "generate pleroma.env" do + assert capture_io(fn -> + Mix.Tasks.Pleroma.ReleaseEnv.run(["gen", "--path", @path, "--force"]) + end) =~ "The file generated" + + assert File.read!(@path) =~ "RELEASE_COOKIE=" + end +end From cf3f8cb72a46f0c8c798d4022cff442fae4ab401 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Sun, 19 Jul 2020 21:35:57 +0300 Subject: [PATCH 035/236] [#1940] Reinstated OAuth-less `admin_token` authentication. Refactored UserIsAdminPlug (freed from checking admin scopes presence). --- .../plugs/admin_secret_authentication_plug.ex | 12 +- lib/pleroma/plugs/user_is_admin_plug.ex | 25 +- priv/gettext/errors.pot | 230 +++++++++--------- priv/gettext/it/LC_MESSAGES/errors.po | 6 +- priv/gettext/nl/LC_MESSAGES/errors.po | 4 +- priv/gettext/pl/LC_MESSAGES/errors.po | 4 +- .../admin_secret_authentication_plug_test.exs | 4 + test/plugs/user_is_admin_plug_test.exs | 114 ++------- .../controllers/admin_api_controller_test.exs | 10 + .../controllers/report_controller_test.exs | 2 +- 10 files changed, 169 insertions(+), 242 deletions(-) diff --git a/lib/pleroma/plugs/admin_secret_authentication_plug.ex b/lib/pleroma/plugs/admin_secret_authentication_plug.ex index b4b47a31f..ff0328d4a 100644 --- a/lib/pleroma/plugs/admin_secret_authentication_plug.ex +++ b/lib/pleroma/plugs/admin_secret_authentication_plug.ex @@ -4,7 +4,9 @@ defmodule Pleroma.Plugs.AdminSecretAuthenticationPlug do import Plug.Conn + alias Pleroma.User + alias Pleroma.Plugs.OAuthScopesPlug def init(options) do options @@ -26,7 +28,7 @@ def call(conn, _) do def authenticate(%{params: %{"admin_token" => admin_token}} = conn) do if admin_token == secret_token() do - assign(conn, :user, %User{is_admin: true}) + assign_admin_user(conn) else conn end @@ -36,8 +38,14 @@ def authenticate(conn) do token = secret_token() case get_req_header(conn, "x-admin-token") do - [^token] -> assign(conn, :user, %User{is_admin: true}) + [^token] -> assign_admin_user(conn) _ -> conn end end + + defp assign_admin_user(conn) do + conn + |> assign(:user, %User{is_admin: true}) + |> OAuthScopesPlug.skip_plug() + end end diff --git a/lib/pleroma/plugs/user_is_admin_plug.ex b/lib/pleroma/plugs/user_is_admin_plug.ex index 2748102df..488a61d1d 100644 --- a/lib/pleroma/plugs/user_is_admin_plug.ex +++ b/lib/pleroma/plugs/user_is_admin_plug.ex @@ -7,37 +7,18 @@ defmodule Pleroma.Plugs.UserIsAdminPlug do import Plug.Conn alias Pleroma.User - alias Pleroma.Web.OAuth def init(options) do options end - def call(%{assigns: %{user: %User{is_admin: true}} = assigns} = conn, _) do - token = assigns[:token] - - cond do - not Pleroma.Config.enforce_oauth_admin_scope_usage?() -> - conn - - token && OAuth.Scopes.contains_admin_scopes?(token.scopes) -> - # Note: checking for _any_ admin scope presence, not necessarily fitting requested action. - # Thus, controller must explicitly invoke OAuthScopesPlug to verify scope requirements. - # Admin might opt out of admin scope for some apps to block any admin actions from them. - conn - - true -> - fail(conn) - end + def call(%{assigns: %{user: %User{is_admin: true}}} = conn, _) do + conn end def call(conn, _) do - fail(conn) - end - - defp fail(conn) do conn - |> render_error(:forbidden, "User is not an admin or OAuth admin scope is not granted.") + |> render_error(:forbidden, "User is not an admin.") |> halt() end end diff --git a/priv/gettext/errors.pot b/priv/gettext/errors.pot index 0e1cf37eb..e337226a7 100644 --- a/priv/gettext/errors.pot +++ b/priv/gettext/errors.pot @@ -90,110 +90,100 @@ msgid "must be equal to %{number}" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:421 +#: lib/pleroma/web/common_api/common_api.ex:505 msgid "Account not found" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:249 +#: lib/pleroma/web/common_api/common_api.ex:339 msgid "Already voted" msgstr "" #, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:360 +#: lib/pleroma/web/oauth/oauth_controller.ex:359 msgid "Bad request" msgstr "" #, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:425 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:426 msgid "Can't delete object" msgstr "" #, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:196 -msgid "Can't delete this post" -msgstr "" - -#, elixir-format -#: lib/pleroma/web/controller_helper.ex:95 -#: lib/pleroma/web/controller_helper.ex:101 +#: lib/pleroma/web/controller_helper.ex:105 +#: lib/pleroma/web/controller_helper.ex:111 msgid "Can't display this activity" msgstr "" #, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:227 -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:254 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:285 msgid "Can't find user" msgstr "" #, elixir-format -#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:114 +#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:61 msgid "Can't get favorites" msgstr "" #, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:437 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:438 msgid "Can't like object" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/utils.ex:556 +#: lib/pleroma/web/common_api/utils.ex:563 msgid "Cannot post an empty status without attachments" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/utils.ex:504 +#: lib/pleroma/web/common_api/utils.ex:511 msgid "Comment must be up to %{max_size} characters" msgstr "" #, elixir-format -#: lib/pleroma/config/config_db.ex:222 +#: lib/pleroma/config/config_db.ex:191 msgid "Config with params %{params} not found" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:95 +#: lib/pleroma/web/common_api/common_api.ex:181 +#: lib/pleroma/web/common_api/common_api.ex:185 msgid "Could not delete" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:141 +#: lib/pleroma/web/common_api/common_api.ex:231 msgid "Could not favorite" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:370 +#: lib/pleroma/web/common_api/common_api.ex:453 msgid "Could not pin" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:112 -msgid "Could not repeat" -msgstr "" - -#, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:188 +#: lib/pleroma/web/common_api/common_api.ex:278 msgid "Could not unfavorite" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:380 +#: lib/pleroma/web/common_api/common_api.ex:463 msgid "Could not unpin" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:126 +#: lib/pleroma/web/common_api/common_api.ex:216 msgid "Could not unrepeat" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:428 -#: lib/pleroma/web/common_api/common_api.ex:437 +#: lib/pleroma/web/common_api/common_api.ex:512 +#: lib/pleroma/web/common_api/common_api.ex:521 msgid "Could not update state" msgstr "" #, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:202 +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:207 msgid "Error." msgstr "" @@ -203,8 +193,8 @@ msgid "Invalid CAPTCHA" msgstr "" #, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:117 -#: lib/pleroma/web/oauth/oauth_controller.ex:569 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:116 +#: lib/pleroma/web/oauth/oauth_controller.ex:568 msgid "Invalid credentials" msgstr "" @@ -214,22 +204,22 @@ msgid "Invalid credentials." msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:265 +#: lib/pleroma/web/common_api/common_api.ex:355 msgid "Invalid indices" msgstr "" #, elixir-format -#: lib/pleroma/web/admin_api/admin_api_controller.ex:1147 +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:29 msgid "Invalid parameters" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/utils.ex:411 +#: lib/pleroma/web/common_api/utils.ex:414 msgid "Invalid password." msgstr "" #, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:187 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:220 msgid "Invalid request" msgstr "" @@ -239,44 +229,44 @@ msgid "Kocaptcha service unavailable" msgstr "" #, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:113 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:112 msgid "Missing parameters" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/utils.ex:540 +#: lib/pleroma/web/common_api/utils.ex:547 msgid "No such conversation" msgstr "" #, elixir-format -#: lib/pleroma/web/admin_api/admin_api_controller.ex:439 -#: lib/pleroma/web/admin_api/admin_api_controller.ex:465 lib/pleroma/web/admin_api/admin_api_controller.ex:507 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:388 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:414 lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:456 msgid "No such permission_group" msgstr "" #, elixir-format -#: lib/pleroma/plugs/uploaded_media.ex:74 -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:485 lib/pleroma/web/admin_api/admin_api_controller.ex:1135 -#: lib/pleroma/web/feed/user_controller.ex:73 lib/pleroma/web/ostatus/ostatus_controller.ex:143 +#: lib/pleroma/plugs/uploaded_media.ex:84 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:486 lib/pleroma/web/admin_api/controllers/fallback_controller.ex:11 +#: lib/pleroma/web/feed/user_controller.ex:71 lib/pleroma/web/ostatus/ostatus_controller.ex:143 msgid "Not found" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:241 +#: lib/pleroma/web/common_api/common_api.ex:331 msgid "Poll's author can't vote" msgstr "" #, elixir-format #: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:20 #: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:37 lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:49 -#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:50 lib/pleroma/web/mastodon_api/controllers/status_controller.ex:290 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:50 lib/pleroma/web/mastodon_api/controllers/status_controller.ex:306 #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:71 msgid "Record not found" msgstr "" #, elixir-format -#: lib/pleroma/web/admin_api/admin_api_controller.ex:1153 -#: lib/pleroma/web/feed/user_controller.ex:79 lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:32 +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:35 +#: lib/pleroma/web/feed/user_controller.ex:77 lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:36 #: lib/pleroma/web/ostatus/ostatus_controller.ex:149 msgid "Something went wrong" msgstr "" @@ -287,7 +277,7 @@ msgid "The message visibility must be direct" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/utils.ex:566 +#: lib/pleroma/web/common_api/utils.ex:573 msgid "The status is over the character limit" msgstr "" @@ -302,65 +292,65 @@ msgid "Throttled" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:266 +#: lib/pleroma/web/common_api/common_api.ex:356 msgid "Too many choices" msgstr "" #, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:442 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:443 msgid "Unhandled activity type" msgstr "" #, elixir-format -#: lib/pleroma/web/admin_api/admin_api_controller.ex:536 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:485 msgid "You can't revoke your own admin status." msgstr "" #, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:218 -#: lib/pleroma/web/oauth/oauth_controller.ex:309 +#: lib/pleroma/web/oauth/oauth_controller.ex:221 +#: lib/pleroma/web/oauth/oauth_controller.ex:308 msgid "Your account is currently disabled" msgstr "" #, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:180 -#: lib/pleroma/web/oauth/oauth_controller.ex:332 +#: lib/pleroma/web/oauth/oauth_controller.ex:183 +#: lib/pleroma/web/oauth/oauth_controller.ex:331 msgid "Your login is missing a confirmed e-mail address" msgstr "" #, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:389 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:390 msgid "can't read inbox of %{nickname} as %{as_nickname}" msgstr "" #, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:472 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:473 msgid "can't update outbox of %{nickname} as %{as_nickname}" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:388 +#: lib/pleroma/web/common_api/common_api.ex:471 msgid "conversation is already muted" msgstr "" #, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:316 -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:491 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:314 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:492 msgid "error" msgstr "" #, elixir-format -#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:29 +#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:32 msgid "mascots can only be images" msgstr "" #, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:60 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:62 msgid "not found" msgstr "" #, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:395 +#: lib/pleroma/web/oauth/oauth_controller.ex:394 msgid "Bad OAuth request." msgstr "" @@ -375,17 +365,17 @@ msgid "CAPTCHA expired" msgstr "" #, elixir-format -#: lib/pleroma/plugs/uploaded_media.ex:55 +#: lib/pleroma/plugs/uploaded_media.ex:57 msgid "Failed" msgstr "" #, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:411 +#: lib/pleroma/web/oauth/oauth_controller.ex:410 msgid "Failed to authenticate: %{message}." msgstr "" #, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:442 +#: lib/pleroma/web/oauth/oauth_controller.ex:441 msgid "Failed to set up user account." msgstr "" @@ -395,7 +385,7 @@ msgid "Insufficient permissions: %{permissions}." msgstr "" #, elixir-format -#: lib/pleroma/plugs/uploaded_media.ex:94 +#: lib/pleroma/plugs/uploaded_media.ex:104 msgid "Internal Error" msgstr "" @@ -411,12 +401,12 @@ msgid "Invalid answer data" msgstr "" #, elixir-format -#: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:128 +#: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:33 msgid "Nodeinfo schema version not handled" msgstr "" #, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:169 +#: lib/pleroma/web/oauth/oauth_controller.ex:172 msgid "This action is outside the authorized scopes" msgstr "" @@ -426,13 +416,13 @@ msgid "Unknown error, please check the details and try again." msgstr "" #, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:116 -#: lib/pleroma/web/oauth/oauth_controller.ex:155 +#: lib/pleroma/web/oauth/oauth_controller.ex:119 +#: lib/pleroma/web/oauth/oauth_controller.ex:158 msgid "Unlisted redirect_uri." msgstr "" #, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:391 +#: lib/pleroma/web/oauth/oauth_controller.ex:390 msgid "Unsupported OAuth provider: %{provider}." msgstr "" @@ -452,12 +442,12 @@ msgid "CAPTCHA Error" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:200 +#: lib/pleroma/web/common_api/common_api.ex:290 msgid "Could not add reaction emoji" msgstr "" #, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:211 +#: lib/pleroma/web/common_api/common_api.ex:301 msgid "Could not remove reaction emoji" msgstr "" @@ -472,39 +462,45 @@ msgid "List not found" msgstr "" #, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:124 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:123 msgid "Missing parameter: %{name}" msgstr "" #, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:207 -#: lib/pleroma/web/oauth/oauth_controller.ex:322 +#: lib/pleroma/web/oauth/oauth_controller.ex:210 +#: lib/pleroma/web/oauth/oauth_controller.ex:321 msgid "Password reset is required" msgstr "" #, elixir-format #: lib/pleroma/tests/auth_test_controller.ex:9 -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:6 lib/pleroma/web/admin_api/admin_api_controller.ex:6 -#: lib/pleroma/web/controller_helper.ex:6 lib/pleroma/web/fallback_redirect_controller.ex:6 -#: lib/pleroma/web/feed/tag_controller.ex:6 lib/pleroma/web/feed/user_controller.ex:6 -#: lib/pleroma/web/mailer/subscription_controller.ex:2 lib/pleroma/web/masto_fe_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/app_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/auth_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/filter_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/instance_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/marker_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex:14 lib/pleroma/web/mastodon_api/controllers/media_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/notification_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/report_controller.ex:8 lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/search_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/status_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:7 lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:6 lib/pleroma/web/media_proxy/media_proxy_controller.ex:6 -#: lib/pleroma/web/mongooseim/mongoose_im_controller.ex:6 lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:6 -#: lib/pleroma/web/oauth/fallback_controller.ex:6 lib/pleroma/web/oauth/mfa_controller.ex:10 -#: lib/pleroma/web/oauth/oauth_controller.ex:6 lib/pleroma/web/ostatus/ostatus_controller.ex:6 -#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:2 -#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex:6 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:6 lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/config_controller.ex:6 lib/pleroma/web/admin_api/controllers/fallback_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/invite_controller.ex:6 lib/pleroma/web/admin_api/controllers/media_proxy_cache_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/oauth_app_controller.ex:6 lib/pleroma/web/admin_api/controllers/relay_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/report_controller.ex:6 lib/pleroma/web/admin_api/controllers/status_controller.ex:6 +#: lib/pleroma/web/controller_helper.ex:6 lib/pleroma/web/embed_controller.ex:6 +#: lib/pleroma/web/fallback_redirect_controller.ex:6 lib/pleroma/web/feed/tag_controller.ex:6 +#: lib/pleroma/web/feed/user_controller.ex:6 lib/pleroma/web/mailer/subscription_controller.ex:2 +#: lib/pleroma/web/masto_fe_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/account_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/app_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/auth_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/filter_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/instance_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/list_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/marker_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex:14 +#: lib/pleroma/web/mastodon_api/controllers/media_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/notification_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/report_controller.ex:8 +#: lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/search_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:7 +#: lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:6 +#: lib/pleroma/web/media_proxy/media_proxy_controller.ex:6 lib/pleroma/web/mongooseim/mongoose_im_controller.ex:6 +#: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:6 lib/pleroma/web/oauth/fallback_controller.ex:6 +#: lib/pleroma/web/oauth/mfa_controller.ex:10 lib/pleroma/web/oauth/oauth_controller.ex:6 +#: lib/pleroma/web/ostatus/ostatus_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/account_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/chat_controller.ex:5 lib/pleroma/web/pleroma_api/controllers/conversation_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:2 lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/notification_controller.ex:6 #: lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex:6 #: lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex:7 lib/pleroma/web/static_fe/static_fe_controller.ex:6 #: lib/pleroma/web/twitter_api/controllers/password_controller.ex:10 lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex:6 @@ -519,46 +515,56 @@ msgid "Two-factor authentication enabled, you must use a access token." msgstr "" #, elixir-format -#: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:210 +#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:210 msgid "Unexpected error occurred while adding file to pack." msgstr "" #, elixir-format -#: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:138 +#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:138 msgid "Unexpected error occurred while creating pack." msgstr "" #, elixir-format -#: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:278 +#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:278 msgid "Unexpected error occurred while removing file from pack." msgstr "" #, elixir-format -#: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:250 +#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:250 msgid "Unexpected error occurred while updating file in pack." msgstr "" #, elixir-format -#: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:179 +#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:179 msgid "Unexpected error occurred while updating pack metadata." msgstr "" -#, elixir-format -#: lib/pleroma/plugs/user_is_admin_plug.ex:40 -msgid "User is not an admin or OAuth admin scope is not granted." -msgstr "" - #, elixir-format #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:61 msgid "Web push subscription is disabled on this Pleroma instance" msgstr "" #, elixir-format -#: lib/pleroma/web/admin_api/admin_api_controller.ex:502 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:451 msgid "You can't revoke your own admin/moderator status." msgstr "" #, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:105 +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:126 msgid "authorization required for timeline view" msgstr "" + +#, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:24 +msgid "Access denied" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:282 +msgid "This API requires an authenticated user" +msgstr "" + +#, elixir-format +#: lib/pleroma/plugs/user_is_admin_plug.ex:21 +msgid "User is not an admin." +msgstr "" diff --git a/priv/gettext/it/LC_MESSAGES/errors.po b/priv/gettext/it/LC_MESSAGES/errors.po index 406a297d1..cd0cd6c65 100644 --- a/priv/gettext/it/LC_MESSAGES/errors.po +++ b/priv/gettext/it/LC_MESSAGES/errors.po @@ -562,11 +562,11 @@ msgstr "Errore inaspettato durante l'aggiornamento del file nel pacchetto." msgid "Unexpected error occurred while updating pack metadata." msgstr "Errore inaspettato durante l'aggiornamento dei metadati del pacchetto." -#: lib/pleroma/plugs/user_is_admin_plug.ex:40 +#: lib/pleroma/plugs/user_is_admin_plug.ex:21 #, elixir-format -msgid "User is not an admin or OAuth admin scope is not granted." +msgid "User is not an admin." msgstr "" -"L'utente non è un amministratore o non ha ricevuto questa autorizzazione " +"L'utente non è un amministratore." "OAuth." #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:61 diff --git a/priv/gettext/nl/LC_MESSAGES/errors.po b/priv/gettext/nl/LC_MESSAGES/errors.po index 3118f6b5d..cfcb05fe6 100644 --- a/priv/gettext/nl/LC_MESSAGES/errors.po +++ b/priv/gettext/nl/LC_MESSAGES/errors.po @@ -559,9 +559,9 @@ msgstr "" msgid "Unexpected error occurred while updating pack metadata." msgstr "" -#: lib/pleroma/plugs/user_is_admin_plug.ex:40 +#: lib/pleroma/plugs/user_is_admin_plug.ex:21 #, elixir-format -msgid "User is not an admin or OAuth admin scope is not granted." +msgid "User is not an admin." msgstr "" #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:61 diff --git a/priv/gettext/pl/LC_MESSAGES/errors.po b/priv/gettext/pl/LC_MESSAGES/errors.po index 7241d8a0a..653ea00a1 100644 --- a/priv/gettext/pl/LC_MESSAGES/errors.po +++ b/priv/gettext/pl/LC_MESSAGES/errors.po @@ -566,9 +566,9 @@ msgstr "Nieoczekiwany błąd podczas zmieniania pliku w paczce." msgid "Unexpected error occurred while updating pack metadata." msgstr "Nieoczekiwany błąd podczas zmieniania metadanych paczki." -#: lib/pleroma/plugs/user_is_admin_plug.ex:40 +#: lib/pleroma/plugs/user_is_admin_plug.ex:21 #, elixir-format -msgid "User is not an admin or OAuth admin scope is not granted." +msgid "User is not an admin." msgstr "" #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:61 diff --git a/test/plugs/admin_secret_authentication_plug_test.exs b/test/plugs/admin_secret_authentication_plug_test.exs index 100016c62..b541a7208 100644 --- a/test/plugs/admin_secret_authentication_plug_test.exs +++ b/test/plugs/admin_secret_authentication_plug_test.exs @@ -7,6 +7,8 @@ defmodule Pleroma.Plugs.AdminSecretAuthenticationPlugTest do import Pleroma.Factory alias Pleroma.Plugs.AdminSecretAuthenticationPlug + alias Pleroma.Plugs.OAuthScopesPlug + alias Pleroma.Plugs.PlugHelper test "does nothing if a user is assigned", %{conn: conn} do user = insert(:user) @@ -39,6 +41,7 @@ test "with `admin_token` query parameter", %{conn: conn} do |> AdminSecretAuthenticationPlug.call(%{}) assert conn.assigns[:user].is_admin + assert PlugHelper.plug_skipped?(conn, OAuthScopesPlug) end test "with `x-admin-token` HTTP header", %{conn: conn} do @@ -57,6 +60,7 @@ test "with `x-admin-token` HTTP header", %{conn: conn} do |> AdminSecretAuthenticationPlug.call(%{}) assert conn.assigns[:user].is_admin + assert PlugHelper.plug_skipped?(conn, OAuthScopesPlug) end end end diff --git a/test/plugs/user_is_admin_plug_test.exs b/test/plugs/user_is_admin_plug_test.exs index fd6a50e53..8bc00e444 100644 --- a/test/plugs/user_is_admin_plug_test.exs +++ b/test/plugs/user_is_admin_plug_test.exs @@ -8,112 +8,30 @@ defmodule Pleroma.Plugs.UserIsAdminPlugTest do alias Pleroma.Plugs.UserIsAdminPlug import Pleroma.Factory - describe "unless [:auth, :enforce_oauth_admin_scope_usage]," do - setup do: clear_config([:auth, :enforce_oauth_admin_scope_usage], false) + test "accepts a user that is an admin" do + user = insert(:user, is_admin: true) - test "accepts a user that is an admin" do - user = insert(:user, is_admin: true) + conn = assign(build_conn(), :user, user) - conn = assign(build_conn(), :user, user) + ret_conn = UserIsAdminPlug.call(conn, %{}) - ret_conn = UserIsAdminPlug.call(conn, %{}) - - assert conn == ret_conn - end - - test "denies a user that isn't an admin" do - user = insert(:user) - - conn = - build_conn() - |> assign(:user, user) - |> UserIsAdminPlug.call(%{}) - - assert conn.status == 403 - end - - test "denies when a user isn't set" do - conn = UserIsAdminPlug.call(build_conn(), %{}) - - assert conn.status == 403 - end + assert conn == ret_conn end - describe "with [:auth, :enforce_oauth_admin_scope_usage]," do - setup do: clear_config([:auth, :enforce_oauth_admin_scope_usage], true) + test "denies a user that isn't an admin" do + user = insert(:user) - setup do - admin_user = insert(:user, is_admin: true) - non_admin_user = insert(:user, is_admin: false) - blank_user = nil + conn = + build_conn() + |> assign(:user, user) + |> UserIsAdminPlug.call(%{}) - {:ok, %{users: [admin_user, non_admin_user, blank_user]}} - end + assert conn.status == 403 + end - test "if token has any of admin scopes, accepts a user that is an admin", %{conn: conn} do - user = insert(:user, is_admin: true) - token = insert(:oauth_token, user: user, scopes: ["admin:something"]) + test "denies when a user isn't set" do + conn = UserIsAdminPlug.call(build_conn(), %{}) - conn = - conn - |> assign(:user, user) - |> assign(:token, token) - - ret_conn = UserIsAdminPlug.call(conn, %{}) - - assert conn == ret_conn - end - - test "if token has any of admin scopes, denies a user that isn't an admin", %{conn: conn} do - user = insert(:user, is_admin: false) - token = insert(:oauth_token, user: user, scopes: ["admin:something"]) - - conn = - conn - |> assign(:user, user) - |> assign(:token, token) - |> UserIsAdminPlug.call(%{}) - - assert conn.status == 403 - end - - test "if token has any of admin scopes, denies when a user isn't set", %{conn: conn} do - token = insert(:oauth_token, scopes: ["admin:something"]) - - conn = - conn - |> assign(:user, nil) - |> assign(:token, token) - |> UserIsAdminPlug.call(%{}) - - assert conn.status == 403 - end - - test "if token lacks admin scopes, denies users regardless of is_admin flag", - %{users: users} do - for user <- users do - token = insert(:oauth_token, user: user) - - conn = - build_conn() - |> assign(:user, user) - |> assign(:token, token) - |> UserIsAdminPlug.call(%{}) - - assert conn.status == 403 - end - end - - test "if token is missing, denies users regardless of is_admin flag", %{users: users} do - for user <- users do - conn = - build_conn() - |> assign(:user, user) - |> assign(:token, nil) - |> UserIsAdminPlug.call(%{}) - - assert conn.status == 403 - end - end + assert conn.status == 403 end end diff --git a/test/web/admin_api/controllers/admin_api_controller_test.exs b/test/web/admin_api/controllers/admin_api_controller_test.exs index c2433f23c..da91cd552 100644 --- a/test/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/web/admin_api/controllers/admin_api_controller_test.exs @@ -41,6 +41,16 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do {:ok, %{admin: admin, token: token, conn: conn}} end + test "with valid `admin_token` query parameter, skips OAuth scopes check" do + clear_config([:admin_token], "password123") + + user = insert(:user) + + conn = get(build_conn(), "/api/pleroma/admin/users/#{user.nickname}?admin_token=password123") + + assert json_response(conn, 200) + end + describe "with [:auth, :enforce_oauth_admin_scope_usage]," do setup do: clear_config([:auth, :enforce_oauth_admin_scope_usage], true) diff --git a/test/web/admin_api/controllers/report_controller_test.exs b/test/web/admin_api/controllers/report_controller_test.exs index 940bce340..f30dc8956 100644 --- a/test/web/admin_api/controllers/report_controller_test.exs +++ b/test/web/admin_api/controllers/report_controller_test.exs @@ -297,7 +297,7 @@ test "returns 403 when requested by a non-admin" do |> get("/api/pleroma/admin/reports") assert json_response(conn, :forbidden) == - %{"error" => "User is not an admin or OAuth admin scope is not granted."} + %{"error" => "User is not an admin."} end test "returns 403 when requested by anonymous" do From 9b225db7d86289fb9d9c51f62e6ec29f6c07f60d Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Tue, 14 Jul 2020 11:58:41 +0300 Subject: [PATCH 036/236] [#1940] Applied rate limit for requests with bad `admin_token`. Added doc warnings on `admin_token` setting. --- config/description.exs | 6 ++++-- docs/configuration/cheatsheet.md | 2 ++ .../plugs/admin_secret_authentication_plug.ex | 17 +++++++++++++---- .../admin_secret_authentication_plug_test.exs | 9 +++++++++ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/config/description.exs b/config/description.exs index 84dcdb87e..8ec4b712f 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2008,13 +2008,15 @@ label: "Pleroma Admin Token", type: :group, description: - "Allows to set a token that can be used to authenticate with the admin api without using an actual user by giving it as the `admin_token` parameter", + "Allows to set a token that can be used to authenticate with the admin api without using an actual user by giving it as the `admin_token` parameter (risky; use HTTP Basic Auth or OAuth-based authentication if possible)", children: [ %{ key: :admin_token, type: :string, description: "Admin token", - suggestions: ["We recommend a secure random string or UUID"] + suggestions: [ + "We recommend NOT setting the value do to increased security risk; if set, use a secure random long string or UUID (and change it as often as possible)" + ] } ] }, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index f796330f1..24b162ce7 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -815,6 +815,8 @@ or curl -H "X-Admin-Token: somerandomtoken" "http://localhost:4000/api/pleroma/admin/users/invites" ``` +Warning: it's discouraged to use this feature because of the associated security risk: static / rarely changed instance-wide token is much weaker compared to email-password pair of a real admin user; consider using HTTP Basic Auth or OAuth-based authentication instead. + ### :auth * `Pleroma.Web.Auth.PleromaAuthenticator`: default database authenticator. diff --git a/lib/pleroma/plugs/admin_secret_authentication_plug.ex b/lib/pleroma/plugs/admin_secret_authentication_plug.ex index ff0328d4a..2e54df47a 100644 --- a/lib/pleroma/plugs/admin_secret_authentication_plug.ex +++ b/lib/pleroma/plugs/admin_secret_authentication_plug.ex @@ -5,15 +5,19 @@ defmodule Pleroma.Plugs.AdminSecretAuthenticationPlug do import Plug.Conn - alias Pleroma.User alias Pleroma.Plugs.OAuthScopesPlug + alias Pleroma.Plugs.RateLimiter + alias Pleroma.User def init(options) do options end def secret_token do - Pleroma.Config.get(:admin_token) + case Pleroma.Config.get(:admin_token) do + blank when blank in [nil, ""] -> nil + token -> token + end end def call(%{assigns: %{user: %User{}}} = conn, _), do: conn @@ -30,7 +34,7 @@ def authenticate(%{params: %{"admin_token" => admin_token}} = conn) do if admin_token == secret_token() do assign_admin_user(conn) else - conn + handle_bad_token(conn) end end @@ -38,8 +42,9 @@ def authenticate(conn) do token = secret_token() case get_req_header(conn, "x-admin-token") do + blank when blank in [[], [""]] -> conn [^token] -> assign_admin_user(conn) - _ -> conn + _ -> handle_bad_token(conn) end end @@ -48,4 +53,8 @@ defp assign_admin_user(conn) do |> assign(:user, %User{is_admin: true}) |> OAuthScopesPlug.skip_plug() end + + defp handle_bad_token(conn) do + RateLimiter.call(conn, name: :authentication) + end end diff --git a/test/plugs/admin_secret_authentication_plug_test.exs b/test/plugs/admin_secret_authentication_plug_test.exs index b541a7208..89df03c4b 100644 --- a/test/plugs/admin_secret_authentication_plug_test.exs +++ b/test/plugs/admin_secret_authentication_plug_test.exs @@ -4,11 +4,14 @@ defmodule Pleroma.Plugs.AdminSecretAuthenticationPlugTest do use Pleroma.Web.ConnCase, async: true + + import Mock import Pleroma.Factory alias Pleroma.Plugs.AdminSecretAuthenticationPlug alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.Plugs.PlugHelper + alias Pleroma.Plugs.RateLimiter test "does nothing if a user is assigned", %{conn: conn} do user = insert(:user) @@ -27,6 +30,10 @@ test "does nothing if a user is assigned", %{conn: conn} do describe "when secret set it assigns an admin user" do setup do: clear_config([:admin_token]) + setup_with_mocks([{RateLimiter, [:passthrough], []}]) do + :ok + end + test "with `admin_token` query parameter", %{conn: conn} do Pleroma.Config.put(:admin_token, "password123") @@ -35,6 +42,7 @@ test "with `admin_token` query parameter", %{conn: conn} do |> AdminSecretAuthenticationPlug.call(%{}) refute conn.assigns[:user] + assert called(RateLimiter.call(conn, name: :authentication)) conn = %{conn | params: %{"admin_token" => "password123"}} @@ -53,6 +61,7 @@ test "with `x-admin-token` HTTP header", %{conn: conn} do |> AdminSecretAuthenticationPlug.call(%{}) refute conn.assigns[:user] + assert called(RateLimiter.call(conn, name: :authentication)) conn = conn From 858d9fc7e8e722604676c90cf2707f0209f935ec Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Mon, 13 Jul 2020 15:47:13 +0200 Subject: [PATCH 037/236] MRF Policies: Return a {:reject, reason} instead of {:reject, nil} --- .../activity_pub/mrf/anti_followbot_policy.ex | 2 +- .../activity_pub/mrf/anti_link_spam_policy.ex | 7 +++---- .../web/activity_pub/mrf/hellthread_policy.ex | 4 ++-- .../web/activity_pub/mrf/keyword_policy.ex | 7 ++++--- .../web/activity_pub/mrf/mention_policy.ex | 5 +++-- .../web/activity_pub/mrf/object_age_policy.ex | 8 +++----- .../web/activity_pub/mrf/reject_non_public.ex | 2 +- .../web/activity_pub/mrf/simple_policy.ex | 16 ++++++++++------ lib/pleroma/web/activity_pub/mrf/tag_policy.ex | 7 ++++--- .../activity_pub/mrf/user_allow_list_policy.ex | 2 +- .../web/activity_pub/mrf/vocabulary_policy.ex | 18 +++++++++++------- .../mrf/anti_followbot_policy_test.exs | 4 ++-- .../mrf/hellthread_policy_test.exs | 3 ++- .../activity_pub/mrf/keyword_policy_test.exs | 12 ++++++++---- .../activity_pub/mrf/mention_policy_test.exs | 6 ++++-- .../mrf/reject_non_public_test.exs | 4 ++-- .../activity_pub/mrf/simple_policy_test.exs | 16 ++++++++-------- test/web/activity_pub/mrf/tag_policy_test.exs | 6 +++--- .../mrf/user_allowlist_policy_test.exs | 2 +- .../mrf/vocabulary_policy_test.exs | 8 ++++---- 20 files changed, 77 insertions(+), 62 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 0270b96ae..b96388489 100644 --- a/lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex @@ -60,7 +60,7 @@ def filter(%{"type" => "Follow", "actor" => actor_id} = message) do if score < 0.8 do {:ok, message} else - {:reject, nil} + {:reject, "[AntiFollowbotPolicy] Scored #{actor_id} as #{score}"} end end diff --git a/lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex b/lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex index a7e187b5e..b22464111 100644 --- a/lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex @@ -39,14 +39,13 @@ def filter(%{"type" => "Create", "actor" => actor, "object" => object} = message {:ok, message} {:old_user, false} -> - {:reject, nil} + {:reject, "[AntiLinkSpamPolicy] User has no posts nor followers"} {:error, _} -> - {:reject, nil} + {:reject, "[AntiLinkSpamPolicy] Failed to get or fetch user by ap_id"} e -> - Logger.warn("[MRF anti-link-spam] WTF: unhandled error #{inspect(e)}") - {:reject, nil} + {:reject, "[AntiLinkSpamPolicy] Unhandled error #{inspect(e)}"} end end diff --git a/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex b/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex index f6b2c4415..9ba07b4e3 100644 --- a/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex @@ -43,7 +43,7 @@ defp delist_message(message, _threshold), do: {:ok, message} defp reject_message(message, threshold) when threshold > 0 do with {_, recipients} <- get_recipient_count(message) do if recipients > threshold do - {:reject, nil} + {:reject, "[HellthreadPolicy] #{recipients} recipients is over the limit of #{threshold}"} else {:ok, message} end @@ -87,7 +87,7 @@ def filter(%{"type" => "Create", "object" => %{"type" => object_type}} = message {:ok, message} <- delist_message(message, delist_threshold) do {:ok, message} else - _e -> {:reject, nil} + e -> e end end diff --git a/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex b/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex index 88b0d2b39..15e09dcf0 100644 --- a/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex @@ -24,7 +24,7 @@ defp check_reject(%{"object" => %{"content" => content, "summary" => summary}} = if Enum.any?(Pleroma.Config.get([:mrf_keyword, :reject]), fn pattern -> string_matches?(content, pattern) or string_matches?(summary, pattern) end) do - {:reject, nil} + {:reject, "[KeywordPolicy] Matches with rejected keyword"} else {:ok, message} end @@ -89,8 +89,9 @@ def filter(%{"type" => "Create", "object" => %{"content" => _content}} = message {:ok, message} <- check_replace(message) do {:ok, message} else - _e -> - {:reject, nil} + {:reject, nil} -> {:reject, "[KeywordPolicy] "} + {:reject, _} = e -> e + _e -> {:reject, "[KeywordPolicy] "} end end diff --git a/lib/pleroma/web/activity_pub/mrf/mention_policy.ex b/lib/pleroma/web/activity_pub/mrf/mention_policy.ex index 06f003921..7910ca131 100644 --- a/lib/pleroma/web/activity_pub/mrf/mention_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/mention_policy.ex @@ -12,8 +12,9 @@ def filter(%{"type" => "Create"} = message) do reject_actors = Pleroma.Config.get([:mrf_mention, :actors], []) recipients = (message["to"] || []) ++ (message["cc"] || []) - if Enum.any?(recipients, fn recipient -> Enum.member?(reject_actors, recipient) end) do - {:reject, nil} + if rejected_mention = + Enum.find(recipients, fn recipient -> Enum.member?(reject_actors, recipient) end) do + {:reject, "[MentionPolicy] Rejected for mention of #{rejected_mention}"} else {:ok, message} end 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 a62914135..5f111c72f 100644 --- a/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex @@ -28,7 +28,7 @@ defp check_date(%{"object" => %{"published" => published}} = message) do defp check_reject(message, actions) do if :reject in actions do - {:reject, nil} + {:reject, "[ObjectAgePolicy]"} else {:ok, message} end @@ -47,9 +47,8 @@ defp check_delist(message, actions) do {:ok, message} else - # Unhandleable error: somebody is messing around, just drop the message. _e -> - {:reject, nil} + {:reject, "[ObjectAgePolicy] Unhandled error"} end else {:ok, message} @@ -69,9 +68,8 @@ defp check_strip_followers(message, actions) do {:ok, message} else - # Unhandleable error: somebody is messing around, just drop the message. _e -> - {:reject, nil} + {:reject, "[ObjectAgePolicy] Unhandled error"} end else {:ok, message} diff --git a/lib/pleroma/web/activity_pub/mrf/reject_non_public.ex b/lib/pleroma/web/activity_pub/mrf/reject_non_public.ex index 4fd63106d..0b9ed2224 100644 --- a/lib/pleroma/web/activity_pub/mrf/reject_non_public.ex +++ b/lib/pleroma/web/activity_pub/mrf/reject_non_public.ex @@ -38,7 +38,7 @@ def filter(%{"type" => "Create"} = object) do {:ok, object} true -> - {:reject, nil} + {:reject, "[RejectNonPublic] visibility: #{visibility}"} end end diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index 70a2ca053..b77b8c7b4 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -21,7 +21,7 @@ defp check_accept(%{host: actor_host} = _actor_info, object) do accepts == [] -> {:ok, object} actor_host == Config.get([Pleroma.Web.Endpoint, :url, :host]) -> {:ok, object} MRF.subdomain_match?(accepts, actor_host) -> {:ok, object} - true -> {:reject, nil} + true -> {:reject, "[SimplePolicy] host not in accept list"} end end @@ -31,7 +31,7 @@ defp check_reject(%{host: actor_host} = _actor_info, object) do |> MRF.subdomains_regex() if MRF.subdomain_match?(rejects, actor_host) do - {:reject, nil} + {:reject, "[SimplePolicy] host in reject list"} else {:ok, object} end @@ -114,7 +114,7 @@ defp check_report_removal(%{host: actor_host} = _actor_info, %{"type" => "Flag"} |> MRF.subdomains_regex() if MRF.subdomain_match?(report_removal, actor_host) do - {:reject, nil} + {:reject, "[SimplePolicy] host in report_removal list"} else {:ok, object} end @@ -159,7 +159,7 @@ def filter(%{"type" => "Delete", "actor" => actor} = object) do |> MRF.subdomains_regex() if MRF.subdomain_match?(reject_deletes, actor_host) do - {:reject, nil} + {:reject, "[SimplePolicy] host in reject_deletes list"} else {:ok, object} end @@ -177,7 +177,9 @@ def filter(%{"actor" => actor} = object) do {:ok, object} <- check_report_removal(actor_info, object) do {:ok, object} else - _e -> {:reject, nil} + {:reject, nil} -> {:reject, "[SimplePolicy]"} + {:reject, _} = e -> e + _ -> {:reject, "[SimplePolicy]"} end end @@ -191,7 +193,9 @@ def filter(%{"id" => actor, "type" => obj_type} = object) {:ok, object} <- check_banner_removal(actor_info, object) do {:ok, object} else - _e -> {:reject, nil} + {:reject, nil} -> {:reject, "[SimplePolicy]"} + {:reject, _} = e -> e + _ -> {:reject, "[SimplePolicy]"} end end diff --git a/lib/pleroma/web/activity_pub/mrf/tag_policy.ex b/lib/pleroma/web/activity_pub/mrf/tag_policy.ex index c310462cb..febabda08 100644 --- a/lib/pleroma/web/activity_pub/mrf/tag_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/tag_policy.ex @@ -134,12 +134,13 @@ defp process_tag( if user.local == true do {:ok, message} else - {:reject, nil} + {:reject, + "[TagPolicy] Follow from #{actor} tagged with mrf_tag:disable-remote-subscription"} end end - defp process_tag("mrf_tag:disable-any-subscription", %{"type" => "Follow"}), - do: {:reject, nil} + defp process_tag("mrf_tag:disable-any-subscription", %{"type" => "Follow", "actor" => actor}), + do: {:reject, "[TagPolicy] Follow from #{actor} tagged with mrf_tag:disable-any-subscription"} defp process_tag(_, message), do: {:ok, message} diff --git a/lib/pleroma/web/activity_pub/mrf/user_allow_list_policy.ex b/lib/pleroma/web/activity_pub/mrf/user_allow_list_policy.ex index 651aed70f..1a28f2ba2 100644 --- a/lib/pleroma/web/activity_pub/mrf/user_allow_list_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/user_allow_list_policy.ex @@ -14,7 +14,7 @@ defp filter_by_list(%{"actor" => actor} = object, allow_list) do if actor in allow_list do {:ok, object} else - {:reject, nil} + {:reject, "[UserAllowListPolicy] #{actor} not in the list"} end end diff --git a/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex b/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex index 6167a74e2..a6c545570 100644 --- a/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex @@ -11,22 +11,26 @@ def filter(%{"type" => "Undo", "object" => child_message} = message) do with {:ok, _} <- filter(child_message) do {:ok, message} else - {:reject, nil} -> - {:reject, nil} + {:reject, _} = e -> e end end def filter(%{"type" => message_type} = message) do with accepted_vocabulary <- Pleroma.Config.get([:mrf_vocabulary, :accept]), rejected_vocabulary <- Pleroma.Config.get([:mrf_vocabulary, :reject]), - true <- - Enum.empty?(accepted_vocabulary) || Enum.member?(accepted_vocabulary, message_type), - false <- - length(rejected_vocabulary) > 0 && Enum.member?(rejected_vocabulary, message_type), + {_, true} <- + {:accepted, + Enum.empty?(accepted_vocabulary) || Enum.member?(accepted_vocabulary, message_type)}, + {_, false} <- + {:rejected, + length(rejected_vocabulary) > 0 && Enum.member?(rejected_vocabulary, message_type)}, {:ok, _} <- filter(message["object"]) do {:ok, message} else - _ -> {:reject, nil} + {:reject, _} = e -> e + {:accepted, _} -> {:reject, "[VocabularyPolicy] #{message_type} not in accept list"} + {:rejected, _} -> {:reject, "[VocabularyPolicy] #{message_type} in reject list"} + _ -> {:reject, "[VocabularyPolicy]"} end end 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 fca0de7c6..3c795f5ac 100644 --- a/test/web/activity_pub/mrf/anti_followbot_policy_test.exs +++ b/test/web/activity_pub/mrf/anti_followbot_policy_test.exs @@ -21,7 +21,7 @@ test "matches followbots by nickname" do "id" => "https://example.com/activities/1234" } - {:reject, nil} = AntiFollowbotPolicy.filter(message) + assert {:reject, "[AntiFollowbotPolicy]" <> _} = AntiFollowbotPolicy.filter(message) end test "matches followbots by display name" do @@ -36,7 +36,7 @@ test "matches followbots by display name" do "id" => "https://example.com/activities/1234" } - {:reject, nil} = AntiFollowbotPolicy.filter(message) + assert {:reject, "[AntiFollowbotPolicy]" <> _} = AntiFollowbotPolicy.filter(message) end end diff --git a/test/web/activity_pub/mrf/hellthread_policy_test.exs b/test/web/activity_pub/mrf/hellthread_policy_test.exs index 6e9daa7f9..26f5bcdaa 100644 --- a/test/web/activity_pub/mrf/hellthread_policy_test.exs +++ b/test/web/activity_pub/mrf/hellthread_policy_test.exs @@ -50,7 +50,8 @@ test "rejects the message if the recipient count is above reject_threshold", %{ } do Pleroma.Config.put([:mrf_hellthread], %{delist_threshold: 0, reject_threshold: 2}) - {:reject, nil} = filter(message) + assert {:reject, "[HellthreadPolicy] 3 recipients is over the limit of 2"} == + filter(message) end test "does not reject the message if the recipient count is below reject_threshold", %{ diff --git a/test/web/activity_pub/mrf/keyword_policy_test.exs b/test/web/activity_pub/mrf/keyword_policy_test.exs index fd1f7aec8..b3d0f3d90 100644 --- a/test/web/activity_pub/mrf/keyword_policy_test.exs +++ b/test/web/activity_pub/mrf/keyword_policy_test.exs @@ -25,7 +25,8 @@ test "rejects if string matches in content" do } } - assert {:reject, nil} == KeywordPolicy.filter(message) + assert {:reject, "[KeywordPolicy] Matches with rejected keyword"} = + KeywordPolicy.filter(message) end test "rejects if string matches in summary" do @@ -39,7 +40,8 @@ test "rejects if string matches in summary" do } } - assert {:reject, nil} == KeywordPolicy.filter(message) + assert {:reject, "[KeywordPolicy] Matches with rejected keyword"} = + KeywordPolicy.filter(message) end test "rejects if regex matches in content" do @@ -55,7 +57,8 @@ test "rejects if regex matches in content" do } } - {:reject, nil} == KeywordPolicy.filter(message) + {:reject, "[KeywordPolicy] Matches with rejected keyword"} == + KeywordPolicy.filter(message) end) end @@ -72,7 +75,8 @@ test "rejects if regex matches in summary" do } } - {:reject, nil} == KeywordPolicy.filter(message) + {:reject, "[KeywordPolicy] Matches with rejected keyword"} == + KeywordPolicy.filter(message) end) end end diff --git a/test/web/activity_pub/mrf/mention_policy_test.exs b/test/web/activity_pub/mrf/mention_policy_test.exs index aa003bef5..220309cc9 100644 --- a/test/web/activity_pub/mrf/mention_policy_test.exs +++ b/test/web/activity_pub/mrf/mention_policy_test.exs @@ -76,7 +76,8 @@ test "to" do "to" => ["https://example.com/blocked"] } - assert MentionPolicy.filter(message) == {:reject, nil} + assert MentionPolicy.filter(message) == + {:reject, "[MentionPolicy] Rejected for mention of https://example.com/blocked"} end test "cc" do @@ -88,7 +89,8 @@ test "cc" do "cc" => ["https://example.com/blocked"] } - assert MentionPolicy.filter(message) == {:reject, nil} + assert MentionPolicy.filter(message) == + {:reject, "[MentionPolicy] Rejected for mention of https://example.com/blocked"} end end end 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 f36299b86..58b46b9a2 100644 --- a/test/web/activity_pub/mrf/reject_non_public_test.exs +++ b/test/web/activity_pub/mrf/reject_non_public_test.exs @@ -64,7 +64,7 @@ test "it's rejected when addrer of message in the follower addresses of user and } Pleroma.Config.put([:mrf_rejectnonpublic, :allow_followersonly], false) - assert {:reject, nil} = RejectNonPublic.filter(message) + assert {:reject, _} = RejectNonPublic.filter(message) end end @@ -94,7 +94,7 @@ test "it's reject when direct messages aren't allow" do } Pleroma.Config.put([:mrf_rejectnonpublic, :allow_direct], false) - assert {:reject, nil} = RejectNonPublic.filter(message) + assert {:reject, _} = RejectNonPublic.filter(message) end end end diff --git a/test/web/activity_pub/mrf/simple_policy_test.exs b/test/web/activity_pub/mrf/simple_policy_test.exs index b7b9bc6a2..e842d8d8d 100644 --- a/test/web/activity_pub/mrf/simple_policy_test.exs +++ b/test/web/activity_pub/mrf/simple_policy_test.exs @@ -124,7 +124,7 @@ test "has a matching host" do report_message = build_report_message() local_message = build_local_message() - assert SimplePolicy.filter(report_message) == {:reject, nil} + assert {:reject, _} = SimplePolicy.filter(report_message) assert SimplePolicy.filter(local_message) == {:ok, local_message} end @@ -133,7 +133,7 @@ test "match with wildcard domain" do report_message = build_report_message() local_message = build_local_message() - assert SimplePolicy.filter(report_message) == {:reject, nil} + assert {:reject, _} = SimplePolicy.filter(report_message) assert SimplePolicy.filter(local_message) == {:ok, local_message} end end @@ -241,7 +241,7 @@ test "activity has a matching host" do remote_message = build_remote_message() - assert SimplePolicy.filter(remote_message) == {:reject, nil} + assert {:reject, _} = SimplePolicy.filter(remote_message) end test "activity matches with wildcard domain" do @@ -249,7 +249,7 @@ test "activity matches with wildcard domain" do remote_message = build_remote_message() - assert SimplePolicy.filter(remote_message) == {:reject, nil} + assert {:reject, _} = SimplePolicy.filter(remote_message) end test "actor has a matching host" do @@ -257,7 +257,7 @@ test "actor has a matching host" do remote_user = build_remote_user() - assert SimplePolicy.filter(remote_user) == {:reject, nil} + assert {:reject, _} = SimplePolicy.filter(remote_user) end end @@ -279,7 +279,7 @@ test "is not empty but activity doesn't have a matching host" do remote_message = build_remote_message() assert SimplePolicy.filter(local_message) == {:ok, local_message} - assert SimplePolicy.filter(remote_message) == {:reject, nil} + assert {:reject, _} = SimplePolicy.filter(remote_message) end test "activity has a matching host" do @@ -429,7 +429,7 @@ test "it accepts deletions even from non-whitelisted servers" do test "it rejects the deletion" do deletion_message = build_remote_deletion_message() - assert SimplePolicy.filter(deletion_message) == {:reject, nil} + assert {:reject, _} = SimplePolicy.filter(deletion_message) end end @@ -439,7 +439,7 @@ test "it rejects the deletion" do test "it rejects the deletion" do deletion_message = build_remote_deletion_message() - assert SimplePolicy.filter(deletion_message) == {:reject, nil} + assert {:reject, _} = SimplePolicy.filter(deletion_message) end end diff --git a/test/web/activity_pub/mrf/tag_policy_test.exs b/test/web/activity_pub/mrf/tag_policy_test.exs index e7793641a..6ff71d640 100644 --- a/test/web/activity_pub/mrf/tag_policy_test.exs +++ b/test/web/activity_pub/mrf/tag_policy_test.exs @@ -12,8 +12,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.TagPolicyTest do describe "mrf_tag:disable-any-subscription" do test "rejects message" do actor = insert(:user, tags: ["mrf_tag:disable-any-subscription"]) - message = %{"object" => actor.ap_id, "type" => "Follow"} - assert {:reject, nil} = TagPolicy.filter(message) + message = %{"object" => actor.ap_id, "type" => "Follow", "actor" => actor.ap_id} + assert {:reject, _} = TagPolicy.filter(message) end end @@ -22,7 +22,7 @@ test "rejects non-local follow requests" do actor = insert(:user, tags: ["mrf_tag:disable-remote-subscription"]) follower = insert(:user, tags: ["mrf_tag:disable-remote-subscription"], local: false) message = %{"object" => actor.ap_id, "type" => "Follow", "actor" => follower.ap_id} - assert {:reject, nil} = TagPolicy.filter(message) + assert {:reject, _} = TagPolicy.filter(message) end test "allows non-local follow requests" do diff --git a/test/web/activity_pub/mrf/user_allowlist_policy_test.exs b/test/web/activity_pub/mrf/user_allowlist_policy_test.exs index ba1b69658..8e1ad5bc8 100644 --- a/test/web/activity_pub/mrf/user_allowlist_policy_test.exs +++ b/test/web/activity_pub/mrf/user_allowlist_policy_test.exs @@ -26,6 +26,6 @@ test "rejected if allow list isn't empty and user not in allow list" do actor = insert(:user) Pleroma.Config.put([:mrf_user_allowlist], %{"localhost" => ["test-ap-id"]}) message = %{"actor" => actor.ap_id} - assert UserAllowListPolicy.filter(message) == {:reject, nil} + assert {:reject, _} = UserAllowListPolicy.filter(message) end end diff --git a/test/web/activity_pub/mrf/vocabulary_policy_test.exs b/test/web/activity_pub/mrf/vocabulary_policy_test.exs index 69f22bb77..2bceb67ee 100644 --- a/test/web/activity_pub/mrf/vocabulary_policy_test.exs +++ b/test/web/activity_pub/mrf/vocabulary_policy_test.exs @@ -46,7 +46,7 @@ test "it does not accept disallowed child objects" do } } - {:reject, nil} = VocabularyPolicy.filter(message) + {:reject, _} = VocabularyPolicy.filter(message) end test "it does not accept disallowed parent types" do @@ -60,7 +60,7 @@ test "it does not accept disallowed parent types" do } } - {:reject, nil} = VocabularyPolicy.filter(message) + {:reject, _} = VocabularyPolicy.filter(message) end end @@ -75,7 +75,7 @@ test "it rejects based on parent activity type" do "object" => "whatever" } - {:reject, nil} = VocabularyPolicy.filter(message) + {:reject, _} = VocabularyPolicy.filter(message) end test "it rejects based on child object type" do @@ -89,7 +89,7 @@ test "it rejects based on child object type" do } } - {:reject, nil} = VocabularyPolicy.filter(message) + {:reject, _} = VocabularyPolicy.filter(message) end test "it passes through objects that aren't disallowed" do From 8d56fb6d223995de3f753eeef9475583e2b1e6ad Mon Sep 17 00:00:00 2001 From: rinpatch Date: Tue, 14 Jul 2020 12:00:53 +0300 Subject: [PATCH 038/236] Migrate in-db config after updating to Oban 2.0 --- docs/configuration/cheatsheet.md | 3 +-- ...20200714081657_oban_2_0_config_changes.exs | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 priv/repo/migrations/20200714081657_oban_2_0_config_changes.exs diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index f796330f1..7b1fd92f3 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -629,8 +629,7 @@ Email notifications settings. Configuration options described in [Oban readme](https://github.com/sorentwo/oban#usage): * `repo` - app's Ecto repo (`Pleroma.Repo`) -* `verbose` - logs verbosity -* `prune` - non-retryable jobs [pruning settings](https://github.com/sorentwo/oban#pruning) (`:disabled` / `{:maxlen, value}` / `{:maxage, value}`) +* `log` - logs verbosity * `queues` - job queues (see below) * `crontab` - periodic jobs, see [`Oban.Cron`](#obancron) diff --git a/priv/repo/migrations/20200714081657_oban_2_0_config_changes.exs b/priv/repo/migrations/20200714081657_oban_2_0_config_changes.exs new file mode 100644 index 000000000..c54bb2511 --- /dev/null +++ b/priv/repo/migrations/20200714081657_oban_2_0_config_changes.exs @@ -0,0 +1,27 @@ +defmodule Elixir.Pleroma.Repo.Migrations.Oban20ConfigChanges do + use Ecto.Migration + import Ecto.Query + alias Pleroma.ConfigDB + alias Pleroma.Repo + + def change do + config_entry = + from(c in ConfigDB, where: c.group == ^":pleroma" and c.key == ^"Oban") + |> select([c], struct(c, [:value, :id])) + |> Repo.one() + + if config_entry do + %{value: value} = config_entry + + value = + case Keyword.fetch(value, :verbose) do + {:ok, log} -> Keyword.put_new(value, :log, log) + _ -> value + end + |> Keyword.drop([:verbose, :prune]) + + Ecto.Changeset.change(config_entry, %{value: value}) + |> Repo.update() + end + end +end From e6ccc2556568f2180c3ce1945bdc7a0cba97e924 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Tue, 14 Jul 2020 11:41:30 +0300 Subject: [PATCH 039/236] Fix in-db configuration in dev environment Previously, in-db configuration only worked when `warnings_as_errors` was disabled because re-compiling scrubbers on application restart created a warning about module conflicts. This patch fixes that by enabling `ignore_module_conflict` option of the compiler at runtime, and enables `warnings_as_errors` in prod since there is no reason to keep it disabled anymore. --- lib/pleroma/application.ex | 4 ++++ mix.exs | 2 -- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index b68a373a4..3282c6882 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -35,6 +35,10 @@ def user_agent do # See http://elixir-lang.org/docs/stable/elixir/Application.html # for more information on OTP Applications def start(_type, _args) do + # Scrubbers are compiled at runtime and therefore will cause a conflict + # every time the application is restarted, so we disable module + # conflicts at runtime + Code.compiler_options(ignore_module_conflict: true) Config.Holder.save_default() Pleroma.HTML.compile_scrubbers() Config.DeprecationWarnings.warn() diff --git a/mix.exs b/mix.exs index d7992ee37..741f917e6 100644 --- a/mix.exs +++ b/mix.exs @@ -90,8 +90,6 @@ defp elixirc_paths(:test), do: ["lib", "test/support"] defp elixirc_paths(_), do: ["lib"] defp warnings_as_errors(:prod), do: false - # Uncomment this if you need testing configurable_from_database logic - # defp warnings_as_errors(:dev), do: false defp warnings_as_errors(_), do: true # Specifies OAuth dependencies. From ce314e6fe236c7a41535dd8a9a0f097c74c6f1ce Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 14 Jul 2020 11:24:58 -0500 Subject: [PATCH 040/236] Clarify description and suggestion --- config/description.exs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/description.exs b/config/description.exs index 8ec4b712f..2b41e7dac 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2008,14 +2008,14 @@ label: "Pleroma Admin Token", type: :group, description: - "Allows to set a token that can be used to authenticate with the admin api without using an actual user by giving it as the `admin_token` parameter (risky; use HTTP Basic Auth or OAuth-based authentication if possible)", + "Allows setting a token that can be used to authenticate requests with admin privileges without a normal user account token. Append the `admin_token` parameter to requests to utilize it. (Please reconsider using HTTP Basic Auth or OAuth-based authentication if possible)", children: [ %{ key: :admin_token, type: :string, description: "Admin token", suggestions: [ - "We recommend NOT setting the value do to increased security risk; if set, use a secure random long string or UUID (and change it as often as possible)" + "Please use a high entropy string or UUID" ] } ] From 124b4709dcf12a417f5164e53ef3ba67e538d4c7 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Tue, 14 Jul 2020 19:31:05 +0300 Subject: [PATCH 041/236] [#1940] Added `admin_token` param (as `admin_api_params/0`) to existing Admin API OpenAPI operations. --- lib/pleroma/web/api_spec/helpers.ex | 4 ++++ .../web/api_spec/operations/admin/config_operation.ex | 3 +++ .../web/api_spec/operations/admin/invite_operation.ex | 4 ++++ .../operations/admin/media_proxy_cache_operation.ex | 3 +++ .../web/api_spec/operations/admin/oauth_app_operation.ex | 6 ++++-- .../web/api_spec/operations/admin/relay_operation.ex | 3 +++ .../web/api_spec/operations/admin/report_operation.ex | 7 +++++-- .../web/api_spec/operations/admin/status_operation.ex | 7 ++++--- test/web/admin_api/controllers/config_controller_test.exs | 8 ++++++++ 9 files changed, 38 insertions(+), 7 deletions(-) diff --git a/lib/pleroma/web/api_spec/helpers.ex b/lib/pleroma/web/api_spec/helpers.ex index a258e8421..2a7f1a706 100644 --- a/lib/pleroma/web/api_spec/helpers.ex +++ b/lib/pleroma/web/api_spec/helpers.ex @@ -29,6 +29,10 @@ def request_body(description, schema_ref, opts \\ []) do } end + def admin_api_params do + [Operation.parameter(:admin_token, :query, :string, "Allows authorization via admin token.")] + end + def pagination_params do [ Operation.parameter(:max_id, :query, :string, "Return items older than this ID"), diff --git a/lib/pleroma/web/api_spec/operations/admin/config_operation.ex b/lib/pleroma/web/api_spec/operations/admin/config_operation.ex index 7b38a2ef4..3a8380797 100644 --- a/lib/pleroma/web/api_spec/operations/admin/config_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/config_operation.ex @@ -26,6 +26,7 @@ def show_operation do %Schema{type: :boolean, default: false}, "Get only saved in database settings" ) + | admin_api_params() ], security: [%{"oAuth" => ["read"]}], responses: %{ @@ -41,6 +42,7 @@ def update_operation do summary: "Update config settings", operationId: "AdminAPI.ConfigController.update", security: [%{"oAuth" => ["write"]}], + parameters: admin_api_params(), requestBody: request_body("Parameters", %Schema{ type: :object, @@ -73,6 +75,7 @@ def descriptions_operation do summary: "Get JSON with config descriptions.", operationId: "AdminAPI.ConfigController.descriptions", security: [%{"oAuth" => ["read"]}], + parameters: admin_api_params(), responses: %{ 200 => Operation.response("Config Descriptions", "application/json", %Schema{ diff --git a/lib/pleroma/web/api_spec/operations/admin/invite_operation.ex b/lib/pleroma/web/api_spec/operations/admin/invite_operation.ex index d3af9db49..801024d75 100644 --- a/lib/pleroma/web/api_spec/operations/admin/invite_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/invite_operation.ex @@ -20,6 +20,7 @@ def index_operation do summary: "Get a list of generated invites", operationId: "AdminAPI.InviteController.index", security: [%{"oAuth" => ["read:invites"]}], + parameters: admin_api_params(), responses: %{ 200 => Operation.response("Invites", "application/json", %Schema{ @@ -51,6 +52,7 @@ def create_operation do summary: "Create an account registration invite token", operationId: "AdminAPI.InviteController.create", security: [%{"oAuth" => ["write:invites"]}], + parameters: admin_api_params(), requestBody: request_body("Parameters", %Schema{ type: :object, @@ -71,6 +73,7 @@ def revoke_operation do summary: "Revoke invite by token", operationId: "AdminAPI.InviteController.revoke", security: [%{"oAuth" => ["write:invites"]}], + parameters: admin_api_params(), requestBody: request_body( "Parameters", @@ -97,6 +100,7 @@ def email_operation do summary: "Sends registration invite via email", operationId: "AdminAPI.InviteController.email", security: [%{"oAuth" => ["write:invites"]}], + parameters: admin_api_params(), requestBody: request_body( "Parameters", diff --git a/lib/pleroma/web/api_spec/operations/admin/media_proxy_cache_operation.ex b/lib/pleroma/web/api_spec/operations/admin/media_proxy_cache_operation.ex index 0358cfbad..20d033f66 100644 --- a/lib/pleroma/web/api_spec/operations/admin/media_proxy_cache_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/media_proxy_cache_operation.ex @@ -33,6 +33,7 @@ def index_operation do %Schema{type: :integer, default: 50}, "Number of statuses to return" ) + | admin_api_params() ], responses: %{ 200 => success_response() @@ -46,6 +47,7 @@ def delete_operation do summary: "Remove a banned MediaProxy URL from Cachex", operationId: "AdminAPI.MediaProxyCacheController.delete", security: [%{"oAuth" => ["write:media_proxy_caches"]}], + parameters: admin_api_params(), requestBody: request_body( "Parameters", @@ -71,6 +73,7 @@ def purge_operation do summary: "Purge and optionally ban a MediaProxy URL", operationId: "AdminAPI.MediaProxyCacheController.purge", security: [%{"oAuth" => ["write:media_proxy_caches"]}], + parameters: admin_api_params(), requestBody: request_body( "Parameters", diff --git a/lib/pleroma/web/api_spec/operations/admin/oauth_app_operation.ex b/lib/pleroma/web/api_spec/operations/admin/oauth_app_operation.ex index fbc9f80d7..a75f3e622 100644 --- a/lib/pleroma/web/api_spec/operations/admin/oauth_app_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/oauth_app_operation.ex @@ -36,6 +36,7 @@ def index_operation do %Schema{type: :integer, default: 50}, "Number of apps to return" ) + | admin_api_params() ], responses: %{ 200 => @@ -72,6 +73,7 @@ def create_operation do summary: "Create OAuth App", operationId: "AdminAPI.OAuthAppController.create", requestBody: request_body("Parameters", create_request()), + parameters: admin_api_params(), security: [%{"oAuth" => ["write"]}], responses: %{ 200 => Operation.response("App", "application/json", oauth_app()), @@ -85,7 +87,7 @@ def update_operation do tags: ["Admin", "oAuth Apps"], summary: "Update OAuth App", operationId: "AdminAPI.OAuthAppController.update", - parameters: [id_param()], + parameters: [id_param() | admin_api_params()], security: [%{"oAuth" => ["write"]}], requestBody: request_body("Parameters", update_request()), responses: %{ @@ -103,7 +105,7 @@ def delete_operation do tags: ["Admin", "oAuth Apps"], summary: "Delete OAuth App", operationId: "AdminAPI.OAuthAppController.delete", - parameters: [id_param()], + parameters: [id_param() | admin_api_params()], security: [%{"oAuth" => ["write"]}], responses: %{ 204 => no_content_response(), diff --git a/lib/pleroma/web/api_spec/operations/admin/relay_operation.ex b/lib/pleroma/web/api_spec/operations/admin/relay_operation.ex index 7672cb467..67ee5eee0 100644 --- a/lib/pleroma/web/api_spec/operations/admin/relay_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/relay_operation.ex @@ -19,6 +19,7 @@ def index_operation do summary: "List Relays", operationId: "AdminAPI.RelayController.index", security: [%{"oAuth" => ["read"]}], + parameters: admin_api_params(), responses: %{ 200 => Operation.response("Response", "application/json", %Schema{ @@ -41,6 +42,7 @@ def follow_operation do summary: "Follow a Relay", operationId: "AdminAPI.RelayController.follow", security: [%{"oAuth" => ["write:follows"]}], + parameters: admin_api_params(), requestBody: request_body("Parameters", %Schema{ type: :object, @@ -64,6 +66,7 @@ def unfollow_operation do summary: "Unfollow a Relay", operationId: "AdminAPI.RelayController.unfollow", security: [%{"oAuth" => ["write:follows"]}], + parameters: admin_api_params(), requestBody: request_body("Parameters", %Schema{ type: :object, diff --git a/lib/pleroma/web/api_spec/operations/admin/report_operation.ex b/lib/pleroma/web/api_spec/operations/admin/report_operation.ex index 15e78bfaf..3bb7ec49e 100644 --- a/lib/pleroma/web/api_spec/operations/admin/report_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/report_operation.ex @@ -48,6 +48,7 @@ def index_operation do %Schema{type: :integer, default: 50}, "Number number of log entries per page" ) + | admin_api_params() ], responses: %{ 200 => @@ -71,7 +72,7 @@ def show_operation do tags: ["Admin", "Reports"], summary: "Get an individual report", operationId: "AdminAPI.ReportController.show", - parameters: [id_param()], + parameters: [id_param() | admin_api_params()], security: [%{"oAuth" => ["read:reports"]}], responses: %{ 200 => Operation.response("Report", "application/json", report()), @@ -86,6 +87,7 @@ def update_operation do summary: "Change the state of one or multiple reports", operationId: "AdminAPI.ReportController.update", security: [%{"oAuth" => ["write:reports"]}], + parameters: admin_api_params(), requestBody: request_body("Parameters", update_request(), required: true), responses: %{ 204 => no_content_response(), @@ -100,7 +102,7 @@ def notes_create_operation do tags: ["Admin", "Reports"], summary: "Create report note", operationId: "AdminAPI.ReportController.notes_create", - parameters: [id_param()], + parameters: [id_param() | admin_api_params()], requestBody: request_body("Parameters", %Schema{ type: :object, @@ -124,6 +126,7 @@ def notes_delete_operation do parameters: [ Operation.parameter(:report_id, :path, :string, "Report ID"), Operation.parameter(:id, :path, :string, "Note ID") + | admin_api_params() ], security: [%{"oAuth" => ["write:reports"]}], responses: %{ diff --git a/lib/pleroma/web/api_spec/operations/admin/status_operation.ex b/lib/pleroma/web/api_spec/operations/admin/status_operation.ex index 745399b4b..c105838a4 100644 --- a/lib/pleroma/web/api_spec/operations/admin/status_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/status_operation.ex @@ -55,6 +55,7 @@ def index_operation do %Schema{type: :integer, default: 50}, "Number of statuses to return" ) + | admin_api_params() ], responses: %{ 200 => @@ -71,7 +72,7 @@ def show_operation do tags: ["Admin", "Statuses"], summary: "Show Status", operationId: "AdminAPI.StatusController.show", - parameters: [id_param()], + parameters: [id_param() | admin_api_params()], security: [%{"oAuth" => ["read:statuses"]}], responses: %{ 200 => Operation.response("Status", "application/json", status()), @@ -85,7 +86,7 @@ def update_operation do tags: ["Admin", "Statuses"], summary: "Change the scope of an individual reported status", operationId: "AdminAPI.StatusController.update", - parameters: [id_param()], + parameters: [id_param() | admin_api_params()], security: [%{"oAuth" => ["write:statuses"]}], requestBody: request_body("Parameters", update_request(), required: true), responses: %{ @@ -100,7 +101,7 @@ def delete_operation do tags: ["Admin", "Statuses"], summary: "Delete an individual reported status", operationId: "AdminAPI.StatusController.delete", - parameters: [id_param()], + parameters: [id_param() | admin_api_params()], security: [%{"oAuth" => ["write:statuses"]}], responses: %{ 200 => empty_object_response(), diff --git a/test/web/admin_api/controllers/config_controller_test.exs b/test/web/admin_api/controllers/config_controller_test.exs index 064ef9bc7..61bc9fd39 100644 --- a/test/web/admin_api/controllers/config_controller_test.exs +++ b/test/web/admin_api/controllers/config_controller_test.exs @@ -152,6 +152,14 @@ test "subkeys with full update right merge", %{conn: conn} do assert emoji_val[:groups] == [a: 1, b: 2] assert assets_val[:mascots] == [a: 1, b: 2] end + + test "with valid `admin_token` query parameter, skips OAuth scopes check" do + clear_config([:admin_token], "password123") + + build_conn() + |> get("/api/pleroma/admin/config?admin_token=password123") + |> json_response_and_validate_schema(200) + end end test "POST /api/pleroma/admin/config error", %{conn: conn} do From a1570ba6ad4c871df3783d06772b2eb8d2d6c4f1 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 14 Jul 2020 13:04:57 -0500 Subject: [PATCH 042/236] AdminAPI: Return `registration_reason` with users --- docs/API/admin_api.md | 3 +- .../web/admin_api/views/account_view.ex | 3 +- .../controllers/admin_api_controller_test.exs | 70 +++++++++++++------ 3 files changed, 51 insertions(+), 25 deletions(-) diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index baf895d90..de4e36efa 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -46,7 +46,8 @@ Configuration options: "local": bool, "tags": array, "avatar": string, - "display_name": string + "display_name": string, + "registration_reason": string, }, ... ] diff --git a/lib/pleroma/web/admin_api/views/account_view.ex b/lib/pleroma/web/admin_api/views/account_view.ex index e1e929632..78062e520 100644 --- a/lib/pleroma/web/admin_api/views/account_view.ex +++ b/lib/pleroma/web/admin_api/views/account_view.ex @@ -77,7 +77,8 @@ def render("show.json", %{user: user}) do "roles" => User.roles(user), "tags" => user.tags || [], "confirmation_pending" => user.confirmation_pending, - "url" => user.uri || user.ap_id + "url" => user.uri || user.ap_id, + "registration_reason" => user.registration_reason } end diff --git a/test/web/admin_api/controllers/admin_api_controller_test.exs b/test/web/admin_api/controllers/admin_api_controller_test.exs index c2433f23c..556e8d97a 100644 --- a/test/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/web/admin_api/controllers/admin_api_controller_test.exs @@ -338,7 +338,8 @@ test "Show", %{conn: conn} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, - "url" => user.ap_id + "url" => user.ap_id, + "registration_reason" => nil } assert expected == json_response(conn, 200) @@ -601,7 +602,9 @@ test "/api/pleroma/admin/users/:nickname/password_reset", %{conn: conn} do describe "GET /api/pleroma/admin/users" do test "renders users array for the first page", %{conn: conn, admin: admin} do - user = insert(:user, local: false, tags: ["foo", "bar"]) + user = + insert(:user, local: false, tags: ["foo", "bar"], registration_reason: "I'm a chill dude") + conn = get(conn, "/api/pleroma/admin/users?page=1") users = @@ -616,7 +619,8 @@ test "renders users array for the first page", %{conn: conn, admin: admin} do "avatar" => User.avatar_url(admin) |> MediaProxy.url(), "display_name" => HTML.strip_tags(admin.name || admin.nickname), "confirmation_pending" => false, - "url" => admin.ap_id + "url" => admin.ap_id, + "registration_reason" => nil }, %{ "deactivated" => user.deactivated, @@ -628,7 +632,8 @@ test "renders users array for the first page", %{conn: conn, admin: admin} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, - "url" => user.ap_id + "url" => user.ap_id, + "registration_reason" => "I'm a chill dude" } ] |> Enum.sort_by(& &1["nickname"]) @@ -701,7 +706,8 @@ test "regular search", %{conn: conn} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, - "url" => user.ap_id + "url" => user.ap_id, + "registration_reason" => nil } ] } @@ -727,7 +733,8 @@ test "search by domain", %{conn: conn} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, - "url" => user.ap_id + "url" => user.ap_id, + "registration_reason" => nil } ] } @@ -753,7 +760,8 @@ test "search by full nickname", %{conn: conn} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, - "url" => user.ap_id + "url" => user.ap_id, + "registration_reason" => nil } ] } @@ -779,7 +787,8 @@ test "search by display name", %{conn: conn} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, - "url" => user.ap_id + "url" => user.ap_id, + "registration_reason" => nil } ] } @@ -805,7 +814,8 @@ test "search by email", %{conn: conn} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, - "url" => user.ap_id + "url" => user.ap_id, + "registration_reason" => nil } ] } @@ -831,7 +841,8 @@ test "regular search with page size", %{conn: conn} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, - "url" => user.ap_id + "url" => user.ap_id, + "registration_reason" => nil } ] } @@ -852,7 +863,8 @@ test "regular search with page size", %{conn: conn} do "avatar" => User.avatar_url(user2) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user2.name || user2.nickname), "confirmation_pending" => false, - "url" => user2.ap_id + "url" => user2.ap_id, + "registration_reason" => nil } ] } @@ -885,7 +897,8 @@ test "only local users" do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, - "url" => user.ap_id + "url" => user.ap_id, + "registration_reason" => nil } ] } @@ -911,7 +924,8 @@ test "only local users with no query", %{conn: conn, admin: old_admin} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, - "url" => user.ap_id + "url" => user.ap_id, + "registration_reason" => nil }, %{ "deactivated" => admin.deactivated, @@ -923,7 +937,8 @@ test "only local users with no query", %{conn: conn, admin: old_admin} do "avatar" => User.avatar_url(admin) |> MediaProxy.url(), "display_name" => HTML.strip_tags(admin.name || admin.nickname), "confirmation_pending" => false, - "url" => admin.ap_id + "url" => admin.ap_id, + "registration_reason" => nil }, %{ "deactivated" => false, @@ -935,7 +950,8 @@ test "only local users with no query", %{conn: conn, admin: old_admin} do "avatar" => User.avatar_url(old_admin) |> MediaProxy.url(), "display_name" => HTML.strip_tags(old_admin.name || old_admin.nickname), "confirmation_pending" => false, - "url" => old_admin.ap_id + "url" => old_admin.ap_id, + "registration_reason" => nil } ] |> Enum.sort_by(& &1["nickname"]) @@ -966,7 +982,8 @@ test "load only admins", %{conn: conn, admin: admin} do "avatar" => User.avatar_url(admin) |> MediaProxy.url(), "display_name" => HTML.strip_tags(admin.name || admin.nickname), "confirmation_pending" => false, - "url" => admin.ap_id + "url" => admin.ap_id, + "registration_reason" => nil }, %{ "deactivated" => false, @@ -978,7 +995,8 @@ test "load only admins", %{conn: conn, admin: admin} do "avatar" => User.avatar_url(second_admin) |> MediaProxy.url(), "display_name" => HTML.strip_tags(second_admin.name || second_admin.nickname), "confirmation_pending" => false, - "url" => second_admin.ap_id + "url" => second_admin.ap_id, + "registration_reason" => nil } ] |> Enum.sort_by(& &1["nickname"]) @@ -1011,7 +1029,8 @@ test "load only moderators", %{conn: conn} do "avatar" => User.avatar_url(moderator) |> MediaProxy.url(), "display_name" => HTML.strip_tags(moderator.name || moderator.nickname), "confirmation_pending" => false, - "url" => moderator.ap_id + "url" => moderator.ap_id, + "registration_reason" => nil } ] } @@ -1037,7 +1056,8 @@ test "load users with tags list", %{conn: conn} do "avatar" => User.avatar_url(user1) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user1.name || user1.nickname), "confirmation_pending" => false, - "url" => user1.ap_id + "url" => user1.ap_id, + "registration_reason" => nil }, %{ "deactivated" => false, @@ -1049,7 +1069,8 @@ test "load users with tags list", %{conn: conn} do "avatar" => User.avatar_url(user2) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user2.name || user2.nickname), "confirmation_pending" => false, - "url" => user2.ap_id + "url" => user2.ap_id, + "registration_reason" => nil } ] |> Enum.sort_by(& &1["nickname"]) @@ -1089,7 +1110,8 @@ test "it works with multiple filters" do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, - "url" => user.ap_id + "url" => user.ap_id, + "registration_reason" => nil } ] } @@ -1114,7 +1136,8 @@ test "it omits relay user", %{admin: admin, conn: conn} do "avatar" => User.avatar_url(admin) |> MediaProxy.url(), "display_name" => HTML.strip_tags(admin.name || admin.nickname), "confirmation_pending" => false, - "url" => admin.ap_id + "url" => admin.ap_id, + "registration_reason" => nil } ] } @@ -1177,7 +1200,8 @@ test "PATCH /api/pleroma/admin/users/:nickname/toggle_activation", %{admin: admi "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, - "url" => user.ap_id + "url" => user.ap_id, + "registration_reason" => nil } log_entry = Repo.one(ModerationLog) From 37297a8482eedbb0a3adab2748b3e76401d87e4a Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 14 Jul 2020 13:12:16 -0500 Subject: [PATCH 043/236] Improve error messages --- lib/pleroma/application_requirements.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/application_requirements.ex b/lib/pleroma/application_requirements.ex index f0f34734e..d51160b82 100644 --- a/lib/pleroma/application_requirements.ex +++ b/lib/pleroma/application_requirements.ex @@ -31,10 +31,10 @@ def check_confirmation_accounts!(:ok) do if Pleroma.Config.get([:instance, :account_activation_required]) && not Pleroma.Config.get([Pleroma.Emails.Mailer, :enabled]) do Logger.error( - "To use confirmation an user account need to enable and setting mailer.\nIf you want to start Pleroma anyway, set\nconfig :pleroma, :instance, account_activation_required: false\nOtherwise setup and enable mailer." + "Account activation enabled, but no Mailer settings enabled.\nPlease set config :pleroma, :instance, account_activation_required: false\nOtherwise setup and enable Mailer." ) - {:error, "Confirmation account: Mailer is disabled"} + {:error, "Account activation enabled, but Mailer is disabled. Cannot send confirmation emails."} else :ok end From 777a7edc6b4bf8b9e0ff3b86bdb780f8f2ae2610 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 14 Jul 2020 13:15:37 -0500 Subject: [PATCH 044/236] Lint and fix test to match new log message --- lib/pleroma/application_requirements.ex | 3 ++- test/application_requirements_test.exs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/application_requirements.ex b/lib/pleroma/application_requirements.ex index d51160b82..ee88c3346 100644 --- a/lib/pleroma/application_requirements.ex +++ b/lib/pleroma/application_requirements.ex @@ -34,7 +34,8 @@ def check_confirmation_accounts!(:ok) do "Account activation enabled, but no Mailer settings enabled.\nPlease set config :pleroma, :instance, account_activation_required: false\nOtherwise setup and enable Mailer." ) - {:error, "Account activation enabled, but Mailer is disabled. Cannot send confirmation emails."} + {:error, + "Account activation enabled, but Mailer is disabled. Cannot send confirmation emails."} else :ok end diff --git a/test/application_requirements_test.exs b/test/application_requirements_test.exs index 8c92be290..fc609d174 100644 --- a/test/application_requirements_test.exs +++ b/test/application_requirements_test.exs @@ -26,7 +26,7 @@ test "raises if account confirmation is required but mailer isn't enable" do Pleroma.Config.put([Pleroma.Emails.Mailer, :enabled], false) assert_raise Pleroma.ApplicationRequirements.VerifyError, - "Confirmation account: Mailer is disabled", + "Account activation enabled, but Mailer is disabled. Cannot send confirmation emails.", fn -> capture_log(&Pleroma.ApplicationRequirements.verify!/0) end From 1dd767b8c7b7565ad94ccb85324e97fa9885923e Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Tue, 14 Jul 2020 21:44:08 +0300 Subject: [PATCH 045/236] Include port in host for signatures --- lib/pleroma/web/activity_pub/publisher.ex | 20 +++++++++---- test/web/activity_pub/publisher_test.exs | 34 ++++++++++++++++++++++- 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/web/activity_pub/publisher.ex b/lib/pleroma/web/activity_pub/publisher.ex index b70cbd043..d88f7f3ee 100644 --- a/lib/pleroma/web/activity_pub/publisher.ex +++ b/lib/pleroma/web/activity_pub/publisher.ex @@ -49,7 +49,8 @@ def is_representable?(%Activity{} = activity) do """ def publish_one(%{inbox: inbox, json: json, actor: %User{} = actor, id: id} = params) do Logger.debug("Federating #{id} to #{inbox}") - %{host: host, path: path} = URI.parse(inbox) + + uri = URI.parse(inbox) digest = "SHA-256=" <> (:crypto.hash(:sha256, json) |> Base.encode64()) @@ -57,8 +58,8 @@ def publish_one(%{inbox: inbox, json: json, actor: %User{} = actor, id: id} = pa signature = Pleroma.Signature.sign(actor, %{ - "(request-target)": "post #{path}", - host: host, + "(request-target)": "post #{uri.path}", + host: signature_host(uri), "content-length": byte_size(json), digest: digest, date: date @@ -76,8 +77,9 @@ def publish_one(%{inbox: inbox, json: json, actor: %User{} = actor, id: id} = pa {"digest", digest} ] ) do - if !Map.has_key?(params, :unreachable_since) || params[:unreachable_since], - do: Instances.set_reachable(inbox) + if not Map.has_key?(params, :unreachable_since) || params[:unreachable_since] do + Instances.set_reachable(inbox) + end result else @@ -96,6 +98,14 @@ def publish_one(%{actor_id: actor_id} = params) do |> publish_one() end + defp signature_host(%URI{port: port, scheme: scheme, host: host}) do + if port == URI.default_port(scheme) do + host + else + "#{host}:#{port}" + end + end + defp should_federate?(inbox, public) do if public do true diff --git a/test/web/activity_pub/publisher_test.exs b/test/web/activity_pub/publisher_test.exs index c2bc38d52..b9388b966 100644 --- a/test/web/activity_pub/publisher_test.exs +++ b/test/web/activity_pub/publisher_test.exs @@ -123,6 +123,39 @@ test "it returns inbox for messages involving single recipients in total" do end describe "publish_one/1" do + test "publish to url with with different ports" do + inbox80 = "http://42.site/users/nick1/inbox" + inbox42 = "http://42.site:42/users/nick1/inbox" + + mock(fn + %{method: :post, url: "http://42.site:42/users/nick1/inbox"} -> + {:ok, %Tesla.Env{status: 200, body: "port 42"}} + + %{method: :post, url: "http://42.site/users/nick1/inbox"} -> + {:ok, %Tesla.Env{status: 200, body: "port 80"}} + end) + + actor = insert(:user) + + assert {:ok, %{body: "port 42"}} = + Publisher.publish_one(%{ + inbox: inbox42, + json: "{}", + actor: actor, + id: 1, + unreachable_since: true + }) + + assert {:ok, %{body: "port 80"}} = + Publisher.publish_one(%{ + inbox: inbox80, + json: "{}", + actor: actor, + id: 1, + unreachable_since: true + }) + end + test_with_mock "calls `Instances.set_reachable` on successful federation if `unreachable_since` is not specified", Instances, [:passthrough], @@ -131,7 +164,6 @@ test "it returns inbox for messages involving single recipients in total" do inbox = "http://200.site/users/nick1/inbox" assert {:ok, _} = Publisher.publish_one(%{inbox: inbox, json: "{}", actor: actor, id: 1}) - assert called(Instances.set_reachable(inbox)) end From b750129da1434823746e3dbc237d0e04552fa753 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 14 Jul 2020 13:47:05 -0500 Subject: [PATCH 046/236] AdminAPI: Return `approval_pending` with users --- docs/API/admin_api.md | 2 + .../web/admin_api/views/account_view.ex | 1 + .../controllers/admin_api_controller_test.exs | 42 +++++++++++++++++-- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index de4e36efa..fdd9df6c7 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -47,6 +47,8 @@ Configuration options: "tags": array, "avatar": string, "display_name": string, + "confirmation_pending": bool, + "approval_pending": bool, "registration_reason": string, }, ... diff --git a/lib/pleroma/web/admin_api/views/account_view.ex b/lib/pleroma/web/admin_api/views/account_view.ex index 78062e520..bdab04ad2 100644 --- a/lib/pleroma/web/admin_api/views/account_view.ex +++ b/lib/pleroma/web/admin_api/views/account_view.ex @@ -77,6 +77,7 @@ def render("show.json", %{user: user}) do "roles" => User.roles(user), "tags" => user.tags || [], "confirmation_pending" => user.confirmation_pending, + "approval_pending" => user.approval_pending, "url" => user.uri || user.ap_id, "registration_reason" => user.registration_reason } diff --git a/test/web/admin_api/controllers/admin_api_controller_test.exs b/test/web/admin_api/controllers/admin_api_controller_test.exs index 556e8d97a..ccda5df3f 100644 --- a/test/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/web/admin_api/controllers/admin_api_controller_test.exs @@ -338,6 +338,7 @@ test "Show", %{conn: conn} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => user.ap_id, "registration_reason" => nil } @@ -602,8 +603,8 @@ test "/api/pleroma/admin/users/:nickname/password_reset", %{conn: conn} do describe "GET /api/pleroma/admin/users" do test "renders users array for the first page", %{conn: conn, admin: admin} do - user = - insert(:user, local: false, tags: ["foo", "bar"], registration_reason: "I'm a chill dude") + user = insert(:user, local: false, tags: ["foo", "bar"]) + user2 = insert(:user, approval_pending: true, registration_reason: "I'm a chill dude") conn = get(conn, "/api/pleroma/admin/users?page=1") @@ -619,6 +620,7 @@ test "renders users array for the first page", %{conn: conn, admin: admin} do "avatar" => User.avatar_url(admin) |> MediaProxy.url(), "display_name" => HTML.strip_tags(admin.name || admin.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => admin.ap_id, "registration_reason" => nil }, @@ -632,14 +634,29 @@ test "renders users array for the first page", %{conn: conn, admin: admin} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => user.ap_id, + "registration_reason" => nil + }, + %{ + "deactivated" => user2.deactivated, + "id" => user2.id, + "nickname" => user2.nickname, + "roles" => %{"admin" => false, "moderator" => false}, + "local" => true, + "tags" => [], + "avatar" => User.avatar_url(user2) |> MediaProxy.url(), + "display_name" => HTML.strip_tags(user2.name || user2.nickname), + "confirmation_pending" => false, + "approval_pending" => true, + "url" => user2.ap_id, "registration_reason" => "I'm a chill dude" } ] |> Enum.sort_by(& &1["nickname"]) assert json_response(conn, 200) == %{ - "count" => 2, + "count" => 3, "page_size" => 50, "users" => users } @@ -706,6 +723,7 @@ test "regular search", %{conn: conn} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => user.ap_id, "registration_reason" => nil } @@ -733,6 +751,7 @@ test "search by domain", %{conn: conn} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => user.ap_id, "registration_reason" => nil } @@ -760,6 +779,7 @@ test "search by full nickname", %{conn: conn} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => user.ap_id, "registration_reason" => nil } @@ -787,6 +807,7 @@ test "search by display name", %{conn: conn} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => user.ap_id, "registration_reason" => nil } @@ -814,6 +835,7 @@ test "search by email", %{conn: conn} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => user.ap_id, "registration_reason" => nil } @@ -841,6 +863,7 @@ test "regular search with page size", %{conn: conn} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => user.ap_id, "registration_reason" => nil } @@ -863,6 +886,7 @@ test "regular search with page size", %{conn: conn} do "avatar" => User.avatar_url(user2) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user2.name || user2.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => user2.ap_id, "registration_reason" => nil } @@ -897,6 +921,7 @@ test "only local users" do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => user.ap_id, "registration_reason" => nil } @@ -924,6 +949,7 @@ test "only local users with no query", %{conn: conn, admin: old_admin} do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => user.ap_id, "registration_reason" => nil }, @@ -937,6 +963,7 @@ test "only local users with no query", %{conn: conn, admin: old_admin} do "avatar" => User.avatar_url(admin) |> MediaProxy.url(), "display_name" => HTML.strip_tags(admin.name || admin.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => admin.ap_id, "registration_reason" => nil }, @@ -950,6 +977,7 @@ test "only local users with no query", %{conn: conn, admin: old_admin} do "avatar" => User.avatar_url(old_admin) |> MediaProxy.url(), "display_name" => HTML.strip_tags(old_admin.name || old_admin.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => old_admin.ap_id, "registration_reason" => nil } @@ -982,6 +1010,7 @@ test "load only admins", %{conn: conn, admin: admin} do "avatar" => User.avatar_url(admin) |> MediaProxy.url(), "display_name" => HTML.strip_tags(admin.name || admin.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => admin.ap_id, "registration_reason" => nil }, @@ -995,6 +1024,7 @@ test "load only admins", %{conn: conn, admin: admin} do "avatar" => User.avatar_url(second_admin) |> MediaProxy.url(), "display_name" => HTML.strip_tags(second_admin.name || second_admin.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => second_admin.ap_id, "registration_reason" => nil } @@ -1029,6 +1059,7 @@ test "load only moderators", %{conn: conn} do "avatar" => User.avatar_url(moderator) |> MediaProxy.url(), "display_name" => HTML.strip_tags(moderator.name || moderator.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => moderator.ap_id, "registration_reason" => nil } @@ -1056,6 +1087,7 @@ test "load users with tags list", %{conn: conn} do "avatar" => User.avatar_url(user1) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user1.name || user1.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => user1.ap_id, "registration_reason" => nil }, @@ -1069,6 +1101,7 @@ test "load users with tags list", %{conn: conn} do "avatar" => User.avatar_url(user2) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user2.name || user2.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => user2.ap_id, "registration_reason" => nil } @@ -1110,6 +1143,7 @@ test "it works with multiple filters" do "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => user.ap_id, "registration_reason" => nil } @@ -1136,6 +1170,7 @@ test "it omits relay user", %{admin: admin, conn: conn} do "avatar" => User.avatar_url(admin) |> MediaProxy.url(), "display_name" => HTML.strip_tags(admin.name || admin.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => admin.ap_id, "registration_reason" => nil } @@ -1200,6 +1235,7 @@ test "PATCH /api/pleroma/admin/users/:nickname/toggle_activation", %{admin: admi "avatar" => User.avatar_url(user) |> MediaProxy.url(), "display_name" => HTML.strip_tags(user.name || user.nickname), "confirmation_pending" => false, + "approval_pending" => false, "url" => user.ap_id, "registration_reason" => nil } From 33f1b29b2c9cfe6f09c6b088b8b6f7bf14379b9b Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 14 Jul 2020 14:14:43 -0500 Subject: [PATCH 047/236] AdminAPI: Filter users by `need_approval` --- docs/API/admin_api.md | 1 + lib/pleroma/user/query.ex | 5 +++ .../controllers/admin_api_controller.ex | 2 +- .../controllers/admin_api_controller_test.exs | 38 +++++++++++++++++++ test/web/admin_api/search_test.exs | 11 ++++++ 5 files changed, 56 insertions(+), 1 deletion(-) diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index fdd9df6c7..42071376e 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -19,6 +19,7 @@ Configuration options: - `local`: only local users - `external`: only external users - `active`: only active users + - `need_approval`: only unapproved users - `deactivated`: only deactivated users - `is_admin`: users with admin role - `is_moderator`: users with moderator role diff --git a/lib/pleroma/user/query.ex b/lib/pleroma/user/query.ex index 66ffe9090..45553cb6c 100644 --- a/lib/pleroma/user/query.ex +++ b/lib/pleroma/user/query.ex @@ -42,6 +42,7 @@ defmodule Pleroma.User.Query do external: boolean(), active: boolean(), deactivated: boolean(), + need_approval: boolean(), is_admin: boolean(), is_moderator: boolean(), super_users: boolean(), @@ -146,6 +147,10 @@ defp compose_query({:deactivated, true}, query) do |> where([u], not is_nil(u.nickname)) end + defp compose_query({:need_approval, _}, query) do + where(query, [u], u.approval_pending) + end + defp compose_query({:followers, %User{id: id}}, query) do query |> where([u], u.id != ^id) diff --git a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex index e5f14269a..037a6f269 100644 --- a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex @@ -350,7 +350,7 @@ def list_users(conn, params) do end end - @filters ~w(local external active deactivated is_admin is_moderator) + @filters ~w(local external active deactivated need_approval is_admin is_moderator) @spec maybe_parse_filters(String.t()) :: %{required(String.t()) => true} | %{} defp maybe_parse_filters(filters) when is_nil(filters) or filters == "", do: %{} diff --git a/test/web/admin_api/controllers/admin_api_controller_test.exs b/test/web/admin_api/controllers/admin_api_controller_test.exs index ccda5df3f..9cc8b1879 100644 --- a/test/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/web/admin_api/controllers/admin_api_controller_test.exs @@ -991,6 +991,44 @@ test "only local users with no query", %{conn: conn, admin: old_admin} do } end + test "only unapproved users", %{conn: conn} do + user = + insert(:user, + nickname: "sadboy", + approval_pending: true, + registration_reason: "Plz let me in!" + ) + + insert(:user, nickname: "happyboy", approval_pending: false) + + conn = get(conn, "/api/pleroma/admin/users?filters=need_approval") + + users = + [ + %{ + "deactivated" => user.deactivated, + "id" => user.id, + "nickname" => user.nickname, + "roles" => %{"admin" => false, "moderator" => false}, + "local" => true, + "tags" => [], + "avatar" => User.avatar_url(user) |> MediaProxy.url(), + "display_name" => HTML.strip_tags(user.name || user.nickname), + "confirmation_pending" => false, + "approval_pending" => true, + "url" => user.ap_id, + "registration_reason" => "Plz let me in!" + } + ] + |> Enum.sort_by(& &1["nickname"]) + + assert json_response(conn, 200) == %{ + "count" => 1, + "page_size" => 50, + "users" => users + } + end + test "load only admins", %{conn: conn, admin: admin} do second_admin = insert(:user, is_admin: true) insert(:user) diff --git a/test/web/admin_api/search_test.exs b/test/web/admin_api/search_test.exs index e0e3d4153..b974cedd5 100644 --- a/test/web/admin_api/search_test.exs +++ b/test/web/admin_api/search_test.exs @@ -166,5 +166,16 @@ test "it returns user by email" do assert total == 3 assert count == 1 end + + test "it returns unapproved user" do + unapproved = insert(:user, approval_pending: true) + insert(:user) + insert(:user) + + {:ok, _results, total} = Search.user() + {:ok, [^unapproved], count} = Search.user(%{need_approval: true}) + assert total == 3 + assert count == 1 + end end end From 20d24741af8ae755ce7f753680a55ca24ef7c1d4 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 14 Jul 2020 18:02:44 -0500 Subject: [PATCH 048/236] AdminAPI: Add `PATCH /api/pleroma/admin/users/approve` endpoint --- docs/API/admin_api.md | 18 +++++++++++++ lib/pleroma/moderation_log.ex | 11 ++++++++ lib/pleroma/user.ex | 13 ++++++++++ .../controllers/admin_api_controller.ex | 16 ++++++++++++ lib/pleroma/web/router.ex | 1 + test/user_test.exs | 25 +++++++++++++++++++ .../controllers/admin_api_controller_test.exs | 20 +++++++++++++++ 7 files changed, 104 insertions(+) diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index 42071376e..4b143e4ee 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -246,6 +246,24 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret } ``` +## `PATCH /api/pleroma/admin/users/approve` + +### Approve user + +- Params: + - `nicknames`: nicknames array +- Response: + +```json +{ + users: [ + { + // user object + } + ] +} +``` + ## `GET /api/pleroma/admin/users/:nickname_or_id` ### Retrive the details of a user diff --git a/lib/pleroma/moderation_log.ex b/lib/pleroma/moderation_log.ex index 7aacd9d80..31c9afe2a 100644 --- a/lib/pleroma/moderation_log.ex +++ b/lib/pleroma/moderation_log.ex @@ -409,6 +409,17 @@ def get_log_entry_message(%ModerationLog{ "@#{actor_nickname} deactivated users: #{users_to_nicknames_string(users)}" end + @spec get_log_entry_message(ModerationLog) :: String.t() + def get_log_entry_message(%ModerationLog{ + data: %{ + "actor" => %{"nickname" => actor_nickname}, + "action" => "approve", + "subject" => users + } + }) do + "@#{actor_nickname} approved users: #{users_to_nicknames_string(users)}" + end + @spec get_log_entry_message(ModerationLog) :: String.t() def get_log_entry_message(%ModerationLog{ data: %{ diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 51ccf6ffa..439c2c9b6 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1471,6 +1471,19 @@ def deactivate(%User{} = user, status) do end end + def approve(users) when is_list(users) do + Repo.transaction(fn -> + Enum.map(users, fn user -> + with {:ok, user} <- approve(user), do: user + end) + end) + end + + def approve(%User{} = user) do + change(user, approval_pending: false) + |> update_and_set_cache() + end + def update_notification_settings(%User{} = user, settings) do user |> cast(%{notification_settings: settings}, []) diff --git a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex index 037a6f269..53f71fcbf 100644 --- a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex @@ -44,6 +44,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do :user_toggle_activation, :user_activate, :user_deactivate, + :user_approve, :tag_users, :untag_users, :right_add, @@ -303,6 +304,21 @@ def user_deactivate(%{assigns: %{user: admin}} = conn, %{"nicknames" => nickname |> render("index.json", %{users: Keyword.values(updated_users)}) end + def user_approve(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do + users = Enum.map(nicknames, &User.get_cached_by_nickname/1) + {:ok, updated_users} = User.approve(users) + + ModerationLog.insert_log(%{ + actor: admin, + subject: users, + action: "approve" + }) + + conn + |> put_view(AccountView) + |> render("index.json", %{users: updated_users}) + end + def tag_users(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames, "tags" => tags}) do with {:ok, _} <- User.tag(nicknames, tags) do ModerationLog.insert_log(%{ diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 386308362..c6433cc53 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -138,6 +138,7 @@ defmodule Pleroma.Web.Router do patch("/users/:nickname/toggle_activation", AdminAPIController, :user_toggle_activation) patch("/users/activate", AdminAPIController, :user_activate) patch("/users/deactivate", AdminAPIController, :user_deactivate) + patch("/users/approve", AdminAPIController, :user_approve) put("/users/tag", AdminAPIController, :tag_users) delete("/users/tag", AdminAPIController, :untag_users) diff --git a/test/user_test.exs b/test/user_test.exs index e57453982..9da2aa411 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -1202,6 +1202,31 @@ test "hide a user's statuses from timelines and notifications" do end end + describe "approve" do + test "approves a user" do + user = insert(:user, approval_pending: true) + assert true == user.approval_pending + {:ok, user} = User.approve(user) + assert false == user.approval_pending + end + + test "approves a list of users" do + unapproved_users = [ + insert(:user, approval_pending: true), + insert(:user, approval_pending: true), + insert(:user, approval_pending: true) + ] + + {:ok, users} = User.approve(unapproved_users) + + assert Enum.count(users) == 3 + + Enum.each(users, fn user -> + assert false == user.approval_pending + end) + end + end + describe "delete" do setup do {:ok, user} = insert(:user) |> User.set_cache() diff --git a/test/web/admin_api/controllers/admin_api_controller_test.exs b/test/web/admin_api/controllers/admin_api_controller_test.exs index 9cc8b1879..351df8883 100644 --- a/test/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/web/admin_api/controllers/admin_api_controller_test.exs @@ -1257,6 +1257,26 @@ test "PATCH /api/pleroma/admin/users/deactivate", %{admin: admin, conn: conn} do "@#{admin.nickname} deactivated users: @#{user_one.nickname}, @#{user_two.nickname}" end + test "PATCH /api/pleroma/admin/users/approve", %{admin: admin, conn: conn} do + user_one = insert(:user, approval_pending: true) + user_two = insert(:user, approval_pending: true) + + conn = + patch( + conn, + "/api/pleroma/admin/users/approve", + %{nicknames: [user_one.nickname, user_two.nickname]} + ) + + response = json_response(conn, 200) + assert Enum.map(response["users"], & &1["approval_pending"]) == [false, false] + + log_entry = Repo.one(ModerationLog) + + assert ModerationLog.get_log_entry_message(log_entry) == + "@#{admin.nickname} approved users: @#{user_one.nickname}, @#{user_two.nickname}" + end + test "PATCH /api/pleroma/admin/users/:nickname/toggle_activation", %{admin: admin, conn: conn} do user = insert(:user) From fab44f69703975c0f6182ed1c26c1dcdad221dc5 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 14 Jul 2020 18:46:57 -0500 Subject: [PATCH 049/236] Test User with confirmation_pending: true, approval_pending: true --- test/user_test.exs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/user_test.exs b/test/user_test.exs index 9da2aa411..cd39e1623 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -1390,7 +1390,10 @@ test "returns :deactivated for deactivated user" do end test "returns :approval_pending for unapproved user" do - user = insert(:user, local: true, confirmation_pending: false, approval_pending: true) + user = insert(:user, local: true, approval_pending: true) + assert User.account_status(user) == :approval_pending + + user = insert(:user, local: true, confirmation_pending: true, approval_pending: true) assert User.account_status(user) == :approval_pending end end From e82060c47253946b79685ebff9a38e2fe0ac360e Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 14 Jul 2020 18:47:23 -0500 Subject: [PATCH 050/236] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fed80a99..a0f529108 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -58,6 +58,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Support pagination in emoji packs API (for packs and for files in pack) - Support for viewing instances favicons next to posts and accounts - Added Pleroma.Upload.Filter.Exiftool as an alternate EXIF stripping mechanism targeting GPS/location metadata. +- "By approval" registrations mode.
API Changes From df3d1bf5e57389e41a70676ccab1df81d83e3d74 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 14 Jul 2020 18:48:17 -0500 Subject: [PATCH 051/236] Add :approval_pending to User @type account_status --- lib/pleroma/user.ex | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 439c2c9b6..9c3b46ae8 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -42,7 +42,12 @@ defmodule Pleroma.User do require Logger @type t :: %__MODULE__{} - @type account_status :: :active | :deactivated | :password_reset_pending | :confirmation_pending + @type account_status :: + :active + | :deactivated + | :password_reset_pending + | :confirmation_pending + | :approval_pending @primary_key {:id, FlakeId.Ecto.CompatType, autogenerate: true} # credo:disable-for-next-line Credo.Check.Readability.MaxLineLength From 0d004a9d046f279be8462e8c751b5f1bcec3d35b Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 14 Jul 2020 20:31:20 -0500 Subject: [PATCH 052/236] Email admins when a new unapproved account is up for review --- lib/pleroma/emails/admin_email.ex | 14 ++++++++ lib/pleroma/web/twitter_api/twitter_api.ex | 13 ++++++++ test/emails/admin_email_test.exs | 20 ++++++++++++ test/web/twitter_api/twitter_api_test.exs | 37 ++++++++++++++++++++++ 4 files changed, 84 insertions(+) diff --git a/lib/pleroma/emails/admin_email.ex b/lib/pleroma/emails/admin_email.ex index aa0b2a66b..fae7faf00 100644 --- a/lib/pleroma/emails/admin_email.ex +++ b/lib/pleroma/emails/admin_email.ex @@ -82,4 +82,18 @@ def report(to, reporter, account, statuses, comment) do |> subject("#{instance_name()} Report") |> html_body(html_body) end + + def new_unapproved_registration(to, account) do + html_body = """ +

New account for review: @#{account.nickname}

+
#{account.registration_reason}
+ Visit AdminFE + """ + + new() + |> to({to.name, to.email}) + |> from({instance_name(), instance_notify_email()}) + |> subject("New account up for review on #{instance_name()} (@#{account.nickname})") + |> html_body(html_body) + end end diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index 4ff021b82..2294d9d0d 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -45,6 +45,7 @@ defp create_user(params, opts) do case User.register(changeset) do {:ok, user} -> + maybe_notify_admins(user) {:ok, user} {:error, changeset} -> @@ -57,6 +58,18 @@ defp create_user(params, opts) do end end + defp maybe_notify_admins(%User{} = account) do + if Pleroma.Config.get([:instance, :account_approval_required]) do + User.all_superusers() + |> Enum.filter(fn user -> not is_nil(user.email) end) + |> Enum.each(fn superuser -> + superuser + |> Pleroma.Emails.AdminEmail.new_unapproved_registration(account) + |> Pleroma.Emails.Mailer.deliver_async() + end) + end + end + def password_reset(nickname_or_email) do with true <- is_binary(nickname_or_email), %User{local: true, email: email} = user when is_binary(email) <- diff --git a/test/emails/admin_email_test.exs b/test/emails/admin_email_test.exs index 9082ae5a7..e24231e27 100644 --- a/test/emails/admin_email_test.exs +++ b/test/emails/admin_email_test.exs @@ -46,4 +46,24 @@ test "it works when the reporter is a remote user without email" do assert res.to == [{to_user.name, to_user.email}] assert res.from == {config[:name], config[:notify_email]} end + + test "new unapproved registration email" do + config = Pleroma.Config.get(:instance) + to_user = insert(:user) + account = insert(:user, registration_reason: "Plz let me in") + + res = AdminEmail.new_unapproved_registration(to_user, account) + + account_url = Helpers.user_feed_url(Pleroma.Web.Endpoint, :feed_redirect, account.id) + + assert res.to == [{to_user.name, to_user.email}] + assert res.from == {config[:name], config[:notify_email]} + assert res.subject == "New account up for review on #{config[:name]} (@#{account.nickname})" + + assert res.html_body == """ +

New account for review: @#{account.nickname}

+
Plz let me in
+ Visit AdminFE + """ + end end diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index 368533292..df9d59f6a 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -4,6 +4,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do use Pleroma.DataCase + import Pleroma.Factory alias Pleroma.Repo alias Pleroma.Tests.ObanHelpers alias Pleroma.User @@ -85,6 +86,42 @@ test "it sends confirmation email if :account_activation_required is specified i ) end + test "it sends an admin email if :account_approval_required is specified in instance config" do + admin = insert(:user, is_admin: true) + setting = Pleroma.Config.get([:instance, :account_approval_required]) + + unless setting do + Pleroma.Config.put([:instance, :account_approval_required], true) + on_exit(fn -> Pleroma.Config.put([:instance, :account_approval_required], setting) end) + end + + data = %{ + :username => "lain", + :email => "lain@wired.jp", + :fullname => "lain iwakura", + :bio => "", + :password => "bear", + :confirm => "bear", + :reason => "I love anime" + } + + {:ok, user} = TwitterAPI.register_user(data) + ObanHelpers.perform_all() + + assert user.approval_pending + + email = Pleroma.Emails.AdminEmail.new_unapproved_registration(admin, user) + + notify_email = Pleroma.Config.get([:instance, :notify_email]) + instance_name = Pleroma.Config.get([:instance, :name]) + + Swoosh.TestAssertions.assert_email_sent( + from: {instance_name, notify_email}, + to: {admin.name, admin.email}, + html_body: email.html_body + ) + end + test "it registers a new user and parses mentions in the bio" do data1 = %{ :username => "john", From 6d8427cca21db0a9250f6ce32fe513c0bef7cddb Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Wed, 15 Jul 2020 09:58:35 +0200 Subject: [PATCH 053/236] AP C2S tests: Make sure you can't use another user's AP id --- .../activity_pub_controller_test.exs | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/test/web/activity_pub/activity_pub_controller_test.exs b/test/web/activity_pub/activity_pub_controller_test.exs index e722f7c04..ed900d8f8 100644 --- a/test/web/activity_pub/activity_pub_controller_test.exs +++ b/test/web/activity_pub/activity_pub_controller_test.exs @@ -1082,6 +1082,45 @@ test "it increases like count when receiving a like action", %{conn: conn} do assert object = Object.get_by_ap_id(note_object.data["id"]) assert object.data["like_count"] == 1 end + + test "it doesn't spreads faulty attributedTo or actor fields", %{ + conn: conn, + activity: activity + } do + reimu = insert(:user, nickname: "reimu") + cirno = insert(:user, nickname: "cirno") + + assert reimu.ap_id + assert cirno.ap_id + + activity = + activity + |> put_in(["object", "actor"], reimu.ap_id) + |> put_in(["object", "attributedTo"], reimu.ap_id) + |> put_in(["actor"], reimu.ap_id) + |> put_in(["attributedTo"], reimu.ap_id) + + _reimu_outbox = + conn + |> assign(:user, cirno) + |> put_req_header("content-type", "application/activity+json") + |> post("/users/#{reimu.nickname}/outbox", activity) + |> json_response(403) + + cirno_outbox = + conn + |> assign(:user, cirno) + |> put_req_header("content-type", "application/activity+json") + |> post("/users/#{cirno.nickname}/outbox", activity) + |> json_response(201) + + assert cirno_outbox["attributedTo"] == nil + assert cirno_outbox["actor"] == cirno.ap_id + + assert cirno_object = Object.normalize(cirno_outbox["object"]) + assert cirno_object.data["actor"] == cirno.ap_id + assert cirno_object.data["attributedTo"] == cirno.ap_id + end end describe "/relay/followers" do From 58a4f350a8bc361d793cb96442f856362c18f195 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 6 May 2020 01:51:10 +0300 Subject: [PATCH 054/236] Refactor gun pooling and simplify adapter option insertion This patch refactors gun pooling to use Elixir process registry and simplifies adapter option insertion. Having the pool use process registry instead of a GenServer has a number of advantages: - Simpler code: the initial implementation adds about half the lines of code it deletes - Concurrency: unlike a GenServer, ETS-based registry can handle multiple checkout/checkin requests at the same time - Precise and easy idle connection clousure: current proposal for closing idle connections in the GenServer-based pool needs to filter through all connections once a minute and compare their last active time with closing time. With Elixir process registry this can be done by just using `Process.send_after`/`Process.cancel_timer` in the worker process. - Lower memory footprint: In my tests `gun-memory-leak` branch uses about 290mb on peak load (250 connections) and 235mb on idle (5-10 connections). Registry-based pool uses 210mb on idle and 240mb on peak load --- config/config.exs | 2 + lib/pleroma/application.ex | 8 +- lib/pleroma/gun/conn.ex | 78 +----- lib/pleroma/gun/connection_pool.ex | 129 ++++++++++ lib/pleroma/gun/connection_pool/worker.ex | 95 +++++++ lib/pleroma/http/adapter_helper.ex | 133 +++++++++- lib/pleroma/http/adapter_helper/default.ex | 17 ++ lib/pleroma/http/adapter_helper/gun.ex | 32 +-- lib/pleroma/http/adapter_helper/hackney.ex | 3 + lib/pleroma/http/connection.ex | 124 --------- lib/pleroma/http/http.ex | 53 ++-- lib/pleroma/pool/connections.ex | 283 --------------------- lib/pleroma/pool/pool.ex | 22 -- lib/pleroma/pool/request.ex | 65 ----- lib/pleroma/pool/supervisor.ex | 42 --- lib/pleroma/reverse_proxy/client/tesla.ex | 2 +- 16 files changed, 402 insertions(+), 686 deletions(-) create mode 100644 lib/pleroma/gun/connection_pool.ex create mode 100644 lib/pleroma/gun/connection_pool/worker.ex create mode 100644 lib/pleroma/http/adapter_helper/default.ex delete mode 100644 lib/pleroma/http/connection.ex delete mode 100644 lib/pleroma/pool/connections.ex delete mode 100644 lib/pleroma/pool/pool.ex delete mode 100644 lib/pleroma/pool/request.ex delete mode 100644 lib/pleroma/pool/supervisor.ex diff --git a/config/config.exs b/config/config.exs index 6fc84efc2..577ccc198 100644 --- a/config/config.exs +++ b/config/config.exs @@ -647,8 +647,10 @@ prepare: :unnamed config :pleroma, :connections_pool, + reclaim_multiplier: 0.1, checkin_timeout: 250, max_connections: 250, + max_idle_time: 30_000, retry: 1, retry_timeout: 1000, await_up_timeout: 5_000 diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 3282c6882..be14c1f9f 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -223,9 +223,7 @@ defp task_children(_) do # start hackney and gun pools in tests 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] + http_children(Tesla.Adapter.Hackney, nil) ++ http_children(Tesla.Adapter.Gun, nil) end defp http_children(Tesla.Adapter.Hackney, _) do @@ -244,7 +242,9 @@ defp http_children(Tesla.Adapter.Hackney, _) do end end - defp http_children(Tesla.Adapter.Gun, _), do: [Pleroma.Pool.Supervisor] + defp http_children(Tesla.Adapter.Gun, _) do + [{Registry, keys: :unique, name: Pleroma.Gun.ConnectionPool}] + end defp http_children(_, _), do: [] end diff --git a/lib/pleroma/gun/conn.ex b/lib/pleroma/gun/conn.ex index cd25a2e74..77f78c7ff 100644 --- a/lib/pleroma/gun/conn.ex +++ b/lib/pleroma/gun/conn.ex @@ -3,40 +3,11 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Gun.Conn do - @moduledoc """ - Struct for gun connection data - """ alias Pleroma.Gun - alias Pleroma.Pool.Connections require Logger - @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 - - @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 + def open(%URI{} = uri, opts) do pool_opts = Pleroma.Config.get([:connections_pool], []) opts = @@ -45,30 +16,10 @@ 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) + |> Map.put_new(:supervise, false) |> maybe_add_tls_opts(uri) - key = "#{uri.scheme}:#{uri.host}:#{uri.port}" - - max_connections = pool_opts[:max_connections] || 250 - - conn_pid = - if Connections.count(name) < max_connections do - do_open(uri, opts) - else - close_least_used_and_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 = Gun.set_owner(conn_pid, Process.whereis(name)) - Connections.add_conn(name, key, conn) - end + do_open(uri, opts) end defp maybe_add_tls_opts(opts, %URI{scheme: "http"}), do: opts @@ -81,7 +32,7 @@ defp maybe_add_tls_opts(opts, %URI{scheme: "https", host: host}) do reuse_sessions: false, verify_fun: {&:ssl_verify_hostname.verify_fun/3, - [check_hostname: Pleroma.HTTP.Connection.format_host(host)]} + [check_hostname: Pleroma.HTTP.AdapterHelper.format_host(host)]} ] tls_opts = @@ -105,7 +56,7 @@ defp do_open(uri, %{proxy: {proxy_host, proxy_port}} = opts) do {:ok, _} <- Gun.await_up(conn, opts[:await_up_timeout]), stream <- Gun.connect(conn, connect_opts), {:response, :fin, 200, _} <- Gun.await(conn, stream) do - conn + {:ok, conn} else error -> Logger.warn( @@ -141,7 +92,7 @@ defp do_open(uri, %{proxy: {proxy_type, proxy_host, proxy_port}} = opts) do with {:ok, conn} <- Gun.open(proxy_host, proxy_port, opts), {:ok, _} <- Gun.await_up(conn, opts[:await_up_timeout]) do - conn + {:ok, conn} else error -> Logger.warn( @@ -155,11 +106,11 @@ 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 - host = Pleroma.HTTP.Connection.parse_host(host) + host = Pleroma.HTTP.AdapterHelper.parse_host(host) with {:ok, conn} <- Gun.open(host, port, opts), {:ok, _} <- Gun.await_up(conn, opts[:await_up_timeout]) do - conn + {:ok, conn} else error -> Logger.warn( @@ -171,7 +122,7 @@ defp do_open(%URI{host: host, port: port} = uri, opts) do end defp destination_opts(%URI{host: host, port: port}) do - host = Pleroma.HTTP.Connection.parse_host(host) + host = Pleroma.HTTP.AdapterHelper.parse_host(host) %{host: host, port: port} end @@ -181,17 +132,6 @@ 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 - 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 diff --git a/lib/pleroma/gun/connection_pool.ex b/lib/pleroma/gun/connection_pool.ex new file mode 100644 index 000000000..e6abee69c --- /dev/null +++ b/lib/pleroma/gun/connection_pool.ex @@ -0,0 +1,129 @@ +defmodule Pleroma.Gun.ConnectionPool do + @registry __MODULE__ + + def get_conn(uri, opts) do + case enforce_pool_limits() do + :ok -> + key = "#{uri.scheme}:#{uri.host}:#{uri.port}" + + case Registry.lookup(@registry, key) do + # The key has already been registered, but connection is not up yet + [{worker_pid, {nil, _used_by, _crf, _last_reference}}] -> + get_gun_pid_from_worker(worker_pid) + + [{worker_pid, {gun_pid, _used_by, _crf, _last_reference}}] -> + GenServer.cast(worker_pid, {:add_client, self(), false}) + {:ok, gun_pid} + + [] -> + # :gun.set_owner fails in :connected state for whatevever reason, + # so we open the connection in the process directly and send it's pid back + # We trust gun to handle timeouts by itself + case GenServer.start(Pleroma.Gun.ConnectionPool.Worker, [uri, key, opts, self()], + timeout: :infinity + ) do + {:ok, _worker_pid} -> + receive do + {:conn_pid, pid} -> {:ok, pid} + end + + {:error, {:error, {:already_registered, worker_pid}}} -> + get_gun_pid_from_worker(worker_pid) + + err -> + err + end + end + + :error -> + {:error, :pool_full} + end + end + + @enforcer_key "enforcer" + defp enforce_pool_limits() do + max_connections = Pleroma.Config.get([:connections_pool, :max_connections]) + + if Registry.count(@registry) >= max_connections do + case Registry.lookup(@registry, @enforcer_key) do + [] -> + pid = + spawn(fn -> + {:ok, _pid} = Registry.register(@registry, @enforcer_key, nil) + + reclaim_max = + [:connections_pool, :reclaim_multiplier] + |> Pleroma.Config.get() + |> Kernel.*(max_connections) + |> round + |> max(1) + + unused_conns = + Registry.select( + @registry, + [ + {{:_, :"$1", {:_, :"$2", :"$3", :"$4"}}, [{:==, :"$2", []}], + [{{:"$1", :"$3", :"$4"}}]} + ] + ) + + case unused_conns do + [] -> + exit(:pool_full) + + unused_conns -> + unused_conns + |> Enum.sort(fn {_pid1, crf1, last_reference1}, + {_pid2, crf2, last_reference2} -> + crf1 <= crf2 and last_reference1 <= last_reference2 + end) + |> Enum.take(reclaim_max) + |> Enum.each(fn {pid, _, _} -> GenServer.call(pid, :idle_close) end) + end + end) + + wait_for_enforcer_finish(pid) + + [{pid, _}] -> + wait_for_enforcer_finish(pid) + end + else + :ok + end + end + + defp wait_for_enforcer_finish(pid) do + ref = Process.monitor(pid) + + receive do + {:DOWN, ^ref, :process, ^pid, :pool_full} -> + :error + + {:DOWN, ^ref, :process, ^pid, :normal} -> + :ok + end + end + + defp get_gun_pid_from_worker(worker_pid) do + # GenServer.call will block the process for timeout length if + # the server crashes on startup (which will happen if gun fails to connect) + # so instead we use cast + monitor + + ref = Process.monitor(worker_pid) + GenServer.cast(worker_pid, {:add_client, self(), true}) + + receive do + {:conn_pid, pid} -> {:ok, pid} + {:DOWN, ^ref, :process, ^worker_pid, reason} -> reason + end + end + + def release_conn(conn_pid) do + [worker_pid] = + Registry.select(@registry, [ + {{:_, :"$1", {:"$2", :_, :_, :_}}, [{:==, :"$2", conn_pid}], [:"$1"]} + ]) + + GenServer.cast(worker_pid, {:remove_client, self()}) + end +end diff --git a/lib/pleroma/gun/connection_pool/worker.ex b/lib/pleroma/gun/connection_pool/worker.ex new file mode 100644 index 000000000..ebde4bbf6 --- /dev/null +++ b/lib/pleroma/gun/connection_pool/worker.ex @@ -0,0 +1,95 @@ +defmodule Pleroma.Gun.ConnectionPool.Worker do + alias Pleroma.Gun + use GenServer + + @registry Pleroma.Gun.ConnectionPool + + @impl true + def init([uri, key, opts, client_pid]) do + time = :os.system_time(:second) + # Register before opening connection to prevent race conditions + with {:ok, _owner} <- Registry.register(@registry, key, {nil, [client_pid], 1, time}), + {:ok, conn_pid} <- Gun.Conn.open(uri, opts), + Process.link(conn_pid) do + {_, _} = + Registry.update_value(@registry, key, fn {_, used_by, crf, last_reference} -> + {conn_pid, used_by, crf, last_reference} + end) + + send(client_pid, {:conn_pid, conn_pid}) + {:ok, %{key: key, timer: nil}, :hibernate} + else + err -> {:stop, err} + end + end + + @impl true + def handle_cast({:add_client, client_pid, send_pid_back}, %{key: key} = state) do + time = :os.system_time(:second) + + {{conn_pid, _, _, _}, _} = + Registry.update_value(@registry, key, fn {conn_pid, used_by, crf, last_reference} -> + {conn_pid, [client_pid | used_by], crf(time - last_reference, crf), time} + end) + + if send_pid_back, do: send(client_pid, {:conn_pid, conn_pid}) + + state = + if state.timer != nil do + Process.cancel_timer(state[:timer]) + %{state | timer: nil} + else + state + end + + {:noreply, state, :hibernate} + end + + @impl true + def handle_cast({:remove_client, client_pid}, %{key: key} = state) do + {{_conn_pid, used_by, _crf, _last_reference}, _} = + Registry.update_value(@registry, key, fn {conn_pid, used_by, crf, last_reference} -> + {conn_pid, List.delete(used_by, client_pid), crf, last_reference} + end) + + timer = + if used_by == [] do + max_idle = Pleroma.Config.get([:connections_pool, :max_idle_time], 30_000) + Process.send_after(self(), :idle_close, max_idle) + else + nil + end + + {:noreply, %{state | timer: timer}, :hibernate} + end + + @impl true + def handle_info(:idle_close, state) do + # Gun monitors the owner process, and will close the connection automatically + # when it's terminated + {:stop, :normal, state} + end + + # Gracefully shutdown if the connection got closed without any streams left + @impl true + def handle_info({:gun_down, _pid, _protocol, _reason, []}, state) do + {:stop, :normal, state} + end + + # Otherwise, shutdown with an error + @impl true + def handle_info({:gun_down, _pid, _protocol, _reason, _killed_streams} = down_message, state) do + {:stop, {:error, down_message}, state} + end + + @impl true + def handle_call(:idle_close, _, %{key: key} = state) do + Registry.unregister(@registry, key) + {:stop, :normal, state} + end + + # LRFU policy: https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.55.1478 + defp crf(time_delta, prev_crf) do + 1 + :math.pow(0.5, time_delta / 100) * prev_crf + end +end diff --git a/lib/pleroma/http/adapter_helper.ex b/lib/pleroma/http/adapter_helper.ex index 510722ff9..0532ea31d 100644 --- a/lib/pleroma/http/adapter_helper.ex +++ b/lib/pleroma/http/adapter_helper.ex @@ -3,7 +3,21 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.AdapterHelper do - alias Pleroma.HTTP.Connection + @moduledoc """ + Configure Tesla.Client with default and customized adapter options. + """ + @defaults [pool: :federation] + + @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() + + alias Pleroma.Config + alias Pleroma.HTTP.AdapterHelper + require Logger @type proxy :: {Connection.host(), pos_integer()} @@ -11,24 +25,13 @@ defmodule Pleroma.HTTP.AdapterHelper do @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 + @callback get_conn(URI.t(), keyword()) :: {:ok, term()} | {:error, term()} @spec format_proxy(String.t() | tuple() | nil) :: proxy() | nil def format_proxy(nil), do: nil def format_proxy(proxy_url) do - case Connection.parse_proxy(proxy_url) do + case parse_proxy(proxy_url) do {:ok, host, port} -> {host, port} {:ok, type, host, port} -> {type, host, port} _ -> nil @@ -38,4 +41,106 @@ 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) + + @doc """ + Merge default connection & adapter options with received ones. + """ + + @spec options(URI.t(), keyword()) :: keyword() + def options(%URI{} = uri, opts \\ []) do + @defaults + |> pool_timeout() + |> Keyword.merge(opts) + |> adapter_helper().options(uri) + end + + defp pool_timeout(opts) do + {config_key, default} = + if 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 + + @spec after_request(keyword()) :: :ok + def after_request(opts), do: adapter_helper().after_request(opts) + + def get_conn(uri, opts), do: adapter_helper().get_conn(uri, opts) + 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.Default + 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 failed #{inspect(proxy)}") + {:error, :invalid_proxy_port} + + :error -> + Logger.warn("Parsing port failed #{inspect(proxy)}") + {:error, :invalid_proxy_port} + + _ -> + Logger.warn("Parsing proxy failed #{inspect(proxy)}") + {:error, :invalid_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 failed #{inspect(proxy)}") + {:error, :invalid_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 + + @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/adapter_helper/default.ex b/lib/pleroma/http/adapter_helper/default.ex new file mode 100644 index 000000000..218cfacc0 --- /dev/null +++ b/lib/pleroma/http/adapter_helper/default.ex @@ -0,0 +1,17 @@ +defmodule Pleroma.HTTP.AdapterHelper.Default do + alias Pleroma.HTTP.AdapterHelper + + @behaviour Pleroma.HTTP.AdapterHelper + + @spec options(keyword(), URI.t()) :: keyword() + def options(opts, _uri) do + proxy = Pleroma.Config.get([:http, :proxy_url], nil) + AdapterHelper.maybe_add_proxy(opts, AdapterHelper.format_proxy(proxy)) + end + + @spec after_request(keyword()) :: :ok + def after_request(_opts), do: :ok + + @spec get_conn(URI.t(), keyword()) :: {:ok, keyword()} + def get_conn(_uri, opts), do: {:ok, opts} +end diff --git a/lib/pleroma/http/adapter_helper/gun.ex b/lib/pleroma/http/adapter_helper/gun.ex index ead7cdc6b..6f7cc9784 100644 --- a/lib/pleroma/http/adapter_helper/gun.ex +++ b/lib/pleroma/http/adapter_helper/gun.ex @@ -5,8 +5,8 @@ defmodule Pleroma.HTTP.AdapterHelper.Gun do @behaviour Pleroma.HTTP.AdapterHelper + alias Pleroma.Gun.ConnectionPool alias Pleroma.HTTP.AdapterHelper - alias Pleroma.Pool.Connections require Logger @@ -31,13 +31,13 @@ def options(incoming_opts \\ [], %URI{} = uri) do |> Keyword.merge(config_opts) |> add_scheme_opts(uri) |> AdapterHelper.maybe_add_proxy(proxy) - |> maybe_get_conn(uri, incoming_opts) + |> Keyword.merge(incoming_opts) end @spec after_request(keyword()) :: :ok def after_request(opts) do if opts[:conn] && opts[:body_as] != :chunks do - Connections.checkout(opts[:conn], self(), :gun_connections) + ConnectionPool.release_conn(opts[:conn]) end :ok @@ -51,27 +51,11 @@ defp add_scheme_opts(opts, %{scheme: "https"}) do |> Keyword.put(:tls_opts, log_level: :warning) end - defp maybe_get_conn(adapter_opts, uri, incoming_opts) do - {receive_conn?, opts} = - adapter_opts - |> Keyword.merge(incoming_opts) - |> Keyword.pop(:receive_conn, true) - - if Connections.alive?(:gun_connections) and receive_conn? do - checkin_conn(uri, opts) - else - opts - end - end - - defp checkin_conn(uri, opts) do - case Connections.checkin(uri, :gun_connections) do - nil -> - Task.start(Pleroma.Gun.Conn, :open, [uri, :gun_connections, opts]) - opts - - conn when is_pid(conn) -> - Keyword.merge(opts, conn: conn, close_conn: false) + @spec get_conn(URI.t(), keyword()) :: {:ok, keyword()} | {:error, atom()} + def get_conn(uri, opts) do + case ConnectionPool.get_conn(uri, opts) do + {:ok, conn_pid} -> {:ok, Keyword.merge(opts, conn: conn_pid, close_conn: false)} + err -> err end end end diff --git a/lib/pleroma/http/adapter_helper/hackney.ex b/lib/pleroma/http/adapter_helper/hackney.ex index 3972a03a9..42d552740 100644 --- a/lib/pleroma/http/adapter_helper/hackney.ex +++ b/lib/pleroma/http/adapter_helper/hackney.ex @@ -25,4 +25,7 @@ def options(connection_opts \\ [], %URI{} = uri) do defp add_scheme_opts(opts, _), do: opts def after_request(_), do: :ok + + @spec get_conn(URI.t(), keyword()) :: {:ok, keyword()} + def get_conn(_uri, opts), do: {:ok, opts} end diff --git a/lib/pleroma/http/connection.ex b/lib/pleroma/http/connection.ex deleted file mode 100644 index ebacf7902..000000000 --- a/lib/pleroma/http/connection.ex +++ /dev/null @@ -1,124 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -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 :: - {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() - - @doc """ - Merge default connection & adapter options with received ones. - """ - - @spec options(URI.t(), keyword()) :: keyword() - def options(%URI{} = uri, opts \\ []) do - @defaults - |> pool_timeout() - |> Keyword.merge(opts) - |> adapter_helper().options(uri) - end - - defp pool_timeout(opts) do - {config_key, default} = - if 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 - - @spec after_request(keyword()) :: :ok - def after_request(opts), do: adapter_helper().after_request(opts) - - 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 - 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 failed #{inspect(proxy)}") - {:error, :invalid_proxy_port} - - :error -> - Logger.warn("Parsing port failed #{inspect(proxy)}") - {:error, :invalid_proxy_port} - - _ -> - Logger.warn("Parsing proxy failed #{inspect(proxy)}") - {:error, :invalid_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 failed #{inspect(proxy)}") - {:error, :invalid_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 - - @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/http.ex b/lib/pleroma/http/http.ex index 66ca75367..8ded76601 100644 --- a/lib/pleroma/http/http.ex +++ b/lib/pleroma/http/http.ex @@ -7,7 +7,7 @@ defmodule Pleroma.HTTP do Wrapper for `Tesla.request/2`. """ - alias Pleroma.HTTP.Connection + alias Pleroma.HTTP.AdapterHelper alias Pleroma.HTTP.Request alias Pleroma.HTTP.RequestBuilder, as: Builder alias Tesla.Client @@ -60,49 +60,26 @@ 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) - adapter_opts = Connection.options(uri, options[:adapter] || []) - options = put_in(options[:adapter], adapter_opts) - params = options[:params] || [] - request = build_request(method, headers, options, url, body, params) + adapter_opts = AdapterHelper.options(uri, options[:adapter] || []) - adapter = Application.get_env(:tesla, :adapter) - client = Tesla.client([Tesla.Middleware.FollowRedirects], adapter) + case AdapterHelper.get_conn(uri, adapter_opts) do + {:ok, adapter_opts} -> + options = put_in(options[:adapter], adapter_opts) + params = options[:params] || [] + request = build_request(method, headers, options, url, body, params) - pid = Process.whereis(adapter_opts[:pool]) + adapter = Application.get_env(:tesla, :adapter) + client = Tesla.client([Tesla.Middleware.FollowRedirects], adapter) - pool_alive? = - if adapter == Tesla.Adapter.Gun && pid do - Process.alive?(pid) - else - false - end + response = request(client, request) - request_opts = - adapter_opts - |> Enum.into(%{}) - |> Map.put(:env, Pleroma.Config.get([:env])) - |> Map.put(:pool_alive?, pool_alive?) + AdapterHelper.after_request(adapter_opts) - response = request(client, request, request_opts) + response - Connection.after_request(adapter_opts) - - response - end - - @spec request(Client.t(), keyword(), map()) :: {:ok, Env.t()} | {:error, any()} - def request(%Client{} = client, request, %{env: :test}), do: request(client, request) - - def request(%Client{} = client, request, %{body_as: :chunks}), do: request(client, request) - - def request(%Client{} = client, request, %{pool_alive?: false}), do: request(client, request) - - def request(%Client{} = client, request, %{pool: pool, timeout: timeout}) do - :poolboy.transaction( - pool, - &Pleroma.Pool.Request.execute(&1, client, request, timeout), - timeout - ) + err -> + err + end end @spec request(Client.t(), keyword()) :: {:ok, Env.t()} | {:error, any()} diff --git a/lib/pleroma/pool/connections.ex b/lib/pleroma/pool/connections.ex deleted file mode 100644 index acafe1bea..000000000 --- a/lib/pleroma/pool/connections.ex +++ /dev/null @@ -1,283 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Pool.Connections do - use GenServer - - alias Pleroma.Config - alias Pleroma.Gun - - require Logger - - @type domain :: String.t() - @type conn :: Pleroma.Gun.Conn.t() - - @type t :: %__MODULE__{ - conns: %{domain() => conn()}, - opts: keyword() - } - - defstruct conns: %{}, opts: [] - - @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 = Config.get([:connections_pool, :checkin_timeout], 250) - - GenServer.call(name, {:checkin, uri}, timeout) - end - - @spec alive?(atom()) :: boolean() - def alive?(name) do - if pid = Process.whereis(name) do - Process.alive?(pid) - else - false - end - end - - @spec get_state(atom()) :: t() - 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({:add_conn, key, conn}, state) do - state = put_in(state.conns[key], conn) - - Process.monitor(conn.conn) - {:noreply, state} - end - - @impl true - def handle_cast({:checkout, conn_pid, pid}, state) do - 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 - - put_in(state.conns[key], %{conn | conn_state: conn_state, used_by: used_by}) - else - false -> - Logger.debug("checkout for closed conn #{inspect(conn_pid)}") - state - - nil -> - Logger.debug("checkout for alive conn #{inspect(conn_pid)}, but is not in state") - state - end - - {: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 - key = "#{uri.scheme}:#{uri.host}:#{uri.port}" - - case state.conns[key] do - %{conn: pid, gun_state: :up} = conn -> - time = :os.system_time(:second) - last_reference = time - conn.last_reference - crf = crf(last_reference, 100, conn.crf) - - state = - put_in(state.conns[key], %{ - conn - | last_reference: time, - crf: crf, - conn_state: :active, - used_by: [from | conn.used_by] - }) - - {:reply, pid, state} - - %{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_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(&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 - %{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, - conn_state: :active, - retries: 0 - }) - else - {false, key} -> - put_in( - state.conns, - Map.delete(state.conns, key) - ) - - nil -> - :ok = Gun.close(conn_pid) - - state - end - - {:noreply, state} - end - - @impl true - def handle_info({:gun_down, conn_pid, _protocol, _reason, _killed}, state) do - 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), - {true, key} <- {Process.alive?(conn_pid), key} do - if conn.retries == retries do - :ok = Gun.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, key} -> - put_in( - state.conns, - Map.delete(state.conns, key) - ) - - nil -> - Logger.debug(":gun_down for conn which isn't found in state") - - state - end - - {:noreply, state} - end - - @impl true - def handle_info({:DOWN, _ref, :process, conn_pid, reason}, state) do - Logger.debug("received DOWN 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 for conn which isn't found in state") - - state - end - - {:noreply, state} - 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 - - def crf(current, steps, crf) do - 1 + :math.pow(0.5, current / steps) * crf - end -end diff --git a/lib/pleroma/pool/pool.ex b/lib/pleroma/pool/pool.ex deleted file mode 100644 index 21a6fbbc5..000000000 --- a/lib/pleroma/pool/pool.ex +++ /dev/null @@ -1,22 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 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 deleted file mode 100644 index 3fb930db7..000000000 --- a/lib/pleroma/pool/request.ex +++ /dev/null @@ -1,65 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 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(client, request) - - {:reply, response, state} - end - - @impl true - def handle_info({:gun_data, _conn, _stream, _, _}, state) do - {: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 - {:noreply, state} - end - - @impl true - def handle_info({:gun_error, _conn, _stream, _error}, state) do - {: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 deleted file mode 100644 index faf646cb2..000000000 --- a/lib/pleroma/pool/supervisor.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.Pool.Supervisor do - use Supervisor - - alias Pleroma.Config - alias Pleroma.Pool - - def start_link(args) do - Supervisor.start_link(__MODULE__, args, name: __MODULE__) - end - - def init(_) do - conns_child = %{ - id: Pool.Connections, - start: - {Pool.Connections, :start_link, [{:gun_connections, Config.get([:connections_pool])}]} - } - - Supervisor.init([conns_child | pools()], strategy: :one_for_one) - end - - defp 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) - |> Pool.child_spec() - end - end -end diff --git a/lib/pleroma/reverse_proxy/client/tesla.ex b/lib/pleroma/reverse_proxy/client/tesla.ex index e81ea8bde..65785445d 100644 --- a/lib/pleroma/reverse_proxy/client/tesla.ex +++ b/lib/pleroma/reverse_proxy/client/tesla.ex @@ -48,7 +48,7 @@ def stream_body(%{pid: pid, opts: opts, fin: true}) do # 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) + if conn, do: :ok = Pleroma.Gun.ConnectionPool.release_conn(conn) :done end From fffbcffb8c9ce1e96de5d1a5e15005e271deacd4 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 6 May 2020 21:41:34 +0300 Subject: [PATCH 055/236] Connection Pool: don't enforce pool limits if no new connection needs to be opened --- lib/pleroma/gun/connection_pool.ex | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/pleroma/gun/connection_pool.ex b/lib/pleroma/gun/connection_pool.ex index e6abee69c..ed7ddff81 100644 --- a/lib/pleroma/gun/connection_pool.ex +++ b/lib/pleroma/gun/connection_pool.ex @@ -2,20 +2,20 @@ defmodule Pleroma.Gun.ConnectionPool do @registry __MODULE__ def get_conn(uri, opts) do - case enforce_pool_limits() do - :ok -> - key = "#{uri.scheme}:#{uri.host}:#{uri.port}" + key = "#{uri.scheme}:#{uri.host}:#{uri.port}" - case Registry.lookup(@registry, key) do - # The key has already been registered, but connection is not up yet - [{worker_pid, {nil, _used_by, _crf, _last_reference}}] -> - get_gun_pid_from_worker(worker_pid) + case Registry.lookup(@registry, key) do + # The key has already been registered, but connection is not up yet + [{worker_pid, {nil, _used_by, _crf, _last_reference}}] -> + get_gun_pid_from_worker(worker_pid) - [{worker_pid, {gun_pid, _used_by, _crf, _last_reference}}] -> - GenServer.cast(worker_pid, {:add_client, self(), false}) - {:ok, gun_pid} + [{worker_pid, {gun_pid, _used_by, _crf, _last_reference}}] -> + GenServer.cast(worker_pid, {:add_client, self(), false}) + {:ok, gun_pid} - [] -> + [] -> + case enforce_pool_limits() do + :ok -> # :gun.set_owner fails in :connected state for whatevever reason, # so we open the connection in the process directly and send it's pid back # We trust gun to handle timeouts by itself @@ -33,10 +33,10 @@ def get_conn(uri, opts) do err -> err end - end - :error -> - {:error, :pool_full} + :error -> + {:error, :pool_full} + end end end From d08b1576990ca33ac4178fb757ec03a777c55b5b Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 6 May 2020 21:51:10 +0300 Subject: [PATCH 056/236] Connection pool: check that there actually is a result Sometimes connections died before being released to the pool, resulting in MatchErrors --- lib/pleroma/gun/connection_pool.ex | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/gun/connection_pool.ex b/lib/pleroma/gun/connection_pool.ex index ed7ddff81..0daf1da44 100644 --- a/lib/pleroma/gun/connection_pool.ex +++ b/lib/pleroma/gun/connection_pool.ex @@ -119,11 +119,17 @@ defp get_gun_pid_from_worker(worker_pid) do end def release_conn(conn_pid) do - [worker_pid] = + query_result = Registry.select(@registry, [ {{:_, :"$1", {:"$2", :_, :_, :_}}, [{:==, :"$2", conn_pid}], [:"$1"]} ]) - GenServer.cast(worker_pid, {:remove_client, self()}) + case query_result do + [worker_pid] -> + GenServer.cast(worker_pid, {:remove_client, self()}) + + [] -> + :ok + end end end From ec9d0d146b4ec6752f8f2896ace9bb5585469773 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 6 May 2020 23:14:24 +0300 Subject: [PATCH 057/236] Connection pool: Fix race conditions in limit enforcement Fixes race conditions in limit enforcement by putting worker processes in a DynamicSupervisor --- lib/pleroma/application.ex | 2 +- lib/pleroma/gun/connection_pool.ex | 105 ++++-------------- lib/pleroma/gun/connection_pool/worker.ex | 12 +- .../gun/connection_pool/worker_supervisor.ex | 91 +++++++++++++++ 4 files changed, 118 insertions(+), 92 deletions(-) create mode 100644 lib/pleroma/gun/connection_pool/worker_supervisor.ex diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index be14c1f9f..cfdaf1770 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -243,7 +243,7 @@ defp http_children(Tesla.Adapter.Hackney, _) do end defp http_children(Tesla.Adapter.Gun, _) do - [{Registry, keys: :unique, name: Pleroma.Gun.ConnectionPool}] + Pleroma.Gun.ConnectionPool.children() end defp http_children(_, _), do: [] diff --git a/lib/pleroma/gun/connection_pool.ex b/lib/pleroma/gun/connection_pool.ex index 0daf1da44..545bfaf7f 100644 --- a/lib/pleroma/gun/connection_pool.ex +++ b/lib/pleroma/gun/connection_pool.ex @@ -1,6 +1,15 @@ defmodule Pleroma.Gun.ConnectionPool do @registry __MODULE__ + alias Pleroma.Gun.ConnectionPool.WorkerSupervisor + + def children do + [ + {Registry, keys: :unique, name: @registry}, + Pleroma.Gun.ConnectionPool.WorkerSupervisor + ] + end + def get_conn(uri, opts) do key = "#{uri.scheme}:#{uri.host}:#{uri.port}" @@ -14,96 +23,24 @@ def get_conn(uri, opts) do {:ok, gun_pid} [] -> - case enforce_pool_limits() do - :ok -> - # :gun.set_owner fails in :connected state for whatevever reason, - # so we open the connection in the process directly and send it's pid back - # We trust gun to handle timeouts by itself - case GenServer.start(Pleroma.Gun.ConnectionPool.Worker, [uri, key, opts, self()], - timeout: :infinity - ) do - {:ok, _worker_pid} -> - receive do - {:conn_pid, pid} -> {:ok, pid} - end - - {:error, {:error, {:already_registered, worker_pid}}} -> - get_gun_pid_from_worker(worker_pid) - - err -> - err + # :gun.set_owner fails in :connected state for whatevever reason, + # so we open the connection in the process directly and send it's pid back + # We trust gun to handle timeouts by itself + case WorkerSupervisor.start_worker([uri, key, opts, self()]) do + {:ok, _worker_pid} -> + receive do + {:conn_pid, pid} -> {:ok, pid} end - :error -> - {:error, :pool_full} + {:error, {:error, {:already_registered, worker_pid}}} -> + get_gun_pid_from_worker(worker_pid) + + err -> + err end end end - @enforcer_key "enforcer" - defp enforce_pool_limits() do - max_connections = Pleroma.Config.get([:connections_pool, :max_connections]) - - if Registry.count(@registry) >= max_connections do - case Registry.lookup(@registry, @enforcer_key) do - [] -> - pid = - spawn(fn -> - {:ok, _pid} = Registry.register(@registry, @enforcer_key, nil) - - reclaim_max = - [:connections_pool, :reclaim_multiplier] - |> Pleroma.Config.get() - |> Kernel.*(max_connections) - |> round - |> max(1) - - unused_conns = - Registry.select( - @registry, - [ - {{:_, :"$1", {:_, :"$2", :"$3", :"$4"}}, [{:==, :"$2", []}], - [{{:"$1", :"$3", :"$4"}}]} - ] - ) - - case unused_conns do - [] -> - exit(:pool_full) - - unused_conns -> - unused_conns - |> Enum.sort(fn {_pid1, crf1, last_reference1}, - {_pid2, crf2, last_reference2} -> - crf1 <= crf2 and last_reference1 <= last_reference2 - end) - |> Enum.take(reclaim_max) - |> Enum.each(fn {pid, _, _} -> GenServer.call(pid, :idle_close) end) - end - end) - - wait_for_enforcer_finish(pid) - - [{pid, _}] -> - wait_for_enforcer_finish(pid) - end - else - :ok - end - end - - defp wait_for_enforcer_finish(pid) do - ref = Process.monitor(pid) - - receive do - {:DOWN, ^ref, :process, ^pid, :pool_full} -> - :error - - {:DOWN, ^ref, :process, ^pid, :normal} -> - :ok - end - end - defp get_gun_pid_from_worker(worker_pid) do # GenServer.call will block the process for timeout length if # the server crashes on startup (which will happen if gun fails to connect) diff --git a/lib/pleroma/gun/connection_pool/worker.ex b/lib/pleroma/gun/connection_pool/worker.ex index ebde4bbf6..25fafc64c 100644 --- a/lib/pleroma/gun/connection_pool/worker.ex +++ b/lib/pleroma/gun/connection_pool/worker.ex @@ -1,9 +1,13 @@ defmodule Pleroma.Gun.ConnectionPool.Worker do alias Pleroma.Gun - use GenServer + use GenServer, restart: :temporary @registry Pleroma.Gun.ConnectionPool + def start_link(opts) do + GenServer.start_link(__MODULE__, opts) + end + @impl true def init([uri, key, opts, client_pid]) do time = :os.system_time(:second) @@ -82,12 +86,6 @@ def handle_info({:gun_down, _pid, _protocol, _reason, _killed_streams} = down_me {:stop, {:error, down_message}, state} end - @impl true - def handle_call(:idle_close, _, %{key: key} = state) do - Registry.unregister(@registry, key) - {:stop, :normal, state} - end - # LRFU policy: https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.55.1478 defp crf(time_delta, prev_crf) do 1 + :math.pow(0.5, time_delta / 100) * prev_crf diff --git a/lib/pleroma/gun/connection_pool/worker_supervisor.ex b/lib/pleroma/gun/connection_pool/worker_supervisor.ex new file mode 100644 index 000000000..5b546bd87 --- /dev/null +++ b/lib/pleroma/gun/connection_pool/worker_supervisor.ex @@ -0,0 +1,91 @@ +defmodule Pleroma.Gun.ConnectionPool.WorkerSupervisor do + @doc "Supervisor for pool workers. Does not do anything except enforce max connection limit" + + use DynamicSupervisor + + def start_link(opts) do + DynamicSupervisor.start_link(__MODULE__, opts, name: __MODULE__) + end + + def init(_opts) do + DynamicSupervisor.init( + strategy: :one_for_one, + max_children: Pleroma.Config.get([:connections_pool, :max_connections]) + ) + end + + def start_worker(opts) do + case DynamicSupervisor.start_child(__MODULE__, {Pleroma.Gun.ConnectionPool.Worker, opts}) do + {:error, :max_children} -> + case free_pool() do + :ok -> start_worker(opts) + :error -> {:error, :pool_full} + end + + res -> + res + end + end + + @registry Pleroma.Gun.ConnectionPool + @enforcer_key "enforcer" + defp free_pool do + case Registry.lookup(@registry, @enforcer_key) do + [] -> + pid = + spawn(fn -> + {:ok, _pid} = Registry.register(@registry, @enforcer_key, nil) + + max_connections = Pleroma.Config.get([:connections_pool, :max_connections]) + + reclaim_max = + [:connections_pool, :reclaim_multiplier] + |> Pleroma.Config.get() + |> Kernel.*(max_connections) + |> round + |> max(1) + + unused_conns = + Registry.select( + @registry, + [ + {{:_, :"$1", {:_, :"$2", :"$3", :"$4"}}, [{:==, :"$2", []}], + [{{:"$1", :"$3", :"$4"}}]} + ] + ) + + case unused_conns do + [] -> + exit(:no_unused_conns) + + unused_conns -> + unused_conns + |> Enum.sort(fn {_pid1, crf1, last_reference1}, {_pid2, crf2, last_reference2} -> + crf1 <= crf2 and last_reference1 <= last_reference2 + end) + |> Enum.take(reclaim_max) + |> Enum.each(fn {pid, _, _} -> + DynamicSupervisor.terminate_child(__MODULE__, pid) + end) + end + end) + + wait_for_enforcer_finish(pid) + + [{pid, _}] -> + wait_for_enforcer_finish(pid) + end + end + + defp wait_for_enforcer_finish(pid) do + ref = Process.monitor(pid) + + receive do + {:DOWN, ^ref, :process, ^pid, :no_unused_conns} -> + :error + + {:DOWN, ^ref, :process, ^pid, :normal} -> + :ok + end + end +end From 0ffde499b8a8f31c82183253bdd692c75733ca2f Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 15 Jul 2020 15:24:47 +0300 Subject: [PATCH 058/236] Connection Pool: register workers using :via --- lib/pleroma/gun/connection_pool.ex | 8 +++++--- lib/pleroma/gun/connection_pool/worker.ex | 17 ++++++++--------- .../gun/connection_pool/worker_supervisor.ex | 3 +-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/pleroma/gun/connection_pool.ex b/lib/pleroma/gun/connection_pool.ex index 545bfaf7f..e951872fe 100644 --- a/lib/pleroma/gun/connection_pool.ex +++ b/lib/pleroma/gun/connection_pool.ex @@ -15,7 +15,7 @@ def get_conn(uri, opts) do case Registry.lookup(@registry, key) do # The key has already been registered, but connection is not up yet - [{worker_pid, {nil, _used_by, _crf, _last_reference}}] -> + [{worker_pid, nil}] -> get_gun_pid_from_worker(worker_pid) [{worker_pid, {gun_pid, _used_by, _crf, _last_reference}}] -> @@ -26,13 +26,13 @@ def get_conn(uri, opts) do # :gun.set_owner fails in :connected state for whatevever reason, # so we open the connection in the process directly and send it's pid back # We trust gun to handle timeouts by itself - case WorkerSupervisor.start_worker([uri, key, opts, self()]) do + case WorkerSupervisor.start_worker([key, uri, opts, self()]) do {:ok, _worker_pid} -> receive do {:conn_pid, pid} -> {:ok, pid} end - {:error, {:error, {:already_registered, worker_pid}}} -> + {:error, {:already_started, worker_pid}} -> get_gun_pid_from_worker(worker_pid) err -> @@ -56,6 +56,8 @@ defp get_gun_pid_from_worker(worker_pid) do end def release_conn(conn_pid) do + # :ets.fun2ms(fn {_, {worker_pid, {gun_pid, _, _, _}}} when gun_pid == conn_pid -> + # worker_pid end) query_result = Registry.select(@registry, [ {{:_, :"$1", {:"$2", :_, :_, :_}}, [{:==, :"$2", conn_pid}], [:"$1"]} diff --git a/lib/pleroma/gun/connection_pool/worker.ex b/lib/pleroma/gun/connection_pool/worker.ex index 25fafc64c..0a94f16a2 100644 --- a/lib/pleroma/gun/connection_pool/worker.ex +++ b/lib/pleroma/gun/connection_pool/worker.ex @@ -4,20 +4,19 @@ defmodule Pleroma.Gun.ConnectionPool.Worker do @registry Pleroma.Gun.ConnectionPool - def start_link(opts) do - GenServer.start_link(__MODULE__, opts) + def start_link([key | _] = opts) do + GenServer.start_link(__MODULE__, opts, name: {:via, Registry, {@registry, key}}) end @impl true - def init([uri, key, opts, client_pid]) do - time = :os.system_time(:second) - # Register before opening connection to prevent race conditions - with {:ok, _owner} <- Registry.register(@registry, key, {nil, [client_pid], 1, time}), - {:ok, conn_pid} <- Gun.Conn.open(uri, opts), + def init([key, uri, opts, client_pid]) do + with {:ok, conn_pid} <- Gun.Conn.open(uri, opts), Process.link(conn_pid) do + time = :os.system_time(:second) + {_, _} = - Registry.update_value(@registry, key, fn {_, used_by, crf, last_reference} -> - {conn_pid, used_by, crf, last_reference} + Registry.update_value(@registry, key, fn _ -> + {conn_pid, [client_pid], 1, time} end) send(client_pid, {:conn_pid, conn_pid}) diff --git a/lib/pleroma/gun/connection_pool/worker_supervisor.ex b/lib/pleroma/gun/connection_pool/worker_supervisor.ex index 5b546bd87..d090c034e 100644 --- a/lib/pleroma/gun/connection_pool/worker_supervisor.ex +++ b/lib/pleroma/gun/connection_pool/worker_supervisor.ex @@ -1,5 +1,5 @@ defmodule Pleroma.Gun.ConnectionPool.WorkerSupervisor do - @doc "Supervisor for pool workers. Does not do anything except enforce max connection limit" + @moduledoc "Supervisor for pool workers. Does not do anything except enforce max connection limit" use DynamicSupervisor @@ -35,7 +35,6 @@ defp free_pool do pid = spawn(fn -> {:ok, _pid} = Registry.register(@registry, @enforcer_key, nil) - max_connections = Pleroma.Config.get([:connections_pool, :max_connections]) reclaim_max = From 7738fbbaf5a6fcd6a10b4ef0a2dcea731a3d4192 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 15 Jul 2020 15:26:25 +0300 Subject: [PATCH 059/236] Connection pool: implement logging and telemetry events --- lib/pleroma/application.ex | 1 + .../gun/connection_pool/worker_supervisor.ex | 44 ++++++++++--- lib/pleroma/telemetry/logger.ex | 62 +++++++++++++++++++ 3 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 lib/pleroma/telemetry/logger.ex diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index cfdaf1770..37fcdf293 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -39,6 +39,7 @@ def start(_type, _args) do # every time the application is restarted, so we disable module # conflicts at runtime Code.compiler_options(ignore_module_conflict: true) + Pleroma.Telemetry.Logger.attach() Config.Holder.save_default() Pleroma.HTML.compile_scrubbers() Config.DeprecationWarnings.warn() diff --git a/lib/pleroma/gun/connection_pool/worker_supervisor.ex b/lib/pleroma/gun/connection_pool/worker_supervisor.ex index d090c034e..4b5d10d2a 100644 --- a/lib/pleroma/gun/connection_pool/worker_supervisor.ex +++ b/lib/pleroma/gun/connection_pool/worker_supervisor.ex @@ -18,8 +18,12 @@ def start_worker(opts) do case DynamicSupervisor.start_child(__MODULE__, {Pleroma.Gun.ConnectionPool.Worker, opts}) do {:error, :max_children} -> case free_pool() do - :ok -> start_worker(opts) - :error -> {:error, :pool_full} + :ok -> + start_worker(opts) + + :error -> + :telemetry.execute([:pleroma, :connection_pool, :provision_failure], %{opts: opts}) + {:error, :pool_full} end res -> @@ -44,6 +48,14 @@ defp free_pool do |> round |> max(1) + :telemetry.execute([:pleroma, :connection_pool, :reclaim, :start], %{}, %{ + max_connections: max_connections, + reclaim_max: reclaim_max + }) + + # :ets.fun2ms( + # fn {_, {worker_pid, {_, used_by, crf, last_reference}}} when used_by == [] -> + # {worker_pid, crf, last_reference} end) unused_conns = Registry.select( @registry, @@ -55,17 +67,35 @@ defp free_pool do case unused_conns do [] -> + :telemetry.execute( + [:pleroma, :connection_pool, :reclaim, :stop], + %{reclaimed_count: 0}, + %{ + max_connections: max_connections + } + ) + exit(:no_unused_conns) unused_conns -> - unused_conns - |> Enum.sort(fn {_pid1, crf1, last_reference1}, {_pid2, crf2, last_reference2} -> - crf1 <= crf2 and last_reference1 <= last_reference2 - end) - |> Enum.take(reclaim_max) + reclaimed = + unused_conns + |> Enum.sort(fn {_pid1, crf1, last_reference1}, + {_pid2, crf2, last_reference2} -> + crf1 <= crf2 and last_reference1 <= last_reference2 + end) + |> Enum.take(reclaim_max) + + reclaimed |> Enum.each(fn {pid, _, _} -> DynamicSupervisor.terminate_child(__MODULE__, pid) end) + + :telemetry.execute( + [:pleroma, :connection_pool, :reclaim, :stop], + %{reclaimed_count: Enum.count(reclaimed)}, + %{max_connections: max_connections} + ) end end) diff --git a/lib/pleroma/telemetry/logger.ex b/lib/pleroma/telemetry/logger.ex new file mode 100644 index 000000000..d76dd37b5 --- /dev/null +++ b/lib/pleroma/telemetry/logger.ex @@ -0,0 +1,62 @@ +defmodule Pleroma.Telemetry.Logger do + @moduledoc "Transforms Pleroma telemetry events to logs" + + require Logger + + @events [ + [:pleroma, :connection_pool, :reclaim, :start], + [:pleroma, :connection_pool, :reclaim, :stop], + [:pleroma, :connection_pool, :provision_failure] + ] + def attach do + :telemetry.attach_many("pleroma-logger", @events, &handle_event/4, []) + end + + # Passing anonymous functions instead of strings to logger is intentional, + # that way strings won't be concatenated if the message is going to be thrown + # out anyway due to higher log level configured + + def handle_event( + [:pleroma, :connection_pool, :reclaim, :start], + _, + %{max_connections: max_connections, reclaim_max: reclaim_max}, + _ + ) do + Logger.debug(fn -> + "Connection pool is exhausted (reached #{max_connections} connections). Starting idle connection cleanup to reclaim as much as #{ + reclaim_max + } connections" + end) + end + + def handle_event( + [:pleroma, :connection_pool, :reclaim, :stop], + %{reclaimed_count: 0}, + _, + _ + ) do + Logger.error(fn -> + "Connection pool failed to reclaim any connections due to all of them being in use. It will have to drop requests for opening connections to new hosts" + end) + end + + def handle_event( + [:pleroma, :connection_pool, :reclaim, :stop], + %{reclaimed_count: reclaimed_count}, + _, + _ + ) do + Logger.debug(fn -> "Connection pool cleaned up #{reclaimed_count} idle connections" end) + end + + def handle_event( + [:pleroma, :connection_pool, :provision_failure], + %{opts: [key | _]}, + _, + _ + ) do + Logger.error(fn -> + "Connection pool had to refuse opening a connection to #{key} due to connection limit exhaustion" + end) + end +end From e94ba05e523d735cd7a357a3aa30e433f60ef9a3 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 7 May 2020 16:11:48 +0300 Subject: [PATCH 060/236] Connection pool: Fix a possible infinite recursion if the pool is exhausted --- .../gun/connection_pool/worker_supervisor.ex | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/pleroma/gun/connection_pool/worker_supervisor.ex b/lib/pleroma/gun/connection_pool/worker_supervisor.ex index 4b5d10d2a..5cb8d488a 100644 --- a/lib/pleroma/gun/connection_pool/worker_supervisor.ex +++ b/lib/pleroma/gun/connection_pool/worker_supervisor.ex @@ -14,16 +14,14 @@ def init(_opts) do ) end - def start_worker(opts) do + def start_worker(opts, retry \\ false) do case DynamicSupervisor.start_child(__MODULE__, {Pleroma.Gun.ConnectionPool.Worker, opts}) do {:error, :max_children} -> - case free_pool() do - :ok -> - start_worker(opts) - - :error -> - :telemetry.execute([:pleroma, :connection_pool, :provision_failure], %{opts: opts}) - {:error, :pool_full} + if retry or free_pool() == :error do + :telemetry.execute([:pleroma, :connection_pool, :provision_failure], %{opts: opts}) + {:error, :pool_full} + else + start_worker(opts, true) end res -> From 1b15cb066c612c72d106e7e7026819ea14e0ceab Mon Sep 17 00:00:00 2001 From: rinpatch Date: Fri, 8 May 2020 18:18:59 +0300 Subject: [PATCH 061/236] Connection pool: Add client death tracking While running this in production I noticed a number of ghost processes with all their clients dead before they released the connection, so let's track them to log it and remove them from clients --- lib/pleroma/gun/connection_pool/worker.ex | 31 ++++++++++++++++++++++- lib/pleroma/telemetry/logger.ex | 16 +++++++++++- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/gun/connection_pool/worker.ex b/lib/pleroma/gun/connection_pool/worker.ex index 0a94f16a2..8467325f3 100644 --- a/lib/pleroma/gun/connection_pool/worker.ex +++ b/lib/pleroma/gun/connection_pool/worker.ex @@ -20,7 +20,10 @@ def init([key, uri, opts, client_pid]) do end) send(client_pid, {:conn_pid, conn_pid}) - {:ok, %{key: key, timer: nil}, :hibernate} + + {:ok, + %{key: key, timer: nil, client_monitors: %{client_pid => Process.monitor(client_pid)}}, + :hibernate} else err -> {:stop, err} end @@ -45,6 +48,9 @@ def handle_cast({:add_client, client_pid, send_pid_back}, %{key: key} = state) d state end + ref = Process.monitor(client_pid) + + state = put_in(state.client_monitors[client_pid], ref) {:noreply, state, :hibernate} end @@ -55,6 +61,9 @@ def handle_cast({:remove_client, client_pid}, %{key: key} = state) do {conn_pid, List.delete(used_by, client_pid), crf, last_reference} end) + {ref, state} = pop_in(state.client_monitors[client_pid]) + Process.demonitor(ref) + timer = if used_by == [] do max_idle = Pleroma.Config.get([:connections_pool, :max_idle_time], 30_000) @@ -85,6 +94,26 @@ def handle_info({:gun_down, _pid, _protocol, _reason, _killed_streams} = down_me {:stop, {:error, down_message}, state} end + @impl true + def handle_info({:DOWN, _ref, :process, pid, reason}, state) do + # Sometimes the client is dead before we demonitor it in :remove_client, so the message + # arrives anyway + + case state.client_monitors[pid] do + nil -> + {:noreply, state, :hibernate} + + _ref -> + :telemetry.execute( + [:pleroma, :connection_pool, :client_death], + %{client_pid: pid, reason: reason}, + %{key: state.key} + ) + + handle_cast({:remove_client, pid}, state) + end + end + # LRFU policy: https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.55.1478 defp crf(time_delta, prev_crf) do 1 + :math.pow(0.5, time_delta / 100) * prev_crf diff --git a/lib/pleroma/telemetry/logger.ex b/lib/pleroma/telemetry/logger.ex index d76dd37b5..4cacae02f 100644 --- a/lib/pleroma/telemetry/logger.ex +++ b/lib/pleroma/telemetry/logger.ex @@ -6,7 +6,8 @@ defmodule Pleroma.Telemetry.Logger do @events [ [:pleroma, :connection_pool, :reclaim, :start], [:pleroma, :connection_pool, :reclaim, :stop], - [:pleroma, :connection_pool, :provision_failure] + [:pleroma, :connection_pool, :provision_failure], + [:pleroma, :connection_pool, :client_death] ] def attach do :telemetry.attach_many("pleroma-logger", @events, &handle_event/4, []) @@ -59,4 +60,17 @@ def handle_event( "Connection pool had to refuse opening a connection to #{key} due to connection limit exhaustion" end) end + + def handle_event( + [:pleroma, :connection_pool, :client_death], + %{client_pid: client_pid, reason: reason}, + %{key: key}, + _ + ) do + Logger.warn(fn -> + "Pool worker for #{key}: Client #{inspect(client_pid)} died before releasing the connection with #{ + inspect(reason) + }" + end) + end end From 281ddd5e371c5698489774e703106bd7c3ccb56b Mon Sep 17 00:00:00 2001 From: rinpatch Date: Fri, 8 May 2020 19:57:11 +0300 Subject: [PATCH 062/236] Connection pool: fix connections being supervised by gun_sup --- lib/pleroma/gun/api.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/gun/api.ex b/lib/pleroma/gun/api.ex index f51cd7db8..09be74392 100644 --- a/lib/pleroma/gun/api.ex +++ b/lib/pleroma/gun/api.ex @@ -19,7 +19,8 @@ defmodule Pleroma.Gun.API do :tls_opts, :tcp_opts, :socks_opts, - :ws_opts + :ws_opts, + :supervise ] @impl Gun From 94c8f3cfafb92c6d092549b24bb69f3870e1c0d8 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Sat, 16 May 2020 11:49:19 +0300 Subject: [PATCH 063/236] Use a custom pool-aware FollowRedirects middleware --- lib/pleroma/http/adapter_helper.ex | 4 - lib/pleroma/http/adapter_helper/default.ex | 3 - lib/pleroma/http/adapter_helper/gun.ex | 9 -- lib/pleroma/http/adapter_helper/hackney.ex | 2 - lib/pleroma/http/http.ex | 9 +- .../tesla/middleware/follow_redirects.ex | 106 ++++++++++++++++++ 6 files changed, 109 insertions(+), 24 deletions(-) create mode 100644 lib/pleroma/tesla/middleware/follow_redirects.ex diff --git a/lib/pleroma/http/adapter_helper.ex b/lib/pleroma/http/adapter_helper.ex index 0532ea31d..bcb9b2b1e 100644 --- a/lib/pleroma/http/adapter_helper.ex +++ b/lib/pleroma/http/adapter_helper.ex @@ -24,7 +24,6 @@ defmodule Pleroma.HTTP.AdapterHelper do | {Connection.proxy_type(), Connection.host(), pos_integer()} @callback options(keyword(), URI.t()) :: keyword() - @callback after_request(keyword()) :: :ok @callback get_conn(URI.t(), keyword()) :: {:ok, term()} | {:error, term()} @spec format_proxy(String.t() | tuple() | nil) :: proxy() | nil @@ -67,9 +66,6 @@ defp pool_timeout(opts) do Keyword.merge(opts, timeout: timeout) end - @spec after_request(keyword()) :: :ok - def after_request(opts), do: adapter_helper().after_request(opts) - def get_conn(uri, opts), do: adapter_helper().get_conn(uri, opts) defp adapter, do: Application.get_env(:tesla, :adapter) diff --git a/lib/pleroma/http/adapter_helper/default.ex b/lib/pleroma/http/adapter_helper/default.ex index 218cfacc0..e13441316 100644 --- a/lib/pleroma/http/adapter_helper/default.ex +++ b/lib/pleroma/http/adapter_helper/default.ex @@ -9,9 +9,6 @@ def options(opts, _uri) do AdapterHelper.maybe_add_proxy(opts, AdapterHelper.format_proxy(proxy)) end - @spec after_request(keyword()) :: :ok - def after_request(_opts), do: :ok - @spec get_conn(URI.t(), keyword()) :: {:ok, keyword()} def get_conn(_uri, opts), do: {:ok, opts} end diff --git a/lib/pleroma/http/adapter_helper/gun.ex b/lib/pleroma/http/adapter_helper/gun.ex index 6f7cc9784..5b4629978 100644 --- a/lib/pleroma/http/adapter_helper/gun.ex +++ b/lib/pleroma/http/adapter_helper/gun.ex @@ -34,15 +34,6 @@ def options(incoming_opts \\ [], %URI{} = uri) do |> Keyword.merge(incoming_opts) end - @spec after_request(keyword()) :: :ok - def after_request(opts) do - if opts[:conn] && opts[:body_as] != :chunks do - ConnectionPool.release_conn(opts[:conn]) - end - - :ok - end - defp add_scheme_opts(opts, %{scheme: "http"}), do: opts defp add_scheme_opts(opts, %{scheme: "https"}) do diff --git a/lib/pleroma/http/adapter_helper/hackney.ex b/lib/pleroma/http/adapter_helper/hackney.ex index 42d552740..cd569422b 100644 --- a/lib/pleroma/http/adapter_helper/hackney.ex +++ b/lib/pleroma/http/adapter_helper/hackney.ex @@ -24,8 +24,6 @@ def options(connection_opts \\ [], %URI{} = uri) do defp add_scheme_opts(opts, _), do: opts - def after_request(_), do: :ok - @spec get_conn(URI.t(), keyword()) :: {:ok, keyword()} def get_conn(_uri, opts), do: {:ok, opts} end diff --git a/lib/pleroma/http/http.ex b/lib/pleroma/http/http.ex index 8ded76601..afcb4d738 100644 --- a/lib/pleroma/http/http.ex +++ b/lib/pleroma/http/http.ex @@ -69,14 +69,11 @@ def request(method, url, body, headers, options) when is_binary(url) do request = build_request(method, headers, options, url, body, params) adapter = Application.get_env(:tesla, :adapter) - client = Tesla.client([Tesla.Middleware.FollowRedirects], adapter) + client = Tesla.client([Pleroma.HTTP.Middleware.FollowRedirects], adapter) - response = request(client, request) - - AdapterHelper.after_request(adapter_opts) - - response + request(client, request) + # Connection release is handled in a custom FollowRedirects middleware err -> err end diff --git a/lib/pleroma/tesla/middleware/follow_redirects.ex b/lib/pleroma/tesla/middleware/follow_redirects.ex new file mode 100644 index 000000000..f2c502c69 --- /dev/null +++ b/lib/pleroma/tesla/middleware/follow_redirects.ex @@ -0,0 +1,106 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2015-2020 Tymon Tobolski +# Copyright © 2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.HTTP.Middleware.FollowRedirects do + @moduledoc """ + Pool-aware version of https://github.com/teamon/tesla/blob/master/lib/tesla/middleware/follow_redirects.ex + + Follow 3xx redirects + ## Options + - `:max_redirects` - limit number of redirects (default: `5`) + """ + + alias Pleroma.Gun.ConnectionPool + + @behaviour Tesla.Middleware + + @max_redirects 5 + @redirect_statuses [301, 302, 303, 307, 308] + + @impl Tesla.Middleware + def call(env, next, opts \\ []) do + max = Keyword.get(opts, :max_redirects, @max_redirects) + + redirect(env, next, max) + end + + defp redirect(env, next, left) do + opts = env.opts[:adapter] + + case Tesla.run(env, next) do + {:ok, %{status: status} = res} when status in @redirect_statuses and left > 0 -> + release_conn(opts) + + case Tesla.get_header(res, "location") do + nil -> + {:ok, res} + + location -> + location = parse_location(location, res) + + case get_conn(location, opts) do + {:ok, opts} -> + %{env | opts: Keyword.put(env.opts, :adapter, opts)} + |> new_request(res.status, location) + |> redirect(next, left - 1) + + e -> + e + end + end + + {:ok, %{status: status}} when status in @redirect_statuses -> + release_conn(opts) + {:error, {__MODULE__, :too_many_redirects}} + + other -> + unless opts[:body_as] == :chunks do + release_conn(opts) + end + + other + end + end + + defp get_conn(location, opts) do + uri = URI.parse(location) + + case ConnectionPool.get_conn(uri, opts) do + {:ok, conn} -> + {:ok, Keyword.merge(opts, conn: conn)} + + e -> + e + end + end + + defp release_conn(opts) do + ConnectionPool.release_conn(opts[:conn]) + end + + # The 303 (See Other) redirect was added in HTTP/1.1 to indicate that the originally + # requested resource is not available, however a related resource (or another redirect) + # available via GET is available at the specified location. + # https://tools.ietf.org/html/rfc7231#section-6.4.4 + defp new_request(env, 303, location), do: %{env | url: location, method: :get, query: []} + + # The 307 (Temporary Redirect) status code indicates that the target + # resource resides temporarily under a different URI and the user agent + # MUST NOT change the request method (...) + # https://tools.ietf.org/html/rfc7231#section-6.4.7 + defp new_request(env, 307, location), do: %{env | url: location} + + defp new_request(env, _, location), do: %{env | url: location, query: []} + + defp parse_location("https://" <> _rest = location, _env), do: location + defp parse_location("http://" <> _rest = location, _env), do: location + + defp parse_location(location, env) do + env.url + |> URI.parse() + |> URI.merge(location) + |> URI.to_string() + end +end From 4128e3a84a2b6d75a8f92759e65ee673b47cec01 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Sun, 17 May 2020 22:16:02 +0300 Subject: [PATCH 064/236] HTTP: Implement max request limits --- config/config.exs | 15 ++++++--------- lib/pleroma/application.ex | 3 ++- lib/pleroma/http/adapter_helper/gun.ex | 21 +++++++++++++++++++++ lib/pleroma/http/http.ex | 17 ++++++++++++++++- mix.exs | 3 +++ mix.lock | 1 + 6 files changed, 49 insertions(+), 11 deletions(-) diff --git a/config/config.exs b/config/config.exs index 577ccc198..dfc7a99d1 100644 --- a/config/config.exs +++ b/config/config.exs @@ -648,7 +648,8 @@ config :pleroma, :connections_pool, reclaim_multiplier: 0.1, - checkin_timeout: 250, + connection_acquisition_wait: 250, + connection_acquisition_retries: 5, max_connections: 250, max_idle_time: 30_000, retry: 1, @@ -658,23 +659,19 @@ config :pleroma, :pools, federation: [ size: 50, - max_overflow: 10, - timeout: 150_000 + max_waiting: 10 ], media: [ size: 50, - max_overflow: 10, - timeout: 150_000 + max_waiting: 10 ], upload: [ size: 25, - max_overflow: 5, - timeout: 300_000 + max_waiting: 5 ], default: [ size: 10, - max_overflow: 2, - timeout: 10_000 + max_waiting: 2 ] config :pleroma, :hackney_pools, diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 37fcdf293..0ffb55358 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -244,7 +244,8 @@ defp http_children(Tesla.Adapter.Hackney, _) do end defp http_children(Tesla.Adapter.Gun, _) do - Pleroma.Gun.ConnectionPool.children() + Pleroma.Gun.ConnectionPool.children() ++ + [{Task, &Pleroma.HTTP.AdapterHelper.Gun.limiter_setup/0}] end defp http_children(_, _), do: [] diff --git a/lib/pleroma/http/adapter_helper/gun.ex b/lib/pleroma/http/adapter_helper/gun.ex index 5b4629978..883f7f6f7 100644 --- a/lib/pleroma/http/adapter_helper/gun.ex +++ b/lib/pleroma/http/adapter_helper/gun.ex @@ -49,4 +49,25 @@ def get_conn(uri, opts) do err -> err end end + + @prefix Pleroma.Gun.ConnectionPool + def limiter_setup do + wait = Pleroma.Config.get([:connections_pool, :connection_acquisition_wait]) + retries = Pleroma.Config.get([:connections_pool, :connection_acquisition_retries]) + + :pools + |> Pleroma.Config.get([]) + |> Enum.each(fn {name, opts} -> + max_running = Keyword.get(opts, :size, 50) + max_waiting = Keyword.get(opts, :max_waiting, 10) + + :ok = + ConcurrentLimiter.new(:"#{@prefix}.#{name}", max_running, max_waiting, + wait: wait, + max_retries: retries + ) + end) + + :ok + end end diff --git a/lib/pleroma/http/http.ex b/lib/pleroma/http/http.ex index afcb4d738..6128bc4cf 100644 --- a/lib/pleroma/http/http.ex +++ b/lib/pleroma/http/http.ex @@ -71,7 +71,13 @@ def request(method, url, body, headers, options) when is_binary(url) do adapter = Application.get_env(:tesla, :adapter) client = Tesla.client([Pleroma.HTTP.Middleware.FollowRedirects], adapter) - request(client, request) + maybe_limit( + fn -> + request(client, request) + end, + adapter, + adapter_opts + ) # Connection release is handled in a custom FollowRedirects middleware err -> @@ -92,4 +98,13 @@ defp build_request(method, headers, options, url, body, params) do |> Builder.add_param(:query, :query, params) |> Builder.convert_to_keyword() end + + @prefix Pleroma.Gun.ConnectionPool + defp maybe_limit(fun, Tesla.Adapter.Gun, opts) do + ConcurrentLimiter.limit(:"#{@prefix}.#{opts[:pool] || :default}", fun) + end + + defp maybe_limit(fun, _, _) do + fun.() + end end diff --git a/mix.exs b/mix.exs index 741f917e6..4dfce58e7 100644 --- a/mix.exs +++ b/mix.exs @@ -191,6 +191,9 @@ defp deps do {:plug_static_index_html, "~> 1.0.0"}, {:excoveralls, "~> 0.12.1", only: :test}, {:flake_id, "~> 0.1.0"}, + {:concurrent_limiter, + git: "https://git.pleroma.social/pleroma/elixir-libraries/concurrent_limiter", + ref: "8eee96c6ba39b9286ec44c51c52d9f2758951365"}, {:remote_ip, git: "https://git.pleroma.social/pleroma/remote_ip.git", ref: "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8"}, diff --git a/mix.lock b/mix.lock index f801f9e0c..89c97decf 100644 --- a/mix.lock +++ b/mix.lock @@ -15,6 +15,7 @@ "certifi": {:hex, :certifi, "2.5.2", "b7cfeae9d2ed395695dd8201c57a2d019c0c43ecaf8b8bcb9320b40d6662f340", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm", "3b3b5f36493004ac3455966991eaf6e768ce9884693d9968055aeeeb1e575040"}, "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, "comeonin": {:hex, :comeonin, "5.3.1", "7fe612b739c78c9c1a75186ef2d322ce4d25032d119823269d0aa1e2f1e20025", [:mix], [], "hexpm", "d6222483060c17f0977fad1b7401ef0c5863c985a64352755f366aee3799c245"}, + "concurrent_limiter": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/concurrent_limiter", "8eee96c6ba39b9286ec44c51c52d9f2758951365", [ref: "8eee96c6ba39b9286ec44c51c52d9f2758951365"]}, "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"}, From 721e89e88bafbf0db15b590604e886e37f3291c7 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 28 May 2020 14:06:18 +0300 Subject: [PATCH 065/236] Remove tests for old pool --- test/http/adapter_helper/gun_test.exs | 171 ------ test/http/connection_test.exs | 135 ----- test/pool/connections_test.exs | 760 -------------------------- 3 files changed, 1066 deletions(-) delete mode 100644 test/http/connection_test.exs delete mode 100644 test/pool/connections_test.exs diff --git a/test/http/adapter_helper/gun_test.exs b/test/http/adapter_helper/gun_test.exs index 2e961826e..49eebf355 100644 --- a/test/http/adapter_helper/gun_test.exs +++ b/test/http/adapter_helper/gun_test.exs @@ -9,24 +9,10 @@ defmodule Pleroma.HTTP.AdapterHelper.GunTest do import Mox alias Pleroma.Config - alias Pleroma.Gun.Conn alias Pleroma.HTTP.AdapterHelper.Gun - alias Pleroma.Pool.Connections setup :verify_on_exit! - defp gun_mock(_) do - gun_mock() - :ok - end - - defp gun_mock do - Pleroma.GunMock - |> stub(:open, fn _, _, _ -> Task.start_link(fn -> Process.sleep(1000) end) end) - |> stub(:await_up, fn _, _ -> {:ok, :http} end) - |> stub(:set_owner, fn _, _ -> :ok end) - end - describe "options/1" do setup do: clear_config([:http, :adapter], a: 1, b: 2) @@ -62,46 +48,12 @@ test "https url with non standart port" do assert opts[:certificates_verification] 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) - uri = URI.parse("http://some-domain2.com") - - opts = Gun.options(uri) - - assert opts[:conn] == nil - assert opts[:close_conn] == nil - - Process.sleep(50) - 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([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) - - opts = Gun.options(uri) - - assert opts[:certificates_verification] - refute opts[:tls_opts] == [] - - 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") @@ -132,127 +84,4 @@ test "passed opts have more weight than defaults" do assert opts[:proxy] == {'example.com', 4321} 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) - 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 = Conn.open(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 = Conn.open(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 = Conn.open(uri, :gun_connections) - opts = Gun.options(uri) - :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 = Conn.open(uri, :gun_connections) - opts = Gun.options(uri) - :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/connection_test.exs b/test/http/connection_test.exs deleted file mode 100644 index 7c94a50b2..000000000 --- a/test/http/connection_test.exs +++ /dev/null @@ -1,135 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 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 - - 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, :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, :invalid_proxy} - end) =~ "parsing proxy fail \"localhost\"" - end - - test "host with bad port" do - capture_log(fn -> - 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, :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, :invalid_proxy} - end) =~ "parsing proxy fail {:socks5, :localhost}" - end - - test "with nil" do - assert Connection.parse_proxy(nil) == nil - end - end - - describe "options/3" do - setup 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 - 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 diff --git a/test/pool/connections_test.exs b/test/pool/connections_test.exs deleted file mode 100644 index aeda54875..000000000 --- a/test/pool/connections_test.exs +++ /dev/null @@ -1,760 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Pool.ConnectionsTest do - 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 - name = :test_connections - {:ok, pid} = Connections.start_link({name, [checkin_timeout: 150]}) - {:ok, _} = Registry.start_link(keys: :unique, name: Pleroma.GunMock) - - on_exit(fn -> - 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) - 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 - open_mock() - url = "http://some-domain.com" - key = "http:some-domain.com:80" - refute Connections.checkin(url, name) - :ok = Conn.open(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 - open_mock() - url = "http://ですsome-domain.com" - refute Connections.checkin(url, name) - - :ok = Conn.open(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 - open_mock() - url = "http://127.0.0.1" - - refute Connections.checkin(url, name) - - :ok = Conn.open(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 - open_mock() - url = "http://[2a03:2880:f10c:83:face:b00c:0:25de]" - - refute Connections.checkin(url, name) - - :ok = Conn.open(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 - open_mock() - |> info_mock() - |> allow(self(), name) - - self = self() - url = "http://127.0.0.1" - :ok = Conn.open(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() - - 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) - 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 - open_mock(2) - 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 = 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 = Conn.open(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 - expect(GunMock, :open, &start_and_register(&1, &2, &3)) - url = "http://gun-not-up.com" - - assert capture_log(fn -> - refute Conn.open(url, name) - refute Connections.checkin(url, name) - end) =~ - "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 - 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) - 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 - open_mock() - url = "http://some-domain.com" - :ok = Conn.open(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 - open_mock(3) - self = self() - http_url = "http://some-domain.com" - https_url = "https://some-domain.com" - :ok = Conn.open(https_url, name) - :ok = Conn.open(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 = Conn.open(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 "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}) - - 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 - open_mock() - |> connect_mock() - - url = "http://proxy-tuple-atom.com" - :ok = Conn.open(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 - open_mock() - |> connect_mock() - - url = "https://proxy-string.com" - - :ok = Conn.open(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 - open_mock() - |> connect_mock() - - url = "https://proxy-tuple-atom.com" - :ok = Conn.open(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 - open_mock() - - url = "http://proxy-socks.com" - - :ok = Conn.open(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 - open_mock() - url = "https://proxy-socks.com" - - :ok = Conn.open(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", %{name: name} do - Connections.add_conn(name, "1", %Conn{ - conn_state: :idle, - last_reference: now() - 1 - }) - - 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", %{name: name} do - Connections.add_conn(name, "1", %Conn{ - conn_state: :idle, - crf: 1.999 - }) - - 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", %{name: name} do - Connections.add_conn(name, "1", %Conn{ - conn_state: :idle, - crf: 3, - last_reference: now() - 1 - }) - - 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", %{name: name} do - Connections.add_conn(name, "1", %Conn{ - conn_state: :idle, - crf: 1.99, - last_reference: now() - 1 - }) - - 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" 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 -end From bf3492ceb31f6332a4c58feba271e3755fabe25a Mon Sep 17 00:00:00 2001 From: rinpatch Date: Sat, 6 Jun 2020 17:53:39 +0300 Subject: [PATCH 066/236] Connection Pool: add tests --- test/gun/conneciton_pool_test.exs | 101 ++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 test/gun/conneciton_pool_test.exs diff --git a/test/gun/conneciton_pool_test.exs b/test/gun/conneciton_pool_test.exs new file mode 100644 index 000000000..aea908fac --- /dev/null +++ b/test/gun/conneciton_pool_test.exs @@ -0,0 +1,101 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Gun.ConnectionPoolTest do + use Pleroma.DataCase + + import Mox + import ExUnit.CaptureLog + alias Pleroma.Config + alias Pleroma.Gun.ConnectionPool + + defp gun_mock(_) do + Pleroma.GunMock + |> stub(:open, fn _, _, _ -> Task.start_link(fn -> Process.sleep(100) end) end) + |> stub(:await_up, fn _, _ -> {:ok, :http} end) + |> stub(:set_owner, fn _, _ -> :ok end) + + :ok + end + + setup :set_mox_from_context + setup :gun_mock + + test "gives the same connection to 2 concurrent requests" do + Enum.map( + [ + "http://www.korean-books.com.kp/KBMbooks/en/periodic/pictorial/20200530163914.pdf", + "http://www.korean-books.com.kp/KBMbooks/en/periodic/pictorial/20200528183427.pdf" + ], + fn uri -> + uri = URI.parse(uri) + task_parent = self() + + Task.start_link(fn -> + {:ok, conn} = ConnectionPool.get_conn(uri, []) + ConnectionPool.release_conn(conn) + send(task_parent, conn) + end) + end + ) + + [pid, pid] = + for _ <- 1..2 do + receive do + pid -> pid + end + end + end + + test "connection limit is respected with concurrent requests" do + clear_config([:connections_pool, :max_connections]) do + Config.put([:connections_pool, :max_connections], 1) + # The supervisor needs a reboot to apply the new config setting + Process.exit(Process.whereis(Pleroma.Gun.ConnectionPool.WorkerSupervisor), :kill) + + on_exit(fn -> + Process.exit(Process.whereis(Pleroma.Gun.ConnectionPool.WorkerSupervisor), :kill) + end) + end + + capture_log(fn -> + Enum.map( + [ + "https://ninenines.eu/", + "https://youtu.be/PFGwMiDJKNY" + ], + fn uri -> + uri = URI.parse(uri) + task_parent = self() + + Task.start_link(fn -> + result = ConnectionPool.get_conn(uri, []) + # Sleep so that we don't end up with a situation, + # where request from the second process gets processed + # only after the first process already released the connection + Process.sleep(50) + + case result do + {:ok, pid} -> + ConnectionPool.release_conn(pid) + + _ -> + nil + end + + send(task_parent, result) + end) + end + ) + + [{:error, :pool_full}, {:ok, _pid}] = + for _ <- 1..2 do + receive do + result -> result + end + end + |> Enum.sort() + end) + end +end From 00926a63fb174a8bcb2f496921c5d17e04e44b1d Mon Sep 17 00:00:00 2001 From: rinpatch Date: Tue, 16 Jun 2020 16:20:28 +0300 Subject: [PATCH 067/236] Adapter Helper: Use built-in ip address type --- lib/pleroma/http/adapter_helper.ex | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/http/adapter_helper.ex b/lib/pleroma/http/adapter_helper.ex index bcb9b2b1e..8ca433732 100644 --- a/lib/pleroma/http/adapter_helper.ex +++ b/lib/pleroma/http/adapter_helper.ex @@ -8,12 +8,8 @@ defmodule Pleroma.HTTP.AdapterHelper do """ @defaults [pool: :federation] - @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() + @type host() :: charlist() | :inet.ip_address() alias Pleroma.Config alias Pleroma.HTTP.AdapterHelper @@ -114,7 +110,7 @@ def parse_proxy(proxy) when is_tuple(proxy) do end end - @spec parse_host(String.t() | atom() | charlist()) :: charlist() | ip_address() + @spec parse_host(String.t() | atom() | charlist()) :: charlist() | :inet.ip_address() def parse_host(host) when is_list(host), do: host def parse_host(host) when is_atom(host), do: to_charlist(host) From 7882f28569bfaee2996d059990eec279415f0785 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 17 Jun 2020 12:54:13 +0300 Subject: [PATCH 068/236] Use erlang monotonic time for CRF calculation --- lib/pleroma/gun/connection_pool/worker.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/gun/connection_pool/worker.ex b/lib/pleroma/gun/connection_pool/worker.ex index 8467325f3..418cb18c1 100644 --- a/lib/pleroma/gun/connection_pool/worker.ex +++ b/lib/pleroma/gun/connection_pool/worker.ex @@ -12,7 +12,7 @@ def start_link([key | _] = opts) do def init([key, uri, opts, client_pid]) do with {:ok, conn_pid} <- Gun.Conn.open(uri, opts), Process.link(conn_pid) do - time = :os.system_time(:second) + time = :erlang.monotonic_time() {_, _} = Registry.update_value(@registry, key, fn _ -> @@ -31,7 +31,7 @@ def init([key, uri, opts, client_pid]) do @impl true def handle_cast({:add_client, client_pid, send_pid_back}, %{key: key} = state) do - time = :os.system_time(:second) + time = :erlang.monotonic_time() {{conn_pid, _, _, _}, _} = Registry.update_value(@registry, key, fn {conn_pid, used_by, crf, last_reference} -> From 007843b75e0c7087dad1ef932224b21327d81793 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Tue, 23 Jun 2020 15:38:45 +0300 Subject: [PATCH 069/236] Add documentation for new connection pool settings and remove some `:retry_timeout` and `:retry` got removed because reconnecting on failure is something the new pool intentionally doesn't do. `:max_overflow` had to go in favor of `:max_waiting`, I didn't reuse the key because the settings are very different in their behaviour. `:checkin_timeout` got removed in favor of `:connection_acquisition_wait`, I didn't reuse the key because the settings are somewhat different. I didn't do any migrations/deprecation warnings/changelog entries because these settings were never in stable. --- config/description.exs | 158 ++++++++----------------------- docs/configuration/cheatsheet.md | 30 +++--- lib/pleroma/gun/conn.ex | 2 - 3 files changed, 53 insertions(+), 137 deletions(-) diff --git a/config/description.exs b/config/description.exs index afc4dcd79..f1c6773f1 100644 --- a/config/description.exs +++ b/config/description.exs @@ -3161,36 +3161,37 @@ description: "Advanced settings for `gun` connections pool", children: [ %{ - key: :checkin_timeout, + key: :connection_acquisition_wait, type: :integer, - description: "Timeout to checkin connection from pool. Default: 250ms.", + description: + "Timeout to acquire a connection from pool.The total max time is this value multiplied by the number of retries. Default: 250ms.", suggestions: [250] }, + %{ + key: :connection_acquisition_retries, + type: :integer, + description: + "Number of attempts to acquire the connection from the pool if it is overloaded. Default: 5", + suggestions: [5] + }, %{ 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] + }, + %{ + key: :reclaim_multiplier, + type: :integer, + description: + "Multiplier for the number of idle connection to be reclaimed if the pool is full. For example if the pool maxes out at 250 connections and this setting is set to 0.3, the pool will reclaim at most 75 idle connections if it's overloaded. Default: 0.1", + suggestions: [0.1] } ] }, @@ -3199,108 +3200,29 @@ 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] - } - ] - } - ] + children: + Enum.map([:federation, :media, :upload, :default], fn pool_name -> + %{ + key: pool_name, + type: :keyword, + description: "Settings for #{pool_name} pool.", + children: [ + %{ + key: :size, + type: :integer, + description: "Maximum number of concurrent requests in the pool.", + suggestions: [50] + }, + %{ + key: :max_waiting, + type: :integer, + description: + "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made", + suggestions: [10] + } + ] + } + end) }, %{ group: :pleroma, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index ba62a721e..6c1babba3 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -448,36 +448,32 @@ For each pool, the options are: *For `gun` adapter* -Advanced settings for connections pool. Pool with opened connections. These connections can be reused in worker pools. +Settings for HTTP connection pool. -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. - -* `: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 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. +* `:connection_acquisition_wait` - Timeout to acquire a connection from pool.The total max time is this value multiplied by the number of retries. +* `connection_acquisition_retries` - Number of attempts to acquire the connection from the pool if it is overloaded. Each attempt is timed `:connection_acquisition_wait` apart. +* `:max_connections` - Maximum number of connections in the pool. +* `:await_up_timeout` - Timeout to connect to the host. +* `:reclaim_multiplier` - Multiplied by `:max_connections` this will be the maximum number of idle connections that will be reclaimed in case the pool is overloaded. ### :pools *For `gun` adapter* -Advanced settings for workers pools. +Settings for request pools. These pools are limited on top of `:connections_pool`. 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. -* `:media` for rich media, media proxy -* `:upload` for uploaded media (if using a remote uploader and `proxy_remote: true`) -* `:default` for other requests +* `:federation` for the federation jobs. You may want this pool's max_connections to be at least equal to the number of federator jobs + retry queue jobs. +* `:media` - for rich media, media proxy. +* `:upload` - for proxying media when a remote uploader is used and `proxy_remote: true`. +* `:default` - for other requests. For each pool, the options are: -* `:size` - how much workers the pool can hold +* `:size` - limit to how much requests can be concurrently executed. * `:timeout` - timeout while `gun` will wait for response -* `:max_overflow` - additional workers if pool is under load +* `:max_waiting` - limit to how much requests can be waiting for others to finish, after this is reached, subsequent requests will be dropped. ## Captcha diff --git a/lib/pleroma/gun/conn.ex b/lib/pleroma/gun/conn.ex index 77f78c7ff..9dc8880db 100644 --- a/lib/pleroma/gun/conn.ex +++ b/lib/pleroma/gun/conn.ex @@ -13,8 +13,6 @@ def open(%URI{} = uri, opts) do opts = opts |> Enum.into(%{}) - |> 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) |> Map.put_new(:supervise, false) |> maybe_add_tls_opts(uri) From 37f1e781cb19594a6534efbc4d28e793d5960915 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Tue, 23 Jun 2020 20:36:21 +0300 Subject: [PATCH 070/236] Gun adapter helper: fix wildcard cert issues on OTP 23 See https://bugs.erlang.org/browse/ERL-1260 for more info. The ssl match function is basically copied from mint, except that `:string.lowercase/1` was replaced by `:string.casefold`. It was a TODO in mint's code, so might as well do it since we don't need to support OTP <20. Closes #1834 --- lib/pleroma/http/adapter_helper/gun.ex | 29 +++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/http/adapter_helper/gun.ex b/lib/pleroma/http/adapter_helper/gun.ex index 883f7f6f7..07aaed7f6 100644 --- a/lib/pleroma/http/adapter_helper/gun.ex +++ b/lib/pleroma/http/adapter_helper/gun.ex @@ -39,9 +39,36 @@ defp add_scheme_opts(opts, %{scheme: "http"}), do: opts defp add_scheme_opts(opts, %{scheme: "https"}) do opts |> Keyword.put(:certificates_verification, true) - |> Keyword.put(:tls_opts, log_level: :warning) + |> Keyword.put(:tls_opts, + log_level: :warning, + customize_hostname_check: [match_fun: &ssl_match_fun/2] + ) end + # ssl_match_fun is adapted from [Mint](https://github.com/elixir-mint/mint) + # Copyright 2018 Eric Meadows-Jönsson and Andrea Leopardi + + # Wildcard domain handling for DNS ID entries in the subjectAltName X.509 + # extension. Note that this is a subset of the wildcard patterns implemented + # by OTP when matching against the subject CN attribute, but this is the only + # wildcard usage defined by the CA/Browser Forum's Baseline Requirements, and + # therefore the only pattern used in commercially issued certificates. + defp ssl_match_fun({:dns_id, reference}, {:dNSName, [?*, ?. | presented]}) do + case domain_without_host(reference) do + '' -> + :default + + domain -> + :string.casefold(domain) == :string.casefold(presented) + end + end + + defp ssl_match_fun(_reference, _presented), do: :default + + defp domain_without_host([]), do: [] + defp domain_without_host([?. | domain]), do: domain + defp domain_without_host([_ | more]), do: domain_without_host(more) + @spec get_conn(URI.t(), keyword()) :: {:ok, keyword()} | {:error, atom()} def get_conn(uri, opts) do case ConnectionPool.get_conn(uri, opts) do From 9df59189747620c60173e6a67f8721971f123efd Mon Sep 17 00:00:00 2001 From: rinpatch Date: Tue, 23 Jun 2020 15:52:57 +0300 Subject: [PATCH 071/236] config.exs: make gun the default again --- config/config.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.exs b/config/config.exs index dfc7a99d1..30b5e83bd 100644 --- a/config/config.exs +++ b/config/config.exs @@ -172,7 +172,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, From 12fa5541f01ca5cfe082a62dac3317da78043e8f Mon Sep 17 00:00:00 2001 From: rinpatch Date: Tue, 30 Jun 2020 15:58:53 +0300 Subject: [PATCH 072/236] FollowRedirects: Unconditionally release the connection if there is an error There is no need for streaming the body if there is no body --- lib/pleroma/tesla/middleware/follow_redirects.ex | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/pleroma/tesla/middleware/follow_redirects.ex b/lib/pleroma/tesla/middleware/follow_redirects.ex index f2c502c69..5a7032215 100644 --- a/lib/pleroma/tesla/middleware/follow_redirects.ex +++ b/lib/pleroma/tesla/middleware/follow_redirects.ex @@ -55,6 +55,10 @@ defp redirect(env, next, left) do release_conn(opts) {:error, {__MODULE__, :too_many_redirects}} + {:error, _} = e -> + release_conn(opts) + e + other -> unless opts[:body_as] == :chunks do release_conn(opts) From 9b73c35ca8b051316815461247b802bc8567854f Mon Sep 17 00:00:00 2001 From: rinpatch Date: Tue, 30 Jun 2020 18:35:15 +0300 Subject: [PATCH 073/236] Request limiter setup: consider {:error, :existing} a success When the application restarts (which happens after certain config changes), the limiters are not destroyed, so `ConcurrentLimiter.new` will produce {:error, :existing} --- lib/pleroma/http/adapter_helper/gun.ex | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/http/adapter_helper/gun.ex b/lib/pleroma/http/adapter_helper/gun.ex index 07aaed7f6..b8c4cc59c 100644 --- a/lib/pleroma/http/adapter_helper/gun.ex +++ b/lib/pleroma/http/adapter_helper/gun.ex @@ -88,11 +88,17 @@ def limiter_setup do max_running = Keyword.get(opts, :size, 50) max_waiting = Keyword.get(opts, :max_waiting, 10) - :ok = + result = ConcurrentLimiter.new(:"#{@prefix}.#{name}", max_running, max_waiting, wait: wait, max_retries: retries ) + + case result do + :ok -> :ok + {:error, :existing} -> :ok + e -> raise e + end end) :ok From a705637dcf7ffe063c9c0f3f190f57e44aaa63f2 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 2 Jul 2020 01:53:27 +0300 Subject: [PATCH 074/236] Connection Pool: fix LRFU implementation to not actually be LRU The numbers of the native time unit were so small the CRF was always 1, making it an LRU. This commit switches the time to miliseconds and changes the time delta multiplier to the one yielding mostly highest hit rates according to the paper --- lib/pleroma/gun/connection_pool/worker.ex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/gun/connection_pool/worker.ex b/lib/pleroma/gun/connection_pool/worker.ex index 418cb18c1..ec0502621 100644 --- a/lib/pleroma/gun/connection_pool/worker.ex +++ b/lib/pleroma/gun/connection_pool/worker.ex @@ -12,7 +12,7 @@ def start_link([key | _] = opts) do def init([key, uri, opts, client_pid]) do with {:ok, conn_pid} <- Gun.Conn.open(uri, opts), Process.link(conn_pid) do - time = :erlang.monotonic_time() + time = :erlang.monotonic_time(:millisecond) {_, _} = Registry.update_value(@registry, key, fn _ -> @@ -31,7 +31,7 @@ def init([key, uri, opts, client_pid]) do @impl true def handle_cast({:add_client, client_pid, send_pid_back}, %{key: key} = state) do - time = :erlang.monotonic_time() + time = :erlang.monotonic_time(:millisecond) {{conn_pid, _, _, _}, _} = Registry.update_value(@registry, key, fn {conn_pid, used_by, crf, last_reference} -> @@ -116,6 +116,6 @@ def handle_info({:DOWN, _ref, :process, pid, reason}, state) do # LRFU policy: https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.55.1478 defp crf(time_delta, prev_crf) do - 1 + :math.pow(0.5, time_delta / 100) * prev_crf + 1 + :math.pow(0.5, 0.0001 * time_delta) * prev_crf end end From 33747e9366ef7422c9b39ac360ad1d96405bc4fd Mon Sep 17 00:00:00 2001 From: rinpatch Date: Mon, 6 Jul 2020 12:13:02 +0300 Subject: [PATCH 075/236] config.exs: set gun retries to 0 The new pooling code just removes the connection when it's down, there is no need to reconnect a connection that is just sitting idle, better just open a new one next time it's needed --- config/config.exs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/config/config.exs b/config/config.exs index 30b5e83bd..61406687a 100644 --- a/config/config.exs +++ b/config/config.exs @@ -652,8 +652,7 @@ connection_acquisition_retries: 5, max_connections: 250, max_idle_time: 30_000, - retry: 1, - retry_timeout: 1000, + retry: 0, await_up_timeout: 5_000 config :pleroma, :pools, From 46dd276d686e49676101e2af743aad61393f4b70 Mon Sep 17 00:00:00 2001 From: href Date: Tue, 7 Jul 2020 18:56:17 +0200 Subject: [PATCH 076/236] ConnectionPool.Worker: Open gun conn in continue instead of init --- lib/pleroma/gun/connection_pool/worker.ex | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/gun/connection_pool/worker.ex b/lib/pleroma/gun/connection_pool/worker.ex index ec0502621..6ee622fb0 100644 --- a/lib/pleroma/gun/connection_pool/worker.ex +++ b/lib/pleroma/gun/connection_pool/worker.ex @@ -9,7 +9,12 @@ def start_link([key | _] = opts) do end @impl true - def init([key, uri, opts, client_pid]) do + def init([_key, _uri, _opts, _client_pid] = opts) do + {:ok, nil, {:continue, {:connect, opts}}} + end + + @impl true + def handle_continue({:connect, [key, uri, opts, client_pid]}, _) do with {:ok, conn_pid} <- Gun.Conn.open(uri, opts), Process.link(conn_pid) do time = :erlang.monotonic_time(:millisecond) @@ -21,7 +26,7 @@ def init([key, uri, opts, client_pid]) do send(client_pid, {:conn_pid, conn_pid}) - {:ok, + {:noreply, %{key: key, timer: nil, client_monitors: %{client_pid => Process.monitor(client_pid)}}, :hibernate} else From 6a0f2bdf8ceb4127678cc55406a02d41c7fb0ed7 Mon Sep 17 00:00:00 2001 From: href Date: Wed, 8 Jul 2020 13:01:02 +0200 Subject: [PATCH 077/236] Ensure connections error get known by the caller --- lib/pleroma/gun/connection_pool.ex | 22 ++++++++++++---------- lib/pleroma/gun/connection_pool/worker.ex | 3 ++- lib/pleroma/http/adapter_helper/gun.ex | 2 +- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/lib/pleroma/gun/connection_pool.ex b/lib/pleroma/gun/connection_pool.ex index e951872fe..d3eead7d8 100644 --- a/lib/pleroma/gun/connection_pool.ex +++ b/lib/pleroma/gun/connection_pool.ex @@ -16,7 +16,7 @@ def get_conn(uri, opts) do case Registry.lookup(@registry, key) do # The key has already been registered, but connection is not up yet [{worker_pid, nil}] -> - get_gun_pid_from_worker(worker_pid) + get_gun_pid_from_worker(worker_pid, true) [{worker_pid, {gun_pid, _used_by, _crf, _last_reference}}] -> GenServer.cast(worker_pid, {:add_client, self(), false}) @@ -27,13 +27,11 @@ def get_conn(uri, opts) do # so we open the connection in the process directly and send it's pid back # We trust gun to handle timeouts by itself case WorkerSupervisor.start_worker([key, uri, opts, self()]) do - {:ok, _worker_pid} -> - receive do - {:conn_pid, pid} -> {:ok, pid} - end + {:ok, worker_pid} -> + get_gun_pid_from_worker(worker_pid, false) {:error, {:already_started, worker_pid}} -> - get_gun_pid_from_worker(worker_pid) + get_gun_pid_from_worker(worker_pid, true) err -> err @@ -41,17 +39,21 @@ def get_conn(uri, opts) do end end - defp get_gun_pid_from_worker(worker_pid) do + defp get_gun_pid_from_worker(worker_pid, register) do # GenServer.call will block the process for timeout length if # the server crashes on startup (which will happen if gun fails to connect) # so instead we use cast + monitor ref = Process.monitor(worker_pid) - GenServer.cast(worker_pid, {:add_client, self(), true}) + if register, do: GenServer.cast(worker_pid, {:add_client, self(), true}) receive do - {:conn_pid, pid} -> {:ok, pid} - {:DOWN, ^ref, :process, ^worker_pid, reason} -> reason + {:conn_pid, pid} -> + Process.demonitor(ref) + {:ok, pid} + + {:DOWN, ^ref, :process, ^worker_pid, reason} -> + {:error, reason} end end diff --git a/lib/pleroma/gun/connection_pool/worker.ex b/lib/pleroma/gun/connection_pool/worker.ex index 6ee622fb0..16a508ad9 100644 --- a/lib/pleroma/gun/connection_pool/worker.ex +++ b/lib/pleroma/gun/connection_pool/worker.ex @@ -30,7 +30,8 @@ def handle_continue({:connect, [key, uri, opts, client_pid]}, _) do %{key: key, timer: nil, client_monitors: %{client_pid => Process.monitor(client_pid)}}, :hibernate} else - err -> {:stop, err} + err -> + {:stop, err, nil} end end diff --git a/lib/pleroma/http/adapter_helper/gun.ex b/lib/pleroma/http/adapter_helper/gun.ex index b8c4cc59c..74677ddb5 100644 --- a/lib/pleroma/http/adapter_helper/gun.ex +++ b/lib/pleroma/http/adapter_helper/gun.ex @@ -14,7 +14,7 @@ defmodule Pleroma.HTTP.AdapterHelper.Gun do connect_timeout: 5_000, domain_lookup_timeout: 5_000, tls_handshake_timeout: 5_000, - retry: 1, + retry: 0, retry_timeout: 1000, await_up_timeout: 5_000 ] From 23d714ed3038a24eb78314d52807c46d8b8de2f3 Mon Sep 17 00:00:00 2001 From: href Date: Wed, 8 Jul 2020 13:22:42 +0200 Subject: [PATCH 078/236] Fix race in enforcer/reclaimer start --- lib/pleroma/gun/connection_pool/reclaimer.ex | 85 +++++++++++++++++++ .../gun/connection_pool/worker_supervisor.ex | 81 +----------------- 2 files changed, 89 insertions(+), 77 deletions(-) create mode 100644 lib/pleroma/gun/connection_pool/reclaimer.ex diff --git a/lib/pleroma/gun/connection_pool/reclaimer.ex b/lib/pleroma/gun/connection_pool/reclaimer.ex new file mode 100644 index 000000000..1793ac3ee --- /dev/null +++ b/lib/pleroma/gun/connection_pool/reclaimer.ex @@ -0,0 +1,85 @@ +defmodule Pleroma.Gun.ConnectionPool.Reclaimer do + use GenServer, restart: :temporary + + @registry Pleroma.Gun.ConnectionPool + + def start_monitor() do + pid = + case :gen_server.start(__MODULE__, [], name: {:via, Registry, {@registry, "reclaimer"}}) do + {:ok, pid} -> + pid + + {:error, {:already_registered, pid}} -> + pid + end + + {pid, Process.monitor(pid)} + end + + @impl true + def init(_) do + {:ok, nil, {:continue, :reclaim}} + end + + @impl true + def handle_continue(:reclaim, _) do + max_connections = Pleroma.Config.get([:connections_pool, :max_connections]) + + reclaim_max = + [:connections_pool, :reclaim_multiplier] + |> Pleroma.Config.get() + |> Kernel.*(max_connections) + |> round + |> max(1) + + :telemetry.execute([:pleroma, :connection_pool, :reclaim, :start], %{}, %{ + max_connections: max_connections, + reclaim_max: reclaim_max + }) + + # :ets.fun2ms( + # fn {_, {worker_pid, {_, used_by, crf, last_reference}}} when used_by == [] -> + # {worker_pid, crf, last_reference} end) + unused_conns = + Registry.select( + @registry, + [ + {{:_, :"$1", {:_, :"$2", :"$3", :"$4"}}, [{:==, :"$2", []}], [{{:"$1", :"$3", :"$4"}}]} + ] + ) + + case unused_conns do + [] -> + :telemetry.execute( + [:pleroma, :connection_pool, :reclaim, :stop], + %{reclaimed_count: 0}, + %{ + max_connections: max_connections + } + ) + + {:stop, :no_unused_conns, nil} + + unused_conns -> + reclaimed = + unused_conns + |> Enum.sort(fn {_pid1, crf1, last_reference1}, {_pid2, crf2, last_reference2} -> + crf1 <= crf2 and last_reference1 <= last_reference2 + end) + |> Enum.take(reclaim_max) + + reclaimed + |> Enum.each(fn {pid, _, _} -> + DynamicSupervisor.terminate_child(Pleroma.Gun.ConnectionPool.WorkerSupervisor, pid) + end) + + :telemetry.execute( + [:pleroma, :connection_pool, :reclaim, :stop], + %{reclaimed_count: Enum.count(reclaimed)}, + %{max_connections: max_connections} + ) + + {:stop, :normal, nil} + end + end +end diff --git a/lib/pleroma/gun/connection_pool/worker_supervisor.ex b/lib/pleroma/gun/connection_pool/worker_supervisor.ex index 5cb8d488a..39615c956 100644 --- a/lib/pleroma/gun/connection_pool/worker_supervisor.ex +++ b/lib/pleroma/gun/connection_pool/worker_supervisor.ex @@ -29,89 +29,16 @@ def start_worker(opts, retry \\ false) do end end - @registry Pleroma.Gun.ConnectionPool - @enforcer_key "enforcer" defp free_pool do - case Registry.lookup(@registry, @enforcer_key) do - [] -> - pid = - spawn(fn -> - {:ok, _pid} = Registry.register(@registry, @enforcer_key, nil) - max_connections = Pleroma.Config.get([:connections_pool, :max_connections]) - - reclaim_max = - [:connections_pool, :reclaim_multiplier] - |> Pleroma.Config.get() - |> Kernel.*(max_connections) - |> round - |> max(1) - - :telemetry.execute([:pleroma, :connection_pool, :reclaim, :start], %{}, %{ - max_connections: max_connections, - reclaim_max: reclaim_max - }) - - # :ets.fun2ms( - # fn {_, {worker_pid, {_, used_by, crf, last_reference}}} when used_by == [] -> - # {worker_pid, crf, last_reference} end) - unused_conns = - Registry.select( - @registry, - [ - {{:_, :"$1", {:_, :"$2", :"$3", :"$4"}}, [{:==, :"$2", []}], - [{{:"$1", :"$3", :"$4"}}]} - ] - ) - - case unused_conns do - [] -> - :telemetry.execute( - [:pleroma, :connection_pool, :reclaim, :stop], - %{reclaimed_count: 0}, - %{ - max_connections: max_connections - } - ) - - exit(:no_unused_conns) - - unused_conns -> - reclaimed = - unused_conns - |> Enum.sort(fn {_pid1, crf1, last_reference1}, - {_pid2, crf2, last_reference2} -> - crf1 <= crf2 and last_reference1 <= last_reference2 - end) - |> Enum.take(reclaim_max) - - reclaimed - |> Enum.each(fn {pid, _, _} -> - DynamicSupervisor.terminate_child(__MODULE__, pid) - end) - - :telemetry.execute( - [:pleroma, :connection_pool, :reclaim, :stop], - %{reclaimed_count: Enum.count(reclaimed)}, - %{max_connections: max_connections} - ) - end - end) - - wait_for_enforcer_finish(pid) - - [{pid, _}] -> - wait_for_enforcer_finish(pid) - end + wait_for_reclaimer_finish(Pleroma.Gun.ConnectionPool.Reclaimer.start_monitor()) end - defp wait_for_enforcer_finish(pid) do - ref = Process.monitor(pid) - + defp wait_for_reclaimer_finish({pid, mon}) do receive do - {:DOWN, ^ref, :process, ^pid, :no_unused_conns} -> + {:DOWN, ^mon, :process, ^pid, :no_unused_conns} -> :error - {:DOWN, ^ref, :process, ^pid, :normal} -> + {:DOWN, ^mon, :process, ^pid, :normal} -> :ok end end From 53ba6815b170d7d5c11282933b99730209f526ea Mon Sep 17 00:00:00 2001 From: href Date: Wed, 8 Jul 2020 13:58:38 +0200 Subject: [PATCH 079/236] parentheses... --- lib/pleroma/gun/connection_pool/reclaimer.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/gun/connection_pool/reclaimer.ex b/lib/pleroma/gun/connection_pool/reclaimer.ex index 1793ac3ee..cea800882 100644 --- a/lib/pleroma/gun/connection_pool/reclaimer.ex +++ b/lib/pleroma/gun/connection_pool/reclaimer.ex @@ -3,7 +3,7 @@ defmodule Pleroma.Gun.ConnectionPool.Reclaimer do @registry Pleroma.Gun.ConnectionPool - def start_monitor() do + def start_monitor do pid = case :gen_server.start(__MODULE__, [], name: {:via, Registry, {@registry, "reclaimer"}}) do {:ok, pid} -> From 6b1f6a1cf7efc8bbaf099c7363a5aeadd256c781 Mon Sep 17 00:00:00 2001 From: href Date: Wed, 8 Jul 2020 14:59:10 +0200 Subject: [PATCH 080/236] Bump gun --- mix.exs | 2 +- mix.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index 4dfce58e7..db2e9324e 100644 --- a/mix.exs +++ b/mix.exs @@ -141,7 +141,7 @@ defp deps do {:castore, "~> 0.1"}, {:cowlib, "~> 2.8", override: true}, {:gun, - github: "ninenines/gun", ref: "e1a69b36b180a574c0ac314ced9613fdd52312cc", override: true}, + github: "ninenines/gun", ref: "921c47146b2d9567eac7e9a4d2ccc60fffd4f327", override: true}, {:jason, "~> 1.0"}, {:mogrify, "~> 0.6.1"}, {:ex_aws, "~> 2.1"}, diff --git a/mix.lock b/mix.lock index 89c97decf..06add0510 100644 --- a/mix.lock +++ b/mix.lock @@ -50,7 +50,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", "e1a69b36b180a574c0ac314ced9613fdd52312cc", [ref: "e1a69b36b180a574c0ac314ced9613fdd52312cc"]}, + "gun": {:git, "https://github.com/ninenines/gun.git", "921c47146b2d9567eac7e9a4d2ccc60fffd4f327", [ref: "921c47146b2d9567eac7e9a4d2ccc60fffd4f327"]}, "hackney": {:hex, :hackney, "1.16.0", "5096ac8e823e3a441477b2d187e30dd3fff1a82991a806b2003845ce72ce2d84", [:rebar3], [{:certifi, "2.5.2", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.1", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.0", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.6", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "3bf0bebbd5d3092a3543b783bf065165fa5d3ad4b899b836810e513064134e18"}, "html_entities": {:hex, :html_entities, "0.5.1", "1c9715058b42c35a2ab65edc5b36d0ea66dd083767bef6e3edb57870ef556549", [:mix], [], "hexpm", "30efab070904eb897ff05cd52fa61c1025d7f8ef3a9ca250bc4e6513d16c32de"}, "html_sanitize_ex": {:hex, :html_sanitize_ex, "1.3.0", "f005ad692b717691203f940c686208aa3d8ffd9dd4bb3699240096a51fa9564e", [:mix], [{:mochiweb, "~> 2.15", [hex: :mochiweb, repo: "hexpm", optional: false]}], "hexpm"}, From ebfa59168942df9f8df73972a407cd2beada41e1 Mon Sep 17 00:00:00 2001 From: href Date: Wed, 8 Jul 2020 15:02:56 +0200 Subject: [PATCH 081/236] Go back to upstream Tesla --- mix.exs | 4 +--- mix.lock | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/mix.exs b/mix.exs index db2e9324e..52b4cf268 100644 --- a/mix.exs +++ b/mix.exs @@ -135,9 +135,7 @@ defp deps do {:poison, "~> 3.0", override: true}, # {:tesla, "~> 1.3", override: true}, {:tesla, - git: "https://git.pleroma.social/pleroma/elixir-libraries/tesla.git", - ref: "61b7503cef33f00834f78ddfafe0d5d9dec2270b", - override: true}, + github: "teamon/tesla", ref: "af3707078b10793f6a534938e56b963aff82fe3c", override: true}, {:castore, "~> 0.1"}, {:cowlib, "~> 2.8", override: true}, {:gun, diff --git a/mix.lock b/mix.lock index 06add0510..8dd37a40f 100644 --- a/mix.lock +++ b/mix.lock @@ -108,7 +108,7 @@ "swoosh": {:git, "https://github.com/swoosh/swoosh", "c96e0ca8a00d8f211ec1f042a4626b09f249caa5", [ref: "c96e0ca8a00d8f211ec1f042a4626b09f249caa5"]}, "syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"}, "telemetry": {:hex, :telemetry, "0.4.2", "2808c992455e08d6177322f14d3bdb6b625fbcfd233a73505870d8738a2f4599", [:rebar3], [], "hexpm", "2d1419bd9dda6a206d7b5852179511722e2b18812310d304620c7bd92a13fcef"}, - "tesla": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/tesla.git", "61b7503cef33f00834f78ddfafe0d5d9dec2270b", [ref: "61b7503cef33f00834f78ddfafe0d5d9dec2270b"]}, + "tesla": {:git, "https://github.com/teamon/tesla.git", "af3707078b10793f6a534938e56b963aff82fe3c", [ref: "af3707078b10793f6a534938e56b963aff82fe3c"]}, "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, "1.0.3", "73470ad29dde46e350c60a66e6b360d3b99d2d18b74c4c349dbebbc27a09a3eb", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "a6e1ee7003c4d04ecbd21dd3ec690d4c6662db5d3bbdd7262d53cdf5e7c746c1"}, From ce1a42bd04bcf352ea1565b411444a98261b0a96 Mon Sep 17 00:00:00 2001 From: href Date: Wed, 8 Jul 2020 15:12:09 +0200 Subject: [PATCH 082/236] Simplify TLS opts - `verify_fun` is not useful now - use `customize_check_hostname` (OTP 20+ so OK) - `partial_chain` is useless as of OTP 21.1 (wasn't there, but hackney/.. uses it) --- lib/pleroma/gun/conn.ex | 5 ++--- lib/pleroma/http/adapter_helper/gun.ex | 28 -------------------------- 2 files changed, 2 insertions(+), 31 deletions(-) diff --git a/lib/pleroma/gun/conn.ex b/lib/pleroma/gun/conn.ex index 9dc8880db..5c12e8153 100644 --- a/lib/pleroma/gun/conn.ex +++ b/lib/pleroma/gun/conn.ex @@ -28,9 +28,8 @@ defp maybe_add_tls_opts(opts, %URI{scheme: "https", host: host}) do cacertfile: CAStore.file_path(), depth: 20, reuse_sessions: false, - verify_fun: - {&:ssl_verify_hostname.verify_fun/3, - [check_hostname: Pleroma.HTTP.AdapterHelper.format_host(host)]} + log_level: :warning, + customize_hostname_check: [match_fun: :public_key.pkix_verify_hostname_match_fun(:https)] ] tls_opts = diff --git a/lib/pleroma/http/adapter_helper/gun.ex b/lib/pleroma/http/adapter_helper/gun.ex index 74677ddb5..b4ff8306c 100644 --- a/lib/pleroma/http/adapter_helper/gun.ex +++ b/lib/pleroma/http/adapter_helper/gun.ex @@ -39,36 +39,8 @@ defp add_scheme_opts(opts, %{scheme: "http"}), do: opts defp add_scheme_opts(opts, %{scheme: "https"}) do opts |> Keyword.put(:certificates_verification, true) - |> Keyword.put(:tls_opts, - log_level: :warning, - customize_hostname_check: [match_fun: &ssl_match_fun/2] - ) end - # ssl_match_fun is adapted from [Mint](https://github.com/elixir-mint/mint) - # Copyright 2018 Eric Meadows-Jönsson and Andrea Leopardi - - # Wildcard domain handling for DNS ID entries in the subjectAltName X.509 - # extension. Note that this is a subset of the wildcard patterns implemented - # by OTP when matching against the subject CN attribute, but this is the only - # wildcard usage defined by the CA/Browser Forum's Baseline Requirements, and - # therefore the only pattern used in commercially issued certificates. - defp ssl_match_fun({:dns_id, reference}, {:dNSName, [?*, ?. | presented]}) do - case domain_without_host(reference) do - '' -> - :default - - domain -> - :string.casefold(domain) == :string.casefold(presented) - end - end - - defp ssl_match_fun(_reference, _presented), do: :default - - defp domain_without_host([]), do: [] - defp domain_without_host([?. | domain]), do: domain - defp domain_without_host([_ | more]), do: domain_without_host(more) - @spec get_conn(URI.t(), keyword()) :: {:ok, keyword()} | {:error, atom()} def get_conn(uri, opts) do case ConnectionPool.get_conn(uri, opts) do From afd378f84c4c1b784eba11b35c21e0b6ae3d7915 Mon Sep 17 00:00:00 2001 From: href Date: Wed, 8 Jul 2020 16:02:57 +0200 Subject: [PATCH 083/236] host is now useless --- lib/pleroma/gun/conn.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/gun/conn.ex b/lib/pleroma/gun/conn.ex index 5c12e8153..a3f75a4bb 100644 --- a/lib/pleroma/gun/conn.ex +++ b/lib/pleroma/gun/conn.ex @@ -22,7 +22,7 @@ def open(%URI{} = uri, opts) do defp maybe_add_tls_opts(opts, %URI{scheme: "http"}), do: opts - defp maybe_add_tls_opts(opts, %URI{scheme: "https", host: host}) do + defp maybe_add_tls_opts(opts, %URI{scheme: "https"}) do tls_opts = [ verify: :verify_peer, cacertfile: CAStore.file_path(), From e499275076422631b31f1455ab720aae9d7786d2 Mon Sep 17 00:00:00 2001 From: href Date: Wed, 8 Jul 2020 19:23:32 +0200 Subject: [PATCH 084/236] Don't test tls_options in adapter helper test. --- test/http/adapter_helper/gun_test.exs | 3 --- 1 file changed, 3 deletions(-) diff --git a/test/http/adapter_helper/gun_test.exs b/test/http/adapter_helper/gun_test.exs index 49eebf355..80589c73d 100644 --- a/test/http/adapter_helper/gun_test.exs +++ b/test/http/adapter_helper/gun_test.exs @@ -21,7 +21,6 @@ test "https url with default port" do opts = Gun.options([receive_conn: false], uri) assert opts[:certificates_verification] - assert opts[:tls_opts][:log_level] == :warning end test "https ipv4 with default port" do @@ -29,7 +28,6 @@ test "https ipv4 with default port" do opts = Gun.options([receive_conn: false], uri) assert opts[:certificates_verification] - assert opts[:tls_opts][:log_level] == :warning end test "https ipv6 with default port" do @@ -37,7 +35,6 @@ test "https ipv6 with default port" do opts = Gun.options([receive_conn: false], uri) assert opts[:certificates_verification] - assert opts[:tls_opts][:log_level] == :warning end test "https url with non standart port" do From 6d583bcc3b23c0c16aefa3f34155e7e15b745b01 Mon Sep 17 00:00:00 2001 From: href Date: Mon, 13 Jul 2020 10:44:36 +0200 Subject: [PATCH 085/236] Set a default timeout for Gun adapter timeout --- lib/pleroma/http/adapter_helper.ex | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/http/adapter_helper.ex b/lib/pleroma/http/adapter_helper.ex index 8ca433732..9ec3836b0 100644 --- a/lib/pleroma/http/adapter_helper.ex +++ b/lib/pleroma/http/adapter_helper.ex @@ -44,15 +44,17 @@ def maybe_add_proxy(opts, proxy), do: Keyword.put_new(opts, :proxy, proxy) @spec options(URI.t(), keyword()) :: keyword() def options(%URI{} = uri, opts \\ []) do @defaults - |> pool_timeout() + |> put_timeout() |> Keyword.merge(opts) |> adapter_helper().options(uri) end - defp pool_timeout(opts) do + # For Hackney, this is the time a connection can stay idle in the pool. + # For Gun, this is the timeout to receive a message from Gun. + defp put_timeout(opts) do {config_key, default} = if adapter() == Tesla.Adapter.Gun do - {:pools, Config.get([:pools, :default, :timeout])} + {:pools, Config.get([:pools, :default, :timeout], 5_000)} else {:hackney_pools, 10_000} end From 7115c5f82efe1ca1817da3152ba3cbc66e0da1a4 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 15 Jul 2020 15:58:08 +0300 Subject: [PATCH 086/236] ConnectionPool.Worker: do not stop with an error when there is a timeout This produced error log messages about GenServer termination every time the connection was not open due to a timeout. Instead we stop with `{:shutdown, }` since shutting down when the connection can't be established is normal behavior. --- lib/pleroma/gun/connection_pool.ex | 5 ++++- lib/pleroma/gun/connection_pool/worker.ex | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/gun/connection_pool.ex b/lib/pleroma/gun/connection_pool.ex index d3eead7d8..8b41a668c 100644 --- a/lib/pleroma/gun/connection_pool.ex +++ b/lib/pleroma/gun/connection_pool.ex @@ -53,7 +53,10 @@ defp get_gun_pid_from_worker(worker_pid, register) do {:ok, pid} {:DOWN, ^ref, :process, ^worker_pid, reason} -> - {:error, reason} + case reason do + {:shutdown, error} -> error + _ -> {:error, reason} + end end end diff --git a/lib/pleroma/gun/connection_pool/worker.ex b/lib/pleroma/gun/connection_pool/worker.ex index 16a508ad9..f33447cb6 100644 --- a/lib/pleroma/gun/connection_pool/worker.ex +++ b/lib/pleroma/gun/connection_pool/worker.ex @@ -31,7 +31,7 @@ def handle_continue({:connect, [key, uri, opts, client_pid]}, _) do :hibernate} else err -> - {:stop, err, nil} + {:stop, {:shutdown, err}, nil} end end From c413649a8db26db742ff53c6c09a9a3b96e8cb6a Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 15 Jul 2020 16:20:17 +0300 Subject: [PATCH 087/236] Bring back oban job pruning Closes #1945 --- config/config.exs | 1 + 1 file changed, 1 insertion(+) diff --git a/config/config.exs b/config/config.exs index 6fc84efc2..daeefdca3 100644 --- a/config/config.exs +++ b/config/config.exs @@ -512,6 +512,7 @@ attachments_cleanup: 5, new_users_digest: 1 ], + plugins: [Oban.Plugins.Pruner], crontab: [ {"0 0 * * *", Pleroma.Workers.Cron.ClearOauthTokenWorker}, {"0 * * * *", Pleroma.Workers.Cron.StatsWorker}, From d29b8997f4a3601eac7f2e1e57de27a67df6699c Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Wed, 15 Jul 2020 15:25:33 +0200 Subject: [PATCH 088/236] MastoAPI: fix & test giving MRF reject reasons --- .../mastodon_api/controllers/status_controller.ex | 5 +++++ .../controllers/status_controller_test.exs | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex index 12be530c9..9bb2ef117 100644 --- a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex @@ -172,6 +172,11 @@ def create(%{assigns: %{user: user}, body_params: %{status: _} = params} = conn, with_direct_conversation_id: true ) else + {:error, {:reject, message}} -> + conn + |> put_status(:unprocessable_entity) + |> json(%{error: message}) + {:error, message} -> conn |> put_status(:unprocessable_entity) diff --git a/test/web/mastodon_api/controllers/status_controller_test.exs b/test/web/mastodon_api/controllers/status_controller_test.exs index fd2de8d80..d34f300da 100644 --- a/test/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/web/mastodon_api/controllers/status_controller_test.exs @@ -22,6 +22,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do setup do: clear_config([:instance, :federating]) setup do: clear_config([:instance, :allow_relay]) setup do: clear_config([:rich_media, :enabled]) + setup do: clear_config([:mrf, :policies]) + setup do: clear_config([:mrf_keyword, :reject]) describe "posting statuses" do setup do: oauth_access(["write:statuses"]) @@ -157,6 +159,17 @@ test "it fails to create a status if `expires_in` is less or equal than an hour" |> json_response_and_validate_schema(422) end + test "Get MRF reason when posting a status is rejected by one", %{conn: conn} do + Pleroma.Config.put([:mrf_keyword, :reject], ["GNO"]) + Pleroma.Config.put([:mrf, :policies], [Pleroma.Web.ActivityPub.MRF.KeywordPolicy]) + + assert %{"error" => "[KeywordPolicy] Matches with rejected keyword"} = + conn + |> put_req_header("content-type", "application/json") + |> post("api/v1/statuses", %{"status" => "GNO/Linux"}) + |> json_response_and_validate_schema(422) + end + test "posting an undefined status with an attachment", %{user: user, conn: conn} do file = %Plug.Upload{ content_type: "image/jpg", From 34d1d3e93e8642f2b784b5b957551af068c0f7ba Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 15 Jul 2020 09:38:56 -0500 Subject: [PATCH 089/236] Update FE bundle --- priv/static/index.html | 2 +- ...24b6b.css => app.6dbc7dea4fc148c85860.css} | 2 +- ...s.map => app.6dbc7dea4fc148c85860.css.map} | 2 +- .../static/font/fontello.1594374054351.woff2 | Bin 12540 -> 0 bytes ...4054351.eot => fontello.1594823398494.eot} | Bin 24524 -> 24524 bytes ...4054351.svg => fontello.1594823398494.svg} | 0 ...4054351.ttf => fontello.1594823398494.ttf} | Bin 24356 -> 24356 bytes ...54351.woff => fontello.1594823398494.woff} | Bin 14912 -> 14912 bytes .../static/font/fontello.1594823398494.woff2 | Bin 0 -> 12584 bytes priv/static/static/fontello.1589385935077.css | 144 ---------------- priv/static/static/fontello.1594030805019.css | 152 ----------------- priv/static/static/fontello.1594134783339.css | 156 ------------------ ...4054351.css => fontello.1594823398494.css} | 12 +- priv/static/static/fontello.json | 0 .../static/js/10.2823375ec309b971aaea.js | Bin 23120 -> 0 bytes .../static/js/10.5ef4671883649cf93524.js | Bin 0 -> 22666 bytes ....js.map => 10.5ef4671883649cf93524.js.map} | Bin 113 -> 113 bytes .../static/js/11.2cb4b0f72a4654070a58.js | Bin 16564 -> 0 bytes .../static/js/11.c5b938b4349f87567338.js | Bin 0 -> 16124 bytes ....js.map => 11.c5b938b4349f87567338.js.map} | Bin 113 -> 113 bytes .../static/js/12.500b3e4676dd47599a58.js | Bin 22582 -> 0 bytes .../static/js/12.ab82f9512fa85e78c114.js | Bin 0 -> 22115 bytes ....js.map => 12.ab82f9512fa85e78c114.js.map} | Bin 113 -> 113 bytes .../static/js/13.3ef79a2643680080d28f.js | Bin 26143 -> 0 bytes .../static/js/13.40e59c5015d3307b94ad.js | Bin 0 -> 27100 bytes ....js.map => 13.40e59c5015d3307b94ad.js.map} | Bin 113 -> 113 bytes .../static/js/14.b7f6eb3ea71d2ac2bb41.js | Bin 28652 -> 0 bytes .../static/js/14.b7f6eb3ea71d2ac2bb41.js.map | Bin 113 -> 0 bytes .../static/js/14.de791a47ee5249a526b1.js | Bin 0 -> 28164 bytes .../static/js/14.de791a47ee5249a526b1.js.map | Bin 0 -> 113 bytes .../static/js/15.d814a29a970070494722.js | Bin 7939 -> 0 bytes .../static/js/15.d814a29a970070494722.js.map | Bin 113 -> 0 bytes .../static/js/15.e24854297ad682aec45a.js | Bin 0 -> 7787 bytes .../static/js/15.e24854297ad682aec45a.js.map | Bin 0 -> 113 bytes .../static/js/16.017fa510b293035ac370.js | Bin 15892 -> 0 bytes .../static/js/16.017fa510b293035ac370.js.map | Bin 113 -> 0 bytes .../static/js/16.b7b0e4b8227a50fcb9bb.js | Bin 0 -> 15702 bytes .../static/js/16.b7b0e4b8227a50fcb9bb.js.map | Bin 0 -> 113 bytes .../static/js/17.c63932b65417ee7346a3.js | Bin 2234 -> 0 bytes .../static/js/17.c63932b65417ee7346a3.js.map | Bin 113 -> 0 bytes .../static/js/17.c98118b6bb84ee3b5b08.js | Bin 0 -> 2086 bytes .../static/js/17.c98118b6bb84ee3b5b08.js.map | Bin 0 -> 113 bytes .../static/js/18.89c20aa67a4dd067ea37.js | Bin 0 -> 28169 bytes .../static/js/18.89c20aa67a4dd067ea37.js.map | Bin 0 -> 113 bytes .../static/js/18.fd12f9746a55aa24a8b7.js | Bin 23585 -> 0 bytes .../static/js/18.fd12f9746a55aa24a8b7.js.map | Bin 113 -> 0 bytes .../static/js/19.3adebd64964c92700074.js | Bin 32200 -> 0 bytes .../static/js/19.3adebd64964c92700074.js.map | Bin 113 -> 0 bytes .../static/js/19.6e13bad8131c4501c1c5.js | Bin 0 -> 31632 bytes .../static/js/19.6e13bad8131c4501c1c5.js.map | Bin 0 -> 113 bytes .../static/js/2.78a48aa26599b00c3b8d.js | Bin 0 -> 178659 bytes .../static/js/2.78a48aa26599b00c3b8d.js.map | Bin 0 -> 459053 bytes .../static/js/2.d81ca020d6885c6c3b03.js | Bin 179851 -> 0 bytes .../static/js/2.d81ca020d6885c6c3b03.js.map | Bin 461434 -> 0 bytes .../static/js/20.3615c3cea2e1c2707a4f.js | Bin 0 -> 26374 bytes .../static/js/20.3615c3cea2e1c2707a4f.js.map | Bin 0 -> 113 bytes .../static/js/20.e0c3ad29d59470506c04.js | Bin 26951 -> 0 bytes .../static/js/20.e0c3ad29d59470506c04.js.map | Bin 113 -> 0 bytes .../static/js/21.64dedfc646e13e6f7915.js | Bin 0 -> 13162 bytes .../static/js/21.64dedfc646e13e6f7915.js.map | Bin 0 -> 113 bytes .../static/js/21.849ecc09a1d58bdc64c6.js | Bin 13310 -> 0 bytes .../static/js/21.849ecc09a1d58bdc64c6.js.map | Bin 113 -> 0 bytes .../static/js/22.6fa63bc6a054b7638e9e.js | Bin 0 -> 19706 bytes .../static/js/22.6fa63bc6a054b7638e9e.js.map | Bin 0 -> 113 bytes .../static/js/22.8782f133c9f66d3f2bbe.js | Bin 20130 -> 0 bytes .../static/js/22.8782f133c9f66d3f2bbe.js.map | Bin 113 -> 0 bytes .../static/js/23.2653bf91bc77c2ed0160.js | Bin 28187 -> 0 bytes .../static/js/23.2653bf91bc77c2ed0160.js.map | Bin 113 -> 0 bytes .../static/js/23.e0ddea2b6e049d221ee7.js | Bin 0 -> 27732 bytes .../static/js/23.e0ddea2b6e049d221ee7.js.map | Bin 0 -> 113 bytes .../static/js/24.38e3b9d44e9ee703ebf6.js | Bin 0 -> 18493 bytes .../static/js/24.38e3b9d44e9ee703ebf6.js.map | Bin 0 -> 113 bytes .../static/js/24.f931d864a2297d880a9a.js | Bin 18949 -> 0 bytes .../static/js/24.f931d864a2297d880a9a.js.map | Bin 113 -> 0 bytes .../static/js/25.696b41c0a8660e1f85af.js | Bin 0 -> 26932 bytes .../static/js/25.696b41c0a8660e1f85af.js.map | Bin 0 -> 113 bytes .../static/js/25.886acc9ba83c64659279.js | Bin 27408 -> 0 bytes .../static/js/25.886acc9ba83c64659279.js.map | Bin 113 -> 0 bytes .../static/js/26.1168f22384be75dc5492.js | Bin 0 -> 14249 bytes .../static/js/26.1168f22384be75dc5492.js.map | Bin 0 -> 113 bytes .../static/js/26.e15b1645079c72c60586.js | Bin 14415 -> 0 bytes .../static/js/26.e15b1645079c72c60586.js.map | Bin 113 -> 0 bytes .../static/js/27.3c0cfbb2a898b35486dd.js | Bin 0 -> 2022 bytes .../static/js/27.3c0cfbb2a898b35486dd.js.map | Bin 0 -> 113 bytes .../static/js/27.7b41e5953f74af7fddd1.js | Bin 2175 -> 0 bytes .../static/js/27.7b41e5953f74af7fddd1.js.map | Bin 113 -> 0 bytes .../static/js/28.4f39e562aaceaa01e883.js | Bin 25778 -> 0 bytes .../static/js/28.4f39e562aaceaa01e883.js.map | Bin 113 -> 0 bytes .../static/js/28.926c71d6f1813e177271.js | Bin 0 -> 25289 bytes .../static/js/28.926c71d6f1813e177271.js.map | Bin 0 -> 113 bytes .../static/js/29.137e2a68b558eed58152.js | Bin 24135 -> 0 bytes .../static/js/29.137e2a68b558eed58152.js.map | Bin 113 -> 0 bytes .../static/js/29.187064ebed099ae45749.js | Bin 0 -> 23857 bytes .../static/js/29.187064ebed099ae45749.js.map | Bin 0 -> 113 bytes .../static/js/30.73e09f3b43617410dec7.js | Bin 21485 -> 0 bytes .../static/js/30.73e09f3b43617410dec7.js.map | Bin 113 -> 0 bytes .../static/js/30.d78855ca19bf749be905.js | Bin 0 -> 21107 bytes .../static/js/30.d78855ca19bf749be905.js.map | Bin 0 -> 113 bytes .../static/js/5.2b4a2787bacdd3d910db.js | Bin 7028 -> 0 bytes .../static/js/5.84f3dce298bc720719c7.js | Bin 0 -> 6994 bytes ...b.js.map => 5.84f3dce298bc720719c7.js.map} | Bin 112 -> 112 bytes .../static/js/6.9c94bc0cc78979694cf4.js | Bin 7955 -> 0 bytes .../static/js/6.b9497e1d403b901a664e.js | Bin 0 -> 7790 bytes ...4.js.map => 6.b9497e1d403b901a664e.js.map} | Bin 112 -> 112 bytes .../static/js/7.455b574116ce3f004ffb.js | Bin 0 -> 15618 bytes ...7.js.map => 7.455b574116ce3f004ffb.js.map} | Bin 112 -> 112 bytes .../static/js/7.b4ac57fd946a3a189047.js | Bin 15765 -> 0 bytes .../static/js/8.8db9f2dcc5ed429777f7.js | Bin 0 -> 21682 bytes ...3.js.map => 8.8db9f2dcc5ed429777f7.js.map} | Bin 112 -> 112 bytes .../static/js/8.e03e32ca713d01db0433.js | Bin 21966 -> 0 bytes .../static/js/9.72d903ca8e0c5a532b87.js | Bin 13880 -> 0 bytes .../static/js/9.72d903ca8e0c5a532b87.js.map | Bin 112 -> 0 bytes .../static/js/9.da3973d058660aa9612f.js | Bin 0 -> 13753 bytes .../static/js/9.da3973d058660aa9612f.js.map | Bin 0 -> 112 bytes .../static/js/app.1e68e208590653dab5aa.js | Bin 571655 -> 0 bytes .../static/js/app.1e68e208590653dab5aa.js.map | Bin 1463721 -> 0 bytes .../static/js/app.31bba9f1e242ff273dcb.js | Bin 0 -> 572414 bytes .../static/js/app.31bba9f1e242ff273dcb.js.map | Bin 0 -> 1465392 bytes ...js => vendors~app.9e24ed238da5a8538f50.js} | Bin 304076 -> 304076 bytes ...> vendors~app.9e24ed238da5a8538f50.js.map} | Bin 1274957 -> 1274957 bytes priv/static/sw-pleroma.js | Bin 181435 -> 181435 bytes 121 files changed, 9 insertions(+), 461 deletions(-) rename priv/static/static/css/{app.77b1644622e3bae24b6b.css => app.6dbc7dea4fc148c85860.css} (99%) rename priv/static/static/css/{app.77b1644622e3bae24b6b.css.map => app.6dbc7dea4fc148c85860.css.map} (98%) delete mode 100644 priv/static/static/font/fontello.1594374054351.woff2 rename priv/static/static/font/{fontello.1594374054351.eot => fontello.1594823398494.eot} (99%) rename priv/static/static/font/{fontello.1594374054351.svg => fontello.1594823398494.svg} (100%) rename priv/static/static/font/{fontello.1594374054351.ttf => fontello.1594823398494.ttf} (99%) rename priv/static/static/font/{fontello.1594374054351.woff => fontello.1594823398494.woff} (96%) create mode 100644 priv/static/static/font/fontello.1594823398494.woff2 delete mode 100644 priv/static/static/fontello.1589385935077.css delete mode 100644 priv/static/static/fontello.1594030805019.css delete mode 100644 priv/static/static/fontello.1594134783339.css rename priv/static/static/{fontello.1594374054351.css => fontello.1594823398494.css} (90%) mode change 100755 => 100644 priv/static/static/fontello.json delete mode 100644 priv/static/static/js/10.2823375ec309b971aaea.js create mode 100644 priv/static/static/js/10.5ef4671883649cf93524.js rename priv/static/static/js/{10.2823375ec309b971aaea.js.map => 10.5ef4671883649cf93524.js.map} (56%) delete mode 100644 priv/static/static/js/11.2cb4b0f72a4654070a58.js create mode 100644 priv/static/static/js/11.c5b938b4349f87567338.js rename priv/static/static/js/{11.2cb4b0f72a4654070a58.js.map => 11.c5b938b4349f87567338.js.map} (56%) delete mode 100644 priv/static/static/js/12.500b3e4676dd47599a58.js create mode 100644 priv/static/static/js/12.ab82f9512fa85e78c114.js rename priv/static/static/js/{12.500b3e4676dd47599a58.js.map => 12.ab82f9512fa85e78c114.js.map} (56%) delete mode 100644 priv/static/static/js/13.3ef79a2643680080d28f.js create mode 100644 priv/static/static/js/13.40e59c5015d3307b94ad.js rename priv/static/static/js/{13.3ef79a2643680080d28f.js.map => 13.40e59c5015d3307b94ad.js.map} (56%) delete mode 100644 priv/static/static/js/14.b7f6eb3ea71d2ac2bb41.js delete mode 100644 priv/static/static/js/14.b7f6eb3ea71d2ac2bb41.js.map create mode 100644 priv/static/static/js/14.de791a47ee5249a526b1.js create mode 100644 priv/static/static/js/14.de791a47ee5249a526b1.js.map delete mode 100644 priv/static/static/js/15.d814a29a970070494722.js delete mode 100644 priv/static/static/js/15.d814a29a970070494722.js.map create mode 100644 priv/static/static/js/15.e24854297ad682aec45a.js create mode 100644 priv/static/static/js/15.e24854297ad682aec45a.js.map delete mode 100644 priv/static/static/js/16.017fa510b293035ac370.js delete mode 100644 priv/static/static/js/16.017fa510b293035ac370.js.map create mode 100644 priv/static/static/js/16.b7b0e4b8227a50fcb9bb.js create mode 100644 priv/static/static/js/16.b7b0e4b8227a50fcb9bb.js.map delete mode 100644 priv/static/static/js/17.c63932b65417ee7346a3.js delete mode 100644 priv/static/static/js/17.c63932b65417ee7346a3.js.map create mode 100644 priv/static/static/js/17.c98118b6bb84ee3b5b08.js create mode 100644 priv/static/static/js/17.c98118b6bb84ee3b5b08.js.map create mode 100644 priv/static/static/js/18.89c20aa67a4dd067ea37.js create mode 100644 priv/static/static/js/18.89c20aa67a4dd067ea37.js.map delete mode 100644 priv/static/static/js/18.fd12f9746a55aa24a8b7.js delete mode 100644 priv/static/static/js/18.fd12f9746a55aa24a8b7.js.map delete mode 100644 priv/static/static/js/19.3adebd64964c92700074.js delete mode 100644 priv/static/static/js/19.3adebd64964c92700074.js.map create mode 100644 priv/static/static/js/19.6e13bad8131c4501c1c5.js create mode 100644 priv/static/static/js/19.6e13bad8131c4501c1c5.js.map create mode 100644 priv/static/static/js/2.78a48aa26599b00c3b8d.js create mode 100644 priv/static/static/js/2.78a48aa26599b00c3b8d.js.map delete mode 100644 priv/static/static/js/2.d81ca020d6885c6c3b03.js delete mode 100644 priv/static/static/js/2.d81ca020d6885c6c3b03.js.map create mode 100644 priv/static/static/js/20.3615c3cea2e1c2707a4f.js create mode 100644 priv/static/static/js/20.3615c3cea2e1c2707a4f.js.map delete mode 100644 priv/static/static/js/20.e0c3ad29d59470506c04.js delete mode 100644 priv/static/static/js/20.e0c3ad29d59470506c04.js.map create mode 100644 priv/static/static/js/21.64dedfc646e13e6f7915.js create mode 100644 priv/static/static/js/21.64dedfc646e13e6f7915.js.map delete mode 100644 priv/static/static/js/21.849ecc09a1d58bdc64c6.js delete mode 100644 priv/static/static/js/21.849ecc09a1d58bdc64c6.js.map create mode 100644 priv/static/static/js/22.6fa63bc6a054b7638e9e.js create mode 100644 priv/static/static/js/22.6fa63bc6a054b7638e9e.js.map delete mode 100644 priv/static/static/js/22.8782f133c9f66d3f2bbe.js delete mode 100644 priv/static/static/js/22.8782f133c9f66d3f2bbe.js.map delete mode 100644 priv/static/static/js/23.2653bf91bc77c2ed0160.js delete mode 100644 priv/static/static/js/23.2653bf91bc77c2ed0160.js.map create mode 100644 priv/static/static/js/23.e0ddea2b6e049d221ee7.js create mode 100644 priv/static/static/js/23.e0ddea2b6e049d221ee7.js.map create mode 100644 priv/static/static/js/24.38e3b9d44e9ee703ebf6.js create mode 100644 priv/static/static/js/24.38e3b9d44e9ee703ebf6.js.map delete mode 100644 priv/static/static/js/24.f931d864a2297d880a9a.js delete mode 100644 priv/static/static/js/24.f931d864a2297d880a9a.js.map create mode 100644 priv/static/static/js/25.696b41c0a8660e1f85af.js create mode 100644 priv/static/static/js/25.696b41c0a8660e1f85af.js.map delete mode 100644 priv/static/static/js/25.886acc9ba83c64659279.js delete mode 100644 priv/static/static/js/25.886acc9ba83c64659279.js.map create mode 100644 priv/static/static/js/26.1168f22384be75dc5492.js create mode 100644 priv/static/static/js/26.1168f22384be75dc5492.js.map delete mode 100644 priv/static/static/js/26.e15b1645079c72c60586.js delete mode 100644 priv/static/static/js/26.e15b1645079c72c60586.js.map create mode 100644 priv/static/static/js/27.3c0cfbb2a898b35486dd.js create mode 100644 priv/static/static/js/27.3c0cfbb2a898b35486dd.js.map delete mode 100644 priv/static/static/js/27.7b41e5953f74af7fddd1.js delete mode 100644 priv/static/static/js/27.7b41e5953f74af7fddd1.js.map delete mode 100644 priv/static/static/js/28.4f39e562aaceaa01e883.js delete mode 100644 priv/static/static/js/28.4f39e562aaceaa01e883.js.map create mode 100644 priv/static/static/js/28.926c71d6f1813e177271.js create mode 100644 priv/static/static/js/28.926c71d6f1813e177271.js.map delete mode 100644 priv/static/static/js/29.137e2a68b558eed58152.js delete mode 100644 priv/static/static/js/29.137e2a68b558eed58152.js.map create mode 100644 priv/static/static/js/29.187064ebed099ae45749.js create mode 100644 priv/static/static/js/29.187064ebed099ae45749.js.map delete mode 100644 priv/static/static/js/30.73e09f3b43617410dec7.js delete mode 100644 priv/static/static/js/30.73e09f3b43617410dec7.js.map create mode 100644 priv/static/static/js/30.d78855ca19bf749be905.js create mode 100644 priv/static/static/js/30.d78855ca19bf749be905.js.map delete mode 100644 priv/static/static/js/5.2b4a2787bacdd3d910db.js create mode 100644 priv/static/static/js/5.84f3dce298bc720719c7.js rename priv/static/static/js/{5.2b4a2787bacdd3d910db.js.map => 5.84f3dce298bc720719c7.js.map} (57%) delete mode 100644 priv/static/static/js/6.9c94bc0cc78979694cf4.js create mode 100644 priv/static/static/js/6.b9497e1d403b901a664e.js rename priv/static/static/js/{6.9c94bc0cc78979694cf4.js.map => 6.b9497e1d403b901a664e.js.map} (57%) create mode 100644 priv/static/static/js/7.455b574116ce3f004ffb.js rename priv/static/static/js/{7.b4ac57fd946a3a189047.js.map => 7.455b574116ce3f004ffb.js.map} (57%) delete mode 100644 priv/static/static/js/7.b4ac57fd946a3a189047.js create mode 100644 priv/static/static/js/8.8db9f2dcc5ed429777f7.js rename priv/static/static/js/{8.e03e32ca713d01db0433.js.map => 8.8db9f2dcc5ed429777f7.js.map} (57%) delete mode 100644 priv/static/static/js/8.e03e32ca713d01db0433.js delete mode 100644 priv/static/static/js/9.72d903ca8e0c5a532b87.js delete mode 100644 priv/static/static/js/9.72d903ca8e0c5a532b87.js.map create mode 100644 priv/static/static/js/9.da3973d058660aa9612f.js create mode 100644 priv/static/static/js/9.da3973d058660aa9612f.js.map delete mode 100644 priv/static/static/js/app.1e68e208590653dab5aa.js delete mode 100644 priv/static/static/js/app.1e68e208590653dab5aa.js.map create mode 100644 priv/static/static/js/app.31bba9f1e242ff273dcb.js create mode 100644 priv/static/static/js/app.31bba9f1e242ff273dcb.js.map rename priv/static/static/js/{vendors~app.247dc52c7abe6a0dab87.js => vendors~app.9e24ed238da5a8538f50.js} (89%) rename priv/static/static/js/{vendors~app.247dc52c7abe6a0dab87.js.map => vendors~app.9e24ed238da5a8538f50.js.map} (96%) diff --git a/priv/static/index.html b/priv/static/index.html index 80820166a..2257dec35 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.77b1644622e3bae24b6b.css b/priv/static/static/css/app.6dbc7dea4fc148c85860.css similarity index 99% rename from priv/static/static/css/app.77b1644622e3bae24b6b.css rename to priv/static/static/css/app.6dbc7dea4fc148c85860.css index 8038882c0..3927e3b77 100644 --- a/priv/static/static/css/app.77b1644622e3bae24b6b.css +++ b/priv/static/static/css/app.6dbc7dea4fc148c85860.css @@ -243,4 +243,4 @@ .with-load-more-footer a { cursor: pointer; } -/*# sourceMappingURL=app.77b1644622e3bae24b6b.css.map*/ \ No newline at end of file +/*# sourceMappingURL=app.6dbc7dea4fc148c85860.css.map*/ \ No newline at end of file diff --git a/priv/static/static/css/app.77b1644622e3bae24b6b.css.map b/priv/static/static/css/app.6dbc7dea4fc148c85860.css.map similarity index 98% rename from priv/static/static/css/app.77b1644622e3bae24b6b.css.map rename to priv/static/static/css/app.6dbc7dea4fc148c85860.css.map index 4b042ef35..963d5b3b8 100644 --- a/priv/static/static/css/app.77b1644622e3bae24b6b.css.map +++ b/priv/static/static/css/app.6dbc7dea4fc148c85860.css.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./src/components/tab_switcher/tab_switcher.scss","webpack:///./src/hocs/with_load_more/with_load_more.scss"],"names":[],"mappings":"AAAA;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;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;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;ACtOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C","file":"static/css/app.77b1644622e3bae24b6b.css","sourcesContent":[".tab-switcher {\n display: -ms-flexbox;\n display: flex;\n}\n.tab-switcher .tab-icon {\n font-size: 2em;\n display: block;\n}\n.tab-switcher.top-tabs {\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher.top-tabs > .tabs {\n width: 100%;\n overflow-y: hidden;\n overflow-x: auto;\n padding-top: 5px;\n -ms-flex-direction: row;\n flex-direction: row;\n}\n.tab-switcher.top-tabs > .tabs::after, .tab-switcher.top-tabs > .tabs::before {\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.top-tabs > .tabs .tab-wrapper {\n height: 28px;\n}\n.tab-switcher.top-tabs > .tabs .tab-wrapper:not(.active)::after {\n left: 0;\n right: 0;\n bottom: 0;\n border-bottom: 1px solid;\n border-bottom-color: #222;\n border-bottom-color: var(--border, #222);\n}\n.tab-switcher.top-tabs > .tabs .tab {\n width: 100%;\n min-width: 1px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n padding-bottom: 99px;\n margin-bottom: -93px;\n}\n.tab-switcher.top-tabs .contents.scrollable-tabs {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n}\n.tab-switcher.side-tabs {\n -ms-flex-direction: row;\n flex-direction: row;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs {\n overflow-x: auto;\n }\n}\n.tab-switcher.side-tabs > .contents {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n.tab-switcher.side-tabs > .tabs {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n overflow-y: auto;\n overflow-x: hidden;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher.side-tabs > .tabs::after, .tab-switcher.side-tabs > .tabs::before {\n -ms-flex-negative: 0;\n flex-shrink: 0;\n -ms-flex-preferred-size: 0.5em;\n flex-basis: 0.5em;\n content: \"\";\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs::after {\n -ms-flex-positive: 1;\n flex-grow: 1;\n}\n.tab-switcher.side-tabs > .tabs::before {\n -ms-flex-positive: 0;\n flex-grow: 0;\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper {\n min-width: 10em;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs > .tabs .tab-wrapper {\n min-width: 1em;\n }\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper:not(.active)::after {\n top: 0;\n right: 0;\n bottom: 0;\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper::before {\n -ms-flex: 0 0 6px;\n flex: 0 0 6px;\n content: \"\";\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper:last-child .tab {\n margin-bottom: 0;\n}\n.tab-switcher.side-tabs > .tabs .tab {\n -ms-flex: 1;\n flex: 1;\n box-sizing: content-box;\n min-width: 10em;\n min-width: 1px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n padding-left: 1em;\n padding-right: calc(1em + 200px);\n margin-right: -200px;\n margin-left: 1em;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs > .tabs .tab {\n padding-left: 0.25em;\n padding-right: calc(.25em + 200px);\n margin-right: calc(.25em - 200px);\n margin-left: 0.25em;\n }\n .tab-switcher.side-tabs > .tabs .tab .text {\n display: none;\n }\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 .full-height:not(.hidden) {\n height: 100%;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher .contents .full-height:not(.hidden) > *:not(.mobile-label) {\n -ms-flex: 1;\n flex: 1;\n}\n.tab-switcher .contents.scrollable-tabs {\n overflow-y: auto;\n}\n.tab-switcher .tab {\n position: relative;\n white-space: nowrap;\n padding: 6px 1em;\n background-color: #182230;\n background-color: var(--tab, #182230);\n}\n.tab-switcher .tab, .tab-switcher .tab:active .tab-icon {\n color: #b9b9ba;\n color: var(--tabText, #b9b9ba);\n}\n.tab-switcher .tab:not(.active) {\n z-index: 4;\n}\n.tab-switcher .tab:not(.active):hover {\n z-index: 6;\n}\n.tab-switcher .tab.active {\n background: transparent;\n z-index: 5;\n color: #b9b9ba;\n color: var(--tabActiveText, #b9b9ba);\n}\n.tab-switcher .tab img {\n max-height: 26px;\n vertical-align: top;\n margin-top: -5px;\n}\n.tab-switcher .tabs {\n display: -ms-flexbox;\n display: flex;\n position: relative;\n box-sizing: border-box;\n}\n.tab-switcher .tabs::after, .tab-switcher .tabs::before {\n display: block;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n.tab-switcher .tab-wrapper {\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 .tab-wrapper:not(.active)::after {\n content: \"\";\n position: absolute;\n z-index: 7;\n}\n.tab-switcher .mobile-label {\n padding-left: 0.3em;\n padding-bottom: 0.25em;\n margin-top: 0.5em;\n margin-left: 0.2em;\n margin-bottom: 0.25em;\n border-bottom: 1px solid var(--border, #222);\n}\n@media all and (min-width: 800px) {\n .tab-switcher .mobile-label {\n display: none;\n }\n}",".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}\n.with-load-more-footer a {\n cursor: pointer;\n}"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./src/components/tab_switcher/tab_switcher.scss","webpack:///./src/hocs/with_load_more/with_load_more.scss"],"names":[],"mappings":"AAAA;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;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;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;ACtOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C","file":"static/css/app.6dbc7dea4fc148c85860.css","sourcesContent":[".tab-switcher {\n display: -ms-flexbox;\n display: flex;\n}\n.tab-switcher .tab-icon {\n font-size: 2em;\n display: block;\n}\n.tab-switcher.top-tabs {\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher.top-tabs > .tabs {\n width: 100%;\n overflow-y: hidden;\n overflow-x: auto;\n padding-top: 5px;\n -ms-flex-direction: row;\n flex-direction: row;\n}\n.tab-switcher.top-tabs > .tabs::after, .tab-switcher.top-tabs > .tabs::before {\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.top-tabs > .tabs .tab-wrapper {\n height: 28px;\n}\n.tab-switcher.top-tabs > .tabs .tab-wrapper:not(.active)::after {\n left: 0;\n right: 0;\n bottom: 0;\n border-bottom: 1px solid;\n border-bottom-color: #222;\n border-bottom-color: var(--border, #222);\n}\n.tab-switcher.top-tabs > .tabs .tab {\n width: 100%;\n min-width: 1px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n padding-bottom: 99px;\n margin-bottom: -93px;\n}\n.tab-switcher.top-tabs .contents.scrollable-tabs {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n}\n.tab-switcher.side-tabs {\n -ms-flex-direction: row;\n flex-direction: row;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs {\n overflow-x: auto;\n }\n}\n.tab-switcher.side-tabs > .contents {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n.tab-switcher.side-tabs > .tabs {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n overflow-y: auto;\n overflow-x: hidden;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher.side-tabs > .tabs::after, .tab-switcher.side-tabs > .tabs::before {\n -ms-flex-negative: 0;\n flex-shrink: 0;\n -ms-flex-preferred-size: 0.5em;\n flex-basis: 0.5em;\n content: \"\";\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs::after {\n -ms-flex-positive: 1;\n flex-grow: 1;\n}\n.tab-switcher.side-tabs > .tabs::before {\n -ms-flex-positive: 0;\n flex-grow: 0;\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper {\n min-width: 10em;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs > .tabs .tab-wrapper {\n min-width: 1em;\n }\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper:not(.active)::after {\n top: 0;\n right: 0;\n bottom: 0;\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper::before {\n -ms-flex: 0 0 6px;\n flex: 0 0 6px;\n content: \"\";\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper:last-child .tab {\n margin-bottom: 0;\n}\n.tab-switcher.side-tabs > .tabs .tab {\n -ms-flex: 1;\n flex: 1;\n box-sizing: content-box;\n min-width: 10em;\n min-width: 1px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n padding-left: 1em;\n padding-right: calc(1em + 200px);\n margin-right: -200px;\n margin-left: 1em;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs > .tabs .tab {\n padding-left: 0.25em;\n padding-right: calc(.25em + 200px);\n margin-right: calc(.25em - 200px);\n margin-left: 0.25em;\n }\n .tab-switcher.side-tabs > .tabs .tab .text {\n display: none;\n }\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 .full-height:not(.hidden) {\n height: 100%;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher .contents .full-height:not(.hidden) > *:not(.mobile-label) {\n -ms-flex: 1;\n flex: 1;\n}\n.tab-switcher .contents.scrollable-tabs {\n overflow-y: auto;\n}\n.tab-switcher .tab {\n position: relative;\n white-space: nowrap;\n padding: 6px 1em;\n background-color: #182230;\n background-color: var(--tab, #182230);\n}\n.tab-switcher .tab, .tab-switcher .tab:active .tab-icon {\n color: #b9b9ba;\n color: var(--tabText, #b9b9ba);\n}\n.tab-switcher .tab:not(.active) {\n z-index: 4;\n}\n.tab-switcher .tab:not(.active):hover {\n z-index: 6;\n}\n.tab-switcher .tab.active {\n background: transparent;\n z-index: 5;\n color: #b9b9ba;\n color: var(--tabActiveText, #b9b9ba);\n}\n.tab-switcher .tab img {\n max-height: 26px;\n vertical-align: top;\n margin-top: -5px;\n}\n.tab-switcher .tabs {\n display: -ms-flexbox;\n display: flex;\n position: relative;\n box-sizing: border-box;\n}\n.tab-switcher .tabs::after, .tab-switcher .tabs::before {\n display: block;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n.tab-switcher .tab-wrapper {\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 .tab-wrapper:not(.active)::after {\n content: \"\";\n position: absolute;\n z-index: 7;\n}\n.tab-switcher .mobile-label {\n padding-left: 0.3em;\n padding-bottom: 0.25em;\n margin-top: 0.5em;\n margin-left: 0.2em;\n margin-bottom: 0.25em;\n border-bottom: 1px solid var(--border, #222);\n}\n@media all and (min-width: 800px) {\n .tab-switcher .mobile-label {\n display: none;\n }\n}",".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}\n.with-load-more-footer a {\n cursor: pointer;\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/font/fontello.1594374054351.woff2 b/priv/static/static/font/fontello.1594374054351.woff2 deleted file mode 100644 index cb214aab32d219b21787573093927178ce0eaf1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12540 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 GMi>BwwiKWM delta 57 zcmX@JpYhCo#tAmeBr0TmJe diff --git a/priv/static/static/font/fontello.1594374054351.svg b/priv/static/static/font/fontello.1594823398494.svg similarity index 100% rename from priv/static/static/font/fontello.1594374054351.svg rename to priv/static/static/font/fontello.1594823398494.svg diff --git a/priv/static/static/font/fontello.1594374054351.ttf b/priv/static/static/font/fontello.1594823398494.ttf similarity index 99% rename from priv/static/static/font/fontello.1594374054351.ttf rename to priv/static/static/font/fontello.1594823398494.ttf index be55bef817f9dfd9bd2048d7f813b615eb18b076..6f21845a8fad5c28123c085a8974b9ec36e324e3 100644 GIT binary patch delta 49 ycmZ3ok8#O9#tDtgUr)7dY~l2lUdG-Z&u{aUft&dS0}$LcIh+HdH?Q!n5e5L~r4mK} delta 49 ycmZ3ok8#O9#tDtgFNB3Qws3k&A1o`6=ePOFz|H)E0SIpEKHmhRH?Q!n5e5LxZ4yQR diff --git a/priv/static/static/font/fontello.1594374054351.woff b/priv/static/static/font/fontello.1594823398494.woff similarity index 96% rename from priv/static/static/font/fontello.1594374054351.woff rename to priv/static/static/font/fontello.1594823398494.woff index 115945f707f6f29ab1000d5027885a0a4dfa64e0..a7cd098f485fabcb7f873e14e1a14d25c8ae80ae 100644 GIT binary patch delta 61 zcmV-D0K)&kbij0w$piJuhOx{_G%3rP-pBLXd}ZKfegPC=xNUMc2S)$@`ag-Kf;kKQ#db`urTs delta 61 zcmV-D0K)&kbij0w$ph#U60yumG${u^UXSOu`O3h}`~oP#a9j8JCK&zy>;EK{3g&bm TmxF-`Bnkk!5)W{*KQ#db#~>VL diff --git a/priv/static/static/font/fontello.1594823398494.woff2 b/priv/static/static/font/fontello.1594823398494.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c61bf111a113460de60ff82922a3717f70db2b0f GIT binary patch literal 12584 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 KHo&i5Wn==(nplef literal 0 HcmV?d00001 diff --git a/priv/static/static/fontello.1589385935077.css b/priv/static/static/fontello.1589385935077.css deleted file mode 100644 index 746492163..000000000 --- a/priv/static/static/fontello.1589385935077.css +++ /dev/null @@ -1,144 +0,0 @@ -@font-face { - font-family: "Icons"; - src: url("./font/fontello.1589385935077.eot"); - src: url("./font/fontello.1589385935077.eot") format("embedded-opentype"), - url("./font/fontello.1589385935077.woff2") format("woff2"), - url("./font/fontello.1589385935077.woff") format("woff"), - url("./font/fontello.1589385935077.ttf") format("truetype"), - url("./font/fontello.1589385935077.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-spin4::before { content: "\e834"; } - -.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-chart-bar::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-zoom-in::before { content: "\e81c"; } - -.icon-gauge::before { content: "\f0e4"; } - -.icon-users::before { content: "\e81d"; } - -.icon-info-circled::before { content: "\e81f"; } - -.icon-home-2::before { content: "\e821"; } - -.icon-chat::before { content: "\e81e"; } - -.icon-login::before { content: "\e820"; } - -.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.1594030805019.css b/priv/static/static/fontello.1594030805019.css deleted file mode 100644 index 9251070fe..000000000 --- a/priv/static/static/fontello.1594030805019.css +++ /dev/null @@ -1,152 +0,0 @@ -@font-face { - font-family: "Icons"; - src: url("./font/fontello.1594030805019.eot"); - src: url("./font/fontello.1594030805019.eot") format("embedded-opentype"), - url("./font/fontello.1594030805019.woff2") format("woff2"), - url("./font/fontello.1594030805019.woff") format("woff"), - url("./font/fontello.1594030805019.ttf") format("truetype"), - url("./font/fontello.1594030805019.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-spin4::before { content: "\e834"; } - -.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-chart-bar::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-zoom-in::before { content: "\e81c"; } - -.icon-gauge::before { content: "\f0e4"; } - -.icon-users::before { content: "\e81d"; } - -.icon-info-circled::before { content: "\e81f"; } - -.icon-home-2::before { content: "\e821"; } - -.icon-chat::before { content: "\e81e"; } - -.icon-login::before { content: "\e820"; } - -.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"; } - -.icon-filter::before { content: "\f0b0"; } - -.icon-download::before { content: "\e825"; } - -.icon-bookmark::before { content: "\e826"; } - -.icon-bookmark-empty::before { content: "\f097"; } diff --git a/priv/static/static/fontello.1594134783339.css b/priv/static/static/fontello.1594134783339.css deleted file mode 100644 index ff35edaba..000000000 --- a/priv/static/static/fontello.1594134783339.css +++ /dev/null @@ -1,156 +0,0 @@ -@font-face { - font-family: "Icons"; - src: url("./font/fontello.1594134783339.eot"); - src: url("./font/fontello.1594134783339.eot") format("embedded-opentype"), - url("./font/fontello.1594134783339.woff2") format("woff2"), - url("./font/fontello.1594134783339.woff") format("woff"), - url("./font/fontello.1594134783339.ttf") format("truetype"), - url("./font/fontello.1594134783339.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-spin4::before { content: "\e834"; } - -.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-chart-bar::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-zoom-in::before { content: "\e81c"; } - -.icon-gauge::before { content: "\f0e4"; } - -.icon-users::before { content: "\e81d"; } - -.icon-info-circled::before { content: "\e81f"; } - -.icon-home-2::before { content: "\e821"; } - -.icon-chat::before { content: "\e81e"; } - -.icon-login::before { content: "\e820"; } - -.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"; } - -.icon-filter::before { content: "\f0b0"; } - -.icon-download::before { content: "\e825"; } - -.icon-bookmark::before { content: "\e826"; } - -.icon-bookmark-empty::before { content: "\f097"; } - -.icon-music::before { content: "\e828"; } - -.icon-doc::before { content: "\e829"; } diff --git a/priv/static/static/fontello.1594374054351.css b/priv/static/static/fontello.1594823398494.css similarity index 90% rename from priv/static/static/fontello.1594374054351.css rename to priv/static/static/fontello.1594823398494.css index 6dea8ee3e..fe61b94c6 100644 --- a/priv/static/static/fontello.1594374054351.css +++ b/priv/static/static/fontello.1594823398494.css @@ -1,11 +1,11 @@ @font-face { font-family: "Icons"; - src: url("./font/fontello.1594374054351.eot"); - src: url("./font/fontello.1594374054351.eot") format("embedded-opentype"), - url("./font/fontello.1594374054351.woff2") format("woff2"), - url("./font/fontello.1594374054351.woff") format("woff"), - url("./font/fontello.1594374054351.ttf") format("truetype"), - url("./font/fontello.1594374054351.svg") format("svg"); + src: url("./font/fontello.1594823398494.eot"); + src: url("./font/fontello.1594823398494.eot") format("embedded-opentype"), + url("./font/fontello.1594823398494.woff2") format("woff2"), + url("./font/fontello.1594823398494.woff") format("woff"), + url("./font/fontello.1594823398494.ttf") format("truetype"), + url("./font/fontello.1594823398494.svg") format("svg"); font-weight: normal; font-style: normal; } diff --git a/priv/static/static/fontello.json b/priv/static/static/fontello.json old mode 100755 new mode 100644 diff --git a/priv/static/static/js/10.2823375ec309b971aaea.js b/priv/static/static/js/10.2823375ec309b971aaea.js deleted file mode 100644 index 8f34c42eadd2ac1cd4b3b581d74f3f94b8f6691c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23120 zcmbW9+iu)gc82fs6r36$b|Y%_VK6x;m;|y~ZacBv8q3`YFc}c6DoUcwB5Qb%EGq`` zD!vKO7rq$GUEd7QdXqd!zJIN~Nmi-UoykSFRpdUdy$=66Y(Bgys%3q(f0fVI+2YN= zv~{)q&5mdP`Jcc0{U`hDzP)((yWf5B`S15`e*L#!9GvylqATj^VgAWYzMsEc*G<>{ z=4Nq`bq6_Zw_w!uY=jKHP4#a-nyw5dD|A%`N8bO{?1s`e!|~X zS0`w@KG0S+lq(E^8(^%d@U;@-|&(RbC$WLVN{# z=k@x6>1SWtzq7p+<7FvRzrD6u-(E9pqNjB`+iMr~I#27hcGn)vzF9B$gXxxenPlZ6 zs}@>CQfA3z(H8TfESA}Fw%6rvyRsgy;`aNB?VtBWqup^-M!=@2oAfO2*miZE_N}&ctcNTunfIbi z(zkuq6!pw{#WvLff;N-4@AuC0DsM7qm95t$lsH_MEQdpB`?+o7xVkL#dsR1_=JVSR zEY&&{i!|4y2eT(xQZM?ZDVBB8SBX8H?K$xndR80tvXVhB>Z>%2RJXR2m5pdGN|=Bt z;)}e}Nf@me7uFEYtdJKr0ZfKRyvry%olJqG~=w#>JEyw*(J}vhQ3RUsGsRo(OuMi z=Ytp{hxZ9=oit&L9lO!&5*tmtP4c#1NG{l@HOU|^TS{)fe_LoBf%>O;a*-u4^0Hq{ zPe9DzW3za%t&7P%oK)85MRjoF|ID5)^Qv=Vv^nHOxSGN^pP8rcZ1!&s`|e_nDMyG7WqY8ih*bA{rvSl^ekxKo z#b8>5n7YbV(D~cQ$S^zeJ*|pGk;VCvHDUzM6%a7VbVM-6q7Q4ySgE$Q$Rx(;qFyrI z(e0m>#d$61<-NaN_}clAH>nN_F1ZfvpH?iT%S6G&*p)^-%#v;N?5+@B1Rd%0xpwzm z)@|a=qz|^Hn=Ef@j*C27inDIIx?3Zt8;jR=c8_ZuJg)Ul!}srlDqPh|>49~VUlw%_ z*By!+MGcErsI`OHX@MdVjo_dvyF_KojRg)Dd9#4>99ygo-TInB(yiH33tumnss4n2QC`4~1WJn^IZeHD%Qn81eKX}3UkEPPgUh

Ju2>IE7=CQC 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%0DHMk_F-_;gJKg%rhbu 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 UyEy&rFF*VASNkv8{Z+R9KW+Imp8x;= literal 0 HcmV?d00001 diff --git a/priv/static/static/js/10.2823375ec309b971aaea.js.map b/priv/static/static/js/10.5ef4671883649cf93524.js.map similarity index 56% rename from priv/static/static/js/10.2823375ec309b971aaea.js.map rename to priv/static/static/js/10.5ef4671883649cf93524.js.map index 8933e2336eb8c2e20134fa9d7c5837e32700e98e..95fa2207ea1ddef1752596126845c7fb076b03c7 100644 GIT binary patch delta 46 zcmXRcoZz8pnwn-}W^QO6Y-(hpmsPB!qg0$E=6sho_ZI7~n zxfsj?%ylk}c?0Llm>XeUBu_Hmzp9F)_QC0%0BLKJ#bVW}b@*{;{sdZX*rPBLM!lf5hQO;_Y)Ht{>i=cx&0I(gi1wMq6!V{+yvc^RH} zyIsMCUb;IB^KCvkTW4;;F-{M4Hm{Jn zWbU}wwA-xU2ou+}S=lm{->u_13v8=)cQURVjYBL~tisQh&Z`CQJhuloRkfI$F#-R3JDV<|1q6b#6Kk4#vhOKQQB3$9;8Hy8ZO9)hnwKt$NOJnAq6!uA3ET zNsIP8GWAIwUAT*?;=B+of-Vu#aOrYWBHn7%CFdNEtBP!&ygt6KR~_cDVY)h7W_5;! z^Pa~#rX02HzB|5KNeHd0Oq7h7 zuN@+PTCHV9QO1+A8IDSdvT_Y->F^&VkJWZ~$R_@cHZz}0&&|w8o@We`^s6>shQn^A z2QPwbk-n|E>BMo2t!pr_vI_#yq9)g#njr30a;y=%jyd~<{ho6%z06x=$DNhd&?JY? zuCVcZ#S*#OR@2F*;v_U@D$`F-S2XdCAZhiAe34{%!ntbtoxRjAR0_QFPLS1h39EKG zTR8={NQ1FIa~N&1cV)J93qPZTZ>JuGKbpBZt|vE~>ncaMS7GDnrK?N9 z0(qglMj@(FVehU95QSv8$!lPPBQO&Ll3N9YPI%dlUxE7EJ+~IOK|?sSyJiGcD7wWd zrBbe7F?n)-i1H8cSz%oJRvI{Ivp4OhvzY?dWIFl!>)-0fnZLYs^#<%!a^rdY8E&oH zZNcSl&YwSvqlw`JZCp*hZrf~Qp3Jqao39l}8oYDaB^B@yleUi4@Q;OUX1j~yp(83CmbT6Fdci#&L;>r;9-ffrOL z#dmKSIr6Pb8pnS&9Wc%nP9bxI+Twcr!-|ji30xRapm7$XIrO9jtX?o7HXG2MdGn7C zHOc&haZzMHVJHe_VDaw{z3NXQJ%OX&AKwvU5Y01GBKh{xZMqt9^b_Ac*dtge$=vOb zuOqQ=7vvPlE-x1N8Phie2CR|Vgi%8KVfb$!y*U5vH;)8SiCn;pt_8QEyKRngHCd~m z!l90AOm=D}g%Ndar8tW{l2r6QR2aD05{U8UT_^Z1EwZBy0Vctl?vC#{ykrA7z_~M- z^b#2UqOO*CUgT^6#T_(y-qk?3HjU$637hO{m#sP`-<>=a$J*5*OJ}YmbJE<`hR=@g zbVqqt0aCLF3OMc({jF3WXn21+CBG|N8DN%~Iw~1ZN4_{qz)8wWT(MxGi=-5qFg(av zU{z*)50m3xIBV1S1can$yTW}4u9GyEI2YpKP8w}Ji;$dFw2kIV!@ZhM9s8=b8^gP6gJ6$66? zDRwIDCW%0s8h;;h#Sh3Z$vD7Va5i(qStu9m!@F~`f8$*Sk;7X&A~q!<5-VZX@H}heoChM} zwfP&=X5?sVGR{0*X9XtuEXTJKR*xS5yCE3f-{qSI8D$M}i*CpCDmX`7kHU(L`1i*x^1 z1vChQd8?5@i4D}NjbfB}183p6W^S>X$z3JPTu`f z9^4x1hKg7MSgWD-r9RNnEW4G&k&he4Xov!nFC;rdOW$+IR zh{2Ghq3e2lV4TvClgPH!MGkcCX|k6j2?IxV*JE4gR~8z1I9zoBjKL1>eiPOUcf>>I zJ#8ezx%+|J*~z+>`S_~A+c~U{{7+AYc^J77&n0vdv!ChY zMxnh0p4LD zf{;*n--S1YXeir<$@740@?^4t#av7t+#5~D5e!r4J@ZW(^ZgS$c>!E?2|+Go@gYJL zBr^&}D!jP;_$|hD2WSJMv$2$(ErJxV=_l_2NhaE`H_!FcJKQTY;&@RW1=t>e6|$ zM~k)CZzW4K&mWwbRl;49sL|J93h(6Zem-I@#J4z|!24Xw6*+suU93OC(LQO^F>+I9 zBTcub_*vT%{qV?VYG}*)@{RNAJt&^S3<9+Y44i3bKfwThug?%jX&+>mfR|%kz+vTe zsZu=SbrYp;eP#)pLKcM=vvM5p!#H%X_sX`YsJqA#RHzW2E;JuaJ zE9)1`kkW148&0*`&Pvpq9XyA(VQN<}CK}w}f3)vDlCXLlHX6@1KP{j1P?-fLXKxceK!mO$Rf*7S07x2dEq( z1;IWD z8X;3f)Ph*t$F9*P(EO)HJOk!i2tWC{fwC3FEfPwJ;fnVe*&0BB)_*!}sKt-i?9rqr z8mQ=lz^Jbv`gYUJ&M@zyD^1bSaB<-rY@Q6|NC9@-$<4Q(1mf>h%o1Uy+J@het=dsO zBd-!osNLR}1u2Blc3)fb;R|?a_|}K6Sh-QsOTcu!@dZ^@I{!$o>a8#NG(m=n%tW(5 zJPs(Urx8a`D-h_$HVq>~KZa3GCxeMpDk|$3$+?ZUQrQI8y2Dimsw6tq=*Q&JJO^{( zaA^>}zfK)|r>$L)M-C1y++@7^%1To)tI{}*j zD=dp2pdaM?slSz9;4q+ri+3+nsjEtYX{i(1Qk=>ZU?NNkT zjF>tFNeUx={uo8R9>%e%-m28U5Toz8=YhS$jzT^0(#X)?eN?o!58(8yFMyL7SoAn_ zs8|#$%01S%nr(|6sZS=y> z8ib!*R|_003}ILYArPur0RE)YsEI{Y_Cv{wtQBz@xCq$WS^ER*wUW1w3x@z~FDM1jEE?<8{IZHnNZ1OK6*M!Y zTbonyhVC*+kN>LcY@sN2=_oIwI1a*M)Ut&z$W_YF@ukgWYVx=y4Np993buKh%~$`c zW$N)M(ca2=Jg*Rs{;_WoWp)ks3IWhJhKWD*i6+&kUY^PW4S@olsP*uQlX-8fxvFl? zs~#&;fKg)`8q+JCuyc%d1n4w27RFfjk7fqR59cquxKy)&32wVxYJG5!#`y;1q6G(J6tsjrav zwnMU}P$zHNx0uACp{a@Fmaa}?b`MQSxL(sjU|g-zhCV%4o@8W-Fl6D>cXP&Mr0PJN z&>;ZmsVzm+7@2}Kc3>q8eyEd&G?2b4-7>d=NAf%XK!9g`sj=gft$oaYL?a7w=XkD8YSzFBSs`D0cKdxqL@}REmLhl zmn9r@J}HjxX8F$X8xh1|R@vx>m=4N8VKl)nSx1qq+ZMFM1NIBz5A*JJ$Evu%iTE+r051`jIy0X60Rs= zp*F9QIGT3y5(MjuYU(GOzvY?WjF`zTopQHuch^TdiZt6EFYc0KdBxJ&2`5N!#YOV5Lba45eX47;2l%= zMcn?lU&CE5_e~`{`2;nh!b`ALMxycxITkGea2s^4i$UZY188!FA-n;4vc< z&BoCxZwn{xqCJU2WeorIQv&L4=Jf%J=*2J z_kD$sUKHjA%1*oNMp!j$s&Q zZYBB&mf{P-_E_C}g79Gj8U;D#mm6{+vhRUCR zch*Kt=IOMQk+1VNE=HG)N%EIVn4aL0e8;-KJTouIJ+YQXjTvF?|F+^&&!BTMR4Nt@ zK!KiT^lRu?O(v}B)gT@cL;I%Su&tMT$x$yM<*6^IKf>p*&tE=K<&MuoC~a80k@cEO zHeS>h3n*VLkAJnQzyB}-d`!a#Tq%(z;eYI)Ug_Md5FKX|toDUErLkaK0d&~H+*y4i zEJ2Obu_hs~Cc}l1SLDRw#5<&e{1wdyRl)x;(P`5#uNkH{2dyDtPIynLt8YJ!O~!tB z4ULVAmr*ruY8NaB?EsuNHal>`$G8ngb%K>L|+NWQ~SBX0d4q zrNLi955yH)P&Td5*8t;#6m>D0Tj0W81C1xRYyES#ypJ$1b)t@;Z+8sp-KHeW?dM=# zGCT*{M8Rn1`ysAvLGxjE{e+>seAl`9iM$7n8r@rzJ|4md>2Ci7Pkd?$c%HHG`5AOz zr}ig&{nkE-JLC=OVLio*bcUV(?LYrZ`?4!?4r_e$u+e8A1EM#%wS8+eQm&tQ;^FZX1)=2@DyxlnVCZ{|Ndm`9k_=amb8_Dj)rxs2%f>TkL1UVI$l1~+0ui}AH@b;ScEXoh|Rmbohr79n?CQUY_@6@ zlt6tePO*uLT%S_1BomQwSDuwP*v&^sl z3NgvW?RCU>s0Cz#?JAT4OC;4>!p7aHC`7bdmI;8-Na?A6`?>#NI`h!&CY+z z@J)Z2)c*Z$hZOnLq_;>vP8~Tc{QA(D|MJepVCuttNMJSc3jzq!V>@$zynQ4293$Ya zwNc9zm8@zFZ$bC-`IXwUl>03esqt$R>qzaVhmU{Y z8hG9(dI&lc!?M;sYi$yXKsJMPwjeI#VC~fYfRM(Iv`3?)W+K$&BQ(OA-=Jh9ufj(B zMUw|8YEZk_OBk4`9O$Hquc;`@Q2)jnp!9yyPm zejU=}(un_SF#F2y`4A-DZ~f}(>W>fp`5!+0^q2G@h&X%>2hHw(eEIA*pMU=Fi}~!! e*=NgNf8oCT)mLAB_Uq5wSO4_zqItM=yZ-|+jMkC> diff --git a/priv/static/static/js/11.c5b938b4349f87567338.js b/priv/static/static/js/11.c5b938b4349f87567338.js new file mode 100644 index 0000000000000000000000000000000000000000..b97f69bf35645c3d9a11ee132d295da9d1d52545 GIT binary patch literal 16124 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 diff --git a/priv/static/static/js/12.ab82f9512fa85e78c114.js b/priv/static/static/js/12.ab82f9512fa85e78c114.js new file mode 100644 index 0000000000000000000000000000000000000000..100d72b33e3d33d1d4f0addab233a7abeea4d4be GIT binary patch literal 22115 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 diff --git a/priv/static/static/js/13.3ef79a2643680080d28f.js b/priv/static/static/js/13.3ef79a2643680080d28f.js deleted file mode 100644 index 4070d1f3f59487c8fb9546a79d440464bd3d4a8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26143 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 diff --git a/priv/static/static/js/13.40e59c5015d3307b94ad.js b/priv/static/static/js/13.40e59c5015d3307b94ad.js new file mode 100644 index 0000000000000000000000000000000000000000..2088bb6b7dfca5d88d2018944957dc3d0d8244be GIT binary patch literal 27100 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 LdEcCD((3;K!HoGv literal 0 HcmV?d00001 diff --git a/priv/static/static/js/13.3ef79a2643680080d28f.js.map b/priv/static/static/js/13.40e59c5015d3307b94ad.js.map similarity index 56% rename from priv/static/static/js/13.3ef79a2643680080d28f.js.map rename to priv/static/static/js/13.40e59c5015d3307b94ad.js.map index bb2f24e3a18ddd689a5b93b616b251705dc3661e..3931b5ef95ccbf0ed4fb8bbcce9d73a37e525b1d 100644 GIT binary patch delta 46 zcmXRcoZz8pVvuTTnQUrcXqsYdY+#;bX_AdS diff --git a/priv/static/static/js/14.b7f6eb3ea71d2ac2bb41.js b/priv/static/static/js/14.b7f6eb3ea71d2ac2bb41.js deleted file mode 100644 index 316ba12919e44e890192a1f399160aeaf9f70b58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28652 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 diff --git a/priv/static/static/js/14.b7f6eb3ea71d2ac2bb41.js.map b/priv/static/static/js/14.b7f6eb3ea71d2ac2bb41.js.map deleted file mode 100644 index 07a26f2988b9063a03fe9d05ef1f3f2f95888077..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmXwxK?;B%5Jm4YYbh*A=ooFI#b{F~rO{ZM=?al+(m>A94uFnVgp)P!1&723)eB@55l{+eBk>3!c1Cr2aw diff --git a/priv/static/static/js/14.de791a47ee5249a526b1.js b/priv/static/static/js/14.de791a47ee5249a526b1.js new file mode 100644 index 0000000000000000000000000000000000000000..0e341275e4b9a69ee1c18bd16cecdf3c68404ca7 GIT binary patch literal 28164 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 Zo`3$?&wr79{@LH2Jly}b*{|EeJ_Ur%v literal 0 HcmV?d00001 diff --git a/priv/static/static/js/14.de791a47ee5249a526b1.js.map b/priv/static/static/js/14.de791a47ee5249a526b1.js.map new file mode 100644 index 0000000000000000000000000000000000000000..4bef545463eb73789059e9ac4487a7da22381826 GIT binary patch literal 113 zcmXwxK@LDL5Jm4Y>xPula12|q7&W9qE2eD3-BrZyCI9_*!AUz?@1V{Fus?P~40YQH zaJc@s;ioc;EK}5}6}V literal 0 HcmV?d00001 diff --git a/priv/static/static/js/15.d814a29a970070494722.js b/priv/static/static/js/15.d814a29a970070494722.js deleted file mode 100644 index 17eaf521857c7c70350b466a5e5c9b009417accb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7939 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 diff --git a/priv/static/static/js/15.d814a29a970070494722.js.map b/priv/static/static/js/15.d814a29a970070494722.js.map deleted file mode 100644 index 9792088bf741b334dfe0e669bd56264578c1871a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 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 literal 0 HcmV?d00001 diff --git a/priv/static/static/js/16.017fa510b293035ac370.js b/priv/static/static/js/16.017fa510b293035ac370.js deleted file mode 100644 index 387cfc9c7ff3dbcd423710c3ce326382cc3c5da0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15892 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

-X^o0Kv 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 diff --git a/priv/static/static/js/16.b7b0e4b8227a50fcb9bb.js b/priv/static/static/js/16.b7b0e4b8227a50fcb9bb.js new file mode 100644 index 0000000000000000000000000000000000000000..6a3ea951310303d08d908e318005ec570d3257cf GIT binary patch literal 15702 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 literal 0 HcmV?d00001 diff --git a/priv/static/static/js/16.b7b0e4b8227a50fcb9bb.js.map b/priv/static/static/js/16.b7b0e4b8227a50fcb9bb.js.map new file mode 100644 index 0000000000000000000000000000000000000000..fec45b087771a79bd2a21bf79117b3eb0d9a66d1 GIT binary patch literal 113 zcmb54l0m9Tl7*3xd7`O7T5^(QQj%U)F;F$c%%J@I5|Hj%03MGc A)Bpeg literal 0 HcmV?d00001 diff --git a/priv/static/static/js/17.c63932b65417ee7346a3.js b/priv/static/static/js/17.c63932b65417ee7346a3.js deleted file mode 100644 index e3172472a9429d44a57a33384d52fc2a2b2bc3db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2234 zcmZ`)O>f*b5WV+Tu{f*jcHtmNZ8u2L_FxzSrJdE%qDX)r8eh?r!f8Ch#=JS3lvq|V~X!N}jp zM6e;Lk#Mzc=BoL^5^^=!x>>kpF($=(A;8l8^^Rvwmf+-w-}W-nWQB@mu1X5&BYvjx z=3h0ymNJ>t(X4y%Q@SBV+UFFG;9=KP@c&8f+DqZw#MnW^-;r{4^M&_HB~lt071H6< z&-zRWsd>**CY=vP;FDJP+|LojDsCrObo|@zhii&zt)(c?Jv_4frEp-u!7j`0gO)A#DM6epX}Q#^P(lE{*fC z^TJmynhj_uDg|OMU}eq1f^bg-JMW+LpC^O_VTTaFe5e!fGJu(iLij{zMC(`un_wrJ zCDKIvR2tr+LP(Hu7G4lXrBp}pCsH@$Sj%m1RlPVhdMItNt|BWaBl~c-%41c%1_yXimt%Q7YuR=i?X%N~h)U*{H zK{q86>ZX}n!LsJwW^i4&+*pJf3ojt06TGp{dz;MD%32&BuUsHZ(hA~Z!O}XfTuN(( zQc(;l(HCv@OV@6PbsM3%6qMW6;bZ;qj|Ge^V~j3VLU%Rb7on3i13WL3DL|!~GOA&6 zH4x+i(rNb!QP(0=qJUb)f+@6gk2zzF&YOkyjIt^3jpTshEmmWxL%GH%^bWm@l%<=t zF_?fj=hg|8p}|ZZl=5Vp&^G@cq-Ju}Nd^Hr{al8oY`^1{^00<(9cxvm-Eb18=*ZlU ztf{h5#4kU-{*5(rkGvrf;Bs=q%^EZErTnn~p#F7%(mX>z4eh*dZES>?$ku|Ya@(=1 zHw@}cjL>6# zL}8MCf~pWQjMjMLymK+go%8YU?Pgrgg2D(2YR3wqt<{9dvU5W%FDG12R=U-=$ak(M zC>$dwG=99i6+VQ~nIsarP-t@FP55Iq2Qc;A$V>tk5l8YO-xLKYm9aPRKzL+%DM~9K z09ONin`-KI5M9a1DfKZ}V12K)b1|`~~eBCV(Fg1Uy zh~l?+uAlwz)r%M3U|3W(r3+D(!1Bw7^W*)aetLND{lT}%;j5SXM?^;lFAv2*|HkzT GQT_+(tBO7V diff --git a/priv/static/static/js/17.c63932b65417ee7346a3.js.map b/priv/static/static/js/17.c63932b65417ee7346a3.js.map deleted file mode 100644 index f4c55d0ccf67d1139900ba115839917103e1459e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmXwxK@LDL5Jm4Y>xMAZhGW=@MKwbzv|`Fe++9WNUh?067o4=S3mzI2z~R^}F*IE- zz?=2Q)oh#dQyKsSjBcSs98GjKpE)mdW);?04yuxcCekRC!EEMaf6X?8_`dH41fL@F diff --git a/priv/static/static/js/17.c98118b6bb84ee3b5b08.js b/priv/static/static/js/17.c98118b6bb84ee3b5b08.js new file mode 100644 index 0000000000000000000000000000000000000000..c41f0b6b844b3cc62f488521440b217bf1eeac03 GIT binary patch literal 2086 zcmZ`)J#XAb5bg6THk(EQm~({0w!%P#6v*(0q!_k?6oNo3d2_rKm%GI7@-9bOMaqkTitEheY>@c3xI`h)#J=$++M88+YdUw=LP?K!jlC{Pr6Y|+q>O83(g8ZdS z1)GqX3fJgvsk%=rCD)K`x;xk1%}DVm6j-Id*vTx&5|SM8n>X}Tq9hZ(gfsXuryqQ+!sOp96EmgohbIdojA?r$IFktHsx zQzf&+tC+tH{}#1lug3ScGouAS@v_8S8l@iw=Y@{>al=k?lxf&2SCaMYWe;p4e7Mti zIgyzd?rbMUDKn>WvM_bbi|+G`JVOsTjrkY3y!+F7;61chgs}zC`9;lyn~AScyE4uv z&I@0=xE<3()C$0!Bg(ov3&1^<>}+&A`ZgsDh&Y4*Ygtc zyont7&?N>E-ivG+=mJ+iJK>EgyQN+jKp|$r3-Eu8-)?Dnv~4%5t;IXZIt6MXt)Lhd zB7O2YrLtxs6(yJ-V(wdBr4A=-I0ze|Ah#a8_s#u3wiogym|*pk&;xM%JglE)XwM5} zO3beoj2eVogANJ-zWcLMG>r)Gm7sVgn8F@L%o%HR(cNj!C|~esD#w&OfFhAPU_1jm zJD4z1macm>GXX^{trIH8R+u8t`)Hk@_5Ux@Fu9h$L4kqvi?B)k|49#dc!t;<>!qUI zWS(SLqry+Esq<;fFW$fSjde?pxxp*?a&n8!rf1Ac1tX0$=n+xHWSnu9BmQHMI zZ(ko;c<}04MjLIz6t^{kp8b@9YkhziP%_w9vQ6GGVYzcZ-o4pcQyYXqAiiH=RNIIE zTfFl%SbYfaDX`M5SF_mp6hN3*cV)ylSvl~#U{h%-L8nrpGTwwYeD_)PvI7)TGY>e& z9K(x(l{LHxjE9k`#G7O+Jf^%5l@;L4HE6z{H52gtHdQ7oVtz&*>xPvMj|9etK(M@M zu+Ly&!8q5?L~w{91ot4|xw2WiiQnIDqAL#!1!lCV=>|t0s;nFthZrGrJS^$(h>ljz z#-oJ_T#dyd<{FS_k68yt4n1{$tbyV;_`BNw>8mGCzQK;yHluS9aIF{DJ8E^lAFt;pp0pN>Tj>UMflT literal 0 HcmV?d00001 diff --git a/priv/static/static/js/17.c98118b6bb84ee3b5b08.js.map b/priv/static/static/js/17.c98118b6bb84ee3b5b08.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0c20fc89b0483468e421700235ba57890770b2ef GIT binary patch literal 113 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 Av;Y7A literal 0 HcmV?d00001 diff --git a/priv/static/static/js/18.89c20aa67a4dd067ea37.js.map b/priv/static/static/js/18.89c20aa67a4dd067ea37.js.map new file mode 100644 index 0000000000000000000000000000000000000000..72cdf0e0e2f0028e68dbbd6b366c47698680f942 GIT binary patch literal 113 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 diff --git a/priv/static/static/js/18.fd12f9746a55aa24a8b7.js.map b/priv/static/static/js/18.fd12f9746a55aa24a8b7.js.map deleted file mode 100644 index c98c107b35eff4e6491208067e10d7b100e114e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 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 K9-TaF4*ow&vYcZ8 diff --git a/priv/static/static/js/19.3adebd64964c92700074.js.map b/priv/static/static/js/19.3adebd64964c92700074.js.map deleted file mode 100644 index d113a66dc74ec12f57321666e8b894ef8f201f51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 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 literal 0 HcmV?d00001 diff --git a/priv/static/static/js/19.6e13bad8131c4501c1c5.js.map b/priv/static/static/js/19.6e13bad8131c4501c1c5.js.map new file mode 100644 index 0000000000000000000000000000000000000000..762d85e2723a7d80dee5035a751d30a0cbf3c389 GIT binary patch literal 113 zcmXwxK@LDL5Jm4Y>jsmm;25@IQKO_nE2eD3-BrZyCI9_*!D)83-a#z|us?P(40YQH zaC-f5)!Sy>6bAqSqg_lS4mwy$XHKz73WKuOLx~b8R~ZtLN@kAs*KE8G@B4lL4;CXl literal 0 HcmV?d00001 diff --git a/priv/static/static/js/2.78a48aa26599b00c3b8d.js b/priv/static/static/js/2.78a48aa26599b00c3b8d.js new file mode 100644 index 0000000000000000000000000000000000000000..ecb27aa9cbf5e23d7b25e6fc75766b957528eaec GIT binary patch literal 178659 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 literal 0 HcmV?d00001 diff --git a/priv/static/static/js/2.78a48aa26599b00c3b8d.js.map b/priv/static/static/js/2.78a48aa26599b00c3b8d.js.map new file mode 100644 index 0000000000000000000000000000000000000000..167cfa1c645d8901896c00f4c0e241ba9b679a24 GIT binary patch literal 459053 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 V>Cd}QD-KV8F3Zi+gQrh#|1V1g!o2_h literal 0 HcmV?d00001 diff --git a/priv/static/static/js/2.d81ca020d6885c6c3b03.js b/priv/static/static/js/2.d81ca020d6885c6c3b03.js deleted file mode 100644 index f751a05da948567dbb3233b2601edf222af1b248..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179851 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

%8#p{=62pyA~) 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 diff --git a/priv/static/static/js/20.3615c3cea2e1c2707a4f.js b/priv/static/static/js/20.3615c3cea2e1c2707a4f.js new file mode 100644 index 0000000000000000000000000000000000000000..74f89016cc12b164334aaddcc03e67cf2ebec1fe GIT binary patch literal 26374 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 diff --git a/priv/static/static/js/20.e0c3ad29d59470506c04.js.map b/priv/static/static/js/20.e0c3ad29d59470506c04.js.map deleted file mode 100644 index 83a9fbc98da37e3555ee69c4e8e26117030045b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmXwx!3uyN5C#8b&ytI2VV}`8I*3^qrO{fK=-)G<+rXPQ7o2V<9|JTc1B%CP9YNFe z41!sIT+O!mFy#S&!RQy4iIPd)@|n26!l5nAAoQTLtWjZQQ5G|0`)jr_ruTh63{WEy diff --git a/priv/static/static/js/21.64dedfc646e13e6f7915.js b/priv/static/static/js/21.64dedfc646e13e6f7915.js new file mode 100644 index 0000000000000000000000000000000000000000..407e6665e2d1fc1fca9dbb63349b9b02ad9e366a GIT binary patch literal 13162 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 literal 0 HcmV?d00001 diff --git a/priv/static/static/js/21.849ecc09a1d58bdc64c6.js b/priv/static/static/js/21.849ecc09a1d58bdc64c6.js deleted file mode 100644 index ef58a3da16ce1820cb2aca2e44a39da5cc172bf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13310 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 JoSpP){{zL}_D}!- diff --git a/priv/static/static/js/21.849ecc09a1d58bdc64c6.js.map b/priv/static/static/js/21.849ecc09a1d58bdc64c6.js.map deleted file mode 100644 index 9447b7ce304d379038e1832870de1642faf33265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmbb%7 diff --git a/priv/static/static/js/22.6fa63bc6a054b7638e9e.js b/priv/static/static/js/22.6fa63bc6a054b7638e9e.js new file mode 100644 index 0000000000000000000000000000000000000000..4a8740c9989fed3957469fc7268f292dfc0c7fe1 GIT binary patch literal 19706 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

#< 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հ)2gqs%jD?CRkd7Bryn}#zy$Fi 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 diff --git a/priv/static/static/js/24.f931d864a2297d880a9a.js.map b/priv/static/static/js/24.f931d864a2297d880a9a.js.map deleted file mode 100644 index 2fb375e79931f824ba8b736364a7cb894098f404..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 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νaoNM} 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 V@K^bJr@#InJ-vTX-(RMy{|n&?Nl5?z literal 0 HcmV?d00001 diff --git a/priv/static/static/js/25.696b41c0a8660e1f85af.js.map b/priv/static/static/js/25.696b41c0a8660e1f85af.js.map new file mode 100644 index 0000000000000000000000000000000000000000..f6d20881298319e01986c5cf22764d685a384bc5 GIT binary patch literal 113 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 diff --git a/priv/static/static/js/26.1168f22384be75dc5492.js b/priv/static/static/js/26.1168f22384be75dc5492.js new file mode 100644 index 0000000000000000000000000000000000000000..b77a4d30fdb50bcca9f216a30f63ef156271ed5a GIT binary patch literal 14249 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 literal 0 HcmV?d00001 diff --git a/priv/static/static/js/26.e15b1645079c72c60586.js b/priv/static/static/js/26.e15b1645079c72c60586.js deleted file mode 100644 index 303170088964c0fe196ca784914ce4dc8465014e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14415 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 diff --git a/priv/static/static/js/26.e15b1645079c72c60586.js.map b/priv/static/static/js/26.e15b1645079c72c60586.js.map deleted file mode 100644 index e62345884577f26973a9483570e8d5b167c5ae17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmb@)X_BFtiK&6PWwN5+9qXmsSRbTxcobC2sh<*Niak)L}QkZRB zTgOl9ksJtwB6H){_32MVZWc?O!8$<-aB7SDAqG=r&S6F%6Hx=Pr@kC zc`^xeB~sKzU#sYRGD*vV4_K!Ec7Ge_;V#lflDsLVWXUU2_92a19ZMO##z5SC%{jKB$myr4^VYUi(DujjeO({>6cZTyiqiUKt!*7tyh(;(@TUmIT>JT~j z^>3Shc$6;-ewbA)mGUID&kD6_UiK|nhAEWtJ=uqUFulL^cxRW!M%Ps|r9AY`I z1-=i4Q5KI?*2#P1R8KRK5m-Q67ORBLqbftySXn3*Zyd&TqEH5Xz$q)`8^({pI?^Wk z#Lch_RcJ7yY({M0pF{xP9_Ndin+i}sT~XGZhPwEE*7P zsIA6BXS$(k1BXgm#&r%-4j?MDGk9GClWE}F=H!FImC*7_N3gK}Xa8FA5aGIg^1K?L z9@^>QPK!YqHcS>(jfT03Gw;%L20@YMt`{m7$zB3LH%rCSPtK11fL_)_)K^n%w-ELb z{wpBQ`pxT`d7Ff7WbCSq#EDu(nEi>Du)M_$TiFuMPSBb#hh^Cuj3y z(G2%w8A~MQrj0XVFFGgmLN=!g)jZ7th0jd)=Fx5X6|-y~+*fO!A(f}5&VJ6ydt&FR zj!D7L2WdLb&a0YgX{hi{XthS0X6*_zx|kC_5qQkZEf`v;23?Dknoy{9SV~`UDJ&Zjy2D!<^{JHTO1!SfHp^w5 zWnORace(xZH?LoRCxT19ruVArP|C*-$NM|Gqc`>U^<+HWQF}k_jo-ZeVeiML8T}bX Ht?K>-wCw{x literal 0 HcmV?d00001 diff --git a/priv/static/static/js/27.3c0cfbb2a898b35486dd.js.map b/priv/static/static/js/27.3c0cfbb2a898b35486dd.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0cc5f46b260b4661697787f7ab22bd4bf8722d75 GIT binary patch literal 113 zcmb? z%MZw(fCE1(uiEnkBH=*yl&kHkSMNRV%(ZRYd@!d`r|PR;gR|ZKE3q$ME-rTmT?&(( zi;H)|%VM!N{Jw0Ht)q5!hjte8T8i~V+i{fwg7SlR%9Aik zbe>GYyAmmCqi?rTj?t=`XxK-g)%drIFEf6-_A*y|a#M zCUM$Fxss@-WVFS`n`K1jSGJVrPQ}MN@d@CNN=h6i>q4Cn0|wSb-RfH9Qx~l>#?7gz zu3Z9D^erIwQ?4P(7rF8zf0_%#aDdFAjyisgZ95lY6{3nMl#7O1l??DaNunV!#k){b zp@0z2Qat=)#qr=^fHv_N2mpxjl814-MAP>rmWz>grTj@dS9bDW zFrKHY24bIXQy zUe%D?Rh)R2#*@upRW6d<2!L*viq=ogj(!8<)`O_8#`xTV7f1N7fIKT8uW#pV4{STb zQ)jL#Aa_;41ZSG&n?m})O;T)#Tn%UOWchm!GwhNL%&>ltoWR<17>r~}SC-~$N}W+w zo5&m!)`1MGq}RGxe*j}gTmSVzZfl*KiOI=*T|G+uIayy4iP=r!gxDm{2_ns|S)rQe zSzyMC+u(L%gNqem*wu#pfh@D)O9H#c63){|L3yK@?3B6ce(rHS8v{YBZ5o5rjM%YP|D{| i$NTSwgW>4?TiW|!@4I&RUbVxvX_~i#-@{<4x_<%rtUwC@ diff --git a/priv/static/static/js/27.7b41e5953f74af7fddd1.js.map b/priv/static/static/js/27.7b41e5953f74af7fddd1.js.map deleted file mode 100644 index 078f5ff9a794b8aa84d3b89da277b4760f1266c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 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 S`RAW|{_OHk`^#HN_x}O(+iLs( literal 0 HcmV?d00001 diff --git a/priv/static/static/js/28.926c71d6f1813e177271.js.map b/priv/static/static/js/28.926c71d6f1813e177271.js.map new file mode 100644 index 0000000000000000000000000000000000000000..1ae8f08cb36e51354b1ee126adff7dafafb4d21a GIT binary patch literal 113 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 diff --git a/priv/static/static/js/30.73e09f3b43617410dec7.js.map b/priv/static/static/js/30.73e09f3b43617410dec7.js.map deleted file mode 100644 index cb546de17ba67d519cfe38b7426da1015998d317..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmXwxK@LDL5Jm4Y>xRlS8jfKr7F9zkv|`Fe++9WNUh?067o4=S3m$3|z~R^}G1P4* zz?=2Q)oh#dQyKsSjBcSs98GjKpE*aFX(U;V*efgxtqM7i)!EF+{+dk)@qOP92k9dj diff --git a/priv/static/static/js/30.d78855ca19bf749be905.js b/priv/static/static/js/30.d78855ca19bf749be905.js new file mode 100644 index 0000000000000000000000000000000000000000..9202d19d33ee3ee5432b50531746b6047b32d1a0 GIT binary patch literal 21107 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 literal 0 HcmV?d00001 diff --git a/priv/static/static/js/30.d78855ca19bf749be905.js.map b/priv/static/static/js/30.d78855ca19bf749be905.js.map new file mode 100644 index 0000000000000000000000000000000000000000..b9f39664d06daa48d37c0bed1567ab781b02a126 GIT binary patch literal 113 zcmbt<8 literal 0 HcmV?d00001 diff --git a/priv/static/static/js/5.2b4a2787bacdd3d910db.js b/priv/static/static/js/5.2b4a2787bacdd3d910db.js deleted file mode 100644 index 18c059380454965270f16743295aacc602d06914..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7028 zcmbVR$!;6j72W467-k~_jGT1hbfUnE&L%+6K?4S|GK@m8_$XGZSXHS(w80h-&9;)Z z-Jf6xvSeD6EX%emf61$Dz9i?|_iCU-*+DO4lT~lH!@1`UTp0ObFB&b5R5y0LmA|D? z7~h@q?1vxjKe)9R=jmYK{{1@-I^#Qc{;<@~Lof5Aa6#P~t3~xNj*=|BJN5={wlvQC zEKo~reOPSiQ+rKyrOul&-I~xsV~}{)Qe)}L@`B6m)h-4rXFTa;1B)G$}`oc zvPqoua&*wz!gJkpm& zGnf)Gk5!UHiPKk^H}Jz{Cr?F@6MdogTY6u=#zlwvMN1#UGDj`kzpkhHl~H3GYE1Nr zJ}tJ}ojwjMx6_PASogZ6FN>X4Q7?RsrE8sK6{^IAJ>57CXrT%2JAwimFi74tx*xy~ zFjKLG4MDW*hf8DgAD5p)puJ+t80J);z`k2;E{pQgZYQ+5K5lnnH%&)T(lhofHeroz zs{+nBEB0WJP8_(N8bkq&(#HGOytx&)e%S6LYS~XSG0Y+C@y=LeO6l}byF;6W?vVI7 zfRDGY8)vN(x~uciQ!buDDiNfg_zIRx)IW2TW`Kmg5NpD(PDs=kpYLxgH?x7I+9o%$AkQ^7g^rQX{;06WG ziXV-vHI$0o|NiSGux1bFIgg?oy6r=QFhk=t{u z&+&XJL1aNiL&7cqVQF~@K*9Q~T80k}5C|9LdSb=};BerE!0^Q{`6vdRl(HB<6;F#z zs9stDLalY;D9xNS1M{Sa5YLP9FmrIF6GYw$wvXH-M68l5Zhi|230I5id%`(>; z5G|>bsxb94e^opUEhmW9vl3lrSid1kOQ`JX!xlblBb+Dj&XX2C5cucqju(X)&U3Oy zv056p$y~P)M+g~Q41xk(5GTctP^w&836D33L%99}{w`Y!IPwHH?9qh9-mP}0r}}Ol zAe!<1Jy0)e!a5HFatKN26P^(7 zz#?)D;`o^7Z_&>75t|#X~skV{-y^i7a8uQscVz|~s9UhLQ48bIG1@WtKjP8Vg+asq;| z$qjhif_5UsmtEh@!kIhvQ9h9F5FOrMf}HFikBSW|CkrExGem~*8(9b`DyXh4cckVaui);>RX|@=Qyjci9y{SW zy37_1;2R@MZ$=sx0XK+5b%-0LDv%a5nj$xN$Wv~dDhK7y_nQXA?iFEEN8GQ zImj|lwT;YYs>({LcYx4)BSsJ5=J-Pv>yD|}oy_gx$O&=_)r7;rT5t#HjNrADg=!MY zuy{osWK)T=>XQd32WxOt3-l!TN`EjPS=4~#u;~L?uBQT(DaR&R?40U1#kyHqRe!UK zoSsU(#Fuiu-e4Cq)jtN3a4m}`;N2EKl#(xZ3S?XT5`g=+K4dDJ5un8Fwda1AW=SsH z4fMnAXVBreK#Dp53{I%!P533+PX+(Gbi|~>mSiu%0u%mKwIN&Sje(NNcM6q0ifNz) z)A}2h-hct><|_B%e7G8(0l=zP^lRXTCSkP&BNN6C3M!n5fUhk^O=hiToB`i6-b{sp zk0wFGm~V<*BaK+40a=iP_KLoMRPv$)C|!^NP334oHv>39%^^wwfePJ8jLocf zx_OpGOj9*Z=WXMa+t6vf<)y1v&p`X=sWhFjp2d7wACryG!DH)EI2M^-B2i7? z*|)$0+%LEA85=;v$P|xvsvAv&LEJf!bd#oKRI-7@&g(7X^|QczCTl#0iyHT*HpEH! zlnE6;GpX%k9~zWGa8ve!`~vy<}On;sNs`kZV4K6 zYP7H)uDXHWbL7eyAIbm&y$TYKAGlpV@H6)LW$6oK%A}+URRTk@fV5?3T}aeqXXZ-w zYZ#TV{VB;!Gqll%3tRDIz>`fcpEz}`Bu^!$V98B2 z^K3@0_(TLoVPHt9k%q&_NqleM$ZTgOL*V{Ki_8S&m&StE*ci#7bDB}hdA3TIBnGD( z-guxL21$Z2QK&C(UL5!qd}pA7n8t=P0w1$Z z(Bzd#5bA!|9a&?x^S#pdniC$$o!wdyO(9?PdSv>i8)hEwXUsu~i>>_v0-80M2) zIOlDuf(6QbIF} zq9F6*Is{F2tOb~Hrz!dBp)*(>QIB!z(zx#ismW(xN)*lfyaQNcD!o?EKgVS|Moh6} zP)Ta*Q-pO{5+DK2PS59J&JNBAlZu55k$z_S2tPJj1EbFd84TCsTILg#jTF#^sl7Cd z<#17=U=WQ6L&(!;Zmd@^ua5cK06HruZ@^v&R_tO_C${xm49q#7Pa=*9(J3DxWn+%m zWg5oDss2bm$yaIBP1x{hv5Stjr$T0Y)K#1XnefGTq!1($WFA|}Fw0b55`2N`&#(sR z1_NEpb?PeB!pCe(&FB~Cm9<#8iA#sMOqDUKVru6%4n`;$cn1GLzfO$0s^>yBsrdzl znBj4KqJ|Ory;9bOBrp>gE z>}L_295%0A`7viaM0rd@O4*9)o}zs5_nx)2wFkHU{EOSSf7ME(Jn_`u;aV8h?(f~NzW(Fa7$^05zw7uzA^U0UNl}9t8VOi%YRFw zFuptI*^fWoe{gdl9;JgD_wV0+(3#x6{intLDD*Nv3U8>J6Sbfo#!-@`cPHM!%@!w_ zp9N~Mtq<}|eWFkCd8c2sS37;>W}`%%>X)@DUy#>QlVf&}aE>i&x~2^_f10-Ox$<)Kl3H+g-S$Ssq zM0V-Dd|kiKpR{nmX1=Z8V{IjNzLoFhKkK(RciQfZ2a%ISPCp8QXuQ~#9b0;emxubo zXa-Y4=7~y@C~^8K^9Fvn5F{3l~)U&W9e#VNrftLVNW-X16pW``wpSNIt()E8r}Ed z2bd|}#D*YR^25c6`H#!bAkc2UX$*6sk73`O|D$M{1eJ<97UyHTk$NZ^y5>N{*b_Biq zBHk$^0}SF(H}E|t3ykV8)2==@HhT-eY+F3ypaZ%v^M@+%!y*u_uEvt_atQluV8dEr z!*_7qMumwBK|9{UZ()@AecyA9gp+O(EvwM!yDL%RXSjz#=y!0_DM50S@6eC>KY$w) zIL&`DvQ|*acmDgYm%y4mpyxb_M$l~!8XV=%3DCpp$b17UB?6RP2*^AGcq9t=Hi+Dw zV||Y2GYKLKDjE`Y0SF7rO8^Sin`#+8*he6o7wd@`7l6Zo>jJ|UzviPDbW+G-{FFb< zH=uf91qij;iK8@g(hSU#B0@Yb8ikpIE1e+nma%>8CLv;#WO4mlP)N9J1jyGI8*Y}l z-hgOHom7RXpZP1|X=ph`w4N5|I>q{RQCdP}M<2BCWeedvg?FB`@P)uXYj?aT%y6EQ zJ&M)hq)q0!g*ZaU;9?LI=z=)Oe}YoQ+ERGDK^(&MAMm+o-N2E@xM7zj%y)0LJ3ZBR zM**T4@81IzQz1SP;^&s$$8MoQa4Coi*O8&l7O>Axl$X`5M1zXKg~{~E#6(Dlg=AZlm= zek)>*#Aq`QjlH3#L^92Ruo?w{r94`pL3d5g9=qT*eTc1WwuxV z#~5LH4QZJ8uMvsr5I0OuAS!4yLq713o7^~64oaRMKv`rS8!Aqy#*M?vxVfUL5$%W~ z)9yH8lq6(j11Ol>K(^GP0-`82Nus_VD5vX&sO@a9oWic;9m_i9 zHnN?mBulB@0YdMM7(IlW;}2P&JEl%|GPjE(r^qK%6AlMc!5yS9g4fa%Do7~9f)%xo zO&`vR&)BCNth-Sm(39XO{lR=?Ap>T^rVnJco(fc^9Gh6NbEey5Ih-rx}$ykB~Ci%;1L$<;j10~h&3@UvT(?AQR@;5BE z0Rz;^WxmDva5X#wfR(T4*T4-;l4=V^ri>pHQ8*I;Us;TrG_7Ww0pBy;OjUxfCMm<1 zZ}J@@lOY9|8T?fOS&)O4ioSqU@}dPOos$7gwP-=t0Gy!a0O?<#LU$5ljrC4B{9Z&@y@|O&iv;m@jH#vhf*sY)#4qb_XaI4h2~xswq7C7I=XB zFh8E~gka+yS?fQYAv9~YET_97YBW0)(7?K5~6+^p1q9!{tSF%ULc!Vua zLB>s<<+~^bz4sKHTmR*xFb)!66mquEM(-_b#ghR~HoAP`RJD>km7Ibl*VW0*j9l`G z2#mtOkWwuThmn)`-oTN0P9sC${#ski1mzdTg4fs#$)R%^P|JC?GM6L0ZjWh$1>s@ZA3GjK6wBEF!M`-1yCQd# z!E7w^DGkaM*yL^N`)~31Qu)uGx{vXkU2awvT>*0gtA*F?jzKKiXz6s=ly2%7bKEq4 z!ZTKInYj^1oZ&g9Ix_JqN@e~;Z~{`!DC|cbz6))|xLnDQhKzzF2y;mi1drQts8+0( zg}QNYeU^sIQr17!URz3CDxi9chyK4 ze2)0Wuyk?KcZ1YqE^s2sV}9QTfH8Akt)`okqVXc8SRAM%wUsCWxJdp;b{Ukr7DK}xmr}++g z*PaTQ+fhMr(qqCGzmY7EGLU0z(ZYOE{z&ixsz1XTBo>ToF}11cQ41flF*So-pjXyn zFvNt8>k~DM(AgET)+CWhI*AUm zuS3WO?jXWBfGrYY(`AJjZ7lQeM`m&k60QD_bhYxcQOwR2!O2nb>ZL!`Ook|gX-Fwh zQO8r1Fa9-Wb#?W@%|HL@)~(;P(rA=;>hEwZ4Em3I-`%~v@bw@2f9QGYt8c#UdUwA1 S-JRcmKAzc`{@&5o$8{ho^ literal 0 HcmV?d00001 diff --git a/priv/static/static/js/5.2b4a2787bacdd3d910db.js.map b/priv/static/static/js/5.84f3dce298bc720719c7.js.map similarity index 57% rename from priv/static/static/js/5.2b4a2787bacdd3d910db.js.map rename to priv/static/static/js/5.84f3dce298bc720719c7.js.map index e9e78632dc1f697a064bb090b52b439b1d4737b7..4fcc32982d618ba21cc413a975fb7513e43debd0 100644 GIT binary patch delta 46 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 BkAeUI diff --git a/priv/static/static/js/6.b9497e1d403b901a664e.js b/priv/static/static/js/6.b9497e1d403b901a664e.js new file mode 100644 index 0000000000000000000000000000000000000000..8c66e9062f27b03e0cc6010886b633807ba5a706 GIT binary patch literal 7790 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 literal 0 HcmV?d00001 diff --git a/priv/static/static/js/6.9c94bc0cc78979694cf4.js.map b/priv/static/static/js/6.b9497e1d403b901a664e.js.map similarity index 57% rename from priv/static/static/js/6.9c94bc0cc78979694cf4.js.map rename to priv/static/static/js/6.b9497e1d403b901a664e.js.map index 948368f60022c7fe8067fe593b2927de2ca30fdd..5af0576c761b8431676179f7fc10dcd89ad2b980 100644 GIT binary patch delta 46 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 literal 0 HcmV?d00001 diff --git a/priv/static/static/js/7.b4ac57fd946a3a189047.js.map b/priv/static/static/js/7.455b574116ce3f004ffb.js.map similarity index 57% rename from priv/static/static/js/7.b4ac57fd946a3a189047.js.map rename to priv/static/static/js/7.455b574116ce3f004ffb.js.map index 054d52650926d079753d8c88a8d826efaf903435..971b570e155be19542dd1b7dcc21acc92344a152 100644 GIT binary patch delta 46 zcmXRYnBcByVrrUXYHng^XqKF6oMvEPl9raFmsPB!qg0$oaX<%ZmmsPB!qg0$| B4if+X diff --git a/priv/static/static/js/7.b4ac57fd946a3a189047.js b/priv/static/static/js/7.b4ac57fd946a3a189047.js deleted file mode 100644 index 18b6ab76c015aa5c7861b2430096d3576a3a8728..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15765 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 YFaI(6MfBk(zxv>pA0M98hgnqqALe^}`Tzg` diff --git a/priv/static/static/js/8.8db9f2dcc5ed429777f7.js b/priv/static/static/js/8.8db9f2dcc5ed429777f7.js new file mode 100644 index 0000000000000000000000000000000000000000..79082fc7ccf80f54f709bbad58d3ff857e679d83 GIT binary patch literal 21682 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 S_}%Y*xBT7FUz?+Cw);QD-NZux literal 0 HcmV?d00001 diff --git a/priv/static/static/js/8.e03e32ca713d01db0433.js.map b/priv/static/static/js/8.8db9f2dcc5ed429777f7.js.map similarity index 57% rename from priv/static/static/js/8.e03e32ca713d01db0433.js.map rename to priv/static/static/js/8.8db9f2dcc5ed429777f7.js.map index d1385c203f7c9c8b8453110c098fb166ae57c548..e193375de3a5a156fd23867d01107512b5fec859 100644 GIT binary patch delta 46 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
xkZ_G;Bu@ti5#G5B(NPN-d<0q9Orv9pb8$_>E{ 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 diff --git a/priv/static/static/js/9.72d903ca8e0c5a532b87.js.map b/priv/static/static/js/9.72d903ca8e0c5a532b87.js.map deleted file mode 100644 index 4cf79de5ba20ea3826d33e95d40eb5621b1baed3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 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⁡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

-cfzd-_=pg?5$hwB~r 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

$|15WB&8o3s6WP%~^53k;dUKR5HVZ*EDmnQ=$ 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 z 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 AOaK4? diff --git a/priv/static/static/js/app.1e68e208590653dab5aa.js.map b/priv/static/static/js/app.1e68e208590653dab5aa.js.map deleted file mode 100644 index 71636d9366197e1406b1d016bfe36f7049a63394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1463721 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 )LV1l9WbN&yZ*bBtZ_5Vd{|;KtK!_ilCQ-771;c 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

0zr= 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

(kHh8E1;z!_ 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 #`QB`(N=jtT==Dr7c-O) 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


&~AQMAUycb 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 Gr~eNOjge6R diff --git a/priv/static/static/js/app.31bba9f1e242ff273dcb.js b/priv/static/static/js/app.31bba9f1e242ff273dcb.js new file mode 100644 index 0000000000000000000000000000000000000000..22413689ce9902114c7f7e968a9ab361fb839c88 GIT binary patch literal 572414 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%0DpCi*Jd&~aDM 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 z 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 literal 0 HcmV?d00001 diff --git a/priv/static/static/js/vendors~app.247dc52c7abe6a0dab87.js b/priv/static/static/js/vendors~app.9e24ed238da5a8538f50.js similarity index 89% rename from priv/static/static/js/vendors~app.247dc52c7abe6a0dab87.js rename to priv/static/static/js/vendors~app.9e24ed238da5a8538f50.js index bf6671e4b95f26e5a518ad35c259e953daf22f66..76c8a8dc177dadaa1a4bf13fb1ba6d5cb69fa5c7 100644 GIT binary patch delta 81 zcmX?eTq6q%l2#v-^`pCws!a(=(W^nkaFY|WQ6+b?M{0x=U1 oGjG47$#TC^+Q`H_CE3&{**q~R)hy8Wo{E?X%l7LCdxMRm561kkx6Qb zk+DTeqG_Uqsj)?xsloQO|JgqCY`@OK{yTHJ%SsNx>2+_pIi~OAVOMCsQpOI%96-zo e#9Tnk4a7V^%nQVPK+F%s0zfRd{Ysfo_0QxFO{(aF$WNH0x=g5 ba|1CC5c2{t9}x2cu>cSYZogC}RQ(qKNs~y0 diff --git a/priv/static/sw-pleroma.js b/priv/static/sw-pleroma.js index 098f58d491f8c41b14b13c5a316201c5ce178aae..9b7d127fdaccaebc7ab4beaf343b16694f20b447 100644 GIT binary patch delta 1076 zcmZuvJ#LjT5LEu21mUOPMN~mbTF@7JyEIzHI^@`17SZ3E#h z4la2qX*m8*lLi%(WWJ&cD$Zvjvt-p zN$m7JCrezs$MM(Je1XoQl<0h{A-L3y=Q<_8p;{83F`0E~$q`7$hueG0{sSDZJmpFZ z*$T!y-S3Geb%y;FkaBdbsHl#wxA&e4d(TR$jAlWjx?2qN45dI%h*HK{9VN?Q{L%Hv ze9&Ck2j8WgFTTWyKDZ%}k0lh#V7@?dou_@TiydCNWw)G`GvlwCwk z6xd{ZwbT8(+B*zN=1?ktH=7m;aOexYN)^$hBU~_TG=ATiFG)zz7niRpV7_t8(+U6$ zy=2^=cOBJItR4Db5S8QDQV2gqK8q?yaSOVho!Olq{0Z>}yaKbcyHQdgOP@tcL4gt}lAZek zd4rS`ks=<5BD?|XCPduw-ZOK~%sI2~UOasF;^EEZ7bF=NRqRaL5?T2qZss8)?zmN6nBmF_7CeE1=J5}$PE7v=b^Y6|t4%dGDEH0iO zF8u0hNu9MLXffbI&1-RAUmZQ(VU`vJL%eo&n25^y{%F5zn!*90v1$npszB?P_g?;n zH9Lw*^=OTnC1`bd{y$A#EG*Z62vHMb%Q5n%OqNL&MMksCPM*{t%ce}14%7+5C4EK> zQmc@O)+fi0_JYlT!nH#bFNAY}4MBnh6^W$uAh2qZ+`F$=$Gbg7%@u~AXD%58yy%ty zmjY0!XBKWPOEH^u>tDyaOX@?+ku$LZC^XcuCCE#a!F^K9B^r8Qt$F?G{@H#yJsmYS zfvKJ?3*xq)7f3R^B&cWvR6Iyv{rUdc_e?g|p2H{UUFgoqZNDy~B^)LbE;D`1u62Do z^~qbWjk9qM!#M=VHYtReLCjLLR_2IMfCKXDlij6e>k(j{TG85K((p!quB4(k5>eP- zZZxI=>rW?Vdz=?phou@Kfqllyu?|u9JU&Wm)<^TWy From 9ce95fa68f933c911c10e640b9a32ddae8a631c9 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 15 Jul 2020 17:04:30 -0500 Subject: [PATCH 090/236] Use `approval_required` in /api/v1/instance --- lib/pleroma/web/mastodon_api/views/instance_view.ex | 2 +- test/web/mastodon_api/controllers/instance_controller_test.exs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/views/instance_view.ex b/lib/pleroma/web/mastodon_api/views/instance_view.ex index 243067a73..5389d63cd 100644 --- a/lib/pleroma/web/mastodon_api/views/instance_view.ex +++ b/lib/pleroma/web/mastodon_api/views/instance_view.ex @@ -26,6 +26,7 @@ def render("show.json", _) do thumbnail: Keyword.get(instance, :instance_thumbnail), languages: ["en"], registrations: Keyword.get(instance, :registrations_open), + approval_required: Keyword.get(instance, :account_approval_required), # Extra (not present in Mastodon): max_toot_chars: Keyword.get(instance, :limit), poll_limits: Keyword.get(instance, :poll_limits), @@ -39,7 +40,6 @@ def render("show.json", _) do pleroma: %{ metadata: %{ account_activation_required: Keyword.get(instance, :account_activation_required), - account_approval_required: Keyword.get(instance, :account_approval_required), features: features(), federation: federation(), fields_limits: fields_limits() diff --git a/test/web/mastodon_api/controllers/instance_controller_test.exs b/test/web/mastodon_api/controllers/instance_controller_test.exs index 8a4183283..6a9ccd979 100644 --- a/test/web/mastodon_api/controllers/instance_controller_test.exs +++ b/test/web/mastodon_api/controllers/instance_controller_test.exs @@ -27,6 +27,7 @@ test "get instance information", %{conn: conn} do "thumbnail" => _, "languages" => _, "registrations" => _, + "approval_required" => _, "poll_limits" => _, "upload_limit" => _, "avatar_upload_limit" => _, @@ -38,7 +39,6 @@ test "get instance information", %{conn: conn} do } = result assert result["pleroma"]["metadata"]["account_activation_required"] != nil - assert result["pleroma"]["metadata"]["account_approval_required"] != nil assert result["pleroma"]["metadata"]["features"] assert result["pleroma"]["metadata"]["federation"] assert result["pleroma"]["metadata"]["fields_limits"] From 02cc42e72c5f7dde78c705c3cbc83d2c13fb7a71 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 15 Jul 2020 17:08:46 -0500 Subject: [PATCH 091/236] Squash User approval migrations --- ...s => 20200712234852_add_approval_fields_to_users.exs} | 3 ++- .../20200712234852_add_approval_pending_to_users.exs | 9 --------- 2 files changed, 2 insertions(+), 10 deletions(-) rename priv/repo/migrations/{20200714043918_add_registration_reason_to_users.exs => 20200712234852_add_approval_fields_to_users.exs} (55%) delete mode 100644 priv/repo/migrations/20200712234852_add_approval_pending_to_users.exs diff --git a/priv/repo/migrations/20200714043918_add_registration_reason_to_users.exs b/priv/repo/migrations/20200712234852_add_approval_fields_to_users.exs similarity index 55% rename from priv/repo/migrations/20200714043918_add_registration_reason_to_users.exs rename to priv/repo/migrations/20200712234852_add_approval_fields_to_users.exs index fa02fded4..559640f01 100644 --- a/priv/repo/migrations/20200714043918_add_registration_reason_to_users.exs +++ b/priv/repo/migrations/20200712234852_add_approval_fields_to_users.exs @@ -1,8 +1,9 @@ -defmodule Pleroma.Repo.Migrations.AddRegistrationReasonToUsers do +defmodule Pleroma.Repo.Migrations.AddApprovalFieldsToUsers do use Ecto.Migration def change do alter table(:users) do + add(:approval_pending, :boolean) add(:registration_reason, :string) end end diff --git a/priv/repo/migrations/20200712234852_add_approval_pending_to_users.exs b/priv/repo/migrations/20200712234852_add_approval_pending_to_users.exs deleted file mode 100644 index f7eb8179b..000000000 --- a/priv/repo/migrations/20200712234852_add_approval_pending_to_users.exs +++ /dev/null @@ -1,9 +0,0 @@ -defmodule Pleroma.Repo.Migrations.AddApprovalPendingToUsers do - use Ecto.Migration - - def change do - alter table(:users) do - add(:approval_pending, :boolean) - end - end -end From 4e0e19a7060da9f3eb06ffb0bdb816c7dedb720b Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Thu, 16 Jul 2020 08:52:14 +0300 Subject: [PATCH 092/236] update task messages --- installation/init.d/pleroma | 1 + lib/mix/tasks/pleroma/release_env.ex | 32 +++++++++++++++++++--------- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/installation/init.d/pleroma b/installation/init.d/pleroma index 384536f7e..e908cda1b 100755 --- a/installation/init.d/pleroma +++ b/installation/init.d/pleroma @@ -8,6 +8,7 @@ pidfile="/var/run/pleroma.pid" directory=/opt/pleroma healthcheck_delay=60 healthcheck_timer=30 +export $(cat /opt/pleroma/config/pleroma.env) : ${pleroma_port:-4000} diff --git a/lib/mix/tasks/pleroma/release_env.ex b/lib/mix/tasks/pleroma/release_env.ex index cbbbdeff6..63030c5cc 100644 --- a/lib/mix/tasks/pleroma/release_env.ex +++ b/lib/mix/tasks/pleroma/release_env.ex @@ -23,14 +23,15 @@ def run(["gen" | rest]) do ] ) - env_path = + file_path = get_option( options, :path, "Environment file path", - "config/pleroma.env" + "./config/pleroma.env" ) - |> Path.expand() + + env_path = Path.expand(file_path) proceed? = if File.exists?(env_path) do @@ -45,13 +46,24 @@ def run(["gen" | rest]) do end if proceed? do - do_generate(env_path) + case do_generate(env_path) do + {:error, reason} -> + shell_error( + File.Error.message(%{action: "write to file", reason: reason, path: env_path}) + ) - shell_info( - "The file generated: #{env_path}.\nTo use the enviroment file need to add the line ';EnvironmentFile=#{ - env_path - }' in service file (/installation/pleroma.service)." - ) + _ -> + shell_info("\nThe file generated: #{env_path}.\n") + + shell_info(""" + WARNING: before start pleroma app please to made the file read-only and non-modifiable. + Example: + chmod 0444 #{file_path} + chattr +i #{file_path} + """) + end + else + shell_info("\nThe file is exist. #{env_path}.\n") end end @@ -59,6 +71,6 @@ def do_generate(path) do content = "RELEASE_COOKIE=#{Base.encode32(:crypto.strong_rand_bytes(32))}" File.mkdir_p!(Path.dirname(path)) - File.write!(path, content) + File.write(path, content) end end From c72676d22f9c2e9ed83ba793fe9a85efd7e9a544 Mon Sep 17 00:00:00 2001 From: Maksim Date: Thu, 16 Jul 2020 13:30:17 +0000 Subject: [PATCH 093/236] Apply 1 suggestion(s) to 1 file(s) --- lib/mix/tasks/pleroma/release_env.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mix/tasks/pleroma/release_env.ex b/lib/mix/tasks/pleroma/release_env.ex index 63030c5cc..4d8b6ff27 100644 --- a/lib/mix/tasks/pleroma/release_env.ex +++ b/lib/mix/tasks/pleroma/release_env.ex @@ -56,7 +56,7 @@ def run(["gen" | rest]) do shell_info("\nThe file generated: #{env_path}.\n") shell_info(""" - WARNING: before start pleroma app please to made the file read-only and non-modifiable. + WARNING: before start pleroma app please make sure to make the file read-only and non-modifiable. Example: chmod 0444 #{file_path} chattr +i #{file_path} From 16da9f5cfd63237549da7156e5297d356628a70f Mon Sep 17 00:00:00 2001 From: Maksim Date: Thu, 16 Jul 2020 13:30:28 +0000 Subject: [PATCH 094/236] Apply 1 suggestion(s) to 1 file(s) --- lib/mix/tasks/pleroma/release_env.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mix/tasks/pleroma/release_env.ex b/lib/mix/tasks/pleroma/release_env.ex index 4d8b6ff27..9da74ffcf 100644 --- a/lib/mix/tasks/pleroma/release_env.ex +++ b/lib/mix/tasks/pleroma/release_env.ex @@ -38,7 +38,7 @@ def run(["gen" | rest]) do get_option( options, :force, - "Environment file is exist. Do you want overwritten the #{env_path} file? (y/n)", + "Environment file already exists. Do you want to overwrite the #{env_path} file? (y/n)", "n" ) === "y" else From 5fcb3e873822c602a5f50cbeb159427e02ea1818 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Thu, 16 Jul 2020 16:35:09 +0300 Subject: [PATCH 095/236] fix docs --- docs/installation/otp_en.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation/otp_en.md b/docs/installation/otp_en.md index e115c2297..338dfa7d0 100644 --- a/docs/installation/otp_en.md +++ b/docs/installation/otp_en.md @@ -134,7 +134,7 @@ su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate" # su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate --migrations-path priv/repo/optional_migrations/rum_indexing/" # Start the instance to verify that everything is working as expected -su pleroma -s $SHELL -lc "export $( cat /opt/pleroma/config/pleroma.env | xargs); ./bin/pleroma daemon" +su pleroma -s $SHELL -lc "export $(cat /opt/pleroma/config/pleroma.env); ./bin/pleroma daemon" # Wait for about 20 seconds and query the instance endpoint, if it shows your uri, name and email correctly, you are configured correctly sleep 20 && curl http://localhost:4000/api/v1/instance From 3be64556dbe5618de3429a481f41eff917053ce8 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 16 Jul 2020 13:11:03 -0500 Subject: [PATCH 096/236] Improve TOTP token and recovery input fields in OAuth login --- lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex | 2 +- lib/pleroma/web/templates/o_auth/mfa/totp.html.eex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex b/lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex index 750f65386..5ab59b57b 100644 --- a/lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex +++ b/lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex @@ -10,7 +10,7 @@ <%= form_for @conn, mfa_verify_path(@conn, :verify), [as: "mfa"], fn f -> %>

<%= label f, :code, "Recovery code" %> - <%= text_input f, :code %> + <%= text_input f, :code, [autocomplete: false, autocorrect: "off", autocapitalize: "off", autofocus: true, spellcheck: false] %> <%= hidden_input f, :mfa_token, value: @mfa_token %> <%= hidden_input f, :state, value: @state %> <%= hidden_input f, :redirect_uri, value: @redirect_uri %> diff --git a/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex b/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex index af6e546b0..8323ff8a1 100644 --- a/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex +++ b/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex @@ -10,7 +10,7 @@ <%= form_for @conn, mfa_verify_path(@conn, :verify), [as: "mfa"], fn f -> %>
<%= label f, :code, "Authentication code" %> - <%= text_input f, :code %> + <%= text_input f, :code, [autocomplete: false, autocorrect: "off", autocapitalize: "off", autofocus: true, maxlength: 6, pattern: "[0-9]{6}", spellcheck: false] %> <%= hidden_input f, :mfa_token, value: @mfa_token %> <%= hidden_input f, :state, value: @state %> <%= hidden_input f, :redirect_uri, value: @redirect_uri %> From 6fdaee7caed16a083d751b63c3dcfd119da57b21 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 16 Jul 2020 14:52:48 -0500 Subject: [PATCH 097/236] description.exs typofixes --- config/description.exs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/description.exs b/config/description.exs index a936b7abf..b97b0a7ec 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2238,13 +2238,13 @@ %{ key: :new_window, type: :boolean, - description: "Link URLs will open in new window/tab." + description: "Link URLs will open in a new window/tab." }, %{ key: :truncate, type: [:integer, false], description: - "Set to a number to truncate URLs longer then the number. Truncated URLs will end in `...`", + "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`", suggestions: [15, false] }, %{ From 5701840d30f8f70721598115039519e3fe747186 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 16 Jul 2020 14:54:20 -0500 Subject: [PATCH 098/236] Use updated Linkify from git --- mix.exs | 4 +++- mix.lock | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index 9886de666..727cdb71f 100644 --- a/mix.exs +++ b/mix.exs @@ -166,7 +166,9 @@ defp deps do {:floki, "~> 0.25"}, {:timex, "~> 3.5"}, {:ueberauth, "~> 0.4"}, - {:linkify, "~> 0.1.0"}, + {:linkify, + git: "https://git.pleroma.social/pleroma/elixir-libraries/linkify.git", + ref: "a08513aa7e879f056c44c5b8aea8c0fd073be5c8"}, {:http_signatures, git: "https://git.pleroma.social/pleroma/http_signatures.git", ref: "293d77bb6f4a67ac8bde1428735c3b42f22cbb30"}, diff --git a/mix.lock b/mix.lock index 150d14875..2025a965d 100644 --- a/mix.lock +++ b/mix.lock @@ -62,7 +62,7 @@ "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"}, - "linkify": {:hex, :linkify, "0.1.0", "a2d35de64271c7fbbc7d8773adb9f595592b7fbaa581271c7733f39d3058bfa4", [:mix], [], "hexpm", "d3140ef8dbdcc53ef93a6a5374c11fffe0189f00d132161e9d020a417780bee7"}, + "linkify": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/linkify.git", "a08513aa7e879f056c44c5b8aea8c0fd073be5c8", [ref: "a08513aa7e879f056c44c5b8aea8c0fd073be5c8"]}, "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"}, From 880301985b49dd0e38a748a9c834eec4d550ea1b Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 1 Jun 2020 19:51:41 -0500 Subject: [PATCH 099/236] Formatter: Test link with local mention --- test/formatter_test.exs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/formatter_test.exs b/test/formatter_test.exs index bef5a2c28..ae0d7b377 100644 --- a/test/formatter_test.exs +++ b/test/formatter_test.exs @@ -255,6 +255,16 @@ test "it can parse mentions and return the relevant users" do assert {_text, ^expected_mentions, []} = Formatter.linkify(text) end + + test "it parses URL containing local mention" do + _user = insert(:user, %{nickname: "lain"}) + + text = "https://example.com/@lain" + + expected = ~S(https://example.com/@lain) + + assert {^expected, [], []} = Formatter.linkify(text) + end end describe ".parse_tags" do From 613e096389d6945016e78499505c3ec5786d0ab0 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 16 Jul 2020 16:35:03 -0500 Subject: [PATCH 100/236] Migrate :auto_linker --> Pleroma.Formatter in ConfigDB --- .../20200716195806_autolinker_to_linkify.exs | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 priv/repo/migrations/20200716195806_autolinker_to_linkify.exs diff --git a/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs b/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs new file mode 100644 index 000000000..9ec4203eb --- /dev/null +++ b/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs @@ -0,0 +1,37 @@ +defmodule Pleroma.Repo.Migrations.AutolinkerToLinkify do + use Ecto.Migration + + alias Pleroma.Repo + alias Pleroma.ConfigDB + + @autolinker_path %{group: :auto_linker, key: :opts} + @linkify_path %{group: :pleroma, key: Pleroma.Formatter} + + @compat_opts [:class, :rel, :new_window, :truncate, :strip_prefix, :extra] + + def change do + with {:ok, {old, new}} <- maybe_get_params() do + move_config(old, new) + end + end + + defp move_config(%{} = old, %{} = new) do + {:ok, _} = ConfigDB.update_or_create(new) + {:ok, _} = ConfigDB.delete(old) + :ok + end + + defp maybe_get_params() do + with %ConfigDB{value: opts} <- ConfigDB.get_by_params(@autolinker_path), + %{} = opts <- transform_opts(opts), + %{} = linkify_params <- Map.put(@linkify_path, :value, opts) do + {:ok, {@autolinker_path, linkify_params}} + end + end + + defp transform_opts(opts) when is_list(opts) do + opts + |> Enum.into(%{}) + |> Map.take(@compat_opts) + end +end From 5e745567031e87ee0854dca8d10065449af27d9c Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 16 Jul 2020 20:25:53 -0500 Subject: [PATCH 101/236] Sanitize `reason` param in POST /api/v1/accounts --- lib/pleroma/web/twitter_api/twitter_api.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index 2294d9d0d..424a705dd 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -7,6 +7,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do alias Pleroma.Emails.Mailer alias Pleroma.Emails.UserEmail + alias Pleroma.HTML alias Pleroma.Repo alias Pleroma.User alias Pleroma.UserInviteToken @@ -19,7 +20,7 @@ def register_user(params, opts \\ []) do |> Map.put(:nickname, params[:username]) |> Map.put(:name, Map.get(params, :fullname, params[:username])) |> Map.put(:password_confirmation, params[:password]) - |> Map.put(:registration_reason, params[:reason]) + |> Map.put(:registration_reason, HTML.strip_tags(params[:reason])) if Pleroma.Config.get([:instance, :registrations_open]) do create_user(params, opts) From 2a3bb23091fcc857ff8e678f81107186e0aeb3fe Mon Sep 17 00:00:00 2001 From: rinpatch Date: Fri, 17 Jul 2020 11:03:47 +0300 Subject: [PATCH 102/236] Bug issue template: remove choice in "Installation type" It made gitlab display "1 of 2 tasks completed" when one is chosen, which is totally not what this was used for. --- .gitlab/issue_templates/Bug.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.gitlab/issue_templates/Bug.md b/.gitlab/issue_templates/Bug.md index 9ce9b6918..dd0d6eb24 100644 --- a/.gitlab/issue_templates/Bug.md +++ b/.gitlab/issue_templates/Bug.md @@ -8,9 +8,7 @@ ### Environment -* Installation type: - - [ ] OTP - - [ ] From source +* Installation type (OTP or From Source): * Pleroma version (could be found in the "Version" tab of settings in Pleroma-FE): * Elixir version (`elixir -v` for from source installations, N/A for OTP): * Operating system: From 62438530e24d9553b8c1240ad7a39ea0906832b9 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 17 Jul 2020 08:19:49 -0500 Subject: [PATCH 103/236] TOTP length is configurable, so we can't hardcode this here. --- lib/pleroma/web/templates/o_auth/mfa/totp.html.eex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex b/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex index 8323ff8a1..af85777eb 100644 --- a/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex +++ b/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex @@ -10,7 +10,7 @@ <%= form_for @conn, mfa_verify_path(@conn, :verify), [as: "mfa"], fn f -> %>
<%= label f, :code, "Authentication code" %> - <%= text_input f, :code, [autocomplete: false, autocorrect: "off", autocapitalize: "off", autofocus: true, maxlength: 6, pattern: "[0-9]{6}", spellcheck: false] %> + <%= text_input f, :code, [autocomplete: false, autocorrect: "off", autocapitalize: "off", autofocus: true, pattern: "[0-9]*", spellcheck: false] %> <%= hidden_input f, :mfa_token, value: @mfa_token %> <%= hidden_input f, :state, value: @state %> <%= hidden_input f, :redirect_uri, value: @redirect_uri %> From af376cbffbae3ae594e594813873719dfd69664e Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Fri, 17 Jul 2020 18:06:05 +0300 Subject: [PATCH 104/236] using atom keys in search params --- lib/pleroma/gopher/server.ex | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/pleroma/gopher/server.ex b/lib/pleroma/gopher/server.ex index 3d56d50a9..e9f54c4c0 100644 --- a/lib/pleroma/gopher/server.ex +++ b/lib/pleroma/gopher/server.ex @@ -96,16 +96,18 @@ def response("") do def response("/main/public") do posts = - ActivityPub.fetch_public_activities(%{"type" => ["Create"], "local_only" => true}) - |> render_activities + %{type: ["Create"], local_only: true} + |> ActivityPub.fetch_public_activities() + |> render_activities() info("Welcome to the Public Timeline!") <> posts <> ".\r\n" end def response("/main/all") do posts = - ActivityPub.fetch_public_activities(%{"type" => ["Create"]}) - |> render_activities + %{type: ["Create"]} + |> ActivityPub.fetch_public_activities() + |> render_activities() info("Welcome to the Federated Timeline!") <> posts <> ".\r\n" end @@ -130,13 +132,14 @@ def response("/notices/" <> id) do def response("/users/" <> nickname) do with %User{} = user <- User.get_cached_by_nickname(nickname) do params = %{ - "type" => ["Create"], - "actor_id" => user.ap_id + type: ["Create"], + actor_id: user.ap_id } activities = - ActivityPub.fetch_public_activities(params) - |> render_activities + params + |> ActivityPub.fetch_public_activities() + |> render_activities() info("Posts by #{user.nickname}") <> activities <> ".\r\n" else From 20a496d2cbea18c563694c7026c0e951e99cfc3b Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 17 Jul 2020 10:45:41 -0500 Subject: [PATCH 105/236] Expose the post formats in /api/v1/instance --- CHANGELOG.md | 1 + docs/API/differences_in_mastoapi_responses.md | 1 + lib/pleroma/web/mastodon_api/views/instance_view.ex | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a02f28241..75488f026 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). has been simplified down to `block_from_strangers`. - **Breaking:** Notification Settings API option for hiding push notification contents has been renamed to `hide_notification_contents` +- Mastodon API: Added `pleroma.metadata.post_formats` to /api/v1/instance

diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index c4a9c6dad..38865dc68 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -236,6 +236,7 @@ Has theses additional parameters (which are the same as in Pleroma-API): - `pleroma.metadata.features`: A list of supported features - `pleroma.metadata.federation`: The federation restrictions of this instance - `pleroma.metadata.fields_limits`: A list of values detailing the length and count limitation for various instance-configurable fields. +- `pleroma.metadata.post_formats`: A list of the allowed post format types - `vapid_public_key`: The public key needed for push messages ## Markers diff --git a/lib/pleroma/web/mastodon_api/views/instance_view.ex b/lib/pleroma/web/mastodon_api/views/instance_view.ex index 5deb0d7ed..cd3bc7f00 100644 --- a/lib/pleroma/web/mastodon_api/views/instance_view.ex +++ b/lib/pleroma/web/mastodon_api/views/instance_view.ex @@ -41,7 +41,8 @@ def render("show.json", _) do account_activation_required: Keyword.get(instance, :account_activation_required), features: features(), federation: federation(), - fields_limits: fields_limits() + fields_limits: fields_limits(), + post_formats: Config.get([:instance, :allowed_post_formats]) }, vapid_public_key: Keyword.get(Pleroma.Web.Push.vapid_config(), :public_key) } From 57568437361dd14151e3aa0590c7d1da05141cf4 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 17 Jul 2020 12:19:41 -0500 Subject: [PATCH 106/236] Fully delete users with status :approval_pending --- lib/pleroma/user.ex | 13 +++++++------ test/user_test.exs | 11 +++++++++++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 8e2c9fbe2..23288d434 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1525,12 +1525,13 @@ defp delete_or_deactivate(%User{local: false} = user), do: delete_and_invalidate defp delete_or_deactivate(%User{local: true} = user) do status = account_status(user) - if status == :confirmation_pending do - delete_and_invalidate_cache(user) - else - user - |> change(%{deactivated: true, email: nil}) - |> update_and_set_cache() + case status do + :confirmation_pending -> delete_and_invalidate_cache(user) + :approval_pending -> delete_and_invalidate_cache(user) + _ -> + user + |> change(%{deactivated: true, email: nil}) + |> update_and_set_cache() end end diff --git a/test/user_test.exs b/test/user_test.exs index cd39e1623..57cc054af 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -1314,6 +1314,17 @@ test "deactivates user when activation is not required", %{user: user} do end end + test "delete/1 when approval is pending deletes the user" do + user = insert(:user, approval_pending: true) + {:ok, user: user} + + {:ok, job} = User.delete(user) + {:ok, _} = ObanHelpers.perform(job) + + refute User.get_cached_by_id(user.id) + refute User.get_by_id(user.id) + end + 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 From 15f8921b111bc38d0d9eb9ccd1fd09e41cdbc85e Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 17 Jul 2020 12:26:52 -0500 Subject: [PATCH 107/236] Test that unapproved users can never log in regardless of admin settings --- test/web/oauth/oauth_controller_test.exs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/web/oauth/oauth_controller_test.exs b/test/web/oauth/oauth_controller_test.exs index ec5b78750..1200126b8 100644 --- a/test/web/oauth/oauth_controller_test.exs +++ b/test/web/oauth/oauth_controller_test.exs @@ -998,8 +998,7 @@ test "rejects token exchange for user with confirmation_pending set to true" do } end - test "rejects token exchange for valid credentials belonging to an unapproved user and approval is required" do - Pleroma.Config.put([:instance, :account_approval_required], true) + test "rejects token exchange for valid credentials belonging to an unapproved user" do password = "testpassword" user = insert(:user, password_hash: Pbkdf2.hash_pwd_salt(password), approval_pending: true) From 48f8b26c92880c0898daac3d691c61be0b891d0b Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 16 Jul 2020 21:39:10 -0500 Subject: [PATCH 108/236] OpenAPI: Add :id to follower/following endpoints, fixes #1958 --- .../api_spec/operations/account_operation.ex | 2 ++ test/pagination_test.exs | 14 ++++++++++++++ .../controllers/account_controller_test.exs | 19 +++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 952d9347b..50c8e0242 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -159,6 +159,7 @@ def followers_operation do "Accounts which follow the given account, if network is not hidden by the account owner.", parameters: [ %Reference{"$ref": "#/components/parameters/accountIdOrNickname"}, + Operation.parameter(:id, :query, :string, "ID of the resource owner"), with_relationships_param() | pagination_params() ], responses: %{ @@ -177,6 +178,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"}, + Operation.parameter(:id, :query, :string, "ID of the resource owner"), with_relationships_param() | pagination_params() ], responses: %{200 => Operation.response("Accounts", "application/json", array_of_accounts())} diff --git a/test/pagination_test.exs b/test/pagination_test.exs index 9165427ae..e526f23e8 100644 --- a/test/pagination_test.exs +++ b/test/pagination_test.exs @@ -54,6 +54,20 @@ test "paginates by min_id & limit", %{notes: notes} do assert length(paginated) == 1 end + + test "handles id gracefully", %{notes: notes} do + id = Enum.at(notes, 1).id |> Integer.to_string() + + paginated = + Pagination.fetch_paginated(Object, %{ + id: "9s99Hq44Cnv8PKBwWG", + max_id: id, + limit: 20, + offset: 0 + }) + + assert length(paginated) == 1 + end end describe "offset" do diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 9c7b5e9b2..c304487ea 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -583,6 +583,15 @@ test "getting followers, pagination", %{user: user, conn: conn} do |> get("/api/v1/accounts/#{user.id}/followers?max_id=#{follower3_id}") |> json_response_and_validate_schema(200) + assert [%{"id" => ^follower2_id}, %{"id" => ^follower1_id}] = + conn + |> get( + "/api/v1/accounts/#{user.id}/followers?id=#{user.id}&limit=20&max_id=#{ + follower3_id + }" + ) + |> json_response_and_validate_schema(200) + res_conn = get(conn, "/api/v1/accounts/#{user.id}/followers?limit=1&max_id=#{follower3_id}") assert [%{"id" => ^follower2_id}] = json_response_and_validate_schema(res_conn, 200) @@ -654,6 +663,16 @@ test "getting following, pagination", %{user: user, conn: conn} do assert id2 == following2.id assert id1 == following1.id + res_conn = + get( + conn, + "/api/v1/accounts/#{user.id}/following?id=#{user.id}&limit=20&max_id=#{following3.id}" + ) + + assert [%{"id" => id2}, %{"id" => id1}] = json_response_and_validate_schema(res_conn, 200) + assert id2 == following2.id + assert id1 == following1.id + res_conn = get(conn, "/api/v1/accounts/#{user.id}/following?limit=1&max_id=#{following3.id}") From 7ce722ce3e3dbc633324ff0ccaeddc467397ac5e Mon Sep 17 00:00:00 2001 From: KokaKiwi Date: Sat, 18 Jul 2020 12:55:04 +0200 Subject: [PATCH 109/236] Fix /api/pleroma/emoji/packs index endpoint. --- .../web/pleroma_api/controllers/emoji_pack_controller.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex index 33ecd1f70..866901344 100644 --- a/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex @@ -22,7 +22,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackController do ) @skip_plugs [Pleroma.Plugs.OAuthScopesPlug, Pleroma.Plugs.ExpectPublicOrAuthenticatedCheckPlug] - plug(:skip_plug, @skip_plugs when action in [:archive, :show, :list]) + plug(:skip_plug, @skip_plugs when action in [:index, :show, :archive]) defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaEmojiPackOperation From 4bac25e6f5d332b06e481d25b80efb62026c6a1e Mon Sep 17 00:00:00 2001 From: href Date: Sat, 18 Jul 2020 13:17:38 +0200 Subject: [PATCH 110/236] Don't enable Pleroma.HTTP.Middleware.FollowRedirects unless Gun is used --- lib/pleroma/http/http.ex | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/http/http.ex b/lib/pleroma/http/http.ex index 6128bc4cf..b37b3fa89 100644 --- a/lib/pleroma/http/http.ex +++ b/lib/pleroma/http/http.ex @@ -69,7 +69,8 @@ def request(method, url, body, headers, options) when is_binary(url) do request = build_request(method, headers, options, url, body, params) adapter = Application.get_env(:tesla, :adapter) - client = Tesla.client([Pleroma.HTTP.Middleware.FollowRedirects], adapter) + + client = Tesla.client(adapter_middlewares(adapter), adapter) maybe_limit( fn -> @@ -107,4 +108,10 @@ defp maybe_limit(fun, Tesla.Adapter.Gun, opts) do defp maybe_limit(fun, _, _) do fun.() end + + defp adapter_middlewares(Tesla.Adapter.Gun) do + [Pleroma.HTTP.Middleware.FollowRedirects] + end + + defp adapter_middlewares(_), do: [] end From ae74c52e222c6e230ac04f484306c0a16aa270a5 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 18 Jul 2020 15:10:48 -0500 Subject: [PATCH 111/236] Test angry face in formatter D:< #1968 --- test/formatter_test.exs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/formatter_test.exs b/test/formatter_test.exs index ae0d7b377..8713ab9c2 100644 --- a/test/formatter_test.exs +++ b/test/formatter_test.exs @@ -265,6 +265,26 @@ test "it parses URL containing local mention" do assert {^expected, [], []} = Formatter.linkify(text) end + + test "it correctly parses angry face D:< with mention" do + lain = + insert(:user, %{ + nickname: "lain@lain.com", + ap_id: "https://lain.com/users/lain", + id: "9qrWmR0cKniB0YU0TA" + }) + + text = "@lain@lain.com D:<" + + expected_text = + ~S(@lain D:<) + + expected_mentions = [ + {"@lain@lain.com", lain} + ] + + assert {^expected_text, ^expected_mentions, []} = Formatter.linkify(text) + end end describe ".parse_tags" do From 531c3ab9f34a41812f82e9e7dd3a604fbc11405d Mon Sep 17 00:00:00 2001 From: Dym Sohin Date: Mon, 20 Jul 2020 11:41:43 +0000 Subject: [PATCH 112/236] fix markdown rendering withing
; typo parent**s**_visible --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75488f026..080270073 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -67,7 +67,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
API Changes -- Mastodon API: Add pleroma.parents_visible field to statuses. + +- Mastodon API: Add pleroma.parent_visible field to statuses. - 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. @@ -121,6 +122,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Follow request notifications
API Changes + - Admin API: `GET /api/pleroma/admin/need_reboot`.
@@ -188,6 +190,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - **Breaking**: Using third party engines for user recommendation
API Changes + - **Breaking**: AdminAPI: migrate_from_db endpoint
From 5d263dfdb314f1ed6eca9e5c183149efcc58c367 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 20 Jul 2020 09:29:03 -0500 Subject: [PATCH 113/236] Update linkify to latest release --- mix.exs | 4 +--- mix.lock | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/mix.exs b/mix.exs index 727cdb71f..f44d7a887 100644 --- a/mix.exs +++ b/mix.exs @@ -166,9 +166,7 @@ defp deps do {:floki, "~> 0.25"}, {:timex, "~> 3.5"}, {:ueberauth, "~> 0.4"}, - {:linkify, - git: "https://git.pleroma.social/pleroma/elixir-libraries/linkify.git", - ref: "a08513aa7e879f056c44c5b8aea8c0fd073be5c8"}, + {:linkify, "~> 0.2.0"}, {:http_signatures, git: "https://git.pleroma.social/pleroma/http_signatures.git", ref: "293d77bb6f4a67ac8bde1428735c3b42f22cbb30"}, diff --git a/mix.lock b/mix.lock index 2025a965d..6430ddd19 100644 --- a/mix.lock +++ b/mix.lock @@ -62,7 +62,7 @@ "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"}, - "linkify": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/linkify.git", "a08513aa7e879f056c44c5b8aea8c0fd073be5c8", [ref: "a08513aa7e879f056c44c5b8aea8c0fd073be5c8"]}, + "linkify": {:hex, :linkify, "0.2.0", "2518bbbea21d2caa9d372424e1ad845b640c6630e2d016f1bd1f518f9ebcca28", [:mix], [], "hexpm", "b8ca8a68b79e30b7938d6c996085f3db14939f29538a59ca5101988bb7f917f6"}, "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"}, From 204dddcfaaa5ff1113ef2f772ce5d6fcbbaaec6e Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 20 Jul 2020 13:45:05 -0500 Subject: [PATCH 114/236] Pleroma.Formatter can have partial updates --- lib/pleroma/config/config_db.ex | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/pleroma/config/config_db.ex b/lib/pleroma/config/config_db.ex index f8141ced8..e5b7811aa 100644 --- a/lib/pleroma/config/config_db.ex +++ b/lib/pleroma/config/config_db.ex @@ -156,7 +156,6 @@ defp only_full_update?(%ConfigDB{group: group, key: key}) do {:quack, :meta}, {:mime, :types}, {:cors_plug, [:max_age, :methods, :expose, :headers]}, - {:linkify, :opts}, {:swarm, :node_blacklist}, {:logger, :backends} ] From 3edaecae96975c229c3b8bd7be2dc1208b9bcb82 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Tue, 21 Jul 2020 09:25:53 +0300 Subject: [PATCH 115/236] added welcome email --- CHANGELOG.md | 1 + config/config.exs | 16 ++++++- docs/configuration/cheatsheet.md | 12 +++++ lib/pleroma/config/helpers.ex | 17 ++++++++ lib/pleroma/config/utils.ex | 17 ++++++++ lib/pleroma/emails/user_email.ex | 17 +++++--- lib/pleroma/user.ex | 21 ++++++++- lib/pleroma/user/welcome_email.ex | 68 +++++++++++++++++++++++++++++ lib/pleroma/user/welcome_message.ex | 43 +++++++++++------- test/emails/user_email_test.exs | 1 + test/tasks/config_test.exs | 4 +- test/user_test.exs | 27 ++++++++++-- 12 files changed, 213 insertions(+), 31 deletions(-) create mode 100644 lib/pleroma/config/helpers.ex create mode 100644 lib/pleroma/config/utils.ex create mode 100644 lib/pleroma/user/welcome_email.ex diff --git a/CHANGELOG.md b/CHANGELOG.md index 080270073..b5720aa33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -64,6 +64,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Support pagination in emoji packs API (for packs and for files in pack) - Support for viewing instances favicons next to posts and accounts - Added Pleroma.Upload.Filter.Exiftool as an alternate EXIF stripping mechanism targeting GPS/location metadata. +- Configuration: Add `:welcome` setting for welcoming message to a newly registered users.
API Changes diff --git a/config/config.exs b/config/config.exs index 2d3f35e70..16b7f6dc7 100644 --- a/config/config.exs +++ b/config/config.exs @@ -225,8 +225,6 @@ autofollowed_nicknames: [], max_pinned_statuses: 1, attachment_links: false, - welcome_user_nickname: nil, - welcome_message: nil, max_report_comment_size: 1000, safe_dm_mentions: false, healthcheck: false, @@ -254,6 +252,20 @@ ] ] +config :pleroma, :welcome, + direct_message: [ + enabled: false, + sender_nickname: nil, + message: nil + ], + email: [ + enabled: false, + sender_nickname: nil, + subject: "Welcome to <%= instance_name %>", + html: "Welcome to <%= instance_name %>", + text: "Welcome to <%= instance_name %>" + ] + config :pleroma, :feed, post_title: %{ max_length: 100, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 6c1babba3..7e8f86aba 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -63,6 +63,18 @@ To add configuration to your config file, you can copy it from the base config. * `external_user_synchronization`: Enabling following/followers counters synchronization for external users. * `cleanup_attachments`: Remove attachments along with statuses. Does not affect duplicate files and attachments without status. Enabling this will increase load to database when deleting statuses on larger instances. +## Welcome +* `direct_message`: - welcome message sent as a direct message. + * `enabled`: Enables the send a direct message to a newly registered user. Defaults to `false`. + * `sender_nickname`: The nickname of the local user that sends the welcome message. + * `message`: A message that will be send to a newly registered users as a direct message. +* `email`: - welcome message sent as a email. + * `enabled`: Enables the send a welcome email to a newly registered user. Defaults to `false`. + * `sender_nickname`: The nickname of the local user that sends the welcome email. + * `subject`: A subject of welcome email. + * `html`: A html that will be send to a newly registered users as a email. + * `text`: A text that will be send to a newly registered users as a email. + ## Message rewrite facility ### :mrf diff --git a/lib/pleroma/config/helpers.ex b/lib/pleroma/config/helpers.ex new file mode 100644 index 000000000..3dce40ea0 --- /dev/null +++ b/lib/pleroma/config/helpers.ex @@ -0,0 +1,17 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Config.Helpers do + alias Pleroma.Config + + def instance_name, do: Config.get([:instance, :name]) + + defp instance_notify_email do + Config.get([:instance, :notify_email]) || Config.get([:instance, :email]) + end + + def sender do + {instance_name(), instance_notify_email()} + end +end diff --git a/lib/pleroma/config/utils.ex b/lib/pleroma/config/utils.ex new file mode 100644 index 000000000..f1afbb42f --- /dev/null +++ b/lib/pleroma/config/utils.ex @@ -0,0 +1,17 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Config.Utils do + alias Pleroma.Config + + def instance_name, do: Config.get([:instance, :name]) + + defp instance_notify_email do + Config.get([:instance, :notify_email]) || Config.get([:instance, :email]) + end + + def sender do + {instance_name(), instance_notify_email()} + end +end diff --git a/lib/pleroma/emails/user_email.ex b/lib/pleroma/emails/user_email.ex index dfadc10b3..313533859 100644 --- a/lib/pleroma/emails/user_email.ex +++ b/lib/pleroma/emails/user_email.ex @@ -12,17 +12,22 @@ defmodule Pleroma.Emails.UserEmail do alias Pleroma.Web.Endpoint alias Pleroma.Web.Router - defp instance_name, do: Config.get([:instance, :name]) - - defp sender do - email = Config.get([:instance, :notify_email]) || Config.get([:instance, :email]) - {instance_name(), email} - end + import Pleroma.Config.Helpers, only: [instance_name: 0, sender: 0] defp recipient(email, nil), do: email defp recipient(email, name), do: {name, email} defp recipient(%User{} = user), do: recipient(user.email, user.name) + @spec welcome(User.t(), map()) :: Swoosh.Email.t() + def welcome(user, opts \\ %{}) do + new() + |> to(recipient(user)) + |> from(Map.get(opts, :sender, sender())) + |> subject(Map.get(opts, :subject, "Welcome to #{instance_name()}!")) + |> html_body(Map.get(opts, :html, "Welcome to #{instance_name()}!")) + |> text_body(Map.get(opts, :text, "Welcome to #{instance_name()}!")) + end + def password_reset_email(user, token) when is_binary(token) do password_reset_url = Router.Helpers.reset_password_url(Endpoint, :reset, token) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 9240e912d..29526b8fd 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -713,12 +713,31 @@ def register(%Ecto.Changeset{} = changeset) do def post_register_action(%User{} = user) do with {:ok, user} <- autofollow_users(user), {:ok, user} <- set_cache(user), - {:ok, _} <- User.WelcomeMessage.post_welcome_message_to_user(user), + {:ok, _} <- send_welcome_email(user), + {:ok, _} <- send_welcome_message(user), {:ok, _} <- try_send_confirmation_email(user) do {:ok, user} end end + def send_welcome_message(user) do + if User.WelcomeMessage.enabled?() do + User.WelcomeMessage.post_message(user) + {:ok, :enqueued} + else + {:ok, :noop} + end + end + + def send_welcome_email(user) do + if User.WelcomeEmail.enabled?() do + User.WelcomeEmail.send_email(user) + {:ok, :enqueued} + else + {:ok, :noop} + end + end + def try_send_confirmation_email(%User{} = user) do if user.confirmation_pending && Config.get([:instance, :account_activation_required]) do diff --git a/lib/pleroma/user/welcome_email.ex b/lib/pleroma/user/welcome_email.ex new file mode 100644 index 000000000..53062b961 --- /dev/null +++ b/lib/pleroma/user/welcome_email.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.User.WelcomeEmail do + @moduledoc """ + The module represents the functions to send welcome email. + """ + + alias Pleroma.Config + alias Pleroma.Emails + alias Pleroma.User + + import Pleroma.Config.Utils, only: [instance_name: 0] + + @spec enabled?() :: boolean() + def enabled?, do: Config.get([:welcome, :email, :enabled], false) + + @spec send_email(User.t()) :: {:ok, Oban.Job.t()} + def send_email(%User{} = user) do + user + |> Emails.UserEmail.welcome(email_options(user)) + |> Emails.Mailer.deliver_async() + end + + defp email_options(user) do + bindings = [user: user, instance_name: instance_name()] + + %{} + |> add_sender(Config.get([:welcome, :email, :sender_nickname], nil)) + |> add_option(:subject, bindings) + |> add_option(:html, bindings) + |> add_option(:text, bindings) + end + + defp add_option(opts, option, bindings) do + [:welcome, :email, option] + |> Config.get(nil) + |> eval_string(bindings) + |> merge_options(opts, option) + end + + def add_sender(opts, nickname) do + nickname + |> fetch_sender() + |> merge_options(opts, :sender) + end + + defp merge_options(nil, options, _option), do: options + + defp merge_options(value, options, option) do + Map.merge(options, %{option => value}) + end + + defp fetch_sender(nickname) when is_binary(nickname) do + with %User{local: true} = user <- User.get_cached_by_nickname(nickname) do + {instance_name(), user.email} + else + _ -> nil + end + end + + defp fetch_sender(_), do: nil + + defp eval_string(nil, _), do: nil + defp eval_string("", _), do: nil + defp eval_string(str, bindings), do: EEx.eval_string(str, bindings) +end diff --git a/lib/pleroma/user/welcome_message.ex b/lib/pleroma/user/welcome_message.ex index f8f520285..86e1c0678 100644 --- a/lib/pleroma/user/welcome_message.ex +++ b/lib/pleroma/user/welcome_message.ex @@ -3,32 +3,45 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.User.WelcomeMessage do + alias Pleroma.Config alias Pleroma.User alias Pleroma.Web.CommonAPI - def post_welcome_message_to_user(user) do - with %User{} = sender_user <- welcome_user(), - message when is_binary(message) <- welcome_message() do - CommonAPI.post(sender_user, %{ - visibility: "direct", - status: "@#{user.nickname}\n#{message}" - }) - else - _ -> {:ok, nil} - end + @spec enabled?() :: boolean() + def enabled?, do: Config.get([:welcome, :direct_message, :enabled], false) + + @spec post_message(User.t()) :: {:ok, Pleroma.Activity.t() | nil} + def post_message(user) do + [:welcome, :direct_message, :sender_nickname] + |> Config.get(nil) + |> fetch_sender() + |> do_post(user, welcome_message()) end - defp welcome_user do - with nickname when is_binary(nickname) <- - Pleroma.Config.get([:instance, :welcome_user_nickname]), - %User{local: true} = user <- User.get_cached_by_nickname(nickname) do + defp do_post(%User{} = sender, %User{nickname: nickname}, message) + when is_binary(message) do + CommonAPI.post( + sender, + %{ + visibility: "direct", + status: "@#{nickname}\n#{message}" + } + ) + end + + defp do_post(_sender, _recipient, _message), do: {:ok, nil} + + defp fetch_sender(nickname) when is_binary(nickname) do + with %User{local: true} = user <- User.get_cached_by_nickname(nickname) do user else _ -> nil end end + defp fetch_sender(_), do: nil + defp welcome_message do - Pleroma.Config.get([:instance, :welcome_message]) + Config.get([:welcome, :direct_message, :message], nil) end end diff --git a/test/emails/user_email_test.exs b/test/emails/user_email_test.exs index a75623bb4..502702e49 100644 --- a/test/emails/user_email_test.exs +++ b/test/emails/user_email_test.exs @@ -10,6 +10,7 @@ defmodule Pleroma.Emails.UserEmailTest do alias Pleroma.Web.Router import Pleroma.Factory + import Swoosh.TestAssertions test "build password reset email" do config = Pleroma.Config.get(:instance) diff --git a/test/tasks/config_test.exs b/test/tasks/config_test.exs index 71f36c0e3..fb12e7fb3 100644 --- a/test/tasks/config_test.exs +++ b/test/tasks/config_test.exs @@ -129,8 +129,6 @@ test "load a settings with large values and pass to file", %{temp_file: temp_fil autofollowed_nicknames: [], max_pinned_statuses: 1, attachment_links: false, - welcome_user_nickname: nil, - welcome_message: nil, max_report_comment_size: 1000, safe_dm_mentions: false, healthcheck: false, @@ -172,7 +170,7 @@ test "load a settings with large values and pass to file", %{temp_file: temp_fil end assert file == - "#{header}\n\nconfig :pleroma, :instance,\n name: \"Pleroma\",\n email: \"example@example.com\",\n notify_email: \"noreply@example.com\",\n description: \"A Pleroma instance, an alternative fediverse server\",\n limit: 5000,\n chat_limit: 5000,\n remote_limit: 100_000,\n upload_limit: 16_000_000,\n avatar_upload_limit: 2_000_000,\n background_upload_limit: 4_000_000,\n banner_upload_limit: 4_000_000,\n poll_limits: %{\n max_expiration: 31_536_000,\n max_option_chars: 200,\n max_options: 20,\n min_expiration: 0\n },\n registrations_open: true,\n federating: true,\n federation_incoming_replies_max_depth: 100,\n federation_reachability_timeout_days: 7,\n federation_publisher_modules: [Pleroma.Web.ActivityPub.Publisher],\n allow_relay: true,\n public: true,\n quarantined_instances: [],\n managed_config: true,\n static_dir: \"instance/static/\",\n allowed_post_formats: [\"text/plain\", \"text/html\", \"text/markdown\", \"text/bbcode\"],\n autofollowed_nicknames: [],\n max_pinned_statuses: 1,\n attachment_links: false,\n welcome_user_nickname: nil,\n welcome_message: nil,\n max_report_comment_size: 1000,\n safe_dm_mentions: false,\n healthcheck: false,\n remote_post_retention_days: 90,\n skip_thread_containment: true,\n limit_to_local_content: :unauthenticated,\n user_bio_length: 5000,\n user_name_length: 100,\n max_account_fields: 10,\n max_remote_account_fields: 20,\n account_field_name_length: 512,\n account_field_value_length: 2048,\n external_user_synchronization: true,\n extended_nickname_format: true,\n multi_factor_authentication: [\n totp: [digits: 6, period: 30],\n backup_codes: [number: 2, length: 6]\n ]\n" + "#{header}\n\nconfig :pleroma, :instance,\n name: \"Pleroma\",\n email: \"example@example.com\",\n notify_email: \"noreply@example.com\",\n description: \"A Pleroma instance, an alternative fediverse server\",\n limit: 5000,\n chat_limit: 5000,\n remote_limit: 100_000,\n upload_limit: 16_000_000,\n avatar_upload_limit: 2_000_000,\n background_upload_limit: 4_000_000,\n banner_upload_limit: 4_000_000,\n poll_limits: %{\n max_expiration: 31_536_000,\n max_option_chars: 200,\n max_options: 20,\n min_expiration: 0\n },\n registrations_open: true,\n federating: true,\n federation_incoming_replies_max_depth: 100,\n federation_reachability_timeout_days: 7,\n federation_publisher_modules: [Pleroma.Web.ActivityPub.Publisher],\n allow_relay: true,\n public: true,\n quarantined_instances: [],\n managed_config: true,\n static_dir: \"instance/static/\",\n allowed_post_formats: [\"text/plain\", \"text/html\", \"text/markdown\", \"text/bbcode\"],\n autofollowed_nicknames: [],\n max_pinned_statuses: 1,\n attachment_links: false,\n max_report_comment_size: 1000,\n safe_dm_mentions: false,\n healthcheck: false,\n remote_post_retention_days: 90,\n skip_thread_containment: true,\n limit_to_local_content: :unauthenticated,\n user_bio_length: 5000,\n user_name_length: 100,\n max_account_fields: 10,\n max_remote_account_fields: 20,\n account_field_name_length: 512,\n account_field_value_length: 2048,\n external_user_synchronization: true,\n extended_nickname_format: true,\n multi_factor_authentication: [\n totp: [digits: 6, period: 30],\n backup_codes: [number: 2, length: 6]\n ]\n" end end end diff --git a/test/user_test.exs b/test/user_test.exs index 9788e09d9..e887a3fb2 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -17,6 +17,7 @@ defmodule Pleroma.UserTest do import Pleroma.Factory import ExUnit.CaptureLog + import Swoosh.TestAssertions setup_all do Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) @@ -386,8 +387,8 @@ test "fetches correct profile for nickname beginning with number" do email: "email@example.com" } setup do: clear_config([:instance, :autofollowed_nicknames]) - setup do: clear_config([:instance, :welcome_message]) - setup do: clear_config([:instance, :welcome_user_nickname]) + + setup do: clear_config([:welcome]) test "it autofollows accounts that are set for it" do user = insert(:user) @@ -408,17 +409,35 @@ test "it autofollows accounts that are set for it" do test "it sends a welcome message if it is set" do welcome_user = insert(:user) + Pleroma.Config.put([:welcome, :direct_message, :enabled], true) + Pleroma.Config.put([:welcome, :direct_message, :sender_nickname], welcome_user.nickname) + Pleroma.Config.put([:welcome, :direct_message, :message], "Hello, this is a cool site") - Pleroma.Config.put([:instance, :welcome_user_nickname], welcome_user.nickname) - Pleroma.Config.put([:instance, :welcome_message], "Hello, this is a cool site") + Pleroma.Config.put([:welcome, :email, :enabled], true) + Pleroma.Config.put([:welcome, :email, :sender_nickname], welcome_user.nickname) + + Pleroma.Config.put( + [:welcome, :email, :subject], + "Hello, welcome to cool site: <%= instance_name %>" + ) + + instance_name = Pleroma.Config.get([:instance, :name]) cng = User.register_changeset(%User{}, @full_user_data) {:ok, registered_user} = User.register(cng) + ObanHelpers.perform_all() activity = Repo.one(Pleroma.Activity) assert registered_user.ap_id in activity.recipients assert Object.normalize(activity).data["content"] =~ "cool site" assert activity.actor == welcome_user.ap_id + + assert_email_sent( + from: {instance_name, welcome_user.email}, + to: {registered_user.name, registered_user.email}, + subject: "Hello, welcome to cool site: #{instance_name}", + html_body: "Welcome to #{instance_name}" + ) end setup do: clear_config([:instance, :account_activation_required]) From 6afc6717d642060b086d01c2bfff5ead0aad1273 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 21 Jul 2020 10:31:58 +0300 Subject: [PATCH 116/236] copy tmp file if test depends on it --- test/upload/filter/anonymize_filename_test.exs | 2 ++ test/uploaders/local_test.exs | 2 ++ 2 files changed, 4 insertions(+) diff --git a/test/upload/filter/anonymize_filename_test.exs b/test/upload/filter/anonymize_filename_test.exs index 2d5c580f1..adff70f57 100644 --- a/test/upload/filter/anonymize_filename_test.exs +++ b/test/upload/filter/anonymize_filename_test.exs @@ -9,6 +9,8 @@ defmodule Pleroma.Upload.Filter.AnonymizeFilenameTest do alias Pleroma.Upload setup do + File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg") + upload_file = %Upload{ name: "an… image.jpg", content_type: "image/jpg", diff --git a/test/uploaders/local_test.exs b/test/uploaders/local_test.exs index ae2cfef94..18122ff6c 100644 --- a/test/uploaders/local_test.exs +++ b/test/uploaders/local_test.exs @@ -14,6 +14,7 @@ test "it returns path to local folder for files" do describe "put_file/1" do test "put file to local folder" do + File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg") file_path = "local_upload/files/image.jpg" file = %Pleroma.Upload{ @@ -32,6 +33,7 @@ test "put file to local folder" do describe "delete_file/1" do test "deletes local file" do + File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg") file_path = "local_upload/files/image.jpg" file = %Pleroma.Upload{ From bdb3375933b17ffd596d9d870d797fcc47a4828b Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 21 Jul 2020 16:06:46 +0400 Subject: [PATCH 117/236] Allow unblocking a domain via query params --- .../operations/domain_block_operation.ex | 6 +++--- .../controllers/domain_block_controller.ex | 5 +++++ .../domain_block_controller_test.exs | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) 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 049bcf931..8234394f9 100644 --- a/lib/pleroma/web/api_spec/operations/domain_block_operation.ex +++ b/lib/pleroma/web/api_spec/operations/domain_block_operation.ex @@ -57,6 +57,7 @@ def delete_operation do description: "Remove a domain block, if it exists in the user's array of blocked domains.", operationId: "DomainBlockController.delete", requestBody: domain_block_request(), + parameters: [Operation.parameter(:domain, :query, %Schema{type: :string}, "Domain name")], security: [%{"oAuth" => ["follow", "write:blocks"]}], responses: %{ 200 => Operation.response("Empty object", "application/json", %Schema{type: :object}) @@ -71,10 +72,9 @@ defp domain_block_request do type: :object, properties: %{ domain: %Schema{type: :string} - }, - required: [:domain] + } }, - required: true, + required: false, example: %{ "domain" => "facebook.com" } 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 825b231ab..117e89426 100644 --- a/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex @@ -37,4 +37,9 @@ def delete(%{assigns: %{user: blocker}, body_params: %{domain: domain}} = conn, User.unblock_domain(blocker, domain) json(conn, %{}) end + + def delete(%{assigns: %{user: blocker}} = conn, %{domain: domain}) do + User.unblock_domain(blocker, domain) + json(conn, %{}) + 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 01a24afcf..978290d62 100644 --- a/test/web/mastodon_api/controllers/domain_block_controller_test.exs +++ b/test/web/mastodon_api/controllers/domain_block_controller_test.exs @@ -32,6 +32,24 @@ test "blocking / unblocking a domain" do refute User.blocks?(user, other_user) end + test "unblocking a domain via query params" do + %{user: user, conn: conn} = oauth_access(["write:blocks"]) + other_user = insert(:user, %{ap_id: "https://dogwhistle.zone/@pundit"}) + + User.block_domain(user, "dogwhistle.zone") + user = refresh_record(user) + assert User.blocks?(user, other_user) + + ret_conn = + conn + |> put_req_header("content-type", "application/json") + |> delete("/api/v1/domain_blocks?domain=dogwhistle.zone") + + 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 + test "getting a list of domain blocks" do %{user: user, conn: conn} = oauth_access(["read:blocks"]) From 696c13ce54aff25737f8f753a94747d79b9c54b0 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 21 Jul 2020 22:17:34 +0000 Subject: [PATCH 118/236] Revert "Merge branch 'linkify' into 'develop'" This reverts merge request !2677 --- CHANGELOG.md | 1 - config/config.exs | 18 +++++---- config/description.exs | 20 +++------- docs/configuration/cheatsheet.md | 35 +++++++++--------- lib/pleroma/config/config_db.ex | 1 + lib/pleroma/formatter.ex | 26 ++++++------- lib/pleroma/web/rich_media/helpers.ex | 4 +- mix.exs | 4 +- mix.lock | 2 +- .../20200716195806_autolinker_to_linkify.exs | 37 ------------------- test/formatter_test.exs | 30 --------------- 11 files changed, 52 insertions(+), 126 deletions(-) delete mode 100644 priv/repo/migrations/20200716195806_autolinker_to_linkify.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index f4397ec3c..080270073 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed - **Breaking:** Elixir >=1.9 is now required (was >= 1.8) -- **Breaking:** Configuration: `:auto_linker, :opts` moved to `:pleroma, Pleroma.Formatter`. Old config namespace is deprecated. - In Conversations, return only direct messages as `last_status` - Using the `only_media` filter on timelines will now exclude reblog media - MFR policy to set global expiration for all local Create activities diff --git a/config/config.exs b/config/config.exs index 406bf2a9b..2d3f35e70 100644 --- a/config/config.exs +++ b/config/config.exs @@ -527,14 +527,16 @@ federator_outgoing: 5 ] -config :pleroma, Pleroma.Formatter, - class: false, - rel: "ugc", - new_window: false, - truncate: false, - strip_prefix: false, - extra: true, - validate_tld: :no_scheme +config :auto_linker, + opts: [ + extra: true, + # TODO: Set to :no_scheme when it works properly + validate_tld: true, + class: false, + strip_prefix: false, + new_window: false, + rel: "ugc" + ] config :pleroma, :ldap, enabled: System.get_env("LDAP_ENABLED") == "true", diff --git a/config/description.exs b/config/description.exs index b97b0a7ec..f1c6773f1 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2216,12 +2216,11 @@ ] }, %{ - group: :pleroma, - key: Pleroma.Formatter, + group: :auto_linker, + key: :opts, label: "Auto Linker", type: :group, - description: - "Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs.", + description: "Configuration for the auto_linker library", children: [ %{ key: :class, @@ -2238,31 +2237,24 @@ %{ key: :new_window, type: :boolean, - description: "Link URLs will open in a new window/tab." + description: "Link URLs will open in new window/tab" }, %{ key: :truncate, type: [:integer, false], description: - "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`", + "Set to a number to truncate URLs longer then the number. Truncated URLs will end in `..`", suggestions: [15, false] }, %{ key: :strip_prefix, type: :boolean, - description: "Strip the scheme prefix." + description: "Strip the scheme prefix" }, %{ key: :extra, type: :boolean, description: "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" - }, - %{ - key: :validate_tld, - type: [:atom, :boolean], - description: - "Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)", - suggestions: [:no_scheme, true] } ] }, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 042ad30c9..6c1babba3 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -934,29 +934,30 @@ Configure OAuth 2 provider capabilities: ### :uri_schemes * `valid_schemes`: List of the scheme part that is considered valid to be an URL. -### Pleroma.Formatter +### :auto_linker -Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs. +Configuration for the `auto_linker` library: -* `class` - specify the class to be added to the generated link (default: `false`) -* `rel` - specify the rel attribute (default: `ugc`) -* `new_window` - adds `target="_blank"` attribute (default: `false`) -* `truncate` - Set to a number to truncate URLs longer then the number. Truncated URLs will end in `...` (default: `false`) -* `strip_prefix` - Strip the scheme prefix (default: `false`) -* `extra` - link URLs with rarely used schemes (magnet, ipfs, irc, etc.) (default: `true`) -* `validate_tld` - Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for urls without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't) (default: `:no_scheme`) +* `class: "auto-linker"` - specify the class to be added to the generated link. false to clear. +* `rel: "noopener noreferrer"` - override the rel attribute. false to clear. +* `new_window: true` - set to false to remove `target='_blank'` attribute. +* `scheme: false` - Set to true to link urls with schema `http://google.com`. +* `truncate: false` - Set to a number to truncate urls longer then the number. Truncated urls will end in `..`. +* `strip_prefix: true` - Strip the scheme prefix. +* `extra: false` - link urls with rarely used schemes (magnet, ipfs, irc, etc.). Example: ```elixir -config :pleroma, Pleroma.Formatter, - class: false, - rel: "ugc", - new_window: false, - truncate: false, - strip_prefix: false, - extra: true, - validate_tld: :no_scheme +config :auto_linker, + opts: [ + scheme: true, + extra: true, + class: false, + strip_prefix: false, + new_window: false, + rel: "ugc" + ] ``` ## Custom Runtime Modules (`:modules`) diff --git a/lib/pleroma/config/config_db.ex b/lib/pleroma/config/config_db.ex index e5b7811aa..1a89d8895 100644 --- a/lib/pleroma/config/config_db.ex +++ b/lib/pleroma/config/config_db.ex @@ -156,6 +156,7 @@ defp only_full_update?(%ConfigDB{group: group, key: key}) do {:quack, :meta}, {:mime, :types}, {:cors_plug, [:max_age, :methods, :expose, :headers]}, + {:auto_linker, :opts}, {:swarm, :node_blacklist}, {:logger, :backends} ] diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index 0c450eae4..02a93a8dc 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -10,15 +10,11 @@ defmodule Pleroma.Formatter do @link_regex ~r"((?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~%:/?#[\]@!\$&'\(\)\*\+,;=.]+)|[0-9a-z+\-\.]+:[0-9a-z$-_.+!*'(),]+"ui @markdown_characters_regex ~r/(`|\*|_|{|}|[|]|\(|\)|#|\+|-|\.|!)/ - defp linkify_opts do - Pleroma.Config.get(Pleroma.Formatter) ++ - [ - hashtag: true, - hashtag_handler: &Pleroma.Formatter.hashtag_handler/4, - mention: true, - mention_handler: &Pleroma.Formatter.mention_handler/4 - ] - end + @auto_linker_config hashtag: true, + hashtag_handler: &Pleroma.Formatter.hashtag_handler/4, + mention: true, + mention_handler: &Pleroma.Formatter.mention_handler/4, + scheme: true def escape_mention_handler("@" <> nickname = mention, buffer, _, _) do case User.get_cached_by_nickname(nickname) do @@ -84,19 +80,19 @@ def hashtag_handler("#" <> tag = tag_text, _buffer, _opts, acc) do @spec linkify(String.t(), keyword()) :: {String.t(), [{String.t(), User.t()}], [{String.t(), String.t()}]} def linkify(text, options \\ []) do - options = linkify_opts() ++ options + options = options ++ @auto_linker_config if options[:safe_mention] && Regex.named_captures(@safe_mention_regex, text) do %{"mentions" => mentions, "rest" => rest} = Regex.named_captures(@safe_mention_regex, text) acc = %{mentions: MapSet.new(), tags: MapSet.new()} - {text_mentions, %{mentions: mentions}} = Linkify.link_map(mentions, acc, options) - {text_rest, %{tags: tags}} = Linkify.link_map(rest, acc, options) + {text_mentions, %{mentions: mentions}} = AutoLinker.link_map(mentions, acc, options) + {text_rest, %{tags: tags}} = AutoLinker.link_map(rest, acc, options) {text_mentions <> text_rest, MapSet.to_list(mentions), MapSet.to_list(tags)} else acc = %{mentions: MapSet.new(), tags: MapSet.new()} - {text, %{mentions: mentions, tags: tags}} = Linkify.link_map(text, acc, options) + {text, %{mentions: mentions, tags: tags}} = AutoLinker.link_map(text, acc, options) {text, MapSet.to_list(mentions), MapSet.to_list(tags)} end @@ -115,9 +111,9 @@ def mentions_escape(text, options \\ []) do if options[:safe_mention] && Regex.named_captures(@safe_mention_regex, text) do %{"mentions" => mentions, "rest" => rest} = Regex.named_captures(@safe_mention_regex, text) - Linkify.link(mentions, options) <> Linkify.link(rest, options) + AutoLinker.link(mentions, options) <> AutoLinker.link(rest, options) else - Linkify.link(text, options) + AutoLinker.link(text, options) end end diff --git a/lib/pleroma/web/rich_media/helpers.ex b/lib/pleroma/web/rich_media/helpers.ex index 747f2dc6b..1729141e9 100644 --- a/lib/pleroma/web/rich_media/helpers.ex +++ b/lib/pleroma/web/rich_media/helpers.ex @@ -11,10 +11,10 @@ defmodule Pleroma.Web.RichMedia.Helpers do @spec validate_page_url(URI.t() | binary()) :: :ok | :error defp validate_page_url(page_url) when is_binary(page_url) do - validate_tld = Pleroma.Config.get([Pleroma.Formatter, :validate_tld]) + validate_tld = Application.get_env(:auto_linker, :opts)[:validate_tld] page_url - |> Linkify.Parser.url?(validate_tld: validate_tld) + |> AutoLinker.Parser.url?(scheme: true, validate_tld: validate_tld) |> parse_uri(page_url) end diff --git a/mix.exs b/mix.exs index f44d7a887..52b4cf268 100644 --- a/mix.exs +++ b/mix.exs @@ -166,7 +166,9 @@ defp deps do {:floki, "~> 0.25"}, {:timex, "~> 3.5"}, {:ueberauth, "~> 0.4"}, - {:linkify, "~> 0.2.0"}, + {:auto_linker, + git: "https://git.pleroma.social/pleroma/auto_linker.git", + ref: "95e8188490e97505c56636c1379ffdf036c1fdde"}, {:http_signatures, git: "https://git.pleroma.social/pleroma/http_signatures.git", ref: "293d77bb6f4a67ac8bde1428735c3b42f22cbb30"}, diff --git a/mix.lock b/mix.lock index 6430ddd19..8dd37a40f 100644 --- a/mix.lock +++ b/mix.lock @@ -1,5 +1,6 @@ %{ "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"]}, @@ -62,7 +63,6 @@ "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"}, - "linkify": {:hex, :linkify, "0.2.0", "2518bbbea21d2caa9d372424e1ad845b640c6630e2d016f1bd1f518f9ebcca28", [:mix], [], "hexpm", "b8ca8a68b79e30b7938d6c996085f3db14939f29538a59ca5101988bb7f917f6"}, "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"}, diff --git a/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs b/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs deleted file mode 100644 index 9ec4203eb..000000000 --- a/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs +++ /dev/null @@ -1,37 +0,0 @@ -defmodule Pleroma.Repo.Migrations.AutolinkerToLinkify do - use Ecto.Migration - - alias Pleroma.Repo - alias Pleroma.ConfigDB - - @autolinker_path %{group: :auto_linker, key: :opts} - @linkify_path %{group: :pleroma, key: Pleroma.Formatter} - - @compat_opts [:class, :rel, :new_window, :truncate, :strip_prefix, :extra] - - def change do - with {:ok, {old, new}} <- maybe_get_params() do - move_config(old, new) - end - end - - defp move_config(%{} = old, %{} = new) do - {:ok, _} = ConfigDB.update_or_create(new) - {:ok, _} = ConfigDB.delete(old) - :ok - end - - defp maybe_get_params() do - with %ConfigDB{value: opts} <- ConfigDB.get_by_params(@autolinker_path), - %{} = opts <- transform_opts(opts), - %{} = linkify_params <- Map.put(@linkify_path, :value, opts) do - {:ok, {@autolinker_path, linkify_params}} - end - end - - defp transform_opts(opts) when is_list(opts) do - opts - |> Enum.into(%{}) - |> Map.take(@compat_opts) - end -end diff --git a/test/formatter_test.exs b/test/formatter_test.exs index 8713ab9c2..bef5a2c28 100644 --- a/test/formatter_test.exs +++ b/test/formatter_test.exs @@ -255,36 +255,6 @@ test "it can parse mentions and return the relevant users" do assert {_text, ^expected_mentions, []} = Formatter.linkify(text) end - - test "it parses URL containing local mention" do - _user = insert(:user, %{nickname: "lain"}) - - text = "https://example.com/@lain" - - expected = ~S(https://example.com/@lain) - - assert {^expected, [], []} = Formatter.linkify(text) - end - - test "it correctly parses angry face D:< with mention" do - lain = - insert(:user, %{ - nickname: "lain@lain.com", - ap_id: "https://lain.com/users/lain", - id: "9qrWmR0cKniB0YU0TA" - }) - - text = "@lain@lain.com D:<" - - expected_text = - ~S(@lain D:<) - - expected_mentions = [ - {"@lain@lain.com", lain} - ] - - assert {^expected_text, ^expected_mentions, []} = Formatter.linkify(text) - end end describe ".parse_tags" do From 5b1eeb06d81872696fac89dba457fe62b62d6182 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 21 Jul 2020 22:18:17 +0000 Subject: [PATCH 119/236] Revert "Merge branch 'revert-2b5d9eb1' into 'develop'" This reverts merge request !2784 --- CHANGELOG.md | 1 + config/config.exs | 18 ++++----- config/description.exs | 20 +++++++--- docs/configuration/cheatsheet.md | 35 +++++++++--------- lib/pleroma/config/config_db.ex | 1 - lib/pleroma/formatter.ex | 26 +++++++------ lib/pleroma/web/rich_media/helpers.ex | 4 +- mix.exs | 4 +- mix.lock | 2 +- .../20200716195806_autolinker_to_linkify.exs | 37 +++++++++++++++++++ test/formatter_test.exs | 30 +++++++++++++++ 11 files changed, 126 insertions(+), 52 deletions(-) create mode 100644 priv/repo/migrations/20200716195806_autolinker_to_linkify.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index 080270073..f4397ec3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed - **Breaking:** Elixir >=1.9 is now required (was >= 1.8) +- **Breaking:** Configuration: `:auto_linker, :opts` moved to `:pleroma, Pleroma.Formatter`. Old config namespace is deprecated. - In Conversations, return only direct messages as `last_status` - Using the `only_media` filter on timelines will now exclude reblog media - MFR policy to set global expiration for all local Create activities diff --git a/config/config.exs b/config/config.exs index 2d3f35e70..406bf2a9b 100644 --- a/config/config.exs +++ b/config/config.exs @@ -527,16 +527,14 @@ federator_outgoing: 5 ] -config :auto_linker, - opts: [ - extra: true, - # TODO: Set to :no_scheme when it works properly - validate_tld: true, - class: false, - strip_prefix: false, - new_window: false, - rel: "ugc" - ] +config :pleroma, Pleroma.Formatter, + class: false, + rel: "ugc", + new_window: false, + truncate: false, + strip_prefix: false, + extra: true, + validate_tld: :no_scheme config :pleroma, :ldap, enabled: System.get_env("LDAP_ENABLED") == "true", diff --git a/config/description.exs b/config/description.exs index f1c6773f1..b97b0a7ec 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2216,11 +2216,12 @@ ] }, %{ - group: :auto_linker, - key: :opts, + group: :pleroma, + key: Pleroma.Formatter, label: "Auto Linker", type: :group, - description: "Configuration for the auto_linker library", + description: + "Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs.", children: [ %{ key: :class, @@ -2237,24 +2238,31 @@ %{ key: :new_window, type: :boolean, - description: "Link URLs will open in new window/tab" + description: "Link URLs will open in a new window/tab." }, %{ key: :truncate, type: [:integer, false], description: - "Set to a number to truncate URLs longer then the number. Truncated URLs will end in `..`", + "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`", suggestions: [15, false] }, %{ key: :strip_prefix, type: :boolean, - description: "Strip the scheme prefix" + description: "Strip the scheme prefix." }, %{ key: :extra, type: :boolean, description: "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" + }, + %{ + key: :validate_tld, + type: [:atom, :boolean], + description: + "Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)", + suggestions: [:no_scheme, true] } ] }, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 6c1babba3..042ad30c9 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -934,30 +934,29 @@ Configure OAuth 2 provider capabilities: ### :uri_schemes * `valid_schemes`: List of the scheme part that is considered valid to be an URL. -### :auto_linker +### Pleroma.Formatter -Configuration for the `auto_linker` library: +Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs. -* `class: "auto-linker"` - specify the class to be added to the generated link. false to clear. -* `rel: "noopener noreferrer"` - override the rel attribute. false to clear. -* `new_window: true` - set to false to remove `target='_blank'` attribute. -* `scheme: false` - Set to true to link urls with schema `http://google.com`. -* `truncate: false` - Set to a number to truncate urls longer then the number. Truncated urls will end in `..`. -* `strip_prefix: true` - Strip the scheme prefix. -* `extra: false` - link urls with rarely used schemes (magnet, ipfs, irc, etc.). +* `class` - specify the class to be added to the generated link (default: `false`) +* `rel` - specify the rel attribute (default: `ugc`) +* `new_window` - adds `target="_blank"` attribute (default: `false`) +* `truncate` - Set to a number to truncate URLs longer then the number. Truncated URLs will end in `...` (default: `false`) +* `strip_prefix` - Strip the scheme prefix (default: `false`) +* `extra` - link URLs with rarely used schemes (magnet, ipfs, irc, etc.) (default: `true`) +* `validate_tld` - Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for urls without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't) (default: `:no_scheme`) Example: ```elixir -config :auto_linker, - opts: [ - scheme: true, - extra: true, - class: false, - strip_prefix: false, - new_window: false, - rel: "ugc" - ] +config :pleroma, Pleroma.Formatter, + class: false, + rel: "ugc", + new_window: false, + truncate: false, + strip_prefix: false, + extra: true, + validate_tld: :no_scheme ``` ## Custom Runtime Modules (`:modules`) diff --git a/lib/pleroma/config/config_db.ex b/lib/pleroma/config/config_db.ex index 1a89d8895..e5b7811aa 100644 --- a/lib/pleroma/config/config_db.ex +++ b/lib/pleroma/config/config_db.ex @@ -156,7 +156,6 @@ defp only_full_update?(%ConfigDB{group: group, key: key}) do {:quack, :meta}, {:mime, :types}, {:cors_plug, [:max_age, :methods, :expose, :headers]}, - {:auto_linker, :opts}, {:swarm, :node_blacklist}, {:logger, :backends} ] diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index 02a93a8dc..0c450eae4 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -10,11 +10,15 @@ defmodule Pleroma.Formatter do @link_regex ~r"((?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~%:/?#[\]@!\$&'\(\)\*\+,;=.]+)|[0-9a-z+\-\.]+:[0-9a-z$-_.+!*'(),]+"ui @markdown_characters_regex ~r/(`|\*|_|{|}|[|]|\(|\)|#|\+|-|\.|!)/ - @auto_linker_config hashtag: true, - hashtag_handler: &Pleroma.Formatter.hashtag_handler/4, - mention: true, - mention_handler: &Pleroma.Formatter.mention_handler/4, - scheme: true + defp linkify_opts do + Pleroma.Config.get(Pleroma.Formatter) ++ + [ + hashtag: true, + hashtag_handler: &Pleroma.Formatter.hashtag_handler/4, + mention: true, + mention_handler: &Pleroma.Formatter.mention_handler/4 + ] + end def escape_mention_handler("@" <> nickname = mention, buffer, _, _) do case User.get_cached_by_nickname(nickname) do @@ -80,19 +84,19 @@ def hashtag_handler("#" <> tag = tag_text, _buffer, _opts, acc) do @spec linkify(String.t(), keyword()) :: {String.t(), [{String.t(), User.t()}], [{String.t(), String.t()}]} def linkify(text, options \\ []) do - options = options ++ @auto_linker_config + options = linkify_opts() ++ options if options[:safe_mention] && Regex.named_captures(@safe_mention_regex, text) do %{"mentions" => mentions, "rest" => rest} = Regex.named_captures(@safe_mention_regex, text) acc = %{mentions: MapSet.new(), tags: MapSet.new()} - {text_mentions, %{mentions: mentions}} = AutoLinker.link_map(mentions, acc, options) - {text_rest, %{tags: tags}} = AutoLinker.link_map(rest, acc, options) + {text_mentions, %{mentions: mentions}} = Linkify.link_map(mentions, acc, options) + {text_rest, %{tags: tags}} = Linkify.link_map(rest, acc, options) {text_mentions <> text_rest, MapSet.to_list(mentions), MapSet.to_list(tags)} else acc = %{mentions: MapSet.new(), tags: MapSet.new()} - {text, %{mentions: mentions, tags: tags}} = AutoLinker.link_map(text, acc, options) + {text, %{mentions: mentions, tags: tags}} = Linkify.link_map(text, acc, options) {text, MapSet.to_list(mentions), MapSet.to_list(tags)} end @@ -111,9 +115,9 @@ def mentions_escape(text, options \\ []) do if options[:safe_mention] && Regex.named_captures(@safe_mention_regex, text) do %{"mentions" => mentions, "rest" => rest} = Regex.named_captures(@safe_mention_regex, text) - AutoLinker.link(mentions, options) <> AutoLinker.link(rest, options) + Linkify.link(mentions, options) <> Linkify.link(rest, options) else - AutoLinker.link(text, options) + Linkify.link(text, options) end end diff --git a/lib/pleroma/web/rich_media/helpers.ex b/lib/pleroma/web/rich_media/helpers.ex index 1729141e9..747f2dc6b 100644 --- a/lib/pleroma/web/rich_media/helpers.ex +++ b/lib/pleroma/web/rich_media/helpers.ex @@ -11,10 +11,10 @@ defmodule Pleroma.Web.RichMedia.Helpers do @spec validate_page_url(URI.t() | binary()) :: :ok | :error defp validate_page_url(page_url) when is_binary(page_url) do - validate_tld = Application.get_env(:auto_linker, :opts)[:validate_tld] + validate_tld = Pleroma.Config.get([Pleroma.Formatter, :validate_tld]) page_url - |> AutoLinker.Parser.url?(scheme: true, validate_tld: validate_tld) + |> Linkify.Parser.url?(validate_tld: validate_tld) |> parse_uri(page_url) end diff --git a/mix.exs b/mix.exs index 52b4cf268..f44d7a887 100644 --- a/mix.exs +++ b/mix.exs @@ -166,9 +166,7 @@ defp deps do {:floki, "~> 0.25"}, {:timex, "~> 3.5"}, {:ueberauth, "~> 0.4"}, - {:auto_linker, - git: "https://git.pleroma.social/pleroma/auto_linker.git", - ref: "95e8188490e97505c56636c1379ffdf036c1fdde"}, + {:linkify, "~> 0.2.0"}, {:http_signatures, git: "https://git.pleroma.social/pleroma/http_signatures.git", ref: "293d77bb6f4a67ac8bde1428735c3b42f22cbb30"}, diff --git a/mix.lock b/mix.lock index 8dd37a40f..6430ddd19 100644 --- a/mix.lock +++ b/mix.lock @@ -1,6 +1,5 @@ %{ "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"]}, @@ -63,6 +62,7 @@ "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"}, + "linkify": {:hex, :linkify, "0.2.0", "2518bbbea21d2caa9d372424e1ad845b640c6630e2d016f1bd1f518f9ebcca28", [:mix], [], "hexpm", "b8ca8a68b79e30b7938d6c996085f3db14939f29538a59ca5101988bb7f917f6"}, "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"}, diff --git a/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs b/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs new file mode 100644 index 000000000..9ec4203eb --- /dev/null +++ b/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs @@ -0,0 +1,37 @@ +defmodule Pleroma.Repo.Migrations.AutolinkerToLinkify do + use Ecto.Migration + + alias Pleroma.Repo + alias Pleroma.ConfigDB + + @autolinker_path %{group: :auto_linker, key: :opts} + @linkify_path %{group: :pleroma, key: Pleroma.Formatter} + + @compat_opts [:class, :rel, :new_window, :truncate, :strip_prefix, :extra] + + def change do + with {:ok, {old, new}} <- maybe_get_params() do + move_config(old, new) + end + end + + defp move_config(%{} = old, %{} = new) do + {:ok, _} = ConfigDB.update_or_create(new) + {:ok, _} = ConfigDB.delete(old) + :ok + end + + defp maybe_get_params() do + with %ConfigDB{value: opts} <- ConfigDB.get_by_params(@autolinker_path), + %{} = opts <- transform_opts(opts), + %{} = linkify_params <- Map.put(@linkify_path, :value, opts) do + {:ok, {@autolinker_path, linkify_params}} + end + end + + defp transform_opts(opts) when is_list(opts) do + opts + |> Enum.into(%{}) + |> Map.take(@compat_opts) + end +end diff --git a/test/formatter_test.exs b/test/formatter_test.exs index bef5a2c28..8713ab9c2 100644 --- a/test/formatter_test.exs +++ b/test/formatter_test.exs @@ -255,6 +255,36 @@ test "it can parse mentions and return the relevant users" do assert {_text, ^expected_mentions, []} = Formatter.linkify(text) end + + test "it parses URL containing local mention" do + _user = insert(:user, %{nickname: "lain"}) + + text = "https://example.com/@lain" + + expected = ~S(https://example.com/@lain) + + assert {^expected, [], []} = Formatter.linkify(text) + end + + test "it correctly parses angry face D:< with mention" do + lain = + insert(:user, %{ + nickname: "lain@lain.com", + ap_id: "https://lain.com/users/lain", + id: "9qrWmR0cKniB0YU0TA" + }) + + text = "@lain@lain.com D:<" + + expected_text = + ~S(@lain D:<) + + expected_mentions = [ + {"@lain@lain.com", lain} + ] + + assert {^expected_text, ^expected_mentions, []} = Formatter.linkify(text) + end end describe ".parse_tags" do From 341a8f35002e2ec8b6a91453b40acf0f04ba7631 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 21 Jul 2020 17:26:59 -0500 Subject: [PATCH 120/236] Skip the correct plug --- .../web/pleroma_api/controllers/emoji_pack_controller.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex index 866901344..657f46324 100644 --- a/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex @@ -21,7 +21,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackController do ] ) - @skip_plugs [Pleroma.Plugs.OAuthScopesPlug, Pleroma.Plugs.ExpectPublicOrAuthenticatedCheckPlug] + @skip_plugs [Pleroma.Plugs.OAuthScopesPlug, Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug] plug(:skip_plug, @skip_plugs when action in [:index, :show, :archive]) defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaEmojiPackOperation From 109836306cc4bd4dfeb67aea0e9b78f77cd0b839 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 21 Jul 2020 17:27:13 -0500 Subject: [PATCH 121/236] Test that Emoji Packs can be listed when instance is not public --- .../pleroma_api/controllers/emoji_pack_controller_test.exs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/web/pleroma_api/controllers/emoji_pack_controller_test.exs b/test/web/pleroma_api/controllers/emoji_pack_controller_test.exs index df58a5eb6..e113bb15f 100644 --- a/test/web/pleroma_api/controllers/emoji_pack_controller_test.exs +++ b/test/web/pleroma_api/controllers/emoji_pack_controller_test.exs @@ -14,6 +14,8 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do ) setup do: clear_config([:auth, :enforce_oauth_admin_scope_usage], false) + setup do: clear_config([:instance, :public], true) + setup do admin = insert(:user, is_admin: true) token = insert(:oauth_admin_token, user: admin) @@ -27,6 +29,11 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do {:ok, %{admin_conn: admin_conn}} end + test "GET /api/pleroma/emoji/packs when :public: false", %{conn: conn} do + Config.put([:instance, :public], false) + conn |> get("/api/pleroma/emoji/packs") |> json_response_and_validate_schema(200) + end + test "GET /api/pleroma/emoji/packs", %{conn: conn} do resp = conn |> get("/api/pleroma/emoji/packs") |> json_response_and_validate_schema(200) From b157b7dab36f77b0f30ae18022445d586c242300 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 21 Jul 2020 17:29:11 -0500 Subject: [PATCH 122/236] Document the emoji packs API fix --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4397ec3c..16bcb5bb6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -94,6 +94,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Admin API: fix `GET /api/pleroma/admin/users/:nickname/credentials` returning 404 when getting the credentials of a remote user while `:instance, :limit_to_local_content` is set to `:unauthenticated` - Fix CSP policy generation to include remote Captcha services - Fix edge case where MediaProxy truncates media, usually caused when Caddy is serving content for the other Federated instance. +- Emoji Packs could not be listed when instance was set to `public: false` ## [Unreleased (patch)] From 7cafb96c02c569209b4684a237311a0e14648185 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 22 Jul 2020 08:58:06 +0300 Subject: [PATCH 123/236] added tests --- test/emails/user_email_test.exs | 1 - test/user/welcome_email_test.exs | 49 ++++++++++++++++++++++++++++++ test/user/welcome_message_test.exs | 34 +++++++++++++++++++++ 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 test/user/welcome_email_test.exs create mode 100644 test/user/welcome_message_test.exs diff --git a/test/emails/user_email_test.exs b/test/emails/user_email_test.exs index 502702e49..a75623bb4 100644 --- a/test/emails/user_email_test.exs +++ b/test/emails/user_email_test.exs @@ -10,7 +10,6 @@ defmodule Pleroma.Emails.UserEmailTest do alias Pleroma.Web.Router import Pleroma.Factory - import Swoosh.TestAssertions test "build password reset email" do config = Pleroma.Config.get(:instance) diff --git a/test/user/welcome_email_test.exs b/test/user/welcome_email_test.exs new file mode 100644 index 000000000..1a80109d4 --- /dev/null +++ b/test/user/welcome_email_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.User.WelcomeEmailTest do + use Pleroma.DataCase + + alias Pleroma.Config + alias Pleroma.Tests.ObanHelpers + alias Pleroma.User.WelcomeEmail + + import Pleroma.Factory + import Swoosh.TestAssertions + + setup do: clear_config([:welcome]) + + describe "send_email/1" do + test "send a welcome email" do + welcome_user = insert(:user) + user = insert(:user, name: "Jimm") + + Config.put([:welcome, :email, :enabled], true) + Config.put([:welcome, :email, :sender_nickname], welcome_user.nickname) + + Config.put( + [:welcome, :email, :subject], + "Hello, welcome to pleroma: <%= instance_name %>" + ) + + Config.put( + [:welcome, :email, :html], + "

Hello <%= user.name %>.

Welcome to <%= instance_name %>

" + ) + + instance_name = Config.get([:instance, :name]) + + {:ok, _job} = WelcomeEmail.send_email(user) + + ObanHelpers.perform_all() + + assert_email_sent( + from: {instance_name, welcome_user.email}, + to: {user.name, user.email}, + subject: "Hello, welcome to pleroma: #{instance_name}", + html_body: "

Hello #{user.name}.

Welcome to #{instance_name}

" + ) + end + end +end diff --git a/test/user/welcome_message_test.exs b/test/user/welcome_message_test.exs new file mode 100644 index 000000000..3cd6f5cb7 --- /dev/null +++ b/test/user/welcome_message_test.exs @@ -0,0 +1,34 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.User.WelcomeMessageTest do + use Pleroma.DataCase + + alias Pleroma.Config + alias Pleroma.User.WelcomeMessage + + import Pleroma.Factory + + setup do: clear_config([:welcome]) + + describe "post_message/1" do + test "send a direct welcome message" do + welcome_user = insert(:user) + user = insert(:user, name: "Jimm") + + Config.put([:welcome, :direct_message, :enabled], true) + Config.put([:welcome, :direct_message, :sender_nickname], welcome_user.nickname) + + Config.put( + [:welcome, :direct_message, :message], + "Hello. Welcome to Pleroma" + ) + + {:ok, %Pleroma.Activity{} = activity} = WelcomeMessage.post_message(user) + assert user.ap_id in activity.recipients + assert activity.data["directMessage"] == true + assert Pleroma.Object.normalize(activity).data["content"] =~ "Hello. Welcome to Pleroma" + end + end +end From b620290dd98d29a20afa86b116d1299d97ce222b Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 22 Jul 2020 09:17:00 +0300 Subject: [PATCH 124/236] update description --- CHANGELOG.md | 2 +- config/description.exs | 94 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 78 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5720aa33..0d8b3efee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -64,7 +64,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Support pagination in emoji packs API (for packs and for files in pack) - Support for viewing instances favicons next to posts and accounts - Added Pleroma.Upload.Filter.Exiftool as an alternate EXIF stripping mechanism targeting GPS/location metadata. -- Configuration: Add `:welcome` setting for welcoming message to a newly registered users. +- Configuration: Added `:welcome` settings for the welcome message to newly registered users.
API Changes diff --git a/config/description.exs b/config/description.exs index f1c6773f1..3786a608d 100644 --- a/config/description.exs +++ b/config/description.exs @@ -778,23 +778,6 @@ type: :boolean, description: "Enable to automatically add attachment link text to statuses" }, - %{ - key: :welcome_message, - type: :string, - description: - "A message that will be sent to a newly registered users as a direct message", - suggestions: [ - "Hi, @username! Welcome on board!" - ] - }, - %{ - key: :welcome_user_nickname, - type: :string, - description: "The nickname of the local user that sends the welcome message", - suggestions: [ - "lain" - ] - }, %{ key: :max_report_comment_size, type: :integer, @@ -962,6 +945,83 @@ } ] }, + %{ + group: :welcome, + type: :group, + description: "Welcome messages settings", + children: [ + %{ + group: :direct_message, + type: :group, + descpiption: "Direct message settings", + children: [ + %{ + key: :enabled, + type: :boolean, + description: "Enables sends direct message for new user after registration" + }, + %{ + key: :message, + type: :string, + description: + "A message that will be sent to a newly registered users as a direct message", + suggestions: [ + "Hi, @username! Welcome on board!" + ] + }, + %{ + key: :sender_nickname, + type: :string, + description: "The nickname of the local user that sends the welcome message", + suggestions: [ + "lain" + ] + } + ] + }, + %{ + group: :email, + type: :group, + descpiption: "Email message settings", + children: [ + %{ + key: :enabled, + type: :boolean, + description: "Enables sends direct message for new user after registration" + }, + %{ + key: :sender_nickname, + type: :string, + description: "The nickname of the local user that sends the welcome email", + suggestions: [ + "lain" + ] + }, + %{ + key: :subject, + type: :string, + description: + "The subject of welcome email. Can be use EEX template with `user` and `instance_name` variables.", + suggestions: ["Welcome to <%= instance_name%>"] + }, + %{ + key: :html, + type: :string, + description: + "The html content of welcome email. Can be use EEX template with `user` and `instance_name` variables.", + suggestions: ["

Hello <%= user.name%>. Welcome to <%= instance_name%>

"] + }, + %{ + key: :text, + type: :string, + description: + "The text content of welcome email. Can be use EEX template with `user` and `instance_name` variables.", + suggestions: ["Hello <%= user.name%>. \n Welcome to <%= instance_name%>\n"] + } + ] + } + ] + }, %{ group: :logger, type: :group, From c8fe0321b094b691563c2444b3f5e5f325e38431 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Wed, 22 Jul 2020 12:00:07 +0200 Subject: [PATCH 125/236] mix.exs: Append .git to git repo URLs Closes: https://git.pleroma.social/pleroma/pleroma/-/issues/1980 --- mix.exs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mix.exs b/mix.exs index 52b4cf268..930d09b1b 100644 --- a/mix.exs +++ b/mix.exs @@ -151,12 +151,13 @@ defp deps do {:credo, "~> 1.1.0", only: [:dev, :test], runtime: false}, {:mock, "~> 0.3.3", only: :test}, {:crypt, - git: "https://github.com/msantos/crypt", ref: "f63a705f92c26955977ee62a313012e309a4d77a"}, + git: "https://github.com/msantos/crypt.git", + ref: "f63a705f92c26955977ee62a313012e309a4d77a"}, {:cors_plug, "~> 1.5"}, {:ex_doc, "~> 0.21", only: :dev, runtime: false}, {:web_push_encryption, "~> 0.2.1"}, {:swoosh, - git: "https://github.com/swoosh/swoosh", + git: "https://github.com/swoosh/swoosh.git", ref: "c96e0ca8a00d8f211ec1f042a4626b09f249caa5", override: true}, {:phoenix_swoosh, "~> 0.2"}, @@ -190,7 +191,7 @@ defp deps do {:excoveralls, "~> 0.12.1", only: :test}, {:flake_id, "~> 0.1.0"}, {:concurrent_limiter, - git: "https://git.pleroma.social/pleroma/elixir-libraries/concurrent_limiter", + git: "https://git.pleroma.social/pleroma/elixir-libraries/concurrent_limiter.git", ref: "8eee96c6ba39b9286ec44c51c52d9f2758951365"}, {:remote_ip, git: "https://git.pleroma.social/pleroma/remote_ip.git", From 5879d3685425bebaece3ecfe1e090654c91f44b1 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 22 Jul 2020 15:34:47 +0300 Subject: [PATCH 126/236] fix sender for welcome email --- config/config.exs | 2 +- config/description.exs | 9 +++++---- docs/configuration/cheatsheet.md | 22 +++++++++++++++++++--- lib/pleroma/user/welcome_email.ex | 24 +++++++++--------------- test/user/welcome_email_test.exs | 18 +++++++++++++++--- test/user_test.exs | 2 +- 6 files changed, 50 insertions(+), 27 deletions(-) diff --git a/config/config.exs b/config/config.exs index 16b7f6dc7..baee67d93 100644 --- a/config/config.exs +++ b/config/config.exs @@ -260,7 +260,7 @@ ], email: [ enabled: false, - sender_nickname: nil, + sender: nil, subject: "Welcome to <%= instance_name %>", html: "Welcome to <%= instance_name %>", text: "Welcome to <%= instance_name %>" diff --git a/config/description.exs b/config/description.exs index 3786a608d..e012040f5 100644 --- a/config/description.exs +++ b/config/description.exs @@ -990,11 +990,12 @@ description: "Enables sends direct message for new user after registration" }, %{ - key: :sender_nickname, - type: :string, - description: "The nickname of the local user that sends the welcome email", + key: :sender, + type: [:string, :tuple], + description: + "The email address or tuple with `{nickname, email}` that will use as sender to the welcome email.", suggestions: [ - "lain" + {"Pleroma App", "welcome@pleroma.app"} ] }, %{ diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 7e8f86aba..e1eccea1f 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -46,8 +46,6 @@ To add configuration to your config file, you can copy it from the base config. * `max_pinned_statuses`: The maximum number of pinned statuses. `0` will disable the feature. * `autofollowed_nicknames`: Set to nicknames of (local) users that every new user should automatically follow. * `attachment_links`: Set to true to enable automatically adding attachment link text to statuses. -* `welcome_message`: A message that will be send to a newly registered users as a direct message. -* `welcome_user_nickname`: The nickname of the local user that sends the welcome message. * `max_report_comment_size`: The maximum size of the report comment (Default: `1000`). * `safe_dm_mentions`: If set to true, only mentions at the beginning of a post will be used to address people in direct messages. This is to prevent accidental mentioning of people when talking about them (e.g. "@friend hey i really don't like @enemy"). Default: `false`. * `healthcheck`: If set to true, system data will be shown on ``/api/pleroma/healthcheck``. @@ -70,11 +68,29 @@ To add configuration to your config file, you can copy it from the base config. * `message`: A message that will be send to a newly registered users as a direct message. * `email`: - welcome message sent as a email. * `enabled`: Enables the send a welcome email to a newly registered user. Defaults to `false`. - * `sender_nickname`: The nickname of the local user that sends the welcome email. + * `sender`: The email address or tuple with `{nickname, email}` that will use as sender to the welcome email. * `subject`: A subject of welcome email. * `html`: A html that will be send to a newly registered users as a email. * `text`: A text that will be send to a newly registered users as a email. + Example: + + ```elixir + config :pleroma, :welcome, + direct_message: [ + enabled: true, + sender_nickname: "lain", + message: "Hi, @username! Welcome on board!" + ], + email: [ + enabled: true, + sender: {"Pleroma App", "welcome@pleroma.app"}, + subject: "Welcome to <%= instance_name %>", + html: "Welcome to <%= instance_name %>", + text: "Welcome to <%= instance_name %>" + ] + ``` + ## Message rewrite facility ### :mrf diff --git a/lib/pleroma/user/welcome_email.ex b/lib/pleroma/user/welcome_email.ex index 53062b961..91a9591dd 100644 --- a/lib/pleroma/user/welcome_email.ex +++ b/lib/pleroma/user/welcome_email.ex @@ -27,7 +27,7 @@ defp email_options(user) do bindings = [user: user, instance_name: instance_name()] %{} - |> add_sender(Config.get([:welcome, :email, :sender_nickname], nil)) + |> add_sender(Config.get([:welcome, :email, :sender], nil)) |> add_option(:subject, bindings) |> add_option(:html, bindings) |> add_option(:text, bindings) @@ -40,28 +40,22 @@ defp add_option(opts, option, bindings) do |> merge_options(opts, option) end - def add_sender(opts, nickname) do - nickname - |> fetch_sender() - |> merge_options(opts, :sender) + defp add_sender(opts, {_name, _email} = sender) do + merge_options(sender, opts, :sender) end + defp add_sender(opts, sender) when is_binary(sender) do + add_sender(opts, {instance_name(), sender}) + end + + defp add_sender(opts, _), do: opts + defp merge_options(nil, options, _option), do: options defp merge_options(value, options, option) do Map.merge(options, %{option => value}) end - defp fetch_sender(nickname) when is_binary(nickname) do - with %User{local: true} = user <- User.get_cached_by_nickname(nickname) do - {instance_name(), user.email} - else - _ -> nil - end - end - - defp fetch_sender(_), do: nil - defp eval_string(nil, _), do: nil defp eval_string("", _), do: nil defp eval_string(str, bindings), do: EEx.eval_string(str, bindings) diff --git a/test/user/welcome_email_test.exs b/test/user/welcome_email_test.exs index 1a80109d4..d005d11b2 100644 --- a/test/user/welcome_email_test.exs +++ b/test/user/welcome_email_test.exs @@ -16,11 +16,10 @@ defmodule Pleroma.User.WelcomeEmailTest do describe "send_email/1" do test "send a welcome email" do - welcome_user = insert(:user) user = insert(:user, name: "Jimm") Config.put([:welcome, :email, :enabled], true) - Config.put([:welcome, :email, :sender_nickname], welcome_user.nickname) + Config.put([:welcome, :email, :sender], "welcome@pleroma.app") Config.put( [:welcome, :email, :subject], @@ -39,7 +38,20 @@ test "send a welcome email" do ObanHelpers.perform_all() assert_email_sent( - from: {instance_name, welcome_user.email}, + from: {instance_name, "welcome@pleroma.app"}, + to: {user.name, user.email}, + subject: "Hello, welcome to pleroma: #{instance_name}", + html_body: "

Hello #{user.name}.

Welcome to #{instance_name}

" + ) + + Config.put([:welcome, :email, :sender], {"Pleroma App", "welcome@pleroma.app"}) + + {:ok, _job} = WelcomeEmail.send_email(user) + + ObanHelpers.perform_all() + + assert_email_sent( + from: {"Pleroma App", "welcome@pleroma.app"}, to: {user.name, user.email}, subject: "Hello, welcome to pleroma: #{instance_name}", html_body: "

Hello #{user.name}.

Welcome to #{instance_name}

" diff --git a/test/user_test.exs b/test/user_test.exs index e887a3fb2..132697139 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -414,7 +414,7 @@ test "it sends a welcome message if it is set" do Pleroma.Config.put([:welcome, :direct_message, :message], "Hello, this is a cool site") Pleroma.Config.put([:welcome, :email, :enabled], true) - Pleroma.Config.put([:welcome, :email, :sender_nickname], welcome_user.nickname) + Pleroma.Config.put([:welcome, :email, :sender], welcome_user.email) Pleroma.Config.put( [:welcome, :email, :subject], From 0cb9e1da746ee5bfb8147cead3944f0e13fb447f Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Wed, 22 Jul 2020 14:44:06 +0200 Subject: [PATCH 127/236] StatusView: Handle badly formatted emoji reactions. --- .../web/mastodon_api/views/status_view.ex | 24 ++++++++++++++----- .../mastodon_api/views/status_view_test.exs | 17 +++++++++++++ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index fa9d695f3..91b41ef59 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -297,13 +297,17 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} emoji_reactions = with %{data: %{"reactions" => emoji_reactions}} <- object do - Enum.map(emoji_reactions, fn [emoji, users] -> - %{ - name: emoji, - count: length(users), - me: !!(opts[:for] && opts[:for].ap_id in users) - } + Enum.map(emoji_reactions, fn + [emoji, users] when is_list(users) -> + build_emoji_map(emoji, users, opts[:for]) + + {emoji, users} when is_list(users) -> + build_emoji_map(emoji, users, opts[:for]) + + _ -> + nil end) + |> Enum.reject(&is_nil/1) else _ -> [] end @@ -545,4 +549,12 @@ defp present?(_), do: true defp pinned?(%Activity{id: id}, %User{pinned_activities: pinned_activities}), do: id in pinned_activities + + defp build_emoji_map(emoji, users, current_user) do + %{ + name: emoji, + count: length(users), + me: !!(current_user && current_user.ap_id in users) + } + 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 fa26b3129..8791d3573 100644 --- a/test/web/mastodon_api/views/status_view_test.exs +++ b/test/web/mastodon_api/views/status_view_test.exs @@ -56,6 +56,23 @@ test "has an emoji reaction list" do ] end + test "works correctly with badly formatted emojis" do + user = insert(:user) + {:ok, activity} = CommonAPI.post(user, %{status: "yo"}) + + activity + |> Object.normalize(false) + |> Object.update_data(%{"reactions" => %{"☕" => [user.ap_id], "x" => 1}}) + + activity = Activity.get_by_id(activity.id) + + status = StatusView.render("show.json", activity: activity, for: user) + + assert status[:pleroma][:emoji_reactions] == [ + %{name: "☕", count: 1, me: true} + ] + end + test "loads and returns the direct conversation id when given the `with_direct_conversation_id` option" do user = insert(:user) From db0224d1745e753b73bd0e993bc0e75eec295651 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 22 Jul 2020 16:00:49 +0300 Subject: [PATCH 128/236] added check user email for welcome email --- lib/pleroma/user.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 29526b8fd..5bc256b50 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -729,7 +729,7 @@ def send_welcome_message(user) do end end - def send_welcome_email(user) do + def send_welcome_email(%User{email: email} = user) when is_binary(email) do if User.WelcomeEmail.enabled?() do User.WelcomeEmail.send_email(user) {:ok, :enqueued} @@ -737,6 +737,7 @@ def send_welcome_email(user) do {:ok, :noop} end end + def send_welcome_email(_), do: {:ok, :noop} def try_send_confirmation_email(%User{} = user) do if user.confirmation_pending && From 188b0dc72d3e5bf0c4d4aa5b2a505e3e0af69df7 Mon Sep 17 00:00:00 2001 From: Angelina Filippova Date: Wed, 22 Jul 2020 18:15:30 +0300 Subject: [PATCH 129/236] Add related_policy field --- config/description.exs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/config/description.exs b/config/description.exs index b97b0a7ec..e4850218e 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1426,6 +1426,7 @@ group: :pleroma, key: :mrf_simple, tab: :mrf, + related_policy: "Pleroma.Web.ActivityPub.MRF.SimplePolicy", label: "MRF Simple", type: :group, description: "Simple ingress policies", @@ -1492,6 +1493,7 @@ group: :pleroma, key: :mrf_activity_expiration, tab: :mrf, + related_policy: "Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy", label: "MRF Activity Expiration Policy", type: :group, description: "Adds automatic expiration to all local activities", @@ -1508,6 +1510,7 @@ group: :pleroma, key: :mrf_subchain, tab: :mrf, + related_policy: "Pleroma.Web.ActivityPub.MRF.SubchainPolicy", label: "MRF Subchain", type: :group, description: @@ -1530,6 +1533,7 @@ group: :pleroma, key: :mrf_rejectnonpublic, tab: :mrf, + related_policy: "Pleroma.Web.ActivityPub.MRF.RejectNonPublic", description: "RejectNonPublic drops posts with non-public visibility settings.", label: "MRF Reject Non Public", type: :group, @@ -1551,6 +1555,7 @@ group: :pleroma, key: :mrf_hellthread, tab: :mrf, + related_policy: "Pleroma.Web.ActivityPub.MRF.HellthreadPolicy", label: "MRF Hellthread", type: :group, description: "Block messages with excessive user mentions", @@ -1576,6 +1581,7 @@ group: :pleroma, key: :mrf_keyword, tab: :mrf, + related_policy: "Pleroma.Web.ActivityPub.MRF.KeywordPolicy", label: "MRF Keyword", type: :group, description: "Reject or Word-Replace messages with a keyword or regex", @@ -1607,6 +1613,7 @@ group: :pleroma, key: :mrf_mention, tab: :mrf, + related_policy: "Pleroma.Web.ActivityPub.MRF.MentionPolicy", label: "MRF Mention", type: :group, description: "Block messages which mention a specific user", @@ -1623,6 +1630,7 @@ group: :pleroma, key: :mrf_vocabulary, tab: :mrf, + related_policy: "Pleroma.Web.ActivityPub.MRF.VocabularyPolicy", label: "MRF Vocabulary", type: :group, description: "Filter messages which belong to certain activity vocabularies", @@ -1646,6 +1654,8 @@ # %{ # group: :pleroma, # key: :mrf_user_allowlist, + # tab: :mrf, + # related_policy: "Pleroma.Web.ActivityPub.MRF.UserAllowListPolicy", # type: :map, # description: # "The keys in this section are the domain names that the policy should apply to." <> @@ -2910,8 +2920,9 @@ }, %{ group: :pleroma, - tab: :mrf, key: :mrf_normalize_markup, + tab: :mrf, + related_policy: "Pleroma.Web.ActivityPub.MRF.NormalizeMarkup", label: "MRF Normalize Markup", description: "MRF NormalizeMarkup settings. Scrub configured hypertext markup.", type: :group, @@ -3106,8 +3117,9 @@ %{ group: :pleroma, key: :mrf_object_age, - label: "MRF Object Age", tab: :mrf, + related_policy: "Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy", + label: "MRF Object Age", type: :group, description: "Rejects or delists posts based on their timestamp deviance from your server's clock.", From 6f5f7af607518b6f67df68bab9bf76142e9a622c Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Wed, 22 Jul 2020 19:06:00 +0300 Subject: [PATCH 130/236] [#1973] Fixed accounts rendering in GET /api/v1/pleroma/chats with truish :restrict_unauthenticated. Made `Pleroma.Web.MastodonAPI.AccountView.render("show.json", _)` demand :for or :force option in order to prevent incorrect rendering of empty map instead of expected user representation with truish :restrict_unauthenticated setting. --- lib/pleroma/web/activity_pub/utils.ex | 9 ++-- .../controllers/admin_api_controller.ex | 6 ++- .../web/admin_api/views/account_view.ex | 2 +- lib/pleroma/web/chat_channel.ex | 6 ++- .../controllers/search_controller.ex | 1 - .../web/mastodon_api/views/account_view.ex | 23 ++++++++-- .../mastodon_api/views/conversation_view.ex | 2 +- .../controllers/chat_controller.ex | 15 ++++--- .../web/pleroma_api/views/chat_view.ex | 17 +++++-- .../pleroma_api/views/emoji_reaction_view.ex | 2 +- mix.lock | 6 +-- test/web/activity_pub/activity_pub_test.exs | 2 +- test/web/activity_pub/transmogrifier_test.exs | 2 +- test/web/activity_pub/utils_test.exs | 2 +- test/web/admin_api/views/report_view_test.exs | 21 +++++---- .../mastodon_api/views/account_view_test.exs | 38 +++++++++++----- .../mastodon_api/views/status_view_test.exs | 2 +- .../controllers/chat_controller_test.exs | 22 +++++++++ test/web/pleroma_api/views/chat_view_test.exs | 2 +- test/web/twitter_api/twitter_api_test.exs | 45 ++++++------------- 20 files changed, 143 insertions(+), 82 deletions(-) diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index dfae602df..11c64cffd 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -719,15 +719,18 @@ defp build_flag_object(act) when is_map(act) or is_binary(act) do case Activity.get_by_ap_id_with_object(id) do %Activity{} = activity -> + activity_actor = User.get_by_ap_id(activity.object.data["actor"]) + %{ "type" => "Note", "id" => activity.data["id"], "content" => activity.object.data["content"], "published" => activity.object.data["published"], "actor" => - AccountView.render("show.json", %{ - user: User.get_by_ap_id(activity.object.data["actor"]) - }) + AccountView.render( + "show.json", + %{user: activity_actor, force: true} + ) } _ -> diff --git a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex index e5f14269a..225ceb1fd 100644 --- a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex @@ -345,7 +345,11 @@ def list_users(conn, params) do 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) + AccountView.render("index.json", + users: users, + count: count, + page_size: page_size + ) ) end end diff --git a/lib/pleroma/web/admin_api/views/account_view.ex b/lib/pleroma/web/admin_api/views/account_view.ex index e1e929632..4ae030b84 100644 --- a/lib/pleroma/web/admin_api/views/account_view.ex +++ b/lib/pleroma/web/admin_api/views/account_view.ex @@ -105,7 +105,7 @@ def render("create-error.json", %{changeset: %Ecto.Changeset{changes: changes, e end def merge_account_views(%User{} = user) do - MastodonAPI.AccountView.render("show.json", %{user: user}) + MastodonAPI.AccountView.render("show.json", %{user: user, force: true}) |> Map.merge(AdminAPI.AccountView.render("show.json", %{user: user})) end diff --git a/lib/pleroma/web/chat_channel.ex b/lib/pleroma/web/chat_channel.ex index bce27897f..08d0e80f9 100644 --- a/lib/pleroma/web/chat_channel.ex +++ b/lib/pleroma/web/chat_channel.ex @@ -4,8 +4,10 @@ defmodule Pleroma.Web.ChatChannel do use Phoenix.Channel + alias Pleroma.User alias Pleroma.Web.ChatChannel.ChatChannelState + alias Pleroma.Web.MastodonAPI.AccountView def join("chat:public", _message, socket) do send(self(), :after_join) @@ -22,9 +24,9 @@ def handle_in("new_msg", %{"text" => text}, %{assigns: %{user_name: user_name}} if String.length(text) in 1..Pleroma.Config.get([:instance, :chat_limit]) do author = User.get_cached_by_nickname(user_name) - author = Pleroma.Web.MastodonAPI.AccountView.render("show.json", user: author) + author_json = AccountView.render("show.json", user: author, force: true) - message = ChatChannelState.add_message(%{text: text, author: author}) + message = ChatChannelState.add_message(%{text: text, author: author_json}) broadcast!(socket, "new_msg", message) end diff --git a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex index 29affa7d5..5a983db39 100644 --- a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex @@ -93,7 +93,6 @@ defp resource_search(_, "accounts", query, options) do AccountView.render("index.json", users: accounts, for: options[:for_user], - as: :user, embed_relationships: options[:embed_relationships] ) end diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index bc9745044..b929d5a03 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -27,21 +27,38 @@ def render("index.json", %{users: users} = opts) do UserRelationship.view_relationships_option(reading_user, users) end - opts = Map.put(opts, :relationships, relationships_opt) + opts = + opts + |> Map.merge(%{relationships: relationships_opt, as: :user}) + |> Map.delete(:users) users |> render_many(AccountView, "show.json", opts) |> Enum.filter(&Enum.any?/1) end - def render("show.json", %{user: user} = opts) do - if User.visible_for(user, opts[:for]) == :visible do + @doc """ + Renders specified user account. + :force option skips visibility check and renders any user (local or remote) + regardless of [:pleroma, :restrict_unauthenticated] setting. + :for option specifies the requester and can be a User record or nil. + """ + def render("show.json", %{user: _user, force: true} = opts) do + do_render("show.json", opts) + end + + def render("show.json", %{user: user, for: for_user_or_nil} = opts) do + if User.visible_for(user, for_user_or_nil) == :visible do do_render("show.json", opts) else %{} end end + def render("show.json", _) do + raise "In order to prevent account accessibility issues, :force or :for option is required." + end + def render("mention.json", %{user: user}) do %{ id: to_string(user.id), diff --git a/lib/pleroma/web/mastodon_api/views/conversation_view.ex b/lib/pleroma/web/mastodon_api/views/conversation_view.ex index 06f0c1728..a91994915 100644 --- a/lib/pleroma/web/mastodon_api/views/conversation_view.ex +++ b/lib/pleroma/web/mastodon_api/views/conversation_view.ex @@ -38,7 +38,7 @@ def render("participation.json", %{participation: participation, for: user}) do %{ id: participation.id |> to_string(), - accounts: render(AccountView, "index.json", users: users, as: :user), + accounts: render(AccountView, "index.json", users: users, for: user), unread: !participation.read, last_status: render(StatusView, "show.json", diff --git a/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex b/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex index c8ef3d915..e8a1746d4 100644 --- a/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex @@ -89,11 +89,11 @@ def post_chat_message( cm_ref <- MessageReference.for_chat_and_object(chat, message) do conn |> put_view(MessageReferenceView) - |> render("show.json", for: user, chat_message_reference: cm_ref) + |> render("show.json", chat_message_reference: cm_ref) end end - def mark_message_as_read(%{assigns: %{user: %{id: user_id} = user}} = conn, %{ + def mark_message_as_read(%{assigns: %{user: %{id: user_id}}} = conn, %{ id: chat_id, message_id: message_id }) do @@ -104,12 +104,15 @@ def mark_message_as_read(%{assigns: %{user: %{id: user_id} = user}} = conn, %{ {:ok, cm_ref} <- MessageReference.mark_as_read(cm_ref) do conn |> put_view(MessageReferenceView) - |> render("show.json", for: user, chat_message_reference: cm_ref) + |> render("show.json", chat_message_reference: cm_ref) end end def mark_as_read( - %{body_params: %{last_read_id: last_read_id}, assigns: %{user: %{id: user_id}}} = conn, + %{ + body_params: %{last_read_id: last_read_id}, + assigns: %{user: %{id: user_id}} + } = conn, %{id: id} ) do with %Chat{} = chat <- Repo.get_by(Chat, id: id, user_id: user_id), @@ -121,7 +124,7 @@ def mark_as_read( end end - def messages(%{assigns: %{user: %{id: user_id} = user}} = conn, %{id: id} = params) do + def messages(%{assigns: %{user: %{id: user_id}}} = conn, %{id: id} = params) do with %Chat{} = chat <- Repo.get_by(Chat, id: id, user_id: user_id) do cm_refs = chat @@ -130,7 +133,7 @@ def messages(%{assigns: %{user: %{id: user_id} = user}} = conn, %{id: id} = para conn |> put_view(MessageReferenceView) - |> render("index.json", for: user, chat_message_references: cm_refs) + |> render("index.json", chat_message_references: cm_refs) else _ -> conn diff --git a/lib/pleroma/web/pleroma_api/views/chat_view.ex b/lib/pleroma/web/pleroma_api/views/chat_view.ex index 1c996da11..2ae7c8122 100644 --- a/lib/pleroma/web/pleroma_api/views/chat_view.ex +++ b/lib/pleroma/web/pleroma_api/views/chat_view.ex @@ -15,10 +15,11 @@ defmodule Pleroma.Web.PleromaAPI.ChatView do def render("show.json", %{chat: %Chat{} = chat} = opts) do recipient = User.get_cached_by_ap_id(chat.recipient) last_message = opts[:last_message] || MessageReference.last_message_for_chat(chat) + account_view_opts = account_view_opts(opts, recipient) %{ id: chat.id |> to_string(), - account: AccountView.render("show.json", Map.put(opts, :user, recipient)), + account: AccountView.render("show.json", account_view_opts), unread: MessageReference.unread_count_for_chat(chat), last_message: last_message && @@ -27,7 +28,17 @@ def render("show.json", %{chat: %Chat{} = chat} = opts) do } end - def render("index.json", %{chats: chats}) do - render_many(chats, __MODULE__, "show.json") + def render("index.json", %{chats: chats} = opts) do + render_many(chats, __MODULE__, "show.json", Map.delete(opts, :chats)) + end + + defp account_view_opts(opts, recipient) do + account_view_opts = Map.put(opts, :user, recipient) + + if Map.has_key?(account_view_opts, :for) do + account_view_opts + else + Map.put(account_view_opts, :force, true) + end end end diff --git a/lib/pleroma/web/pleroma_api/views/emoji_reaction_view.ex b/lib/pleroma/web/pleroma_api/views/emoji_reaction_view.ex index 84d2d303d..e0f98b50a 100644 --- a/lib/pleroma/web/pleroma_api/views/emoji_reaction_view.ex +++ b/lib/pleroma/web/pleroma_api/views/emoji_reaction_view.ex @@ -17,7 +17,7 @@ def render("show.json", %{emoji_reaction: [emoji, user_ap_ids], user: user}) do %{ name: emoji, count: length(users), - accounts: render(AccountView, "index.json", users: users, for: user, as: :user), + accounts: render(AccountView, "index.json", users: users, for: user), me: !!(user && user.ap_id in user_ap_ids) } end diff --git a/mix.lock b/mix.lock index 8dd37a40f..9e4b2f09c 100644 --- a/mix.lock +++ b/mix.lock @@ -15,14 +15,14 @@ "certifi": {:hex, :certifi, "2.5.2", "b7cfeae9d2ed395695dd8201c57a2d019c0c43ecaf8b8bcb9320b40d6662f340", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm", "3b3b5f36493004ac3455966991eaf6e768ce9884693d9968055aeeeb1e575040"}, "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, "comeonin": {:hex, :comeonin, "5.3.1", "7fe612b739c78c9c1a75186ef2d322ce4d25032d119823269d0aa1e2f1e20025", [:mix], [], "hexpm", "d6222483060c17f0977fad1b7401ef0c5863c985a64352755f366aee3799c245"}, - "concurrent_limiter": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/concurrent_limiter", "8eee96c6ba39b9286ec44c51c52d9f2758951365", [ref: "8eee96c6ba39b9286ec44c51c52d9f2758951365"]}, + "concurrent_limiter": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/concurrent_limiter.git", "8eee96c6ba39b9286ec44c51c52d9f2758951365", [ref: "8eee96c6ba39b9286ec44c51c52d9f2758951365"]}, "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"}, - "crypt": {:git, "https://github.com/msantos/crypt", "f63a705f92c26955977ee62a313012e309a4d77a", [ref: "f63a705f92c26955977ee62a313012e309a4d77a"]}, + "crypt": {:git, "https://github.com/msantos/crypt.git", "f63a705f92c26955977ee62a313012e309a4d77a", [ref: "f63a705f92c26955977ee62a313012e309a4d77a"]}, "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, "db_connection": {:hex, :db_connection, "2.2.2", "3bbca41b199e1598245b716248964926303b5d4609ff065125ce98bcd368939e", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm", "642af240d8a8affb93b4ba5a6fcd2bbcbdc327e1a524b825d383711536f8070c"}, "decimal": {:hex, :decimal, "1.8.1", "a4ef3f5f3428bdbc0d35374029ffcf4ede8533536fa79896dd450168d9acdf3c", [:mix], [], "hexpm", "3cb154b00225ac687f6cbd4acc4b7960027c757a5152b369923ead9ddbca7aec"}, @@ -105,7 +105,7 @@ "sleeplocks": {:hex, :sleeplocks, "1.1.1", "3d462a0639a6ef36cc75d6038b7393ae537ab394641beb59830a1b8271faeed3", [:rebar3], [], "hexpm", "84ee37aeff4d0d92b290fff986d6a95ac5eedf9b383fadfd1d88e9b84a1c02e1"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, "sweet_xml": {:hex, :sweet_xml, "0.6.6", "fc3e91ec5dd7c787b6195757fbcf0abc670cee1e4172687b45183032221b66b8", [:mix], [], "hexpm", "2e1ec458f892ffa81f9f8386e3f35a1af6db7a7a37748a64478f13163a1f3573"}, - "swoosh": {:git, "https://github.com/swoosh/swoosh", "c96e0ca8a00d8f211ec1f042a4626b09f249caa5", [ref: "c96e0ca8a00d8f211ec1f042a4626b09f249caa5"]}, + "swoosh": {:git, "https://github.com/swoosh/swoosh.git", "c96e0ca8a00d8f211ec1f042a4626b09f249caa5", [ref: "c96e0ca8a00d8f211ec1f042a4626b09f249caa5"]}, "syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"}, "telemetry": {:hex, :telemetry, "0.4.2", "2808c992455e08d6177322f14d3bdb6b625fbcfd233a73505870d8738a2f4599", [:rebar3], [], "hexpm", "2d1419bd9dda6a206d7b5852179511722e2b18812310d304620c7bd92a13fcef"}, "tesla": {:git, "https://github.com/teamon/tesla.git", "af3707078b10793f6a534938e56b963aff82fe3c", [ref: "af3707078b10793f6a534938e56b963aff82fe3c"]}, diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index f3951462f..34905a928 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -1179,7 +1179,7 @@ test "it can create a Flag activity", "id" => activity_ap_id, "content" => content, "published" => activity_with_object.object.data["published"], - "actor" => AccountView.render("show.json", %{user: target_account}) + "actor" => AccountView.render("show.json", %{user: target_account, force: true}) } assert %Activity{ diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 248b410c6..01e18eace 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -710,7 +710,7 @@ test "it accepts Flag activities" do "id" => activity.data["id"], "content" => "test post", "published" => object.data["published"], - "actor" => AccountView.render("show.json", %{user: user}) + "actor" => AccountView.render("show.json", %{user: user, force: true}) } message = %{ diff --git a/test/web/activity_pub/utils_test.exs b/test/web/activity_pub/utils_test.exs index 361dc5a41..ab984d486 100644 --- a/test/web/activity_pub/utils_test.exs +++ b/test/web/activity_pub/utils_test.exs @@ -482,7 +482,7 @@ test "returns map with Flag object" do "id" => activity_ap_id, "content" => content, "published" => activity.object.data["published"], - "actor" => AccountView.render("show.json", %{user: target_account}) + "actor" => AccountView.render("show.json", %{user: target_account, force: true}) } assert %{ diff --git a/test/web/admin_api/views/report_view_test.exs b/test/web/admin_api/views/report_view_test.exs index f00b0afb2..e171509e5 100644 --- a/test/web/admin_api/views/report_view_test.exs +++ b/test/web/admin_api/views/report_view_test.exs @@ -4,11 +4,14 @@ defmodule Pleroma.Web.AdminAPI.ReportViewTest do use Pleroma.DataCase + import Pleroma.Factory + + alias Pleroma.Web.AdminAPI alias Pleroma.Web.AdminAPI.Report alias Pleroma.Web.AdminAPI.ReportView alias Pleroma.Web.CommonAPI - alias Pleroma.Web.MastodonAPI.AccountView + alias Pleroma.Web.MastodonAPI alias Pleroma.Web.MastodonAPI.StatusView test "renders a report" do @@ -21,13 +24,13 @@ test "renders a report" do content: nil, actor: Map.merge( - AccountView.render("show.json", %{user: user}), - Pleroma.Web.AdminAPI.AccountView.render("show.json", %{user: user}) + MastodonAPI.AccountView.render("show.json", %{user: user, force: true}), + AdminAPI.AccountView.render("show.json", %{user: user}) ), account: Map.merge( - AccountView.render("show.json", %{user: other_user}), - Pleroma.Web.AdminAPI.AccountView.render("show.json", %{user: other_user}) + MastodonAPI.AccountView.render("show.json", %{user: other_user, force: true}), + AdminAPI.AccountView.render("show.json", %{user: other_user}) ), statuses: [], notes: [], @@ -56,13 +59,13 @@ test "includes reported statuses" do content: nil, actor: Map.merge( - AccountView.render("show.json", %{user: user}), - Pleroma.Web.AdminAPI.AccountView.render("show.json", %{user: user}) + MastodonAPI.AccountView.render("show.json", %{user: user, force: true}), + AdminAPI.AccountView.render("show.json", %{user: user}) ), account: Map.merge( - AccountView.render("show.json", %{user: other_user}), - Pleroma.Web.AdminAPI.AccountView.render("show.json", %{user: other_user}) + MastodonAPI.AccountView.render("show.json", %{user: other_user, force: true}), + AdminAPI.AccountView.render("show.json", %{user: other_user}) ), statuses: [StatusView.render("show.json", %{activity: activity})], state: "open", diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index a83bf90a3..2b18c2e43 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -95,7 +95,7 @@ test "Represent a user account" do } } - assert expected == AccountView.render("show.json", %{user: user}) + assert expected == AccountView.render("show.json", %{user: user, force: true}) end test "Favicon is nil when :instances_favicons is disabled" do @@ -108,11 +108,12 @@ test "Favicon is nil when :instances_favicons is disabled" do favicon: "https://shitposter.club/plugins/Qvitter/img/gnusocial-favicons/favicon-16x16.png" } - } = AccountView.render("show.json", %{user: user}) + } = AccountView.render("show.json", %{user: user, force: true}) Config.put([:instances_favicons, :enabled], false) - assert %{pleroma: %{favicon: nil}} = AccountView.render("show.json", %{user: user}) + assert %{pleroma: %{favicon: nil}} = + AccountView.render("show.json", %{user: user, force: true}) end test "Represent the user account for the account owner" do @@ -189,7 +190,7 @@ test "Represent a Service(bot) account" do } } - assert expected == AccountView.render("show.json", %{user: user}) + assert expected == AccountView.render("show.json", %{user: user, force: true}) end test "Represent a Funkwhale channel" do @@ -198,7 +199,7 @@ test "Represent a Funkwhale channel" do "https://channels.tests.funkwhale.audio/federation/actors/compositions" ) - assert represented = AccountView.render("show.json", %{user: user}) + assert represented = AccountView.render("show.json", %{user: user, force: true}) assert represented.acct == "compositions@channels.tests.funkwhale.audio" assert represented.url == "https://channels.tests.funkwhale.audio/channels/compositions" end @@ -223,6 +224,21 @@ test "Represent a smaller mention" do assert expected == AccountView.render("mention.json", %{user: user}) end + test "demands :for or :force option for account rendering" do + clear_config([:restrict_unauthenticated, :profiles, :local], false) + + user = insert(:user) + user_id = user.id + + assert %{id: ^user_id} = AccountView.render("show.json", %{user: user, for: nil}) + assert %{id: ^user_id} = AccountView.render("show.json", %{user: user, for: user}) + assert %{id: ^user_id} = AccountView.render("show.json", %{user: user, force: true}) + + assert_raise RuntimeError, ~r/:force or :for option is required/, fn -> + AccountView.render("show.json", %{user: user}) + end + end + describe "relationship" do defp test_relationship_rendering(user, other_user, expected_result) do opts = %{user: user, target: other_user, relationships: nil} @@ -336,7 +352,7 @@ test "returns the settings store if the requesting user is the represented user assert result.pleroma.settings_store == %{:fe => "test"} - result = AccountView.render("show.json", %{user: user, with_pleroma_settings: true}) + result = AccountView.render("show.json", %{user: user, for: nil, with_pleroma_settings: true}) assert result.pleroma[:settings_store] == nil result = AccountView.render("show.json", %{user: user, for: user}) @@ -345,13 +361,13 @@ test "returns the settings store if the requesting user is the represented user test "doesn't sanitize display names" do user = insert(:user, name: " username ") - result = AccountView.render("show.json", %{user: user}) + result = AccountView.render("show.json", %{user: user, force: true}) assert result.display_name == " username " end test "never display nil user follow counts" do user = insert(:user, following_count: 0, follower_count: 0) - result = AccountView.render("show.json", %{user: user}) + result = AccountView.render("show.json", %{user: user, force: true}) assert result.following_count == 0 assert result.followers_count == 0 @@ -375,7 +391,7 @@ test "shows when follows/followers stats are hidden and sets follow/follower cou followers_count: 0, following_count: 0, pleroma: %{hide_follows_count: true, hide_followers_count: true} - } = AccountView.render("show.json", %{user: user}) + } = AccountView.render("show.json", %{user: user, force: true}) end test "shows when follows/followers are hidden" do @@ -388,7 +404,7 @@ test "shows when follows/followers are hidden" do followers_count: 1, following_count: 1, pleroma: %{hide_follows: true, hide_followers: true} - } = AccountView.render("show.json", %{user: user}) + } = AccountView.render("show.json", %{user: user, force: true}) end test "shows actual follower/following count to the account owner" do @@ -531,7 +547,7 @@ test "uses mediaproxy urls when it's enabled" do emoji: %{"joker_smile" => "https://evil.website/society.png"} ) - AccountView.render("show.json", %{user: user}) + AccountView.render("show.json", %{user: user, force: true}) |> Enum.all?(fn {key, url} when key in [:avatar, :avatar_static, :header, :header_static] -> String.starts_with?(url, Pleroma.Web.base_url()) diff --git a/test/web/mastodon_api/views/status_view_test.exs b/test/web/mastodon_api/views/status_view_test.exs index fa26b3129..d44e3f6e6 100644 --- a/test/web/mastodon_api/views/status_view_test.exs +++ b/test/web/mastodon_api/views/status_view_test.exs @@ -177,7 +177,7 @@ test "a note activity" do id: to_string(note.id), uri: object_data["id"], url: Pleroma.Web.Router.Helpers.o_status_url(Pleroma.Web.Endpoint, :notice, note), - account: AccountView.render("show.json", %{user: user}), + account: AccountView.render("show.json", %{user: user, force: true}), in_reply_to_id: nil, in_reply_to_account_id: nil, card: nil, diff --git a/test/web/pleroma_api/controllers/chat_controller_test.exs b/test/web/pleroma_api/controllers/chat_controller_test.exs index 82e16741d..d71e80d03 100644 --- a/test/web/pleroma_api/controllers/chat_controller_test.exs +++ b/test/web/pleroma_api/controllers/chat_controller_test.exs @@ -332,5 +332,27 @@ test "it return a list of chats the current user is participating in, in descend chat_1.id |> to_string() ] end + + test "it is not affected by :restrict_unauthenticated setting (issue #1973)", %{ + conn: conn, + user: user + } do + clear_config([:restrict_unauthenticated, :profiles, :local], true) + clear_config([:restrict_unauthenticated, :profiles, :remote], true) + + user2 = insert(:user) + user3 = insert(:user, local: false) + + {:ok, _chat_12} = Chat.get_or_create(user.id, user2.ap_id) + {:ok, _chat_13} = Chat.get_or_create(user.id, user3.ap_id) + + result = + conn + |> get("/api/v1/pleroma/chats") + |> json_response_and_validate_schema(200) + + account_ids = Enum.map(result, &get_in(&1, ["account", "id"])) + assert Enum.sort(account_ids) == Enum.sort([user2.id, user3.id]) + end end end diff --git a/test/web/pleroma_api/views/chat_view_test.exs b/test/web/pleroma_api/views/chat_view_test.exs index 14eecb1bd..46d47cd4f 100644 --- a/test/web/pleroma_api/views/chat_view_test.exs +++ b/test/web/pleroma_api/views/chat_view_test.exs @@ -26,7 +26,7 @@ test "it represents a chat" do assert represented_chat == %{ id: "#{chat.id}", - account: AccountView.render("show.json", user: recipient), + account: AccountView.render("show.json", user: recipient, force: true), unread: 0, last_message: nil, updated_at: Utils.to_masto_date(chat.updated_at) diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index 368533292..5bb2d8d89 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -4,11 +4,11 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do use Pleroma.DataCase + alias Pleroma.Repo alias Pleroma.Tests.ObanHelpers alias Pleroma.User alias Pleroma.UserInviteToken - alias Pleroma.Web.MastodonAPI.AccountView alias Pleroma.Web.TwitterAPI.TwitterAPI setup_all do @@ -27,13 +27,10 @@ test "it registers a new user and returns the user." do {:ok, user} = TwitterAPI.register_user(data) - fetched_user = User.get_cached_by_nickname("lain") - - assert AccountView.render("show.json", %{user: user}) == - AccountView.render("show.json", %{user: fetched_user}) + assert user == User.get_cached_by_nickname("lain") end - test "it registers a new user with empty string in bio and returns the user." do + test "it registers a new user with empty string in bio and returns the user" do data = %{ :username => "lain", :email => "lain@wired.jp", @@ -45,10 +42,7 @@ test "it registers a new user with empty string in bio and returns the user." do {:ok, user} = TwitterAPI.register_user(data) - fetched_user = User.get_cached_by_nickname("lain") - - assert AccountView.render("show.json", %{user: user}) == - AccountView.render("show.json", %{user: fetched_user}) + assert user == User.get_cached_by_nickname("lain") end test "it sends confirmation email if :account_activation_required is specified in instance config" do @@ -134,13 +128,10 @@ test "returns user on success" do {:ok, user} = TwitterAPI.register_user(data) - fetched_user = User.get_cached_by_nickname("vinny") + assert user == User.get_cached_by_nickname("vinny") + invite = Repo.get_by(UserInviteToken, token: invite.token) - assert invite.used == true - - assert AccountView.render("show.json", %{user: user}) == - AccountView.render("show.json", %{user: fetched_user}) end test "returns error on invalid token" do @@ -197,10 +188,8 @@ test "returns error on expired token" do check_fn = fn invite -> data = Map.put(data, :token, invite.token) {:ok, user} = TwitterAPI.register_user(data) - fetched_user = User.get_cached_by_nickname("vinny") - assert AccountView.render("show.json", %{user: user}) == - AccountView.render("show.json", %{user: fetched_user}) + assert user == User.get_cached_by_nickname("vinny") end {:ok, data: data, check_fn: check_fn} @@ -260,14 +249,11 @@ test "returns user on success, after him registration fails" do } {:ok, user} = TwitterAPI.register_user(data) - fetched_user = User.get_cached_by_nickname("vinny") + assert user == User.get_cached_by_nickname("vinny") + invite = Repo.get_by(UserInviteToken, token: invite.token) - assert invite.used == true - assert AccountView.render("show.json", %{user: user}) == - AccountView.render("show.json", %{user: fetched_user}) - data = %{ :username => "GrimReaper", :email => "death@reapers.afterlife", @@ -302,13 +288,10 @@ test "returns user on success" do } {:ok, user} = TwitterAPI.register_user(data) - fetched_user = User.get_cached_by_nickname("vinny") + assert user == User.get_cached_by_nickname("vinny") + invite = Repo.get_by(UserInviteToken, token: invite.token) - refute invite.used - - assert AccountView.render("show.json", %{user: user}) == - AccountView.render("show.json", %{user: fetched_user}) end test "error after max uses" do @@ -327,13 +310,11 @@ test "error after max uses" do } {:ok, user} = TwitterAPI.register_user(data) - fetched_user = User.get_cached_by_nickname("vinny") + assert user == User.get_cached_by_nickname("vinny") + invite = Repo.get_by(UserInviteToken, token: invite.token) assert invite.used == true - assert AccountView.render("show.json", %{user: user}) == - AccountView.render("show.json", %{user: fetched_user}) - data = %{ :username => "GrimReaper", :email => "death@reapers.afterlife", From 7045db5a506aa672d141dc33cfadd53208b4d067 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 22 Jul 2020 11:27:52 -0500 Subject: [PATCH 131/236] Fix linkify ConfigDB migration --- priv/repo/migrations/20200716195806_autolinker_to_linkify.exs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs b/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs index 9ec4203eb..782a3cc55 100644 --- a/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs +++ b/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs @@ -23,7 +23,7 @@ defp move_config(%{} = old, %{} = new) do defp maybe_get_params() do with %ConfigDB{value: opts} <- ConfigDB.get_by_params(@autolinker_path), - %{} = opts <- transform_opts(opts), + opts <- transform_opts(opts), %{} = linkify_params <- Map.put(@linkify_path, :value, opts) do {:ok, {@autolinker_path, linkify_params}} end @@ -33,5 +33,6 @@ defp transform_opts(opts) when is_list(opts) do opts |> Enum.into(%{}) |> Map.take(@compat_opts) + |> Map.to_list() end end From 67389b77af7c6f9ccd18ec385b6ef4fd102e3eb6 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 22 Jul 2020 13:10:10 -0500 Subject: [PATCH 132/236] Add AutolinkerToLinkify migration test --- .../20200716195806_autolinker_to_linkify.exs | 4 +- ...00716195806_autolinker_to_linkify_test.exs | 68 +++++++++++++++++++ 2 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 test/migrations/20200716195806_autolinker_to_linkify_test.exs diff --git a/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs b/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs index 782a3cc55..570acba84 100644 --- a/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs +++ b/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs @@ -1,7 +1,5 @@ defmodule Pleroma.Repo.Migrations.AutolinkerToLinkify do use Ecto.Migration - - alias Pleroma.Repo alias Pleroma.ConfigDB @autolinker_path %{group: :auto_linker, key: :opts} @@ -29,7 +27,7 @@ defp maybe_get_params() do end end - defp transform_opts(opts) when is_list(opts) do + def transform_opts(opts) when is_list(opts) do opts |> Enum.into(%{}) |> Map.take(@compat_opts) diff --git a/test/migrations/20200716195806_autolinker_to_linkify_test.exs b/test/migrations/20200716195806_autolinker_to_linkify_test.exs new file mode 100644 index 000000000..362cf5535 --- /dev/null +++ b/test/migrations/20200716195806_autolinker_to_linkify_test.exs @@ -0,0 +1,68 @@ +defmodule Pleroma.Repo.Migrations.AutolinkerToLinkifyTest do + use Pleroma.DataCase + import Pleroma.Factory + alias Pleroma.ConfigDB + + setup_all do + [{module, _}] = + Code.require_file("20200716195806_autolinker_to_linkify.exs", "priv/repo/migrations") + + {:ok, %{migration: module}} + end + + test "change/0 converts auto_linker opts for Pleroma.Formatter", %{migration: migration} do + autolinker_opts = [ + extra: true, + validate_tld: true, + class: false, + strip_prefix: false, + new_window: false, + rel: "ugc" + ] + + insert(:config, group: :auto_linker, key: :opts, value: autolinker_opts) + + migration.change() + + assert nil == ConfigDB.get_by_params(%{group: :auto_linker, key: :opts}) + + %{value: new_opts} = ConfigDB.get_by_params(%{group: :pleroma, key: Pleroma.Formatter}) + + assert new_opts == [ + class: false, + extra: true, + new_window: false, + rel: "ugc", + strip_prefix: false + ] + + {text, _mentions, []} = + Pleroma.Formatter.linkify( + "https://www.businessinsider.com/walmart-will-close-stores-on-thanksgiving-ending-black-friday-tradition-2020-7\n\nOmg will COVID finally end Black Friday???" + ) + + assert text == + "https://www.businessinsider.com/walmart-will-close-stores-on-thanksgiving-ending-black-friday-tradition-2020-7\n\nOmg will COVID finally end Black Friday???" + end + + test "transform_opts/1 returns a list of compatible opts", %{migration: migration} do + old_opts = [ + extra: true, + validate_tld: true, + class: false, + strip_prefix: false, + new_window: false, + rel: "ugc" + ] + + expected_opts = [ + class: false, + extra: true, + new_window: false, + rel: "ugc", + strip_prefix: false + ] + + assert migration.transform_opts(old_opts) == expected_opts + end +end From b87a1f8eaff7e5663fd4b84b43be350754eb37d2 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 22 Jul 2020 13:45:15 -0500 Subject: [PATCH 133/236] Refactor require_migration/1 into a test helper function --- .../20200716195806_autolinker_to_linkify_test.exs | 8 ++------ test/support/helpers.ex | 5 +++++ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/test/migrations/20200716195806_autolinker_to_linkify_test.exs b/test/migrations/20200716195806_autolinker_to_linkify_test.exs index 362cf5535..063dab0f7 100644 --- a/test/migrations/20200716195806_autolinker_to_linkify_test.exs +++ b/test/migrations/20200716195806_autolinker_to_linkify_test.exs @@ -1,14 +1,10 @@ defmodule Pleroma.Repo.Migrations.AutolinkerToLinkifyTest do use Pleroma.DataCase import Pleroma.Factory + import Pleroma.Tests.Helpers, only: [require_migration: 1] alias Pleroma.ConfigDB - setup_all do - [{module, _}] = - Code.require_file("20200716195806_autolinker_to_linkify.exs", "priv/repo/migrations") - - {:ok, %{migration: module}} - end + setup_all do: require_migration("20200716195806_autolinker_to_linkify") test "change/0 converts auto_linker opts for Pleroma.Formatter", %{migration: migration} do autolinker_opts = [ diff --git a/test/support/helpers.ex b/test/support/helpers.ex index 26281b45e..5cbf2e291 100644 --- a/test/support/helpers.ex +++ b/test/support/helpers.ex @@ -32,6 +32,11 @@ defmacro clear_config(config_path, temp_setting) do end end + def require_migration(migration_name) do + [{module, _}] = Code.require_file("#{migration_name}.exs", "priv/repo/migrations") + {:ok, %{migration: module}} + end + defmacro __using__(_opts) do quote do import Pleroma.Tests.Helpers, From c7a0016f9f4731c58a7989c7ee10e19d3f90d2eb Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 22 Jul 2020 14:18:09 -0500 Subject: [PATCH 134/236] Migration to fix malformed Pleroma.Formatter config --- ...2185515_fix_malformed_formatter_config.exs | 26 ++++++++ ...15_fix_malformed_formatter_config_test.exs | 62 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 priv/repo/migrations/20200722185515_fix_malformed_formatter_config.exs create mode 100644 test/migrations/20200722185515_fix_malformed_formatter_config_test.exs diff --git a/priv/repo/migrations/20200722185515_fix_malformed_formatter_config.exs b/priv/repo/migrations/20200722185515_fix_malformed_formatter_config.exs new file mode 100644 index 000000000..77b760825 --- /dev/null +++ b/priv/repo/migrations/20200722185515_fix_malformed_formatter_config.exs @@ -0,0 +1,26 @@ +defmodule Pleroma.Repo.Migrations.FixMalformedFormatterConfig do + use Ecto.Migration + alias Pleroma.ConfigDB + + @config_path %{group: :pleroma, key: Pleroma.Formatter} + + def change do + with %ConfigDB{value: %{} = opts} <- ConfigDB.get_by_params(@config_path), + fixed_opts <- Map.to_list(opts) do + fix_config(fixed_opts) + else + _ -> :skipped + end + end + + defp fix_config(fixed_opts) when is_list(fixed_opts) do + {:ok, _} = + ConfigDB.update_or_create(%{ + group: :pleroma, + key: Pleroma.Formatter, + value: fixed_opts + }) + + :ok + end +end diff --git a/test/migrations/20200722185515_fix_malformed_formatter_config_test.exs b/test/migrations/20200722185515_fix_malformed_formatter_config_test.exs new file mode 100644 index 000000000..9e8f997a0 --- /dev/null +++ b/test/migrations/20200722185515_fix_malformed_formatter_config_test.exs @@ -0,0 +1,62 @@ +defmodule Pleroma.Repo.Migrations.FixMalformedFormatterConfigTest do + use Pleroma.DataCase + import Pleroma.Factory + import Pleroma.Tests.Helpers, only: [require_migration: 1] + alias Pleroma.ConfigDB + + setup_all do: require_migration("20200722185515_fix_malformed_formatter_config") + + test "change/0 converts a map into a list", %{migration: migration} do + incorrect_opts = %{ + class: false, + extra: true, + new_window: false, + rel: "ugc", + strip_prefix: false + } + + insert(:config, group: :pleroma, key: Pleroma.Formatter, value: incorrect_opts) + + assert :ok == migration.change() + + %{value: new_opts} = ConfigDB.get_by_params(%{group: :pleroma, key: Pleroma.Formatter}) + + assert new_opts == [ + class: false, + extra: true, + new_window: false, + rel: "ugc", + strip_prefix: false + ] + + {text, _mentions, []} = + Pleroma.Formatter.linkify( + "https://www.businessinsider.com/walmart-will-close-stores-on-thanksgiving-ending-black-friday-tradition-2020-7\n\nOmg will COVID finally end Black Friday???" + ) + + assert text == + "https://www.businessinsider.com/walmart-will-close-stores-on-thanksgiving-ending-black-friday-tradition-2020-7\n\nOmg will COVID finally end Black Friday???" + end + + test "change/0 skips if Pleroma.Formatter config is already a list", %{migration: migration} do + opts = [ + class: false, + extra: true, + new_window: false, + rel: "ugc", + strip_prefix: false + ] + + insert(:config, group: :pleroma, key: Pleroma.Formatter, value: opts) + + assert :skipped == migration.change() + + %{value: new_opts} = ConfigDB.get_by_params(%{group: :pleroma, key: Pleroma.Formatter}) + + assert new_opts == opts + end + + test "change/0 skips if Pleroma.Formatter is empty", %{migration: migration} do + assert :skipped == migration.change() + end +end From b6488a4db4accc6cda716c5fdfb03f5a30ddf3d4 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 22 Jul 2020 16:01:55 -0500 Subject: [PATCH 135/236] Update linkify migration tests to use config from ConfigDB --- test/formatter_test.exs | 1 + ...20200716195806_autolinker_to_linkify_test.exs | 16 ++++++++++------ ...85515_fix_malformed_formatter_config_test.exs | 12 ++++++++---- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/test/formatter_test.exs b/test/formatter_test.exs index 8713ab9c2..f066bd50a 100644 --- a/test/formatter_test.exs +++ b/test/formatter_test.exs @@ -10,6 +10,7 @@ defmodule Pleroma.FormatterTest do import Pleroma.Factory setup_all do + clear_config(Pleroma.Formatter) Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) :ok end diff --git a/test/migrations/20200716195806_autolinker_to_linkify_test.exs b/test/migrations/20200716195806_autolinker_to_linkify_test.exs index 063dab0f7..250d11c61 100644 --- a/test/migrations/20200716195806_autolinker_to_linkify_test.exs +++ b/test/migrations/20200716195806_autolinker_to_linkify_test.exs @@ -1,9 +1,10 @@ defmodule Pleroma.Repo.Migrations.AutolinkerToLinkifyTest do use Pleroma.DataCase import Pleroma.Factory - import Pleroma.Tests.Helpers, only: [require_migration: 1] + import Pleroma.Tests.Helpers alias Pleroma.ConfigDB + setup do: clear_config(Pleroma.Formatter) setup_all do: require_migration("20200716195806_autolinker_to_linkify") test "change/0 converts auto_linker opts for Pleroma.Formatter", %{migration: migration} do @@ -13,7 +14,7 @@ test "change/0 converts auto_linker opts for Pleroma.Formatter", %{migration: mi class: false, strip_prefix: false, new_window: false, - rel: "ugc" + rel: "testing" ] insert(:config, group: :auto_linker, key: :opts, value: autolinker_opts) @@ -28,17 +29,20 @@ test "change/0 converts auto_linker opts for Pleroma.Formatter", %{migration: mi class: false, extra: true, new_window: false, - rel: "ugc", + rel: "testing", strip_prefix: false ] + Pleroma.Config.put(Pleroma.Formatter, new_opts) + assert new_opts == Pleroma.Config.get(Pleroma.Formatter) + {text, _mentions, []} = Pleroma.Formatter.linkify( "https://www.businessinsider.com/walmart-will-close-stores-on-thanksgiving-ending-black-friday-tradition-2020-7\n\nOmg will COVID finally end Black Friday???" ) assert text == - "https://www.businessinsider.com/walmart-will-close-stores-on-thanksgiving-ending-black-friday-tradition-2020-7\n\nOmg will COVID finally end Black Friday???" + "https://www.businessinsider.com/walmart-will-close-stores-on-thanksgiving-ending-black-friday-tradition-2020-7\n\nOmg will COVID finally end Black Friday???" end test "transform_opts/1 returns a list of compatible opts", %{migration: migration} do @@ -48,14 +52,14 @@ test "transform_opts/1 returns a list of compatible opts", %{migration: migratio class: false, strip_prefix: false, new_window: false, - rel: "ugc" + rel: "qqq" ] expected_opts = [ class: false, extra: true, new_window: false, - rel: "ugc", + rel: "qqq", strip_prefix: false ] diff --git a/test/migrations/20200722185515_fix_malformed_formatter_config_test.exs b/test/migrations/20200722185515_fix_malformed_formatter_config_test.exs index 9e8f997a0..d3490478e 100644 --- a/test/migrations/20200722185515_fix_malformed_formatter_config_test.exs +++ b/test/migrations/20200722185515_fix_malformed_formatter_config_test.exs @@ -1,9 +1,10 @@ defmodule Pleroma.Repo.Migrations.FixMalformedFormatterConfigTest do use Pleroma.DataCase import Pleroma.Factory - import Pleroma.Tests.Helpers, only: [require_migration: 1] + import Pleroma.Tests.Helpers alias Pleroma.ConfigDB + setup do: clear_config(Pleroma.Formatter) setup_all do: require_migration("20200722185515_fix_malformed_formatter_config") test "change/0 converts a map into a list", %{migration: migration} do @@ -11,7 +12,7 @@ test "change/0 converts a map into a list", %{migration: migration} do class: false, extra: true, new_window: false, - rel: "ugc", + rel: "F", strip_prefix: false } @@ -25,17 +26,20 @@ test "change/0 converts a map into a list", %{migration: migration} do class: false, extra: true, new_window: false, - rel: "ugc", + rel: "F", strip_prefix: false ] + Pleroma.Config.put(Pleroma.Formatter, new_opts) + assert new_opts == Pleroma.Config.get(Pleroma.Formatter) + {text, _mentions, []} = Pleroma.Formatter.linkify( "https://www.businessinsider.com/walmart-will-close-stores-on-thanksgiving-ending-black-friday-tradition-2020-7\n\nOmg will COVID finally end Black Friday???" ) assert text == - "https://www.businessinsider.com/walmart-will-close-stores-on-thanksgiving-ending-black-friday-tradition-2020-7\n\nOmg will COVID finally end Black Friday???" + "https://www.businessinsider.com/walmart-will-close-stores-on-thanksgiving-ending-black-friday-tradition-2020-7\n\nOmg will COVID finally end Black Friday???" end test "change/0 skips if Pleroma.Formatter config is already a list", %{migration: migration} do From 7991ddad582537f34b4964125195961e596b8687 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Thu, 23 Jul 2020 06:51:19 +0300 Subject: [PATCH 136/236] added warning to use old keys --- CHANGELOG.md | 1 + lib/pleroma/application_requirements.ex | 17 +++++++++++++++++ lib/pleroma/config/deprecation_warnings.ex | 18 ++++++++++++++++++ lib/pleroma/user.ex | 1 + test/application_requirements_test.exs | 14 ++++++++++++++ 5 files changed, 51 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d8b3efee..c0fd49341 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/). - OGP rich media parser merged with TwitterCard - Configuration: `:instance, rewrite_policy` moved to `:mrf, policies`, `:instance, :mrf_transparency` moved to `:mrf, :transparency`, `:instance, :mrf_transparency_exclusions` moved to `:mrf, :transparency_exclusions`. Old config namespace is deprecated. - Configuration: `:media_proxy, whitelist` format changed to host with scheme (e.g. `http://example.com` instead of `example.com`). Domain format is deprecated. +- **Breaking:** Configuration: `:instance, welcome_user_nickname` moved to `:welcome, :direct_message, :sender_nickname`, `:instance, :welcome_message` moved to `:welcome, :direct_message, :message`. Old config namespace is deprecated.
API Changes diff --git a/lib/pleroma/application_requirements.ex b/lib/pleroma/application_requirements.ex index 88575a498..b4d8ff23b 100644 --- a/lib/pleroma/application_requirements.ex +++ b/lib/pleroma/application_requirements.ex @@ -17,6 +17,7 @@ defmodule VerifyError, do: defexception([:message]) def verify! do :ok |> check_migrations_applied!() + |> check_welcome_message_config!() |> check_rum!() |> handle_result() end @@ -24,6 +25,22 @@ def verify! do defp handle_result(:ok), do: :ok defp handle_result({:error, message}), do: raise(VerifyError, message: message) + defp check_welcome_message_config!(:ok) do + if Pleroma.Config.get([:welcome, :email, :enabled], false) and + not Pleroma.Emails.Mailer.enabled?() do + Logger.error(""" + To send welcome email do you need to enable mail. + \nconfig :pleroma, Pleroma.Emails.Mailer, enabled: true + """) + + {:error, "The mail disabled."} + else + :ok + end + end + + defp check_welcome_message_config!(result), do: result + # Checks for pending migrations. # def check_migrations_applied!(:ok) do diff --git a/lib/pleroma/config/deprecation_warnings.ex b/lib/pleroma/config/deprecation_warnings.ex index 026871c4f..1401cbdf6 100644 --- a/lib/pleroma/config/deprecation_warnings.ex +++ b/lib/pleroma/config/deprecation_warnings.ex @@ -55,6 +55,24 @@ def warn do mrf_user_allowlist() check_old_mrf_config() check_media_proxy_whitelist_config() + check_welcome_message_config() + end + + def check_welcome_message_config do + instance_config = Pleroma.Config.get([:instance]) + + use_old_config = + Keyword.has_key?(instance_config, :welcome_user_nickname) or + Keyword.has_key?(instance_config, :welcome_message) + + if use_old_config do + Logger.error(""" + !!!DEPRECATION WARNING!!! + Your config is using old namespaces for Welcome messages configuration. You are need to change to new namespaces: + \n* `config :pleroma, :instance, welcome_user_nickname` is now `config :pleroma, :welcome, :direct_message, :sender_nickname` + \n* `config :pleroma, :instance, welcome_message` is now `config :pleroma, :welcome, :direct_message, :message` + """) + end end def check_old_mrf_config do diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 5bc256b50..95047b592 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -737,6 +737,7 @@ def send_welcome_email(%User{email: email} = user) when is_binary(email) do {:ok, :noop} end end + def send_welcome_email(_), do: {:ok, :noop} def try_send_confirmation_email(%User{} = user) do diff --git a/test/application_requirements_test.exs b/test/application_requirements_test.exs index 481cdfd73..b59a9988e 100644 --- a/test/application_requirements_test.exs +++ b/test/application_requirements_test.exs @@ -9,6 +9,20 @@ defmodule Pleroma.ApplicationRequirementsTest do alias Pleroma.Repo + describe "check_welcome_message_config!/1" do + setup do: clear_config([:welcome]) + setup do: clear_config([Pleroma.Emails.Mailer]) + + test "raises if welcome email enabled but mail disabled" do + Pleroma.Config.put([:welcome, :email, :enabled], true) + Pleroma.Config.put([Pleroma.Emails.Mailer, :enabled], false) + + assert_raise Pleroma.ApplicationRequirements.VerifyError, "The mail disabled.", fn -> + capture_log(&Pleroma.ApplicationRequirements.verify!/0) + end + end + end + describe "check_rum!" do setup_with_mocks([ {Pleroma.ApplicationRequirements, [:passthrough], From 9ea51a6de516b37341a9566d11d0110c2d87c1b6 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Thu, 23 Jul 2020 15:08:30 +0300 Subject: [PATCH 137/236] [#2791] AccountView: renamed `:force` option to `:skip_visibility_check`. --- lib/pleroma/web/activity_pub/utils.ex | 2 +- .../web/admin_api/views/account_view.ex | 2 +- lib/pleroma/web/chat_channel.ex | 2 +- .../web/mastodon_api/views/account_view.ex | 8 +++-- .../web/pleroma_api/views/chat_view.ex | 2 +- test/web/activity_pub/activity_pub_test.exs | 3 +- test/web/activity_pub/transmogrifier_test.exs | 2 +- test/web/activity_pub/utils_test.exs | 3 +- test/web/admin_api/views/report_view_test.exs | 14 ++++++--- .../mastodon_api/views/account_view_test.exs | 30 +++++++++++-------- .../mastodon_api/views/status_view_test.exs | 2 +- test/web/pleroma_api/views/chat_view_test.exs | 3 +- 12 files changed, 44 insertions(+), 29 deletions(-) diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 11c64cffd..713b0ca1f 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -729,7 +729,7 @@ defp build_flag_object(act) when is_map(act) or is_binary(act) do "actor" => AccountView.render( "show.json", - %{user: activity_actor, force: true} + %{user: activity_actor, skip_visibility_check: true} ) } diff --git a/lib/pleroma/web/admin_api/views/account_view.ex b/lib/pleroma/web/admin_api/views/account_view.ex index 4ae030b84..88fbb5315 100644 --- a/lib/pleroma/web/admin_api/views/account_view.ex +++ b/lib/pleroma/web/admin_api/views/account_view.ex @@ -105,7 +105,7 @@ def render("create-error.json", %{changeset: %Ecto.Changeset{changes: changes, e end def merge_account_views(%User{} = user) do - MastodonAPI.AccountView.render("show.json", %{user: user, force: true}) + MastodonAPI.AccountView.render("show.json", %{user: user, skip_visibility_check: true}) |> Map.merge(AdminAPI.AccountView.render("show.json", %{user: user})) end diff --git a/lib/pleroma/web/chat_channel.ex b/lib/pleroma/web/chat_channel.ex index 08d0e80f9..3b1469c19 100644 --- a/lib/pleroma/web/chat_channel.ex +++ b/lib/pleroma/web/chat_channel.ex @@ -24,7 +24,7 @@ def handle_in("new_msg", %{"text" => text}, %{assigns: %{user_name: user_name}} if String.length(text) in 1..Pleroma.Config.get([:instance, :chat_limit]) do author = User.get_cached_by_nickname(user_name) - author_json = AccountView.render("show.json", user: author, force: true) + author_json = AccountView.render("show.json", user: author, skip_visibility_check: true) message = ChatChannelState.add_message(%{text: text, author: author_json}) diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index b929d5a03..864c0417f 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -39,11 +39,12 @@ def render("index.json", %{users: users} = opts) do @doc """ Renders specified user account. - :force option skips visibility check and renders any user (local or remote) + :skip_visibility_check option skips visibility check and renders any user (local or remote) regardless of [:pleroma, :restrict_unauthenticated] setting. :for option specifies the requester and can be a User record or nil. + Only use `user: user, for: user` when `user` is the actual requester of own profile. """ - def render("show.json", %{user: _user, force: true} = opts) do + def render("show.json", %{user: _user, skip_visibility_check: true} = opts) do do_render("show.json", opts) end @@ -56,7 +57,8 @@ def render("show.json", %{user: user, for: for_user_or_nil} = opts) do end def render("show.json", _) do - raise "In order to prevent account accessibility issues, :force or :for option is required." + raise "In order to prevent account accessibility issues, " <> + ":skip_visibility_check or :for option is required." end def render("mention.json", %{user: user}) do diff --git a/lib/pleroma/web/pleroma_api/views/chat_view.ex b/lib/pleroma/web/pleroma_api/views/chat_view.ex index 2ae7c8122..04dc20d51 100644 --- a/lib/pleroma/web/pleroma_api/views/chat_view.ex +++ b/lib/pleroma/web/pleroma_api/views/chat_view.ex @@ -38,7 +38,7 @@ defp account_view_opts(opts, recipient) do if Map.has_key?(account_view_opts, :for) do account_view_opts else - Map.put(account_view_opts, :force, true) + Map.put(account_view_opts, :skip_visibility_check, true) end end end diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index 34905a928..d6eab7337 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -1179,7 +1179,8 @@ test "it can create a Flag activity", "id" => activity_ap_id, "content" => content, "published" => activity_with_object.object.data["published"], - "actor" => AccountView.render("show.json", %{user: target_account, force: true}) + "actor" => + AccountView.render("show.json", %{user: target_account, skip_visibility_check: true}) } assert %Activity{ diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 01e18eace..2d089b19b 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -710,7 +710,7 @@ test "it accepts Flag activities" do "id" => activity.data["id"], "content" => "test post", "published" => object.data["published"], - "actor" => AccountView.render("show.json", %{user: user, force: true}) + "actor" => AccountView.render("show.json", %{user: user, skip_visibility_check: true}) } message = %{ diff --git a/test/web/activity_pub/utils_test.exs b/test/web/activity_pub/utils_test.exs index ab984d486..d50213545 100644 --- a/test/web/activity_pub/utils_test.exs +++ b/test/web/activity_pub/utils_test.exs @@ -482,7 +482,8 @@ test "returns map with Flag object" do "id" => activity_ap_id, "content" => content, "published" => activity.object.data["published"], - "actor" => AccountView.render("show.json", %{user: target_account, force: true}) + "actor" => + AccountView.render("show.json", %{user: target_account, skip_visibility_check: true}) } assert %{ diff --git a/test/web/admin_api/views/report_view_test.exs b/test/web/admin_api/views/report_view_test.exs index e171509e5..5a02292be 100644 --- a/test/web/admin_api/views/report_view_test.exs +++ b/test/web/admin_api/views/report_view_test.exs @@ -24,12 +24,15 @@ test "renders a report" do content: nil, actor: Map.merge( - MastodonAPI.AccountView.render("show.json", %{user: user, force: true}), + MastodonAPI.AccountView.render("show.json", %{user: user, skip_visibility_check: true}), AdminAPI.AccountView.render("show.json", %{user: user}) ), account: Map.merge( - MastodonAPI.AccountView.render("show.json", %{user: other_user, force: true}), + MastodonAPI.AccountView.render("show.json", %{ + user: other_user, + skip_visibility_check: true + }), AdminAPI.AccountView.render("show.json", %{user: other_user}) ), statuses: [], @@ -59,12 +62,15 @@ test "includes reported statuses" do content: nil, actor: Map.merge( - MastodonAPI.AccountView.render("show.json", %{user: user, force: true}), + MastodonAPI.AccountView.render("show.json", %{user: user, skip_visibility_check: true}), AdminAPI.AccountView.render("show.json", %{user: user}) ), account: Map.merge( - MastodonAPI.AccountView.render("show.json", %{user: other_user, force: true}), + MastodonAPI.AccountView.render("show.json", %{ + user: other_user, + skip_visibility_check: true + }), AdminAPI.AccountView.render("show.json", %{user: other_user}) ), statuses: [StatusView.render("show.json", %{activity: activity})], diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index 2b18c2e43..8f37efa3c 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -95,7 +95,7 @@ test "Represent a user account" do } } - assert expected == AccountView.render("show.json", %{user: user, force: true}) + assert expected == AccountView.render("show.json", %{user: user, skip_visibility_check: true}) end test "Favicon is nil when :instances_favicons is disabled" do @@ -108,12 +108,12 @@ test "Favicon is nil when :instances_favicons is disabled" do favicon: "https://shitposter.club/plugins/Qvitter/img/gnusocial-favicons/favicon-16x16.png" } - } = AccountView.render("show.json", %{user: user, force: true}) + } = AccountView.render("show.json", %{user: user, skip_visibility_check: true}) Config.put([:instances_favicons, :enabled], false) assert %{pleroma: %{favicon: nil}} = - AccountView.render("show.json", %{user: user, force: true}) + AccountView.render("show.json", %{user: user, skip_visibility_check: true}) end test "Represent the user account for the account owner" do @@ -190,7 +190,7 @@ test "Represent a Service(bot) account" do } } - assert expected == AccountView.render("show.json", %{user: user, force: true}) + assert expected == AccountView.render("show.json", %{user: user, skip_visibility_check: true}) end test "Represent a Funkwhale channel" do @@ -199,7 +199,9 @@ test "Represent a Funkwhale channel" do "https://channels.tests.funkwhale.audio/federation/actors/compositions" ) - assert represented = AccountView.render("show.json", %{user: user, force: true}) + assert represented = + AccountView.render("show.json", %{user: user, skip_visibility_check: true}) + assert represented.acct == "compositions@channels.tests.funkwhale.audio" assert represented.url == "https://channels.tests.funkwhale.audio/channels/compositions" end @@ -224,7 +226,7 @@ test "Represent a smaller mention" do assert expected == AccountView.render("mention.json", %{user: user}) end - test "demands :for or :force option for account rendering" do + test "demands :for or :skip_visibility_check option for account rendering" do clear_config([:restrict_unauthenticated, :profiles, :local], false) user = insert(:user) @@ -232,9 +234,11 @@ test "demands :for or :force option for account rendering" do assert %{id: ^user_id} = AccountView.render("show.json", %{user: user, for: nil}) assert %{id: ^user_id} = AccountView.render("show.json", %{user: user, for: user}) - assert %{id: ^user_id} = AccountView.render("show.json", %{user: user, force: true}) - assert_raise RuntimeError, ~r/:force or :for option is required/, fn -> + assert %{id: ^user_id} = + AccountView.render("show.json", %{user: user, skip_visibility_check: true}) + + assert_raise RuntimeError, ~r/:skip_visibility_check or :for option is required/, fn -> AccountView.render("show.json", %{user: user}) end end @@ -361,13 +365,13 @@ test "returns the settings store if the requesting user is the represented user test "doesn't sanitize display names" do user = insert(:user, name: " username ") - result = AccountView.render("show.json", %{user: user, force: true}) + result = AccountView.render("show.json", %{user: user, skip_visibility_check: true}) assert result.display_name == " username " end test "never display nil user follow counts" do user = insert(:user, following_count: 0, follower_count: 0) - result = AccountView.render("show.json", %{user: user, force: true}) + result = AccountView.render("show.json", %{user: user, skip_visibility_check: true}) assert result.following_count == 0 assert result.followers_count == 0 @@ -391,7 +395,7 @@ test "shows when follows/followers stats are hidden and sets follow/follower cou followers_count: 0, following_count: 0, pleroma: %{hide_follows_count: true, hide_followers_count: true} - } = AccountView.render("show.json", %{user: user, force: true}) + } = AccountView.render("show.json", %{user: user, skip_visibility_check: true}) end test "shows when follows/followers are hidden" do @@ -404,7 +408,7 @@ test "shows when follows/followers are hidden" do followers_count: 1, following_count: 1, pleroma: %{hide_follows: true, hide_followers: true} - } = AccountView.render("show.json", %{user: user, force: true}) + } = AccountView.render("show.json", %{user: user, skip_visibility_check: true}) end test "shows actual follower/following count to the account owner" do @@ -547,7 +551,7 @@ test "uses mediaproxy urls when it's enabled" do emoji: %{"joker_smile" => "https://evil.website/society.png"} ) - AccountView.render("show.json", %{user: user, force: true}) + AccountView.render("show.json", %{user: user, skip_visibility_check: true}) |> Enum.all?(fn {key, url} when key in [:avatar, :avatar_static, :header, :header_static] -> String.starts_with?(url, Pleroma.Web.base_url()) diff --git a/test/web/mastodon_api/views/status_view_test.exs b/test/web/mastodon_api/views/status_view_test.exs index d44e3f6e6..d97d818bb 100644 --- a/test/web/mastodon_api/views/status_view_test.exs +++ b/test/web/mastodon_api/views/status_view_test.exs @@ -177,7 +177,7 @@ test "a note activity" do id: to_string(note.id), uri: object_data["id"], url: Pleroma.Web.Router.Helpers.o_status_url(Pleroma.Web.Endpoint, :notice, note), - account: AccountView.render("show.json", %{user: user, force: true}), + account: AccountView.render("show.json", %{user: user, skip_visibility_check: true}), in_reply_to_id: nil, in_reply_to_account_id: nil, card: nil, diff --git a/test/web/pleroma_api/views/chat_view_test.exs b/test/web/pleroma_api/views/chat_view_test.exs index 46d47cd4f..02484b705 100644 --- a/test/web/pleroma_api/views/chat_view_test.exs +++ b/test/web/pleroma_api/views/chat_view_test.exs @@ -26,7 +26,8 @@ test "it represents a chat" do assert represented_chat == %{ id: "#{chat.id}", - account: AccountView.render("show.json", user: recipient, force: true), + account: + AccountView.render("show.json", user: recipient, skip_visibility_check: true), unread: 0, last_message: nil, updated_at: Utils.to_masto_date(chat.updated_at) From 4bfad0b483957acf755a043f33799742997da859 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 23 Jul 2020 12:59:40 -0500 Subject: [PATCH 138/236] Support blocking via query parameters as well and document the change. --- CHANGELOG.md | 1 + .../api_spec/operations/domain_block_operation.ex | 3 +++ .../controllers/domain_block_controller.ex | 5 +++++ .../controllers/domain_block_controller_test.exs | 14 ++++++++++++++ 4 files changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75488f026..4481e8b8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - **Breaking:** Notification Settings API option for hiding push notification contents has been renamed to `hide_notification_contents` - Mastodon API: Added `pleroma.metadata.post_formats` to /api/v1/instance +- Mastodon API (legacy): Allow query parameters for `/api/v1/domain_blocks`, e.g. `/api/v1/domain_blocks?domain=badposters.zone`
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 8234394f9..1e0da8209 100644 --- a/lib/pleroma/web/api_spec/operations/domain_block_operation.ex +++ b/lib/pleroma/web/api_spec/operations/domain_block_operation.ex @@ -31,6 +31,7 @@ def index_operation do } end + # Supporting domain query parameter is deprecated in Mastodon API def create_operation do %Operation{ tags: ["domain_blocks"], @@ -45,11 +46,13 @@ def create_operation do """, operationId: "DomainBlockController.create", requestBody: domain_block_request(), + parameters: [Operation.parameter(:domain, :query, %Schema{type: :string}, "Domain name")], security: [%{"oAuth" => ["follow", "write:blocks"]}], responses: %{200 => empty_object_response()} } end + # Supporting domain query parameter is deprecated in Mastodon API def delete_operation do %Operation{ tags: ["domain_blocks"], 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 117e89426..9c2d093cd 100644 --- a/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex @@ -32,6 +32,11 @@ def create(%{assigns: %{user: blocker}, body_params: %{domain: domain}} = conn, json(conn, %{}) end + def create(%{assigns: %{user: blocker}} = conn, %{domain: domain}) do + User.block_domain(blocker, domain) + json(conn, %{}) + end + @doc "DELETE /api/v1/domain_blocks" def delete(%{assigns: %{user: blocker}, body_params: %{domain: domain}} = conn, _params) do User.unblock_domain(blocker, domain) 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 978290d62..664654500 100644 --- a/test/web/mastodon_api/controllers/domain_block_controller_test.exs +++ b/test/web/mastodon_api/controllers/domain_block_controller_test.exs @@ -32,6 +32,20 @@ test "blocking / unblocking a domain" do refute User.blocks?(user, other_user) end + test "blocking a domain via query params" do + %{user: user, conn: conn} = oauth_access(["write:blocks"]) + other_user = insert(:user, %{ap_id: "https://dogwhistle.zone/@pundit"}) + + ret_conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/domain_blocks?domain=dogwhistle.zone") + + 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) + end + test "unblocking a domain via query params" do %{user: user, conn: conn} = oauth_access(["write:blocks"]) other_user = insert(:user, %{ap_id: "https://dogwhistle.zone/@pundit"}) From 61ef1fca4bdefc1281d2ffaac8af43d0fcdb6ee4 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Fri, 24 Jul 2020 08:35:06 +0300 Subject: [PATCH 139/236] remove duplicate module --- config/test.exs | 2 ++ lib/pleroma/config/utils.ex | 17 ----------------- lib/pleroma/user/welcome_email.ex | 2 +- 3 files changed, 3 insertions(+), 18 deletions(-) delete mode 100644 lib/pleroma/config/utils.ex diff --git a/config/test.exs b/config/test.exs index abcf793e5..db0655e73 100644 --- a/config/test.exs +++ b/config/test.exs @@ -118,6 +118,8 @@ streaming_enabled: true, public_endpoint: nil +config :tzdata, :autoupdate, :disabled + if File.exists?("./config/test.secret.exs") do import_config "test.secret.exs" else diff --git a/lib/pleroma/config/utils.ex b/lib/pleroma/config/utils.ex deleted file mode 100644 index f1afbb42f..000000000 --- a/lib/pleroma/config/utils.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.Config.Utils do - alias Pleroma.Config - - def instance_name, do: Config.get([:instance, :name]) - - defp instance_notify_email do - Config.get([:instance, :notify_email]) || Config.get([:instance, :email]) - end - - def sender do - {instance_name(), instance_notify_email()} - end -end diff --git a/lib/pleroma/user/welcome_email.ex b/lib/pleroma/user/welcome_email.ex index 91a9591dd..5322000d4 100644 --- a/lib/pleroma/user/welcome_email.ex +++ b/lib/pleroma/user/welcome_email.ex @@ -11,7 +11,7 @@ defmodule Pleroma.User.WelcomeEmail do alias Pleroma.Emails alias Pleroma.User - import Pleroma.Config.Utils, only: [instance_name: 0] + import Pleroma.Config.Helpers, only: [instance_name: 0] @spec enabled?() :: boolean() def enabled?, do: Config.get([:welcome, :email, :enabled], false) From 91f3cf9bc6e8e8567d20bb859ee0bb9854a20a07 Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Fri, 24 Jul 2020 14:06:41 +0200 Subject: [PATCH 140/236] Pipeline: Add embedded object federation. --- lib/pleroma/web/activity_pub/pipeline.ex | 7 ++++ test/web/activity_pub/pipeline_test.exs | 45 ++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/lib/pleroma/web/activity_pub/pipeline.ex b/lib/pleroma/web/activity_pub/pipeline.ex index 6875c47f6..50d9016e6 100644 --- a/lib/pleroma/web/activity_pub/pipeline.ex +++ b/lib/pleroma/web/activity_pub/pipeline.ex @@ -52,6 +52,13 @@ defp maybe_federate(%Activity{} = activity, meta) do do_not_federate = meta[:do_not_federate] || !Config.get([:instance, :federating]) if !do_not_federate && local do + activity = + if object = Keyword.get(meta, :embedded_object) do + %{activity | data: Map.put(activity.data, "object", object)} + else + activity + end + Federator.publish(activity) {:ok, :federated} else diff --git a/test/web/activity_pub/pipeline_test.exs b/test/web/activity_pub/pipeline_test.exs index 8deb64501..202b5fe61 100644 --- a/test/web/activity_pub/pipeline_test.exs +++ b/test/web/activity_pub/pipeline_test.exs @@ -14,6 +14,51 @@ defmodule Pleroma.Web.ActivityPub.PipelineTest do :ok end + test "when given an `embedded_object` in meta, Federation will receive a the original activity with the `object` field set to this embedded object" do + activity = insert(:note_activity) + object = %{"id" => "1", "type" => "Love"} + meta = [local: true, embedded_object: object] + + activity_with_object = %{activity | data: Map.put(activity.data, "object", object)} + + 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, + handle_after_transaction: fn m -> 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)) + refute called(Pleroma.Web.Federator.publish(activity)) + assert_called(Pleroma.Web.Federator.publish(activity_with_object)) + end + end + test "it goes through validation, filtering, persisting, side effects and federation for local activities" do activity = insert(:note_activity) meta = [local: true] From 3d13fb05f851d127d852ee9c26afa4dab61410ad Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Fri, 24 Jul 2020 14:40:22 +0200 Subject: [PATCH 141/236] Side Effects: On undoing, put information about the undone object. --- lib/pleroma/web/activity_pub/side_effects.ex | 4 ++++ test/web/activity_pub/side_effects_test.exs | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 1d2c296a5..33bee1576 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -174,6 +174,10 @@ def handle(%{data: %{"type" => "Announce"}} = object, meta) do def handle(%{data: %{"type" => "Undo", "object" => undone_object}} = object, meta) do with undone_object <- Activity.get_by_ap_id(undone_object), :ok <- handle_undoing(undone_object) do + meta = + meta + |> Keyword.put(:embedded_object, undone_object.data) + {:ok, object, meta} end end diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index 2649b060a..d48c235c0 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -312,8 +312,13 @@ test "when activation is required", %{delete: delete, user: user} do } end - test "deletes the original block", %{block_undo: block_undo, block: block} do - {:ok, _block_undo, _} = SideEffects.handle(block_undo) + test "deletes the original block, but sets `embedded_object`", %{ + block_undo: block_undo, + block: block + } do + {:ok, _block_undo, meta} = SideEffects.handle(block_undo) + + assert meta[:embedded_object] == block.data refute Activity.get_by_id(block.id) end From 1dd6de03ee655f5247ac62fee488307c934d7378 Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Fri, 24 Jul 2020 14:54:13 +0200 Subject: [PATCH 142/236] CommonAPI Tests: Check that undoing objects federates them as embeds. --- test/web/common_api/common_api_test.exs | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 7e11fede3..313dda21b 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -624,14 +624,27 @@ test "unreacting to a status with an emoji" do user = insert(:user) other_user = insert(:user) - {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe"}) - {:ok, reaction} = CommonAPI.react_with_emoji(activity.id, user, "👍") + clear_config([:instance, :federating], true) - {:ok, unreaction} = CommonAPI.unreact_with_emoji(activity.id, user, "👍") + with_mock Pleroma.Web.Federator, + publish: fn _ -> nil end do + {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe"}) + {:ok, reaction} = CommonAPI.react_with_emoji(activity.id, user, "👍") - assert unreaction.data["type"] == "Undo" - assert unreaction.data["object"] == reaction.data["id"] - assert unreaction.local + {:ok, unreaction} = CommonAPI.unreact_with_emoji(activity.id, user, "👍") + + assert unreaction.data["type"] == "Undo" + assert unreaction.data["object"] == reaction.data["id"] + assert unreaction.local + + # On federation, it contains the undone (and deleted) object + unreaction_with_object = %{ + unreaction + | data: Map.put(unreaction.data, "object", reaction.data) + } + + assert called(Pleroma.Web.Federator.publish(unreaction_with_object)) + end end test "repeating a status" do From 9be66682369f1aa3c221d411073c20e10b5a3ac1 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 24 Jul 2020 12:05:42 -0500 Subject: [PATCH 143/236] Fix mix tasks that make HTTP calls by starting the Gun connection pool --- lib/mix/pleroma.ex | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/lib/mix/pleroma.ex b/lib/mix/pleroma.ex index 9f0bf6ecb..c2b607fb3 100644 --- a/lib/mix/pleroma.ex +++ b/lib/mix/pleroma.ex @@ -24,8 +24,10 @@ def start_pleroma do Application.put_env(:logger, :console, level: :debug) end + adapter = Application.get_env(:tesla, :adapter) + apps = - if Application.get_env(:tesla, :adapter) == Tesla.Adapter.Gun do + if adapter == Tesla.Adapter.Gun do [:gun | @apps] else [:hackney | @apps] @@ -33,11 +35,13 @@ def start_pleroma do Enum.each(apps, &Application.ensure_all_started/1) - children = [ - Pleroma.Repo, - {Pleroma.Config.TransferTask, false}, - Pleroma.Web.Endpoint - ] + children = + [ + Pleroma.Repo, + {Pleroma.Config.TransferTask, false}, + Pleroma.Web.Endpoint + ] ++ + http_children(adapter) cachex_children = Enum.map(@cachex_children, &Pleroma.Application.build_cachex(&1, [])) @@ -115,4 +119,11 @@ def mix_shell?, do: :erlang.function_exported(Mix, :shell, 0) def escape_sh_path(path) do ~S(') <> String.replace(path, ~S('), ~S(\')) <> ~S(') end + + defp http_children(Tesla.Adapter.Gun) do + Pleroma.Gun.ConnectionPool.children() ++ + [{Task, &Pleroma.HTTP.AdapterHelper.Gun.limiter_setup/0}] + end + + defp http_children(_), do: [] end From 65a1b048a8effa23eb99b1aeae3b97a7e7df3ef5 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 24 Jul 2020 12:06:56 -0500 Subject: [PATCH 144/236] Ensure Oban is available during mix tasks. Fixes: mix pleroma.user rm username --- lib/mix/pleroma.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/mix/pleroma.ex b/lib/mix/pleroma.ex index c2b607fb3..074492a46 100644 --- a/lib/mix/pleroma.ex +++ b/lib/mix/pleroma.ex @@ -39,7 +39,8 @@ def start_pleroma do [ Pleroma.Repo, {Pleroma.Config.TransferTask, false}, - Pleroma.Web.Endpoint + Pleroma.Web.Endpoint, + {Oban, Pleroma.Config.get(Oban)} ] ++ http_children(adapter) From 643664d58365c88beb8a6da9c02a15ec6c8ef48d Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Sat, 25 Jul 2020 07:09:09 +0300 Subject: [PATCH 145/236] added migrate old settings to new --- .../20200724133313_move_welcome_settings.exs | 94 ++++++++++++ ...00724133313_move_welcome_settings_test.exs | 140 ++++++++++++++++++ 2 files changed, 234 insertions(+) create mode 100644 priv/repo/migrations/20200724133313_move_welcome_settings.exs create mode 100644 test/migrations/20200724133313_move_welcome_settings_test.exs diff --git a/priv/repo/migrations/20200724133313_move_welcome_settings.exs b/priv/repo/migrations/20200724133313_move_welcome_settings.exs new file mode 100644 index 000000000..323a8fcee --- /dev/null +++ b/priv/repo/migrations/20200724133313_move_welcome_settings.exs @@ -0,0 +1,94 @@ +defmodule Pleroma.Repo.Migrations.MoveWelcomeSettings do + use Ecto.Migration + + alias Pleroma.ConfigDB + + @old_keys [:welcome_user_nickname, :welcome_message] + + def up do + with {:ok, config, {keep_values, move_values}} <- get_old_values() do + insert_welcome_settings(move_values) + update_instance_config(config, keep_values) + end + end + + def down do + with {:ok, welcome_config, revert_values} <- get_revert_values() do + revert_instance_config(revert_values) + Pleroma.Repo.delete(welcome_config) + end + end + + defp insert_welcome_settings([_ | _] = values) do + unless String.trim(values[:welcome_message]) == "" do + config_values = [ + direct_message: %{ + enabled: true, + sender_nickname: values[:welcome_user_nickname], + message: values[:welcome_message] + }, + email: %{ + enabled: false, + sender: nil, + subject: "Welcome to <%= instance_name %>", + html: "Welcome to <%= instance_name %>", + text: "Welcome to <%= instance_name %>" + } + ] + + {:ok, _} = + %ConfigDB{} + |> ConfigDB.changeset(%{group: :pleroma, key: :welcome, value: config_values}) + |> Pleroma.Repo.insert() + end + + :ok + end + + defp insert_welcome_settings(_), do: :noop + + defp revert_instance_config(%{} = revert_values) do + values = [ + welcome_user_nickname: revert_values[:sender_nickname], + welcome_message: revert_values[:message] + ] + + ConfigDB.update_or_create(%{group: :pleroma, key: :instance, value: values}) + end + + defp revert_instance_config(_), do: :noop + + defp update_instance_config(config, values) do + {:ok, _} = + config + |> ConfigDB.changeset(%{value: values}) + |> Pleroma.Repo.update() + + :ok + end + + defp get_revert_values do + config = ConfigDB.get_by_params(%{group: :pleroma, key: :welcome}) + + cond do + is_nil(config) -> {:noop, nil, nil} + true -> {:ok, config, config.value[:direct_message]} + end + end + + defp get_old_values do + config = ConfigDB.get_by_params(%{group: :pleroma, key: :instance}) + + cond do + is_nil(config) -> + {:noop, config, {}} + + is_binary(config.value[:welcome_message]) -> + {:ok, config, + {Keyword.drop(config.value, @old_keys), Keyword.take(config.value, @old_keys)}} + + true -> + {:ok, config, {Keyword.drop(config.value, @old_keys), []}} + end + end +end diff --git a/test/migrations/20200724133313_move_welcome_settings_test.exs b/test/migrations/20200724133313_move_welcome_settings_test.exs new file mode 100644 index 000000000..739f24547 --- /dev/null +++ b/test/migrations/20200724133313_move_welcome_settings_test.exs @@ -0,0 +1,140 @@ +defmodule Pleroma.Repo.Migrations.MoveWelcomeSettingsTest do + use Pleroma.DataCase + import Pleroma.Factory + import Pleroma.Tests.Helpers + alias Pleroma.ConfigDB + + setup_all do: require_migration("20200724133313_move_welcome_settings") + + describe "up/0" do + test "converts welcome settings", %{migration: migration} do + insert(:config, + group: :pleroma, + key: :instance, + value: [ + welcome_message: "Test message", + welcome_user_nickname: "jimm", + name: "Pleroma" + ] + ) + + migration.up() + instance_config = ConfigDB.get_by_params(%{group: :pleroma, key: :instance}) + welcome_config = ConfigDB.get_by_params(%{group: :pleroma, key: :welcome}) + + assert instance_config.value == [name: "Pleroma"] + + assert welcome_config.value == [ + direct_message: %{ + enabled: true, + message: "Test message", + sender_nickname: "jimm" + }, + email: %{ + enabled: false, + html: "Welcome to <%= instance_name %>", + sender: nil, + subject: "Welcome to <%= instance_name %>", + text: "Welcome to <%= instance_name %>" + } + ] + end + + test "does nothing when message empty", %{migration: migration} do + insert(:config, + group: :pleroma, + key: :instance, + value: [ + welcome_message: "", + welcome_user_nickname: "jimm", + name: "Pleroma" + ] + ) + + migration.up() + instance_config = ConfigDB.get_by_params(%{group: :pleroma, key: :instance}) + refute ConfigDB.get_by_params(%{group: :pleroma, key: :welcome}) + assert instance_config.value == [name: "Pleroma"] + end + + test "does nothing when welcome_message not set", %{migration: migration} do + insert(:config, + group: :pleroma, + key: :instance, + value: [welcome_user_nickname: "jimm", name: "Pleroma"] + ) + + migration.up() + instance_config = ConfigDB.get_by_params(%{group: :pleroma, key: :instance}) + refute ConfigDB.get_by_params(%{group: :pleroma, key: :welcome}) + assert instance_config.value == [name: "Pleroma"] + end + end + + describe "down/0" do + test "revert new settings to old when instance setting not exists", %{migration: migration} do + insert(:config, + group: :pleroma, + key: :welcome, + value: [ + direct_message: %{ + enabled: true, + message: "Test message", + sender_nickname: "jimm" + }, + email: %{ + enabled: false, + html: "Welcome to <%= instance_name %>", + sender: nil, + subject: "Welcome to <%= instance_name %>", + text: "Welcome to <%= instance_name %>" + } + ] + ) + + migration.down() + + refute ConfigDB.get_by_params(%{group: :pleroma, key: :welcome}) + instance_config = ConfigDB.get_by_params(%{group: :pleroma, key: :instance}) + + assert instance_config.value == [ + welcome_user_nickname: "jimm", + welcome_message: "Test message" + ] + end + + test "revert new settings to old when instance setting exists", %{migration: migration} do + insert(:config, group: :pleroma, key: :instance, value: [name: "Pleroma App"]) + + insert(:config, + group: :pleroma, + key: :welcome, + value: [ + direct_message: %{ + enabled: true, + message: "Test message", + sender_nickname: "jimm" + }, + email: %{ + enabled: false, + html: "Welcome to <%= instance_name %>", + sender: nil, + subject: "Welcome to <%= instance_name %>", + text: "Welcome to <%= instance_name %>" + } + ] + ) + + migration.down() + + refute ConfigDB.get_by_params(%{group: :pleroma, key: :welcome}) + instance_config = ConfigDB.get_by_params(%{group: :pleroma, key: :instance}) + + assert instance_config.value == [ + name: "Pleroma App", + welcome_user_nickname: "jimm", + welcome_message: "Test message" + ] + end + end +end From 4d80cf540913cddbf86a89f94ea75c6c12d8376b Mon Sep 17 00:00:00 2001 From: Angelina Filippova Date: Sun, 26 Jul 2020 01:48:50 +0300 Subject: [PATCH 146/236] Update types in Pleroma.Formatter group --- config/description.exs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/description.exs b/config/description.exs index e4850218e..a5e66f3fb 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2235,13 +2235,13 @@ children: [ %{ key: :class, - type: [:string, false], + type: [:string, :boolean], description: "Specify the class to be added to the generated link. Disable to clear.", suggestions: ["auto-linker", false] }, %{ key: :rel, - type: [:string, false], + type: [:string, :boolean], description: "Override the rel attribute. Disable to clear.", suggestions: ["ugc", "noopener noreferrer", false] }, @@ -2252,7 +2252,7 @@ }, %{ key: :truncate, - type: [:integer, false], + type: [:integer, :boolean], description: "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`", suggestions: [15, false] From b31844d6e01fc8bea4ecbe93b072846ca4309e88 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 26 Jul 2020 13:54:56 +0000 Subject: [PATCH 147/236] OpenAPI: Replace actor_id by account_id to follow ChatMessage schema --- lib/pleroma/web/api_spec/operations/chat_operation.ex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/api_spec/operations/chat_operation.ex b/lib/pleroma/web/api_spec/operations/chat_operation.ex index cf299bfc2..1a5b05899 100644 --- a/lib/pleroma/web/api_spec/operations/chat_operation.ex +++ b/lib/pleroma/web/api_spec/operations/chat_operation.ex @@ -300,11 +300,11 @@ def chat_messages_response do "content" => "Check this out :firefox:", "id" => "13", "chat_id" => "1", - "actor_id" => "someflakeid", + "account_id" => "someflakeid", "unread" => false }, %{ - "actor_id" => "someflakeid", + "account_id" => "someflakeid", "content" => "Whats' up?", "id" => "12", "chat_id" => "1", @@ -337,7 +337,7 @@ def chat_message_create do def mark_as_read do %Schema{ - title: "MarkAsReadRequest", + title: "MarkAsReadRequest",Update chat_operation.ex description: "POST body for marking a number of chat messages as read", type: :object, required: [:last_read_id], From 6107440ea0da3a9e59576a86a9dab50acd83936e Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 26 Jul 2020 13:59:46 +0000 Subject: [PATCH 148/236] OpenAPI: remove accidentally pasted buffer data --- lib/pleroma/web/api_spec/operations/chat_operation.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/operations/chat_operation.ex b/lib/pleroma/web/api_spec/operations/chat_operation.ex index 1a5b05899..b1a0d26ab 100644 --- a/lib/pleroma/web/api_spec/operations/chat_operation.ex +++ b/lib/pleroma/web/api_spec/operations/chat_operation.ex @@ -337,7 +337,7 @@ def chat_message_create do def mark_as_read do %Schema{ - title: "MarkAsReadRequest",Update chat_operation.ex + title: "MarkAsReadRequest", description: "POST body for marking a number of chat messages as read", type: :object, required: [:last_read_id], From d4fbec62a37f229108a4ae5ef069042a8aa4aa22 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Sun, 26 Jul 2020 19:18:21 +0300 Subject: [PATCH 149/236] ReverseProxy: Fix a gun connection leak when there is an error with no body - Modify `close/1` function to do the same thing it does for hackney, which is - close the client rather than the whole connection - Release the connection when there is no body to chunk --- lib/pleroma/reverse_proxy/client/tesla.ex | 9 ++++++--- lib/pleroma/reverse_proxy/reverse_proxy.ex | 3 +++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/reverse_proxy/client/tesla.ex b/lib/pleroma/reverse_proxy/client/tesla.ex index 65785445d..84addc404 100644 --- a/lib/pleroma/reverse_proxy/client/tesla.ex +++ b/lib/pleroma/reverse_proxy/client/tesla.ex @@ -5,6 +5,8 @@ defmodule Pleroma.ReverseProxy.Client.Tesla do @behaviour Pleroma.ReverseProxy.Client + alias Pleroma.Gun.ConnectionPool + @type headers() :: [{String.t(), String.t()}] @type status() :: pos_integer() @@ -31,6 +33,8 @@ def request(method, url, headers, body, opts \\ []) do if is_map(response.body) and method != :head do {:ok, response.status, response.headers, response.body} else + conn_pid = response.opts[:adapter][:conn] + ConnectionPool.release_conn(conn_pid) {:ok, response.status, response.headers} end else @@ -48,7 +52,7 @@ def stream_body(%{pid: pid, opts: opts, fin: true}) do # if there were redirects we need to checkout old conn conn = opts[:old_conn] || opts[:conn] - if conn, do: :ok = Pleroma.Gun.ConnectionPool.release_conn(conn) + if conn, do: :ok = ConnectionPool.release_conn(conn) :done end @@ -74,8 +78,7 @@ defp read_chunk!(%{pid: pid, stream: stream, opts: opts}) do @impl true @spec close(map) :: :ok | no_return() def close(%{pid: pid}) do - adapter = check_adapter() - adapter.close(pid) + ConnectionPool.release_conn(pid) end defp check_adapter do diff --git a/lib/pleroma/reverse_proxy/reverse_proxy.ex b/lib/pleroma/reverse_proxy/reverse_proxy.ex index 28ad4c846..0de4e2309 100644 --- a/lib/pleroma/reverse_proxy/reverse_proxy.ex +++ b/lib/pleroma/reverse_proxy/reverse_proxy.ex @@ -165,6 +165,9 @@ defp request(method, url, headers, opts) do {:ok, code, _, _} -> {:error, {:invalid_http_response, code}} + {:ok, code, _} -> + {:error, {:invalid_http_response, code}} + {:error, error} -> {:error, error} end From 6bf8eee5f90d27d81e645cacfff60b001316f5cd Mon Sep 17 00:00:00 2001 From: rinpatch Date: Sun, 26 Jul 2020 20:44:26 +0300 Subject: [PATCH 150/236] ReverseProxy tesla client: remove handling of old_conn This is no longer relevant because we use a custom FollowRedirects middleware now --- lib/pleroma/reverse_proxy/client/tesla.ex | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/lib/pleroma/reverse_proxy/client/tesla.ex b/lib/pleroma/reverse_proxy/client/tesla.ex index 84addc404..d5a339681 100644 --- a/lib/pleroma/reverse_proxy/client/tesla.ex +++ b/lib/pleroma/reverse_proxy/client/tesla.ex @@ -45,15 +45,8 @@ def request(method, url, headers, body, opts \\ []) do @impl true @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 - 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 = ConnectionPool.release_conn(conn) - + def stream_body(%{pid: pid, fin: true}) do + ConnectionPool.release_conn(pid) :done end From 0d5d1c62efa94ea8fd204dbe4a77073b0374cad4 Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 27 Jul 2020 12:24:41 +0000 Subject: [PATCH 151/236] Apply 1 suggestion(s) to 1 file(s) --- lib/pleroma/config/deprecation_warnings.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/config/deprecation_warnings.ex b/lib/pleroma/config/deprecation_warnings.ex index 1401cbdf6..0f52eb210 100644 --- a/lib/pleroma/config/deprecation_warnings.ex +++ b/lib/pleroma/config/deprecation_warnings.ex @@ -68,7 +68,7 @@ def check_welcome_message_config do if use_old_config do Logger.error(""" !!!DEPRECATION WARNING!!! - Your config is using old namespaces for Welcome messages configuration. You are need to change to new namespaces: + Your config is using the old namespace for Welcome messages configuration. You need to change to the new namespace: \n* `config :pleroma, :instance, welcome_user_nickname` is now `config :pleroma, :welcome, :direct_message, :sender_nickname` \n* `config :pleroma, :instance, welcome_message` is now `config :pleroma, :welcome, :direct_message, :message` """) From 9e6f4694dd21f92bb2292e819d0f7f1cad149887 Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 27 Jul 2020 16:39:50 +0200 Subject: [PATCH 152/236] Pipeline: Unify embedded_object / object_data, move to validator. --- lib/pleroma/web/activity_pub/object_validator.ex | 7 +++++++ lib/pleroma/web/activity_pub/pipeline.ex | 2 +- lib/pleroma/web/activity_pub/side_effects.ex | 4 ---- test/web/activity_pub/pipeline_test.exs | 4 ++-- test/web/activity_pub/side_effects_test.exs | 5 ++--- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index df926829c..0dcc7be4d 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -9,6 +9,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do the system. """ + alias Pleroma.Activity alias Pleroma.EctoType.ActivityPub.ObjectValidators alias Pleroma.Object alias Pleroma.User @@ -71,6 +72,12 @@ def validate(%{"type" => "Undo"} = object, meta) do |> UndoValidator.cast_and_validate() |> Ecto.Changeset.apply_action(:insert) do object = stringify_keys(object) + undone_object = Activity.get_by_ap_id(object["object"]) + + meta = + meta + |> Keyword.put(:object_data, undone_object.data) + {:ok, object, meta} end end diff --git a/lib/pleroma/web/activity_pub/pipeline.ex b/lib/pleroma/web/activity_pub/pipeline.ex index 50d9016e6..36e325c37 100644 --- a/lib/pleroma/web/activity_pub/pipeline.ex +++ b/lib/pleroma/web/activity_pub/pipeline.ex @@ -53,7 +53,7 @@ defp maybe_federate(%Activity{} = activity, meta) do if !do_not_federate && local do activity = - if object = Keyword.get(meta, :embedded_object) do + if object = Keyword.get(meta, :object_data) do %{activity | data: Map.put(activity.data, "object", object)} else activity diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 33bee1576..1d2c296a5 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -174,10 +174,6 @@ def handle(%{data: %{"type" => "Announce"}} = object, meta) do def handle(%{data: %{"type" => "Undo", "object" => undone_object}} = object, meta) do with undone_object <- Activity.get_by_ap_id(undone_object), :ok <- handle_undoing(undone_object) do - meta = - meta - |> Keyword.put(:embedded_object, undone_object.data) - {:ok, object, meta} end end diff --git a/test/web/activity_pub/pipeline_test.exs b/test/web/activity_pub/pipeline_test.exs index 202b5fe61..f2a231eaf 100644 --- a/test/web/activity_pub/pipeline_test.exs +++ b/test/web/activity_pub/pipeline_test.exs @@ -14,10 +14,10 @@ defmodule Pleroma.Web.ActivityPub.PipelineTest do :ok end - test "when given an `embedded_object` in meta, Federation will receive a the original activity with the `object` field set to this embedded object" do + test "when given an `object_data` in meta, Federation will receive a the original activity with the `object` field set to this embedded object" do activity = insert(:note_activity) object = %{"id" => "1", "type" => "Love"} - meta = [local: true, embedded_object: object] + meta = [local: true, object_data: object] activity_with_object = %{activity | data: Map.put(activity.data, "object", object)} diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index d48c235c0..4a08eb7ee 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -312,13 +312,12 @@ test "when activation is required", %{delete: delete, user: user} do } end - test "deletes the original block, but sets `embedded_object`", %{ + test "deletes the original block", %{ block_undo: block_undo, block: block } do - {:ok, _block_undo, meta} = SideEffects.handle(block_undo) + {:ok, _block_undo, _meta} = SideEffects.handle(block_undo) - assert meta[:embedded_object] == block.data refute Activity.get_by_id(block.id) end From 4a6389316dac53c1ca2ec36d160690476d881185 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Mon, 27 Jul 2020 17:59:13 +0200 Subject: [PATCH 153/236] masto_fe_view: Remove @default_settings --- lib/pleroma/web/views/masto_fe_view.ex | 32 +------------------------- 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/lib/pleroma/web/views/masto_fe_view.ex b/lib/pleroma/web/views/masto_fe_view.ex index c3096006e..3b78629dc 100644 --- a/lib/pleroma/web/views/masto_fe_view.ex +++ b/lib/pleroma/web/views/masto_fe_view.ex @@ -9,36 +9,6 @@ defmodule Pleroma.Web.MastoFEView do alias Pleroma.Web.MastodonAPI.AccountView alias Pleroma.Web.MastodonAPI.CustomEmojiView - @default_settings %{ - onboarded: true, - home: %{ - shows: %{ - reblog: true, - reply: true - } - }, - notifications: %{ - alerts: %{ - follow: true, - favourite: true, - reblog: true, - mention: true - }, - shows: %{ - follow: true, - favourite: true, - reblog: true, - mention: true - }, - sounds: %{ - follow: true, - favourite: true, - reblog: true, - mention: true - } - } - } - def initial_state(token, user, custom_emojis) do limit = Config.get([:instance, :limit]) @@ -86,7 +56,7 @@ def initial_state(token, user, custom_emojis) do "video\/mp4" ] }, - settings: user.settings || @default_settings, + settings: user.settings || %{}, push_subscription: nil, accounts: %{user.id => render(AccountView, "show.json", user: user, for: user)}, custom_emojis: render(CustomEmojiView, "index.json", custom_emojis: custom_emojis), From 6f44a0ee84a8dca7a94a38b45493a444390f13ec Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 27 Jul 2020 15:13:34 -0500 Subject: [PATCH 154/236] Add configurable registration_reason limit --- config/config.exs | 1 + lib/pleroma/user.ex | 2 ++ ...0712234852_add_approval_fields_to_users.exs | 2 +- test/user_test.exs | 18 +++++++++++++++++- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/config/config.exs b/config/config.exs index d8bf921bb..1dc196a6b 100644 --- a/config/config.exs +++ b/config/config.exs @@ -238,6 +238,7 @@ max_remote_account_fields: 20, account_field_name_length: 512, account_field_value_length: 2048, + registration_reason_length: 500, external_user_synchronization: true, extended_nickname_format: true, cleanup_attachments: false, diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index a78123fe4..913b6afd1 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -641,6 +641,7 @@ def force_password_reset(user), do: update_password_reset_pending(user, true) def register_changeset(struct, params \\ %{}, opts \\ []) do bio_limit = Config.get([:instance, :user_bio_length], 5000) name_limit = Config.get([:instance, :user_name_length], 100) + reason_limit = Config.get([:instance, :registration_reason_length], 500) params = Map.put_new(params, :accepts_chat_messages, true) need_confirmation? = @@ -681,6 +682,7 @@ def register_changeset(struct, params \\ %{}, opts \\ []) do |> validate_format(:email, @email_regex) |> validate_length(:bio, max: bio_limit) |> validate_length(:name, min: 1, max: name_limit) + |> validate_length(:registration_reason, max: reason_limit) |> maybe_validate_required_email(opts[:external]) |> put_password_hash |> put_ap_id() diff --git a/priv/repo/migrations/20200712234852_add_approval_fields_to_users.exs b/priv/repo/migrations/20200712234852_add_approval_fields_to_users.exs index 559640f01..43f741a5b 100644 --- a/priv/repo/migrations/20200712234852_add_approval_fields_to_users.exs +++ b/priv/repo/migrations/20200712234852_add_approval_fields_to_users.exs @@ -4,7 +4,7 @@ defmodule Pleroma.Repo.Migrations.AddApprovalFieldsToUsers do def change do alter table(:users) do add(:approval_pending, :boolean) - add(:registration_reason, :string) + add(:registration_reason, :text) end end end diff --git a/test/user_test.exs b/test/user_test.exs index 5da86bcec..5bf677666 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -550,7 +550,8 @@ test "it creates confirmed user if :confirmed option is given" do nickname: "nick", password: "test", password_confirmation: "test", - email: "email@example.com" + email: "email@example.com", + registration_reason: "I'm a cool guy :)" } setup do: clear_config([:instance, :account_approval_required], true) @@ -561,6 +562,21 @@ test "it creates unapproved user" do {:ok, user} = Repo.insert(changeset) assert user.approval_pending + assert user.registration_reason == "I'm a cool guy :)" + end + + test "it restricts length of registration reason" do + reason_limit = Pleroma.Config.get([:instance, :registration_reason_length]) + + assert is_integer(reason_limit) + + params = + @full_user_data + |> Map.put(:registration_reason, "Quia et nesciunt dolores numquam ipsam nisi sapiente soluta. Ullam repudiandae nisi quam porro officiis officiis ad. Consequatur animi velit ex quia. Odit voluptatem perferendis quia ut nisi. Dignissimos sit soluta atque aliquid dolorem ut dolorum ut. Labore voluptates iste iusto amet voluptatum earum. Ad fugit illum nam eos ut nemo. Pariatur ea fuga non aspernatur. Dignissimos debitis officia corporis est nisi ab et. Atque itaque alias eius voluptas minus. Accusamus numquam tempore occaecati in.") + + changeset = User.register_changeset(%User{}, params) + + refute changeset.valid? end end From 520dce857e4a6d3cdce275c46b3ad7b46a582c76 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 27 Jul 2020 15:24:20 -0500 Subject: [PATCH 155/236] Add :registration_reason_length to description.exs --- config/description.exs | 8 ++++++++ docs/configuration/cheatsheet.md | 1 + 2 files changed, 9 insertions(+) diff --git a/config/description.exs b/config/description.exs index 509effbc3..df9f256ef 100644 --- a/config/description.exs +++ b/config/description.exs @@ -879,6 +879,14 @@ 2048 ] }, + %{ + key: :registration_reason_length, + type: :integer, + description: "Maximum registration reason length. Default: 500.", + suggestions: [ + 500 + ] + }, %{ key: :external_user_synchronization, type: :boolean, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 5cf073293..c89df24cc 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -59,6 +59,7 @@ To add configuration to your config file, you can copy it from the base config. * `max_remote_account_fields`: The maximum number of custom fields in the remote user profile (default: `20`). * `account_field_name_length`: An account field name maximum length (default: `512`). * `account_field_value_length`: An account field value maximum length (default: `2048`). +* `registration_reason_length`: Maximum registration reason length (default: `500`). * `external_user_synchronization`: Enabling following/followers counters synchronization for external users. * `cleanup_attachments`: Remove attachments along with statuses. Does not affect duplicate files and attachments without status. Enabling this will increase load to database when deleting statuses on larger instances. From f43518eb7433a6c50d635d6536c3fbe3a37ea82b Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 27 Jul 2020 19:19:14 -0500 Subject: [PATCH 156/236] Lint, fix test --- lib/pleroma/user.ex | 8 ++++++-- test/user_test.exs | 5 ++++- .../mastodon_api/controllers/account_controller_test.exs | 4 ++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 913b6afd1..dcf6ebee2 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1553,8 +1553,12 @@ defp delete_or_deactivate(%User{local: true} = user) do status = account_status(user) case status do - :confirmation_pending -> delete_and_invalidate_cache(user) - :approval_pending -> delete_and_invalidate_cache(user) + :confirmation_pending -> + delete_and_invalidate_cache(user) + + :approval_pending -> + delete_and_invalidate_cache(user) + _ -> user |> change(%{deactivated: true, email: nil}) diff --git a/test/user_test.exs b/test/user_test.exs index 5bf677666..624baf8ad 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -572,7 +572,10 @@ test "it restricts length of registration reason" do params = @full_user_data - |> Map.put(:registration_reason, "Quia et nesciunt dolores numquam ipsam nisi sapiente soluta. Ullam repudiandae nisi quam porro officiis officiis ad. Consequatur animi velit ex quia. Odit voluptatem perferendis quia ut nisi. Dignissimos sit soluta atque aliquid dolorem ut dolorum ut. Labore voluptates iste iusto amet voluptatum earum. Ad fugit illum nam eos ut nemo. Pariatur ea fuga non aspernatur. Dignissimos debitis officia corporis est nisi ab et. Atque itaque alias eius voluptas minus. Accusamus numquam tempore occaecati in.") + |> Map.put( + :registration_reason, + "Quia et nesciunt dolores numquam ipsam nisi sapiente soluta. Ullam repudiandae nisi quam porro officiis officiis ad. Consequatur animi velit ex quia. Odit voluptatem perferendis quia ut nisi. Dignissimos sit soluta atque aliquid dolorem ut dolorum ut. Labore voluptates iste iusto amet voluptatum earum. Ad fugit illum nam eos ut nemo. Pariatur ea fuga non aspernatur. Dignissimos debitis officia corporis est nisi ab et. Atque itaque alias eius voluptas minus. Accusamus numquam tempore occaecati in." + ) changeset = User.register_changeset(%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 e6b283aab..1ba5bc964 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -1017,7 +1017,7 @@ test "Account registration via app with account_approval_required", %{conn: conn password: "PlzDontHackLain", bio: "Test Bio", agreement: true, - reason: "I'm a cool dude, bro" + reason: "I am a cool dude, bro" }) %{ @@ -1035,7 +1035,7 @@ test "Account registration via app with account_approval_required", %{conn: conn assert token_from_db.user.confirmation_pending assert token_from_db.user.approval_pending - assert token_from_db.user.registration_reason == "I'm a cool dude, bro" + assert token_from_db.user.registration_reason == "I am a cool dude, bro" end test "returns error when user already registred", %{conn: conn, valid_params: valid_params} do From f688c8df82b955b50552b3198ddc153a716451c2 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 27 Jul 2020 20:36:31 -0500 Subject: [PATCH 157/236] Fix User.registration_reason HTML sanitizing issues --- lib/pleroma/emails/admin_email.ex | 3 ++- lib/pleroma/web/twitter_api/twitter_api.ex | 3 +-- test/web/mastodon_api/controllers/account_controller_test.exs | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/pleroma/emails/admin_email.ex b/lib/pleroma/emails/admin_email.ex index fae7faf00..c27ad1065 100644 --- a/lib/pleroma/emails/admin_email.ex +++ b/lib/pleroma/emails/admin_email.ex @@ -8,6 +8,7 @@ defmodule Pleroma.Emails.AdminEmail do import Swoosh.Email alias Pleroma.Config + alias Pleroma.HTML alias Pleroma.Web.Router.Helpers defp instance_config, do: Config.get(:instance) @@ -86,7 +87,7 @@ def report(to, reporter, account, statuses, comment) do def new_unapproved_registration(to, account) do html_body = """

New account for review: @#{account.nickname}

-
#{account.registration_reason}
+
#{HTML.strip_tags(account.registration_reason)}
Visit AdminFE """ diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index 424a705dd..2294d9d0d 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -7,7 +7,6 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do alias Pleroma.Emails.Mailer alias Pleroma.Emails.UserEmail - alias Pleroma.HTML alias Pleroma.Repo alias Pleroma.User alias Pleroma.UserInviteToken @@ -20,7 +19,7 @@ def register_user(params, opts \\ []) do |> Map.put(:nickname, params[:username]) |> Map.put(:name, Map.get(params, :fullname, params[:username])) |> Map.put(:password_confirmation, params[:password]) - |> Map.put(:registration_reason, HTML.strip_tags(params[:reason])) + |> Map.put(:registration_reason, params[:reason]) if Pleroma.Config.get([:instance, :registrations_open]) do create_user(params, opts) diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 1ba5bc964..e6b283aab 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -1017,7 +1017,7 @@ test "Account registration via app with account_approval_required", %{conn: conn password: "PlzDontHackLain", bio: "Test Bio", agreement: true, - reason: "I am a cool dude, bro" + reason: "I'm a cool dude, bro" }) %{ @@ -1035,7 +1035,7 @@ test "Account registration via app with account_approval_required", %{conn: conn assert token_from_db.user.confirmation_pending assert token_from_db.user.approval_pending - assert token_from_db.user.registration_reason == "I am a cool dude, bro" + assert token_from_db.user.registration_reason == "I'm a cool dude, bro" end test "returns error when user already registred", %{conn: conn, valid_params: valid_params} do From 3e5fb90eaaf2546c591625ef8577b05f547e4506 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Tue, 28 Jul 2020 07:00:02 +0300 Subject: [PATCH 158/236] locked earmark version --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index da0e88287..a14b0c51a 100644 --- a/mix.exs +++ b/mix.exs @@ -145,7 +145,7 @@ defp deps do {:ex_aws, "~> 2.1"}, {:ex_aws_s3, "~> 2.0"}, {:sweet_xml, "~> 0.6.6"}, - {:earmark, "~> 1.3"}, + {:earmark, "1.4.3"}, {:bbcode_pleroma, "~> 0.2.0"}, {:ex_machina, "~> 2.3", only: :test}, {:credo, "~> 1.1.0", only: [:dev, :test], runtime: false}, From 14c28dcbd1b534c2749401c148dd973181a00fec Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 28 Jul 2020 15:44:47 +0200 Subject: [PATCH 159/236] InstanceStatic: Refactor. --- lib/pleroma/plugs/instance_static.ex | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/pleroma/plugs/instance_static.ex b/lib/pleroma/plugs/instance_static.ex index 7516f75c3..18255eac3 100644 --- a/lib/pleroma/plugs/instance_static.ex +++ b/lib/pleroma/plugs/instance_static.ex @@ -26,18 +26,14 @@ def file_path(path) do def init(opts) do opts |> Keyword.put(:from, "__unconfigured_instance_static_plug") - |> Keyword.put(:at, "/__unconfigured_instance_static_plug") |> Plug.Static.init() end for only <- Pleroma.Constants.static_only_files() do - at = Plug.Router.Utils.split("/") - def call(%{request_path: "/" <> unquote(only) <> _} = conn, opts) do call_static( conn, opts, - unquote(at), Pleroma.Config.get([:instance, :static_dir], "instance/static") ) end @@ -47,11 +43,10 @@ def call(conn, _) do conn end - defp call_static(conn, opts, at, from) do + defp call_static(conn, opts, from) do opts = opts |> Map.put(:from, from) - |> Map.put(:at, at) Plug.Static.call(conn, opts) end From ad5c42628ab36eb506ee20d0458c5cfd5bbe79ab Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 28 Jul 2020 17:35:16 +0200 Subject: [PATCH 160/236] FrontendStatic: Add plug to serve frontends based on configuration. --- lib/pleroma/plugs/frontend_static.ex | 54 ++++++++++++++++++++++++++++ lib/pleroma/plugs/instance_static.ex | 8 ++--- lib/pleroma/web/endpoint.ex | 11 ++++++ test/plugs/frontend_static_test.exs | 30 ++++++++++++++++ test/plugs/instance_static_test.exs | 24 ++++++++++++- 5 files changed, 122 insertions(+), 5 deletions(-) create mode 100644 lib/pleroma/plugs/frontend_static.ex create mode 100644 test/plugs/frontend_static_test.exs diff --git a/lib/pleroma/plugs/frontend_static.ex b/lib/pleroma/plugs/frontend_static.ex new file mode 100644 index 000000000..f549ca75f --- /dev/null +++ b/lib/pleroma/plugs/frontend_static.ex @@ -0,0 +1,54 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Plugs.FrontendStatic do + require Pleroma.Constants + + @moduledoc """ + This is a shim to call `Plug.Static` but with runtime `from` configuration`. It dispatches to the different frontends. + """ + @behaviour Plug + + def file_path(path, frontend_type \\ :primary) do + if configuration = Pleroma.Config.get([:frontends, frontend_type]) do + instance_static_path = Pleroma.Config.get([:instance, :static_dir], "instance/static") + + Path.join([ + instance_static_path, + "frontends", + configuration["name"], + configuration["ref"], + path + ]) + else + nil + end + end + + def init(opts) do + opts + |> Keyword.put(:from, "__unconfigured_frontend_static_plug") + |> Plug.Static.init() + end + + def call(conn, opts) do + frontend_type = Map.get(opts, :frontend_type, :primary) + path = file_path("", frontend_type) + + if path do + conn + |> call_static(opts, path) + else + conn + end + end + + defp call_static(conn, opts, from) do + opts = + opts + |> Map.put(:from, from) + + Plug.Static.call(conn, opts) + end +end diff --git a/lib/pleroma/plugs/instance_static.ex b/lib/pleroma/plugs/instance_static.ex index 18255eac3..0fb57e422 100644 --- a/lib/pleroma/plugs/instance_static.ex +++ b/lib/pleroma/plugs/instance_static.ex @@ -16,11 +16,11 @@ def file_path(path) do instance_path = Path.join(Pleroma.Config.get([:instance, :static_dir], "instance/static/"), path) - if File.exists?(instance_path) do - instance_path - else + frontend_path = Pleroma.Plugs.FrontendStatic.file_path(path, :primary) + + (File.exists?(instance_path) && instance_path) || + (frontend_path && File.exists?(frontend_path) && frontend_path) || Path.join(Application.app_dir(:pleroma, "priv/static/"), path) - end end def init(opts) do diff --git a/lib/pleroma/web/endpoint.ex b/lib/pleroma/web/endpoint.ex index 226d42c2c..527fb288d 100644 --- a/lib/pleroma/web/endpoint.ex +++ b/lib/pleroma/web/endpoint.ex @@ -28,6 +28,17 @@ defmodule Pleroma.Web.Endpoint do } ) + # Careful! No `only` restriction here, as we don't know what frontends contain. + plug(Pleroma.Plugs.FrontendStatic, + at: "/", + frontend_type: :primary, + gzip: true, + cache_control_for_etags: @static_cache_control, + headers: %{ + "cache-control" => @static_cache_control + } + ) + # Serve at "/" the static files from "priv/static" directory. # # You should set gzip to true if you are running phoenix.digest diff --git a/test/plugs/frontend_static_test.exs b/test/plugs/frontend_static_test.exs new file mode 100644 index 000000000..d11d91d78 --- /dev/null +++ b/test/plugs/frontend_static_test.exs @@ -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.FrontendStaticPlugTest do + use Pleroma.Web.ConnCase + + @dir "test/tmp/instance_static" + + setup do + File.mkdir_p!(@dir) + on_exit(fn -> File.rm_rf(@dir) end) + end + + setup do: clear_config([:instance, :static_dir], @dir) + + test "overrides existing static files", %{conn: conn} do + name = "pelmora" + ref = "uguu" + + clear_config([:frontends, :primary], %{"name" => name, "ref" => ref}) + path = "#{@dir}/frontends/#{name}/#{ref}" + + File.mkdir_p!(path) + File.write!("#{path}/index.html", "from frontend plug") + + index = get(conn, "/") + assert html_response(index, 200) == "from frontend plug" + end +end diff --git a/test/plugs/instance_static_test.exs b/test/plugs/instance_static_test.exs index be2613ad0..d42ba817e 100644 --- a/test/plugs/instance_static_test.exs +++ b/test/plugs/instance_static_test.exs @@ -2,7 +2,7 @@ # Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.Web.RuntimeStaticPlugTest do +defmodule Pleroma.Web.InstanceStaticPlugTest do use Pleroma.Web.ConnCase @dir "test/tmp/instance_static" @@ -24,6 +24,28 @@ test "overrides index" do assert html_response(index, 200) == "hello world" end + test "also overrides frontend files", %{conn: conn} do + name = "pelmora" + ref = "uguu" + + clear_config([:frontends, :primary], %{"name" => name, "ref" => ref}) + + bundled_index = get(conn, "/") + refute html_response(bundled_index, 200) == "from frontend plug" + + path = "#{@dir}/frontends/#{name}/#{ref}" + File.mkdir_p!(path) + File.write!("#{path}/index.html", "from frontend plug") + + index = get(conn, "/") + assert html_response(index, 200) == "from frontend plug" + + File.write!(@dir <> "/index.html", "from instance static") + + index = get(conn, "/") + assert html_response(index, 200) == "from instance static" + end + test "overrides any file in static/static" do bundled_index = get(build_conn(), "/static/terms-of-service.html") From d64c9763906f84c9cb8bcc778c790cfb5b78708b Mon Sep 17 00:00:00 2001 From: Roman Chvanikov Date: Tue, 28 Jul 2020 17:40:21 +0200 Subject: [PATCH 161/236] Add description for configuration. --- config/description.exs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/config/description.exs b/config/description.exs index c303fc878..91261c1e1 100644 --- a/config/description.exs +++ b/config/description.exs @@ -3481,5 +3481,30 @@ suggestions: ["s3.eu-central-1.amazonaws.com"] } ] + }, + %{ + group: :pleroma, + key: :frontends, + type: :group, + description: "Installed frontends management", + children: [ + %{ + key: :primary, + type: :map, + description: "Primary frontend, the one that is served for all pages by default", + children: [ + %{ + key: "name", + type: :string, + description: "Name of the installed primary frontend" + }, + %{ + key: "ref", + type: :string, + description: "reference of the installed primary frontend to be used" + } + ] + } + ] } ] From 08732e8a0335ae44c866c2dd63927c65158b27c9 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 28 Jul 2020 17:46:37 +0200 Subject: [PATCH 162/236] Docs: Add frontend info to cheat sheet. --- config/config.exs | 9 +++++++++ docs/configuration/cheatsheet.md | 20 ++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/config/config.exs b/config/config.exs index acf3b5c96..09dd9e786 100644 --- a/config/config.exs +++ b/config/config.exs @@ -645,6 +645,15 @@ config :pleroma, :static_fe, enabled: false +# Example of frontend configuration +# This example will make us serve the primary frontend from the +# `/frontends/pleroma/develop` folder in your instance static directory. +# +# With no frontend configuration, the bundled files from the `static` directory will +# be used. +# +# config :pleroma, :frontends, primary: %{"name" => "pleroma", "ref" => "develop"} + config :pleroma, :web_cache_ttl, activity_pub: nil, activity_pub_question: 30_000 diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 5e50f1ba9..5dc895c0a 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -1046,3 +1046,23 @@ Note: setting `restrict_unauthenticated/timelines/local` to `true` has no practi Control favicons for instances. * `enabled`: Allow/disallow displaying and getting instances favicons + +## Frontend management + +Frontends in Pleroma are swappable - you can specify which one to use here. + +For now, you can set a frontend with the key `primary` and the options of `name` and `ref` set. This will then make Pleroma serve the frontend from a folder constructed by concatenating the instance static path, `frontends` and the name and ref. + +If you don't set anything here, the bundled frontend will be used. + +Example: + +``` +config :pleroma, :frontends, + primary: %{ + "name" => "pleroma", + "ref" => "stable" + } +``` + +This would serve frontend from the the folder at `$instance_static/frontends/pleroma/stable`. You have to copy the frontend into this folder yourself. From 393128fb025d4e6f9172315491062f7e91e62bdb Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 28 Jul 2020 17:48:35 +0200 Subject: [PATCH 163/236] Cheatsheet: Add more info. --- 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 5dc895c0a..aebbcd50e 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -1065,4 +1065,4 @@ config :pleroma, :frontends, } ``` -This would serve frontend from the the folder at `$instance_static/frontends/pleroma/stable`. You have to copy the frontend into this folder yourself. +This would serve the frontend from the the folder at `$instance_static/frontends/pleroma/stable`. You have to copy the frontend into this folder yourself. You can choose the name and ref any way you like, but they will be used by mix tasks to automate installation in the future, the name referring to the project and the ref referring to a commit. From 81350faa8eea925a323144dcc0cfe38970132acf Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 28 Jul 2020 17:50:32 +0200 Subject: [PATCH 164/236] Cheatsheet: Add even more info. --- docs/configuration/cheatsheet.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index aebbcd50e..2a25a024a 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -1051,7 +1051,9 @@ Control favicons for instances. Frontends in Pleroma are swappable - you can specify which one to use here. -For now, you can set a frontend with the key `primary` and the options of `name` and `ref` set. This will then make Pleroma serve the frontend from a folder constructed by concatenating the instance static path, `frontends` and the name and ref. +For now, you can set a frontend with the key `primary` and the options of `name` and `ref`. This will then make Pleroma serve the frontend from a folder constructed by concatenating the instance static path, `frontends` and the name and ref. + +The key `primary` refers to the frontend that will be served by default for general requests. In the future, other frontends like the admin frontend will also be configurable here. If you don't set anything here, the bundled frontend will be used. From bee29f6610695b9f059bb2e0f3424b2345388aae Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 28 Jul 2020 12:10:04 -0500 Subject: [PATCH 165/236] Clarify location of frontends directory --- config/config.exs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/config.exs b/config/config.exs index 09dd9e786..48fe7c669 100644 --- a/config/config.exs +++ b/config/config.exs @@ -647,7 +647,8 @@ # Example of frontend configuration # This example will make us serve the primary frontend from the -# `/frontends/pleroma/develop` folder in your instance static directory. +# frontends directory within your `:pleroma, :instance, static_dir`. +# e.g., instance/static/frontends/pleroma/develop/ # # With no frontend configuration, the bundled files from the `static` directory will # be used. From 4ce6179dc7843d99823cf41be86574973b66200f Mon Sep 17 00:00:00 2001 From: rinpatch Date: Tue, 28 Jul 2020 20:49:48 +0300 Subject: [PATCH 166/236] gun ConnectionPool: replace casts with calls The slowdown from this is most likely immesurable, however it eliminates possible false positives when tracking dead clients. --- lib/pleroma/gun/connection_pool.ex | 4 +-- lib/pleroma/gun/connection_pool/worker.ex | 40 +++++++++++------------ 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/lib/pleroma/gun/connection_pool.ex b/lib/pleroma/gun/connection_pool.ex index 8b41a668c..c6894be53 100644 --- a/lib/pleroma/gun/connection_pool.ex +++ b/lib/pleroma/gun/connection_pool.ex @@ -19,7 +19,7 @@ def get_conn(uri, opts) do get_gun_pid_from_worker(worker_pid, true) [{worker_pid, {gun_pid, _used_by, _crf, _last_reference}}] -> - GenServer.cast(worker_pid, {:add_client, self(), false}) + GenServer.call(worker_pid, :add_client) {:ok, gun_pid} [] -> @@ -70,7 +70,7 @@ def release_conn(conn_pid) do case query_result do [worker_pid] -> - GenServer.cast(worker_pid, {:remove_client, self()}) + GenServer.call(worker_pid, :remove_client) [] -> :ok diff --git a/lib/pleroma/gun/connection_pool/worker.ex b/lib/pleroma/gun/connection_pool/worker.ex index f33447cb6..a61892c60 100644 --- a/lib/pleroma/gun/connection_pool/worker.ex +++ b/lib/pleroma/gun/connection_pool/worker.ex @@ -36,7 +36,16 @@ def handle_continue({:connect, [key, uri, opts, client_pid]}, _) do end @impl true - def handle_cast({:add_client, client_pid, send_pid_back}, %{key: key} = state) do + def handle_cast({:add_client, client_pid, send}, state) do + case handle_call(:add_client, {client_pid, nil}, state) do + {:reply, conn_pid, state, :hibernate} -> + if send, do: send(client_pid, {:conn_pid, conn_pid}) + {:noreply, state, :hibernate} + end + end + + @impl true + def handle_call(:add_client, {client_pid, _}, %{key: key} = state) do time = :erlang.monotonic_time(:millisecond) {{conn_pid, _, _, _}, _} = @@ -44,8 +53,6 @@ def handle_cast({:add_client, client_pid, send_pid_back}, %{key: key} = state) d {conn_pid, [client_pid | used_by], crf(time - last_reference, crf), time} end) - if send_pid_back, do: send(client_pid, {:conn_pid, conn_pid}) - state = if state.timer != nil do Process.cancel_timer(state[:timer]) @@ -57,11 +64,11 @@ def handle_cast({:add_client, client_pid, send_pid_back}, %{key: key} = state) d ref = Process.monitor(client_pid) state = put_in(state.client_monitors[client_pid], ref) - {:noreply, state, :hibernate} + {:reply, conn_pid, state, :hibernate} end @impl true - def handle_cast({:remove_client, client_pid}, %{key: key} = state) do + def handle_call(:remove_client, {client_pid, _}, %{key: key} = state) do {{_conn_pid, used_by, _crf, _last_reference}, _} = Registry.update_value(@registry, key, fn {conn_pid, used_by, crf, last_reference} -> {conn_pid, List.delete(used_by, client_pid), crf, last_reference} @@ -78,7 +85,7 @@ def handle_cast({:remove_client, client_pid}, %{key: key} = state) do nil end - {:noreply, %{state | timer: timer}, :hibernate} + {:reply, :ok, %{state | timer: timer}, :hibernate} end @impl true @@ -102,22 +109,13 @@ def handle_info({:gun_down, _pid, _protocol, _reason, _killed_streams} = down_me @impl true def handle_info({:DOWN, _ref, :process, pid, reason}, state) do - # Sometimes the client is dead before we demonitor it in :remove_client, so the message - # arrives anyway + :telemetry.execute( + [:pleroma, :connection_pool, :client_death], + %{client_pid: pid, reason: reason}, + %{key: state.key} + ) - case state.client_monitors[pid] do - nil -> - {:noreply, state, :hibernate} - - _ref -> - :telemetry.execute( - [:pleroma, :connection_pool, :client_death], - %{client_pid: pid, reason: reason}, - %{key: state.key} - ) - - handle_cast({:remove_client, pid}, state) - end + handle_cast({:remove_client, pid, false}, state) end # LRFU policy: https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.55.1478 From 3b7c454418700ca36c0a71272f913ea8c6e464e9 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 28 Jul 2020 14:49:49 -0500 Subject: [PATCH 167/236] Let favourites and emoji reactions optionally be hidden --- config/config.exs | 3 ++- config/description.exs | 5 +++++ docs/configuration/cheatsheet.md | 1 + .../controllers/status_controller.ex | 3 ++- .../controllers/emoji_reaction_controller.ex | 3 ++- .../controllers/status_controller_test.exs | 15 +++++++++++++++ .../emoji_reaction_controller_test.exs | 19 +++++++++++++++++++ 7 files changed, 46 insertions(+), 3 deletions(-) diff --git a/config/config.exs b/config/config.exs index 48fe7c669..903a92cca 100644 --- a/config/config.exs +++ b/config/config.exs @@ -250,7 +250,8 @@ number: 5, length: 16 ] - ] + ], + show_reactions: true config :pleroma, :welcome, direct_message: [ diff --git a/config/description.exs b/config/description.exs index 91261c1e1..9dc87824b 100644 --- a/config/description.exs +++ b/config/description.exs @@ -942,6 +942,11 @@ description: "The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance.", suggestions: ["/instance/thumbnail.jpeg"] + }, + %{ + key: :show_reactions, + type: :boolean, + description: "Let favourites and emoji reactions be viewed through the API." } ] }, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 2a25a024a..2971ea324 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -60,6 +60,7 @@ To add configuration to your config file, you can copy it from the base config. * `account_field_value_length`: An account field value maximum length (default: `2048`). * `external_user_synchronization`: Enabling following/followers counters synchronization for external users. * `cleanup_attachments`: Remove attachments along with statuses. Does not affect duplicate files and attachments without status. Enabling this will increase load to database when deleting statuses on larger instances. +* `show_reactions`: Let favourites and emoji reactions be viewed through the API (default: `true`). ## Welcome * `direct_message`: - welcome message sent as a direct message. diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex index 9bb2ef117..ecfa38489 100644 --- a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex @@ -314,7 +314,8 @@ def card(%{assigns: %{user: user}} = conn, %{id: status_id}) do @doc "GET /api/v1/statuses/:id/favourited_by" def favourited_by(%{assigns: %{user: user}} = conn, %{id: id}) do - with %Activity{} = activity <- Activity.get_by_id_with_object(id), + with true <- Pleroma.Config.get([:instance, :show_reactions]), + %Activity{} = activity <- Activity.get_by_id_with_object(id), {:visible, true} <- {:visible, Visibility.visible_for_user?(activity, user)}, %Object{data: %{"likes" => likes}} <- Object.normalize(activity) do users = diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex index 19dcffdf3..7f9254c13 100644 --- a/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex @@ -25,7 +25,8 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionController do action_fallback(Pleroma.Web.MastodonAPI.FallbackController) def index(%{assigns: %{user: user}} = conn, %{id: activity_id} = params) do - with %Activity{} = activity <- Activity.get_by_id_with_object(activity_id), + with true <- Pleroma.Config.get([:instance, :show_reactions]), + %Activity{} = activity <- Activity.get_by_id_with_object(activity_id), %Object{data: %{"reactions" => reactions}} when is_list(reactions) <- Object.normalize(activity) do reactions = filter(reactions, params) diff --git a/test/web/mastodon_api/controllers/status_controller_test.exs b/test/web/mastodon_api/controllers/status_controller_test.exs index d34f300da..e3f127163 100644 --- a/test/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/web/mastodon_api/controllers/status_controller_test.exs @@ -21,6 +21,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do setup do: clear_config([:instance, :federating]) setup do: clear_config([:instance, :allow_relay]) + setup do: clear_config([:instance, :show_reactions]) setup do: clear_config([:rich_media, :enabled]) setup do: clear_config([:mrf, :policies]) setup do: clear_config([:mrf_keyword, :reject]) @@ -1432,6 +1433,20 @@ test "requires authentication for private posts", %{user: user} do [%{"id" => id}] = response assert id == other_user.id end + + test "returns empty array when :show_reactions is disabled", %{conn: conn, activity: activity} do + Pleroma.Config.put([:instance, :show_reactions], false) + + other_user = insert(:user) + {:ok, _} = CommonAPI.favorite(other_user, activity.id) + + response = + conn + |> get("/api/v1/statuses/#{activity.id}/favourited_by") + |> json_response_and_validate_schema(:ok) + + assert Enum.empty?(response) + end end describe "GET /api/v1/statuses/:id/reblogged_by" do diff --git a/test/web/pleroma_api/controllers/emoji_reaction_controller_test.exs b/test/web/pleroma_api/controllers/emoji_reaction_controller_test.exs index e1bb5ebfe..8af2ee03f 100644 --- a/test/web/pleroma_api/controllers/emoji_reaction_controller_test.exs +++ b/test/web/pleroma_api/controllers/emoji_reaction_controller_test.exs @@ -13,6 +13,8 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionControllerTest do import Pleroma.Factory + setup do: clear_config([:instance, :show_reactions]) + test "PUT /api/v1/pleroma/statuses/:id/reactions/:emoji", %{conn: conn} do user = insert(:user) other_user = insert(:user) @@ -106,6 +108,23 @@ test "GET /api/v1/pleroma/statuses/:id/reactions", %{conn: conn} do result end + test "GET /api/v1/pleroma/statuses/:id/reactions with :show_reactions disabled", %{conn: conn} do + Pleroma.Config.put([:instance, :show_reactions], false) + + user = insert(:user) + other_user = insert(:user) + + {:ok, activity} = CommonAPI.post(user, %{status: "#cofe"}) + {:ok, _} = CommonAPI.react_with_emoji(activity.id, other_user, "🎅") + + result = + conn + |> get("/api/v1/pleroma/statuses/#{activity.id}/reactions") + |> json_response_and_validate_schema(200) + + assert result == [] + end + test "GET /api/v1/pleroma/statuses/:id/reactions/:emoji", %{conn: conn} do user = insert(:user) other_user = insert(:user) From dab1d8c98efd462ecb9aac47f7c54a5e3e015e27 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Tue, 28 Jul 2020 23:48:41 +0300 Subject: [PATCH 168/236] gun ConnectionPool: Re-add a missing cast for remove_client --- lib/pleroma/gun/connection_pool.ex | 2 +- lib/pleroma/gun/connection_pool/worker.ex | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/gun/connection_pool.ex b/lib/pleroma/gun/connection_pool.ex index c6894be53..49e9885bb 100644 --- a/lib/pleroma/gun/connection_pool.ex +++ b/lib/pleroma/gun/connection_pool.ex @@ -45,7 +45,7 @@ defp get_gun_pid_from_worker(worker_pid, register) do # so instead we use cast + monitor ref = Process.monitor(worker_pid) - if register, do: GenServer.cast(worker_pid, {:add_client, self(), true}) + if register, do: GenServer.cast(worker_pid, {:add_client, self()}) receive do {:conn_pid, pid} -> diff --git a/lib/pleroma/gun/connection_pool/worker.ex b/lib/pleroma/gun/connection_pool/worker.ex index a61892c60..fec9d0efa 100644 --- a/lib/pleroma/gun/connection_pool/worker.ex +++ b/lib/pleroma/gun/connection_pool/worker.ex @@ -36,10 +36,18 @@ def handle_continue({:connect, [key, uri, opts, client_pid]}, _) do end @impl true - def handle_cast({:add_client, client_pid, send}, state) do + def handle_cast({:add_client, client_pid}, state) do case handle_call(:add_client, {client_pid, nil}, state) do {:reply, conn_pid, state, :hibernate} -> - if send, do: send(client_pid, {:conn_pid, conn_pid}) + send(client_pid, {:conn_pid, conn_pid}) + {:noreply, state, :hibernate} + end + end + + @impl true + def handle_cast({:remove_client, client_pid}, state) do + case handle_call(:remove_client, {client_pid, nil}, state) do + {:reply, _, state, :hibernate} -> {:noreply, state, :hibernate} end end @@ -115,7 +123,7 @@ def handle_info({:DOWN, _ref, :process, pid, reason}, state) do %{key: state.key} ) - handle_cast({:remove_client, pid, false}, state) + handle_cast({:remove_client, pid}, state) end # LRFU policy: https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.55.1478 From 3c90f7f7156889a1f74950ab976819faa281df43 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 28 Jul 2020 18:55:29 -0500 Subject: [PATCH 169/236] SimpleMRF: Let instances be silenced --- config/description.exs | 6 +++ docs/configuration/cheatsheet.md | 1 + .../web/activity_pub/mrf/simple_policy.ex | 28 +++++++++++ .../activity_pub/mrf/simple_policy_test.exs | 47 +++++++++++++++++++ 4 files changed, 82 insertions(+) diff --git a/config/description.exs b/config/description.exs index 91261c1e1..9ffe6f93d 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1524,6 +1524,12 @@ description: "List of instances to only accept activities from (except deletes)", suggestions: ["example.com", "*.example.com"] }, + %{ + key: :silence, + type: {:list, :string}, + description: "Force posts from the given instances to be visible by followers only", + suggestions: ["example.com", "*.example.com"] + }, %{ key: :report_removal, type: {:list, :string}, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 2a25a024a..9a7f4f369 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -122,6 +122,7 @@ To add configuration to your config file, you can copy it from the base config. * `federated_timeline_removal`: List of instances to remove from Federated (aka The Whole Known Network) Timeline. * `reject`: List of instances to reject any activities from. * `accept`: List of instances to accept any activities from. +* `silence`: List of instances to force posts as followers-only. * `report_removal`: List of instances to reject reports from. * `avatar_removal`: List of instances to strip avatars from. * `banner_removal`: List of instances to strip banners from. diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index b77b8c7b4..e168a943e 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -7,6 +7,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do @behaviour Pleroma.Web.ActivityPub.MRF alias Pleroma.Config + alias Pleroma.FollowingRelationship alias Pleroma.User alias Pleroma.Web.ActivityPub.MRF @@ -108,6 +109,32 @@ defp check_ftl_removal(%{host: actor_host} = _actor_info, object) do {:ok, object} end + defp check_silence(%{host: actor_host} = _actor_info, object) do + silence = + Config.get([:mrf_simple, :silence]) + |> MRF.subdomains_regex() + + object = + with true <- MRF.subdomain_match?(silence, actor_host), + user <- User.get_cached_by_ap_id(object["actor"]) do + to = + FollowingRelationship.followers_ap_ids(user, Map.get(object, "to", [])) ++ + [user.follower_address] + + cc = FollowingRelationship.followers_ap_ids(user, Map.get(object, "cc", [])) + + object + |> Map.put("to", to) + |> Map.put("cc", cc) + else + _ -> object + end + + {:ok, object} + end + + defp check_silence(_actor_info, object), do: {:ok, object} + defp check_report_removal(%{host: actor_host} = _actor_info, %{"type" => "Flag"} = object) do report_removal = Config.get([:mrf_simple, :report_removal]) @@ -174,6 +201,7 @@ def filter(%{"actor" => actor} = object) do {:ok, object} <- check_media_removal(actor_info, object), {:ok, object} <- check_media_nsfw(actor_info, object), {:ok, object} <- check_ftl_removal(actor_info, object), + {:ok, object} <- check_silence(actor_info, object), {:ok, object} <- check_report_removal(actor_info, object) do {:ok, object} else diff --git a/test/web/activity_pub/mrf/simple_policy_test.exs b/test/web/activity_pub/mrf/simple_policy_test.exs index e842d8d8d..510a31d80 100644 --- a/test/web/activity_pub/mrf/simple_policy_test.exs +++ b/test/web/activity_pub/mrf/simple_policy_test.exs @@ -7,6 +7,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do import Pleroma.Factory alias Pleroma.Config alias Pleroma.Web.ActivityPub.MRF.SimplePolicy + alias Pleroma.Web.CommonAPI setup do: clear_config(:mrf_simple, @@ -15,6 +16,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do federated_timeline_removal: [], report_removal: [], reject: [], + silence: [], accept: [], avatar_removal: [], banner_removal: [], @@ -261,6 +263,51 @@ test "actor has a matching host" do end end + describe "when :silence" do + test "is empty" do + Config.put([:mrf_simple, :silence], []) + {_, ftl_message} = build_ftl_actor_and_message() + local_message = build_local_message() + + assert SimplePolicy.filter(ftl_message) == {:ok, ftl_message} + assert SimplePolicy.filter(local_message) == {:ok, local_message} + end + + test "has a matching host" do + actor = insert(:user) + following_user = insert(:user) + non_following_user = insert(:user) + + {:ok, _, _, _} = CommonAPI.follow(following_user, actor) + + activity = %{ + "actor" => actor.ap_id, + "to" => [ + "https://www.w3.org/ns/activitystreams#Public", + following_user.ap_id, + non_following_user.ap_id + ], + "cc" => [actor.follower_address, "http://foo.bar/qux"] + } + + actor_domain = + activity + |> Map.fetch!("actor") + |> URI.parse() + |> Map.fetch!(:host) + + Config.put([:mrf_simple, :silence], [actor_domain]) + + assert {:ok, new_activity} = SimplePolicy.filter(activity) + assert actor.follower_address in new_activity["to"] + assert following_user.ap_id in new_activity["to"] + refute "https://www.w3.org/ns/activitystreams#Public" in new_activity["to"] + refute "https://www.w3.org/ns/activitystreams#Public" in new_activity["cc"] + refute non_following_user.ap_id in new_activity["to"] + refute non_following_user.ap_id in new_activity["cc"] + end + end + describe "when :accept" do test "is empty" do Config.put([:mrf_simple, :accept], []) From 2a99e7df8e3c5c5c6cdf15bff56d0258c9a5287e Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 28 Jul 2020 20:17:18 -0500 Subject: [PATCH 170/236] SimpleMRF silence: optimize, work okay with nil values in addressing --- lib/pleroma/following_relationship.ex | 6 +++++- lib/pleroma/web/activity_pub/mrf/simple_policy.ex | 13 ++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/pleroma/following_relationship.ex b/lib/pleroma/following_relationship.ex index c2020d30a..83b366dd4 100644 --- a/lib/pleroma/following_relationship.ex +++ b/lib/pleroma/following_relationship.ex @@ -95,7 +95,11 @@ def followers_query(%User{} = user) do |> where([r], r.state == ^:follow_accept) end - def followers_ap_ids(%User{} = user, from_ap_ids \\ nil) do + def followers_ap_ids(user, from_ap_ids \\ nil) + + def followers_ap_ids(_, []), do: [] + + def followers_ap_ids(%User{} = user, from_ap_ids) do query = user |> followers_query() diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index e168a943e..4dce22cfa 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -117,14 +117,15 @@ defp check_silence(%{host: actor_host} = _actor_info, object) do object = with true <- MRF.subdomain_match?(silence, actor_host), user <- User.get_cached_by_ap_id(object["actor"]) do - to = - FollowingRelationship.followers_ap_ids(user, Map.get(object, "to", [])) ++ - [user.follower_address] + # Don't use Map.get/3 intentionally, these must not be nil + fixed_to = object["to"] || [] + fixed_cc = object["cc"] || [] - cc = FollowingRelationship.followers_ap_ids(user, Map.get(object, "cc", [])) + to = FollowingRelationship.followers_ap_ids(user, fixed_to) + cc = FollowingRelationship.followers_ap_ids(user, fixed_cc) object - |> Map.put("to", to) + |> Map.put("to", [user.follower_address] ++ to) |> Map.put("cc", cc) else _ -> object @@ -133,8 +134,6 @@ defp check_silence(%{host: actor_host} = _actor_info, object) do {:ok, object} end - defp check_silence(_actor_info, object), do: {:ok, object} - defp check_report_removal(%{host: actor_host} = _actor_info, %{"type" => "Flag"} = object) do report_removal = Config.get([:mrf_simple, :report_removal]) From 15b8446cdb1b5130d5feddc3369dd41417df7eda Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 29 Jul 2020 06:45:08 +0300 Subject: [PATCH 171/236] updated dev & test packages --- mix.exs | 18 ++++++++++-------- mix.lock | 17 +++++++++-------- .../controllers/report_controller_test.exs | 12 +++++------- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/mix.exs b/mix.exs index a14b0c51a..8552035bb 100644 --- a/mix.exs +++ b/mix.exs @@ -147,14 +147,10 @@ defp deps do {:sweet_xml, "~> 0.6.6"}, {:earmark, "1.4.3"}, {:bbcode_pleroma, "~> 0.2.0"}, - {:ex_machina, "~> 2.3", only: :test}, - {:credo, "~> 1.1.0", only: [:dev, :test], runtime: false}, - {:mock, "~> 0.3.3", only: :test}, {:crypt, git: "https://github.com/msantos/crypt.git", ref: "f63a705f92c26955977ee62a313012e309a4d77a"}, {:cors_plug, "~> 1.5"}, - {:ex_doc, "~> 0.21", only: :dev, runtime: false}, {:web_push_encryption, "~> 0.2.1"}, {:swoosh, git: "https://github.com/swoosh/swoosh.git", @@ -162,7 +158,6 @@ defp deps do override: true}, {:phoenix_swoosh, "~> 0.2"}, {:gen_smtp, "~> 0.13"}, - {:websocket_client, git: "https://github.com/jeremyong/websocket_client.git", only: :test}, {:ex_syslogger, "~> 1.4"}, {:floki, "~> 0.25"}, {:timex, "~> 3.5"}, @@ -186,7 +181,6 @@ defp deps do {:esshd, "~> 0.1.0", runtime: Application.get_env(:esshd, :enabled, false)}, {:ex_const, "~> 0.2"}, {:plug_static_index_html, "~> 1.0.0"}, - {:excoveralls, "~> 0.12.1", only: :test}, {:flake_id, "~> 0.1.0"}, {:concurrent_limiter, git: "https://git.pleroma.social/pleroma/elixir-libraries/concurrent_limiter.git", @@ -197,11 +191,19 @@ defp deps do {:captcha, git: "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"}, - {:mox, "~> 0.5", only: :test}, {:restarter, path: "./restarter"}, {:open_api_spex, git: "https://git.pleroma.social/pleroma/elixir-libraries/open_api_spex.git", - ref: "f296ac0924ba3cf79c7a588c4c252889df4c2edd"} + ref: "f296ac0924ba3cf79c7a588c4c252889df4c2edd"}, + + ## dev & test + {:ex_doc, "~> 0.22", only: :dev, runtime: false}, + {:ex_machina, "~> 2.4", only: :test}, + {:credo, "~> 1.4", only: [:dev, :test], runtime: false}, + {:mock, "~> 0.3.5", only: :test}, + {:excoveralls, "~> 0.13.1", only: :test}, + {:mox, "~> 0.5", only: :test}, + {:websocket_client, git: "https://github.com/jeremyong/websocket_client.git", only: :test} ] ++ oauth_deps() end diff --git a/mix.lock b/mix.lock index 80679cded..727ba3ca7 100644 --- a/mix.lock +++ b/mix.lock @@ -19,7 +19,7 @@ "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"}, + "credo": {:hex, :credo, "1.4.0", "92339d4cbadd1e88b5ee43d427b639b68a11071b6f73854e33638e30a0ea11f5", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "1fd3b70dce216574ce3c18bdf510b57e7c4c85c2ec9cad4bff854abaf7e58658"}, "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.git", "f63a705f92c26955977ee62a313012e309a4d77a", [ref: "f63a705f92c26955977ee62a313012e309a4d77a"]}, "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, @@ -27,6 +27,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"}, + "earmark_parser": {:hex, :earmark_parser, "1.4.10", "6603d7a603b9c18d3d20db69921527f82ef09990885ed7525003c7fe7dc86c56", [:mix], [], "hexpm", "8e2d5370b732385db2c9b22215c3f59c84ac7dda7ed7e544d7c459496ae519c0"}, "ecto": {:hex, :ecto, "3.4.5", "2bcd262f57b2c888b0bd7f7a28c8a48aa11dc1a2c6a858e45dd8f8426d504265", [: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", "8c6d1d4d524559e9b7a062f0498e2c206122552d63eacff0a6567ffe7a8e8691"}, "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.4.5", "30161f81b167d561a9a2df4329c10ae05ff36eca7ccc84628f2c8b9fa1e43323", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0 or ~> 0.4.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.0", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "31990c6a3579b36a3c0841d34a94c275e727de8b84f58509da5f1b2032c98ac2"}, @@ -37,10 +38,10 @@ "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_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_doc": {:hex, :ex_doc, "0.22.2", "03a2a58bdd2ba0d83d004507c4ee113b9c521956938298eba16e55cc4aba4a6c", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "cf60e1b3e2efe317095b6bb79651f83a2c1b3edcb4d319c421d7fcda8b3aff26"}, + "ex_machina": {:hex, :ex_machina, "2.4.0", "09a34c5d371bfb5f78399029194a8ff67aff340ebe8ba19040181af35315eabb", [: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", "a20bc9ddc721b33ea913b93666c5d0bdca5cbad7a67540784ae277228832d72c"}, "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"}, + "excoveralls": {:hex, :excoveralls, "0.13.1", "b9f1697f7c9e0cfe15d1a1d737fb169c398803ffcbc57e672aa007e9fd42864c", [:mix], [{:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "b4bb550e045def1b4d531a37fb766cbbe1307f7628bf8f0414168b3f52021cce"}, "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"}, @@ -63,18 +64,18 @@ "jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"}, "libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm"}, "linkify": {:hex, :linkify, "0.2.0", "2518bbbea21d2caa9d372424e1ad845b640c6630e2d016f1bd1f518f9ebcca28", [:mix], [], "hexpm", "b8ca8a68b79e30b7938d6c996085f3db14939f29538a59ca5101988bb7f917f6"}, - "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"}, + "makeup": {:hex, :makeup, "1.0.3", "e339e2f766d12e7260e6672dd4047405963c5ec99661abdc432e6ec67d29ef95", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "2e9b4996d11832947731f7608fed7ad2f9443011b3b479ae288011265cdd3dad"}, + "makeup_elixir": {:hex, :makeup_elixir, "0.14.1", "4f0e96847c63c17841d42c08107405a005a2680eb9c7ccadfd757bd31dabccfb", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "f2438b1a80eaec9ede832b5c41cd4f373b38fd7aa33e3b22d9db79e640cbde11"}, "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"}, + "mock": {:hex, :mock, "0.3.5", "feb81f52b8dcf0a0d65001d2fec459f6b6a8c22562d94a965862f6cc066b5431", [:mix], [{:meck, "~> 0.8.13", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "6fae404799408300f863550392635d8f7e3da6b71abdd5c393faf41b131c8728"}, "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.6.0", "32111b3bf39137144abd7ba1cce0914533b2d16ef35e8abc5ec8be6122944263", [:mix], [], "hexpm", "27eac315a94909d4dc68bc07a4a83e06c8379237c5ea528a9acff4ca1c873c52"}, "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, "oban": {:hex, :oban, "2.0.0", "e6ce70d94dd46815ec0882a1ffb7356df9a9d5b8a40a64ce5c2536617a447379", [:mix], [{:ecto_sql, ">= 3.4.3", [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", "cf574813bd048b98a698aa587c21367d2e06842d4e1b1993dcd6a696e9e633bd"}, "open_api_spex": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/open_api_spex.git", "f296ac0924ba3cf79c7a588c4c252889df4c2edd", [ref: "f296ac0924ba3cf79c7a588c4c252889df4c2edd"]}, diff --git a/test/web/admin_api/controllers/report_controller_test.exs b/test/web/admin_api/controllers/report_controller_test.exs index f30dc8956..57946e6bb 100644 --- a/test/web/admin_api/controllers/report_controller_test.exs +++ b/test/web/admin_api/controllers/report_controller_test.exs @@ -204,7 +204,7 @@ test "updates state of multiple reports", %{ test "returns empty response when no reports created", %{conn: conn} do response = conn - |> get("/api/pleroma/admin/reports") + |> get(report_path(conn, :index)) |> json_response_and_validate_schema(:ok) assert Enum.empty?(response["reports"]) @@ -224,7 +224,7 @@ test "returns reports", %{conn: conn} do response = conn - |> get("/api/pleroma/admin/reports") + |> get(report_path(conn, :index)) |> json_response_and_validate_schema(:ok) [report] = response["reports"] @@ -256,7 +256,7 @@ test "returns reports with specified state", %{conn: conn} do response = conn - |> get("/api/pleroma/admin/reports?state=open") + |> get(report_path(conn, :index, %{state: "open"})) |> json_response_and_validate_schema(:ok) assert [open_report] = response["reports"] @@ -268,7 +268,7 @@ test "returns reports with specified state", %{conn: conn} do response = conn - |> get("/api/pleroma/admin/reports?state=closed") + |> get(report_path(conn, :index, %{state: "closed"})) |> json_response_and_validate_schema(:ok) assert [closed_report] = response["reports"] @@ -280,9 +280,7 @@ test "returns reports with specified state", %{conn: conn} do assert %{"total" => 0, "reports" => []} == conn - |> get("/api/pleroma/admin/reports?state=resolved", %{ - "" => "" - }) + |> get(report_path(conn, :index, %{state: "resolved"})) |> json_response_and_validate_schema(:ok) end From ed881247b70457835131fd7d94780eb9b65005b3 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 29 Jul 2020 06:50:00 +0300 Subject: [PATCH 172/236] set swoosh version --- mix.exs | 7 ++----- mix.lock | 16 ++++++++-------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/mix.exs b/mix.exs index 8552035bb..dc12df873 100644 --- a/mix.exs +++ b/mix.exs @@ -152,11 +152,8 @@ defp deps do ref: "f63a705f92c26955977ee62a313012e309a4d77a"}, {:cors_plug, "~> 1.5"}, {:web_push_encryption, "~> 0.2.1"}, - {:swoosh, - git: "https://github.com/swoosh/swoosh.git", - ref: "c96e0ca8a00d8f211ec1f042a4626b09f249caa5", - override: true}, - {:phoenix_swoosh, "~> 0.2"}, + {:swoosh, "~> 1.0"}, + {:phoenix_swoosh, "~> 0.3"}, {:gen_smtp, "~> 0.13"}, {:ex_syslogger, "~> 1.4"}, {:floki, "~> 0.25"}, diff --git a/mix.lock b/mix.lock index 727ba3ca7..3125ac3ce 100644 --- a/mix.lock +++ b/mix.lock @@ -17,8 +17,8 @@ "concurrent_limiter": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/concurrent_limiter.git", "8eee96c6ba39b9286ec44c51c52d9f2758951365", [ref: "8eee96c6ba39b9286ec44c51c52d9f2758951365"]}, "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"}, + "cowboy": {:hex, :cowboy, "2.8.0", "f3dc62e35797ecd9ac1b50db74611193c29815401e53bac9a5c0577bd7bc667d", [:rebar3], [{:cowlib, "~> 2.9.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.7.1", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "4643e4fba74ac96d4d152c75803de6fad0b3fa5df354c71afdd6cbeeb15fac8a"}, + "cowlib": {:hex, :cowlib, "2.9.1", "61a6c7c50cf07fdd24b2f45b89500bb93b6686579b069a89f88cb211e1125c78", [:rebar3], [], "hexpm", "e4175dc240a70d996156160891e1c62238ede1729e45740bdd38064dad476170"}, "credo": {:hex, :credo, "1.4.0", "92339d4cbadd1e88b5ee43d427b639b68a11071b6f73854e33638e30a0ea11f5", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "1fd3b70dce216574ce3c18bdf510b57e7c4c85c2ec9cad4bff854abaf7e58658"}, "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.git", "f63a705f92c26955977ee62a313012e309a4d77a", [ref: "f63a705f92c26955977ee62a313012e309a4d77a"]}, @@ -81,13 +81,13 @@ "open_api_spex": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/open_api_spex.git", "f296ac0924ba3cf79c7a588c4c252889df4c2edd", [ref: "f296ac0924ba3cf79c7a588c4c252889df4c2edd"]}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "1.2.1", "9cbe354b58121075bd20eb83076900a3832324b7dd171a6895fab57b6bb2752c", [:mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}], "hexpm", "d3b40a4a4630f0b442f19eca891fcfeeee4c40871936fed2f68e1c4faa30481f"}, - "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.17", "1b1bd4cff7cfc87c94deaa7d60dd8c22e04368ab95499483c50640ef3bd838d8", [: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", "3a8e5d7a3d76d452bb5fb86e8b7bd115f737e4f8efe202a463d4aeb4a5809611"}, "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_html": {:hex, :phoenix_html, "2.14.2", "b8a3899a72050f3f48a36430da507dd99caf0ac2d06c77529b1646964f3d563e", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "58061c8dfd25da5df1ea0ca47c972f161beb6c875cd293917045b92ffe1bf617"}, "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"}, + "phoenix_swoosh": {:hex, :phoenix_swoosh, "0.3.0", "2acfa0db038a7649e0a4614eee970e6ed9a39d191ccd79a03583b51d0da98165", [:mix], [{:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.0", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "b8bbae4b59a676de6b8bd8675eda37bc8b4424812ae429d6fdcb2b039e00003b"}, + "plug": {:hex, :plug, "1.10.3", "c9cebe917637d8db0e759039cc106adca069874e1a9034fd6e3fdd427fd3c283", [: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: false]}], "hexpm", "01f9037a2a1de1d633b5a881101e6a444bcabb1d386ca1e00bb273a1f1d9d939"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.3.0", "149a50e05cb73c12aad6506a371cd75750c0b19a32f81866e1a323dda9e0e99d", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "bc595a1870cef13f9c1e03df56d96804db7f702175e4ccacdb8fc75c02a7b97e"}, "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"}, @@ -106,7 +106,7 @@ "sleeplocks": {:hex, :sleeplocks, "1.1.1", "3d462a0639a6ef36cc75d6038b7393ae537ab394641beb59830a1b8271faeed3", [:rebar3], [], "hexpm", "84ee37aeff4d0d92b290fff986d6a95ac5eedf9b383fadfd1d88e9b84a1c02e1"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, "sweet_xml": {:hex, :sweet_xml, "0.6.6", "fc3e91ec5dd7c787b6195757fbcf0abc670cee1e4172687b45183032221b66b8", [:mix], [], "hexpm", "2e1ec458f892ffa81f9f8386e3f35a1af6db7a7a37748a64478f13163a1f3573"}, - "swoosh": {:git, "https://github.com/swoosh/swoosh.git", "c96e0ca8a00d8f211ec1f042a4626b09f249caa5", [ref: "c96e0ca8a00d8f211ec1f042a4626b09f249caa5"]}, + "swoosh": {:hex, :swoosh, "1.0.0", "c547cfc83f30e12d5d1fdcb623d7de2c2e29a5becfc68bf8f42ba4d23d2c2756", [: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: true]}, {: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", "b3b08e463f876cb6167f7168e9ad99a069a724e124bcee61847e0e1ed13f4a0d"}, "syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"}, "telemetry": {:hex, :telemetry, "0.4.2", "2808c992455e08d6177322f14d3bdb6b625fbcfd233a73505870d8738a2f4599", [:rebar3], [], "hexpm", "2d1419bd9dda6a206d7b5852179511722e2b18812310d304620c7bd92a13fcef"}, "tesla": {:git, "https://github.com/teamon/tesla.git", "af3707078b10793f6a534938e56b963aff82fe3c", [ref: "af3707078b10793f6a534938e56b963aff82fe3c"]}, From 992a271196a90713859fc5c523724d81102c7f27 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 29 Jul 2020 06:55:44 +0300 Subject: [PATCH 173/236] updated the minor version packages --- mix.exs | 12 ++++++------ mix.lock | 18 +++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/mix.exs b/mix.exs index dc12df873..d36741eee 100644 --- a/mix.exs +++ b/mix.exs @@ -114,9 +114,9 @@ defp oauth_deps do # Type `mix help deps` for examples and options. defp deps do [ - {:phoenix, "~> 1.4.8"}, + {:phoenix, "~> 1.4.17"}, {:tzdata, "~> 1.0.3"}, - {:plug_cowboy, "~> 2.0"}, + {:plug_cowboy, "~> 2.3"}, {:phoenix_pubsub, "~> 1.1"}, {:phoenix_ecto, "~> 4.0"}, {:ecto_enum, "~> 1.4"}, @@ -129,7 +129,7 @@ defp deps do {:trailing_format_plug, "~> 0.0.7"}, {:fast_sanitize, "~> 0.1"}, {:html_entities, "~> 0.5", override: true}, - {:phoenix_html, "~> 2.10"}, + {:phoenix_html, "~> 2.14"}, {:calendar, "~> 0.17.4"}, {:cachex, "~> 3.2"}, {:poison, "~> 3.0", override: true}, @@ -137,7 +137,7 @@ defp deps do {:tesla, github: "teamon/tesla", ref: "af3707078b10793f6a534938e56b963aff82fe3c", override: true}, {:castore, "~> 0.1"}, - {:cowlib, "~> 2.8", override: true}, + {:cowlib, "~> 2.9", override: true}, {:gun, github: "ninenines/gun", ref: "921c47146b2d9567eac7e9a4d2ccc60fffd4f327", override: true}, {:jason, "~> 1.0"}, @@ -156,8 +156,8 @@ defp deps do {:phoenix_swoosh, "~> 0.3"}, {:gen_smtp, "~> 0.13"}, {:ex_syslogger, "~> 1.4"}, - {:floki, "~> 0.25"}, - {:timex, "~> 3.5"}, + {:floki, "~> 0.27"}, + {:timex, "~> 3.6"}, {:ueberauth, "~> 0.4"}, {:linkify, "~> 0.2.0"}, {:http_signatures, diff --git a/mix.lock b/mix.lock index 3125ac3ce..4c04e7ef3 100644 --- a/mix.lock +++ b/mix.lock @@ -10,7 +10,7 @@ "cachex": {:hex, :cachex, "3.2.0", "a596476c781b0646e6cb5cd9751af2e2974c3e0d5498a8cab71807618b74fe2f", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:jumper, "~> 1.0", [hex: :jumper, repo: "hexpm", optional: false]}, {:sleeplocks, "~> 1.1", [hex: :sleeplocks, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm", "aef93694067a43697ae0531727e097754a9e992a1e7946296f5969d6dd9ac986"}, "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"}, + "castore": {:hex, :castore, "0.1.6", "2da0dccb3eacb67841d11790598ff03cd5caee861e01fad61dce1376b5da28e6", [:mix], [], "hexpm", "f874c510b720d31dd6334e9ae5c859a06a3c9e67dfe1a195c512e57588556d3f"}, "certifi": {:hex, :certifi, "2.5.2", "b7cfeae9d2ed395695dd8201c57a2d019c0c43ecaf8b8bcb9320b40d6662f340", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm", "3b3b5f36493004ac3455966991eaf6e768ce9884693d9968055aeeeb1e575040"}, "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, "comeonin": {:hex, :comeonin, "5.3.1", "7fe612b739c78c9c1a75186ef2d322ce4d25032d119823269d0aa1e2f1e20025", [:mix], [], "hexpm", "d6222483060c17f0977fad1b7401ef0c5863c985a64352755f366aee3799c245"}, @@ -35,7 +35,7 @@ "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": {:hex, :ex_aws, "2.1.3", "26b6f036f0127548706aade4a509978fc7c26bd5334b004fba9bfe2687a525df", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8", [hex: :jsx, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "0bdbe2aed9f326922fc5a6a80417e32f0c895f4b3b2b0b9676ebf23dd16c5da4"}, "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.22.2", "03a2a58bdd2ba0d83d004507c4ee113b9c521956938298eba16e55cc4aba4a6c", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "cf60e1b3e2efe317095b6bb79651f83a2c1b3edcb4d319c421d7fcda8b3aff26"}, @@ -45,17 +45,17 @@ "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", "631f4e627c46d5ecd347df5a2accdaf0621c77c3693c5b75a8ad58e84c61f242"}, + "floki": {:hex, :floki, "0.27.0", "6b29a14283f1e2e8fad824bc930eaa9477c462022075df6bea8f0ad811c13599", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "583b8c13697c37179f1f82443bcc7ad2f76fbc0bf4c186606eebd658f7f2631b"}, "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"}, + "gettext": {:hex, :gettext, "0.18.0", "406d6b9e0e3278162c2ae1de0a60270452c553536772167e2d701f028116f870", [:mix], [], "hexpm", "c3f850be6367ebe1a08616c2158affe4a23231c70391050bf359d5f92f66a571"}, "gun": {:git, "https://github.com/ninenines/gun.git", "921c47146b2d9567eac7e9a4d2ccc60fffd4f327", [ref: "921c47146b2d9567eac7e9a4d2ccc60fffd4f327"]}, "hackney": {:hex, :hackney, "1.16.0", "5096ac8e823e3a441477b2d187e30dd3fff1a82991a806b2003845ce72ce2d84", [:rebar3], [{:certifi, "2.5.2", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.1", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.0", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.6", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "3bf0bebbd5d3092a3543b783bf065165fa5d3ad4b899b836810e513064134e18"}, "html_entities": {:hex, :html_entities, "0.5.1", "1c9715058b42c35a2ab65edc5b36d0ea66dd083767bef6e3edb57870ef556549", [:mix], [], "hexpm", "30efab070904eb897ff05cd52fa61c1025d7f8ef3a9ca250bc4e6513d16c32de"}, "html_sanitize_ex": {:hex, :html_sanitize_ex, "1.3.0", "f005ad692b717691203f940c686208aa3d8ffd9dd4bb3699240096a51fa9564e", [:mix], [{:mochiweb, "~> 2.15", [hex: :mochiweb, repo: "hexpm", optional: false]}], "hexpm"}, "http_signatures": {:git, "https://git.pleroma.social/pleroma/http_signatures.git", "293d77bb6f4a67ac8bde1428735c3b42f22cbb30", [ref: "293d77bb6f4a67ac8bde1428735c3b42f22cbb30"]}, - "httpoison": {:hex, :httpoison, "1.6.2", "ace7c8d3a361cebccbed19c283c349b3d26991eff73a1eaaa8abae2e3c8089b6", [:mix], [{:hackney, "~> 1.15 and >= 1.15.2", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "aa2c74bd271af34239a3948779612f87df2422c2fdcfdbcec28d9c105f0773fe"}, + "httpoison": {:hex, :httpoison, "1.7.0", "abba7d086233c2d8574726227b6c2c4f6e53c4deae7fe5f6de531162ce9929a0", [:mix], [{:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "975cc87c845a103d3d1ea1ccfd68a2700c211a434d8428b10c323dc95dc5b980"}, "idna": {:hex, :idna, "6.0.1", "1d038fb2e7668ce41fbf681d2c45902e52b3cb9e9c77b55334353b222c2ee50c", [:rebar3], [{:unicode_util_compat, "0.5.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "a02c8a1c4fd601215bb0b0324c8a6986749f807ce35f25449ec9e69758708122"}, "inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm", "64a2d30189704ae41ca7dbdd587f5291db5d1dda1414e0774c29ffc81088c1bc"}, "jason": {:hex, :jason, "1.2.1", "12b22825e22f468c02eb3e4b9985f3d0cb8dc40b9bd704730efa11abd2708c44", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "b659b8571deedf60f79c5a608e15414085fa141344e2716fbd6988a084b5f993"}, @@ -73,7 +73,7 @@ "mochiweb": {:hex, :mochiweb, "2.18.0", "eb55f1db3e6e960fac4e6db4e2db9ec3602cc9f30b86cd1481d56545c3145d2e", [:rebar3], [], "hexpm"}, "mock": {:hex, :mock, "0.3.5", "feb81f52b8dcf0a0d65001d2fec459f6b6a8c22562d94a965862f6cc066b5431", [:mix], [{:meck, "~> 0.8.13", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "6fae404799408300f863550392635d8f7e3da6b71abdd5c393faf41b131c8728"}, "mogrify": {:hex, :mogrify, "0.6.1", "de1b527514f2d95a7bbe9642eb556061afb337e220cf97adbf3a4e6438ed70af", [:mix], [], "hexpm", "3bc928d817974fa10cc11e6c89b9a9361e37e96dbbf3d868c41094ec05745dcd"}, - "mox": {:hex, :mox, "0.5.1", "f86bb36026aac1e6f924a4b6d024b05e9adbed5c63e8daa069bd66fb3292165b", [:mix], [], "hexpm", "052346cf322311c49a0f22789f3698eea030eec09b8c47367f0686ef2634ae14"}, + "mox": {:hex, :mox, "0.5.2", "55a0a5ba9ccc671518d068c8dddd20eeb436909ea79d1799e2209df7eaa98b6c", [:mix], [], "hexpm", "df4310628cd628ee181df93f50ddfd07be3e5ecc30232d3b6aadf30bdfe6092b"}, "myhtmlex": {:git, "https://git.pleroma.social/pleroma/myhtmlex.git", "ad0097e2f61d4953bfef20fb6abddf23b87111e6", [ref: "ad0097e2f61d4953bfef20fb6abddf23b87111e6", submodules: true]}, "nimble_parsec": {:hex, :nimble_parsec, "0.6.0", "32111b3bf39137144abd7ba1cce0914533b2d16ef35e8abc5ec8be6122944263", [:mix], [], "hexpm", "27eac315a94909d4dc68bc07a4a83e06c8379237c5ea528a9acff4ca1c873c52"}, "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, @@ -101,7 +101,7 @@ "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", "72f3840fedd94f06315c523f6cecf5b4827233bed7ae3fe135b2a0ebeab5e196"}, + "recon": {:hex, :recon, "2.5.1", "430ffa60685ac1efdfb1fe4c97b8767c92d0d92e6e7c3e8621559ba77598678a", [:mix, :rebar3], [], "hexpm", "5721c6b6d50122d8f68cccac712caa1231f97894bab779eff5ff0f886cb44648"}, "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.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, @@ -110,10 +110,10 @@ "syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"}, "telemetry": {:hex, :telemetry, "0.4.2", "2808c992455e08d6177322f14d3bdb6b625fbcfd233a73505870d8738a2f4599", [:rebar3], [], "hexpm", "2d1419bd9dda6a206d7b5852179511722e2b18812310d304620c7bd92a13fcef"}, "tesla": {:git, "https://github.com/teamon/tesla.git", "af3707078b10793f6a534938e56b963aff82fe3c", [ref: "af3707078b10793f6a534938e56b963aff82fe3c"]}, - "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"}, + "timex": {:hex, :timex, "3.6.2", "845cdeb6119e2fef10751c0b247b6c59d86d78554c83f78db612e3290f819bc2", [: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", "26030b46199d02a590be61c2394b37ea25a3664c02fafbeca0b24c972025d47a"}, "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, "1.0.3", "73470ad29dde46e350c60a66e6b360d3b99d2d18b74c4c349dbebbc27a09a3eb", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "a6e1ee7003c4d04ecbd21dd3ec690d4c6662db5d3bbdd7262d53cdf5e7c746c1"}, - "ueberauth": {:hex, :ueberauth, "0.6.2", "25a31111249d60bad8b65438b2306a4dc91f3208faa62f5a8c33e8713989b2e8", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "db9fbfb5ac707bc4f85a297758406340bf0358b4af737a88113c1a9eee120ac7"}, + "ueberauth": {:hex, :ueberauth, "0.6.3", "d42ace28b870e8072cf30e32e385579c57b9cc96ec74fa1f30f30da9c14f3cc0", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "afc293d8a1140d6591b53e3eaf415ca92842cb1d32fad3c450c6f045f7f91b60"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.5.0", "8516502659002cec19e244ebd90d312183064be95025a319a6c7e89f4bccd65b", [:rebar3], [], "hexpm", "d48d002e15f5cc105a696cf2f1bbb3fc72b4b770a184d8420c8db20da2674b38"}, "unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm", "6c7729a2d214806450d29766abc2afaa7a2cbecf415be64f36a6691afebb50e5"}, "web_push_encryption": {:hex, :web_push_encryption, "0.2.3", "a0ceab85a805a30852f143d22d71c434046fbdbafbc7292e7887cec500826a80", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jose, "~> 1.8", [hex: :jose, repo: "hexpm", optional: false]}, {:poison, "~> 3.0", [hex: :poison, repo: "hexpm", optional: false]}], "hexpm", "9315c8f37c108835cf3f8e9157d7a9b8f420a34f402d1b1620a31aed5b93ecdf"}, From 88f57418c8da90956c12f58ada282976084a55d2 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 29 Jul 2020 07:02:36 +0300 Subject: [PATCH 174/236] updated `pot` package --- mix.exs | 2 +- mix.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index d36741eee..a31d86b28 100644 --- a/mix.exs +++ b/mix.exs @@ -174,7 +174,7 @@ defp deps do {:quack, "~> 0.1.1"}, {:joken, "~> 2.0"}, {:benchee, "~> 1.0"}, - {:pot, "~> 0.10.2"}, + {:pot, "~> 0.11"}, {: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 4c04e7ef3..d23e77cfe 100644 --- a/mix.lock +++ b/mix.lock @@ -93,7 +93,7 @@ "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.5", "aec40306a622d459b01bff890fa42f1430dac61593b122754144ad9033a2152f", [: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", "ed90c81e1525f65a2ba2279dbcebf030d6d13328daa2f8088b9661eb9143af7f"}, - "pot": {:hex, :pot, "0.10.2", "9895c83bcff8cd22d9f5bc79dfc88a188176b261b618ad70d93faf5c5ca36e67", [:rebar3], [], "hexpm", "ac589a8e296b7802681e93cd0a436faec117ea63e9916709c628df31e17e91e2"}, + "pot": {:hex, :pot, "0.11.0", "61bad869a94534739dd4614a25a619bc5c47b9970e9a0ea5bef4628036fc7a16", [:rebar3], [], "hexpm", "57ee6ee6bdeb639661ffafb9acefe3c8f966e45394de6a766813bb9e1be4e54b"}, "prometheus": {:hex, :prometheus, "4.6.0", "20510f381db1ccab818b4cf2fac5fa6ab5cc91bc364a154399901c001465f46f", [:mix, :rebar3], [], "hexpm", "4905fd2992f8038eccd7aa0cd22f40637ed618c0bed1f75c05aacec15b7545de"}, "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"}, From d6e36aaf06e0e80eeb062ce6228a794a585309ba Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 29 Jul 2020 07:13:59 +0300 Subject: [PATCH 175/236] set `jason` version --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index a31d86b28..557e0d700 100644 --- a/mix.exs +++ b/mix.exs @@ -140,7 +140,7 @@ defp deps do {:cowlib, "~> 2.9", override: true}, {:gun, github: "ninenines/gun", ref: "921c47146b2d9567eac7e9a4d2ccc60fffd4f327", override: true}, - {:jason, "~> 1.0"}, + {:jason, "~> 1.2"}, {:mogrify, "~> 0.6.1"}, {:ex_aws, "~> 2.1"}, {:ex_aws_s3, "~> 2.0"}, From b4603a9c9cf9d072a3220aed1c843132d642cc1f Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 29 Jul 2020 07:23:06 +0300 Subject: [PATCH 176/236] set http_signatures version --- mix.exs | 4 +--- mix.lock | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/mix.exs b/mix.exs index 557e0d700..ba539e9ed 100644 --- a/mix.exs +++ b/mix.exs @@ -160,9 +160,7 @@ defp deps do {:timex, "~> 3.6"}, {:ueberauth, "~> 0.4"}, {:linkify, "~> 0.2.0"}, - {:http_signatures, - git: "https://git.pleroma.social/pleroma/http_signatures.git", - ref: "293d77bb6f4a67ac8bde1428735c3b42f22cbb30"}, + {:http_signatures, "~> 0.1.0"}, {:telemetry, "~> 0.3"}, {:poolboy, "~> 1.5"}, {:prometheus, "~> 4.6"}, diff --git a/mix.lock b/mix.lock index d23e77cfe..ebeee05a1 100644 --- a/mix.lock +++ b/mix.lock @@ -54,7 +54,7 @@ "hackney": {:hex, :hackney, "1.16.0", "5096ac8e823e3a441477b2d187e30dd3fff1a82991a806b2003845ce72ce2d84", [:rebar3], [{:certifi, "2.5.2", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.1", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.0", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.6", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "3bf0bebbd5d3092a3543b783bf065165fa5d3ad4b899b836810e513064134e18"}, "html_entities": {:hex, :html_entities, "0.5.1", "1c9715058b42c35a2ab65edc5b36d0ea66dd083767bef6e3edb57870ef556549", [:mix], [], "hexpm", "30efab070904eb897ff05cd52fa61c1025d7f8ef3a9ca250bc4e6513d16c32de"}, "html_sanitize_ex": {:hex, :html_sanitize_ex, "1.3.0", "f005ad692b717691203f940c686208aa3d8ffd9dd4bb3699240096a51fa9564e", [:mix], [{:mochiweb, "~> 2.15", [hex: :mochiweb, repo: "hexpm", optional: false]}], "hexpm"}, - "http_signatures": {:git, "https://git.pleroma.social/pleroma/http_signatures.git", "293d77bb6f4a67ac8bde1428735c3b42f22cbb30", [ref: "293d77bb6f4a67ac8bde1428735c3b42f22cbb30"]}, + "http_signatures": {:hex, :http_signatures, "0.1.0", "4e4b501a936dbf4cb5222597038a89ea10781776770d2e185849fa829686b34c", [:mix], [], "hexpm", "f8a7b3731e3fd17d38fa6e343fcad7b03d6874a3b0a108c8568a71ed9c2cf824"}, "httpoison": {:hex, :httpoison, "1.7.0", "abba7d086233c2d8574726227b6c2c4f6e53c4deae7fe5f6de531162ce9929a0", [:mix], [{:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "975cc87c845a103d3d1ea1ccfd68a2700c211a434d8428b10c323dc95dc5b980"}, "idna": {:hex, :idna, "6.0.1", "1d038fb2e7668ce41fbf681d2c45902e52b3cb9e9c77b55334353b222c2ee50c", [:rebar3], [{:unicode_util_compat, "0.5.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "a02c8a1c4fd601215bb0b0324c8a6986749f807ce35f25449ec9e69758708122"}, "inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm", "64a2d30189704ae41ca7dbdd587f5291db5d1dda1414e0774c29ffc81088c1bc"}, From cd2423d7f5c082d49fb429708bb8476342b35136 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Wed, 29 Jul 2020 09:22:49 +0300 Subject: [PATCH 177/236] update mogrify package --- mix.exs | 2 +- mix.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index ba539e9ed..c0a8d0e9f 100644 --- a/mix.exs +++ b/mix.exs @@ -141,7 +141,7 @@ defp deps do {:gun, github: "ninenines/gun", ref: "921c47146b2d9567eac7e9a4d2ccc60fffd4f327", override: true}, {:jason, "~> 1.2"}, - {:mogrify, "~> 0.6.1"}, + {:mogrify, "~> 0.7.4"}, {:ex_aws, "~> 2.1"}, {:ex_aws_s3, "~> 2.0"}, {:sweet_xml, "~> 0.6.6"}, diff --git a/mix.lock b/mix.lock index ebeee05a1..a7cd6060c 100644 --- a/mix.lock +++ b/mix.lock @@ -72,7 +72,7 @@ "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, "mochiweb": {:hex, :mochiweb, "2.18.0", "eb55f1db3e6e960fac4e6db4e2db9ec3602cc9f30b86cd1481d56545c3145d2e", [:rebar3], [], "hexpm"}, "mock": {:hex, :mock, "0.3.5", "feb81f52b8dcf0a0d65001d2fec459f6b6a8c22562d94a965862f6cc066b5431", [:mix], [{:meck, "~> 0.8.13", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "6fae404799408300f863550392635d8f7e3da6b71abdd5c393faf41b131c8728"}, - "mogrify": {:hex, :mogrify, "0.6.1", "de1b527514f2d95a7bbe9642eb556061afb337e220cf97adbf3a4e6438ed70af", [:mix], [], "hexpm", "3bc928d817974fa10cc11e6c89b9a9361e37e96dbbf3d868c41094ec05745dcd"}, + "mogrify": {:hex, :mogrify, "0.7.4", "9b2496dde44b1ce12676f85d7dc531900939e6367bc537c7243a1b089435b32d", [:mix], [], "hexpm", "50d79e337fba6bc95bfbef918058c90f50b17eed9537771e61d4619488f099c3"}, "mox": {:hex, :mox, "0.5.2", "55a0a5ba9ccc671518d068c8dddd20eeb436909ea79d1799e2209df7eaa98b6c", [:mix], [], "hexpm", "df4310628cd628ee181df93f50ddfd07be3e5ecc30232d3b6aadf30bdfe6092b"}, "myhtmlex": {:git, "https://git.pleroma.social/pleroma/myhtmlex.git", "ad0097e2f61d4953bfef20fb6abddf23b87111e6", [ref: "ad0097e2f61d4953bfef20fb6abddf23b87111e6", submodules: true]}, "nimble_parsec": {:hex, :nimble_parsec, "0.6.0", "32111b3bf39137144abd7ba1cce0914533b2d16ef35e8abc5ec8be6122944263", [:mix], [], "hexpm", "27eac315a94909d4dc68bc07a4a83e06c8379237c5ea528a9acff4ca1c873c52"}, From edf8b6abfeba487406db756254a00524e3a9dce2 Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 29 Jul 2020 10:53:08 +0200 Subject: [PATCH 178/236] EnsureRePrepended: Don't break on chat messages. --- .../web/activity_pub/mrf/ensure_re_prepended.ex | 3 ++- test/web/activity_pub/mrf/ensure_re_prepended_test.exs | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/mrf/ensure_re_prepended.ex b/lib/pleroma/web/activity_pub/mrf/ensure_re_prepended.ex index 2627a0007..3bf70b894 100644 --- a/lib/pleroma/web/activity_pub/mrf/ensure_re_prepended.ex +++ b/lib/pleroma/web/activity_pub/mrf/ensure_re_prepended.ex @@ -27,7 +27,8 @@ def filter_by_summary( def filter_by_summary(_in_reply_to, child), do: child - def filter(%{"type" => "Create", "object" => child_object} = object) do + def filter(%{"type" => "Create", "object" => child_object} = object) + when is_map(child_object) do child = child_object["inReplyTo"] |> Object.normalize(child_object["inReplyTo"]) 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 38ddec5bb..9a283f27d 100644 --- a/test/web/activity_pub/mrf/ensure_re_prepended_test.exs +++ b/test/web/activity_pub/mrf/ensure_re_prepended_test.exs @@ -78,5 +78,15 @@ test "it skip if parent and child summary isn't equal" do assert {:ok, res} = EnsureRePrepended.filter(message) assert res == message end + + test "it skips if the object is only a reference" do + message = %{ + "type" => "Create", + "object" => "somereference" + } + + assert {:ok, res} = EnsureRePrepended.filter(message) + assert res == message + end end end From c25c21dd22202fe0fc827ef57e5a69631fa35bf7 Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 29 Jul 2020 11:47:03 +0200 Subject: [PATCH 179/236] AccountController: Don't explicitly ask to keep users unconfirmed. Confirmation is set in User.register_changeset based on the config settings. --- .../controllers/account_controller.ex | 2 +- test/user_test.exs | 27 +++++--- .../controllers/account_controller_test.exs | 68 ++++++++++++++++++- 3 files changed, 84 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 fe5d022f5..4c97904b6 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -100,7 +100,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do def create(%{assigns: %{app: app}, body_params: params} = conn, _params) do with :ok <- validate_email_param(params), :ok <- TwitterAPI.validate_captcha(app, params), - {:ok, user} <- TwitterAPI.register_user(params, need_confirmation: true), + {:ok, user} <- TwitterAPI.register_user(params), {:ok, token} <- Token.create_token(app, user, %{scopes: app.scopes}) do json(conn, OAuthView.render("token.json", %{user: user, token: token})) else diff --git a/test/user_test.exs b/test/user_test.exs index d087e9101..80c0bd79c 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -500,6 +500,24 @@ test "it sets the password_hash and ap_id" do assert changeset.changes.follower_address == "#{changeset.changes.ap_id}/followers" end + + test "it sets the 'accepts_chat_messages' set to true" do + changeset = User.register_changeset(%User{}, @full_user_data) + assert changeset.valid? + + {:ok, user} = Repo.insert(changeset) + + assert user.accepts_chat_messages + end + + test "it creates a confirmed user" do + changeset = User.register_changeset(%User{}, @full_user_data) + assert changeset.valid? + + {:ok, user} = Repo.insert(changeset) + + refute user.confirmation_pending + end end describe "user registration, with :account_activation_required" do @@ -513,15 +531,6 @@ test "it sets the password_hash and ap_id" do } setup do: clear_config([:instance, :account_activation_required], true) - test "it sets the 'accepts_chat_messages' set to true" do - changeset = User.register_changeset(%User{}, @full_user_data) - assert changeset.valid? - - {:ok, user} = Repo.insert(changeset) - - assert user.accepts_chat_messages - end - test "it creates unconfirmed user" do changeset = User.register_changeset(%User{}, @full_user_data) assert changeset.valid? diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index c304487ea..a2332d2af 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -903,9 +903,73 @@ test "blocking / unblocking a user" do [valid_params: valid_params] end - setup do: clear_config([:instance, :account_activation_required]) + test "Account registration via Application, no confirmation required", %{conn: conn} do + clear_config([:instance, :account_activation_required], false) + + conn = + 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" + }) + + 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", %{ + grant_type: "client_credentials", + client_id: client_id, + client_secret: client_secret + }) + + assert %{"access_token" => token, "refresh_token" => refresh, "scope" => scope} = + json_response(conn, 200) + + assert token + token_from_db = Repo.get_by(Token, token: token) + assert token_from_db + assert refresh + assert scope == "read write follow" + + conn = + build_conn() + |> put_req_header("content-type", "multipart/form-data") + |> put_req_header("authorization", "Bearer " <> token) + |> post("/api/v1/accounts", %{ + username: "lain", + email: "lain@example.org", + password: "PlzDontHackLain", + bio: "Test Bio", + agreement: true + }) + + %{ + "access_token" => token, + "created_at" => _created_at, + "scope" => ^scope, + "token_type" => "Bearer" + } = json_response_and_validate_schema(conn, 200) + + token_from_db = Repo.get_by(Token, token: token) + assert token_from_db + token_from_db = Repo.preload(token_from_db, :user) + assert token_from_db.user + refute token_from_db.user.confirmation_pending + end test "Account registration via Application", %{conn: conn} do + clear_config([:instance, :account_activation_required], true) + conn = conn |> put_req_header("content-type", "application/json") @@ -1188,8 +1252,6 @@ test "respects rate limit setting", %{conn: conn} do assert token_from_db token_from_db = Repo.preload(token_from_db, :user) assert token_from_db.user - - assert token_from_db.user.confirmation_pending end conn = From 2e27847573e91946e6777f9aa18b9cf9ccaf820d Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Wed, 29 Jul 2020 14:02:02 +0200 Subject: [PATCH 180/236] feed/user_controller: Return 404 when the user is remote --- lib/pleroma/web/feed/user_controller.ex | 3 ++- test/web/feed/user_controller_test.exs | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/feed/user_controller.ex b/lib/pleroma/web/feed/user_controller.ex index d56f43818..9cd334a33 100644 --- a/lib/pleroma/web/feed/user_controller.ex +++ b/lib/pleroma/web/feed/user_controller.ex @@ -47,7 +47,7 @@ def feed(conn, %{"nickname" => nickname} = params) do "atom" end - with {_, %User{} = user} <- {:fetch_user, User.get_cached_by_nickname(nickname)} do + with {_, %User{local: true} = user} <- {:fetch_user, User.get_cached_by_nickname(nickname)} do activities = %{ type: ["Create"], @@ -71,6 +71,7 @@ def errors(conn, {:error, :not_found}) do render_error(conn, :not_found, "Not found") end + def errors(conn, {:fetch_user, %User{local: false}}), do: errors(conn, {:error, :not_found}) def errors(conn, {:fetch_user, nil}), do: errors(conn, {:error, :not_found}) def errors(conn, _) do diff --git a/test/web/feed/user_controller_test.exs b/test/web/feed/user_controller_test.exs index fa2ed1ea5..0d2a61967 100644 --- a/test/web/feed/user_controller_test.exs +++ b/test/web/feed/user_controller_test.exs @@ -181,6 +181,17 @@ test "returns feed with public and unlisted activities", %{conn: conn} do assert activity_titles == ['public', 'unlisted'] end + + test "returns 404 when the user is remote", %{conn: conn} do + user = insert(:user, local: false) + + {:ok, _} = CommonAPI.post(user, %{status: "test"}) + + assert conn + |> put_req_header("accept", "application/atom+xml") + |> get(user_feed_path(conn, :feed, user.nickname)) + |> response(404) + end end # Note: see ActivityPubControllerTest for JSON format tests From 026a51cb27e250a55a03c509390390e8141dc290 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 29 Jul 2020 12:45:32 -0500 Subject: [PATCH 181/236] :show_reactions, add CHANGELOG.md, refactor test --- CHANGELOG.md | 1 + .../controllers/emoji_reaction_controller_test.exs | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d5256600..7ce208b0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -69,6 +69,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Added Pleroma.Upload.Filter.Exiftool as an alternate EXIF stripping mechanism targeting GPS/location metadata. - "By approval" registrations mode. - Configuration: Added `:welcome` settings for the welcome message to newly registered users. +- Ability to hide favourites and emoji reactions in the API with `[:instance, :show_reactions]` config.
API Changes diff --git a/test/web/pleroma_api/controllers/emoji_reaction_controller_test.exs b/test/web/pleroma_api/controllers/emoji_reaction_controller_test.exs index 8af2ee03f..3deab30d1 100644 --- a/test/web/pleroma_api/controllers/emoji_reaction_controller_test.exs +++ b/test/web/pleroma_api/controllers/emoji_reaction_controller_test.exs @@ -13,8 +13,6 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionControllerTest do import Pleroma.Factory - setup do: clear_config([:instance, :show_reactions]) - test "PUT /api/v1/pleroma/statuses/:id/reactions/:emoji", %{conn: conn} do user = insert(:user) other_user = insert(:user) @@ -109,7 +107,7 @@ test "GET /api/v1/pleroma/statuses/:id/reactions", %{conn: conn} do end test "GET /api/v1/pleroma/statuses/:id/reactions with :show_reactions disabled", %{conn: conn} do - Pleroma.Config.put([:instance, :show_reactions], false) + clear_config([:instance, :show_reactions], false) user = insert(:user) other_user = insert(:user) From 00d090004eefdf6cf2cf644be1d4dcfdd8b0ba35 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 29 Jul 2020 12:50:11 -0500 Subject: [PATCH 182/236] :show_reactions, refactor the other test --- test/web/mastodon_api/controllers/status_controller_test.exs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/web/mastodon_api/controllers/status_controller_test.exs b/test/web/mastodon_api/controllers/status_controller_test.exs index e3f127163..5955d8334 100644 --- a/test/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/web/mastodon_api/controllers/status_controller_test.exs @@ -21,7 +21,6 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do setup do: clear_config([:instance, :federating]) setup do: clear_config([:instance, :allow_relay]) - setup do: clear_config([:instance, :show_reactions]) setup do: clear_config([:rich_media, :enabled]) setup do: clear_config([:mrf, :policies]) setup do: clear_config([:mrf_keyword, :reject]) @@ -1435,7 +1434,7 @@ test "requires authentication for private posts", %{user: user} do end test "returns empty array when :show_reactions is disabled", %{conn: conn, activity: activity} do - Pleroma.Config.put([:instance, :show_reactions], false) + clear_config([:instance, :show_reactions], false) other_user = insert(:user) {:ok, _} = CommonAPI.favorite(other_user, activity.id) From 93638935d783c092dabac51982426ebd98a21e0e Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 29 Jul 2020 12:58:08 -0500 Subject: [PATCH 183/236] SimpleMRF: :silence --> :followers_only --- config/description.exs | 2 +- docs/configuration/cheatsheet.md | 2 +- lib/pleroma/web/activity_pub/mrf/simple_policy.ex | 10 +++++----- test/web/activity_pub/mrf/simple_policy_test.exs | 8 ++++---- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/config/description.exs b/config/description.exs index 9ffe6f93d..dc6e2a76e 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1525,7 +1525,7 @@ suggestions: ["example.com", "*.example.com"] }, %{ - key: :silence, + key: :followers_only, type: {:list, :string}, description: "Force posts from the given instances to be visible by followers only", suggestions: ["example.com", "*.example.com"] diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 9a7f4f369..b195b6f17 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -122,7 +122,7 @@ To add configuration to your config file, you can copy it from the base config. * `federated_timeline_removal`: List of instances to remove from Federated (aka The Whole Known Network) Timeline. * `reject`: List of instances to reject any activities from. * `accept`: List of instances to accept any activities from. -* `silence`: List of instances to force posts as followers-only. +* `followers_only`: List of instances to force posts as followers-only. * `report_removal`: List of instances to reject reports from. * `avatar_removal`: List of instances to strip avatars from. * `banner_removal`: List of instances to strip banners from. diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index 4dce22cfa..ffaac767e 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -109,13 +109,13 @@ defp check_ftl_removal(%{host: actor_host} = _actor_info, object) do {:ok, object} end - defp check_silence(%{host: actor_host} = _actor_info, object) do - silence = - Config.get([:mrf_simple, :silence]) + defp check_followers_only(%{host: actor_host} = _actor_info, object) do + followers_only = + Config.get([:mrf_simple, :followers_only]) |> MRF.subdomains_regex() object = - with true <- MRF.subdomain_match?(silence, actor_host), + with true <- MRF.subdomain_match?(followers_only, actor_host), user <- User.get_cached_by_ap_id(object["actor"]) do # Don't use Map.get/3 intentionally, these must not be nil fixed_to = object["to"] || [] @@ -200,7 +200,7 @@ def filter(%{"actor" => actor} = object) do {:ok, object} <- check_media_removal(actor_info, object), {:ok, object} <- check_media_nsfw(actor_info, object), {:ok, object} <- check_ftl_removal(actor_info, object), - {:ok, object} <- check_silence(actor_info, object), + {:ok, object} <- check_followers_only(actor_info, object), {:ok, object} <- check_report_removal(actor_info, object) do {:ok, object} else diff --git a/test/web/activity_pub/mrf/simple_policy_test.exs b/test/web/activity_pub/mrf/simple_policy_test.exs index 510a31d80..c0e82731b 100644 --- a/test/web/activity_pub/mrf/simple_policy_test.exs +++ b/test/web/activity_pub/mrf/simple_policy_test.exs @@ -16,7 +16,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do federated_timeline_removal: [], report_removal: [], reject: [], - silence: [], + followers_only: [], accept: [], avatar_removal: [], banner_removal: [], @@ -263,9 +263,9 @@ test "actor has a matching host" do end end - describe "when :silence" do + describe "when :followers_only" do test "is empty" do - Config.put([:mrf_simple, :silence], []) + Config.put([:mrf_simple, :followers_only], []) {_, ftl_message} = build_ftl_actor_and_message() local_message = build_local_message() @@ -296,7 +296,7 @@ test "has a matching host" do |> URI.parse() |> Map.fetch!(:host) - Config.put([:mrf_simple, :silence], [actor_domain]) + Config.put([:mrf_simple, :followers_only], [actor_domain]) assert {:ok, new_activity} = SimplePolicy.filter(activity) assert actor.follower_address in new_activity["to"] From 33f042780909f3478597a8ecd10a2bf31e99dcc9 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 29 Jul 2020 16:07:22 -0500 Subject: [PATCH 184/236] Expose seconds_valid in Pleroma Captcha API endpoint --- CHANGELOG.md | 1 + docs/API/pleroma_api.md | 2 +- lib/pleroma/captcha/kocaptcha.ex | 3 ++- lib/pleroma/captcha/native.ex | 3 ++- test/captcha_test.exs | 6 ++++-- test/support/captcha_mock.ex | 3 ++- 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d5256600..52f917720 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). contents has been renamed to `hide_notification_contents` - Mastodon API: Added `pleroma.metadata.post_formats` to /api/v1/instance - Mastodon API (legacy): Allow query parameters for `/api/v1/domain_blocks`, e.g. `/api/v1/domain_blocks?domain=badposters.zone` +- **Breaking:** Pleroma API: `/api/pleroma/captcha` responses now include `seconds_valid` with an integer value.
diff --git a/docs/API/pleroma_api.md b/docs/API/pleroma_api.md index 5bd38ad36..b29f4d5a0 100644 --- a/docs/API/pleroma_api.md +++ b/docs/API/pleroma_api.md @@ -50,7 +50,7 @@ Request parameters can be passed via [query strings](https://en.wikipedia.org/wi * Authentication: not required * Params: none * Response: Provider specific JSON, the only guaranteed parameter is `type` -* Example response: `{"type": "kocaptcha", "token": "whatever", "url": "https://captcha.kotobank.ch/endpoint"}` +* Example response: `{"type": "kocaptcha", "token": "whatever", "url": "https://captcha.kotobank.ch/endpoint", seconds_valid: 300}` ## `/api/pleroma/delete_account` ### Delete an account diff --git a/lib/pleroma/captcha/kocaptcha.ex b/lib/pleroma/captcha/kocaptcha.ex index 6bc2fa158..337506647 100644 --- a/lib/pleroma/captcha/kocaptcha.ex +++ b/lib/pleroma/captcha/kocaptcha.ex @@ -21,7 +21,8 @@ def new do type: :kocaptcha, token: json_resp["token"], url: endpoint <> json_resp["url"], - answer_data: json_resp["md5"] + answer_data: json_resp["md5"], + seconds_valid: Pleroma.Config.get([Pleroma.Captcha, :seconds_valid]) } end end diff --git a/lib/pleroma/captcha/native.ex b/lib/pleroma/captcha/native.ex index a90631d61..8d604d2b2 100644 --- a/lib/pleroma/captcha/native.ex +++ b/lib/pleroma/captcha/native.ex @@ -17,7 +17,8 @@ def new do type: :native, token: token(), url: "data:image/png;base64," <> Base.encode64(img_binary), - answer_data: answer_data + answer_data: answer_data, + seconds_valid: Pleroma.Config.get([Pleroma.Captcha, :seconds_valid]) } end end diff --git a/test/captcha_test.exs b/test/captcha_test.exs index 1ab9019ab..1b9f4a12f 100644 --- a/test/captcha_test.exs +++ b/test/captcha_test.exs @@ -41,7 +41,8 @@ test "new and validate" do answer_data: answer, token: ^token, url: ^url, - type: :kocaptcha + type: :kocaptcha, + seconds_valid: 300 } = new assert Kocaptcha.validate(token, "7oEy8c", answer) == :ok @@ -56,7 +57,8 @@ test "new and validate" do answer_data: answer, token: token, type: :native, - url: "data:image/png;base64," <> _ + url: "data:image/png;base64," <> _, + seconds_valid: 300 } = new assert is_binary(answer) diff --git a/test/support/captcha_mock.ex b/test/support/captcha_mock.ex index 7b0c1d5af..2ed2ba3b4 100644 --- a/test/support/captcha_mock.ex +++ b/test/support/captcha_mock.ex @@ -16,7 +16,8 @@ def new, type: :mock, token: "afa1815e14e29355e6c8f6b143a39fa2", answer_data: @solution, - url: "https://example.org/captcha.png" + url: "https://example.org/captcha.png", + seconds_valid: 300 } @impl Service From df82839c30b331d2a447301f1d70f3d67583844f Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Thu, 30 Jul 2020 08:58:19 +0300 Subject: [PATCH 185/236] updated `calendar` package --- mix.exs | 2 +- mix.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index c0a8d0e9f..2e9775e04 100644 --- a/mix.exs +++ b/mix.exs @@ -130,7 +130,7 @@ defp deps do {:fast_sanitize, "~> 0.1"}, {:html_entities, "~> 0.5", override: true}, {:phoenix_html, "~> 2.14"}, - {:calendar, "~> 0.17.4"}, + {:calendar, "~> 1.0"}, {:cachex, "~> 3.2"}, {:poison, "~> 3.0", override: true}, # {:tesla, "~> 1.3", override: true}, diff --git a/mix.lock b/mix.lock index a7cd6060c..8389a324d 100644 --- a/mix.lock +++ b/mix.lock @@ -8,7 +8,7 @@ "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.2.0", "a596476c781b0646e6cb5cd9751af2e2974c3e0d5498a8cab71807618b74fe2f", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:jumper, "~> 1.0", [hex: :jumper, repo: "hexpm", optional: false]}, {:sleeplocks, "~> 1.1", [hex: :sleeplocks, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm", "aef93694067a43697ae0531727e097754a9e992a1e7946296f5969d6dd9ac986"}, - "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"}, + "calendar": {:hex, :calendar, "1.0.0", "f52073a708528482ec33d0a171954ca610fe2bd28f1e871f247dc7f1565fa807", [:mix], [{:tzdata, "~> 0.5.20 or ~> 0.1.201603 or ~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "990e9581920c82912a5ee50e62ff5ef96da6b15949a2ee4734f935fdef0f0a6f"}, "captcha": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", "e0f16822d578866e186a0974d65ad58cddc1e2ab", [ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"]}, "castore": {:hex, :castore, "0.1.6", "2da0dccb3eacb67841d11790598ff03cd5caee861e01fad61dce1376b5da28e6", [:mix], [], "hexpm", "f874c510b720d31dd6334e9ae5c859a06a3c9e67dfe1a195c512e57588556d3f"}, "certifi": {:hex, :certifi, "2.5.2", "b7cfeae9d2ed395695dd8201c57a2d019c0c43ecaf8b8bcb9320b40d6662f340", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm", "3b3b5f36493004ac3455966991eaf6e768ce9884693d9968055aeeeb1e575040"}, From 4f10ef5e46f6ecd780994a10b139acb1351b7225 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Thu, 30 Jul 2020 09:08:03 +0300 Subject: [PATCH 186/236] set `web_push_encryption` version --- mix.exs | 3 +-- mix.lock | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/mix.exs b/mix.exs index 2e9775e04..87c5c92af 100644 --- a/mix.exs +++ b/mix.exs @@ -133,7 +133,6 @@ defp deps do {:calendar, "~> 1.0"}, {:cachex, "~> 3.2"}, {:poison, "~> 3.0", override: true}, - # {:tesla, "~> 1.3", override: true}, {:tesla, github: "teamon/tesla", ref: "af3707078b10793f6a534938e56b963aff82fe3c", override: true}, {:castore, "~> 0.1"}, @@ -151,7 +150,7 @@ defp deps do git: "https://github.com/msantos/crypt.git", ref: "f63a705f92c26955977ee62a313012e309a4d77a"}, {:cors_plug, "~> 1.5"}, - {:web_push_encryption, "~> 0.2.1"}, + {:web_push_encryption, "~> 0.3"}, {:swoosh, "~> 1.0"}, {:phoenix_swoosh, "~> 0.3"}, {:gen_smtp, "~> 0.13"}, diff --git a/mix.lock b/mix.lock index 8389a324d..9038f5c90 100644 --- a/mix.lock +++ b/mix.lock @@ -10,7 +10,7 @@ "cachex": {:hex, :cachex, "3.2.0", "a596476c781b0646e6cb5cd9751af2e2974c3e0d5498a8cab71807618b74fe2f", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:jumper, "~> 1.0", [hex: :jumper, repo: "hexpm", optional: false]}, {:sleeplocks, "~> 1.1", [hex: :sleeplocks, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm", "aef93694067a43697ae0531727e097754a9e992a1e7946296f5969d6dd9ac986"}, "calendar": {:hex, :calendar, "1.0.0", "f52073a708528482ec33d0a171954ca610fe2bd28f1e871f247dc7f1565fa807", [:mix], [{:tzdata, "~> 0.5.20 or ~> 0.1.201603 or ~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "990e9581920c82912a5ee50e62ff5ef96da6b15949a2ee4734f935fdef0f0a6f"}, "captcha": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", "e0f16822d578866e186a0974d65ad58cddc1e2ab", [ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"]}, - "castore": {:hex, :castore, "0.1.6", "2da0dccb3eacb67841d11790598ff03cd5caee861e01fad61dce1376b5da28e6", [:mix], [], "hexpm", "f874c510b720d31dd6334e9ae5c859a06a3c9e67dfe1a195c512e57588556d3f"}, + "castore": {:hex, :castore, "0.1.7", "1ca19eee705cde48c9e809e37fdd0730510752cc397745e550f6065a56a701e9", [:mix], [], "hexpm", "a2ae2c13d40e9c308387f1aceb14786dca019ebc2a11484fb2a9f797ea0aa0d8"}, "certifi": {:hex, :certifi, "2.5.2", "b7cfeae9d2ed395695dd8201c57a2d019c0c43ecaf8b8bcb9320b40d6662f340", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm", "3b3b5f36493004ac3455966991eaf6e768ce9884693d9968055aeeeb1e575040"}, "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, "comeonin": {:hex, :comeonin, "5.3.1", "7fe612b739c78c9c1a75186ef2d322ce4d25032d119823269d0aa1e2f1e20025", [:mix], [], "hexpm", "d6222483060c17f0977fad1b7401ef0c5863c985a64352755f366aee3799c245"}, @@ -116,6 +116,6 @@ "ueberauth": {:hex, :ueberauth, "0.6.3", "d42ace28b870e8072cf30e32e385579c57b9cc96ec74fa1f30f30da9c14f3cc0", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "afc293d8a1140d6591b53e3eaf415ca92842cb1d32fad3c450c6f045f7f91b60"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.5.0", "8516502659002cec19e244ebd90d312183064be95025a319a6c7e89f4bccd65b", [:rebar3], [], "hexpm", "d48d002e15f5cc105a696cf2f1bbb3fc72b4b770a184d8420c8db20da2674b38"}, "unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm", "6c7729a2d214806450d29766abc2afaa7a2cbecf415be64f36a6691afebb50e5"}, - "web_push_encryption": {:hex, :web_push_encryption, "0.2.3", "a0ceab85a805a30852f143d22d71c434046fbdbafbc7292e7887cec500826a80", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jose, "~> 1.8", [hex: :jose, repo: "hexpm", optional: false]}, {:poison, "~> 3.0", [hex: :poison, repo: "hexpm", optional: false]}], "hexpm", "9315c8f37c108835cf3f8e9157d7a9b8f420a34f402d1b1620a31aed5b93ecdf"}, + "web_push_encryption": {:hex, :web_push_encryption, "0.3.0", "598b5135e696fd1404dc8d0d7c0fa2c027244a4e5d5e5a98ba267f14fdeaabc8", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jose, "~> 1.8", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "f10bdd1afe527ede694749fb77a2f22f146a51b054c7fa541c9fd920fba7c875"}, "websocket_client": {:git, "https://github.com/jeremyong/websocket_client.git", "9a6f65d05ebf2725d62fb19262b21f1805a59fbf", []}, } From aac7e0314eee9cb629e7bdc290b32aa0b12100cc Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Thu, 30 Jul 2020 09:08:50 +0300 Subject: [PATCH 187/236] set `postgrex` version --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 87c5c92af..00fb2eb5e 100644 --- a/mix.exs +++ b/mix.exs @@ -121,7 +121,7 @@ defp deps do {:phoenix_ecto, "~> 4.0"}, {:ecto_enum, "~> 1.4"}, {:ecto_sql, "~> 3.4.4"}, - {:postgrex, ">= 0.13.5"}, + {:postgrex, ">= 0.15.5"}, {:oban, "~> 2.0.0"}, {:gettext, "~> 0.15"}, {:pbkdf2_elixir, "~> 1.0"}, From b261135683483d7650e8f30fdbd26491dd94b7c4 Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Thu, 30 Jul 2020 09:12:42 +0300 Subject: [PATCH 188/236] updated `cors_plug` --- mix.exs | 2 +- mix.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index 00fb2eb5e..c26e436c6 100644 --- a/mix.exs +++ b/mix.exs @@ -149,7 +149,7 @@ defp deps do {:crypt, git: "https://github.com/msantos/crypt.git", ref: "f63a705f92c26955977ee62a313012e309a4d77a"}, - {:cors_plug, "~> 1.5"}, + {:cors_plug, "~> 2.0"}, {:web_push_encryption, "~> 0.3"}, {:swoosh, "~> 1.0"}, {:phoenix_swoosh, "~> 0.3"}, diff --git a/mix.lock b/mix.lock index 9038f5c90..17b11cdb2 100644 --- a/mix.lock +++ b/mix.lock @@ -16,7 +16,7 @@ "comeonin": {:hex, :comeonin, "5.3.1", "7fe612b739c78c9c1a75186ef2d322ce4d25032d119823269d0aa1e2f1e20025", [:mix], [], "hexpm", "d6222483060c17f0977fad1b7401ef0c5863c985a64352755f366aee3799c245"}, "concurrent_limiter": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/concurrent_limiter.git", "8eee96c6ba39b9286ec44c51c52d9f2758951365", [ref: "8eee96c6ba39b9286ec44c51c52d9f2758951365"]}, "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"}, + "cors_plug": {:hex, :cors_plug, "2.0.2", "2b46083af45e4bc79632bd951550509395935d3e7973275b2b743bd63cc942ce", [:mix], [{:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f0d0e13f71c51fd4ef8b2c7e051388e4dfb267522a83a22392c856de7e46465f"}, "cowboy": {:hex, :cowboy, "2.8.0", "f3dc62e35797ecd9ac1b50db74611193c29815401e53bac9a5c0577bd7bc667d", [:rebar3], [{:cowlib, "~> 2.9.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.7.1", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "4643e4fba74ac96d4d152c75803de6fad0b3fa5df354c71afdd6cbeeb15fac8a"}, "cowlib": {:hex, :cowlib, "2.9.1", "61a6c7c50cf07fdd24b2f45b89500bb93b6686579b069a89f88cb211e1125c78", [:rebar3], [], "hexpm", "e4175dc240a70d996156160891e1c62238ede1729e45740bdd38064dad476170"}, "credo": {:hex, :credo, "1.4.0", "92339d4cbadd1e88b5ee43d427b639b68a11071b6f73854e33638e30a0ea11f5", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "1fd3b70dce216574ce3c18bdf510b57e7c4c85c2ec9cad4bff854abaf7e58658"}, From 56171cbde61c24b06623d8fd1a43fd8e02df37fa Mon Sep 17 00:00:00 2001 From: Maksim Pechnikov Date: Thu, 30 Jul 2020 09:23:35 +0300 Subject: [PATCH 189/236] set versions --- mix.exs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mix.exs b/mix.exs index c26e436c6..860c6aee7 100644 --- a/mix.exs +++ b/mix.exs @@ -123,9 +123,9 @@ defp deps do {:ecto_sql, "~> 3.4.4"}, {:postgrex, ">= 0.15.5"}, {:oban, "~> 2.0.0"}, - {:gettext, "~> 0.15"}, - {:pbkdf2_elixir, "~> 1.0"}, - {:bcrypt_elixir, "~> 2.0"}, + {:gettext, "~> 0.18"}, + {:pbkdf2_elixir, "~> 1.2"}, + {:bcrypt_elixir, "~> 2.2"}, {:trailing_format_plug, "~> 0.0.7"}, {:fast_sanitize, "~> 0.1"}, {:html_entities, "~> 0.5", override: true}, From 20d89472e3b48453b5e2e71cce0f6d97cddbbf53 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Jul 2020 08:00:07 +0000 Subject: [PATCH 190/236] Apply 1 suggestion(s) to 1 file(s) --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52f917720..d22959392 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,7 +33,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). contents has been renamed to `hide_notification_contents` - Mastodon API: Added `pleroma.metadata.post_formats` to /api/v1/instance - Mastodon API (legacy): Allow query parameters for `/api/v1/domain_blocks`, e.g. `/api/v1/domain_blocks?domain=badposters.zone` -- **Breaking:** Pleroma API: `/api/pleroma/captcha` responses now include `seconds_valid` with an integer value. +- Pleroma API: `/api/pleroma/captcha` responses now include `seconds_valid` with an integer value.
From e2e66e50d3066d48d8ef9200e7d221f5aeec4c44 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Jul 2020 14:29:00 +0200 Subject: [PATCH 191/236] SimplePolicyTest: Add test for leaking DMs. --- test/web/activity_pub/mrf/simple_policy_test.exs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/web/activity_pub/mrf/simple_policy_test.exs b/test/web/activity_pub/mrf/simple_policy_test.exs index c0e82731b..9a1a7bdc8 100644 --- a/test/web/activity_pub/mrf/simple_policy_test.exs +++ b/test/web/activity_pub/mrf/simple_policy_test.exs @@ -290,6 +290,15 @@ test "has a matching host" do "cc" => [actor.follower_address, "http://foo.bar/qux"] } + dm_activity = %{ + "actor" => actor.ap_id, + "to" => [ + following_user.ap_id, + non_following_user.ap_id + ], + "cc" => [] + } + actor_domain = activity |> Map.fetch!("actor") @@ -305,6 +314,10 @@ test "has a matching host" do refute "https://www.w3.org/ns/activitystreams#Public" in new_activity["cc"] refute non_following_user.ap_id in new_activity["to"] refute non_following_user.ap_id in new_activity["cc"] + + assert {:ok, new_dm_activity} = SimplePolicy.filter(dm_activity) + assert new_dm_activity["to"] == [following_user.ap_id] + assert new_dm_activity["cc"] == [] end end From 1f24186036010ea588e78f5d73bcddfff27c8f9d Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 30 Jul 2020 12:01:46 -0500 Subject: [PATCH 192/236] Attempt to fix markdown formatting --- docs/configuration/howto_database_config.md | 47 +++++++++++---------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/docs/configuration/howto_database_config.md b/docs/configuration/howto_database_config.md index ded9a2eb3..174b08662 100644 --- a/docs/configuration/howto_database_config.md +++ b/docs/configuration/howto_database_config.md @@ -27,25 +27,26 @@ The configuration of Pleroma has traditionally been managed with a config file, $ ./bin/pleroma_ctl config migrate_to_db ``` - ``` - 10:04:34.155 [debug] QUERY OK source="config" db=1.6ms decode=2.0ms queue=33.5ms idle=0.0ms -SELECT c0."id", c0."key", c0."group", c0."value", c0."inserted_at", c0."updated_at" FROM "config" AS c0 [] -Migrating settings from file: /home/pleroma/config/dev.secret.exs - - 10:04:34.240 [debug] QUERY OK db=4.5ms queue=0.3ms idle=92.2ms -TRUNCATE config; [] - - 10:04:34.244 [debug] QUERY OK db=2.8ms queue=0.3ms idle=97.2ms -ALTER SEQUENCE config_id_seq RESTART; [] - - 10:04:34.256 [debug] QUERY OK source="config" db=0.8ms queue=1.4ms idle=109.8ms -SELECT c0."id", c0."key", c0."group", c0."value", c0."inserted_at", c0."updated_at" FROM "config" AS c0 WHERE ((c0."group" = $1) AND (c0."key" = $2)) [":pleroma", ":instance"] - - 10:04:34.292 [debug] QUERY OK db=2.6ms queue=1.7ms idle=137.7ms -INSERT INTO "config" ("group","key","value","inserted_at","updated_at") VALUES ($1,$2,$3,$4,$5) RETURNING "id" [":pleroma", ":instance", <<131, 108, 0, 0, 0, 1, 104, 2, 100, 0, 4, 110, 97, 109, 101, 109, 0, 0, 0, 7, 66, 108, 101, 114, 111, 109, 97, 106>>, ~N[2020-07-12 15:04:34], ~N[2020-07-12 15:04:34]] - Settings for key instance migrated. - Settings for group :pleroma migrated. ``` + 10:04:34.155 [debug] QUERY OK source="config" db=1.6ms decode=2.0ms queue=33.5ms idle=0.0ms + SELECT c0."id", c0."key", c0."group", c0."value", c0."inserted_at", c0."updated_at" FROM "config" AS c0 [] + Migrating settings from file: /home/pleroma/config/dev.secret.exs + + 10:04:34.240 [debug] QUERY OK db=4.5ms queue=0.3ms idle=92.2ms + TRUNCATE config; [] + + 10:04:34.244 [debug] QUERY OK db=2.8ms queue=0.3ms idle=97.2ms + ALTER SEQUENCE config_id_seq RESTART; [] + + 10:04:34.256 [debug] QUERY OK source="config" db=0.8ms queue=1.4ms idle=109.8ms + SELECT c0."id", c0."key", c0."group", c0."value", c0."inserted_at", c0."updated_at" FROM "config" AS c0 WHERE ((c0."group" = $1) AND (c0."key" = $2)) [":pleroma", ":instance"] + + 10:04:34.292 [debug] QUERY OK db=2.6ms queue=1.7ms idle=137.7ms + INSERT INTO "config" ("group","key","value","inserted_at","updated_at") VALUES ($1,$2,$3,$4,$5) RETURNING "id" [":pleroma", ":instance", <<131, 108, 0, 0, 0, 1, 104, 2, 100, 0, 4, 110, 97, 109, 101, 109, 0, 0, 0, 7, 66, 108, 101, 114, 111, 109, 97, 106>>, ~N[2020-07-12 15:04:34], ~N[2020-07-12 15:04:34]] + Settings for key instance migrated. + Settings for group :pleroma migrated. + ``` + 3. It is recommended to backup your config file now. ``` @@ -110,12 +111,12 @@ config :pleroma, configurable_from_database: true ``` 10:26:30.593 [debug] QUERY OK source="config" db=9.8ms decode=1.2ms queue=26.0ms idle=0.0ms -SELECT c0."id", c0."key", c0."group", c0."value", c0."inserted_at", c0."updated_at" FROM "config" AS c0 [] - + SELECT c0."id", c0."key", c0."group", c0."value", c0."inserted_at", c0."updated_at" FROM "config" AS c0 [] + 10:26:30.659 [debug] QUERY OK source="config" db=1.1ms idle=80.7ms -SELECT c0."id", c0."key", c0."group", c0."value", c0."inserted_at", c0."updated_at" FROM "config" AS c0 [] -Database configuration settings have been saved to config/dev.exported_from_db.secret.exs -``` + SELECT c0."id", c0."key", c0."group", c0."value", c0."inserted_at", c0."updated_at" FROM "config" AS c0 [] + Database configuration settings have been saved to config/dev.exported_from_db.secret.exs + ``` 3. The in-database configuration still exists, but it will not be used if you remove `config :pleroma, configurable_from_database: true` from your config. From cfc6484c40bc407ef6202276999eb53e7609b254 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 30 Jul 2020 12:37:56 -0500 Subject: [PATCH 193/236] OTP users need Pleroma running to execute pleroma_ctl, so reorganize instructions. --- docs/configuration/howto_database_config.md | 81 +++++++++++---------- 1 file changed, 41 insertions(+), 40 deletions(-) diff --git a/docs/configuration/howto_database_config.md b/docs/configuration/howto_database_config.md index ded9a2eb3..0528eabdb 100644 --- a/docs/configuration/howto_database_config.md +++ b/docs/configuration/howto_database_config.md @@ -5,13 +5,7 @@ The configuration of Pleroma has traditionally been managed with a config file, ## Migration to database config -1. Stop your Pleroma instance and edit your Pleroma config to enable database configuration: - - ``` - config :pleroma, configurable_from_database: true - ``` - -2. Run the mix task to migrate to the database. You'll receive some debugging output and a few messages informing you of what happened. +1. Run the mix task to migrate to the database. You'll receive some debugging output and a few messages informing you of what happened. **Source:** @@ -23,6 +17,8 @@ The configuration of Pleroma has traditionally been managed with a config file, **OTP:** + *Note: OTP users need Pleroma to be running for `pleroma_ctl` commands to work* + ``` $ ./bin/pleroma_ctl config migrate_to_db ``` @@ -47,45 +43,50 @@ INSERT INTO "config" ("group","key","value","inserted_at","updated_at") VALUES ( Settings for group :pleroma migrated. ``` -3. It is recommended to backup your config file now. +2. It is recommended to backup your config file now. ``` cp config/dev.secret.exs config/dev.secret.exs.orig ``` -4. Now you can edit your config file and strip it down to the only settings which are not possible to control in the database. e.g., the Postgres and webserver (Endpoint) settings cannot be controlled in the database because the application needs the settings to start up and access the database. +3. Edit your Pleroma config to enable database configuration: - ⚠️ **THIS IS NOT REQUIRED** + ``` + config :pleroma, configurable_from_database: true + ``` + +4. ⚠️ **THIS IS NOT REQUIRED** ⚠️ + + Now you can edit your config file and strip it down to the only settings which are not possible to control in the database. e.g., the Postgres (Repo) and webserver (Endpoint) settings cannot be controlled in the database because the application needs the settings to start up and access the database. + + Any settings in the database will override those in the config file, but you may find it less confusing if the setting is only declared in one place. + + A non-exhaustive list of settings that are only possible in the config file include the following: + + * config :pleroma, Pleroma.Web.Endpoint + * config :pleroma, Pleroma.Repo + * config :pleroma, configurable\_from\_database + * config :pleroma, :database, rum_enabled + * config :pleroma, :connections_pool + + Here is an example of a server config stripped down after migration: + + ``` + use Mix.Config + + config :pleroma, Pleroma.Web.Endpoint, + url: [host: "cool.pleroma.site", scheme: "https", port: 443] + + config :pleroma, Pleroma.Repo, + adapter: Ecto.Adapters.Postgres, + username: "pleroma", + password: "MySecretPassword", + database: "pleroma_prod", + hostname: "localhost" + + config :pleroma, configurable_from_database: true + ``` - Any settings in the database will override those in the config file, but you may find it less confusing if the setting is only declared in one place. - - A non-exhaustive list of settings that are only possible in the config file include the following: - -* config :pleroma, Pleroma.Web.Endpoint -* config :pleroma, Pleroma.Repo -* config :pleroma, configurable_from_database -* config :pleroma, :database, rum_enabled -* config :pleroma, :connections_pool - -Here is an example of a server config stripped down after migration: - -``` -use Mix.Config - -config :pleroma, Pleroma.Web.Endpoint, - url: [host: "cool.pleroma.site", scheme: "https", port: 443] - - -config :pleroma, Pleroma.Repo, - adapter: Ecto.Adapters.Postgres, - username: "pleroma", - password: "MySecretPassword", - database: "pleroma_prod", - hostname: "localhost" - -config :pleroma, configurable_from_database: true -``` - -5. Start your instance back up and you can now access the Settings tab in AdminFE. +5. Restart instance you can now access the Settings tab in AdminFE. ## Reverting back from database config From 781b270863b7a3dcf49c5b52c73aa60511c91a6c Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Jul 2020 19:57:26 +0200 Subject: [PATCH 194/236] ChatMessageReferenceView: Display preview cards. --- .../views/chat/message_reference_view.ex | 9 +++++++-- lib/pleroma/web/rich_media/helpers.ex | 15 ++++++++++++--- .../views/chat/message_reference_view_test.exs | 15 +++++++++++++-- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex b/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex index f2112a86e..d4e08b50d 100644 --- a/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex +++ b/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex @@ -14,7 +14,7 @@ def render( %{ chat_message_reference: %{ id: id, - object: %{data: chat_message}, + object: %{data: chat_message} = object, chat_id: chat_id, unread: unread } @@ -30,7 +30,12 @@ def render( attachment: chat_message["attachment"] && StatusView.render("attachment.json", attachment: chat_message["attachment"]), - unread: unread + unread: unread, + card: + StatusView.render( + "card.json", + Pleroma.Web.RichMedia.Helpers.fetch_data_for_object(object) + ) } end diff --git a/lib/pleroma/web/rich_media/helpers.ex b/lib/pleroma/web/rich_media/helpers.ex index 747f2dc6b..5c7daf1a5 100644 --- a/lib/pleroma/web/rich_media/helpers.ex +++ b/lib/pleroma/web/rich_media/helpers.ex @@ -49,11 +49,11 @@ defp get_tld(host) do |> hd end - def fetch_data_for_activity(%Activity{data: %{"type" => "Create"}} = activity) do + def fetch_data_for_object(object) do with true <- Config.get([:rich_media, :enabled]), - %Object{} = object <- Object.normalize(activity), false <- object.data["sensitive"] || false, - {:ok, page_url} <- HTML.extract_first_external_url(object, object.data["content"]), + {:ok, page_url} <- + HTML.extract_first_external_url(object, object.data["content"]), :ok <- validate_page_url(page_url), {:ok, rich_media} <- Parser.parse(page_url) do %{page_url: page_url, rich_media: rich_media} @@ -62,6 +62,15 @@ def fetch_data_for_activity(%Activity{data: %{"type" => "Create"}} = activity) d end end + def fetch_data_for_activity(%Activity{data: %{"type" => "Create"}} = activity) do + with true <- Config.get([:rich_media, :enabled]), + %Object{} = object <- Object.normalize(activity) do + fetch_data_for_object(object) + else + _ -> %{} + end + end + def fetch_data_for_activity(_), do: %{} def perform(:fetch, %Activity{} = activity) do diff --git a/test/web/pleroma_api/views/chat/message_reference_view_test.exs b/test/web/pleroma_api/views/chat/message_reference_view_test.exs index e5b165255..40dbae3cd 100644 --- a/test/web/pleroma_api/views/chat/message_reference_view_test.exs +++ b/test/web/pleroma_api/views/chat/message_reference_view_test.exs @@ -43,7 +43,17 @@ test "it displays a chat message" do assert chat_message[:unread] == false assert match?([%{shortcode: "firefox"}], chat_message[:emojis]) - {:ok, activity} = CommonAPI.post_chat_message(recipient, user, "gkgkgk", media_id: upload.id) + clear_config([:rich_media, :enabled], true) + + Tesla.Mock.mock(fn + %{url: "https://example.com/ogp"} -> + %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/ogp.html")} + end) + + {:ok, activity} = + CommonAPI.post_chat_message(recipient, user, "gkgkgk https://example.com/ogp", + media_id: upload.id + ) object = Object.normalize(activity) @@ -52,10 +62,11 @@ test "it displays a chat message" do chat_message_two = MessageReferenceView.render("show.json", chat_message_reference: cm_ref) assert chat_message_two[:id] == cm_ref.id - assert chat_message_two[:content] == "gkgkgk" + assert chat_message_two[:content] == object.data["content"] assert chat_message_two[:account_id] == recipient.id assert chat_message_two[:chat_id] == chat_message[:chat_id] assert chat_message_two[:attachment] assert chat_message_two[:unread] == true + assert chat_message_two[:card] end end From a3c37379e9d4d41de38c609447c840213e37db84 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 30 Jul 2020 19:57:45 +0200 Subject: [PATCH 195/236] ChatMessage schema: Add preview cards. --- .../web/api_spec/schemas/chat_message.ex | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/schemas/chat_message.ex b/lib/pleroma/web/api_spec/schemas/chat_message.ex index 3ee85aa76..bbf2a4427 100644 --- a/lib/pleroma/web/api_spec/schemas/chat_message.ex +++ b/lib/pleroma/web/api_spec/schemas/chat_message.ex @@ -19,13 +19,46 @@ defmodule Pleroma.Web.ApiSpec.Schemas.ChatMessage do content: %Schema{type: :string, nullable: true}, created_at: %Schema{type: :string, format: :"date-time"}, emojis: %Schema{type: :array}, - attachment: %Schema{type: :object, nullable: true} + attachment: %Schema{type: :object, nullable: true}, + card: %Schema{ + type: :object, + nullable: true, + description: "Preview card for links included within status content", + required: [:url, :title, :description, :type], + properties: %{ + type: %Schema{ + type: :string, + enum: ["link", "photo", "video", "rich"], + description: "The type of the preview card" + }, + provider_name: %Schema{ + type: :string, + nullable: true, + description: "The provider of the original resource" + }, + provider_url: %Schema{ + type: :string, + format: :uri, + description: "A link to the provider of the original resource" + }, + url: %Schema{type: :string, format: :uri, description: "Location of linked resource"}, + image: %Schema{ + type: :string, + nullable: true, + format: :uri, + description: "Preview thumbnail" + }, + title: %Schema{type: :string, description: "Title of linked resource"}, + description: %Schema{type: :string, description: "Description of preview"} + } + } }, example: %{ "account_id" => "someflakeid", "chat_id" => "1", "content" => "hey you again", "created_at" => "2020-04-21T15:06:45.000Z", + "card" => nil, "emojis" => [ %{ "static_url" => "https://dontbulling.me/emoji/Firefox.gif", From 052833f8eef87d1fcfe7a33f4366f67830882857 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 30 Jul 2020 15:57:41 -0500 Subject: [PATCH 196/236] Fix example json response --- 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 b29f4d5a0..4e97d26c0 100644 --- a/docs/API/pleroma_api.md +++ b/docs/API/pleroma_api.md @@ -50,7 +50,7 @@ Request parameters can be passed via [query strings](https://en.wikipedia.org/wi * Authentication: not required * Params: none * Response: Provider specific JSON, the only guaranteed parameter is `type` -* Example response: `{"type": "kocaptcha", "token": "whatever", "url": "https://captcha.kotobank.ch/endpoint", seconds_valid: 300}` +* Example response: `{"type": "kocaptcha", "token": "whatever", "url": "https://captcha.kotobank.ch/endpoint", "seconds_valid": 300}` ## `/api/pleroma/delete_account` ### Delete an account From 1dd162a5f75e6c2ef1813cd477e6d938127220d9 Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 31 Jul 2020 09:57:30 +0200 Subject: [PATCH 197/236] SimplePolicy: Fix problem with DM leaks. --- lib/pleroma/web/activity_pub/mrf/simple_policy.ex | 8 ++++++-- test/web/activity_pub/mrf/simple_policy_test.exs | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index ffaac767e..bb193475a 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -109,6 +109,10 @@ defp check_ftl_removal(%{host: actor_host} = _actor_info, object) do {:ok, object} end + defp intersection(list1, list2) do + list1 -- list1 -- list2 + end + defp check_followers_only(%{host: actor_host} = _actor_info, object) do followers_only = Config.get([:mrf_simple, :followers_only]) @@ -125,8 +129,8 @@ defp check_followers_only(%{host: actor_host} = _actor_info, object) do cc = FollowingRelationship.followers_ap_ids(user, fixed_cc) object - |> Map.put("to", [user.follower_address] ++ to) - |> Map.put("cc", cc) + |> Map.put("to", intersection([user.follower_address | to], fixed_to)) + |> Map.put("cc", intersection([user.follower_address | cc], fixed_cc)) else _ -> object end diff --git a/test/web/activity_pub/mrf/simple_policy_test.exs b/test/web/activity_pub/mrf/simple_policy_test.exs index 9a1a7bdc8..d7dde62c4 100644 --- a/test/web/activity_pub/mrf/simple_policy_test.exs +++ b/test/web/activity_pub/mrf/simple_policy_test.exs @@ -308,7 +308,7 @@ test "has a matching host" do Config.put([:mrf_simple, :followers_only], [actor_domain]) assert {:ok, new_activity} = SimplePolicy.filter(activity) - assert actor.follower_address in new_activity["to"] + assert actor.follower_address in new_activity["cc"] assert following_user.ap_id in new_activity["to"] refute "https://www.w3.org/ns/activitystreams#Public" in new_activity["to"] refute "https://www.w3.org/ns/activitystreams#Public" in new_activity["cc"] From 7bcd2e948ea5cc59ad0a40e2840be86650f0995e Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 31 Jul 2020 10:50:45 +0200 Subject: [PATCH 198/236] Config: Default to Hackney again Gun is still acting up. --- config/config.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.exs b/config/config.exs index 857e0afbb..d31208c25 100644 --- a/config/config.exs +++ b/config/config.exs @@ -172,7 +172,7 @@ "application/ld+json" => ["activity+json"] } -config :tesla, adapter: Tesla.Adapter.Gun +config :tesla, adapter: Tesla.Adapter.Hackney # Configures http settings, upstream proxy etc. config :pleroma, :http, From 0309514656b92771dc5078cc1ec6d343e42399b0 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Thu, 30 Jul 2020 18:49:48 +0200 Subject: [PATCH 199/236] Default MRF to ObjectAgePolicy, 7 days threshold --- config/config.exs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/config/config.exs b/config/config.exs index 4b91a58b7..134dccf49 100644 --- a/config/config.exs +++ b/config/config.exs @@ -391,8 +391,9 @@ accept: [], reject: [] +# threshold of 7 days config :pleroma, :mrf_object_age, - threshold: 172_800, + threshold: 604_800, actions: [:delist, :strip_followers] config :pleroma, :rich_media, @@ -718,7 +719,7 @@ config :pleroma, Pleroma.Web.ApiSpec.CastAndValidate, strict: false config :pleroma, :mrf, - policies: Pleroma.Web.ActivityPub.MRF.NoOpPolicy, + policies: Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy, transparency: true, transparency_exclusions: [] From 37b9e5e1384a6dae103773e29b386ac9843ecf5e Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 31 Jul 2020 10:29:16 +0000 Subject: [PATCH 200/236] Apply 1 suggestion(s) to 1 file(s) --- 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 d18d638b9..65cccda30 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -124,7 +124,7 @@ To add configuration to your config file, you can copy it from the base config. * `federated_timeline_removal`: List of instances to remove from Federated (aka The Whole Known Network) Timeline. * `reject`: List of instances to reject any activities from. * `accept`: List of instances to accept any activities from. -* `followers_only`: List of instances to force posts as followers-only. +* `followers_only`: List of instances to decrease post visibility to only the followers, including for DM mentions. * `report_removal`: List of instances to reject reports from. * `avatar_removal`: List of instances to strip avatars from. * `banner_removal`: List of instances to strip banners from. From 27b0a8b15542c645f70937a124ab8190cc399313 Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Fri, 31 Jul 2020 14:13:38 +0300 Subject: [PATCH 201/236] [#1985] Prevented force login on registration if account approval and/or email confirmation needed. Refactored login code in OAuthController, reused in AccountController. Added tests. --- .../api_spec/operations/account_operation.ex | 15 +++- .../controllers/account_controller.ex | 29 +++++++- lib/pleroma/web/oauth/oauth_controller.ex | 48 ++++++++---- .../controllers/account_controller_test.exs | 73 ++++++++----------- 4 files changed, 103 insertions(+), 62 deletions(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 50c8e0242..aaebc9b5c 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -449,21 +449,32 @@ defp create_request do } end - # TODO: This is actually a token respone, but there's no oauth operation file yet. + # Note: this is a token response (if login succeeds!), but there's no oauth operation file yet. defp create_response do %Schema{ title: "AccountCreateResponse", description: "Response schema for an account", type: :object, properties: %{ + # The response when auto-login on create succeeds (token is issued): token_type: %Schema{type: :string}, access_token: %Schema{type: :string}, refresh_token: %Schema{type: :string}, scope: %Schema{type: :string}, created_at: %Schema{type: :integer, format: :"date-time"}, me: %Schema{type: :string}, - expires_in: %Schema{type: :integer} + expires_in: %Schema{type: :integer}, + # + # The response when registration succeeds but auto-login fails (no token): + identifier: %Schema{type: :string}, + message: %Schema{type: :string} }, + required: [], + # Note: example of successful registration with failed login response: + # example: %{ + # "identifier" => "missing_confirmed_email", + # "message" => "You have been registered. Please check your email for further instructions." + # }, example: %{ "token_type" => "Bearer", "access_token" => "i9hAVVzGld86Pl5JtLtizKoXVvtTlSCJvwaugCxvZzk", diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 4c97904b6..f45678184 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -27,8 +27,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do alias Pleroma.Web.MastodonAPI.MastodonAPI alias Pleroma.Web.MastodonAPI.MastodonAPIController alias Pleroma.Web.MastodonAPI.StatusView + alias Pleroma.Web.OAuth.OAuthController alias Pleroma.Web.OAuth.OAuthView - alias Pleroma.Web.OAuth.Token alias Pleroma.Web.TwitterAPI.TwitterAPI plug(Pleroma.Web.ApiSpec.CastAndValidate) @@ -101,10 +101,33 @@ def create(%{assigns: %{app: app}, body_params: params} = conn, _params) do with :ok <- validate_email_param(params), :ok <- TwitterAPI.validate_captcha(app, params), {:ok, user} <- TwitterAPI.register_user(params), - {:ok, token} <- Token.create_token(app, user, %{scopes: app.scopes}) do + {_, {:ok, token}} <- + {:login, OAuthController.login(user, app, app.scopes)} do json(conn, OAuthView.render("token.json", %{user: user, token: token})) else - {:error, error} -> json_response(conn, :bad_request, %{error: error}) + {:login, {:account_status, :confirmation_pending}} -> + json_response(conn, :ok, %{ + message: "You have been registered. Please check your email for further instructions.", + identifier: "missing_confirmed_email" + }) + + {:login, {:account_status, :approval_pending}} -> + json_response(conn, :ok, %{ + message: + "You have been registered. You'll be able to log in once your account is approved.", + identifier: "awaiting_approval" + }) + + {:login, _} -> + json_response(conn, :ok, %{ + message: + "You have been registered. Some post-registration steps may be pending. " <> + "Please log in manually.", + identifier: "manual_login_required" + }) + + {:error, error} -> + json_response(conn, :bad_request, %{error: error}) end end diff --git a/lib/pleroma/web/oauth/oauth_controller.ex b/lib/pleroma/web/oauth/oauth_controller.ex index 61fe81d33..f29b3cb57 100644 --- a/lib/pleroma/web/oauth/oauth_controller.ex +++ b/lib/pleroma/web/oauth/oauth_controller.ex @@ -260,11 +260,8 @@ def token_exchange( ) do with {:ok, %User{} = user} <- Authenticator.get_user(conn), {:ok, app} <- Token.Utils.fetch_app(conn), - {: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 + requested_scopes <- Scopes.fetch_scopes(params, app.scopes), + {:ok, token} <- login(user, app, requested_scopes) do json(conn, OAuthView.render("token.json", %{user: user, token: token})) else error -> @@ -522,6 +519,8 @@ def register(%Plug.Conn{} = conn, %{"authorization" => _, "op" => "register"} = end end + defp do_create_authorization(conn, auth_attrs, user \\ nil) + defp do_create_authorization( %Plug.Conn{} = conn, %{ @@ -531,19 +530,37 @@ defp do_create_authorization( "redirect_uri" => redirect_uri } = auth_attrs }, - user \\ nil + user ) do with {_, {:ok, %User{} = user}} <- {:get_user, (user && {:ok, user}) || Authenticator.get_user(conn)}, %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)}, - {:ok, auth} <- Authorization.create_authorization(app, user, scopes) do + requested_scopes <- Scopes.fetch_scopes(auth_attrs, app.scopes), + {:ok, auth} <- do_create_authorization(user, app, requested_scopes) do {:ok, auth, user} end end + defp do_create_authorization(%User{} = user, %App{} = app, requested_scopes) + when is_list(requested_scopes) do + with {:account_status, :active} <- {:account_status, User.account_status(user)}, + {:ok, scopes} <- validate_scopes(app, requested_scopes), + {:ok, auth} <- Authorization.create_authorization(app, user, scopes) do + {:ok, auth} + end + end + + # Note: intended to be a private function but opened for AccountController that logs in on signup + @doc "If checks pass, creates authorization and token for given user, app and requested scopes." + def login(%User{} = user, %App{} = app, requested_scopes) when is_list(requested_scopes) do + with {:ok, auth} <- do_create_authorization(user, app, requested_scopes), + {:mfa_required, _, _, false} <- {:mfa_required, user, auth, MFA.require?(user)}, + {:ok, token} <- Token.exchange_token(app, auth) do + {:ok, token} + end + end + # Special case: Local MastodonFE defp redirect_uri(%Plug.Conn{} = conn, "."), do: auth_url(conn, :login) @@ -560,12 +577,15 @@ defp build_and_response_mfa_token(user, auth) do end end - @spec validate_scopes(App.t(), map()) :: + @spec validate_scopes(App.t(), map() | list()) :: {:ok, list()} | {:error, :missing_scopes | :unsupported_scopes} - defp validate_scopes(%App{} = app, params) do - params - |> Scopes.fetch_scopes(app.scopes) - |> Scopes.validate(app.scopes) + defp validate_scopes(%App{} = app, params) when is_map(params) do + requested_scopes = Scopes.fetch_scopes(params, app.scopes) + validate_scopes(app, requested_scopes) + end + + defp validate_scopes(%App{} = app, requested_scopes) when is_list(requested_scopes) do + Scopes.validate(requested_scopes, app.scopes) end def default_redirect_uri(%App{} = app) do diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 708f8b5b3..d390c3ce1 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -5,7 +5,6 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do use Pleroma.Web.ConnCase - alias Pleroma.Config alias Pleroma.Repo alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub @@ -16,8 +15,6 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do import Pleroma.Factory describe "account fetching" do - setup do: clear_config([:instance, :limit_to_local_content]) - test "works by id" do %User{id: user_id} = insert(:user) @@ -42,7 +39,7 @@ test "works by nickname" do end test "works by nickname for remote users" do - Config.put([:instance, :limit_to_local_content], false) + clear_config([:instance, :limit_to_local_content], false) user = insert(:user, nickname: "user@example.com", local: false) @@ -53,7 +50,7 @@ test "works by nickname for remote users" do end test "respects limit_to_local_content == :all for remote user nicknames" do - Config.put([:instance, :limit_to_local_content], :all) + clear_config([:instance, :limit_to_local_content], :all) user = insert(:user, nickname: "user@example.com", local: false) @@ -63,7 +60,7 @@ test "respects limit_to_local_content == :all for remote user nicknames" do end test "respects limit_to_local_content == :unauthenticated for remote user nicknames" do - Config.put([:instance, :limit_to_local_content], :unauthenticated) + clear_config([:instance, :limit_to_local_content], :unauthenticated) user = insert(:user, nickname: "user@example.com", local: false) reading_user = insert(:user) @@ -903,8 +900,10 @@ test "blocking / unblocking a user" do [valid_params: valid_params] end - test "Account registration via Application, no confirmation required", %{conn: conn} do + test "registers and logs in without :account_activation_required / :account_approval_required", + %{conn: conn} do clear_config([:instance, :account_activation_required], false) + clear_config([:instance, :account_approval_required], false) conn = conn @@ -962,15 +961,16 @@ test "Account registration via Application, no confirmation required", %{conn: c token_from_db = Repo.get_by(Token, token: token) assert token_from_db - token_from_db = Repo.preload(token_from_db, :user) - assert token_from_db.user - refute token_from_db.user.confirmation_pending + user = Repo.preload(token_from_db, :user).user + + assert user + refute user.confirmation_pending + refute user.approval_pending end - setup do: clear_config([:instance, :account_approval_required]) - - test "Account registration via Application", %{conn: conn} do + test "registers but does not log in with :account_activation_required", %{conn: conn} do clear_config([:instance, :account_activation_required], true) + clear_config([:instance, :account_approval_required], false) conn = conn @@ -1019,23 +1019,18 @@ test "Account registration via Application", %{conn: conn} do agreement: true }) - %{ - "access_token" => token, - "created_at" => _created_at, - "scope" => ^scope, - "token_type" => "Bearer" - } = json_response_and_validate_schema(conn, 200) + response = json_response_and_validate_schema(conn, 200) + assert %{"identifier" => "missing_confirmed_email"} = response + refute response["access_token"] + refute response["token_type"] - token_from_db = Repo.get_by(Token, token: token) - assert token_from_db - token_from_db = Repo.preload(token_from_db, :user) - assert token_from_db.user - - assert token_from_db.user.confirmation_pending + user = Repo.get_by(User, email: "lain@example.org") + assert user.confirmation_pending end - test "Account registration via app with account_approval_required", %{conn: conn} do - Pleroma.Config.put([:instance, :account_approval_required], true) + test "registers but does not log in with :account_approval_required", %{conn: conn} do + clear_config([:instance, :account_approval_required], true) + clear_config([:instance, :account_activation_required], false) conn = conn @@ -1085,21 +1080,15 @@ test "Account registration via app with account_approval_required", %{conn: conn reason: "I'm a cool dude, bro" }) - %{ - "access_token" => token, - "created_at" => _created_at, - "scope" => ^scope, - "token_type" => "Bearer" - } = json_response_and_validate_schema(conn, 200) + response = json_response_and_validate_schema(conn, 200) + assert %{"identifier" => "awaiting_approval"} = response + refute response["access_token"] + refute response["token_type"] - token_from_db = Repo.get_by(Token, token: token) - assert token_from_db - token_from_db = Repo.preload(token_from_db, :user) - assert token_from_db.user + user = Repo.get_by(User, email: "lain@example.org") - assert token_from_db.user.approval_pending - - assert token_from_db.user.registration_reason == "I'm a cool dude, bro" + assert user.approval_pending + assert user.registration_reason == "I'm a cool dude, bro" end test "returns error when user already registred", %{conn: conn, valid_params: valid_params} do @@ -1153,11 +1142,9 @@ test "returns bad_request if missing required params", %{ end) end - setup do: clear_config([:instance, :account_activation_required]) - test "returns bad_request if missing email params when :account_activation_required is enabled", %{conn: conn, valid_params: valid_params} do - Pleroma.Config.put([:instance, :account_activation_required], true) + clear_config([:instance, :account_activation_required], true) app_token = insert(:oauth_token, user: nil) From 010d77ec855245def7fa785357db6e43cf1f14c7 Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 31 Jul 2020 15:17:09 +0000 Subject: [PATCH 202/236] Revert "Merge branch 'mrf-silence-2' into 'develop'" This reverts merge request !2820 --- config/description.exs | 6 -- docs/configuration/cheatsheet.md | 1 - lib/pleroma/following_relationship.ex | 6 +- .../web/activity_pub/mrf/simple_policy.ex | 31 ---------- .../activity_pub/mrf/simple_policy_test.exs | 60 ------------------- 5 files changed, 1 insertion(+), 103 deletions(-) diff --git a/config/description.exs b/config/description.exs index d623a9f75..11fbe0d78 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1542,12 +1542,6 @@ description: "List of instances to only accept activities from (except deletes)", suggestions: ["example.com", "*.example.com"] }, - %{ - key: :followers_only, - type: {:list, :string}, - description: "Force posts from the given instances to be visible by followers only", - suggestions: ["example.com", "*.example.com"] - }, %{ key: :report_removal, type: {:list, :string}, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 7de82a41d..9c768abef 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -125,7 +125,6 @@ To add configuration to your config file, you can copy it from the base config. * `federated_timeline_removal`: List of instances to remove from Federated (aka The Whole Known Network) Timeline. * `reject`: List of instances to reject any activities from. * `accept`: List of instances to accept any activities from. -* `followers_only`: List of instances to decrease post visibility to only the followers, including for DM mentions. * `report_removal`: List of instances to reject reports from. * `avatar_removal`: List of instances to strip avatars from. * `banner_removal`: List of instances to strip banners from. diff --git a/lib/pleroma/following_relationship.ex b/lib/pleroma/following_relationship.ex index 83b366dd4..c2020d30a 100644 --- a/lib/pleroma/following_relationship.ex +++ b/lib/pleroma/following_relationship.ex @@ -95,11 +95,7 @@ def followers_query(%User{} = user) do |> where([r], r.state == ^:follow_accept) end - def followers_ap_ids(user, from_ap_ids \\ nil) - - def followers_ap_ids(_, []), do: [] - - def followers_ap_ids(%User{} = user, from_ap_ids) do + def followers_ap_ids(%User{} = user, from_ap_ids \\ nil) do query = user |> followers_query() diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index bb193475a..b77b8c7b4 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -7,7 +7,6 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do @behaviour Pleroma.Web.ActivityPub.MRF alias Pleroma.Config - alias Pleroma.FollowingRelationship alias Pleroma.User alias Pleroma.Web.ActivityPub.MRF @@ -109,35 +108,6 @@ defp check_ftl_removal(%{host: actor_host} = _actor_info, object) do {:ok, object} end - defp intersection(list1, list2) do - list1 -- list1 -- list2 - end - - defp check_followers_only(%{host: actor_host} = _actor_info, object) do - followers_only = - Config.get([:mrf_simple, :followers_only]) - |> MRF.subdomains_regex() - - object = - with true <- MRF.subdomain_match?(followers_only, actor_host), - user <- User.get_cached_by_ap_id(object["actor"]) do - # Don't use Map.get/3 intentionally, these must not be nil - fixed_to = object["to"] || [] - fixed_cc = object["cc"] || [] - - to = FollowingRelationship.followers_ap_ids(user, fixed_to) - cc = FollowingRelationship.followers_ap_ids(user, fixed_cc) - - object - |> Map.put("to", intersection([user.follower_address | to], fixed_to)) - |> Map.put("cc", intersection([user.follower_address | cc], fixed_cc)) - else - _ -> object - end - - {:ok, object} - end - defp check_report_removal(%{host: actor_host} = _actor_info, %{"type" => "Flag"} = object) do report_removal = Config.get([:mrf_simple, :report_removal]) @@ -204,7 +174,6 @@ def filter(%{"actor" => actor} = object) do {:ok, object} <- check_media_removal(actor_info, object), {:ok, object} <- check_media_nsfw(actor_info, object), {:ok, object} <- check_ftl_removal(actor_info, object), - {:ok, object} <- check_followers_only(actor_info, object), {:ok, object} <- check_report_removal(actor_info, object) do {:ok, object} else diff --git a/test/web/activity_pub/mrf/simple_policy_test.exs b/test/web/activity_pub/mrf/simple_policy_test.exs index d7dde62c4..e842d8d8d 100644 --- a/test/web/activity_pub/mrf/simple_policy_test.exs +++ b/test/web/activity_pub/mrf/simple_policy_test.exs @@ -7,7 +7,6 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do import Pleroma.Factory alias Pleroma.Config alias Pleroma.Web.ActivityPub.MRF.SimplePolicy - alias Pleroma.Web.CommonAPI setup do: clear_config(:mrf_simple, @@ -16,7 +15,6 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do federated_timeline_removal: [], report_removal: [], reject: [], - followers_only: [], accept: [], avatar_removal: [], banner_removal: [], @@ -263,64 +261,6 @@ test "actor has a matching host" do end end - describe "when :followers_only" do - test "is empty" do - Config.put([:mrf_simple, :followers_only], []) - {_, ftl_message} = build_ftl_actor_and_message() - local_message = build_local_message() - - assert SimplePolicy.filter(ftl_message) == {:ok, ftl_message} - assert SimplePolicy.filter(local_message) == {:ok, local_message} - end - - test "has a matching host" do - actor = insert(:user) - following_user = insert(:user) - non_following_user = insert(:user) - - {:ok, _, _, _} = CommonAPI.follow(following_user, actor) - - activity = %{ - "actor" => actor.ap_id, - "to" => [ - "https://www.w3.org/ns/activitystreams#Public", - following_user.ap_id, - non_following_user.ap_id - ], - "cc" => [actor.follower_address, "http://foo.bar/qux"] - } - - dm_activity = %{ - "actor" => actor.ap_id, - "to" => [ - following_user.ap_id, - non_following_user.ap_id - ], - "cc" => [] - } - - actor_domain = - activity - |> Map.fetch!("actor") - |> URI.parse() - |> Map.fetch!(:host) - - Config.put([:mrf_simple, :followers_only], [actor_domain]) - - assert {:ok, new_activity} = SimplePolicy.filter(activity) - assert actor.follower_address in new_activity["cc"] - assert following_user.ap_id in new_activity["to"] - refute "https://www.w3.org/ns/activitystreams#Public" in new_activity["to"] - refute "https://www.w3.org/ns/activitystreams#Public" in new_activity["cc"] - refute non_following_user.ap_id in new_activity["to"] - refute non_following_user.ap_id in new_activity["cc"] - - assert {:ok, new_dm_activity} = SimplePolicy.filter(dm_activity) - assert new_dm_activity["to"] == [following_user.ap_id] - assert new_dm_activity["cc"] == [] - end - end - describe "when :accept" do test "is empty" do Config.put([:mrf_simple, :accept], []) From 4b18a07392558401c88a60db3751feefd9481e13 Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 31 Jul 2020 15:18:04 +0000 Subject: [PATCH 203/236] Revert "Merge branch 'revert-1ac0969c' into 'develop'" This reverts merge request !2825 --- config/description.exs | 6 ++ docs/configuration/cheatsheet.md | 1 + lib/pleroma/following_relationship.ex | 6 +- .../web/activity_pub/mrf/simple_policy.ex | 31 ++++++++++ .../activity_pub/mrf/simple_policy_test.exs | 60 +++++++++++++++++++ 5 files changed, 103 insertions(+), 1 deletion(-) diff --git a/config/description.exs b/config/description.exs index 11fbe0d78..d623a9f75 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1542,6 +1542,12 @@ description: "List of instances to only accept activities from (except deletes)", suggestions: ["example.com", "*.example.com"] }, + %{ + key: :followers_only, + type: {:list, :string}, + description: "Force posts from the given instances to be visible by followers only", + suggestions: ["example.com", "*.example.com"] + }, %{ key: :report_removal, type: {:list, :string}, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 9c768abef..7de82a41d 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -125,6 +125,7 @@ To add configuration to your config file, you can copy it from the base config. * `federated_timeline_removal`: List of instances to remove from Federated (aka The Whole Known Network) Timeline. * `reject`: List of instances to reject any activities from. * `accept`: List of instances to accept any activities from. +* `followers_only`: List of instances to decrease post visibility to only the followers, including for DM mentions. * `report_removal`: List of instances to reject reports from. * `avatar_removal`: List of instances to strip avatars from. * `banner_removal`: List of instances to strip banners from. diff --git a/lib/pleroma/following_relationship.ex b/lib/pleroma/following_relationship.ex index c2020d30a..83b366dd4 100644 --- a/lib/pleroma/following_relationship.ex +++ b/lib/pleroma/following_relationship.ex @@ -95,7 +95,11 @@ def followers_query(%User{} = user) do |> where([r], r.state == ^:follow_accept) end - def followers_ap_ids(%User{} = user, from_ap_ids \\ nil) do + def followers_ap_ids(user, from_ap_ids \\ nil) + + def followers_ap_ids(_, []), do: [] + + def followers_ap_ids(%User{} = user, from_ap_ids) do query = user |> followers_query() diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index b77b8c7b4..bb193475a 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -7,6 +7,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do @behaviour Pleroma.Web.ActivityPub.MRF alias Pleroma.Config + alias Pleroma.FollowingRelationship alias Pleroma.User alias Pleroma.Web.ActivityPub.MRF @@ -108,6 +109,35 @@ defp check_ftl_removal(%{host: actor_host} = _actor_info, object) do {:ok, object} end + defp intersection(list1, list2) do + list1 -- list1 -- list2 + end + + defp check_followers_only(%{host: actor_host} = _actor_info, object) do + followers_only = + Config.get([:mrf_simple, :followers_only]) + |> MRF.subdomains_regex() + + object = + with true <- MRF.subdomain_match?(followers_only, actor_host), + user <- User.get_cached_by_ap_id(object["actor"]) do + # Don't use Map.get/3 intentionally, these must not be nil + fixed_to = object["to"] || [] + fixed_cc = object["cc"] || [] + + to = FollowingRelationship.followers_ap_ids(user, fixed_to) + cc = FollowingRelationship.followers_ap_ids(user, fixed_cc) + + object + |> Map.put("to", intersection([user.follower_address | to], fixed_to)) + |> Map.put("cc", intersection([user.follower_address | cc], fixed_cc)) + else + _ -> object + end + + {:ok, object} + end + defp check_report_removal(%{host: actor_host} = _actor_info, %{"type" => "Flag"} = object) do report_removal = Config.get([:mrf_simple, :report_removal]) @@ -174,6 +204,7 @@ def filter(%{"actor" => actor} = object) do {:ok, object} <- check_media_removal(actor_info, object), {:ok, object} <- check_media_nsfw(actor_info, object), {:ok, object} <- check_ftl_removal(actor_info, object), + {:ok, object} <- check_followers_only(actor_info, object), {:ok, object} <- check_report_removal(actor_info, object) do {:ok, object} else diff --git a/test/web/activity_pub/mrf/simple_policy_test.exs b/test/web/activity_pub/mrf/simple_policy_test.exs index e842d8d8d..d7dde62c4 100644 --- a/test/web/activity_pub/mrf/simple_policy_test.exs +++ b/test/web/activity_pub/mrf/simple_policy_test.exs @@ -7,6 +7,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do import Pleroma.Factory alias Pleroma.Config alias Pleroma.Web.ActivityPub.MRF.SimplePolicy + alias Pleroma.Web.CommonAPI setup do: clear_config(:mrf_simple, @@ -15,6 +16,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do federated_timeline_removal: [], report_removal: [], reject: [], + followers_only: [], accept: [], avatar_removal: [], banner_removal: [], @@ -261,6 +263,64 @@ test "actor has a matching host" do end end + describe "when :followers_only" do + test "is empty" do + Config.put([:mrf_simple, :followers_only], []) + {_, ftl_message} = build_ftl_actor_and_message() + local_message = build_local_message() + + assert SimplePolicy.filter(ftl_message) == {:ok, ftl_message} + assert SimplePolicy.filter(local_message) == {:ok, local_message} + end + + test "has a matching host" do + actor = insert(:user) + following_user = insert(:user) + non_following_user = insert(:user) + + {:ok, _, _, _} = CommonAPI.follow(following_user, actor) + + activity = %{ + "actor" => actor.ap_id, + "to" => [ + "https://www.w3.org/ns/activitystreams#Public", + following_user.ap_id, + non_following_user.ap_id + ], + "cc" => [actor.follower_address, "http://foo.bar/qux"] + } + + dm_activity = %{ + "actor" => actor.ap_id, + "to" => [ + following_user.ap_id, + non_following_user.ap_id + ], + "cc" => [] + } + + actor_domain = + activity + |> Map.fetch!("actor") + |> URI.parse() + |> Map.fetch!(:host) + + Config.put([:mrf_simple, :followers_only], [actor_domain]) + + assert {:ok, new_activity} = SimplePolicy.filter(activity) + assert actor.follower_address in new_activity["cc"] + assert following_user.ap_id in new_activity["to"] + refute "https://www.w3.org/ns/activitystreams#Public" in new_activity["to"] + refute "https://www.w3.org/ns/activitystreams#Public" in new_activity["cc"] + refute non_following_user.ap_id in new_activity["to"] + refute non_following_user.ap_id in new_activity["cc"] + + assert {:ok, new_dm_activity} = SimplePolicy.filter(dm_activity) + assert new_dm_activity["to"] == [following_user.ap_id] + assert new_dm_activity["cc"] == [] + end + end + describe "when :accept" do test "is empty" do Config.put([:mrf_simple, :accept], []) From 4bf44b7d657da540b25db8ac3e8906641c4242bd Mon Sep 17 00:00:00 2001 From: Roman Chvanikov Date: Sat, 1 Aug 2020 10:04:25 +0300 Subject: [PATCH 204/236] Don't override user-agent header if it's been set --- lib/pleroma/http/request_builder.ex | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/http/request_builder.ex b/lib/pleroma/http/request_builder.ex index 2fc876d92..8a44a001d 100644 --- a/lib/pleroma/http/request_builder.ex +++ b/lib/pleroma/http/request_builder.ex @@ -34,10 +34,12 @@ def url(request, u), do: %{request | url: u} @spec headers(Request.t(), Request.headers()) :: Request.t() def headers(request, headers) do headers_list = - if Pleroma.Config.get([:http, :send_user_agent]) do + with true <- Pleroma.Config.get([:http, :send_user_agent]), + nil <- Enum.find(headers, fn {key, _val} -> String.downcase(key) == "user-agent" end) do [{"user-agent", Pleroma.Application.user_agent()} | headers] else - headers + _ -> + headers end %{request | headers: headers_list} From 87180ff817e4b9e3a3b90e7f0054b60b0d0c2c41 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Sat, 1 Aug 2020 12:16:06 +0300 Subject: [PATCH 205/236] Fix ConnecitonPool deadlocking after reaching the connection limit The issue was with ConcurrentLimiter not decrementing counters on overload. It was fixed in the latest commit, but concurrentlimiter version wasn't updated in Pleroma for some reason. Closes #1977 --- mix.exs | 2 +- mix.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index 860c6aee7..0e723c15f 100644 --- a/mix.exs +++ b/mix.exs @@ -178,7 +178,7 @@ defp deps do {:flake_id, "~> 0.1.0"}, {:concurrent_limiter, git: "https://git.pleroma.social/pleroma/elixir-libraries/concurrent_limiter.git", - ref: "8eee96c6ba39b9286ec44c51c52d9f2758951365"}, + ref: "55e92f84b4ed531bd487952a71040a9c69dc2807"}, {:remote_ip, git: "https://git.pleroma.social/pleroma/remote_ip.git", ref: "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8"}, diff --git a/mix.lock b/mix.lock index 17b11cdb2..55c3c59c6 100644 --- a/mix.lock +++ b/mix.lock @@ -14,7 +14,7 @@ "certifi": {:hex, :certifi, "2.5.2", "b7cfeae9d2ed395695dd8201c57a2d019c0c43ecaf8b8bcb9320b40d6662f340", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm", "3b3b5f36493004ac3455966991eaf6e768ce9884693d9968055aeeeb1e575040"}, "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, "comeonin": {:hex, :comeonin, "5.3.1", "7fe612b739c78c9c1a75186ef2d322ce4d25032d119823269d0aa1e2f1e20025", [:mix], [], "hexpm", "d6222483060c17f0977fad1b7401ef0c5863c985a64352755f366aee3799c245"}, - "concurrent_limiter": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/concurrent_limiter.git", "8eee96c6ba39b9286ec44c51c52d9f2758951365", [ref: "8eee96c6ba39b9286ec44c51c52d9f2758951365"]}, + "concurrent_limiter": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/concurrent_limiter.git", "55e92f84b4ed531bd487952a71040a9c69dc2807", [ref: "55e92f84b4ed531bd487952a71040a9c69dc2807"]}, "connection": {:hex, :connection, "1.0.4", "a1cae72211f0eef17705aaededacac3eb30e6625b04a6117c1b2db6ace7d5976", [:mix], [], "hexpm", "4a0850c9be22a43af9920a71ab17c051f5f7d45c209e40269a1938832510e4d9"}, "cors_plug": {:hex, :cors_plug, "2.0.2", "2b46083af45e4bc79632bd951550509395935d3e7973275b2b743bd63cc942ce", [:mix], [{:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f0d0e13f71c51fd4ef8b2c7e051388e4dfb267522a83a22392c856de7e46465f"}, "cowboy": {:hex, :cowboy, "2.8.0", "f3dc62e35797ecd9ac1b50db74611193c29815401e53bac9a5c0577bd7bc667d", [:rebar3], [{:cowlib, "~> 2.9.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.7.1", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "4643e4fba74ac96d4d152c75803de6fad0b3fa5df354c71afdd6cbeeb15fac8a"}, From 45be1fe00e93fadab27a8e93e4537f11f6edd5eb Mon Sep 17 00:00:00 2001 From: rinpatch Date: Sat, 1 Aug 2020 17:59:50 +0300 Subject: [PATCH 206/236] ConnectionPool: fix gun open errors being returned without an error tuple When gun shuts down due to the host being unreachable, the worker process shuts down with the same shutdown reason since they are linked. Gun doesn't have error tuples in it's shutdown reason though, so we need to handle it in get_conn. Closes #2008 --- lib/pleroma/gun/connection_pool.ex | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/gun/connection_pool.ex b/lib/pleroma/gun/connection_pool.ex index 49e9885bb..f34602b73 100644 --- a/lib/pleroma/gun/connection_pool.ex +++ b/lib/pleroma/gun/connection_pool.ex @@ -10,6 +10,7 @@ def children do ] end + @spec get_conn(URI.t(), keyword()) :: {:ok, pid()} | {:error, term()} def get_conn(uri, opts) do key = "#{uri.scheme}:#{uri.host}:#{uri.port}" @@ -54,12 +55,14 @@ defp get_gun_pid_from_worker(worker_pid, register) do {:DOWN, ^ref, :process, ^worker_pid, reason} -> case reason do - {:shutdown, error} -> error + {:shutdown, {:error, _} = error} -> error + {:shutdown, error} -> {:error, error} _ -> {:error, reason} end end end + @spec release_conn(pid()) :: :ok def release_conn(conn_pid) do # :ets.fun2ms(fn {_, {worker_pid, {gun_pid, _, _, _}}} when gun_pid == conn_pid -> # worker_pid end) From cb1e3893aa8c03e3245978eb6d76bc2b3c534ba0 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 1 Aug 2020 16:08:29 -0500 Subject: [PATCH 207/236] SimpleMRF: Add missing :followers_only to config.exs --- config/config.exs | 1 + 1 file changed, 1 insertion(+) diff --git a/config/config.exs b/config/config.exs index d31208c25..e1d2e13d2 100644 --- a/config/config.exs +++ b/config/config.exs @@ -374,6 +374,7 @@ federated_timeline_removal: [], report_removal: [], reject: [], + followers_only: [], accept: [], avatar_removal: [], banner_removal: [], From f671d7e68c77e5d41dd0716f48f387561efc3999 Mon Sep 17 00:00:00 2001 From: Ilja Date: Sun, 2 Aug 2020 15:54:59 +0200 Subject: [PATCH 208/236] Add welcome chatmessages * I added the option in config/config.exs * created a new module lib/pleroma/user/welcome_chat_message.ex * Added it to the registration flow * added to the cheatsheet * added to the config/description.ex * added to the Changelog.md --- CHANGELOG.md | 2 +- config/config.exs | 5 +++ config/description.exs | 29 +++++++++++++++ docs/configuration/cheatsheet.md | 4 +++ lib/pleroma/user.ex | 10 ++++++ lib/pleroma/user/welcome_chat_message.ex | 45 ++++++++++++++++++++++++ test/user/welcome_chat_massage_test.exs | 35 ++++++++++++++++++ test/user_test.exs | 35 ++++++++++++++---- 8 files changed, 158 insertions(+), 7 deletions(-) create mode 100644 lib/pleroma/user/welcome_chat_message.ex create mode 100644 test/user/welcome_chat_massage_test.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index 129c269aa..4b682d70b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -69,7 +69,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Support for viewing instances favicons next to posts and accounts - Added Pleroma.Upload.Filter.Exiftool as an alternate EXIF stripping mechanism targeting GPS/location metadata. - "By approval" registrations mode. -- Configuration: Added `:welcome` settings for the welcome message to newly registered users. +- Configuration: Added `:welcome` settings for the welcome message to newly registered users. You can send a welcome message as a direct message, chat or email. - Ability to hide favourites and emoji reactions in the API with `[:instance, :show_reactions]` config.
diff --git a/config/config.exs b/config/config.exs index d31208c25..c0213612b 100644 --- a/config/config.exs +++ b/config/config.exs @@ -261,6 +261,11 @@ sender_nickname: nil, message: nil ], + chat_message: [ + enabled: false, + sender_nickname: nil, + message: nil + ], email: [ enabled: false, sender: nil, diff --git a/config/description.exs b/config/description.exs index 11fbe0d78..9c8cbacb5 100644 --- a/config/description.exs +++ b/config/description.exs @@ -997,6 +997,35 @@ } ] }, + %{ + group: :chat_message, + type: :group, + descpiption: "Chat message settings", + children: [ + %{ + key: :enabled, + type: :boolean, + description: "Enables sends chat message for new user after registration" + }, + %{ + key: :message, + type: :string, + description: + "A message that will be sent to a newly registered users as a chat message", + suggestions: [ + "Hi, @username! Welcome on board!" + ] + }, + %{ + key: :sender_nickname, + type: :string, + description: "The nickname of the local user that sends the welcome message", + suggestions: [ + "lain" + ] + } + ] + }, %{ group: :email, type: :group, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 9c768abef..59c3fb06d 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -69,6 +69,10 @@ To add configuration to your config file, you can copy it from the base config. * `enabled`: Enables the send a direct message to a newly registered user. Defaults to `false`. * `sender_nickname`: The nickname of the local user that sends the welcome message. * `message`: A message that will be send to a newly registered users as a direct message. +* `chat_message`: - welcome message sent as a chat message. + * `enabled`: Enables the send a chat message to a newly registered user. Defaults to `false`. + * `sender_nickname`: The nickname of the local user that sends the welcome message. + * `message`: A message that will be send to a newly registered users as a chat message. * `email`: - welcome message sent as a email. * `enabled`: Enables the send a welcome email to a newly registered user. Defaults to `false`. * `sender`: The email address or tuple with `{nickname, email}` that will use as sender to the welcome email. diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index dcf6ebee2..0c1fab223 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -734,6 +734,7 @@ def post_register_action(%User{} = user) do {:ok, user} <- set_cache(user), {:ok, _} <- send_welcome_email(user), {:ok, _} <- send_welcome_message(user), + {:ok, _} <- send_welcome_chat_message(user), {:ok, _} <- try_send_confirmation_email(user) do {:ok, user} end @@ -748,6 +749,15 @@ def send_welcome_message(user) do end end + def send_welcome_chat_message(user) do + if User.WelcomeChatMessage.enabled?() do + User.WelcomeChatMessage.post_message(user) + {:ok, :enqueued} + else + {:ok, :noop} + end + end + def send_welcome_email(%User{email: email} = user) when is_binary(email) do if User.WelcomeEmail.enabled?() do User.WelcomeEmail.send_email(user) diff --git a/lib/pleroma/user/welcome_chat_message.ex b/lib/pleroma/user/welcome_chat_message.ex new file mode 100644 index 000000000..3e7d1f424 --- /dev/null +++ b/lib/pleroma/user/welcome_chat_message.ex @@ -0,0 +1,45 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.User.WelcomeChatMessage do + alias Pleroma.Config + alias Pleroma.User + alias Pleroma.Web.CommonAPI + + @spec enabled?() :: boolean() + def enabled?, do: Config.get([:welcome, :chat_message, :enabled], false) + + @spec post_message(User.t()) :: {:ok, Pleroma.Activity.t() | nil} + def post_message(user) do + [:welcome, :chat_message, :sender_nickname] + |> Config.get(nil) + |> fetch_sender() + |> do_post(user, welcome_message()) + end + + defp do_post(%User{} = sender, recipient, message) + when is_binary(message) do + CommonAPI.post_chat_message( + sender, + recipient, + message + ) + end + + defp do_post(_sender, _recipient, _message), do: {:ok, nil} + + defp fetch_sender(nickname) when is_binary(nickname) do + with %User{local: true} = user <- User.get_cached_by_nickname(nickname) do + user + else + _ -> nil + end + end + + defp fetch_sender(_), do: nil + + defp welcome_message do + Config.get([:welcome, :chat_message, :message], nil) + end +end diff --git a/test/user/welcome_chat_massage_test.exs b/test/user/welcome_chat_massage_test.exs new file mode 100644 index 000000000..3fef6fa6d --- /dev/null +++ b/test/user/welcome_chat_massage_test.exs @@ -0,0 +1,35 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.User.WelcomeChatMessageTest do + use Pleroma.DataCase + + alias Pleroma.Config + alias Pleroma.User.WelcomeChatMessage + + import Pleroma.Factory + + setup do: clear_config([:welcome]) + + describe "post_message/1" do + test "send a chat welcome message" do + welcome_user = insert(:user) + user = insert(:user, name: "mewmew") + + Config.put([:welcome, :chat_message, :enabled], true) + Config.put([:welcome, :chat_message, :sender_nickname], welcome_user.nickname) + + Config.put( + [:welcome, :chat_message, :message], + "Hello. Welcome to blob.cat" + ) + + {:ok, %Pleroma.Activity{} = activity} = WelcomeChatMessage.post_message(user) + + assert user.ap_id in activity.recipients + assert Pleroma.Object.normalize(activity).data["type"] == "ChatMessage" + assert Pleroma.Object.normalize(activity).data["content"] =~ "Hello. Welcome to " + end + end +end diff --git a/test/user_test.exs b/test/user_test.exs index 904cea536..2c1f2b7c5 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -412,8 +412,36 @@ test "it sends a welcome message if it is set" do welcome_user = insert(:user) Pleroma.Config.put([:welcome, :direct_message, :enabled], true) Pleroma.Config.put([:welcome, :direct_message, :sender_nickname], welcome_user.nickname) - Pleroma.Config.put([:welcome, :direct_message, :message], "Hello, this is a cool site") + Pleroma.Config.put([:welcome, :direct_message, :message], "Hello, this is a direct message") + cng = User.register_changeset(%User{}, @full_user_data) + {:ok, registered_user} = User.register(cng) + ObanHelpers.perform_all() + + activity = Repo.one(Pleroma.Activity) + assert registered_user.ap_id in activity.recipients + assert Object.normalize(activity).data["content"] =~ "direct message" + assert activity.actor == welcome_user.ap_id + end + + test "it sends a welcome chat message if it is set" do + welcome_user = insert(:user) + Pleroma.Config.put([:welcome, :chat_message, :enabled], true) + Pleroma.Config.put([:welcome, :chat_message, :sender_nickname], welcome_user.nickname) + Pleroma.Config.put([:welcome, :chat_message, :message], "Hello, this is a chat message") + + cng = User.register_changeset(%User{}, @full_user_data) + {:ok, registered_user} = User.register(cng) + ObanHelpers.perform_all() + + activity = Repo.one(Pleroma.Activity) + assert registered_user.ap_id in activity.recipients + assert Object.normalize(activity).data["content"] =~ "chat message" + assert activity.actor == welcome_user.ap_id + end + + test "it sends a welcome email message if it is set" do + welcome_user = insert(:user) Pleroma.Config.put([:welcome, :email, :enabled], true) Pleroma.Config.put([:welcome, :email, :sender], welcome_user.email) @@ -428,11 +456,6 @@ test "it sends a welcome message if it is set" do {:ok, registered_user} = User.register(cng) ObanHelpers.perform_all() - activity = Repo.one(Pleroma.Activity) - assert registered_user.ap_id in activity.recipients - assert Object.normalize(activity).data["content"] =~ "cool site" - assert activity.actor == welcome_user.ap_id - assert_email_sent( from: {instance_name, welcome_user.email}, to: {registered_user.name, registered_user.email}, From 0012894d4eb7089bf96fd9a3551455edfddf095b Mon Sep 17 00:00:00 2001 From: swentel Date: Sun, 2 Aug 2020 19:33:22 +0200 Subject: [PATCH 209/236] Add indigenous to clients --- docs/clients.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/clients.md b/docs/clients.md index ea751637e..2a42c659f 100644 --- a/docs/clients.md +++ b/docs/clients.md @@ -75,6 +75,13 @@ Feel free to contact us to be added to this list! - Platform: Android, iOS - Features: No Streaming +### Indigenous +- Homepage: +- Source Code: +- Contact: [@realize.be@realize.be](@realize.be@realize.be) +- Platforms: Android +- Features: No Streaming + ## Alternative Web Interfaces ### Brutaldon - Homepage: From c2c3dd46133499db4102a946f07be87efdf82f1a Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 2 Aug 2020 13:42:23 -0500 Subject: [PATCH 210/236] Migrate legacy tags set by AdminFE to match TagPolicy, #2010 --- .../20200802170532_fix_legacy_tags.exs | 37 +++++++++++++++++++ .../20200802170532_fix_legacy_tags_test.exs | 24 ++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 priv/repo/migrations/20200802170532_fix_legacy_tags.exs create mode 100644 test/migrations/20200802170532_fix_legacy_tags_test.exs diff --git a/priv/repo/migrations/20200802170532_fix_legacy_tags.exs b/priv/repo/migrations/20200802170532_fix_legacy_tags.exs new file mode 100644 index 000000000..f7274b44e --- /dev/null +++ b/priv/repo/migrations/20200802170532_fix_legacy_tags.exs @@ -0,0 +1,37 @@ +# Fix legacy tags set by AdminFE that don't align with TagPolicy MRF + +defmodule Pleroma.Repo.Migrations.FixLegacyTags do + use Ecto.Migration + alias Pleroma.Repo + alias Pleroma.User + import Ecto.Query + + @old_new_map %{ + "force_nsfw" => "mrf_tag:media-force-nsfw", + "strip_media" => "mrf_tag:media-strip", + "force_unlisted" => "mrf_tag:force-unlisted", + "sandbox" => "mrf_tag:sandbox", + "disable_remote_subscription" => "mrf_tag:disable-remote-subscription", + "disable_any_subscription" => "mrf_tag:disable-any-subscription" + } + + def change do + legacy_tags = Map.keys(@old_new_map) + + from(u in User, where: fragment("? && ?", u.tags, ^legacy_tags)) + |> Repo.all() + |> Enum.each(fn user -> + fix_tags_changeset(user) + |> Repo.update() + end) + end + + defp fix_tags_changeset(%User{tags: tags} = user) do + new_tags = + Enum.map(tags, fn tag -> + Map.get(@old_new_map, tag, tag) + end) + + Ecto.Changeset.change(user, tags: new_tags) + end +end diff --git a/test/migrations/20200802170532_fix_legacy_tags_test.exs b/test/migrations/20200802170532_fix_legacy_tags_test.exs new file mode 100644 index 000000000..3b4dee407 --- /dev/null +++ b/test/migrations/20200802170532_fix_legacy_tags_test.exs @@ -0,0 +1,24 @@ +defmodule Pleroma.Repo.Migrations.FixLegacyTagsTest do + alias Pleroma.User + use Pleroma.DataCase + import Pleroma.Factory + import Pleroma.Tests.Helpers + + setup_all do: require_migration("20200802170532_fix_legacy_tags") + + test "change/0 converts legacy user tags into correct values", %{migration: migration} do + user = insert(:user, tags: ["force_nsfw", "force_unlisted", "verified"]) + user2 = insert(:user) + + assert :ok == migration.change() + + fixed_user = User.get_by_id(user.id) + fixed_user2 = User.get_by_id(user2.id) + + assert fixed_user.tags == ["mrf_tag:media-force-nsfw", "mrf_tag:force-unlisted", "verified"] + assert fixed_user2.tags == [] + + # user2 should not have been updated + assert fixed_user2.updated_at == fixed_user2.inserted_at + end +end From dc88b6f0919cf5686af7d5b935e8ee462491704b Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 2 Aug 2020 14:53:42 -0500 Subject: [PATCH 211/236] Add email blacklist, fixes #1404 --- config/config.exs | 3 ++- config/description.exs | 7 +++++++ docs/configuration/cheatsheet.md | 5 +++++ lib/pleroma/user.ex | 11 ++++++++++- test/user_test.exs | 23 +++++++++++++++++++++++ 5 files changed, 47 insertions(+), 2 deletions(-) diff --git a/config/config.exs b/config/config.exs index d31208c25..ba263bf95 100644 --- a/config/config.exs +++ b/config/config.exs @@ -509,7 +509,8 @@ "user_exists", "users", "web" - ] + ], + email_blacklist: [] config :pleroma, Oban, repo: Pleroma.Repo, diff --git a/config/description.exs b/config/description.exs index 11fbe0d78..3fe22e969 100644 --- a/config/description.exs +++ b/config/description.exs @@ -3021,6 +3021,7 @@ %{ key: :restricted_nicknames, type: {:list, :string}, + description: "List of nicknames users may not register with.", suggestions: [ ".well-known", "~", @@ -3053,6 +3054,12 @@ "users", "web" ] + }, + %{ + key: :email_blacklist, + type: {:list, :string}, + description: "List of email domains users may not register with.", + suggestions: ["mailinator.com", "maildrop.cc"] } ] }, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 9c768abef..1a86179f3 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -202,6 +202,11 @@ config :pleroma, :mrf_user_allowlist, %{ * `sign_object_fetches`: Sign object fetches with HTTP signatures * `authorized_fetch_mode`: Require HTTP signatures for AP fetches +## Pleroma.User + +* `restricted_nicknames`: List of nicknames users may not register with. +* `email_blacklist`: List of email domains users may not register with. + ## Pleroma.ScheduledActivity * `daily_user_limit`: the number of scheduled activities a user is allowed to create in a single day (Default: `25`) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index dcf6ebee2..d0cc098fe 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -676,10 +676,19 @@ def register_changeset(struct, params \\ %{}, opts \\ []) do |> validate_required([:name, :nickname, :password, :password_confirmation]) |> validate_confirmation(:password) |> unique_constraint(:email) + |> validate_format(:email, @email_regex) + |> validate_change(:email, fn :email, email -> + valid? = + Config.get([User, :email_blacklist]) + |> Enum.all?(fn blacklisted_domain -> + !String.ends_with?(email, ["@" <> blacklisted_domain, "." <> blacklisted_domain]) + end) + + if valid?, do: [], else: [email: "Email domain is blacklisted"] + end) |> unique_constraint(:nickname) |> validate_exclusion(:nickname, Config.get([User, :restricted_nicknames])) |> validate_format(:nickname, local_nickname_regex()) - |> validate_format(:email, @email_regex) |> validate_length(:bio, max: bio_limit) |> validate_length(:name, min: 1, max: name_limit) |> validate_length(:registration_reason, max: reason_limit) diff --git a/test/user_test.exs b/test/user_test.exs index 904cea536..7c45e69e7 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -490,6 +490,29 @@ test "it restricts certain nicknames" do refute changeset.valid? end + test "it blocks blacklisted email domains" do + clear_config([User, :email_blacklist], ["trolling.world"]) + + # Block with match + params = Map.put(@full_user_data, :email, "troll@trolling.world") + changeset = User.register_changeset(%User{}, params) + refute changeset.valid? + + # Block with subdomain match + params = Map.put(@full_user_data, :email, "troll@gnomes.trolling.world") + changeset = User.register_changeset(%User{}, params) + refute changeset.valid? + + # Pass with different domains that are similar + params = Map.put(@full_user_data, :email, "troll@gnomestrolling.world") + changeset = User.register_changeset(%User{}, params) + assert changeset.valid? + + params = Map.put(@full_user_data, :email, "troll@trolling.world.us") + changeset = User.register_changeset(%User{}, params) + assert changeset.valid? + end + test "it sets the password_hash and ap_id" do changeset = User.register_changeset(%User{}, @full_user_data) From 77b48cb4ce81165a3a4f28e91b8f22dd510d3d00 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 2 Aug 2020 16:36:55 -0500 Subject: [PATCH 212/236] Factory: Add report_activity_factory --- test/support/factory.ex | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/test/support/factory.ex b/test/support/factory.ex index 635d83650..4c09d65b6 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -297,6 +297,30 @@ def follow_activity_factory do } end + def report_activity_factory(attrs \\ %{}) do + user = attrs[:user] || insert(:user) + activity = attrs[:activity] || insert(:note_activity) + state = attrs[:state] || "open" + + data = %{ + "id" => Pleroma.Web.ActivityPub.Utils.generate_activity_id(), + "actor" => user.ap_id, + "type" => "Flag", + "object" => [activity.actor, activity.data["id"]], + "published" => DateTime.utc_now() |> DateTime.to_iso8601(), + "to" => [], + "cc" => [activity.actor], + "context" => activity.data["context"], + "state" => state, + } + + %Pleroma.Activity{ + data: data, + actor: data["actor"], + recipients: data["to"] ++ data["cc"] + } + end + def oauth_app_factory do %Pleroma.Web.OAuth.App{ client_name: sequence(:client_name, &"Some client #{&1}"), From f9301044ed9c80314d1c313035359956cf5dbc1a Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 2 Aug 2020 16:37:33 -0500 Subject: [PATCH 213/236] Add ReportNote test --- test/report_note_test.exs | 16 ++++++++++++++++ test/support/factory.ex | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 test/report_note_test.exs diff --git a/test/report_note_test.exs b/test/report_note_test.exs new file mode 100644 index 000000000..25c1d6a61 --- /dev/null +++ b/test/report_note_test.exs @@ -0,0 +1,16 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.ReportNoteTest do + alias Pleroma.ReportNote + use Pleroma.DataCase + import Pleroma.Factory + + test "create/3" do + user = insert(:user) + report = insert(:report_activity) + assert {:ok, note} = ReportNote.create(user.id, report.id, "naughty boy") + assert note.content == "naughty boy" + end +end diff --git a/test/support/factory.ex b/test/support/factory.ex index 4c09d65b6..486eda8da 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -311,7 +311,7 @@ def report_activity_factory(attrs \\ %{}) do "to" => [], "cc" => [activity.actor], "context" => activity.data["context"], - "state" => state, + "state" => state } %Pleroma.Activity{ From 10c792110e6ea8ed21f739ef8f4f0eff4659ebf9 Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 3 Aug 2020 14:12:32 +0200 Subject: [PATCH 214/236] MRF Object Age Policy: Don't break on messages without cc/to --- .../web/activity_pub/mrf/object_age_policy.ex | 13 ++++-- .../mrf/object_age_policy_test.exs | 42 +++++++++++++++++++ 2 files changed, 51 insertions(+), 4 deletions(-) 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 5f111c72f..d45d2d7e3 100644 --- a/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex @@ -37,8 +37,13 @@ defp check_reject(message, actions) do defp check_delist(message, actions) do if :delist in actions do with %User{} = user <- User.get_cached_by_ap_id(message["actor"]) do - to = List.delete(message["to"], Pleroma.Constants.as_public()) ++ [user.follower_address] - cc = List.delete(message["cc"], user.follower_address) ++ [Pleroma.Constants.as_public()] + to = + List.delete(message["to"] || [], Pleroma.Constants.as_public()) ++ + [user.follower_address] + + cc = + List.delete(message["cc"] || [], user.follower_address) ++ + [Pleroma.Constants.as_public()] message = message @@ -58,8 +63,8 @@ defp check_delist(message, actions) do defp check_strip_followers(message, actions) do if :strip_followers in actions do with %User{} = user <- User.get_cached_by_ap_id(message["actor"]) do - to = List.delete(message["to"], user.follower_address) - cc = List.delete(message["cc"], user.follower_address) + to = List.delete(message["to"] || [], user.follower_address) + cc = List.delete(message["cc"] || [], user.follower_address) message = message 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 b0fb753bd..cf6acc9a2 100644 --- a/test/web/activity_pub/mrf/object_age_policy_test.exs +++ b/test/web/activity_pub/mrf/object_age_policy_test.exs @@ -38,6 +38,17 @@ defp get_new_message do end describe "with reject action" do + test "works with objects with empty to or cc fields" do + Config.put([:mrf_object_age, :actions], [:reject]) + + data = + get_old_message() + |> Map.put("cc", nil) + |> Map.put("to", nil) + + assert match?({:reject, _}, ObjectAgePolicy.filter(data)) + end + test "it rejects an old post" do Config.put([:mrf_object_age, :actions], [:reject]) @@ -56,6 +67,21 @@ test "it allows a new post" do end describe "with delist action" do + test "works with objects with empty to or cc fields" do + Config.put([:mrf_object_age, :actions], [:delist]) + + data = + get_old_message() + |> Map.put("cc", nil) + |> Map.put("to", nil) + + {:ok, _u} = User.get_or_fetch_by_ap_id(data["actor"]) + + {:ok, data} = ObjectAgePolicy.filter(data) + + assert Visibility.get_visibility(%{data: data}) == "unlisted" + end + test "it delists an old post" do Config.put([:mrf_object_age, :actions], [:delist]) @@ -80,6 +106,22 @@ test "it allows a new post" do end describe "with strip_followers action" do + test "works with objects with empty to or cc fields" do + Config.put([:mrf_object_age, :actions], [:strip_followers]) + + data = + get_old_message() + |> Map.put("cc", nil) + |> Map.put("to", nil) + + {:ok, user} = User.get_or_fetch_by_ap_id(data["actor"]) + + {:ok, data} = ObjectAgePolicy.filter(data) + + refute user.follower_address in data["to"] + refute user.follower_address in data["cc"] + end + test "it strips followers collections from an old post" do Config.put([:mrf_object_age, :actions], [:strip_followers]) From de3bdc63adac0141500bdc2692124cd104330bda Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 3 Aug 2020 15:00:14 +0200 Subject: [PATCH 215/236] AccountControllerTest: Add test for message returned. --- .../controllers/account_controller_test.exs | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index d390c3ce1..2cb388655 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -940,17 +940,32 @@ test "registers and logs in without :account_activation_required / :account_appr assert refresh assert scope == "read write follow" + clear_config([User, :email_blacklist], ["example.org"]) + + params = %{ + username: "lain", + email: "lain@example.org", + password: "PlzDontHackLain", + bio: "Test Bio", + agreement: true + } + conn = build_conn() |> put_req_header("content-type", "multipart/form-data") |> put_req_header("authorization", "Bearer " <> token) - |> post("/api/v1/accounts", %{ - username: "lain", - email: "lain@example.org", - password: "PlzDontHackLain", - bio: "Test Bio", - agreement: true - }) + |> post("/api/v1/accounts", params) + + assert %{"error" => "{\"email\":[\"Email domain is blacklisted\"]}"} = + json_response_and_validate_schema(conn, 400) + + Pleroma.Config.put([User, :email_blacklist], []) + + conn = + build_conn() + |> put_req_header("content-type", "multipart/form-data") + |> put_req_header("authorization", "Bearer " <> token) + |> post("/api/v1/accounts", params) %{ "access_token" => token, From 13e5540c2c0945e9c81f5289f74526f837715c6d Mon Sep 17 00:00:00 2001 From: Ilja Date: Mon, 3 Aug 2020 16:44:56 +0000 Subject: [PATCH 216/236] Apply 1 suggestion(s) to 1 file(s) --- config/description.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/description.exs b/config/description.exs index 9c8cbacb5..439f17fd7 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1013,7 +1013,7 @@ description: "A message that will be sent to a newly registered users as a chat message", suggestions: [ - "Hi, @username! Welcome on board!" + "Hello, welcome on board!" ] }, %{ From 016d8d6c560cb81dfe67cc660e12d2e70d0bc6af Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Mon, 3 Aug 2020 12:37:31 -0500 Subject: [PATCH 217/236] Consolidate construction of Rich Media Parser HTTP requests --- lib/pleroma/web/rich_media/helpers.ex | 21 +++++++++++++++++++ lib/pleroma/web/rich_media/parser.ex | 20 +----------------- .../web/rich_media/parsers/oembed_parser.ex | 2 +- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/lib/pleroma/web/rich_media/helpers.ex b/lib/pleroma/web/rich_media/helpers.ex index 5c7daf1a5..6210f2c5a 100644 --- a/lib/pleroma/web/rich_media/helpers.ex +++ b/lib/pleroma/web/rich_media/helpers.ex @@ -9,6 +9,11 @@ defmodule Pleroma.Web.RichMedia.Helpers do alias Pleroma.Object alias Pleroma.Web.RichMedia.Parser + @rich_media_options [ + pool: :media, + max_body: 2_000_000 + ] + @spec validate_page_url(URI.t() | binary()) :: :ok | :error defp validate_page_url(page_url) when is_binary(page_url) do validate_tld = Pleroma.Config.get([Pleroma.Formatter, :validate_tld]) @@ -77,4 +82,20 @@ def perform(:fetch, %Activity{} = activity) do fetch_data_for_activity(activity) :ok end + + def rich_media_get(url) do + headers = [{"user-agent", Pleroma.Application.user_agent() <> "; Bot"}] + + options = + if Application.get_env(:tesla, :adapter) == Tesla.Adapter.Hackney do + Keyword.merge(@rich_media_options, + recv_timeout: 2_000, + with_body: true + ) + else + @rich_media_options + end + + Pleroma.HTTP.get(url, headers, options) + end end diff --git a/lib/pleroma/web/rich_media/parser.ex b/lib/pleroma/web/rich_media/parser.ex index c8a767935..ca592833f 100644 --- a/lib/pleroma/web/rich_media/parser.ex +++ b/lib/pleroma/web/rich_media/parser.ex @@ -3,11 +3,6 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.RichMedia.Parser do - @options [ - pool: :media, - max_body: 2_000_000 - ] - defp parsers do Pleroma.Config.get([:rich_media, :parsers]) end @@ -75,21 +70,8 @@ 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 - rich_media_agent = Pleroma.Application.user_agent() <> "; Bot" - - {:ok, %Tesla.Env{body: html}} = - Pleroma.HTTP.get(url, [{"user-agent", rich_media_agent}], adapter: opts) + {:ok, %Tesla.Env{body: html}} = Pleroma.Web.RichMedia.Helpers.rich_media_get(url) html |> parse_html() diff --git a/lib/pleroma/web/rich_media/parsers/oembed_parser.ex b/lib/pleroma/web/rich_media/parsers/oembed_parser.ex index 6bdeac89c..1fe6729c3 100644 --- a/lib/pleroma/web/rich_media/parsers/oembed_parser.ex +++ b/lib/pleroma/web/rich_media/parsers/oembed_parser.ex @@ -22,7 +22,7 @@ defp get_oembed_url([{"link", attributes, _children} | _]) do end defp get_oembed_data(url) do - with {:ok, %Tesla.Env{body: json}} <- Pleroma.HTTP.get(url, [], adapter: [pool: :media]) do + with {:ok, %Tesla.Env{body: json}} <- Pleroma.Web.RichMedia.Helpers.rich_media_get(url) do Jason.decode(json) end end From cbf8bfc6942cbfbb5266a20d9929faf2e192ac70 Mon Sep 17 00:00:00 2001 From: Ilja Date: Mon, 3 Aug 2020 20:13:43 +0200 Subject: [PATCH 218/236] Improved WelcomeChatMessageTest * Checks if message is the same using ==/2 instead of =~/2 --- test/user/welcome_chat_massage_test.exs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/user/welcome_chat_massage_test.exs b/test/user/welcome_chat_massage_test.exs index 3fef6fa6d..fe26d6e4d 100644 --- a/test/user/welcome_chat_massage_test.exs +++ b/test/user/welcome_chat_massage_test.exs @@ -14,22 +14,22 @@ defmodule Pleroma.User.WelcomeChatMessageTest do describe "post_message/1" do test "send a chat welcome message" do - welcome_user = insert(:user) - user = insert(:user, name: "mewmew") + welcome_user = insert(:user, name: "mewmew") + user = insert(:user) Config.put([:welcome, :chat_message, :enabled], true) Config.put([:welcome, :chat_message, :sender_nickname], welcome_user.nickname) Config.put( [:welcome, :chat_message, :message], - "Hello. Welcome to blob.cat" + "Hello, welcome to Blob/Cat!" ) {:ok, %Pleroma.Activity{} = activity} = WelcomeChatMessage.post_message(user) assert user.ap_id in activity.recipients assert Pleroma.Object.normalize(activity).data["type"] == "ChatMessage" - assert Pleroma.Object.normalize(activity).data["content"] =~ "Hello. Welcome to " + assert Pleroma.Object.normalize(activity).data["content"] == "Hello, welcome to Blob/Cat!" end end end From 058daf498f10e58221bd29a42799f52e56a800a9 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 3 Aug 2020 19:57:53 -0500 Subject: [PATCH 219/236] Email blacklist: Update response phrasing --- lib/pleroma/user.ex | 2 +- test/web/mastodon_api/controllers/account_controller_test.exs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index d0cc098fe..16679ac42 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -684,7 +684,7 @@ def register_changeset(struct, params \\ %{}, opts \\ []) do !String.ends_with?(email, ["@" <> blacklisted_domain, "." <> blacklisted_domain]) end) - if valid?, do: [], else: [email: "Email domain is blacklisted"] + if valid?, do: [], else: [credentials: "Invalid credentials"] end) |> unique_constraint(:nickname) |> validate_exclusion(:nickname, Config.get([User, :restricted_nicknames])) diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 2cb388655..86e3ac3e7 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -956,7 +956,7 @@ test "registers and logs in without :account_activation_required / :account_appr |> put_req_header("authorization", "Bearer " <> token) |> post("/api/v1/accounts", params) - assert %{"error" => "{\"email\":[\"Email domain is blacklisted\"]}"} = + assert %{"error" => "{\"credentials\":[\"Invalid credentials\"]}"} = json_response_and_validate_schema(conn, 400) Pleroma.Config.put([User, :email_blacklist], []) From 4f57e85ab9c80fb7cb51428cef978793ba22971c Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 3 Aug 2020 22:20:49 -0500 Subject: [PATCH 220/236] Email blacklist: Update phrasing again --- lib/pleroma/user.ex | 2 +- test/web/mastodon_api/controllers/account_controller_test.exs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 16679ac42..9e03373de 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -684,7 +684,7 @@ def register_changeset(struct, params \\ %{}, opts \\ []) do !String.ends_with?(email, ["@" <> blacklisted_domain, "." <> blacklisted_domain]) end) - if valid?, do: [], else: [credentials: "Invalid credentials"] + if valid?, do: [], else: [email: "Invalid email"] end) |> unique_constraint(:nickname) |> validate_exclusion(:nickname, Config.get([User, :restricted_nicknames])) diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 86e3ac3e7..17a1e7d66 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -956,7 +956,7 @@ test "registers and logs in without :account_activation_required / :account_appr |> put_req_header("authorization", "Bearer " <> token) |> post("/api/v1/accounts", params) - assert %{"error" => "{\"credentials\":[\"Invalid credentials\"]}"} = + assert %{"error" => "{\"email\":[\"Invalid email\"]}"} = json_response_and_validate_schema(conn, 400) Pleroma.Config.put([User, :email_blacklist], []) From 2f4289d455fbd2d949ac1e10d5ea2b9c78f15e82 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 4 Aug 2020 12:49:56 +0200 Subject: [PATCH 221/236] Changelog: Add info about email blacklist --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 129c269aa..6ae5fb928 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added +- Configuration: Added a blacklist for email servers. - Chats: Added `accepts_chat_messages` field to user, exposed in APIs and federation. - Chats: Added support for federated chats. For details, see the docs. - ActivityPub: Added support for existing AP ids for instances migrated from Mastodon. From 56e9bf33932bacfdffd700b97e3117fc593cac11 Mon Sep 17 00:00:00 2001 From: Roman Chvanikov Date: Tue, 4 Aug 2020 14:35:47 +0300 Subject: [PATCH 222/236] Unify Config.get behaviour for atom/list key param --- lib/pleroma/config.ex | 34 +++++++++++++++++++++++++++------- test/config_test.exs | 28 ++++++++++++++++++++++++++++ test/support/helpers.ex | 14 ++++++++++++-- 3 files changed, 67 insertions(+), 9 deletions(-) diff --git a/lib/pleroma/config.ex b/lib/pleroma/config.ex index cc80deff5..88d1972ba 100644 --- a/lib/pleroma/config.ex +++ b/lib/pleroma/config.ex @@ -11,13 +11,33 @@ def get(key), do: get(key, nil) def get([key], default), do: get(key, default) - def get([parent_key | keys], default) do - case :pleroma - |> Application.get_env(parent_key) - |> get_in(keys) do - nil -> default - any -> any - end + def get([root_key | keys], default) do + # This is to mimic Application.get_env/3 behaviour that returns `nil` if the + # actual value is `nil`. + Enum.reduce_while(keys, Application.get_env(:pleroma, root_key), fn key, config -> + case key do + [last_key] when is_map(config) -> + {:halt, Map.get(config, last_key, default)} + + [last_key] when is_list(config) -> + {:halt, Keyword.get(config, last_key, default)} + + _ -> + case config do + %{^key => value} -> + {:cont, value} + + [_ | _] -> + case :lists.keyfind(key, 1, config) do + {_, value} -> {:cont, value} + _ -> {:halt, default} + end + + _ -> + {:halt, default} + end + end + end) end def get(key, default) do diff --git a/test/config_test.exs b/test/config_test.exs index a46ab4302..3f3da06d0 100644 --- a/test/config_test.exs +++ b/test/config_test.exs @@ -28,6 +28,34 @@ test "get/1 with a list of keys" do assert Pleroma.Config.get([:azerty, :uiop], true) == true end + describe "nil values" do + setup do + Pleroma.Config.put(:lorem, nil) + Pleroma.Config.put(:ipsum, %{dolor: [sit: nil]}) + Pleroma.Config.put(:dolor, sit: %{amet: nil}) + + on_exit(fn -> Enum.each(~w(lorem ipsum dolor)a, &Pleroma.Config.delete/1) end) + end + + test "get/1 with an atom for nil value" do + assert Pleroma.Config.get(:lorem) == nil + end + + test "get/2 with an atom for nil value" do + assert Pleroma.Config.get(:lorem, true) == nil + end + + test "get/1 with a list of keys for nil value" do + assert Pleroma.Config.get([:ipsum, :dolor, :sit]) == nil + assert Pleroma.Config.get([:dolor, :sit, :amet]) == nil + end + + test "get/2 with a list of keys for nil value" do + assert Pleroma.Config.get([:ipsum, :dolor, :sit], true) == nil + assert Pleroma.Config.get([:dolor, :sit, :amet], true) == nil + end + end + test "get/1 when value is false" do Pleroma.Config.put([:instance, :false_test], false) Pleroma.Config.put([:instance, :nested], []) diff --git a/test/support/helpers.ex b/test/support/helpers.ex index 5cbf2e291..7d729541d 100644 --- a/test/support/helpers.ex +++ b/test/support/helpers.ex @@ -17,9 +17,19 @@ defmacro clear_config(config_path) do defmacro clear_config(config_path, do: yield) do quote do - initial_setting = Config.get(unquote(config_path)) + initial_setting = Config.get(unquote(config_path), :__clear_config_absent__) unquote(yield) - on_exit(fn -> Config.put(unquote(config_path), initial_setting) end) + + on_exit(fn -> + case initial_setting do + :__clear_config_absent__ -> + Config.delete(unquote(config_path)) + + _ -> + Config.put(unquote(config_path), initial_setting) + end + end) + :ok end end From 953f71bcfa25569d8b92d4047f4bdbee97e0077c Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 4 Aug 2020 13:38:30 +0200 Subject: [PATCH 223/236] App Test: Make more resilient --- test/tasks/app_test.exs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/tasks/app_test.exs b/test/tasks/app_test.exs index b8f03566d..71a84ac8e 100644 --- a/test/tasks/app_test.exs +++ b/test/tasks/app_test.exs @@ -50,13 +50,13 @@ test "with errors" do 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_receive {:mix_shell, :info, [message]} assert message == "#{name} successfully created:" - assert_received {:mix_shell, :info, [message]} + assert_receive {:mix_shell, :info, [message]} assert message == "App client_id: #{app.client_id}" - assert_received {:mix_shell, :info, [message]} + assert_receive {:mix_shell, :info, [message]} assert message == "App client_secret: #{app.client_secret}" assert app.scopes == scopes From 988ca4ab6a0d299308d96e84aa45ef63341128bf Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 4 Aug 2020 14:07:10 +0200 Subject: [PATCH 224/236] Test Config: Don't have any MRFs by default --- config/test.exs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/test.exs b/config/test.exs index db0655e73..413c7f0b9 100644 --- a/config/test.exs +++ b/config/test.exs @@ -120,6 +120,8 @@ config :tzdata, :autoupdate, :disabled +config :pleroma, :mrf, policies: [] + if File.exists?("./config/test.secret.exs") do import_config "test.secret.exs" else From e92c040ad3d0cc568ea0dc4b79f207a392c7c90f Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 4 Aug 2020 14:08:12 +0200 Subject: [PATCH 225/236] CommonAPITest: Add test that deactivated users can't post. --- test/web/common_api/common_api_test.exs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 313dda21b..4ba6232dc 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -458,6 +458,11 @@ test "it adds emoji in the object" do end describe "posting" do + test "deactivated users can't post" do + user = insert(:user, deactivated: true) + assert {:error, _} = CommonAPI.post(user, %{status: "ye"}) + end + test "it supports explicit addressing" do user = insert(:user) user_two = insert(:user) From 0cfadcf2caf84e2db944036576bad888a9707ff1 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 4 Aug 2020 14:15:32 +0200 Subject: [PATCH 226/236] TransmogrifierTest: Add test for deactivated users --- test/web/activity_pub/transmogrifier_test.exs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 7d33feaf2..828964a36 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -163,6 +163,14 @@ test "it does not crash if the object in inReplyTo can't be fetched" do end) =~ "[warn] Couldn't fetch \"https://404.site/whatever\", error: nil" end + test "it does not work for deactivated users" do + data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!() + + insert(:user, ap_id: data["actor"], deactivated: true) + + assert {:error, _} = Transmogrifier.handle_incoming(data) + end + test "it works for incoming notices" do data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!() From 1a00713744803824b16efd575c9c6880b1d1a57e Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 4 Aug 2020 14:17:03 +0200 Subject: [PATCH 227/236] CommonValidations: Treat deactivated users as not present. --- .../object_validators/common_validations.ex | 13 +++++++++---- .../transmogrifier/chat_message_test.exs | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+), 4 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 aeef31945..bd46f8034 100644 --- a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex +++ b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex @@ -34,10 +34,15 @@ def validate_actor_presence(cng, options \\ []) 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"}] + case User.get_cached_by_ap_id(actor) do + %User{deactivated: true} -> + [{field_name, "user is deactivated"}] + + %User{} -> + [] + + _ -> + [{field_name, "can't find user"}] end end) end diff --git a/test/web/activity_pub/transmogrifier/chat_message_test.exs b/test/web/activity_pub/transmogrifier/chat_message_test.exs index d6736dc3e..31274c067 100644 --- a/test/web/activity_pub/transmogrifier/chat_message_test.exs +++ b/test/web/activity_pub/transmogrifier/chat_message_test.exs @@ -124,6 +124,24 @@ test "it fetches the actor if they aren't in our system" do {:ok, %Activity{} = _activity} = Transmogrifier.handle_incoming(data) end + test "it doesn't work for deactivated users" do + data = + File.read!("test/fixtures/create-chat-message.json") + |> Poison.decode!() + + _author = + insert(:user, + ap_id: data["actor"], + local: false, + last_refreshed_at: DateTime.utc_now(), + deactivated: true + ) + + _recipient = insert(:user, ap_id: List.first(data["to"]), local: true) + + assert {:error, _} = Transmogrifier.handle_incoming(data) + end + test "it inserts it and creates a chat" do data = File.read!("test/fixtures/create-chat-message.json") From 36aa34a1a8c489f74a9821095d823f8060afac5f Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 4 Aug 2020 15:08:51 +0200 Subject: [PATCH 228/236] MastodonAPITest: Do the needful --- test/web/mastodon_api/mastodon_api_test.exs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/web/mastodon_api/mastodon_api_test.exs b/test/web/mastodon_api/mastodon_api_test.exs index c08be37d4..0c5a38bf6 100644 --- a/test/web/mastodon_api/mastodon_api_test.exs +++ b/test/web/mastodon_api/mastodon_api_test.exs @@ -17,8 +17,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPITest do test "returns error when followed user is deactivated" do follower = insert(:user) user = insert(:user, local: true, deactivated: true) - {:error, error} = MastodonAPI.follow(follower, user) - assert error == :rejected + assert {:error, _error} = MastodonAPI.follow(follower, user) end test "following for user" do From 697e3db01c0a1ee1e18fe25946a4ef56527828e7 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 4 Aug 2020 08:55:40 -0500 Subject: [PATCH 229/236] Add analyze mix alias to run the same credo checks we use in CI --- mix.exs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 0e723c15f..63142dee7 100644 --- a/mix.exs +++ b/mix.exs @@ -214,7 +214,8 @@ defp aliases do "ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"], "ecto.reset": ["ecto.drop", "ecto.setup"], test: ["ecto.create --quiet", "ecto.migrate", "test"], - docs: ["pleroma.docs", "docs"] + docs: ["pleroma.docs", "docs"], + analyze: ["credo --strict --only=warnings,todo,fixme,consistency,readability"] ] end From 91fbb5b21f9d8f098c9796eb4dd917bcd1e92404 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 4 Aug 2020 18:26:37 +0400 Subject: [PATCH 230/236] Fix ActivityExpirationPolicy --- .../web/activity_pub/mrf/activity_expiration_policy.ex | 4 ++-- .../activity_pub/mrf/activity_expiration_policy_test.exs | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex b/lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex index 8e47f1e02..7b4c78e0f 100644 --- a/lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex @@ -21,8 +21,8 @@ def filter(activity) do @impl true def describe, do: {:ok, %{}} - defp local?(%{"id" => id}) do - String.starts_with?(id, Pleroma.Web.Endpoint.url()) + defp local?(%{"actor" => actor}) do + String.starts_with?(actor, Pleroma.Web.Endpoint.url()) end defp note?(activity) do diff --git a/test/web/activity_pub/mrf/activity_expiration_policy_test.exs b/test/web/activity_pub/mrf/activity_expiration_policy_test.exs index 8babf49e7..f25cf8b12 100644 --- a/test/web/activity_pub/mrf/activity_expiration_policy_test.exs +++ b/test/web/activity_pub/mrf/activity_expiration_policy_test.exs @@ -7,11 +7,13 @@ defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicyTest do alias Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy @id Pleroma.Web.Endpoint.url() <> "/activities/cofe" + @local_actor Pleroma.Web.Endpoint.url() <> "/users/cofe" test "adds `expires_at` property" do assert {:ok, %{"type" => "Create", "expires_at" => expires_at}} = ActivityExpirationPolicy.filter(%{ "id" => @id, + "actor" => @local_actor, "type" => "Create", "object" => %{"type" => "Note"} }) @@ -25,6 +27,7 @@ test "keeps existing `expires_at` if it less than the config setting" do assert {:ok, %{"type" => "Create", "expires_at" => ^expires_at}} = ActivityExpirationPolicy.filter(%{ "id" => @id, + "actor" => @local_actor, "type" => "Create", "expires_at" => expires_at, "object" => %{"type" => "Note"} @@ -37,6 +40,7 @@ test "overwrites existing `expires_at` if it greater than the config setting" do assert {:ok, %{"type" => "Create", "expires_at" => expires_at}} = ActivityExpirationPolicy.filter(%{ "id" => @id, + "actor" => @local_actor, "type" => "Create", "expires_at" => too_distant_future, "object" => %{"type" => "Note"} @@ -49,6 +53,7 @@ test "ignores remote activities" do assert {:ok, activity} = ActivityExpirationPolicy.filter(%{ "id" => "https://example.com/123", + "actor" => "https://example.com/users/cofe", "type" => "Create", "object" => %{"type" => "Note"} }) @@ -60,6 +65,7 @@ test "ignores non-Create/Note activities" do assert {:ok, activity} = ActivityExpirationPolicy.filter(%{ "id" => "https://example.com/123", + "actor" => "https://example.com/users/cofe", "type" => "Follow" }) @@ -68,6 +74,7 @@ test "ignores non-Create/Note activities" do assert {:ok, activity} = ActivityExpirationPolicy.filter(%{ "id" => "https://example.com/123", + "actor" => "https://example.com/users/cofe", "type" => "Create", "object" => %{"type" => "Cofe"} }) From 184742af5eed2c48ba8518f1e114cbe0655ad467 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 3 Aug 2020 22:32:51 -0500 Subject: [PATCH 231/236] Unique apps.client_id for new installations, fixes #2022 --- ...200804183107_add_unique_index_to_app_client_id.exs | 7 +++++++ test/web/oauth/app_test.exs | 11 +++++++++++ 2 files changed, 18 insertions(+) create mode 100644 priv/repo/migrations/20200804183107_add_unique_index_to_app_client_id.exs diff --git a/priv/repo/migrations/20200804183107_add_unique_index_to_app_client_id.exs b/priv/repo/migrations/20200804183107_add_unique_index_to_app_client_id.exs new file mode 100644 index 000000000..83de18096 --- /dev/null +++ b/priv/repo/migrations/20200804183107_add_unique_index_to_app_client_id.exs @@ -0,0 +1,7 @@ +defmodule Pleroma.Repo.Migrations.AddUniqueIndexToAppClientId do + use Ecto.Migration + + def change do + create(unique_index(:apps, [:client_id])) + end +end diff --git a/test/web/oauth/app_test.exs b/test/web/oauth/app_test.exs index 899af648e..993a490e0 100644 --- a/test/web/oauth/app_test.exs +++ b/test/web/oauth/app_test.exs @@ -29,5 +29,16 @@ test "gets exist app and updates scopes" do assert exist_app.id == app.id assert exist_app.scopes == ["read", "write", "follow", "push"] end + + test "has unique client_id" do + insert(:oauth_app, client_name: "", redirect_uris: "", client_id: "boop") + + error = + catch_error(insert(:oauth_app, client_name: "", redirect_uris: "", client_id: "boop")) + + assert %Ecto.ConstraintError{} = error + assert error.constraint == "apps_client_id_index" + assert error.type == :unique + end end end From 079e410d6efcb39e72a238c13e52bd1898b442a2 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 4 Aug 2020 13:12:23 -0500 Subject: [PATCH 232/236] Add a migration to clean up activity_expirations table --- ...0804180322_remove_nonlocal_expirations.exs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 priv/repo/migrations/20200804180322_remove_nonlocal_expirations.exs diff --git a/priv/repo/migrations/20200804180322_remove_nonlocal_expirations.exs b/priv/repo/migrations/20200804180322_remove_nonlocal_expirations.exs new file mode 100644 index 000000000..389935f0d --- /dev/null +++ b/priv/repo/migrations/20200804180322_remove_nonlocal_expirations.exs @@ -0,0 +1,19 @@ +defmodule Pleroma.Repo.Migrations.RemoveNonlocalExpirations do + use Ecto.Migration + + def up do + statement = """ + DELETE FROM + activity_expirations A USING activities B + WHERE + A.activity_id = B.id + AND B.local = false; + """ + + execute(statement) + end + + def down do + :ok + end +end From 577b11167cb55203d30c43773f40108a87b2be6d Mon Sep 17 00:00:00 2001 From: Karol Kosek Date: Wed, 5 Aug 2020 00:01:30 +0200 Subject: [PATCH 233/236] templates/layout/app.html.eex: fix link color --- lib/pleroma/web/templates/layout/app.html.eex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/templates/layout/app.html.eex b/lib/pleroma/web/templates/layout/app.html.eex index 5836ec1e0..51603fe0c 100644 --- a/lib/pleroma/web/templates/layout/app.html.eex +++ b/lib/pleroma/web/templates/layout/app.html.eex @@ -37,7 +37,7 @@ } a { - color: color: #d8a070; + color: #d8a070; text-decoration: none; } From 6f60ac9f41d9511afa71986f000a2fc6c637b0c5 Mon Sep 17 00:00:00 2001 From: Roman Chvanikov Date: Wed, 5 Aug 2020 13:00:49 +0300 Subject: [PATCH 234/236] Refactor config --- lib/pleroma/config.ex | 61 ++++++++++++-------------- test/application_requirements_test.exs | 5 ++- test/config_test.exs | 16 +++++++ 3 files changed, 49 insertions(+), 33 deletions(-) diff --git a/lib/pleroma/config.ex b/lib/pleroma/config.ex index 88d1972ba..98099ca58 100644 --- a/lib/pleroma/config.ex +++ b/lib/pleroma/config.ex @@ -11,33 +11,11 @@ def get(key), do: get(key, nil) def get([key], default), do: get(key, default) - def get([root_key | keys], default) do - # This is to mimic Application.get_env/3 behaviour that returns `nil` if the - # actual value is `nil`. - Enum.reduce_while(keys, Application.get_env(:pleroma, root_key), fn key, config -> - case key do - [last_key] when is_map(config) -> - {:halt, Map.get(config, last_key, default)} - - [last_key] when is_list(config) -> - {:halt, Keyword.get(config, last_key, default)} - - _ -> - case config do - %{^key => value} -> - {:cont, value} - - [_ | _] -> - case :lists.keyfind(key, 1, config) do - {_, value} -> {:cont, value} - _ -> {:halt, default} - end - - _ -> - {:halt, default} - end - end - end) + def get([_ | _] = path, default) do + case fetch(path) do + {:ok, value} -> value + :error -> default + end end def get(key, default) do @@ -54,6 +32,22 @@ def get!(key) do end end + def fetch([root_key | keys]) do + Enum.reduce_while(keys, Application.fetch_env(:pleroma, root_key), fn + key, {:ok, config} when is_map(config) or is_list(config) -> + case Access.fetch(config, key) do + :error -> + {:halt, :error} + + value -> + {:cont, value} + end + + _key, _config -> + {:halt, :error} + end) + end + def put([key], value), do: put(key, value) def put([parent_key | keys], value) do @@ -70,12 +64,15 @@ def put(key, value) do def delete([key]), do: delete(key) - def delete([parent_key | keys]) do - {_, parent} = - Application.get_env(:pleroma, parent_key) - |> get_and_update_in(keys, fn _ -> :pop end) + def delete([parent_key | keys] = path) do + with {:ok, _} <- fetch(path) do + {_, parent} = + parent_key + |> get() + |> get_and_update_in(keys, fn _ -> :pop end) - Application.put_env(:pleroma, parent_key, parent) + Application.put_env(:pleroma, parent_key, parent) + end end def delete(key) do diff --git a/test/application_requirements_test.exs b/test/application_requirements_test.exs index 21d24ddd0..e96295955 100644 --- a/test/application_requirements_test.exs +++ b/test/application_requirements_test.exs @@ -127,7 +127,10 @@ test "doesn't do anything if rum disabled" do :ok end - setup do: clear_config([:i_am_aware_this_may_cause_data_loss, :disable_migration_check]) + setup do + Pleroma.Config.get(:i_am_aware_this_may_cause_data_loss, 42) |> IO.inspect() + clear_config([:i_am_aware_this_may_cause_data_loss, :disable_migration_check]) + end test "raises if it detects unapplied migrations" do assert_raise Pleroma.ApplicationRequirements.VerifyError, diff --git a/test/config_test.exs b/test/config_test.exs index 3f3da06d0..e2c18304e 100644 --- a/test/config_test.exs +++ b/test/config_test.exs @@ -117,5 +117,21 @@ test "delete/2 with a list of keys" do Pleroma.Config.put([:delete_me, :delete_me], hello: "world", world: "Hello") Pleroma.Config.delete([:delete_me, :delete_me, :world]) assert Pleroma.Config.get([:delete_me, :delete_me]) == [hello: "world"] + + assert Pleroma.Config.delete([:this_key_does_not_exist]) + assert Pleroma.Config.delete([:non, :existing, :key]) + end + + test "fetch/1" do + Pleroma.Config.put([:lorem], :ipsum) + Pleroma.Config.put([:ipsum], dolor: :sit) + + assert Pleroma.Config.fetch([:lorem]) == {:ok, :ipsum} + assert Pleroma.Config.fetch([:ipsum, :dolor]) == {:ok, :sit} + assert Pleroma.Config.fetch([:lorem, :ipsum]) == :error + assert Pleroma.Config.fetch([:loremipsum]) == :error + + Pleroma.Config.delete([:lorem]) + Pleroma.Config.delete([:ipsum]) end end From 97b57014496003cabb416766457552ef854fa658 Mon Sep 17 00:00:00 2001 From: Roman Chvanikov Date: Wed, 5 Aug 2020 17:46:14 +0300 Subject: [PATCH 235/236] Update clear_config macro --- test/application_requirements_test.exs | 5 +---- test/support/helpers.ex | 8 ++++---- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/test/application_requirements_test.exs b/test/application_requirements_test.exs index e96295955..21d24ddd0 100644 --- a/test/application_requirements_test.exs +++ b/test/application_requirements_test.exs @@ -127,10 +127,7 @@ test "doesn't do anything if rum disabled" do :ok end - setup do - Pleroma.Config.get(:i_am_aware_this_may_cause_data_loss, 42) |> IO.inspect() - clear_config([:i_am_aware_this_may_cause_data_loss, :disable_migration_check]) - end + setup do: clear_config([:i_am_aware_this_may_cause_data_loss, :disable_migration_check]) test "raises if it detects unapplied migrations" do assert_raise Pleroma.ApplicationRequirements.VerifyError, diff --git a/test/support/helpers.ex b/test/support/helpers.ex index 7d729541d..ecd4b1e18 100644 --- a/test/support/helpers.ex +++ b/test/support/helpers.ex @@ -17,16 +17,16 @@ defmacro clear_config(config_path) do defmacro clear_config(config_path, do: yield) do quote do - initial_setting = Config.get(unquote(config_path), :__clear_config_absent__) + initial_setting = Config.fetch(unquote(config_path)) unquote(yield) on_exit(fn -> case initial_setting do - :__clear_config_absent__ -> + :error -> Config.delete(unquote(config_path)) - _ -> - Config.put(unquote(config_path), initial_setting) + {:ok, value} -> + Config.put(unquote(config_path), value) end end) From 8c57a299b463b7e5916addbbd3571b35e1742ebd Mon Sep 17 00:00:00 2001 From: Roman Chvanikov Date: Wed, 5 Aug 2020 18:23:12 +0300 Subject: [PATCH 236/236] Handle non-list keys in Config.fetch/1 --- lib/pleroma/config.ex | 2 ++ test/config_test.exs | 2 ++ 2 files changed, 4 insertions(+) diff --git a/lib/pleroma/config.ex b/lib/pleroma/config.ex index 98099ca58..a8329cc1e 100644 --- a/lib/pleroma/config.ex +++ b/lib/pleroma/config.ex @@ -32,6 +32,8 @@ def get!(key) do end end + def fetch(key) when is_atom(key), do: fetch([key]) + def fetch([root_key | keys]) do Enum.reduce_while(keys, Application.fetch_env(:pleroma, root_key), fn key, {:ok, config} when is_map(config) or is_list(config) -> diff --git a/test/config_test.exs b/test/config_test.exs index e2c18304e..1556e4237 100644 --- a/test/config_test.exs +++ b/test/config_test.exs @@ -127,9 +127,11 @@ test "fetch/1" do Pleroma.Config.put([:ipsum], dolor: :sit) assert Pleroma.Config.fetch([:lorem]) == {:ok, :ipsum} + assert Pleroma.Config.fetch(:lorem) == {:ok, :ipsum} assert Pleroma.Config.fetch([:ipsum, :dolor]) == {:ok, :sit} assert Pleroma.Config.fetch([:lorem, :ipsum]) == :error assert Pleroma.Config.fetch([:loremipsum]) == :error + assert Pleroma.Config.fetch(:loremipsum) == :error Pleroma.Config.delete([:lorem]) Pleroma.Config.delete([:ipsum])