Add optional field to allow pasting the metadata
authorSimo Sorce <simo@redhat.com>
Thu, 29 May 2014 13:38:18 +0000 (09:38 -0400)
committerSimo Sorce <simo@redhat.com>
Wed, 4 Jun 2014 14:26:29 +0000 (10:26 -0400)
This way a user can avoid copying the metadata file arund but paste
the content straight from a terminal window.

Signed-off-by: Simo Sorce <simo@redhat.com>
ipsilon/providers/saml2/admin.py
templates/admin/providers/saml2_sp_new.html

index 552d655..5d97126 100755 (executable)
@@ -23,6 +23,7 @@ from ipsilon.providers.saml2.provider import ServiceProvider
 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]'
@@ -73,11 +74,25 @@ class NewSPAdminPage(Page):
                         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:
index 46e4906..b3cef19 100644 (file)
         </div>
 
         <div class="form-group">
-            <label for="meta">Metadata file:</label>
-            <input type="file" name="meta" id="file"
+            <label for="metafile">Metadata file:</label>
+            <input type="file" name="metafile" id="file"
                    title="The metadata file generated by the Service Provider"/>
         </div>
+        - OR -
+        <div class="form-group">
+            <label for="metaurl">Metadata url:</label>
+            <input type="text" name="metaurl" id="url"
+                   title="The metadata url exposed by the Service Provider (ex. http://service.provider/saml/metadata )"/>
+        </div>
+        - OR -
+        <div class="form-group">
+            <label for="metatext">Metadata text:</label>
+            <br>
+            <textarea name="metatext" rows="10" cols="80"
+                      title="The metadata generated by the Service Provider"
+                      form="{{ name }}"></textarea>
+        </div>
 
         <button id="submit" class="btn btn-primary" name="submit" type="submit" value="Submit">
             Save