diff --git a/greenmine/base/middleware.py b/greenmine/base/middleware.py index 27ee8776..8623f62f 100644 --- a/greenmine/base/middleware.py +++ b/greenmine/base/middleware.py @@ -1,6 +1,7 @@ import time from django.conf import settings +from django import http from django.utils.cache import patch_vary_headers from django.utils.http import cookie_date from django.utils.importlib import import_module @@ -48,3 +49,35 @@ class GreenmineSessionMiddleware(object): secure=settings.SESSION_COOKIE_SECURE or None, httponly=settings.SESSION_COOKIE_HTTPONLY or None) return response + + + +COORS_ALLOWED_ORIGINS = getattr(settings, 'COORS_ALLOWED_ORIGINS', '*') +COORS_ALLOWED_METHODS = getattr(settings, 'COORS_ALLOWED_METHODS', + ['POST', 'GET', 'OPTIONS', 'PUT', 'DELETE']) +COORS_ALLOWED_HEADERS = getattr(settings, 'COORS_ALLOWED_HEADERS', + ['Content-Type', 'X-Requested-With', + 'X-Session-Token', 'Accept-Encoding']) +COORS_ALLOWED_CREDENTIALS = getattr(settings, 'COORS_ALLOWED_CREDENTIALS', True) + + +class CoorsMiddleware(object): + def _populate_response(self, response): + response['Access-Control-Allow-Origin'] = COORS_ALLOWED_ORIGINS + response['Access-Control-Allow-Methods'] = ",".join(COORS_ALLOWED_METHODS) + response['Access-Control-Allow-Headers'] = ",".join(COORS_ALLOWED_HEADERS) + + if COORS_ALLOWED_CREDENTIALS: + response['Access-Control-Allow-Credentials'] = 'true' + + def process_request(self, request): + if 'HTTP_ACCESS_CONTROL_REQUEST_METHOD' in request.META: + response = http.HttpResponse() + self._populate_response(response) + return response + + return None + + def process_response(self, request, response): + self._populate_response(response) + return response diff --git a/greenmine/settings/common.py b/greenmine/settings/common.py index e595bf15..9c2bbd4d 100644 --- a/greenmine/settings/common.py +++ b/greenmine/settings/common.py @@ -164,6 +164,7 @@ TEMPLATE_LOADERS = [ MIDDLEWARE_CLASSES = [ 'django.middleware.common.CommonMiddleware', 'greenmine.base.middleware.GreenmineSessionMiddleware', + 'greenmine.base.middleware.CoorsMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',