Merge branch 'fix-internal-server-errors' into 'master'

Fix internal server errors

See merge request !8
diff --git a/crashreports/rest_api_devices.py b/crashreports/rest_api_devices.py
index 3934db6..e3a4e5f 100644
--- a/crashreports/rest_api_devices.py
+++ b/crashreports/rest_api_devices.py
@@ -1,6 +1,6 @@
 from crashreports.models import *
 from crashreports.permissions import HasRightsOrIsDeviceOwnerDeviceCreation
-from crashreports.serializers import DeviceSerializer
+from crashreports.serializers import DeviceSerializer, DeviceCreateSerializer
 from django.contrib.auth.models import Permission
 from rest_framework import generics
 from rest_framework.authtoken.models import Token
@@ -36,13 +36,16 @@
     a token.
     We generate the uuid here as this makes it easier to deal with collisions.
     """
+    # Return status '400 Bad Request' if data is not well-formed.
+    serializer = DeviceCreateSerializer(data=request.data)
+    serializer.is_valid(raise_exception=True)
     device = Device()
     user = User.objects.create_user("device_" + str(device.uuid), '', None)
     permission = Permission.objects.get(name='Can add crashreport')
     user.user_permissions.add(permission)
     user.save()
-    device.board_date = request.data['board_date']
-    device.chipset = request.data['chipset']
+    device.board_date = serializer.validated_data['board_date']
+    device.chipset = serializer.validated_data['chipset']
     device.user = user
     device.token = Token.objects.create(user=user).key
     device.save()
diff --git a/crashreports/serializers.py b/crashreports/serializers.py
index e219242..dffce56 100644
--- a/crashreports/serializers.py
+++ b/crashreports/serializers.py
@@ -82,3 +82,14 @@
 
     class Meta:
         model = Device
+
+
+class DeviceCreateSerializer(DeviceSerializer):
+
+    class Meta:
+        model = Device
+        fields = ('board_date', 'chipset')
+        extra_kwargs = {
+            'board_date': {'required': True},
+            'chipset': {'required': True},
+        }
diff --git a/crashreports/tests.py b/crashreports/tests.py
index ea29d57..1f88f22 100644
--- a/crashreports/tests.py
+++ b/crashreports/tests.py
@@ -11,14 +11,37 @@
 class DeviceTestCase(APITestCase):
 
     def setUp(self):
-        pass
+        self.url = "/hiccup/api/v1/devices/register/"
 
     def test(self):
-        request = self.client.post("/hiccup/api/v1/devices/register/", device_register_data)
+        request = self.client.post(self.url, device_register_data)
         self.assertTrue("token" in request.data)
         self.assertTrue("uuid" in request.data)
         self.assertEqual(request.status_code, status.HTTP_200_OK)
 
+    def test_create_missing_fields(self):
+        request = self.client.post(self.url)
+        self.assertEqual(request.status_code, status.HTTP_400_BAD_REQUEST)
+
+    def test_create_missing_board_date(self):
+        request = self.client.post(self.url, {
+            "board_date": device_register_data["board_date"]
+        })
+        self.assertEqual(request.status_code, status.HTTP_400_BAD_REQUEST)
+
+    def test_create_missing_chipset(self):
+        request = self.client.post(self.url, {
+            "chipset": device_register_data["chipset"]
+        })
+        self.assertEqual(request.status_code, status.HTTP_400_BAD_REQUEST)
+
+    def test_create_invalid_board_date(self):
+        request = self.client.post(self.url, {
+            "board_date": "not_a_valid_date"
+        })
+        self.assertEqual(request.status_code, status.HTTP_400_BAD_REQUEST)
+
+
 # Create your tests here.
 
 device_register_data = {
diff --git a/hiccup/settings.py b/hiccup/settings.py
index bac2829..939e5e3 100644
--- a/hiccup/settings.py
+++ b/hiccup/settings.py
@@ -183,6 +183,29 @@
 
 STATIC_ROOT = "/home/hiccup/static/static"
 
+
+# Logging
+# https://docs.djangoproject.com/en/2.0/topics/logging/#examples
+
+LOGGING = {
+    'version': 1,
+    'disable_existing_loggers': False,
+    'handlers': {
+        'file': {
+            'level': 'DEBUG',
+            'class': 'logging.FileHandler',
+            'filename': '/home/hiccup/log/debug.log',
+        },
+    },
+    'loggers': {
+        'django': {
+            'handlers': ['file'],
+            'level': 'DEBUG',
+            'propagate': True,
+        },
+    },
+}
+
 try:
     from local_settings import *
 except ImportError as e: