瀏覽代碼

Adds maintenance exempt paths (#12592)

* adds maintenance exempt paths #11233

* adds maintenance exempt paths #11233

* Rename method & remove login/logout from exempt paths

---------

Co-authored-by: jeremystretch <jstretch@netboxlabs.com>
Abhimanyu Saharan 2 年之前
父節點
當前提交
0df6a5793a
共有 2 個文件被更改,包括 14 次插入5 次删除
  1. 9 5
      netbox/netbox/middleware.py
  2. 5 0
      netbox/netbox/settings.py

+ 9 - 5
netbox/netbox/middleware.py

@@ -181,19 +181,23 @@ class MaintenanceModeMiddleware:
 
     def __call__(self, request):
         if get_config().MAINTENANCE_MODE:
-            self._prevent_db_write_operations()
+            self._set_session_type(
+                allow_write=request.path_info.startswith(settings.MAINTENANCE_EXEMPT_PATHS)
+            )
 
         return self.get_response(request)
 
     @staticmethod
-    def _prevent_db_write_operations():
+    def _set_session_type(allow_write):
         """
         Prevent any write-related database operations.
+
+        Args:
+            allow_write (bool): If True, write operations will be permitted.
         """
         with connection.cursor() as cursor:
-            cursor.execute(
-                'SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;'
-            )
+            mode = 'READ WRITE' if allow_write else 'READ ONLY'
+            cursor.execute(f'SET SESSION CHARACTERISTICS AS TRANSACTION {mode};')
 
     def process_exception(self, request, exception):
         """

+ 5 - 0
netbox/netbox/settings.py

@@ -478,6 +478,11 @@ AUTH_EXEMPT_PATHS = (
     f'/{BASE_PATH}metrics',
 )
 
+# All URLs starting with a string listed here are exempt from maintenance mode enforcement
+MAINTENANCE_EXEMPT_PATHS = (
+    f'/{BASE_PATH}admin/',
+)
+
 SERIALIZATION_MODULES = {
     'json': 'utilities.serializers.json',
 }