Projet

Général

Profil

0001-url-encode-filenames-12793.patch

Josué Kouka, 29 juillet 2016 12:49

Télécharger (2,46 ko)

Voir les différences:

Subject: [PATCH] url encode filenames (#12793)

 fargo/fargo/models.py |  9 +++++++--
 tests/test_api.py     | 17 +++++++++++++++++
 2 files changed, 24 insertions(+), 2 deletions(-)
fargo/fargo/models.py
3 3
import subprocess
4 4
import os
5 5
import threading
6
import urllib
6 7

  
7 8
from django.conf import settings
8 9
from django.core.urlresolvers import reverse
......
60 61
        verbose_name_plural = _('user documents')
61 62
        ordering = ('-created', 'user')
62 63

  
64
    @property
65
    def filename_encoded(self):
66
        return urllib.quote(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('coin'),
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
    slashed = models.UserDocument.objects.first()
150
    assert slashed.filename == 'monfichier 18/06/2017.pdf'
151
    assert slashed.get_download_url() == '/1/download/monfichier%252018%252F06%252F2017.pdf'
135
-