def update(self, instance, validated_data):

        profile_data = dict()
        user_data = dict()
        send_new_activation = False

        for key, value in validated_data.items():
            if key not in USER_FIELDS:
                profile_data.update({key: value})
            else:
                user_data.update({key: value})

        if 'email' in validated_data and validated_data[
                'email'] != instance.email:
            send_new_activation = True
            activation_key = uuid.uuid4()
            activation_key_expires = datetime.datetime.today(
            ) + datetime.timedelta(2)
            profile_data.update({
                'activation_key': activation_key,
                'activation_key_expires': activation_key_expires,
                'account_activated': False
            })

        self.create_or_update_profile(instance, profile_data)

        for key, value in user_data.items():
            setattr(instance, key, value)

        instance.save()

        if send_new_activation:
            send_activation_email(instance)

        return instance
    def create(self, validated_data):
        """
        Creates a new user.  Pops off values for user profile, creates the user and userprofile, and associates the two
        Password is added separately to ensure it is correctly hashed
        :param validated_data:
        :return: a newly created user object
        """

        profile_data = dict()

        for key, value in validated_data.items():
            if key not in USER_FIELDS:
                profile_data.update({key: value})

        activation_key = uuid.uuid4()
        activation_key_expires = datetime.datetime.today(
        ) + datetime.timedelta(2)

        # Add activation key and key expiry date to data dictionary
        profile_data.update({
            'activation_key': activation_key,
            'activation_key_expires': activation_key_expires
        })

        user = User.objects.create(username=validated_data['username'],
                                   email=validated_data['email'],
                                   first_name=validated_data['first_name'],
                                   last_name=validated_data['last_name'])

        user.set_password(validated_data['password'])
        user.save()
        self.create_or_update_profile(user, profile_data)
        send_activation_email(user)
        return user
    def create(self, validated_data):
        """
        Creates a new user.  Pops off values for user profile, creates the user and userprofile, and associates the two
        Password is added separately to ensure it is correctly hashed
        :param validated_data:
        :return: a newly created user object
        """

        profile_data = dict()

        for key, value in validated_data.items():
            if key not in USER_FIELDS:
                profile_data.update({key: value})

        activation_key = uuid.uuid4()
        activation_key_expires = datetime.datetime.today() + datetime.timedelta(2)

        # Add activation key and key expiry date to data dictionary
        profile_data.update({'activation_key':activation_key, 'activation_key_expires':activation_key_expires})

        user = User.objects.create(
            username=validated_data['username'],
            email=validated_data['email'],
            first_name=validated_data['first_name'],
            last_name=validated_data['last_name']
        )

        user.set_password(validated_data['password'])
        user.save()
        self.create_or_update_profile(user, profile_data)
        send_activation_email(user)
        return user
    def update(self, instance, validated_data):

        profile_data = dict()
        user_data = dict()
        send_new_activation = False

        for key, value in validated_data.items():
            if key not in USER_FIELDS:
                profile_data.update({key: value})
            else:
                user_data.update({key:value})

        if 'email' in validated_data and validated_data['email'] != instance.email:
            send_new_activation = True
            activation_key = uuid.uuid4()
            activation_key_expires = datetime.datetime.today() + datetime.timedelta(2)
            profile_data.update({'activation_key':activation_key, 'activation_key_expires':activation_key_expires,
                                 'account_activated':False})

        self.create_or_update_profile(instance, profile_data)

        for key, value in user_data.items():
            setattr(instance, key, value)

        instance.save()

        if send_new_activation:
            send_activation_email(instance)

        return instance
Example #5
0
    def get(self, request, activation_key, format=None):
        """
        Marks the user corresponding to the activation key as active, if it exists
        :param request: None
        :param activation_key: from url emailed to user
        :param format:
        :return: Message confirming activation, resending activation key, or 404
        """
        profile = self.get_profile(activation_key)
        email = profile.user.email
        username = profile.user.username

        if profile.activation_key_expires < timezone.now():
            profile.activation_key = uuid.uuid4()
            profile.activation_key_expires = datetime.datetime.today(
            ) + datetime.timedelta(2)
            profile.save()
            send_activation_email(profile.user)
            return Response(
                "key expired, a new activation key has been emailed to you",
                status=status.HTTP_412_PRECONDITION_FAILED)

        profile.account_activated = True
        profile.save()
        return Response("Thank you, your account is now active")
Example #6
0
    def get(self, request, activation_key, format=None):
        """
        Marks the user corresponding to the activation key as active, if it exists
        :param request: None
        :param activation_key: from url emailed to user
        :param format:
        :return: Message confirming activation, resending activation key, or 404
        """
        profile = self.get_profile(activation_key)
        email = profile.user.email
        username = profile.user.username

        if profile.activation_key_expires < timezone.now():
            profile.activation_key = uuid.uuid4()
            profile.activation_key_expires = datetime.datetime.today() + datetime.timedelta(2)
            profile.save()
            send_activation_email(profile.user)
            return Response("key expired, a new activation key has been emailed to you",
                            status=status.HTTP_412_PRECONDITION_FAILED)

        profile.account_activated = True
        profile.save()
        return Response("Thank you, your account is now active")