Add a verbone names to CAS_FEDERATE_PROVIDERS
This commit is contained in:
parent
46cfaa6745
commit
a00e5d403d
4 changed files with 44 additions and 8 deletions
|
@ -295,19 +295,21 @@ For instance:
|
|||
.. code-block:: python
|
||||
|
||||
CAS_FEDERATE_PROVIDERS = {
|
||||
"example.com": ("https://cas.example.com", 3),
|
||||
"exemple.fr": ("https://cas.exemple.fr", 3),
|
||||
"example.com": ("https://cas.example.com", 3, "Example dot com"),
|
||||
"exemple.fr": ("https://cas.exemple.fr", 3, "Exemple point fr"),
|
||||
}
|
||||
|
||||
|
||||
``CAS_FEDERATE_PROVIDERS`` is a dictionnary using provider names as key and a tuple
|
||||
(cas address, cas version protocol) as value.
|
||||
(cas address, cas version protocol, provider verbose name) as value.
|
||||
|
||||
In federation mode, ``django-cas-server`` build user's username as follow:
|
||||
``provider_returned_username@provider_name``.
|
||||
You can choose the provider returned username for ``django-cas-server`` and the provider name
|
||||
in order to make sense.
|
||||
|
||||
The "provider verbose name" is showed on the select menu of the login page.
|
||||
|
||||
|
||||
Then using federate mode, you should add one command to a daily crontab: ``cas_clean_federate``.
|
||||
This command clean the local cache of federated user from old unused users.
|
||||
|
|
|
@ -12,6 +12,9 @@
|
|||
from django.conf import settings
|
||||
from django.contrib.staticfiles.templatetags.staticfiles import static
|
||||
|
||||
import re
|
||||
import six
|
||||
|
||||
|
||||
def setting_default(name, default_value):
|
||||
"""if the config `name` is not set, set it the `default_value`"""
|
||||
|
@ -76,11 +79,30 @@ setting_default('CAS_SQL_PASSWORD_CHECK', 'crypt') # crypt or plain
|
|||
|
||||
|
||||
setting_default('CAS_FEDERATE', False)
|
||||
# A dict of "provider name" -> (provider CAS server url, CAS version)
|
||||
# A dict of "provider suffix" -> (provider CAS server url, CAS version, verbose name)
|
||||
setting_default('CAS_FEDERATE_PROVIDERS', {})
|
||||
|
||||
if settings.CAS_FEDERATE:
|
||||
settings.CAS_AUTH_CLASS = "cas_server.auth.CASFederateAuth"
|
||||
|
||||
CAS_FEDERATE_PROVIDERS_LIST = list(settings.CAS_FEDERATE_PROVIDERS.keys())
|
||||
CAS_FEDERATE_PROVIDERS_LIST.sort()
|
||||
__CAS_FEDERATE_PROVIDERS_LIST = list(settings.CAS_FEDERATE_PROVIDERS.keys())
|
||||
|
||||
|
||||
def __CAS_FEDERATE_PROVIDERS_LIST_sort(key):
|
||||
if len(settings.CAS_FEDERATE_PROVIDERS[key]) > 2:
|
||||
key = settings.CAS_FEDERATE_PROVIDERS[key][2].lower()
|
||||
else:
|
||||
key = key.lower()
|
||||
if isinstance(key, six.string_types) or isinstance(key, six.text_type):
|
||||
return tuple(
|
||||
int(num) if num else alpha
|
||||
for num, alpha in __CAS_FEDERATE_PROVIDERS_LIST_sort.tokenize(key)
|
||||
)
|
||||
else:
|
||||
return key
|
||||
|
||||
|
||||
__CAS_FEDERATE_PROVIDERS_LIST_sort.tokenize = re.compile(r'(\d+)|(\D+)').findall
|
||||
__CAS_FEDERATE_PROVIDERS_LIST.sort(key=__CAS_FEDERATE_PROVIDERS_LIST_sort)
|
||||
|
||||
settings.CAS_FEDERATE_PROVIDERS_LIST = __CAS_FEDERATE_PROVIDERS_LIST
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
#
|
||||
# (c) 2015 Valentin Samir
|
||||
"""forms for the app"""
|
||||
from .default_settings import settings, CAS_FEDERATE_PROVIDERS_LIST
|
||||
from .default_settings import settings
|
||||
|
||||
from django import forms
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
@ -30,7 +30,12 @@ class WarnForm(forms.Form):
|
|||
class FederateSelect(forms.Form):
|
||||
provider = forms.ChoiceField(
|
||||
label=_('Identity provider'),
|
||||
choices=[(p, p) for p in CAS_FEDERATE_PROVIDERS_LIST]
|
||||
choices=[
|
||||
(
|
||||
p,
|
||||
utils.get_tuple(settings.CAS_FEDERATE_PROVIDERS[p], 2, p)
|
||||
) for p in settings.CAS_FEDERATE_PROVIDERS_LIST
|
||||
]
|
||||
)
|
||||
service = forms.CharField(label=_('service'), widget=forms.HiddenInput(), required=False)
|
||||
method = forms.CharField(widget=forms.HiddenInput(), required=False)
|
||||
|
|
|
@ -181,3 +181,10 @@ def gen_pgtiou():
|
|||
def gen_saml_id():
|
||||
"""Generate an saml id"""
|
||||
return _gen_ticket('_')
|
||||
|
||||
|
||||
def get_tuple(tuple, index, default=None):
|
||||
try:
|
||||
return tuple[index]
|
||||
except IndexError:
|
||||
return default
|
||||
|
|
Loading…
Reference in a new issue