# 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 fedora.client import AuthError
+try:
+ import openid_cla.cla as cla
+
+ CLA_GROUPS = {
+ 'cla_click': cla.CLA_URI_FEDORA_CLICK,
+ 'cla_dell': cla.CLA_URI_FEDORA_DELL,
+ 'cla_done': cla.CLA_URI_FEDORA_DONE,
+ 'cla_fedora': cla.CLA_URI_FEDORA_FEDORA,
+ 'cla_fpca': cla.CLA_URI_FEDORA_FPCA,
+ 'cla_ibm': cla.CLA_URI_FEDORA_IBM,
+ 'cla_intel': cla.CLA_URI_FEDORA_INTEL,
+ 'cla_redhat': cla.CLA_URI_FEDORA_REDHAT,
+ }
+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")
except Exception, e: # pylint: disable=broad-except
cherrypy.log.error("Unknown Error [%s]" % str(e))
if data and data.user:
+ userdata = self.make_userdata(data.user)
return self.lm.auth_successful(self.trans,
data.user['username'],
- userdata={'fas': data.user})
+ userdata=userdata)
else:
error = "Authentication failed"
cherrypy.log.error(error)
# pylint: disable=star-args
return self._template(self.formtemplate, **context)
+ def make_userdata(self, fas_data):
+ userdata, fas_extra = self.mapper.map_attrs(fas_data)
+
+ # compute and store groups and cla groups
+ userdata['groups'] = []
+ userdata['extras'] = {'fas': fas_extra, 'cla': []}
+ for group in fas_data.get('approved_memberships', {}):
+ if 'name' not in group:
+ continue
+ if group.get('group_type') == 'cla':
+ if group['name'] in CLA_GROUPS:
+ userdata['extras']['cla'].append(CLA_GROUPS[group['name']])
+ else:
+ userdata['extras']['cla'].append(group['name'])
+ else:
+ userdata['groups'].append(group['name'])
+
+ return userdata
+
class LoginManager(LoginManagerBase):
self.fpc = FasProxyClient(base_url=self.fas_url,
useragent=self.user_agent,
insecure=(self.insecure == 'YES'))
- self.page = FAS(site, self, 'login/fas', 'login/fas.html')
+ self.page = FAS(site, self, 'login/fas')
return self.page
order = []
order.append('fas')
globalconf['order'] = ','.join(order)
- po.set_config(globalconf)
- po.save_plugin_config(FACILITY)
+ po.save_plugin_config(FACILITY, globalconf)