SaacWebTools.java
package eu.javaexperience.saac;
import java.io.File;
import java.io.IOException;
import eu.javaexperience.dispatch.Dispatcher;
import eu.javaexperience.io.IOTools;
import eu.javaexperience.web.Context;
import eu.javaexperience.web.HttpTools;
import eu.javaexperience.web.facility.SiteFacilityTools;
public class SaacWebTools
{
/**
* ?file=path will be saved(on POST) and send(on GET).
* */
public static Dispatcher<Context> createSaveRestoreDispatcher(final File directory) throws IOException
{
final String strRoot = directory.getCanonicalFile().toString();
return new Dispatcher<Context>()
{
@Override
public boolean dispatch(Context ctx)
{
try
{
String file = ctx.getRequest().getParameter("file");
if(null == file)
{
SiteFacilityTools.finishWithElementSend(ctx, "{\"result\":\"No 'file' given.\"}");
ctx.finishOperation();
}
File dst = new File(directory+"/"+file);
dst = dst.getCanonicalFile();
if(!dst.toString().startsWith(strRoot))
{
SiteFacilityTools.finishWithElementSend(ctx, "{\"result\":\"access denied\"}");
ctx.finishOperation();
}
if(HttpTools.isPost(ctx.getRequest()))
{
byte[] data = (byte[]) ctx.getRequest().getAttribute("data");
IOTools.createPathBeforeFile(dst);
IOTools.putFileContent(dst.toString(), data);
SiteFacilityTools.finishWithElementSend(ctx, "{\"result\":\"ok\"}");
ctx.finishOperation();
}
else
{
String ret = "";
try
{
ret = IOTools.getFileContents(dst);
}
catch (Exception e)
{
e.printStackTrace();
}
SiteFacilityTools.finishWithElementSend(ctx, ret);
ctx.finishOperation();
}
}
catch (IOException e)
{
SiteFacilityTools.finishWithElementSend(ctx, "{\"result\":\"IOError: "+e.getMessage()+"\"}");
}
return true;
}
};
}
}