def private(f):
"""Only allow approved source addresses."""
@functools.wraps(f)
def wrapper(self, request):
if not request.access_route:
# this means something probably bugged in werkzeug, but let's fail
# gracefully
return Response('no client ip provided', status='403')
ip_str = request.access_route[-1]
if isinstance(ip_str, bytes):
ip_str = ip_str.decode('utf8')
ip = ip_address(ip_str)
if ip.is_loopback or any(ip in network for network in get_networks()):
return f(self, request)
else:
msg = PRIVATE_BODY_RESPONSE_TEMPLATE.format(
ip_str,
force_unicode(request.remote_addr),
request.headers.get('x-forwarded-for'))
return Response(msg, status='403')
return wrapper
评论列表
文章目录