|
1 | 1 | import re |
| 2 | +import os |
| 3 | +import uuid |
2 | 4 | from urllib.parse import urlparse |
3 | 5 |
|
| 6 | +from django.conf import settings |
4 | 7 | from rest_framework import serializers |
5 | 8 |
|
| 9 | +from core.validators import downscale_image_file_size_validator |
| 10 | +from news.utils import downsize_uploaded_image |
| 11 | + |
6 | 12 | from .forms import SLACK_PROFILE_URL_PREFIX, V3ProfileLinkChoices |
7 | 13 | from .models import User |
8 | 14 |
|
@@ -56,6 +62,9 @@ class CurrentUserSerializer(serializers.ModelSerializer): |
56 | 62 | """ |
57 | 63 | User serializer for the currently logged in user |
58 | 64 | """ |
| 65 | + profile_image = serializers.ImageField( |
| 66 | + validators=[downscale_image_file_size_validator] |
| 67 | + ) |
59 | 68 |
|
60 | 69 | def validate_profile_links(self, value): |
61 | 70 | if not isinstance(value, dict): |
@@ -85,6 +94,23 @@ def validate_profile_links(self, value): |
85 | 94 | raise serializers.ValidationError(field_errors) |
86 | 95 | return value |
87 | 96 |
|
| 97 | + def validate_profile_image(self, value): |
| 98 | + file_name = value.name |
| 99 | + root, ext = os.path.splitext(file_name) |
| 100 | + value.name = str(uuid.uuid4()) + ext |
| 101 | + if value.size > settings.DOWNSCALE_IMAGE_THRESHOLD: |
| 102 | + return downsize_uploaded_image(value) |
| 103 | + return value |
| 104 | + |
| 105 | + def validate(self, data): |
| 106 | + user = self.instance |
| 107 | + if not user.can_update_image and "profile_image" in data: |
| 108 | + raise serializers.ValidationError( |
| 109 | + "You do not have permission to update your profile photo." |
| 110 | + ) |
| 111 | + |
| 112 | + return super().validate(data) |
| 113 | + |
88 | 114 | class Meta: |
89 | 115 | model = User |
90 | 116 | fields = ( |
|
0 commit comments