diff options
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.java | 154 |
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; + } +} |