diff --git a/README.creole b/README.creole index 567af27..5544079 100644 --- a/README.creole +++ b/README.creole @@ -155,6 +155,7 @@ Files are separated into: "/src/" and "/development/" == history * [[https://github.com/jedie/PyInventory/compare/v0.9.0...master|compare v0.9.0...master]] **dev** +* Add a auto login if Django dev. server is used. ** tbc * [[https://github.com/jedie/PyInventory/compare/v0.8.4...v0.9.0|v0.9.0 - 11.04.2021]] ** Use https://github.com/jedie/dev-shell for development diff --git a/README.rst b/README.rst index 9e97702..33d3eb4 100644 --- a/README.rst +++ b/README.rst @@ -216,7 +216,9 @@ Files are separated into: "/src/" and "/development/" history ------- -* `compare v0.9.0...master `_ **dev** +* `compare v0.9.0...master `_ **dev** + +* Add a auto login if Django dev. server is used. * tbc @@ -375,4 +377,4 @@ donation ------------ -``Note: this file is generated from README.creole 2021-04-11 15:57:00 with "python-creole"`` \ No newline at end of file +``Note: this file is generated from README.creole 2021-04-28 16:53:58 with "python-creole"`` \ No newline at end of file diff --git a/src/inventory_project/settings/local.py b/src/inventory_project/settings/local.py index 4d18adf..90fa681 100644 --- a/src/inventory_project/settings/local.py +++ b/src/inventory_project/settings/local.py @@ -2,8 +2,6 @@ """ Django settings for local development - - """ import sys as __sys @@ -37,11 +35,21 @@ DATABASES = { } print(f'Use Database: {DATABASES["default"]["NAME"]!r}', file=__sys.stderr) +# _____________________________________________________________________________ +# AlwaysLoggedInAsSuperUser + +DEFAULT_USERNAME = 'local-test-superuser' +DEFAULT_USERPASS = 'test' +DEFAULT_USEREMAIL = 'nobody@local.intranet' + +MIDDLEWARE = MIDDLEWARE.copy() +MIDDLEWARE.append('inventory_project.tests.middleware.AlwaysLoggedInAsSuperUser') + # _____________________________________________________________________________ # Django-Debug-Toolbar INSTALLED_APPS += ['debug_toolbar'] -MIDDLEWARE += ['debug_toolbar.middleware.DebugToolbarMiddleware'] +MIDDLEWARE.append('debug_toolbar.middleware.DebugToolbarMiddleware') DEBUG_TOOLBAR_PATCH_SETTINGS = True from debug_toolbar.settings import CONFIG_DEFAULTS as DEBUG_TOOLBAR_CONFIG # noqa diff --git a/src/inventory_project/tests/middleware.py b/src/inventory_project/tests/middleware.py new file mode 100644 index 0000000..4cf5d0d --- /dev/null +++ b/src/inventory_project/tests/middleware.py @@ -0,0 +1,63 @@ +import os +import sys + +from django.conf import settings +from django.contrib import messages +from django.contrib.auth import authenticate, login +from django.contrib.auth.models import User + + +def _print_and_message(request, msg, level=messages.WARNING): + print(f' *** {msg} ***', file=sys.stderr) + messages.add_message(request, level, msg) + + +class AlwaysLoggedInAsSuperUser: + """ + Auto login all users as default superuser. + Default user will be created, if not exist. + + Disable it by deactivate the default user. + """ + + def __init__(self, get_response): + assert 'RUN_MAIN' in os.environ, 'Only allowed running by Django dev. server !' + self.get_response = get_response + + def __call__(self, request): + self._auto_login(request) + response = self.get_response(request) + + return response + + def _auto_login(self, request): + if request.user.is_authenticated: + return + + try: + user = User.objects.get(username=settings.DEFAULT_USERNAME) + except User.DoesNotExist: + _print_and_message(request, f'Create test django user: {settings.DEFAULT_USERNAME!r}') + User.objects.create_superuser( + username=settings.DEFAULT_USERNAME, + email=settings.DEFAULT_USEREMAIL, + password=settings.DEFAULT_USERPASS + ) + else: + if not user.is_active: + _print_and_message(request, 'Default User was deactivated!', level=messages.ERROR) + return + + user.set_password(settings.DEFAULT_USERPASS) + user.save() + + _print_and_message( + request, + f'Autologin applied. Your logged in as {settings.DEFAULT_USERNAME!r}' + ) + user = authenticate( + request=request, + username=settings.DEFAULT_USERNAME, + password=settings.DEFAULT_USERPASS + ) + login(request, user)