instance: Log catch favicon errors as warnings
This commit is contained in:
parent
0d91f65284
commit
08aef7dd4e
|
@ -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 @@ def get_or_update_favicon(%URI{host: host} = instance_uri) 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 @@ defp scrape_favicon(%URI{} = instance_uri) 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
|
||||||
|
|
|
@ -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 @@ test "does NOT modify `unreachable_since` value of existing record in case it's
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue