AP UserView: Refactor banner / avatar display code, add test.
This commit is contained in:
parent
c410296120
commit
10a7a4a868
4 changed files with 42 additions and 32 deletions
|
@ -83,25 +83,17 @@ defmodule Pleroma.User do
|
||||||
def superuser?(%User{local: true, info: %User.Info{is_moderator: true}}), do: true
|
def superuser?(%User{local: true, info: %User.Info{is_moderator: true}}), do: true
|
||||||
def superuser?(_), do: false
|
def superuser?(_), do: false
|
||||||
|
|
||||||
def avatar_url(user) do
|
def avatar_url(user, options \\ []) do
|
||||||
case user.avatar do
|
case user.avatar do
|
||||||
%{"url" => [%{"href" => href} | _]} -> href
|
%{"url" => [%{"href" => href} | _]} -> href
|
||||||
_ -> "#{Web.base_url()}/images/avi.png"
|
_ -> !options[:no_default] && "#{Web.base_url()}/images/avi.png"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Do not return instance default avatar for federation
|
def banner_url(user, options \\ []) do
|
||||||
def avatar_url_ap(user) do
|
|
||||||
case user.avatar do
|
|
||||||
%{"url" => [%{"href" => href} | _]} -> href
|
|
||||||
_ -> nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def banner_url(user) do
|
|
||||||
case user.info.banner do
|
case user.info.banner do
|
||||||
%{"url" => [%{"href" => href} | _]} -> href
|
%{"url" => [%{"href" => href} | _]} -> href
|
||||||
_ -> "#{Web.base_url()}/images/banner.png"
|
_ -> !options[:no_default] && "#{Web.base_url()}/images/banner.png"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -230,21 +230,6 @@ defmodule Pleroma.Web.ActivityPub.Utils do
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Only federate user icon if not nil
|
|
||||||
# Prevents federating instance default avatars
|
|
||||||
def maybe_make_icon(user) do
|
|
||||||
if User.avatar_url_ap(user) do
|
|
||||||
%{
|
|
||||||
"icon" => %{
|
|
||||||
"type" => "Image",
|
|
||||||
"url" => User.avatar_url_ap(user)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
%{}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
#### Like-related helpers
|
#### Like-related helpers
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
|
|
|
@ -87,13 +87,10 @@ defmodule Pleroma.Web.ActivityPub.UserView do
|
||||||
"publicKeyPem" => public_key
|
"publicKeyPem" => public_key
|
||||||
},
|
},
|
||||||
"endpoints" => endpoints,
|
"endpoints" => endpoints,
|
||||||
"image" => %{
|
|
||||||
"type" => "Image",
|
|
||||||
"url" => User.banner_url(user)
|
|
||||||
},
|
|
||||||
"tag" => user.info.source_data["tag"] || []
|
"tag" => user.info.source_data["tag"] || []
|
||||||
}
|
}
|
||||||
|> Map.merge(Utils.maybe_make_icon(user))
|
|> Map.merge(maybe_make_image(&User.avatar_url/2, "icon", user))
|
||||||
|
|> Map.merge(maybe_make_image(&User.banner_url/2, "image", user))
|
||||||
|> Map.merge(Utils.make_json_ld_header())
|
|> Map.merge(Utils.make_json_ld_header())
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -291,4 +288,17 @@ defmodule Pleroma.Web.ActivityPub.UserView do
|
||||||
map
|
map
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp maybe_make_image(func, key, user) do
|
||||||
|
if image = func.(user, no_default: true) do
|
||||||
|
%{
|
||||||
|
key => %{
|
||||||
|
"type" => "Image",
|
||||||
|
"url" => image
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
%{}
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,6 +16,29 @@ defmodule Pleroma.Web.ActivityPub.UserViewTest do
|
||||||
assert String.contains?(result["publicKey"]["publicKeyPem"], "BEGIN PUBLIC KEY")
|
assert String.contains?(result["publicKey"]["publicKeyPem"], "BEGIN PUBLIC KEY")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "Does not add an avatar image if the user hasn't set one" do
|
||||||
|
user = insert(:user)
|
||||||
|
{:ok, user} = Pleroma.Web.WebFinger.ensure_keys_present(user)
|
||||||
|
|
||||||
|
result = UserView.render("user.json", %{user: user})
|
||||||
|
refute result["icon"]
|
||||||
|
refute result["image"]
|
||||||
|
|
||||||
|
user =
|
||||||
|
insert(:user,
|
||||||
|
avatar: %{"url" => [%{"href" => "https://someurl"}]},
|
||||||
|
info: %{
|
||||||
|
banner: %{"url" => [%{"href" => "https://somebanner"}]}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
{:ok, user} = Pleroma.Web.WebFinger.ensure_keys_present(user)
|
||||||
|
|
||||||
|
result = UserView.render("user.json", %{user: user})
|
||||||
|
assert result["icon"]["url"] == "https://someurl"
|
||||||
|
assert result["image"]["url"] == "https://somebanner"
|
||||||
|
end
|
||||||
|
|
||||||
describe "endpoints" do
|
describe "endpoints" do
|
||||||
test "local users have a usable endpoints structure" do
|
test "local users have a usable endpoints structure" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
|
Loading…
Reference in a new issue