diff options
author | Vitaly Takmazov | 2017-10-04 15:31:44 +0300 |
---|---|---|
committer | Vitaly Takmazov | 2017-10-09 14:34:51 +0300 |
commit | 51bfc341be1975b7a11e0b3a59cfbb4710e78446 (patch) | |
tree | 548bef919082406c510a7b653c2a2ac4e2aa4b2e /juick-xmpp-bot/src/main/java/com | |
parent | 2996fb8279645b1329b38c5c7b6d81ba3c10612e (diff) |
juick-xmpp-wip: router component
Diffstat (limited to 'juick-xmpp-bot/src/main/java/com')
4 files changed, 0 insertions, 309 deletions
diff --git a/juick-xmpp-bot/src/main/java/com/juick/components/XMPPBot.java b/juick-xmpp-bot/src/main/java/com/juick/components/XMPPBot.java deleted file mode 100644 index b551ff2b..00000000 --- a/juick-xmpp-bot/src/main/java/com/juick/components/XMPPBot.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (C) 2008-2017, Juick - * - * 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 <http://www.gnu.org/licenses/>. - */ - -package com.juick.components; - -import com.juick.User; -import com.juick.server.helpers.UserInfo; -import com.juick.server.protocol.JuickProtocol; -import com.juick.server.protocol.ProtocolListener; -import com.juick.service.PMQueriesService; -import com.juick.service.UserService; -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.math.NumberUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.core.env.Environment; -import rocks.xmpp.addr.Jid; -import rocks.xmpp.core.XmppException; -import rocks.xmpp.core.stanza.model.Message; -import rocks.xmpp.extensions.component.accept.ExternalComponent; -import rocks.xmpp.extensions.vcard.temp.VCardManager; -import rocks.xmpp.extensions.vcard.temp.model.VCard; -import rocks.xmpp.extensions.version.SoftwareVersionManager; -import rocks.xmpp.extensions.version.model.SoftwareVersion; - -import javax.inject.Inject; -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.net.URL; -import java.util.List; - -/** - * Created by vt on 12/11/2016. - */ -public class XMPPBot implements AutoCloseable, ProtocolListener { - private static final Logger logger = LoggerFactory.getLogger(XMPPBot.class); - @Inject - UserService userService; - @Inject - PMQueriesService pmQueriesService; - @Inject - JuickProtocol juickProtocol; - - Jid juickJid; - - private ExternalComponent component; - - public XMPPBot(Environment env) { - component = ExternalComponent.create(env.getProperty("component_name", "juick.com"), - env.getProperty("component_password", "secret"), env.getProperty("component_host", "localhost"), - NumberUtils.toInt(env.getProperty("component_port", "5347"), 5347)); - juickJid = Jid.of(env.getProperty("xmppbot_jid", "juick@juick.com/Juick")); - juickProtocol.setListener(this); - try { - SoftwareVersionManager softwareVersionManager = component.getManager(SoftwareVersionManager.class); - softwareVersionManager.setSoftwareVersion(new SoftwareVersion("Juick", "git", System.getProperty("os.name", "generic"))); - VCardManager vCardManager = component.getManager(VCardManager.class); - vCardManager.setEnabled(true); - VCard ownVCard = new VCard(); - ownVCard.setNickname("Juick"); - ownVCard.setUrl(new URL("http://juick.com/")); - ownVCard.setPhoto(new VCard.Image("image/png", IOUtils.toByteArray(getClass().getClassLoader().getResourceAsStream("vCard.png")))); - vCardManager.setVCard(ownVCard); - component.addInboundMessageListener(e -> { - Message message = e.getMessage(); - if (message.getType().equals(Message.Type.ERROR) || message.getType().equals(Message.Type.GROUPCHAT)) { - return; - } - String text = message.getBody().trim(); - String command = text.toUpperCase(); - User user = userService.getUserByJID(message.getFrom().asBareJid().toString()); - if (command.equals("VCARD")) { - try { - VCard vCard = vCardManager.getVCard(message.getFrom().asBareJid()).getResult(); - UserInfo info = new UserInfo(); - info.setFullName(vCard.getFormattedName()); - info.setCountry(vCard.getAddresses().get(0).getCountry()); - info.setUrl(vCard.getUrl().toString()); - userService.updateUserInfo(user, info); - component.sendMessage(new Message(message.getFrom(), Message.Type.CHAT, "vCard updated")); - } catch (XmppException vce) { - logger.warn("vcard exception", vce); - } - } else { - try { - String reply = juickProtocol.getReply(user, text); - Message replyMessage = new Message(message.getFrom(), Message.Type.CHAT); - replyMessage.setBody(reply); - replyMessage.setFrom(juickJid); - component.send(replyMessage); - } catch (InvocationTargetException | IllegalAccessException | NoSuchMethodException ex) { - logger.warn("unhandled error", ex); - } - } - }); - component.connect(); - } catch (XmppException | IOException e) { - logger.error("bot connection error", e); - } - } - - @Override - public void close() throws Exception { - if (component != null) - component.close(); - - logger.info("ExternalComponent on xmpp-bot destroyed"); - } - - @Override - public void privateMessage(User from, User to, String body) { - List<String> toJids = userService.getJIDsbyUID(to.getUid()); - toJids.forEach(jid -> { - Message mm = new Message(); - mm.setTo(Jid.of(jid)); - mm.setType(Message.Type.CHAT); - boolean haveInRoster = pmQueriesService.havePMinRoster(from.getUid(), jid); - if (haveInRoster) { - mm.setFrom(Jid.of(from.getName(), juickJid.getDomain(), "Juick")); - mm.setBody(body); - } else { - mm.setFrom(Jid.of("juick", juickJid.getDomain(), "Juick")); - mm.setBody("Private message from @" + from.getName() + ":\n" + body); - } - component.send(mm); - }); - } - - @Override - public void userSubscribed(User from, User to) { - String notification = String.format("%s subscribed to your blog", from.getName()); - List<String> toJids = userService.getJIDsbyUID(to.getUid()); - toJids.forEach(jid -> { - Message mm = new Message(); - mm.setTo(Jid.of(jid)); - mm.setType(Message.Type.CHAT); - mm.setFrom(juickJid); - mm.setBody(notification); - component.send(mm); - }); - } - - @Override - public void messagePosted(com.juick.Message msg) { - - } -} diff --git a/juick-xmpp-bot/src/main/java/com/juick/components/configuration/BotAppConfiguration.java b/juick-xmpp-bot/src/main/java/com/juick/components/configuration/BotAppConfiguration.java deleted file mode 100644 index 7009f2b7..00000000 --- a/juick-xmpp-bot/src/main/java/com/juick/components/configuration/BotAppConfiguration.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2008-2017, Juick - * - * 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 <http://www.gnu.org/licenses/>. - */ - -package com.juick.components.configuration; - -import com.juick.components.XMPPBot; -import com.juick.server.configuration.BaseWebConfiguration; -import com.juick.server.protocol.JuickProtocol; -import org.springframework.context.annotation.*; -import org.springframework.core.env.Environment; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; - -import javax.inject.Inject; - -/** - * Created by aalexeev on 11/12/16. - */ -@Configuration -@ComponentScan(basePackages = {"com.juick.components.controllers"}) -@PropertySource("classpath:juick.conf") -@Import(BaseWebConfiguration.class) -public class BotAppConfiguration extends WebMvcConfigurationSupport { - @Inject - private Environment env; - - @Bean - public XMPPBot xmpp() { - return new XMPPBot(env); - } - @Bean - public JuickProtocol juickProtocol() { - return new JuickProtocol("http://juick.com"); - } -} diff --git a/juick-xmpp-bot/src/main/java/com/juick/components/configuration/BotInitializer.java b/juick-xmpp-bot/src/main/java/com/juick/components/configuration/BotInitializer.java deleted file mode 100644 index 8b5d9b94..00000000 --- a/juick-xmpp-bot/src/main/java/com/juick/components/configuration/BotInitializer.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2008-2017, Juick - * - * 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 <http://www.gnu.org/licenses/>. - */ - -package com.juick.components.configuration; - -import com.juick.configuration.DataConfiguration; -import org.apache.commons.codec.CharEncoding; -import org.springframework.web.filter.CharacterEncodingFilter; -import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; - -import javax.servlet.Filter; - -/** - * Created by vt on 09/02/16. - */ -public class BotInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { - - @Override - protected Class<?>[] getRootConfigClasses() { - return new Class<?>[]{ DataConfiguration.class }; - } - - @Override - protected Class<?>[] getServletConfigClasses() { - return new Class<?>[]{ BotAppConfiguration.class }; - } - - @Override - protected String[] getServletMappings() { - return new String[]{"/"}; - } - - @Override - protected Filter[] getServletFilters() { - CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(CharEncoding.UTF_8); - return new Filter[]{characterEncodingFilter}; - } - - @Override - protected String getServletName() { - return "Bot dispatcher servlet"; - } -} diff --git a/juick-xmpp-bot/src/main/java/com/juick/components/controllers/StatusController.java b/juick-xmpp-bot/src/main/java/com/juick/components/controllers/StatusController.java deleted file mode 100644 index 350669b8..00000000 --- a/juick-xmpp-bot/src/main/java/com/juick/components/controllers/StatusController.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2008-2017, Juick - * - * 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 <http://www.gnu.org/licenses/>. - */ - -package com.juick.components.controllers; - -import com.juick.components.XMPPBot; -import com.juick.Status; -import org.springframework.http.MediaType; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; - -import javax.inject.Inject; - -/** - * Created by vitalyster on 24.10.2016. - */ -@Controller -@ResponseBody -public class StatusController { - @Inject - private XMPPBot xmpp; - - @RequestMapping(method = RequestMethod.GET, value = "/", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) - public Status status() { - return xmpp != null ? Status.OK : Status.ERROR; - } -} |