--- 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