diff options
22 files changed, 292 insertions, 393 deletions
diff --git a/.gitmodules b/.gitmodules index 4c3e6649..9fbba638 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "deps/com.juick.xmpp"] - path = deps/com.juick.xmpp - url = https://github.com/juick/com.juick.xmpp.git [submodule "juick-www/src/main/resources/help"] path = juick-www/src/main/resources/help url = https://github.com/juick/help.git diff --git a/build.gradle b/build.gradle index bcdadd1c..8c4787aa 100644 --- a/build.gradle +++ b/build.gradle @@ -17,6 +17,7 @@ repositories { dependencies { testCompile project(':juick-core') testCompile project(':juick-www') + testCompile project(':juick-xmpp') testCompile 'com.fasterxml.jackson.core:jackson-core:2.8.1' testCompile 'com.fasterxml.jackson.core:jackson-databind:2.8.1' testCompile 'org.springframework:spring-jdbc:4.3.4.RELEASE' diff --git a/deps/com.juick.xmpp b/deps/com.juick.xmpp deleted file mode 160000 -Subproject dbf603cfff3a8fe26d711381e59e4ec6f1c6603 diff --git a/juick-api/build.gradle b/juick-api/build.gradle index 7e257ac3..da1a4638 100644 --- a/juick-api/build.gradle +++ b/juick-api/build.gradle @@ -15,11 +15,13 @@ apply plugin: 'com.github.tkruse.groovysh' repositories { mavenCentral() + maven { url "https://jitpack.io" } } dependencies { compile project(':server-core') - compile project(':deps:com.juick.xmpp') + compile 'org.bitbucket.sco0ter.babbler:xmpp-core-client:279e488e51' + compile 'org.bitbucket.sco0ter.babbler:xmpp-extensions-client:279e488e51' providedCompile 'javax.servlet:javax.servlet-api:3.1.0' compile 'com.github.pengrad:java-telegram-bot-api:2.1.4' compile 'org.msbotframework4j:msbotframework4j-builder:0.1.4' diff --git a/juick-api/src/main/java/com/juick/api/Main.java b/juick-api/src/main/java/com/juick/api/Main.java index c102bf18..2ca126d0 100644 --- a/juick-api/src/main/java/com/juick/api/Main.java +++ b/juick-api/src/main/java/com/juick/api/Main.java @@ -23,17 +23,19 @@ import com.juick.server.MessagesQueries; import com.juick.server.SubscriptionsQueries; import com.juick.server.TagQueries; import com.juick.server.UserQueries; -import com.juick.xmpp.JID; -import com.juick.xmpp.Message; -import com.juick.xmpp.Stream; -import com.juick.xmpp.StreamComponent; -import com.juick.xmpp.extensions.JuickMessage; -import com.juick.xmpp.extensions.Nickname; -import com.juick.xmpp.extensions.XOOB; import net.coobird.thumbnailator.Thumbnails; import org.apache.commons.dbcp2.BasicDataSource; import org.apache.commons.lang3.math.NumberUtils; import org.springframework.jdbc.core.JdbcTemplate; +import rocks.xmpp.addr.Jid; +import rocks.xmpp.core.XmppException; +import rocks.xmpp.core.session.Extension; +import rocks.xmpp.core.session.XmppSession; +import rocks.xmpp.core.session.XmppSessionConfiguration; +import rocks.xmpp.core.stanza.model.Message; +import rocks.xmpp.extensions.component.accept.ExternalComponent; +import rocks.xmpp.extensions.nick.model.Nickname; +import rocks.xmpp.extensions.oob.model.x.OobX; import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; @@ -44,7 +46,8 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.InvocationTargetException; -import java.net.Socket; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; @@ -52,19 +55,16 @@ import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.Properties; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - /** * * @author Ugnich Anton */ @WebServlet(name = "Main", urlPatterns = {"/"}) @MultipartConfig -public class Main extends HttpServlet implements Stream.StreamListener { +public class Main extends HttpServlet { JdbcTemplate jdbc; - Stream xmpp; + ExternalComponent xmpp; Messages messages; Users users; PM pm; @@ -104,27 +104,15 @@ public class Main extends HttpServlet implements Stream.StreamListener { } public void setupXmppComponent(final String host, final int port, final String jid, final String password) { - ExecutorService executorService = Executors.newSingleThreadExecutor(); - executorService.submit(() -> { - try { - Socket socket = new Socket(host, port); - xmpp = new StreamComponent(new JID(jid), socket.getInputStream(), socket.getOutputStream(), password); - xmpp.addListener(Main.this); - xmpp.startParsing(); - } catch (IOException e) { - log("XMPP exception", e); - } - }); - } - - @Override - public void onStreamFail(Exception e) { - log("XMPP failed", e); - } - - @Override - public void onStreamReady() { - log("XMPP STREAM READY"); + XmppSessionConfiguration configuration = XmppSessionConfiguration.builder() + .extensions(Extension.of(com.juick.Message.class)) + .build(); + xmpp = ExternalComponent.create(jid, password, configuration, host, port); + try { + xmpp.connect(); + } catch (XmppException e) { + log("xmpp extension", e); + } } /** @@ -246,7 +234,7 @@ public class Main extends HttpServlet implements Stream.StreamListener { } } - public void doPostMessage(JdbcTemplate sql, HttpServletRequest request, HttpServletResponse response, Stream xmpp, int vuid) + public void doPostMessage(JdbcTemplate sql, HttpServletRequest request, HttpServletResponse response, XmppSession xmpp, int vuid) throws ServletException, IOException { String body = request.getParameter("body"); if (body == null || body.length() < 1 || body.length() > 4096) { @@ -298,18 +286,15 @@ public class Main extends HttpServlet implements Stream.StreamListener { String attachmentType = attachmentFName != null ? attachmentFName.substring(attachmentFName.length() - 3) : null; int mid = MessagesQueries.createMessage(sql, vuid, body, attachmentType, tags); SubscriptionsQueries.subscribeMessage(sql, mid, vuid); - JuickMessage jmsg = new JuickMessage(MessagesQueries.getMessage(sql, mid)); + com.juick.Message jmsg = MessagesQueries.getMessage(sql, mid); if (xmpp != null) { 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); - xmsg.addChild(jmsg); - - Nickname nick = new Nickname(); - nick.Nickname = "@" + jmsg.getUser().getName(); - xmsg.addChild(nick); + xmsg.addExtension(jmsg); + xmsg.addExtension(new Nickname("@" + jmsg.getUser().getName())); if (attachmentFName != null) { String fname = mid + "." + attachmentType; @@ -325,34 +310,35 @@ public class Main extends HttpServlet implements Stream.StreamListener { .toFile(Paths.get(imgDir, "ps", fname).toFile()); body = attachmentURL + "\n" + body; - XOOB xoob = new XOOB(); - xoob.URL = attachmentURL; - xmsg.addChild(xoob); + try { + OobX xoob = new OobX(new URI(attachmentURL)); + xmsg.addExtension(xoob); + } catch (URISyntaxException e) { + log("invalid uri: " + attachmentURL, e); + } } String tagsStr2 = ""; 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 { log("XMPP unavailable"); @@ -361,7 +347,7 @@ public class Main extends HttpServlet implements Stream.StreamListener { Main.replyJSON(request, response, serializer.serialize(jmsg).toString()); } - public void doPostComment(JdbcTemplate sql, HttpServletRequest request, HttpServletResponse response, Stream xmpp, int vuid) + public void doPostComment(JdbcTemplate sql, HttpServletRequest request, HttpServletResponse response, XmppSession xmpp, int vuid) throws ServletException, IOException { int mid = NumberUtils.toInt(request.getParameter("mid"), 0); if (mid == 0) { @@ -421,23 +407,21 @@ public class Main extends HttpServlet implements Stream.StreamListener { int ridnew = MessagesQueries.createReply(sql, mid, rid, vuid, body, attachmentType); SubscriptionsQueries.subscribeMessage(sql, mid, vuid); - JuickMessage jmsg = new JuickMessage(MessagesQueries.getReply(sql, mid, ridnew)); + com.juick.Message jmsg = MessagesQueries.getReply(sql, mid, ridnew); if (xmpp != null) { Message xmsg = new Message(); - xmsg.from = new JID("juick", "juick.com", null); - xmsg.type = Message.Type.chat; - xmsg.thread = "juick-" + mid; - xmsg.addChild(jmsg); + xmsg.setFrom(Jid.of("juick@juick.com")); + xmsg.setType(Message.Type.CHAT); + xmsg.setThread("juick-" + mid); + 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; @@ -453,20 +437,23 @@ public class Main extends HttpServlet implements Stream.StreamListener { .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) { + log("invalid uri: " + attachmentURL, e); + } } - 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 { log("XMPP unavailable"); diff --git a/juick-api/src/main/java/com/juick/api/Messages.java b/juick-api/src/main/java/com/juick/api/Messages.java index de845d45..93abb06b 100644 --- a/juick-api/src/main/java/com/juick/api/Messages.java +++ b/juick-api/src/main/java/com/juick/api/Messages.java @@ -7,15 +7,14 @@ import com.juick.json.MessageSerializer; import com.juick.server.MessagesQueries; import com.juick.server.TagQueries; 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.apache.commons.lang3.math.NumberUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.util.StringUtils; +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; @@ -140,7 +139,7 @@ public class Messages { } public void doSetPrivacy(HttpServletRequest request, - HttpServletResponse response, Stream xmpp, int vuid) + HttpServletResponse response, XmppSession xmpp, int vuid) throws ServletException, IOException { int mid = NumberUtils.toInt(request.getParameter("mid"), 0); com.juick.User user = MessagesQueries.getMessageAuthor(sql, mid); @@ -152,7 +151,7 @@ public class Messages { } public void doSetPopular(HttpServletRequest request, - HttpServletResponse response, Stream xmpp) + HttpServletResponse response, XmppSession xmpp) throws ServletException, IOException { int mid = NumberUtils.toInt(request.getParameter("mid"), 0); int popular = NumberUtils.toInt(request.getParameter("popular"), 0); @@ -165,17 +164,16 @@ public class Messages { com.juick.Message m = MessagesQueries.getMessage(sql, mid); if (m != null) { Message msg = new Message(); - msg.from = new JID("juick", "juick.com", null); - msg.to = new JID(null, "crosspost.juick.com", null); - JuickMessage jmsg = new JuickMessage(m); - jmsg.setUser(UserQueries.getUserByUID(sql, 11574).get()); - msg.childs.add(jmsg); + msg.setFrom(Jid.of("juick@juick.com")); + msg.setTo(Jid.of("crosspost.juick.com")); + m.setUser(UserQueries.getUserByUID(sql, 11574).get()); + msg.addExtension(m); - msg.to.Username = "twitter"; + msg.setTo(Jid.of("twitter@crosspost.juick.com")); xmpp.send(msg); - msg.to.Username = "fb"; + msg.setTo(Jid.of("fb@crosspost.juick.com")); xmpp.send(msg); - msg.to.Username = "vk"; + msg.setTo(Jid.of("vk@crosspost.juick.com")); xmpp.send(msg); } else { throw new Exception("Message not found"); diff --git a/juick-api/src/main/java/com/juick/api/PM.java b/juick-api/src/main/java/com/juick/api/PM.java index d8f17366..86d9c534 100644 --- a/juick-api/src/main/java/com/juick/api/PM.java +++ b/juick-api/src/main/java/com/juick/api/PM.java @@ -4,11 +4,10 @@ import com.juick.json.MessageSerializer; import com.juick.server.PMQueries; 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 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; @@ -53,8 +52,8 @@ public class PM { } } - public void doPostPM(HttpServletRequest request, - HttpServletResponse response, Stream xmpp, int vuid) + public void doPostPM(HttpServletRequest request, + HttpServletResponse response, XmppSession xmpp, int vuid) throws ServletException, IOException { String uname = request.getParameter("uname"); int uid = 0; @@ -75,15 +74,15 @@ public class PM { 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(); + 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.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); Main.replyJSON(request, response, messageSerializer.serialize(jmsg).toString()); @@ -91,14 +90,14 @@ public class PM { 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, vuid, 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); } diff --git a/juick-core/build.gradle b/juick-core/build.gradle index 6bdd326c..1f3ce9cd 100644 --- a/juick-core/build.gradle +++ b/juick-core/build.gradle @@ -9,10 +9,7 @@ def slf4jVersion = '1.7.21' def jacksonVersion = '2.8.4' dependencies { - compile project(':deps:com.juick.xmpp') - compile "com.fasterxml.jackson.core:jackson-annotations:${jacksonVersion}" - compile "org.slf4j:slf4j-api:${slf4jVersion}" compile 'org.apache.httpcomponents:httpclient:4.5.2' compile 'org.apache.commons:commons-lang3:3.5' diff --git a/juick-crosspost/build.gradle b/juick-crosspost/build.gradle index 49fa86f9..6f28bc1f 100644 --- a/juick-crosspost/build.gradle +++ b/juick-crosspost/build.gradle @@ -5,12 +5,15 @@ apply plugin: 'com.github.ben-manes.versions' repositories { mavenCentral() + maven { url "https://jitpack.io" } } def springFrameworkVersion = '4.3.4.RELEASE' dependencies { compile project(':server-core') + compile 'org.bitbucket.sco0ter.babbler:xmpp-core-client:279e488e51' + compile 'org.bitbucket.sco0ter.babbler:xmpp-extensions-client:279e488e51' compile "org.springframework:spring-webmvc:${springFrameworkVersion}" compile 'com.mitchellbosecke:pebble-spring4:2.2.3' providedRuntime 'mysql:mysql-connector-java:5.1.40' diff --git a/juick-crosspost/src/main/java/com/juick/components/Crosspost.java b/juick-crosspost/src/main/java/com/juick/components/Crosspost.java index 8ccca67c..f14749eb 100644 --- a/juick-crosspost/src/main/java/com/juick/components/Crosspost.java +++ b/juick-crosspost/src/main/java/com/juick/components/Crosspost.java @@ -18,37 +18,34 @@ package com.juick.components; import com.juick.service.CrosspostService; -import com.juick.util.ThreadHelper; -import com.juick.xmpp.JID; -import com.juick.xmpp.Message; -import com.juick.xmpp.Stream; -import com.juick.xmpp.StreamComponent; -import com.juick.xmpp.extensions.JuickMessage; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.math.NumberUtils; import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.env.Environment; import org.springframework.util.Assert; +import rocks.xmpp.core.XmppException; +import rocks.xmpp.core.session.Extension; +import rocks.xmpp.core.session.XmppSession; +import rocks.xmpp.core.session.XmppSessionConfiguration; +import rocks.xmpp.core.stanza.model.Message; +import rocks.xmpp.extensions.component.accept.ExternalComponent; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import javax.net.ssl.HttpsURLConnection; import java.io.*; -import java.net.Socket; import java.net.URL; import java.net.URLEncoder; import java.security.Key; import java.util.UUID; -import java.util.concurrent.ExecutorService; /** * @author Ugnich Anton */ -public class Crosspost implements InitializingBean, DisposableBean, Stream.StreamListener, Message.MessageListener { +public class Crosspost implements InitializingBean { final static String TWITTERURL = "https://api.twitter.com/1.1/statuses/update.json"; final static String FBURL = "https://graph.facebook.com/me/feed"; final static String VKURL = "https://api.vk.com/method/wall.post"; @@ -56,8 +53,7 @@ public class Crosspost implements InitializingBean, DisposableBean, Stream.Strea private static Logger logger = LoggerFactory.getLogger(Crosspost.class); private final CrosspostService crosspostService; - private final ExecutorService service; - private Stream xmpp; + private XmppSession xmpp; private final String twitter_consumer_key; private final String twitter_consumer_secret; @@ -65,12 +61,10 @@ public class Crosspost implements InitializingBean, DisposableBean, Stream.Strea private final String password; private final int port; - public Crosspost(final Environment env, final ExecutorService service, final CrosspostService crosspostService) { + public Crosspost(final Environment env, final CrosspostService crosspostService) { Assert.notNull(env); - Assert.notNull(service); Assert.notNull(crosspostService); - this.service = service; this.crosspostService = crosspostService; twitter_consumer_key = env.getProperty("twitter_consumer_key", ""); @@ -91,50 +85,28 @@ public class Crosspost implements InitializingBean, DisposableBean, Stream.Strea } @Override - public void afterPropertiesSet() throws Exception { - try { - Socket socket = new Socket("localhost", port); - xmpp = new StreamComponent(new JID(crosspostJid), socket.getInputStream(), socket.getOutputStream(), password); - xmpp.addChildParser(new JuickMessage()); - xmpp.addListener((Stream.StreamListener) this); - xmpp.addListener((Message.MessageListener) this); - - service.submit(() -> xmpp.startParsing()); - - logger.info("Crosspost initialized"); - } catch (Exception e) { - logger.error("Crosspost initialization exception", e); - } - } - - @Override - public void destroy() throws Exception { - ThreadHelper.shutdownAndAwaitTermination(service); - - logger.info("Crosspost destroyed"); - } - - @Override - public void onStreamReady() { - logger.info("XMPP STREAM READY"); - } - - @Override - public void onStreamFail(Exception e) { - logger.error("XMPP STREAM FAIL", e); - } - - @Override - public void onMessage(final com.juick.xmpp.Message msg) { - JuickMessage jmsg = (JuickMessage) msg.getChild(JuickMessage.XMLNS); - if (msg.to != null && msg.to.Username != null && jmsg != null && jmsg.getRid() == 0) { - if (msg.to.Username.equals("twitter")) { - twitterPost(jmsg); - } else if (msg.to.Username.equals("fb")) { - facebookPost(jmsg); - } else if (msg.to.Username.equals("vk")) { - vkontaktePost(jmsg); + public void afterPropertiesSet() { + XmppSessionConfiguration configuration = XmppSessionConfiguration.builder() + .extensions(Extension.of(com.juick.Message.class)) + .build(); + xmpp = ExternalComponent.create(crosspostJid, password, configuration, "localhost", port); + xmpp.addInboundMessageListener(e -> { + Message msg = e.getMessage(); + com.juick.Message jmsg = msg.getExtension(com.juick.Message.class); + if (msg.getTo() != null && msg.getTo().getLocal() != null && jmsg != null && jmsg.getRid() == 0) { + if (msg.getTo().getLocal().equals("twitter")) { + twitterPost(jmsg); + } else if (msg.getTo().getLocal().equals("fb")) { + facebookPost(jmsg); + } else if (msg.getTo().getLocal().equals("vk")) { + vkontaktePost(jmsg); + } } + }); + try { + xmpp.connect(); + } catch (XmppException e) { + logger.warn("xmpp exception", e); } } diff --git a/juick-crosspost/src/main/java/com/juick/components/configuration/CrosspostAppConfiguration.java b/juick-crosspost/src/main/java/com/juick/components/configuration/CrosspostAppConfiguration.java index 603130b3..91a886b3 100644 --- a/juick-crosspost/src/main/java/com/juick/components/configuration/CrosspostAppConfiguration.java +++ b/juick-crosspost/src/main/java/com/juick/components/configuration/CrosspostAppConfiguration.java @@ -8,11 +8,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; -import org.springframework.jdbc.core.JdbcTemplate; import javax.inject.Inject; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; /** * Created by aalexeev on 11/12/16. @@ -28,11 +25,6 @@ public class CrosspostAppConfiguration { @Bean public Crosspost crosspost() { - return new Crosspost(env, service(), crosspostService); - } - - @Bean - public ExecutorService service() { - return Executors.newCachedThreadPool(); + return new Crosspost(env, crosspostService); } } diff --git a/juick-notifications/build.gradle b/juick-notifications/build.gradle index a55da11a..c8350adb 100644 --- a/juick-notifications/build.gradle +++ b/juick-notifications/build.gradle @@ -5,12 +5,15 @@ apply plugin: 'com.github.ben-manes.versions' repositories { mavenCentral() + maven { url "https://jitpack.io" } } def springFrameworkVersion = '4.3.4.RELEASE' dependencies { compile project(':server-core') + compile 'org.bitbucket.sco0ter.babbler:xmpp-core-client:279e488e51' + compile 'org.bitbucket.sco0ter.babbler:xmpp-extensions-client:279e488e51' compile 'com.ganyo:gcm-server:1.1.0' compile 'com.notnoop.apns:apns:1.0.0.Beta6' compile "org.springframework:spring-webmvc:${springFrameworkVersion}" diff --git a/juick-notifications/src/main/java/com/juick/components/Notifications.java b/juick-notifications/src/main/java/com/juick/components/Notifications.java index d37f7a25..e449abef 100644 --- a/juick-notifications/src/main/java/com/juick/components/Notifications.java +++ b/juick-notifications/src/main/java/com/juick/components/Notifications.java @@ -18,16 +18,12 @@ package com.juick.components; import com.google.android.gcm.server.*; +import com.google.android.gcm.server.Message; import com.juick.json.MessageSerializer; import com.juick.util.ThreadHelper; -import com.juick.xmpp.JID; -import com.juick.xmpp.Message.MessageListener; -import com.juick.xmpp.Stream; -import com.juick.xmpp.StreamComponent; -import com.juick.xmpp.extensions.JuickMessage; -import com.juick.xmpp.utils.XmlUtils; import com.notnoop.apns.APNS; import com.notnoop.apns.ApnsService; +import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.lang3.math.NumberUtils; import org.apache.http.Consts; import org.apache.http.Header; @@ -50,24 +46,24 @@ import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.env.Environment; import org.springframework.http.HttpMethod; import org.springframework.web.client.RestTemplate; +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 java.io.IOException; -import java.net.Socket; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.concurrent.ExecutorService; /** * @author Ugnich Anton */ -public class Notifications implements InitializingBean, DisposableBean, Stream.StreamListener, MessageListener { +public class Notifications implements InitializingBean { private static Logger logger = LoggerFactory.getLogger(Notifications.class); private final RestTemplate rest; - private final ExecutorService service; - private Socket socket; - private Stream xmpp; + private ExternalComponent xmpp; private final Sender GCMSender; private final String wns_application_sip; @@ -78,8 +74,7 @@ public class Notifications implements InitializingBean, DisposableBean, Stream.S private final String xmppPushPassword; - public Notifications(final Environment env, final ExecutorService service, final RestTemplate rest) { - this.service = service; + public Notifications(final Environment env, final RestTemplate rest) { this.rest = rest; wns_application_sip = env.getProperty("wns_application_sip", ""); @@ -92,150 +87,128 @@ public class Notifications implements InitializingBean, DisposableBean, Stream.S } @Override - public void afterPropertiesSet() throws Exception { - try { - socket = new Socket(xmppHost, xmppPort); - xmpp = new StreamComponent(new JID("", pushJid, ""), socket.getInputStream(), socket.getOutputStream(), xmppPushPassword); - xmpp.addChildParser(new JuickMessage()); - xmpp.addListener((Stream.StreamListener) this); - xmpp.addListener((MessageListener) this); - - service.submit(() -> xmpp.startParsing()); - - logger.info("Notifications initialized"); - } catch (Exception e) { - logger.error("Notifications initialization error", e); - } - } - - @Override - public void destroy() { - ThreadHelper.shutdownAndAwaitTermination(service); - - logger.info("component destroyed"); - } - - @Override - public void onStreamReady() { - logger.info("XMPP STREAM READY"); - } - - @Override - public void onStreamFail(final Exception e) { - logger.error("XMPP STREAM FAIL", e); - } - - @Override - public void onMessage(final com.juick.xmpp.Message msg) { - JuickMessage jmsg = (JuickMessage) msg.getChild(JuickMessage.XMLNS); - boolean isPM = jmsg.getMid() == 0; - boolean isReply = jmsg.getRid() > 0; - int pmTo = 0; + public void afterPropertiesSet() { + XmppSessionConfiguration configuration = XmppSessionConfiguration.builder() + .extensions(Extension.of(com.juick.Message.class)) + .build(); + xmpp = ExternalComponent.create(pushJid, xmppPushPassword, configuration, xmppHost, xmppPort); + xmpp.addInboundMessageListener(e -> { + rocks.xmpp.core.stanza.model.Message msg = e.getMessage(); + com.juick.Message jmsg = msg.getExtension(com.juick.Message.class); + boolean isPM = jmsg.getMid() == 0; + boolean isReply = jmsg.getRid() > 0; + int pmTo = 0; - /*** ANDROID ***/ - final List<String> regids = new ArrayList<>(); - if (isPM) { - regids.addAll(rest.exchange(String.format("http://api.juick.com/notifications?type=gcm&uid=%s", - jmsg.getUser().getUid()), - HttpMethod.GET, null, new ParameterizedTypeReference<List<String>>() { - }).getBody()); - } else { - regids.addAll(rest.exchange(String.format("http://api.juick.com/notifications?type=gcm&uid=%s&mid=%s", - jmsg.getUser().getUid(), jmsg.getMid()), - HttpMethod.GET, null, new ParameterizedTypeReference<List<String>>() { - }).getBody()); - } + /*** ANDROID ***/ + final List<String> regids = new ArrayList<>(); + if (isPM) { + regids.addAll(rest.exchange(String.format("http://api.juick.com/notifications?type=gcm&uid=%s", + jmsg.getUser().getUid()), + HttpMethod.GET, null, new ParameterizedTypeReference<List<String>>() { + }).getBody()); + } else { + regids.addAll(rest.exchange(String.format("http://api.juick.com/notifications?type=gcm&uid=%s&mid=%s", + jmsg.getUser().getUid(), jmsg.getMid()), + HttpMethod.GET, null, new ParameterizedTypeReference<List<String>>() { + }).getBody()); + } - if (!regids.isEmpty()) { - MessageSerializer messageSerializer = new MessageSerializer(); - String json = messageSerializer.serialize(jmsg).toString(); - logger.info(json); - Message message = new Message.Builder().addData("message", json).build(); - try { - MulticastResult result = GCMSender.send(message, regids, 3); - List<Result> results = result.getResults(); - for (int i = 0; i < results.size(); i++) { - logger.info("RES " + i + ": " + results.get(i).toString()); + if (!regids.isEmpty()) { + MessageSerializer messageSerializer = new MessageSerializer(); + String json = messageSerializer.serialize(jmsg).toString(); + logger.info(json); + Message message = new Message.Builder().addData("message", json).build(); + try { + MulticastResult result = GCMSender.send(message, regids, 3); + List<Result> results = result.getResults(); + for (int i = 0; i < results.size(); i++) { + logger.info("RES " + i + ": " + results.get(i).toString()); + } + } catch (IOException ex) { + logger.error(ex.getMessage(), ex); + } catch (IllegalArgumentException err) { + logger.warn("Android: Invalid API Key"); } - } catch (IOException e) { - logger.error(e.getMessage(), e); - } catch (IllegalArgumentException err) { - logger.warn("Android: Invalid API Key"); + } else { + logger.info("GMS: no recipients"); } - } else { - logger.info("GMS: no recipients"); - } - /*** WinPhone ***/ - final List<String> urls = new ArrayList<>(); - if (isPM) { - urls.addAll(rest.exchange(String.format("http://api.juick.com/notifications?type=mpns&uid=%s", - jmsg.getUser().getUid()), - HttpMethod.GET, null, new ParameterizedTypeReference<List<String>>() { - }).getBody()); - } else { - urls.addAll(rest.exchange(String.format("http://api.juick.com/notifications?type=mpns&uid=%s&mid=%s", - jmsg.getUser().getUid(), jmsg.getMid()), - HttpMethod.GET, null, new ParameterizedTypeReference<List<String>>() { - }).getBody()); - } + /*** WinPhone ***/ + final List<String> urls = new ArrayList<>(); + if (isPM) { + urls.addAll(rest.exchange(String.format("http://api.juick.com/notifications?type=mpns&uid=%s", + jmsg.getUser().getUid()), + HttpMethod.GET, null, new ParameterizedTypeReference<List<String>>() { + }).getBody()); + } else { + urls.addAll(rest.exchange(String.format("http://api.juick.com/notifications?type=mpns&uid=%s&mid=%s", + jmsg.getUser().getUid(), jmsg.getMid()), + HttpMethod.GET, null, new ParameterizedTypeReference<List<String>>() { + }).getBody()); + } - if (urls.isEmpty()) { - logger.info("WNS: no recipients"); - } else { - try { - String wnsToken = getWnsAccessToken(); - String text1 = "@" + jmsg.getUser().getName(); - if (!jmsg.getTags().isEmpty()) { - text1 += ":" + XmlUtils.escape(jmsg.getTagsString()); - } - String text2 = XmlUtils.escape(jmsg.getText()); - String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" - + "<toast>" - + "<visual>" - + "<binding template=\"ToastImageAndText02\">" - + "<image id=\"1\" src=\"http://i.juick.com/as/" + jmsg.getUser().getUid() + ".png\" />" - + "<text id=\"1\">" + text1 + "</text>" - + "<text id=\"2\">" + text2 + "</text>" - + "</binding>" - + "</visual>" - + "<commands>" - + "<command arguments=\"?mid=" + jmsg.getMid() + "\" />" - + "</commands>" - + "</toast>"; - logger.trace(xml); - for (String url : urls) { - logger.info("WNS: " + url); - sendWNS(wnsToken, url, xml); + if (urls.isEmpty()) { + logger.info("WNS: no recipients"); + } else { + try { + String wnsToken = getWnsAccessToken(); + String text1 = "@" + jmsg.getUser().getName(); + if (!jmsg.getTags().isEmpty()) { + text1 += ":" + StringEscapeUtils.escapeXml11(jmsg.getTagsString()); + } + String text2 = StringEscapeUtils.escapeXml11(jmsg.getText()); + String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + + "<toast>" + + "<visual>" + + "<binding template=\"ToastImageAndText02\">" + + "<image id=\"1\" src=\"http://i.juick.com/as/" + jmsg.getUser().getUid() + ".png\" />" + + "<text id=\"1\">" + text1 + "</text>" + + "<text id=\"2\">" + text2 + "</text>" + + "</binding>" + + "</visual>" + + "<commands>" + + "<command arguments=\"?mid=" + jmsg.getMid() + "\" />" + + "</commands>" + + "</toast>"; + logger.trace(xml); + for (String url : urls) { + logger.info("WNS: " + url); + sendWNS(wnsToken, url, xml); + } + } catch (IOException | IllegalStateException ex) { + logger.error("WNS: ", ex); } - } catch (IOException | IllegalStateException e) { - logger.error("WNS: ", e); } - } - /*** iOS ***/ - final List<String> tokens = new ArrayList<>(); - if (isPM) { - tokens.addAll(rest.exchange(String.format("http://api.juick.com/notifications?type=apns&uid=%s", - jmsg.getUser().getUid()), - HttpMethod.GET, null, new ParameterizedTypeReference<List<String>>() { - }).getBody()); - } else { - tokens.addAll(rest.exchange(String.format("http://api.juick.com/notifications?type=apns&uid=%s&mid=%s", - jmsg.getUser().getUid(), jmsg.getMid()), - HttpMethod.GET, null, new ParameterizedTypeReference<List<String>>() { - }).getBody()); - } - if (!tokens.isEmpty()) { - ApnsService service = APNS.newService().withCert("/etc/juick/ios.p12", "juick") - .withSandboxDestination().build(); - for (String token : tokens) { - String payload = APNS.newPayload().alertTitle("@" + jmsg.getUser().getName()).alertBody(jmsg.getText()).build(); - logger.info("APNS: " + token); - service.push(token, payload); + /*** iOS ***/ + final List<String> tokens = new ArrayList<>(); + if (isPM) { + tokens.addAll(rest.exchange(String.format("http://api.juick.com/notifications?type=apns&uid=%s", + jmsg.getUser().getUid()), + HttpMethod.GET, null, new ParameterizedTypeReference<List<String>>() { + }).getBody()); + } else { + tokens.addAll(rest.exchange(String.format("http://api.juick.com/notifications?type=apns&uid=%s&mid=%s", + jmsg.getUser().getUid(), jmsg.getMid()), + HttpMethod.GET, null, new ParameterizedTypeReference<List<String>>() { + }).getBody()); } - } else { - logger.info("APNS: no recipients"); + if (!tokens.isEmpty()) { + ApnsService service = APNS.newService().withCert("/etc/juick/ios.p12", "juick") + .withSandboxDestination().build(); + for (String token : tokens) { + String payload = APNS.newPayload().alertTitle("@" + jmsg.getUser().getName()).alertBody(jmsg.getText()).build(); + logger.info("APNS: " + token); + service.push(token, payload); + } + } else { + logger.info("APNS: no recipients"); + } + }); + try { + xmpp.connect(); + } catch (XmppException e) { + logger.warn("xmpp extension", e); } } diff --git a/juick-notifications/src/main/java/com/juick/components/configuration/NotificationsAppConfiguration.java b/juick-notifications/src/main/java/com/juick/components/configuration/NotificationsAppConfiguration.java index 1974830a..c17587ac 100644 --- a/juick-notifications/src/main/java/com/juick/components/configuration/NotificationsAppConfiguration.java +++ b/juick-notifications/src/main/java/com/juick/components/configuration/NotificationsAppConfiguration.java @@ -10,8 +10,6 @@ import org.springframework.core.env.Environment; import org.springframework.web.client.RestTemplate; import javax.inject.Inject; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; /** * Created by aalexeev on 11/12/16. @@ -30,11 +28,6 @@ public class NotificationsAppConfiguration { @Bean public Notifications push() { - return new Notifications(env, service(), rest()); - } - - @Bean - public ExecutorService service() { - return Executors.newCachedThreadPool(); + return new Notifications(env, rest()); } } diff --git a/juick-ws/build.gradle b/juick-ws/build.gradle index 80afdcd7..4148b741 100644 --- a/juick-ws/build.gradle +++ b/juick-ws/build.gradle @@ -13,13 +13,15 @@ apply plugin: 'com.github.ben-manes.versions' repositories { mavenCentral() + maven { url "https://jitpack.io" } } def springFrameworkVersion = '4.3.4.RELEASE' dependencies { compile project(':server-core') - compile project(':deps:com.juick.xmpp') + compile 'org.bitbucket.sco0ter.babbler:xmpp-core-client:279e488e51' + compile 'org.bitbucket.sco0ter.babbler:xmpp-extensions-client:279e488e51' compile "org.springframework:spring-webmvc:${springFrameworkVersion}" compile "org.springframework:spring-websocket:${springFrameworkVersion}" compile 'com.mitchellbosecke:pebble-spring4:2.2.3' diff --git a/juick-ws/src/main/java/com/juick/ws/XMPPConnection.java b/juick-ws/src/main/java/com/juick/ws/XMPPConnection.java index 7a6feee1..1b6eb3dc 100644 --- a/juick-ws/src/main/java/com/juick/ws/XMPPConnection.java +++ b/juick-ws/src/main/java/com/juick/ws/XMPPConnection.java @@ -5,11 +5,6 @@ import com.juick.json.MessageSerializer; import com.juick.server.MessagesQueries; import com.juick.server.SubscriptionsQueries; import com.juick.util.ThreadHelper; -import com.juick.xmpp.JID; -import com.juick.xmpp.Message; -import com.juick.xmpp.Stream; -import com.juick.xmpp.StreamComponent; -import com.juick.xmpp.extensions.JuickMessage; import org.apache.commons.lang3.math.NumberUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -19,9 +14,14 @@ import org.springframework.core.env.Environment; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.util.Assert; import org.springframework.web.socket.TextMessage; +import rocks.xmpp.core.XmppException; +import rocks.xmpp.core.session.Extension; +import rocks.xmpp.core.session.XmppSession; +import rocks.xmpp.core.session.XmppSessionConfiguration; +import rocks.xmpp.core.stanza.model.Message; +import rocks.xmpp.extensions.component.accept.ExternalComponent; import java.io.IOException; -import java.net.Socket; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.stream.Collectors; @@ -29,7 +29,7 @@ import java.util.stream.Collectors; /** * @author ugnich */ -public class XMPPConnection implements InitializingBean, DisposableBean, Stream.StreamListener, Message.MessageListener { +public class XMPPConnection implements InitializingBean, DisposableBean { private static final Logger logger = LoggerFactory.getLogger(XMPPConnection.class); private final JdbcTemplate jdbc; @@ -40,7 +40,7 @@ public class XMPPConnection implements InitializingBean, DisposableBean, Stream. private final int xmppPort; private final String wsJid; - private Stream xmpp; + private XmppSession xmpp; public XMPPConnection( @@ -62,19 +62,34 @@ public class XMPPConnection implements InitializingBean, DisposableBean, Stream. } @Override - public void afterPropertiesSet() throws Exception { + public void afterPropertiesSet() { + XmppSessionConfiguration configuration = XmppSessionConfiguration.builder() + .extensions(Extension.of(com.juick.Message.class)) + .build(); + xmpp = ExternalComponent.create(wsJid, xmppPassword, configuration, "localhost", xmppPort); + xmpp.addInboundMessageListener(e -> { + Message msg = e.getMessage(); + com.juick.Message jmsg = msg.getExtension(com.juick.Message.class); + if (jmsg != null) { + logger.info("got msg: " + ms.serialize(jmsg).toString()); + if (jmsg.getMid() == 0) { + int uid_to = NumberUtils.toInt(msg.getTo().getLocal(), 0); + if (uid_to > 0) { + onJuickPM(uid_to, jmsg); + } + } else if (jmsg.getRid() == 0) { + onJuickMessagePost(jmsg); + } else { + // to get quote + com.juick.Message reply = MessagesQueries.getReply(jdbc, jmsg.getMid(), jmsg.getRid()); + onJuickMessageReply(reply); + } + } + }); try { - Socket socket = new Socket("localhost", xmppPort); - xmpp = new StreamComponent(new JID(wsJid), socket.getInputStream(), socket.getOutputStream(), xmppPassword); - xmpp.addChildParser(new JuickMessage()); - xmpp.addListener((Stream.StreamListener) this); - xmpp.addListener((Message.MessageListener) this); - - service.submit(() -> xmpp.startParsing()); - - logger.info("XMPPConnection initialized"); - } catch (IOException e) { - logger.error("XMPPConnection initialization error", e); + xmpp.connect(); + } catch (XmppException e) { + logger.warn("xmpp extension", e); } } @@ -85,40 +100,6 @@ public class XMPPConnection implements InitializingBean, DisposableBean, Stream. logger.info("XMPPConnection destroyed"); } - @Override - public void onStreamReady() { - logger.info("XMPP stream ready"); - } - - @Override - public void onStreamFail(final Exception ex) { - logger.error("XMPP stream failed", ex); - } - - @Override - public void onMessage(final com.juick.xmpp.Message msg) { - JuickMessage jmsg = (JuickMessage) msg.getChild(JuickMessage.XMLNS); - if (jmsg != null) { - logger.info("got jmsg: " + ms.serialize(jmsg).toString()); - if (jmsg.getMid() == 0) { - int uid_to = 0; - try { - uid_to = Integer.parseInt(msg.to.Username); - } catch (Exception e) { - } - if (uid_to > 0) { - onJuickPM(uid_to, jmsg); - } - } else if (jmsg.getRid() == 0) { - onJuickMessagePost(jmsg); - } else { - // to get quote - com.juick.Message reply = MessagesQueries.getReply(jdbc, jmsg.getMid(), jmsg.getRid()); - onJuickMessageReply(reply); - } - } - } - MessageSerializer messageSerializer = new MessageSerializer(); private void onJuickPM(final int uid_to, final com.juick.Message jmsg) { diff --git a/juick-xmpp/build.gradle b/juick-xmpp/build.gradle index b05762c4..892e23cb 100644 --- a/juick-xmpp/build.gradle +++ b/juick-xmpp/build.gradle @@ -5,6 +5,7 @@ apply plugin: 'com.github.ben-manes.versions' repositories { mavenCentral() + maven { url "https://jitpack.io" } } def springFrameworkVersion = '4.3.4.RELEASE' @@ -13,6 +14,7 @@ def slf4jVersion = '1.7.21' dependencies { compile project(':server-core') + compile 'com.github.juick:com.juick.xmpp:dbf603cfff' compile "org.slf4j:slf4j-api:${slf4jVersion}" compile "org.springframework:spring-webmvc:${springFrameworkVersion}" compile "com.fasterxml.jackson.core:jackson-core:${jacksonVersion}" diff --git a/juick-core/src/main/java/com/juick/xmpp/extensions/JuickMessage.java b/juick-xmpp/src/main/java/com/juick/xmpp/extensions/JuickMessage.java index 2c3875c5..2c3875c5 100644 --- a/juick-core/src/main/java/com/juick/xmpp/extensions/JuickMessage.java +++ b/juick-xmpp/src/main/java/com/juick/xmpp/extensions/JuickMessage.java diff --git a/juick-core/src/main/java/com/juick/xmpp/extensions/JuickUser.java b/juick-xmpp/src/main/java/com/juick/xmpp/extensions/JuickUser.java index 7473134c..7473134c 100644 --- a/juick-core/src/main/java/com/juick/xmpp/extensions/JuickUser.java +++ b/juick-xmpp/src/main/java/com/juick/xmpp/extensions/JuickUser.java diff --git a/server-core/build.gradle b/server-core/build.gradle index f082e2c8..705b7675 100644 --- a/server-core/build.gradle +++ b/server-core/build.gradle @@ -14,8 +14,6 @@ def springFrameworkVersion = '4.3.4.RELEASE' dependencies { compile project(':juick-core') - compile project(':deps:com.juick.xmpp') - compile "com.fasterxml.jackson.core:jackson-core:${jacksonVersion}" compile "com.fasterxml.jackson.core:jackson-databind:${jacksonVersion}" compile "com.fasterxml.jackson.core:jackson-annotations:${jacksonVersion}" diff --git a/server-core/src/main/java/com/juick/server/protocol/JuickProtocol.java b/server-core/src/main/java/com/juick/server/protocol/JuickProtocol.java index f1e98eb9..6fa3790e 100644 --- a/server-core/src/main/java/com/juick/server/protocol/JuickProtocol.java +++ b/server-core/src/main/java/com/juick/server/protocol/JuickProtocol.java @@ -8,7 +8,6 @@ import com.juick.json.MessageSerializer; import com.juick.server.*; import com.juick.server.protocol.annotation.UserCommand; import com.juick.util.TagUtils; -import com.juick.xmpp.extensions.JuickMessage; import org.springframework.jdbc.core.JdbcTemplate; import java.lang.reflect.InvocationTargetException; @@ -305,7 +304,7 @@ public class JuickProtocol { if (ret == 200) { - JuickMessage jmsg = new JuickMessage(); + Message jmsg = new Message(); jmsg.setUser(user_from); jmsg.setText(body); // TODO: add PM payload diff --git a/settings.gradle b/settings.gradle index f1b637e5..2b1e5051 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':deps:com.juick.xmpp', ':juick-core', 'server-core', ':juick-api', ':juick-www', ':juick-rss', ':juick-ws', ':juick-demo', ':juick-notifications', ':juick-crosspost', ':juick-xmpp', ':juick-xmpp-ft', ':juick-xmpp-bot' +include ':juick-core', 'server-core', ':juick-api', ':juick-www', ':juick-rss', ':juick-ws', ':juick-demo', ':juick-notifications', ':juick-crosspost', ':juick-xmpp', ':juick-xmpp-ft', ':juick-xmpp-bot' |