From 3c2438ecb1a8f676fca68dbe6e0159bec168b8b4 Mon Sep 17 00:00:00 2001 From: Tobias Bengfort Date: Wed, 2 May 2018 17:06:53 +0200 Subject: [PATCH 1/4] Fix display of messages --- .../castellum_core/settings/default.py | 12 ++++++++++++ castellum_core/castellum_core/templates/base.html | 12 +++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/castellum_core/castellum_core/castellum_core/settings/default.py b/castellum_core/castellum_core/castellum_core/settings/default.py index bfe1c0d0c..092ce7fbe 100644 --- a/castellum_core/castellum_core/castellum_core/settings/default.py +++ b/castellum_core/castellum_core/castellum_core/settings/default.py @@ -113,3 +113,15 @@ NPM_ROOT_PATH = os.path.dirname(BASE_DIR) NPM_FILE_PATTERNS = { 'bootstrap': ['dist/css/bootstrap.min.css'], } + +# adapt message classes for bootstrap + +from django.contrib.messages import constants as messages + +MESSAGE_TAGS = { + messages.DEBUG: 'light', + messages.INFO: 'info', + messages.SUCCESS: 'success', + messages.WARNING: 'warning', + messages.ERROR: 'danger', +} diff --git a/castellum_core/castellum_core/templates/base.html b/castellum_core/castellum_core/templates/base.html index 32d53c259..8dbf12b97 100644 --- a/castellum_core/castellum_core/templates/base.html +++ b/castellum_core/castellum_core/templates/base.html @@ -31,13 +31,11 @@
{% if messages %} -
    - {% for message in messages %} - - {% endfor %} -
+ {% for message in messages %} + + {% endfor %} {% endif %} {% block content %}{% endblock %} -- GitLab From 201ab1879f4e04005c08db677c475863c6762675 Mon Sep 17 00:00:00 2001 From: Tobias Bengfort Date: Wed, 2 May 2018 17:07:14 +0200 Subject: [PATCH 2/4] add UserExpirationMiddleware TG-308 --- .../castellum_auth/middlewares.py | 23 +++++++++++++++++++ .../castellum_core/settings/default.py | 2 ++ 2 files changed, 25 insertions(+) create mode 100644 castellum_core/castellum_core/castellum_auth/middlewares.py diff --git a/castellum_core/castellum_core/castellum_auth/middlewares.py b/castellum_core/castellum_core/castellum_auth/middlewares.py new file mode 100644 index 000000000..a080b8cac --- /dev/null +++ b/castellum_core/castellum_core/castellum_auth/middlewares.py @@ -0,0 +1,23 @@ +from django.contrib import messages +from django.contrib.auth import logout +from django.utils import timezone +from django.utils.translation import ugettext_lazy as _ + + +class UserExpirationMiddleware: + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + if request.user.is_authenticated and not request.user.is_superuser: + error = None + if not request.user.expiration_date: + error = _('Your account is not activated.') + elif request.user.expiration_date < timezone.now(): + error = _('Your account is expired.') + + if error is not None: + logout(request) + messages.add_message(request, messages.ERROR, error) + + return self.get_response(request) diff --git a/castellum_core/castellum_core/castellum_core/settings/default.py b/castellum_core/castellum_core/castellum_core/settings/default.py index 092ce7fbe..38f05678a 100644 --- a/castellum_core/castellum_core/castellum_core/settings/default.py +++ b/castellum_core/castellum_core/castellum_core/settings/default.py @@ -28,6 +28,8 @@ MIDDLEWARE = [ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + + 'castellum_auth.middlewares.UserExpirationMiddleware', ] ROOT_URLCONF = 'castellum_core.urls' -- GitLab From b8a1a71bba6eaa736f5eb01b4b219e5c9bd87c8b Mon Sep 17 00:00:00 2001 From: Tobias Bengfort Date: Wed, 2 May 2018 17:27:58 +0200 Subject: [PATCH 3/4] add tests --- .../tests/castellum_auth/test_middlewares.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 castellum_core/tests/castellum_auth/test_middlewares.py diff --git a/castellum_core/tests/castellum_auth/test_middlewares.py b/castellum_core/tests/castellum_auth/test_middlewares.py new file mode 100644 index 000000000..c73a9bf8e --- /dev/null +++ b/castellum_core/tests/castellum_auth/test_middlewares.py @@ -0,0 +1,21 @@ +import pytest + +from django.contrib.auth.models import AbstractUser as DjangoUser +from django.utils import timezone + +from castellum_auth.models import User + + +@pytest.mark.django_db +@pytest.mark.parametrize('expiration_date,is_superuser,expected', ( + (None, False, False), + (timezone.now() - timezone.timedelta(days=10), False, False), + (timezone.now() + timezone.timedelta(days=10), False, True), + (None, True, True), +)) +def test_user_expiration_date_blank(client, expiration_date, is_superuser, expected): + user = User(expiration_date=expiration_date, is_superuser=is_superuser) + user.save() + client.force_login(user) + response = client.get('/') + assert response.wsgi_request.user.is_authenticated == expected -- GitLab From dc0e2d8b8aac7df0da6b0af0647ffb1db408ded9 Mon Sep 17 00:00:00 2001 From: Tobias Bengfort Date: Mon, 7 May 2018 17:17:40 +0200 Subject: [PATCH 4/4] refactor tests --- .../tests/castellum_auth/test_middlewares.py | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/castellum_core/tests/castellum_auth/test_middlewares.py b/castellum_core/tests/castellum_auth/test_middlewares.py index c73a9bf8e..08cf5b68c 100644 --- a/castellum_core/tests/castellum_auth/test_middlewares.py +++ b/castellum_core/tests/castellum_auth/test_middlewares.py @@ -1,21 +1,26 @@ import pytest -from django.contrib.auth.models import AbstractUser as DjangoUser from django.utils import timezone from castellum_auth.models import User @pytest.mark.django_db -@pytest.mark.parametrize('expiration_date,is_superuser,expected', ( - (None, False, False), - (timezone.now() - timezone.timedelta(days=10), False, False), - (timezone.now() + timezone.timedelta(days=10), False, True), - (None, True, True), +@pytest.mark.parametrize('expiration_date,expected', ( + (None, False), + (timezone.now() - timezone.timedelta(days=10), False), + (timezone.now() + timezone.timedelta(days=10), True), )) -def test_user_expiration_date_blank(client, expiration_date, is_superuser, expected): - user = User(expiration_date=expiration_date, is_superuser=is_superuser) - user.save() +def test_user_expiration_date(client, expiration_date, expected): + user = User.objects.create(expiration_date=expiration_date) client.force_login(user) response = client.get('/') assert response.wsgi_request.user.is_authenticated == expected + + +@pytest.mark.django_db +def test_user_expiration_date_superuser(client): + user = User.objects.create(expiration_date=None, is_superuser=True) + client.force_login(user) + response = client.get('/') + assert response.wsgi_request.user.is_authenticated -- GitLab