summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2015-02-22 23:53:33 -0500
committerSimo Sorce <simo@redhat.com>2015-02-24 10:24:44 -0500
commitc3230cca31b43c4e1284a5ee112afb5190419009 (patch)
tree23302c8ec428203852706d1cc812dd27b5c1ad04
parentc9ae3a56a2b88b757fe10643adf11fff4c901c8c (diff)
downloadipsilon-c3230cca31b43c4e1284a5ee112afb5190419009.tar.gz
ipsilon-c3230cca31b43c4e1284a5ee112afb5190419009.tar.xz
ipsilon-c3230cca31b43c4e1284a5ee112afb5190419009.zip
Use the new Policy engine for login/info mapping
The InfoMapping class is now only used to prettify the default set of wellknown attributes. Signed-off-by: Simo Sorce <simo@redhat.com>
-rw-r--r--ipsilon/info/common.py15
-rw-r--r--ipsilon/info/infoldap.py31
-rw-r--r--ipsilon/info/infosssd.py27
-rw-r--r--ipsilon/info/nss.py13
-rw-r--r--ipsilon/login/authfas.py23
5 files changed, 45 insertions, 64 deletions
diff --git a/ipsilon/info/common.py b/ipsilon/info/common.py
index 16a7e29..0a5cb74 100644
--- a/ipsilon/info/common.py
+++ b/ipsilon/info/common.py
@@ -37,27 +37,12 @@ class InfoMapping(Log):
'language': 'Language',
'timezone': 'Time Zone',
}
- self.mapping = dict()
-
- def set_mapping(self, attrs_map):
- self.mapping = attrs_map
def display_name(self, name):
if name in self.standard_attributes:
return self.standard_attributes[name]
return name
- def map_attrs(self, attrs):
- s = dict()
- e = dict()
- for a in attrs:
- if a in self.mapping:
- s[self.mapping[a]] = attrs[a]
- else:
- e[a] = attrs[a]
-
- return s, e
-
FACILITY = 'info_config'
diff --git a/ipsilon/info/infoldap.py b/ipsilon/info/infoldap.py
index 0ec6dd1..7170e95 100644
--- a/ipsilon/info/infoldap.py
+++ b/ipsilon/info/infoldap.py
@@ -4,33 +4,32 @@
from ipsilon.info.common import InfoProviderBase
from ipsilon.info.common import InfoProviderInstaller
-from ipsilon.info.common import InfoMapping
from ipsilon.util.plugin import PluginObject
+from ipsilon.util.policy import Policy
from ipsilon.util import config as pconfig
import ldap
# TODO: fetch mapping from configuration
-ldap_mapping = {
- 'cn': 'fullname',
- 'commonname': 'fullname',
- 'sn': 'surname',
- 'mail': 'email',
- 'destinationindicator': 'country',
- 'postalcode': 'postcode',
- 'st': 'state',
- 'statetorprovincename': 'state',
- 'streetaddress': 'street',
- 'telephonenumber': 'phone',
-}
+ldap_mapping = [
+ ['cn', 'fullname'],
+ ['commonname', 'fullname'],
+ ['sn', 'surname'],
+ ['mail', 'email'],
+ ['destinationindicator', 'country'],
+ ['postalcode', 'postcode'],
+ ['st', 'state'],
+ ['statetorprovincename', 'state'],
+ ['streetaddress', 'street'],
+ ['telephonenumber', 'phone'],
+]
class InfoProvider(InfoProviderBase):
def __init__(self, *pargs):
super(InfoProvider, self).__init__(*pargs)
- self.mapper = InfoMapping()
- self.mapper.set_mapping(ldap_mapping)
+ self.mapper = Policy(ldap_mapping)
self.name = 'ldap'
self.description = """
Info plugin that uses LDAP to retrieve user data. """
@@ -127,7 +126,7 @@ Info plugin that uses LDAP to retrieve user data. """
reply = dict()
try:
ldapattrs = self._get_user_data(conn, dn)
- userattrs, extras = self.mapper.map_attrs(ldapattrs)
+ userattrs, extras = self.mapper.map_attributes(ldapattrs)
groups = self._get_user_groups(conn, dn, ldapattrs)
reply = userattrs
reply['_groups'] = groups
diff --git a/ipsilon/info/infosssd.py b/ipsilon/info/infosssd.py
index 63ffecc..ff468a9 100644
--- a/ipsilon/info/infosssd.py
+++ b/ipsilon/info/infosssd.py
@@ -7,8 +7,8 @@
from ipsilon.info.common import InfoProviderBase
from ipsilon.info.common import InfoProviderInstaller
-from ipsilon.info.common import InfoMapping
from ipsilon.util.plugin import PluginObject
+from ipsilon.util.policy import Policy
from string import Template
import cherrypy
import time
@@ -28,24 +28,23 @@ SSSD_ATTRS = ['mail',
# Map the mod_lookup_identity env variables to Ipsilon. The inverse of
# this is in the httpd template.
-sssd_mapping = {
- 'REMOTE_USER_GECOS': 'fullname',
- 'REMOTE_USER_EMAIL': 'email',
- 'REMOTE_USER_FIRSTNAME': 'givenname',
- 'REMOTE_USER_LASTNAME': 'surname',
- 'REMOTE_USER_STREET': 'street',
- 'REMOTE_USER_STATE': 'state',
- 'REMOTE_USER_POSTALCODE': 'postcode',
- 'REMOTE_USER_TELEPHONENUMBER': 'phone',
-}
+sssd_mapping = [
+ ['REMOTE_USER_GECOS', 'fullname'],
+ ['REMOTE_USER_EMAIL', 'email'],
+ ['REMOTE_USER_FIRSTNAME', 'givenname'],
+ ['REMOTE_USER_LASTNAME', 'surname'],
+ ['REMOTE_USER_STREET', 'street'],
+ ['REMOTE_USER_STATE', 'state'],
+ ['REMOTE_USER_POSTALCODE', 'postcode'],
+ ['REMOTE_USER_TELEPHONENUMBER', 'phone'],
+]
class InfoProvider(InfoProviderBase):
def __init__(self, *pargs):
super(InfoProvider, self).__init__(*pargs)
- self.mapper = InfoMapping()
- self.mapper.set_mapping(sssd_mapping)
+ self.mapper = Policy(sssd_mapping)
self.name = 'sssd'
self.new_config(self.name)
@@ -71,7 +70,7 @@ class InfoProvider(InfoProviderBase):
reply = dict()
try:
attrs, groups = self._get_user_data(user)
- userattrs, extras = self.mapper.map_attrs(attrs)
+ userattrs, extras = self.mapper.map_attributes(attrs)
reply = userattrs
reply['_groups'] = groups
reply['_extras'] = {'sssd': extras}
diff --git a/ipsilon/info/nss.py b/ipsilon/info/nss.py
index 2f4039a..0669e95 100644
--- a/ipsilon/info/nss.py
+++ b/ipsilon/info/nss.py
@@ -4,24 +4,23 @@
from ipsilon.info.common import InfoProviderBase
from ipsilon.info.common import InfoProviderInstaller
-from ipsilon.info.common import InfoMapping
from ipsilon.util.plugin import PluginObject
+from ipsilon.util.policy import Policy
import grp
import pwd
import os
-posix_map = {
- 'gecos': 'fullname'
-}
+posix_map = [
+ ['gecos', 'fullname']
+]
class InfoProvider(InfoProviderBase):
def __init__(self, *pargs):
super(InfoProvider, self).__init__(*pargs)
- self.mapper = InfoMapping()
- self.mapper.set_mapping(posix_map)
+ self.mapper = Policy(posix_map)
self.name = 'nss'
self.new_config(self.name)
@@ -58,7 +57,7 @@ class InfoProvider(InfoProviderBase):
reply = dict()
try:
posix_user = self._get_posix_user(user)
- userattrs, extras = self.mapper.map_attrs(posix_user)
+ userattrs, extras = self.mapper.map_attributes(posix_user)
groups = self._get_posix_groups(posix_user['username'],
posix_user['gidNumber'])
reply = userattrs
diff --git a/ipsilon/login/authfas.py b/ipsilon/login/authfas.py
index 3697c1a..a44b470 100644
--- a/ipsilon/login/authfas.py
+++ b/ipsilon/login/authfas.py
@@ -1,9 +1,9 @@
# 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.util.plugin import PluginObject
+from ipsilon.util.policy import Policy
from ipsilon.util import config as pconfig
import cherrypy
@@ -27,22 +27,21 @@ try:
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")
@@ -79,7 +78,7 @@ class FAS(LoginFormBase):
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'] = []