server/src/remie/middleware/cas_proxy_auth.py
author durandn
Tue, 02 Jun 2015 10:41:10 +0200
changeset 9 3166a35f5f0d
child 38 9f6f302b8d09
permissions -rw-r--r--
Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
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
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
     8
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
     9
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
    10
    '''
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    11
        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
    12
        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
    13
        
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    14
        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
    15
    '''
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    16
    def process_request(self, request):
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    17
        ticket = request.GET.get("casticket")
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    18
        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
    19
            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
    20
            # editing ticket parameter out of the request
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    21
            new_query_params = urlencode([param for param in parse_qsl(parsed_url.query) if str(param[0]) != "casticket"])
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    22
            
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    23
            service = urlunparse((
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    24
                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
    25
                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
    26
                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
    27
                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
    28
                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
    29
                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
    30
            ))
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
            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
    33
            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
    34
                return False
3166a35f5f0d Added CAS Auth middleware and CAS Login urls to remie platform + removed authserver/homestead/.vagrant from repo
durandn
parents:
diff changeset
    35
            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
    36
            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
    37
            set_current_user(user)