Advertisement
randoz

serializers

Jul 14th, 2018
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.56 KB | None | 0 0
  1. # -*- encoding:utf-8 -*-
  2.  
  3. from django.contrib.auth import get_user_model
  4. from django.conf import settings
  5. from django.db.models import Q
  6. from django.utils.translation import ugettext_lazy as _
  7. from rest_framework.authtoken.models import Token
  8.  
  9. from rest_framework import serializers
  10.  
  11. from apps.auths.models import UserAction
  12. from apps.contrib.utils.strings import get_uuid, get_lapse
  13. from apps.auths import codes
  14. from apps.contrib.api.exceptions import ValidationError, NotFound
  15. from apps.users.forms import JWT_TOKEN_KEY, session_request, sereci_validation
  16.  
  17. try:
  18.     from allauth.account import app_settings as allauth_settings
  19.     from allauth.utils import (
  20.         email_address_exists, get_username_max_length)
  21.     from allauth.account.adapter import get_adapter
  22.     from allauth.account.utils import setup_user_email
  23. except ImportError:
  24.     raise ImportError("allauth needs to be added to INSTALLED_APPS.")
  25. from constance import config
  26. from django.core.cache import cache
  27.  
  28. UserModel = get_user_model()
  29.  
  30.  
  31. class LoginSerializer(serializers.Serializer):
  32.     login = serializers.CharField()
  33.     password = serializers.CharField(style={'input_type': 'password'})
  34.  
  35.     def validate(self, attrs):
  36.         login = attrs.get('login')
  37.         password = attrs.get('password')
  38.  
  39.         user = None
  40.  
  41.         if UserModel.objects.filter(Q(username=login) | Q(email=login)).exists():
  42.             user = UserModel.objects.get(Q(username=login) | Q(email=login))
  43.             if not user.is_active:
  44.                 raise ValidationError(**codes.INACTIVE_ACCOUNT)
  45.  
  46.             if "allauth" in settings.INSTALLED_APPS:
  47.                 from allauth.account import app_settings
  48.                 if hasattr(settings, "EMAIL_VERIFICATION") and \
  49.                    settings.EMAIL_VERIFICATION == app_settings.EmailVerificationMethod.MANDATORY:
  50.  
  51.                     email_address = user.emailaddress_set.get(email=user.email)
  52.                     if not email_address.verified:
  53.                         raise ValidationError(**codes.UNVERIFIED_EMAIL)
  54.  
  55.             if not user.check_password(password):
  56.                 raise ValidationError(**codes.INVALID_CREDENTIALS)
  57.  
  58.             attrs['user'] = user
  59.             return attrs
  60.         else:
  61.             raise ValidationError(**codes.INVALID_CREDENTIALS)
  62.  
  63.  
  64. class PasswordResetSerializer(serializers.Serializer):
  65.     """
  66.    Serializer for requesting a password reset e-mail.
  67.    """
  68.     login = serializers.CharField()
  69.     redirect_uri = serializers.URLField(required=False)
  70.  
  71.     def validate(self, attrs):
  72.         if not UserModel.objects.filter(Q(username=attrs["login"]) | Q(email=attrs["login"])).exists():
  73.             raise NotFound(**codes.USER_NOT_FOUND)
  74.  
  75.         user = UserModel.objects.get(Q(username=attrs["login"]) | Q(email=attrs["login"]))
  76.  
  77.         if UserAction.objects.filter(user=user, type=UserAction.ACTION_RESET_PASSWORD).exists():
  78.             action = UserAction.objects.get(user=user, type=UserAction.ACTION_RESET_PASSWORD)
  79.         else:
  80.             action = UserAction(user=user, type=UserAction.ACTION_RESET_PASSWORD)
  81.  
  82.         action.token = get_uuid()
  83.         action.creation_date, action.expiration_date = get_lapse()
  84.         action.save()
  85.  
  86.  
  87.         attrs["action"] = action
  88.         return attrs
  89.  
  90.  
  91. class PasswordResetConfirmSerializer(serializers.Serializer):
  92.     """
  93.    Serializer for requesting a password reset e-mail.
  94.    """
  95.     token = serializers.CharField()
  96.     password1 = serializers.CharField(max_length=128)
  97.     password2 = serializers.CharField(max_length=128)
  98.  
  99.     def validate(self, attrs):
  100.  
  101.         if not UserAction.objects.filter(token=attrs["token"],
  102.                                          type=UserAction.ACTION_RESET_PASSWORD).exists():
  103.             raise ValidationError(**codes.INVALID_TOKEN)
  104.  
  105.         if attrs["password1"] != attrs["password2"]:
  106.             raise ValidationError(**codes.PASSWORD_MISTMATCH)
  107.  
  108.         action = UserAction.objects.get(token=attrs["token"], type=UserAction.ACTION_RESET_PASSWORD)
  109.         attrs["password"] = attrs["password2"]
  110.         attrs["action"] = action
  111.         return attrs
  112.  
  113.  
  114. class RegisterSerializer(serializers.Serializer):
  115.  
  116.     dni = serializers.CharField()
  117.     born_date = serializers.DateField()
  118.     email = serializers.EmailField(required=allauth_settings.EMAIL_REQUIRED)
  119.     phone = serializers.CharField()
  120.     password = serializers.CharField(write_only=True)
  121.  
  122.     cleaned_data = None
  123.  
  124.  
  125.     def validate_email(self, email):
  126.         email = get_adapter().clean_email(email)
  127.         if allauth_settings.UNIQUE_EMAIL:
  128.             if email and email_address_exists(email):
  129.                 raise ValidationError(**codes.UNAVAILABLE_EMAIL)
  130.         return email
  131.  
  132.  
  133.     def validate(self, attrs):
  134.         attrs = validate_sereci_data(attrs)
  135.         return attrs
  136.  
  137.  
  138.     def save(self, request):
  139.         adapter = get_adapter()
  140.         user = adapter.new_user(request)
  141.         user = update_user_from_serializer(user, self)
  142.         self.cleaned_data = self.validated_data
  143.         adapter.save_user(request, user, self)
  144.         setup_user_email(request, user, [])
  145.         return user
  146.  
  147.  
  148. class VerifyEmailSerializer(serializers.Serializer):
  149.     key = serializers.CharField()
  150.  
  151.  
  152. class TokenSerializer(serializers.Serializer):
  153.     token = serializers.CharField()
  154.  
  155.     def validate(self, attrs):
  156.  
  157.         if not Token.objects.filter(key=attrs['token']).exists():
  158.             raise ValidationError(**codes.INVALID_TOKEN)
  159.         else:
  160.             attrs["token"] = Token.objects.get(key=attrs['token'])
  161.  
  162.         return attrs
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement