def custom_login_action(request, su_user): custom_login_action = getattr(settings, 'SU_CUSTOM_LOGIN_ACTION', None) if custom_login_action: if not callable(custom_login_action): custom_login_action = import_function(custom_login_action) custom_login_action(request, su_user) return True return False
def su_exit(request): exit_users_pk = request.session.get("exit_users_pk", default=[]) if not exit_users_pk: return HttpResponseBadRequest(("This session was not su'ed into." "Cannot exit.")) staff_user = User.objects.get(pk=exit_users_pk[-1][0]) staff_user.backend = exit_users_pk[-1][1] if not custom_login_action(request, staff_user): login(request, staff_user) request.session["exit_users_pk"] = exit_users_pk[:-1] return HttpResponseRedirect(getattr(settings, "SU_REDIRECT_EXIT", "/"))
def login_as_user(request, user_id): su_user = authenticate(su=True, pk=user_id) if not su_user: raise Http404("User not found") exit_user_pk = (request.session[SESSION_KEY], request.session[BACKEND_SESSION_KEY]) exit_users_pk = request.session.get("exit_users_pk", default=[]) exit_users_pk.append(exit_user_pk) if not custom_login_action(request, su_user): login(request, su_user) request.session["exit_users_pk"] = exit_users_pk return HttpResponseRedirect(getattr(settings, "SU_REDIRECT_LOGIN", "/"))