123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
-
-
-
-
-
- from pyramid.events import NewResponse
-
-
- def add_cors_support(config):
-
- config.add_directive(
- 'add_cors_preflight_handler',
- add_cors_preflight_handler
- )
- config.add_route_predicate('cors_preflight', CorsPreflightPredicate)
-
-
- config.add_subscriber(add_cors_to_response, NewResponse)
-
-
- class CorsPreflightPredicate(object):
- def __init__(self, val, config):
- self.val = val
-
- def text(self):
- return 'cors_preflight = %s' % bool(self.val)
-
- phash = text
-
- def __call__(self, context, request):
- if not self.val:
- return False
- return (
- request.method == 'OPTIONS' and
- 'Origin' in request.headers and
- 'Access-Control-Request-Method' in request.headers
- )
-
-
- def add_cors_preflight_handler(config):
-
-
-
-
- config.add_route(
- 'cors-options-preflight', '/{catch_all:.*}',
- cors_preflight=True,
- )
- config.add_view(
- cors_options_view,
- route_name='cors-options-preflight',
- )
-
-
- def cors_options_view(context, request):
- response = request.response
- if 'Access-Control-Request-Headers' in request.headers:
- response.headers['Access-Control-Allow-Methods'] = (
- 'OPTIONS,HEAD,GET,POST,PUT,DELETE'
- )
- response.headers['Access-Control-Allow-Headers'] = (
- 'Content-Type,Accept,Accept-Language,Authorization,X-Request-ID'
- )
- return response
-
-
- def add_cors_to_response(event):
-
- request = event.request
- response = event.response
- if 'Origin' in request.headers:
- response.headers['Access-Control-Expose-Headers'] = (
- 'Content-Type,Date,Content-Length,Authorization,X-Request-ID'
- )
-
- response.headers['Access-Control-Allow-Origin'] = '*'
- response.headers['Access-Control-Allow-Credentials'] = 'true'
|