package com.juick.api; import com.juick.json.MessageSerializer; 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 org.springframework.jdbc.core.JdbcTemplate; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * * @author ugnich */ public class PM { JdbcTemplate sql; MessageSerializer messageSerializer = new MessageSerializer(); public PM(JdbcTemplate sql) { this.sql = sql; } public void doGetPM(HttpServletRequest request, HttpServletResponse response, int vuid) throws ServletException, IOException { String uname = request.getParameter("uname"); int uid = 0; if (uname != null && uname.matches("^[a-zA-Z0-9\\-]{2,16}$")) { uid = UserQueries.getUIDbyName(sql, uname); } if (uid == 0) { response.sendError(400); return; } List msgs = PMQueries.getPMMessages(sql, vuid, uid); if (msgs != null && !msgs.isEmpty()) { String json = messageSerializer.serializeList(msgs); Main.replyJSON(request, response, json); } else { response.sendError(404); } } public void doPostPM(HttpServletRequest request, HttpServletResponse response, Stream xmpp, int vuid) 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, vuid)) { response.sendError(403); return; } if (PMQueries.createPM(sql, vuid, 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.setUser(UserQueries.getUserByUID(sql, vuid).get()); jmsg.setText(body); msg.childs.add(jmsg); xmpp.send(msg); msg.to.Host = "ws.juick.com"; xmpp.send(msg); Main.replyJSON(request, response, messageSerializer.serialize(jmsg).toString()); List jids = UserQueries.getJIDsbyUID(sql, uid); for (String jid: jids) { Message mm = new Message(); mm.to = new JID(jid); mm.type = Message.Type.chat; if (PMQueries.havePMinRoster(sql, vuid, jid)) { mm.from = new JID(jmsg.getUser().getUName(), "juick.com", "Juick"); mm.body = body; } else { mm.from = new JID("juick", "juick.com", "Juick"); mm.body = "Private message from @" + jmsg.getUser().getUName() + ":\n" + body; } xmpp.send(mm); } } else { response.sendError(500); } } }