View Javadoc
1   /*
2    * Copyright (c) 2002-2022, City of 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.plugins.genericattributes.service.anonymization;
35  
36  import java.io.IOException;
37  import java.nio.file.Path;
38  import java.nio.file.Paths;
39  
40  import org.apache.commons.io.FileUtils;
41  import org.apache.commons.io.FilenameUtils;
42  
43  import fr.paris.lutece.plugins.genericattributes.business.Entry;
44  import fr.paris.lutece.plugins.genericattributes.business.Response;
45  import fr.paris.lutece.plugins.genericattributes.service.file.GenericAttributeFileService;
46  import fr.paris.lutece.portal.business.file.File;
47  import fr.paris.lutece.portal.business.file.FileHome;
48  import fr.paris.lutece.portal.service.util.AppLogService;
49  import fr.paris.lutece.portal.service.util.AppPathService;
50  
51  /**
52   * {@link IEntryTypeAnonymisationService} that replace the file with an empty file.
53   */
54  public class FileReplaceAnonymizationService extends AbstractAnonymizationService
55  {
56  
57      private static final String FILES_DIRECTORY = "/WEB-INF/anonymization/";
58  
59      @Override
60      public void anonymizeResponse( Entry entry, Response response, boolean first )
61      {
62          if ( isAnonymizable( entry ) )
63          {
64              String pattern = getPattern( entry );
65              if ( pattern.contains( _wildcard ) && response.getFile( ) != null )
66              {
67                  File responseFile = GenericAttributeFileService.getInstance().load( response.getFile( ).getFileKey( ) );
68              	
69                  if ( responseFile != null )
70                  {
71              	    String fileType = FilenameUtils.getExtension( responseFile.getTitle( ) );
72  
73                      try
74                      {
75                          java.io.File emptyFile = getEmptyFile( "empty." + fileType );
76                          responseFile.setTitle( emptyFile.getName( ) );
77                          responseFile.setSize( (int) emptyFile.length( ) );
78                          responseFile.getPhysicalFile( ).setValue( FileUtils.readFileToByteArray( emptyFile ) );
79                          response.setFile( responseFile );
80                      }
81                      catch( IOException e )
82                      {
83                          AppLogService.error( "Error while replacing file", e );
84                          GenericAttributeFileService.getInstance().delete( response.getFile( ).getFileKey( ) );
85                          response.setFile( null );
86                      }
87              	}
88              	else
89              	{
90              	    response.setFile( null );
91              	}
92              }
93          }
94      }
95  
96      private java.io.File getEmptyFile( String filename )
97      {
98          Path path = Paths.get( AppPathService.getWebAppPath( ), FILES_DIRECTORY, filename );
99  
100         if ( !path.toFile( ).exists( ) )
101         {
102             path = Paths.get( AppPathService.getWebAppPath( ), FILES_DIRECTORY, "empty.txt" );
103         }
104         return path.toFile( );
105     }
106 }