forked from AkkomaGang/akkoma
Merge branch 'fix/follow-and-blocks-import' into 'develop'
Fix follower/blocks import when nicknames starts with @ Closes #1698 See merge request pleroma/pleroma!2416
This commit is contained in:
commit
28f8fcf8b0
5 changed files with 65 additions and 17 deletions
|
@ -25,6 +25,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
### Fixed
|
### Fixed
|
||||||
- Support pagination in conversations API
|
- Support pagination in conversations API
|
||||||
- **Breaking**: SimplePolicy `:reject` and `:accept` allow deletions again
|
- **Breaking**: SimplePolicy `:reject` and `:accept` allow deletions again
|
||||||
|
- Fix follower/blocks import when nicknames starts with @
|
||||||
|
|
||||||
## [unreleased-patch]
|
## [unreleased-patch]
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
|
@ -199,15 +199,16 @@ def follow_import(conn, %{"list" => %Plug.Upload{} = listfile}) do
|
||||||
end
|
end
|
||||||
|
|
||||||
def follow_import(%{assigns: %{user: follower}} = conn, %{"list" => list}) do
|
def follow_import(%{assigns: %{user: follower}} = conn, %{"list" => list}) do
|
||||||
with lines <- String.split(list, "\n"),
|
followed_identifiers =
|
||||||
followed_identifiers <-
|
list
|
||||||
Enum.map(lines, fn line ->
|
|> String.split("\n")
|
||||||
String.split(line, ",") |> List.first()
|
|> Enum.map(&(&1 |> String.split(",") |> List.first()))
|
||||||
end)
|
|> List.delete("Account address")
|
||||||
|> List.delete("Account address") do
|
|> Enum.map(&(&1 |> String.trim() |> String.trim_leading("@")))
|
||||||
User.follow_import(follower, followed_identifiers)
|
|> Enum.reject(&(&1 == ""))
|
||||||
json(conn, "job started")
|
|
||||||
end
|
User.follow_import(follower, followed_identifiers)
|
||||||
|
json(conn, "job started")
|
||||||
end
|
end
|
||||||
|
|
||||||
def blocks_import(conn, %{"list" => %Plug.Upload{} = listfile}) do
|
def blocks_import(conn, %{"list" => %Plug.Upload{} = listfile}) do
|
||||||
|
@ -215,10 +216,9 @@ def blocks_import(conn, %{"list" => %Plug.Upload{} = listfile}) do
|
||||||
end
|
end
|
||||||
|
|
||||||
def blocks_import(%{assigns: %{user: blocker}} = conn, %{"list" => list}) do
|
def blocks_import(%{assigns: %{user: blocker}} = conn, %{"list" => list}) do
|
||||||
with blocked_identifiers <- String.split(list) do
|
blocked_identifiers = list |> String.split() |> Enum.map(&String.trim_leading(&1, "@"))
|
||||||
User.blocks_import(blocker, blocked_identifiers)
|
User.blocks_import(blocker, blocked_identifiers)
|
||||||
json(conn, "job started")
|
json(conn, "job started")
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def change_password(%{assigns: %{user: user}} = conn, params) do
|
def change_password(%{assigns: %{user: user}} = conn, params) do
|
||||||
|
|
|
@ -35,7 +35,7 @@ def perform(
|
||||||
_job
|
_job
|
||||||
) do
|
) do
|
||||||
blocker = User.get_cached_by_id(blocker_id)
|
blocker = User.get_cached_by_id(blocker_id)
|
||||||
User.perform(:blocks_import, blocker, blocked_identifiers)
|
{:ok, User.perform(:blocks_import, blocker, blocked_identifiers)}
|
||||||
end
|
end
|
||||||
|
|
||||||
def perform(
|
def perform(
|
||||||
|
@ -47,7 +47,7 @@ def perform(
|
||||||
_job
|
_job
|
||||||
) do
|
) do
|
||||||
follower = User.get_cached_by_id(follower_id)
|
follower = User.get_cached_by_id(follower_id)
|
||||||
User.perform(:follow_import, follower, followed_identifiers)
|
{:ok, User.perform(:follow_import, follower, followed_identifiers)}
|
||||||
end
|
end
|
||||||
|
|
||||||
def perform(%{"op" => "media_proxy_preload", "message" => message}, _job) do
|
def perform(%{"op" => "media_proxy_preload", "message" => message}, _job) do
|
||||||
|
|
|
@ -756,8 +756,8 @@ test "it imports user followings from list" do
|
||||||
]
|
]
|
||||||
|
|
||||||
{:ok, job} = User.follow_import(user1, identifiers)
|
{:ok, job} = User.follow_import(user1, identifiers)
|
||||||
result = ObanHelpers.perform(job)
|
|
||||||
|
|
||||||
|
assert {:ok, result} = ObanHelpers.perform(job)
|
||||||
assert is_list(result)
|
assert is_list(result)
|
||||||
assert result == [user2, user3]
|
assert result == [user2, user3]
|
||||||
end
|
end
|
||||||
|
@ -979,8 +979,8 @@ test "it imports user blocks from list" do
|
||||||
]
|
]
|
||||||
|
|
||||||
{:ok, job} = User.blocks_import(user1, identifiers)
|
{:ok, job} = User.blocks_import(user1, identifiers)
|
||||||
result = ObanHelpers.perform(job)
|
|
||||||
|
|
||||||
|
assert {:ok, result} = ObanHelpers.perform(job)
|
||||||
assert is_list(result)
|
assert is_list(result)
|
||||||
assert result == [user2, user3]
|
assert result == [user2, user3]
|
||||||
end
|
end
|
||||||
|
|
|
@ -95,6 +95,30 @@ test "requires 'follow' or 'write:follows' permissions" do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "it imports follows with different nickname variations", %{conn: conn} do
|
||||||
|
[user2, user3, user4, user5, user6] = insert_list(5, :user)
|
||||||
|
|
||||||
|
identifiers =
|
||||||
|
[
|
||||||
|
user2.ap_id,
|
||||||
|
user3.nickname,
|
||||||
|
" ",
|
||||||
|
"@" <> user4.nickname,
|
||||||
|
user5.nickname <> "@localhost",
|
||||||
|
"@" <> user6.nickname <> "@localhost"
|
||||||
|
]
|
||||||
|
|> Enum.join("\n")
|
||||||
|
|
||||||
|
response =
|
||||||
|
conn
|
||||||
|
|> post("/api/pleroma/follow_import", %{"list" => identifiers})
|
||||||
|
|> json_response(:ok)
|
||||||
|
|
||||||
|
assert response == "job started"
|
||||||
|
assert [{:ok, job_result}] = ObanHelpers.perform_all()
|
||||||
|
assert job_result == [user2, user3, user4, user5, user6]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "POST /api/pleroma/blocks_import" do
|
describe "POST /api/pleroma/blocks_import" do
|
||||||
|
@ -136,6 +160,29 @@ test "it imports blocks users from file", %{user: user1, conn: conn} do
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "it imports blocks with different nickname variations", %{conn: conn} do
|
||||||
|
[user2, user3, user4, user5, user6] = insert_list(5, :user)
|
||||||
|
|
||||||
|
identifiers =
|
||||||
|
[
|
||||||
|
user2.ap_id,
|
||||||
|
user3.nickname,
|
||||||
|
"@" <> user4.nickname,
|
||||||
|
user5.nickname <> "@localhost",
|
||||||
|
"@" <> user6.nickname <> "@localhost"
|
||||||
|
]
|
||||||
|
|> Enum.join(" ")
|
||||||
|
|
||||||
|
response =
|
||||||
|
conn
|
||||||
|
|> post("/api/pleroma/blocks_import", %{"list" => identifiers})
|
||||||
|
|> json_response(:ok)
|
||||||
|
|
||||||
|
assert response == "job started"
|
||||||
|
assert [{:ok, job_result}] = ObanHelpers.perform_all()
|
||||||
|
assert job_result == [user2, user3, user4, user5, user6]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "PUT /api/pleroma/notification_settings" do
|
describe "PUT /api/pleroma/notification_settings" do
|
||||||
|
|
Loading…
Reference in a new issue