From ee1cb77aba63688ea43219a6c01365acb2ce5370 Mon Sep 17 00:00:00 2001 From: Michael Blatherwick Date: Mon, 10 Jun 2013 12:33:30 +0100 Subject: [PATCH 1/9] Fix signup form cleaning when not using activation Checking whether a username / email address is in use by an active or unconfirmed account (for purposes of showing a helpful error message) should take into account the value of USERENA_ACTIVATION_REQUIRED: if this is False then any conflicting attempt will incorrectly receive the 'This username is already taken...' message as there will not be any associated UserenaSignup objects. --- userena/forms.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/userena/forms.py b/userena/forms.py index 23324ad3..16e2e8d6 100644 --- a/userena/forms.py +++ b/userena/forms.py @@ -52,7 +52,7 @@ def clean_username(self): except get_user_model().DoesNotExist: pass else: - if UserenaSignup.objects.filter(user__username__iexact=self.cleaned_data['username']).exclude(activation_key=userena_settings.USERENA_ACTIVATED): + if userena_settings.USERENA_ACTIVATION_REQUIRED and UserenaSignup.objects.filter(user__username__iexact=self.cleaned_data['username']).exclude(activation_key=userena_settings.USERENA_ACTIVATED): raise forms.ValidationError(_('This username is already taken but not confirmed. Please check you email for verification steps.')) raise forms.ValidationError(_('This username is already taken.')) if self.cleaned_data['username'].lower() in userena_settings.USERENA_FORBIDDEN_USERNAMES: @@ -62,7 +62,7 @@ def clean_username(self): def clean_email(self): """ Validate that the e-mail address is unique. """ if get_user_model().objects.filter(email__iexact=self.cleaned_data['email']): - if UserenaSignup.objects.filter(user__email__iexact=self.cleaned_data['email']).exclude(activation_key=userena_settings.USERENA_ACTIVATED): + if userena_settings.USERENA_ACTIVATION_REQUIRED and UserenaSignup.objects.filter(user__email__iexact=self.cleaned_data['email']).exclude(activation_key=userena_settings.USERENA_ACTIVATED): raise forms.ValidationError(_('This email is already in use but not confirmed. Please check you email for verification steps.')) raise forms.ValidationError(_('This email is already in use. Please supply a different email.')) return self.cleaned_data['email'] From 5413bbd1705929e45b2d01c19f5274f75904b24a Mon Sep 17 00:00:00 2001 From: Michael Blatherwick Date: Tue, 11 Jun 2013 17:49:23 +0200 Subject: [PATCH 2/9] Bump version --- userena/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/userena/__init__.py b/userena/__init__.py index 0136f324..d8261e62 100644 --- a/userena/__init__.py +++ b/userena/__init__.py @@ -2,7 +2,7 @@ Django accounts management made easy. """ -VERSION = (1, 2, 1) +VERSION = (1, 2, 2) __version__ = '.'.join((str(each) for each in VERSION[:4])) From 60040900303dbfb2e7f527bb87714d8417b53c77 Mon Sep 17 00:00:00 2001 From: Joshua French Date: Thu, 25 Jul 2013 22:00:54 -0400 Subject: [PATCH 3/9] Added USERENA_DISABLE_SIGNUP. --- docs/settings.rst | 7 +++++++ userena/settings.py | 4 ++++ userena/tests/views.py | 9 +++++++++ userena/views.py | 4 ++++ 4 files changed, 24 insertions(+) diff --git a/docs/settings.rst b/docs/settings.rst index 7427f9ce..d98fc081 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -197,6 +197,13 @@ Default: ``False`` (boolean) Boolean value that defines if the ``profile_list`` view is enabled within the project. If so, users can view a list of different profiles. +USERENA_DISABLE_SIGNUP +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Default: ``False`` (boolean) + +Boolean value that defines if signups are disabled within the project. If so, +users trying to sign up will be denied. + USERENA_USE_MESSAGES ~~~~~~~~~~~~~~~~~~~~ Default: ``True`` (boolean) diff --git a/userena/settings.py b/userena/settings.py index da6e394c..84b88d80 100644 --- a/userena/settings.py +++ b/userena/settings.py @@ -87,6 +87,10 @@ 'USERENA_DISABLE_PROFILE_LIST', False) +USERENA_DISABLE_SIGNUP = getattr(settings, + 'USERENA_DISABLE_SIGNUP', + False) + USERENA_USE_MESSAGES = getattr(settings, 'USERENA_USE_MESSAGES', True) diff --git a/userena/tests/views.py b/userena/tests/views.py index 155435ac..48104733 100644 --- a/userena/tests/views.py +++ b/userena/tests/views.py @@ -156,6 +156,15 @@ def test_signup_view(self): # Back to default userena_settings.USERENA_WITHOUT_USERNAMES = False + + # Check for 403 with signups disabled + userena_settings.USERENA_DISABLE_SIGNUP = True + + response = self.client.get(reverse('userena_signup')) + self.assertEqual(response.status_code, 403) + + # Back to default + userena_settings.USERENA_DISABLE_SIGNUP = False def test_signup_view_signout(self): """ Check that a newly signed user shouldn't be signed in. """ diff --git a/userena/views.py b/userena/views.py index 09342731..b234f471 100644 --- a/userena/views.py +++ b/userena/views.py @@ -106,6 +106,10 @@ def signup(request, signup_form=SignupForm, Form supplied by ``signup_form``. """ + # If signup is disabled, return 403 + if userena_settings.USERENA_DISABLE_SIGNUP: + return HttpResponseForbidden(_("Signups are disabled.")) + # If no usernames are wanted and the default form is used, fallback to the # default form that doesn't display to enter the username. if userena_settings.USERENA_WITHOUT_USERNAMES and (signup_form == SignupForm): From 973c00784b6173b8f4d7e802edfeb17f81bd61fe Mon Sep 17 00:00:00 2001 From: tepez Date: Thu, 15 Aug 2013 17:01:19 +0300 Subject: [PATCH 4/9] add USERENA_REGISTER_PROFILE and USERENA_REGISTER_USER settings --- userena/settings.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/userena/settings.py b/userena/settings.py index da6e394c..9c042f1b 100644 --- a/userena/settings.py +++ b/userena/settings.py @@ -106,3 +106,7 @@ settings, 'USERENA_PROFILE_LIST_TEMPLATE', 'userena/profile_list.html') USERENA_HIDE_EMAIL = getattr(settings, 'USERENA_HIDE_EMAIL', False) + +USERENA_REGISTER_PROFILE = getattr(settings, 'USERENA_REGISTER_PROFILE', True) + +USERENA_REGISTER_USER = getattr(settings, 'USERENA_REGISTER_USER', True) From 82101b15660960a005c75a887ba5e1af32ba1f4d Mon Sep 17 00:00:00 2001 From: tepez Date: Thu, 15 Aug 2013 17:02:45 +0300 Subject: [PATCH 5/9] conditionally register user and profile --- userena/admin.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/userena/admin.py b/userena/admin.py index 912bb30d..efd7248a 100644 --- a/userena/admin.py +++ b/userena/admin.py @@ -16,10 +16,14 @@ class UserenaAdmin(UserAdmin, GuardedModelAdmin): 'is_staff', 'is_active', 'date_joined') list_filter = ('is_staff', 'is_superuser', 'is_active') -try: - admin.site.unregister(get_user_model()) -except admin.sites.NotRegistered: - pass -admin.site.register(get_user_model(), UserenaAdmin) -admin.site.register(get_profile_model()) +if settings.USERENA_REGISTER_USER: + try: + admin.site.unregister(get_user_model()) + except admin.sites.NotRegistered: + pass + + admin.site.register(get_user_model(), UserenaAdmin) + +if settings.USERENA_REGISTER_PROFILE: + admin.site.register(get_profile_model()) From 6cf316d036c46638a9c2151c6f642af8398481f6 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sun, 18 Aug 2013 13:45:56 +0200 Subject: [PATCH 6/9] Fix for password reset --- userena/urls.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/userena/urls.py b/userena/urls.py index c7d7a2c6..992b4a42 100644 --- a/userena/urls.py +++ b/userena/urls.py @@ -22,7 +22,9 @@ url(r'^password/reset/$', auth_views.password_reset, {'template_name': 'userena/password_reset_form.html', - 'email_template_name': 'userena/emails/password_reset_message.txt'}, + 'email_template_name': 'userena/emails/password_reset_message.txt', + 'extra_context': {'without_username': userena_settings.USERENA_WITHOUT_USERNAMES} + }, name='userena_password_reset'), url(r'^password/reset/done/$', auth_views.password_reset_done, From 4d8e163156a86793b86d7da75cad8fed460b7142 Mon Sep 17 00:00:00 2001 From: art-zhitnik Date: Mon, 19 Aug 2013 09:28:46 +1000 Subject: [PATCH 7/9] More clear message saying to use latin letters only (not cyrillic) --- userena/locale/ru/LC_MESSAGES/django.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/userena/locale/ru/LC_MESSAGES/django.po b/userena/locale/ru/LC_MESSAGES/django.po index 4c6f1d87..a28196d5 100644 --- a/userena/locale/ru/LC_MESSAGES/django.po +++ b/userena/locale/ru/LC_MESSAGES/django.po @@ -25,7 +25,7 @@ msgstr "Имя пользователя" #: forms.py:32 tests/forms.py:26 msgid "Username must contain only letters, numbers, dots and underscores." msgstr "" -"Имя пользователя должно содержать только буквы, цифры, точки и подчёркивания." +"Имя пользователя должно содержать только латинские буквы, цифры, точки и подчёркивания." #: forms.py:35 forms.py:162 templates/userena/profile_detail.html:35 msgid "Email" From 285549ed22d11b129b7b73cbc2ebf482a566d95f Mon Sep 17 00:00:00 2001 From: Petar Radosevic Date: Mon, 19 Aug 2013 08:36:51 +0200 Subject: [PATCH 8/9] Fix `run_tests` command with `django_coverage`. --- demo/demo/settings.py | 2 +- demo/requirements.txt | 3 +++ run_tests | 12 +++--------- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/demo/demo/settings.py b/demo/demo/settings.py index f88afb83..403947cf 100644 --- a/demo/demo/settings.py +++ b/demo/demo/settings.py @@ -152,4 +152,4 @@ ANONYMOUS_USER_ID = -1 # Test runner -TEST_RUNNER = 'django.test.simple.DjangoTestSuiteRunner' +TEST_RUNNER = 'django_coverage.coverage_runner.CoverageRunner' diff --git a/demo/requirements.txt b/demo/requirements.txt index 7f1ca00c..233ee9ac 100644 --- a/demo/requirements.txt +++ b/demo/requirements.txt @@ -15,3 +15,6 @@ South # Userena django-userena + +# Coverage for testing +django_coverage diff --git a/run_tests b/run_tests index ab67147e..12b1aa62 100755 --- a/run_tests +++ b/run_tests @@ -1,20 +1,14 @@ #!/usr/bin/env bash -# TODO: How to tell setup.py to only run some tests. - case $1 in userena ) echo -e "\033[1mRunning tests for userena.\033[0m" - cmd="coverage run demo/manage.py test userena" - report_cmd="coverage report -m userena/*.py userena/management/commands/*.py" + cmd="demo/manage.py test userena" ;; umessages ) echo -e "\033[1mRunning tests for umessages.\033[0m" - cmd="coverage run demo/manage.py test umessages" - report_cmd="coverage report -m userena/contrib/umessages/*.py" + cmd="demo/manage.py test umessages" ;; * ) echo -e "\033[1mRunning all tests.\033[0m" - cmd="coverage run demo/manage.py test userena umessages" - report_cmd="coverage report -m userena/*.py userena/management/commands/*py userena/contrib/umessages/*.py" + cmd="demo/manage.py test userena umessages" esac $cmd -$report_cmd From 9e82d91a8c6fa90eb9a14e0eb86093f4955ac2fa Mon Sep 17 00:00:00 2001 From: Petar Radosevic Date: Mon, 19 Aug 2013 08:40:40 +0200 Subject: [PATCH 9/9] Fix indentation and version number. --- docs/index.rst | 2 +- userena/settings.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index ed665aa6..87d30367 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -6,7 +6,7 @@ Userena Introduction ==================== -This documentation covers 1.2.1 release of django-userena application. A Django +This documentation covers 1.2.2 release of django-userena application. A Django application that takes care of your account needs. Why userena? diff --git a/userena/settings.py b/userena/settings.py index 84b88d80..eca1f2c9 100644 --- a/userena/settings.py +++ b/userena/settings.py @@ -88,8 +88,8 @@ False) USERENA_DISABLE_SIGNUP = getattr(settings, - 'USERENA_DISABLE_SIGNUP', - False) + 'USERENA_DISABLE_SIGNUP', + False) USERENA_USE_MESSAGES = getattr(settings, 'USERENA_USE_MESSAGES',