This is an automated email from the ASF dual-hosted git repository. solomax pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to refs/heads/master by this push: new 9f12a4899 [OPENMEETINGS-2765] paths are being validated 9f12a4899 is described below commit 9f12a48994d0ad741ac140c52cbd2152f0d048d5 Author: Maxim Solodovnik <solomax...@gmail.com> AuthorDate: Thu Mar 30 16:21:10 2023 +0700 [OPENMEETINGS-2765] paths are being validated --- .../web/admin/configurations/ConfigForm.java | 35 ++++++++++++++++++++-- .../openmeetings/web/common/FormActionsPanel.java | 2 +- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigForm.java index 1e24eeeab..ba7a9c245 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigForm.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigForm.java @@ -18,10 +18,17 @@ */ package org.apache.openmeetings.web.admin.configurations; +import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PATH_FFMPEG; +import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PATH_IMAGEMAGIC; +import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PATH_OFFICE; +import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PATH_SOX; import static org.apache.openmeetings.web.common.BasePanel.EVT_CHANGE; import static org.apache.wicket.validation.validator.StringValidator.maximumLength; +import java.nio.file.InvalidPathException; +import java.nio.file.Path; import java.util.List; +import java.util.Set; import org.apache.openmeetings.db.dao.basic.ConfigurationDao; import org.apache.openmeetings.db.entity.basic.Configuration; @@ -59,6 +66,7 @@ import org.apache.wicket.validation.ValidationError; */ public class ConfigForm extends AdminBaseForm<Configuration> { private static final long serialVersionUID = 1L; + private static final Set<String> PATHS = Set.of(CONFIG_PATH_FFMPEG, CONFIG_PATH_IMAGEMAGIC, CONFIG_PATH_OFFICE, CONFIG_PATH_SOX); private final WebMarkupContainer listContainer; private final WebMarkupContainer stringBox = new WebMarkupContainer("string-box"); private final WebMarkupContainer numberBox = new WebMarkupContainer("number-box"); @@ -90,7 +98,7 @@ public class ConfigForm extends AdminBaseForm<Configuration> { private void update(AjaxRequestTarget target) { Configuration c = getModelObject(); - stringBox.setVisible(Type.STRING == c.getType()); + stringBox.setVisible(Type.PATH == c.getType() || Type.STRING == c.getType()); numberBox.setVisible(Type.NUMBER == c.getType()); booleanBox.setVisible(Type.BOOL == c.getType()); hotkeyBox.setVisible(Type.HOTKEY == c.getType()); @@ -151,6 +159,21 @@ public class ConfigForm extends AdminBaseForm<Configuration> { } }).add(maximumLength(255))); valueS.add(maximumLength(255)); + valueS.add(new IValidator<String>(){ + private static final long serialVersionUID = 1L; + + @Override + public void validate(IValidatable<String> validatable) { + Configuration c = getModelFixType(); + if (Type.PATH == c.getType()) { + try { + Path.of(validatable.getValue()); + } catch (InvalidPathException e) { + validatable.error(new ValidationError(e.getMessage())); + } + } + } + }); stringBox.add(valueS.setLabel(new ResourceModel("271"))).setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true); numberBox.add(valueN.setLabel(new ResourceModel("271"))).setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true); booleanBox.add(valueB.setLabel(new ResourceModel("271"))).setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true); @@ -159,13 +182,21 @@ public class ConfigForm extends AdminBaseForm<Configuration> { setNewRecordVisible(true); } + private Configuration getModelFixType() { + Configuration c = ConfigForm.this.getModelObject(); + if (c.getKey() != null && PATHS.contains(c.getKey())) { + c.setType(Type.PATH); + } + return c; + } + @Override protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) { Configuration c = cfgDao.forceGet(getModelObject().getKey()); if (c != null && c.isDeleted() && !c.getId().equals(getModelObject().getId())) { getModelObject().setId(c.getId()); } - setModelObject(cfgDao.update(getModelObject(), WebSession.getUserId())); + setModelObject(cfgDao.update(getModelFixType(), WebSession.getUserId())); setNewRecordVisible(false); target.add(listContainer); refresh(target); diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/FormActionsPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/FormActionsPanel.java index d78f22a82..f23d66afa 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/FormActionsPanel.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/FormActionsPanel.java @@ -43,7 +43,7 @@ public abstract class FormActionsPanel<T> extends Panel { @Override protected void onInitialize() { - add(feedback.setOutputMarkupId(true)); + add(feedback.setOutputMarkupPlaceholderTag(true).setOutputMarkupId(true)); // add a save button that can be used to submit the form via ajax add(saveBtn = new AjaxButton("btn-save", form) {