Source code for adhocracy_core.rest.subscriber

"""Subscriber to modify the http response object."""
from pyramid.interfaces import IRequest
from pyramid.events import NewResponse
from adhocracy_core.authentication import AnonymizeHeader
from adhocracy_core.authentication import UserPasswordHeader
from adhocracy_core.interfaces import API_ROUTE_NAME


[docs]def set_response_headers(event: NewResponse): """Add CORS headers to response for api requests and /.""" if _is_api_request(event.request) or _is_root_request(event.request): add_cors_headers(event) else: _set_frame_options_header(event)
[docs]def add_cors_headers(event: NewResponse): """Add CORS headers to response.""" origin = event.request.headers.get('Origin', '*') event.response.headers.update({ 'Access-Control-Allow-Origin': origin, 'Access-Control-Allow-Headers': 'Origin, Content-Type, Accept, ' 'X-User-Path, X-User-Token, ' + AnonymizeHeader + ', ' + UserPasswordHeader, 'Access-Control-Allow-Credentials': 'true', 'Access-Control-Allow-Methods': 'POST,GET,DELETE,PUT,OPTIONS', })
def _set_frame_options_header(event: NewResponse): event.response.headers.update({'X-Frame-Options': 'DENY'}) def _is_api_request(request: IRequest) -> bool: route_name = getattr(request.matched_route, 'name', '') return route_name == API_ROUTE_NAME def _is_root_request(request: IRequest) -> bool: return request.path == '/'
[docs]def includeme(config): """Register response subscriber.""" config.add_subscriber(set_response_headers, NewResponse)