smoother handling of when backend cannot be reached at all
[myslice.git] / portal / homeview.py
index a66cd36..fb01240 100644 (file)
@@ -6,6 +6,7 @@ from django.contrib.auth import authenticate, login, logout
 from django.template import RequestContext
 from django.shortcuts import render_to_response
 
+from manifold.manifoldresult import ManifoldResult
 from myslice.viewutils import topmenu_items, the_user
 from myslice.config import Config
 
@@ -24,8 +25,20 @@ class HomeView (View):
         # pass request within the token, so manifold session key can be attached to the request session.
         token = {'username': username, 'password': password, 'request': request}    
 
-        user = authenticate(token=token)
-        if user is not None:
+        # our authenticate function returns either
+        # . a ManifoldResult - when something has gone wrong, like e.g. backend is unreachable
+        # . a django User in case of success
+        # . or None if the backend could be reached but the authentication failed
+        auth_result = authenticate(token=token)
+        # high-level errors, like connection refused or the like
+        if isinstance (auth_result, ManifoldResult):
+            manifoldresult = auth_result
+            # let's use ManifoldResult.__repr__
+            env['state']="%s"%manifoldresult
+            return render_to_response('home-view.html',env, context_instance=RequestContext(request))
+        # user was authenticated at the backend
+        elif auth_result is not None:
+            user=auth_result
             if user.is_active:
                 print "LOGGING IN"
                 login(request, user)
@@ -33,6 +46,7 @@ class HomeView (View):
             else:
                 env['state'] = "Your account is not active, please contact the site admin."
                 return render_to_response('home-view.html',env, context_instance=RequestContext(request))
+        # otherwise
         else:
             env['state'] = "Your username and/or password were incorrect."
             return render_to_response('home-view.html',env, context_instance=RequestContext(request))