Skip to content

Commit

Permalink
jpegPhoto upload fixed. now we're validating mimetype to image/*
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Sep 29, 2022
1 parent db8d635 commit c29a60c
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,21 @@
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import javax.annotation.PostConstruct;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.springframework.stereotype.Component;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.DOMUtil;
import com.evolveum.midpoint.web.component.input.UploadDownloadPanel;
import com.evolveum.midpoint.web.component.prism.InputPanel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType;

/**
* @author katkav
Expand All @@ -39,7 +44,7 @@ public void register() {

@Override
protected InputPanel getPanel(PrismPropertyPanelContext<T> panelCtx) {
return new UploadDownloadPanel(panelCtx.getComponentId(), false) { //getModelService().getObject().isReadonly()
UploadDownloadPanel panel = new UploadDownloadPanel(panelCtx.getComponentId(), false) { //getModelService().getObject().isReadonly()

private static final long serialVersionUID = 1L;

Expand All @@ -62,6 +67,19 @@ public void uploadFileFailed(AjaxRequestTarget target) {
super.uploadFileFailed(target);
target.add(((PageBase) getPage()).getFeedbackPanel());
}

@Override
public List<String> getAllowedUploadContentTypes() {
ItemPath path = panelCtx.getValueWrapperModel().getObject().getParent().getPath();

if (Objects.equals(path, ItemPath.create(FocusType.F_JPEG_PHOTO))) {
return Arrays.asList("image/*");
}

return super.getAllowedUploadContentTypes();
}
};

return panel;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import javax.activation.MimeType;
import javax.activation.MimeTypeParseException;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
Expand All @@ -21,14 +24,16 @@
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.upload.FileUpload;
import org.apache.wicket.markup.html.form.upload.FileUploadField;
import org.apache.wicket.validation.IValidatable;
import org.apache.wicket.validation.IValidator;
import org.apache.wicket.validation.ValidationError;

import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.AjaxDownloadBehaviorFromStream;
import com.evolveum.midpoint.web.component.AjaxSubmitButton;
import com.evolveum.midpoint.web.component.prism.InputPanel;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;

/**
* @author shood
Expand All @@ -49,11 +54,24 @@ public class UploadDownloadPanel extends InputPanel {
private final String downloadFileName = null;
private boolean isReadOnly;

private List<String> allowedUploadContentTypes = new ArrayList<>();

public UploadDownloadPanel(String id, boolean isReadOnly) {
super(id);
this.isReadOnly = isReadOnly;
}

public List<String> getAllowedUploadContentTypes() {
return allowedUploadContentTypes;
}

public void setAllowedUploadContentTypes(List<String> allowedUploadContentTypes) {
if (allowedUploadContentTypes == null) {
allowedUploadContentTypes = new ArrayList<>();
}
this.allowedUploadContentTypes = allowedUploadContentTypes;
}

@Override
protected void onInitialize() {
super.onInitialize();
Expand Down Expand Up @@ -91,13 +109,55 @@ protected void onError(AjaxRequestTarget target) {
UploadDownloadPanel.this.uploadFilePerformed(target);
}
});
fileUpload.add(new VisibleEnableBehaviour() {
private static final long serialVersionUID = 1L;
fileUpload.add(new VisibleBehaviour(() -> !isReadOnly));
fileUpload.add(new IValidator<>() {

@Override
public boolean isVisible() {
return !isReadOnly;
public void validate(IValidatable<List<FileUpload>> validatable) {
List<FileUpload> list = validatable.getValue();
if (list == null) {
return;
}

if (getAllowedUploadContentTypes().isEmpty()) {
return;
}

String label = fileUpload.getLabel() != null ? fileUpload.getLabel().getObject() : fileUpload.getId();

try {
List<MimeType> allowedTypes = getAllowedUploadContentTypes().stream()
.map(s -> {
try {
return new MimeType(s);
} catch (MimeTypeParseException ex) {
return null;
}
})
.filter(m -> m != null)
.collect(Collectors.toList());

for (FileUpload fu : list) {
String contentType = fu.getContentType();
MimeType mime = new MimeType(contentType);

boolean matched = false;
for (MimeType allowed : allowedTypes) {
if (allowed.match(mime)) {
matched = true;
break;
}
}

if (!matched) {
String msg = getPageBase().getString("UploadDownloadPanel.validationContentNotAllowed", label, contentType);
validatable.error(new ValidationError(msg));
}
}
} catch (MimeTypeParseException ex) {
String msg = getPageBase().getString("UploadDownloadPanel.validationContentNotAllowed", label, ex.getMessage());
validatable.error(new ValidationError(msg));
}
}
});
fileUpload.setOutputMarkupId(true);
Expand Down Expand Up @@ -144,16 +204,7 @@ protected void onSubmit(AjaxRequestTarget target) {
deleteButton.add(new VisibleBehaviour(() -> !isReadOnly));
add(deleteButton);

add(new VisibleEnableBehaviour() {
private static final long serialVersionUID = 1L;

@Override
public boolean isVisible() {
return !isReadOnly;

}

});
add(new VisibleBehaviour(() -> !isReadOnly));
}

@Override
Expand Down

0 comments on commit c29a60c

Please sign in to comment.