summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2014-04-03 15:42:35 -0400
committerSimo Sorce <simo@redhat.com>2014-04-04 12:58:24 -0400
commit671c9261307a23daaeafdaf3263accc836ba7b70 (patch)
tree8b03179f1bbf84d25eb1384f6f01d807c14bd9cb
parented5ed179806c921036cf811e1890408aac072bef (diff)
downloadipsilon-671c9261307a23daaeafdaf3263accc836ba7b70.tar.gz
ipsilon-671c9261307a23daaeafdaf3263accc836ba7b70.tar.xz
ipsilon-671c9261307a23daaeafdaf3263accc836ba7b70.zip
Providers can save properties back to the database
This way a provider class can be used in admin pages as well and remain consistent. Signed-off-by: Simo Sorce <simo@redhat.com>
-rwxr-xr-xipsilon/providers/saml2/provider.py47
1 files changed, 43 insertions, 4 deletions
diff --git a/ipsilon/providers/saml2/provider.py b/ipsilon/providers/saml2/provider.py
index 6339450..7975500 100755
--- a/ipsilon/providers/saml2/provider.py
+++ b/ipsilon/providers/saml2/provider.py
@@ -64,6 +64,7 @@ class ServiceProvider(object):
idval = data.keys()[0]
data = self.cfg.get_data(idval=idval)
self._properties = data[idval]
+ self._staging = dict()
@property
def provider_id(self):
@@ -73,13 +74,35 @@ class ServiceProvider(object):
def name(self):
return self._properties['name']
+ @name.setter
+ def name(self, value):
+ self._staging['name'] = value
+
+ @property
+ def owner(self):
+ if 'owner' in self._properties:
+ return self._properties['owner']
+ else:
+ return ''
+
+ @owner.setter
+ def owner(self, value):
+ self._staging['owner'] = value
+
@property
- def allowed_namedids(self):
- if 'allowed nameid' in self._properties:
- return self._properties['allowed nameid']
+ def allowed_nameids(self):
+ if 'allowed nameids' in self._properties:
+ allowed = self._properties['allowed nameids']
+ return [x.strip() for x in allowed.split(',')]
else:
return self.cfg.default_allowed_nameids
+ @allowed_nameids.setter
+ def allowed_nameids(self, value):
+ if type(value) is not list:
+ raise ValueError("Must be a list")
+ self._staging['allowed nameids'] = ','.join(value)
+
@property
def default_nameid(self):
if 'default nameid' in self._properties:
@@ -87,6 +110,22 @@ class ServiceProvider(object):
else:
return self.cfg.default_nameid
+ @default_nameid.setter
+ def default_nameid(self, value):
+ self._staging['default nameid'] = value
+
+ def save_properties(self):
+ data = self.cfg.get_data(name='id', value=self.provider_id)
+ if len(data) != 1:
+ raise InvalidProviderId('Could not find SP data')
+ idval = data.keys()[0]
+ data = dict()
+ data[idval] = self._staging
+ self.cfg.save_data(data)
+ data = self.cfg.get_data(idval=idval)
+ self._properties = data[idval]
+ self._staging = dict()
+
def get_valid_nameid(self, nip):
self._debug('Requested NameId [%s]' % (nip.format,))
if nip.format is None:
@@ -94,7 +133,7 @@ class ServiceProvider(object):
elif nip.format == lasso.SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED:
return NAMEID_MAP[self.default_nameid]
else:
- allowed = self.allowed_namedids
+ allowed = self.allowed_nameids
self._debug('Allowed NameIds %s' % (repr(allowed)))
for nameid in allowed:
if nip.format == NAMEID_MAP[nameid]: