summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Mekin <anmekin@gmail.com>2016-06-08 14:59:46 +0300
committerAndrey Mekin <anmekin@gmail.com>2016-06-08 14:59:46 +0300
commite627079ee8c31645b532f7c788bbe84da595f37f (patch)
tree3bafe94c5eb8e649daac451525d2bb88a5fa1d5d
parentdcdcd6e4fc16e48cd458718bdb282948af2257f3 (diff)
parenteee55e2cfcf54463c0d1451aae4e993a4e20e58f (diff)
downloadomaha-server-e627079ee8c31645b532f7c788bbe84da595f37f.zip
omaha-server-e627079ee8c31645b532f7c788bbe84da595f37f.tar.gz
omaha-server-e627079ee8c31645b532f7c788bbe84da595f37f.tar.bz2
Merge pull request #187 from anmekin/fix/invalid_feedbacks
Increase page_url length
-rw-r--r--omaha_server/feedback/migrations/0007_auto_20160608_1029.py28
-rw-r--r--omaha_server/feedback/models.py2
-rw-r--r--omaha_server/feedback/tests/test_views.py12
-rw-r--r--omaha_server/feedback/views.py15
4 files changed, 47 insertions, 10 deletions
diff --git a/omaha_server/feedback/migrations/0007_auto_20160608_1029.py b/omaha_server/feedback/migrations/0007_auto_20160608_1029.py
new file mode 100644
index 0000000..c4fd45d
--- /dev/null
+++ b/omaha_server/feedback/migrations/0007_auto_20160608_1029.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('feedback', '0006_auto_20151209_1040'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='FeedbackDescription',
+ fields=[
+ ],
+ options={
+ 'proxy': True,
+ },
+ bases=('feedback.feedback',),
+ ),
+ migrations.AlterField(
+ model_name='feedback',
+ name='page_url',
+ field=models.CharField(max_length=2048, null=True, blank=True),
+ ),
+ ]
diff --git a/omaha_server/feedback/models.py b/omaha_server/feedback/models.py
index a3f0192..7c8713c 100644
--- a/omaha_server/feedback/models.py
+++ b/omaha_server/feedback/models.py
@@ -55,7 +55,7 @@ def attach_upload_to(obj, filename):
class Feedback(BaseModel):
description = models.TextField()
email = models.CharField(max_length=500, null=True, blank=True)
- page_url = models.CharField(max_length=500, null=True, blank=True)
+ page_url = models.CharField(max_length=2048, null=True, blank=True)
screenshot = models.ImageField(upload_to=screenshot_upload_to, blank=True, null=True)
screenshot_size = models.PositiveIntegerField(null=True, blank=True)
blackbox = models.FileField(upload_to=blackbox_upload_to, blank=True, null=True)
diff --git a/omaha_server/feedback/tests/test_views.py b/omaha_server/feedback/tests/test_views.py
index e36366e..d74dc01 100644
--- a/omaha_server/feedback/tests/test_views.py
+++ b/omaha_server/feedback/tests/test_views.py
@@ -122,12 +122,12 @@ class FeedbackViewTest(test.TestCase):
# No description provided - form is not valid
self.assertEqual(Feedback.objects.all().count(), 0)
- with self.assertRaises(NotImplementedError):
- self.client.post(
- reverse('feedback'),
- data=body,
- content_type='application/x-protobuf'
- )
+ resp = self.client.post(
+ reverse('feedback'),
+ data=body,
+ content_type='application/x-protobuf'
+ )
+ self.assertEqual(resp.status_code, 400)
self.assertEqual(Feedback.objects.all().count(), 0)
# Fail to parse protobuf messages
diff --git a/omaha_server/feedback/views.py b/omaha_server/feedback/views.py
index 906ed01..7182293 100644
--- a/omaha_server/feedback/views.py
+++ b/omaha_server/feedback/views.py
@@ -23,14 +23,22 @@ from copy import copy
from django.core.files.uploadedfile import SimpleUploadedFile
from django.views.generic import FormView
from django.views.decorators.csrf import csrf_exempt
-from django.http import HttpResponse
+from django.http import HttpResponse, HttpResponseBadRequest
+from django.conf import settings
+
from google.protobuf.descriptor import FieldDescriptor
from protobuf_to_dict import protobuf_to_dict, TYPE_CALLABLE_MAP
+from raven import Client
from feedback.forms import FeedbackForm
from feedback.proto_gen.extension_pb2 import ExtensionSubmit
from omaha_server.utils import get_client_ip
+dsn = getattr(settings, 'RAVEN_CONFIG', None)
+if dsn:
+ dsn = dsn['dsn']
+raven = Client(dsn, name=getattr(settings, 'HOST_NAME', None), release=getattr(settings, 'APP_VERSION', None))
+
class FeedbackFormView(FormView):
http_method_names = ('post',)
@@ -80,5 +88,6 @@ class FeedbackFormView(FormView):
return HttpResponse(obj.pk, status=200)
def form_invalid(self, form):
- # We're not expecting to end up here in case of correct request
- raise NotImplementedError
+ message = 'Invalid feedback form: ' + form.errors.as_json()
+ raven.captureMessage(message=message, extra=form.cleaned_data)
+ return HttpResponseBadRequest(message)