diff --git a/src/main/java/com/bwssystems/HABridge/NamedIP.java b/src/main/java/com/bwssystems/HABridge/NamedIP.java index 145f798..b7162a2 100644 --- a/src/main/java/com/bwssystems/HABridge/NamedIP.java +++ b/src/main/java/com/bwssystems/HABridge/NamedIP.java @@ -2,7 +2,8 @@ package com.bwssystems.HABridge; public class NamedIP { private String name; - private String ip; + private String ip; + private String webhook; private String port; private String username; private String password; @@ -20,7 +21,13 @@ public class NamedIP { public void setIp(String ip) { this.ip = ip; } - public String getPort() { + public String getWebhook() { + return webhook; + } + public void setWebhook(final String webhook) { + this.webhook = webhook; + } + public String getPort() { return port; } public void setPort(String port) { diff --git a/src/main/java/com/bwssystems/HABridge/plugins/harmony/HarmonyServer.java b/src/main/java/com/bwssystems/HABridge/plugins/harmony/HarmonyServer.java index 4788359..521f7ed 100644 --- a/src/main/java/com/bwssystems/HABridge/plugins/harmony/HarmonyServer.java +++ b/src/main/java/com/bwssystems/HABridge/plugins/harmony/HarmonyServer.java @@ -4,6 +4,8 @@ import static java.lang.String.format; import javax.inject.Inject; +import com.bwssystems.HABridge.plugins.http.HTTPHandler; +import org.apache.http.client.methods.HttpGet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,69 +20,98 @@ import net.whistlingfish.harmony.HarmonyClientModule; import net.whistlingfish.harmony.config.Activity; import net.whistlingfish.harmony.protocol.OAReplyProvider; +import java.net.URLEncoder; + public class HarmonyServer { + + private static final String ACTIVIY_ID = "${activity.id}"; + private static final String ACTIVIY_LABEL = "${activity.label}"; + @Inject private HarmonyClient harmonyClient; - + private HarmonyHandler myHarmony; private DevModeResponse devResponse; private OAReplyProvider dummyProvider; private NamedIP myNameAndIP; private Boolean isDevMode; + private HTTPHandler httpClient; private Logger log = LoggerFactory.getLogger(HarmonyServer.class); - public HarmonyServer(NamedIP theHarmonyAddress) { - super(); - myHarmony = null; - dummyProvider = null; - myNameAndIP = theHarmonyAddress; - isDevMode = false; - } + public HarmonyServer(NamedIP theHarmonyAddress) { + super(); + myHarmony = null; + dummyProvider = null; + myNameAndIP = theHarmonyAddress; + isDevMode = false; + httpClient = new HTTPHandler(); + } - public static HarmonyServer setup(BridgeSettingsDescriptor bridgeSettings, Boolean harmonyDevMode, NamedIP theHarmonyAddress) throws Exception { - if(!bridgeSettings.isValidHarmony() && harmonyDevMode) { - return new HarmonyServer(theHarmonyAddress); - } - Injector injector = null; - if(!harmonyDevMode) - injector = Guice.createInjector(new HarmonyClientModule()); - HarmonyServer mainObject = new HarmonyServer(theHarmonyAddress); - if(!harmonyDevMode) - injector.injectMembers(mainObject); - mainObject.execute(bridgeSettings, harmonyDevMode); - return mainObject; - } - - private void execute(BridgeSettingsDescriptor mySettings, Boolean harmonyDevMode) throws Exception { - Boolean noopCalls = Boolean.parseBoolean(System.getProperty("noop.calls", "false")); - isDevMode = harmonyDevMode; - String modeString = ""; - if(dummyProvider != null) - log.debug("something is very wrong as dummyProvider is not null..."); - if(isDevMode) - modeString = " (development mode)"; - else if(noopCalls) - modeString = " (no op calls to harmony)"; - log.info("setup initiated " + modeString + "...."); - if(isDevMode) - { - harmonyClient = null; - devResponse = new DevModeResponse(); + public static HarmonyServer setup( + BridgeSettingsDescriptor bridgeSettings, + Boolean harmonyDevMode, + NamedIP theHarmonyAddress + ) throws Exception { + if (!bridgeSettings.isValidHarmony() && harmonyDevMode) { + return new HarmonyServer(theHarmonyAddress); } - else { - devResponse = null; - harmonyClient.addListener(new ActivityChangeListener() { - @Override - public void activityStarted(Activity activity) { - log.info(format("activity changed: [%d] %s", activity.getId(), activity.getLabel())); - } - }); - harmonyClient.connect(myNameAndIP.getIp()); + Injector injector = null; + if (!harmonyDevMode) { + injector = Guice.createInjector(new HarmonyClientModule()); + } + HarmonyServer mainObject = new HarmonyServer(theHarmonyAddress); + if (!harmonyDevMode) { + injector.injectMembers(mainObject); + } + mainObject.execute(bridgeSettings, harmonyDevMode); + return mainObject; + } + + private void execute(BridgeSettingsDescriptor mySettings, Boolean harmonyDevMode) throws Exception { + Boolean noopCalls = Boolean.parseBoolean(System.getProperty("noop.calls", "false")); + isDevMode = harmonyDevMode; + String modeString = ""; + if (dummyProvider != null) { + log.debug("something is very wrong as dummyProvider is not null..."); + } + if (isDevMode) { + modeString = " (development mode)"; + } else if (noopCalls) { + modeString = " (no op calls to harmony)"; + } + log.info("setup initiated " + modeString + "...."); + if (isDevMode) { + harmonyClient = null; + devResponse = new DevModeResponse(); + } else { + devResponse = null; + harmonyClient.addListener(new ActivityChangeListener() { + @Override + public void activityStarted(Activity activity) { + String webhook = myNameAndIP.getWebhook(); + if(webhook != null) { + try { + // Replacing variables + webhook = webhook.replace(ACTIVIY_ID, activity.getId().toString()); + webhook = webhook.replace(ACTIVIY_LABEL, URLEncoder.encode(activity.getLabel(), "UTF-8")); + + log.info(format("calling webhook: %s", webhook)); + + // Calling webhook + httpClient.doHttpRequest(webhook, HttpGet.METHOD_NAME, null, null, null); + } catch (Exception e) { + log.warn("could not call webhook: " + webhook, e); + } + } + log.info(format("activity changed: [%d] %s", activity.getId(), activity.getLabel())); + } + }); + harmonyClient.connect(myNameAndIP.getIp()); } myHarmony = new HarmonyHandler(harmonyClient, noopCalls, devResponse); - } + } - public HarmonyHandler getMyHarmony() { - return myHarmony; - } + public HarmonyHandler getMyHarmony() { + return myHarmony; + } } diff --git a/src/main/resources/public/views/system.html b/src/main/resources/public/views/system.html index 62e3bd8..06fb374 100644 --- a/src/main/resources/public/views/system.html +++ b/src/main/resources/public/views/system.html @@ -141,25 +141,30 @@ Name - IP + IP + Webhook Manage {{harmony.name}} - {{harmony.ip}} + {{harmony.ip}} + {{harmony.webhook}} + ng-click="removeHarmonytoSettings(harmony.name, harmony.ip, harmony.webhook)">Del - + + + ng-click="addHarmonytoSettings(newharmonyname, newharmonyip, newharmonywebhook)">Add