forked from AkkomaGang/akkoma
Merge branch 'omit-nondiscoverable-from-search' into 'develop'
User search should respect discoverable flag See merge request pleroma/pleroma!2997
This commit is contained in:
commit
beefc022dd
9 changed files with 56 additions and 24 deletions
|
@ -10,8 +10,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
- Renamed `:await_up_timeout` in `:connections_pool` namespace to `:connect_timeout`, old name is deprecated.
|
- Renamed `:await_up_timeout` in `:connections_pool` namespace to `:connect_timeout`, old name is deprecated.
|
||||||
- Renamed `:timeout` in `pools` namespace to `:recv_timeout`, old name is deprecated.
|
- Renamed `:timeout` in `pools` namespace to `:recv_timeout`, old name is deprecated.
|
||||||
- The `discoverable` field in the `User` struct will now add a NOINDEX metatag to profile pages when false.
|
- The `discoverable` field in the `User` struct will now add a NOINDEX metatag to profile pages when false.
|
||||||
|
- Users with the `discoverable` field set to false will not show up in searches.
|
||||||
- Minimum lifetime for ephmeral activities changed to 10 minutes and made configurable (`:min_lifetime` option).
|
- Minimum lifetime for ephmeral activities changed to 10 minutes and made configurable (`:min_lifetime` option).
|
||||||
|
|
||||||
### Removed
|
### Removed
|
||||||
|
|
||||||
- **Breaking:** `Pleroma.Workers.Cron.StatsWorker` setting from Oban `:crontab` (moved to a simpler implementation).
|
- **Breaking:** `Pleroma.Workers.Cron.StatsWorker` setting from Oban `:crontab` (moved to a simpler implementation).
|
||||||
|
|
|
@ -52,6 +52,7 @@ defp search_query(query_string, for_user, following) do
|
||||||
|> base_query(following)
|
|> base_query(following)
|
||||||
|> filter_blocked_user(for_user)
|
|> filter_blocked_user(for_user)
|
||||||
|> filter_invisible_users()
|
|> filter_invisible_users()
|
||||||
|
|> filter_discoverable_users()
|
||||||
|> filter_internal_users()
|
|> filter_internal_users()
|
||||||
|> filter_blocked_domains(for_user)
|
|> filter_blocked_domains(for_user)
|
||||||
|> fts_search(query_string)
|
|> fts_search(query_string)
|
||||||
|
@ -122,6 +123,10 @@ defp filter_invisible_users(query) do
|
||||||
from(q in query, where: q.invisible == false)
|
from(q in query, where: q.invisible == false)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp filter_discoverable_users(query) do
|
||||||
|
from(q in query, where: q.discoverable == true)
|
||||||
|
end
|
||||||
|
|
||||||
defp filter_internal_users(query) do
|
defp filter_internal_users(query) do
|
||||||
from(q in query, where: q.actor_type != "Application")
|
from(q in query, where: q.actor_type != "Application")
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,20 +1,24 @@
|
||||||
{
|
{
|
||||||
"@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1", {
|
"@context": [
|
||||||
"manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
|
"https://www.w3.org/ns/activitystreams",
|
||||||
"sensitive": "as:sensitive",
|
"https://w3id.org/security/v1",
|
||||||
"movedTo": "as:movedTo",
|
{
|
||||||
"Hashtag": "as:Hashtag",
|
"manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
|
||||||
"ostatus": "http://ostatus.org#",
|
"sensitive": "as:sensitive",
|
||||||
"atomUri": "ostatus:atomUri",
|
"movedTo": "as:movedTo",
|
||||||
"inReplyToAtomUri": "ostatus:inReplyToAtomUri",
|
"Hashtag": "as:Hashtag",
|
||||||
"conversation": "ostatus:conversation",
|
"ostatus": "http://ostatus.org#",
|
||||||
"toot": "http://joinmastodon.org/ns#",
|
"atomUri": "ostatus:atomUri",
|
||||||
"Emoji": "toot:Emoji",
|
"inReplyToAtomUri": "ostatus:inReplyToAtomUri",
|
||||||
"alsoKnownAs": {
|
"conversation": "ostatus:conversation",
|
||||||
"@id": "as:alsoKnownAs",
|
"toot": "http://joinmastodon.org/ns#",
|
||||||
"@type": "@id"
|
"Emoji": "toot:Emoji",
|
||||||
|
"alsoKnownAs": {
|
||||||
|
"@id": "as:alsoKnownAs",
|
||||||
|
"@type": "@id"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}],
|
],
|
||||||
"id": "http://mastodon.example.org/users/admin",
|
"id": "http://mastodon.example.org/users/admin",
|
||||||
"type": "Person",
|
"type": "Person",
|
||||||
"following": "http://mastodon.example.org/users/admin/following",
|
"following": "http://mastodon.example.org/users/admin/following",
|
||||||
|
@ -23,6 +27,7 @@
|
||||||
"outbox": "http://mastodon.example.org/users/admin/outbox",
|
"outbox": "http://mastodon.example.org/users/admin/outbox",
|
||||||
"preferredUsername": "admin",
|
"preferredUsername": "admin",
|
||||||
"name": null,
|
"name": null,
|
||||||
|
"discoverable": "true",
|
||||||
"summary": "\u003cp\u003e\u003c/p\u003e",
|
"summary": "\u003cp\u003e\u003c/p\u003e",
|
||||||
"url": "http://mastodon.example.org/@admin",
|
"url": "http://mastodon.example.org/@admin",
|
||||||
"manuallyApprovesFollowers": false,
|
"manuallyApprovesFollowers": false,
|
||||||
|
@ -34,7 +39,8 @@
|
||||||
"owner": "http://mastodon.example.org/users/admin",
|
"owner": "http://mastodon.example.org/users/admin",
|
||||||
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtc4Tir+3ADhSNF6VKrtW\nOU32T01w7V0yshmQei38YyiVwVvFu8XOP6ACchkdxbJ+C9mZud8qWaRJKVbFTMUG\nNX4+6Q+FobyuKrwN7CEwhDALZtaN2IPbaPd6uG1B7QhWorrY+yFa8f2TBM3BxnUy\nI4T+bMIZIEYG7KtljCBoQXuTQmGtuffO0UwJksidg2ffCF5Q+K//JfQagJ3UzrR+\nZXbKMJdAw4bCVJYs4Z5EhHYBwQWiXCyMGTd7BGlmMkY6Av7ZqHKC/owp3/0EWDNz\nNqF09Wcpr3y3e8nA10X40MJqp/wR+1xtxp+YGbq/Cj5hZGBG7etFOmIpVBrDOhry\nBwIDAQAB\n-----END PUBLIC KEY-----\n"
|
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtc4Tir+3ADhSNF6VKrtW\nOU32T01w7V0yshmQei38YyiVwVvFu8XOP6ACchkdxbJ+C9mZud8qWaRJKVbFTMUG\nNX4+6Q+FobyuKrwN7CEwhDALZtaN2IPbaPd6uG1B7QhWorrY+yFa8f2TBM3BxnUy\nI4T+bMIZIEYG7KtljCBoQXuTQmGtuffO0UwJksidg2ffCF5Q+K//JfQagJ3UzrR+\nZXbKMJdAw4bCVJYs4Z5EhHYBwQWiXCyMGTd7BGlmMkY6Av7ZqHKC/owp3/0EWDNz\nNqF09Wcpr3y3e8nA10X40MJqp/wR+1xtxp+YGbq/Cj5hZGBG7etFOmIpVBrDOhry\nBwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||||
},
|
},
|
||||||
"attachment": [{
|
"attachment": [
|
||||||
|
{
|
||||||
"type": "PropertyValue",
|
"type": "PropertyValue",
|
||||||
"name": "foo",
|
"name": "foo",
|
||||||
"value": "bar"
|
"value": "bar"
|
||||||
|
@ -58,5 +64,7 @@
|
||||||
"mediaType": "image/png",
|
"mediaType": "image/png",
|
||||||
"url": "https://cdn.niu.moe/accounts/headers/000/033/323/original/850b3448fa5fd477.png"
|
"url": "https://cdn.niu.moe/accounts/headers/000/033/323/original/850b3448fa5fd477.png"
|
||||||
},
|
},
|
||||||
"alsoKnownAs": ["http://example.org/users/foo"]
|
"alsoKnownAs": [
|
||||||
}
|
"http://example.org/users/foo"
|
||||||
|
]
|
||||||
|
}
|
|
@ -8,6 +8,7 @@
|
||||||
"preferredUsername": "mike",
|
"preferredUsername": "mike",
|
||||||
"name": "Mike Macgirvin (Osada)",
|
"name": "Mike Macgirvin (Osada)",
|
||||||
"updated": "2018-08-29T03:09:11Z",
|
"updated": "2018-08-29T03:09:11Z",
|
||||||
|
"discoverable": "true",
|
||||||
"icon": {
|
"icon": {
|
||||||
"type": "Image",
|
"type": "Image",
|
||||||
"mediaType": "image/jpeg",
|
"mediaType": "image/jpeg",
|
||||||
|
@ -51,4 +52,4 @@
|
||||||
"created": "2018-10-17T07:16:28Z",
|
"created": "2018-10-17T07:16:28Z",
|
||||||
"signatureValue": "WbfFVIPImkd3yNu6brz0CvZaeV242rwAbH0vy8DM4vfnXCxLr5Uv/Wj9gwP+tbooTxGaahAKBeqlGkQp8RLEo37LATrKMRLA/0V6DeeV+C5ORWR9B4WxyWiD3s/9Wf+KesFMtktNLAcMZ5PfnOS/xNYerhnpkp/gWPxtkglmLIWJv+w18A5zZ01JCxsO4QljHbhYaEUPHUfQ97abrkLECeam+FThVwdO6BFCtbjoNXHfzjpSZL/oKyBpi5/fpnqMqOLOQPs5WgBBZJvjEYYkQcoPTyxYI5NGpNbzIjGHPQNuACnOelH16A7L+q4swLWDIaEFeXQ2/5bmqVKZDZZ6usNP4QyTVszwd8jqo27qcDTNibXDUTsTdKpNQvM/3UncBuzuzmUV3FczhtGshIU1/pRVZiQycpVqPlGLvXhP/yZCe+1siyqDd+3uMaS2vkHTObSl5r+VYof+c+TcjrZXHSWnQTg8/X3zkoBWosrQ93VZcwjzMxQoARYv6rphbOoTz7RPmGAXYUt3/PDWkqDlmQDwCpLNNkJo1EidyefZBdD9HXQpCBO0ZU0NHb0JmPvg/+zU0krxlv70bm3RHA/maBETVjroIWzt7EwQEg5pL2hVnvSBG+1wF3BtRVe77etkPOHxLnYYIcAMLlVKCcgDd89DPIziQyruvkx1busHI08="
|
"signatureValue": "WbfFVIPImkd3yNu6brz0CvZaeV242rwAbH0vy8DM4vfnXCxLr5Uv/Wj9gwP+tbooTxGaahAKBeqlGkQp8RLEo37LATrKMRLA/0V6DeeV+C5ORWR9B4WxyWiD3s/9Wf+KesFMtktNLAcMZ5PfnOS/xNYerhnpkp/gWPxtkglmLIWJv+w18A5zZ01JCxsO4QljHbhYaEUPHUfQ97abrkLECeam+FThVwdO6BFCtbjoNXHfzjpSZL/oKyBpi5/fpnqMqOLOQPs5WgBBZJvjEYYkQcoPTyxYI5NGpNbzIjGHPQNuACnOelH16A7L+q4swLWDIaEFeXQ2/5bmqVKZDZZ6usNP4QyTVszwd8jqo27qcDTNibXDUTsTdKpNQvM/3UncBuzuzmUV3FczhtGshIU1/pRVZiQycpVqPlGLvXhP/yZCe+1siyqDd+3uMaS2vkHTObSl5r+VYof+c+TcjrZXHSWnQTg8/X3zkoBWosrQ93VZcwjzMxQoARYv6rphbOoTz7RPmGAXYUt3/PDWkqDlmQDwCpLNNkJo1EidyefZBdD9HXQpCBO0ZU0NHb0JmPvg/+zU0krxlv70bm3RHA/maBETVjroIWzt7EwQEg5pL2hVnvSBG+1wF3BtRVe77etkPOHxLnYYIcAMLlVKCcgDd89DPIziQyruvkx1busHI08="
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -31,6 +31,7 @@ def user_factory do
|
||||||
nickname: sequence(:nickname, &"nick#{&1}"),
|
nickname: sequence(:nickname, &"nick#{&1}"),
|
||||||
password_hash: Pbkdf2.hash_pwd_salt("test"),
|
password_hash: Pbkdf2.hash_pwd_salt("test"),
|
||||||
bio: sequence(:bio, &"Tester Number #{&1}"),
|
bio: sequence(:bio, &"Tester Number #{&1}"),
|
||||||
|
discoverable: true,
|
||||||
last_digest_emailed_at: NaiveDateTime.utc_now(),
|
last_digest_emailed_at: NaiveDateTime.utc_now(),
|
||||||
last_refreshed_at: NaiveDateTime.utc_now(),
|
last_refreshed_at: NaiveDateTime.utc_now(),
|
||||||
notification_settings: %Pleroma.User.NotificationSetting{},
|
notification_settings: %Pleroma.User.NotificationSetting{},
|
||||||
|
|
|
@ -25,6 +25,14 @@ test "excludes invisible users from results" do
|
||||||
assert found_user.id == user.id
|
assert found_user.id == user.id
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "excludes users when discoverable is false" do
|
||||||
|
insert(:user, %{nickname: "john 3000", discoverable: false})
|
||||||
|
insert(:user, %{nickname: "john 3001"})
|
||||||
|
|
||||||
|
users = User.search("john")
|
||||||
|
assert Enum.count(users) == 1
|
||||||
|
end
|
||||||
|
|
||||||
test "excludes service actors from results" do
|
test "excludes service actors from results" do
|
||||||
insert(:user, actor_type: "Application", nickname: "user1")
|
insert(:user, actor_type: "Application", nickname: "user1")
|
||||||
service = insert(:user, actor_type: "Service", nickname: "user2")
|
service = insert(:user, actor_type: "Service", nickname: "user2")
|
||||||
|
|
|
@ -177,5 +177,14 @@ test "it returns unapproved user" do
|
||||||
assert total == 3
|
assert total == 3
|
||||||
assert count == 1
|
assert count == 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "it returns non-discoverable users" do
|
||||||
|
insert(:user)
|
||||||
|
insert(:user, discoverable: false)
|
||||||
|
|
||||||
|
{:ok, _results, total} = Search.user()
|
||||||
|
|
||||||
|
assert total == 2
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -68,7 +68,7 @@ test "Represent a user account" do
|
||||||
sensitive: false,
|
sensitive: false,
|
||||||
pleroma: %{
|
pleroma: %{
|
||||||
actor_type: "Person",
|
actor_type: "Person",
|
||||||
discoverable: false
|
discoverable: true
|
||||||
},
|
},
|
||||||
fields: []
|
fields: []
|
||||||
},
|
},
|
||||||
|
@ -166,7 +166,7 @@ test "Represent a Service(bot) account" do
|
||||||
sensitive: false,
|
sensitive: false,
|
||||||
pleroma: %{
|
pleroma: %{
|
||||||
actor_type: "Service",
|
actor_type: "Service",
|
||||||
discoverable: false
|
discoverable: true
|
||||||
},
|
},
|
||||||
fields: []
|
fields: []
|
||||||
},
|
},
|
||||||
|
|
|
@ -16,7 +16,7 @@ test "for remote user" do
|
||||||
end
|
end
|
||||||
|
|
||||||
test "for local user" do
|
test "for local user" do
|
||||||
user = insert(:user)
|
user = insert(:user, discoverable: false)
|
||||||
|
|
||||||
assert Pleroma.Web.Metadata.build_tags(%{user: user}) =~
|
assert Pleroma.Web.Metadata.build_tags(%{user: user}) =~
|
||||||
"<meta content=\"noindex, noarchive\" name=\"robots\">"
|
"<meta content=\"noindex, noarchive\" name=\"robots\">"
|
||||||
|
@ -40,7 +40,7 @@ test "for local user set to discoverable" do
|
||||||
|
|
||||||
test "search exclusion metadata is included" do
|
test "search exclusion metadata is included" do
|
||||||
clear_config([:instance, :public], false)
|
clear_config([:instance, :public], false)
|
||||||
user = insert(:user, bio: "This is my secret fedi account bio")
|
user = insert(:user, bio: "This is my secret fedi account bio", discoverable: false)
|
||||||
|
|
||||||
assert ~s(<meta content="noindex, noarchive" name="robots">) ==
|
assert ~s(<meta content="noindex, noarchive" name="robots">) ==
|
||||||
Pleroma.Web.Metadata.build_tags(%{user: user})
|
Pleroma.Web.Metadata.build_tags(%{user: user})
|
||||||
|
|
Loading…
Reference in a new issue