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

Reply via email to