commit: 6b48489237f85ec8b6a9a98c539e0aad68d3a601
parent 9223038319f0281f104fb9bb85c0cb8f6e52984a
Author: lambda <pleromagit@rogerbraun.net>
Date:   Mon, 18 Dec 2017 10:59:57 +0000
Merge branch 'feature/follow-import' into 'develop'
Add follow import.
See merge request pleroma/pleroma!40
Diffstat:
2 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex
@@ -51,6 +51,11 @@ defmodule Pleroma.Web.Router do
     get "/emoji", UtilController, :emoji
   end
 
+  scope "/api/pleroma", Pleroma.Web.TwitterAPI do
+    pipe_through :authenticated_api
+    post "/follow_import", UtilController, :follow_import
+  end
+
   scope "/oauth", Pleroma.Web.OAuth do
     get "/authorize", OAuthController, :authorize
     post "/authorize", OAuthController, :create_authorization
diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex
@@ -1,8 +1,9 @@
 defmodule Pleroma.Web.TwitterAPI.UtilController do
   use Pleroma.Web, :controller
+  require Logger
   alias Pleroma.Web
   alias Pleroma.Formatter
-
+  alias Pleroma.Web.ActivityPub.ActivityPub
   alias Pleroma.{Repo, PasswordResetToken, User}
 
   def show_password_reset(conn, %{"token" => token}) do
@@ -73,4 +74,24 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do
   def emoji(conn, _params) do
     json conn, Enum.into(Formatter.get_custom_emoji(), %{})
   end
+
+  def follow_import(conn, %{"list" => %Plug.Upload{} = listfile}) do
+    follow_import(conn, %{"list" => File.read!(listfile.path)})
+  end
+  def follow_import(%{assigns: %{user: user}} = conn, %{"list" => list}) do
+    Task.start_link(fn ->
+    String.split(list)
+    |> Enum.map(fn nick ->
+        with %User{} = follower <- User.get_cached_by_ap_id(user.ap_id),
+        %User{} = followed <- User.get_or_fetch_by_nickname(nick),
+        {:ok, follower} <- User.follow(follower, followed) do
+          ActivityPub.follow(follower, followed)
+        else
+          _e -> Logger.debug "follow_import: following #{nick} failed"
+        end
+      end)
+    end)
+
+    json conn, "job started"
+  end
 end