11from plain .auth import get_user_model
2+ from plain .auth .requests import get_request_user , set_request_user
23from plain .http import ResponseForbidden
4+ from plain .sessions import get_request_session
35
6+ from .constants import IMPERSONATE_SESSION_KEY
47from .permissions import can_be_impersonator , can_impersonate_user
5- from .views import IMPERSONATE_KEY
8+ from .requests import set_request_impersonator
69
710
811def get_user_by_id (id ):
@@ -19,20 +22,24 @@ def __init__(self, get_response):
1922 self .get_response = get_response
2023
2124 def __call__ (self , request ):
25+ session = get_request_session (request )
26+ user = get_request_user (request )
27+
2228 if (
23- IMPERSONATE_KEY in request .session
24- and request .user
25- and can_be_impersonator (request .user )
29+ session
30+ and IMPERSONATE_SESSION_KEY in session
31+ and user
32+ and can_be_impersonator (user )
2633 ):
27- user_to_impersonate = get_user_by_id (request . session [IMPERSONATE_KEY ])
34+ user_to_impersonate = get_user_by_id (session [IMPERSONATE_SESSION_KEY ])
2835 if user_to_impersonate :
29- if not can_impersonate_user (request . user , user_to_impersonate ):
36+ if not can_impersonate_user (user , user_to_impersonate ):
3037 # Can't impersonate this user, remove it and show an error
31- del request . session [IMPERSONATE_KEY ]
38+ del session [IMPERSONATE_SESSION_KEY ]
3239 return ResponseForbidden ()
3340
3441 # Finally, change the request user and keep a reference to the original
35- request . impersonator = request . user
36- request . user = user_to_impersonate
42+ set_request_impersonator ( request , user )
43+ set_request_user ( request , user_to_impersonate )
3744
3845 return self .get_response (request )
0 commit comments