forked from AkkomaGang/akkoma
don't crash on malformed avatar and banner values
weird values in href will cause base64 encoding to fail later down the line, so let's make sure the value we're passing on is somewhat sane, or at the very least a binary this fixes #482
This commit is contained in:
parent
58f75ac062
commit
0c77be9308
2 changed files with 22 additions and 12 deletions
|
@ -366,21 +366,21 @@ def invisible?(%User{invisible: true}), do: true
|
|||
def invisible?(_), do: false
|
||||
|
||||
def avatar_url(user, options \\ []) do
|
||||
case user.avatar do
|
||||
%{"url" => [%{"href" => href} | _]} ->
|
||||
href
|
||||
|
||||
_ ->
|
||||
unless options[:no_default] do
|
||||
Config.get([:assets, :default_user_avatar], "#{Endpoint.url()}/images/avi.png")
|
||||
end
|
||||
end
|
||||
default = Config.get([:assets, :default_user_avatar], "#{Endpoint.url()}/images/avi.png")
|
||||
do_optional_url(user.avatar, default, options)
|
||||
end
|
||||
|
||||
def banner_url(user, options \\ []) do
|
||||
case user.banner do
|
||||
%{"url" => [%{"href" => href} | _]} -> href
|
||||
_ -> !options[:no_default] && "#{Endpoint.url()}/images/banner.png"
|
||||
do_optional_url(user.banner, "#{Endpoint.url()}/images/banner.png", options)
|
||||
end
|
||||
|
||||
defp do_optional_url(field, default, options \\ []) do
|
||||
case field do
|
||||
%{"url" => [%{"href" => href} | _]} when is_binary(href) ->
|
||||
href
|
||||
|
||||
_ ->
|
||||
unless options[:no_default], do: default
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -2509,6 +2509,16 @@ test "avatar fallback" do
|
|||
assert User.avatar_url(user, no_default: true) == nil
|
||||
end
|
||||
|
||||
test "avatar object with nil in href" do
|
||||
user = insert(:user, avatar: %{"url" => [%{"href" => nil}]})
|
||||
assert User.avatar_url(user) != nil
|
||||
end
|
||||
|
||||
test "banner object with nil in href" do
|
||||
user = insert(:user, banner: %{"url" => [%{"href" => nil}]})
|
||||
assert User.banner_url(user) != nil
|
||||
end
|
||||
|
||||
test "get_host/1" do
|
||||
user = insert(:user, ap_id: "https://lain.com/users/lain", nickname: "lain")
|
||||
assert User.get_host(user) == "lain.com"
|
||||
|
|
Loading…
Reference in a new issue