Subversion Repositories XServices

Compare Revisions

Ignore whitespace Rev 199 → Rev 198

/xservices/trunk/src/main/java/net/brutex/xservices/ws/rs/FileInfoImpl.java
47,7 → 47,6
import javax.ws.rs.core.StreamingOutput;
import javax.ws.rs.core.UriInfo;
 
import lombok.extern.slf4j.Slf4j;
import net.brutex.xservices.security.DirectoryPermission;
import net.brutex.xservices.types.FileInfoType;
import net.brutex.xservices.util.FileWalker;
55,6 → 54,8
import org.apache.commons.jcs.JCS;
import org.apache.commons.jcs.access.CacheAccess;
import org.apache.commons.jcs.access.exception.CacheException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.UnauthorizedException;
 
63,11 → 64,11
*
* @author Brian Rosenberger, bru(at)brutex.de
*/
@Slf4j
public class FileInfoImpl implements FileInfo {
 
Logger logger = LogManager.getLogger();
 
/* (non-Javadoc)
* @see net.brutex.xservices.ws.rs.FileInfo#getFiles(javax.ws.rs.core.HttpHeaders, java.lang.String, boolean, boolean, int, java.lang.String, int, int)
76,19 → 77,19
{
if(dir==null) {
dir = "c:/";
log.warn("No directory specified. Default is 'c:/'.");
logger.warn("No directory specified. Default is 'c:/'.");
}
isPermitted(dir);
URI baseuri = URI.create(uriInfo.getBaseUri()+FileInfo.BASE_PATH+"getFile?file=");
log.info(String.format("Listing directory '%s'.", dir));
logger.info(String.format("Listing directory '%s'.", dir));
if (level <= 0) level = 1;
 
if ((!withDir) && (!withFiles)) withFiles = true;
String cachekey = level + "||" + withFiles + "||" + withDir + "||" + search + "||" + dir;
try {
log.debug(String.format("Hitting cache with cachekey '%s'", cachekey));
logger.debug(String.format("Hitting cache with cachekey '%s'", cachekey));
CacheAccess<Object, Object> jcs = JCS.getInstance("FileCache");
 
/*Try to retrieve the file list from the cache*/
97,9 → 98,9
if (list == null || !useCache) {
list = setDirectory(baseuri, dir, withDir, withFiles, level, search);
jcs.put(cachekey, list);
log.debug("Stored in Cache: " + list.toString());
logger.debug("Stored in Cache: " + list.toString());
} else {
log.debug("Got from Cache: " + list.toString());
logger.debug("Got from Cache: " + list.toString());
}
 
int fromIndex = 0;
109,7 → 110,7
if (toIndex > list.size()) toIndex = list.size();
if (fromIndex > toIndex) fromIndex = toIndex;
GenericEntity<List<FileInfoType>> sublist = new GenericEntity<List<FileInfoType>>(list.subList(fromIndex, toIndex)) {};
log.info(String.format("Returning items %s to %s from total of %s items in the list.", fromIndex, toIndex, list.size()));
logger.info(String.format("Returning items %s to %s from total of %s items in the list.", fromIndex, toIndex, list.size()));
return Response.ok(sublist).build();
} catch (CacheException e) {
return Response.serverError().build();
132,13 → 133,13
if(search==null || search.equals("") ) {
search = "*";
log.info("No search pattern supplied, using default '*'.");
logger.info("No search pattern supplied, using default '*'.");
}
FileWalker finder = new FileWalker(search);
try {
Files.walkFileTree(dir.toPath(), EnumSet.of(FileVisitOption.FOLLOW_LINKS), depth, finder);
log.info("FileWalker returned '"+finder.getCount()+"' hits. '" + finder.getTotal() + "' files have been scanned.");
logger.info("FileWalker returned '"+finder.getCount()+"' hits. '" + finder.getTotal() + "' files have been scanned.");
List<Path> result = finder.getResult();
for(Path f : result) {
if(! withDirectories) {
150,7 → 151,7
list.add(new FileInfoType(f, baseuri));
}
} catch (IOException e2) {
log.error(e2.getMessage(), e2);;
logger.error(e2.getMessage(), e2);;
}
}
195,7 → 196,7
//In case we can not find the media type for some reason
//the default assignment is taken, so we can
//ignore this error.
log.debug(String.format("Could not probe media type for file '%s'. Default is '%s'", path.toString(), mime.getType()), e);
logger.debug(String.format("Could not probe media type for file '%s'. Default is '%s'", path.toString(), mime.getType()), e);
}
Response r = Response.ok(path.toFile(), mime).build();
String fileName = path.getFileName().toString();
203,7 → 204,7
return r;
} catch (IOException e1) {
// TODO Auto-generated catch block
log.error(e1.getMessage(), e1);
logger.error(e1.getMessage(), e1);
return Response.serverError().build();
}
}
251,7 → 252,7
 
private boolean isPermitted(String dir) {
if(! SecurityUtils.getSubject().isPermitted( new DirectoryPermission(dir))) {
log.warn(String.format("User '%s' does not have permission to access '%s'.",SecurityUtils.getSubject().getPrincipal(), dir ));
logger.warn(String.format("User '%s' does not have permission to access '%s'.",SecurityUtils.getSubject().getPrincipal(), dir ));
throw new NotAuthorizedException(new UnauthorizedException("User does not have permission to access "+ dir));
}
return true;