Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 18 additions & 8 deletions netbox/users/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ def dispatch(self, *args, **kwargs):
def get(self, request):
form = LoginForm(request)

if request.user.is_authenticated:
logger = logging.getLogger('netbox.auth.login')
return self.redirect_to_next(request, logger)

return render(request, self.template_name, {
'form': form,
})
Expand All @@ -49,12 +53,6 @@ def post(self, request):
if form.is_valid():
logger.debug("Login form validation was successful")

# Determine where to direct user after successful login
redirect_to = request.POST.get('next', reverse('home'))
if redirect_to and not is_safe_url(url=redirect_to, allowed_hosts=request.get_host()):
logger.warning(f"Ignoring unsafe 'next' URL passed to login form: {redirect_to}")
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:
Expand All @@ -66,8 +64,7 @@ def post(self, request):
logger.info(f"User {request.user} successfully authenticated")
messages.info(request, "Logged in as {}.".format(request.user))

logger.debug(f"Redirecting user to {redirect_to}")
return HttpResponseRedirect(redirect_to)
return self.redirect_to_next(request, logger)

else:
logger.debug("Login form validation failed")
Expand All @@ -76,6 +73,19 @@ def post(self, request):
'form': form,
})

def redirect_to_next(self, request, logger):
if request.method == "POST":
redirect_to = request.POST.get('next', reverse('home'))
else:
redirect_to = request.GET.get('next', reverse('home'))

if redirect_to and not is_safe_url(url=redirect_to, allowed_hosts=request.get_host()):
logger.warning(f"Ignoring unsafe 'next' URL passed to login form: {redirect_to}")
redirect_to = reverse('home')

logger.debug(f"Redirecting user to {redirect_to}")
return HttpResponseRedirect(redirect_to)


class LogoutView(View):
"""
Expand Down