@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); } }
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)); } }
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); }
MobileLoginHandler appLoginHandler = new MobileLoginHandler(holder); var appShareLoginHandler = new MobileShareLoginHandler(holder); var userNotLoggedHandler = new UserNotLoggedHandler();
@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; }