package org.torrent.basnark.web; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.tools.generic.DateTool; import org.torrent.basnark.bencode.BEntry; import org.torrent.basnark.storage.builder.TorrentInfoBuilder; import org.torrent.basnark.storage.domain.TorrentInfo; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * Date: 16.09.2009 * Time: 21:44:10 (Moscow Standard Time) * * @author Vlad Vinichenko (akerigan@gmail.com) */ public class AddTorrentServlet extends HttpServlet { private VelocityEngine velocityEngine; private Log log = LogFactory.getLog(getClass()); private File torrentsDirFile; public AddTorrentServlet(VelocityEngine velocityEngine, File torrentsDirFile) { this.velocityEngine = velocityEngine; this.torrentsDirFile = torrentsDirFile; } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { VelocityContext context = new VelocityContext(); File torrentFile = (File) request.getAttribute("torrent"); if (torrentFile != null) { BEntry bEntry = BEntry.readEntry(new FileInputStream(torrentFile)); TorrentInfo torrentInfo = TorrentInfoBuilder.build(bEntry); bEntry.serialize(new FileOutputStream(new File(torrentsDirFile, torrentInfo.getInfoHash() + ".torrent"))); if (bEntry.getMap() != null) { BEntry bEntry1 = bEntry.getMap().get("info").getMap().get("pieces"); if (bEntry1 != null && bEntry1.getByteArray() != null) { bEntry1.setByteArray("...".getBytes()); } } context.put("torrentInfo", torrentInfo); context.put("entry", bEntry); context.put("dateTool", new DateTool()); } Template template = velocityEngine.getTemplate("addtorrent.vtl"); template.merge(context, response.getWriter()); } catch (Exception e) { log.error("", e); throw new ServletException(e); } } }