aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/instances.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pleroma/instances.ex')
-rw-r--r--lib/pleroma/instances.ex28
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/pleroma/instances.ex b/lib/pleroma/instances.ex
index 557e8decf..c9b1ed4ce 100644
--- a/lib/pleroma/instances.ex
+++ b/lib/pleroma/instances.ex
@@ -37,4 +37,32 @@ defmodule Pleroma.Instances do
url_or_host
end
end
+
+ def get_cached_favicon(instance_url) when is_binary(instance_url) do
+ Cachex.fetch!(:instances_cache, instance_url, fn _ -> get_favicon(instance_url) end)
+ end
+
+ def get_cached_favicon(_instance_url) do
+ nil
+ end
+
+ def get_favicon(instance_url) when is_binary(instance_url) do
+ try do
+ with {:ok, %Tesla.Env{body: html}} <-
+ Pleroma.HTTP.get(instance_url, [{:Accept, "text/html"}]),
+ favicon_rel <-
+ html
+ |> Floki.parse_document!()
+ |> Floki.attribute("link[rel=icon]", "href")
+ |> List.first(),
+ favicon_url <- URI.merge(URI.parse(instance_url), favicon_rel) |> to_string(),
+ true <- is_binary(favicon_url) do
+ favicon_url
+ else
+ _ -> nil
+ end
+ rescue
+ _ -> nil
+ end
+ end
end