diff --git a/pom.xml b/pom.xml index a6354af..c297b46 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.bwssystems.HABridge ha-bridge - 4.5.0rc1 + 4.5.0rc2 jar HA Bridge diff --git a/src/main/java/com/bwssystems/HABridge/BridgeSecurity.java b/src/main/java/com/bwssystems/HABridge/BridgeSecurity.java index 75a70ef..5b61025 100644 --- a/src/main/java/com/bwssystems/HABridge/BridgeSecurity.java +++ b/src/main/java/com/bwssystems/HABridge/BridgeSecurity.java @@ -51,7 +51,8 @@ public class BridgeSecurity { } catch (IOException e) { anError = e.getMessage(); } - log.warn("Cound not get security data, using default security (none): " + anError); + if(anError != null) + log.warn("Cound not get security data, using default security (none): " + anError); } if(theData == null || anError != null) { diff --git a/src/main/java/com/bwssystems/HABridge/BridgeSettings.java b/src/main/java/com/bwssystems/HABridge/BridgeSettings.java index 2c8b2e2..6c4d63f 100644 --- a/src/main/java/com/bwssystems/HABridge/BridgeSettings.java +++ b/src/main/java/com/bwssystems/HABridge/BridgeSettings.java @@ -186,8 +186,6 @@ public class BridgeSettings extends BackupHandler { theBridgeSettings.setWebaddress(serverIpOverride); setupParams(Paths.get(theBridgeSettings.getConfigfile()), ".cfgbk", "habridge.config-"); - setupInternalTestUser(); - bridgeSecurity.setSecurityData(theBridgeSettings.getSecurityData()); } @@ -338,9 +336,4 @@ public class BridgeSettings extends BackupHandler { } return addressString; } - private void setupInternalTestUser() { - theBridgeSettings.setupInternalTestUser(); - if(theBridgeSettings.isSettingsChanged()) - this.updateConfigFile(); - } } diff --git a/src/main/java/com/bwssystems/HABridge/BridgeSettingsDescriptor.java b/src/main/java/com/bwssystems/HABridge/BridgeSettingsDescriptor.java index 019d7a3..593d08f 100644 --- a/src/main/java/com/bwssystems/HABridge/BridgeSettingsDescriptor.java +++ b/src/main/java/com/bwssystems/HABridge/BridgeSettingsDescriptor.java @@ -4,6 +4,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.StringTokenizer; import java.util.UUID; @@ -14,8 +15,8 @@ import com.bwssystems.HABridge.api.hue.HueErrorResponse; import com.bwssystems.HABridge.api.hue.WhitelistEntry; public class BridgeSettingsDescriptor { - private static final String DEFAULT_INTERNAL_USER = "thehabridgeuser"; - private static final String DEFAULT_USER_DESCRIPTION = "default_test_user"; + private static final String DEPRACATED_INTERNAL_USER = "thehabridgeuser"; + private static final String TEST_USER_TYPE = "test_ha_bridge"; private String upnpconfigaddress; private Integer serverport; private Integer upnpresponseport; @@ -403,11 +404,17 @@ public class BridgeSettingsDescriptor { if (!found) { return HueErrorResponse.createResponse("1", "/api/" + aUser, "unauthorized user", null, null, null).getTheErrors(); } + + Object anUser = whitelist.remove(DEPRACATED_INTERNAL_USER); + if(anUser != null) + setSettingsChanged(true); return null; } public void newWhitelistUser(String aUser, String userDescription) { + if(aUser.equals(DEPRACATED_INTERNAL_USER)) + return; if (whitelist == null) { whitelist = new HashMap<>(); } @@ -434,23 +441,22 @@ public class BridgeSettingsDescriptor { return newUser; } + + public void removeTestUsers() { + if (whitelist != null) { + Object anUser = whitelist.remove(DEPRACATED_INTERNAL_USER); + if(anUser != null) + setSettingsChanged(true); - public String getInternalTestUser() { - return DEFAULT_INTERNAL_USER; - } - - public void setupInternalTestUser() { - boolean found = false; - if(whitelist != null) { - for (String key : whitelist.keySet()) { - if(key.equals(DEFAULT_INTERNAL_USER)) { - found = true; - break; - } - } - } - if(!found) { - newWhitelistUser(DEFAULT_INTERNAL_USER, DEFAULT_USER_DESCRIPTION); + Iterator> it = whitelist.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = it.next(); + it.remove(); // avoids a ConcurrentModificationException + if(pair.getValue().getName().equals(TEST_USER_TYPE)) { + whitelist.remove(pair.getKey()); + setSettingsChanged(true); + } + } } } } diff --git a/src/main/java/com/bwssystems/HABridge/HABridge.java b/src/main/java/com/bwssystems/HABridge/HABridge.java index 2bd2aaa..5f1be45 100644 --- a/src/main/java/com/bwssystems/HABridge/HABridge.java +++ b/src/main/java/com/bwssystems/HABridge/HABridge.java @@ -102,6 +102,9 @@ public class HABridge { } } } + bridgeSettings.getBridgeSettingsDescriptor().removeTestUsers(); + if(bridgeSettings.getBridgeSettingsDescriptor().isSettingsChanged()) + bridgeSettings.updateConfigFile(); log.info("HA Bridge (v" + theVersion.getVersion() + ") exiting...."); System.exit(0); } diff --git a/src/main/java/com/bwssystems/HABridge/SystemControl.java b/src/main/java/com/bwssystems/HABridge/SystemControl.java index f81d977..ef241c7 100644 --- a/src/main/java/com/bwssystems/HABridge/SystemControl.java +++ b/src/main/java/com/bwssystems/HABridge/SystemControl.java @@ -78,14 +78,6 @@ public class SystemControl { return "{\"version\":\"" + version.getVersion() + "\",\"isSecure\":" + bridgeSettings.getBridgeSecurity().isSecure() + "}"; }); - // http://ip_address:port/system/habridge/testuser gets the valid test user for calling the api - get (SYSTEM_CONTEXT + "/habridge/testuser", (request, response) -> { - log.debug("Get HA Bridge testuser: " + bridgeSettings.getBridgeSettingsDescriptor().getInternalTestUser()); - response.status(HttpStatus.SC_OK); - response.type("application/json"); - return "{\"user\":\"" + bridgeSettings.getBridgeSettingsDescriptor().getInternalTestUser() + "\"}"; - }); - // http://ip_address:port/system/logmsgs gets the log messages for the bridge get (SYSTEM_CONTEXT + "/logmsgs", (request, response) -> { log.debug("Get logmsgs."); diff --git a/src/main/resources/public/scripts/app.js b/src/main/resources/public/scripts/app.js index 69519ad..686f3d7 100644 --- a/src/main/resources/public/scripts/app.js +++ b/src/main/resources/public/scripts/app.js @@ -84,7 +84,6 @@ app.run( async function ($rootScope, $location, Auth, bridgeService) { Auth.init(); if(Auth.isLoggedIn()) { bridgeService.loadBridgeSettings(); - bridgeService.getTestUser(); bridgeService.getSecurityInfo(); bridgeService.viewMapTypes(); $location.path("/"); @@ -237,12 +236,25 @@ app.service ('bridgeService', function ($rootScope, $http, $base64, $location, n }; this.getTestUser = function () { - return $http.get(this.state.systemsbase + "/habridge/testuser").then( + if(self.state.testuser === undefined || self.state.testuser === "") { + return $http.put(this.state.systemsbase + "/presslinkbutton").then( + function (response) { + self.getAUser(); + }, + function (error) { + self.displayWarn("Cannot get testuser: ", error); + } + ); + } + }; + + this.getAUser = function () { + return $http.post(this.state.huebase, "{\"devicetype\":\"test_ha_bridge\"}").then( function (response) { - self.state.testuser = response.data.user; + self.state.testuser = response.data[0].success.username; }, function (error) { - self.displayWarn("Cannot get testuser: ", error); + self.displayWarn("Cannot get a user: ", error); } ); }; @@ -251,6 +263,7 @@ app.service ('bridgeService', function ($rootScope, $http, $base64, $location, n return $http.get(this.state.systemsbase + "/securityinfo").then( function (response) { self.state.securityInfo = response.data; + self.getTestUser(); }, function (error) { self.displayWarn("Cannot get security info: ", error);