Browse Source

Signin kind of works now, but ignores bans and activation

Rafał Pitoń 11 years ago
parent
commit
28bdfac767

+ 7 - 1
misago/conf/context_processors.py

@@ -1,5 +1,11 @@
+from django.conf import settings
 from misago.conf.dbsettings import db_settings
 
 
 def settings(request):
-    return {'misago_settings': db_settings}
+    return {
+        'misago_settings': db_settings,
+        'LOGIN_REDIRECT_URL': 'misago:index',
+        'LOGIN_URL': 'misago:login',
+        'LOGOUT_URL': 'misago:logout',
+    }

+ 5 - 1
misago/conf/defaults.py

@@ -141,8 +141,12 @@ AUTHENTICATION_BACKENDS = (
     'misago.users.authbackends.MisagoBackend',
 )
 
-
 # How many e-mails should be sent in single step.
 # This is used for conserving memory usage when mailing many users at same time
 
 MISAGO_MAILER_BATCH_SIZE = 20
+
+# Auth paths
+LOGIN_REDIRECT_URL = 'misago:index'
+LOGIN_URL = 'misago:login'
+LOGOUT_URL = 'misago:logout'

+ 2 - 1
misago/templates/misago/navbar.html

@@ -15,9 +15,10 @@
     <!-- Collect the nav links, forms, and other content for toggling -->
     <div class="collapse navbar-collapse">
       {% if user.is_authenticated %}
+      BLAM UR AUTHENTICATED
       {% else %}
       <div class="navbar-nav-guest navbar-right">
-        <a href="{% url 'misago:login' %}" class="btn btn-sign-in navbar-btn">{% trans "Sign in" %}</a>
+        <a href="{% url LOGIN_URL %}" class="btn btn-sign-in navbar-btn">{% trans "Sign in" %}</a>
         <a href="#" class="btn btn-register navbar-btn">{% trans "Register" %}</a>
       </div>
       {% endif %}

+ 30 - 0
misago/users/tests/test_auth_views.py

@@ -0,0 +1,30 @@
+from django.contrib.auth import get_user_model
+from django.test import TestCase
+
+
+class LoginViewTests(TestCase):
+    def test_view_get_returns_200(self):
+        """login view returns 200 on GET"""
+        response = self.client.get(reverse('misago:login'))
+        self.assertEqual(response.status_code, 200)
+
+    def test_view_post_returns_200(self):
+        """login view returns 200 on POST"""
+        response = self.client.post(
+            reverse('misago:login')
+            data={'username': 'nope', 'password': 'nope'})
+
+        self.assertEqual(response.status_code, 200)
+        self.assertIn(response.content, "Your login or password is incorrect.")
+
+    def test_view_post_creds_returns_200(self):
+        """login view returns 200 on POST with signin credentials"""
+
+        User = get_user_model()
+        User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
+
+        response = self.client.post(
+            reverse('misago:login')
+            data={'username': 'Bob', 'password': 'Pass.123'})
+
+        self.assertEqual(response.status_code, 301)

+ 14 - 2
misago/users/views/auth.py

@@ -1,6 +1,8 @@
-from django.contrib.auth import authenticate, login
+from django.conf import settings
+from django.contrib import auth, messages
 from django.http import Http404
 from django.shortcuts import render, redirect
+from django.utils.translation import ugettext as _
 from django.views.decorators.debug import sensitive_post_parameters
 from django.views.decorators.cache import never_cache
 from django.views.decorators.csrf import csrf_protect
@@ -19,7 +21,13 @@ def login(request):
     if request.method == 'POST':
         form = AuthenticationForm(request, data=request.POST)
         if form.is_valid():
+            message = _("Welcome back, %(username)s! You have been signed "
+                        "in successfully.")
+            messages.success(
+                request, message % {'username': form.user_cache.username})
+            auth.login(request, form.user_cache)
             request.session.pop('login_ban', None)
+            return redirect(settings.LOGIN_REDIRECT_URL)
 
     return render(request, 'misago/login.html', {'form': form})
 
@@ -29,13 +37,17 @@ def login(request):
 @csrf_protect
 @never_cache
 def logout(request):
+    message = _("%(username)s, you have been signed out.")
+    messages.info(
+        request, message % {'username': form.user_cache.username})
+    auth_logout(request)
     return redirect('misago:index')
 
 
 @never_cache
 def login_banned(request):
     try:
-        ban = request.session.['login_ban']
+        ban = request.session['login_ban']
     except KeyError:
         Http404()