Merge branch 'release/1.1.4' into 'stable'
Release/1.1.4 - user.info fix plus NOT NULL for user.info See merge request pleroma/pleroma!1927
This commit is contained in:
		
						commit
						21716aa594
					
				
					 9 changed files with 56 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -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/).
 | 
			
		||||
 | 
			
		||||
## [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
 | 
			
		||||
### Fixed
 | 
			
		||||
- Blocked users showing up in notifications collapsed as if they were muted
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -136,7 +136,7 @@ defp should_send?(%User{} = user, %Activity{} = item) do
 | 
			
		|||
    recipients = MapSet.new(item.recipients)
 | 
			
		||||
    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], &(parent.data["actor"] not in &1)),
 | 
			
		||||
         true <- MapSet.disjoint?(recipients, recipient_blocks),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								mix.exs
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								mix.exs
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do
 | 
			
		|||
  def project do
 | 
			
		||||
    [
 | 
			
		||||
      app: :pleroma,
 | 
			
		||||
      version: version("1.1.3"),
 | 
			
		||||
      version: version("1.1.4"),
 | 
			
		||||
      elixir: "~> 1.7",
 | 
			
		||||
      elixirc_paths: elixirc_paths(Mix.env()),
 | 
			
		||||
      compilers: [:phoenix, :gettext] ++ Mix.compilers(),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,10 +8,10 @@ defmodule Pleroma.Repo.Migrations.MigrateOldBookmarks do
 | 
			
		|||
 | 
			
		||||
  def up do
 | 
			
		||||
    query =
 | 
			
		||||
      from(u in User,
 | 
			
		||||
      from(u in "users",
 | 
			
		||||
        where: u.local == true,
 | 
			
		||||
        where: fragment("array_length(bookmarks, 1)") > 0,
 | 
			
		||||
        select: %{id: u.id, bookmarks: fragment("bookmarks")}
 | 
			
		||||
        where: fragment("array_length(?, 1)", u.bookmarks) > 0,
 | 
			
		||||
        select: %{id: u.id, bookmarks: u.bookmarks}
 | 
			
		||||
      )
 | 
			
		||||
 | 
			
		||||
    Repo.stream(query)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
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
 | 
			
		|||
  alias Pleroma.User
 | 
			
		||||
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
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
 | 
			
		|||
      password_hash: Comeonin.Pbkdf2.hashpwsalt("test"),
 | 
			
		||||
      bio: "A tester.",
 | 
			
		||||
      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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -110,6 +110,24 @@ test "it doesn't send notify to the 'user:notification' stream' when a domain is
 | 
			
		|||
      Streamer.stream("user:notification", notif)
 | 
			
		||||
      Task.await(task)
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
  test "it sends to public" do
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue