77from django .contrib import messages
88from django .contrib .auth import get_user , get_user_model
99from django .core .cache import cache
10+ from django .http import HttpResponseRedirect
1011from django .shortcuts import redirect , render
12+ from django .utils .http import url_has_allowed_host_and_scheme
1113from django .views .generic import View
1214from netbox .plugins import get_plugin_config
1315from netbox .views import generic
2830User = get_user_model ()
2931
3032
33+ def redirect_to_login (request ):
34+ """Redirect to login view."""
35+ redirect_url = netbox_settings .LOGIN_URL
36+ target = request .path
37+
38+ if target and url_has_allowed_host_and_scheme (target , allowed_hosts = None ):
39+ redirect_url = f"{ netbox_settings .LOGIN_URL } ?next={ target } "
40+
41+ return HttpResponseRedirect (redirect_url )
42+
43+
3144class IngestionLogsView (View ):
3245 """Ingestion logs view."""
3346
@@ -36,7 +49,7 @@ class IngestionLogsView(View):
3649 def get (self , request ):
3750 """Render ingestion logs template."""
3851 if not request .user .is_authenticated or not request .user .is_staff :
39- return redirect ( f" { netbox_settings . LOGIN_URL } ?next= { request . path } " )
52+ return redirect_to_login ( request )
4053
4154 netbox_to_diode_username = get_diode_username_for_user_type ("netbox_to_diode" )
4255 try :
@@ -118,7 +131,7 @@ class SettingsView(View):
118131 def get (self , request ):
119132 """Render settings template."""
120133 if not request .user .is_authenticated or not request .user .is_staff :
121- return redirect ( f" { netbox_settings . LOGIN_URL } ?next= { request . path } " )
134+ return redirect_to_login ( request )
122135
123136 diode_target_override = get_plugin_config (
124137 "netbox_diode_plugin" , "diode_target_override"
@@ -187,7 +200,7 @@ class SettingsEditView(generic.ObjectEditView):
187200 def get (self , request , * args , ** kwargs ):
188201 """GET request handler."""
189202 if not request .user .is_authenticated or not request .user .is_staff :
190- return redirect ( f" { netbox_settings . LOGIN_URL } ?next= { request . path } " )
203+ return redirect_to_login ( request )
191204
192205 diode_target_override = get_plugin_config (
193206 "netbox_diode_plugin" , "diode_target_override"
@@ -207,7 +220,7 @@ def get(self, request, *args, **kwargs):
207220 def post (self , request , * args , ** kwargs ):
208221 """POST request handler."""
209222 if not request .user .is_authenticated or not request .user .is_staff :
210- return redirect ( f" { netbox_settings . LOGIN_URL } ?next= { request . path } " )
223+ return redirect_to_login ( request )
211224
212225 diode_target_override = get_plugin_config (
213226 "netbox_diode_plugin" , "diode_target_override"
@@ -272,7 +285,7 @@ def _retrieve_users(self):
272285 def get (self , request ):
273286 """GET request handler."""
274287 if not request .user .is_authenticated or not request .user .is_staff :
275- return redirect ( f" { netbox_settings . LOGIN_URL } ?next= { request . path } " )
288+ return redirect_to_login ( request )
276289
277290 users = self ._retrieve_users ()
278291
@@ -285,7 +298,7 @@ def get(self, request):
285298 def post (self , request ):
286299 """POST request handler."""
287300 if not request .user .is_authenticated or not request .user .is_staff :
288- return redirect ( f" { netbox_settings . LOGIN_URL } ?next= { request . path } " )
301+ return redirect_to_login ( request )
289302
290303 users = self ._retrieve_users ()
291304
0 commit comments