/* * Juick * Copyright (C) 2008-2011, Ugnich Anton * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ 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; import java.util.ArrayList; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * * @author Ugnich Anton */ public class PM { protected void doGetInbox(Connection sql, HttpServletRequest request, HttpServletResponse response, com.juick.User visitor) throws ServletException, IOException { /* int paramBefore = 0; String paramBeforeStr = request.getParameter("before"); if (paramBeforeStr != null) { try { paramBefore = Integer.parseInt(paramBeforeStr); } catch (NumberFormatException e) { } } */ String title = "PM: Inbox"; ArrayList msgs = PMQueries.getLastPMInbox(sql, visitor.UID); response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); try { PageTemplates.pageHead(out, title, null); if (!Utils.isMobileRequest(request)) { PageTemplates.pageNavigation(out, visitor, null); PageTemplates.pageHomeColumn(out, sql, visitor); } out.println("
"); if (!msgs.isEmpty()) { out.println("
    "); for (int i = msgs.size() - 1; i >= 0; i--) { com.juick.Message msg = msgs.get(i); String txt = PageTemplates.formatMessage(msg.Text); out.println("
  • "); out.println("
    \""
    "); out.println("
    "); out.println(" "); out.println(" "); out.println("
    " + txt + "
    "); out.println("
    "); out.println("
    "); out.println("
    "); out.println("
    "); out.println("
  • "); } out.println("
"); } /* if (msgs.size() >= 20) { String nextpage = "?before=" + msgs.get(msgs.size() - 1); out.println("

Older →

"); } */ out.println("
"); if (!Utils.isMobileRequest(request)) { PageTemplates.pageFooter(request, out, visitor, true); } PageTemplates.pageDialogTemplate(out); PageTemplates.pageEnd(out); } finally { out.close(); } } protected void doGetSent(Connection sql, HttpServletRequest request, HttpServletResponse response, com.juick.User visitor) throws ServletException, IOException { /* int paramBefore = 0; String paramBeforeStr = request.getParameter("before"); if (paramBeforeStr != null) { try { paramBefore = Integer.parseInt(paramBeforeStr); } catch (NumberFormatException e) { } } */ String title = "PM: Sent"; ArrayList 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 { PageTemplates.pageHead(out, title, null); PageTemplates.pageNavigation(out, visitor, null); PageTemplates.pageHomeColumn(out, sql, visitor); out.println("
"); out.println("
"); out.println("
"); out.println("
To:
"); out.println("
"); out.println("
"); out.println("
"); out.println("
"); if (!msgs.isEmpty()) { out.println(""); } /* if (msgs.size() >= 20) { String nextpage = "?before=" + msgs.get(msgs.size() - 1); out.println("

Older →

"); } */ out.println("
"); PageTemplates.pageFooter(request, out, visitor, true); PageTemplates.pageDialogTemplate(out); PageTemplates.pageEnd(out); } finally { 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"); if (uname.startsWith("@")) { uname = uname.substring(1); } 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); } } }