Browse Source

Fixes #3118: Disable last_login update on login when maintenance mode is enabled

Jeremy Stretch 6 years ago
parent
commit
3562b5552b
2 changed files with 9 additions and 0 deletions
  1. 1 0
      CHANGELOG.md
  2. 8 0
      netbox/users/views.py

+ 1 - 0
CHANGELOG.md

@@ -11,6 +11,7 @@
 * [#2621](https://github.com/digitalocean/netbox/issues/2621) - Upgrade Django requirement to 2.2 to fix object deletion issue in the changelog middleware
 * [#3112](https://github.com/digitalocean/netbox/issues/3112) - Fix ordering of interface connections list by termination B name/device
 * [#3116](https://github.com/digitalocean/netbox/issues/3116) - Fix `tagged_items` count in tags API endpoint
+* [#3118](https://github.com/digitalocean/netbox/issues/3118) - Disable `last_login` update on login when maintenance mode is enabled
 
 ---
 

+ 8 - 0
netbox/users/views.py

@@ -1,7 +1,10 @@
+from django.conf import settings
 from django.contrib import messages
 from django.contrib.auth import login as auth_login, logout as auth_logout, update_session_auth_hash
 from django.contrib.auth.decorators import login_required
 from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
+from django.contrib.auth.models import update_last_login
+from django.contrib.auth.signals import user_logged_in
 from django.http import HttpResponseForbidden, HttpResponseRedirect
 from django.shortcuts import get_object_or_404, redirect, render
 from django.urls import reverse
@@ -44,6 +47,11 @@ class LoginView(View):
             if not is_safe_url(url=redirect_to, allowed_hosts=request.get_host()):
                 redirect_to = reverse('home')
 
+            # If maintenance mode is enabled, assume the database is read-only, and disable updating the user's
+            # last_login time upon authentication.
+            if settings.MAINTENANCE_MODE:
+                user_logged_in.disconnect(update_last_login, dispatch_uid='update_last_login')
+
             # Authenticate user
             auth_login(request, form.get_user())
             messages.info(request, "Logged in as {}.".format(request.user))