diff --git a/entities_security_contacts.py b/entities_security_contacts.py index d718fdedaa40db41d97d941cb90e448bf9e73997..247cd0e89ebf1a5b3da6923dc61638da22ba2e51 100755 --- a/entities_security_contacts.py +++ b/entities_security_contacts.py @@ -25,7 +25,8 @@ ns = { 'mdui': 'urn:oasis:names:tc:SAML:metadata:ui', 'shibmd': 'urn:mace:shibboleth:metadata:1.0', 'remd': 'http://refeds.org/metadata', - 'icmd': 'http://id.incommon.org/metadata' + 'icmd': 'http://id.incommon.org/metadata', + 'mdrpi': 'urn:oasis:names:tc:SAML:metadata:rpi', } @@ -33,6 +34,13 @@ entities = root.findall('./md:EntityDescriptor', ns) for entity in entities: sec_mails = set() + + registration_authority = '' + registration_info = entity.find('./md:Extensions/mdrpi:RegistrationInfo', ns) + if registration_info == None: + continue + else: + registration_authority = registration_info.attrib['registrationAuthority'].strip() orgname = entity.find('./md:Organization/md:OrganizationDisplayName', ns).text.strip() if not orgname: continue @@ -62,7 +70,7 @@ for entity in entities: 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)) + contacts.add('{},{},{},{}'.format(registration_authority, domain, mail, orgname)) for contact in sorted(contacts): print(contact) diff --git a/identity_federations_contacts.py b/identity_federations_contacts.py new file mode 100755 index 0000000000000000000000000000000000000000..7ba5db77cb507ef4c48d0b69b43fa4be2c7360c6 --- /dev/null +++ b/identity_federations_contacts.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 + +# This script consume the eduGAIN API to retrieve the details of all the +# eduGAIN identity federations and parse it to create a list of security +# email addresses, if available, and the corresponding federation name in +# CSV format. +# This list will be printed to stdout. + +import requests + +feds = requests.get('https://technical.edugain.org/api.php?action=list_feds_full') + +feds_dict = feds.json() + +print('FEDERATION,COUNTRIES,SECURITY CONTACT,FEDERATION CONTACT') + +for fed in feds_dict: + if feds_dict[fed]['status'] == '6': + countries = "" + security_contact = "" + if 'security_contact' in feds_dict[fed]: + if 'mail' in feds_dict[fed]['security_contact']: + security_contact = feds_dict[fed]['security_contact']['mail']['value'] + if 'countries' in feds_dict[fed]: + countries_array = feds_dict[fed]['countries'] + for country in countries_array: + countries = countries + " " + country + print(f"{fed},{countries.strip()},{security_contact},{feds_dict[fed]['contact_email']}") diff --git a/identity_federations_security_contacts.py b/identity_federations_security_contacts.py index 1e1c83386fd3b5bf310b149c437e5b26a6e9f1c0..f2117d0d114ab6557e04cf2818411377b4aa06ab 100755 --- a/identity_federations_security_contacts.py +++ b/identity_federations_security_contacts.py @@ -1,9 +1,9 @@ #!/usr/bin/env python3 # This script consume the eduGAIN API to retrieve the details of all the -# eduGAIN identity federations and parse it to create a list of -# security email addresses, if available, and the corresponding -# federation name in CSV format. +# eduGAIN identity federations and parse it to create a list of security +# email addresses, if available, and the corresponding federation name in +# CSV format. # This list will be printed to stdout. import requests @@ -12,6 +12,8 @@ feds = requests.get('https://technical.edugain.org/api.php?action=list_feds_full feds_dict = feds.json() +print('#NAME,EMAIL') + for fed in feds_dict: if 'security_contact' in feds_dict[fed]: if 'mail' in feds_dict[fed]['security_contact']: