1from plain.http import ResponseForbidden, ResponseRedirect
2from plain.views import View
3
4from .permissions import can_be_impersonator
5
6IMPERSONATE_KEY = "impersonate"
7
8
9class ImpersonateStartView(View):
10 def get(self):
11 # We *could* already be impersonating, so need to consider that
12 impersonator = getattr(self.request, "impersonator", self.request.user)
13 if impersonator and can_be_impersonator(impersonator):
14 self.request.session[IMPERSONATE_KEY] = self.url_kwargs["pk"]
15 return ResponseRedirect(self.request.query_params.get("next", "/"))
16
17 return ResponseForbidden()
18
19
20class ImpersonateStopView(View):
21 def get(self):
22 self.request.session.pop(IMPERSONATE_KEY)
23 return ResponseRedirect(self.request.query_params.get("next", "/"))