admin section in left sidebar; project switch in navbar

Change-Id: I3a74e4aee11d479efa0b7fb41957a8e6e86fa1cd
Signed-off-by: lombardofr <lombardo@everyup.it>
diff --git a/authosm/backend.py b/authosm/backend.py
index 6c23e91..9c316a9 100644
--- a/authosm/backend.py
+++ b/authosm/backend.py
@@ -19,8 +19,8 @@
 from lib.osm.osmclient.clientv2 import Client
 from .exceptions import OSMAuthException
 
-class OsmBackend(object):
 
+class OsmBackend(object):
     def authenticate(self, **kwargs):
         '''
         kwargs will receive the python dict that may contain
@@ -40,20 +40,17 @@
                 try:
                     user = OsmUser.objects.get(username=username)
                     user.psw = password
-                    user.token=result['data']['id']
-                    user.project_id=result['data']['project_id']
-                    user.token_expires=result['data']['expires']
-                    user.session = result['data']
+                    user.token = result['data']['id']
+                    user.project_id = result['data']['project_id']
+                    user.token_expires = result['data']['expires']
+                    user.is_admin = bool(result['data']['admin'])
                     user.save()
-
                 except OsmUser.DoesNotExist:
                     user = OsmUser(username=username, psw=password, token=result['data']['id'],
-                                                       project_id=result['data']['project_id'],
-                                                       token_expires=result['data']['expires'])
-                    user.session = result['data']
+                                   project_id=result['data']['project_id'],
+                                   token_expires=result['data']['expires'], is_admin=result['data']['admin'])
                     user.save()
 
-
                 return user
 
         return None
@@ -62,4 +59,4 @@
         try:
             return OsmUser.objects.get(pk=user_id)
         except OsmUser.DoesNotExist:
-            return None
\ No newline at end of file
+            return None
diff --git a/authosm/models.py b/authosm/models.py
index 36a7b1b..790e684 100644
--- a/authosm/models.py
+++ b/authosm/models.py
@@ -89,6 +89,14 @@
             return {'id': self.token, 'expires': self.token_expires, 'project_id': self.project_id}
         return None
 
+    def get_projects(self):
+        client = Client()
+        result = client.get_user_info(self.get_token(), self.username)
+        if 'error' in result and result['error'] is True:
+            return []
+        else:
+            return result['data']['projects']
+
     def switch_project(self, project_id):
         client = Client()
         result = client.switch_project({'project_id': project_id, 'username': self.username, 'password': self.psw})
diff --git a/authosm/views.py b/authosm/views.py
index 65b1ed6..f82f4dd 100644
--- a/authosm/views.py
+++ b/authosm/views.py
@@ -43,11 +43,11 @@
         if user and user.is_active:
             if user.is_authenticated:
                 login(request, user)
-                request.session['token'] = user.session
+                request.session['projects'] = user.get_projects()
                 if next_page == "" or next_page is None:
                     return HttpResponseRedirect('/home')
                 else:
                     return HttpResponseRedirect(next_page)
         else:
             error_message = 'Login failed!'
-    return render(request, 'login.html', {'error_message':error_message, 'collapsed_sidebar': False})
+    return render(request, 'login.html', {'error_message': error_message, 'collapsed_sidebar': False})