fix validation of favorites locations
authorMaciej Tronowski <mtro@man.poznan.pl>
Tue, 21 Apr 2015 12:32:48 +0000 (14:32 +0200)
committerMaciej Tronowski <mtro@man.poznan.pl>
Tue, 21 Apr 2015 12:32:48 +0000 (14:32 +0200)
filex/forms.py
filex/migrations/0004_auto_20150421_1422.py [new file with mode: 0644]
filex/models.py
filex/validators.py [new file with mode: 0644]

index 17563b5..4151a16 100644 (file)
@@ -3,17 +3,10 @@ import os
 
 from django import forms
 from django.core.exceptions import ValidationError
-from django.core.validators import RegexValidator
 from django.utils.http import urlquote
 
 from filex.models import Favorite
-
-
-msg = u'Invalid value'
-host_validator = RegexValidator(r'^(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+'
-                                r'(?:[a-zA-Z]{2,6}\.?|[a-zA-Z0-9-]{2,}(?<!-)\.?))(?::\d+)?$', msg)
-path_validator = RegexValidator(r'^~?(?:/[^/\0]*)*$', msg)
-name_validator = RegexValidator(r'^[^/\0]+$', msg)
+from filex.validators import host_validator, path_validator, name_validator
 
 
 def clean_path(path):
@@ -26,6 +19,9 @@ class FavoriteForm(forms.ModelForm):
         fields = ('owner', 'host', 'path')
         widgets = {'owner': forms.HiddenInput()}
 
+    def clean_path(self):
+        return os.path.normpath(self.cleaned_data['path'])
+
 
 class HostForm(forms.Form):
     host = forms.CharField(label=u'Host', max_length=256, validators=[host_validator], widget=forms.HiddenInput())
diff --git a/filex/migrations/0004_auto_20150421_1422.py b/filex/migrations/0004_auto_20150421_1422.py
new file mode 100644 (file)
index 0000000..5ff96d2
--- /dev/null
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+import django.core.validators
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('filex', '0003_auto_20150420_1646'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='favorite',
+            name='host',
+            field=models.CharField(max_length=256, verbose_name='Host', validators=[django.core.validators.RegexValidator(b'^(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+(?:[a-zA-Z]{2,6}\\.?|[a-zA-Z0-9-]{2,}(?<!-)\\.?))(?::\\d+)?$', 'Invalid value')]),
+            preserve_default=True,
+        ),
+        migrations.AlterField(
+            model_name='favorite',
+            name='path',
+            field=models.CharField(default=b'~', max_length=1024, verbose_name='\u015acie\u017cka', validators=[django.core.validators.RegexValidator(b'^~?(?:/[^/\\0]*)*$', 'Invalid value')]),
+            preserve_default=True,
+        ),
+    ]
index d2d3792..235a3f4 100644 (file)
@@ -2,11 +2,13 @@
 from django.conf import settings
 from django.db import models
 
+from filex.validators import host_validator, path_validator
+
 
 class Favorite(models.Model):
     owner = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"Właściciel", related_name='favorites')
-    host = models.CharField(u"Host", max_length=256)
-    path = models.CharField(u"Ścieżka", max_length=1024, default='~')
+    host = models.CharField(u"Host", max_length=256, validators=[host_validator])
+    path = models.CharField(u"Ścieżka", max_length=1024, default='~', validators=[path_validator])
 
     created = models.DateTimeField(u"Utworzono", auto_now_add=True)
     updated = models.DateTimeField(u"Uaktualniono", auto_now=True)
@@ -17,4 +19,4 @@ class Favorite(models.Model):
         unique_together = ('owner', 'host', 'path')
 
     def __unicode__(self):
-        return u'{}{} ({})'.format(self.host, self.path, self.owner)
+        return u'{}/{} ({})'.format(self.host, self.path, self.owner)
diff --git a/filex/validators.py b/filex/validators.py
new file mode 100644 (file)
index 0000000..b1a621b
--- /dev/null
@@ -0,0 +1,7 @@
+from django.core.validators import RegexValidator
+
+msg = u'Invalid value'
+host_validator = RegexValidator(r'^(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+'
+                                r'(?:[a-zA-Z]{2,6}\.?|[a-zA-Z0-9-]{2,}(?<!-)\.?))(?::\d+)?$', msg)
+path_validator = RegexValidator(r'^~?(?:/[^/\0]*)*$', msg)
+name_validator = RegexValidator(r'^[^/\0]+$', msg)