Exemplo n.º 1
0
 def check_spam(self, request, comment, key, blog_url=None, base_url=None):
     try:
         from akismet import Akismet
     except:
         return False
     
     if blog_url is None:
         blog_url = 'http://%s/' % Site.objects.get_current().domain
     
     ak = Akismet(key=key, blog_url=blog_url)
     
     if base_url is not None:
         ak.baseurl = base_url
     else:
         ak.baseurl = 'api.antispam.typepad.com/1.1/'
     
     if ak.verify_key():
         data = {
             'user_ip': request.META.get('HTTP_X_FORWARDED_FOR', '127.0.0.1'),
             'user_agent': request.META.get('HTTP_USER_AGENT', ''),
             'referrer': request.META.get('HTTP_REFERER', ''),
             'comment_type': 'comment',
             'comment_author': comment.user_name.encode('utf-8')
         }
         
         if ak.comment_check(comment.comment.encode('utf-8'), data=data, build_data=True):
             return True
     
     return False
Exemplo n.º 2
0
    def check_spam(self, request, comment, key, blog_url=None, base_url=None):
        try:
            from akismet import Akismet
        except:
            return False

        if blog_url is None:
            blog_url = "http://%s/" % Site.objects.get_current().domain

        ak = Akismet(key=key, blog_url=blog_url)

        if base_url is not None:
            ak.baseurl = base_url

        if ak.verify_key():
            data = {
                "user_ip": request.META.get("HTTP_X_FORWARDED_FOR", "127.0.0.1"),
                "user_agent": request.META.get("HTTP_USER_AGENT", ""),
                "referrer": request.META.get("HTTP_REFERER", ""),
                "comment_type": "comment",
                "comment_author": comment.user_name.encode("utf-8"),
            }

            if ak.comment_check(comment.comment.encode("utf-8"), data=data, build_data=True):
                return True

        return False
Exemplo n.º 3
0
def check_typepad_antispam(comment, request):
    logger = logging.getLogger('fccv.check_typepad_antispam')
    try:
        from akismet import Akismet
    except:
        return None
    
    if hasattr(settings, 'TYPEPAD_ANTISPAM_API_KEY'):
        ak = Akismet(
            key=settings.TYPEPAD_ANTISPAM_API_KEY,
            blog_url='http://%s/' % Site.objects.get(pk=settings.SITE_ID).domain
        )
        ak.baseurl = 'api.antispam.typepad.com/1.1/'
    else:
        ak = Akismet(
            key=settings.AKISMET_API_KEY,
            blog_url='http://%s/' % Site.objects.get(pk=settings.SITE_ID).domain
        )

    if ak.verify_key():
        data = {
            'user_ip': comment.ip_address,
            'user_agent': request.META.get('HTTP_USER_AGENT', ''),
            'referrer': request.META.get('HTTP_REFERER', ''),
            'comment_type': 'comment',
            'comment_author': comment.user_name.encode('utf-8'),
        }
        
        if ak.comment_check(comment.comment.encode('utf-8'), data=data, build_data=True):
            if settings.DEBUG:
                logger.debug("""TypePad AntiSpam thought this comment was spam.""")
            return .5
    
    return None
Exemplo n.º 4
0
    def check_spam(self, request, comment, key, blog_url=None, base_url=None):
        try:
            from akismet import Akismet
        except:
            return False

        if blog_url is None:
            blog_url = 'http://%s/' % Site.objects.get_current().domain

        ak = Akismet(key=key, blog_url=blog_url)

        if base_url is not None:
            ak.baseurl = base_url

        if ak.verify_key():
            data = {
                'user_ip': request.META.get('HTTP_X_FORWARDED_FOR',
                                            '127.0.0.1'),
                'user_agent': request.META.get('HTTP_USER_AGENT', ''),
                'referrer': request.META.get('HTTP_REFERER', ''),
                'comment_type': 'comment',
                'comment_author': comment.user_name.encode('utf-8')
            }

            if ak.comment_check(comment.comment.encode('utf-8'),
                                data=data,
                                build_data=True):
                return True

        return False
Exemplo n.º 5
0
    def check_spam(self, request, comment, key, blog_url=None, base_url=None):
        try:
            from akismet import Akismet
        except:
            return False

        if blog_url is None:
            blog_url = 'http://%s/' % Site.objects.get_current().domain

        ak = Akismet(
            key=settings.COMMENTS_AKISMET_API_KEY,
            blog_url=blog_url
        )

        if base_url is not None:
            ak.baseurl = base_url

        if ak.verify_key():
            data = {
                'user_ip': request.META.get('REMOTE_ADDR', '127.0.0.1'),
                'user_agent': request.META.get('HTTP_USER_AGENT', ''),
                'referrer': request.META.get('HTTP_REFERER', ''),
                'comment_type': 'comment',
                'comment_author': comment.user_name.encode('utf-8'),
            }

            if ak.comment_check(comment.comment.encode('utf-8'), data=data, build_data=True):
                return True

        return False
Exemplo n.º 6
0
def on_comment_was_posted(sender, comment, request, *args, **kwargs):
    """
    Spam guard for comments.
    
    Lifted from this guy: http://sciyoshi.com/blog/2008/aug/27/using-akismet-djangos-new-comments-framework/
    """
    
    from django.contrib.sites.models import Site
    from django.conf import settings
    from django.template import Context, loader
    from django.core.mail import send_mail
    
    try:
        from akismet import Akismet
    except:
        return
    
    # use TypePad's AntiSpam if the key is specified in settings.py
    if hasattr(settings, 'TYPEPAD_ANTISPAM_API_KEY'):
        ak = Akismet(
            key=settings.TYPEPAD_ANTISPAM_API_KEY,
            blog_url='http://%s/' % Site.objects.get(pk=settings.SITE_ID).domain
        )
        ak.baseurl = 'api.antispam.typepad.com/1.1/'
    else:
        ak = Akismet(
            key=settings.AKISMET_API_KEY,
            blog_url='http://%s/' % Site.objects.get(pk=settings.SITE_ID).domain
        )
    
    if ak.verify_key():
        data = {
            'user_ip': request.META.get('REMOTE_ADDR', '127.0.0.1'),
            'user_agent': request.META.get('HTTP_USER_AGENT', ''),
            'referrer': request.META.get('HTTP_REFERER', ''),
            'comment_type': 'comment',
            'comment_author': comment.user_name.encode('utf-8'),
        }

        # If it's spam...
        if ak.comment_check(comment.comment.encode('utf-8'), data=data, build_data=True):
            comment.flags.create(
                user=comment.content_object.author,
                flag='spam'
            )
            comment.is_public = False
            comment.is_removed = True
            comment.save()
        
        # If it's not...
        else:
            # Send an email
            recipient_list = [manager_tuple[1] for manager_tuple in settings.MANAGERS]
            t = loader.get_template('comments/comment_notification_email.txt')
            c = Context({ 'comment': comment, 'content_object': comment.content_object })
            subject = '[%s] New comment posted on "%s"' % (Site.objects.get_current().name,
                                                              comment.content_object)
            message = t.render(c)
            send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, recipient_list, fail_silently=True)
Exemplo n.º 7
0
def process_contact(akismet_data, subject, sent_message, verify_msg):
    flag = True
    akismet_api = Akismet(key=settings.TYPEPAD_API_KEY, blog_url='http:/{}/'.format(Site.objects.get_current().domain))
    akismet_api.baseurl = 'api.antispam.typepad.com/1.1/'
    msg = verify_msg
    if akismet_api.verify_key():
        flag = akismet_api.comment_check(msg, akismet_data, build_data=True)
    if not flag:
        mail_managers(subject=subject, message=sent_message)
Exemplo n.º 8
0
def text_is_spam(text, request):
    # Based on a blog post by 'sciyoshi':
    # http://sciyoshi.com/blog/2008/aug/27/using-akismet-djangos-new-comments-framework/
    # This will return 'True' is the given text is deemed to be spam, or
    # False if it is not spam. If it cannot be checked for some reason, we
    # assume it isn't spam.
    from django.contrib.sites.models import Site
    from django.core.exceptions import ImproperlyConfigured
    try:
        from akismet import Akismet
    except ImportError:
        return False
    try:
        site = Site.objects.get_current()
    except ImproperlyConfigured:
        site = Site(domain='configure-django-sites.com')

    # see https://akismet.readthedocs.io/en/latest/overview.html#using-akismet

    apikey = None

    if hasattr(settings, 'TYPEPAD_ANTISPAM_API_KEY'):
        apikey = settings.TYPEPAD_ANTISPAM_API_KEY
    elif hasattr(settings, 'PYTHON_AKISMET_API_KEY'):
        # new env var expected by python-akismet package
        apikey = settings.PYTHON_AKISMET_API_KEY
    elif hasattr(settings, 'AKISMET_API_KEY'):
        # deprecated, but kept for backward compatibility
        apikey = settings.AKISMET_API_KEY
    else:
        return False

    ak = Akismet(
        blog_url='http://%s/' % site.domain,
        key=apikey,
    )

    if hasattr(settings, 'TYPEPAD_ANTISPAM_API_KEY'):
        ak.baseurl = 'api.antispam.typepad.com/1.1/'

    if ak.verify_key():
        ak_data = {
            'user_ip': request.META.get('REMOTE_ADDR', '127.0.0.1'),
            'user_agent': request.META.get('HTTP_USER_AGENT', ''),
            'referrer': request.META.get('HTTP_REFERER', ''),
            'comment_type': 'comment',
            'comment_author': '',
        }

        return ak.comment_check(smart_text(text), data=ak_data)

    return False
Exemplo n.º 9
0
def on_comment_was_posted(sender, comment, request, *args, **kwargs):
        # spam checking can be enabled/disabled per the comment's target Model
        #if comment.content_type.model_class() != Entry:
        #    return

        from django.contrib.sites.models import Site
        from django.conf import settings

        try:
                from akismet import Akismet
        except:
                return

        # use TypePad's AntiSpam if the key is specified in settings.py
        if hasattr(settings, 'TYPEPAD_ANTISPAM_API_KEY'):
                ak = Akismet(
                        key=settings.TYPEPAD_ANTISPAM_API_KEY,
                        blog_url='http://%s/' % Site.objects.get(pk=settings.SITE_ID).domain
                )
                ak.baseurl = 'api.antispam.typepad.com/1.1/'
        else:
                ak = Akismet(
                key=settings.AKISMET_API_KEY,
                blog_url='http://%s/' % Site.objects.get(pk=settings.SITE_ID).domain
        )

        if ak.verify_key():
                data = {
                        'user_ip': request.META.get('REMOTE_ADDR', '127.0.0.1'),
                        'user_agent': request.META.get('HTTP_USER_AGENT', ''),
                        'referrer': request.META.get('HTTP_REFERER', ''),
                        'comment_type': 'comment',
                        'comment_author': comment.user_name.encode('utf-8'),
                }

                if ak.comment_check(comment.comment.encode('utf-8'), data=data, build_data=True):
                        if hasattr(comment.content_object,'author'):
                                user = comment.content_object.author
                        else:
                                from django.contrib.auth.models import User
                                user = User.objects.filter(is_superuser=True)[0]

                        comment.flags.create(
                                user=user,
                                flag='spam'
                        )
                        comment.is_public = False
                        comment.save()
Exemplo n.º 10
0
def moderate_comment(sender, comment, request, *args, **kwargs):
    try:
        from akismet import Akismet
    except:
        # TODO: log this "can't find akismet in your Python path"
        return

    # use TypePad's AntiSpam if the key is specified in settings.py
    if hasattr(settings, 'TYPEPAD_ANTISPAM_API_KEY'):
        ak = Akismet(
            key=settings.TYPEPAD_ANTISPAM_API_KEY,
            blog_url='http://%s/' % Site.objects.get(pk=settings.SITE_ID).domain
        )
        ak.baseurl = 'api.antispam.typepad.com/1.1/'
    elif hasattr(settings, 'AKISMET_API_KEY'):
        ak = Akismet(
            key=settings.AKISMET_API_KEY,
            blog_url='http://%s/' % Site.objects.get(pk=settings.SITE_ID).domain
        )
    else:
        #"AKISMET_API_KEY required in settings file to use this feature"
        return

    if ak.verify_key():
        data = {
            'user_ip': request.META.get('REMOTE_ADDR', '127.0.0.1'),
            'user_agent': request.META.get('HTTP_USER_AGENT', ''),
            'referrer': request.META.get('HTTP_REFERRER', ''),
            'comment_type': 'comment',
            'comment_author': smart_str(comment.user_name),
        }
        if ak.comment_check(smart_str(comment.comment.encode('utf-8')), data=data, build_data=True):
            comment.flags.create(
                user =comment.content_object.user,
                flag = 'spam'
            )
            comment.is_public = False
            comment.save()
    else:
        #TODO: log this "invalid Akismet key"
        return
Exemplo n.º 11
0
    def on_comment_was_posted(sender, comment, request, *args, **kwargs):
        # spam checking can be enabled/disabled per the comment's target Model
        # if comment.content_type.model_class() != Entry:
        #    return

        from django.contrib.sites.models import Site
        from akismet import Akismet

        # use TypePad's AntiSpam if the key is specified in settings.py
        if hasattr(settings, "TYPEPAD_ANTISPAM_API_KEY"):
            ak = Akismet(
                key=settings.TYPEPAD_ANTISPAM_API_KEY,
                blog_url="http://%s/" % Site.objects.get(pk=settings.SITE_ID).domain,
            )
            ak.baseurl = "api.antispam.typepad.com/1.1/"
        else:
            ak = Akismet(
                key=settings.AKISMET_API_KEY, blog_url="http://%s/" % Site.objects.get(pk=settings.SITE_ID).domain
            )

        if ak.verify_key():
            data = {
                "user_ip": request.META.get("REMOTE_ADDR", "127.0.0.1"),
                "user_agent": request.META.get("HTTP_USER_AGENT", ""),
                "referrer": request.META.get("HTTP_REFERER", ""),
                "comment_type": "comment",
                "comment_author": comment.user_name.encode("utf-8"),
            }

            if ak.comment_check(comment.comment.encode("utf-8"), data=data, build_data=True):
                if hasattr(comment.content_object, "author"):
                    user = comment.content_object.author
                else:
                    from django.contrib.auth.models import User

                    user = User.objects.filter(is_superuser=True)[0]

                comment.flags.create(user=user, flag="spam")
                comment.is_public = False
                comment.save()
Exemplo n.º 12
0
def on_comment_was_posted_spamcheck(sender, comment, request, *args, **kwargs):
    """ 
        Defines action for django.contrib.comments on_comment_was_posted signal. 
        Provides anti-spam via the Akismet and TypePad Antispam services. Both services require the akismet package.
        Fails silently if the Akismet package is not available. 
    """
    try:
        from akismet import Akismet
    except:
        return

    # use TypePad's AntiSpam if the key is specified in settings.py
    if hasattr(settings, 'TYPEPAD_ANTISPAM_API_KEY'):
        ak = Akismet(
            key=settings.TYPEPAD_ANTISPAM_API_KEY,
            blog_url='http://%s/' % Site.objects.get(pk=settings.SITE_ID).domain
        )
        ak.baseurl = 'api.antispam.typepad.com/1.1/'
    else:
        ak = Akismet(
            key=settings.AKISMET_API_KEY,
            blog_url='http://%s/' % Site.objects.get(pk=settings.SITE_ID).domain
        )

    if ak.verify_key():
        data = {
            'user_ip': request.META.get('REMOTE_ADDR', '127.0.0.1'),
            'user_agent': request.META.get('HTTP_USER_AGENT', ''),
            'referrer': request.META.get('HTTP_REFERER', ''),
            'comment_type': 'comment',
            'comment_author': comment.user_name.encode('utf-8'),
        }

        if ak.comment_check(comment.comment.encode('utf-8'), data=data, build_data=True):
            comment.flags.create(
                user=comment.content_object.author,
                flag='spam'
            )
            comment.is_public = False
            comment.save()
Exemplo n.º 13
0
def check_comments_akismet(sender, comment, request, *args, **kwargs):
    try:
        from akismet import Akismet
    except:
        return
    
    # Logged users don't spamming
    if request.user.is_authenticated(): 
        return

    # use TypePad's AntiSpam if the key is specified in settings.py
    if hasattr(settings, 'TYPEPAD_ANTISPAM_API_KEY'):
        ak = Akismet(
            key=settings.TYPEPAD_ANTISPAM_API_KEY,
            blog_url='http://%s/' % Site.objects.get(pk=settings.SITE_ID).domain)
        ak.baseurl = 'api.antispam.typepad.com/1.1/'
    else:
        ak = Akismet(
            key=settings.AKISMET_API_KEY,
            blog_url='http://%s/' % Site.objects.get(pk=settings.SITE_ID).domain)

    if ak.verify_key():
        data = {
            'user_ip': request.META.get('REMOTE_ADDR', '127.0.0.1'),
            'user_agent': request.META.get('HTTP_USER_AGENT', ''),
            'referrer': request.META.get('HTTP_REFERER', ''),
            'comment_type': 'comment',
            'comment_author': comment.user_name.encode('utf-8'),
        }

        if ak.comment_check(comment.comment.encode('utf-8'), data=data, build_data=True): 
            comment.flags.create(
                user=comment.content_object.author,
                flag='spam'
            )
            comment.is_public = False
            comment.save()
Exemplo n.º 14
0
def is_spam(model, instance, body, author_name, request):
    u"""
        Spam checking using Akismet.
        @see http://djangosnippets.org/snippets/1255/
    """
    if not body or not author_name: return
    # spam checking can be enabled/disabled per the comment's target Model
    #if comment.content_type.model_class() != Entry:
    #    return
    try:
        from akismet import Akismet
    except:
        return
    
    # use TypePad's AntiSpam if the key is specified in settings.py
    if hasattr(settings, 'TYPEPAD_ANTISPAM_API_KEY'):
        ak = Akismet(
            key=settings.TYPEPAD_ANTISPAM_API_KEY,
            blog_url='http://%s/' % Site.objects.get(pk=settings.SITE_ID).domain
        )
        ak.baseurl = 'api.antispam.typepad.com/1.1/'
    else:
        ak = Akismet(
                     key=settings.AKISMET_API_KEY,
                     blog_url='http://%s/' % Site.objects.get(pk=settings.SITE_ID).domain
        )
    if ak.verify_key():
        data = {
                'user_ip': request.META.get('REMOTE_ADDR', '127.0.0.1'),
                'user_agent': request.META.get('HTTP_USER_AGENT', ''),
                'referrer': request.META.get('HTTP_REFERER', ''),
                'comment_type': 'comment',
                'comment_author': author_name.encode('utf-8'),
        }

        return ak.comment_check(body.encode('utf-8'), data=data, build_data=True)
    return False
Exemplo n.º 15
0
def on_comment_was_posted(sender, comment, request, *args, **kwargs):
    # spam checking can be enabled/disabled per the comment's target Model
    #if comment.content_type.model_class() != Entry:
    #    return

    try:
        from akismet import Akismet
    except:
        return

    # use TypePad's AntiSpam if the key is specified in settings.py
    if hasattr(settings, 'TYPEPAD_ANTISPAM_API_KEY'):
        ak = Akismet(key=settings.TYPEPAD_ANTISPAM_API_KEY,
                     blog_url='http://%s/' %
                     Site.objects.get(pk=settings.SITE_ID).domain)
        ak.baseurl = 'api.antispam.typepad.com/1.1/'
    else:
        ak = Akismet(key=settings.AKISMET_API_KEY,
                     blog_url='http://%s/' %
                     Site.objects.get(pk=settings.SITE_ID).domain)

    if ak.verify_key():
        data = {
            'user_ip': request.META.get('REMOTE_ADDR', '127.0.0.1'),
            'user_agent': request.META.get('HTTP_USER_AGENT', ''),
            'referrer': request.META.get('HTTP_REFERER', ''),
            'comment_type': 'comment',
            'comment_author': comment.user_name.encode('utf-8'),
        }

        if ak.comment_check(comment.comment.encode('utf-8'),
                            data=data,
                            build_data=True):
            comment.flags.create(user=comment.content_object.author,
                                 flag='spam')
            comment.is_public = False
            comment.save()
Exemplo n.º 16
0
def spam_check_comment(sender, comment, request, **kwargs):
    """
    Filter comments using TypePad AntiSpam or Akismet.
    If typepad_antispam_api_key is set in the Aggregator model, we use that.
    If it's not, and akismet_api_key is set, we use that.
    From http://sciyoshi.com/blog/2008/aug/27/using-akismet-djangos-new-comments-framework/ and
    'Practical Django Projects' 2nd edition.
    """
    # spam checking can be enabled/disabled per the comment's target Model
    #if comment.content_type.model_class() != Entry:
    #    return

    try:
        from akismet import Akismet
    except:
        return

    current_aggregator = Aggregator.objects.get_current()
    
    if not current_aggregator.test_comments_for_spam:
        # Only continue testing if the spam test is switched on.
        return

    if current_aggregator.typepad_antispam_api_key:
        # Use TypePad's AntiSpam if the key is specified.
        ak = Akismet(
            key=current_aggregator.typepad_antispam_api_key,
            blog_url='http://%s/' % Site.objects.get_current().domain
        )
        ak.baseurl = 'api.antispam.typepad.com/1.1/'
    elif current_aggregator.akismet_api_key:
        # Or use Akismet if the key is there.
        ak = Akismet(
            key=current_aggregator.akismet_api_key,
            blog_url='http://%s/' % Site.objects.get_current().domain
        )
    else:
        # Otherwise, no spam filtering.
        return

    if ak.verify_key():
        data = {
            'user_ip': comment.ip_address,
            'comment_type': 'comment',
            'comment_author': comment.user_name.encode('utf-8'),
        }
        if comment.user_url:
            data['comment_author_url'] = comment.user_url
        # When run from a unit test there was no refererer or user_agent.
        try:
            data['referrer'] = request.META['HTTP_REFERER']
        except:
            data['referrer'] = ''
        try:
            data['user_agent'] = request.META['HTTP_USER_AGENT']
        except:
            data['user_agent'] = ''

        if ak.comment_check(smart_str(comment.comment), data=data, build_data=True):
            if hasattr(comment.content_object,'author'):
                user = comment.content_object.author
            else:
                from django.contrib.auth.models import User
                user = User.objects.filter(is_superuser=True)[0]
            comment.flags.create(
                user=user,
                flag='spam'
            )
            comment.is_public = False
            comment.save()