Add a verbone names to CAS_FEDERATE_PROVIDERS
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user