mirror of
https://github.com/suitenumerique/docs.git
synced 2026-05-13 10:27:07 +02:00
When a document is updated, users not connected to the collaboration server can override work made by other people connected to the collaboration server. To avoid this, the priority is given to user connected to the collaboration server. If the websocket property in the request payload is missing or set to False, the backend fetch the collaboration server to now if the user can save or not. If users are already connected, the user can't save. Also, only one user without websocket can save a connect, the first user saving acquire a lock and all other users can't save. To implement this behavior, we need to track all users, connected and not, so a session is created for every user in the ForceSessionMiddleware.
22 lines
613 B
Python
22 lines
613 B
Python
"""Force session creation for all requests."""
|
|
|
|
|
|
class ForceSessionMiddleware:
|
|
"""
|
|
Force session creation for unauthenticated users.
|
|
Must be used after Authentication middleware.
|
|
"""
|
|
|
|
def __init__(self, get_response):
|
|
"""Initialize the middleware."""
|
|
self.get_response = get_response
|
|
|
|
def __call__(self, request):
|
|
"""Force session creation for unauthenticated users."""
|
|
|
|
if not request.user.is_authenticated and request.session.session_key is None:
|
|
request.session.create()
|
|
|
|
response = self.get_response(request)
|
|
return response
|