from ipsilon.providers.saml2.provider import ServiceProviderCreator
from ipsilon.providers.saml2.provider import InvalidProviderId
import re
+import requests
VALID_IN_NAME = r'[^\ a-zA-Z0-9]'
return self.form_new(message, message_type)
name = value
- elif key == 'meta':
+ elif key == 'metatext':
+ if len(value) > 0:
+ meta = value
+ elif key == 'metafile':
if hasattr(value, 'content_type'):
meta = value.fullvalue()
else:
self._debug("Invalid format for 'meta'")
+ elif key == 'metaurl':
+ if len(value) > 0:
+ try:
+ r = requests.get(value)
+ r.raise_for_status()
+ meta = r.content
+ except Exception, e: # pylint: disable=broad-except
+ self._debug("Failed to fetch metadata: " + repr(e))
+ message = "Failed to fetch metadata: " + repr(e)
+ message_type = "error"
+ return self.form_new(message, message_type)
if name and meta:
try:
def mount(self, page):
self.menu = page.menu
self.url = '%s/%s' % (page.url, self.name)
- for p in self.cfg.idp.get_providers():
- try:
- sp = ServiceProvider(self.cfg, p)
- self.add_sp(sp.name, sp)
- except Exception, e: # pylint: disable=broad-except
- self._debug("Failed to find provider %s: %s" % (p, str(e)))
+ if self.cfg.idp:
+ for p in self.cfg.idp.get_providers():
+ try:
+ sp = ServiceProvider(self.cfg, p)
+ 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.add_subtree('new', NewSPAdminPage(self._site, self))
page.add_subtree(self.name, self)