Add a verbone names to CAS_FEDERATE_PROVIDERS
This commit is contained in:
		@@ -295,19 +295,21 @@ For instance:
 | 
				
			|||||||
.. code-block:: python
 | 
					.. code-block:: python
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    CAS_FEDERATE_PROVIDERS = {
 | 
					    CAS_FEDERATE_PROVIDERS = {
 | 
				
			||||||
        "example.com": ("https://cas.example.com", 3),
 | 
					        "example.com": ("https://cas.example.com", 3, "Example dot com"),
 | 
				
			||||||
        "exemple.fr": ("https://cas.exemple.fr", 3),
 | 
					        "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_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:
 | 
					In federation mode, ``django-cas-server`` build user's username as follow:
 | 
				
			||||||
``provider_returned_username@provider_name``.
 | 
					``provider_returned_username@provider_name``.
 | 
				
			||||||
You can choose the provider returned username for ``django-cas-server`` and the provider name
 | 
					You can choose the provider returned username for ``django-cas-server`` and the provider name
 | 
				
			||||||
in order to make sense.
 | 
					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``.
 | 
					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.
 | 
					This command clean the local cache of federated user from old unused users.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,6 +12,9 @@
 | 
				
			|||||||
from django.conf import settings
 | 
					from django.conf import settings
 | 
				
			||||||
from django.contrib.staticfiles.templatetags.staticfiles import static
 | 
					from django.contrib.staticfiles.templatetags.staticfiles import static
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import re
 | 
				
			||||||
 | 
					import six
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def setting_default(name, default_value):
 | 
					def setting_default(name, default_value):
 | 
				
			||||||
    """if the config `name` is not set, set it the `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)
 | 
					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', {})
 | 
					setting_default('CAS_FEDERATE_PROVIDERS', {})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if settings.CAS_FEDERATE:
 | 
					if settings.CAS_FEDERATE:
 | 
				
			||||||
    settings.CAS_AUTH_CLASS = "cas_server.auth.CASFederateAuth"
 | 
					    settings.CAS_AUTH_CLASS = "cas_server.auth.CASFederateAuth"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CAS_FEDERATE_PROVIDERS_LIST = list(settings.CAS_FEDERATE_PROVIDERS.keys())
 | 
					__CAS_FEDERATE_PROVIDERS_LIST = list(settings.CAS_FEDERATE_PROVIDERS.keys())
 | 
				
			||||||
CAS_FEDERATE_PROVIDERS_LIST.sort()
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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
 | 
					# (c) 2015 Valentin Samir
 | 
				
			||||||
"""forms for the app"""
 | 
					"""forms for the app"""
 | 
				
			||||||
from .default_settings import settings, CAS_FEDERATE_PROVIDERS_LIST
 | 
					from .default_settings import settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from django import forms
 | 
					from django import forms
 | 
				
			||||||
from django.utils.translation import ugettext_lazy as _
 | 
					from django.utils.translation import ugettext_lazy as _
 | 
				
			||||||
@@ -30,7 +30,12 @@ class WarnForm(forms.Form):
 | 
				
			|||||||
class FederateSelect(forms.Form):
 | 
					class FederateSelect(forms.Form):
 | 
				
			||||||
    provider = forms.ChoiceField(
 | 
					    provider = forms.ChoiceField(
 | 
				
			||||||
        label=_('Identity provider'),
 | 
					        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)
 | 
					    service = forms.CharField(label=_('service'), widget=forms.HiddenInput(), required=False)
 | 
				
			||||||
    method = forms.CharField(widget=forms.HiddenInput(), required=False)
 | 
					    method = forms.CharField(widget=forms.HiddenInput(), required=False)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -181,3 +181,10 @@ def gen_pgtiou():
 | 
				
			|||||||
def gen_saml_id():
 | 
					def gen_saml_id():
 | 
				
			||||||
    """Generate an saml id"""
 | 
					    """Generate an saml id"""
 | 
				
			||||||
    return _gen_ticket('_')
 | 
					    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