Several twitter api fixes.
authorlain <lain@soykaf.club>
Sun, 18 Nov 2018 21:36:47 +0000 (22:36 +0100)
committerlain <lain@soykaf.club>
Sun, 18 Nov 2018 21:36:47 +0000 (22:36 +0100)
lib/pleroma/user/info.ex
lib/pleroma/web/twitter_api/twitter_api.ex
lib/pleroma/web/twitter_api/views/user_view.ex
test/web/twitter_api/twitter_api_test.exs

index b664af81c033022ad15e326aca873946e0cf129f..48f3a4d4a5a9195f558c52406f039f1913edbbfc 100644 (file)
@@ -4,6 +4,7 @@ defmodule Pleroma.User.Info do
 
   embedded_schema do
     field(:banner, :map, default: %{})
+    field(:background, :string, default: nil)
     field(:source_data, :map, default: %{})
     field(:note_count, :integer, default: 0)
     field(:follower_count, :integer, default: 0)
index 5bfb83b1e940a6f70b676d4746f140856300f91e..d98deeb03a46c81ed74c80f779e20b117b4e2d8c 100644 (file)
@@ -148,7 +148,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
 
     cond do
       registrations_open || (!is_nil(token) && !token.used) ->
-        changeset = User.register_changeset(%User{}, params)
+        changeset = User.register_changeset(%User{info: %{}}, params)
 
         with {:ok, user} <- Repo.insert(changeset) do
           !registrations_open && UserInviteToken.mark_as_used(token.token)
@@ -279,14 +279,6 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
 
   def get_external_profile(for_user, uri) do
     with %User{} = user <- User.get_or_fetch(uri) do
-      spawn(fn ->
-        with url <- user.info["topic"],
-             {:ok, %{body: body}} <-
-               @httpoison.get(url, [], follow_redirect: true, timeout: 10000, recv_timeout: 20000) do
-          OStatus.handle_incoming(body)
-        end
-      end)
-
       {:ok, UserView.render("show.json", %{user: user, for: for_user})}
     else
       _e ->
index a100a1127814fea4541ecd0ec7e20a581c297e21..b78024ed756b8c96e876d018b05d6a5f8675376b 100644 (file)
@@ -31,7 +31,7 @@ defmodule Pleroma.Web.TwitterAPI.UserView do
     user_info = User.get_cached_user_info(user)
 
     emoji =
-      (user.info["source_data"]["tag"] || [])
+      (user.info.source_data["tag"] || [])
       |> Enum.filter(fn %{"type" => t} -> t == "Emoji" end)
       |> Enum.map(fn %{"icon" => %{"url" => url}, "name" => name} ->
         {String.trim(name, ":"), url}
@@ -40,7 +40,7 @@ defmodule Pleroma.Web.TwitterAPI.UserView do
     # ``fields`` is an array of mastodon profile field, containing ``{"name": "…", "value": "…"}``.
     # For example: [{"name": "Pronoun", "value": "she/her"}, …]
     fields =
-      (user.info["source_data"]["attachment"] || [])
+      (user.info.source_data["attachment"] || [])
       |> Enum.filter(fn %{"type" => t} -> t == "PropertyValue" end)
       |> Enum.map(fn fields -> Map.take(fields, ["name", "value"]) end)
 
@@ -66,17 +66,17 @@ defmodule Pleroma.Web.TwitterAPI.UserView do
       "profile_image_url_profile_size" => image,
       "profile_image_url_original" => image,
       "rights" => %{
-        "delete_others_notice" => !!user.info["is_moderator"]
+        "delete_others_notice" => !!user.info.is_moderator
       },
       "screen_name" => user.nickname,
       "statuses_count" => user_info[:note_count],
       "statusnet_profile_url" => user.ap_id,
       "cover_photo" => User.banner_url(user) |> MediaProxy.url(),
-      "background_image" => image_url(user.info["background"]) |> MediaProxy.url(),
+      "background_image" => image_url(user.info.background) |> MediaProxy.url(),
       "is_local" => user.local,
-      "locked" => !!user.info["locked"],
-      "default_scope" => user.info["default_scope"] || "public",
-      "no_rich_text" => user.info["no_rich_text"] || false,
+      "locked" => user.info.locked,
+      "default_scope" => user.info.default_scope,
+      "no_rich_text" => user.info.no_rich_text,
       "fields" => fields
     }
 
index 8b9920bd967884ab55359f831fe20a9e462ffdf5..ec13b89d40f5bb8df7877873b69e4928b072e39c 100644 (file)
@@ -10,7 +10,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
 
   test "create a status" do
     user = insert(:user)
-    _mentioned_user = UserBuilder.insert(%{nickname: "shp", ap_id: "shp"})
+    _mentioned_user = insert(:user, %{nickname: "shp", ap_id: "shp"})
 
     object_data = %{
       "type" => "Image",
@@ -67,7 +67,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
 
     user = User.get_by_ap_id(user.ap_id)
 
-    assert user.info["note_count"] == 1
+    assert user.info.note_count == 1
   end
 
   test "create a status that is a reply" do
@@ -116,7 +116,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
     assert User.ap_followers(followed) in user.following
 
     followed = User.get_by_ap_id(followed.ap_id)
-    assert followed.info["follower_count"] == 1
+    assert followed.info.follower_count == 1
 
     {:error, msg} = TwitterAPI.follow(user, %{"screen_name" => followed.nickname})
     assert msg == "Could not follow user: #{followed.nickname} is already on your list."
@@ -169,7 +169,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
     {:ok, user, _unblocked} = TwitterAPI.block(user, %{"user_id" => unblocked.id})
 
     {:ok, user, _unblocked} = TwitterAPI.unblock(user, %{"user_id" => unblocked.id})
-    assert user.info["blocks"] == []
+    assert user.info.blocks == []
   end
 
   test "Unblock another user using screen_name" do
@@ -178,7 +178,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
     {:ok, user, _unblocked} = TwitterAPI.block(user, %{"screen_name" => unblocked.nickname})
 
     {:ok, user, _unblocked} = TwitterAPI.unblock(user, %{"screen_name" => unblocked.nickname})
-    assert user.info["blocks"] == []
+    assert user.info.blocks == []
   end
 
   test "upload a file" do