From 64b101516d6de957499565f26554eb2dd7e869a3 Mon Sep 17 00:00:00 2001 From: Anatoly Date: Mon, 9 Sep 2019 15:45:51 +0300 Subject: [PATCH] =?UTF-8?q?GM-81:=20=D0=94=D0=BE=D0=B0=D1=80=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D1=82=D1=8C=20=D0=BC=D0=B5=D1=85=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B7=D0=BC=20=D0=B0=D0=B2=D1=82=D0=BE=D1=80=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=BF=D1=80=D0=B8=20=D0=BD=D0=B5=D0=B2?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D0=B4=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D0=BE=D0=BC=20email=20=D0=B8=20=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D0=B8=20email?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/account/models.py | 7 ++++++ apps/account/serializers/common.py | 16 ++++++++++---- apps/account/urls/common.py | 2 -- apps/account/views/common.py | 27 ------------------------ apps/authorization/serializers/common.py | 3 +-- 5 files changed, 20 insertions(+), 35 deletions(-) diff --git a/apps/account/models.py b/apps/account/models.py index ee4d5d9d..cf883acd 100644 --- a/apps/account/models.py +++ b/apps/account/models.py @@ -181,6 +181,13 @@ class User(ImageMixin, AbstractUser): 'domain_uri': settings.DOMAIN_URI, 'site_name': settings.SITE_NAME}) + @property + def fullname(self): + fullname = [] + if self.first_name: fullname.append(self.first_name) + if self.last_name: fullname.append(self.last_name) + return ' '.join(fullname) + class ResetPasswordTokenQuerySet(models.QuerySet): """Reset password token query set""" diff --git a/apps/account/serializers/common.py b/apps/account/serializers/common.py index d4227877..9de2c3d0 100644 --- a/apps/account/serializers/common.py +++ b/apps/account/serializers/common.py @@ -14,31 +14,39 @@ class UserSerializer(serializers.ModelSerializer): """User serializer.""" # RESPONSE email_confirmed = serializers.BooleanField(read_only=True) + fullname = serializers.SerializerMethodField() # REQUEST + username = serializers.CharField(required=False) + first_name = serializers.CharField(required=False, write_only=True) + last_name = serializers.CharField(required=False, write_only=True) image = serializers.ImageField(required=False) cropped_image = serializers.ImageField(required=False) email = serializers.EmailField(required=False) - username = serializers.CharField(required=False) newsletter = serializers.BooleanField(required=False) class Meta: model = models.User fields = [ + 'username', + 'first_name', + 'last_name', + 'fullname', 'cropped_image', 'image', 'email', 'email_confirmed', - 'username', 'newsletter', ] + def get_fullname(self, obj): + """Get user full name""" + return obj.fullname + def validate_email(self, value): """Validate email value""" if value == self.instance.email: raise serializers.ValidationError() - if not self.instance.email_confirmed: - raise serializers.ValidationError() return value def validate_username(self, value): diff --git a/apps/account/urls/common.py b/apps/account/urls/common.py index 6416173a..0e8ae835 100644 --- a/apps/account/urls/common.py +++ b/apps/account/urls/common.py @@ -11,6 +11,4 @@ urlpatterns = [ path('change-email/confirm///', views.ChangeEmailConfirmView.as_view(), name='change-email-confirm'), path('confirm-email/', views.ConfirmEmailView.as_view(), name='confirm-email'), - path('confirm-email///', views.ConfirmInactiveEmailView.as_view(), - name='inactive-email-confirm'), ] diff --git a/apps/account/views/common.py b/apps/account/views/common.py index cd17b87d..2e182bd9 100644 --- a/apps/account/views/common.py +++ b/apps/account/views/common.py @@ -60,33 +60,6 @@ class ChangeEmailConfirmView(JWTGenericViewMixin): permission_classes = (permissions.AllowAny,) - def get(self, request, *args, **kwargs): - """Implement GET-method""" - uidb64 = kwargs.get('uidb64') - token = kwargs.get('token') - uid = force_text(urlsafe_base64_decode(uidb64)) - user_qs = models.User.objects.filter(pk=uid) - if user_qs.exists(): - user = user_qs.first() - if not GMTokenGenerator(GMTokenGenerator.CHANGE_EMAIL).check_token( - user, token): - raise utils_exceptions.NotValidTokenError() - # Approve email status - user.confirm_email() - # Expire user tokens - user.expire_access_tokens() - user.expire_refresh_tokens() - - return Response(status=status.HTTP_200_OK) - else: - raise utils_exceptions.UserNotFoundError() - - -class ConfirmInactiveEmailView(generics.GenericAPIView): - """View for confirm inactive email""" - - permission_classes = (permissions.AllowAny,) - def get(self, request, *args, **kwargs): """Implement GET-method""" uidb64 = kwargs.get('uidb64') diff --git a/apps/authorization/serializers/common.py b/apps/authorization/serializers/common.py index 551b31c9..e5c615e0 100644 --- a/apps/authorization/serializers/common.py +++ b/apps/authorization/serializers/common.py @@ -100,8 +100,7 @@ class LoginByUsernameOrEmailSerializer(SourceSerializerMixin, username_or_email = attrs.pop('username_or_email') password = attrs.pop('password') user_qs = account_models.User.objects.filter(Q(username=username_or_email) | - (Q(email=username_or_email) & - Q(email_confirmed=True))) + (Q(email=username_or_email))) if not user_qs.exists(): raise utils_exceptions.UserNotFoundError() else: