CAS client for Django.
Current version: 0.9.1
This is K-State's fork of the original and includes several additional features as well as features merged from
pip install git+ssh://[email protected]/kstateome/[email protected]#egg=cas
See the document at Bitbucket
https://bitbucket.org/cpcc/django-cas/overview
Fork and branch off of the develop
branch. Submit Pull requests back to kstateome:develop
.
Add the following to middleware if you want to use CAS::
MIDDLEWARE_CLASSES = (
'cas.middleware.CASMiddleware',
)
Add these to settings.py
to use the CAS Backend::
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'cas.backends.CASBackend',
)
CAS_SERVER_URL = "Your Cas Server"
CAS_LOGOUT_COMPLETELY = True
CAS_PROVIDE_URL_TO_LOGOUT = True
Add this to your urls.py file in order to use CAS::
urlpatterns = patterns(
...,
url(r'^admin/login', 'cas.views.login'),
url(r'^admin/logout', 'cas.views.logout'),
)
This fork contains additional features not found in the original:
- Proxied Hosts
- CAS Response Callbacks
- CAS Gateway
- Proxy Tickets (From Edmund Crewe)
You will need to setup middleware to handle the use of proxies.
Add a setting PROXY_DOMAIN
of the domain you want the client to use. Then add
MIDDLEWARE_CLASSES = (
'cas.middleware.ProxyMiddleware',
)
This middleware needs to be added before the django common
middleware.
To store data from CAS, create a callback function that accepts the ElementTree object from the
proxyValidate response. There can be multiple callbacks, and they can live anywhere. Define the
callback(s) in settings.py
:
CAS_RESPONSE_CALLBACKS = (
'path.to.module.callbackfunction',
'anotherpath.to.module.callbackfunction2',
)
and create the functions in path/to/module.py
:
def callbackfunction(tree):
username = tree[0][0].text
user, user_created = User.objects.get_or_create(username=username)
profile, created = user.get_profile()
profile.email = tree[0][1].text
profile.position = tree[0][2].text
profile.save()
To use the CAS Gateway feature, first enable it in settings. Trying to use it without explicitly enabling this setting will raise an ImproperlyConfigured:
CAS_GATEWAY = True
Then, add the gateway
decorator to a view:
from cas.decorators import gateway
@gateway()
def foo(request):
#stuff
return render(request, 'foo/bar.html')
To show a custom forbidden page, set CAS_CUSTOM_FORBIDDEN
to a path.to.some_view
. Otherwise,
a generic HttpResponseForbidden
will be returned.
This fork also includes Edmund Crewe's proxy ticket patch.