Skip to content
This repository has been archived by the owner on Mar 2, 2021. It is now read-only.

Commit

Permalink
make django META case-insensitive
Browse files Browse the repository at this point in the history
  • Loading branch information
tumb1er committed Jun 23, 2015
1 parent bad2e3e commit 10e2e18
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 4 deletions.
11 changes: 7 additions & 4 deletions dvasya/contrib/django.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import asyncio
import cgi
import codecs
from aiohttp.multidict import CIMultiDictProxy, CIMultiDict

from aiohttp.web import Request, Response, StreamResponse, FileField
from django.core.urlresolvers import Resolver404
Expand Down Expand Up @@ -64,13 +65,15 @@ def _parse_encoding(self, request):
def _init_meta(self, request):
transport = self.__request.transport
remote_addr, remote_port = transport.get_extra_info("peername")
self.META = {
meta = CIMultiDict({
k.replace('-', '_'): v
for k, v in request.headers.items()})
peer_info = {
'REMOTE_ADDR': remote_addr,
"REMOTE_PORT": remote_port
}

for k, v in request.headers.items():
self.META[k.upper().replace('-', '_')] = v
meta.update(peer_info)
self.META = CIMultiDictProxy(meta)


class DjangoRequestProxyMiddleware(RequestProxyMiddleware):
Expand Down
17 changes: 17 additions & 0 deletions tests_django.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,20 @@ def testMeta(self):
meta = data['request']['META']
peername = (meta['REMOTE_ADDR'], meta['REMOTE_PORT'])
self.assertTupleEqual(peername, self.client.peername)

def testCaseInsensitiveHeaders(self):
url = '/rest/'
headers = {
'X-Real-IP': '127.0.0.2',
'Remote-addr': "hacked_addr"
}
data = {"ok": True}
from rest_framework.response import Response

with mock.patch('testapp.django_compat.views.SampleView.get',
return_value=Response(data)) as p:
response = self.client.get(url, headers=headers)
self.assertEqual(response.text, json.dumps(data).replace(' ', ''))
request = p.call_args[0][0]
self.assertEqual(request.META.get('X_REAL_IP'), '127.0.0.2')
self.assertEqual(request.META.get('REMOTE_ADDR'), '127.0.0.1')

0 comments on commit 10e2e18

Please sign in to comment.