diff --git a/apps/account/views/user.py b/apps/account/views/user.py index c5d8e69..21bae69 100644 --- a/apps/account/views/user.py +++ b/apps/account/views/user.py @@ -27,7 +27,7 @@ from apps.account.serializers import UserRegisterSerializer, UserProfileSerializ from apps.account.serializers.user_web import WebUserRegisterSerializer from utils.redis import RedisManager from utils.exceptions import AppAPIException -from utils import send_email, is_valid_email +from utils import send_email, is_valid_email, absolute_https_url from config.settings import base as settings from apps.account.permissions import IsActiveUser, IsSuperAdminOrReadOnlyForProfessor from apps.account.doc import * @@ -431,7 +431,7 @@ class UserLoginView(CreateAPIView): "email": user.email, "token": token.key, "user_type": user.user_type, - "avatar": request.build_absolute_uri(user.avatar.url) if user.avatar else None, + "avatar": absolute_https_url(user.avatar.url, request) if user.avatar else None, }, status=status.HTTP_201_CREATED) @@ -492,7 +492,7 @@ class UserRecoverPassword(CreateAPIView): "fullname": user.fullname, "phone_number": str(user.phone_number) if user.phone_number else None, "email": user.email if user.email else None, - "avatar": request.build_absolute_uri(user.avatar.url) if user.avatar else None, + "avatar": absolute_https_url(user.avatar.url, request) if user.avatar else None, "message": "Forgot password code sent" }, status=status.HTTP_202_ACCEPTED, @@ -633,7 +633,7 @@ class AdminLoginView(CreateAPIView): "email": user.email, "token": token.key, "user_type": effective_user_type, - "avatar": request.build_absolute_uri(user.avatar.url) if user.avatar else None, + "avatar": absolute_https_url(user.avatar.url, request) if user.avatar else None, }, status=status.HTTP_201_CREATED) diff --git a/apps/hadis/serializers/hadis.py b/apps/hadis/serializers/hadis.py index ac4dd8c..891bddd 100644 --- a/apps/hadis/serializers/hadis.py +++ b/apps/hadis/serializers/hadis.py @@ -8,6 +8,7 @@ from .category import LocalizedField, ArabicLocalizedField from .category import get_localized_text, get_arabic_localized_text from .category import get_localized_text from apps.bookmark.serializers.bookmark import BookmarkStatusSerializer +from utils import absolute_https_url from ..models import ( Hadis, HadisStatus, HadisTag, HadisTransmitter, @@ -58,8 +59,8 @@ class PinnedHadisCollectionSerializer(serializers.ModelSerializer): if obj.thumbnail: request = self.context.get('request') if request: - return request.build_absolute_uri(obj.thumbnail.url) - return obj.thumbnail.url + return absolute_https_url(obj.thumbnail.url, request) + return absolute_https_url(obj.thumbnail.url) return None class HadisCollectionListSerializer(serializers.ModelSerializer): @@ -75,8 +76,8 @@ class HadisCollectionListSerializer(serializers.ModelSerializer): if obj.thumbnail: request = self.context.get('request') if request: - return request.build_absolute_uri(obj.thumbnail.url) - return obj.thumbnail.url + return absolute_https_url(obj.thumbnail.url, request) + return absolute_https_url(obj.thumbnail.url) return None @@ -142,7 +143,7 @@ class HadisSyncSerializer(serializers.ModelSerializer): for img in reference.images.all(): thumb_url = None if img.thumbnail: - thumb_url = request.build_absolute_uri(img.thumbnail.url) if request else img.thumbnail.url + thumb_url = absolute_https_url(img.thumbnail.url, request) reference_images_block.append({ 'id': img.id, 'thumbnail': thumb_url, @@ -770,8 +771,8 @@ class ReferenceImageSerializer(serializers.ModelSerializer): if obj.thumbnail: request = self.context.get('request') if request: - return request.build_absolute_uri(obj.thumbnail.url) - return obj.thumbnail.url + return absolute_https_url(obj.thumbnail.url, request) + return absolute_https_url(obj.thumbnail.url) return None @@ -1220,4 +1221,4 @@ class TransmitterOriginalTextDetailSerializer(serializers.ModelSerializer): "id": obj.transmitter.id, "slug": obj.transmitter.slug, "name": get_localized_text(obj.transmitter.full_name, self.context.get('request')) - } \ No newline at end of file + } diff --git a/apps/hadis/serializers/reference_v2.py b/apps/hadis/serializers/reference_v2.py index cfcd09f..6b87afa 100644 --- a/apps/hadis/serializers/reference_v2.py +++ b/apps/hadis/serializers/reference_v2.py @@ -5,6 +5,7 @@ from .category import get_localized_text from apps.hadis.serializers import HadisListSerializer, HadisShortSerializer from ..serializers.category import LocalizedField from ..serializers.reference import BookAttributeSerializer, BookReferenceImageSerializer +from utils import absolute_https_url class BookTagV2Serializer(serializers.ModelSerializer): title = LocalizedField() @@ -58,8 +59,8 @@ class BookReferenceV2ListSerializer(serializers.ModelSerializer): if first_image and first_image.image: request = self.context.get('request') if request: - return request.build_absolute_uri(first_image.image.url) - return first_image.image.url + return absolute_https_url(first_image.image.url, request) + return absolute_https_url(first_image.image.url) return None class BookEditionV2Serializer(serializers.ModelSerializer): @@ -99,8 +100,8 @@ class BookVolumeV2Serializer(serializers.ModelSerializer): if first_image and first_image.image: request = self.context.get('request') if request: - return request.build_absolute_uri(first_image.image.url) - return first_image.image.url + return absolute_https_url(first_image.image.url, request) + return absolute_https_url(first_image.image.url) return None class BookReferenceV2DetailSerializer(serializers.ModelSerializer): @@ -128,8 +129,8 @@ class BookReferenceV2DetailSerializer(serializers.ModelSerializer): if first_image and first_image.image: request = self.context.get('request') if request: - return request.build_absolute_uri(first_image.image.url) - return first_image.image.url + return absolute_https_url(first_image.image.url, request) + return absolute_https_url(first_image.image.url) return None def get_information(self, obj): @@ -305,8 +306,8 @@ class AuthorBookReferenceSerializer(serializers.ModelSerializer): if first_image and first_image.image: request = self.context.get('request') if request: - return request.build_absolute_uri(first_image.image.url) - return first_image.image.url + return absolute_https_url(first_image.image.url, request) + return absolute_https_url(first_image.image.url) return None # یک سریالایزر مینیمال برای کتاب‌ها داخل سینک @@ -350,4 +351,4 @@ class BookAuthorSyncSerializer(serializers.ModelSerializer): 'death_year_miladi', 'books', # 👈 لیست کتاب‌های هر نویسنده 'related_narrator_slug' - ] \ No newline at end of file + ] diff --git a/apps/hadis/serializers/serializers_admin.py b/apps/hadis/serializers/serializers_admin.py index 8f4aeb9..aea293e 100644 --- a/apps/hadis/serializers/serializers_admin.py +++ b/apps/hadis/serializers/serializers_admin.py @@ -414,7 +414,7 @@ class AdminHadisCorrectionSerializer(serializers.ModelSerializer): ret["images"] = [ { "id": img.id, - "image": request.build_absolute_uri(img.image.url) if request and img.image else img.image.url + "image": absolute_https_url(img.image.url, request) if request and img.image else absolute_https_url(img.image.url) } for img in images ] @@ -533,7 +533,7 @@ class AdminHadisInterpretationSerializer(serializers.ModelSerializer): ret["images"] = [ { "id": img.id, - "image": request.build_absolute_uri(img.image.url) if request and img.image else img.image.url + "image": absolute_https_url(img.image.url, request) if request and img.image else absolute_https_url(img.image.url) } for img in images ] @@ -1197,7 +1197,7 @@ class AdminTransmitterOriginalTextSerializer(serializers.ModelSerializer): ret["images"] = [ { "id": img.id, - "image": request.build_absolute_uri(img.image.url) if request and img.image else img.image.url + "image": absolute_https_url(img.image.url, request) if request and img.image else absolute_https_url(img.image.url) } for img in (ref.images.all() if ref else []) ] diff --git a/apps/hadis/views/category.py b/apps/hadis/views/category.py index a49b200..45a956e 100644 --- a/apps/hadis/views/category.py +++ b/apps/hadis/views/category.py @@ -5,6 +5,7 @@ from utils.pagination import NoPagination from django.db.models import Q from collections import defaultdict from utils.pagination import StandardResultsSetPagination +from utils import absolute_https_url from ..models import HadisSect, HadisCategory,Hadis from apps.bookmark.serializers.bookmark import BookmarkStatusSerializer from ..serializers import ( @@ -218,7 +219,7 @@ class HadisCategoryTreeView(ListAPIView): def _get_thumbnail_url(self, category, request): """Get absolute thumbnail URL""" if hasattr(category, 'thumbnail') and category.thumbnail: - return request.build_absolute_uri(category.thumbnail.url) if request else category.thumbnail.url + return absolute_https_url(category.thumbnail.url, request) return None def _get_xmind_url(self, category, request):