aboutsummaryrefslogtreecommitdiff
path: root/juick-api/src/main/java/com/juick/api/ApiServer.java
diff options
context:
space:
mode:
Diffstat (limited to 'juick-api/src/main/java/com/juick/api/ApiServer.java')
-rw-r--r--juick-api/src/main/java/com/juick/api/ApiServer.java121
1 files changed, 121 insertions, 0 deletions
diff --git a/juick-api/src/main/java/com/juick/api/ApiServer.java b/juick-api/src/main/java/com/juick/api/ApiServer.java
new file mode 100644
index 00000000..c76c165a
--- /dev/null
+++ b/juick-api/src/main/java/com/juick/api/ApiServer.java
@@ -0,0 +1,121 @@
+/*
+ * Juick
+ * Copyright (C) 2008-2013, 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.api;
+
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.env.Environment;
+import rocks.xmpp.core.XmppException;
+import rocks.xmpp.core.session.Extension;
+import rocks.xmpp.core.session.XmppSessionConfiguration;
+import rocks.xmpp.extensions.component.accept.ExternalComponent;
+
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * @author Ugnich Anton
+ */
+public class ApiServer implements AutoCloseable {
+ private static Logger logger = LoggerFactory.getLogger(ApiServer.class);
+
+ private ExternalComponent xmpp;
+
+ public String tmpDir;
+ public String imgDir;
+
+ private String xmppHost, xmppPassword, xmppJid;
+ private int xmppPort;
+ private boolean isXmppDisabled;
+
+
+ public ApiServer(Environment conf) {
+ tmpDir = conf.getProperty("upload_tmp_dir", "/var/www/juick.com/i/tmp/");
+ imgDir = conf.getProperty("img_path", "/var/www/juick.com/i/");
+ isXmppDisabled = BooleanUtils.toBoolean(conf.getProperty("xmpp_disabled"));
+ xmppHost = conf.getProperty("xmpp_host", "localhost");
+ xmppPort = NumberUtils.toInt(conf.getProperty("xmpp_port", "5347"), 5347);
+ xmppJid = conf.getProperty("xmpp_jid", "api.localhost");
+ xmppPassword = conf.getProperty("xmpp_password");
+ }
+
+ @PostConstruct
+ public void init() {
+ if (!isXmppDisabled) {
+ setupXmppComponent(xmppHost, xmppPort, xmppJid, xmppPassword);
+ }
+ }
+
+ @Override
+ public void close() {
+ try {
+ if (getXmpp() != null)
+ getXmpp().close();
+
+ logger.warn("ExternalComponent on juick-api destroyed");
+ } catch (Exception e) {
+ logger.warn("Exception occurs on juick-api destroy", e);
+ }
+
+ }
+
+ public void setupXmppComponent(final String host, final int port, final String jid, final String password) {
+ XmppSessionConfiguration configuration = XmppSessionConfiguration.builder()
+ .extensions(Extension.of(com.juick.Message.class))
+ .build();
+ setXmpp(ExternalComponent.create(jid, password, configuration, host, port));
+ try {
+ getXmpp().connect();
+ } catch (XmppException e) {
+ logger.warn("xmpp extension", e);
+ }
+ }
+
+ public static void replyJSON(HttpServletRequest request, HttpServletResponse response, String json) throws IOException {
+ response.setContentType("application/json; charset=UTF-8");
+ response.setHeader("Access-Control-Allow-Origin", "*");
+
+ String callback = request.getParameter("callback");
+ if (callback != null && (callback.length() > 64 || !callback.matches("[a-zA-Z0-9\\-\\_]+"))) {
+ callback = null;
+ }
+
+ try (PrintWriter out = response.getWriter()) {
+ if (callback != null) {
+ out.print(callback + "(");
+ out.print(json);
+ out.print(")");
+ } else {
+ out.print(json);
+ }
+ }
+ }
+
+ public ExternalComponent getXmpp() {
+ return xmpp;
+ }
+
+ public void setXmpp(ExternalComponent xmpp) {
+ this.xmpp = xmpp;
+ }
+}