Show login target on the login screen
[cascardo/ipsilon.git] / ipsilon / login / common.py
index 3f44c15..94284b0 100755 (executable)
@@ -49,9 +49,17 @@ class LoginManagerBase(PluginObject, Log):
         if self.info:
             userattrs = self.info.get_user_attrs(username)
             if userdata:
-                userdata.update(userattrs or {})
+                userdata.update(userattrs.get('userdata', {}))
             else:
-                userdata = userattrs
+                userdata = userattrs.get('userdata', {})
+
+            # merge groups and extras from login plugin and info plugin
+            userdata['groups'] = list(set(userdata.get('groups', []) +
+                                          userattrs.get('groups', [])))
+
+            userdata['extras'] = userdata.get('extras', {})
+            userdata['extras'].update(userattrs.get('extras', {}))
+
             self.debug("User %s attributes: %s" % (username, repr(userdata)))
 
         if auth_type:
@@ -79,6 +87,7 @@ class LoginManagerBase(PluginObject, Log):
         # on direct login the UI (ie not redirected by a provider) we ned to
         # remove the transaction cookie as it won't be needed anymore
         if trans.provider == 'login':
+            self.debug('Wiping transaction data')
             trans.wipe()
         raise cherrypy.HTTPRedirect(redirect)
 
@@ -201,8 +210,10 @@ class LoginFormBase(LoginPageBase):
         if username is None:
             username = ''
 
+        target = None
         if self.trans is not None:
             tid = self.trans.transaction_id
+            target = self.trans.retrieve().get('login_target')
         if tid is None:
             tid = ''
 
@@ -215,6 +226,7 @@ class LoginFormBase(LoginPageBase):
             "description": self.lm.help_text,
             "next_url": next_url,
             "username": username,
+            "login_target": target,
         }
         context.update(kwargs)
         if self.trans is not None: