From 188c40a1b6dfa80f351d292b29318f0c04d3e265 Mon Sep 17 00:00:00 2001 From: Isaac Bythewood Date: Tue, 1 May 2012 04:42:45 +0000 Subject: [PATCH] Added extra protocol checking. --- pinry/pins/forms.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/pinry/pins/forms.py b/pinry/pins/forms.py index c3175fd..e3b6e68 100644 --- a/pinry/pins/forms.py +++ b/pinry/pins/forms.py @@ -8,15 +8,31 @@ class PinForm(forms.ModelForm): def clean_url(self): data = self.cleaned_data['url'] + + # Test file type + image_file_types = ['png', 'gif', 'jpeg', 'jpg'] + file_type = data.split('.')[-1] + if file_type.lower() not in image_file_types: + raise forms.ValidationError("Requested URL is not an image file. Only images are currently supported.") + + # Check if pin already exists try: Pin.objects.get(url=data) raise forms.ValidationError("URL has already been pinned!") except Pin.DoesNotExist: - image_file_types = ['png', 'gif', 'jpeg', 'jpg'] - file_type = data.split('.')[-1] - if file_type.lower() not in image_file_types: - raise forms.ValidationError("Requested URL is not an image file. Only images are currently supported.") - return data + protocol = data.split(':')[0] + if protocol == 'http': + opp_data = data.replace('http://', 'https://') + elif protocol == 'https': + opp_data = data.replace('https://', 'http://') + else: + raise forms.ValidationError("Currently only support HTTP and HTTPS protocols, please be sure you include this in the URL.") + + try: + Pin.objects.get(url=opp_data) + raise forms.ValidationError("URL has already been pinned!") + except Pin.DoesNotExist: + return data class Meta: model = Pin