1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package net.fckeditor.tool;
22
23 import java.io.File;
24 import java.io.InputStream;
25 import java.util.regex.Pattern;
26
27 import javax.servlet.http.HttpServletRequest;
28
29 import org.apache.commons.io.FilenameUtils;
30 import org.devlib.schmidt.imageinfo.ImageInfo;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
33
34 import net.fckeditor.handlers.ConnectorHandler;
35 import net.fckeditor.handlers.ResourceTypeHandler;
36
37
38
39
40
41
42 public class UtilsFile {
43
44 protected static final Pattern ILLEGAL_CURRENT_FOLDER_PATTERN = Pattern
45 .compile("^[^/]|[^/]$|/\\.{1,2}|\\\\|\\||:|\\?|\\*|\"|<|>|\\p{Cntrl}");
46
47 private static final Logger logger = LoggerFactory.getLogger(UtilsFile.class);
48
49
50
51
52
53
54
55
56 public static String sanitizeFileName(final String fileName) {
57 if (fileName == null)
58 return null;
59 if (fileName.equals(""))
60 return "";
61
62 String name = (ConnectorHandler.isForceSingleExtension()) ? UtilsFile.forceSingleExtension(fileName)
63 : fileName;
64
65
66 return name.replaceAll("\\/|\\/|\\||:|\\?|\\*|\"|<|>|\\p{Cntrl}", "_");
67 }
68
69
70
71
72
73
74
75
76 public static String sanitizeFolderName(final String folderName) {
77 if (folderName == null)
78 return null;
79 if (folderName.equals(""))
80 return "";
81
82
83 return folderName.replaceAll("\\.|\\/|\\/|\\||:|\\?|\\*|\"|<|>|\\p{Cntrl}", "_");
84 }
85
86
87
88
89
90
91
92
93 public static boolean isImage(final InputStream in) {
94 ImageInfo ii = new ImageInfo();
95 ii.setInput(in);
96 return ii.check();
97 }
98
99
100
101
102
103
104
105
106
107 public static boolean isValidPath(final String path) {
108 if (Utils.isEmpty(path))
109 return false;
110
111 if (ILLEGAL_CURRENT_FOLDER_PATTERN.matcher(path).find())
112 return false;
113
114 return true;
115 }
116
117
118
119
120
121
122
123 public static String forceSingleExtension(final String filename) {
124 return filename.replaceAll("\\.(?![^.]+$)", "_");
125 }
126
127
128
129
130
131
132
133
134 public static boolean isSingleExtension(final String filename) {
135 return filename.matches("[^\\.]+\\.[^\\.]+");
136 }
137
138
139
140
141
142
143 public static void checkDirAndCreate(File dir) {
144 if (!dir.exists()) {
145 dir.mkdirs();
146 logger.debug("Dir '{}' successfully created", dir);
147 }
148 }
149
150
151
152
153
154
155
156
157 public static String constructServerSidePath(HttpServletRequest request,
158 ResourceTypeHandler resourceType) {
159 StringBuffer sb = new StringBuffer(ConnectorHandler
160 .getUserFilesPath(request));
161 sb.append(resourceType.getPath());
162
163 return sb.toString();
164 }
165
166 }