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
|
.. 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
|
||||||
|
|
Loading…
Reference in a new issue