package com.juick.api; import com.juick.json.MessageSerializer; import com.juick.server.PMQueries; import com.juick.server.UserQueries; import com.juick.util.UserUtils; import org.springframework.jdbc.core.JdbcTemplate; import rocks.xmpp.addr.Jid; import rocks.xmpp.core.session.XmppSession; import rocks.xmpp.core.stanza.model.Message; 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, XmppSession xmpp, int vuid) throws ServletException, IOException { String uname = request.getParameter("uname"); int uid = 0; if (UserUtils.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.setFrom(Jid.of("juick@juick.com")); msg.setTo(Jid.of(String.format("%d@push.juick.com", uid))); com.juick.Message jmsg = new com.juick.Message(); jmsg.setUser(UserQueries.getUserByUID(sql, vuid).get()); jmsg.setText(body); msg.addExtension(jmsg); xmpp.send(msg); msg.setTo(Jid.of(String.format("%d@ws.juick.com", uid))); 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.setTo(Jid.of(jid)); mm.setType(Message.Type.CHAT); if (PMQueries.havePMinRoster(sql, vuid, jid)) { mm.setFrom(Jid.of(jmsg.getUser().getName(), "juick.com", "Juick")); mm.setBody(body); } else { mm.setFrom(Jid.of("juick", "juick.com", "Juick")); mm.setBody("Private message from @" + jmsg.getUser().getName() + ":\n" + body); } xmpp.send(mm); } } else { response.sendError(500); } } }