diff --git a/manager/api/migrations/0010_auto_20220914_1542.py b/manager/api/migrations/0010_auto_20220914_1542.py new file mode 100644 index 00000000..85545a05 --- /dev/null +++ b/manager/api/migrations/0010_auto_20220914_1542.py @@ -0,0 +1,37 @@ +# Generated by Django 3.1.14 on 2022-09-14 15:42 + +import api.models +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ("api", "0009_configfile_selected_by_users"), + ] + + operations = [ + migrations.AlterField( + model_name="configfile", + name="config_file", + field=models.FileField( + default="configs/default.json", + upload_to="configs/", + validators=[ + api.models.ConfigFile.validate_file_extension, + api.models.ConfigFile.validate_json_file, + ], + ), + ), + migrations.AlterField( + model_name="configfile", + name="selected_by_users", + field=models.ManyToManyField( + blank=True, + related_name="selected_config_file", + to=settings.AUTH_USER_MODEL, + ), + ), + ] diff --git a/manager/api/models.py b/manager/api/models.py index 95fb7241..211b5f3f 100644 --- a/manager/api/models.py +++ b/manager/api/models.py @@ -5,6 +5,7 @@ https://docs.djangoproject.com/en/2.2/topics/db/models/ """ import os +import json from django.conf import settings from django.db import models from django.db.models import F @@ -82,10 +83,16 @@ class ConfigFile(BaseModel): def validate_file_extension(value): ext = os.path.splitext(value.name)[1] # [0] returns path+filename - valid_extensions = [".json", ".sh"] + valid_extensions = [".json"] if not ext.lower() in valid_extensions: raise ValidationError("Unsupported file extension.") + def validate_json_file(value): + try: + json.loads(value.read().decode("ascii")) + except Exception: + raise ValidationError("Malformatted JSON object.") + user = models.ForeignKey( settings.AUTH_USER_MODEL, related_name="config_files", @@ -100,12 +107,12 @@ def validate_file_extension(value): config_file = models.FileField( upload_to="configs/", default="configs/default.json", - validators=[validate_file_extension], + validators=[validate_file_extension, validate_json_file], ) """Reference to the config file""" selected_by_users = models.ManyToManyField( - settings.AUTH_USER_MODEL, related_name="selected_config_file" + settings.AUTH_USER_MODEL, related_name="selected_config_file", blank=True, ) diff --git a/manager/api/serializers.py b/manager/api/serializers.py index 5483dfc8..2eae6072 100644 --- a/manager/api/serializers.py +++ b/manager/api/serializers.py @@ -75,7 +75,7 @@ class TimeDataSerializer(serializers.Serializer): class ConfigSerializer(serializers.Serializer): - """Custom Serializer to describe the confi file field for the Apidocs.""" + """Custom Serializer to describe the config file field for the Apidocs.""" config_file = serializers.JSONField()