diff options
author | Simo Sorce <simo@redhat.com> | 2014-04-04 13:19:51 -0400 |
---|---|---|
committer | Simo Sorce <simo@redhat.com> | 2014-04-04 13:33:09 -0400 |
commit | 33bab7b0d653200d4321a71a1467ba39714005c4 (patch) | |
tree | d7df9923fdc8df30f54b2596328064ff876630a7 | |
parent | b6a436f76177c0180af3e0e70a88d3f974ac717d (diff) | |
download | ipsilon-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-x | ipsilon/providers/saml2/admin.py | 15 | ||||
-rwxr-xr-x | ipsilon/providers/saml2/provider.py | 7 | ||||
-rw-r--r-- | templates/admin/providers/saml2.html | 2 |
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 %} |