Browse Source

DIV-1001 - Hook up virus scanner to file upload

pull/172/head
Michael Olund 5 years ago
parent
commit
e17dc16fdd
3 changed files with 27 additions and 20 deletions
  1. +3
    -18
      edivorce/apps/core/serializer.py
  2. +19
    -1
      edivorce/apps/core/validators.py
  3. +5
    -1
      vue/src/components/Uploader/Uploader.vue

+ 3
- 18
edivorce/apps/core/serializer.py View File

@ -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)


+ 19
- 1
edivorce/apps/core/validators.py View File

@ -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')

+ 5
- 1
vue/src/components/Uploader/Uploader.vue View File

@ -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) {


Loading…
Cancel
Save