aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/juick/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/juick/server')
-rw-r--r--src/main/java/com/juick/server/XMPPManager.java82
-rw-r--r--src/main/java/com/juick/server/api/Messages.java7
2 files changed, 47 insertions, 42 deletions
diff --git a/src/main/java/com/juick/server/XMPPManager.java b/src/main/java/com/juick/server/XMPPManager.java
index 51b3b04e..12021006 100644
--- a/src/main/java/com/juick/server/XMPPManager.java
+++ b/src/main/java/com/juick/server/XMPPManager.java
@@ -34,6 +34,7 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.Resource;
import rocks.xmpp.addr.Jid;
import rocks.xmpp.core.XmppException;
import rocks.xmpp.core.session.Extension;
@@ -87,7 +88,7 @@ public class XMPPManager implements NotificationListener {
private static final Logger logger = LoggerFactory.getLogger("com.juick.server.xmpp");
- private ExternalComponent router;
+ private ExternalComponent xmpp;
@Inject
private CommandsManager commandsManager;
@Value("${xmppbot_jid:juick@localhost}")
@@ -102,6 +103,8 @@ public class XMPPManager implements NotificationListener {
private String password;
@Value("${upload_tmp_dir:#{systemEnvironment['TEMP'] ?: '/tmp'}}")
private String tmpDir;
+ @Value("classpath:juick.png")
+ private Resource vCardImage;
@Inject
private MessagesService messagesService;
@@ -120,22 +123,22 @@ public class XMPPManager implements NotificationListener {
@PostConstruct
public void init() {
- logger.info("stream router start connecting to {}", componentPort);
+ logger.info("xmpp component start connecting to {}", componentPort);
XmppSessionConfiguration configuration = XmppSessionConfiguration.builder()
.extensions(Extension.of(com.juick.Message.class), Extension.of(MessageQuery.class))
.debugger(LogbackDebugger.class)
.defaultResponseTimeout(Duration.ofMillis(120000))
.build();
- router = ExternalComponent.create(componentName, password, configuration, componentHost, componentPort);
- ServiceDiscoveryManager serviceDiscoveryManager = router.getManager(ServiceDiscoveryManager.class);
+ xmpp = ExternalComponent.create(componentName, password, configuration, componentHost, componentPort);
+ ServiceDiscoveryManager serviceDiscoveryManager = xmpp.getManager(ServiceDiscoveryManager.class);
serviceDiscoveryManager.addIdentity(Identity.clientBot().withName("Juick"));
- EntityCapabilitiesManager entityCapabilitiesManager = router.getManager(EntityCapabilitiesManager.class);
+ EntityCapabilitiesManager entityCapabilitiesManager = xmpp.getManager(EntityCapabilitiesManager.class);
entityCapabilitiesManager.setNode("https://juick.com/caps");
- MessageDeliveryReceiptsManager messageDeliveryReceiptsManager = router.getManager(MessageDeliveryReceiptsManager.class);
+ MessageDeliveryReceiptsManager messageDeliveryReceiptsManager = xmpp.getManager(MessageDeliveryReceiptsManager.class);
messageDeliveryReceiptsManager.setEnabled(true);
- PingManager pingManager = router.getManager(PingManager.class);
+ PingManager pingManager = xmpp.getManager(PingManager.class);
pingManager.setEnabled(true);
- SoftwareVersionManager softwareVersionManager = router.getManager(SoftwareVersionManager.class);
+ SoftwareVersionManager softwareVersionManager = xmpp.getManager(SoftwareVersionManager.class);
softwareVersionManager.setSoftwareVersion(new SoftwareVersion("Juick", "2.x",
System.getProperty("os.name", "generic")));
VCard vCard = new VCard();
@@ -143,21 +146,20 @@ public class XMPPManager implements NotificationListener {
vCard.setBirthday(LocalDate.of(2008, 10, 22));
try {
vCard.setUrl(new URL("http://juick.com/"));
- vCard.setPhoto(new VCard.Image("image/png", IOUtils.toByteArray(
- getClass().getClassLoader().getResource("juick.png"))));
+ vCard.setPhoto(new VCard.Image("image/png", IOUtils.toByteArray(vCardImage.getInputStream())));
} catch (MalformedURLException e) {
logger.error("invalid url", e);
} catch (IOException e) {
logger.warn("invalid resource", e);
}
- router.addIQHandler(MessageQuery.class, iq -> {
+ xmpp.addIQHandler(MessageQuery.class, iq -> {
Message warningMessage = new Message(iq.getFrom(), Message.Type.CHAT);
warningMessage.setFrom(jid);
warningMessage.setBody("Your XMPP client constantly polls us with XMPP query which is unsupported for years, please find http://juick.com/query#messages in your client code and remove that");
- router.send(warningMessage);
+ xmpp.send(warningMessage);
return iq.createError(new StanzaError(Condition.BAD_REQUEST, "Please stop this spam"));
});
- router.addIQHandler(VCard.class, new AbstractIQHandler(IQ.Type.GET) {
+ xmpp.addIQHandler(VCard.class, new AbstractIQHandler(IQ.Type.GET) {
@Override
protected IQ processRequest(IQ iq) {
if (iq.getTo().equals(jid) || iq.getTo().asBareJid().equals(jid.asBareJid())
@@ -183,16 +185,16 @@ public class XMPPManager implements NotificationListener {
return iq.createError(Condition.BAD_REQUEST);
}
});
- router.addInboundMessageListener(e -> {
+ xmpp.addInboundMessageListener(e -> {
ClientMessage result = incomingMessage(e.getMessage());
if (result != null) {
- router.send(result);
+ xmpp.send(result);
}
});
- FileTransferManager fileTransferManager = router.getManager(FileTransferManager.class);
+ FileTransferManager fileTransferManager = xmpp.getManager(FileTransferManager.class);
fileTransferManager.addFileTransferOfferListener(e -> {
try {
- List<String> allowedTypes = new ArrayList<String>() {{
+ List<String> allowedTypes = new ArrayList<>() {{
add("png");
add("jpg");
}};
@@ -213,7 +215,7 @@ public class XMPPManager implements NotificationListener {
userService.getUserByJID(initiator.asBareJid().toEscapedString()), initiator,
jid.getLocal(), StringUtils.defaultString(e.getDescription()).trim(), URI.create(String.format("juick://%s", targetFilename)));
if (result != null) {
- router.send(result);
+ xmpp.send(result);
}
} catch (Exception e1) {
logger.error("ft error", e1);
@@ -226,7 +228,7 @@ public class XMPPManager implements NotificationListener {
msg.setFrom(jid);
msg.setTo(e.getInitiator());
msg.setBody("File transfer failed, please report to us");
- router.sendMessage(msg);
+ xmpp.sendMessage(msg);
} else if (st.getStatus().equals(FileTransfer.Status.CANCELED)) {
logger.info("transfer cancelled");
}
@@ -241,24 +243,24 @@ public class XMPPManager implements NotificationListener {
logger.error("ft error", e1);
}
});
- router.addConnectionListener(event -> {
+ xmpp.addConnectionListener(event -> {
if (event.getType().equals(rocks.xmpp.core.session.ConnectionEvent.Type.RECONNECTION_SUCCEEDED)) {
logger.info("component connected");
}
});
- router.addSessionStatusListener(event -> {
+ xmpp.addSessionStatusListener(event -> {
logger.info("event: " + event.getStatus(), event.getThrowable());
if (event.getStatus().equals(XmppSession.Status.AUTHENTICATED)) {
logger.info("Authenticated, broadcasting...");
broadcastPresence(null);
}
});
- router.addInboundPresenceListener(event -> {
+ xmpp.addInboundPresenceListener(event -> {
incomingPresence(event.getPresence());
});
executorService.submit(() -> {
try {
- router.connect();
+ xmpp.connect();
} catch (XmppException e) {
logger.warn("xmpp exception", e);
}
@@ -300,7 +302,7 @@ public class XMPPManager implements NotificationListener {
}
for (String jid : jids) {
msg.setTo(Jid.of(jid));
- router.send(ClientMessage.from(msg));
+ xmpp.send(ClientMessage.from(msg));
}
}
@@ -329,7 +331,7 @@ public class XMPPManager implements NotificationListener {
for (User user : users) {
for (String jid : userService.getJIDsbyUID(user.getUid())) {
msg.setTo(Jid.of(jid));
- router.send(ClientMessage.from(msg));
+ xmpp.send(ClientMessage.from(msg));
}
}
}
@@ -355,7 +357,7 @@ public class XMPPManager implements NotificationListener {
mm.setFrom(jid);
mm.setBody("Private message from @" + msg.getUser().getName() + ":\n" + msg.getText());
}
- router.send(ClientMessage.from(mm));
+ xmpp.send(ClientMessage.from(mm));
});
} else if (MessageUtils.isReply(msg)) {
sendJuickComment(msg, subscribers);
@@ -394,7 +396,7 @@ public class XMPPManager implements NotificationListener {
xmppMessage.addExtension(jmsg);
xmppMessage.setBody(String.format("%s recommended your post #%d. %s",
liker.getName(), jmsg.getMid(), PlainTextFormatter.formatUrl(jmsg)));
- router.send(ClientMessage.from(xmppMessage));
+ xmpp.send(ClientMessage.from(xmppMessage));
});
}
@@ -436,7 +438,7 @@ public class XMPPManager implements NotificationListener {
for (User user : users) {
for (String jid : userService.getJIDsbyUID(user.getUid())) {
msg.setTo(Jid.of(jid));
- router.send(ClientMessage.from(msg));
+ xmpp.send(ClientMessage.from(msg));
}
}
}
@@ -448,7 +450,7 @@ public class XMPPManager implements NotificationListener {
Presence p = new Presence(Jid.of(userJid));
p.setFrom(jid);
p.setPriority((byte) 10);
- router.send(ClientPresence.from(p));
+ xmpp.send(ClientPresence.from(p));
});
}
@@ -476,7 +478,7 @@ public class XMPPManager implements NotificationListener {
reply.setFrom(p.getTo().asBareJid());
reply.setTo(p.getFrom().asBareJid());
reply.setType(Presence.Type.UNSUBSCRIBE);
- router.send(ClientPresence.from(reply));
+ xmpp.send(ClientPresence.from(reply));
} else if (p.getType().equals(Presence.Type.PROBE)) {
int uid_to = 0;
if (!toJuick) {
@@ -496,7 +498,7 @@ public class XMPPManager implements NotificationListener {
if (!userService.getActiveJIDs().contains(p.getFrom().asBareJid().toEscapedString())) {
reply.setStatus("Send ON to enable notifications");
}
- router.send(ClientPresence.from(reply));
+ xmpp.send(ClientPresence.from(reply));
} else {
Presence reply = new Presence();
reply.setFrom(p.getTo());
@@ -504,7 +506,7 @@ public class XMPPManager implements NotificationListener {
reply.setType(Presence.Type.ERROR);
reply.setId(p.getId());
reply.setError(new StanzaError(StanzaError.Type.CANCEL, Condition.ITEM_NOT_FOUND));
- router.send(ClientPresence.from(reply));
+ xmpp.send(ClientPresence.from(reply));
}
} else if (p.getType().equals(Presence.Type.SUBSCRIBE)) {
boolean canSubscribe = false;
@@ -522,12 +524,12 @@ public class XMPPManager implements NotificationListener {
reply.setFrom(p.getTo());
reply.setTo(p.getFrom());
reply.setType(Presence.Type.SUBSCRIBED);
- router.send(ClientPresence.from(reply));
+ xmpp.send(ClientPresence.from(reply));
reply.setFrom(reply.getFrom().withResource(jid.getResource()));
reply.setPriority((byte) 10);
reply.setType(null);
- router.send(ClientPresence.from(reply));
+ xmpp.send(ClientPresence.from(reply));
} else {
Presence reply = new Presence();
reply.setFrom(p.getTo());
@@ -535,7 +537,7 @@ public class XMPPManager implements NotificationListener {
reply.setType(Presence.Type.ERROR);
reply.setId(p.getId());
reply.setError(new StanzaError(StanzaError.Type.CANCEL, Condition.ITEM_NOT_FOUND));
- router.send(ClientPresence.from(reply));
+ xmpp.send(ClientPresence.from(reply));
}
} else if (p.getType().equals(Presence.Type.UNSUBSCRIBE)) {
if (!toJuick) {
@@ -549,7 +551,7 @@ public class XMPPManager implements NotificationListener {
reply.setFrom(p.getTo());
reply.setTo(p.getFrom());
reply.setType(Presence.Type.UNSUBSCRIBED);
- router.send(ClientPresence.from(reply));
+ xmpp.send(ClientPresence.from(reply));
}
}
@@ -566,7 +568,7 @@ public class XMPPManager implements NotificationListener {
return null;
}
Jid to = msg.getTo();
- if (to.getDomain().equals(router.getDomain().toEscapedString()) || to.equals(this.jid)) {
+ if (to.getDomain().equals(xmpp.getDomain().toEscapedString()) || to.equals(this.jid)) {
User user_from = userService.getUserByJID(msg.getFrom().asBareJid().toEscapedString());
if ((user_from == null || user_from.isAnonymous()) && !msg.getFrom().equals(jid)) {
String signuphash = userService.getSignUpHashByJID(msg.getFrom().asBareJid().toEscapedString());
@@ -630,7 +632,7 @@ public class XMPPManager implements NotificationListener {
userService.getActiveJIDs().forEach(j -> {
try {
presence.setTo(Jid.of(j));
- router.send(ClientPresence.from(presence));
+ xmpp.send(ClientPresence.from(presence));
} catch (IllegalArgumentException ex) {
logger.warn("Invalid jid: {}", j, ex);
}
@@ -640,8 +642,8 @@ public class XMPPManager implements NotificationListener {
@PreDestroy
public void close() throws Exception {
broadcastPresence(Presence.Type.UNAVAILABLE);
- if (router != null) {
- router.close();
+ if (xmpp != null) {
+ xmpp.close();
}
}
}
diff --git a/src/main/java/com/juick/server/api/Messages.java b/src/main/java/com/juick/server/api/Messages.java
index 5c791df4..5a4d8c31 100644
--- a/src/main/java/com/juick/server/api/Messages.java
+++ b/src/main/java/com/juick/server/api/Messages.java
@@ -31,7 +31,9 @@ import com.juick.service.MessagesService;
import com.juick.service.TagService;
import com.juick.service.UserService;
import org.apache.commons.io.IOUtils;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
@@ -67,6 +69,8 @@ public class Messages {
private ApplicationEventPublisher applicationEventPublisher;
@Inject
private WebApp webApp;
+ @Value("classpath:Transparent.gif")
+ private Resource invisiblePixel;
// TODO: serialize image urls
@@ -204,8 +208,7 @@ public class Messages {
userService.updateLastSeen(visitor);
applicationEventPublisher.publishEvent(
new MessageReadEvent(this, visitor, msg));
- return IOUtils.toByteArray(
- Objects.requireNonNull(getClass().getClassLoader().getResource("Transparent.gif")));
+ return IOUtils.toByteArray(invisiblePixel.getInputStream());
}
throw new HttpBadRequestException();
}