Skip to content

Commit 78c8c5f

Browse files
committed
Merge pull request #24 from kstateome/develop
Release 1.0
2 parents a5c08cf + d0c03cd commit 78c8c5f

File tree

10 files changed

+50
-22
lines changed

10 files changed

+50
-22
lines changed

CONTRIBUTORS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
epicserve
2+
rlmv
3+
bryankaplan

MANIFEST.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
include LICENSE.mit
2+
include README.md
3+
recursive-exclude * *.pyc

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
CAS client for Django.
44

5-
Current version: 0.9.1
5+
Current version: 1.0.0
66

77
This is [K-State's fork](https://github.com/kstateome/django-cas) of [the original](https://bitbucket.org/cpcc/django-cas/overview) and includes [several additional features](https://github.com/kstateome/django-cas/#additional-features) as well as features merged from
88

@@ -12,7 +12,7 @@ This is [K-State's fork](https://github.com/kstateome/django-cas) of [the or
1212

1313
## Install
1414

15-
``pip install git+ssh://git@github.com/kstateome/django-cas.git@0.9.1#egg=cas``
15+
``pip install git+ssh://git@github.com/kstateome/django-cas.git@1.0.0#egg=cas``
1616

1717
See the document at Bitbucket
1818

cas/backends.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@
66
from xml.dom import minidom
77

88
from django.conf import settings
9-
from django.core.exceptions import ObjectDoesNotExist
9+
from django.contrib.auth import get_user_model
1010
from cas.exceptions import CasTicketException
11-
from cas.models import User, Tgt, PgtIOU
11+
from cas.models import Tgt, PgtIOU
1212
from cas.utils import cas_response_callbacks
1313

1414
__all__ = ['CASBackend']
1515

1616
logger = logging.getLogger(__name__)
1717

18+
1819
def _verify_cas1(ticket, service):
1920
"""Verifies CAS 1.0 authentication ticket.
2021
@@ -93,7 +94,7 @@ def _verify_cas2(ticket, service):
9394
failure[0].firstChild.nodeValue)
9495

9596
except Exception as e:
96-
logger.error('Failed to verify CAS authentication', e)
97+
logger.error('Failed to verify CAS authentication: %s', e)
9798

9899
finally:
99100
page.close()
@@ -172,7 +173,7 @@ def authenticate(self, ticket, service):
172173
"""Verifies CAS ticket and gets or creates User object
173174
NB: Use of PT to identify proxy
174175
"""
175-
176+
User = get_user_model()
176177
username = _verify(ticket, service)
177178
if not username:
178179
return None
@@ -187,6 +188,8 @@ def authenticate(self, ticket, service):
187188
def get_user(self, user_id):
188189
"""Retrieve the user's entry in the User model if it exists"""
189190

191+
User = get_user_model()
192+
190193
try:
191194
return User.objects.get(pk=user_id)
192195
except User.DoesNotExist:

cas/decorators.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@
1010
from django.contrib.auth.decorators import login_required
1111
from django.http import HttpResponseForbidden, HttpResponseRedirect
1212
from django.utils.http import urlquote
13+
from django.conf import settings
14+
from django.core.exceptions import ImproperlyConfigured
1315

1416
__all__ = ['login_required', 'permission_required', 'user_passes_test']
1517

18+
1619
def user_passes_test(test_func, login_url=None,
1720
redirect_field_name=REDIRECT_FIELD_NAME):
1821
"""Replacement for django.contrib.auth.decorators.user_passes_test that
@@ -46,9 +49,6 @@ def permission_required(perm, login_url=None):
4649
return user_passes_test(lambda u: u.has_perm(perm), login_url=login_url)
4750

4851

49-
from django.conf import settings
50-
from django.core.exceptions import ImproperlyConfigured
51-
5252
def gateway():
5353
"""Authenticates single sign on session if ticket is available,
5454
but doesn't redirect to sign in url otherwise.

cas/middleware.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
__all__ = ['CASMiddleware']
1717

18+
1819
class CASMiddleware(object):
1920
"""Middleware that allows CAS authentication on admin pages"""
2021

@@ -64,6 +65,7 @@ def process_exception(self, request, exception):
6465
else:
6566
return None
6667

68+
6769
class ProxyMiddleware(object):
6870

6971
# Middleware used to "fake" the django app that it lives at the Proxy Domain

cas/models.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
from urlparse import urljoin
22
from urllib import urlencode, urlopen
3+
34
from django.db import models
45
from django.conf import settings
5-
from django.contrib.auth.models import User
66
from django.core.exceptions import ObjectDoesNotExist
77
from cas.exceptions import CasTicketException, CasConfigException
88
# Ed Crewe - add in signals to delete old tickets
99
from django.db.models.signals import post_save
1010
from datetime import datetime
1111

12+
1213
class Tgt(models.Model):
1314
username = models.CharField(max_length = 255, unique = True)
1415
tgt = models.CharField(max_length = 255)
@@ -44,12 +45,14 @@ def get_proxy_ticket_for(self, service):
4445
finally:
4546
page.close()
4647

48+
4749
class PgtIOU(models.Model):
4850
""" Proxy granting ticket and IOU """
4951
pgtIou = models.CharField(max_length = 255, unique = True)
5052
tgt = models.CharField(max_length = 255)
5153
created = models.DateTimeField(auto_now = True)
5254

55+
5356
def get_tgt_for(user):
5457
if not settings.CAS_PROXY_CALLBACK:
5558
raise CasConfigException("No proxy callback set in settings")
@@ -59,8 +62,9 @@ def get_tgt_for(user):
5962
except ObjectDoesNotExist:
6063
raise CasTicketException("no ticket found for user " + user.username)
6164

65+
6266
def delete_old_tickets(**kwargs):
63-
""" Delete tickets if they are over 2 days old
67+
""" Delete tickets if they are over 2 days old
6468
kwargs = ['raw', 'signal', 'instance', 'sender', 'created']
6569
"""
6670
sender = kwargs.get('sender', None)
@@ -69,4 +73,3 @@ def delete_old_tickets(**kwargs):
6973
sender.objects.filter(created__lt=expire).delete()
7074

7175
post_save.connect(delete_old_tickets, sender=PgtIOU)
72-
#post_save.connect(delete_old_tickets, sender=Tgt)

cas/utils.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
import logging
2+
3+
logger = logging.getLogger(__name__)
4+
5+
16
def cas_response_callbacks(tree):
27
from django.conf import settings
38
callbacks = []
@@ -8,9 +13,11 @@ def cas_response_callbacks(tree):
813
try:
914
mod = __import__(module, fromlist=[''])
1015
except ImportError as e:
11-
print "Import Error: %s" % e
16+
logger.error("Import Error: %s" % e)
17+
raise e
1218
try:
1319
func = getattr(mod, callback)
1420
except AttributeError, e:
15-
print "Attribute Error: %s" % e
16-
func(tree)
21+
logger.error( "Attribute Error: %s" % e)
22+
raise e
23+
func(tree)

cas/views.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ def _login_url(service, ticket='ST', gateway=False):
8585

8686
return urlparse.urljoin(settings.CAS_SERVER_URL, login) + '?' + urlencode(params)
8787

88+
8889
def _logout_url(request, next_page=None):
8990
"""Generates CAS logout URL"""
9091

@@ -154,6 +155,7 @@ def logout(request, next_page=None):
154155
else:
155156
return HttpResponseRedirect(next_page)
156157

158+
157159
def proxy_callback(request):
158160
"""Handles CAS 2.0+ XML-based proxy callback call.
159161
Stores the proxy granting ticket in the database for
@@ -166,13 +168,11 @@ def proxy_callback(request):
166168
tgt = request.GET.get('pgtId')
167169

168170
if not (pgtIou and tgt):
169-
return HttpResponse('No pgtIOO', mimetype="text/plain")
171+
return HttpResponse('No pgtIOO', content_type="text/plain")
170172
try:
171173
PgtIOU.objects.create(tgt=tgt, pgtIou=pgtIou, created=datetime.now())
172174
request.session['pgt-TICKET'] = ticket
173-
return HttpResponse('PGT ticket is: %s' % str(ticket, mimetype="text/plain"))
175+
return HttpResponse('PGT ticket is: %s' % str(ticket, content_type="text/plain"))
174176
except:
175-
return HttpResponse('PGT storage failed for %s' % str(request.GET), mimetype="text/plain")
176-
177-
return HttpResponse('Success', mimetype="text/plain")
177+
return HttpResponse('PGT storage failed for %s' % str(request.GET), content_type="text/plain")
178178

setup.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
1+
import os
2+
13
from setuptools import setup, find_packages
24

3-
version = '0.9.1'
5+
version = '1.0.0'
6+
7+
8+
def read(fname):
9+
return open(os.path.join(os.path.dirname(__file__), fname)).read()
10+
411

512
setup(name='django-cas',
613
version=version,
714
description="Django Cas Client",
8-
long_description=open("./README.md", "r").read(),
15+
long_description=read('README.md'),
916
classifiers=[
1017
"Development Status :: Development",
1118
"Environment :: Console",

0 commit comments

Comments
 (0)