From bebe7c159f00e6d5a83bb786824d5f32e4de9270 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Sat, 24 Feb 2018 16:54:28 +0300 Subject: spring boot wip --- .../src/main/java/com/juick/server/ApiServer.java | 12 ++ .../main/java/com/juick/server/XMPPConnection.java | 20 ++- .../java/com/juick/server/api/Notifications.java | 2 +- .../server/configuration/ApiAppConfiguration.java | 34 +---- .../juick/server/configuration/ApiInitializer.java | 64 -------- .../configuration/ApiSecurityInitializer.java | 38 ----- .../juick/server/xmpp/extensions/JuickMessage.java | 162 --------------------- .../juick/server/xmpp/extensions/JuickUser.java | 65 --------- .../juick/server/xmpp/helpers/JidConverter.java | 13 -- .../juick/server/xmpp/s2s/BasicXmppSession.java | 69 --------- 10 files changed, 27 insertions(+), 452 deletions(-) create mode 100644 juick-server/src/main/java/com/juick/server/ApiServer.java delete mode 100644 juick-server/src/main/java/com/juick/server/configuration/ApiInitializer.java delete mode 100644 juick-server/src/main/java/com/juick/server/configuration/ApiSecurityInitializer.java delete mode 100644 juick-server/src/main/java/com/juick/server/xmpp/extensions/JuickMessage.java delete mode 100644 juick-server/src/main/java/com/juick/server/xmpp/extensions/JuickUser.java delete mode 100644 juick-server/src/main/java/com/juick/server/xmpp/helpers/JidConverter.java delete mode 100644 juick-server/src/main/java/com/juick/server/xmpp/s2s/BasicXmppSession.java (limited to 'juick-server/src/main/java/com/juick') diff --git a/juick-server/src/main/java/com/juick/server/ApiServer.java b/juick-server/src/main/java/com/juick/server/ApiServer.java new file mode 100644 index 00000000..b2caff40 --- /dev/null +++ b/juick-server/src/main/java/com/juick/server/ApiServer.java @@ -0,0 +1,12 @@ +package com.juick.server; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ApiServer { + + public static void main(String[] args) { + SpringApplication.run(ApiServer.class, args); + } +} diff --git a/juick-server/src/main/java/com/juick/server/XMPPConnection.java b/juick-server/src/main/java/com/juick/server/XMPPConnection.java index ef0291c0..50c84bd6 100644 --- a/juick-server/src/main/java/com/juick/server/XMPPConnection.java +++ b/juick-server/src/main/java/com/juick/server/XMPPConnection.java @@ -89,6 +89,8 @@ public class XMPPConnection implements AutoCloseable { private int componentPort; @Value("${xmpp_password:secret}") private String password; + @Value("${xmpp_disabled:false}") + private boolean isXmppDisabled; @Value("${upload_tmp_dir:#{systemEnvironment['TEMP'] ?: '/tmp'}}") private String tmpDir; @@ -241,14 +243,16 @@ public class XMPPConnection implements AutoCloseable { logger.info("component connected"); } }); - service.submit(() -> { - try { - Thread.sleep(3000); - router.connect(); - } catch (InterruptedException | XmppException e) { - logger.warn("xmpp exception", e); - } - }); + if (!isXmppDisabled) { + service.submit(() -> { + try { + Thread.sleep(3000); + router.connect(); + } catch (InterruptedException | XmppException e) { + logger.warn("xmpp exception", e); + } + }); + } } String stanzaToString(Stanza stanza) throws XMLStreamException, JAXBException { diff --git a/juick-server/src/main/java/com/juick/server/api/Notifications.java b/juick-server/src/main/java/com/juick/server/api/Notifications.java index 5f849080..16601b7f 100644 --- a/juick-server/src/main/java/com/juick/server/api/Notifications.java +++ b/juick-server/src/main/java/com/juick/server/api/Notifications.java @@ -101,7 +101,7 @@ public class Notifications { @ApiIgnore @RequestMapping(value = "/notifications", method = RequestMethod.DELETE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public Status doDelete( - @RequestBody List list) throws IOException { + @RequestBody List list) { User visitor = UserUtils.getCurrentUser(); // FIXME: it is possible to delete other user's tokens if ((visitor.getUid() == 0) || !(visitor.getName().equals("juick"))) { diff --git a/juick-server/src/main/java/com/juick/server/configuration/ApiAppConfiguration.java b/juick-server/src/main/java/com/juick/server/configuration/ApiAppConfiguration.java index 146e277c..65a9d410 100644 --- a/juick-server/src/main/java/com/juick/server/configuration/ApiAppConfiguration.java +++ b/juick-server/src/main/java/com/juick/server/configuration/ApiAppConfiguration.java @@ -17,18 +17,15 @@ package com.juick.server.configuration; +import com.juick.configuration.DataConfiguration; import com.juick.server.WebsocketManager; import com.juick.server.api.rss.MessagesView; import com.juick.server.api.rss.RepliesView; import com.juick.server.component.JuickServerComponent; import com.juick.server.component.JuickServerReconnectManager; import com.juick.service.UserService; -import com.juick.server.xmpp.helpers.JidConverter; -import com.juick.server.xmpp.s2s.BasicXmppSession; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.*; -import org.springframework.core.convert.ConversionService; -import org.springframework.format.support.DefaultFormattingConversionService; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; @@ -43,9 +40,6 @@ import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean; import org.springframework.web.util.UriComponentsBuilder; -import rocks.xmpp.core.session.Extension; -import rocks.xmpp.core.session.XmppSessionConfiguration; -import rocks.xmpp.core.session.debug.LogbackDebugger; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; @@ -56,19 +50,16 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; import javax.annotation.Nonnull; import javax.inject.Inject; import java.util.Collections; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; /** * Created by aalexeev on 11/12/16. */ @Configuration @EnableAsync -@EnableWebMvc @EnableSwagger2 @EnableScheduling @EnableWebSocket -@PropertySource(value = "classpath:juick.conf", ignoreResourceNotFound = true) +@Import({ApiSecurityConfig.class, DataConfiguration.class, StorageConfiguration.class}) @ComponentScan(basePackages = "com.juick.server") public class ApiAppConfiguration extends BaseWebConfiguration implements WebSocketConfigurer { @Inject @@ -132,27 +123,6 @@ public class ApiAppConfiguration extends BaseWebConfiguration implements WebSock container.setMaxBinaryMessageBufferSize(8192); return container; } - @Value("${hostname:localhost}") - private String hostname; - - @Bean - public ExecutorService service() { - return Executors.newCachedThreadPool(); - } - @Bean - public BasicXmppSession session() { - XmppSessionConfiguration configuration = XmppSessionConfiguration.builder() - .extensions(Extension.of(com.juick.Message.class)) - .debugger(LogbackDebugger.class) - .build(); - return BasicXmppSession.create(hostname, configuration); - } - @Bean - public static ConversionService conversionService() { - DefaultFormattingConversionService cs = new DefaultFormattingConversionService(); - cs.addConverter(new JidConverter()); - return cs; - } @Bean public BeanNameViewResolver beanNameViewResolver() { return new BeanNameViewResolver(); diff --git a/juick-server/src/main/java/com/juick/server/configuration/ApiInitializer.java b/juick-server/src/main/java/com/juick/server/configuration/ApiInitializer.java deleted file mode 100644 index b789fc50..00000000 --- a/juick-server/src/main/java/com/juick/server/configuration/ApiInitializer.java +++ /dev/null @@ -1,64 +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 . - */ - -package com.juick.server.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.annotation.Nonnull; -import javax.servlet.Filter; - -/** - * Created by vt on 09/02/16. - */ -public class ApiInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { - - @Override - protected Class[] getRootConfigClasses() { - return new Class[]{ - ApiAppConfiguration.class, - ApiSecurityConfig.class, - DataConfiguration.class, - StorageConfiguration.class - }; - } - - @Override - protected Class[] getServletConfigClasses() { - return null; - } - - @Override - @Nonnull - protected String[] getServletMappings() { - return new String[]{"/"}; - } - - @Override - protected Filter[] getServletFilters() { - return new Filter[]{new CharacterEncodingFilter(CharEncoding.UTF_8)}; - } - - @Override - @Nonnull - protected String getServletName() { - return "API dispatcher servlet"; - } -} diff --git a/juick-server/src/main/java/com/juick/server/configuration/ApiSecurityInitializer.java b/juick-server/src/main/java/com/juick/server/configuration/ApiSecurityInitializer.java deleted file mode 100644 index ece023fc..00000000 --- a/juick-server/src/main/java/com/juick/server/configuration/ApiSecurityInitializer.java +++ /dev/null @@ -1,38 +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 . - */ - -package com.juick.server.configuration; - -/** - * - * Created by vitalyster on 25.11.2016. - * - - */ - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; - -import javax.servlet.ServletContext; - -public class ApiSecurityInitializer extends AbstractSecurityWebApplicationInitializer { - private final Logger logger = LoggerFactory.getLogger(getClass()); - - @Override - protected void afterSpringSecurityFilterChain(ServletContext servletContext) { - logger.info("SpringSecurityFilterChain initialized"); - } -} \ No newline at end of file diff --git a/juick-server/src/main/java/com/juick/server/xmpp/extensions/JuickMessage.java b/juick-server/src/main/java/com/juick/server/xmpp/extensions/JuickMessage.java deleted file mode 100644 index 6956a99a..00000000 --- a/juick-server/src/main/java/com/juick/server/xmpp/extensions/JuickMessage.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Juick - * Copyright (C) 2008-2011, Ugnich Anton - * - * 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 . - */ -package com.juick.server.xmpp.extensions; - -import com.juick.Tag; -import com.juick.xmpp.StanzaChild; -import com.juick.xmpp.utils.XmlUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.text.StringEscapeUtils; -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.TimeZone; -/** - * - * @author Ugnich Anton - */ -public class JuickMessage extends com.juick.Message implements StanzaChild { - public final static String XMLNS = "http://juick.com/message"; - public final static String TagName = "juick"; - private SimpleDateFormat df; - public JuickMessage() { - df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - df.setTimeZone(TimeZone.getTimeZone("UTC")); - } - - @Override - public String getXMLNS() { - return XMLNS; - } - @Override - public JuickMessage parse(XmlPullParser parser) throws XmlPullParserException, IOException, ParseException { - JuickMessage jmsg = new JuickMessage(); - final String sMID = parser.getAttributeValue(null, "mid"); - if (sMID != null) { - jmsg.setMid(Integer.parseInt(sMID)); - } - final String sRID = parser.getAttributeValue(null, "rid"); - if (sRID != null) { - jmsg.setRid(Integer.parseInt(sRID)); - } - final String sReplyTo = parser.getAttributeValue(null, "replyto"); - if (sReplyTo != null) { - jmsg.setReplyto(Integer.parseInt(sReplyTo)); - } - final String sPrivacy = parser.getAttributeValue(null, "privacy"); - if (sPrivacy != null) { - jmsg.setPrivacy(Integer.parseInt(sPrivacy)); - } - final String sFriendsOnly = parser.getAttributeValue(null, "friendsonly"); - if (sFriendsOnly != null) { - jmsg.FriendsOnly = true; - } - final String sReadOnly = parser.getAttributeValue(null, "readonly"); - if (sReadOnly != null) { - jmsg.ReadOnly = true; - } - jmsg.setTimestamp(df.parse(parser.getAttributeValue(null, "ts")).toInstant()); - jmsg.setAttachmentType(parser.getAttributeValue(null, "attach")); - while (parser.next() == XmlPullParser.START_TAG) { - final String tag = parser.getName(); - final String xmlns = parser.getNamespace(); - if (tag.equals("body")) { - jmsg.setText(XmlUtils.getTagText(parser)); - } else if (tag.equals(JuickUser.TagName) && xmlns != null && xmlns.equals(JuickUser.XMLNS)) { - jmsg.setUser(new JuickUser().parse(parser)); - } else if (tag.equals("tag")) { - jmsg.getTags().add(new Tag(XmlUtils.getTagText(parser))); - } else { - XmlUtils.skip(parser); - } - } - return jmsg; - } - @Override - public String toString() { - StringBuilder ret = new StringBuilder("<").append(TagName).append(" xmlns=\"").append(XMLNS).append("\""); - if (getMid() > 0) { - ret.append(" mid=\"").append(getMid()).append("\""); - } - if (getRid() > 0) { - ret.append(" rid=\"").append(getRid()).append("\""); - } - if (getReplyto() > 0) { - ret.append(" replyto=\"").append(getReplyto()).append("\""); - } - ret.append(" privacy=\"").append(getPrivacy()).append("\""); - if (FriendsOnly) { - ret.append(" friendsonly=\"1\""); - } - if (ReadOnly) { - ret.append(" readonly=\"1\""); - } - if (getTimestamp() != null) { - ret.append(" ts=\"").append(df.format(Date.from(getTimestamp()))).append("\""); - } - if (getAttachmentType() != null) { - ret.append(" attach=\"").append(getAttachmentType()).append("\""); - } - ret.append(">"); - if (getUser() != null) { - ret.append(JuickUser.toString(getUser())); - } - if (getText() != null) { - ret.append("").append(StringEscapeUtils.escapeXml10(StringUtils.defaultString(getText()))).append(""); - } - for (Tag Tag : getTags()) { - ret.append("").append(StringEscapeUtils.escapeXml10(Tag.getName())).append(""); - } - ret.append(""); - return ret.toString(); - } - @Override - public boolean equals(Object obj) { - if (!(obj instanceof JuickMessage)) { - return false; - } - JuickMessage jmsg = (JuickMessage) obj; - return (this.getMid() == jmsg.getMid() && this.getRid() == jmsg.getRid()); - } - @Override - public int compareTo(Object obj) throws ClassCastException { - if (!(obj instanceof JuickMessage)) { - throw new ClassCastException(); - } - JuickMessage jmsg = (JuickMessage) obj; - if (this.getMid() != jmsg.getMid()) { - if (this.getMid() > jmsg.getMid()) { - return -1; - } else { - return 1; - } - } - if (this.getRid() != jmsg.getRid()) { - if (this.getRid() < jmsg.getRid()) { - return -1; - } else { - return 1; - } - } - return 0; - } -} \ No newline at end of file diff --git a/juick-server/src/main/java/com/juick/server/xmpp/extensions/JuickUser.java b/juick-server/src/main/java/com/juick/server/xmpp/extensions/JuickUser.java deleted file mode 100644 index 534efcc9..00000000 --- a/juick-server/src/main/java/com/juick/server/xmpp/extensions/JuickUser.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Juick - * Copyright (C) 2008-2011, Ugnich Anton - * - * 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 . - */ -package com.juick.server.xmpp.extensions; -import com.juick.xmpp.StanzaChild; -import com.juick.xmpp.utils.XmlUtils; -import org.apache.commons.text.StringEscapeUtils; -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import java.io.IOException; -/** - * - * @author Ugnich Anton - */ -public class JuickUser extends com.juick.User implements StanzaChild { - public final static String XMLNS = "http://juick.com/user"; - public final static String TagName = "user"; - public JuickUser() { - } - @Override - public String getXMLNS() { - return XMLNS; - } - @Override - public JuickUser parse(final XmlPullParser parser) throws XmlPullParserException, IOException { - JuickUser juser = new JuickUser(); - String strUID = parser.getAttributeValue(null, "uid"); - if (strUID != null) { - juser.setUid(Integer.parseInt(strUID)); - } - juser.setName(parser.getAttributeValue(null, "uname")); - XmlUtils.skip(parser); - return juser; - } - public static String toString(com.juick.User user) { - String str = "<" + TagName + " xmlns='" + XMLNS + "'"; - if (user.getUid() > 0) { - str += " uid='" + user.getUid() + "'"; - } - if (user.getName() != null && user.getName().length() > 0) { - str += " uname='" + StringEscapeUtils.escapeXml10(user.getName()) + "'"; - } - str += "/>"; - return str; - } - @Override - public String toString() { - return toString(this); - } -} \ No newline at end of file diff --git a/juick-server/src/main/java/com/juick/server/xmpp/helpers/JidConverter.java b/juick-server/src/main/java/com/juick/server/xmpp/helpers/JidConverter.java deleted file mode 100644 index ca25c4b8..00000000 --- a/juick-server/src/main/java/com/juick/server/xmpp/helpers/JidConverter.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.juick.server.xmpp.helpers; - -import org.springframework.core.convert.converter.Converter; -import org.springframework.lang.Nullable; -import rocks.xmpp.addr.Jid; - -public class JidConverter implements Converter { - @Nullable - @Override - public Jid convert(String jidStr) { - return Jid.of(jidStr); - } -} diff --git a/juick-server/src/main/java/com/juick/server/xmpp/s2s/BasicXmppSession.java b/juick-server/src/main/java/com/juick/server/xmpp/s2s/BasicXmppSession.java deleted file mode 100644 index 647f2717..00000000 --- a/juick-server/src/main/java/com/juick/server/xmpp/s2s/BasicXmppSession.java +++ /dev/null @@ -1,69 +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 . - */ - -package com.juick.server.xmpp.s2s; - -import rocks.xmpp.addr.Jid; -import rocks.xmpp.core.XmppException; -import rocks.xmpp.core.session.ConnectionConfiguration; -import rocks.xmpp.core.session.XmppSession; -import rocks.xmpp.core.session.XmppSessionConfiguration; -import rocks.xmpp.core.stanza.model.IQ; -import rocks.xmpp.core.stanza.model.Message; -import rocks.xmpp.core.stanza.model.Presence; -import rocks.xmpp.core.stanza.model.server.ServerIQ; -import rocks.xmpp.core.stanza.model.server.ServerMessage; -import rocks.xmpp.core.stanza.model.server.ServerPresence; -import rocks.xmpp.core.stream.model.StreamElement; - -/** - * Created by vitalyster on 06.02.2017. - */ -public class BasicXmppSession extends XmppSession { - protected BasicXmppSession(String xmppServiceDomain, XmppSessionConfiguration configuration, ConnectionConfiguration... connectionConfigurations) { - super(xmppServiceDomain, configuration, connectionConfigurations); - } - - public static BasicXmppSession create(String xmppServiceDomain, XmppSessionConfiguration configuration) { - BasicXmppSession session = new BasicXmppSession(xmppServiceDomain, configuration); - notifyCreationListeners(session); - return session; - } - - @Override - public void connect(Jid from) throws XmppException { - - } - - @Override - public Jid getConnectedResource() { - return null; - } - - @Override - protected StreamElement prepareElement(StreamElement element) { - if (element instanceof Message) { - element = ServerMessage.from((Message) element); - } else if (element instanceof Presence) { - element = ServerPresence.from((Presence) element); - } else if (element instanceof IQ) { - element = ServerIQ.from((IQ) element); - } - - return element; - } -} -- cgit v1.2.3