test monkeypatching for django_cas_ng
authordurandn
Thu, 10 Sep 2015 18:39:45 +0200
changeset 123 681b48b19e3f
parent 122 95ba0b597c61
child 124 8b742651d655
test monkeypatching for django_cas_ng
server/src/remie/__init__.py
server/src/remie/apps.py
server/src/remie/cas.py
--- a/server/src/remie/__init__.py	Thu Sep 10 16:43:19 2015 +0200
+++ b/server/src/remie/__init__.py	Thu Sep 10 18:39:45 2015 +0200
@@ -0,0 +1,1 @@
+default_app_config = 'remie.apps.RemieAppConfig'
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/remie/apps.py	Thu Sep 10 18:39:45 2015 +0200
@@ -0,0 +1,14 @@
+from django.apps import AppConfig
+from cas import REMIE_verify_cas2
+
+class RemieAppConfig(AppConfig):
+    '''
+    App config to monkey patch 
+    '''
+
+    name = 'remie'
+    verbose_name = 'REMIE'
+
+    def ready(self):   
+        from django_cas_ng.backends import _verify_cas2
+        _verify_cas2 = REMIE_verify_cas2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/remie/cas.py	Thu Sep 10 18:39:45 2015 +0200
@@ -0,0 +1,30 @@
+from django.utils.six.moves import urllib_parse
+from django.utils.six.moves.urllib_request import urlopen, Request
+import logging
+
+logger = logging.getLogger(__name__)
+
+
+def REMIE_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
+
+    params = [('ticket', ticket), ('service', service)]
+    url = (urllib_parse.urljoin(settings.CAS_SERVER_URL, 'serviceValidate') + '?' +
+           urllib_parse.urlencode(params))
+    page = urlopen(url)
+    try:
+        response = page.read()
+        logger.debug(response)
+        tree = ElementTree.fromstring(response)
+        if tree[0].tag.endswith('authenticationSuccess'):
+            return tree[0][0].text, None
+        else:
+            return None, None
+    finally:
+        page.close()
\ No newline at end of file