mirror of
https://git.pleroma.social/pleroma/pleroma.git
synced 2024-05-18 09:42:40 +00:00
Merge branch 'followers-export' into 'develop'
Add API endpoint for exporting followers See merge request pleroma/pleroma!3785
This commit is contained in:
commit
844850e17f
|
@ -1404,6 +1404,13 @@ defmodule Pleroma.User do
|
|||
|> Repo.all()
|
||||
end
|
||||
|
||||
def get_friends_nicknames(%User{} = user, page \\ nil) do
|
||||
user
|
||||
|> get_friends_query(page)
|
||||
|> Repo.all()
|
||||
|> Enum.into([], fn x -> full_nickname(x) end)
|
||||
end
|
||||
|
||||
def increase_note_count(%User{} = user) do
|
||||
User
|
||||
|> where(id: ^user.id)
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
# Pleroma: A lightweight social networking server
|
||||
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
defmodule Pleroma.Web.PleromaAPI.UserExportController do
|
||||
use Pleroma.Web, :controller
|
||||
|
||||
require Logger
|
||||
|
||||
alias Pleroma.User
|
||||
alias Pleroma.Web.Plugs.OAuthScopesPlug
|
||||
|
||||
plug(OAuthScopesPlug, %{scopes: ["follow", "read:follows"]} when action == :following)
|
||||
|
||||
@following_accounts_header "Account address,Show boosts,Notify on new posts,Languages\n"
|
||||
|
||||
def following(%{assigns: %{user: follower}} = conn, _) do
|
||||
data =
|
||||
follower
|
||||
|> User.get_friends_nicknames()
|
||||
|> Enum.map(fn follow ->
|
||||
[
|
||||
follow,
|
||||
!User.muting_reblogs?(follower, follow),
|
||||
!User.subscribed_to?(follower, follow),
|
||||
nil
|
||||
]
|
||||
|> Enum.map(&Kernel.to_string(&1))
|
||||
|> Enum.join(",")
|
||||
end)
|
||||
|> Enum.join("\n")
|
||||
|
||||
csv_data = @following_accounts_header <> data
|
||||
|
||||
conn
|
||||
|> put_resp_content_type("text/csv")
|
||||
|> put_resp_header("content-disposition", "attachment; filename=\"following_accounts.csv\"")
|
||||
|> put_root_layout(false)
|
||||
|> send_resp(200, csv_data)
|
||||
end
|
||||
end
|
|
@ -497,6 +497,8 @@ defmodule Pleroma.Web.Router do
|
|||
post("/blocks_import", UserImportController, :blocks)
|
||||
post("/follow_import", UserImportController, :follow)
|
||||
|
||||
get("/follow_export", UserExportController, :following)
|
||||
|
||||
get("/accounts/mfa", TwoFactorAuthenticationController, :settings)
|
||||
get("/accounts/mfa/backup_codes", TwoFactorAuthenticationController, :backup_codes)
|
||||
get("/accounts/mfa/setup/:method", TwoFactorAuthenticationController, :setup)
|
||||
|
|
|
@ -1196,6 +1196,25 @@ defmodule Pleroma.UserTest do
|
|||
assert Enum.member?(res, followed_two)
|
||||
refute Enum.member?(res, not_followed)
|
||||
end
|
||||
|
||||
test "gets all friends (followed users) for a given user in nickname format" do
|
||||
user = insert(:user)
|
||||
followed_one = insert(:user)
|
||||
followed_two = insert(:user)
|
||||
not_followed = insert(:user)
|
||||
|
||||
{:ok, user, followed_one} = User.follow(user, followed_one)
|
||||
{:ok, user, followed_two} = User.follow(user, followed_two)
|
||||
|
||||
res = User.get_friends_nicknames(user)
|
||||
|
||||
followed_one = User.get_cached_by_ap_id(followed_one.ap_id) |> User.full_nickname()
|
||||
followed_two = User.get_cached_by_ap_id(followed_two.ap_id) |> User.full_nickname()
|
||||
not_followed = User.get_cached_by_ap_id(not_followed.ap_id) |> User.full_nickname()
|
||||
assert Enum.member?(res, followed_one)
|
||||
assert Enum.member?(res, followed_two)
|
||||
refute Enum.member?(res, not_followed)
|
||||
end
|
||||
end
|
||||
|
||||
describe "updating note and follower count" do
|
||||
|
|
Loading…
Reference in a new issue