1 /* 2 * Copyright (c) 2002-2014, Mairie de Paris 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright notice 10 * and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright notice 13 * and the following disclaimer in the documentation and/or other materials 14 * provided with the distribution. 15 * 16 * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its 17 * contributors may be used to endorse or promote products derived from 18 * this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE 24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 * 32 * License 1.0 33 */ 34 package fr.paris.lutece.util.file; 35 36 import fr.paris.lutece.portal.service.util.AppPropertiesService; 37 38 import org.apache.commons.lang.StringUtils; 39 40 41 /** 42 * Utility class for files 43 */ 44 public final class FileUtil 45 { 46 private static final String PROPERTY_ALLOWED_IMAGES_EXTENSIONS = "portal.files.allowedImagesExtentions"; 47 private static final String PROPERTY_ALLOWED_HTML_EXTENSIONS = "portal.files.allowedHtmlExtentions"; 48 private static final String DEFAULT_IMAGES_EXTENSION = "gif,png,jpg,jpeg,bmp"; 49 private static final String DEFAULT_HTML_EXTENSION = "html,htm,xhtml"; 50 private static final String CONSTANT_POINT = "."; 51 private static final String CONSTANT_COMMA = ","; 52 53 /** 54 * Private constructor 55 */ 56 private FileUtil( ) 57 { 58 } 59 60 /** 61 * Check if the extension of the file is an image extension 62 * @param strImageFileName The file name to check 63 * @return True if the extension is correct, false otherwise 64 */ 65 public static boolean hasImageExtension( String strImageFileName ) 66 { 67 String strImagesExtentions = AppPropertiesService.getProperty( PROPERTY_ALLOWED_IMAGES_EXTENSIONS, 68 DEFAULT_IMAGES_EXTENSION ); 69 70 return hasExtension( strImageFileName, strImagesExtentions ); 71 } 72 73 /** 74 * Check if a file has a valid html extension 75 * @param strFileName The file name to check 76 * @return True if the file name is valid, false otherwise 77 */ 78 public static boolean hasHtmlExtension( String strFileName ) 79 { 80 String strImagesExtentions = AppPropertiesService.getProperty( PROPERTY_ALLOWED_HTML_EXTENSIONS, 81 DEFAULT_HTML_EXTENSION ); 82 83 return hasExtension( strFileName, strImagesExtentions ); 84 } 85 86 /** 87 * Check if a file name match extensions in a given list 88 * @param strFileName The file name to check 89 * @param strAllowedExtensions The comma separated list of allowed 90 * extensions 91 * @return True of the extension of the file exists in the extension list 92 */ 93 private static boolean hasExtension( String strFileName, String strAllowedExtensions ) 94 { 95 int nIndex = strFileName.lastIndexOf( CONSTANT_POINT ); 96 97 if ( ( nIndex >= 0 ) && ( strFileName.length( ) > ( nIndex + 2 ) ) ) 98 { 99 String strExtension = strFileName.substring( nIndex + 1 ); 100 101 if ( StringUtils.isNotEmpty( strExtension ) ) 102 { 103 for ( String strAllowedExtention : strAllowedExtensions.split( CONSTANT_COMMA ) ) 104 { 105 if ( StringUtils.equalsIgnoreCase( strExtension, strAllowedExtention ) ) 106 { 107 return true; 108 } 109 } 110 } 111 } 112 113 return false; 114 } 115 }