Skip to content

Commit a56d3ea

Browse files
authored
Update file upload field to accept dynamic file types and add validation for supported extensions (#14143)
1 parent 5c2469b commit a56d3ea

1 file changed

Lines changed: 13 additions & 3 deletions

File tree

dojo/forms.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -891,7 +891,7 @@ class EditRiskAcceptanceForm(forms.ModelForm):
891891
recommendation = forms.ChoiceField(choices=Risk_Acceptance.TREATMENT_CHOICES, initial=Risk_Acceptance.TREATMENT_ACCEPT, widget=forms.RadioSelect, label="Security Recommendation")
892892
decision = forms.ChoiceField(choices=Risk_Acceptance.TREATMENT_CHOICES, initial=Risk_Acceptance.TREATMENT_ACCEPT, widget=forms.RadioSelect)
893893

894-
path = forms.FileField(label="Proof", required=False, widget=forms.widgets.FileInput(attrs={"accept": ".jpg,.png,.pdf"}))
894+
path = forms.FileField(label="Proof", required=False, widget=forms.widgets.FileInput(attrs={"accept": ", ".join(settings.FILE_IMPORT_TYPES)}))
895895
expiration_date = forms.DateTimeField(required=False, widget=forms.TextInput(attrs={"class": "datepicker"}))
896896

897897
class Meta:
@@ -904,10 +904,20 @@ def __init__(self, *args, **kwargs):
904904
self.fields["expiration_date_warned"].disabled = True
905905
self.fields["expiration_date_handled"].disabled = True
906906

907+
def clean_path(self):
908+
if (data := self.cleaned_data.get("path")) is not None:
909+
ext = Path(data.name).suffix # [0] returns path+filename
910+
valid_extensions = settings.FILE_UPLOAD_TYPES
911+
if ext.lower() not in valid_extensions:
912+
if accepted_extensions := f"{', '.join(valid_extensions)}":
913+
msg = f"Unsupported extension. Supported extensions are as follows: {accepted_extensions}"
914+
else:
915+
msg = "File uploads are prohibited due to the list of acceptable file extensions being empty"
916+
raise ValidationError(msg)
917+
return data
918+
907919

908920
class RiskAcceptanceForm(EditRiskAcceptanceForm):
909-
# path = forms.FileField(label="Proof", required=False, widget=forms.widgets.FileInput(attrs={"accept": ".jpg,.png,.pdf"}))
910-
# expiration_date = forms.DateTimeField(required=False, widget=forms.TextInput(attrs={'class': 'datepicker'}))
911921
accepted_findings = forms.ModelMultipleChoiceField(
912922
queryset=Finding.objects.none(), required=True,
913923
widget=forms.widgets.SelectMultiple(attrs={"size": 10}),

0 commit comments

Comments
 (0)