Merge remote-tracking branch 'remotes/origin/develop' into media-preview-proxy-nostream
authorIvan Tashkinov <ivantashkinov@gmail.com>
Thu, 17 Sep 2020 14:14:20 +0000 (17:14 +0300)
committerIvan Tashkinov <ivantashkinov@gmail.com>
Thu, 17 Sep 2020 14:14:20 +0000 (17:14 +0300)
1  2 
lib/pleroma/web/mastodon_api/views/status_view.ex
lib/pleroma/web/router.ex
test/web/mastodon_api/views/account_view_test.exs

index 4f7f27f35df601476a1f14d36c92339e97c10721,94b8dc8c6859808726292f432e91bb3c1782fb6f..435bcde157552b063deb98a72829c3527e6ea60f
@@@ -55,23 -55,6 +55,6 @@@ defmodule Pleroma.Web.MastodonAPI.Statu
      end)
    end
  
-   def get_user(ap_id, fake_record_fallback \\ true) do
-     cond do
-       user = User.get_cached_by_ap_id(ap_id) ->
-         user
-       user = User.get_by_guessed_nickname(ap_id) ->
-         user
-       fake_record_fallback ->
-         # TODO: refactor (fake records is never a good idea)
-         User.error_user(ap_id)
-       true ->
-         nil
-     end
-   end
    defp get_context_id(%{data: %{"context_id" => context_id}}) when not is_nil(context_id),
      do: context_id
  
            # Note: unresolved users are filtered out
            actors =
              (activities ++ parent_activities)
-             |> Enum.map(&get_user(&1.data["actor"], false))
+             |> Enum.map(&CommonAPI.get_user(&1.data["actor"], false))
              |> Enum.filter(& &1)
  
            UserRelationship.view_relationships_option(reading_user, actors, subset: :source_mutes)
          "show.json",
          %{activity: %{data: %{"type" => "Announce", "object" => _object}} = activity} = opts
        ) do
-     user = get_user(activity.data["actor"])
+     user = CommonAPI.get_user(activity.data["actor"])
      created_at = Utils.to_masto_date(activity.data["published"])
      activity_object = Object.normalize(activity)
  
    def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} = opts) do
      object = Object.normalize(activity)
  
-     user = get_user(activity.data["actor"])
+     user = CommonAPI.get_user(activity.data["actor"])
      user_follower_address = user.follower_address
  
      like_count = object.data["like_count"] || 0
  
      reply_to = get_reply_to(activity, opts)
  
-     reply_to_user = reply_to && get_user(reply_to.data["actor"])
+     reply_to_user = reply_to && CommonAPI.get_user(reply_to.data["actor"])
  
      content =
        object
      [attachment_url | _] = attachment["url"]
      media_type = attachment_url["mediaType"] || attachment_url["mimeType"] || "image"
      href = attachment_url["href"] |> MediaProxy.url()
 +    href_preview = attachment_url["href"] |> MediaProxy.preview_url()
  
      type =
        cond do
        id: to_string(attachment["id"] || hash_id),
        url: href,
        remote_url: href,
 -      preview_url: href,
 +      preview_url: href_preview,
        text_url: href,
        type: type,
        description: attachment["name"],
index edb635ecc89f7e6d18ea7f687f163b5fa1ce859d,e4440d4424709fa50bf5fdd2c4108bc6fd9da979..0f7d44ae9c0413c29cc035956a88671737b32b1d
@@@ -178,6 -178,7 +178,7 @@@ defmodule Pleroma.Web.Router d
      get("/users", AdminAPIController, :list_users)
      get("/users/:nickname", AdminAPIController, :user_show)
      get("/users/:nickname/statuses", AdminAPIController, :list_user_statuses)
+     get("/users/:nickname/chats", AdminAPIController, :list_user_chats)
  
      get("/instances/:instance/statuses", AdminAPIController, :list_instance_statuses)
  
      get("/media_proxy_caches", MediaProxyCacheController, :index)
      post("/media_proxy_caches/delete", MediaProxyCacheController, :delete)
      post("/media_proxy_caches/purge", MediaProxyCacheController, :purge)
+     get("/chats/:id", ChatController, :show)
+     get("/chats/:id/messages", ChatController, :messages)
+     delete("/chats/:id/messages/:message_id", ChatController, :delete_message)
    end
  
    scope "/api/pleroma/emoji", Pleroma.Web.PleromaAPI do
    end
  
    scope "/proxy/", Pleroma.Web.MediaProxy do
 +    get("/preview/:sig/:url", MediaProxyController, :preview)
 +    get("/preview/:sig/:url/:filename", MediaProxyController, :preview)
      get("/:sig/:url", MediaProxyController, :remote)
      get("/:sig/:url/:filename", MediaProxyController, :remote)
    end
index 793b44fcaa64c8b7585c4eaae8c52060f7bae409,c5f491d6bd69da77ab2a7e5584e3bacf14739351..ea0ddee0fcacf14fd9bb1f70d0190ad05e8b0794
@@@ -5,7 -5,6 +5,7 @@@
  defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
    use Pleroma.DataCase
  
 +  alias Pleroma.Config
    alias Pleroma.User
    alias Pleroma.UserRelationship
    alias Pleroma.Web.CommonAPI
  
      test "shows unread_count only to the account owner" do
        user = insert(:user)
-       insert_list(7, :notification, user: user)
+       insert_list(7, :notification, user: user, activity: insert(:note_activity))
        other_user = insert(:user)
  
        user = User.get_cached_by_ap_id(user.ap_id)
      end
    end
  
 -  test "uses mediaproxy urls when it's enabled" do
 +  test "uses mediaproxy urls when it's enabled (regardless of media preview proxy state)" do
      clear_config([:media_proxy, :enabled], true)
 +    clear_config([:media_preview_proxy, :enabled])
  
      user =
        insert(:user,
          emoji: %{"joker_smile" => "https://evil.website/society.png"}
        )
  
 -    AccountView.render("show.json", %{user: user, skip_visibility_check: true})
 -    |> Enum.all?(fn
 -      {key, url} when key in [:avatar, :avatar_static, :header, :header_static] ->
 -        String.starts_with?(url, Pleroma.Web.base_url())
 -
 -      {:emojis, emojis} ->
 -        Enum.all?(emojis, fn %{url: url, static_url: static_url} ->
 -          String.starts_with?(url, Pleroma.Web.base_url()) &&
 -            String.starts_with?(static_url, Pleroma.Web.base_url())
 -        end)
 -
 -      _ ->
 -        true
 -    end)
 -    |> assert()
 +    with media_preview_enabled <- [false, true] do
 +      Config.put([:media_preview_proxy, :enabled], media_preview_enabled)
 +
 +      AccountView.render("show.json", %{user: user, skip_visibility_check: true})
 +      |> Enum.all?(fn
 +        {key, url} when key in [:avatar, :avatar_static, :header, :header_static] ->
 +          String.starts_with?(url, Pleroma.Web.base_url())
 +
 +        {:emojis, emojis} ->
 +          Enum.all?(emojis, fn %{url: url, static_url: static_url} ->
 +            String.starts_with?(url, Pleroma.Web.base_url()) &&
 +              String.starts_with?(static_url, Pleroma.Web.base_url())
 +          end)
 +
 +        _ ->
 +          true
 +      end)
 +      |> assert()
 +    end
    end
  end