From 5bc9ff39ac4f4a4b0d43066bce9cfde0397f3388 Mon Sep 17 00:00:00 2001 From: Andrew Godwin Date: Mon, 12 Dec 2022 07:32:35 -0700 Subject: Fix static file URLs --- api/schemas.py | 4 ++-- core/uris.py | 16 ++++++++++++++++ users/models/identity.py | 5 ++--- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/api/schemas.py b/api/schemas.py index 97b8169..59f9a12 100644 --- a/api/schemas.py +++ b/api/schemas.py @@ -35,8 +35,8 @@ class Account(Schema): note: str avatar: str avatar_static: str - header: str - header_static: str + header: str | None = Field(...) + header_static: str | None = Field(...) locked: bool fields: list[AccountField] emojis: list[CustomEmoji] diff --git a/core/uris.py b/core/uris.py index 9ed2a32..2800fd4 100644 --- a/core/uris.py +++ b/core/uris.py @@ -1,6 +1,7 @@ from urllib.parse import urljoin from django.conf import settings +from django.templatetags.static import static class RelativeAbsoluteUrl: @@ -32,3 +33,18 @@ class AutoAbsoluteUrl(RelativeAbsoluteUrl): else: absolute_prefix = f"https://{settings.MAIN_DOMAIN}/" self.absolute = urljoin(absolute_prefix, self.relative) + + +class StaticAbsoluteUrl(RelativeAbsoluteUrl): + """ + Creates static URLs given only the static-relative path + """ + + def __init__(self, path: str): + static_url = static(path) + if "://" in static_url: + super().__init__(static_url) + else: + super().__init__( + urljoin(f"https://{settings.MAIN_DOMAIN}/", static_url), static_url + ) diff --git a/users/models/identity.py b/users/models/identity.py index 1ece0fd..1239ca1 100644 --- a/users/models/identity.py +++ b/users/models/identity.py @@ -7,7 +7,6 @@ import urlman from asgiref.sync import async_to_sync, sync_to_async from django.db import IntegrityError, models from django.template.defaultfilters import linebreaks_filter -from django.templatetags.static import static from django.utils import timezone from django.utils.functional import lazy @@ -17,7 +16,7 @@ from core.ld import canonicalise, format_ld_date, get_list, media_type_from_file from core.models import Config from core.signatures import HttpSignature, RsaKeys from core.uploads import upload_namer -from core.uris import AutoAbsoluteUrl, RelativeAbsoluteUrl +from core.uris import AutoAbsoluteUrl, RelativeAbsoluteUrl, StaticAbsoluteUrl from stator.models import State, StateField, StateGraph, StatorModel from users.models.domain import Domain from users.models.system_actor import SystemActor @@ -156,7 +155,7 @@ class Identity(StatorModel): elif self.icon_uri: return AutoAbsoluteUrl(f"/proxy/identity_icon/{self.pk}/") else: - return RelativeAbsoluteUrl(static("img/unknown-icon-128.png")) + return StaticAbsoluteUrl("img/unknown-icon-128.png") def local_image_url(self) -> RelativeAbsoluteUrl | None: """ -- cgit v1.2.3