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