Allow dashes in domain name search
This commit is contained in:
parent
8e5a88edf7
commit
b058df3faa
|
@ -62,6 +62,11 @@ defp maybe_add_uri_match(list, query) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def sanitise_domain(domain) do
|
||||||
|
domain
|
||||||
|
|> String.replace(~r/[!-\,|@|?|<|>|[-`|{-~|\/|:|\s]+/, "")
|
||||||
|
end
|
||||||
|
|
||||||
defp format_query(query_string) do
|
defp format_query(query_string) do
|
||||||
# Strip the beginning @ off if there is a query
|
# Strip the beginning @ off if there is a query
|
||||||
query_string = String.trim_leading(query_string, "@")
|
query_string = String.trim_leading(query_string, "@")
|
||||||
|
@ -69,7 +74,7 @@ defp format_query(query_string) do
|
||||||
with [name, domain] <- String.split(query_string, "@") do
|
with [name, domain] <- String.split(query_string, "@") do
|
||||||
encoded_domain =
|
encoded_domain =
|
||||||
domain
|
domain
|
||||||
|> String.replace(~r/[!-\-|@|[-`|{-~|\/|:|\s]+/, "")
|
|> sanitise_domain()
|
||||||
|> String.to_charlist()
|
|> String.to_charlist()
|
||||||
|> :idna.encode()
|
|> :idna.encode()
|
||||||
|> to_string()
|
|> to_string()
|
||||||
|
|
22
test/pleroma/user/user_search_test.exs
Normal file
22
test/pleroma/user/user_search_test.exs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
defmodule Pleroma.User.SearchTest do
|
||||||
|
use Pleroma.DataCase
|
||||||
|
|
||||||
|
describe "sanitise_domain/1" do
|
||||||
|
test "should remove url-reserved characters" do
|
||||||
|
examples = [
|
||||||
|
["example.com", "example.com"],
|
||||||
|
["no spaces", "nospaces"],
|
||||||
|
["no@at", "noat"],
|
||||||
|
["dash-is-ok", "dash-is-ok"],
|
||||||
|
["underscore_not_so_much", "underscorenotsomuch"],
|
||||||
|
["no!", "no"],
|
||||||
|
["no?", "no"],
|
||||||
|
["a$b%s^o*l(u)t'e#l<y n>o/t", "absolutelynot"]
|
||||||
|
]
|
||||||
|
|
||||||
|
for [input, expected] <- examples do
|
||||||
|
assert Pleroma.User.Search.sanitise_domain(input) == expected
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -725,13 +725,19 @@ test "it should return public activities that reference a given hashtag" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
other_user = insert(:user)
|
other_user = insert(:user)
|
||||||
|
|
||||||
{:ok, normally_visible} = CommonAPI.post(other_user, %{status: "hello :)", visibility: "public"})
|
{:ok, normally_visible} =
|
||||||
|
CommonAPI.post(other_user, %{status: "hello :)", visibility: "public"})
|
||||||
|
|
||||||
{:ok, public} = CommonAPI.post(user, %{status: "maji #tenshi", visibility: "public"})
|
{:ok, public} = CommonAPI.post(user, %{status: "maji #tenshi", visibility: "public"})
|
||||||
{:ok, _unrelated} = CommonAPI.post(user, %{status: "dai #tensh", visibility: "public"})
|
{:ok, _unrelated} = CommonAPI.post(user, %{status: "dai #tensh", visibility: "public"})
|
||||||
{:ok, unlisted} = CommonAPI.post(user, %{status: "maji #tenshi", visibility: "unlisted"})
|
{:ok, unlisted} = CommonAPI.post(user, %{status: "maji #tenshi", visibility: "unlisted"})
|
||||||
{:ok, _private} = CommonAPI.post(user, %{status: "maji #tenshi", visibility: "private"})
|
{:ok, _private} = CommonAPI.post(user, %{status: "maji #tenshi", visibility: "private"})
|
||||||
|
|
||||||
activities = ActivityPub.fetch_activities([other_user.follower_address], %{followed_hashtags: [hashtag.id]})
|
activities =
|
||||||
|
ActivityPub.fetch_activities([other_user.follower_address], %{
|
||||||
|
followed_hashtags: [hashtag.id]
|
||||||
|
})
|
||||||
|
|
||||||
assert length(activities) == 3
|
assert length(activities) == 3
|
||||||
normal_id = normally_visible.id
|
normal_id = normally_visible.id
|
||||||
public_id = public.id
|
public_id = public.id
|
||||||
|
|
Loading…
Reference in a new issue