001
014
015 package com.liferay.portlet.documentlibrary.store;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.util.FileUtil;
020 import com.liferay.portlet.documentlibrary.model.DLFileEntryConstants;
021
022 import java.io.File;
023 import java.io.InputStream;
024
025
029 public class SafeFileNameStoreWrapper implements Store {
030
031 public SafeFileNameStoreWrapper(Store store) {
032 _store = store;
033 }
034
035 public void addDirectory(long companyId, long repositoryId, String dirName)
036 throws PortalException, SystemException {
037
038 String safeDirName = FileUtil.encodeSafeFileName(dirName);
039
040 if (!safeDirName.equals(dirName)) {
041 try {
042 _store.move(dirName, safeDirName);
043 }
044 catch (Exception e) {
045 }
046 }
047
048 _store.addDirectory(companyId, repositoryId, safeDirName);
049 }
050
051 public void addFile(
052 long companyId, long repositoryId, String fileName, byte[] bytes)
053 throws PortalException, SystemException {
054
055 String safeFileName = FileUtil.encodeSafeFileName(fileName);
056
057 renameUnsafeFile(companyId, repositoryId, fileName, safeFileName);
058
059 _store.addFile(companyId, repositoryId, safeFileName, bytes);
060 }
061
062 public void addFile(
063 long companyId, long repositoryId, String fileName, File file)
064 throws PortalException, SystemException {
065
066 String safeFileName = FileUtil.encodeSafeFileName(fileName);
067
068 renameUnsafeFile(companyId, repositoryId, fileName, safeFileName);
069
070 _store.addFile(companyId, repositoryId, safeFileName, file);
071 }
072
073 public void addFile(
074 long companyId, long repositoryId, String fileName, InputStream is)
075 throws PortalException, SystemException {
076
077 String safeFileName = FileUtil.encodeSafeFileName(fileName);
078
079 renameUnsafeFile(companyId, repositoryId, fileName, safeFileName);
080
081 _store.addFile(companyId, repositoryId, safeFileName, is);
082 }
083
084 public void checkRoot(long companyId) throws SystemException {
085 _store.checkRoot(companyId);
086 }
087
088 public void copyFileVersion(
089 long companyId, long repositoryId, String fileName,
090 String fromVersionLabel, String toVersionLabel)
091 throws PortalException, SystemException {
092
093 String safeFileName = FileUtil.encodeSafeFileName(fileName);
094
095 renameUnsafeFile(companyId, repositoryId, fileName, safeFileName);
096
097 _store.copyFileVersion(
098 companyId, repositoryId, safeFileName, fromVersionLabel,
099 toVersionLabel);
100 }
101
102 public void deleteDirectory(
103 long companyId, long repositoryId, String dirName)
104 throws PortalException, SystemException {
105
106 String safeDirName = FileUtil.encodeSafeFileName(dirName);
107
108 if (!safeDirName.equals(dirName)) {
109 try {
110 _store.deleteDirectory(companyId, repositoryId, dirName);
111
112 return;
113 }
114 catch (Exception e) {
115 }
116 }
117
118 _store.deleteDirectory(companyId, repositoryId, safeDirName);
119 }
120
121 public void deleteFile(long companyId, long repositoryId, String fileName)
122 throws PortalException, SystemException {
123
124 String safeFileName = FileUtil.encodeSafeFileName(fileName);
125
126 if (!safeFileName.equals(fileName) &&
127 _store.hasFile(companyId, repositoryId, fileName)) {
128
129 _store.deleteFile(companyId, repositoryId, fileName);
130
131 return;
132 }
133
134 _store.deleteFile(companyId, repositoryId, safeFileName);
135 }
136
137 public void deleteFile(
138 long companyId, long repositoryId, String fileName,
139 String versionLabel)
140 throws PortalException, SystemException {
141
142 String safeFileName = FileUtil.encodeSafeFileName(fileName);
143
144 if (!safeFileName.equals(fileName) &&
145 _store.hasFile(companyId, repositoryId, fileName, versionLabel)) {
146
147 _store.deleteFile(companyId, repositoryId, fileName, versionLabel);
148
149 return;
150 }
151
152 _store.deleteFile(companyId, repositoryId, safeFileName, versionLabel);
153 }
154
155 public File getFile(long companyId, long repositoryId, String fileName)
156 throws PortalException, SystemException {
157
158 String safeFileName = FileUtil.encodeSafeFileName(fileName);
159
160 if (!safeFileName.equals(fileName) &&
161 _store.hasFile(companyId, repositoryId, fileName)) {
162
163 return _store.getFile(companyId, repositoryId, fileName);
164 }
165
166 return _store.getFile(companyId, repositoryId, safeFileName);
167 }
168
169 public File getFile(
170 long companyId, long repositoryId, String fileName,
171 String versionLabel)
172 throws PortalException, SystemException {
173
174 String safeFileName = FileUtil.encodeSafeFileName(fileName);
175
176 if (!safeFileName.equals(fileName) &&
177 _store.hasFile(companyId, repositoryId, fileName, versionLabel)) {
178
179 return _store.getFile(
180 companyId, repositoryId, fileName, versionLabel);
181 }
182
183 return _store.getFile(
184 companyId, repositoryId, safeFileName, versionLabel);
185 }
186
187 public byte[] getFileAsBytes(
188 long companyId, long repositoryId, String fileName)
189 throws PortalException, SystemException {
190
191 String safeFileName = FileUtil.encodeSafeFileName(fileName);
192
193 if (!safeFileName.equals(fileName) &&
194 _store.hasFile(companyId, repositoryId, fileName)) {
195
196 return _store.getFileAsBytes(companyId, repositoryId, fileName);
197 }
198
199 return _store.getFileAsBytes(companyId, repositoryId, safeFileName);
200 }
201
202 public byte[] getFileAsBytes(
203 long companyId, long repositoryId, String fileName,
204 String versionLabel)
205 throws PortalException, SystemException {
206
207 String safeFileName = FileUtil.encodeSafeFileName(fileName);
208
209 if (!safeFileName.equals(fileName) &&
210 _store.hasFile(companyId, repositoryId, fileName, versionLabel)) {
211
212 return _store.getFileAsBytes(
213 companyId, repositoryId, fileName, versionLabel);
214 }
215
216 return _store.getFileAsBytes(
217 companyId, repositoryId, safeFileName, versionLabel);
218 }
219
220 public InputStream getFileAsStream(
221 long companyId, long repositoryId, String fileName)
222 throws PortalException, SystemException {
223
224 String safeFileName = FileUtil.encodeSafeFileName(fileName);
225
226 if (!safeFileName.equals(fileName) &&
227 _store.hasFile(companyId, repositoryId, fileName)) {
228
229 return _store.getFileAsStream(companyId, repositoryId, fileName);
230 }
231
232 return _store.getFileAsStream(companyId, repositoryId, safeFileName);
233 }
234
235 public InputStream getFileAsStream(
236 long companyId, long repositoryId, String fileName,
237 String versionLabel)
238 throws PortalException, SystemException {
239
240 String safeFileName = FileUtil.encodeSafeFileName(fileName);
241
242 if (!safeFileName.equals(fileName) &&
243 _store.hasFile(companyId, repositoryId, fileName, versionLabel)) {
244
245 return _store.getFileAsStream(
246 companyId, repositoryId, fileName, versionLabel);
247 }
248
249 return _store.getFileAsStream(
250 companyId, repositoryId, safeFileName, versionLabel);
251 }
252
253 public String[] getFileNames(long companyId, long repositoryId)
254 throws SystemException {
255
256 String[] fileNames = _store.getFileNames(companyId, repositoryId);
257
258 String[] decodedFileNames = new String[fileNames.length];
259
260 for (int i = 0; i < fileNames.length; i++) {
261 decodedFileNames[i] = FileUtil.decodeSafeFileName(fileNames[i]);
262 }
263
264 return decodedFileNames;
265 }
266
267 public String[] getFileNames(
268 long companyId, long repositoryId, String dirName)
269 throws PortalException, SystemException {
270
271 String safeDirName = FileUtil.encodeSafeFileName(dirName);
272
273 if (!safeDirName.equals(dirName)) {
274 try {
275 _store.move(dirName, safeDirName);
276 }
277 catch (Exception e) {
278 }
279 }
280
281 String[] fileNames = _store.getFileNames(
282 companyId, repositoryId, safeDirName);
283
284 String[] decodedFileNames = new String[fileNames.length];
285
286 for (int i = 0; i < fileNames.length; i++) {
287 decodedFileNames[i] = FileUtil.decodeSafeFileName(fileNames[i]);
288 }
289
290 return decodedFileNames;
291 }
292
293 public long getFileSize(long companyId, long repositoryId, String fileName)
294 throws PortalException, SystemException {
295
296 String safeFileName = FileUtil.encodeSafeFileName(fileName);
297
298 if (!safeFileName.equals(fileName) &&
299 _store.hasFile(companyId, repositoryId, fileName)) {
300
301 return _store.getFileSize(companyId, repositoryId, fileName);
302 }
303
304 return _store.getFileSize(companyId, repositoryId, safeFileName);
305 }
306
307 public boolean hasDirectory(
308 long companyId, long repositoryId, String dirName)
309 throws PortalException, SystemException {
310
311 String safeDirName = FileUtil.encodeSafeFileName(dirName);
312
313 return _store.hasDirectory(companyId, repositoryId, safeDirName);
314 }
315
316 public boolean hasFile(long companyId, long repositoryId, String fileName)
317 throws PortalException, SystemException {
318
319 String safeFileName = FileUtil.encodeSafeFileName(fileName);
320
321 if (!safeFileName.equals(fileName) &&
322 _store.hasFile(companyId, repositoryId, fileName)) {
323
324 return true;
325 }
326
327 return _store.hasFile(companyId, repositoryId, safeFileName);
328 }
329
330 public boolean hasFile(
331 long companyId, long repositoryId, String fileName,
332 String versionLabel)
333 throws PortalException, SystemException {
334
335 String safeFileName = FileUtil.encodeSafeFileName(fileName);
336
337 if (!safeFileName.equals(fileName) &&
338 _store.hasFile(companyId, repositoryId, fileName, versionLabel)) {
339
340 return true;
341 }
342
343 return _store.hasFile(
344 companyId, repositoryId, safeFileName, versionLabel);
345 }
346
347 public void move(String srcDir, String destDir) throws SystemException {
348 _store.move(srcDir, destDir);
349 }
350
351 public void updateFile(
352 long companyId, long repositoryId, long newRepositoryId,
353 String fileName)
354 throws PortalException, SystemException {
355
356 String safeFileName = FileUtil.encodeSafeFileName(fileName);
357
358 renameUnsafeFile(companyId, repositoryId, fileName, safeFileName);
359
360 _store.updateFile(
361 companyId, repositoryId, newRepositoryId, safeFileName);
362 }
363
364 public void updateFile(
365 long companyId, long repositoryId, String fileName,
366 String newFileName)
367 throws PortalException, SystemException {
368
369 String safeFileName = FileUtil.encodeSafeFileName(fileName);
370 String safeNewFileName = FileUtil.encodeSafeFileName(newFileName);
371
372 if (!safeFileName.equals(fileName)) {
373 if (_store.hasFile(
374 companyId, repositoryId, fileName,
375 DLFileEntryConstants.VERSION_DEFAULT)) {
376
377 safeFileName = fileName;
378 }
379 }
380
381 _store.updateFile(
382 companyId, repositoryId, safeFileName, safeNewFileName);
383 }
384
385 public void updateFile(
386 long companyId, long repositoryId, String fileName,
387 String versionLabel, byte[] bytes)
388 throws PortalException, SystemException {
389
390 String safeFileName = FileUtil.encodeSafeFileName(fileName);
391
392 renameUnsafeFile(companyId, repositoryId, fileName, safeFileName);
393
394 _store.updateFile(
395 companyId, repositoryId, safeFileName, versionLabel, bytes);
396 }
397
398 public void updateFile(
399 long companyId, long repositoryId, String fileName,
400 String versionLabel, File file)
401 throws PortalException, SystemException {
402
403 String safeFileName = FileUtil.encodeSafeFileName(fileName);
404
405 renameUnsafeFile(companyId, repositoryId, fileName, safeFileName);
406
407 _store.updateFile(
408 companyId, repositoryId, safeFileName, versionLabel, file);
409 }
410
411 public void updateFile(
412 long companyId, long repositoryId, String fileName,
413 String versionLabel, InputStream is)
414 throws PortalException, SystemException {
415
416 String safeFileName = FileUtil.encodeSafeFileName(fileName);
417
418 renameUnsafeFile(companyId, repositoryId, fileName, safeFileName);
419
420 _store.updateFile(
421 companyId, repositoryId, safeFileName, versionLabel, is);
422 }
423
424 public void updateFileVersion(
425 long companyId, long repositoryId, String fileName,
426 String fromVersionLabel, String toVersionLabel)
427 throws PortalException, SystemException {
428
429 String safeFileName = FileUtil.encodeSafeFileName(fileName);
430
431 renameUnsafeFile(companyId, repositoryId, fileName, safeFileName);
432
433 _store.updateFileVersion(
434 companyId, repositoryId, safeFileName, fromVersionLabel,
435 toVersionLabel);
436 }
437
438 protected void renameUnsafeFile(
439 long companyId, long repositoryId, String fileName,
440 String safeFileName)
441 throws PortalException, SystemException {
442
443 if (!safeFileName.equals(fileName)) {
444 if (_store.hasFile(
445 companyId, repositoryId, fileName,
446 DLFileEntryConstants.VERSION_DEFAULT)) {
447
448 _store.updateFile(
449 companyId, repositoryId, fileName, safeFileName);
450 }
451 }
452 }
453
454 private Store _store;
455
456 }