author | durandn |
Tue, 02 Jun 2015 10:41:10 +0200 | |
changeset 9 | 3166a35f5f0d |
child 38 | 9f6f302b8d09 |
permissions | -rw-r--r-- |
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) |