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>
This commit is contained in:
Abhimanyu Saharan 2023-05-16 08:35:21 -07:00 committed by GitHub
parent eeb15ab5d1
commit 0df6a5793a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 5 deletions

View File

@ -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):
"""

View File

@ -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',
}