Fix static file URLs

This commit is contained in:
Andrew Godwin 2022-12-12 07:32:35 -07:00
parent 8ffe4bc145
commit 5bc9ff39ac
3 changed files with 20 additions and 5 deletions

View file

@ -35,8 +35,8 @@ class Account(Schema):
note: str note: str
avatar: str avatar: str
avatar_static: str avatar_static: str
header: str header: str | None = Field(...)
header_static: str header_static: str | None = Field(...)
locked: bool locked: bool
fields: list[AccountField] fields: list[AccountField]
emojis: list[CustomEmoji] emojis: list[CustomEmoji]

View file

@ -1,6 +1,7 @@
from urllib.parse import urljoin from urllib.parse import urljoin
from django.conf import settings from django.conf import settings
from django.templatetags.static import static
class RelativeAbsoluteUrl: class RelativeAbsoluteUrl:
@ -32,3 +33,18 @@ class AutoAbsoluteUrl(RelativeAbsoluteUrl):
else: else:
absolute_prefix = f"https://{settings.MAIN_DOMAIN}/" absolute_prefix = f"https://{settings.MAIN_DOMAIN}/"
self.absolute = urljoin(absolute_prefix, self.relative) 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
)

View file

@ -7,7 +7,6 @@ import urlman
from asgiref.sync import async_to_sync, sync_to_async from asgiref.sync import async_to_sync, sync_to_async
from django.db import IntegrityError, models from django.db import IntegrityError, models
from django.template.defaultfilters import linebreaks_filter from django.template.defaultfilters import linebreaks_filter
from django.templatetags.static import static
from django.utils import timezone from django.utils import timezone
from django.utils.functional import lazy 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.models import Config
from core.signatures import HttpSignature, RsaKeys from core.signatures import HttpSignature, RsaKeys
from core.uploads import upload_namer 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 stator.models import State, StateField, StateGraph, StatorModel
from users.models.domain import Domain from users.models.domain import Domain
from users.models.system_actor import SystemActor from users.models.system_actor import SystemActor
@ -156,7 +155,7 @@ class Identity(StatorModel):
elif self.icon_uri: elif self.icon_uri:
return AutoAbsoluteUrl(f"/proxy/identity_icon/{self.pk}/") return AutoAbsoluteUrl(f"/proxy/identity_icon/{self.pk}/")
else: else:
return RelativeAbsoluteUrl(static("img/unknown-icon-128.png")) return StaticAbsoluteUrl("img/unknown-icon-128.png")
def local_image_url(self) -> RelativeAbsoluteUrl | None: def local_image_url(self) -> RelativeAbsoluteUrl | None:
""" """