def post(self, request, *args, **kwargs): # Create a serializer with request.data serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) serializer.save() # Return the success message with OK HTTP status email = serializer.validated_data.get('email') if is_using_phone_number(email): phone_number = serializer.validated_data.get('phone_number') msg = "Password reset code has been sent." response_data = { 'phone_number': phone_number.national_format, 'sms_sent': True, 'detail': msg } return Response(response_data, status=status.HTTP_200_OK) msg = _("Password reset e-mail has been sent.") response_data = { 'detail': msg, 'email_sent': True, 'email': email, } return Response(response_data, status=status.HTTP_200_OK)
def get_unique_phone_number(self, value): phone_numbers = get_phone_numbers(value) for numbObj in phone_numbers: if numbObj: unique_username = numbObj.user.email if is_using_phone_number(unique_username): return numbObj return None
def _validate_phone_number(self, phone_number): if not phone_number_exists(phone_number): msg = _('Account with this phone number does not exists') raise serializers.ValidationError(msg) phone_numbers = get_phone_numbers(phone_number) for numbObj in phone_numbers: username = numbObj.user.email if is_using_phone_number(username): return numbObj return None
def validate_email(self, email): self.is_phone_number = is_using_phone_number(email) self.is_email_address = is_using_email_address(email) self.username = email if self.is_phone_number: return self.validate_phone_number(self.username) if allauth_settings.UNIQUE_EMAIL: if email and email_address_exists(email): msg = _("A user is already registered with this e-mail address.") raise serializers.ValidationError(msg) return self.username
def validate(self, attrs): value = attrs.get('email') self.is_phone_number = is_using_phone_number(value) self.is_email_address = is_using_email_address(value) user = None if self.is_phone_number: phone_number = self._validate_phone_number(value) attrs['phone_number'] = phone_number user = phone_number.user elif self.is_email_address: user = self._validate_email(value) attrs['user'] = user return attrs
def _validate_phone_number(self, phone_number, password): phone_numbers = get_phone_numbers(phone_number) phone_number = None email = None user = None if phone_numbers: pass for numbObj in phone_numbers: unique_username = numbObj.user.email if is_using_phone_number(unique_username): email = unique_username user = authenticate(email=email, password=password) return user
def validate(self, attrs): email = attrs.get('email') password = attrs.get('password') self.is_phone_number = is_using_phone_number(email) self.is_email_address = is_using_email_address(email) user = None if self.is_email_address: user = self._validate_email(email, password) if self.is_phone_number: user = self._validate_phone_number(email, password) # Did we get back an user? self.can_authenticate(user) attrs['user'] = user return attrs
def validate_email(self, value): # Create PasswordResetForm with the serializer email = value self.is_phone_number = is_using_phone_number(value) if self.is_phone_number: return self.validate_phone_number(value) if not email_address_exists(email): msg = _('Account with this email address does not exists.') raise serializers.ValidationError(msg) #if not email_is_verified(email): # msg = _('You must confirm your account before you can change a password.') # raise serializers.ValidationError(msg) self.reset_form = CustomPasswordResetForm(data=self.initial_data) if not self.reset_form.is_valid(): raise serializers.ValidationError(self.reset_form.errors) return value
def create(self, request, *args, **kwargs): username = request.data.get('email', None) self.is_phone_number = is_using_phone_number(username) self.is_email_address = is_using_email_address(username) serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) user = self.perform_create(serializer) user.set_password(request.data['password']) user.save() django_login(self.request, user, backend='django.contrib.auth.backends.ModelBackend') headers = self.get_success_headers(serializer.data) return Response(self.get_response_data(user), status=status.HTTP_201_CREATED, headers=headers)
def post(self, request, *args, **kwargs): email = request.data.get('email') self.is_phone_number = is_using_phone_number(email) self.is_email_address = is_using_email_address(email) serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) self.user = serializer.validated_data.get('user', None) if self.user: if self.is_phone_number: self.phone_number = serializer.validated_data.get( 'phone_number') self.send_phone_number_confirmation(self.phone_number) elif self.is_email_address: self.send_email_confirmation(self.user) response_data = self.get_response() return Response(response_data, status=status.HTTP_201_CREATED)