Skip to content
Snippets Groups Projects
Commit 241eef9a authored by Davide Vaghetti's avatar Davide Vaghetti
Browse files

Merge branch 'master' into 'master'

Added support for multiple security contacts

See merge request !3
parents bbf749f7 b64f09b4
No related branches found
No related tags found
1 merge request!3Added support for multiple security contacts
......@@ -19,7 +19,7 @@ xml_req = requests.get('https://mds.edugain.org/edugain-v1.xml')
root = ET.fromstring(xml_req.content)
contacts = set()
seen_doms = set()
seen_doms_mails = set()
ns = {
'md': 'urn:oasis:names:tc:SAML:2.0:metadata',
......@@ -33,36 +33,37 @@ ns = {
entities = root.findall('./md:EntityDescriptor', ns)
for entity in entities:
sec_mails = set()
orgname = entity.find('./md:Organization/md:OrganizationDisplayName', ns).text.strip()
if not orgname:
continue
contact = entity.find('./md:ContactPerson[@remd:contactType="http://refeds.org/metadata/contactType/security"]', ns)
if contact is None:
contact = entity.find(
'./md:ContactPerson[@icmd:contactType="http://id.incommon.org/metadata/contactType/security"]', ns)
if contact is None:
continue
mail_el = contact.find('./md:EmailAddress', ns)
if mail_el is None:
continue
name_el = contact.find('./md:GivenName', ns)
surname_el = contact.find('./md:SurName', ns)
mail = strip_start(mail_el.text, 'mailto:')
if name_el is not None:
name = name_el.text.strip()
if surname_el is not None:
surname = surname_el.text.strip()
contact_txt = '"{} {}" <{}>'.format(name, surname, mail)
sec_contact_els = entity.findall('./md:ContactPerson[@remd:contactType="http://refeds.org/metadata/contactType/security"]', ns) + \
entity.findall('./md:ContactPerson[@icmd:contactType="http://id.incommon.org/metadata/contactType/security"]', ns)
for sec_contact_el in sec_contact_els:
mail_el = sec_contact_el.find('./md:EmailAddress', ns)
name_el = sec_contact_el.find('./md:GivenName', ns)
surname_el = sec_contact_el.find('./md:SurName', ns)
if mail_el is None:
continue
mail = strip_start(mail_el.text, 'mailto:')
if name_el is not None:
name = name_el.text.strip()
if surname_el is not None:
surname = surname_el.text.strip()
sec_mails.add('"{} {}" <{}>'.format(name, surname, mail))
else:
sec_mails.add('"{}" <{}>'.format(name, mail))
else:
contact_txt = '"{}" <{}>'.format(name, mail)
else:
contact_txt = mail
sec_mails.add(mail)
doms = entity.findall('./md:IDPSSODescriptor/md:Extensions/shibmd:Scope[@regexp="false"]', ns)
for domain in doms:
domain_text = domain.text
if domain_text not in seen_doms:
seen_doms.add(domain_text)
contacts.add('{},{},{}'.format(domain_text, contact_txt, orgname))
doms_set = set()
for dom in doms:
doms_set.add(dom.text)
for domain in doms_set:
for mail in sec_mails:
if (domain,mail) not in seen_doms_mails:
seen_doms_mails.add((domain, mail))
contacts.add('{},{},{}'.format(domain, mail, orgname))
for contact in sorted(contacts):
print(contact)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment