Util function to convert django meta to proper headers

merge-requests/154/head
Eliot Berriot 2018-03-31 18:39:10 +02:00
rodzic 043153a520
commit 46d40c7ffa
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: DD6965E2476E5C27
2 zmienionych plików z 55 dodań i 0 usunięć

Wyświetl plik

@ -12,3 +12,24 @@ def full_url(path):
return root + '/' + path
else:
return root + path
def clean_wsgi_headers(raw_headers):
"""
Convert WSGI headers from CONTENT_TYPE to Content-Type notation
"""
cleaned = {}
non_prefixed = [
'content_type',
'content_length',
]
for raw_header, value in raw_headers.items():
h = raw_header.lower()
if not h.startswith('http_') and h not in non_prefixed:
continue
words = h.replace('http_', '', 1).split('_')
cleaned_header = '-'.join([w.capitalize() for w in words])
cleaned[cleaned_header] = value
return cleaned

Wyświetl plik

@ -12,3 +12,37 @@ from funkwhale_api.federation import utils
def test_full_url(settings, url, path, expected):
settings.FUNKWHALE_URL = url
assert utils.full_url(path) == expected
def test_extract_headers_from_meta():
wsgi_headers = {
'HTTP_HOST': 'nginx',
'HTTP_X_REAL_IP': '172.20.0.4',
'HTTP_X_FORWARDED_FOR': '188.165.228.227, 172.20.0.4',
'HTTP_X_FORWARDED_PROTO': 'http',
'HTTP_X_FORWARDED_HOST': 'localhost:80',
'HTTP_X_FORWARDED_PORT': '80',
'HTTP_CONNECTION': 'close',
'CONTENT_LENGTH': '1155',
'CONTENT_TYPE': 'txt/application',
'HTTP_SIGNATURE': 'Hello',
'HTTP_DATE': 'Sat, 31 Mar 2018 13:53:55 GMT',
'HTTP_USER_AGENT': 'http.rb/3.0.0 (Mastodon/2.2.0; +https://mastodon.eliotberriot.com/)'}
cleaned_headers = utils.clean_wsgi_headers(wsgi_headers)
expected = {
'Host': 'nginx',
'X-Real-Ip': '172.20.0.4',
'X-Forwarded-For': '188.165.228.227, 172.20.0.4',
'X-Forwarded-Proto': 'http',
'X-Forwarded-Host': 'localhost:80',
'X-Forwarded-Port': '80',
'Connection': 'close',
'Content-Length': '1155',
'Content-Type': 'txt/application',
'Signature': 'Hello',
'Date': 'Sat, 31 Mar 2018 13:53:55 GMT',
'User-Agent': 'http.rb/3.0.0 (Mastodon/2.2.0; +https://mastodon.eliotberriot.com/)'
}
assert cleaned_headers == expected