mirror of
https://github.com/bwssytems/ha-bridge.git
synced 2025-12-18 00:10:20 +00:00
Added Hue Error Handling objects. Adding whitelsit control.
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
<groupId>com.bwssystems.HABridge</groupId>
|
<groupId>com.bwssystems.HABridge</groupId>
|
||||||
<artifactId>ha-bridge</artifactId>
|
<artifactId>ha-bridge</artifactId>
|
||||||
<version>2.0.7-hal-f</version>
|
<version>2.0.7-hal-g</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>HA Bridge</name>
|
<name>HA Bridge</name>
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
package com.bwssystems.HABridge;
|
package com.bwssystems.HABridge;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.bwssystems.HABridge.api.hue.WhitelistEntry;
|
||||||
|
|
||||||
public class BridgeSettingsDescriptor {
|
public class BridgeSettingsDescriptor {
|
||||||
private String upnpconfigaddress;
|
private String upnpconfigaddress;
|
||||||
@@ -27,6 +30,7 @@ public class BridgeSettingsDescriptor {
|
|||||||
private IpList haladdress;
|
private IpList haladdress;
|
||||||
private String haltoken;
|
private String haltoken;
|
||||||
private boolean halconfigured;
|
private boolean halconfigured;
|
||||||
|
private Map<String, WhitelistEntry> whitelist;
|
||||||
|
|
||||||
public BridgeSettingsDescriptor() {
|
public BridgeSettingsDescriptor() {
|
||||||
super();
|
super();
|
||||||
@@ -188,6 +192,12 @@ public class BridgeSettingsDescriptor {
|
|||||||
public void setHalconfigured(boolean halconfigured) {
|
public void setHalconfigured(boolean halconfigured) {
|
||||||
this.halconfigured = halconfigured;
|
this.halconfigured = halconfigured;
|
||||||
}
|
}
|
||||||
|
public Map<String, WhitelistEntry> getWhitelist() {
|
||||||
|
return whitelist;
|
||||||
|
}
|
||||||
|
public void setWhitelist(Map<String, WhitelistEntry> whitelist) {
|
||||||
|
this.whitelist = whitelist;
|
||||||
|
}
|
||||||
public Boolean isValidVera() {
|
public Boolean isValidVera() {
|
||||||
if(this.getVeraAddress() == null || this.getVeraAddress().getDevices().size() <= 0)
|
if(this.getVeraAddress() == null || this.getVeraAddress().getDevices().size() <= 0)
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ public class HueApiResponse {
|
|||||||
private Map<String, JsonObject> rules;
|
private Map<String, JsonObject> rules;
|
||||||
private HueConfig config;
|
private HueConfig config;
|
||||||
|
|
||||||
public HueApiResponse(String name, String ipaddress, String devicetype, String userid) {
|
public HueApiResponse(String name, String ipaddress, Map<String, WhitelistEntry> awhitelist) {
|
||||||
super();
|
super();
|
||||||
this.setConfig(HueConfig.createConfig(name, ipaddress, devicetype, userid));
|
this.setConfig(HueConfig.createConfig(name, ipaddress, awhitelist));
|
||||||
this.setRules(new HashMap<>());
|
this.setRules(new HashMap<>());
|
||||||
this.setSensors(new HashMap<>());
|
this.setSensors(new HashMap<>());
|
||||||
this.setSchedules(new HashMap<>());
|
this.setSchedules(new HashMap<>());
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public class HueConfig
|
|||||||
private String replacesbridgeid;
|
private String replacesbridgeid;
|
||||||
private Map<String, WhitelistEntry> whitelist;
|
private Map<String, WhitelistEntry> whitelist;
|
||||||
|
|
||||||
public static HueConfig createConfig(String name, String ipaddress, String devicetype, String userid) {
|
public static HueConfig createConfig(String name, String ipaddress, Map<String, WhitelistEntry> awhitelist) {
|
||||||
HueConfig aConfig = new HueConfig();
|
HueConfig aConfig = new HueConfig();
|
||||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
|
||||||
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
|
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
|
||||||
@@ -57,12 +57,10 @@ public class HueConfig
|
|||||||
aConfig.setLocaltime(dateFormat.format(new Date()));
|
aConfig.setLocaltime(dateFormat.format(new Date()));
|
||||||
aConfig.setTimezone(TimeZone.getDefault().getID());
|
aConfig.setTimezone(TimeZone.getDefault().getID());
|
||||||
aConfig.setZigbeechannel("6");
|
aConfig.setZigbeechannel("6");
|
||||||
aConfig.setBridgeid("001788FFFE09A206");
|
aConfig.setBridgeid(HuePublicConfig.getBridgeIdFromMac(aConfig.getMac(), ipaddress));
|
||||||
aConfig.setModelid("BSB002");
|
aConfig.setModelid("BSB002");
|
||||||
aConfig.setFactorynew(false);
|
aConfig.setFactorynew(false);
|
||||||
aConfig.setReplacesbridgeid(null);
|
aConfig.setReplacesbridgeid(null);
|
||||||
Map<String, WhitelistEntry> awhitelist = new HashMap<>();
|
|
||||||
awhitelist.put(userid, WhitelistEntry.createEntry(devicetype));
|
|
||||||
aConfig.setWhitelist(awhitelist);
|
aConfig.setWhitelist(awhitelist);
|
||||||
|
|
||||||
return aConfig;
|
return aConfig;
|
||||||
|
|||||||
19
src/main/java/com/bwssystems/HABridge/api/hue/HueError.java
Normal file
19
src/main/java/com/bwssystems/HABridge/api/hue/HueError.java
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package com.bwssystems.HABridge.api.hue;
|
||||||
|
|
||||||
|
public class HueError {
|
||||||
|
|
||||||
|
private HueErrorDetails error;
|
||||||
|
|
||||||
|
public HueError(HueErrorDetails error) {
|
||||||
|
super();
|
||||||
|
this.error = error;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HueErrorDetails getError() {
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setError(HueErrorDetails error) {
|
||||||
|
this.error = error;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package com.bwssystems.HABridge.api.hue;
|
||||||
|
|
||||||
|
public class HueErrorDetails {
|
||||||
|
private String type;
|
||||||
|
private String address;
|
||||||
|
private String description;
|
||||||
|
private String method_name;
|
||||||
|
private String resource_name;
|
||||||
|
private String value;
|
||||||
|
public HueErrorDetails(String type, String address, String description, String method_name, String resource_name,
|
||||||
|
String value) {
|
||||||
|
super();
|
||||||
|
this.type = type;
|
||||||
|
this.address = address;
|
||||||
|
this.description = description;
|
||||||
|
this.method_name = method_name;
|
||||||
|
this.resource_name = resource_name;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
public String getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
public void setType(String type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
public String getAddress() {
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
public void setAddress(String address) {
|
||||||
|
this.address = address;
|
||||||
|
}
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
public String getMethod_name() {
|
||||||
|
return method_name;
|
||||||
|
}
|
||||||
|
public void setMethod_name(String method_name) {
|
||||||
|
this.method_name = method_name;
|
||||||
|
}
|
||||||
|
public String getResource_name() {
|
||||||
|
return resource_name;
|
||||||
|
}
|
||||||
|
public void setResource_name(String resource_name) {
|
||||||
|
this.resource_name = resource_name;
|
||||||
|
}
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
public void setValue(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package com.bwssystems.HABridge.api.hue;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class HueErrorResponse {
|
||||||
|
private ArrayList<HueError> theErrors;
|
||||||
|
|
||||||
|
public HueErrorResponse() {
|
||||||
|
super();
|
||||||
|
theErrors = new ArrayList<HueError>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addError(HueError anError) {
|
||||||
|
theErrors.add(anError);
|
||||||
|
}
|
||||||
|
|
||||||
|
public HueError[] getTheErrors() {
|
||||||
|
HueError theList[] = new HueError[theErrors.size()];
|
||||||
|
theList = theErrors.toArray(theList);
|
||||||
|
return theList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTheErrors(ArrayList<HueError> theErrors) {
|
||||||
|
this.theErrors = theErrors;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,154 @@
|
|||||||
|
package com.bwssystems.HABridge.api.hue;
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.NetworkInterface;
|
||||||
|
import java.net.SocketException;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
|
import javax.xml.bind.DatatypeConverter;
|
||||||
|
|
||||||
|
public class HuePublicConfig
|
||||||
|
{
|
||||||
|
private String name;
|
||||||
|
private String apiversion;
|
||||||
|
private String swversion;
|
||||||
|
private String mac;
|
||||||
|
private String bridgeid;
|
||||||
|
private String replacesbridgeid;
|
||||||
|
private Boolean factorynew;
|
||||||
|
private String modelid;
|
||||||
|
|
||||||
|
public static HuePublicConfig createConfig(String name, String ipaddress) {
|
||||||
|
HuePublicConfig aConfig = new HuePublicConfig();
|
||||||
|
aConfig.setMac(HuePublicConfig.getMacAddress(ipaddress));
|
||||||
|
aConfig.setApiversion("1.10.0");
|
||||||
|
aConfig.setSwversion("01028090");
|
||||||
|
aConfig.setName(name);
|
||||||
|
aConfig.setBridgeid(HuePublicConfig.getBridgeIdFromMac(aConfig.getMac(), ipaddress));
|
||||||
|
aConfig.setModelid("BSB002");
|
||||||
|
aConfig.setFactorynew(false);
|
||||||
|
aConfig.setReplacesbridgeid(null);
|
||||||
|
|
||||||
|
return aConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getMacAddress(String addr)
|
||||||
|
{
|
||||||
|
InetAddress ip;
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
try {
|
||||||
|
|
||||||
|
ip = InetAddress.getByName(addr);
|
||||||
|
|
||||||
|
NetworkInterface network = NetworkInterface.getByInetAddress(ip);
|
||||||
|
|
||||||
|
byte[] mac = network.getHardwareAddress();
|
||||||
|
|
||||||
|
for (int i = 0; i < mac.length; i++) {
|
||||||
|
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? ":" : ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (UnknownHostException e) {
|
||||||
|
|
||||||
|
sb.append("00:00:88:00:bb:ee");
|
||||||
|
|
||||||
|
} catch (SocketException e){
|
||||||
|
|
||||||
|
sb.append("00:00:88:00:bb:ee");
|
||||||
|
|
||||||
|
} catch (Exception e){
|
||||||
|
|
||||||
|
sb.append("00:00:88:00:bb:ee");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static String getBridgeIdFromMac(String macAddr, String ipAddr)
|
||||||
|
{
|
||||||
|
StringTokenizer st = new StringTokenizer(macAddr, ":");
|
||||||
|
String bridgeId = "";
|
||||||
|
String port = null;
|
||||||
|
while(st.hasMoreTokens()) {
|
||||||
|
bridgeId = bridgeId + st.nextToken();
|
||||||
|
}
|
||||||
|
if(ipAddr.contains(":")) {
|
||||||
|
port = ipAddr.substring(ipAddr.indexOf(":"));
|
||||||
|
BigInteger bigInt = BigInteger.valueOf(Integer.getInteger(port).intValue());
|
||||||
|
byte[] theBytes = bigInt.toByteArray();
|
||||||
|
bridgeId = bridgeId + DatatypeConverter.printHexBinary(theBytes);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
bridgeId = bridgeId + "0800";
|
||||||
|
return bridgeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMac() {
|
||||||
|
return mac;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMac(String mac) {
|
||||||
|
this.mac = mac;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSwversion() {
|
||||||
|
return swversion;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSwversion(String swversion) {
|
||||||
|
this.swversion = swversion;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getApiversion() {
|
||||||
|
return apiversion;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setApiversion(String apiversion) {
|
||||||
|
this.apiversion = apiversion;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getModelid() {
|
||||||
|
return modelid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setModelid(String modelid) {
|
||||||
|
this.modelid = modelid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBridgeid() {
|
||||||
|
return bridgeid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBridgeid(String bridgeid) {
|
||||||
|
this.bridgeid = bridgeid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getFactorynew() {
|
||||||
|
return factorynew;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFactorynew(Boolean factorynew) {
|
||||||
|
this.factorynew = factorynew;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getReplacesbridgeid() {
|
||||||
|
return replacesbridgeid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReplacesbridgeid(String replacesbridgeid) {
|
||||||
|
this.replacesbridgeid = replacesbridgeid;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,7 +7,12 @@ import com.bwssystems.HABridge.api.UserCreateRequest;
|
|||||||
import com.bwssystems.HABridge.api.hue.DeviceResponse;
|
import com.bwssystems.HABridge.api.hue.DeviceResponse;
|
||||||
import com.bwssystems.HABridge.api.hue.DeviceState;
|
import com.bwssystems.HABridge.api.hue.DeviceState;
|
||||||
import com.bwssystems.HABridge.api.hue.HueApiResponse;
|
import com.bwssystems.HABridge.api.hue.HueApiResponse;
|
||||||
|
import com.bwssystems.HABridge.api.hue.HueError;
|
||||||
|
import com.bwssystems.HABridge.api.hue.HueErrorDetails;
|
||||||
|
import com.bwssystems.HABridge.api.hue.HueErrorResponse;
|
||||||
|
import com.bwssystems.HABridge.api.hue.HuePublicConfig;
|
||||||
import com.bwssystems.HABridge.api.hue.StateChangeBody;
|
import com.bwssystems.HABridge.api.hue.StateChangeBody;
|
||||||
|
import com.bwssystems.HABridge.api.hue.WhitelistEntry;
|
||||||
import com.bwssystems.HABridge.dao.*;
|
import com.bwssystems.HABridge.dao.*;
|
||||||
import com.bwssystems.NestBridge.NestInstruction;
|
import com.bwssystems.NestBridge.NestInstruction;
|
||||||
import com.bwssystems.NestBridge.NestHome;
|
import com.bwssystems.NestBridge.NestHome;
|
||||||
@@ -62,6 +67,8 @@ import java.nio.charset.Charset;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
import javax.net.ssl.SSLContext;
|
import javax.net.ssl.SSLContext;
|
||||||
import javax.xml.bind.DatatypeConverter;
|
import javax.xml.bind.DatatypeConverter;
|
||||||
@@ -137,30 +144,58 @@ public class HueMulator implements HueErrorStringSet {
|
|||||||
get(HUE_CONTEXT + "/:userid/groups", "application/json", (request, response) -> {
|
get(HUE_CONTEXT + "/:userid/groups", "application/json", (request, response) -> {
|
||||||
String userId = request.params(":userid");
|
String userId = request.params(":userid");
|
||||||
log.debug("hue groups list requested: " + userId + " from " + request.ip());
|
log.debug("hue groups list requested: " + userId + " from " + request.ip());
|
||||||
|
response.status(HttpStatus.SC_OK);
|
||||||
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
return "";
|
return "{}";
|
||||||
} , new JsonTransformer());
|
});
|
||||||
// http://ip_address:port/api/{userId}/groups/0 returns json objects of all groups configured
|
// http://ip_address:port/api/{userId}/groups/0 returns json objects of all groups configured
|
||||||
get(HUE_CONTEXT + "/:userid/groups/0", "application/json", (request, response) -> {
|
get(HUE_CONTEXT + "/:userid/groups/0", "application/json", (request, response) -> {
|
||||||
String userId = request.params(":userid");
|
String userId = request.params(":userid");
|
||||||
log.debug("hue group 0 list requested: " + userId + " from " + request.ip());
|
log.debug("hue group 0 list requested: " + userId + " from " + request.ip());
|
||||||
|
response.status(HttpStatus.SC_OK);
|
||||||
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
return "";
|
return "[{\"error\":{\"type\":\"3\", \"address\": \"/api/" + userId + "/groups/" + "0" + "\",\"description\": \"Object not found\"}}]";
|
||||||
} , new JsonTransformer());
|
});
|
||||||
// http://ip_address:port/api/{userId}/scenes returns json objects of all scenes configured
|
// http://ip_address:port/api/{userId}/scenes returns json objects of all scenes configured
|
||||||
get(HUE_CONTEXT + "/:userid/scenes", "application/json", (request, response) -> {
|
get(HUE_CONTEXT + "/:userid/scenes", "application/json", (request, response) -> {
|
||||||
String userId = request.params(":userid");
|
String userId = request.params(":userid");
|
||||||
log.debug("hue scenes list requested: " + userId + " from " + request.ip());
|
log.debug("hue scenes list requested: " + userId + " from " + request.ip());
|
||||||
|
response.status(HttpStatus.SC_OK);
|
||||||
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
return "";
|
return "{}";
|
||||||
} , new JsonTransformer());
|
});
|
||||||
// http://ip_address:port/api/{userId}/schedules returns json objects of all schedules configured
|
// http://ip_address:port/api/{userId}/schedules returns json objects of all schedules configured
|
||||||
get(HUE_CONTEXT + "/:userid/schedules", "application/json", (request, response) -> {
|
get(HUE_CONTEXT + "/:userid/schedules", "application/json", (request, response) -> {
|
||||||
String userId = request.params(":userid");
|
String userId = request.params(":userid");
|
||||||
log.debug("hue schedules list requested: " + userId + " from " + request.ip());
|
log.debug("hue schedules list requested: " + userId + " from " + request.ip());
|
||||||
|
response.status(HttpStatus.SC_OK);
|
||||||
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
return "";
|
return "{}";
|
||||||
} , new JsonTransformer());
|
});
|
||||||
|
// http://ip_address:port/api/{userId}/sensors returns json objects of all sensors configured
|
||||||
|
get(HUE_CONTEXT + "/:userid/sensors", "application/json", (request, response) -> {
|
||||||
|
String userId = request.params(":userid");
|
||||||
|
log.debug("hue sensors list requested: " + userId + " from " + request.ip());
|
||||||
|
response.status(HttpStatus.SC_OK);
|
||||||
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
|
return "{}";
|
||||||
|
});
|
||||||
|
// http://ip_address:port/api/{userId}/rules returns json objects of all rules configured
|
||||||
|
get(HUE_CONTEXT + "/:userid/rules", "application/json", (request, response) -> {
|
||||||
|
String userId = request.params(":userid");
|
||||||
|
log.debug("hue rules list requested: " + userId + " from " + request.ip());
|
||||||
|
response.status(HttpStatus.SC_OK);
|
||||||
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
|
return "{}";
|
||||||
|
});
|
||||||
|
// http://ip_address:port/api/{userId}/resourcelinks returns json objects of all resourcelinks configured
|
||||||
|
get(HUE_CONTEXT + "/:userid/resourcelinks", "application/json", (request, response) -> {
|
||||||
|
String userId = request.params(":userid");
|
||||||
|
log.debug("hue resourcelinks list requested: " + userId + " from " + request.ip());
|
||||||
|
response.status(HttpStatus.SC_OK);
|
||||||
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
|
return "{}";
|
||||||
|
});
|
||||||
get(HUE_CONTEXT + "/:userid/lights", "application/json", (request, response) -> {
|
get(HUE_CONTEXT + "/:userid/lights", "application/json", (request, response) -> {
|
||||||
String userId = request.params(":userid");
|
String userId = request.params(":userid");
|
||||||
if(bridgeSettings.isTraceupnp())
|
if(bridgeSettings.isTraceupnp())
|
||||||
@@ -203,7 +238,7 @@ public class HueMulator implements HueErrorStringSet {
|
|||||||
aDeviceType = aNewUser.getDevicetype();
|
aDeviceType = aNewUser.getDevicetype();
|
||||||
}
|
}
|
||||||
if(newUser == null)
|
if(newUser == null)
|
||||||
newUser = "lightssystem";
|
newUser = getNewUserID(request.ip());
|
||||||
|
|
||||||
if(aDeviceType == null)
|
if(aDeviceType == null)
|
||||||
aDeviceType = "<not given>";
|
aDeviceType = "<not given>";
|
||||||
@@ -241,7 +276,7 @@ public class HueMulator implements HueErrorStringSet {
|
|||||||
aDeviceType = aNewUser.getDevicetype();
|
aDeviceType = aNewUser.getDevicetype();
|
||||||
}
|
}
|
||||||
if(newUser == null)
|
if(newUser == null)
|
||||||
newUser = "lightssystem";
|
newUser = getNewUserID(request.ip());
|
||||||
|
|
||||||
if(aDeviceType == null)
|
if(aDeviceType == null)
|
||||||
aDeviceType = "<not given>";
|
aDeviceType = "<not given>";
|
||||||
@@ -252,20 +287,17 @@ public class HueMulator implements HueErrorStringSet {
|
|||||||
return "[{\"success\":{\"username\":\"" + newUser + "\"}}]";
|
return "[{\"success\":{\"username\":\"" + newUser + "\"}}]";
|
||||||
} );
|
} );
|
||||||
|
|
||||||
// http://ip_address:port/api/config returns json objects for the config when no user is given
|
// http://ip_address:port/api/config returns json objects for the public config when no user is given
|
||||||
get(HUE_CONTEXT + "/config", "application/json", (request, response) -> {
|
get(HUE_CONTEXT + "/config", "application/json", (request, response) -> {
|
||||||
if(bridgeSettings.isTraceupnp())
|
if(bridgeSettings.isTraceupnp())
|
||||||
log.info("Traceupnp: hue api/config config requested: <no_user> from " + request.ip());
|
log.info("Traceupnp: hue api/config config requested: <no_user> from " + request.ip());
|
||||||
log.debug("hue api config requested: <no_user> from " + request.ip());
|
log.debug("hue api public config requested, from " + request.ip());
|
||||||
HueApiResponse apiResponse = new HueApiResponse("Philips hue", bridgeSettings.getUpnpConfigAddress(), "My App", "none");
|
HuePublicConfig apiResponse = HuePublicConfig.createConfig("Philips hue", bridgeSettings.getUpnpConfigAddress());
|
||||||
|
|
||||||
response.type("application/json; charset=utf-8");
|
response.type("application/json; charset=utf-8");
|
||||||
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
response.status(HttpStatus.SC_OK);
|
response.status(HttpStatus.SC_OK);
|
||||||
// String responseString = null;
|
return apiResponse;
|
||||||
// responseString = "[{\"swversion\":\"" + apiResponse.getConfig().getSwversion() + "\",\"apiversion\":\"" + apiResponse.getConfig().getApiversion() + "\",\"name\":\"" + apiResponse.getConfig().getName() + "\",\"mac\":\"" + apiResponse.getConfig().getMac() + "\"}]";
|
|
||||||
// return responseString;
|
|
||||||
return apiResponse.getConfig();
|
|
||||||
}, new JsonTransformer());
|
}, new JsonTransformer());
|
||||||
|
|
||||||
// http://ip_address:port/api/{userId}/config returns json objects for the config
|
// http://ip_address:port/api/{userId}/config returns json objects for the config
|
||||||
@@ -274,7 +306,7 @@ public class HueMulator implements HueErrorStringSet {
|
|||||||
if(bridgeSettings.isTraceupnp())
|
if(bridgeSettings.isTraceupnp())
|
||||||
log.info("Traceupnp: hue api/:userid/config config requested: " + userId + " from " + request.ip());
|
log.info("Traceupnp: hue api/:userid/config config requested: " + userId + " from " + request.ip());
|
||||||
log.debug("hue api config requested: " + userId + " from " + request.ip());
|
log.debug("hue api config requested: " + userId + " from " + request.ip());
|
||||||
HueApiResponse apiResponse = new HueApiResponse("Philips hue", bridgeSettings.getUpnpConfigAddress(), "My App", userId);
|
HueApiResponse apiResponse = new HueApiResponse("Philips hue", bridgeSettings.getUpnpConfigAddress(), bridgeSettings.getWhitelist());
|
||||||
|
|
||||||
response.type("application/json; charset=utf-8");
|
response.type("application/json; charset=utf-8");
|
||||||
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
@@ -286,10 +318,17 @@ public class HueMulator implements HueErrorStringSet {
|
|||||||
// http://ip_address:port/api/{userId} returns json objects for the full state
|
// http://ip_address:port/api/{userId} returns json objects for the full state
|
||||||
get(HUE_CONTEXT + "/:userid", "application/json", (request, response) -> {
|
get(HUE_CONTEXT + "/:userid", "application/json", (request, response) -> {
|
||||||
String userId = request.params(":userid");
|
String userId = request.params(":userid");
|
||||||
log.debug("hue api full state requested: " + userId + " from " + request.ip());
|
|
||||||
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
if(userId.equalsIgnoreCase("undefined"))
|
response.type("application/json; charset=utf-8");
|
||||||
return "[{\"error\":{\"address\":\"/\",\"description\":\"unauthorized user\",\"type\":\"1\"}}]";
|
response.status(HttpStatus.SC_OK);
|
||||||
|
if(userId == null || userId.equalsIgnoreCase("undefined") || userId.equalsIgnoreCase("null") || userId.equalsIgnoreCase("")) {
|
||||||
|
log.debug("hue api full state requested: " + userId + " from " + request.ip() + ". No User supplied");
|
||||||
|
HueErrorResponse theErrorResp = new HueErrorResponse();
|
||||||
|
theErrorResp.addError(new HueError(new HueErrorDetails("1", "/api/" + userId, "unauthorized user", null, null, null)));
|
||||||
|
return theErrorResp.getTheErrors();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
log.debug("hue api full state requested: " + userId + " from " + request.ip());
|
||||||
List<DeviceDescriptor> descriptorList = repository.findAll();
|
List<DeviceDescriptor> descriptorList = repository.findAll();
|
||||||
if (descriptorList == null) {
|
if (descriptorList == null) {
|
||||||
response.status(HttpStatus.SC_NOT_FOUND);
|
response.status(HttpStatus.SC_NOT_FOUND);
|
||||||
@@ -302,11 +341,9 @@ public class HueMulator implements HueErrorStringSet {
|
|||||||
deviceList.put(descriptor.getId(), deviceResponse);
|
deviceList.put(descriptor.getId(), deviceResponse);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
HueApiResponse apiResponse = new HueApiResponse("Philips hue", bridgeSettings.getUpnpConfigAddress(), "My App", userId);
|
HueApiResponse apiResponse = new HueApiResponse("Philips hue", bridgeSettings.getUpnpConfigAddress(), bridgeSettings.getWhitelist());
|
||||||
apiResponse.setLights(deviceList);
|
apiResponse.setLights(deviceList);
|
||||||
|
|
||||||
response.type("application/json; charset=utf-8");
|
|
||||||
response.status(HttpStatus.SC_OK);
|
|
||||||
return apiResponse;
|
return apiResponse;
|
||||||
}, new JsonTransformer());
|
}, new JsonTransformer());
|
||||||
|
|
||||||
@@ -315,18 +352,20 @@ public class HueMulator implements HueErrorStringSet {
|
|||||||
String userId = request.params(":userid");
|
String userId = request.params(":userid");
|
||||||
String lightId = request.params(":id");
|
String lightId = request.params(":id");
|
||||||
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
|
response.type("application/json; charset=utf-8");
|
||||||
|
response.status(HttpStatus.SC_OK);
|
||||||
log.debug("hue light requested: " + lightId + " for user: " + userId + " from " + request.ip());
|
log.debug("hue light requested: " + lightId + " for user: " + userId + " from " + request.ip());
|
||||||
DeviceDescriptor device = repository.findOne(lightId);
|
DeviceDescriptor device = repository.findOne(lightId);
|
||||||
if (device == null) {
|
if (device == null) {
|
||||||
response.status(HttpStatus.SC_NOT_FOUND);
|
response.status(HttpStatus.SC_NOT_FOUND);
|
||||||
return "[{\"error\":{\"type\": 3, \"address\": \"/lights/" + lightId + "\",\"description\": \"Object not found\"}}]";
|
HueErrorResponse theErrorResp = new HueErrorResponse();
|
||||||
|
theErrorResp.addError(new HueError(new HueErrorDetails("3", "/api/" + userId + "/lights/" + lightId, "Object not found", null, null, null)));
|
||||||
|
return theErrorResp.getTheErrors();
|
||||||
} else {
|
} else {
|
||||||
log.debug("found device named: " + device.getName());
|
log.debug("found device named: " + device.getName());
|
||||||
}
|
}
|
||||||
DeviceResponse lightResponse = DeviceResponse.createResponse(device);
|
DeviceResponse lightResponse = DeviceResponse.createResponse(device);
|
||||||
|
|
||||||
response.type("application/json; charset=utf-8");
|
|
||||||
response.status(HttpStatus.SC_OK);
|
|
||||||
return lightResponse;
|
return lightResponse;
|
||||||
}, new JsonTransformer());
|
}, new JsonTransformer());
|
||||||
|
|
||||||
@@ -1025,6 +1064,19 @@ public class HueMulator implements HueErrorStringSet {
|
|||||||
return responseString;
|
return responseString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getNewUserID(String seed) {
|
||||||
|
UUID uid = UUID.fromString(seed);
|
||||||
|
StringTokenizer st = new StringTokenizer(uid.toString(), "-");
|
||||||
|
String newUser = "";
|
||||||
|
while(st.hasMoreTokens()) {
|
||||||
|
newUser = newUser + st.nextToken();
|
||||||
|
}
|
||||||
|
|
||||||
|
return newUser;
|
||||||
|
}
|
||||||
|
private String lookupWhitelistUser() {
|
||||||
|
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
public void setErrorString(String anError) {
|
public void setErrorString(String anError) {
|
||||||
errorString = anError;
|
errorString = anError;
|
||||||
|
|||||||
Reference in New Issue
Block a user