summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2011-07-31 17:19:51 -0400
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2011-07-31 17:19:51 -0400
commitcd7566110fe7f6cd0b64e8e6175146b1c47f4799 (patch)
treed496588ea3abb061b8a521960b862a42cf3e5bdf
parente44e933836dea8bd8498bd116c739d5715121720 (diff)
parente9df588ed072fd943199b68152393c6020c10f7b (diff)
downloadaskbot-cd7566110fe7f6cd0b64e8e6175146b1c47f4799.tar.gz
askbot-cd7566110fe7f6cd0b64e8e6175146b1c47f4799.tar.bz2
askbot-cd7566110fe7f6cd0b64e8e6175146b1c47f4799.zip
Merge branch 'remove-recaptcha-module'
-rwxr-xr-x.gitignore1
-rw-r--r--askbot/deps/django_authopenid/forms.py4
-rw-r--r--askbot/deps/django_authopenid/views.py2
-rw-r--r--askbot/deps/recaptcha_django/.svn/all-wcprops17
-rw-r--r--askbot/deps/recaptcha_django/.svn/entries52
-rw-r--r--askbot/deps/recaptcha_django/.svn/format1
-rw-r--r--askbot/deps/recaptcha_django/.svn/text-base/__init__.py.svn-base76
-rw-r--r--askbot/deps/recaptcha_django/.svn/text-base/middleware.py.svn-base12
-rw-r--r--askbot/deps/recaptcha_django/__init__.py88
-rw-r--r--askbot/deps/recaptcha_django/docs/.svn/all-wcprops11
-rw-r--r--askbot/deps/recaptcha_django/docs/.svn/entries40
-rw-r--r--askbot/deps/recaptcha_django/docs/.svn/format1
-rw-r--r--askbot/deps/recaptcha_django/docs/.svn/text-base/overview.txt.svn-base1
-rw-r--r--askbot/deps/recaptcha_django/docs/overview.txt1
-rw-r--r--askbot/deps/recaptcha_django/middleware.py12
-rw-r--r--askbot/forms.py4
-rw-r--r--askbot/setup_templates/settings.py2
-rw-r--r--askbot/startup_procedures.py16
-rwxr-xr-xaskbot/upfiles/favicon-(1).icobin0 -> 1406 bytes
-rw-r--r--askbot_requirements.txt (renamed from requirements.txt)5
-rw-r--r--setup.py2
21 files changed, 27 insertions, 321 deletions
diff --git a/.gitignore b/.gitignore
index 98ad33f6..15b8d802 100755
--- a/.gitignore
+++ b/.gitignore
@@ -39,3 +39,4 @@ askbot/skins/common/media/mathjax/
/jinja2
*.tar.tz
run
+recaptcha
diff --git a/askbot/deps/django_authopenid/forms.py b/askbot/deps/django_authopenid/forms.py
index 065a2186..d9bb7261 100644
--- a/askbot/deps/django_authopenid/forms.py
+++ b/askbot/deps/django_authopenid/forms.py
@@ -37,7 +37,7 @@ from django.conf import settings
from askbot.conf import settings as askbot_settings
from askbot import const as askbot_const
from django.utils.safestring import mark_safe
-from askbot.deps.recaptcha_django import ReCaptchaField
+from recaptcha_works.fields import RecaptchaField
from askbot.utils.forms import NextUrlField, UserNameField, UserEmailField, SetPasswordForm
# needed for some linux distributions like debian
@@ -322,7 +322,7 @@ class SafeClassicRegisterForm(ClassicRegisterForm):
"""this form uses recaptcha in addition
to the base register form
"""
- recaptcha = ReCaptchaField(
+ recaptcha = RecaptchaField(
private_key = askbot_settings.RECAPTCHA_SECRET,
public_key = askbot_settings.RECAPTCHA_KEY
)
diff --git a/askbot/deps/django_authopenid/views.py b/askbot/deps/django_authopenid/views.py
index 212e94ff..5610a7fb 100644
--- a/askbot/deps/django_authopenid/views.py
+++ b/askbot/deps/django_authopenid/views.py
@@ -46,6 +46,7 @@ from django.utils.html import escape
from django.utils.translation import ugettext as _
from django.utils.safestring import mark_safe
from django.core.mail import send_mail
+from recaptcha_works.decorators import fix_recaptcha_remote_ip
from askbot.skins.loaders import render_into_skin, get_template
from openid.consumer.consumer import Consumer, \
@@ -877,6 +878,7 @@ def signin_failure(request, message):
@not_authenticated
@decorators.valid_password_login_provider_required
@csrf.csrf_protect
+@fix_recaptcha_remote_ip
def signup_with_password(request):
"""Create a password-protected account
template: authopenid/signup_with_password.html
diff --git a/askbot/deps/recaptcha_django/.svn/all-wcprops b/askbot/deps/recaptcha_django/.svn/all-wcprops
deleted file mode 100644
index 43324b46..00000000
--- a/askbot/deps/recaptcha_django/.svn/all-wcprops
+++ /dev/null
@@ -1,17 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 38
-/svn/!svn/ver/6/trunk/recaptcha_django
-END
-middleware.py
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/2/trunk/recaptcha_django/middleware.py
-END
-__init__.py
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/6/trunk/recaptcha_django/__init__.py
-END
diff --git a/askbot/deps/recaptcha_django/.svn/entries b/askbot/deps/recaptcha_django/.svn/entries
deleted file mode 100644
index 17e2d172..00000000
--- a/askbot/deps/recaptcha_django/.svn/entries
+++ /dev/null
@@ -1,52 +0,0 @@
-8
-
-dir
-6
-http://recaptcha-django.googlecode.com/svn/trunk/recaptcha_django
-http://recaptcha-django.googlecode.com/svn
-
-
-
-2009-12-12T22:16:04.511967Z
-6
-xdissent
-
-
-svn:special svn:externals svn:needs-lock
-
-
-
-
-
-
-
-
-
-
-
-af963488-c9ea-11dd-a8b6-f5aca7b582bb
-
-middleware.py
-file
-
-
-
-
-2010-06-13T21:04:19.000000Z
-3cf99bc9362dde824315288bfbfadb1a
-2008-12-14T15:07:18.967792Z
-2
-xdissent
-
-__init__.py
-file
-
-
-
-
-2010-06-13T21:04:19.000000Z
-a0c7720be84083264fcdfbf35f031062
-2009-12-12T22:16:04.511967Z
-6
-xdissent
-
diff --git a/askbot/deps/recaptcha_django/.svn/format b/askbot/deps/recaptcha_django/.svn/format
deleted file mode 100644
index 45a4fb75..00000000
--- a/askbot/deps/recaptcha_django/.svn/format
+++ /dev/null
@@ -1 +0,0 @@
-8
diff --git a/askbot/deps/recaptcha_django/.svn/text-base/__init__.py.svn-base b/askbot/deps/recaptcha_django/.svn/text-base/__init__.py.svn-base
deleted file mode 100644
index c95cbca2..00000000
--- a/askbot/deps/recaptcha_django/.svn/text-base/__init__.py.svn-base
+++ /dev/null
@@ -1,76 +0,0 @@
-"""
-recaptcha-django
-
-ReCAPTCHA (Completely Automated Public Turing test to tell Computers and
-Humans Apart - while helping digitize books, newspapers, and old time radio
-shows) module for django
-"""
-
-from django.forms import Widget, Field, ValidationError
-from django.conf import settings
-from django.utils.translation import get_language, ugettext_lazy as _
-from django.utils.html import conditional_escape
-from django.utils.safestring import mark_safe
-from recaptcha.client import captcha
-
-
-HUMAN_ERRORS = {
- 'unknown': _(u'Unknown error.'),
- 'invalid-site-public-key': _(u'ReCAPTCHA is wrongly configured.'),
- 'invalid-site-private-key': _(u'ReCAPTCHA is wrongly configured.'),
- 'invalid-request-cookie': _(u'Bad reCAPTCHA challenge parameter.'),
- 'incorrect-captcha-sol': _(u'The CAPTCHA solution was incorrect.'),
- 'verify-params-incorrect': _(u'Bad reCAPTCHA verification parameters.'),
- 'invalid-referrer': _(u'Provided reCAPTCHA API keys are not valid for this domain.'),
- 'recaptcha-not-reachable': _(u'ReCAPTCHA could not be reached.')
-}
-
-
-class ReCaptchaWidget(Widget):
- """
- A Widget that renders a ReCAPTCHA form
- """
- options = ['theme', 'lang', 'custom_theme_widget', 'tabindex']
-
- def render(self, name, value, attrs=None):
- final_attrs = self.build_attrs(attrs)
- error = final_attrs.get('error', None)
- html = captcha.displayhtml(settings.RECAPTCHA_PUBLIC_KEY, error=error)
- options = u',\n'.join([u'%s: "%s"' % (k, conditional_escape(v)) \
- for k, v in final_attrs.items() if k in self.options])
- return mark_safe(u"""<script type="text/javascript">
- var RecaptchaOptions = {
- %s
- };
- </script>
- %s
- """ % (options, html))
-
-
- def value_from_datadict(self, data, files, name):
- """
- Generates Widget value from data dictionary.
- """
- try:
- return {'challenge': data['recaptcha_challenge_field'],
- 'response': data['recaptcha_response_field'],
- 'ip': data['recaptcha_ip_field']}
- except KeyError:
- return None
-
-class ReCaptchaField(Field):
- """
- Field definition for a ReCAPTCHA
- """
- widget = ReCaptchaWidget
-
- def clean(self, value):
- if value is None:
- raise ValidationError(_('Invalid request'))
- resp = captcha.submit(value.get('challenge', None),
- value.get('response', None),
- settings.RECAPTCHA_PRIVATE_KEY,
- value.get('ip', None))
- if not resp.is_valid:
- self.widget.attrs['error'] = resp.error_code
- raise ValidationError(HUMAN_ERRORS.get(resp.error_code, _(u'Unknown error.')))
diff --git a/askbot/deps/recaptcha_django/.svn/text-base/middleware.py.svn-base b/askbot/deps/recaptcha_django/.svn/text-base/middleware.py.svn-base
deleted file mode 100644
index 4d592e63..00000000
--- a/askbot/deps/recaptcha_django/.svn/text-base/middleware.py.svn-base
+++ /dev/null
@@ -1,12 +0,0 @@
-class ReCaptchaMiddleware(object):
- """
- A tiny middleware to automatically add IP address to ReCaptcha
- POST requests
- """
- def process_request(self, request):
- if request.method == 'POST' and \
- 'recaptcha_challenge_field' in request.POST and \
- 'recaptcha_ip_field' not in request.POST:
- data = request.POST.copy()
- data['recaptcha_ip_field'] = request.META['REMOTE_ADDR']
- request.POST = data
diff --git a/askbot/deps/recaptcha_django/__init__.py b/askbot/deps/recaptcha_django/__init__.py
deleted file mode 100644
index bf4c90dc..00000000
--- a/askbot/deps/recaptcha_django/__init__.py
+++ /dev/null
@@ -1,88 +0,0 @@
-"""
-recaptcha-django
-
-ReCAPTCHA (Completely Automated Public Turing test to tell Computers and
-Humans Apart - while helping digitize books, newspapers, and old time radio
-shows) module for django
-"""
-
-from django.forms import Widget, Field, ValidationError
-from django.conf import settings
-from django.utils.translation import get_language, ugettext_lazy as _
-from django.utils.html import conditional_escape
-from django.utils.safestring import mark_safe
-from recaptcha.client import captcha
-from askbot.conf import settings as askbot_settings
-
-
-HUMAN_ERRORS = {
- 'unknown': _(u'Unknown error.'),
- 'invalid-site-public-key': _(u'ReCAPTCHA is wrongly configured.'),
- 'invalid-site-private-key': _(u'ReCAPTCHA is wrongly configured.'),
- 'invalid-request-cookie': _(u'Bad reCAPTCHA challenge parameter.'),
- 'incorrect-captcha-sol': _(u'The CAPTCHA solution was incorrect.'),
- 'verify-params-incorrect': _(u'Bad reCAPTCHA verification parameters.'),
- 'invalid-referrer': _(u'Provided reCAPTCHA API keys are not valid for this domain.'),
- 'recaptcha-not-reachable': _(u'ReCAPTCHA could not be reached.')
-}
-
-
-class ReCaptchaWidget(Widget):
- """
- A Widget that renders a ReCAPTCHA form
- """
- options = ['theme', 'lang', 'custom_theme_widget', 'tabindex']
-
- def __init__(self, public_key = None, *args, **kwargs):
- self.public_key = public_key
- super(ReCaptchaWidget, self).__init__(*args, **kwargs)
-
- def render(self, name, value, attrs=None):
- final_attrs = self.build_attrs(attrs)
- error = final_attrs.get('error', None)
- html = captcha.displayhtml(
- self.public_key,
- error=error
- )
- options = u',\n'.join([u'%s: "%s"' % (k, conditional_escape(v)) \
- for k, v in final_attrs.items() if k in self.options])
- return mark_safe(u"""<script type="text/javascript">
- var RecaptchaOptions = {
- %s
- };
- </script>
- %s
- """ % (options, html))
-
-
- def value_from_datadict(self, data, files, name):
- """
- Generates Widget value from data dictionary.
- """
- try:
- return {'challenge': data['recaptcha_challenge_field'],
- 'response': data['recaptcha_response_field'],
- 'ip': data['recaptcha_ip_field']}
- except KeyError:
- return None
-
-class ReCaptchaField(Field):
- """
- Field definition for a ReCAPTCHA
- """
-
- def __init__(self, private_key = None, public_key = None, *args, **kwargs):
- self.widget = ReCaptchaWidget(public_key = public_key)
- self.private_key = private_key
- super(ReCaptchaField, self).__init__(*args, **kwargs)
-
- def clean(self, value):
- if value is None:
- raise ValidationError(_('Invalid request'))
- resp = captcha.submit(value.get('challenge', None),
- value.get('response', None),
- askbot_settings.RECAPTCHA_SECRET,
- value.get('ip', None))
- if not resp.is_valid:
- self.widget.attrs['error'] = resp.error_code
- raise ValidationError(HUMAN_ERRORS.get(resp.error_code, _(u'Unknown error.')))
diff --git a/askbot/deps/recaptcha_django/docs/.svn/all-wcprops b/askbot/deps/recaptcha_django/docs/.svn/all-wcprops
deleted file mode 100644
index 6ecb5451..00000000
--- a/askbot/deps/recaptcha_django/docs/.svn/all-wcprops
+++ /dev/null
@@ -1,11 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 26
-/svn/!svn/ver/2/trunk/docs
-END
-overview.txt
-K 25
-svn:wc:ra_dav:version-url
-V 39
-/svn/!svn/ver/2/trunk/docs/overview.txt
-END
diff --git a/askbot/deps/recaptcha_django/docs/.svn/entries b/askbot/deps/recaptcha_django/docs/.svn/entries
deleted file mode 100644
index 08b3cefa..00000000
--- a/askbot/deps/recaptcha_django/docs/.svn/entries
+++ /dev/null
@@ -1,40 +0,0 @@
-8
-
-dir
-6
-http://recaptcha-django.googlecode.com/svn/trunk/docs
-http://recaptcha-django.googlecode.com/svn
-
-
-
-2008-12-14T15:07:18.967792Z
-2
-xdissent
-
-
-svn:special svn:externals svn:needs-lock
-
-
-
-
-
-
-
-
-
-
-
-af963488-c9ea-11dd-a8b6-f5aca7b582bb
-
-overview.txt
-file
-
-
-
-
-2010-06-13T21:04:19.000000Z
-c99e6eadb3fe754f0fdfd181b80ffbe4
-2008-12-14T15:07:18.967792Z
-2
-xdissent
-
diff --git a/askbot/deps/recaptcha_django/docs/.svn/format b/askbot/deps/recaptcha_django/docs/.svn/format
deleted file mode 100644
index 45a4fb75..00000000
--- a/askbot/deps/recaptcha_django/docs/.svn/format
+++ /dev/null
@@ -1 +0,0 @@
-8
diff --git a/askbot/deps/recaptcha_django/docs/.svn/text-base/overview.txt.svn-base b/askbot/deps/recaptcha_django/docs/.svn/text-base/overview.txt.svn-base
deleted file mode 100644
index 7af69d72..00000000
--- a/askbot/deps/recaptcha_django/docs/.svn/text-base/overview.txt.svn-base
+++ /dev/null
@@ -1 +0,0 @@
-TODO: add docs
diff --git a/askbot/deps/recaptcha_django/docs/overview.txt b/askbot/deps/recaptcha_django/docs/overview.txt
deleted file mode 100644
index 7af69d72..00000000
--- a/askbot/deps/recaptcha_django/docs/overview.txt
+++ /dev/null
@@ -1 +0,0 @@
-TODO: add docs
diff --git a/askbot/deps/recaptcha_django/middleware.py b/askbot/deps/recaptcha_django/middleware.py
deleted file mode 100644
index 4d592e63..00000000
--- a/askbot/deps/recaptcha_django/middleware.py
+++ /dev/null
@@ -1,12 +0,0 @@
-class ReCaptchaMiddleware(object):
- """
- A tiny middleware to automatically add IP address to ReCaptcha
- POST requests
- """
- def process_request(self, request):
- if request.method == 'POST' and \
- 'recaptcha_challenge_field' in request.POST and \
- 'recaptcha_ip_field' not in request.POST:
- data = request.POST.copy()
- data['recaptcha_ip_field'] = request.META['REMOTE_ADDR']
- request.POST = data
diff --git a/askbot/forms.py b/askbot/forms.py
index 446cbf83..153d56e6 100644
--- a/askbot/forms.py
+++ b/askbot/forms.py
@@ -10,7 +10,7 @@ from django.contrib.contenttypes.models import ContentType
from django_countries import countries
from askbot.utils.forms import NextUrlField, UserNameField
from askbot.utils.mail import extract_first_email_address
-from askbot.deps.recaptcha_django import ReCaptchaField
+from recaptcha_works.fields import RecaptchaField
from askbot.conf import settings as askbot_settings
import logging
@@ -526,7 +526,7 @@ class AdvancedSearchForm(forms.Form):
return data
class NotARobotForm(forms.Form):
- recaptcha = ReCaptchaField(
+ recaptcha = RecaptchaField(
private_key = askbot_settings.RECAPTCHA_SECRET,
public_key = askbot_settings.RECAPTCHA_KEY
)
diff --git a/askbot/setup_templates/settings.py b/askbot/setup_templates/settings.py
index 6f895ea4..be4e538d 100644
--- a/askbot/setup_templates/settings.py
+++ b/askbot/setup_templates/settings.py
@@ -103,7 +103,6 @@ MIDDLEWARE_CLASSES = (
'askbot.middleware.anon_user.ConnectToSessionMessagesMiddleware',
'askbot.middleware.pagesize.QuestionsPageSizeMiddleware',
'askbot.middleware.cancel.CancelActionMiddleware',
- 'askbot.deps.recaptcha_django.middleware.ReCaptchaMiddleware',
'django.middleware.transaction.TransactionMiddleware',
#'debug_toolbar.middleware.DebugToolbarMiddleware',
'askbot.middleware.view_log.ViewLogMiddleware',
@@ -165,6 +164,7 @@ INSTALLED_APPS = (
'djcelery',
'djkombu',
'followit',
+ 'captcha',#needs custom django-recaptcha https://github.com/ASKBOT/django-recaptcha
#'avatar',#experimental use git clone git://github.com/ericflo/django-avatar.git$
#requires setting of MEDIA_ROOT and MEDIA_URL
)
diff --git a/askbot/startup_procedures.py b/askbot/startup_procedures.py
index 63737acc..0435c0ef 100644
--- a/askbot/startup_procedures.py
+++ b/askbot/startup_procedures.py
@@ -7,10 +7,12 @@ question: why not run these from askbot/__init__.py?
the main function is run_startup_tests
"""
+import sys
from django.db import transaction
from django.conf import settings as django_settings
from django.core.exceptions import ImproperlyConfigured
from askbot.models import badges
+from askbot.utils.loading import load_module
#todo:
#
@@ -57,7 +59,6 @@ def test_middleware():
'askbot.middleware.anon_user.ConnectToSessionMessagesMiddleware',
'askbot.middleware.pagesize.QuestionsPageSizeMiddleware',
'askbot.middleware.cancel.CancelActionMiddleware',
- 'askbot.deps.recaptcha_django.middleware.ReCaptchaMiddleware',
'django.middleware.transaction.TransactionMiddleware',
'askbot.middleware.view_log.ViewLogMiddleware',
)
@@ -88,12 +89,25 @@ def test_i18n():
'it is very important for askbot.'
)
+def try_import(module_name, pypi_package_name):
+ try:
+ load_module(module_name)
+ except ImportError, e:
+ message = unicode(e) + ' run\npip install %s' % pypi_package_name
+ message += '\nTo install all the dependencies at once, type:'
+ message += '\npip install -r askbot_requirements.txt\n'
+ raise ImproperlyConfigured(message)
+
+def test_modules():
+ try_import('recaptcha_works', 'django-recaptcha-works')
+
def run_startup_tests():
"""function that runs
all startup tests, mainly checking settings config so far
"""
#todo: refactor this when another test arrives
+ test_modules()
test_askbot_url()
test_i18n()
test_middleware()
diff --git a/askbot/upfiles/favicon-(1).ico b/askbot/upfiles/favicon-(1).ico
new file mode 100755
index 00000000..4d18aaec
--- /dev/null
+++ b/askbot/upfiles/favicon-(1).ico
Binary files differ
diff --git a/requirements.txt b/askbot_requirements.txt
index ba72edb8..2cac4e63 100644
--- a/requirements.txt
+++ b/askbot_requirements.txt
@@ -3,7 +3,6 @@ Jinja2
Coffin>=0.3
South>=0.7.1
oauth2
-recaptcha-client
markdown2
html5lib
django-keyedcache
@@ -13,4 +12,6 @@ unidecode
django-countries==1.0.5
django-celery==2.2.3
django-kombu==0.9.2
--e git+git://github.com/ASKBOT/django-followit.git#egg=followit
+django-followit
+django-recaptcha-works
+python-openid
diff --git a/setup.py b/setup.py
index ddfe917d..afe8cfb6 100644
--- a/setup.py
+++ b/setup.py
@@ -12,7 +12,6 @@ install_requires = [
'Coffin>=0.3',
'South>=0.7.1',
'oauth2',
- 'recaptcha-client',
'markdown2',
'html5lib',
'django-keyedcache',
@@ -23,6 +22,7 @@ install_requires = [
'django-celery==2.2.3',
'django-kombu==0.9.2',
'django-followit',
+ 'django-recaptcha-works',
'python-openid',
]