@GET @Path("/stop") @Metric(HTTP_START_OTA) public Response stopOTA(@Context ChannelHandlerContext ctx) { User initiator = ctx.channel().attr(AuthHeadersBaseHttpHandler.USER).get(); otaManager.stop(initiator); return ok(); }
@GET @Path("{token}/project") @Metric(HTTP_GET_PROJECT) public Response getDashboard(@PathParam("token") String token) { TokenValue tokenValue = tokenManager.getTokenValueByToken(token); if (tokenValue == null) { log.debug("Requested token {} not found.", token); return badRequest("Invalid token."); } return ok(JsonParser.toJsonRestrictiveDashboardForHTTP(tokenValue.dash)); }
@GET @Path("{token}/data/{pin}") @Metric(HTTP_GET_HISTORY_DATA) public Response getPinHistoryData(@PathParam("token") String token, @PathParam("pin") String pinString) {
@POST @Path("{token}/email") @Consumes(value = MediaType.APPLICATION_JSON) @Metric(HTTP_EMAIL) public Response email(@PathParam("token") String token, EmailPojo message) {
@PUT @Path("{token}/update/{pin}") @Consumes(value = MediaType.APPLICATION_JSON) @Metric(HTTP_UPDATE_PIN_DATA) public Response updateWidgetPinDataNew(@PathParam("token") String token, @PathParam("pin") String pinString, String[] pinValues) { return updateWidgetPinData(token, pinString, pinValues); }
@GET @Path("{token}/rtc") @Metric(HTTP_GET_PIN_DATA) public Response getWidgetPinData(@PathParam("token") String token) { TokenValue tokenValue = tokenManager.getTokenValueByToken(token); if (tokenValue == null) { log.debug("Requested token {} not found.", token); return badRequest("Invalid token."); } User user = tokenValue.user; RTC rtc = tokenValue.dash.getWidgetByType(RTC.class); if (rtc == null) { log.debug("Requested rtc widget not found. User {}", user.email); return badRequest("Requested rtc not exists in app."); } return ok(rtc.getJsonValue()); }
@GET @Path("{token}/clone") @Metric(HTTP_CLONE) public Response getClone(@Context ChannelHandlerContext ctx, @PathParam("token") String token) { blockingIOProcessor.executeDB(() -> { try { String json = dbManager.selectClonedProject(token); //no cloned project in DB, checking local storage on disk if (json == null) { json = fileManager.readClonedProjectFromDisk(token); } if (json == null) { log.debug("Requested QR not found. {}", token); ctx.writeAndFlush(serverError("Requested QR not found."), ctx.voidPromise()); } else { ctx.writeAndFlush(ok(json), ctx.voidPromise()); } } catch (Exception e) { log.error("Error cloning project.", e); ctx.writeAndFlush(serverError("Error getting cloned project."), ctx.voidPromise()); } }); return null; }
@GET @Path("{token}/isAppConnected") @Metric(HTTP_IS_APP_CONNECTED) public Response isAppConnected(@PathParam("token") String token) { TokenValue tokenValue = tokenManager.getTokenValueByToken(token); if (tokenValue == null) { log.debug("Requested token {} not found.", token); return badRequest("Invalid token."); } User user = tokenValue.user; Session session = sessionDao.get(new UserKey(user)); return ok(tokenValue.dash.isActive && session.isAppConnected()); }
@GET @Path("{token}/isHardwareConnected") @Metric(HTTP_IS_HARDWARE_CONNECTED) public Response isHardwareConnected(@PathParam("token") String token) { TokenValue tokenValue = tokenManager.getTokenValueByToken(token); if (tokenValue == null) { log.debug("Requested token {} not found.", token); return badRequest("Invalid token."); } User user = tokenValue.user; int dashId = tokenValue.dash.id; int deviceId = tokenValue.device.id; Session session = sessionDao.get(new UserKey(user)); return ok(session.isHardwareConnected(dashId, deviceId)); }
@GET @Path("{token}/qr") @Metric(HTTP_QR) public Response getQR(@PathParam("token") String token) { TokenValue tokenValue = tokenManager.getTokenValueByToken(token); if (tokenValue == null) { log.debug("Requested token {} not found.", token); return badRequest("Invalid token."); } DashBoard dash = tokenValue.dash; String qrToken = TokenGeneratorUtil.generateNewToken(); String json = JsonParser.toJsonRestrictiveDashboard(dash); blockingIOProcessor.executeDB(() -> { try { boolean insertStatus = dbManager.insertClonedProject(qrToken, json); if (!insertStatus && !fileManager.writeCloneProjectToDisk(qrToken, json)) { log.error("Creating clone project failed for {}", tokenValue.user.email); } } catch (Exception e) { log.error("Error cloning project for {}.", tokenValue.user.email, e); } }); //todo generate QR on client side. String cloneQrString = "blynk://token/clone/" + qrToken + "?server=" + host + "&port=" + httpsPort; byte[] qrDataBinary = QRCode.from(cloneQrString).to(ImageType.PNG).stream().toByteArray(); return ok(qrDataBinary, "image/png"); }
@POST @Path("{token}/notify") @Consumes(value = MediaType.APPLICATION_JSON) @Metric(HTTP_NOTIFY) public Response notify(@PathParam("token") String token, PushMessagePojo message) {
@PUT @Path("{token}/pin/{pin}") @Consumes(value = MediaType.APPLICATION_JSON) @Metric(HTTP_UPDATE_PIN_DATA) public Response updateWidgetPinData(@PathParam("token") String token, @PathParam("pin") String pinString,
@PUT @Path("{token}/extra/pin/{pin}") @Consumes(value = MediaType.APPLICATION_JSON) @Metric(HTTP_UPDATE_PIN_DATA) public Response updateWidgetPinData(@PathParam("token") String token, @PathParam("pin") String pinString,
@GET @Path("/start") @Metric(HTTP_STOP_OTA) public Response startOTA(@QueryParam("fileName") String filename, @QueryParam("token") String token) { TokenValue tokenValue = tokenManager.getTokenValueByToken(token); if (tokenValue == null) { log.debug("Requested token {} not found.", token); return badRequest("Invalid token."); } User user = tokenValue.user; if (user == null) { return badRequest("Invalid auth credentials."); } Session session = sessionDao.get(new UserKey(user)); if (session == null) { log.debug("No session for user {}.", user.email); return badRequest("Device wasn't connected yet."); } String otaFile = OTA_DIR + (filename == null ? "firmware_ota.bin" : filename); String body = OTAInfo.makeHardwareBody(otaManager.serverHostUrl, otaFile); if (session.sendMessageToHardware(BLYNK_INTERNAL, 7777, body)) { log.debug("No device in session."); return badRequest("No device in session."); } tokenValue.device.updateOTAInfo(user.email); return ok(); }
@GET @Path("{token}/get/{pin}") @Metric(HTTP_GET_PIN_DATA) public Response getWidgetPinDataNew(@PathParam("token") String token, @PathParam("pin") String pinString) {
@GET @Path("{token}/update/{pin}") @Consumes(value = MediaType.APPLICATION_JSON) @Metric(HTTP_UPDATE_PIN_DATA) public Response updateWidgetPinDataViaGet(@PathParam("token") String token, @PathParam("pin") String pinString, @QueryParam("value") String[] pinValues, @EnumQueryParam(WidgetProperty.class) AbstractMap.SimpleImmutableEntry<WidgetProperty, String> widgetProperty) { if (pinValues != null) { return updateWidgetPinData(token, pinString, pinValues); } if (widgetProperty != null) { return updateWidgetProperty(token, pinString, widgetProperty.getKey(), widgetProperty.getValue()); } return badRequest("Wrong request format."); }