lingo: use invoice filename in content-disposition (#76874) #124

Closed
lguerin wants to merge 1 commits from wip/76874-lingo-invoice-pdf-filename into main
2 changed files with 16 additions and 3 deletions

View File

@ -817,8 +817,15 @@ class ItemDownloadView(View):
return HttpResponseRedirect(self.request.headers.get('Referer'))
return HttpResponseRedirect('/')
filename = '"%s.pdf"' % item_id
if data.headers.get('content-disposition'):
if len(data.headers['content-disposition'].split('filename=')) == 2:
part = data.headers['content-disposition'].split('filename=')[1]
if part.endswith('.pdf') or part.endswith('.pdf"'):
filename = part
r = HttpResponse(data, content_type='application/pdf')
r['Content-Disposition'] = 'attachment; filename="%s.pdf"' % item_id
r['Content-Disposition'] = 'attachment; filename=%s' % filename
return r

View File

@ -599,7 +599,11 @@ def test_item_pdf(mock_send, app, remote_regie):
encrypt_reference = cell.crypto_reference
encrypt_payer = aes_hex_encrypt(settings.SECRET_KEY, force_bytes('42'))
app.get('/lingo/item/%s/%s/%s/pdf' % (remote_regie.id, encrypt_id, encrypt_reference))
mock_response = mock.Mock(status_code=200)
mock_response.headers = {}
mock_send.return_value = mock_response
resp = app.get('/lingo/item/%s/%s/%s/pdf' % (remote_regie.id, encrypt_id, encrypt_reference))
assert resp['Content-Disposition'] == 'attachment; filename="F201601.pdf"'
url = mock_send.call_args[0][0].url
scheme, netloc, path, dummy, querystring, dummy = urllib.parse.urlparse(url)
assert scheme == 'http'
@ -610,10 +614,12 @@ def test_item_pdf(mock_send, app, remote_regie):
assert 'payer_external_id' not in query
mock_send.reset_mock()
app.get(
mock_response.headers = {'content-disposition': 'filename="foo.pdf"'}
resp = app.get(
'/lingo/item/%s/%s/%s/pdf?payer_external_id=%s'
% (remote_regie.id, encrypt_id, encrypt_reference, encrypt_payer)
)
assert resp['Content-Disposition'] == 'attachment; filename="foo.pdf"'
url = mock_send.call_args[0][0].url
scheme, netloc, path, dummy, querystring, dummy = urllib.parse.urlparse(url)
assert scheme == 'http'