0001-url-encode-filenames-12793.patch
fargo/fargo/models.py | ||
---|---|---|
9 | 9 |
from django.db import models |
10 | 10 |
from django.utils.translation import ugettext_lazy as _ |
11 | 11 |
from django.utils.text import slugify |
12 |
from django.utils.http import urlquote |
|
12 | 13 |
from django.dispatch import receiver |
13 | 14 |
from django.db.models.signals import post_save |
14 | 15 |
from django.core.files.storage import default_storage |
... | ... | |
60 | 61 |
verbose_name_plural = _('user documents') |
61 | 62 |
ordering = ('-created', 'user') |
62 | 63 | |
64 |
@property |
|
65 |
def filename_encoded(self): |
|
66 |
return urlquote(self.filename, safe='') |
|
67 | ||
63 | 68 |
def get_download_url(self): |
64 |
return reverse('download', kwargs={'pk': self.id, 'filename': self.filename}) |
|
69 |
return reverse('download', kwargs={'pk': self.id, 'filename': self.filename_encoded})
|
|
65 | 70 | |
66 | 71 |
def get_thumbnail_url(self): |
67 | 72 |
if self.document.thumbnail: |
68 |
return reverse('thumbnail', kwargs={'pk': self.id, 'filename': self.filename}) |
|
73 |
return reverse('thumbnail', kwargs={'pk': self.id, 'filename': self.filename_encoded})
|
|
69 | 74 |
return '' |
70 | 75 | |
71 | 76 |
tests/test_api.py | ||
---|---|---|
132 | 132 |
assert response.json['errors'].keys() == ['__all__'] |
133 | 133 |
assert response.json['errors']['__all__'][0]['code'] == 'box-is-full' |
134 | 134 |
assert response.json['errors']['__all__'][0]['limit'] == 4 |
135 | ||
136 | ||
137 |
def test_push_document_slashed_name(app, admin_user, john_doe): |
|
138 |
login(app) |
|
139 |
url = reverse('fargo-api-push-document') |
|
140 |
data = { |
|
141 |
'user_email': john_doe.email, |
|
142 |
'origin': 'wcs', |
|
143 |
'file_b64_content': base64.b64encode('whatever'), |
|
144 |
'file_name': 'monfichier 18/06/2017.pdf', |
|
145 |
} |
|
146 |
response = app.post_json(url, data, status=200) |
|
147 |
assert response.json['result'] == 1 |
|
148 |
assert models.Document.objects.count() == 1 |
|
149 |
doc = models.UserDocument.objects.first() |
|
150 |
assert doc.filename == 'monfichier 18/06/2017.pdf' |
|
151 |
assert doc.get_download_url() == '/1/download/monfichier%252018%252F06%252F2017.pdf' |
|
152 |
login(app, user=john_doe) |
|
153 |
app.get(doc.get_download_url(), status=200) |
|
135 |
- |