diff --git a/.gitignore b/.gitignore index dd52f53..e0c2b05 100755 --- a/.gitignore +++ b/.gitignore @@ -57,4 +57,7 @@ media/c/m.scss media/c/m.scss -*.sqlite \ No newline at end of file +*.sqlite + +vagrant_bootstrap.sh +Vagrantfile \ No newline at end of file diff --git a/docs/example_app.rst b/docs/example_app.rst index 297141f..bffa7dc 100644 --- a/docs/example_app.rst +++ b/docs/example_app.rst @@ -12,7 +12,7 @@ Clone the repo and run the included example django project:: Guide ----- -The example app utlizes a basic configuration with +The example app utilizes a basic configuration with `django-registration `_ for verifying emails. Therefore the list of views in diff --git a/hunger/middleware.py b/hunger/middleware.py index 52d8164..7a768b1 100644 --- a/hunger/middleware.py +++ b/hunger/middleware.py @@ -58,7 +58,9 @@ def process_view(self, request, view_func, view_args, view_kwargs): 'django.contrib.staticfiles.views'] # All hunger views, except NotBetaView, are off limits until in beta - whitelisted_views = ['hunger.views.NotBetaView'] + whitelisted_views = ['hunger.views.NotBetaView', + 'hunger.views.verify_invite', + 'hunger.views.InvalidView'] short_name = view_func.__class__.__name__ if short_name == 'function': diff --git a/hunger/templates/hunger/invalid.html b/hunger/templates/hunger/invalid.html new file mode 100644 index 0000000..2bd15f6 --- /dev/null +++ b/hunger/templates/hunger/invalid.html @@ -0,0 +1 @@ +You have an invalid Invite Code. \ No newline at end of file diff --git a/hunger/views.py b/hunger/views.py index f788002..19d3a78 100644 --- a/hunger/views.py +++ b/hunger/views.py @@ -5,6 +5,7 @@ from hunger.utils import setting, now from django.views.generic.base import TemplateView from django.views.generic.edit import FormView +from django.contrib.auth.decorators import login_required class InviteView(FormView): @@ -55,7 +56,11 @@ class InviteSentView(TemplateView): template_name = 'hunger/invite_sent.html' +@login_required def verify_invite(request, code): + """ + Verify new invitee by storing invite code in cookie for middleware to validate. + """ response = redirect(setting('HUNGER_VERIFIED_REDIRECT')) response.set_cookie('hunger_code', code) return response diff --git a/tests/tests.py b/tests/tests.py index e1a2501..7442b2d 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -116,3 +116,9 @@ def test_invite_existing_user_without_email(self): response = self.client.get(reverse('invited_only')) # Alice should be denied, since she has no connection with email account self.assertEqual(response.status_code, 302) + + def test_invalid_code(self): + invalid_code = 'XXXXinvalidcodeXXXX' + self.client.login(username='alice', password='secret') + response = self.client.get(reverse('hunger-verify', args=[invalid_code]), follow=True) + self.assertRedirects(response, reverse('hunger-invalid', args=[invalid_code])) \ No newline at end of file