elevate.views
~~~~~~~~~~~~~
© 2017-present by Justin Mayer.
© 2014-2016 by Matt Robenolt.
:license: BSD, see LICENSE for more details.
ElevateView
Bases: View
The default view for the Elevate mode page. The role of this page is to
prompt the user for their password again, and if successful, redirect
them back to next.
template_name
class-attribute
instance-attribute
template_name = 'elevate/elevate.html'
handle_elevate
handle_elevate(request, redirect_to, context)
Source code in hypha/elevate/views.py
| def handle_elevate(self, request, redirect_to, context):
return request.method == "POST" and context["form"].is_valid()
|
grant_elevated_privileges
grant_elevated_privileges(request, redirect_to)
Source code in hypha/elevate/views.py
| def grant_elevated_privileges(self, request, redirect_to):
grant_elevated_privileges(request)
# Restore the redirect destination from the GET request
redirect_to = request.session.pop(REDIRECT_TO_FIELD_NAME, redirect_to)
# Double check we're not redirecting to other sites
if not url_has_allowed_host_and_scheme(
redirect_to,
allowed_hosts=[request.get_host()],
require_https=request.is_secure(),
):
redirect_to = resolve_url(REDIRECT_URL)
return HttpResponseRedirect(redirect_to)
|
dispatch
Source code in hypha/elevate/views.py
| @method_decorator(sensitive_post_parameters())
@method_decorator(never_cache)
@method_decorator(csrf_protect)
@method_decorator(login_required)
def dispatch(self, request):
redirect_to = request.GET.get(REDIRECT_FIELD_NAME, REDIRECT_URL)
# Make sure we're not redirecting to other sites
if not url_has_allowed_host_and_scheme(
redirect_to,
allowed_hosts=[request.get_host()],
require_https=request.is_secure(),
):
redirect_to = resolve_url(REDIRECT_URL)
if request.is_elevated():
return HttpResponseRedirect(redirect_to)
if request.method == "GET":
request.session[REDIRECT_TO_FIELD_NAME] = redirect_to
context = {
"form": self.form_class(request, request.user, request.POST or None),
"request": request,
REDIRECT_FIELD_NAME: redirect_to,
}
if self.handle_elevate(request, redirect_to, context):
return self.grant_elevated_privileges(request, redirect_to)
if self.extra_context is not None:
context.update(self.extra_context)
return TemplateResponse(request, self.template_name, context)
|
elevate
elevate(request, **kwargs)
Source code in hypha/elevate/views.py
| def elevate(request, **kwargs):
return ElevateView(**kwargs).dispatch(request)
|
redirect_to_elevate
redirect_to_elevate(next_url, elevate_url=None)
Redirects the user to the login page, passing the given 'next' page
Source code in hypha/elevate/views.py
| def redirect_to_elevate(next_url, elevate_url=None):
"""
Redirects the user to the login page, passing the given 'next' page
"""
if elevate_url is None:
elevate_url = URL
try:
# django 1.10 and greater can't resolve the string 'elevate.views.elevate' to a URL
# https://docs.djangoproject.com/en/1.10/releases/1.10/#removed-features-1-10
elevate_url = import_string(elevate_url)
except ImportError:
pass # wasn't a dotted path
elevate_url_parts = list(urlparse(resolve_url(elevate_url)))
querystring = QueryDict(elevate_url_parts[4], mutable=True)
querystring[REDIRECT_FIELD_NAME] = next_url
elevate_url_parts[4] = querystring.urlencode(safe="/")
return HttpResponseRedirect(urlunparse(elevate_url_parts))
|