public Version(String osString, String versionString) { this(OsType.parse(osString), parseToSingleInt(versionString)); }
@Override protected void channelRead0(ChannelHandlerContext ctx, LoginMessage message) { String[] messageParts = message.body.split(BODY_SEPARATOR_STRING); if (messageParts.length < 2) { log.error("Wrong income message format."); ctx.writeAndFlush(illegalCommand(message.id), ctx.voidPromise()); return; } ///.trim() is not used for back compatibility String email = messageParts[0].toLowerCase(); Version version = messageParts.length > 3 ? new Version(messageParts[2], messageParts[3]) : Version.UNKNOWN_VERSION; if (messageParts.length == 5) { if (AppNameUtil.FACEBOOK.equals(messageParts[4])) { facebookLogin(ctx, message.id, email, messageParts[1], version); } else { String appName = messageParts[4]; blynkLogin(ctx, message.id, email, messageParts[1], version, appName); } } else { //todo this is for back compatibility blynkLogin(ctx, message.id, email, messageParts[1], version, AppNameUtil.BLYNK); } }
/** * Expecting only strings like "1.2.2" */ private static int parseToSingleInt(String version) { try { var parts = split3('.', version); return parse(parts); } catch (Exception e) { log.debug("Error parsing app versionSingleNumber {}. Reason : {}.", version, e.getMessage()); } return 0; }
private void login(ChannelHandlerContext ctx, int messageId, User user, Version version) { var pipeline = (DefaultChannelPipeline) ctx.pipeline(); cleanPipeline(pipeline); var appStateHolder = new MobileStateHolder(user, version); pipeline.addLast("AAppHandler", new MobileHandler(holder, appStateHolder)); var channel = ctx.channel(); //todo back compatibility code. remove in future. if (user.region == null || user.region.isEmpty()) { user.region = holder.props.region; } var session = holder.sessionDao.getOrCreateSessionByUser(appStateHolder.userKey, channel.eventLoop()); if (session.isSameEventLoop(channel)) { completeLogin(channel, session, user, messageId, version); } else { log.debug("Re registering app channel. {}", ctx.channel()); ReregisterChannelUtil.reRegisterChannel(ctx, session, channelFuture -> completeLogin(channelFuture.channel(), session, user, messageId, version)); } }
var registerHandler = new MobileRegisterHandler(holder); MobileLoginHandler appLoginHandler = new MobileLoginHandler(holder); var appShareLoginHandler = new MobileShareLoginHandler(holder); var userNotLoggedHandler = new UserNotLoggedHandler(); var getServerHandler = new MobileGetServerHandler(holder); var resetPasswordHandler = new MobileResetPasswordHandler(holder);
public static void processDeviceSelectorCommand(ChannelHandlerContext ctx, Session session, Profile profile, DashBoard dash, StringMessage message, String[] splitBody) { //in format "vu 200000 1" long widgetId = Long.parseLong(splitBody[1]); Widget deviceSelector = dash.getWidgetByIdOrThrow(widgetId); if (deviceSelector instanceof DeviceSelector) { int selectedDeviceId = Integer.parseInt(splitBody[2]); ((DeviceSelector) deviceSelector).value = selectedDeviceId; ctx.write(ok(message.id), ctx.voidPromise()); //sending to shared dashes and master-master apps session.sendToSharedApps(ctx.channel(), dash.sharedToken, APP_SYNC, message.id, message.body); //we need to send syncs not only to main app, but all to all shared apps for (Channel channel : session.appChannels) { MobileStateHolder mobileStateHolder = getAppState(channel); if (mobileStateHolder != null && mobileStateHolder.contains(dash.sharedToken)) { boolean isNewSyncFormat = mobileStateHolder.isNewSyncFormat(); profile.sendAppSyncs(dash, channel, selectedDeviceId, isNewSyncFormat); } channel.flush(); } } }
public static void messageReceived(ChannelHandlerContext ctx, MobileStateHolder state, StringMessage message) { String[] dashIdAndTargetIdString = split2Device(message.body); int dashId = Integer.parseInt(dashIdAndTargetIdString[0]); int targetId = MobileSyncWidget.ANY_TARGET; User user = state.user; DashBoard dash = user.profile.getDashByIdOrThrow(dashId); if (dashIdAndTargetIdString.length == 2) { targetId = Integer.parseInt(dashIdAndTargetIdString[1]); } ctx.write(ok(message.id), ctx.voidPromise()); Channel appChannel = ctx.channel(); MobileStateHolder mobileStateHolder = getAppState(appChannel); boolean isNewSyncFormat = mobileStateHolder != null && mobileStateHolder.isNewSyncFormat(); user.profile.sendAppSyncs(dash, appChannel, targetId, isNewSyncFormat); ctx.flush(); }
private void blynkLogin(ChannelHandlerContext ctx, int msgId, String email, String pass, Version version, String appName) { var user = holder.userDao.getByName(email, appName); if (user == null) { log.warn("User '{}' not registered. {}", email, ctx.channel().remoteAddress()); ctx.writeAndFlush(notRegistered(msgId), ctx.voidPromise()); return; } if (user.pass == null) { log.warn("Facebook user '{}' tries to login with pass. {}", email, ctx.channel().remoteAddress()); ctx.writeAndFlush(facebookUserLoginWithPass(msgId), ctx.voidPromise()); return; } if (!user.pass.equals(pass)) { log.warn("User '{}' credentials are wrong. {}", email, ctx.channel().remoteAddress()); ctx.writeAndFlush(notAuthenticated(msgId), ctx.voidPromise()); return; } login(ctx, msgId, user, version); }
@Override protected void channelRead0(ChannelHandlerContext ctx, ShareLoginMessage message) { String[] messageParts = message.body.split(StringUtils.BODY_SEPARATOR_STRING); if (messageParts.length < 2) { log.error("Wrong income message format."); ctx.writeAndFlush(illegalCommand(message.id), ctx.voidPromise()); } else { //var uid = messageParts.length == 5 ? messageParts[4] : null; var version = messageParts.length > 3 ? new Version(messageParts[2], messageParts[3]) : Version.UNKNOWN_VERSION; appLogin(ctx, message.id, messageParts[0], messageParts[1], version); } }
private void completeLogin(Channel channel, Session session, User user, int msgId, Version version) { if (allowStoreIp) { user.lastLoggedIP = IPUtils.getIp(channel.remoteAddress()); } user.lastLoggedAt = System.currentTimeMillis(); session.addAppChannel(channel); channel.writeAndFlush(ok(msgId), channel.voidPromise()); for (DashBoard dashBoard : user.profile.dashBoards) { if (dashBoard.isAppConnectedOn && dashBoard.isActive) { log.trace("{}-{}. Sending App Connected event to hardware for project {}.", user.email, user.appName, dashBoard.id); session.sendMessageToHardware(dashBoard.id, BLYNK_INTERNAL, 7777, "acon"); } } if (version.isOutdated()) { channel.writeAndFlush( makeASCIIStringMessage(OUTDATED_APP_NOTIFICATION, msgId, "Your app is outdated. Please update to the latest app version. " + "Ignoring this notice may affect your projects."), channel.voidPromise()); } log.info("{} {}-app ({}) joined.", user.email, user.appName, version); }
@Override protected void channelRead0(ChannelHandlerContext ctx, RegisterMessage message) { if (registrationLimitChecker.isLimitReached()) { log.error("Register Handler. Registration limit reached. {}", message); ctx.writeAndFlush(notAllowed(message.id), ctx.voidPromise());
private static volatile RegisterHandler instancia; private static final Object instanciaLockObject = new Object(); public static RegisterHandler getInstance() { if(instancia==null){ //SI ES NULL synchronized(instanciaLockObject) { if(instancia==null){ instancia = new RegisterHandler(); //LO INSTANCIAMOS } } } return instancia; }
boolean isNewSyncFormat = mobileStateHolder != null && mobileStateHolder.isNewSyncFormat(); user.profile.sendAppSyncs(dash, appChannel, ANY_TARGET, isNewSyncFormat); appChannel.flush();
@Override public Response onCompleted(Response response) { if (response.getStatusCode() != 200) { String errMessage = response.getResponseBody(); if (errMessage != null && errMessage.contains("expired")) { log.warn("Facebook token expired for user {}.", email); } else { log.warn("Error getting facebook token for user {}. Reason : {}", email, errMessage); } ctx.writeAndFlush(notAllowed(messageId), ctx.voidPromise()); return response; } try { String responseBody = response.getResponseBody(); FacebookTokenResponse facebookTokenResponse = JsonParser.parseFacebookTokenResponse(responseBody); if (email.equalsIgnoreCase(facebookTokenResponse.email)) { User user = holder.userDao.getByName(email, AppNameUtil.BLYNK); if (user == null) { user = holder.userDao.addFacebookUser(email, AppNameUtil.BLYNK); } login(ctx, messageId, user, version); } } catch (Exception e) { log.error("Error during facebook response parsing for user {}. Reason : {}", email, response.getResponseBody()); ctx.writeAndFlush(notAllowed(messageId), ctx.voidPromise()); } return response; }