diff options
author | Andrew Godwin | 2022-12-17 12:53:13 -0700 |
---|---|---|
committer | Andrew Godwin | 2022-12-17 12:53:13 -0700 |
commit | 2eb07a5f5fce5075369c0fdc3548b1bbd25f3362 (patch) | |
tree | a5d33445f8abdb633ec7a3e338625e335fa7ec30 /users/models | |
parent | 24a4fbe1f820e6ce13a969f39dd7676894987532 (diff) | |
download | takahe-2eb07a5f5fce5075369c0fdc3548b1bbd25f3362.tar.gz takahe-2eb07a5f5fce5075369c0fdc3548b1bbd25f3362.tar.bz2 takahe-2eb07a5f5fce5075369c0fdc3548b1bbd25f3362.zip |
Download and store user avatars locally if small
Diffstat (limited to 'users/models')
-rw-r--r-- | users/models/identity.py | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/users/models/identity.py b/users/models/identity.py index 7c3fa35..c8a154c 100644 --- a/users/models/identity.py +++ b/users/models/identity.py @@ -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 |