Admin functions to delete Service Providers
authorSimo Sorce <simo@redhat.com>
Fri, 4 Apr 2014 17:19:51 +0000 (13:19 -0400)
committerSimo Sorce <simo@redhat.com>
Fri, 4 Apr 2014 17:33:09 +0000 (13:33 -0400)
Signed-off-by: Simo Sorce <simo@redhat.com>
ipsilon/providers/saml2/admin.py
ipsilon/providers/saml2/provider.py
templates/admin/providers/saml2.html

index 7db19fc..4e9741d 100755 (executable)
@@ -103,6 +103,7 @@ class SPAdminPage(Page):
 
     def __init__(self, sp, site, parent):
         super(SPAdminPage, self).__init__(site)
+        self.parent = parent
         self.sp = sp
         self.title = sp.name
         self.backurl = parent.url
@@ -192,6 +193,12 @@ class SPAdminPage(Page):
         if callable(op):
             return op(*args, **kwargs)
 
+    def delete(self):
+        self.parent.del_sp(self.sp.name)
+        self.sp.permanently_delete()
+        return self.parent.root()
+    delete.exposed = True
+
 
 class AdminPage(Page):
     def __init__(self, site, config):
@@ -209,6 +216,14 @@ class AdminPage(Page):
         self.providers.append(sp)
         return page
 
+    def del_sp(self, name):
+        try:
+            page = getattr(self.sp, name)
+            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)))
+
     def mount(self, page):
         self.menu = page.menu
         self.url = '%s/%s' % (page.url, self.name)
index 7975500..73ff005 100755 (executable)
@@ -140,6 +140,13 @@ class ServiceProvider(object):
                     return nip.format
         raise NameIdNotAllowed(nip.format)
 
+    def permanently_delete(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]
+        self.cfg.del_datum(idval)
+
     def _debug(self, fact):
         if cherrypy.config.get('debug', False):
             cherrypy.log(fact)
index 2e4aff3..2ecb1df 100644 (file)
@@ -15,6 +15,8 @@
         </div>
         <div class="col-md-3 col-sm-3 col-xs-6">
             {{ p.provider_id }}
+            <!-- TODO: add javascript popup to ask for confirmation ? -->
+            <a class="btn btn-default" href="{{ baseurl }}/sp/{{ p.name }}/delete">Delete</a>
         </div>
     </div>
 {% endfor %}