diff --git a/CHANGELOG.md b/CHANGELOG.md index a365a37c2..2ecdcd652 100644 --- a/CHANGELOG.md +++ b/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 --- diff --git a/netbox/users/views.py b/netbox/users/views.py index 6ec984936..0ff4a8049 100644 --- a/netbox/users/views.py +++ b/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))