This repository has been archived on 2020-03-24. You can view files and clone it, but cannot push or open issues or pull requests.
quay/endpoints/decorators.py
2017-03-22 23:53:03 -04:00

40 lines
1.2 KiB
Python

""" Various decorators for endpoint and API handlers. """
from functools import wraps
from flask import abort
import features
from auth.auth_context import (get_validated_oauth_token, get_authenticated_user,
get_validated_token, get_grant_context)
from data import model # TODO: stop using model directly
def anon_allowed(func):
""" Marks a method to allow anonymous access where it would otherwise be disallowed. """
func.__anon_allowed = True
return func
def anon_protect(func):
""" Marks a method as requiring some form of valid user auth before it can be executed. """
func.__anon_protected = True
return check_anon_protection(func)
def check_anon_protection(func):
""" Validates a method as requiring some form of valid user auth before it can be executed. """
@wraps(func)
def wrapper(*args, **kwargs):
# Skip if anonymous access is allowed.
if features.ANONYMOUS_ACCESS or '__anon_allowed' in dir(func):
return func(*args, **kwargs)
# Check for validated context. If none exists, fail with a 401.
if (get_authenticated_user() or get_validated_oauth_token() or get_validated_token() or
get_grant_context()):
return func(*args, **kwargs)
abort(401)
return wrapper