kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
Util function to convert django meta to proper headers
rodzic
043153a520
commit
46d40c7ffa
|
@ -12,3 +12,24 @@ def full_url(path):
|
||||||
return root + '/' + path
|
return root + '/' + path
|
||||||
else:
|
else:
|
||||||
return root + path
|
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
|
||||||
|
|
|
@ -12,3 +12,37 @@ from funkwhale_api.federation import utils
|
||||||
def test_full_url(settings, url, path, expected):
|
def test_full_url(settings, url, path, expected):
|
||||||
settings.FUNKWHALE_URL = url
|
settings.FUNKWHALE_URL = url
|
||||||
assert utils.full_url(path) == expected
|
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
|
||||||
|
|
Ładowanie…
Reference in New Issue