diff options
author | Andrey Mekin <anmekin@gmail.com> | 2016-06-08 14:59:46 +0300 |
---|---|---|
committer | Andrey Mekin <anmekin@gmail.com> | 2016-06-08 14:59:46 +0300 |
commit | e627079ee8c31645b532f7c788bbe84da595f37f (patch) | |
tree | 3bafe94c5eb8e649daac451525d2bb88a5fa1d5d | |
parent | dcdcd6e4fc16e48cd458718bdb282948af2257f3 (diff) | |
parent | eee55e2cfcf54463c0d1451aae4e993a4e20e58f (diff) | |
download | omaha-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.py | 28 | ||||
-rw-r--r-- | omaha_server/feedback/models.py | 2 | ||||
-rw-r--r-- | omaha_server/feedback/tests/test_views.py | 12 | ||||
-rw-r--r-- | omaha_server/feedback/views.py | 15 |
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) |