diff --git a/edivorce/apps/core/serializer.py b/edivorce/apps/core/serializer.py index c756d1f3..f597a61f 100644 --- a/edivorce/apps/core/serializer.py +++ b/edivorce/apps/core/serializer.py @@ -3,6 +3,7 @@ from rest_framework import serializers from rest_framework.exceptions import ValidationError from .models import Document, UserResponse +from .validators import * class UserResponseSerializer(serializers.ModelSerializer): @@ -23,22 +24,11 @@ class UserResponseSerializer(serializers.ModelSerializer): instance.save() -def valid_file_extension(file): - extension = file.name.split('.')[-1] - if extension.lower() not in ['pdf', 'png', 'gif', 'jpg', 'jpe', 'jpeg']: - raise ValidationError(f'File type not supported: {extension}') - - -def valid_doc_type(value): - valid_codes = ['AAI', 'AFDO', 'AFTL', 'CSA', 'EFSS', 'MC', 'NCV', 'OFI', 'RDP'] - if value.upper() not in valid_codes: - raise ValidationError(f'Doc type not supported: {value}. Valid codes: {", ".join(valid_codes)}') - - class CreateDocumentSerializer(serializers.ModelSerializer): doc_type = serializers.CharField(required=True, validators=[valid_doc_type]) party_code = serializers.IntegerField(min_value=0, max_value=2, required=True) - file = serializers.FileField(required=True, validators=[valid_file_extension]) + file = serializers.FileField(required=True, + validators=[valid_file_extension, file_scan_validation]) filename = serializers.CharField(read_only=True) size = serializers.IntegerField(read_only=True) rotation = serializers.IntegerField(read_only=True) @@ -62,11 +52,6 @@ class CreateDocumentSerializer(serializers.ModelSerializer): return response -def valid_rotation(value): - if value % 90 != 0: - raise serializers.ValidationError('Rotation must be 0, 90, 180, or 270') - - class DocumentMetadataSerializer(serializers.ModelSerializer): doc_type = serializers.CharField(read_only=True) party_code = serializers.IntegerField(read_only=True) diff --git a/edivorce/apps/core/validators.py b/edivorce/apps/core/validators.py index adf83148..cafb91c4 100644 --- a/edivorce/apps/core/validators.py +++ b/edivorce/apps/core/validators.py @@ -41,4 +41,22 @@ def file_scan_validation(file): if result and result['stream'][0] == 'FOUND': logger.warning('Virus found: {}'.format(file.name)) - raise ValidationError('Infected file found.', code='infected') + raise ValidationError('Infected file found. ' + file.name, code='infected') + + +def valid_file_extension(file): + extension = file.name.split('.')[-1] + if extension.lower() not in ['pdf', 'png', 'gif', 'jpg', 'jpe', 'jpeg']: + raise ValidationError(f'File type not supported: {extension}') + + +def valid_doc_type(value): + valid_codes = ['AAI', 'AFDO', 'AFTL', 'CSA', 'EFSS', 'MC', 'NCV', 'OFI', 'RDP'] + if value.upper() not in valid_codes: + raise ValidationError( + f'Doc type not supported: {value}. Valid codes: {", ".join(valid_codes)}') + + +def valid_rotation(value): + if value % 90 != 0: + raise serializers.ValidationError('Rotation must be 0, 90, 180, or 270') diff --git a/vue/src/components/Uploader/Uploader.vue b/vue/src/components/Uploader/Uploader.vue index c1a54d8c..8eccd742 100644 --- a/vue/src/components/Uploader/Uploader.vue +++ b/vue/src/components/Uploader/Uploader.vue @@ -194,7 +194,11 @@ const statusCode = newFile.xhr.status; if (statusCode === 400) { // 400 validation error: show the message returned by the server - const message = JSON.parse(newFile.xhr.responseText)[0]; + let message = newFile.xhr.responseText; + const response = JSON.parse(message); + if (response.file) { + message = response.file[0]; + } this.showError(message); this.$refs.upload.remove(newFile); } else if (statusCode === 403) {