aboutsummaryrefslogtreecommitdiff
path: root/juick-www/src/main/java/com/juick/www
diff options
context:
space:
mode:
Diffstat (limited to 'juick-www/src/main/java/com/juick/www')
-rw-r--r--juick-www/src/main/java/com/juick/www/Main.java64
-rw-r--r--juick-www/src/main/java/com/juick/www/NewMessage.java102
-rw-r--r--juick-www/src/main/java/com/juick/www/PM.java31
3 files changed, 83 insertions, 114 deletions
diff --git a/juick-www/src/main/java/com/juick/www/Main.java b/juick-www/src/main/java/com/juick/www/Main.java
index 4a873cf3..82f93e00 100644
--- a/juick-www/src/main/java/com/juick/www/Main.java
+++ b/juick-www/src/main/java/com/juick/www/Main.java
@@ -17,18 +17,18 @@
*/
package com.juick.www;
+import com.juick.Message;
import com.juick.server.UserQueries;
-import com.juick.xmpp.JID;
-import com.juick.xmpp.Stream;
-import com.juick.xmpp.StreamComponent;
import com.mitchellbosecke.pebble.error.PebbleException;
-import net.jodah.failsafe.Execution;
-import net.jodah.failsafe.RetryPolicy;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.jdbc.core.JdbcTemplate;
-import org.xmlpull.v1.XmlPullParserException;
+import rocks.xmpp.addr.Jid;
+import rocks.xmpp.core.XmppException;
+import rocks.xmpp.core.session.Extension;
+import rocks.xmpp.core.session.XmppSessionConfiguration;
+import rocks.xmpp.extensions.component.accept.ExternalComponent;
import ru.sape.Sape;
import javax.servlet.ServletException;
@@ -38,14 +38,10 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
-import java.net.Socket;
import java.net.URISyntaxException;
import java.net.URLEncoder;
import java.util.Objects;
import java.util.Properties;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
/**
*
@@ -53,12 +49,12 @@ import java.util.concurrent.TimeUnit;
*/
@WebServlet(name = "Main", urlPatterns = {"/"})
@MultipartConfig(fileSizeThreshold = 1024 * 1024, maxRequestSize = 1024 * 1024 * 10)
-public class Main extends HttpServlet implements Stream.StreamListener {
+public class Main extends HttpServlet {
JdbcTemplate sql;
JdbcTemplate sqlSearch;
String sqlSearchConnStr = "jdbc:mysql://127.0.0.1:9306?autoReconnect=true&useUnicode=yes&characterEncoding=utf8&maxAllowedPacket=512000";
- Stream xmpp;
+ ExternalComponent xmpp;
Home home = new Home();
Discover discover = new Discover();
PM pm = new PM();
@@ -73,8 +69,6 @@ public class Main extends HttpServlet implements Stream.StreamListener {
SignUp signup = new SignUp();
Settings settings;
RSS rss = new RSS();
- ExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
- Execution execution;
@Override
public void init() throws ServletException {
@@ -94,7 +88,7 @@ public class Main extends HttpServlet implements Stream.StreamListener {
sqlSearch = new JdbcTemplate(dataSourceSearch);
boolean isXmppDisabled = BooleanUtils.toBoolean(conf.getProperty("xmpp_disabled"));
if (!isXmppDisabled) {
- setupXmppComponent(new JID(conf.getProperty("www_xmpp_jid", "www.juick.local")),
+ setupXmppComponent(Jid.of(conf.getProperty("www_xmpp_jid", "www.juick.local")),
conf.getProperty("xmpp_password"), NumberUtils.toInt(conf.getProperty("xmpp_port", ""), 5347));
}
twitterAuth = new TwitterAuth(conf.getProperty("twitter_consumer_key"),
@@ -116,38 +110,18 @@ public class Main extends HttpServlet implements Stream.StreamListener {
}
}
- public void setupXmppComponent(final JID componentJid, final String password, final int port) {
- @SuppressWarnings("unchecked") RetryPolicy retryPolicy = new RetryPolicy()
- .withBackoff(1, 30, TimeUnit.SECONDS)
- .withJitter(0.1)
- .retryOn(IOException.class, XmlPullParserException.class);
- execution = new Execution(retryPolicy);
- executorService.submit(() -> {
- while (!execution.isComplete()) {
- try {
- Socket socket = new Socket("localhost", port);
- xmpp = new StreamComponent(componentJid, socket.getInputStream(), socket.getOutputStream(), password);
- xmpp.addListener(Main.this);
- xmpp.startParsing();
- } catch (IOException e) {
- log("XMPP router disconnected, reconnecting...");
- }
- }
- });
- }
-
- @Override
- public void onStreamFail(Exception e) {
- log("XMPP STREAM FAIL:" + e);
- execution.recordFailure(e);
- }
-
- @Override
- public void onStreamReady() {
- log("XMPP STREAM READY");
+ public void setupXmppComponent(final Jid componentJid, final String password, final int port) {
+ XmppSessionConfiguration configuration = XmppSessionConfiguration.builder()
+ .extensions(Extension.of(Message.class))
+ .build();
+ xmpp = ExternalComponent.create(componentJid.toString(), password, configuration, "localhost", port);
+ try {
+ xmpp.connect();
+ } catch (XmppException e) {
+ log("xmpp extension", e);
+ }
}
-
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
diff --git a/juick-www/src/main/java/com/juick/www/NewMessage.java b/juick-www/src/main/java/com/juick/www/NewMessage.java
index 310ede73..29c834d6 100644
--- a/juick-www/src/main/java/com/juick/www/NewMessage.java
+++ b/juick-www/src/main/java/com/juick/www/NewMessage.java
@@ -19,19 +19,17 @@ package com.juick.www;
import com.juick.Tag;
import com.juick.server.*;
-import com.juick.xmpp.JID;
-import com.juick.xmpp.Message;
-import com.juick.xmpp.Stream;
-import com.juick.xmpp.extensions.JuickMessage;
-import com.juick.xmpp.extensions.JuickUser;
-import com.juick.xmpp.extensions.Nickname;
-import com.juick.xmpp.extensions.XOOB;
import net.coobird.thumbnailator.Thumbnails;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 rocks.xmpp.extensions.nick.model.Nickname;
+import rocks.xmpp.extensions.oob.model.x.OobX;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@@ -39,6 +37,8 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.file.Files;
@@ -148,7 +148,7 @@ public class NewMessage {
out.println("</p>");
}
- public void doPostMessage(JdbcTemplate sql, HttpServletRequest request, HttpServletResponse response, Stream xmpp, com.juick.User visitor) throws ServletException, IOException {
+ public void doPostMessage(JdbcTemplate sql, HttpServletRequest request, HttpServletResponse response, XmppSession xmpp, com.juick.User visitor) throws ServletException, IOException {
String body = request.getParameter("body");
if (body == null || body.length() < 1 || body.length() > 4096) {
response.sendError(400);
@@ -201,16 +201,12 @@ public class NewMessage {
SubscriptionsQueries.subscribeMessage(sql, mid, visitor.getUid());
Message xmsg = new Message();
- xmsg.from = new JID("juick", "juick.com", null);
- xmsg.type = Message.Type.chat;
- xmsg.thread = "juick-" + mid;
-
- JuickMessage jmsg = new JuickMessage(MessagesQueries.getMessage(sql, mid));
- xmsg.addChild(jmsg);
-
- Nickname nick = new Nickname();
- nick.Nickname = "@" + jmsg.getUser().getName();
- xmsg.addChild(nick);
+ xmsg.setFrom(Jid.of("juick@juick.com"));
+ xmsg.setType(Message.Type.CHAT);
+ xmsg.setThread("juick-" + mid);
+ com.juick.Message jmsg = MessagesQueries.getMessage(sql, mid);
+ xmsg.addExtension(jmsg);
+ xmsg.addExtension(new Nickname("@" + jmsg.getUser().getName()));
if (attachmentFName != null) {
String fname = mid + "." + attachmentType;
@@ -226,9 +222,11 @@ public class NewMessage {
.toFile(Paths.get(imgDir, "ps", fname).toFile());
body = attachmentURL + "\n" + body;
- XOOB xoob = new XOOB();
- xoob.URL = attachmentURL;
- xmsg.addChild(xoob);
+ try {
+ xmsg.addExtension(new OobX(new URI(attachmentURL)));
+ } catch (URISyntaxException e) {
+ logger.warn("invalid uri: " + attachmentURL, e);
+ }
}
if (xmpp != null) {
@@ -236,25 +234,23 @@ public class NewMessage {
for (String tag : tagsArr) {
tagsStr2 += " *" + tag;
}
- xmsg.body = "@" + jmsg.getUser().getName() + ":" + tagsStr2 + "\n" + body + "\n\n#" + mid + " http://juick.com/" + mid;
+ xmsg.setBody("@" + jmsg.getUser().getName() + ":" + tagsStr2 + "\n" + body + "\n\n#" + mid + " http://juick.com/" + mid);
- xmsg.to = new JID("juick", "s2s.juick.com", null);
+ xmsg.setTo(Jid.of("juick@s2s.juick.com"));
xmpp.send(xmsg);
- xmsg.to.Host = "ws.juick.com";
+ xmsg.setTo(Jid.of("juick@ws.juick.com"));
xmpp.send(xmsg);
- xmsg.to.Host = "push.juick.com";
+ xmsg.setTo(Jid.of("juick@push.juick.com"));
xmpp.send(xmsg);
- xmsg.to.Host = "crosspost.juick.com";
- xmsg.to.Username = "twitter";
+ xmsg.setTo(Jid.of("twitter@crosspost.juick.com"));
xmpp.send(xmsg);
- xmsg.to.Username = "fb";
+ xmsg.setTo(Jid.of("fb@crosspost.juick.com"));
xmpp.send(xmsg);
- xmsg.to.Host = "nologin.ru";
- xmsg.to.Username = "jubo";
+ xmsg.setTo(Jid.of("jubo@nologin.ru"));
xmpp.send(xmsg);
} else {
logger.warn("XMPP unavailable");
@@ -308,7 +304,7 @@ public class NewMessage {
}
}
- public void doPostComment(JdbcTemplate sql, HttpServletRequest request, HttpServletResponse response, Stream xmpp, com.juick.User visitor) throws ServletException, IOException {
+ public void doPostComment(JdbcTemplate sql, HttpServletRequest request, HttpServletResponse response, XmppSession xmpp, com.juick.User visitor) throws ServletException, IOException {
int mid = NumberUtils.toInt(request.getParameter("mid"), 0);
if (mid == 0) {
response.sendError(400);
@@ -367,21 +363,18 @@ public class NewMessage {
SubscriptionsQueries.subscribeMessage(sql, mid, visitor.getUid());
Message xmsg = new Message();
- xmsg.from = new JID("juick", "juick.com", null);
- xmsg.type = Message.Type.chat;
- xmsg.thread = "juick-" + mid;
+ xmsg.setFrom(Jid.of("juick@juick.com"));
+ xmsg.setType(Message.Type.CHAT);
+ xmsg.setThread("juick-" + mid);
- JuickMessage jmsg = new JuickMessage(MessagesQueries.getReply(sql, mid, ridnew));
- xmsg.addChild(jmsg);
+ com.juick.Message jmsg = MessagesQueries.getReply(sql, mid, ridnew);
+ xmsg.addExtension(jmsg);
String quote = reply != null ? reply.getText() : msg.getText();
if (quote.length() >= 50) {
quote = quote.substring(0, 47) + "...";
}
-
- Nickname nick = new Nickname();
- nick.Nickname = "@" + jmsg.getUser().getName();
- xmsg.addChild(nick);
+ xmsg.addExtension(new Nickname("@" + jmsg.getUser().getName()));
if (attachmentFName != null) {
String fname = mid + "-" + ridnew + "." + attachmentType;
@@ -397,22 +390,25 @@ public class NewMessage {
.toFile(Paths.get(imgDir, "ps", fname).toFile());
body = attachmentURL + "\n" + body;
- XOOB xoob = new XOOB();
- xoob.URL = attachmentURL;
- xmsg.addChild(xoob);
+ try {
+ xmsg.addExtension(new OobX(new URI(attachmentURL)));
+ } catch (URISyntaxException e) {
+ logger.warn("invalid uri: " + attachmentURL, e);
+ }
}
if (xmpp != null) {
- xmsg.body = "Reply by @" + jmsg.getUser().getName() + ":\n>" + quote + "\n" + body + "\n\n#" + mid + "/" + ridnew + " http://juick.com/" + mid + "#" + ridnew;
+ xmsg.setBody("Reply by @" + jmsg.getUser().getName() + ":\n>" + quote + "\n" + body + "\n\n#" +
+ mid + "/" + ridnew + " http://juick.com/" + mid + "#" + ridnew);
- xmsg.to = new JID("juick", "s2s.juick.com", null);
+ xmsg.setTo(Jid.of("juick@s2s.juick.com"));
xmpp.send(xmsg);
- xmsg.to.Host = "ws.juick.com";
+ xmsg.setTo(Jid.of("juick@ws.juick.com"));
xmpp.send(xmsg);
- xmsg.to.Host = "push.juick.com";
+ xmsg.setTo(Jid.of("juick@push.juick.com"));
xmpp.send(xmsg);
} else {
logger.warn("XMPP unavailable");
@@ -421,7 +417,7 @@ public class NewMessage {
Utils.sendTemporaryRedirect(response, "/" + msg.getUser().getName() + "/" + mid + "#" + ridnew);
}
- public void doPostRecomm(JdbcTemplate sql, HttpServletRequest request, HttpServletResponse response, Stream xmpp, com.juick.User visitor) throws ServletException, IOException {
+ public void doPostRecomm(JdbcTemplate sql, HttpServletRequest request, HttpServletResponse response, XmppSession xmpp, com.juick.User visitor) throws ServletException, IOException {
int mid = NumberUtils.toInt(request.getParameter("mid"), 0);
if (mid == 0) {
response.sendError(400);
@@ -442,12 +438,12 @@ public class NewMessage {
if (res) {
if (xmpp != null) {
Message xmsg = new Message();
- xmsg.from = new JID("juick", "juick.com", null);
- xmsg.to = new JID("recomm", "s2s.juick.com", null);
- JuickMessage jmsg = new JuickMessage();
+ xmsg.setFrom(Jid.of("juick@juick.com"));
+ xmsg.setTo(Jid.of("recomm@s2s.juick.com"));
+ com.juick.Message jmsg = new com.juick.Message();
jmsg.setMid(mid);
- jmsg.setUser(new JuickUser(visitor));
- xmsg.addChild(jmsg);
+ jmsg.setUser(visitor);
+ xmsg.addExtension(jmsg);
xmpp.send(xmsg);
} else {
logger.warn("XMPP unavailable");
diff --git a/juick-www/src/main/java/com/juick/www/PM.java b/juick-www/src/main/java/com/juick/www/PM.java
index 2e35ec1c..95e2623a 100644
--- a/juick-www/src/main/java/com/juick/www/PM.java
+++ b/juick-www/src/main/java/com/juick/www/PM.java
@@ -21,15 +21,14 @@ import com.juick.server.PMQueries;
import com.juick.server.TagQueries;
import com.juick.server.UserQueries;
import com.juick.util.UserUtils;
-import com.juick.xmpp.JID;
-import com.juick.xmpp.Message;
-import com.juick.xmpp.Stream;
-import com.juick.xmpp.extensions.JuickMessage;
import com.mitchellbosecke.pebble.error.PebbleException;
import com.mitchellbosecke.pebble.template.PebbleTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@@ -87,7 +86,7 @@ public class PM {
}
}
- public void doPostPM(JdbcTemplate sql, HttpServletRequest request, HttpServletResponse response, Stream xmpp, com.juick.User visitor) throws ServletException, IOException {
+ public void doPostPM(JdbcTemplate sql, HttpServletRequest request, HttpServletResponse response, XmppSession xmpp, com.juick.User visitor) throws ServletException, IOException {
String uname = request.getParameter("uname");
if (uname.startsWith("@")) {
uname = uname.substring(1);
@@ -111,28 +110,28 @@ public class PM {
if (PMQueries.createPM(sql, visitor.getUid(), uid, body)) {
if (xmpp != null) {
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();
+ 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(visitor);
jmsg.setText(body);
- msg.childs.add(jmsg);
+ msg.addExtension(jmsg);
xmpp.send(msg);
- msg.to.Host = "ws.juick.com";
+ msg.setTo(Jid.of(String.format("%d@ws.juick.com", uid)));
xmpp.send(msg);
List<String> jids = UserQueries.getJIDsbyUID(sql, uid);
for (String jid : jids) {
Message mm = new Message();
- mm.to = new JID(jid);
- mm.type = Message.Type.chat;
+ mm.setTo(Jid.of(jid));
+ mm.setType(Message.Type.CHAT);
if (PMQueries.havePMinRoster(sql, visitor.getUid(), jid)) {
- mm.from = new JID(jmsg.getUser().getName(), "juick.com", "Juick");
- mm.body = body;
+ mm.setFrom(Jid.of(jmsg.getUser().getName(), "juick.com", "Juick"));
+ mm.setBody(body);
} else {
- mm.from = new JID("juick", "juick.com", "Juick");
- mm.body = "Private message from @" + jmsg.getUser().getName() + ":\n" + body;
+ mm.setFrom(Jid.of("juick", "juick.com", "Juick"));
+ mm.setBody("Private message from @" + jmsg.getUser().getName() + ":\n" + body);
}
xmpp.send(mm);
}