aboutsummaryrefslogtreecommitdiff
path: root/juick-www/src/main/java/com/juick/www/WebApp.java
diff options
context:
space:
mode:
authorGravatar Vitaly Takmazov2016-12-28 22:38:21 +0300
committerGravatar Vitaly Takmazov2017-01-10 12:08:35 +0300
commit2f682b5e3cfc3fc5f961b60129be7bc90e0d6a03 (patch)
tree840aea9eb94d5c1f667a710d3298135854bc5002 /juick-www/src/main/java/com/juick/www/WebApp.java
parenteb440ea4f120115613880e340b010eed5397e72c (diff)
juick-www: now on spring-webmvc
Diffstat (limited to 'juick-www/src/main/java/com/juick/www/WebApp.java')
-rw-r--r--juick-www/src/main/java/com/juick/www/WebApp.java154
1 files changed, 154 insertions, 0 deletions
diff --git a/juick-www/src/main/java/com/juick/www/WebApp.java b/juick-www/src/main/java/com/juick/www/WebApp.java
new file mode 100644
index 00000000..85ae64d4
--- /dev/null
+++ b/juick-www/src/main/java/com/juick/www/WebApp.java
@@ -0,0 +1,154 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package com.juick.www;
+
+import com.juick.Message;
+import com.juick.Tag;
+import com.juick.User;
+import com.juick.service.TagService;
+import com.juick.service.UserService;
+import com.juick.www.controllers.PageTemplates;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+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.session.Extension;
+import rocks.xmpp.core.session.XmppSessionConfiguration;
+import rocks.xmpp.core.session.debug.LogbackDebugger;
+import rocks.xmpp.extensions.component.accept.ExternalComponent;
+import ru.sape.Sape;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ *
+ * @author Ugnich Anton
+ */
+public class WebApp implements AutoCloseable {
+ private static Logger logger = LoggerFactory.getLogger(WebApp.class);
+
+ private ExternalComponent xmpp;
+
+ Environment env;
+ PageTemplates templates;
+ UserService userService;
+ TagService tagService;
+
+ private String imgDir;
+ private String tmpDir;
+
+ public WebApp(Environment env, PageTemplates templates, UserService userService, TagService tagService) {
+ this.env = env;
+ this.templates = templates;
+ this.userService = userService;
+ this.tagService = tagService;
+ tmpDir = env.getProperty("upload_tmp_dir", "/var/www/juick.com/i/tmp/");
+ imgDir = env.getProperty("img_path", "/var/www/juick.com/i/");
+ boolean isXmppDisabled = BooleanUtils.toBoolean(env.getProperty("xmpp_disabled"));
+ if (!isXmppDisabled) {
+ setupXmppComponent(Jid.of(env.getProperty("www_xmpp_jid", "www.juick.local")),
+ env.getProperty("xmpp_password"), NumberUtils.toInt(env.getProperty("xmpp_port", StringUtils.EMPTY), 5347));
+ }
+ String sapeUser = env.getProperty("sape_user", StringUtils.EMPTY);
+ if (!Objects.equals(sapeUser, StringUtils.EMPTY)) {
+ templates.sape = new Sape(sapeUser, "juick.com", 2000, 3600);
+ } else {
+ logger.error("Sape is not initialized");
+ }
+ }
+
+ @Override
+ public void close() {
+ try {
+ if (xmpp != null)
+ xmpp.close();
+ logger.error("ExternalComponent on WWW destroyed");
+ } catch (Exception e) {
+ logger.error("exception on destroy", e);
+ }
+ }
+
+ public void setupXmppComponent(final Jid componentJid, final String password, final int port) {
+ XmppSessionConfiguration configuration = XmppSessionConfiguration.builder()
+ .extensions(Extension.of(Message.class))
+ .debugger(LogbackDebugger.class)
+ .build();
+ xmpp = ExternalComponent.create(componentJid.toString(), password, configuration, "localhost", port);
+ xmpp.addConnectionListener(e -> logger.error(e.toString(), e.getCause()));
+ try {
+ xmpp.connect();
+ } catch (XmppException e) {
+ logger.error("xmpp extension", e);
+ }
+ }
+
+ public ExternalComponent getXmpp() {
+ return xmpp;
+ }
+
+
+ public com.juick.User getVisitorUser(HttpServletRequest request, HttpServletResponse response) {
+ String hash = Utils.getCookie(request, "hash");
+ if (hash != null) {
+ com.juick.User visitor = userService.getUserByHash(hash);
+ if (response != null && visitor.getUid() > 0) {
+ response.setHeader("X-Username", visitor.getName());
+ }
+ return visitor;
+ } else {
+ return new User();
+ }
+ }
+
+ public String getImgDir() {
+ return imgDir;
+ }
+
+ public String getTmpDir() {
+ return tmpDir;
+ }
+
+ public List<Tag> parseTags(String tagsStr) {
+ List<Tag> tags = new ArrayList<>();
+ String tagsArr[];
+ if (tagsStr != null && !tagsStr.isEmpty()) {
+ tagsArr = tagsStr.split("[ \\,]");
+ for (int i = 0; i < tagsArr.length; i++) {
+ if (tagsArr[i].startsWith("*")) {
+ tagsArr[i] = tagsArr[i].substring(1);
+ }
+ if (tagsArr[i].length() > 64) {
+ tagsArr[i] = tagsArr[i].substring(0, 64);
+ }
+ }
+ tags = tagService.getTags(tagsArr, true);
+ while (tags.size() > 5) {
+ tags.remove(5);
+ }
+ }
+ return tags;
+ }
+}