Merge branch 'develop' into gun
This commit is contained in:
commit
f9ecb513fa
|
@ -0,0 +1,20 @@
|
||||||
|
<!--
|
||||||
|
### Precheck
|
||||||
|
|
||||||
|
* For support use https://git.pleroma.social/pleroma/pleroma-support or [community channels](https://git.pleroma.social/pleroma/pleroma#community-channels).
|
||||||
|
* Please do a quick search to ensure no similar bug has been reported before. If the bug has not been addressed after 2 weeks, it's fine to bump it.
|
||||||
|
* Try to ensure that the bug is actually related to the Pleroma backend. For example, if a bug happens in Pleroma-FE but not in Mastodon-FE or mobile clients, it's likely that the bug should be filed in [Pleroma-FE](https://git.pleroma.social/pleroma/pleroma-fe/issues/new) repository.
|
||||||
|
-->
|
||||||
|
|
||||||
|
### Environment
|
||||||
|
|
||||||
|
* Installation type:
|
||||||
|
- [ ] OTP
|
||||||
|
- [ ] 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:
|
||||||
|
* PostgreSQL version (`postgres -V`):
|
||||||
|
|
||||||
|
|
||||||
|
### Bug description
|
|
@ -0,0 +1,5 @@
|
||||||
|
### Release checklist
|
||||||
|
* [ ] Bump version in `mix.exs`
|
||||||
|
* [ ] Compile a changelog
|
||||||
|
* [ ] Create an MR with an announcement to pleroma.social
|
||||||
|
* [ ] Tag the release
|
|
@ -7,6 +7,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
### Changed
|
### Changed
|
||||||
- **Breaking:** BBCode and Markdown formatters will no longer return any `\n` and only use `<br/>` for newlines
|
- **Breaking:** BBCode and Markdown formatters will no longer return any `\n` and only use `<br/>` for newlines
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- **Breaking:** removed `with_move` parameter from notifications timeline.
|
||||||
|
|
||||||
## [2.0.0] - 2019-03-08
|
## [2.0.0] - 2019-03-08
|
||||||
### Security
|
### Security
|
||||||
- Mastodon API: Fix being able to request enourmous amount of statuses in timelines leading to DoS. Now limited to 40 per request.
|
- Mastodon API: Fix being able to request enourmous amount of statuses in timelines leading to DoS. Now limited to 40 per request.
|
||||||
|
|
|
@ -117,7 +117,6 @@ The `type` value is `pleroma:emoji_reaction`. Has these fields:
|
||||||
Accepts additional parameters:
|
Accepts additional parameters:
|
||||||
|
|
||||||
- `exclude_visibilities`: will exclude the notifications for activities with the given visibilities. The parameter accepts an array of visibility types (`public`, `unlisted`, `private`, `direct`). Usage example: `GET /api/v1/notifications?exclude_visibilities[]=direct&exclude_visibilities[]=private`.
|
- `exclude_visibilities`: will exclude the notifications for activities with the given visibilities. The parameter accepts an array of visibility types (`public`, `unlisted`, `private`, `direct`). Usage example: `GET /api/v1/notifications?exclude_visibilities[]=direct&exclude_visibilities[]=private`.
|
||||||
- `with_move`: boolean, when set to `true` will include Move notifications. `false` by default.
|
|
||||||
|
|
||||||
## POST `/api/v1/statuses`
|
## POST `/api/v1/statuses`
|
||||||
|
|
||||||
|
|
|
@ -138,7 +138,8 @@ config :pleroma, :mrf_user_allowlist,
|
||||||
```
|
```
|
||||||
|
|
||||||
#### :mrf_object_age
|
#### :mrf_object_age
|
||||||
* `threshold`: Required age (in seconds) of a post before actions are taken.
|
* `threshold`: Required time offset (in seconds) compared to your server clock of an incoming post before actions are taken.
|
||||||
|
e.g., A value of 900 results in any post with a timestamp older than 15 minutes will be acted upon.
|
||||||
* `actions`: A list of actions to apply to the post:
|
* `actions`: A list of actions to apply to the post:
|
||||||
* `:delist` removes the post from public timelines
|
* `:delist` removes the post from public timelines
|
||||||
* `:strip_followers` removes followers from the ActivityPub recipient list, ensuring they won't be delivered to home timelines
|
* `:strip_followers` removes followers from the ActivityPub recipient list, ensuring they won't be delivered to home timelines
|
||||||
|
|
|
@ -77,7 +77,6 @@ def for_user_query(user, opts \\ %{}) do
|
||||||
|> exclude_notification_muted(user, exclude_notification_muted_opts)
|
|> exclude_notification_muted(user, exclude_notification_muted_opts)
|
||||||
|> exclude_blocked(user, exclude_blocked_opts)
|
|> exclude_blocked(user, exclude_blocked_opts)
|
||||||
|> exclude_visibility(opts)
|
|> exclude_visibility(opts)
|
||||||
|> exclude_move(opts)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
defp exclude_blocked(query, user, opts) do
|
defp exclude_blocked(query, user, opts) do
|
||||||
|
@ -107,14 +106,6 @@ defp exclude_notification_muted(query, user, opts) do
|
||||||
|> where([n, a, o, tm], is_nil(tm.user_id))
|
|> where([n, a, o, tm], is_nil(tm.user_id))
|
||||||
end
|
end
|
||||||
|
|
||||||
defp exclude_move(query, %{with_move: true}) do
|
|
||||||
query
|
|
||||||
end
|
|
||||||
|
|
||||||
defp exclude_move(query, _opts) do
|
|
||||||
where(query, [n, a], fragment("?->>'type' != 'Move'", a.data))
|
|
||||||
end
|
|
||||||
|
|
||||||
@valid_visibilities ~w[direct unlisted public private]
|
@valid_visibilities ~w[direct unlisted public private]
|
||||||
|
|
||||||
defp exclude_visibility(query, %{exclude_visibilities: visibility})
|
defp exclude_visibility(query, %{exclude_visibilities: visibility})
|
||||||
|
|
|
@ -72,7 +72,6 @@ defp cast_params(params) do
|
||||||
exclude_visibilities: {:array, :string},
|
exclude_visibilities: {:array, :string},
|
||||||
reblogs: :boolean,
|
reblogs: :boolean,
|
||||||
with_muted: :boolean,
|
with_muted: :boolean,
|
||||||
with_move: :boolean,
|
|
||||||
account_ap_id: :string
|
account_ap_id: :string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -687,7 +687,13 @@ test "move activity generates a notification" do
|
||||||
Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)
|
Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)
|
||||||
ObanHelpers.perform_all()
|
ObanHelpers.perform_all()
|
||||||
|
|
||||||
assert [] = Notification.for_user(follower)
|
assert [
|
||||||
|
%{
|
||||||
|
activity: %{
|
||||||
|
data: %{"type" => "Move", "actor" => ^old_ap_id, "target" => ^new_ap_id}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
] = Notification.for_user(follower)
|
||||||
|
|
||||||
assert [
|
assert [
|
||||||
%{
|
%{
|
||||||
|
@ -695,17 +701,7 @@ test "move activity generates a notification" do
|
||||||
data: %{"type" => "Move", "actor" => ^old_ap_id, "target" => ^new_ap_id}
|
data: %{"type" => "Move", "actor" => ^old_ap_id, "target" => ^new_ap_id}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
] = Notification.for_user(follower, %{with_move: true})
|
] = Notification.for_user(other_follower)
|
||||||
|
|
||||||
assert [] = Notification.for_user(other_follower)
|
|
||||||
|
|
||||||
assert [
|
|
||||||
%{
|
|
||||||
activity: %{
|
|
||||||
data: %{"type" => "Move", "actor" => ^old_ap_id, "target" => ^new_ap_id}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
] = Notification.for_user(other_follower, %{with_move: true})
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1955,11 +1955,9 @@ test "create" do
|
||||||
|
|
||||||
activity = %Activity{activity | object: nil}
|
activity = %Activity{activity | object: nil}
|
||||||
|
|
||||||
assert [%Notification{activity: ^activity}] =
|
assert [%Notification{activity: ^activity}] = Notification.for_user(follower)
|
||||||
Notification.for_user(follower, %{with_move: true})
|
|
||||||
|
|
||||||
assert [%Notification{activity: ^activity}] =
|
assert [%Notification{activity: ^activity}] = Notification.for_user(follower_move_opted_out)
|
||||||
Notification.for_user(follower_move_opted_out, %{with_move: true})
|
|
||||||
end
|
end
|
||||||
|
|
||||||
test "old user must be in the new user's `also_known_as` list" do
|
test "old user must be in the new user's `also_known_as` list" do
|
||||||
|
|
|
@ -408,7 +408,7 @@ test "see notifications after muting user with notifications and with_muted para
|
||||||
end
|
end
|
||||||
|
|
||||||
@tag capture_log: true
|
@tag capture_log: true
|
||||||
test "see move notifications with `with_move` parameter" do
|
test "see move notifications" do
|
||||||
old_user = insert(:user)
|
old_user = insert(:user)
|
||||||
new_user = insert(:user, also_known_as: [old_user.ap_id])
|
new_user = insert(:user, also_known_as: [old_user.ap_id])
|
||||||
%{user: follower, conn: conn} = oauth_access(["read:notifications"])
|
%{user: follower, conn: conn} = oauth_access(["read:notifications"])
|
||||||
|
@ -429,11 +429,7 @@ test "see move notifications with `with_move` parameter" do
|
||||||
Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)
|
Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)
|
||||||
Pleroma.Tests.ObanHelpers.perform_all()
|
Pleroma.Tests.ObanHelpers.perform_all()
|
||||||
|
|
||||||
ret_conn = get(conn, "/api/v1/notifications")
|
conn = get(conn, "/api/v1/notifications")
|
||||||
|
|
||||||
assert json_response(ret_conn, 200) == []
|
|
||||||
|
|
||||||
conn = get(conn, "/api/v1/notifications", %{"with_move" => "true"})
|
|
||||||
|
|
||||||
assert length(json_response(conn, 200)) == 1
|
assert length(json_response(conn, 200)) == 1
|
||||||
end
|
end
|
||||||
|
|
|
@ -133,7 +133,7 @@ test "Move notification" do
|
||||||
old_user = refresh_record(old_user)
|
old_user = refresh_record(old_user)
|
||||||
new_user = refresh_record(new_user)
|
new_user = refresh_record(new_user)
|
||||||
|
|
||||||
[notification] = Notification.for_user(follower, %{with_move: true})
|
[notification] = Notification.for_user(follower)
|
||||||
|
|
||||||
expected = %{
|
expected = %{
|
||||||
id: to_string(notification.id),
|
id: to_string(notification.id),
|
||||||
|
|
Loading…
Reference in New Issue