summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ipsilon/providers/saml2/admin.py52
-rw-r--r--ipsilon/util/config.py4
-rw-r--r--ipsilon/util/data.py10
3 files changed, 41 insertions, 25 deletions
diff --git a/ipsilon/providers/saml2/admin.py b/ipsilon/providers/saml2/admin.py
index f0456c1..f8163f7 100644
--- a/ipsilon/providers/saml2/admin.py
+++ b/ipsilon/providers/saml2/admin.py
@@ -172,15 +172,21 @@ class SPAdminPage(AdminPage):
value = get_complex_list_value(name,
current,
**kwargs)
+ # if current value is None do nothing
if value is None:
- continue
+ if option.get_value() is None:
+ continue
+ # else pass and let it continue as None
elif type(option) is pconfig.MappingList:
current = deepcopy(option.get_value())
value = get_mapping_list_value(name,
current,
**kwargs)
+ # if current value is None do nothing
if value is None:
- continue
+ if option.get_value() is None:
+ continue
+ # else pass and let it continue as None
else:
continue
@@ -210,26 +216,28 @@ class SPAdminPage(AdminPage):
# Make changes in current config
for name, option in conf.iteritems():
value = new_db_values.get(name, False)
- if value:
- if name == 'Name':
- if not self.sp.is_valid_name(value):
- raise InvalidValueFormat(
- 'Invalid name! Use only numbers and'
- ' letters'
- )
- self.sp.name = value
- self.url = '%s/sp/%s' % (self.parent.url, value)
- self.parent.rename_sp(option.get_value(), value)
- elif name == 'User Owner':
- self.sp.owner = value
- elif name == 'Default NameID':
- self.sp.default_nameid = value
- elif name == 'Allowed NameIDs':
- self.sp.allowed_nameids = value
- elif name == 'Attribute Mapping':
- self.sp.attribute_mappings = value
- elif name == 'Allowed Attributes':
- self.sp.allowed_attributes = value
+ # A value of None means remove from the data store
+ if value is False or value == []:
+ continue
+ if name == 'Name':
+ if not self.sp.is_valid_name(value):
+ raise InvalidValueFormat(
+ 'Invalid name! Use only numbers and'
+ ' letters'
+ )
+ self.sp.name = value
+ self.url = '%s/sp/%s' % (self.parent.url, value)
+ self.parent.rename_sp(option.get_value(), value)
+ elif name == 'User Owner':
+ self.sp.owner = value
+ elif name == 'Default NameID':
+ self.sp.default_nameid = value
+ elif name == 'Allowed NameIDs':
+ self.sp.allowed_nameids = value
+ elif name == 'Attribute Mapping':
+ self.sp.attribute_mappings = value
+ elif name == 'Allowed Attributes':
+ self.sp.allowed_attributes = value
except InvalidValueFormat, e:
message = str(e)
message_type = ADMIN_STATUS_WARN
diff --git a/ipsilon/util/config.py b/ipsilon/util/config.py
index 523601d..5366a96 100644
--- a/ipsilon/util/config.py
+++ b/ipsilon/util/config.py
@@ -178,6 +178,8 @@ class List(Option):
class ComplexList(List):
def _check_value(self, value):
+ if value is None:
+ return
if type(value) is not list:
raise ValueError('The value type must be a list, not "%s"' %
type(value))
@@ -202,6 +204,8 @@ class ComplexList(List):
class MappingList(ComplexList):
def _check_value(self, value):
+ if value is None:
+ return
if type(value) is not list:
raise ValueError('The value type must be a list, not "%s"' %
type(value))
diff --git a/ipsilon/util/data.py b/ipsilon/util/data.py
index 72e7f96..b06f00c 100644
--- a/ipsilon/util/data.py
+++ b/ipsilon/util/data.py
@@ -377,10 +377,14 @@ class Store(Log):
datum = data[uid]
for name in datum:
if name in curvals:
- q.update({'value': datum[name]},
- {'uuid': uid, 'name': name})
+ if datum[name] is None:
+ q.delete({'uuid': uid, 'name': name})
+ else:
+ q.update({'value': datum[name]},
+ {'uuid': uid, 'name': name})
else:
- q.insert((uid, name, datum[name]))
+ if datum[name] is not None:
+ q.insert((uid, name, datum[name]))
q.commit()
except Exception, e: # pylint: disable=broad-except