/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.portlet.documentlibrary.util; import com.liferay.document.library.kernel.exception.FileExtensionException; import com.liferay.document.library.kernel.exception.FileNameException; import com.liferay.document.library.kernel.exception.FileSizeException; import com.liferay.document.library.kernel.exception.FolderNameException; import com.liferay.document.library.kernel.exception.InvalidFileVersionException; import com.liferay.document.library.kernel.exception.SourceFileNameException; import com.liferay.document.library.kernel.util.DLUtil; import com.liferay.document.library.kernel.util.DLValidator; import com.liferay.portal.kernel.util.FileUtil; import com.liferay.portal.kernel.util.PropsKeys; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.util.UnicodeFormatter; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.util.PrefsPropsUtil; import com.liferay.portal.util.PropsValues; import com.liferay.portlet.documentlibrary.webdav.DLWebDAVUtil; import java.io.File; import java.io.IOException; import java.io.InputStream; /** * @author Adolfo PĂ©rez * @deprecated As of 7.0.0, replaced by {@link * com.liferay.document.library.internal.util.DLValidatorImpl} */ @Deprecated public final class DLValidatorImpl implements DLValidator { @Override public String fixName(String name) { if (Validator.isNull(name)) { return StringPool.UNDERLINE; } for (String blacklistChar : PropsValues.DL_CHAR_BLACKLIST) { name = StringUtil.replace( name, blacklistChar, StringPool.UNDERLINE); } name = replaceDLCharLastBlacklist(name); return replaceDLNameBlacklist(name); } @Override public long getMaxAllowableSize() { long fileMaxSize = PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE); if (fileMaxSize == 0) { fileMaxSize = PrefsPropsUtil.getLong( PropsKeys.UPLOAD_SERVLET_REQUEST_IMPL_MAX_SIZE); } return fileMaxSize; } @Override public boolean isValidName(String name) { if (Validator.isNull(name)) { return false; } for (String blacklistChar : PropsValues.DL_CHAR_BLACKLIST) { if (name.contains(blacklistChar)) { return false; } } for (String blacklistLastChar : PropsValues.DL_CHAR_LAST_BLACKLIST) { if (blacklistLastChar.startsWith(UnicodeFormatter.UNICODE_PREFIX)) { blacklistLastChar = UnicodeFormatter.parseString( blacklistLastChar); } if (name.endsWith(blacklistLastChar)) { return false; } } String nameWithoutExtension = FileUtil.stripExtension(name); for (String blacklistName : PropsValues.DL_NAME_BLACKLIST) { if (StringUtil.equalsIgnoreCase( nameWithoutExtension, blacklistName)) { return false; } } return true; } @Override public void validateDirectoryName(String directoryName) throws FolderNameException { if (!isValidName(directoryName)) { throw new FolderNameException(directoryName); } } @Override public void validateFileExtension(String fileName) throws FileExtensionException { boolean validFileExtension = false; String[] fileExtensions = PrefsPropsUtil.getStringArray( PropsKeys.DL_FILE_EXTENSIONS, StringPool.COMMA); for (String fileExtension : fileExtensions) { if (StringPool.STAR.equals(fileExtension) || StringUtil.endsWith(fileName, fileExtension)) { validFileExtension = true; break; } } if (!validFileExtension) { throw new FileExtensionException(fileName); } } @Override public void validateFileName(String fileName) throws FileNameException { if (!isValidName(fileName)) { throw new FileNameException(fileName); } if (!DLWebDAVUtil.isRepresentableTitle(fileName)) { throw new FileNameException( "Unrepresentable WebDAV title for file name " + fileName); } } @Override public void validateFileSize(String fileName, byte[] bytes) throws FileSizeException { if (bytes == null) { throw new FileSizeException(fileName); } validateFileSize(fileName, bytes.length); } @Override public void validateFileSize(String fileName, File file) throws FileSizeException { if (file == null) { throw new FileSizeException(fileName); } validateFileSize(fileName, file.length()); } @Override public void validateFileSize(String fileName, InputStream is) throws FileSizeException { try { if (is == null) { throw new FileSizeException(fileName); } validateFileSize(fileName, is.available()); } catch (IOException ioe) { throw new FileSizeException(ioe); } } @Override public void validateFileSize(String fileName, long size) throws FileSizeException { long maxSize = PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE); if ((maxSize > 0) && (size > maxSize)) { throw new FileSizeException(fileName); } } @Override public void validateSourceFileExtension( String fileExtension, String sourceFileName) throws SourceFileNameException { String sourceFileExtension = FileUtil.getExtension(sourceFileName); if (Validator.isNotNull(sourceFileName) && PropsValues.DL_FILE_EXTENSIONS_STRICT_CHECK && !fileExtension.equals(sourceFileExtension)) { throw new SourceFileNameException(sourceFileExtension); } } @Override public void validateVersionLabel(String versionLabel) throws InvalidFileVersionException { if (Validator.isNull(versionLabel)) { return; } if (!DLUtil.isValidVersion(versionLabel)) { throw new InvalidFileVersionException( "Invalid version label " + versionLabel); } } protected String replaceDLCharLastBlacklist(String title) { String previousTitle = null; while (!title.equals(previousTitle)) { previousTitle = title; for (String blacklistLastChar : PropsValues.DL_CHAR_LAST_BLACKLIST) { if (blacklistLastChar.startsWith( UnicodeFormatter.UNICODE_PREFIX)) { blacklistLastChar = UnicodeFormatter.parseString( blacklistLastChar); } if (title.endsWith(blacklistLastChar)) { title = StringUtil.replaceLast( title, blacklistLastChar, StringPool.BLANK); } } } return title; } protected String replaceDLNameBlacklist(String title) { String extension = FileUtil.getExtension(title); String nameWithoutExtension = FileUtil.stripExtension(title); for (String blacklistName : PropsValues.DL_NAME_BLACKLIST) { if (StringUtil.equalsIgnoreCase( nameWithoutExtension, blacklistName)) { if (Validator.isNull(extension)) { return nameWithoutExtension + StringPool.UNDERLINE; } return nameWithoutExtension + StringPool.UNDERLINE + StringPool.PERIOD + extension; } } return title; } }