Use python logging in install / log cherrypy at right severity
[cascardo/ipsilon.git] / ipsilon / providers / saml2 / admin.py
index f0456c1..158e590 100644 (file)
@@ -28,6 +28,7 @@ from ipsilon.providers.saml2.provider import ServiceProviderCreator
 from ipsilon.providers.saml2.provider import InvalidProviderId
 from copy import deepcopy
 import requests
+import logging
 
 
 class NewSPAdminPage(AdminPage):
@@ -58,14 +59,14 @@ class NewSPAdminPage(AdminPage):
             name = None
             meta = None
             if 'content-type' not in cherrypy.request.headers:
-                self._debug("Invalid request, missing content-type")
+                self.debug("Invalid request, missing content-type")
                 message = "Malformed request"
                 message_type = ADMIN_STATUS_ERROR
                 return self.form_new(message, message_type)
             ctype = cherrypy.request.headers['content-type'].split(';')[0]
             if ctype != 'multipart/form-data':
-                self._debug("Invalid form type (%s), trying to cope" % (
-                            cherrypy.request.content_type,))
+                self.debug("Invalid form type (%s), trying to cope" % (
+                           cherrypy.request.content_type,))
             for key, value in kwargs.iteritems():
                 if key == 'name':
                     name = value
@@ -76,7 +77,7 @@ class NewSPAdminPage(AdminPage):
                     if hasattr(value, 'content_type'):
                         meta = value.fullvalue()
                     else:
-                        self._debug("Invalid format for 'meta'")
+                        self.debug("Invalid format for 'meta'")
                 elif key == 'metaurl':
                     if len(value) > 0:
                         try:
@@ -84,7 +85,7 @@ class NewSPAdminPage(AdminPage):
                             r.raise_for_status()
                             meta = r.content
                         except Exception, e:  # pylint: disable=broad-except
-                            self._debug("Failed to fetch metadata: " + repr(e))
+                            self.debug("Failed to fetch metadata: " + repr(e))
                             message = "Failed to fetch metadata: " + repr(e)
                             message_type = ADMIN_STATUS_ERROR
                             return self.form_new(message, message_type)
@@ -101,7 +102,7 @@ class NewSPAdminPage(AdminPage):
                     message = str(e)
                     message_type = ADMIN_STATUS_ERROR
                 except Exception, e:  # pylint: disable=broad-except
-                    self._debug(repr(e))
+                    self.debug(repr(e))
                     message = "Failed to create Service Provider!"
                     message_type = ADMIN_STATUS_ERROR
             else:
@@ -172,15 +173,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
 
@@ -189,7 +196,7 @@ class SPAdminPage(AdminPage):
                         set(value) == set(option.get_value())):
                     continue
                 cherrypy.log.error("Storing %s = %s" %
-                                   (name, value))
+                                   (name, value), severity=logging.DEBUG)
                 new_db_values[name] = value
 
         if len(new_db_values) != 0:
@@ -210,26 +217,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
@@ -239,7 +248,7 @@ class SPAdminPage(AdminPage):
                 message_type = ADMIN_STATUS_ERROR
                 return self.root_with_msg(message, message_type)
             except Exception as e:  # pylint: disable=broad-except
-                self._debug("Error: %s" % repr(e))
+                self.debug("Error: %s" % repr(e))
                 message = "Internal Error"
                 message_type = ADMIN_STATUS_ERROR
                 return self.root_with_msg(message, message_type)
@@ -292,7 +301,7 @@ class Saml2AdminPage(AdminPage):
             self.providers.remove(page.sp)
             self.sp.del_subtree(name)
         except Exception, e:  # pylint: disable=broad-except
-            self._debug("Failed to remove provider %s: %s" % (name, str(e)))
+            self.debug("Failed to remove provider %s: %s" % (name, str(e)))
 
     def add_sps(self):
         if self.cfg.idp:
@@ -302,7 +311,7 @@ class Saml2AdminPage(AdminPage):
                     self.del_sp(sp.name)
                     self.add_sp(sp.name, sp)
                 except Exception, e:  # pylint: disable=broad-except
-                    self._debug("Failed to find provider %s: %s" % (p, str(e)))
+                    self.debug("Failed to find provider %s: %s" % (p, str(e)))
 
     def mount(self, page):
         self.menu = page.menu