mirror of
https://github.com/jointakahe/takahe.git
synced 2024-11-10 17:31:03 +00:00
Download and store user avatars locally if small
This commit is contained in:
parent
24a4fbe1f8
commit
2eb07a5f5f
2 changed files with 16 additions and 0 deletions
|
@ -107,6 +107,10 @@ class Settings(BaseSettings):
|
|||
#: is necessary for compatibility with Mastodon’s image proxy.
|
||||
MEDIA_MAX_IMAGE_FILESIZE_MB: int = 10
|
||||
|
||||
#: Maximum filesize for Avatars. Remote avatars larger than this size will
|
||||
#: not be fetched and served from media, but served through the image proxy.
|
||||
AVATAR_MAX_IMAGE_FILESIZE_KB: int = 1000
|
||||
|
||||
#: Maximum filesize for Emoji. Attempting to upload Local Emoji larger than this size will be
|
||||
#: blocked. Remote Emoji larger than this size will not be fetched and served from media, but
|
||||
#: served through the image proxy.
|
||||
|
|
|
@ -5,12 +5,14 @@ from urllib.parse import urlparse
|
|||
import httpx
|
||||
import urlman
|
||||
from asgiref.sync import async_to_sync, sync_to_async
|
||||
from django.conf import settings
|
||||
from django.db import IntegrityError, models
|
||||
from django.template.defaultfilters import linebreaks_filter
|
||||
from django.utils import timezone
|
||||
from django.utils.functional import lazy
|
||||
|
||||
from core.exceptions import ActorMismatchError
|
||||
from core.files import get_remote_file
|
||||
from core.html import sanitize_post, strip_html
|
||||
from core.ld import canonicalise, format_ld_date, get_list, media_type_from_filename
|
||||
from core.models import Config
|
||||
|
@ -42,6 +44,16 @@ class IdentityStates(StateGraph):
|
|||
return cls.updated
|
||||
# Run the actor fetch and progress to updated if it succeeds
|
||||
if await identity.fetch_actor():
|
||||
# Also stash their icon if we can
|
||||
if identity.icon_uri:
|
||||
file, mimetype = await get_remote_file(
|
||||
identity.icon_uri,
|
||||
timeout=settings.SETUP.REMOTE_TIMEOUT,
|
||||
max_size=settings.SETUP.AVATAR_MAX_IMAGE_FILESIZE_KB * 1024,
|
||||
)
|
||||
if file:
|
||||
identity.icon = file
|
||||
await sync_to_async(identity.save)()
|
||||
return cls.updated
|
||||
|
||||
@classmethod
|
||||
|
|
Loading…
Reference in a new issue