@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); }
parameter.getAnnotation(cc.blynk.core.http.annotation.PathParam.class); if (pathParamAnnotation != null) { return new PathParam(pathParamAnnotation.value(), parameter.getType());
@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)); }
@PUT @Consumes(value = MediaType.APPLICATION_JSON) @Path("/{name}") public Response updateConfig(@PathParam("name") String name, Config updatedConfig) { log.info("Updating config {}. New body : ", name); log.info("{}", updatedConfig.body); switch (name) { case TOKEN_MAIL_BODY: textHolder.tokenBody = updatedConfig.body; break; case SERVER_PROPERTIES_FILENAME : Properties properties = readPropertiesFromString(updatedConfig.body); serverProperties.putAll(properties); break; } return ok(updatedConfig.toString()); }
@Consumes(value = MediaType.APPLICATION_JSON) @Metric(HTTP_EMAIL) public Response email(@PathParam("token") String token, EmailPojo message) {
@GET @Path("/{id}") public Response getUserByName(@PathParam("id") String id) { String[] parts = slitByLast(id); String email = parts[0]; String appName = parts[1]; User user = userDao.getByName(email, appName); if (user == null) { return notFound(); } return ok(user); }
@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; }
@PUT @Consumes(value = MediaType.APPLICATION_JSON) @Path("/{id}") public Response updateUser(@PathParam("id") String id, User updatedUser) {
@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}/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."); }
@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"); }
@Consumes(value = MediaType.APPLICATION_JSON) @Metric(HTTP_NOTIFY) public Response notify(@PathParam("token") String token, PushMessagePojo message) {
@DELETE @Path("/{id}") public Response deleteUserByName(@PathParam("id") String id) { String[] parts = slitByLast(id); String email = parts[0]; String appName = parts[1]; UserKey userKey = new UserKey(email, appName); User user = userDao.delete(userKey); if (user == null) { return notFound(); } if (!fileManager.delete(email, appName)) { return notFound(); } reportingDao.delete(user); dbManager.deleteUser(userKey); Session session = sessionDao.userSession.remove(userKey); if (session != null) { session.closeAll(); } log.info("User {} successfully removed.", email); return ok(); }
@GET @Path("/{name}") public Response getConfigByName(@PathParam("name") String name) { switch (name) { case TOKEN_MAIL_BODY : return ok(new Config(name, textHolder.tokenBody).toString()); case SERVER_PROPERTIES_FILENAME : return ok(new Config(name, serverProperties).toString()); case MAIL_PROPERTIES_FILENAME : return ok(new Config(name, new MailProperties(Collections.emptyMap())).toString()); case GCM_PROPERTIES_FILENAME : return ok(new Config(name, new GCMProperties(Collections.emptyMap())).toString()); case TWITTER_PROPERTIES_FILENAME : return ok(new Config(name, new TwitterProperties(Collections.emptyMap())).toString()); default : return badRequest(); } }