Split hide_network into hide_followers & hide_followings (fixed) See merge request pleroma/pleroma!765tags/v0.9.9
@@ -30,7 +30,8 @@ defmodule Pleroma.User.Info do | |||||
field(:topic, :string, default: nil) | field(:topic, :string, default: nil) | ||||
field(:hub, :string, default: nil) | field(:hub, :string, default: nil) | ||||
field(:salmon, :string, default: nil) | field(:salmon, :string, default: nil) | ||||
field(:hide_network, :boolean, default: false) | |||||
field(:hide_followers, :boolean, default: false) | |||||
field(:hide_followings, :boolean, default: false) | |||||
field(:pinned_activities, {:array, :string}, default: []) | field(:pinned_activities, {:array, :string}, default: []) | ||||
# Found in the wild | # Found in the wild | ||||
@@ -143,7 +144,8 @@ defmodule Pleroma.User.Info do | |||||
:no_rich_text, | :no_rich_text, | ||||
:default_scope, | :default_scope, | ||||
:banner, | :banner, | ||||
:hide_network, | |||||
:hide_followings, | |||||
:hide_followers, | |||||
:background | :background | ||||
]) | ]) | ||||
end | end | ||||
@@ -86,7 +86,7 @@ defmodule Pleroma.Web.ActivityPub.UserView do | |||||
query = from(user in query, select: [:ap_id]) | query = from(user in query, select: [:ap_id]) | ||||
following = Repo.all(query) | following = Repo.all(query) | ||||
collection(following, "#{user.ap_id}/following", page, !user.info.hide_network) | |||||
collection(following, "#{user.ap_id}/following", page, !user.info.hide_followings) | |||||
|> Map.merge(Utils.make_json_ld_header()) | |> Map.merge(Utils.make_json_ld_header()) | ||||
end | end | ||||
@@ -99,7 +99,7 @@ defmodule Pleroma.Web.ActivityPub.UserView do | |||||
"id" => "#{user.ap_id}/following", | "id" => "#{user.ap_id}/following", | ||||
"type" => "OrderedCollection", | "type" => "OrderedCollection", | ||||
"totalItems" => length(following), | "totalItems" => length(following), | ||||
"first" => collection(following, "#{user.ap_id}/following", 1, !user.info.hide_network) | |||||
"first" => collection(following, "#{user.ap_id}/following", 1, !user.info.hide_followings) | |||||
} | } | ||||
|> Map.merge(Utils.make_json_ld_header()) | |> Map.merge(Utils.make_json_ld_header()) | ||||
end | end | ||||
@@ -109,7 +109,7 @@ defmodule Pleroma.Web.ActivityPub.UserView do | |||||
query = from(user in query, select: [:ap_id]) | query = from(user in query, select: [:ap_id]) | ||||
followers = Repo.all(query) | followers = Repo.all(query) | ||||
collection(followers, "#{user.ap_id}/followers", page, !user.info.hide_network) | |||||
collection(followers, "#{user.ap_id}/followers", page, !user.info.hide_followers) | |||||
|> Map.merge(Utils.make_json_ld_header()) | |> Map.merge(Utils.make_json_ld_header()) | ||||
end | end | ||||
@@ -122,7 +122,7 @@ defmodule Pleroma.Web.ActivityPub.UserView do | |||||
"id" => "#{user.ap_id}/followers", | "id" => "#{user.ap_id}/followers", | ||||
"type" => "OrderedCollection", | "type" => "OrderedCollection", | ||||
"totalItems" => length(followers), | "totalItems" => length(followers), | ||||
"first" => collection(followers, "#{user.ap_id}/followers", 1, !user.info.hide_network) | |||||
"first" => collection(followers, "#{user.ap_id}/followers", 1, !user.info.hide_followers) | |||||
} | } | ||||
|> Map.merge(Utils.make_json_ld_header()) | |> Map.merge(Utils.make_json_ld_header()) | ||||
end | end | ||||
@@ -605,7 +605,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do | |||||
followers = | followers = | ||||
cond do | cond do | ||||
for_user && user.id == for_user.id -> followers | for_user && user.id == for_user.id -> followers | ||||
user.info.hide_network -> [] | |||||
user.info.hide_followers -> [] | |||||
true -> followers | true -> followers | ||||
end | end | ||||
@@ -621,7 +621,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do | |||||
followers = | followers = | ||||
cond do | cond do | ||||
for_user && user.id == for_user.id -> followers | for_user && user.id == for_user.id -> followers | ||||
user.info.hide_network -> [] | |||||
user.info.hide_followings -> [] | |||||
true -> followers | true -> followers | ||||
end | end | ||||
@@ -503,7 +503,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do | |||||
followers = | followers = | ||||
cond do | cond do | ||||
for_user && user.id == for_user.id -> followers | for_user && user.id == for_user.id -> followers | ||||
user.info.hide_network -> [] | |||||
user.info.hide_followers -> [] | |||||
true -> followers | true -> followers | ||||
end | end | ||||
@@ -523,7 +523,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do | |||||
friends = | friends = | ||||
cond do | cond do | ||||
for_user && user.id == for_user.id -> friends | for_user && user.id == for_user.id -> friends | ||||
user.info.hide_network -> [] | |||||
user.info.hide_followings -> [] | |||||
true -> friends | true -> friends | ||||
end | end | ||||
@@ -618,7 +618,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do | |||||
defp build_info_cng(user, params) do | defp build_info_cng(user, params) do | ||||
info_params = | info_params = | ||||
["no_rich_text", "locked", "hide_network"] | |||||
["no_rich_text", "locked", "hide_followers", "hide_followings"] | |||||
|> Enum.reduce(%{}, fn key, res -> | |> Enum.reduce(%{}, fn key, res -> | ||||
if value = params[key] do | if value = params[key] do | ||||
Map.put(res, key, value == "true") | Map.put(res, key, value == "true") | ||||
@@ -108,7 +108,8 @@ defmodule Pleroma.Web.TwitterAPI.UserView do | |||||
"locked" => user.info.locked, | "locked" => user.info.locked, | ||||
"default_scope" => user.info.default_scope, | "default_scope" => user.info.default_scope, | ||||
"no_rich_text" => user.info.no_rich_text, | "no_rich_text" => user.info.no_rich_text, | ||||
"hide_network" => user.info.hide_network, | |||||
"hide_followers" => user.info.hide_followers, | |||||
"hide_followings" => user.info.hide_followings, | |||||
"fields" => fields, | "fields" => fields, | ||||
# Pleroma extension | # Pleroma extension | ||||
@@ -0,0 +1,12 @@ | |||||
defmodule Pleroma.Repo.Migrations.SplitHideNetwork do | |||||
use Ecto.Migration | |||||
def up do | |||||
execute("UPDATE users SET info = jsonb_set(info, '{hide_network}'::text[], 'false'::jsonb) WHERE NOT(info::jsonb ? 'hide_network')") | |||||
execute("UPDATE users SET info = jsonb_set(info, '{hide_followings}'::text[], info->'hide_network')") | |||||
execute("UPDATE users SET info = jsonb_set(info, '{hide_followers}'::text[], info->'hide_network')") | |||||
end | |||||
def down do | |||||
end | |||||
end |
@@ -386,9 +386,9 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do | |||||
assert result["first"]["orderedItems"] == [user.ap_id] | assert result["first"]["orderedItems"] == [user.ap_id] | ||||
end | end | ||||
test "it returns returns empty if the user has 'hide_network' set", %{conn: conn} do | |||||
test "it returns returns empty if the user has 'hide_followers' set", %{conn: conn} do | |||||
user = insert(:user) | user = insert(:user) | ||||
user_two = insert(:user, %{info: %{hide_network: true}}) | |||||
user_two = insert(:user, %{info: %{hide_followers: true}}) | |||||
User.follow(user, user_two) | User.follow(user, user_two) | ||||
result = | result = | ||||
@@ -441,8 +441,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do | |||||
assert result["first"]["orderedItems"] == [user_two.ap_id] | assert result["first"]["orderedItems"] == [user_two.ap_id] | ||||
end | end | ||||
test "it returns returns empty if the user has 'hide_network' set", %{conn: conn} do | |||||
user = insert(:user, %{info: %{hide_network: true}}) | |||||
test "it returns returns empty if the user has 'hide_followings' set", %{conn: conn} do | |||||
user = insert(:user, %{info: %{hide_followings: true}}) | |||||
user_two = insert(:user) | user_two = insert(:user) | ||||
User.follow(user, user_two) | User.follow(user, user_two) | ||||
@@ -1101,9 +1101,9 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do | |||||
assert id == to_string(user.id) | assert id == to_string(user.id) | ||||
end | end | ||||
test "getting followers, hide_network", %{conn: conn} do | |||||
test "getting followers, hide_followers", %{conn: conn} do | |||||
user = insert(:user) | user = insert(:user) | ||||
other_user = insert(:user, %{info: %{hide_network: true}}) | |||||
other_user = insert(:user, %{info: %{hide_followers: true}}) | |||||
{:ok, _user} = User.follow(user, other_user) | {:ok, _user} = User.follow(user, other_user) | ||||
conn = | conn = | ||||
@@ -1113,9 +1113,9 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do | |||||
assert [] == json_response(conn, 200) | assert [] == json_response(conn, 200) | ||||
end | end | ||||
test "getting followers, hide_network, same user requesting", %{conn: conn} do | |||||
test "getting followers, hide_followers, same user requesting", %{conn: conn} do | |||||
user = insert(:user) | user = insert(:user) | ||||
other_user = insert(:user, %{info: %{hide_network: true}}) | |||||
other_user = insert(:user, %{info: %{hide_followers: true}}) | |||||
{:ok, _user} = User.follow(user, other_user) | {:ok, _user} = User.follow(user, other_user) | ||||
conn = | conn = | ||||
@@ -1139,8 +1139,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do | |||||
assert id == to_string(other_user.id) | assert id == to_string(other_user.id) | ||||
end | end | ||||
test "getting following, hide_network", %{conn: conn} do | |||||
user = insert(:user, %{info: %{hide_network: true}}) | |||||
test "getting following, hide_followings", %{conn: conn} do | |||||
user = insert(:user, %{info: %{hide_followings: true}}) | |||||
other_user = insert(:user) | other_user = insert(:user) | ||||
{:ok, user} = User.follow(user, other_user) | {:ok, user} = User.follow(user, other_user) | ||||
@@ -1151,8 +1151,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do | |||||
assert [] == json_response(conn, 200) | assert [] == json_response(conn, 200) | ||||
end | end | ||||
test "getting following, hide_network, same user requesting", %{conn: conn} do | |||||
user = insert(:user, %{info: %{hide_network: true}}) | |||||
test "getting following, hide_followings, same user requesting", %{conn: conn} do | |||||
user = insert(:user, %{info: %{hide_followings: true}}) | |||||
other_user = insert(:user) | other_user = insert(:user) | ||||
{:ok, user} = User.follow(user, other_user) | {:ok, user} = User.follow(user, other_user) | ||||
@@ -1132,8 +1132,8 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do | |||||
) | ) | ||||
end | end | ||||
test "it returns empty for a hidden network", %{conn: conn} do | |||||
user = insert(:user, %{info: %{hide_network: true}}) | |||||
test "it returns empty when hide_followers is set to true", %{conn: conn} do | |||||
user = insert(:user, %{info: %{hide_followers: true}}) | |||||
follower_one = insert(:user) | follower_one = insert(:user) | ||||
follower_two = insert(:user) | follower_two = insert(:user) | ||||
not_follower = insert(:user) | not_follower = insert(:user) | ||||
@@ -1150,10 +1150,11 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do | |||||
assert [] == response | assert [] == response | ||||
end | end | ||||
test "it returns the followers for a hidden network if requested by the user themselves", %{ | |||||
conn: conn | |||||
} do | |||||
user = insert(:user, %{info: %{hide_network: true}}) | |||||
test "it returns the followers when hide_followers is set to true if requested by the user themselves", | |||||
%{ | |||||
conn: conn | |||||
} do | |||||
user = insert(:user, %{info: %{hide_followers: true}}) | |||||
follower_one = insert(:user) | follower_one = insert(:user) | ||||
follower_two = insert(:user) | follower_two = insert(:user) | ||||
_not_follower = insert(:user) | _not_follower = insert(:user) | ||||
@@ -1256,8 +1257,8 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do | |||||
) | ) | ||||
end | end | ||||
test "it returns empty for a hidden network", %{conn: conn} do | |||||
user = insert(:user, %{info: %{hide_network: true}}) | |||||
test "it returns empty when hide_followings is set to true", %{conn: conn} do | |||||
user = insert(:user, %{info: %{hide_followings: true}}) | |||||
followed_one = insert(:user) | followed_one = insert(:user) | ||||
followed_two = insert(:user) | followed_two = insert(:user) | ||||
not_followed = insert(:user) | not_followed = insert(:user) | ||||
@@ -1273,10 +1274,11 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do | |||||
assert [] == json_response(conn, 200) | assert [] == json_response(conn, 200) | ||||
end | end | ||||
test "it returns friends for a hidden network if the user themselves request it", %{ | |||||
conn: conn | |||||
} do | |||||
user = insert(:user, %{info: %{hide_network: true}}) | |||||
test "it returns friends when hide_followings is set to true if the user themselves request it", | |||||
%{ | |||||
conn: conn | |||||
} do | |||||
user = insert(:user, %{info: %{hide_followings: true}}) | |||||
followed_one = insert(:user) | followed_one = insert(:user) | ||||
followed_two = insert(:user) | followed_two = insert(:user) | ||||
_not_followed = insert(:user) | _not_followed = insert(:user) | ||||
@@ -1364,27 +1366,51 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do | |||||
assert json_response(conn, 200) == UserView.render("user.json", %{user: user, for: user}) | assert json_response(conn, 200) == UserView.render("user.json", %{user: user, for: user}) | ||||
end | end | ||||
test "it sets and un-sets hide_network", %{conn: conn} do | |||||
test "it sets and un-sets hide_followings", %{conn: conn} do | |||||
user = insert(:user) | |||||
conn | |||||
|> assign(:user, user) | |||||
|> post("/api/account/update_profile.json", %{ | |||||
"hide_followings" => "true" | |||||
}) | |||||
user = Repo.get!(User, user.id) | |||||
assert user.info.hide_followings == true | |||||
conn = | |||||
conn | |||||
|> assign(:user, user) | |||||
|> post("/api/account/update_profile.json", %{ | |||||
"hide_followings" => "false" | |||||
}) | |||||
user = Repo.get!(User, user.id) | |||||
assert user.info.hide_followings == false | |||||
assert json_response(conn, 200) == UserView.render("user.json", %{user: user, for: user}) | |||||
end | |||||
test "it sets and un-sets hide_followers", %{conn: conn} do | |||||
user = insert(:user) | user = insert(:user) | ||||
conn | conn | ||||
|> assign(:user, user) | |> assign(:user, user) | ||||
|> post("/api/account/update_profile.json", %{ | |> post("/api/account/update_profile.json", %{ | ||||
"hide_network" => "true" | |||||
"hide_followers" => "true" | |||||
}) | }) | ||||
user = Repo.get!(User, user.id) | user = Repo.get!(User, user.id) | ||||
assert user.info.hide_network == true | |||||
assert user.info.hide_followers == true | |||||
conn = | conn = | ||||
conn | conn | ||||
|> assign(:user, user) | |> assign(:user, user) | ||||
|> post("/api/account/update_profile.json", %{ | |> post("/api/account/update_profile.json", %{ | ||||
"hide_network" => "false" | |||||
"hide_followers" => "false" | |||||
}) | }) | ||||
user = Repo.get!(User, user.id) | user = Repo.get!(User, user.id) | ||||
assert user.info.hide_network == false | |||||
assert user.info.hide_followers == false | |||||
assert json_response(conn, 200) == UserView.render("user.json", %{user: user, for: user}) | assert json_response(conn, 200) == UserView.render("user.json", %{user: user, for: user}) | ||||
end | end | ||||
@@ -100,7 +100,8 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do | |||||
"locked" => false, | "locked" => false, | ||||
"default_scope" => "public", | "default_scope" => "public", | ||||
"no_rich_text" => false, | "no_rich_text" => false, | ||||
"hide_network" => false, | |||||
"hide_followings" => false, | |||||
"hide_followers" => false, | |||||
"fields" => [], | "fields" => [], | ||||
"pleroma" => %{ | "pleroma" => %{ | ||||
"confirmation_pending" => false, | "confirmation_pending" => false, | ||||
@@ -147,7 +148,8 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do | |||||
"locked" => false, | "locked" => false, | ||||
"default_scope" => "public", | "default_scope" => "public", | ||||
"no_rich_text" => false, | "no_rich_text" => false, | ||||
"hide_network" => false, | |||||
"hide_followings" => false, | |||||
"hide_followers" => false, | |||||
"fields" => [], | "fields" => [], | ||||
"pleroma" => %{ | "pleroma" => %{ | ||||
"confirmation_pending" => false, | "confirmation_pending" => false, | ||||
@@ -195,7 +197,8 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do | |||||
"locked" => false, | "locked" => false, | ||||
"default_scope" => "public", | "default_scope" => "public", | ||||
"no_rich_text" => false, | "no_rich_text" => false, | ||||
"hide_network" => false, | |||||
"hide_followings" => false, | |||||
"hide_followers" => false, | |||||
"fields" => [], | "fields" => [], | ||||
"pleroma" => %{ | "pleroma" => %{ | ||||
"confirmation_pending" => false, | "confirmation_pending" => false, | ||||
@@ -257,7 +260,8 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do | |||||
"locked" => false, | "locked" => false, | ||||
"default_scope" => "public", | "default_scope" => "public", | ||||
"no_rich_text" => false, | "no_rich_text" => false, | ||||
"hide_network" => false, | |||||
"hide_followings" => false, | |||||
"hide_followers" => false, | |||||
"fields" => [], | "fields" => [], | ||||
"pleroma" => %{ | "pleroma" => %{ | ||||
"confirmation_pending" => false, | "confirmation_pending" => false, | ||||