From 2eb07a5f5fce5075369c0fdc3548b1bbd25f3362 Mon Sep 17 00:00:00 2001 From: Andrew Godwin Date: Sat, 17 Dec 2022 12:53:13 -0700 Subject: Download and store user avatars locally if small --- users/models/identity.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'users') 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 -- cgit v1.2.3