Example #1
0
    def verify_email_for_object(self,
                                email,
                                content_object,
                                email_field_name='email'):
        """
        Create an email confirmation for `content_object` and send a confirmation mail.

        The email will be directly saved to `content_object.email_field_name` when `is_primary` and `skip_verify` both are true.
        """

        confirmation_key = generate_random_token()

        try:
            confirmation = EmailConfirmation()
            confirmation.content_object = content_object
            confirmation.email_field_name = email_field_name
            confirmation.email = email
            confirmation.confirmation_key = confirmation_key
            confirmation.save()
        except IntegrityError:
            confirmation = EmailConfirmation.objects.get_for_object(
                content_object, email_field_name)
            confirmation.email = email
            confirmation.confirmation_key = confirmation_key
            confirmation.save(update_fields=['email', 'confirmation_key'])

        confirmation.send()

        return confirmation
Example #2
0
    def set_email_for_object(self, email, content_object, email_field_name='email', is_primary=True, skip_verify=False, template_context=None):
        """
        只有 `is_primary=True` 時,email 才會被 save 到 content_object 的 email_field_name 欄位
        """

        content_type = ContentType.objects.get_for_model(content_object)
        try:
            confirmation = EmailConfirmation.objects.get(
                content_type=content_type,
                object_id=content_object.id,
                email_field_name=email_field_name,
                email=email,
            )
        except EmailConfirmation.DoesNotExist:
            confirmation = EmailConfirmation()
            confirmation.content_object = content_object
            confirmation.email_field_name = email_field_name
            confirmation.email = email
            confirmation.confirmation_key = utils.generate_random_token([str(content_type.id), str(content_object.id), email, ])
            confirmation.save()

            if not skip_verify:
                confirmation.send(template_context)

        if is_primary:
            confirmation = confirmation.set_primary()

        if skip_verify:
            confirmation.is_verified = True
            update_fields(confirmation, fields=('is_verified', ))

        if confirmation.is_verified and confirmation.is_primary and settings.EMAIL_CONFIRM_LA_SAVE_EMAIL_TO_INSTANCE:
            confirmation.save_email()

        return confirmation
Example #3
0
    def set_email_for_object(self, email, content_object, email_field_name='email', is_primary=True, skip_verify=False, template_context=None):
        """
        Add an email for `content_object` and send a confirmation mail by default.

        The email will be directly saved to `content_object.email_field_name` when `is_primary` and `skip_verify` both are true.
        """

        content_type = ContentType.objects.get_for_model(content_object)
        try:
            confirmation = EmailConfirmation.objects.get(
                content_type=content_type,
                object_id=content_object.id,
                email_field_name=email_field_name,
                email=email,
            )
        except EmailConfirmation.DoesNotExist:
            confirmation = EmailConfirmation()
            confirmation.content_object = content_object
            confirmation.email_field_name = email_field_name
            confirmation.email = email
            confirmation.confirmation_key = utils.generate_random_token([str(content_type.id), str(content_object.id), email, ])
            confirmation.save()

            if not skip_verify:
                confirmation.send(template_context)

        if is_primary:
            confirmation = confirmation.set_primary()

        if skip_verify:
            confirmation.is_verified = True
            update_fields(confirmation, fields=('is_verified', ))

        # TODO: may remove EMAIL_CONFIRM_LA_SAVE_EMAIL_TO_INSTANCE
        if confirmation.is_verified and confirmation.is_primary and settings.EMAIL_CONFIRM_LA_SAVE_EMAIL_TO_INSTANCE:
            confirmation.save_email()

        return confirmation