Show login target on the login screen
[cascardo/ipsilon.git] / ipsilon / login / common.py
index 2fee357..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:
@@ -202,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 = ''
 
@@ -216,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: