From 1ae03ea2f7866b30796d7f8ae925c53d7d98c1b3 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Fri, 29 Mar 2019 16:21:42 +0300 Subject: Using @Resource where possible --- src/main/java/com/juick/server/XMPPManager.java | 82 +++++++++++----------- src/main/java/com/juick/server/api/Messages.java | 7 +- .../java/com/juick/server/tests/ServerTests.java | 9 +-- 3 files changed, 52 insertions(+), 46 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 allowedTypes = new ArrayList() {{ + List 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(); } diff --git a/src/test/java/com/juick/server/tests/ServerTests.java b/src/test/java/com/juick/server/tests/ServerTests.java index ea99fac3..f08c49f5 100644 --- a/src/test/java/com/juick/server/tests/ServerTests.java +++ b/src/test/java/com/juick/server/tests/ServerTests.java @@ -220,6 +220,8 @@ public class ServerTests { private Resource noteWithDocument; @Value("classpath:2936611-57.jpg") private Resource jpegNoJfifTiff; + @Value("classpath:Transparent.gif") + private Resource invisiblePixel; @Inject private KeystoreManager testKeystoreManager; @@ -954,8 +956,7 @@ public class ServerTests { int freefdrid = messagesService.createReply(mid, 0, freefd, "again", null); mockMvc.perform(get(String.format("/api/thread/mark_read/%d-%d.gif?hash=%s", mid, freefdrid, ugnichHash))) .andExpect(status().isOk()) - .andExpect(content().bytes(IOUtils.toByteArray( - Objects.requireNonNull(getClass().getClassLoader().getResource("Transparent.gif"))))); + .andExpect(content().bytes(IOUtils.toByteArray(invisiblePixel.getInputStream()))); assertThat(lastRead.apply(ugnich, mid), is(freefdrid)); privacyQueriesService.blacklistUser(ugnich, freefd); int newfreefdrid = messagesService.createReply(mid, 0, freefd, "from ban", null); @@ -1083,9 +1084,9 @@ public class ServerTests { .andExpect(status().isBadRequest()); } @Test - public void attachmentSizeTests() throws URISyntaxException, IOException { + public void attachmentSizeTests() throws IOException { ImageUtils imageUtils = new ImageUtils(StringUtils.EMPTY, StringUtils.EMPTY); - Attachment attachment = imageUtils.getAttachment(new File(getClass().getClassLoader().getResource("Transparent.gif").toURI())); + Attachment attachment = imageUtils.getAttachment(new File(invisiblePixel.getURI())); assertThat(attachment.getHeight(), is(1)); assertThat(attachment.getWidth(), is(1)); } -- cgit v1.2.3