summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2014-04-04 13:19:51 -0400
committerSimo Sorce <simo@redhat.com>2014-04-04 13:33:09 -0400
commit33bab7b0d653200d4321a71a1467ba39714005c4 (patch)
treed7df9923fdc8df30f54b2596328064ff876630a7
parentb6a436f76177c0180af3e0e70a88d3f974ac717d (diff)
downloadipsilon-33bab7b0d653200d4321a71a1467ba39714005c4.tar.gz
ipsilon-33bab7b0d653200d4321a71a1467ba39714005c4.tar.xz
ipsilon-33bab7b0d653200d4321a71a1467ba39714005c4.zip
Admin functions to delete Service Providers
Signed-off-by: Simo Sorce <simo@redhat.com>
-rwxr-xr-xipsilon/providers/saml2/admin.py15
-rwxr-xr-xipsilon/providers/saml2/provider.py7
-rw-r--r--templates/admin/providers/saml2.html2
3 files changed, 24 insertions, 0 deletions
diff --git a/ipsilon/providers/saml2/admin.py b/ipsilon/providers/saml2/admin.py
index 7db19fc..4e9741d 100755
--- a/ipsilon/providers/saml2/admin.py
+++ b/ipsilon/providers/saml2/admin.py
@@ -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)
diff --git a/ipsilon/providers/saml2/provider.py b/ipsilon/providers/saml2/provider.py
index 7975500..73ff005 100755
--- a/ipsilon/providers/saml2/provider.py
+++ b/ipsilon/providers/saml2/provider.py
@@ -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)
diff --git a/templates/admin/providers/saml2.html b/templates/admin/providers/saml2.html
index 2e4aff3..2ecb1df 100644
--- a/templates/admin/providers/saml2.html
+++ b/templates/admin/providers/saml2.html
@@ -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 %}