#!/usr/bin/python3.6

import urllib.request
from lxml import etree
import sys
import re

#download vosummary (for oasis enabled)
response = urllib.request.urlopen("https://topology.opensciencegrid.org/vosummary/xml?summary_attrs_showoasis=on&all_vos=on&active=on&active_value=1&oasis=on&oasis_value=1&sort_key=name", timeout=30)
xml = response.read()
doc = etree.XML(xml)

dns = {}
#parse out the VO names
for vo in doc.xpath("//VO"):

        #create good unixname
        voname = vo.xpath("Name")[0].text
        voname = re.sub(r'[^/a-z0-9]+', '', voname.lower())

        username = "ouser."+voname
        groupname = "cvmfs"

        for dn in vo.xpath("OASIS/Managers/Manager/DNs/DN"):
            dn = dn.text

            ##sanitize dn
            original_dn = dn
            dn = re.sub(r'[^/ ()=\.\-a-zA-Z0-9\':@]+', '', dn)
            
            if original_dn != dn:
                print("invalid character in dn:",original_dn, file=sys.stderr)
                continue

            #escape
            dn = re.sub(r'["]+', '\\\"', dn)
            
            #print voname,username,dn
            if dn in dns:
                usernames = dns[dn]
                usernames.append(username)
            else:
                dns[dn] = [username]
    

for dn in dns:
    usernames = dns[dn]
    print("\""+dn+"\"",",".join(usernames))

if len(dns) < 10:
    print("dn count is too small:",len(dns), file=sys.stderr)
    sys.exit(2)

sys.exit(0)
