Search in sources :

Example 1 with JsonTransformer

use of com.bwssystems.HABridge.util.JsonTransformer in project ha-bridge by bwssytems.

the class BridgeSettings method save.

public void save(BridgeSettingsDescriptor newBridgeSettings) {
    log.debug("Save HA Bridge settings.");
    Path configPath = Paths.get(theBridgeSettings.getConfigfile());
    JsonTransformer aRenderer = new JsonTransformer();
    if (bridgeSecurity.isSettingsChanged()) {
        try {
            newBridgeSettings.setSecurityData(bridgeSecurity.getSecurityDescriptorData());
        } catch (UnsupportedEncodingException e) {
            log.warn("could not get encoded security data: " + e.getMessage());
            return;
        } catch (GeneralSecurityException e) {
            log.warn("could not get encoded security data: " + e.getMessage());
            return;
        }
        bridgeSecurity.setSettingsChanged(false);
    }
    String jsonValue = aRenderer.render(newBridgeSettings);
    configWriter(jsonValue, configPath);
    _loadConfig(configPath);
}
Also used : Path(java.nio.file.Path) GeneralSecurityException(java.security.GeneralSecurityException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) JsonTransformer(com.bwssystems.HABridge.util.JsonTransformer)

Example 2 with JsonTransformer

use of com.bwssystems.HABridge.util.JsonTransformer in project ha-bridge by bwssytems.

the class BridgeSettings method updateConfigFile.

public void updateConfigFile() {
    log.debug("Save HA Bridge settings.");
    Path configPath = Paths.get(theBridgeSettings.getConfigfile());
    JsonTransformer aRenderer = new JsonTransformer();
    if (bridgeSecurity.isSettingsChanged()) {
        try {
            theBridgeSettings.setSecurityData(bridgeSecurity.getSecurityDescriptorData());
        } catch (UnsupportedEncodingException e) {
            log.warn("could not get encoded security data: " + e.getMessage());
            return;
        } catch (GeneralSecurityException e) {
            log.warn("could not get encoded security data: " + e.getMessage());
            return;
        }
        bridgeSecurity.setSettingsChanged(false);
    }
    String jsonValue = aRenderer.render(theBridgeSettings);
    configWriter(jsonValue, configPath);
    _loadConfig(configPath);
}
Also used : Path(java.nio.file.Path) GeneralSecurityException(java.security.GeneralSecurityException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) JsonTransformer(com.bwssystems.HABridge.util.JsonTransformer)

Example 3 with JsonTransformer

use of com.bwssystems.HABridge.util.JsonTransformer in project ha-bridge by bwssytems.

the class HueMulator method setupServer.

// This function sets up the sparkjava rest calls for the hue api
public void setupServer() {
    log.info("Hue emulator service started....");
    before(HUE_CONTEXT + "/*", (request, response) -> {
        log.debug("HueMulator GET called on api/* with request <" + request.pathInfo() + ">");
        if (bridgeSettingMaster.getBridgeSecurity().isSecure()) {
            String pathInfo = request.pathInfo();
            if (pathInfo != null && pathInfo.contains(HUE_CONTEXT + "/devices")) {
                User authUser = bridgeSettingMaster.getBridgeSecurity().getAuthenticatedUser(request);
                if (authUser == null) {
                    halt(401, "{\"message\":\"User not authenticated\"}");
                }
            } else if (bridgeSettingMaster.getBridgeSecurity().isSecureHueApi()) {
                User authUser = bridgeSettingMaster.getBridgeSecurity().getAuthenticatedUser(request);
                if (authUser == null) {
                    halt(401, "{\"message\":\"User not authenticated\"}");
                }
            }
        }
    });
    // http://ip_address:port/api/{userId}/groups returns json objects of
    // all groups configured
    get(HUE_CONTEXT + "/:userid/groups", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return groupsListHandler(request.params(":userid"), request.ip());
    }, new JsonTransformer());
    // http://ip_address:port/api/{userId}/groups/{groupId} returns json
    // object for specified group. Only 0 is supported
    get(HUE_CONTEXT + "/:userid/groups/:groupid", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return groupsIdHandler(request.params(":groupid"), request.params(":userid"), request.ip());
    }, new JsonTransformer());
    // http://ip_address:port/:userid/groups CORS request
    options(HUE_CONTEXT + "/:userid/groups", "application/json", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html");
        return "";
    });
    // http://ip_address:port/:userid/groups
    // dummy handler
    post(HUE_CONTEXT + "/:userid/groups", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        log.debug("group add requested from " + request.ip() + " user " + request.params(":userid") + " with body " + request.body());
        return "[{\"success\":{\"id\":\"1\"}}]";
    });
    // http://ip_address:port/api/:userid/groups/<groupid>/action
    // Dummy handler
    // Error forces Logitech Pop to fall back to individual light control
    // instead of scene-based control.
    put(HUE_CONTEXT + "/:userid/groups/:groupid/action", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        log.debug("put action to groups API from " + request.ip() + " user " + request.params(":userid") + " with body " + request.body());
        return "[{\"error\":{\"address\": \"/groups/0/action/scene\", \"type\":7, \"description\": \"invalid value, dummy for parameter, scene\"}}]";
    });
    // http://ip_address:port/api/{userId}/scenes returns json objects of
    // all scenes configured
    get(HUE_CONTEXT + "/:userid/scenes", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return basicListHandler("scenes", request.params(":userid"), request.ip());
    });
    // http://ip_address:port/:userid/scenes CORS request
    options(HUE_CONTEXT + "/:userid/scenes", "application/json", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html");
        return "";
    });
    // http://ip_address:port/:userid/scenes
    // dummy handler
    post(HUE_CONTEXT + "/:userid/scenes", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        log.debug("scene add requested from " + request.ip() + " user " + request.params(":userid") + " with body " + request.body());
        return "[{\"success\":{\"id\":\"1\"}}]";
    });
    // http://ip_address:port/api/{userId}/schedules returns json objects of
    // all schedules configured
    get(HUE_CONTEXT + "/:userid/schedules", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return basicListHandler("schedules", request.params(":userid"), request.ip());
    });
    // http://ip_address:port/:userid/schedules CORS request
    options(HUE_CONTEXT + "/:userid/schedules", "application/json", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html");
        return "";
    });
    // http://ip_address:port/:userid/schedules
    // dummy handler
    post(HUE_CONTEXT + "/:userid/schedules", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        log.debug("schedules add requested from " + request.ip() + " user " + request.params(":userid") + " with body " + request.body());
        return "[{\"success\":{\"id\":\"1\"}}]";
    });
    // http://ip_address:port/api/{userId}/sensors returns json objects of
    // all sensors configured
    get(HUE_CONTEXT + "/:userid/sensors", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return basicListHandler("sensors", request.params(":userid"), request.ip());
    });
    // http://ip_address:port/:userid/sensors CORS request
    options(HUE_CONTEXT + "/:userid/sensors", "application/json", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html");
        return "";
    });
    // http://ip_address:port/:userid/sensors
    // dummy handler
    post(HUE_CONTEXT + "/:userid/sensors", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        log.debug("sensors add requested from " + request.ip() + " user " + request.params(":userid") + " with body " + request.body());
        return "[{\"success\":{\"id\":\"1\"}}]";
    });
    // http://ip_address:port/api/{userId}/rules returns json objects of all
    // rules configured
    get(HUE_CONTEXT + "/:userid/rules", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return basicListHandler("rules", request.params(":userid"), request.ip());
    });
    // http://ip_address:port/:userid/rules CORS request
    options(HUE_CONTEXT + "/:userid/rules", "application/json", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html");
        return "";
    });
    // http://ip_address:port/:userid/rules
    // dummy handler
    post(HUE_CONTEXT + "/:userid/rules", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        log.debug("rules add requested from " + request.ip() + " user " + request.params(":userid") + " with body " + request.body());
        return "[{\"success\":{\"id\":\"1\"}}]";
    });
    // http://ip_address:port/api/{userId}/resourcelinks returns json
    // objects of all resourcelinks configured
    get(HUE_CONTEXT + "/:userid/resourcelinks", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return basicListHandler("resourcelinks", request.params(":userid"), request.ip());
    });
    // http://ip_address:port/:userid/resourcelinks CORS request
    options(HUE_CONTEXT + "/:userid/resourcelinks", "application/json", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html");
        return "";
    });
    // http://ip_address:port/:userid/resourcelinks
    // dummy handler
    post(HUE_CONTEXT + "/:userid/resourcelinks", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        log.debug("resourcelinks add requested from " + request.ip() + " user " + request.params(":userid") + " with body " + request.body());
        return "[{\"success\":{\"id\":\"1\"}}]";
    });
    // http://ip_address:port/api/{userId}/lights returns json objects of
    // all lights configured
    get(HUE_CONTEXT + "/:userid/lights", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return lightsListHandler(request.params(":userid"), request.ip());
    }, new JsonTransformer());
    // http://ip_address:port/api/{userId}/lights/ returns json objects of
    // all lights configured
    get(HUE_CONTEXT + "/:userid/lights/", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return lightsListHandler(request.params(":userid"), request.ip());
    }, new JsonTransformer());
    // http://ip_address:port/api CORS request
    options(HUE_CONTEXT, "application/json", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html");
        return "";
    });
    // http://ip_address:port/api with body of user request returns json
    // object for a success of user add
    post(HUE_CONTEXT, "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return userAdd(request.body(), request.ip(), false);
    });
    // http://ip_address:port/api/* CORS request
    options(HUE_CONTEXT + "/*", "application/json", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html");
        return "";
    });
    // http://ip_address:port/api/* with body of user request returns json
    // object for a success of user add - This method is for Harmony Hub
    post(HUE_CONTEXT + "/*", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return userAdd(request.body(), request.ip(), true);
    });
    // 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) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return getConfig(null, request.ip());
    }, new JsonTransformer());
    // http://ip_address:port/api/{userId}/config returns json objects for
    // the config
    get(HUE_CONTEXT + "/:userid/config", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return getConfig(request.params(":userid"), request.ip());
    }, new JsonTransformer());
    // http://ip_address:port/:userid/config CORS request
    options(HUE_CONTEXT + "/:userid/config", "application/json", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html");
        return "";
    });
    // http://ip_address:port/:userid/config uses json
    // object to set the config. this is to handle swupdates
    put(HUE_CONTEXT + "/:userid/config", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        log.debug("Config change requested from " + request.ip() + " user " + request.params(":userid") + " with body " + request.body());
        HueConfig aConfig = aGsonHandler.fromJson(request.body(), HueConfig.class);
        if (aConfig.getPortalservices() != null) {
            return "[{\"success\":{\"/config/portalservices\":true}}]";
        }
        return "[{\"success\":{\"/config/name\":\"My bridge\"}}]";
    });
    // http://ip_address:port/api/{userId} returns json objects for the full
    // state
    get(HUE_CONTEXT + "/:userid", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return getFullState(request.params(":userid"), request.ip());
    }, new JsonTransformer());
    // http://ip_address:port/api/{userId}/ returns json objects for the full
    // state
    get(HUE_CONTEXT + "/:userid/", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return getFullState(request.params(":userid"), request.ip());
    }, new JsonTransformer());
    // http://ip_address:port/api/{userId}/lights/{lightId} returns json
    // object for a given light
    get(HUE_CONTEXT + "/:userid/lights/:id", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return getLight(request.params(":userid"), request.params(":id"), request.ip());
    }, new JsonTransformer());
    // http://ip_address:port/api/:userid/lights/:id/bridgeupdatestate CORS
    // request
    options(HUE_CONTEXT + "/:userid/lights/:id/bridgeupdatestate", "application/json", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html");
        return "";
    });
    // http://ip_address:port/api/{userId}/lights/{lightId}/bridgeupdatestate
    // uses json object to update the internal bridge lights state.
    // THIS IS NOT A HUE API CALL... It is for state management if so
    // desired.
    put(HUE_CONTEXT + "/:userid/lights/:id/bridgeupdatestate", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return updateState(request.params(":userid"), request.params(":id"), request.body(), request.ip());
    });
    // http://ip_address:port/api/:userid/lights/:id/state CORS request
    options(HUE_CONTEXT + "/:userid/lights/:id/state", "application/json", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html");
        return "";
    });
    // http://ip_address:port/api/{userId}/lights/{lightId}/state uses json
    // object to set the lights state
    put(HUE_CONTEXT + "/:userid/lights/:id/state", "application/json", (request, response) -> {
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.type("application/json");
        response.status(HttpStatus.SC_OK);
        return changeState(request.params(":userid"), request.params(":id"), request.body(), request.ip());
    });
}
Also used : User(com.bwssystems.HABridge.User) HueConfig(com.bwssystems.HABridge.api.hue.HueConfig) JsonTransformer(com.bwssystems.HABridge.util.JsonTransformer)

Example 4 with JsonTransformer

use of com.bwssystems.HABridge.util.JsonTransformer in project ha-bridge by bwssytems.

the class SystemControl method setupServer.

//	This function sets up the sparkjava rest calls for the hue api
public void setupServer() {
    log.info("System control service started....");
    before(SYSTEM_CONTEXT + "/*", (request, response) -> {
        if (bridgeSettings.getBridgeSecurity().isSecure()) {
            String pathInfo = request.pathInfo();
            if (pathInfo == null || (!pathInfo.equals(SYSTEM_CONTEXT + "/login") && !pathInfo.equals(SYSTEM_CONTEXT + "/habridge/version"))) {
                User authUser = bridgeSettings.getBridgeSecurity().getAuthenticatedUser(request);
                if (authUser == null) {
                    halt(401, "{\"message\":\"User not authenticated\"}");
                }
            }
        }
    });
    // http://ip_address:port/system/habridge/version gets the version of this bridge instance
    get(SYSTEM_CONTEXT + "/habridge/version", (request, response) -> {
        log.debug("Get HA Bridge version: v" + version.getVersion());
        response.status(HttpStatus.SC_OK);
        response.type("application/json");
        return "{\"version\":\"" + version.getVersion() + "\",\"isSecure\":" + bridgeSettings.getBridgeSecurity().isSecure() + "}";
    });
    // http://ip_address:port/system/logmsgs gets the log messages for the bridge
    get(SYSTEM_CONTEXT + "/logmsgs", (request, response) -> {
        log.debug("Get logmsgs.");
        String logMsgs;
        int count = -1;
        if (cyclicBufferAppender == null)
            reacquireCBA();
        if (cyclicBufferAppender != null) {
            count = cyclicBufferAppender.getLength();
        }
        logMsgs = "[";
        if (count == -1) {
            logMsgs = logMsgs + "{\"message\":\"Failed to locate CyclicBuffer\"}";
        } else if (count == 0) {
            logMsgs = logMsgs + "{\"message\":\"No logging events to display\"}";
        } else {
            LoggingEvent le;
            for (int i = 0; i < count; i++) {
                le = (LoggingEvent) cyclicBufferAppender.get(i);
                logMsgs = logMsgs + (i > 0 ? ",{" : "{") + "\"time\":\"" + dateFormat.format(le.getTimeStamp()) + "\",\"level\":\"" + le.getLevel().levelStr + "\",\"component\":\"" + le.getLoggerName() + "\",\"message\":\"" + TextStringFormatter.forJSON(le.getFormattedMessage()) + "\"}";
            }
        }
        logMsgs = logMsgs + "]";
        response.status(HttpStatus.SC_OK);
        response.type("application/json");
        return logMsgs;
    });
    // http://ip_address:port/system/logmgmt/loggers gets the logger info for the bridge
    get(SYSTEM_CONTEXT + "/logmgmt/loggers/:all", (request, response) -> {
        log.debug("Get loggers info with showAll argument: " + request.params(":all"));
        Boolean showAll = false;
        if (request.params(":all").equals("true"))
            showAll = true;
        theLogServiceMgr.setShowAll(showAll);
        theLogServiceMgr.init();
        response.status(HttpStatus.SC_OK);
        response.type("application/json");
        return theLogServiceMgr.getConfiguredLoggers();
    }, new JsonTransformer());
    //      http://ip_address:port/system/setpassword CORS request
    options(SYSTEM_CONTEXT + "/setpassword", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html; charset=utf-8");
        return "";
    });
    //      http://ip_address:port/system/setpassword which sets a password for a given user
    post(SYSTEM_CONTEXT + "/setpassword", (request, response) -> {
        log.debug("setpassword....");
        String theDecodedPayload = new String(Base64.getDecoder().decode(request.body()));
        User theUser = new Gson().fromJson(theDecodedPayload, User.class);
        String errorMessage = bridgeSettings.getBridgeSecurity().setPassword(theUser);
        if (errorMessage != null) {
            response.status(HttpStatus.SC_BAD_REQUEST);
            errorMessage = "{\"message\":\"" + errorMessage + "\"}";
        } else {
            response.status(HttpStatus.SC_OK);
            bridgeSettings.save(bridgeSettings.getBridgeSettingsDescriptor());
        }
        if (errorMessage == null)
            errorMessage = "{}";
        response.type("application/json");
        return errorMessage;
    });
    //      http://ip_address:port/system/adduser CORS request
    options(SYSTEM_CONTEXT + "/adduser", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html; charset=utf-8");
        return "";
    });
    //      http://ip_address:port/system/adduser which adds a new user
    put(SYSTEM_CONTEXT + "/adduser", (request, response) -> {
        log.debug("adduser....");
        String theDecodedPayload = new String(Base64.getDecoder().decode(request.body()));
        User theUser = new Gson().fromJson(theDecodedPayload, User.class);
        String errorMessage = theUser.validate();
        if (errorMessage != null) {
            response.status(HttpStatus.SC_BAD_REQUEST);
            errorMessage = "{\"message\":\"" + errorMessage + "\"}";
        } else {
            errorMessage = bridgeSettings.getBridgeSecurity().addUser(theUser);
            if (errorMessage == null) {
                response.status(HttpStatus.SC_OK);
                bridgeSettings.save(bridgeSettings.getBridgeSettingsDescriptor());
            } else {
                response.status(HttpStatus.SC_BAD_REQUEST);
                errorMessage = "{\"message\":\"" + errorMessage + "\"}";
            }
        }
        if (errorMessage == null)
            errorMessage = "{}";
        response.type("application/json");
        return errorMessage;
    });
    //      http://ip_address:port/system/deluser CORS request
    options(SYSTEM_CONTEXT + "/deluser", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html; charset=utf-8");
        return "";
    });
    //      http://ip_address:port/system/deluser which dels a user
    put(SYSTEM_CONTEXT + "/deluser", (request, response) -> {
        log.debug("deluser....");
        String theDecodedPayload = new String(Base64.getDecoder().decode(request.body()));
        User theUser = new Gson().fromJson(theDecodedPayload, User.class);
        String errorMessage = bridgeSettings.getBridgeSecurity().delUser(theUser);
        if (errorMessage != null) {
            response.status(HttpStatus.SC_BAD_REQUEST);
            errorMessage = "{\"message\":\"" + errorMessage + "\"}";
        } else {
            response.status(HttpStatus.SC_OK);
            bridgeSettings.save(bridgeSettings.getBridgeSettingsDescriptor());
        }
        if (errorMessage == null)
            errorMessage = "{}";
        response.type("application/json");
        return errorMessage;
    });
    //      http://ip_address:port/system/login CORS request
    options(SYSTEM_CONTEXT + "/login", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html; charset=utf-8");
        return "";
    });
    //      http://ip_address:port/system/login validates the login
    post(SYSTEM_CONTEXT + "/login", (request, response) -> {
        log.debug("login....");
        String theDecodedPayload = new String(Base64.getDecoder().decode(request.body()));
        User theUser = new Gson().fromJson(theDecodedPayload, User.class);
        LoginResult result = bridgeSettings.getBridgeSecurity().validatePassword(theUser);
        if (result.getUser() != null)
            bridgeSettings.getBridgeSecurity().addAuthenticatedUser(request, theUser);
        response.status(HttpStatus.SC_OK);
        response.type("application/json");
        return result;
    }, new JsonTransformer());
    //      http://ip_address:port/system/presslinkbutton CORS request
    options(SYSTEM_CONTEXT + "/presslinkbutton", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html; charset=utf-8");
        return "";
    });
    //      http://ip_address:port/system/presslinkbutton which sets the link button for device registration
    put(SYSTEM_CONTEXT + "/presslinkbutton", (request, response) -> {
        log.info("Link button pressed....");
        bridgeSettings.getBridgeControl().setLinkButton(true);
        Timer theTimer = new Timer();
        theTimer.schedule(new LinkButtonPressed(bridgeSettings.getBridgeControl(), theTimer), 30000);
        response.status(HttpStatus.SC_OK);
        response.type("application/json");
        return "";
    }, new JsonTransformer());
    // http://ip_address:port/system/securityinfo gets the security info for the bridge
    get(SYSTEM_CONTEXT + "/securityinfo", (request, response) -> {
        log.debug("Get security info");
        response.status(HttpStatus.SC_OK);
        response.type("application/json");
        return bridgeSettings.getBridgeSecurity().getSecurityInfo();
    }, new JsonTransformer());
    //      http://ip_address:port/system/changesecurityinfo CORS request
    options(SYSTEM_CONTEXT + "/changesecurityinfo", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html; charset=utf-8");
        return "";
    });
    //      http://ip_address:port/system/changesecurityinfo which sets the security settings other than passwords and users
    post(SYSTEM_CONTEXT + "/changesecurityinfo", (request, response) -> {
        log.debug("changesecurityinfo....");
        SecurityInfo theInfo = new Gson().fromJson(request.body(), SecurityInfo.class);
        bridgeSettings.getBridgeSecurity().setUseLinkButton(theInfo.isUseLinkButton());
        bridgeSettings.getBridgeSecurity().setSecureHueApi(theInfo.isSecureHueApi());
        bridgeSettings.save(bridgeSettings.getBridgeSettingsDescriptor());
        response.status(HttpStatus.SC_OK);
        response.type("application/json");
        return bridgeSettings.getBridgeSecurity().getSecurityInfo();
    }, new JsonTransformer());
    //      http://ip_address:port/system/logmgmt/update CORS request
    options(SYSTEM_CONTEXT + "/logmgmt/update", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html; charset=utf-8");
        return "";
    });
    //      http://ip_address:port/system/logmgmt/update which changes logging parameters for the process
    put(SYSTEM_CONTEXT + "/logmgmt/update", (request, response) -> {
        log.debug("update loggers: " + request.body());
        LoggerInfo[] updateLoggers;
        updateLoggers = new Gson().fromJson(request.body(), LoggerInfo[].class);
        LoggingForm theModel = theLogServiceMgr.getModel();
        theModel.setUpdatedLoggers(Arrays.asList(updateLoggers));
        theLogServiceMgr.updateLogLevels();
        response.status(HttpStatus.SC_OK);
        response.type("application/json");
        return theLogServiceMgr.getConfiguredLoggers();
    }, new JsonTransformer());
    //      http://ip_address:port/system/settings which returns the bridge configuration settings
    get(SYSTEM_CONTEXT + "/settings", (request, response) -> {
        log.debug("bridge settings requested from " + request.ip());
        response.status(HttpStatus.SC_OK);
        response.type("application/json");
        return bridgeSettings.getBridgeSettingsDescriptor();
    }, new JsonTransformer());
    //      http://ip_address:port/system/settings CORS request
    options(SYSTEM_CONTEXT + "/settings", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html; charset=utf-8");
        return "";
    });
    //      http://ip_address:port/system/settings which returns the bridge configuration settings
    put(SYSTEM_CONTEXT + "/settings", (request, response) -> {
        log.debug("save bridge settings requested from " + request.ip() + " with body: " + request.body());
        BridgeSettingsDescriptor newBridgeSettings = new Gson().fromJson(request.body(), BridgeSettingsDescriptor.class);
        bridgeSettings.save(newBridgeSettings);
        response.status(HttpStatus.SC_OK);
        response.type("application/json");
        return bridgeSettings.getBridgeSettingsDescriptor();
    }, new JsonTransformer());
    // http://ip_address:port/system/control/reinit CORS request
    options(SYSTEM_CONTEXT + "/control/reinit", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html; charset=utf-8");
        return "";
    });
    // http://ip_address:port/system/control/reinit sets the parameter reinit the server
    put(SYSTEM_CONTEXT + "/control/reinit", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.type("application/json");
        return reinit();
    });
    // http://ip_address:port/system/control/stop CORS request
    options(SYSTEM_CONTEXT + "/control/stop", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "GET, POST, PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html; charset=utf-8");
        return "";
    });
    // http://ip_address:port/system/control/stop sets the parameter stop the server
    put(SYSTEM_CONTEXT + "/control/stop", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.type("application/json");
        return stop();
    });
    // http://ip_address:port/system/backup/available returns a list of config backup filenames
    get(SYSTEM_CONTEXT + "/backup/available", (request, response) -> {
        log.debug("Get backup filenames");
        response.status(HttpStatus.SC_OK);
        response.type("application/json");
        return bridgeSettings.getBackups();
    }, new JsonTransformer());
    // http://ip_address:port/system/backup/create CORS request
    options(SYSTEM_CONTEXT + "/backup/create", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "PUT");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html; charset=utf-8");
        return "";
    });
    put(SYSTEM_CONTEXT + "/backup/create", (request, response) -> {
        log.debug("Create backup: " + request.body());
        BackupFilename aFilename = new Gson().fromJson(request.body(), BackupFilename.class);
        BackupFilename returnFilename = new BackupFilename();
        returnFilename.setFilename(bridgeSettings.backup(aFilename.getFilename()));
        response.status(HttpStatus.SC_OK);
        response.type("application/json");
        return returnFilename;
    }, new JsonTransformer());
    // http://ip_address:port/system/backup/delete CORS request
    options(SYSTEM_CONTEXT + "/backup/delete", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "POST");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html; charset=utf-8");
        return "";
    });
    post(SYSTEM_CONTEXT + "/backup/delete", (request, response) -> {
        log.debug("Delete backup: " + request.body());
        BackupFilename aFilename = new Gson().fromJson(request.body(), BackupFilename.class);
        if (aFilename != null)
            bridgeSettings.deleteBackup(aFilename.getFilename());
        else
            log.warn("No filename given for delete backup.");
        response.status(HttpStatus.SC_OK);
        response.type("application/json");
        return "";
    }, new JsonTransformer());
    // http://ip_address:port/system/backup/restore CORS request
    options(SYSTEM_CONTEXT + "/backup/restore", (request, response) -> {
        response.status(HttpStatus.SC_OK);
        response.header("Access-Control-Allow-Origin", request.headers("Origin"));
        response.header("Access-Control-Allow-Methods", "POST");
        response.header("Access-Control-Allow-Headers", request.headers("Access-Control-Request-Headers"));
        response.header("Content-Type", "text/html; charset=utf-8");
        return "";
    });
    post(SYSTEM_CONTEXT + "/backup/restore", (request, response) -> {
        log.debug("Restore backup: " + request.body());
        BackupFilename aFilename = new Gson().fromJson(request.body(), BackupFilename.class);
        if (aFilename != null) {
            bridgeSettings.restoreBackup(aFilename.getFilename());
            bridgeSettings.loadConfig();
        } else
            log.warn("No filename given for restore backup.");
        response.status(HttpStatus.SC_OK);
        response.type("application/json");
        return bridgeSettings.getBridgeSettingsDescriptor();
    }, new JsonTransformer());
}
Also used : BackupFilename(com.bwssystems.HABridge.dao.BackupFilename) Gson(com.google.gson.Gson) LoggerInfo(com.bwssystems.logservices.LoggerInfo) LoggingForm(com.bwssystems.logservices.LoggingForm) ILoggingEvent(ch.qos.logback.classic.spi.ILoggingEvent) LoggingEvent(ch.qos.logback.classic.spi.LoggingEvent) Timer(java.util.Timer) JsonTransformer(com.bwssystems.HABridge.util.JsonTransformer)

Example 5 with JsonTransformer

use of com.bwssystems.HABridge.util.JsonTransformer in project ha-bridge by bwssytems.

the class DeviceRepository method delete.

public String delete(DeviceDescriptor aDescriptor) {
    if (aDescriptor != null) {
        devices.remove(aDescriptor.getId());
        JsonTransformer aRenderer = new JsonTransformer();
        String jsonValue = aRenderer.render(findAll());
        repositoryWriter(jsonValue, repositoryPath);
        return "Device with id '" + aDescriptor.getId() + "' deleted";
    } else {
        return "Device not found";
    }
}
Also used : JsonTransformer(com.bwssystems.HABridge.util.JsonTransformer)

Aggregations

JsonTransformer (com.bwssystems.HABridge.util.JsonTransformer)6 User (com.bwssystems.HABridge.User)2 BackupFilename (com.bwssystems.HABridge.dao.BackupFilename)2 Gson (com.google.gson.Gson)2 UnsupportedEncodingException (java.io.UnsupportedEncodingException)2 Path (java.nio.file.Path)2 GeneralSecurityException (java.security.GeneralSecurityException)2 ILoggingEvent (ch.qos.logback.classic.spi.ILoggingEvent)1 LoggingEvent (ch.qos.logback.classic.spi.LoggingEvent)1 DeviceMapTypes (com.bwssystems.HABridge.DeviceMapTypes)1 CallItem (com.bwssystems.HABridge.api.CallItem)1 HueConfig (com.bwssystems.HABridge.api.hue.HueConfig)1 DeviceDescriptor (com.bwssystems.HABridge.dao.DeviceDescriptor)1 ErrorMessage (com.bwssystems.HABridge.dao.ErrorMessage)1 LoggerInfo (com.bwssystems.logservices.LoggerInfo)1 LoggingForm (com.bwssystems.logservices.LoggingForm)1 JsonSyntaxException (com.google.gson.JsonSyntaxException)1 Timer (java.util.Timer)1