summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/ld.py14
-rw-r--r--users/models/identity.py12
2 files changed, 23 insertions, 3 deletions
diff --git a/core/ld.py b/core/ld.py
index 24088ec..946e030 100644
--- a/core/ld.py
+++ b/core/ld.py
@@ -456,6 +456,20 @@ def parse_ld_date(value: str | None) -> datetime.datetime | None:
)
+def get_first_image_url(data) -> str | None:
+ """
+ 'icon' and 'image' fields might be a dict or a list. Return the first
+ 'url' for something that looks to be for an image.
+ """
+ if isinstance(data, list):
+ for itm in data:
+ if isinstance(itm, dict) and "url" in itm:
+ return itm["url"]
+ elif isinstance(data, dict):
+ return data.get("url")
+ return None
+
+
def media_type_from_filename(filename):
_, extension = os.path.splitext(filename)
if extension == ".png":
diff --git a/users/models/identity.py b/users/models/identity.py
index afec0e7..cf5b711 100644
--- a/users/models/identity.py
+++ b/users/models/identity.py
@@ -14,7 +14,13 @@ 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.ld import (
+ canonicalise,
+ format_ld_date,
+ get_first_image_url,
+ get_list,
+ media_type_from_filename,
+)
from core.models import Config
from core.signatures import HttpSignature, RsaKeys
from core.uploads import upload_namer
@@ -487,8 +493,8 @@ class Identity(StatorModel):
self.manually_approves_followers = document.get("manuallyApprovesFollowers")
self.public_key = document.get("publicKey", {}).get("publicKeyPem")
self.public_key_id = document.get("publicKey", {}).get("id")
- self.icon_uri = document.get("icon", {}).get("url")
- self.image_uri = document.get("image", {}).get("url")
+ self.icon_uri = get_first_image_url(document.get("icon", None))
+ self.image_uri = get_first_image_url(document.get("image", None))
self.discoverable = document.get("toot:discoverable", True)
# Profile links/metadata
self.metadata = []