1. Project Clover database Tue Dec 20 2016 21:24:09 CET
  2. Package org.xwiki.vfs.internal.script

File PathConverter.java

 

Coverage histogram

../../../../../img/srcFileCovDistChart9.png
38% of files have more coverage

Code metrics

2
10
1
1
93
42
3
0.3
10
1
3

Classes

Class Line # Actions
PathConverter 51 10 0% 3 2
0.8461538684.6%
 

Contributing tests

This file is covered by 3 tests. .

Source view

1    /*
2    * See the NOTICE file distributed with this work for additional
3    * information regarding copyright ownership.
4    *
5    * This is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU Lesser General Public License as
7    * published by the Free Software Foundation; either version 2.1 of
8    * the License, or (at your option) any later version.
9    *
10    * This software is distributed in the hope that it will be useful,
11    * but WITHOUT ANY WARRANTY; without even the implied warranty of
12    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13    * Lesser General Public License for more details.
14    *
15    * You should have received a copy of the GNU Lesser General Public
16    * License along with this software; if not, write to the Free
17    * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
18    * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
19    */
20    package org.xwiki.vfs.internal.script;
21   
22    import java.lang.reflect.Type;
23    import java.net.URI;
24    import java.nio.file.Path;
25   
26    import javax.inject.Inject;
27    import javax.inject.Named;
28    import javax.inject.Singleton;
29   
30    import org.xwiki.component.annotation.Component;
31    import org.xwiki.properties.converter.AbstractConverter;
32    import org.xwiki.properties.converter.ConversionException;
33    import org.xwiki.resource.ResourceReferenceSerializer;
34    import org.xwiki.vfs.VfsPermissionChecker;
35    import org.xwiki.vfs.VfsResourceReference;
36   
37    import net.java.truevfs.access.TPath;
38   
39    /**
40    * Converts {@link String} into {@link Path} objects constructed using TrueVFS. Permissions are also checked to verify
41    * that the current users has the right to access the specified FileSystem Provider.
42    * <p>
43    * See {@link VfsResourceReferenceConverter} for example input and how the String input is first converted to a
44    * {@link VfsResourceReference} and then into a TrueVFS-compatible URI suitable for TrueVFS.
45    *
46    * @version $Id: 07fc3f889a9a963d5671ab66c2df9fefd2aac28e $
47    * @since 7.4M2
48    */
49    @Component
50    @Singleton
 
51    public class PathConverter extends AbstractConverter<Path>
52    {
53    @Inject
54    @Named("cascading")
55    private VfsPermissionChecker permissionChecker;
56   
57    @Inject
58    @Named("truevfs")
59    private ResourceReferenceSerializer<VfsResourceReference, URI> trueVfsResourceReferenceSerializer;
60   
 
61  7 toggle @Override
62    protected Path convertToType(Type targetType, Object value)
63    {
64  7 if (value == null) {
65  0 return null;
66    }
67   
68  7 Path path;
69   
70  7 try {
71  7 VfsResourceReference reference = new VfsResourceReference(new URI(value.toString()));
72   
73    // Verify that the user has the permission for the specified VFS scheme. We need to do this at this level
74    // since it's possible to do the check in the driver itself since TrueVFS controls whether the driver is
75    // called or not and does caching,
76    // see https://java.net/projects/truezip/lists/users/archive/2015-12/message/8
77    // Since this convert has to be called to use the VFS API from Velocity, we're safe that this will prevent
78    // any Velocity script to execute a VFS call if the user is not allowed.
79    //
80    // Note: Even though the user needs View access to the attachment, we cannot check this right now because
81    // of the caching issue. However we consider that if the user has Programming Rights, he can do anything he
82    // wants and thus it's safe that he can access the attachment.
83  7 this.permissionChecker.checkPermission(reference);
84   
85  6 URI trueVfsURI = this.trueVfsResourceReferenceSerializer.serialize(reference);
86  5 path = new TPath(trueVfsURI);
87    } catch (Exception e) {
88  2 throw new ConversionException(String.format("Failed to convert [%s] to a Path object", value), e);
89    }
90   
91  5 return path;
92    }
93    }