def verify(ticket, service): """Verifies CAS 2.0+ XML-based authentication ticket. Returns username on success and None on failure. """ params = {'ticket': ticket, 'service': service} # TODO: ensure that url uses https url = urljoin(settings.CAS_SERVER_URL, 'serviceValidate') r = requests.get(url, params=params) try: response = r.text tree = ElementTree.fromstring(response) #Useful for debugging #from xml.dom.minidom import parseString #from xml.etree import ElementTree #txt = ElementTree.tostring(tree) #print parseString(txt).toprettyxml() if tree[0].tag.endswith('authenticationSuccess'): if settings.CAS_RESPONSE_CALLBACKS: cas_response_callbacks(tree) return tree[0][0].text else: return None except Exception as e: raise e
def _internal_verify_cas(ticket, service, sufix): """Verifies CAS 2.0 and 3.0 XML-based authentication ticket. Returns username on success and None on failure. """ try: from xml.etree import ElementTree except ImportError: from elementtree import ElementTree if settings.CAS_PROXY_CALLBACK: params = { 'ticket': ticket, 'service': service, 'pgtUrl': settings.CAS_PROXY_CALLBACK } else: params = {'ticket': ticket, 'service': service} url = (urljoin(settings.CAS_SERVER_URL, sufix) + '?' + urlencode(params)) page = urlopen(url) try: response = page.read() tree = ElementTree.fromstring(response) #Useful for debugging #from xml.dom.minidom import parseString #from xml.etree import ElementTree #txt = ElementTree.tostring(tree) #print parseString(txt).toprettyxml() if tree[0].tag.endswith('authenticationSuccess'): if settings.CAS_RESPONSE_CALLBACKS: cas_response_callbacks(tree) return tree[0][0].text else: return None finally: page.close()
def _verify_cas2(ticket, service): """Verifies CAS 2.0+ XML-based authentication ticket. Returns username on success and None on failure. """ try: from xml.etree import ElementTree except ImportError: from elementtree import ElementTree if settings.CAS_PROXY_CALLBACK: params = {'ticket': ticket, 'service': service, 'pgtUrl': settings.CAS_PROXY_CALLBACK} else: params = {'ticket': ticket, 'service': service} url = (urljoin(settings.CAS_SERVER_URL, 'proxyValidate') + '?' + urlencode(params)) page = urlopen(url) try: response = page.read() tree = ElementTree.fromstring(response) #Useful for debugging #from xml.dom.minidom import parseString #from xml.etree import ElementTree #txt = ElementTree.tostring(tree) #print parseString(txt).toprettyxml() if tree[0].tag.endswith('authenticationSuccess'): if settings.CAS_RESPONSE_CALLBACKS: cas_response_callbacks(tree) return tree[0][0].text else: return None finally: page.close()