aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma
diff options
context:
space:
mode:
authorHaelwenn (lanodan) Monnier <contact@hacktivis.me>2020-03-02 05:38:25 +0100
committerHaelwenn (lanodan) Monnier <contact@hacktivis.me>2020-07-08 06:28:39 +0200
commit6a679d80c9030afa8327377928f8ac2fcf1a4a0e (patch)
treea4f45718dfe570f064966ad3ed8ec603a6d77ff4 /lib/pleroma
parentf6d09fafee83514889bbcf6531e0bc01e33b0b16 (diff)
downloadpleroma-6a679d80c9030afa8327377928f8ac2fcf1a4a0e.tar.gz
Move get_favicon to Pleroma.Instances, use /
Diffstat (limited to 'lib/pleroma')
-rw-r--r--lib/pleroma/application.ex1
-rw-r--r--lib/pleroma/instances.ex28
-rw-r--r--lib/pleroma/user.ex30
-rw-r--r--lib/pleroma/web/mastodon_api/views/account_view.ex11
4 files changed, 39 insertions, 31 deletions
diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex
index 9615af122..c7fc95f75 100644
--- a/lib/pleroma/application.ex
+++ b/lib/pleroma/application.ex
@@ -150,6 +150,7 @@ defmodule Pleroma.Application do
build_cachex("emoji_packs", expiration: emoji_packs_expiration(), limit: 10),
build_cachex("failed_proxy_url", limit: 2500),
build_cachex("banned_urls", default_ttl: :timer.hours(24 * 30), limit: 5_000)
+ build_cachex("instances", default_ttl: 25_000, ttl_interval: 1000, limit: 2500)
]
end
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
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 25ea112a2..e98332744 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -2253,34 +2253,4 @@ defmodule Pleroma.User do
|> Map.put(:bio, HTML.filter_tags(user.bio, filter))
|> Map.put(:fields, fields)
end
-
- def get_cached_favicon(%User{} = user) do
- key = "favicon:#{user.ap_id}"
- Cachex.fetch!(:user_cache, key, fn _ -> get_favicon(user) end)
- end
-
- def get_cached_favicon(_user) do
- nil
- end
-
- def get_favicon(user) do
- try do
- with url <- user.ap_id,
- true <- is_binary(url),
- {:ok, %Tesla.Env{body: html}} <- Pleroma.HTTP.get(url),
- favicon_rel <-
- html
- |> Floki.parse_document!()
- |> Floki.attribute("link[rel=icon]", "href")
- |> List.first(),
- favicon_url <- URI.merge(URI.parse(url), favicon_rel) |> to_string(),
- true <- is_binary(favicon_url) do
- favicon_url
- else
- _ -> nil
- end
- rescue
- _ -> nil
- end
- end
end
diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex
index efe835e3c..3ee50dfd0 100644
--- a/lib/pleroma/web/mastodon_api/views/account_view.ex
+++ b/lib/pleroma/web/mastodon_api/views/account_view.ex
@@ -204,6 +204,15 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
%{}
end
+ favicon =
+ user
+ |> Map.get(:ap_id, "")
+ |> URI.parse()
+ |> URI.merge("/")
+ |> to_string()
+ |> Pleroma.Instances.get_cached_favicon()
+ |> MediaProxy.url()
+
%{
id: to_string(user.id),
username: username_from_nickname(user.nickname),
@@ -246,7 +255,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
relationship: relationship,
skip_thread_containment: user.skip_thread_containment,
background_image: image_url(user.background) |> MediaProxy.url(),
- favicon: User.get_cached_favicon(user) |> MediaProxy.url()
+ favicon: favicon
}
}
|> maybe_put_role(user, opts[:for])