Commit 21716aa5 authored by lain's avatar lain

Merge branch 'release/1.1.4' into 'stable'

Release/1.1.4 - user.info fix plus NOT NULL for user.info

See merge request !1927
parents a43b899e b7de4ad0
...@@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. ...@@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [1.1.4] - 2019-11-01
### Fixed
- Added a migration that fills up empty user.info fields to prevent breakage after previous unsafe migrations.
- Failure to migrate from pre-1.0.0 versions
- Mastodon API: Notification stream not including follow notifications
## [1.1.3] - 2019-10-25 ## [1.1.3] - 2019-10-25
### Fixed ### Fixed
- Blocked users showing up in notifications collapsed as if they were muted - Blocked users showing up in notifications collapsed as if they were muted
......
...@@ -136,7 +136,7 @@ defp should_send?(%User{} = user, %Activity{} = item) do ...@@ -136,7 +136,7 @@ defp should_send?(%User{} = user, %Activity{} = item) do
recipients = MapSet.new(item.recipients) recipients = MapSet.new(item.recipients)
domain_blocks = Pleroma.Web.ActivityPub.MRF.subdomains_regex(user.info.domain_blocks) domain_blocks = Pleroma.Web.ActivityPub.MRF.subdomains_regex(user.info.domain_blocks)
with parent when not is_nil(parent) <- Object.normalize(item), with parent <- Object.normalize(item) || item,
true <- Enum.all?([blocks, mutes, reblog_mutes], &(item.actor not in &1)), true <- Enum.all?([blocks, mutes, reblog_mutes], &(item.actor not in &1)),
true <- Enum.all?([blocks, mutes], &(parent.data["actor"] not in &1)), true <- Enum.all?([blocks, mutes], &(parent.data["actor"] not in &1)),
true <- MapSet.disjoint?(recipients, recipient_blocks), true <- MapSet.disjoint?(recipients, recipient_blocks),
......
...@@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do ...@@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do
def project do def project do
[ [
app: :pleroma, app: :pleroma,
version: version("1.1.3"), version: version("1.1.4"),
elixir: "~> 1.7", elixir: "~> 1.7",
elixirc_paths: elixirc_paths(Mix.env()), elixirc_paths: elixirc_paths(Mix.env()),
compilers: [:phoenix, :gettext] ++ Mix.compilers(), compilers: [:phoenix, :gettext] ++ Mix.compilers(),
......
...@@ -8,10 +8,10 @@ defmodule Pleroma.Repo.Migrations.MigrateOldBookmarks do ...@@ -8,10 +8,10 @@ defmodule Pleroma.Repo.Migrations.MigrateOldBookmarks do
def up do def up do
query = query =
from(u in User, from(u in "users",
where: u.local == true, where: u.local == true,
where: fragment("array_length(bookmarks, 1)") > 0, where: fragment("array_length(?, 1)", u.bookmarks) > 0,
select: %{id: u.id, bookmarks: fragment("bookmarks")} select: %{id: u.id, bookmarks: u.bookmarks}
) )
Repo.stream(query) Repo.stream(query)
......
defmodule Pleroma.Repo.Migrations.FixAndSecureUserInfoField do
use Ecto.Migration
def up do
execute("UPDATE users SET info = '{}'::jsonb WHERE info IS NULL")
execute("ALTER TABLE users
ALTER COLUMN info SET NOT NULL
")
end
def down do
execute("ALTER TABLE users
ALTER COLUMN info DROP NOT NULL
")
end
end
...@@ -3,6 +3,6 @@ defmodule Pleroma.Repo.Migrations.CopyMutedToMutedNotifications do ...@@ -3,6 +3,6 @@ defmodule Pleroma.Repo.Migrations.CopyMutedToMutedNotifications do
alias Pleroma.User alias Pleroma.User
def change do def change do
execute("update users set info = safe_jsonb_set(info, '{muted_notifications}', info->'mutes', true) where local = true") execute("update users set info = safe_jsonb_set(info, '{muted_notifications}', info->'mutes', true) where local = true and info->'mutes' is not null")
end end
end end
defmodule Pleroma.Repo.Migrations.FixNullMutedNotificationFields do
use Ecto.Migration
def change do
execute("update users set info = safe_jsonb_set(info, '{muted_notifications}', '[]'::jsonb, true) where local = true and info->'muted_notifications' = 'null'::jsonb")
end
end
...@@ -10,7 +10,8 @@ def build(data \\ %{}) do ...@@ -10,7 +10,8 @@ def build(data \\ %{}) do
password_hash: Comeonin.Pbkdf2.hashpwsalt("test"), password_hash: Comeonin.Pbkdf2.hashpwsalt("test"),
bio: "A tester.", bio: "A tester.",
ap_id: "some id", ap_id: "some id",
last_digest_emailed_at: NaiveDateTime.truncate(NaiveDateTime.utc_now(), :second) last_digest_emailed_at: NaiveDateTime.truncate(NaiveDateTime.utc_now(), :second),
info: %{}
} }
Map.merge(user, data) Map.merge(user, data)
......
...@@ -110,6 +110,24 @@ test "it doesn't send notify to the 'user:notification' stream' when a domain is ...@@ -110,6 +110,24 @@ test "it doesn't send notify to the 'user:notification' stream' when a domain is
Streamer.stream("user:notification", notif) Streamer.stream("user:notification", notif)
Task.await(task) Task.await(task)
end end
test "it sends follow activities to the 'user:notification' stream", %{
user: user
} do
user2 = insert(:user)
task = Task.async(fn -> assert_receive {:text, _}, 4_000 end)
Streamer.add_socket(
"user:notification",
%{transport_pid: task.pid, assigns: %{user: user}}
)
{:ok, _follower, _followed, _activity} = CommonAPI.follow(user2, user)
# We don't directly pipe the notification to the streamer as it's already
# generated as a side effect of CommonAPI.follow().
Task.await(task)
end
end end
test "it sends to public" do test "it sends to public" do
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment