X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/e5e5de37eb43fbdbe45394d220fead223047fd5b..8058fe3f8e019699a3032c1e8e7d02015c7e2612:/forum_modules/akismet/startup.py diff --git a/forum_modules/akismet/startup.py b/forum_modules/akismet/startup.py index 595447c..2107bbb 100644 --- a/forum_modules/akismet/startup.py +++ b/forum_modules/akismet/startup.py @@ -1,5 +1,6 @@ from django.utils.translation import ugettext as _ from django.http import HttpResponse, HttpResponseRedirect +from django.template import RequestContext from django.utils import simplejson from django.utils.encoding import smart_str from django.shortcuts import render_to_response @@ -7,10 +8,14 @@ from forum.modules import decorate from forum import views from lib.akismet import Akismet from forum.settings import APP_URL, OSQA_VERSION + from settings import WORDPRESS_API_KEY, REP_FOR_NO_SPAM_CHECK + from forum.models.user import User +from forum.forms.general import SimpleCaptchaForm import settings +import logging def can_bypass_spam_check(user): return user.is_authenticated and (user.is_superuser or user.is_staff or cmp(int(user.reputation), REP_FOR_NO_SPAM_CHECK) > 0) @@ -18,8 +23,8 @@ def can_bypass_spam_check(user): def check_spam(param, comment_type): def wrapper(origin, request, *args, **kwargs): - if request.POST and request.POST.get(param, None) and WORDPRESS_API_KEY and (not can_bypass_spam_check( - request.user)): + if request.POST and request.POST.get(param, None) and WORDPRESS_API_KEY and (not can_bypass_spam_check(request.user)): + comment = smart_str(request.POST[param]) data = { @@ -38,6 +43,9 @@ def check_spam(param, comment_type): api = Akismet(settings.WORDPRESS_API_KEY, APP_URL, "OSQA/%s" % OSQA_VERSION) if api.comment_check(comment, data): + post_data = request.POST + captcha_form = SimpleCaptchaForm(request.POST) + if request.is_ajax(): response = { 'success': False, @@ -45,9 +53,19 @@ def check_spam(param, comment_type): } return HttpResponse(simplejson.dumps(response), mimetype="application/json") else: - return render_to_response('modules/akismet/foundspam.html', { - 'action_name': comment_type - }) + captcha_checked = False + try: + if captcha_form.is_valid() and 'recaptcha' in captcha_form.fields.keys(): + captcha_checked = True + except: + pass + + if not captcha_checked: + return render_to_response('modules/akismet/foundspam.html', { + 'action_name': comment_type, + 'post_data' : post_data, + 'captcha_form' : captcha_form, + }, RequestContext(request)) return origin(request, *args, **kwargs) @@ -57,5 +75,3 @@ def check_spam(param, comment_type): decorate(views.writers.ask)(check_spam('text', _('question'))) decorate(views.writers.answer)(check_spam('text', _('answer'))) decorate(views.commands.comment)(check_spam('comment', _('comment'))) - -