Plain is headed towards 1.0! Subscribe for development updates →

 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", "/"))