list2form : gestion des erreurs et des petits fichiers (merci cgi.py…)
[progfou.git] / renater / renater-metadata.py
1 #!/usr/bin/python3
2 # -*- coding: utf-8 -*-
3 # Debian-Depends: python3 python3-lxml
4 """
5 Outil pour extraire des metadonnées de la Fédération RENATER
6
7 Copyright : Agence universitaire de la Francophonie
8 Licence : GNU General Public Licence, version 2
9 Auteur : Progfou <jean-christophe.andre@auf.org>
10 Date de création : 9 décembre 2015
11 """
12
13 #RENATER_METADATA_URL = "http://federation.renater.fr/renater/renater-metadata.xml"
14 RENATER_METADATA_URL = "http://federation.renater.fr/renater/sps-renater-metadata.xml"
15
16 XMLNS_SAML20 = "{urn:oasis:names:tc:SAML:2.0:metadata}"
17
18 import sys
19 import urllib.request
20 from lxml import etree
21
22 if len(sys.argv) != 2:
23 print("Usage : {0} <service-provider-ID>".format(*sys.argv))
24 sys.exit(1)
25 sp_id = sys.argv[1]
26
27 metadata = urllib.request.urlopen(RENATER_METADATA_URL)
28 tree = etree.parse(metadata)
29 root = tree.getroot()
30
31 sp_path = "EntityDescriptor[@entityID='{}']".format(sp_id)
32 child = root.find(XMLNS_SAML20 + sp_path)
33 if child is None:
34 print("Non trouvé.")
35 sys.exit(2)
36
37 s = etree.tostring(child, encoding='unicode',
38 pretty_print=True, with_tail=False)
39 # compatibilité Python 3.1 (Debian Squeeze)
40 if type(s) == bytes:
41 s = str(s, 'utf16')
42
43 print(s)
44 sys.exit(0)