diff --git a/endpoints/common.py b/endpoints/common.py index 887e34394..96fe48069 100644 --- a/endpoints/common.py +++ b/endpoints/common.py @@ -24,24 +24,6 @@ from _init import __version__ logger = logging.getLogger(__name__) -route_data = None - - -def truthy_param(param): - return param not in {False, 'false', 'False', '0', 'FALSE', '', 'null'} - - -def param_required(param_name, allow_body=False): - def wrapper(wrapped): - @wraps(wrapped) - def decorated(*args, **kwargs): - if param_name not in request.args: - if not allow_body or param_name not in request.values: - abort(make_response('Required param: %s' % param_name, 400)) - return wrapped(*args, **kwargs) - return decorated - return wrapper - def common_login(db_user, permanent_session=True): if login_user(LoginWrappedDBUser(db_user.uuid, db_user)): @@ -85,8 +67,6 @@ def _list_files(path, extension): def render_page_template(name, route_data=None, **kwargs): - debugging = app.config.get('DEBUGGING', False) - library_styles = [] main_styles = [] library_scripts = [] diff --git a/endpoints/decorators.py b/endpoints/decorators.py index 6d8a9993c..8337da812 100644 --- a/endpoints/decorators.py +++ b/endpoints/decorators.py @@ -1,7 +1,7 @@ """ Various decorators for endpoint and API handlers. """ from functools import wraps -from flask import abort +from flask import abort, request, make_response import features @@ -35,6 +35,22 @@ def parse_repository_name(include_tag=False, return inner +def param_required(param_name, allow_body=False): + """ Marks a route as requiring a parameter with the given name to exist in the request's arguments + or (if allow_body=True) in its body values. If the parameter is not present, the request will + fail with a 400. + """ + def wrapper(wrapped): + @wraps(wrapped) + def decorated(*args, **kwargs): + if param_name not in request.args: + if not allow_body or param_name not in request.values: + abort(make_response('Required param: %s' % param_name, 400)) + return wrapped(*args, **kwargs) + return decorated + return wrapper + + def anon_allowed(func): """ Marks a method to allow anonymous access where it would otherwise be disallowed. """ func.__anon_allowed = True diff --git a/endpoints/web.py b/endpoints/web.py index 7f3bb79ca..da33b0fdb 100644 --- a/endpoints/web.py +++ b/endpoints/web.py @@ -27,9 +27,10 @@ from buildtrigger.triggerutil import TriggerProviderException from data import model from data.database import db from endpoints.api.discovery import swagger_route_data -from endpoints.common import (common_login, render_page_template, param_required) +from endpoints.common import common_login, render_page_template from endpoints.csrf import csrf_protect, generate_csrf_token, verify_csrf -from endpoints.decorators import anon_protect, anon_allowed, route_show_if, parse_repository_name +from endpoints.decorators import (anon_protect, anon_allowed, route_show_if, parse_repository_name, + param_required) from health.healthcheck import get_healthchecker from util.cache import no_cache from util.headers import parse_basic_auth