Skip to content

Commit 1dee38a

Browse files
committed
fixed script move/rename issue
1 parent a306b14 commit 1dee38a

File tree

3 files changed

+33
-23
lines changed

3 files changed

+33
-23
lines changed

app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptMoveServlet.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,12 @@
2323
import com.cognifide.apm.core.Property;
2424
import com.cognifide.apm.core.endpoints.response.ResponseEntity;
2525
import com.cognifide.apm.core.endpoints.utils.RequestProcessor;
26+
import com.cognifide.apm.core.scripts.FileDescriptor;
27+
import com.cognifide.apm.core.scripts.ScriptStorageException;
2628
import com.day.cq.commons.jcr.JcrConstants;
2729
import com.day.cq.commons.jcr.JcrUtil;
2830
import java.io.IOException;
31+
import java.util.List;
2932
import javax.jcr.Session;
3033
import javax.servlet.Servlet;
3134
import org.apache.commons.lang3.StringUtils;
@@ -62,6 +65,7 @@ protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse
6265
String rename = containsExtension(form.getPath())
6366
? (form.getRename() + (containsExtension(form.getRename()) ? "" : Apm.FILE_EXT))
6467
: JcrUtil.createValidName(form.getRename());
68+
validate(dest, rename);
6569
String destPath = String.format("%s/%s", dest, rename);
6670
if (!StringUtils.equals(form.getPath(), destPath)) {
6771
destPath = createUniquePath(destPath, resourceResolver);
@@ -93,4 +97,11 @@ private String createUniquePath(String pathWithExtension, ResourceResolver resol
9397
}
9498
return path + (counter > 0 ? counter : "") + extension;
9599
}
100+
101+
private void validate(String path, String name) {
102+
List<String> validationErrors = new FileDescriptor(path, name, null).validate();
103+
if (!validationErrors.isEmpty()) {
104+
throw new ScriptStorageException("Script errors", validationErrors);
105+
}
106+
}
96107
}

app/aem/core/src/main/java/com/cognifide/apm/core/scripts/FileDescriptor.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,19 @@
2121
package com.cognifide.apm.core.scripts;
2222

2323
import java.io.InputStream;
24+
import java.util.ArrayList;
25+
import java.util.List;
26+
import java.util.regex.Pattern;
2427
import org.apache.commons.lang3.StringUtils;
2528

26-
class FileDescriptor {
29+
public class FileDescriptor {
2730

2831
private static final String SCRIPT_PATH = "/conf/apm/scripts";
2932

33+
private static final Pattern FILE_NAME_PATTERN = Pattern.compile("[0-9a-zA-Z_\\-]+\\.apm");
34+
35+
private static final Pattern PATH_PATTERN = Pattern.compile("(/[0-9a-zA-Z_\\-]+)+");
36+
3037
private final String path;
3138

3239
private final String name;
@@ -81,4 +88,17 @@ public String getName() {
8188
public InputStream getInputStream() {
8289
return inputStream;
8390
}
91+
92+
public List<String> validate() {
93+
List<String> errors = new ArrayList<>();
94+
ensurePropertyMatchesPattern(errors, "file name", name, FILE_NAME_PATTERN);
95+
ensurePropertyMatchesPattern(errors, "file path", path, PATH_PATTERN);
96+
return errors;
97+
}
98+
99+
private void ensurePropertyMatchesPattern(List<String> errors, String property, String value, Pattern pattern) {
100+
if (!pattern.matcher(value).matches()) {
101+
errors.add(String.format("Invalid %s: \"%s\"", property, value));
102+
}
103+
}
84104
}

app/aem/core/src/main/java/com/cognifide/apm/core/scripts/ScriptStorageImpl.java

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,11 @@
2828
import java.nio.charset.Charset;
2929
import java.nio.charset.StandardCharsets;
3030
import java.time.OffsetDateTime;
31-
import java.util.ArrayList;
3231
import java.util.Calendar;
3332
import java.util.Collection;
3433
import java.util.Collections;
3534
import java.util.Date;
3635
import java.util.List;
37-
import java.util.regex.Pattern;
3836
import java.util.stream.Collectors;
3937
import javax.jcr.Binary;
4038
import javax.jcr.Node;
@@ -60,10 +58,6 @@ public class ScriptStorageImpl implements ScriptStorage {
6058

6159
private static final Logger LOG = LoggerFactory.getLogger(ScriptStorageImpl.class);
6260

63-
private static final Pattern FILE_NAME_PATTERN = Pattern.compile("[0-9a-zA-Z_\\-]+\\.apm");
64-
65-
private static final Pattern PATH_PATTERN = Pattern.compile("/[0-9a-zA-Z_\\-/]+");
66-
6761
private static final Charset SCRIPT_ENCODING = StandardCharsets.UTF_8;
6862

6963
@Reference
@@ -159,25 +153,10 @@ private String generateFileName(String fileName, Node saveNode) throws Repositor
159153

160154
private void validate(Collection<FileDescriptor> fileDescriptors) {
161155
List<String> validationErrors = fileDescriptors.stream()
162-
.flatMap(fileDescriptor -> validate(fileDescriptor).stream())
156+
.flatMap(fileDescriptor -> fileDescriptor.validate().stream())
163157
.collect(Collectors.toList());
164158
if (!validationErrors.isEmpty()) {
165159
throw new ScriptStorageException("Script errors", validationErrors);
166160
}
167161
}
168-
169-
private List<String> validate(FileDescriptor file) {
170-
List<String> errors = new ArrayList<>();
171-
ensurePropertyMatchesPattern(errors, "file name", file.getName(), FILE_NAME_PATTERN);
172-
ensurePropertyMatchesPattern(errors, "file path", file.getPath(), PATH_PATTERN);
173-
return errors;
174-
}
175-
176-
private static void ensurePropertyMatchesPattern(List<String> errors, String property, String value,
177-
Pattern pattern) {
178-
if (!pattern.matcher(value).matches()) {
179-
errors.add(String.format("Invalid %s: \"%s\"", property, value));
180-
}
181-
}
182-
183162
}

0 commit comments

Comments
 (0)