diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/java/com/juick/http/www/Main.java | 8 | ||||
-rw-r--r-- | src/java/com/juick/http/www/PM.java | 84 |
2 files changed, 83 insertions, 9 deletions
diff --git a/src/java/com/juick/http/www/Main.java b/src/java/com/juick/http/www/Main.java index fa4f9850..7564664a 100644 --- a/src/java/com/juick/http/www/Main.java +++ b/src/java/com/juick/http/www/Main.java @@ -28,6 +28,7 @@ import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; import javax.servlet.ServletException; +import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; @@ -39,6 +40,7 @@ import ru.sape.Sape; * @author Ugnich Anton */ @WebServlet(name = "Main", urlPatterns = {"/"}) +@MultipartConfig public class Main extends HttpServlet implements Stream.StreamListener { Connection sql; @@ -270,6 +272,12 @@ public class Main extends HttpServlet implements Stream.StreamListener { if (uri.equals("/post")) { pagesNewMessage.doPostNewMessage(sql, request, response); } else if (uri.equals("/pm/send")) { + com.juick.User visitor = Utils.getVisitorUser(sql, request, response); + if (visitor != null) { + pm.doPostPM(sql, request, response, xmpp, visitor); + } else { + response.sendError(403); + } } else if (uri.equals("/login")) { login.doPostLogin(sql, request, response); } else if (uri.equals("/signup")) { diff --git a/src/java/com/juick/http/www/PM.java b/src/java/com/juick/http/www/PM.java index e709af6b..bc43f1ee 100644 --- a/src/java/com/juick/http/www/PM.java +++ b/src/java/com/juick/http/www/PM.java @@ -18,6 +18,11 @@ package com.juick.http.www; import com.juick.server.PMQueries; +import com.juick.server.UserQueries; +import com.juick.xmpp.JID; +import com.juick.xmpp.Message; +import com.juick.xmpp.Stream; +import com.juick.xmpp.extensions.JuickMessage; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; @@ -76,11 +81,11 @@ public class PM { out.println(" <div class=\"msg-header\"><a href=\"/" + msg.User.UName + "/\">@" + msg.User.UName + "</a>:</div>"); out.println(" <div class=\"msg-ts\"><a href=\"#\" onclick=\"return false\" title=\"" + msg.TimestampString + " GMT\">" + PageTemplates.formatDate(msg.TimeAgo, msg.TimestampString, locale) + "</a></div>"); out.println(" <div class=\"msg-txt\">" + txt + "</div>"); - /* - out.println(" <form action=\"/post\" method=\"POST\" enctype=\"multipart/form-data\"><input type=\"hidden\" name=\"pm\" value=\"" + msg.User.UName + "\"/>"); - out.println(" <div class=\"msg-comment\"><div class=\"ta-wrapper\"><textarea name=\"body\" rows=\"1\" class=\"reply\" placeholder=\"" + rbg.getString("Reply") + "\" onkeypress=\"postformListener(this.form,event)\"></textarea></div></div>"); + + out.println(" <form action=\"/pm/send\" method=\"POST\" enctype=\"multipart/form-data\"><input type=\"hidden\" name=\"uname\" value=\"" + msg.User.UName + "\"/>"); + out.println(" <div class=\"msg-comment\"><div class=\"ta-wrapper\"><textarea name=\"body\" rows=\"1\" class=\"replypm\" placeholder=\"" + rbg.getString("Reply") + "\" onkeypress=\"postformListener(this.form,event)\"></textarea></div></div>"); out.println(" </form>"); - */ + out.println(" </div>"); out.println(" </li>"); } @@ -138,6 +143,11 @@ public class PM { String title = "PM: Sent"; ArrayList<com.juick.Message> msgs = PMQueries.getLastPMSent(sql, visitor.UID); + String uname = request.getParameter("uname"); + if (!UserQueries.checkUserNameValid(uname)) { + uname = ""; + } + response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); try { @@ -148,6 +158,14 @@ public class PM { out.println("<div id=\"wrapper\">"); out.println("<div id=\"content\">"); + out.println("<form action=\"/pm/send\" method=\"POST\" enctype=\"multipart/form-data\">"); + out.println("<div class=\"newpm\">"); + out.println(" <div class=\"newpm-to\">To: <input type=\"text\" name=\"uname\" placeholder=\"username\" value=\"" + uname + "\"/></div>"); + out.println(" <div class=\"newpm-body\"><textarea name=\"body\" rows=\"2\" placeholder=\"" + rbg.getString("Reply") + "\" onkeypress=\"postformListener(this.form,event)\"></textarea></div>"); + out.println(" <div class=\"newpm-send\"><input type=\"submit\" value=\"OK\"/></div>"); + out.println("</div>"); + out.println("</form>"); + if (!msgs.isEmpty()) { out.println("<ul>"); for (int i = msgs.size() - 1; i >= 0; i--) { @@ -161,11 +179,6 @@ public class PM { out.println(" <div class=\"msg-header\">→ <a href=\"/" + msg.User.UName + "/\">@" + msg.User.UName + "</a>:</div>"); out.println(" <div class=\"msg-ts\"><a href=\"#\" onclick=\"return false\" title=\"" + msg.TimestampString + " GMT\">" + PageTemplates.formatDate(msg.TimeAgo, msg.TimestampString, locale) + "</a></div>"); out.println(" <div class=\"msg-txt\">" + txt + "</div>"); - /* - out.println(" <form action=\"/post\" method=\"POST\" enctype=\"multipart/form-data\"><input type=\"hidden\" name=\"pm\" value=\"" + msg.User.UName + "\"/>"); - out.println(" <div class=\"msg-comment\"><div class=\"ta-wrapper\"><textarea name=\"body\" rows=\"1\" class=\"reply\" placeholder=\"" + rbg.getString("Reply") + "\" onkeypress=\"postformListener(this.form,event)\"></textarea></div></div>"); - out.println(" </form>"); - */ out.println(" </div>"); out.println(" </li>"); } @@ -203,4 +216,57 @@ public class PM { out.close(); } } + + public void doPostPM(Connection sql, HttpServletRequest request, HttpServletResponse response, Stream xmpp, com.juick.User visitor) throws ServletException, IOException { + String uname = request.getParameter("uname"); + int uid = 0; + if (UserQueries.checkUserNameValid(uname)) { + uid = UserQueries.getUIDbyName(sql, uname); + } + + String body = request.getParameter("body"); + if (uid == 0 || body == null || body.length() < 1 || body.length() > 10240) { + response.sendError(400); + return; + } + + if (UserQueries.isInBLAny(sql, uid, visitor.UID)) { + response.sendError(403); + return; + } + + if (PMQueries.createPM(sql, visitor.UID, uid, body)) { + Message msg = new Message(); + msg.from = new JID("juick", "juick.com", null); + msg.to = new JID(Integer.toString(uid), "push.juick.com", null); + JuickMessage jmsg = new JuickMessage(); + jmsg.User = UserQueries.getUserByUID(sql, visitor.UID); + jmsg.Text = body; + msg.childs.add(jmsg); + xmpp.send(msg); + + msg.to.Host = "ws.juick.com"; + xmpp.send(msg); + + String jid = UserQueries.getJIDbyUID(sql, uid); + if (jid != null) { + Message mm = new Message(); + mm.to = new JID(jid); + mm.type = Message.Type.chat; + if (PMQueries.havePMinRoster(sql, visitor.UID, jid)) { + mm.from = new JID(jmsg.User.UName, "juick.com", "Juick"); + mm.body = body; + } else { + mm.from = new JID("juick", "juick.com", "Juick"); + mm.body = "Private message from @" + jmsg.User.UName + ":\n" + body; + } + xmpp.send(mm); + } + + Utils.sendTemporaryRedirect(response, "/pm/sent"); + + } else { + response.sendError(500); + } + } } |