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
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
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
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
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
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)
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)
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
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()
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
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()
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()
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()
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
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()
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()