server/src/remie/middleware/cas_proxy_auth.py
author durandn
Mon, 20 Jul 2015 11:00:17 +0200
changeset 38 9f6f302b8d09
parent 9 3166a35f5f0d
permissions -rw-r--r--
added cas ticket url parameter name configuration (CAS_URLPARAMETER_NAME) for Cas Auth Middleware + removed iframe for copy project in iframetester
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
     1
from urllib import urlencode
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
     2
from urlparse import urlparse, urlunparse, parse_qsl
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
     3
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
     4
from django.contrib.auth import authenticate, login
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
     5
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
     6
from ldt.security import set_current_user
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
     7
38
9f6f302b8d09 added cas ticket url parameter name configuration (CAS_URLPARAMETER_NAME) for Cas Auth Middleware + removed iframe for copy project in iframetester
durandn
parents: 9
diff changeset
     8
from django.conf import settings
9
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
     9
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    10
class CASAuthenticationMiddleware(object):
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    11
    '''
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    12
        Middleware class for authenticating a user through a CAS Server via the CAS Proxy protocol.
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    13
        The request must have a "cas_ticket" argument that contains the CAS Proxy ticket to be validated.
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    14
        
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    15
        Requires django-cas-ng authentication backend.
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    16
    '''
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    17
    def process_request(self, request):
38
9f6f302b8d09 added cas ticket url parameter name configuration (CAS_URLPARAMETER_NAME) for Cas Auth Middleware + removed iframe for copy project in iframetester
durandn
parents: 9
diff changeset
    18
        ticket = request.GET.get(settings.CAS_URLPARAMETER_NAME)
9
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    19
        if ticket is not None:
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    20
            parsed_url = urlparse(request.build_absolute_uri())
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    21
            # editing ticket parameter out of the request
38
9f6f302b8d09 added cas ticket url parameter name configuration (CAS_URLPARAMETER_NAME) for Cas Auth Middleware + removed iframe for copy project in iframetester
durandn
parents: 9
diff changeset
    22
            new_query_params = urlencode([param for param in parse_qsl(parsed_url.query) if str(param[0]) != settings.CAS_URLPARAMETER_NAME])
9
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    23
            
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    24
            service = urlunparse((
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    25
                parsed_url.scheme,
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    26
                parsed_url.netloc,
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    27
                parsed_url.path,
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    28
                parsed_url.params,
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    29
                new_query_params,
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    30
                parsed_url.fragment
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    31
            ))
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    32
            
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    33
            user = authenticate(ticket=ticket, service=service, request=request)
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    34
            if user is None:
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    35
                return False
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    36
            request.user = user
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    37
            login(request, user)
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    38
            set_current_user(user)