instance: Log catch favicon errors as warnings

This commit is contained in:
Haelwenn (lanodan) Monnier 2020-09-05 06:38:07 +02:00
parent 0d91f65284
commit 08aef7dd4e
No known key found for this signature in database
GPG key ID: D5B7A8E43C997DEE
2 changed files with 45 additions and 4 deletions

View file

@ -14,6 +14,8 @@ defmodule Pleroma.Instances.Instance do
import Ecto.Query import Ecto.Query
import Ecto.Changeset import Ecto.Changeset
require Logger
schema "instances" do schema "instances" do
field(:host, :string) field(:host, :string)
field(:unreachable_since, :naive_datetime_usec) field(:unreachable_since, :naive_datetime_usec)
@ -146,7 +148,9 @@ defmodule Pleroma.Instances.Instance do
favicon favicon
end end
rescue rescue
_ -> nil e ->
Logger.warn("Instance.get_or_update_favicon(\"#{host}\") error: #{inspect(e)}")
nil
end end
defp scrape_favicon(%URI{} = instance_uri) do defp scrape_favicon(%URI{} = instance_uri) do
@ -161,14 +165,18 @@ defmodule Pleroma.Instances.Instance do
|> Floki.attribute("link[rel=icon]", "href") |> Floki.attribute("link[rel=icon]", "href")
|> List.first(), |> List.first(),
favicon <- URI.merge(instance_uri, favicon_rel) |> to_string(), favicon <- URI.merge(instance_uri, favicon_rel) |> to_string(),
true <- is_binary(favicon), true <- is_binary(favicon) do
true <- String.length(favicon) <= 255 do
favicon favicon
else else
_ -> nil _ -> nil
end end
rescue rescue
_ -> nil e ->
Logger.warn(
"Instance.scrape_favicon(\"#{to_string(instance_uri)}\") error: #{inspect(e)}"
)
nil
end end
end end
end end

View file

@ -8,6 +8,7 @@ defmodule Pleroma.Instances.InstanceTest do
use Pleroma.DataCase use Pleroma.DataCase
import ExUnit.CaptureLog
import Pleroma.Factory import Pleroma.Factory
setup_all do: clear_config([:instance, :federation_reachability_timeout_days], 1) setup_all do: clear_config([:instance, :federation_reachability_timeout_days], 1)
@ -97,4 +98,36 @@ defmodule Pleroma.Instances.InstanceTest do
assert initial_value == instance.unreachable_since assert initial_value == instance.unreachable_since
end end
end end
test "Scrapes favicon URLs" do
Tesla.Mock.mock(fn %{url: "https://favicon.example.org/"} ->
%Tesla.Env{
status: 200,
body: ~s[<html><head><link rel="icon" href="/favicon.png"></head></html>]
}
end)
assert "https://favicon.example.org/favicon.png" ==
Instance.get_or_update_favicon(URI.parse("https://favicon.example.org/"))
end
test "Returns nil on too long favicon URLs" do
long_favicon_url =
"https://Lorem.ipsum.dolor.sit.amet/consecteturadipiscingelit/Praesentpharetrapurusutaliquamtempus/Mauriseulaoreetarcu/atfacilisisorci/Nullamporttitor/nequesedfeugiatmollis/dolormagnaefficiturlorem/nonpretiumsapienorcieurisus/Nullamveleratsem/Maecenassedaccumsanexnam/favicon.png"
Tesla.Mock.mock(fn %{url: "https://long-favicon.example.org/"} ->
%Tesla.Env{
status: 200,
body: ~s[<html><head><link rel="icon" href="] <> long_favicon_url <> ~s["></head></html>]
}
end)
assert capture_log(fn ->
assert nil ==
Instance.get_or_update_favicon(
URI.parse("https://long-favicon.example.org/")
)
end) =~
"Instance.get_or_update_favicon(\"long-favicon.example.org\") error: %Postgrex.Error{"
end
end end