Merge pull request #43 from jedie/auto-login

Add a auto login if Django dev. server is used
pull/46/head
Jens Diemer 2021-04-28 18:58:43 +02:00 zatwierdzone przez GitHub
commit e60eccc0a2
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
4 zmienionych plików z 79 dodań i 5 usunięć

Wyświetl plik

@ -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

Wyświetl plik

@ -216,7 +216,9 @@ Files are separated into: "/src/" and "/development/"
history
-------
* `compare v0.9.0...master <https://github.com/jedie/PyInventory/compare/v0.9.0...master>`_ **dev**
* `compare v0.9.0...master <https://github.com/jedie/PyInventory/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"``
``Note: this file is generated from README.creole 2021-04-28 16:53:58 with "python-creole"``

Wyświetl plik

@ -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

Wyświetl plik

@ -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)