Refactor plugin configuration
[cascardo/ipsilon.git] / ipsilon / login / authfas.py
index 8f05e82..71db372 100755 (executable)
@@ -3,9 +3,11 @@
 # Copyright (C) 2014 Ipsilon contributors, see COPYING file for license
 
 
+from ipsilon.info.common import InfoMapping
 from ipsilon.login.common import LoginFormBase, LoginManagerBase
 from ipsilon.login.common import FACILITY
 from ipsilon.util.plugin import PluginObject
+from ipsilon.util import config as pconfig
 import cherrypy
 
 from fedora.client.fasproxy import FasProxyClient
@@ -28,9 +30,23 @@ try:
 except ImportError:
     CLA_GROUPS = dict()
 
+fas_mapping = {
+    'username': 'nickname',
+    'telephone': 'phone',
+    'country_code': 'country',
+    'human_name': 'fullname',
+    'email': 'email',
+    'timezone': 'timezone',
+}
+
 
 class FAS(LoginFormBase):
 
+    def __init__(self, site, mgr, page):
+        super(FAS, self).__init__(site, mgr, page)
+        self.mapper = InfoMapping()
+        self.mapper.set_mapping(fas_mapping)
+
     def POST(self, *args, **kwargs):
         username = kwargs.get("login_name")
         password = kwargs.get("login_password")
@@ -66,12 +82,11 @@ class FAS(LoginFormBase):
         return self._template(self.formtemplate, **context)
 
     def make_userdata(self, fas_data):
-        userdata = dict()
-        userdata['fas'] = fas_data
+        userdata, fas_extra = self.mapper.map_attrs(fas_data)
 
         # compute and store groups and cla groups
         userdata['groups'] = []
-        userdata['extras'] = {'cla': []}
+        userdata['extras'] = {'fas': fas_extra, 'cla': []}
         for group in fas_data.get('approved_memberships', {}):
             if 'name' not in group:
                 continue
@@ -98,41 +113,33 @@ class LoginManager(LoginManagerBase):
         self.description = """
 Form based login Manager that uses the Fedora Authentication Server
 """
-        self._options = {
-            'help text': [
-                """ The text shown to guide the user at login time. """,
-                'string',
-                'Login wth your FAS credentials'
-            ],
-            'username text': [
-                """ The text shown to ask for the username in the form. """,
-                'string',
-                'FAS Username'
-            ],
-            'password text': [
-                """ The text shown to ask for the password in the form. """,
-                'string',
-                'Password'
-            ],
-            'FAS url': [
-                """ The FAS Url. """,
-                'string',
-                'https://admin.fedoraproject.org/accounts/'
-            ],
-            'FAS Proxy client user Agent': [
-                """ The User Agent presented to the FAS Server. """,
-                'string',
-                'Ipsilon v1.0'
-            ],
-            'FAS Insecure Auth': [
-                """ If 'YES' skips FAS server cert verification. """,
-                'string',
-                ''
-            ],
-        }
-        self.conf_opt_order = ['FAS url', 'FAS Proxy client user Agent',
-                               'FAS Insecure Auth', 'username text',
-                               'password text', 'help text']
+        self.new_config(
+            self.name,
+            pconfig.String(
+                'FAS url',
+                'The FAS Url.',
+                'https://admin.fedoraproject.org/accounts/'),
+            pconfig.String(
+                'FAS Proxy client user Agent',
+                'The User Agent presented to the FAS Server.',
+                'Ipsilon v1.0'),
+            pconfig.Condition(
+                'FAS Insecure Auth',
+                'If checked skips FAS server cert verification.',
+                False),
+            pconfig.String(
+                'username text',
+                'Text used to ask for the username at login time.',
+                'FAS Username'),
+            pconfig.String(
+                'password text',
+                'Text used to ask for the password at login time.',
+                'Password'),
+            pconfig.String(
+                'help text',
+                'Text used to guide the user at login time.',
+                'Login with your FAS credentials')
+        )
 
     @property
     def help_text(self):
@@ -197,5 +204,4 @@ class Installer(object):
             order = []
         order.append('fas')
         globalconf['order'] = ','.join(order)
-        po.set_config(globalconf)
-        po.save_plugin_config(FACILITY)
+        po.save_plugin_config(FACILITY, globalconf)