-# Copyright (C) 2014 Ipsilon contributors, see COPYING file for license
+# Copyright (C) 2014 Ipsilon project Contributors, for license see COPYING
-
-from ipsilon.info.common import InfoMapping
-from ipsilon.login.common import LoginFormBase, LoginManagerBase
+from ipsilon.login.common import LoginFormBase, LoginManagerBase, \
+ LoginManagerInstaller
from ipsilon.util.plugin import PluginObject
+from ipsilon.util.policy import Policy
from ipsilon.util import config as pconfig
import cherrypy
+import logging
from fedora.client.fasproxy import FasProxyClient
from fedora.client import AuthError
except ImportError:
CLA_GROUPS = dict()
-fas_mapping = {
- 'username': 'nickname',
- 'telephone': 'phone',
- 'country_code': 'country',
- 'human_name': 'fullname',
- 'email': 'email',
- 'timezone': 'timezone',
-}
+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)
+ self.mapper = Policy(fas_mapping)
def POST(self, *args, **kwargs):
username = kwargs.get("login_name")
try:
_, data = self.lm.fpc.login(username, password)
except AuthError, e:
- cherrypy.log.error("Authentication error [%s]" % str(e))
+ cherrypy.log.error("Authentication error [%s]" % str(e),
+ severity=logging.ERROR)
except Exception, e: # pylint: disable=broad-except
- cherrypy.log.error("Unknown Error [%s]" % str(e))
+ cherrypy.log.error("Unknown Error [%s]" % str(e),
+ severity=logging.ERROR)
+
if data and data.user:
userdata = self.make_userdata(data.user)
return self.lm.auth_successful(self.trans,
userdata=userdata)
else:
error = "Authentication failed"
- cherrypy.log.error(error)
+ cherrypy.log.error(error, severity=logging.ERROR)
else:
error = "Username or password is missing"
- cherrypy.log.error("Error: " + error)
+ cherrypy.log.error("Error: " + error, severity=logging.ERROR)
context = self.create_tmpl_context(
username=username,
error_password=not password,
error_username=not username
)
- # pylint: disable=star-args
+ self.lm.set_auth_error()
return self._template(self.formtemplate, **context)
def make_userdata(self, fas_data):
- userdata, fas_extra = self.mapper.map_attrs(fas_data)
+ userdata, fas_extra = self.mapper.map_attributes(fas_data)
# compute and store groups and cla groups
- userdata['groups'] = []
- userdata['extras'] = {'fas': fas_extra, 'cla': []}
+ 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']])
+ group_name = CLA_GROUPS[group['name']]
else:
- userdata['extras']['cla'].append(group['name'])
+ group_name = group['name']
+ userdata['_extras']['cla'].append(group_name)
else:
- userdata['groups'].append(group['name'])
+ userdata['_groups'].append(group['name'])
return userdata
return self.page
-class Installer(object):
+class Installer(LoginManagerInstaller):
def __init__(self, *pargs):
+ super(Installer, self).__init__()
self.name = 'fas'
- self.ptype = 'login'
self.pargs = pargs
def install_args(self, group):
group.add_argument('--fas', choices=['yes', 'no'], default='no',
help='Configure FAS authentication')
- def configure(self, opts):
+ def configure(self, opts, changes):
if opts['fas'] != 'yes':
return