Add a CAS_INFO_MESSAGES and CAS_INFO_MESSAGES_ORDER settings allowing to display messages
This commit is contained in:
parent
097a7e32ad
commit
e8d893beeb
7 changed files with 112 additions and 13 deletions
24
README.rst
24
README.rst
|
@ -219,6 +219,30 @@ Template settings
|
||||||
|
|
||||||
if you omit some keys of the dictionnary, the default value for these keys is used.
|
if you omit some keys of the dictionnary, the default value for these keys is used.
|
||||||
|
|
||||||
|
* ``CAS_INFO_MESSAGES``: Messages displayed in info-boxes on the html pages of the default templates.
|
||||||
|
It is a dictionnary mapping message name to a message dict. A message dict has 3 keys:
|
||||||
|
|
||||||
|
* ``message``: A unicode message to display, potentially wrapped around ugettex_lazy
|
||||||
|
* ``discardable``: A boolean, specify if the users can close the message info-box
|
||||||
|
* ``type``: One of info, success, info, warning, danger. The type of the info-box.
|
||||||
|
|
||||||
|
``CAS_INFO_MESSAGES`` contains by default one message, ``cas_explained``, which explain
|
||||||
|
roughly the purpose of a CAS. The default is::
|
||||||
|
|
||||||
|
{
|
||||||
|
"cas_explained": {
|
||||||
|
"message":_(
|
||||||
|
u"The Central Authentication Service grants you access to most of our websites by "
|
||||||
|
u"authenticating only once, so you don't need to type your credentials again unless "
|
||||||
|
u"your session expires or you logout."
|
||||||
|
),
|
||||||
|
"discardable": True,
|
||||||
|
"type": "info", # one of info, success, info, warning, danger
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
* ``CAS_INFO_MESSAGES_ORDER``: A list of message names. Order in which info-box messages are
|
||||||
|
displayed. Use an empty list to disable messages display. The default is ``[]``.
|
||||||
* ``CAS_LOGIN_TEMPLATE``: Path to the template showed on ``/login`` then the user
|
* ``CAS_LOGIN_TEMPLATE``: Path to the template showed on ``/login`` then the user
|
||||||
is not autenticated. The default is ``"cas_server/login.html"``.
|
is not autenticated. The default is ``"cas_server/login.html"``.
|
||||||
* ``CAS_WARN_TEMPLATE``: Path to the template showed on ``/login?service=...`` then
|
* ``CAS_WARN_TEMPLATE``: Path to the template showed on ``/login?service=...`` then
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
"""Default values for the app's settings"""
|
"""Default values for the app's settings"""
|
||||||
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
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from importlib import import_module
|
from importlib import import_module
|
||||||
|
|
||||||
|
@ -180,6 +181,32 @@ CAS_NEW_VERSION_EMAIL_WARNING = True
|
||||||
#: You should not change it.
|
#: You should not change it.
|
||||||
CAS_NEW_VERSION_JSON_URL = "https://pypi.python.org/pypi/django-cas-server/json"
|
CAS_NEW_VERSION_JSON_URL = "https://pypi.python.org/pypi/django-cas-server/json"
|
||||||
|
|
||||||
|
|
||||||
|
#: Messages displayed in a info-box on the html pages of the default templates.
|
||||||
|
#: ``CAS_INFO_MESSAGES`` is a :class:`dict` mapping message name to a message :class:`dict`.
|
||||||
|
#: A message :class:`dict` has 3 keys:
|
||||||
|
#: * ``message``: A :class:`unicode`, the message to display, potentially wrapped around
|
||||||
|
#: ugettex_lazy
|
||||||
|
#: * ``discardable``: A :class:`bool`, specify if the users can close the message info-box
|
||||||
|
#: * ``type``: One of info, success, info, warning, danger. The type of the info-box.
|
||||||
|
#: ``CAS_INFO_MESSAGES`` contains by default one message, ``cas_explained``, which explain
|
||||||
|
#: roughly the purpose of a CAS.
|
||||||
|
CAS_INFO_MESSAGES = {
|
||||||
|
"cas_explained": {
|
||||||
|
"message": _(
|
||||||
|
u"The Central Authentication Service grants you access to most of our websites by "
|
||||||
|
u"authenticating only once, so you don't need to type your credentials again unless "
|
||||||
|
u"your session expires or you logout."
|
||||||
|
),
|
||||||
|
"discardable": True,
|
||||||
|
"type": "info", # one of info, success, info, warning, danger
|
||||||
|
},
|
||||||
|
}
|
||||||
|
#: :class:`list` of message names. Order in which info-box messages are displayed.
|
||||||
|
#: Let the list empty to disable messages display.
|
||||||
|
CAS_INFO_MESSAGES_ORDER = []
|
||||||
|
|
||||||
|
|
||||||
GLOBALS = globals().copy()
|
GLOBALS = globals().copy()
|
||||||
for name, default_value in GLOBALS.items():
|
for name, default_value in GLOBALS.items():
|
||||||
# only care about parameter begining by CAS_
|
# only care about parameter begining by CAS_
|
||||||
|
|
|
@ -23,7 +23,18 @@ msgstr ""
|
||||||
msgid "Central Authentication Service"
|
msgid "Central Authentication Service"
|
||||||
msgstr "Service Central d'Authentification"
|
msgstr "Service Central d'Authentification"
|
||||||
|
|
||||||
#: forms.py:88
|
#: default_settings.py:197
|
||||||
|
msgid ""
|
||||||
|
"The Central Authentication Service grants you access to most of our websites "
|
||||||
|
"by authenticating only once, so you don't need to type your credentials "
|
||||||
|
"again unless your session expires or you logout."
|
||||||
|
msgstr ""
|
||||||
|
"Le Service Central d'Authentification permet, en vous authentifiant une "
|
||||||
|
"seule fois, d'accéder à la plupart de nos sites sans avoir à retaper votre "
|
||||||
|
"identifiant et votre mot de passe chaque fois que vous changez de site, "
|
||||||
|
"jusqu'à ce que votre session expire ou que vous vous déconnectiez."
|
||||||
|
|
||||||
|
#: forms.py:84
|
||||||
msgid "Identity provider"
|
msgid "Identity provider"
|
||||||
msgstr "fournisseur d'identité"
|
msgstr "fournisseur d'identité"
|
||||||
|
|
||||||
|
|
|
@ -31,14 +31,14 @@ function eraseCookie(name) {
|
||||||
createCookie(name,"",-1);
|
createCookie(name,"",-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
function alert_version(last_version){
|
function discard_and_remember(id, cookie_name, token, days=10*365){
|
||||||
jQuery(function( $ ){
|
jQuery(function( $ ){
|
||||||
$("#alert-version").click(function( e ){
|
$(id).click(function( e ){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
createCookie("cas-alert-version", last_version, 10*365);
|
createCookie(cookie_name, token, days);
|
||||||
});
|
});
|
||||||
if(readCookie("cas-alert-version") === last_version){
|
if(readCookie(cookie_name) === token){
|
||||||
$("#alert-version").parent().hide();
|
$(id).parent().hide();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,10 +31,16 @@
|
||||||
<div class="col-lg-3 col-md-3 col-sm-2 col-xs-12"></div>
|
<div class="col-lg-3 col-md-3 col-sm-2 col-xs-12"></div>
|
||||||
<div class="col-lg-6 col-md-6 col-sm-8 col-xs-12">
|
<div class="col-lg-6 col-md-6 col-sm-8 col-xs-12">
|
||||||
{% if auto_submit %}<noscript>{% endif %}
|
{% if auto_submit %}<noscript>{% endif %}
|
||||||
|
{% for msg in CAS_INFO_RENDER %}
|
||||||
|
<div class="alert alert-{{msg.type}}{% if msg.discardable %} alert-dismissable{% endif %}">
|
||||||
|
{% if msg.discardable %}<button type="button" class="close" data-dismiss="alert" aria-hidden="true" id="info-{{msg.name}}">×</button>{% endif %}
|
||||||
|
<p>{{msg.message}}</p>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
{% if settings.CAS_NEW_VERSION_HTML_WARNING and upgrade_available %}
|
{% if settings.CAS_NEW_VERSION_HTML_WARNING and upgrade_available %}
|
||||||
<div class="alert alert-info alert-dismissable">
|
<div class="alert alert-info alert-dismissable">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true" id="alert-version">×</button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true" id="alert-version">×</button>
|
||||||
{% blocktrans %}A new version of the application is available. This instance runs {{VERSION}} and the last version is {{LAST_VERSION}}. Please consider upgrading.{% endblocktrans %}
|
<p>{% blocktrans %}A new version of the application is available. This instance runs {{VERSION}} and the last version is {{LAST_VERSION}}. Please consider upgrading.{% endblocktrans %}</p>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% block ante_messages %}{% endblock %}
|
{% block ante_messages %}{% endblock %}
|
||||||
|
@ -52,7 +58,7 @@
|
||||||
class="alert alert-danger"
|
class="alert alert-danger"
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endspaceless %}>
|
{% endspaceless %}>
|
||||||
{{message|safe}}
|
<p>{{message|safe}}</p>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if auto_submit %}</noscript>{% endif %}
|
{% if auto_submit %}</noscript>{% endif %}
|
||||||
|
@ -71,9 +77,17 @@
|
||||||
<script src="{{settings.CAS_COMPONENT_URLS.jquery}}"></script>
|
<script src="{{settings.CAS_COMPONENT_URLS.jquery}}"></script>
|
||||||
<script src="{{settings.CAS_COMPONENT_URLS.bootstrap3_js}}"></script>
|
<script src="{{settings.CAS_COMPONENT_URLS.bootstrap3_js}}"></script>
|
||||||
<script src="{% static "cas_server/functions.js" %}"></script>
|
<script src="{% static "cas_server/functions.js" %}"></script>
|
||||||
{% if settings.CAS_NEW_VERSION_HTML_WARNING and upgrade_available %}
|
<script type="text/javascript">
|
||||||
<script type="text/javascript">alert_version("{{LAST_VERSION}}")</script>
|
{% if settings.CAS_NEW_VERSION_HTML_WARNING and upgrade_available %}
|
||||||
{% endif %}
|
discard_and_remember("#alert-version", "cas-alert-version", "{{LAST_VERSION}}");
|
||||||
|
{% endif %}
|
||||||
|
{% for msg in CAS_INFO_RENDER %}
|
||||||
|
{% if msg.discardable %}
|
||||||
|
discard_and_remember("#info-{{msg.name}}", "cas-info-{{msg.name}}", "{{msg.hash}}");
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% block javascript_inline %}{% endblock %}
|
||||||
|
</script>
|
||||||
{% block javascript %}{% endblock %}
|
{% block javascript %}{% endblock %}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
{% if auto_submit %}</noscript>{% endif %}
|
{% if auto_submit %}</noscript>{% endif %}
|
||||||
</form>
|
</form>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block javascript %}<script type="text/javascript">
|
{% block javascript_inline %}
|
||||||
jQuery(function( $ ){
|
jQuery(function( $ ){
|
||||||
$("#id_warn").click(function(e){
|
$("#id_warn").click(function(e){
|
||||||
if($("#id_warn").is(':checked')){
|
if($("#id_warn").is(':checked')){
|
||||||
|
@ -26,5 +26,5 @@ jQuery(function( $ ){
|
||||||
});
|
});
|
||||||
});{% if auto_submit %}
|
});{% if auto_submit %}
|
||||||
document.getElementById('login_form').submit(); // SUBMIT FORM{% endif %}
|
document.getElementById('login_form').submit(); // SUBMIT FORM{% endif %}
|
||||||
</script>{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,7 @@ def context(params):
|
||||||
"""
|
"""
|
||||||
params["settings"] = settings
|
params["settings"] = settings
|
||||||
params["message_levels"] = DEFAULT_MESSAGE_LEVELS
|
params["message_levels"] = DEFAULT_MESSAGE_LEVELS
|
||||||
|
|
||||||
if settings.CAS_NEW_VERSION_HTML_WARNING:
|
if settings.CAS_NEW_VERSION_HTML_WARNING:
|
||||||
LAST_VERSION = last_version()
|
LAST_VERSION = last_version()
|
||||||
params["VERSION"] = VERSION
|
params["VERSION"] = VERSION
|
||||||
|
@ -72,6 +73,28 @@ def context(params):
|
||||||
params["upgrade_available"] = decode_version(VERSION) < decode_version(LAST_VERSION)
|
params["upgrade_available"] = decode_version(VERSION) < decode_version(LAST_VERSION)
|
||||||
else:
|
else:
|
||||||
params["upgrade_available"] = False
|
params["upgrade_available"] = False
|
||||||
|
|
||||||
|
if settings.CAS_INFO_MESSAGES_ORDER:
|
||||||
|
params["CAS_INFO_RENDER"] = []
|
||||||
|
for msg_name in settings.CAS_INFO_MESSAGES_ORDER:
|
||||||
|
if msg_name in settings.CAS_INFO_MESSAGES:
|
||||||
|
try:
|
||||||
|
msg = settings.CAS_INFO_MESSAGES[msg_name].copy()
|
||||||
|
except AttributeError:
|
||||||
|
continue
|
||||||
|
if "message" in msg:
|
||||||
|
msg["name"] = msg_name
|
||||||
|
# use info as default infox type
|
||||||
|
msg["type"] = msg.get("type", "info")
|
||||||
|
# make box discardable by default
|
||||||
|
msg["discardable"] = msg.get("discardable", True)
|
||||||
|
msg_hash = (
|
||||||
|
six.text_type(msg["message"]).encode("utf-8") +
|
||||||
|
msg["type"].encode("utf-8")
|
||||||
|
)
|
||||||
|
# hash depend of the rendering language
|
||||||
|
msg["hash"] = hashlib.md5(msg_hash).hexdigest()
|
||||||
|
params["CAS_INFO_RENDER"].append(msg)
|
||||||
return params
|
return params
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue