# django-cas-sso
[![Code Health](https://landscape.io/github/unistra/django-cas/master/landscape.svg?style=flat)](https://landscape.io/github/unistra/django-cas/master)
CAS client for Django. This is K-State's fork of the original, which lives at
https://bitbucket.org/cpcc/django-cas/overview. This fork is actively maintaned and
includes several new features.
Current version: 1.2.8
https://github.com/kstateome/django-cas
## Install
See the document at Bitbucket
https://bitbucket.org/cpcc/django-cas/overview
## Settings.py for CAS
Add the following to middleware if you want to use CAS::
MIDDLEWARE = (
'django_cas.middleware.CASMiddleware',
)
Add these to `settings.py` to use the CAS Backend::
CAS_SERVER_URL = "Your Cas Server"
CAS_LOGOUT_COMPLETELY = True
To disable CAS authentication for the entire django admin app, you should use the `CAS_ADMIN_AUTH` parameter::
CAS_ADMIN_AUTH = False
## Url namespace
Include `django_cas` urls :
- if your django version is 1.8 or older (defining the namespace "django_cas" is required) :
url(r'your-base_uri/', include('django_cas.urls', namespace='django_cas'))
- for version >= 1.9 (a default namespace "django_cas" will be set but you can set yours if you want) :
url(r'your-base_uri/', include('django_cas.urls'))
# Additional Features
This fork contains additional features not found in the original:
- Proxied Hosts
- CAS Response Callbacks
- CAS Gateway
- Proxy Tickets (From Edmund Crewe)
## Proxied Hosts
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 = (
'django_cas.middleware.ProxyMiddleware',
)
This middleware needs to be added before the django `common` middleware.
## CAS Response Callbacks
To store data from CAS, create a callback function that accepts the dict 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(attribute_dict):
# direct access
username = attribute_dict.get('username')
user, user_created = User.objects.get_or_create(username=username)
profile, created = user.get_profile()
# ldap monovalued field
profile.email = attribute_dict.get('mail',[''])[0]
# ldap multivalued field
profile.affiliations = attribute_dict.get('eduPersonAffiliation',[])
profile.save()
### Custom User creation
If automated user creation is enabled (`CAS_USER_CREATION = True`), you can define a custom user creation function.
Give its path to the settings file like this:
CAS_USER_CREATION_CALLBACK = (
'path.to.module.user_creation_function',
)
Provide the function in `path/to/module.py`,
which receive user data as a list of two items: `[app_user_model, user_attributes_dict]`
and return created user instance:
def user_creation_function(user_data):
user_model, user_attributes = user_data
username = user_attributes['username']
email = user_attributes.get('email', '')
return user_model.objects.create_user(username, email)
With default settings ticket verification provide a dict of all attributes defined in your CAS server configuration file.
If `CAS_VERSION` setting is lower than 3 then dict contains only the username.
## CAS Gateway
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 django_cas.decorators import gateway
@gateway()
def foo(request):
#stuff
return render(request, 'foo/bar.html')
## Custom Forbidden Page
To show a custom forbidden page, set `CAS_CUSTOM_FORBIDDEN` to a `path.to.some_view`. Otherwise,
a generic `HttpResponseForbidden` will be returned.
## Require SSL Login
To force the service url to always target HTTPS, set `CAS_FORCE_SSL_SERVICE_URL` to `True`.
## Proxy Tickets
This fork also includes Edmund Crewe's proxy ticket patch:
http://code.google.com/r/edmundcrewe-proxypatch/source/browse/django-cas-proxy.patch
Raw data
{
"_id": null,
"home_page": "http://github.com/unistra/django-cas/",
"name": "django-cas-sso",
"maintainer": "di-dip-unistra",
"docs_url": null,
"requires_python": "",
"maintainer_email": "di-dip@unistra.fr",
"keywords": "django,cas,sso",
"author": "di-dip-unistra",
"author_email": "di-dip@unistra.fr",
"download_url": "https://files.pythonhosted.org/packages/55/5f/6afd1d0933005e49fd0ce0484a1638652934000559aa2f0d48581ad3faf4/django-cas-sso-1.2.8.tar.gz",
"platform": null,
"description": "# django-cas-sso\n\n[![Code Health](https://landscape.io/github/unistra/django-cas/master/landscape.svg?style=flat)](https://landscape.io/github/unistra/django-cas/master)\n\nCAS client for Django. This is K-State's fork of the original, which lives at\nhttps://bitbucket.org/cpcc/django-cas/overview. This fork is actively maintaned and\nincludes several new features.\n\nCurrent version: 1.2.8\n\nhttps://github.com/kstateome/django-cas\n\n## Install\n\nSee the document at Bitbucket\n\nhttps://bitbucket.org/cpcc/django-cas/overview\n\n## Settings.py for CAS\n\nAdd the following to middleware if you want to use CAS::\n\n MIDDLEWARE = (\n 'django_cas.middleware.CASMiddleware',\n )\n\nAdd these to `settings.py` to use the CAS Backend::\n\n CAS_SERVER_URL = \"Your Cas Server\"\n CAS_LOGOUT_COMPLETELY = True\n\nTo disable CAS authentication for the entire django admin app, you should use the `CAS_ADMIN_AUTH` parameter::\n\n CAS_ADMIN_AUTH = False\n\n## Url namespace\n\nInclude `django_cas` urls :\n\n- if your django version is 1.8 or older (defining the namespace \"django_cas\" is required) :\n\n \t\turl(r'your-base_uri/', include('django_cas.urls', namespace='django_cas'))\n\n- for version >= 1.9 (a default namespace \"django_cas\" will be set but you can set yours if you want) :\n\n \t\turl(r'your-base_uri/', include('django_cas.urls'))\n\n# Additional Features\n\nThis fork contains additional features not found in the original:\n\n- Proxied Hosts\n- CAS Response Callbacks\n- CAS Gateway\n- Proxy Tickets (From Edmund Crewe)\n\n## Proxied Hosts\n\nYou will need to setup middleware to handle the use of proxies.\n\nAdd a setting `PROXY_DOMAIN` of the domain you want the client to use. Then add\n\n MIDDLEWARE = (\n 'django_cas.middleware.ProxyMiddleware',\n )\n\nThis middleware needs to be added before the django `common` middleware.\n\n## CAS Response Callbacks\n\nTo store data from CAS, create a callback function that accepts the dict from the\nproxyValidate response. There can be multiple callbacks, and they can live anywhere. Define the\ncallback(s) in `settings.py`:\n\n CAS_RESPONSE_CALLBACKS = (\n 'path.to.module.callbackfunction',\n 'anotherpath.to.module.callbackfunction2',\n )\n\nand create the functions in `path/to/module.py`:\n\n def callbackfunction(attribute_dict):\n \t# direct access\n username = attribute_dict.get('username')\n\n user, user_created = User.objects.get_or_create(username=username)\n profile, created = user.get_profile()\n\n \t# ldap monovalued field\n profile.email = attribute_dict.get('mail',[''])[0]\n \t# ldap multivalued field\n profile.affiliations = attribute_dict.get('eduPersonAffiliation',[])\n profile.save()\n\n### Custom User creation\n\nIf automated user creation is enabled (`CAS_USER_CREATION = True`), you can define a custom user creation function.\n\nGive its path to the settings file like this:\n\n CAS_USER_CREATION_CALLBACK = (\n \t'path.to.module.user_creation_function',\n )\n\nProvide the function in `path/to/module.py`,\nwhich receive user data as a list of two items: `[app_user_model, user_attributes_dict]`\nand return created user instance:\n\n def user_creation_function(user_data):\n \tuser_model, user_attributes = user_data\n \tusername = user_attributes['username']\n \temail = user_attributes.get('email', '')\n \treturn user_model.objects.create_user(username, email)\n\nWith default settings ticket verification provide a dict of all attributes defined in your CAS server configuration file.\nIf `CAS_VERSION` setting is lower than 3 then dict contains only the username.\n\n## CAS Gateway\n\nTo use the CAS Gateway feature, first enable it in settings. Trying to use it without explicitly\nenabling this setting will raise an ImproperlyConfigured:\n\n CAS_GATEWAY = True\n\nThen, add the `gateway` decorator to a view:\n\n from django_cas.decorators import gateway\n\n @gateway()\n def foo(request):\n #stuff\n return render(request, 'foo/bar.html')\n\n## Custom Forbidden Page\n\nTo show a custom forbidden page, set `CAS_CUSTOM_FORBIDDEN` to a `path.to.some_view`. Otherwise,\na generic `HttpResponseForbidden` will be returned.\n\n## Require SSL Login\n\nTo force the service url to always target HTTPS, set `CAS_FORCE_SSL_SERVICE_URL` to `True`.\n\n## Proxy Tickets\n\nThis fork also includes Edmund Crewe's proxy ticket patch:\nhttp://code.google.com/r/edmundcrewe-proxypatch/source/browse/django-cas-proxy.patch\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Django Cas SSO Client (inherited from django-cas)",
"version": "1.2.8",
"project_urls": {
"Download": "http://pypi.python.org/pypi/django-cas-sso",
"Homepage": "http://github.com/unistra/django-cas/"
},
"split_keywords": [
"django",
"cas",
"sso"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "555f6afd1d0933005e49fd0ce0484a1638652934000559aa2f0d48581ad3faf4",
"md5": "bc87c2539c7999dac0575d21d11a72fc",
"sha256": "237af44b7493e9c5199b6a0ef946ea93606afc94db265b0caeb7ecc7d6d37c80"
},
"downloads": -1,
"filename": "django-cas-sso-1.2.8.tar.gz",
"has_sig": false,
"md5_digest": "bc87c2539c7999dac0575d21d11a72fc",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 16164,
"upload_time": "2023-06-29T07:45:03",
"upload_time_iso_8601": "2023-06-29T07:45:03.989139Z",
"url": "https://files.pythonhosted.org/packages/55/5f/6afd1d0933005e49fd0ce0484a1638652934000559aa2f0d48581ad3faf4/django-cas-sso-1.2.8.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-06-29 07:45:03",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "unistra",
"github_project": "django-cas",
"travis_ci": true,
"coveralls": false,
"github_actions": false,
"requirements": [],
"tox": true,
"lcname": "django-cas-sso"
}