Skip to content

Utils

hypha.elevate.utils

elevate.utils ~~~~~~~~~~~~~

© © 2017-present by Justin Mayer. © © 2014-2016 by Matt Robenolt. :license: BSD, see LICENSE for more details.

grant_elevated_privileges

grant_elevated_privileges(request, max_age=COOKIE_AGE)

Assigns a random token to the user's session that allows them to have elevated permissions

Source code in hypha/elevate/utils.py
def grant_elevated_privileges(request, max_age=COOKIE_AGE):
    """
    Assigns a random token to the user's session
    that allows them to have elevated permissions
    """
    user = getattr(request, "user", None)

    # If there's not a user on the request, just noop
    if user is None:
        return

    if not user.is_authenticated:
        raise ValueError("User needs to be logged in to be elevated")

    # Token doesn't need to be unique,
    # just needs to be unpredictable and match the cookie and the session
    token = get_random_string(TOKEN_LENGTH)
    request.session[COOKIE_NAME] = token
    request._elevate = True
    request._elevate_token = token
    request._elevate_max_age = max_age
    return token

revoke_elevated_privileges

revoke_elevated_privileges(request)

Revoke elevated privileges from a request explicitly

Source code in hypha/elevate/utils.py
def revoke_elevated_privileges(request):
    """
    Revoke elevated privileges from a request explicitly
    """
    request._elevate = False
    if COOKIE_NAME in request.session:
        del request.session[COOKIE_NAME]

has_elevated_privileges

has_elevated_privileges(request)

Check if a request is allowed to perform Elevate actions

Source code in hypha/elevate/utils.py
def has_elevated_privileges(request):
    """
    Check if a request is allowed to perform Elevate actions
    """
    if getattr(request, "_elevate", None) is None:
        try:
            request._elevate = request.user.is_authenticated and constant_time_compare(
                request.get_signed_cookie(
                    COOKIE_NAME, salt=COOKIE_SALT, max_age=COOKIE_AGE
                ),
                request.session[COOKIE_NAME],
            )
        except (KeyError, BadSignature):
            request._elevate = False
    return request._elevate