From daa58b720d909b9bac811eb78e15dadf4c829506 Mon Sep 17 00:00:00 2001 From: Jayendra Date: Thu, 22 Aug 2019 14:36:47 +0530 Subject: [PATCH] Added user id in response of verifyOtp endpoint --- .../java/biz/nynja/airdrop/Application.java | 4 - .../airdrop/CassandraStartupScripts.java | 3 +- .../nynja/airdrop/constants/Constants.java | 5 +- .../airdrop/controller/AirdropController.java | 107 +++++++++--------- .../nynja/airdrop/grpc/AuthServiceClient.java | 3 - .../nynja/airdrop/kafka/KafkaConsumer.java | 5 +- .../nynja/airdrop/util/RestTemplateUtil.java | 2 +- 7 files changed, 62 insertions(+), 67 deletions(-) diff --git a/src/main/java/biz/nynja/airdrop/Application.java b/src/main/java/biz/nynja/airdrop/Application.java index 4394585..6acabe6 100644 --- a/src/main/java/biz/nynja/airdrop/Application.java +++ b/src/main/java/biz/nynja/airdrop/Application.java @@ -1,15 +1,11 @@ package biz.nynja.airdrop; -import biz.nynja.airdrop.entity.OtpSessions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration; -import java.util.*; - - @SpringBootApplication(exclude = KafkaAutoConfiguration.class) public class Application { diff --git a/src/main/java/biz/nynja/airdrop/CassandraStartupScripts.java b/src/main/java/biz/nynja/airdrop/CassandraStartupScripts.java index 1f8f7aa..59b91d2 100644 --- a/src/main/java/biz/nynja/airdrop/CassandraStartupScripts.java +++ b/src/main/java/biz/nynja/airdrop/CassandraStartupScripts.java @@ -8,7 +8,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.cassandra.core.CassandraTemplate; import org.springframework.stereotype.Component; - import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.List; @@ -37,6 +36,8 @@ public class CassandraStartupScripts { String createTableActionsFailed = "CREATE TABLE IF NOT EXISTS " + KEYSPACE + "." + cassandraTemplate.getTableName(ActionsFailed.class).toString() + " (id uuid, account_id uuid, username text, action_type text, action_detail text, created_ts bigint, channel text, PRIMARY KEY(id));"; String createTableTokens = "CREATE TABLE IF NOT EXISTS " + KEYSPACE + "." + cassandraTemplate.getTableName(Tokens.class).toString() + " (user text, access_token text, refresh_token text, app_token text, PRIMARY KEY(user));"; +// String createUsersIndex = "CREATE INDEX IF NOT EXISTS username_index ON " + KEYSPACE + "." + cassandraTemplate.getTableName(AirdropProfiles.class).toString() + " (username)"; + String insertJoinInActionsSummary = "INSERT INTO actions_summary(id, action, is_active, action_description) values(db4930e0-9639-11e9-b82a-85b089918b4d, '" + Constants.KafkaActionType.JOIN + "', 1, '') IF NOT EXISTS"; String insertContactInActionsSummary = "INSERT INTO actions_summary(id, action, is_active, action_description) values(f6829dd6-8db9-4c9a-9b5b-9809e020cab9, '" + Constants.KafkaActionType.CONTACT + "', 1, '') IF NOT EXISTS"; String inserInviteNewContactInActionsSummary = "INSERT INTO actions_summary(id, action, is_active, action_description) values(089f9607-604f-40b9-a8f0-83367cd8d976, '" + Constants.KafkaActionType.INVITE_NEW_CONTACT + "', 1, '') IF NOT EXISTS"; diff --git a/src/main/java/biz/nynja/airdrop/constants/Constants.java b/src/main/java/biz/nynja/airdrop/constants/Constants.java index 76ab5be..1215948 100644 --- a/src/main/java/biz/nynja/airdrop/constants/Constants.java +++ b/src/main/java/biz/nynja/airdrop/constants/Constants.java @@ -10,7 +10,6 @@ public interface Constants { } interface QoinProChannel { - String NYNJA = "nynja"; } @@ -56,13 +55,15 @@ public interface Constants { } + interface TokenUsers { String QOINPRO = "qoinPro"; } interface message { - String OTP_MESSAGE = "Your verification OTP is "; + // String OTP_MESSAGE = "Your verification OTP is "; + String OTP_MESSAGE = "The verification code for verifying your username on QoinPro is "; } // "accessToken": "eyJraWQiOiIyMDE5MDcxNSIsInR5cCI6IkpXVCIsImFsZyI6IkVTMjU2In0.eyJzdWIiOiJZVGM1TWpkalpHVXRNamhrWmkwMFpqWmlMVGxoWmpBdE4yRmlZV0l3TkdFeVpEUmwiLCJhdWQiOiJNVEl6OjEyMzoxMjMiLCJzY29wZSI6ImFjY2VzcyIsInJvbGVzIjpbIlVTRVIiXSwiaXNzIjoiaHR0cHM6Ly9hdXRoLm55bmphLmJpei8iLCJleHAiOjE1NjM5NzE2NDUsImlhdCI6MTU2MzM2Njg0NX0.ZY92lChPm37AsjmWpdWx-k307cADwY9-HghrsUAuRnih9l565RTw-0P3UVDZI9-VEjTtg-L4rx70QizDONv7NQ", diff --git a/src/main/java/biz/nynja/airdrop/controller/AirdropController.java b/src/main/java/biz/nynja/airdrop/controller/AirdropController.java index 9ae65c1..1ccaf96 100644 --- a/src/main/java/biz/nynja/airdrop/controller/AirdropController.java +++ b/src/main/java/biz/nynja/airdrop/controller/AirdropController.java @@ -7,7 +7,6 @@ import biz.nynja.airdrop.entity.AirdropActions; import biz.nynja.airdrop.entity.AirdropProfiles; import biz.nynja.airdrop.entity.OtpSessions; import biz.nynja.airdrop.grpc.AccountServiceClient; - import biz.nynja.airdrop.grpc.AuthServiceClient; import biz.nynja.airdrop.kafka.KafkaMessageTemplate; import biz.nynja.airdrop.kafka.KafkaProducer; @@ -27,15 +26,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; -import org.springframework.core.io.Resource; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; -import org.springframework.util.ResourceUtils; -import org.springframework.util.SerializationUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; @@ -45,16 +41,10 @@ import static biz.nynja.airdrop.util.HttpConstants.statusCode.*; import static biz.nynja.airdrop.util.HttpConstants.MessageTags.*; import java.io.*; -import java.net.URI; import java.net.URISyntaxException; -import java.net.URL; -import java.nio.file.FileSystems; -import java.nio.file.FileSystem; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.*; + /** * This Controller is for integration of Nynja Users with QuionPro * QuionPro will use this Controller for user verification through @@ -63,7 +53,7 @@ import java.util.*; * * @author Jayendra * @version 0.1 - * @package com.airdrop.controller + * @package biz.nynja.airdrop.controller * @link http:///airdrop * @since 2019-06-18 */ @@ -143,12 +133,6 @@ public class AirdropController { } - // AccountId -> 6065b9bf-a69c-4837-99bd-489065f106f1 (Jayendra) - // 564a1741-b98f-47c9-8de5-2b6a4753c7f3 -> (ramawat) - // 564a1741-b98f-47c9-8de5-2b6a4753c7f3 -> (vishal) - // 3dd830d4-ffa3-4327-9866-9f8d8efbb23c -> (vkgoriya1222) - - @GetMapping("/test/pushNotification/{username}/{password}") public String testPushNotification(@PathVariable("username") String username, @PathVariable("password") String password @@ -190,7 +174,6 @@ public class AirdropController { System.out.println("Test Response : "); System.out.println(response); System.out.println(""); - System.out.println(""); System.out.println("Response Body : "); System.out.println(response.getBody()); System.out.println(""); @@ -313,7 +296,7 @@ public class AirdropController { /*ObjectMapper objectMapper = new ObjectMapper(); Map response = objectMapper.readValue(AirdropController.class.getClassLoader().getResourceAsStream("token/token.json"), Map.class);*/ - Map tokens = tokensService.getToken(Constants.TokenUsers.QOINPRO); + Map tokens = tokensService.getToken(Constants.TokenUsers.QOINPRO); System.out.println(""); System.out.println("--------------"); @@ -363,7 +346,7 @@ public class AirdropController { System.out.println("Access Token would not update in Tokens File"); System.out.println(""); - // newTokenDetails.put("accessToken", authServiceClient.tokens.get("accessToken")); + // newTokenDetails.put("accessToken", authServiceClient.tokens.get("accessToken")); } if (refreshToken != null && !refreshToken.equals("")) { @@ -378,7 +361,7 @@ public class AirdropController { System.out.println("Refresh Token would not update in Tokens File"); System.out.println(""); - // newTokenDetails.put("refreshToken", authServiceClient.tokens.get("refreshToken")); + // newTokenDetails.put("refreshToken", authServiceClient.tokens.get("refreshToken")); } @@ -403,7 +386,7 @@ public class AirdropController { System.out.println(""); - boolean updateResponse = tokensService.updateToken(Constants.TokenUsers.QOINPRO, newTokenDetails); + boolean updateResponse = tokensService.updateToken(Constants.TokenUsers.QOINPRO, newTokenDetails); System.out.println(""); System.out.println("UpdateResponse"); @@ -859,7 +842,7 @@ public class AirdropController { @PostMapping(value = "/v1/verifyOtp", produces = "application/json") @Timed(value = "verifyOtp.request", histogram = true, extraTags = {"version", "0.1"}) public Map verifyOtp( - @RequestParam("username") String username, + // @RequestParam("username") String username, NOTE : No need for username validation as there can be conflict of username in qoinpro and nynja @RequestParam("otp") String otpString, @RequestParam("session_id") UUID sessionId // OTP SESSION-ID ) throws IOException { @@ -869,7 +852,7 @@ public class AirdropController { System.out.println(""); System.out.println("VERIFY OTP CONTROLLER"); System.out.println(""); - System.out.println("username : " + username); + // System.out.println("username : " + username); System.out.println("otp : " + otpString); System.out.println("sessionId : " + sessionId); System.out.println(""); @@ -878,7 +861,7 @@ public class AirdropController { logger.info("Verify Otp API"); logger.info("Parameters: "); - logger.info("username: " + username); + // logger.info("username: " + username); logger.info("otp: " + otpString); logger.info("sessionId: " + sessionId); @@ -900,7 +883,7 @@ public class AirdropController { } - if (username.equals("")) { + /* if (username.equals("")) { System.out.println(""); System.out.println("Username is blank"); @@ -909,24 +892,18 @@ public class AirdropController { logger.warn("username is blank"); return HttpResponse.getResponse(BAD_REQUEST_STATUS_CODE, null, USERNAME_IS_BLANK); - } - - /* - - // Here, Nynja Account Service will be called to Verify UserName - - */ + }*/ - // NOTE : This accountId will be fetched from Nynja Account Service - // NOTE : If user is not verified through account service then response will be: "is_verified" : 0 System.out.println(""); System.out.println("AccessToken : " + authServiceClient.tokens.get("access_token")); System.out.println(""); - UUID accountId = null; + // UUID accountId = null; - try { + + // No need to verify from Account Service. + /* try { accountId = accountServiceClient.verifyAccount(username, authServiceClient.tokens.get("access_token").toString()); @@ -953,9 +930,9 @@ public class AirdropController { System.out.println(""); accountId = accountServiceClient.verifyAccount(username, authServiceClient.tokens.get("access_token").toString()); - } + }*/ - if (accountId == null) { + /* if (accountId == null) { System.out.println(""); System.out.println("Account Service Validation Failed. No User with username : " + username); @@ -969,10 +946,10 @@ public class AirdropController { return HttpResponse.getResponse(BAD_REQUEST_STATUS_CODE, responseData, HttpConstants.MessageTags.AIRDROP_PROFILE_NOT_EXISTS); - } + }*/ // Get accountId from otpSessions no need of username - List airdropProfilesList = airdropProfilesService.getAirdropProfiles(accountId, null); + /* List airdropProfilesList = airdropProfilesService.getAirdropProfiles(accountId, null); if (airdropProfilesList.isEmpty()) { @@ -986,16 +963,7 @@ public class AirdropController { responseData.put("is_verified", Constants.VerificationStatus.NOT_VERIFIED); return HttpResponse.getResponse(BAD_REQUEST_STATUS_CODE, responseData, HttpConstants.MessageTags.AIRDROP_PROFILE_NOT_EXISTS); - } - - - AirdropProfiles airdropProfiles = airdropProfilesList.get(0); - - System.out.println(""); - System.out.println("Airdrop Profile"); - System.out.println(airdropProfiles); - System.out.println(""); - + }*/ OtpSessions otpSession = otpSessionsService.getOtpSessions(sessionId); @@ -1004,6 +972,7 @@ public class AirdropController { System.out.println(otpSession); System.out.println(""); + if (otpSession == null) { System.out.println(""); @@ -1018,7 +987,33 @@ public class AirdropController { // is_verified = 0 return HttpResponse.getResponse(BAD_REQUEST_STATUS_CODE, responseData, OTP_SESSION_NOT_EXISTS); - } else if (!airdropProfiles.getAccount_id().equals(otpSession.getAccount_id())) { + } + + List airdropProfilesList = airdropProfilesService.getAirdropProfiles(otpSession.getAccount_id(), null); + + + if (airdropProfilesList.isEmpty()) { + + System.out.println(""); + System.out.println("No, such Airdrop Profile exists"); + System.out.println(""); + + logger.warn("No, such Airdrop Profile exists"); + + Map responseData = new HashMap(1); + responseData.put("is_verified", Constants.VerificationStatus.NOT_VERIFIED); + + return HttpResponse.getResponse(BAD_REQUEST_STATUS_CODE, responseData, HttpConstants.MessageTags.AIRDROP_PROFILE_NOT_EXISTS); + } + + AirdropProfiles airdropProfiles = airdropProfilesList.get(0); + + System.out.println(""); + System.out.println("Airdrop Profile"); + System.out.println(airdropProfiles); + System.out.println(""); + + /*else if (!airdropProfiles.getAccount_id().equals(otpSession.getAccount_id())) { System.out.println(""); System.out.println("AccountId of OTPSession and Airdrop Profile doesn't matches"); @@ -1031,7 +1026,9 @@ public class AirdropController { return HttpResponse.getResponse(BAD_REQUEST_STATUS_CODE, responseData, INVALID_OTP_SESSION); - } else if (otpSession.getOtp() != otp) { + }*/ + + if (otpSession.getOtp() != otp) { System.out.println(""); System.out.println("OTP not matched"); @@ -1108,6 +1105,8 @@ public class AirdropController { responseData.remove("verified_ts"); responseData.remove("modified_ts"); + responseData.put("user_id", airdropProfiles.getId().toString()); + return HttpResponse.getResponse(SUCCESS_STATUS_CODE, responseData, null); } diff --git a/src/main/java/biz/nynja/airdrop/grpc/AuthServiceClient.java b/src/main/java/biz/nynja/airdrop/grpc/AuthServiceClient.java index 04e3476..a83c184 100644 --- a/src/main/java/biz/nynja/airdrop/grpc/AuthServiceClient.java +++ b/src/main/java/biz/nynja/airdrop/grpc/AuthServiceClient.java @@ -9,12 +9,9 @@ import io.grpc.Metadata; import io.grpc.netty.NettyChannelBuilder; import io.grpc.stub.MetadataUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; - import javax.annotation.PostConstruct; -import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.util.HashMap; diff --git a/src/main/java/biz/nynja/airdrop/kafka/KafkaConsumer.java b/src/main/java/biz/nynja/airdrop/kafka/KafkaConsumer.java index ca8d0ca..e6ed97b 100644 --- a/src/main/java/biz/nynja/airdrop/kafka/KafkaConsumer.java +++ b/src/main/java/biz/nynja/airdrop/kafka/KafkaConsumer.java @@ -110,8 +110,9 @@ public class KafkaConsumer { System.out.println(""); - // UNCOMMENT IT LATER - String response = restTemplateUtil.qoinProChannelEngagementAPI(airdropProfilesList.get(0).getAccount_id().toString(), airdropProfilesList.get(0).getUsername(), kafkaMessageTemplate.getEvent_type(), actionsSummary.getAction_description()); + // NOTE : Not using username as its not unique, using airdrop_profiles id for uniqueness. + // String response = restTemplateUtil.qoinProChannelEngagementAPI(airdropProfilesList.get(0).getAccount_id().toString(), airdropProfilesList.get(0).getUsername(), kafkaMessageTemplate.getEvent_type(), actionsSummary.getAction_description()); + String response = restTemplateUtil.qoinProChannelEngagementAPI(airdropProfilesList.get(0).getAccount_id().toString(), airdropProfilesList.get(0).getId().toString(), kafkaMessageTemplate.getEvent_type(), actionsSummary.getAction_description()); System.out.println(""); System.out.println("QOIN-PRO Channel Engagement API Response"); diff --git a/src/main/java/biz/nynja/airdrop/util/RestTemplateUtil.java b/src/main/java/biz/nynja/airdrop/util/RestTemplateUtil.java index 24df50a..1c7d496 100644 --- a/src/main/java/biz/nynja/airdrop/util/RestTemplateUtil.java +++ b/src/main/java/biz/nynja/airdrop/util/RestTemplateUtil.java @@ -71,7 +71,7 @@ public class RestTemplateUtil { public String qoinProChannelEngagementAPI(String userId, String username, String actionType, String actionDescription) { MultiValueMap params = new LinkedMultiValueMap<>(5); - params.add("userId", userId); + //params.add("userId", userId); params.add("userName", username); params.add("action", actionType); params.add("channel", "nynja"); -- GitLab